Reto
Escriba un programa P, sin tomar ninguna entrada, de modo que la proposición "la ejecución de P finalmente termine" es independiente de la aritmética de Peano .
Reglas formales
(En caso de que sea un lógico matemático que piense que la descripción anterior es demasiado informal).
En principio, se puede convertir alguna máquina universal de Turing U (por ejemplo, su lenguaje de programación favorito) en una fórmula aritmética de Peano HALT sobre la variable p , donde HALT ( p ) codifica la proposición “ U termina en el programa ( codificado por Gödel por) p ". El desafío es encontrar p tal que ni HALT ( p ) ni ¬HALT ( p ) puedan probarse en la aritmética de Peano.
Puede suponer que su programa se ejecuta en una máquina ideal con memoria ilimitada y enteros / punteros lo suficientemente grandes como para acceder a ella.
Ejemplo
Para ver que tales programas existen, un ejemplo es un programa que busca exhaustivamente una prueba aritmética de Peano de 0 = 1. La aritmética de Peano demuestra que este programa se detiene si y solo si la aritmética de Peano es inconsistente. Dado que la aritmética de Peano es consistente pero no puede probar su propia consistencia , no puede decidir si este programa se detiene.
Sin embargo, hay muchas otras propuestas independientes de la aritmética de Peano en las que podría basar su programa.
Motivación
Este desafío se inspiró en un nuevo artículo de Yedidia y Aaronson (2016) que exhibe una máquina Turing de 7,918 estados cuya no determinación es independiente de ZFC , un sistema mucho más fuerte que la aritmética de Peano. Quizás te interese su cita [22]. Para este desafío, por supuesto, puede usar el lenguaje de programación que prefiera en lugar de las máquinas Turing reales.
x = 1.0; while (x) { x = x / 2.0; }
realmente se detendrá muy rápidamente.Respuestas:
Haskell, 838 bytes
"Si quieres que se haga algo, ..."
Explicación
Este programa busca directamente una prueba aritmética de Peano de 0 = 1. Como PA es consistente, este programa nunca termina; pero como PA no puede probar su propia consistencia, la no terminación de este programa es independiente de PA.
T
es el tipo de expresiones y proposiciones:A P
representa la proposición ∀ x [ P ( x )].(V 1 :$ P) :$ Q
representa la proposición P → Q .V 2 :$ P
representa la proposición ¬ P .(V 3 :$ x) :$ y
representa la proposición x = y .(V 4 :$ x) :$ y
representa el natural x + y .(V 5 :$ x) :$ y
representa la natural x ⋅ y .V 6 :$ x
representa el S natural ( x ) = x + 1.V 7
representa el 0 natural.En un entorno con i variables libres, codificamos expresiones, proposiciones y pruebas como matrices enteras 2 × 2 [1, 0; a , b ], como sigue:
Los axiomas restantes se codifican numéricamente y se incluyen en el entorno inicial Γ :
Una prueba con matriz [1, 0; a , b ] puede verificarse dada solo la esquina inferior izquierda a (o cualquier otro valor congruente con un módulo b ); los otros valores están ahí para permitir la composición de las pruebas.
Por ejemplo, aquí hay una prueba de que la suma es conmutativa.
Puede verificarlo con el programa de la siguiente manera:
Si la prueba no fuera válida, obtendría la lista vacía.
fuente