Coba bukti yang lebih cantik dengan animasi. Dan karena ansewrs harus mengandung lebih dari sekadar tautan ke situs, inilah jawaban untuk pertanyaan Anda.
Pertama, mari kita ingat bagaimana bukti tidak adanya oracle Menghentikan bekerja. Kami membuktikan bahwa dengan memberikan kandidat H
untuk Menghentikan oracle, ada program P
dan input a
yang H
gagal memprediksi dengan benar apa yang P(a)
dilakukan.
Teorema: Biarkan H
program apa pun yang mengambil dua input dan selalu mengembalikan salah satu halt
atau loop
. Lalu ada program Q
dan input a
yang Q(a)
berhenti jika, dan hanya jika, H(Q,a)
kembali loop
.
Bukti. Pertimbangkan programnya
program P(y):
if H(y,y) = halt then
loop forever
else:
return
Biarkan Q = P
dan a = P
. Salah satu H(Q,a) = halt
atau H(Q,a) = loop
:
- jika
H(Q,a) = halt
kemudian Q(a)
(yang adil P(P)
) berjalan selamanya dengan definisi P
.
- jika
H(Q,a) = loop
kemudian Q(a)
dihentikan oleh definitoin dari P
.
QED
Anda bertanya mengapa kami mempertimbangkan H(P,P)
alih-alih H(P,X)
untuk yang lain X
. Jawaban yang jelas adalah "karena H(P,P)
apa yang membuat buktinya bekerja"! Jika Anda menggunakanH(P,X)
untuk beberapa sewenang-wenang X
, maka Anda akan terjebak. Memang, buktinya akan terlihat seperti ini:
Bukti rusak.Pertimbangkan programnya
program P(y):
if H(y,y) = halt then
loop forever
else:
return
Biarkan Q = P
dan a = X
untuk beberapa sewenang-wenang X
. AntaraH(Q,X) = halt
atau H(Q,X) = loop
:
- misalkan
H(Q,X) = halt
kita tidak bisa mengatakan apa yang P(X)
terjadi, karena apakah P(X)
penghentian tergantung pada apa yang H(X,X)
kembali. Kami terjebak. Namun, jika kita tahu ituP(X)
dan X(X)
sama, kita bisa membuat kemajuan. (Jadi, kita harus mengambilnya X = P
).
- jika
H(Q,a) = loop
kemudian kita terjebak lagi, dan kita akan macet jika X = P
.
Tidak QED.
Saya harap ini menunjukkan bahwa kita harus mempertimbangkan H(P,P)
untuk membuat ide kita berfungsi.