Tengo problemas para comprender la prueba de la indecidibilidad del problema de detención.
Si devuelve si el programa a se detiene o no en la entrada b , ¿por qué tenemos que pasar el código de P para a y b ?
¿Por qué no podemos alimentar con P y alguna entrada arbitraria, por ejemplo, x ?
Respuestas:
La prueba tiene como objetivo encontrar una contradicción. Debe comprender cuál es la contradicción derivada, para comprender por qué se utiliza como una entrada para sí mismo. La contradicción es, informalmente: si tenemos una máquina H (a, b) que decide "a acepta b", entonces podemos construir una máquina que acepte máquinas que no se aceptan a sí mismas. (Leer que un par de veces hasta que lo haga.) La máquina que se muestra en la imagen - llamémoslo M - M ( P ) = no P no acepta ⟨ P ⟩ ?P M M(P)= P ⟨P⟩
La contradicción ocurre cuando se pregunta: Qué aceptar ⟨ M ⟩ ? Intenta resolver las dos opciones para ver cómo hay una contradicción.M ⟨M⟩
acepta ⟨ M ⟩ si y sólo si M no acepta ⟨ M ⟩ ; Esto es claramente una contradicción.M ⟨M⟩ M ⟨M⟩
Esta es la razón por la cual es esencial que la prueba ejecute sobre sí misma, no alguna entrada arbitraria. Este es un tema común en las pruebas de imposibilidad conocidas como argumentos diagonales.P
fuente
Ignora la imagen por un momento; Lo veremos en breve. Se supone que el programa es un probador de alto: cuando le damos a H una entrada de un programa a (piense en a como la lista de un programa) y cualquier cosa para b , H ( a , b ) actúa de la siguiente maneraH(a,b) H a a b H(a,b)
El argumento de que es imposible de construir se basa en la acción de un programa "perverso" particular, P , uno que usa H como subrutina. P toma como entrada una lista de cualquier programa, x , y hace lo siguiente:H P H P x
No es difícil ver eso
Hasta ahora todo bien: sin duda será un programa siempre que su subrutina H sea un programa.P H
fuente
H
no recibe llamadas más de una vez, no hay recurrencia enP
absoluto.H(P, P)
no se ejecutaP
, simplemente "mágicamente" determina si seP
detiene o no cuando se pasa a sí mismo.H(P,P)
no tiene que ejecutarseP
, pero debe ejecutarseH(x ↦ H(x,x), P)
como parte de la determinación de si seP
detiene. Lo que se expandeH(x ↦ H(y ↦ H(y,y), x), P)
y así sucesivamente.H
no se especifica en esta prueba. Entonces, no, no tiene que ejecutar nada, ya sea esoP
mismo. La prueba comienza con la suposición de queH
existe algún tipo de programa que mágicamente decide el problema de detención, luego pasa a demostrar que la existencia de tal programa sería una contradicción, y por lo tanto no existe tal programa.Prueba una prueba más bonita con animaciones. Y dado que los mensajes deben contener algo más que un enlace a un sitio, esta es la respuesta a su pregunta.
Primero, recordemos cómo funciona la prueba de la no existencia del oráculo de detención. Demostramos que dado cualquier candidato
H
para un oráculo de detención, hay un programaP
y una entradaa
para los cualesH
no se puede predecir correctamente lo queP(a)
hace.Teorema: Sea
H
cualquier programa que tome dos entradas y siempre devuelvahalt
oloop
. Luego, existe un programaQ
y una entradaa
que seQ(a)
detiene si, y solo si,H(Q,a)
regresaloop
.Prueba. Considera el programa
Deje
Q = P
ya = P
. Ya seaH(Q,a) = halt
oH(Q,a) = loop
:H(Q,a) = halt
entoncesQ(a)
(que es justoP(P)
) se ejecuta para siempre según la definición deP
.H(Q,a) = loop
entonces seQ(a)
detiene por la definición deP
.QED
Usted preguntó por qué lo consideramos en
H(P,P)
lugar deH(P,X)
otroX
. ¡La respuesta obvia es "porqueH(P,P)
es lo que hace que la prueba funcione"! SiH(P,X)
usabas algo arbitrarioX
, entonces te quedarías atascado. De hecho, la prueba se vería así:Prueba rota Considera el programa
Let
Q = P
ya = X
para algunos arbitrariosX
. Ya seaH(Q,X) = halt
oH(Q,X) = loop
:H(Q,X) = halt
que no podemos decir quéP(X)
hace, porque si seP(X)
detiene depende de lo queH(X,X)
regrese. Estamos atascados. Sin embargo, si supiéramos esoP(X)
yX(X)
somos iguales, podríamos avanzar. (Entonces, realmente deberíamos tomarX = P
).H(Q,a) = loop
entonces estamos atascados nuevamente, y nos despegaríamos siX = P
.No QED
Espero que esto muestre que debemos considerar
H(P,P)
para que nuestra idea funcione.fuente
El resultado de la prueba es esta analogía:
fuente