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 H
per un oracolo di Halting, esiste un programma P
e un input a
per i quali H
non è possibile prevedere correttamente cosa P(a)
fa.
Teorema: Sia H
qualsiasi programma che accetta due input e restituisce sempre halt
o loop
. Quindi esiste un programma Q
e un input a
tale 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 = P
and a = P
. O H(Q,a) = halt
o H(Q,a) = loop
:
- if
H(Q,a) = halt
then Q(a)
(che è giusto P(P)
) viene eseguito per sempre dalla definizione diP
.
- se
H(Q,a) = loop
poi 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 = P
e a = X
per alcuni arbitrari X
. O H(Q,X) = halt
o H(Q,X) = loop
:
- supponiamo
H(Q,X) = halt
quindi 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) = loop
poi 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.