Experimente uma prova mais bonita com animações. E como os ansewrs devem conter mais do que apenas um link para um site, aqui está a resposta para sua pergunta.
Primeiro, vamos relembrar como funciona a prova da inexistência do oráculo Halting. Provamos que, dado qualquer candidato Ha um oráculo Halting, existe um programa Pe uma entrada apara os quais Hfalha em prever corretamente o que P(a)faz.
Teorema: Seja Hqualquer programa que aceite duas entradas e sempre retorne haltou loop. Então existe um programa Qe uma entrada aque Q(a)interrompe se, e somente se, H(Q,a)retorna loop.
Prova. Considere o programa
program P(y):
if H(y,y) = halt then
loop forever
else:
return
Let Q = Pe a = P. De qualquer H(Q,a) = haltou H(Q,a) = loop:
- se
H(Q,a) = haltentão Q(a)(o que é justo P(P)) corre eternamente pela definição deP .
- se
H(Q,a) = loopentão Q(a)parar pela definição de P.
QED
Você perguntou por que pensamos em H(P,P)vez de H(P,X)por outro X. A resposta óbvia é "porque H(P,P)é o que faz a prova funcionar"! Se você usasse H(P,X)algo arbitrário X, ficaria preso. De fato, a prova ficaria assim:
Prova quebrada. Considere o programa
program P(y):
if H(y,y) = halt then
loop forever
else:
return
Vamos Q = Pe a = Xpara alguns arbitrários X. De qualquer H(Q,X) = haltou H(Q,X) = loop:
- suponha
H(Q,X) = haltque não possamos dizer o que P(X)faz, porque se P(X)parar depende do que H(X,X)retorna. Nós estamos presos. No entanto, se soubéssemos disso P(X)e X(X)somos iguais, poderíamos progredir. (Então, nós realmente devemos tomar X = P).
- se
H(Q,a) = loopestivermos presos novamente, e ficaríamos desapegados se X = P.
Sem QED.
Espero que isso mostre que devemos considerar H(P,P)para que nossa ideia funcione.