P′′
| P′′ | |
|---|---|
| Paradigm | Imperative, structured |
| Designed by | Corrado Böhm |
| First appeared | 1964 |
| Typing discipline | untyped |
| Website | {{ |
| 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 , as follows:
Syntax
[edit | edit source]- and are words in P′′.
- If and are words in P′′, then is a word in P′′.
- If is a word in P′′, then is a word in P′′.
- Only words derivable from the previous three rules are words in P′′.
Semantics
[edit | edit source]- is the tape-alphabet of a Turing machine with left-infinite tape, being the blank symbol, equivalent to .
- All instructions in P′′ are permutations of the set 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.
- means move the tape-head rightward one cell (if possible).
- means replace the current symbol with , and then move the tape-head leftward one cell.
- means the function composition . In other words, the instruction is performed before .
- means iterate 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 where with denoting the -th iterate of , and . These are the equivalents of the six respective Brainfuck commands [, ], +, -, <, >. Note that since , incrementing the current symbol times will wrap around so that the result is to "decrement" the symbol in the current cell by one ().
This article's factual accuracy is disputed. (December 2025)
Example program
[edit | edit source]Böhm[2] gives the following program to compute the predecessor of an integer :[5] where (the -th iterate of ),
The program expects an integer to be represented in bijective base-k notation, with encoding the digits respectively, and to have before and after the digit‑string. (E.g. in bijective base‑2 the number eight would be encoded as , as .) At the beginning and end of the computation, the tape‑head is on the preceding the digit‑string. The output is , the bijective base‑2 encoding for 7. Here, .
This example translates directly to the equivalent Brainfuck program:
>[>]<[−[<[<]]−<]>+
Notes
[edit | edit source]- ^ GitHub 2021.
- ^ a b c Böhm 1964.
- ^ Böhm & Jacopini (1966) (Note: This is the most-cited paper on the structured program theorem.)
- ^ Böhm & Jacopini 1966.
- ^ 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).
External links
[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).