Versuchen Sie einen schöneren Beweis mit Animationen. Und da ansewrs mehr als nur einen Link zu einer Site enthalten sollte, ist hier die Antwort auf Ihre Frage.
Erinnern wir uns zunächst daran, wie der Beweis der Nichtexistenz des Orakels Halting funktioniert. Wir beweisen, dass es bei jedem Kandidaten H
für ein Halting-Orakel ein Programm P
und eine Eingabe gibt, a
für die H
nicht richtig vorhergesagt werden kann, wasP(a)
passiert.
Theorem: Sei H
jedes Programm, das zwei Eingaben annimmt und immer entweder halt
oder zurückgibt loop
. Dann gibt es ein Programm Q
und eine Eingabe a
, die Q(a)
anhält, wenn und nur dann, wenn H(Q,a)
zurückkehrt loop
.
Beweis. Betrachten Sie das Programm
program P(y):
if H(y,y) = halt then
loop forever
else:
return
Lass Q = P
und a = P
. Entweder H(Q,a) = halt
oder H(Q,a) = loop
:
- wenn
H(Q,a) = halt
dann Q(a)
(was gerade ist P(P)
) läuft ewig nach der Definition vonP
.
- wenn
H(Q,a) = loop
dann Q(a)
halt durch die definoin von P
.
QED
Sie haben gefragt, warum wir uns überlegt haben, H(P,P)
statt H(P,X)
für andere X
. Die offensichtliche Antwort lautet: "Weil H(P,P)
der Beweis funktioniert"! Wenn Sie H(P,X)
für eine beliebige verwendet X
, dann würden Sie stecken bleiben. In der Tat würde der Beweis dann so aussehen:
Unterbrochener Beweis. Betrachten Sie das Programm
program P(y):
if H(y,y) = halt then
loop forever
else:
return
Lass Q = P
und a = X
für einige willkürlich X
. Entweder H(Q,X) = halt
oder H(Q,X) = loop
:
- Nehmen
H(Q,X) = halt
wir an, wir können nicht sagen, was P(X)
passiert, denn ob P(X)
angehalten wird, hängt davon ab, was H(X,X)
zurückkommt. Wir stecken fest. Wenn wir das jedoch wüssten P(X)
und X(X)
dasselbe sind, könnten wir Fortschritte erzielen. (Also sollten wir wirklich nehmen X = P
).
- wenn
H(Q,a) = loop
wir dann wieder stecken, und wir wären stecken geblieben, wenn X = P
.
Keine QED.
Ich hoffe dies zeigt, dass wir überlegen H(P,P)
müssen, um unsere Idee umzusetzen.