Suvarna Garge (Editor)

P′′

Updated on
Edit
Like
Comment
Share on FacebookTweet on TwitterShare on LinkedInShare on Reddit
Paradigm
  
Imperative, structured

First appeared
  
1964

Designed by
  
Corrado Böhm

Typing discipline
  
untyped

P′′ is a primitive computer programming language created by Corrado Böhm in 1964 to describe a family of Turing machines.

Contents

Definition

P (hereafter written P′′) is formally defined as a set of words on the four-instruction alphabet {R, λ, (, )}, as follows:

Syntax

  1. R and λ are words in P′′.
  2. If p and q are words in P′′, then pq is a word in P′′.
  3. If q is a word in P′′, then (q) is a word in P′′.
  4. Only words derivable from the previous three rules are words in P′′.

Semantics

  • {a0, a1, ..., an}(n ≥ 1) is the tape-alphabet of a Turing machine with left-infinite tape, a0 being the blank symbol.
  • R means move the tape-head rightward one cell (if any).
  • λ means replace the current symbol ai by a(i+1) mod (n+1), and then move the tape-head leftward one cell.
  • (q) means iterate q in a while loop, with condition that the current symbol is not a0.
  • A program is a word in P′′. Execution of a program proceeds left-to-right, executing R, λ, and (q) as they are encountered, until there is nothing more to execute.
  • Relation to other programming languages

  • P′′ was the first "GOTO-less" imperative structured programming language to be proven Turing-complete
  • The brainfuck language (apart from its I/O commands) is a minor informal variation of P′′
  • Example program

    Böhm gives the following program to compute the predecessor (x-1) of an integer x > 0:

    R ( R ) L ( r' ( L ( L ) ) r' L ) R r

    which translates directly to the equivalent brainfuck program:

    > [ > ] < [ − [ < [ < ] ] − < ] > +

    The program expects an integer to be represented in bijective base-n notation, with a1, ..., an coding the digits 1,...,n, respectively, and to have an a0 before and after the digit-string. (E.g. in bijective base-2, the number eight would be encoded as a0a1a1a2a0, because 8 = 1*22 + 1*21 + 2*20.) At the beginning and end of the computation, the tape-head is on the a0 preceding the digit-string.

    References

    P′′ Wikipedia