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 Hfür ein Halting-Orakel ein Programm Pund eine Eingabe gibt, afür die Hnicht richtig vorhergesagt werden kann, wasP(a) passiert.
Theorem: Sei Hjedes Programm, das zwei Eingaben annimmt und immer entweder haltoder zurückgibt loop. Dann gibt es ein Programm Qund 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 = Pund a = P. Entweder H(Q,a) = haltoder H(Q,a) = loop:
- wenn
H(Q,a) = haltdann Q(a)(was gerade ist P(P)) läuft ewig nach der Definition vonP .
- wenn
H(Q,a) = loopdann 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 = Pund a = Xfür einige willkürlich X. Entweder H(Q,X) = haltoder H(Q,X) = loop:
- Nehmen
H(Q,X) = haltwir 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) = loopwir 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.