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 Hpara un oráculo de detención, hay un programa Py una entrada apara los cuales Hno se puede predecir correctamente lo que P(a)hace.
Teorema: Sea Hcualquier programa que tome dos entradas y siempre devuelva halto loop. Luego, existe un programa Qy una entrada aque se Q(a)detiene si, y solo si, H(Q,a)regresa loop.
Prueba. Considera el programa
program P(y):
if H(y,y) = halt then
loop forever
else:
return
Deje Q = Py a = P. Ya sea H(Q,a) = halto H(Q,a) = loop:
- si
H(Q,a) = haltentonces Q(a)(que es justo P(P)) se ejecuta para siempre según la definición de P.
- si
H(Q,a) = loopentonces se Q(a)detiene por la definición de P.
QED
Usted preguntó por qué lo consideramos en H(P,P)lugar de H(P,X)otro X. ¡La respuesta obvia es "porque H(P,P)es lo que hace que la prueba funcione"! Si H(P,X)usabas algo arbitrario X, entonces te quedarías atascado. De hecho, la prueba se vería así:
Prueba rota Considera el programa
program P(y):
if H(y,y) = halt then
loop forever
else:
return
Let Q = Py a = Xpara algunos arbitrarios X. Ya sea H(Q,X) = halto H(Q,X) = loop:
- supongamos
H(Q,X) = haltque no podemos decir qué P(X)hace, porque si se P(X)detiene depende de lo que H(X,X)regrese. Estamos atascados. Sin embargo, si supiéramos eso P(X)y X(X)somos iguales, podríamos avanzar. (Entonces, realmente deberíamos tomar X = P).
- si
H(Q,a) = loopentonces estamos atascados nuevamente, y nos despegaríamos si X = P.
No QED
Espero que esto muestre que debemos considerar H(P,P)para que nuestra idea funcione.