Défi
Écrivez un programme P, sans aucune entrée, de telle sorte que la proposition «l'exécution de P finit éventuellement» soit indépendante de l'arithmétique Peano .
Règles formelles
(Si vous êtes un logicien mathématique qui pense que la description ci-dessus est trop informelle.)
On peut, en principe, convertir une machine Universal Turing U (par exemple votre langage de programmation préféré) en une formule arithmétique Peano HALT sur la variable p , où HALT ( p ) encode la proposition « U se termine sur le programme ( codé par Gödel ) p ”. Le défi est de trouver p tel que ni HALT ( p ) ni ¬HALT ( p ) ne peuvent être prouvés en arithmétique Peano.
Vous pouvez supposer que votre programme s'exécute sur une machine idéale avec une mémoire illimitée et des entiers / pointeurs suffisamment grands pour y accéder.
Exemple
Pour voir que de tels programmes existent, un exemple est un programme qui recherche de manière exhaustive une preuve arithmétique Peano de 0 = 1. L'arithmétique Peano prouve que ce programme s'arrête si et seulement si l'arithmétique Peano est incohérente. Puisque l'arithmétique Peano est cohérente mais ne peut pas prouver sa propre cohérence , elle ne peut pas décider si ce programme s'arrête.
Cependant, il existe de nombreuses autres propositions indépendantes de l'arithmétique Peano sur lesquelles vous pouvez baser votre programme.
Motivation
Ce défi a été inspiré par un nouveau document de Yedidia et Aaronson (2016) présentant une machine de Turing à 7 918 états dont la non-terminaison est indépendante de ZFC , un système beaucoup plus puissant que l'arithmétique Peano. Vous pouvez être intéressé par sa citation [22]. Pour ce défi, bien sûr, vous pouvez utiliser le langage de programmation de votre choix à la place des machines Turing réelles.
x = 1.0; while (x) { x = x / 2.0; }
ci s'arrêtera en fait très rapidement.Réponses:
Haskell, 838 octets
"Si vous voulez que quelque chose soit fait, ..."
Explication
Ce programme recherche directement une preuve arithmétique Peano de 0 = 1. Puisque PA est cohérent, ce programme ne se termine jamais; mais comme l'AP ne peut pas prouver sa propre cohérence, la non-terminaison de ce programme est indépendante de l'AP.
T
est le type d'expressions et de propositions:A P
représente la proposition ∀ x [ P ( x )].(V 1 :$ P) :$ Q
représente la proposition P → Q .V 2 :$ P
représente la proposition ¬ P .(V 3 :$ x) :$ y
représente la proposition x = y .(V 4 :$ x) :$ y
représente le x + y naturel .(V 5 :$ x) :$ y
représente le x ⋅ y naturel .V 6 :$ x
représente le S naturel ( x ) = x + 1.V 7
représente le naturel 0.Dans un environnement avec i variables libres, nous codons les expressions, propositions et preuves sous forme de matrices entières 2 × 2 [1, 0; a , b ], comme suit:
Les axiomes restants sont codés numériquement et inclus dans l'environnement initial Γ :
Une preuve avec matrice [1, 0; a , b ] peut être vérifiée étant donné uniquement le coin inférieur gauche a (ou toute autre valeur congruente à un modulo b ); les autres valeurs sont là pour permettre la composition des épreuves.
Par exemple, voici une preuve que l'addition est commutative.
Vous pouvez le vérifier avec le programme comme suit:
Si la preuve n'était pas valide, vous obtiendriez la liste vide à la place.
la source