Prova una prova più bella con le animazioni. E poiché ansewrs dovrebbe contenere più di un semplice collegamento a un sito, ecco la risposta alla tua domanda.
Innanzitutto, ricordiamo come funziona la prova della non esistenza dell'oracolo di Halting. Dimostriamo che, dato a qualsiasi candidato Hper un oracolo di Halting, esiste un programma Pe un input aper i quali Hnon è possibile prevedere correttamente cosa P(a)fa.
Teorema: Sia Hqualsiasi programma che accetta due input e restituisce sempre halto loop. Quindi esiste un programma Qe un input atale che si Q(a)ferma se, e solo se, H(Q,a)ritorna loop.
Prova. Considera il programma
program P(y):
if H(y,y) = halt then
loop forever
else:
return
Let Q = Pand a = P. O H(Q,a) = halto H(Q,a) = loop:
- if
H(Q,a) = haltthen Q(a)(che è giusto P(P)) viene eseguito per sempre dalla definizione diP .
- se
H(Q,a) = looppoi Q(a)fermato dal definitoin di P.
QED
Hai chiesto perché abbiamo preso in considerazione H(P,P)invece che H(P,X)per qualcun altro X. La risposta ovvia è "perché H(P,P)è ciò che fa funzionare la prova"! Se lo usassi H(P,X)per qualche arbitrario X, rimarrai bloccato. In effetti, la prova dovrebbe apparire così:
Prova rotta. Considera il programma
program P(y):
if H(y,y) = halt then
loop forever
else:
return
Let Q = Pe a = Xper alcuni arbitrari X. O H(Q,X) = halto H(Q,X) = loop:
- supponiamo
H(Q,X) = haltquindi che non possiamo dire cosa P(X)fa, perché se le P(X)soste dipendono da ciò che H(X,X)ritorna. Siamo bloccati. Tuttavia, se lo sapessimo P(X)e X(X)siamo gli stessi, potremmo fare progressi. (Quindi, dovremmo davvero prendereX = P ).
- se
H(Q,a) = looppoi fossimo di nuovo bloccati e non saremmo bloccati se X = P.
Nessun QED.
Spero che ciò dimostri che dobbiamo considerare H(P,P)per far funzionare la nostra idea.