P′′

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

P′′
ParadigmImperative, structured
Designed byCorrado Böhm
First appeared1964
Typing disciplineuntyped
Website{{#property:P856}}
Dialects
Brainfuck
Influenced
Brainfuck

P′′ (P double prime)[1] is a primitive computer programming language created by Corrado Böhm[2][3] in 1964 to describe a family of Turing machines.

Definition

[edit | edit source]

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

Syntax

[edit | edit source]
  1. R and λ are words in P′′.
  2. If q1 and q2 are words in P′′, then q1q2 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

[edit | edit source]
  • {,c1,c2,,cn} is the tape-alphabet of a Turing machine with left-infinite tape, being the blank symbol, equivalent to c0.
  • All instructions in P′′ are permutations of the set X of all possible tape configurations; that is, all possible configurations of both the contents of the tape and the position of the tape-head.
  • α is a predicate saying that the current symbol is not . It is not an instruction and is not used in programs, but is instead used to help define the language.
  • R means move the tape-head rightward one cell (if possible).
  • λ means replace the current symbol ci with c(i+1)mod(n+1), and then move the tape-head leftward one cell.
  • q1q2 means the function composition q2q1. In other words, the instruction q1 is performed before q2.
  • (q) means iterate q in a while loop, with the condition α.

Relation to other programming languages

[edit | edit source]
  • P′′ was the first "GOTO-less" imperative structured programming language to be proven Turing-complete[2][4]
  • The Brainfuck language (apart from its I/O commands) is a minor informal variation of P′′. Böhm gives explicit P′′ programs for each of a set of basic functions sufficient to compute any computable function, using only (, ) and the four words r,r,L,R where rλR,rrn with rn denoting the n-th iterate of r, and Lrλ. These are the equivalents of the six respective Brainfuck commands [, ], +, -, <, >. Note that since cn+1c0, incrementing the current symbol n times will wrap around so that the result is to "decrement" the symbol in the current cell by one (r).

Example program

[edit | edit source]

Böhm[2] gives the following program to compute the predecessor (x1) of an integer x>0:[5] R(R)L(r(L(L))rL)Rr where rλR,rrn(the n-th iterate of r),Lrλ

The program expects an integer to be represented in bijective base-k notation, with c1,c2,,ck encoding the digits 1,2,,k respectively, and to have before and after the digit‑string. (E.g. in bijective base‑2 the number eight would be encoded as c1c1c2, as 8=122+121+220.) At the beginning and end of the computation, the tape‑head is on the preceding the digit‑string. The output is c1c1c1, the bijective base‑2 encoding for 7. Here, n=2.

This example translates directly to the equivalent Brainfuck program:

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

Notes

[edit | edit source]
  1. ^ GitHub 2021.
  2. ^ a b c Böhm 1964.
  3. ^ Böhm & Jacopini (1966) (Note: This is the most-cited paper on the structured program theorem.)
  4. ^ Böhm & Jacopini 1966.
  5. ^ R(R)(λRλRλ)((λRλR)((λRλRλ)(λRλRλ))(λRλR)(λRλRλ))R(λR)

References

[edit | edit source]
  • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).. Republished in Yourdon 1979, pp. 13–25
  • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
[edit | edit source]
  • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).: Demonstrating the iterative 99 Bottles of Beer song construed in 337568 P′′ instructions.
  • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).