Halting Problem dengan Pembuktian Diagonal
Ketidakmampuan komputer menjawab halting problem juga dapat dibuktikan dengan pembuktian diagonal seperti yang Georg Cantor lakukan untuk bilangan real dalam interval (0, 1).
Pertanyaan dasarnya adalah sebagai berikut:
Adakah program yang dapat memeriksa sembarang program dengan sembarang input akan berhenti?
Kita akan membuktikan secara tak langsung dengan kontradiksi. Hipotesis nolnya adalah:
Ada program yang dapat memeriksa keberhentian sembarang program untuk sembarang input.
Kita belum tahu apakah program itu benar-benar ada. Tapi kita akan namakan program itu sebagai
Karena
Kemudian kita modifikasi sedikit program
Dalam bentuk program Python (bukan program aktual), bentuknya kira-kira akan seperti ini:
def ncek'(p,i):
if P(I) decidable:
return 'Ya'
else:
while True:
pass
Yang dibaca: Apakah
Karena program
| Program | Program | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| p1 | p2 | p3 | p4 | p5 | p6 | p7 | p8 | p9 | p10 | … | ||||
| P1 | : | |||||||||||||
| P2 | : | |||||||||||||
| P3 | : | |||||||||||||
| P4 | : | |||||||||||||
| P5 | : | |||||||||||||
| P6 | : | |||||||||||||
| P7 | : | |||||||||||||
| P8 | : | |||||||||||||
| P9 | : | |||||||||||||
| P10 | : | |||||||||||||
| ⋮ | : | … | ⋱ | |||||||||||
Setiap sel dalam tabel akan mewakili kondisi dari
| Program | Program | ||||||
|---|---|---|---|---|---|---|---|
| p1 | p2 | p3 | … | ||||
| P1 | : | ncek'(P1,p1) | ncek'(P1,p2) | ncek'(P1,p3) | … | ||
| P2 | : | ncek'(P2,p1) | ncek'(P2,p2) | ncek'(P2,p3) | … | ||
| P3 | : | ncek'(P3,p1) | ncek'(P3,p2) | ncek'(P3,p3) | … | ||
| P4 | : | ncek'(P4,p1) | ncek'(P4,p2) | ncek'(P4,p3) | … | ||
| P5 | : | ncek'(P5,p1) | ncek'(P5,p2) | ncek'(P5,p3) | … | ||
| P6 | : | ncek'(P6,p1) | ncek'(P6,p2) | ncek'(P6,p3) | … | ||
| P7 | : | ncek'(P7,p1) | ncek'(P7,p2) | ncek'(P7,p3) | … | ||
| P8 | : | ncek'(P8,p1) | ncek'(P8,p2) | ncek'(P8,p3) | … | ||
| P9 | : | ncek'(P9,p1) | ncek'(P9,p2) | ncek'(P9,p3) | … | ||
| P10 | : | ncek'(P10,p1) | ncek'(P10,p2) | ncek'(P10,p3) | … | ||
| ⋮ | : | … | ⋱ | ||||
Kemudian kita akan melakukan sesuatu yang nakal: Alih-alih mengerjakan
Hal nakal yang kita lakukan ini tidak lain adalah mengambil diagonal dari tabel.
| Program | Program | ||||||
|---|---|---|---|---|---|---|---|
| p1 | p2 | p3 | … | ||||
| P1 | : | ncek'(P1,p1) | ncek'(P1,p2) | ncek'(P1,p3) | … | ||
| P2 | : | ncek'(P2,p1) | ncek'(P2,p2) | ncek'(P2,p3) | … | ||
| P3 | : | ncek'(P3,p1) | ncek'(P3,p2) | ncek'(P3,p3) | … | ||
| P4 | : | ncek'(P4,p1) | ncek'(P4,p2) | ncek'(P4,p3) | … | ||
| P5 | : | ncek'(P5,p1) | ncek'(P5,p2) | ncek'(P5,p3) | … | ||
| P6 | : | ncek'(P6,p1) | ncek'(P6,p2) | ncek'(P6,p3) | … | ||
| P7 | : | ncek'(P7,p1) | ncek'(P7,p2) | ncek'(P7,p3) | … | ||
| P8 | : | ncek'(P8,p1) | ncek'(P8,p2) | ncek'(P8,p3) | … | ||
| P9 | : | ncek'(P9,p1) | ncek'(P9,p2) | ncek'(P9,p3) | … | ||
| P10 | : | ncek'(P10,p1) | ncek'(P10,p2) | ncek'(P10,p3) | … | ||
| ⋮ | : | … | ⋱ | ||||
| D | : | ncek'(D,p1) | ncek'(D,p2) | ncek'(D,p3) | … | ||
Jika
| Program | Program | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| p1 | p2 | p3 | p4 | p5 | p6 | p7 | p8 | p9 | p10 | … | ||||
| P1 | : | · | · | · | ∞ | ∞ | · | ∞ | ∞ | · | ∞ | … | ||
| P2 | : | · | ∞ | ∞ | ∞ | · | · | ∞ | ∞ | ∞ | ∞ | … | ||
| P3 | : | · | ∞ | ∞ | ∞ | ∞ | · | · | · | · | ∞ | … | ||
| P4 | : | ∞ | · | · | ∞ | ∞ | · | ∞ | · | · | ∞ | … | ||
| P5 | : | ∞ | ∞ | · | · | · | · | · | ∞ | · | · | … | ||
| P6 | : | · | · | ∞ | · | · | ∞ | ∞ | · | ∞ | ∞ | … | ||
| P7 | : | ∞ | ∞ | ∞ | ∞ | · | · | ∞ | ∞ | ∞ | · | … | ||
| P8 | : | ∞ | · | ∞ | ∞ | · | · | · | · | ∞ | · | … | ||
| P9 | : | ∞ | ∞ | ∞ | ∞ | · | · | ∞ | ∞ | ∞ | ∞ | … | ||
| P10 | : | · | · | ∞ | ∞ | · | ∞ | · | ∞ | ∞ | ∞ | … | ||
| ⋮ | : | … | ⋱ | |||||||||||
Jadi apakah arti D ini? Setiap tanda dalam D mewakili
atau
Kemudian kita akan membalik diagonalnya menjadi D'.
| Program | Program | ||||||
|---|---|---|---|---|---|---|---|
| p1 | p2 | p3 | … | ||||
| P1 | : | ncek'(P1,p1) | ncek'(P1,p2) | ncek'(P1,p3) | … | ||
| P2 | : | ncek'(P2,p1) | ncek'(P2,p2) | ncek'(P2,p3) | … | ||
| P3 | : | ncek'(P3,p1) | ncek'(P3,p2) | ncek'(P3,p3) | … | ||
| P4 | : | ncek'(P4,p1) | ncek'(P4,p2) | ncek'(P4,p3) | … | ||
| P5 | : | ncek'(P5,p1) | ncek'(P5,p2) | ncek'(P5,p3) | … | ||
| P6 | : | ncek'(P6,p1) | ncek'(P6,p2) | ncek'(P6,p3) | … | ||
| P7 | : | ncek'(P7,p1) | ncek'(P7,p2) | ncek'(P7,p3) | … | ||
| P8 | : | ncek'(P8,p1) | ncek'(P8,p2) | ncek'(P8,p3) | … | ||
| P9 | : | ncek'(P9,p1) | ncek'(P9,p2) | ncek'(P9,p3) | … | ||
| P10 | : | ncek'(P10,p1) | ncek'(P10,p2) | ncek'(P10,p3) | … | ||
| ⋮ | : | … | ⋱ | ||||
| D | : | ncek'(D,p1) | ncek'(D,p2) | ncek'(D,p3) | … | ||
| D' | : | ncek'(D',p1) | ncek'(D',p2) | ncek'(D',p3) | … | ||
D' sendiri merupakan program yang terdapat dalam daftar di atas, karena daftar tersebut sudah diasumsikan mengandung semua program. Juga D' memiliki bilangan Gödel d'. Namun jika demikian, berarti akan ada satu sel perpotongan antara baris D' dengan kolom d' yang merupakan keberhentian dari
| d' | ||
|---|---|---|
| ⋮ | ⋮ | |
| D' | … | ? |
Apa yang akan terjadi berikutnya? Kondisi D'(d') dapat merupakan salah satu dari berhenti maupun tidak berhenti, sesuai definisi
Jika D'(d') tidak berhenti
Jika
Jika D'(d') akan berhenti
Jika
Kesimpulan untuk D'(d')
Karena baik berhenti maupun tidak berhenti mengharuskan D' untuk melakukan kebalikannya, ini menimbulkan kontradiksi, sehingga D' tidak dapat bekerja sesuai instruksinya. Penyebabnya tidak lain adalah hipotesis awal kita:
Ada program yang dapat memeriksa keberhentian sembarang program untuk sembarang input.
Sehingga kita harus simpulkan bahwa bahwa H0 salah, dan menerima hipotesis alternatifnya.
Ada program yang dapat memeriksa keberhentian sembarang program untuk sembarang input.
Tidak ada program yang dapat memeriksa keberhentian sembarang program untuk sembarang input.
Konsekuensinya
Program seperti
Namun hasil pembuktian ini menunjukkan bahwa program seperti itu tidak mungkin dibuat.
Ini juga dapat kita tarik lebih luas lagi artinya. Berarti mungkin akan ada jenis program yang kita pikir cukup masuk akal untuk dibuat, ternyata tidak dapat diwujudkan.
Berikutnya: Apakah permasalahan ini hanya untuk komputer?