Попробуйте красивое доказательство с анимацией. А поскольку ответы должны содержать больше, чем просто ссылку на сайт, вот ответ на ваш вопрос.
Во-первых, давайте вспомним, как работает доказательство несуществования оракула Остановки. Мы доказываем, что для любого кандидата 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.
Нет КЭД.
Я надеюсь, что это показывает, что мы должны рассмотреть H(P,P), чтобы наша идея работала.