J'ai essayé de rechercher des explications sur Google, mais la plupart des liens ne disent que des choses comme "FRACTRAN est complet. À titre d'exemple, regardons la multiplication."
Je me souviens avoir vu un article du forum xkcd dire que FRACTRAN avait aidé l'affiche à comprendre l'intégralité de Turing. Je cherche une explication intuitive pour expliquer pourquoi cet esolang est Turing complet, car ce n'est pas très évident en regardant la mécanique du langage.
turing-completeness
moucheron
la source
la source
Réponses:
Pour qu'un langage impératif soit complet, il doit avoir:
FRACTRAN est un langage composé d'une série de fractions qui stockent ses données dans les exposants des nombres premiers.
Disons que vous voulez ajouter deux nombres: 2 a 3 b devient 5 ab
C'est un programme FRACTRAN pour faire le changement ci-dessus.
Vous commencez avec un nombre comme 72 (2 3 3 2 ). Le programme va «en avant» jusqu'à ce qu'il trouve un nombre qui, multiplié par l'instruction, est un autre entier (aucun reste autorisé).
72
se poursuivra jusqu'à ce qu'il arrive à11/2
. Il sera alors diviser par le nombre2
et le multiplier par11
(la puissance en 11 est une variable). Cela donne396
.396
est divisible par 33 (en réduisant la puissance 3 et la 11) et multiplié par 455 (en incrémentant 5, 7 et 13 variables). Etc. La description complète de ce programme et son tableau d'état peuvent être lus sur la page wikipedia de FRACTRAN , y compris un très joli gif animé du programme ci-dessus.D'autres documents FRACTRAN sur Stack Exchange qui touchent à l'exhaustivité de Turing peuvent être trouvés sur: Convert Fractran into Brainfuck (ok, c'est une utilisation vraiment productive de son temps)
Une partie de l'astuce ici (et cela commence à s'égarer dans la théorie) est que dans les coulisses, il s'agit d'une machine à registre Minsky pour laquelle il a été prouvé que certaines bandes (programmes) sont des machines de Turing SI la bande est représentée comme un nombre Gödel qui est exactement ce que le numéro FRACTRAN est (à partir de la page wikipedia liée):
Donc, nous avons des boucles conditionnelles, des variables arbitraires stockées sous forme de nombres de Gödel, nous avons une machine de Turing.
Une autre lecture amusante qui touche la Collatz comme la nature de FRACTRAN peut être lue sur Can't Decide? Undecide! qui relient la conjecture de Collatz à FRACTRAN et le problème d'arrêt.
FRACTRAN est un peu difficile à comprendre.
Considérez le programme comme:
En cela, chaque bloc est de la forme:
La première déclaration du programme de multiplication ci-dessus:
Serait écrit sous cette forme:
Et ainsi, vous pouvez voir clairement le stockage de données et les constructions en boucle nécessaires pour l'exhaustivité de Turing. C'est très rudimentaire, mais il existe et fonctionne comme une simple machine à enregistrer - mais c'est tout ce que vous devez vraiment faire.
Toujours pas convaincu?
Cela emprunte en grande partie à une conférence de Dimitri Hendricks sur les modèles de calcul
Cela prend le programme très simple
(2/3)
qui est un additionneur (2 a 3 b -> 3 a + b ) Mais il est destructeur - la valeur de 2 est effacée dans le cadre du processus.Permet d'écrire un FRACTRAN de niveau supérieur qui rend facile de ne pas faire une telle destruction.
Le programme original pourrait être considéré comme:
Dans F 2 , on peut spécifier des «fonctions» d'une sorte.
Pour convertir un programme F 2 (P) en programme FRACTRAN standard, on fait:
devient:
Ce que cela a fait, c'est utiliser les nombres premiers p, q, r et s pour stocker l'état du programme.
Et puis nous avons la machine à registres ... elle a un nombre fini de registres qui stockent des nombres arbitraires et deux instructions:
Il a été démontré que cette machine d'enregistrement est Turing terminée.
Il va ensuite montrer le processus sur plusieurs diapositives de compilation d' un programme machine de registre dans un programme FRACTRAN dans le cadre d'un processus mécanique.
Fondamentalement:
Et donc du fait de l'équivalence entre ces deux modèles de calcul, FRACTRAN est Turing complet.
Btw, si vous voulez vraiment avoir le souffle coupé , lisez Code Golf: Fractran dans lequel certaines personnes ont écrit un programme FRACTRAN pour exécuter un autre programme FRACTRAN.
la source