Dari pemahaman saya tentang bukti bahwa penghentian masalah tidak dapat dihitung, masalah ini tidak dapat dihitung karena jika kita memiliki program P (x) yang menghitung apakah program x berhenti atau tidak, kita mendapat paradoks ketika memberikan P sebagai input ke P yang sama, memiliki: P (P), mencoba memutuskan apakah P berhenti atau tidak menggunakan P itu sendiri.
Jadi pertanyaan saya adalah: apakah menghentikan masalah dapat dihitung oleh program P untuk semua program lain yang digunakan sebagai input tetapi P itu sendiri? Dengan kata lain: apakah menghentikan masalah tidak hanya dapat dihitung dalam kasus khusus ini atau buktinya lebih umum dan saya kehilangan sesuatu?
halting-problem
Alessio Martorana
sumber
sumber
Jawaban:
Jika adalah fungsi yang dapat dihitung, maka g , didefinisikan sebagaif g
juga dapat dihitung, untuk pilihan .k,v
Pada dasarnya, jika Anda memiliki program yang menghitung g ( n ) untuk semua n kecuali untuk n = k , Anda dapat "memperbaiki" kasing itu (misalnya menggunakan a ) dan mendapatkan P program lain yang menghitung g ( n ) untuk semua n .P′ g(n) n n=k P g(n) n
if then else
Karenanya, jika Anda dapat menghitung fungsi penghentian "kecuali untuk satu kotak", Anda juga dapat menghitung fungsi penghentian (tanpa pengecualian). Dari situ, Anda bisa mendapatkan kontradiksi seperti biasa.
Kesimpulan: tidak, Anda tidak dapat memutuskan masalah penghentian "kecuali satu kasus" (atau "kecuali banyak kasus").
sumber
Tidak. Pertimbangkan urutan tak terhingga dari program , di mana P i adalah "Pindahkan kepala sayaP1, P2, ... Psaya saya kuadrat ke kanan, lalu kuadrat ke kiri, lalu lakukan persis apa yang P akan lakukan." Setiap program ini menghasilkan keluaran yang sama persis dengan P untuk setiap input (termasuk perulangan selamanya jika P berulang selamanya), tetapi semuanya adalah program yang berbeda.saya P P P
Dan Anda tidak dapat menyiasatinya dengan hanya meminta untuk bekerja pada program yang secara fungsional tidak setara dengan itu sendiri, karena properti itu juga tidak dapat diputuskan. Mungkin masalahnya akan dapat diputuskan ketika terbatas pada contoh-contoh itu (meskipun saya kira itu tidak akan terjadi) tetapi serangkaian contoh tidak dapat diputuskan, sehingga Anda tidak dapat benar-benar melakukan pembatasan.P
sumber
Ada algoritma untuk menunjukkan bahwa kelas program tertentu melakukan atau tidak berhenti. Sebagai contoh,
Meskipun tidak ada algoritma untuk menentukan apakah program arbitrer berhenti, sebagian besar kode dirancang untuk berhenti (seperti kebanyakan subrutin) atau tidak berhenti (seperti loop tak terbatas untuk menangani peristiwa), dan dimungkinkan untuk secara algoritmik menentukan mana yang mana. Dengan kata lain, Anda dapat memiliki algoritme yang menjawab "berhenti", "tidak berhenti", atau "Saya tidak tahu", dan algoritme semacam itu dapat dirancang untuk mencakup program yang cukup sehingga berguna.
sumber
Bukti berdasarkan kontradiksi tidak harus lengkap , satu contoh tandingan saja sudah cukup. Bukti masalah penghentian tidak dapat diputuskan memberi Anda salah satu contoh P yang properti penghentiannya tidak dapat diputuskan. Bukti ini tidak menyatakan bahwa P adalah satu-satunya program seperti itu, pada kenyataannya, mungkin ada bukti independen yang membangun kelas P.
sumber
Buktinya memang lebih umum: masalah penghentian adalah kasus khusus teorema Rice , yang menyatakan
Anda bisa mendapatkan beberapa hasil dengan membatasi ruang program yang ingin Anda kerjakan, meskipun pembatasan ini harus cukup drastis. Misalnya, jika Anda dijamin bahwa program Anda diberikan penghentian dalam 100 langkah atau berjalan selamanya, memutuskan apakah penghentiannya menjadi mudah.
sumber
Biarkan R menjadi himpunan enumerable tapi non rekursif rekursif. Ada banyak set seperti itu. Biarkan T menjadi mesin Turing yang berhenti pada input k jika dan hanya jika k ada di R. T seperti itu ada untuk setiap himpunan enumerable rekursif. Tidak mungkin untuk menulis sebuah program yang dapat memecahkan masalah penghentian untuk T. ini. Ini karena algoritma apa pun untuk menentukan apakah T berhenti akan menghasilkan suatu algoritma untuk menentukan keanggotaan dalam R, yang tidak mungkin jika R tidak rekursif. Karena ada banyak R yang tak terhingga, yang masing-masing memberikan mesin Turing yang berbeda, ada banyak mesin Turing yang tak terhingga yang gagal diprogram untuk menghentikan program P.
sumber