Hãy thử một bằng chứng đẹp hơn với hình ảnh động. Và vì ansewrs không chỉ chứa một liên kết đến một trang web, đây là câu trả lời cho câu hỏi của bạn.
Đầu tiên, chúng ta hãy nhớ lại bằng chứng về sự không tồn tại của nhà tiên tri hoạt động. Chúng tôi chứng minh rằng với bất kỳ ứng cử viên nào H
cho một nhà tiên tri Dừng, có một chương trình P
và đầu vào a
mà H
không dự đoán chính xác những gì P(a)
.
Định lý: Cho phép H
bất kỳ chương trình nào có hai đầu vào và luôn trả về một trong hai halt
hoặc loop
. Sau đó, tồn tại một chương trình Q
và một đầu vào a
sao cho Q(a)
dừng lại nếu và chỉ khi H(Q,a)
trả về loop
.
Bằng chứng. Xem xét chương trình
program P(y):
if H(y,y) = halt then
loop forever
else:
return
Hãy để Q = P
và a = P
. Hoặc H(Q,a) = halt
hay H(Q,a) = loop
:
- if
H(Q,a) = halt
then Q(a)
(mà chỉ P(P)
) chạy mãi theo định nghĩa của P
.
- nếu
H(Q,a) = loop
sau đó Q(a)
dừng lại bởi definitoin của P
.
QED
Bạn hỏi tại sao chúng tôi xem xét H(P,P)
thay vì H(P,X)
cho một số khác X
. Câu trả lời rõ ràng là "bởi vì H(P,P)
điều gì làm cho bằng chứng hoạt động"! Nếu bạn sử dụng H(P,X)
cho một số tùy ý X
, sau đó bạn sẽ bị mắc kẹt. Thật vậy, bằng chứng sau đó sẽ trông như thế này:
Bằng chứng bị phá vỡ. Xem xét chương trình
program P(y):
if H(y,y) = halt then
loop forever
else:
return
Hãy để Q = P
và a = X
cho một số tùy ý X
. hoặc H(Q,X) = halt
hayH(Q,X) = loop
:
- giả sử
H(Q,X) = halt
sau đó chúng ta không thể nói điều gì P(X)
làm được, bởi vì việc P(X)
dừng lại phụ thuộc vào những gì H(X,X)
trả về. Chúng ta đang mắc kẹt. Tuy nhiên, nếu chúng ta biết điều đó P(X)
vàX(X)
giống nhau, chúng ta có thể tiến bộ. (Vì vậy, chúng ta thực sự nên dùng X = P
).
- nếu
H(Q,a) = loop
sau đó chúng ta bị mắc kẹt một lần nữa, và chúng ta sẽ không bị cản trở nếu X = P
.
Không có QED.
Tôi hy vọng điều này cho thấy rằng chúng ta phải xem xét H(P,P)
để thực hiện ý tưởng của mình.