Спробуйте гарніший доказ з анімацією. А оскільки 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)
, щоб наша ідея спрацювала.