(en adelante escrito P′′ ) se define formalmente como un conjunto de palabras del alfabeto de cuatro instrucciones , de la siguiente manera:
Sintaxis
y son palabras en P''.
Si y son palabras en P′′, entonces es una palabra en P′′.
Si es una palabra en P′′, entonces es una palabra en P′′.
Sólo las palabras derivables de las tres reglas anteriores son palabras en P′′.
Semántica
es el alfabeto de cinta de una máquina de Turing con cinta infinita a la izquierda, siendo el símbolo en blanco , equivalente a .
Todas las instrucciones en P′′ son permutaciones del conjunto de todas las configuraciones de cinta posibles; es decir, todas las configuraciones posibles tanto del contenido de la cinta como de la posición del cabezal de la cinta.
es un predicado que dice que el símbolo actual no es . No es una instrucción y no se utiliza en programas, sino que se utiliza para ayudar a definir el lenguaje.
significa mover el cabezal de la cinta una celda hacia la derecha (si es posible).
significa reemplazar el símbolo actual con y luego mover el cabezal de la cinta una celda hacia la izquierda.
El lenguaje Brainfuck (aparte de sus comandos de E/S) es una variación informal menor de P′′. Böhm proporciona programas P′′ explícitos para cada una de un conjunto de funciones básicas suficientes para calcular cualquier función computable , utilizando solo , y las cuatro palabras donde con que denotan la iteración de , y . Estos son los equivalentes de los seis comandos Brainfuck respectivos [ , ] , + , - , < , > . Tenga en cuenta que desde , incrementar el símbolo actual veces se repetirá de manera que el resultado sea "decrementar" el símbolo en la celda actual en uno ( ).
Programa de ejemplo
Böhm [2] da el siguiente programa para calcular el predecesor ( x -1) de un entero x > 0:
que se traduce directamente al programa Brainfuck equivalente :
> [ > ] < [ − [ < [ < ]] − < ] > +
El programa espera que un entero se represente en notación biyectiva base-k , con codificación de los dígitos respectivamente, y que tenga antes y después de la cadena de dígitos. (Por ejemplo, en base-2 biyectiva, el número ocho se codificaría como , porque 8 en base-2 es 100, invierta los dígitos y agregue uno a cada uno de ellos). Al principio y al final del cálculo, el cabezal de la cinta está en el precedente de la cadena de dígitos.
Referencias
^ "PDBL: una herramienta para la simulación de máquinas de Turing". GitHub . 4 de septiembre de 2021.
^ abc Böhm, C.: "Sobre una familia de máquinas de Turing y el lenguaje de programación relacionado", ICC Bull. 3, 185-194, julio de 1964.
^ ab Böhm, C. y Jacopini, G.: "Diagramas de flujo, máquinas de Turing y lenguajes con sólo dos reglas de formación", CACM 9(5), 1966. (Nota: Este es el artículo más citado sobre el teorema del programa estructurado ).
Enlaces externos
Intérprete en línea: Demostración de la canción iterativa 99 Botellas de Cerveza interpretada en 337568 instrucciones P" .