Batas bawah pada jumlah panggilan oracle untuk memecahkan contoh masalah penghentian


9

Saya menemukan pertanyaan berikut, yang merupakan latihan yang mudah (spoiler di bawah).

Kami diberikan contoh masalah penghentian (yaitu TMs ), dan kami harus memutuskan mana yang benar-benar berhenti di . Artinya, kita perlu menampilkan . Kami diberi oracle untuk masalah penghentian, tetapi kami harus menggunakannya beberapa kali.M 1 , . . . , M n ϵ { i : M saya  berhenti  ϵ }nM1,...,Mnϵ{i:Mi halts on ϵ}

Tidak sulit untuk menunjukkan bahwa itu dapat dilakukan dengan panggilan .log(n+1)

Pertanyaan saya adalah: bisakah kita membuktikan batas bawah? Adakah alasan untuk curiga bahwa ikatan seperti itu akan sangat sulit ditemukan?

Jawaban atas pertanyaan itu sendiri (spoiler, hover mouse):

Pertimbangkan kasus TM. Kita dapat membuat TM yang menjalankan secara paralel, dan berhenti jika setidaknya dua dari mereka berhenti (jika tidak macet). Demikian pula, kita dapat membuat TM yang berhenti jika setidaknya satu dari mereka berhenti. Kami kemudian dapat memanggil oracle pada . Jika berhenti, maka kita dapat menjalankan mesin secara paralel, dan menunggu satu untuk berhenti. Kita kemudian dapat memanggil oracle pada yang terakhir. Jika oracle mengatakan "tidak", maka kami menjalankan oracle pada . Jika berhenti, maka kami menjalankan mesin sampai satu berhenti, dan hanya itu yang berhenti. Jika tidak berhenti, maka tidak ada yang berhenti. Memperluas ini ke mesin itu mudah.H 2 M 1 , M 2 , M 3 H 1 H 2 H 1 H 1 n3H2M1,M2,M3H1H2H1H1n

Pengamatan pertama tentang pertanyaan ini adalah bahwa tampaknya tidak mungkin untuk diselesaikan dengan menggunakan alat informasi-teoretis, karena kita sangat bergantung pada kemampuan kita untuk mendapatkan informasi dengan menjalankan mesin tanpa nubuat.


@ Kaveh - seperti yang ditulis Neal Young, kita perlu menghitung set mesin penghenti yang tepat.
Shaull

Jawaban:


11

Hasilnya dapat ditemukan di

Bukti mereka sebenarnya menunjukkan bahwa masalah Anda tidak dapat diselesaikan dengan kueri yang kurang dari untuk set apa pun , apalagi untuk masalah penghentian itu sendiri. Untuk beberapa notasi, masalah Anda terkadang dinotasikan dengan atau (tergantung pada notasi favorit Anda untuk masalah penghentian).X C K n C H A L T nlog2nXCnKCnHALT

Untuk ini dan banyak hasil terkait, lihat juga:


10

EDIT: Argumen yang saya jawab dengan itu tidak salah, tapi itu agak menyesatkan, dalam hal itu hanya menunjukkan bahwa batas atas harus ketat untuk beberapa (yang sebenarnya sepele, karena harus ketat ketika dan terikat 1).n = 2nn=2

Ini argumen yang lebih tepat. Ini menunjukkan bahwa jika batas atas longgar untuk tertentu , maka untuk semua jumlah panggilan oracle yang diperlukan adalah .n n O ( 1 )log2nn nO(1)

(Tentunya itu bukan , jadi batas atas tidak pernah longgar! Tapi saya tidak benar-benar membuktikannya di sini, dan memberikan jawaban lain untuk masalah ini, sepertinya tidak layak dikejar.)O(1)

Pertimbangkan masalah penghitungan output maksimum :

Diberi -tupel dari mesin Turing, menghitung output maksimum (dari mesin Turing yang berhenti, jika dijalankan pada ). Jika tidak ada yang berhenti, kembalikan 0.( M 1 , ... , M n ) ϵn(M1,,Mn)ϵ

Sebagai fungsi dari , jumlah panggilan oracle kasus terburuk yang diperlukan untuk menghitung fungsi ini sama dengan jumlah yang diperlukan untuk memutuskan mesin mana dari diberikan yang berhenti. (Jika saya tahu mesin mana yang berhenti, saya dapat dengan mudah menghitung output maksimum. Sebaliknya, jika saya ingin tahu mesin mana yang berhenti, mengikuti konstruksi dalam pernyataan masalah, saya dapat membuat mesin di mana berjalan semua mesin yang diberikan secara paralel, maka perhentian dan output jika dari mereka pernah berhenti. Output maksimum akan memberitahu saya nomor yang berhenti. dari yang saya dapat menghitung persis yang berhenti.)n { M i } ( i = 1 , 2 , , n ) M i n i inn{Mi} (i=1,2,,n)Minii

Sekarang, misalkan menjadi bilangan bulat terkecil (jika ada) sedemikian rupa sehingga berlaku sebagai berikut: nn0n

Menggunakan panggilan oracle, seseorang dapat menghitung output maksimum dari mesin yang diberikan. (Yaitu, batas atas tidak ketat untuk .)C(n)=max{kZ:2k<n}nn

Jelas , karena . Bahkan, juga, karena , tetapi tidak dapat ditentukan untuk menghitung output maksimum dari mesin yang diberikan (tanpa panggilan oracle). Sekarang pertimbangkan lebih besar :n0>1C(1)=1n0>2C(2)=02n

Klaim: Jika terbatas, maka untuk apa pun , seseorang dapat menghitung output maksimum dari mesin yang diberikan dalam panggilan oracle . n0nnC(n0)(Perhatikan bahwa jika terbatas, maka .)n0C(n0)=O(1)

Bukti. . Kami membuktikannya dengan induksi pada . Kasus-kasus dasar yang , yang dipegang oleh definisi dan .nnn0n0C

Biarkan menjadi TM yang, mengingat mesin Turing apa pun , menghitung output maksimum hanya dengan menggunakan panggilan ke oracle.Q0n0C(n0)

Perbaiki . Diberikan mesin apa pun , hitung output maksimum sebagai berikut.n>n0nM1,,Mn

Fokus pada mesin . Pertimbangkan menjalankan pada mesin ini . Perhatikan bahwa membuat panggilan ke oracle, dan hanya ada kemungkinan tanggapan oleh oracle untuk panggilan ini. Perhatikan bahwa menurut definisi . Biarkan menyatakan th respon mungkin. Untuk setiap , buat sebuah mesin yang mensimulasikan pada mesin-mesin ini sebagai berikut:M1,,Mn0Q0n0Q0C(n0)n=2C(n0)n=2C(n0)<n0oiii=1,,nMiQ0

TM (pada input ):Miϵ

  1. Simulasikan pada mesin , tetapi alih-alih memanggil oracle, anggap oracle merespons sesuai dengan .Q0n0(M1,,Mn0)oi
  2. Simulasi ini mungkin tidak berhenti (misalnya jika bukan apa yang akan dikembalikan oleh oracle).oi
  3. Jika simulasi berhenti, biarkan menjadi output maksimum yang dikatakan akan diberikan.hiQ0
  4. semua mesin . Jika salah satu dari mereka mengeluarkan , berhenti dan keluaran .n0(M1,,Mn0)hihi

Sekarang, dalam urutan mesin yang diberikan, ganti mesin pertama dengan mesin . Kembalikan nilai yang dihitung dengan mengulangi urutan mesin ini. (Perhatikan bahwa oracle tidak dipanggil sebelum berulang, sehingga oracle hanya dipanggil setelah case dasar tercapai.)nn0M1,,Mn0n<n0M1,,Mnn(n0n)<n

Inilah mengapa perhitungan ini benar. Untuk sedemikian rupa sehingga adalah respons `` benar '' oleh oracle ke kueri, akan berhenti dan memberikan output maksimum yang benar dari mesin asli . Dengan demikian, output maksimum dari mesin setidaknya output maksimum dari mesin . Di sisi lain, pada langkah 4, tidak ada dapat memberikan output yang lebih besar dari output maksimum . Dengan demikian, output maksimum dari mesinioiQ0Min0n(M1,,Mn)n0(M1,,Mn0)Mi(M1,,Mn0)n(M1,,Mn) sama dengan output maksimum dari mesin yang mereka ganti. QEDn0

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.