Apakah ada masalah yang ada yang tidak bisa dipecahkan dengan oracle yang terhenti?

11

Saya mengerti bahwa sebagian besar masalah sepele jika tersedia oracle yang berhenti (atau, saya pikir setara, hiper-komputasi). Namun, menerapkan argumen yang menunjukkan Masalah Henti tidak mungkin untuk mesin Turing juga menunjukkan bahwa tidak mungkin bagi oracle Turing + untuk memutuskan Masalah Henti untuk oracle Turing +. Apakah ada contoh aktual, praktis, masalah yang tidak dapat dipecahkan oleh oracle yang berhenti?

Catatan: dengan "oracle" Maksud saya oracle untuk mesin Turing standar, bukan TM dengan oracle itu sendiri.

ike
sumber
2
Ada yang "sewenang-wenang diputuskan" masalah, lihat misalnya di sini . Saya tidak tahu tentang contoh "praktis" (yang juga tidak cocok dengan judul yang Anda pilih); apa yang memenuhi syarat sebagai "praktis" untuk Anda?
Raphael
Itu tidak dibuat hanya untuk menjawab pertanyaan ini. Saya mengakui bahwa masalah penghentian level selanjutnya masih berlaku.
Seperti
Selain itu, semua bahasa yang tidak dihitung secara rekursif tidak dapat direduksi menjadi HALT. Contohnya termasuk FINITE, KOSONG, apakah dua CFG berasal dari bahasa yang sama, dll.

Jawaban:

15

Ambillah masalah yang memiliki gelar Turing di atas , yang merupakan tingkat The Halting Oracle. Dalam hal hierarki aritmatika Anda menginginkan masalah yang ada di atas . Contoh masalah seperti itu (di mana adalah fungsi komputasi parsial ke- dan adalah - set yang dapat dihitung yang dapat dihitung):0Σ10ϕnnWn={kNϕn(k) is defined}n

  • {nNφn terminates for finitely many inputs} adalah .Σ20
  • {nNφn is a total function} adalah .Π20
  • {nNWn is a computable set} adalah .Σ30

Tak satu pun dari ini dapat diselesaikan bahkan jika Anda memiliki Menghentikan Oracle. Sebagai contoh, perhatikan contoh kedua, "is total?" Mengingat bagaimana bantuan terputus-putus Oracle kita memutuskan apakah mesin Turing dikodekan oleh perhentian di setiap masukan?φnnn


[Ditambahkan 2014-06-03] Untuk aspek "praktis" dari semua ini, pertimbangkan masalahnya: seorang programmer telah menulis suatu fungsi void charge_credit_card(int card_number, int amount)dan kami ingin tahu apakah fungsi tersebut berakhir pada semua input. Tidak mungkin untuk menulis kompiler yang secara otomatis dapat memeriksa ini secara umum. Selain itu, bahkan jika kita mengizinkan kompiler untuk mengajukan pertanyaan kepada kita tentang bentuk "apakah charge_credit_carddiakhiri ketika diberi masukan (k,m)?", Itu masih mustahil.

Andrej Bauer
sumber
2
Sayng "Saya tidak mengerti contohnya" tanpa menjelaskan apa yang membingungkan Anda tidak produktif. Apakah Anda membaca halaman Wikipedia yang relevan yang saya tunjukkan? Itu berhubungan langsung dengan pertanyaan Anda, jadi hal pertama yang harus Anda ketahui adalah membiasakan diri dengan konsep-konsep dasar yang terlibat.
Andrej Bauer
1
@ike, contohnya dimaksudkan untuk memiliki jumlah tak terbatas int, cukup jelas. Apakah Anda benar-benar membutuhkan saya untuk menulis BigIntatau semacamnya, atau akankah Anda mengeluh bahwa memori komputer terbatas?
Andrej Bauer
1
Masa bodo. Saya katakan apa jawaban untuk pertanyaan Anda. Jika Anda tidak ingin memahaminya dengan itikad baik, maka jangan ganggu kami dengan pertanyaan.
Andrej Bauer
2
Contoh praktisnya adalah, , pujian untuk berhenti. Ini adalah Diberikan program sewenang-wenang dan masukan ke program, tentukan apakah program tidak berhenti. Masalah ini, bersama dengan setiap bahasa enumerasi non-rekursif lainnya, tidak berkurang menjadi HALT. HALT¯{<M,w>:M doesn't halt on w}
1
@tAllan: Anda harus memposting itu sebagai jawaban. Itu mengalahkan saya apa yang dianggap OP "praktis", tetapi teladan Anda tentu lebih baik daripada milik saya.
Andrej Bauer