¿Cómo obtengo el teorema de incompletitud de Godel?

En primer lugar, hay dos teoremas de incompletitud. La espectacular derivación de Gödel todavía se considera una hazaña de gran virtuosismo técnico y si lo desea (y tiene los antecedentes lógicos y matemáticos) para leerlo, puede encontrar el documento original con anotaciones modernas (y enlaces de hipertexto LaTeX útiles), aquí: http: //www.research.ibm.com/peop…

Sin embargo, durante el siglo pasado, los matemáticos han encontrado formas más fáciles de derivar los teoremas de incompletitud. De hecho, la prueba de Gödel era una forma de evitar un concepto fundamental que le faltaba en ese momento: una computadora. Si está familiarizado con los modelos teóricos de cómputo, como las máquinas de Turing o el cálculo lambda de Church, la prueba puede acortarse considerablemente. Si no es un informático teórico pero tiene una comprensión básica de lo que son una computadora y un programa, puede seguir el razonamiento informal a continuación.

Primero suponga que el teorema de incompletitud es falso. Es decir, existe un sistema formal consistente y computable [matemática] F [/ matemática] dentro del cual cualquier declaración sobre enteros puede ser probada o refutada (es decir, un sistema completo ). Aquí, [math] F [/ math] se supone que es lo suficientemente expresivo como para poder representar aritmética en números naturales. Dada una declaración particular [matemática] p [/ matemática] en el sistema, puede diseñar un programa de computadora que busque en todas las pruebas en [matemática] F [/ matemática] hasta que encuentre una que pruebe [matemática] p [/ matemática] o no [matemática] p [/ matemática] (su contradicción). Como [math] F [/ math] es consistente y completo, se garantizará que el programa arroje el resultado correcto. Además, podría usar esta estrategia para determinar si un programa de computadora dado [matemática] P [/ matemática] se detiene para una determinada entrada (esto puede parecer descabellado pero se debe simplemente al hecho de que la declaración “[matemática] P [/ matemática] ] se detiene en la entrada [math] x [/ math] “es equivalente a una declaración sobre enteros). Llamamos [math] H [/ math] al programa que, para un par dado de entrada de programa [math] (P, x) [/ math], decide si [math] P [/ math] se detendrá en la entrada correspondiente [matemáticas] x [/ matemáticas].

¿Qué sucede si modificamos [math] H [/ math] para escribir un nuevo programa [math] H ‘[/ math] que se comporte de la siguiente manera?

– [math] H ‘[/ math] se ejecuta para siempre (por ejemplo, al ingresar un bucle interminable) si se demuestra que [math] P [/ math] se detiene dado su propio código como entrada;
– se detiene si se demuestra que [math] P [/ math] se ejecuta para siempre dado su propio código de entrada.

Ahora, mire de cerca lo que sucede mientras alimentamos [math] H ‘[/ math] su propio código como entrada. O [math] H ‘[/ math] se ejecuta para siempre si se demuestra que detiene dado su propio código como entrada (que es lo que hemos hecho) o se detiene si se demuestra que se ejecuta para siempre. Hay una contradicción obvia aquí. Por lo tanto, [math] H ‘[/ math] se ejecutará para siempre sin descubrir una prueba de que se detiene o se ejecuta para siempre. Este es el primer teorema de incompletitud.

La derivación del segundo teorema de incompletitud se realiza formalizando la prueba anterior dentro del propio sistema. Te preguntarás por qué el argumento que acabamos de dar no es en sí mismo una prueba de que [math] H ‘[/ math] se ejecutará para siempre. ¿Por qué [math] H ‘[/ math] no descubriría esta prueba al explorar [math] F [/ math] y, por lo tanto, detenerse y, por lo tanto, correr para siempre, etc.?

La resolución de esa paradoja proviene de uno de nuestros primeros supuestos, a saber, que [math] F [/ math] es consistente. En un sistema consistente, ya sea [math] H ‘[/ math] se detiene o se ejecuta para siempre, no puede ser ambos. Pero no puede probar eso dentro de [matemáticas] F [/ matemáticas] en sí, ya que si pudiera, traería de vuelta la contradicción mencionada anteriormente. Por lo tanto, un sistema que demuestra su propia consistencia es en última instancia inconsistente y los sistemas consistentes son necesariamente incompletos (ya que hay declaraciones que no pueden probar, como su propia consistencia). Este resultado es el segundo teorema de incompletitud.

Fuente: http://www.scottaaronson.com/dem…

El recorrido más accesible de esto probablemente se encuentre en el libro ganador del Premio Pulitzer, Gödel, Escher, Bach (libro de 1979).

Una “prueba de libro” del argumento original de Godel es la siguiente. Considere un sistema axiomático que deduce cosas de los axiomas usando un programa de computadora (cualquier sistema axiomático servirá). Supongamos que este sistema axiomático también puede probar teoremas sobre programas de computadora (eso no es un gran truco, los programas de computadora son solo enteros grandes, el contenido de la memoria, que cambia de acuerdo con reglas definidas en cada paso del tiempo).

Luego puede escribir el programa GODEL para hacer lo siguiente:

1. Imprima su código en una variable R
2. Deduzca las consecuencias de los axiomas, busque el teorema “R no se detiene”.
3. Cuando encuentre que el sistema probó este teorema, deténgase.

Este programa solo se detendrá cuando el sistema demuestre que no lo hace. Esto significa que el sistema prueba que GODEL se detiene, en cuyo caso el sistema demuestra una contradicción (prueba que el programa no se detiene, y también, el programa se detiene), o no prueba que GODEL se detiene, en el cual caso GODEL no se detiene, y el sistema no puede probarlo. Es completamente obvio.

Para llenar los vacíos técnicos, solo necesita convencerse de que cualquier programa puede incluir una subrutina para imprimir su código en una variable. La única parte difícil es imprimir el código de la subrutina en la variable sin una regresión infinita, pero esto solo requiere duplicar una variable, es un buen truco y es simple de hacer. Godel y Turing hicieron algo equivalente al proporcionar el código al programa como entrada, pero esto no es necesario.

La otra brecha técnica está demostrando que existe un procedimiento para deducir las consecuencias de un sistema de axiomas. Este Godel demostró en 1930, es el teorema de integridad de la lógica (de primer orden).

La afirmación “GODEL no se detiene” es equivalente a “el sistema es consistente”, como se mostró en el párrafo siguiente (es obvio, si GODEL se detiene, el sistema es inconsistente, si el sistema es inconsistente prueba todo eventualmente, incluso ” GODEL no se detiene “, momento en el que GODEL se detiene). Este es el segundo teorema de incompletitud.

La modificación final es encontrar una declaración que no se pueda probar, y tampoco se puede probar su negación. Esto es más sutil, porque el sistema puede probar que “GODEL se detiene” sin ninguna contradicción, porque GODEL todavía no puede detenerse sin importar lo que diga el sistema. El sistema no sería inconsistente, solo mentiría sobre programas de computadora. Esta es una “inconsistencia omega” pero no una inconsistencia.

Para hacer esto, escribe ROSSER:

1. imprime su código en una variable R
2. deduce las consecuencias buscando a. R no imprime en la pantalla b. R imprime en la pantalla
3. si encuentra a, imprime “hola” y se detiene, si encuentra b, se detiene sin imprimir nada

Los enunciados “ROSSER no imprime” y “ROSSER imprime” no pueden demostrarse sin contradicción, ya que ambos conducen a un estado de detención que contradice la prueba.