Wypróbuj ładniejszy dowód z animacjami. A ponieważ odpowiedzi powinny zawierać coś więcej niż link do strony, oto odpowiedź na twoje pytanie.
Po pierwsze, przypomnijmy sobie, jak działa dowód nieistnienia wyroczni w Halting. Udowadniamy, że biorąc pod uwagę każdego kandydata H
na wyrocznię z Stopu, istnieje program P
i dane wejściowe, a
dla których H
nie można poprawnie przewidzieć, co P(a)
się stanie.
Twierdzenie: Niech H
będzie dowolnym programem, który pobiera dwa dane wejściowe i zawsze zwraca albo halt
albo loop
. Istnieje program Q
i dane wejściowe a
, które Q(a)
zatrzymują się, jeśli i tylko jeśli H(Q,a)
powróci loop
.
Dowód. Rozważ program
program P(y):
if H(y,y) = halt then
loop forever
else:
return
Niech Q = P
i a = P
. Albo H(Q,a) = halt
albo H(Q,a) = loop
:
- jeśli
H(Q,a) = halt
wtedy Q(a)
(co jest sprawiedliwe P(P)
) działa wiecznie zgodnie z definicją P
.
- jeśli
H(Q,a) = loop
następnie Q(a)
zatrzymają się z definitywnością P
.
CO BYŁO DO OKAZANIA
Zapytałeś, dlaczego rozważamy H(P,P)
zamiast H(P,X)
jakiegoś innego X
. Oczywista odpowiedź brzmi „ponieważ H(P,P)
to sprawia, że dowód działa”! Jeśli użyjesz H(P,X)
jakiegoś arbitralnego X
, utkniesz. Rzeczywiście, dowód wyglądałby następująco:
Złamany dowód. Rozważ program
program P(y):
if H(y,y) = halt then
loop forever
else:
return
Niech Q = P
i a = X
dla niektórych dowolnych X
. Albo H(Q,X) = halt
albo H(Q,X) = loop
:
- załóżmy,
H(Q,X) = halt
że nie możemy powiedzieć, co P(X)
robi, ponieważ to, czy P(X)
zatrzymanie zależy od tego, co H(X,X)
powróci. Utknęliśmy. Gdybyśmy jednak wiedzieli o tym P(X)
i byli X(X)
tacy sami, moglibyśmy poczynić postępy. (Więc naprawdę powinniśmy wziąć X = P
).
- jeśli
H(Q,a) = loop
wtedy utkniemy ponownie, i utknęlibyśmy, gdyby X = P
.
Brak QED.
Mam nadzieję, że to pokazuje, że musimy rozważyć H(P,P)
, aby nasz pomysł zadziałał.