Apakah masalah penghentian dapat diputuskan untuk program murni pada komputer yang ideal?

25

Cukup sederhana untuk memahami mengapa masalah penghentian tidak dapat diputuskan untuk program tidak murni (yaitu, yang memiliki I / O dan / atau negara bagian bergantung pada negara mesin-global); tetapi secara intuitif, tampaknya program murni berhenti pada komputer yang ideal akan dapat ditentukan melalui misalnya analisis statis.

Apakah ini yang sebenarnya terjadi? Jika tidak, apa sajakah contoh tandingan atau makalah yang menyangkal klaim ini?

Jules
sumber
35
Perhatikan bahwa bukti standar bahwa masalah penghentian tidak dapat diputuskan (seperti yang dijelaskan pada wikipedia: en.wikipedia.org/wiki/Halting_problem#Sketch_of_proof ) semua bekerja dengan model perhitungan yang bahkan tidak berupaya mewakili I / O. Dan sementara Mesin Turing misalnya stateful, perilaku mereka secara formal didefinisikan dalam hal fungsi murni. Jadi dalam beberapa hal "program murni pada komputer ideal" sebenarnya adalah pengaturan di mana masalah penghentian biasanya terbukti tidak dapat diputuskan.
Ben
1
Penelitian apa yang telah Anda lakukan? Googling "Menghentikan masalah" seharusnya sudah menjawab pertanyaan ini untuk Anda.
Jonathan Cast

Jawaban:

38

Berikut ini adalah bukti ketidakpastian dengan pengurangan dari masalah Putus.

Reduksi: Diberikan mesin dan input x , buat Mesin Turing H baru yang tidak membaca input apa pun, tetapi tuliskan M dan x pada kaset dan simulasikan M pada x hingga M berhenti.M.xHM.xM.xM.

Perilaku mesin baru ini tidak tergantung pada pita input, sehingga merupakan mesin Turing murni yang hanya dapat digunakan analisis statis. Jika analisis statis cukup, maka itu dapat menunjukkan apakah H berhenti, yang akan menunjukkan apakah M berhenti pada x , yang akan memecahkan masalah penghentian untuk mesin yang tidak murni, yang kami tahu tidak dapat diputuskan, dan karena itu masalah Anda juga tidak dapat diputuskan.HHM.x

Pengganti Vinkhuijzen
sumber
@HendrikJan Tepat!
Lieuwe Vinkhuijzen
16

Tidak bukan, dan terlebih lagi itu tidak bergantung pada I / O.

Contoh tandingan sederhana: tulis sebuah program untuk menemukan angka ganjil yang sempurna (ini adalah masalah terbuka: kita belum tahu apakah ada) - tidak mengambil input apa pun dan tidak melakukan tugas yang tidak murni ; mungkin berhenti ketika menemukan satu, atau dapat bekerja tanpa batas (dalam kasus nomor seperti itu tidak ada). Sekarang jika analisis statis cukup kuat untuk menentukan kasus penghentian itu akan digunakan untuk menjawab ini (dan banyak lagi pertanyaan) di mana penghentian akan berarti keberadaan positif dari nomor tersebut dan tidak berhenti akan berarti tidak ada nomor tersebut, tetapi sayangnya analisis statis tidak begitu kuat.

Jahat
sumber
18
Saya tidak benar-benar mengerti maksud dari jawaban ini. Hanya karena saat ini kita tidak tahu apakah angka seperti itu ada tidak menyiratkan itu tidak ada, atau bahwa kita tidak bisa di masa depan menulis analisa statis yang dapat memutuskan ini. Alternatif yang lebih baik adalah menggunakan beberapa masalah yang tidak dapat dipastikan. Misalnya diketahui bahwa tidak ada program yang dapat menyelesaikan semua persamaan diophantine, dan menyelesaikan persamaan seperti itu adalah tugas yang mirip dengan yang ditunjukkan dalam jawaban.
Bakuriu
2
Nah, jika masalah Hentikan itu dapat diputuskan, maka setiap masalah akan dapat diputuskan jika kita bisa memasukkannya ke dalam formulir di mana kita bertanya apakah suatu program berhenti atau tidak. Atau pertanyaan apa pun dari formulir: Ada set yang dapat dihitung, dan saya dapat memutuskan apakah ada elemen potensial individu dalam set atau tidak. Apakah set kosong? Persamaan diophantine memiliki seperangkat solusi potensial yang dapat dihitung, dan saya dapat memeriksa apakah setiap solusi potensial individu adalah solusi atau tidak. Jika masalah Hentikan adalah decidable, persamaan Diophantine akan decidable.
gnasher729
10
@ gnasher729 Ya, dan karena mereka bukan masalah Hentikan tidak dapat diputuskan. Itu maksudku. Sementara pernyataan dalam jawaban ini tidak memiliki implikasi nyata: "Pertimbangkan definisi matematis ini. Saat ini kami tidak tahu apakah suatu program yang memutuskan ini akan berhenti atau tidak, tetapi besok seorang pria dapat mengetahui apakah itu benar atau tidak dan jawaban ini menjadi 100 % tidak berarti ".
Bakuriu
6
Bukankah ini kasus yang mirip dengan Bagaimana bisa diputuskan apakah π memiliki beberapa urutan digit? , masalah penghentian tidak dapat ditentukan pada kelas masalah, bukan masalah tunggal .
npostavs
2

Bukti klasik dengan diagonalisasi adalah mesin murni , tidak hanya itu adalah Mesin Turing murni, tetapi tidak bergantung pada "Masalah Terbuka".

Sebagai contoh, sebuah mesin Turing yang mengeksekusi dugaan Collatz memiliki status penghentian yang tidak diketahui, tetapi itu bergantung pada ketidaktahuan kita tentang dugaan Collatz, suatu hari kita dapat membuktikan bahwa Collatz benar dan kemudian kita akan dapat memutuskan status penghentian dugaan tersebut. (Entah untuk beberapa input tidak berhenti, atau Selalu berhenti).

Jadi dugaan Collatz sudah bisa menjawab pertanyaan Anda (setidaknya untuk sementara), tetapi itu bergantung pada sesuatu yang kita tidak tahu . Alih-alih, bukti klasik adalah masalah yang sudah dipecahkan: kita sudah tahu itu tidak dapat dipastikan .

GameDeveloper
sumber
0

Sebagai catatan, bukti standar dari keraguan tentang masalah penghentian bergantung pada gagasan yang sama dengan quines: bahwa mungkin untuk menulis sebuah program yang sub-termnya dievaluasi ke kode sumber untuk keseluruhan program. Kemudian, jika ada fungsi haltsyang, diberikan kode sumber untuk suatu program, dikembalikan Benar jika program itu berhenti pada semua input dan Salah sebaliknya, ini akan menjadi program hukum:

prog() = if halts "prog" then prog() else ()

di mana "prog"akan ada ekspresi yang dievaluasi ke kode sumber untuk prog; Namun, Anda dapat dengan cepat melihatnyaprog berhenti (untuk semua input) jika tidak berhenti, yang merupakan kontradiksi. Tidak ada dalam bukti ini bergantung pada I / O dengan cara apa pun (apakah Anda memerlukan I / O untuk menulis quine?).

Omong-omong, Anda mungkin ingin melihat ke "I / O berbasis dialog" untuk bukti lebih lanjut bahwa I / O sepenuhnya tidak relevan dengan masalah Anda (pada dasarnya, program yang I / O dapat dikurangi menjadi program yang menerima input sebagai (eksplisit) argumen fungsional dan mengembalikan output sebagai hasil tambahan (eksplisit) dalam bahasa malas). Sayangnya, saya tidak dapat menemukan halaman yang masuk akal, tidak bias (atau pro-dialog) di web saat ini.

Jonathan Cast
sumber