Estaba viendo las " Cinco etapas de aceptar las matemáticas constructivas " de Andrej Bauer y dice que hay dos tipos de prueba por contradicción (o dos cosas que los matemáticos llaman prueba por contradicción):
- Suponga que es falso ... bla, bla, bla, contradicción. Por lo tanto, es cierto.P
- Suponga que es cierto ... bla, bla, bla, contradicción. Por lo tanto, es falso.
El primero es equivalente a la Ley del Medio Excluido (LEM) y el segundo es cómo demostrar la negación.
La prueba de la indecidibilidad del Problema de detención (HP) es una prueba por contradicción: suponga que hay una máquina que puede decidir el HP ... bla, bla, bla, contradicción. Por lo tanto, no existe.
Entonces, que sea " existe y puede decidir el HP". Suponga que es cierto ... bla, bla, bla, contradicción. Por lo tanto, es falso.
Este parece ser el segundo tipo de prueba por contradicción, ¿entonces es posible demostrar la indecidibilidad del problema de detención en Coq (sin asumir LEM)?
EDITAR: Me gustaría ver algunos puntos sobre probar esto usando la contradicción. Sé que esto también se puede probar utilizando la diagonalización.
fuente
Respuestas:
Tiene toda la razón en que el problema de detención es un ejemplo del segundo tipo de "prueba por contradicción": en realidad es solo una afirmación negativa.
Supongamos que
decides_halt(M)
es un predicado que dice que la máquinaM
decide si su entrada es una máquina que se detiene (es decir,M
es un programa que para alguna máquinam
y entradai
, decide si sem
detiene en la entradai
).Olvidando por un momento cómo probarlo, el problema de detención es la afirmación de que no hay máquina que decida el problema de detención. Podríamos decir esto en Coq como
(exists M, decides_halt M) -> False
, o tal vez preferimos decir que cualquier máquina no resuelve el problema de detenciónforall M, decides_halt M -> False
. Resulta que sin ningún axioma estas dos formalizaciones son equivalentes en Coq. (He explicado la prueba para que pueda ver cómo funciona, ¡perofirstorder
lo hará todo!)Creo que cualquiera de las afirmaciones no es demasiado difícil de demostrar como un argumento de diagonalización, aunque formalizar máquinas, la computabilidad y la detención probablemente sea un desafío razonable. Para un ejemplo más simple, no es demasiado difícil de demostrar el teorema de diagonalización de Cantor (ver https://github.com/bmsherman/finite/blob/master/Iso.v#L277-L291 para una prueba de que
nat -> nat
ynat
no son isomorfos).La diagonalización anterior da un ejemplo de cómo se podría derivar una contradicción de un isomorfismo entre
nat -> nat
ynat
. Aquí está la esencia de esa prueba en línea como un ejemplo autónomo:Incluso sin mirar los detalles, podemos ver en la declaración que esta prueba toma la mera existencia de una biyección y demuestra que es imposible. Primero le damos a los dos lados de la biyección los nombres
seq
yindex
. La clave es que el comportamiento de la biyección en la secuencia especialf := fun n => S (seq n n)
y su índiceindex f
es contradictorio. La prueba del problema de detención derivaría una contradicción de una manera similar, instanciando su hipótesis sobre una máquina que resuelve el problema de detención con una máquina cuidadosamente elegida (y en particular una que realmente depende de la máquina supuesta).fuente