Saya mengalami kesulitan memahami bukti tentang keraguan atas Masalah yang Menghambat.
Jika kembali apakah program yang perhentian pada input b , mengapa kita harus melewati kode P untuk kedua a dan b ?
Mengapa kita tidak bisa memberi makan dengan P dan beberapa input sewenang-wenang, katakanlah, x ?
Jawaban:
Buktinya bertujuan untuk menemukan kontradiksi. Anda harus memahami apa yang berasal dari kontradiksi, untuk memahami mengapa digunakan sebagai input untuk dirinya sendiri. Kontradiksinya adalah, secara informal: jika kita memiliki mesin H (a, b) yang memutuskan "a accepts b", maka kita dapat membuat mesin yang menerima mesin yang tidak menerima sendiri. (Baca yang beberapa kali sampai Anda mendapatkannya.) Mesin ditampilkan dalam gambar - sebut saja M - M ( P ) = tidak P tidak menerima ⟨ P ⟩ ?P M M(P)= P ⟨P⟩
Kontradiksi terjadi ketika Anda bertanya: apakah menerima ⟨ M ⟩ ? Cobalah untuk mencari dua opsi untuk melihat bagaimana ada kontradiksi.M ⟨M⟩
menerima ⟨ M ⟩ jika dan hanya jika M tidak menerima ⟨ M ⟩ ; ini jelas sebuah kontradiksi.M ⟨M⟩ M ⟨M⟩
Inilah sebabnya mengapa penting untuk bukti menjalankan pada dirinya sendiri bukan input sewenang-wenang. Ini adalah tema umum dalam bukti ketidakmungkinan yang dikenal sebagai argumen diagonal.P
sumber
Abaikan gambar sejenak; kita akan membahasnya segera. Program seharusnya menjadi tester berhenti: ketika kita memberikan H input dari program a (pikirkanH(a,b) H a sebagai daftar program) dan apa-apa untuk b , H ( a , b ) bertindak sebagai berikuta b H(a,b)
Argumen bahwa tidak mungkin dibangun bergantung pada aksi program "sesat" tertentu, P , yang menggunakan H sebagai subrutin. P mengambil input dari daftar program apa pun, x , dan melakukan hal berikut:H P H P x
Tidak sulit melihatnya
Sejauh ini bagus: pasti akan menjadi sebuah program selama subrutin H-nya adalah sebuah program.P H
Sekarang kembali ke gambar. Apa yang terjadi jikaP diberi deskripsi sendiri sebagai input? Gambar hanya menjelaskan skenario itu: Misalkan menjadi deskripsi program P , lalu, sebagai pengganti bagian yang disorot di atas, kita harusp P
Jelas, perilaku paradoks ini tidak mungkin, jadi kami terpaksa mengambil kesimpulan bahwa subroutine tidak bisa menjadi tester berhenti, karena gagal dalam satu kasus, di mana ia diberikan ( p , p )H (p,p) sebagai input. Mungkin ada kasus-kasus lain di mana bekerja sebagaimana mestinya, tetapi karena H gagal dalam setidaknya satu situasi, itu tidak dapat menjadi tester berhenti lengkap, seperti yang disyaratkan.H H
sumber
H
tidak dipanggil lebih dari sekali, tidak ada rekursiP
sama sekali.H(P, P)
tidak mengeksekusiP
, itu hanya "secara ajaib" menentukan apakahP
berhenti ketika dilewatkan sendiri.H(P,P)
tidak harus mengeksekusiP
, tetapi harus dijalankanH(x ↦ H(x,x), P)
sebagai bagian dari menentukan apakahP
berhenti. Yang mengembang keH(x ↦ H(y ↦ H(y,y), x), P)
dan seterusnya.H
tidak ditentukan dalam bukti ini. Jadi tidak, itu tidak harus mengeksekusi apa pun, apakah ituP
sendiri atau tidak. Buktinya dimulai dengan asumsi bahwa ada semacam programH
yang secara ajaib memutuskan masalah penghentian, kemudian berlanjut untuk membuktikan bahwa keberadaan program semacam itu akan menjadi kontradiksi, dan dengan demikian tidak ada program semacam itu.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 programP
dan inputa
yangH
gagal memprediksi dengan benar apa yangP(a)
dilakukan.Teorema: Biarkan
H
program apa pun yang mengambil dua input dan selalu mengembalikan salah satuhalt
atauloop
. Lalu ada programQ
dan inputa
yangQ(a)
berhenti jika, dan hanya jika,H(Q,a)
kembaliloop
.Bukti. Pertimbangkan programnya
Biarkan
Q = P
dana = P
. Salah satuH(Q,a) = halt
atauH(Q,a) = loop
:H(Q,a) = halt
kemudianQ(a)
(yang adilP(P)
) berjalan selamanya dengan definisiP
.H(Q,a) = loop
kemudianQ(a)
dihentikan oleh definitoin dariP
.QED
Anda bertanya mengapa kami mempertimbangkan
H(P,P)
alih-alihH(P,X)
untuk yang lainX
. Jawaban yang jelas adalah "karenaH(P,P)
apa yang membuat buktinya bekerja"! Jika Anda menggunakanH(P,X)
untuk beberapa sewenang-wenangX
, maka Anda akan terjebak. Memang, buktinya akan terlihat seperti ini:Bukti rusak.Pertimbangkan programnya
Biarkan
Q = P
dana = X
untuk beberapa sewenang-wenangX
. AntaraH(Q,X) = halt
atauH(Q,X) = loop
:H(Q,X) = halt
kita tidak bisa mengatakan apa yangP(X)
terjadi, karena apakahP(X)
penghentian tergantung pada apa yangH(X,X)
kembali. Kami terjebak. Namun, jika kita tahu ituP(X)
danX(X)
sama, kita bisa membuat kemajuan. (Jadi, kita harus mengambilnyaX = P
).H(Q,a) = loop
kemudian kita terjebak lagi, dan kita akan macet jikaX = P
.Tidak QED.
Saya harap ini menunjukkan bahwa kita harus mempertimbangkan
H(P,P)
untuk membuat ide kita berfungsi.sumber
Kesimpulan dari buktinya adalah analogi ini:
sumber