Спробуйте гарніший доказ з анімацією. А оскільки ansewrs має містити більше, ніж просто посилання на сайт, ось відповідь на ваше запитання.
Спочатку згадаймо, як працює доказ існування оракула Халтінг. Ми доводимо, що з урахуванням будь-якого кандидата Hна оракул Halting є програма Pта вхід, aдля яких Hне можна правильно передбачити, що P(a)робить.
Теорема: Нехай Hбудь-яка програма, яка бере два входи і завжди повертає haltабо loop. Тоді існує програма Qі вхід aтакий, що Q(a)зупиняє, якщо і тільки тоді, H(Q,a)повертається loop.
Доказ. Розгляньте програму
program P(y):
if H(y,y) = halt then
loop forever
else:
return
Нехай Q = Pі a = P. Або H(Q,a) = haltабо H(Q,a) = loop:
- якщо
H(Q,a) = haltтоді Q(a)(що просто P(P)) працює вічно за визначенням P.
- якщо
H(Q,a) = loopтоді Q(a)зупиниться на дефінітоїні P.
QED
Ви запитали, чому ми розглядаємо H(P,P)замість H(P,X)когось іншого X. Очевидна відповідь - «бо H(P,P)це те, що змушує довести роботу»! Якби ви використовували H(P,X)якусь довільну X, то ви застрягли б. Дійсно, доказ виглядав би так:
Зламаний доказ. Розгляньте програму
program P(y):
if H(y,y) = halt then
loop forever
else:
return
Нехай Q = Pі a = Xдля деяких довільно X. Або H(Q,X) = haltабо H(Q,X) = loop:
- припустимо,
H(Q,X) = haltтоді ми не можемо сказати, що P(X)робить, бо чи P(X)зупинки залежать від того, що H(X,X)повертається. Ми застрягли. Однак, якби ми це знали P(X)і X(X)були однаковими, ми могли б досягти прогресу. (Отже, ми насправді повинні брати X = P).
- якби
H(Q,a) = loopтоді ми знову застрягли, і ми були б відклеєні, якби X = P.
Немає QED.
Я сподіваюся, що це свідчить про те, що ми повинні розглянути H(P,P), щоб наша ідея спрацювала.