Saya tahu bahwa ada Mesin Turing, jika suatu fungsi dapat dihitung. Lalu bagaimana cara menunjukkan bahwa fungsi tersebut tidak dapat dihitung atau tidak ada Mesin Turing untuk itu. Apakah ada sesuatu seperti lemma memompa?
Saya tahu bahwa ada Mesin Turing, jika suatu fungsi dapat dihitung. Lalu bagaimana cara menunjukkan bahwa fungsi tersebut tidak dapat dihitung atau tidak ada Mesin Turing untuk itu. Apakah ada sesuatu seperti lemma memompa?
Jawaban:
Sebelum saya menjawab pertanyaan umum Anda, izinkan saya terlebih dahulu mengambil langkah mundur, memberikan latar belakang sejarah, dan menjawab pertanyaan awal: Apakah fungsi yang tidak dapat dihitung bahkan ada?
[catatan notasi: kita dapat berhubungan setiap fungsi dengan bahasa dan kemudian mendiskusikan decidability dari daripada computability dari ]
Ada beberapa bahasa yang tidak dapat diputuskan oleh mesin Turing. Argumennya sederhana: ada "hanya" banyak TM yang berbeda, tetapi banyak bahasa yang berbeda. Jadi ada paling banyak bahasa yang dapat dipilih, dan sisanya (tak terhingga banyak) tidak dapat ditentukan. Bacaan lebih lanjut:
Untuk meletakkan tangan kita pada bahasa tertentu yang tidak dapat ditentukan, idenya adalah menggunakan teknik bernama diagonalisasi (Georg Cantor, 1873) yang awalnya digunakan untuk menunjukkan bahwa ada lebih banyak bilangan real daripada bilangan bulat, atau dengan kata lain, bahwa .
Gagasan untuk membangun bahasa yang tidak dapat dipastikan pertama adalah sederhana: kami mencantumkan semua mesin Turing (yang mungkin karena mereka dapat dihitung dengan mudah!), Dan membuat bahasa yang tidak setuju dengan masing-masing TM pada setidaknya satu input.
Di atas, setiap baris adalah satu TM dan setiap kolom adalah satu input. Nilai sel adalah 0 jika TM menolak atau tidak pernah berhenti, dan 1 jika TM menerima input itu. Kami mendefinisikan bahasa menjadi sedemikian rupa sehingga D berisi input ke- i jika dan hanya jika TM ke- i tidak menerima input itu.
Mengikuti tabel di atas, sejak M 1 menerima ε . Demikian pula, 0 ∉ D , tetapi 1 ∈ D karena M 3 tidak menerima 1 .
Sekarang, asumsikan memutuskan D dan mencari jalur k dalam tabel: jika ada 1 di k kolom -th, maka M k menerima masukan bahwa tetapi tidak di D , dan jika ada 0 sana, input adalah di D tapi M k tidak menerimanya. Oleh karena itu, M k tidak memutuskan D , dan kami mencapai kontradiksi.
Sekarang untuk pertanyaan Anda. Ada beberapa cara untuk membuktikan bahwa suatu bahasa tidak dapat diputuskan. Saya akan mencoba menyentuh yang paling umum.
Metode pertama, adalah menunjukkan secara langsung bahwa suatu bahasa tidak dapat diputuskan, dengan menunjukkan bahwa tidak ada TM yang dapat memutuskannya. Ini usus mengikuti metode diagonalisasi yang ditunjukkan di atas.
Contoh.
Tunjukkan bahwa (komplemen dari) bahasa diagonal adalah diputuskan.
Bukti.
Asumsikan adalah decidable, dan biarkan M D menjadi penentu. Ada dua kasus:
Kadang-kadang kita dapat menggunakan properti closure untuk menunjukkan bahwa beberapa bahasa tidak dapat dipilih, berdasarkan bahasa lain yang sudah kita ketahui tidak dapat ditentukan.
Secara khusus, jika tidak decidable (kita menulis L ∉ R ), kemudian juga pelengkap ¯ L adalah diputuskan: jika ada penentuan M untuk ¯ L kita hanya bisa menggunakannya untuk memutuskan L dengan menerima setiap kali M menolak dan sebaliknya. Karena M selalu berhenti dengan jawaban (itu adalah penentu), kita selalu dapat membalikkan jawabannya.
Kesimpulan: diagonal bahasa adalah diputuskan, L D ∉ R .
Argumen yang sama dapat diterapkan dengan mencatat bahwa jika kedua dan komplemennya ¯ L adalah rekursif enumerable, keduanya decidable. Ini sangat berguna jika kita ingin membuktikan bahwa suatu bahasa tidak berulang secara berulang, sebuah properti yang kuat daripada ketidakpastian.
Biasanya, cukup sulit untuk membuktikan secara langsung bahwa suatu bahasa tidak dapat diputuskan (kecuali bahasa tersebut sudah dikonstruksi secara "diagonal"). Metode terakhir dan paling umum untuk membuktikan keragu-raguan adalah dengan menggunakan bahasa lain yang sudah kita ketahui tidak dapat diputuskan. Idenya adalah untuk mengurangi satu bahasa ke bahasa lain: untuk menunjukkan bahwa jika salah satu dapat didekati, maka yang lain juga harus dapat ditentukan, tetapi salah satunya sudah diketahui tidak dapat diputuskan yang mengarah pada kesimpulan bahwa yang pertama juga tidak dapat diputuskan. Baca lebih lanjut tentang pengurangan "Apa teknik umum untuk mengurangi masalah satu sama lain?" .
Contoh.
Menunjukkan bahwa bahasa diagonal adalah diputuskan.
Bukti.
Kita tahu bahwa tidak dapat ditentukan. Kami mengurangi L D ke H P (ini dinotasikan L D ≤ H P ), yaitu, kami menunjukkan bahwa jika H P dapat ditentukan, kami dapat menggunakan penentu untuk memutuskan L D , yang merupakan kontradiksi.
Penurunan ini bekerja dengan mengkonversi calon untuk L D (yaitu masukan untuk setiap penentuan potensial / akseptor untuk L D ) untuk calon w ' untuk H P sehingga w ∈ L D jika dan hanya jika w ' ∈ H P . Kami memastikan bahwa konversi ini dapat dihitung. Dengan demikian, memutuskan w ' memberitahu kita apakah atau tidak w ∈ L D , jadi jika kita bisa memutuskan HP kita akan juga dapat memutuskan L D .¹
Konversi adalah sebagai berikut. Ambil beberapa , dan output w ' = ⟨ M ' , ⟨ M ⟩ ⟩ , ² di mana M ' adalah TM yang berperilaku seperti M , tetapi jika M menolak, maka M ' masuk ke loop tak terbatas.
Mari kita melihat bahwa memenuhi persyaratan.
Jika w ∈ L D , itu berarti bahwa M perhentian dan menerima masukan ⟨ M ⟩ . Oleh karena itu, M ' juga perhentian dan menerima masukan ⟨ M ⟩ . Dengan demikian, ⟨ M ' , ⟨ M ⟩ ⟩ ∈ H P .
Di sisi lain, jika w ∉ L D maka M menolak atau tidak pernah berhenti di ⟨
. Dalam kedua kasus M ' akan masuk ke loop tak terbatas pada ⟨ M ⟩ . Dengan demikian, ⟨ M ' , ⟨ M ⟩ ⟩ ∉ H P , dan kita selesai menunjukkan bahwa w ∈ L D jika dan hanya jika w ' ∈ H P , dan dengan demikian menunjukkan bahwa H P ∉ R .
Bacaan lebih lanjut: banyak contoh untuk reduksi dan membuktikan ketidakjelasan bahasa dapat ditemukan melalui tag reduksi .
Ada beberapa batasan lagi pada pengurangan agar valid. Konversi itu sendiri harus dapat dihitung , dan didefinisikan dengan baik untuk input apa pun.
Masukan dari terlihat seperti ⟨ M , x ⟩ , di mana M adalah TM dan x adalah beberapa tali. Jadi di sini kita memilih string x untuk menjadi pengkodean dari mesin M , yang hanya beberapa string ..
"Jadi setiap kali kita ingin membuktikan adalah diputuskan, kita perlu mengurangi L D (atau H P ) untuk itu? Apakah tidak ada jalan pintas saja?"
Sebenarnya ada. Ini adalah Teorema Padi .
Teorema mengatakan bahwa banyak bahasa yang memiliki struktur tertentu, tidak dapat diputuskan. Karena semua bahasa ini memiliki struktur tertentu, kami dapat melakukan reduksi satu kali dan menerapkannya pada bahasa apa pun yang memiliki struktur serupa.
Teorema secara formal dinyatakan dengan cara berikut,
Set adalah subset dari bahasa dalam ; kami menyebutnya properti karena menggambarkan properti dari bahasa yang diterima . Semua TM yang bahasanya memenuhi properti ini adalah milik .
Misalnya, dapat menjadi properti yang bahasa yang diterima mengandung dua kata:
Dalam hal ini adalah himpunan semua TM yang bahasanya terdiri dari dua kata:
Properti bisa sangat sederhana, tetapi tidak bisa semua bahasa RE, atau tidak ada bahasa RE. Jika atau maka properti dikatakan sepele , dan diinduksi dapat dihitung. Contoh untuk sederhana adalah salah satu yang hanya mengandung satu bahasa, katakanlah . Perhatikan bahwa meskipun hanya berisi satu bahasa, ada banyak mesin yang tak terhingga yang bahasanya , jadi tidak terbatas, dan tidak dapat diputuskan.
Teorema ini sangat kuat untuk membuktikan keraguan banyak bahasa.
Contoh.
Bahasa , tidak dapat diputuskan
Bukti.
Kita dapat menulis sebagai , yaitu untuk properti . Ini adalah properti non-sepele (itu termasuk bahasa , tetapi tidak termasuk, misalnya, bahasa . Oleh karena itu, oleh Teorema Rice, tidak dapat ditentukan.
Kami sekarang membuktikan teorema. Seperti disebutkan di atas, kami akan menunjukkan pengurangan dari ke (untuk sembarang non-sepele ).
Bukti.
Biarkan menjadi properti non-sepele, . Kami menunjukkan , yaitu, kami mengurangi menjadi sehingga jika kami dapat memutuskan kami akan dapat memutuskan (yang kami tahu tidak mungkin, oleh karena itu, tidak dapat ditentukan). Dalam bukti di bawah ini kita asumsikan bahwa bahasa kosong bukan bagian dari , yaitu . (jika bahasa kosong dalam , bukti setara bekerja pada properti komplemen , saya akan menghilangkan detailnya). Sejakbersifat nontrivial, termasuk setidaknya satu bahasa; sebut saja bahasa dan anggap adalah mesin yang menerima (mesin tersebut ada, karena hanya menyertakan bahasa dalam RE).
Ingatlah bahwa dalam pengurangan seperti itu (Lihat bagian 3 di atas), kita perlu menunjukkan cara mengubah input untuk menjadi input untuk sehingga
Misalkan , kami mengonversinya menjadi mana deskripsi mesin (pada input ) adalah sebagai berikut:
Kami melihat bahwa konversi ini valid. Catatan pertama adalah mudah untuk membuat deskripsi diberikan .
Jika , maka berhenti di . Dalam hal ini, melanjutkan ke langkah 2, dan berperilaku seperti . Oleh karena itu bahasa yang diterima adalah . Oleh karena itu, .
Jika maka loop pada . Kasus ini, loop pada setiap masukan - itu akan terjebak pada langkah 1. Bahasa diterima oleh dalam hal ini adalah kosong, . Oleh karena itu, .
Teorema Rice memberi kita cara mudah untuk menunjukkan bahwa bahasa tertentu yang memenuhi sifat-sifat tertentu diputuskan, yaitu, . Versi diperpanjang dari teorema Rice memungkinkan kita untuk menentukan apakah bahasanya secara enumerable-enumerable atau tidak, yaitu menentukan apakah , dengan memeriksa apakah memenuhi beberapa properti tambahan.
Teorema (Beras, diperpanjang). Diberikan properti , bahasa secara -ulang dihitung ( ) jika dan hanya jika ketiga pernyataan berikut secara bersama-sama memegang
- Untuk setiap dua , jika dan juga kemudian juga .
- Jika maka terdapat terbatas bagian sehingga .
- Himpunan semua bahasa hingga dalam dapat dihitung (dengan kata lain: ada TM yang menyebutkan semua bahasa terbatas ).
Bukti.
Ini adalah teorema "jika dan hanya jika", dan kita harus membuktikan kedua arahnya. Pertama, kami menunjukkan bahwa jika salah satu kondisi (1,2,3) tidak berlaku, maka . Setelah itu kami akan menunjukkan bahwa jika ketiga kondisi bertahan secara bersamaan, maka .
Jika (1,2) tahan, tetapi (3) tidak, maka .
Mari kita asumsikan bahwa , dan kita akan melihat bahwa kita memiliki cara untuk menerima bahasa terbatas apa pun di (dan dengan demikian, himpunan semua bahasa ini adalah RE), dengan demikian syarat (3) berlaku dan kita mencapai kontradiksi . Bagaimana cara memutuskan apakah terbatas milik atau tidak? Mudah - kami menggunakan deskripsi untuk membuat mesin yang hanya menerima kata-kata dalam , dan sekarang kami menjalankan mesin pada (ingat - kami mengasumsikan , jadi ada mesin yang menerima!). Jika maka dan karena , mesinnya akan mengatakan ya pada input , dan kita selesai.
Jika (2,3) bertahan, tetapi (1) tidak, maka .
Kami berasumsi bahwa dan kami akan menunjukkan bahwa kami memiliki cara untuk memutuskan , yang mengarah ke kontradiksi.
Karena kondisi (1) tidak berlaku, ada bahasa dan superset dari itu, sehingga . Sekarang kita akan mengulangi argumen yang digunakan di Bagian 4 untuk memutuskan : diberi input untuk , kami membuat mesin yang bahasanya if atau sebaliknya, bahasanya adalah . Kemudian, kita dapat memutuskan : apakah berhenti di , atau mesin- untuk menerima; kita dapat menjalankan keduanya secara paralel dan dijamin bahwa setidaknya satu akan berhenti.
Mari kita berikan detail pembuatan (pada input ):
Mengapa ini bekerja? Jika maka 1.1 tidak pernah berhenti, dan menerima persis semua input yang diterima pada langkah 1.2, jadi . Di sisi lain, jika , pada beberapa titik langkah 1.1 berhenti dan menerima persis . Mungkin terjadi bahwa menerima sebelumnya, tetapi karena , ini tidak mengubah bahasa dalam kasus ini.
Jika (1,3) tahan, tetapi (2) tidak, maka .
Sekali lagi, kita akan menganggap dan menunjukkan bahwa menjadi decidable, yang merupakan kontradiksi.
Jika kondisi (2) tidak berlaku, maka untuk setiap , semua himpunan bagiannya yang terbatas memenuhi (perhatikan bahwa harus tidak terbatas, karena ). Seperti di atas, untuk memutuskan untuk input yang diberikan , kami membuat mesin yang bahasanya if dan beberapa terbatas sebaliknya. Kontradiksi mengikuti dengan cara yang sama seperti di atas.
Konstruksi mesin ini sangat mirip dengan kami buat sebelumnya. Mesin (pada input ) tidak:
Itu menyatakan bahwa, jika , maka pada titik tertentu, katakan setelah 1000 langkah, berhenti pada . Oleh karena itu, langkah 1 akan berhenti pada (dan menolak) input panjang . Oleh karena itu, dalam hal ini, adalah terbatas . Juga mencatat bahwa , dan khususnya, dengan asumsi kita tentang ketidakabsahan kondisi (2), kita mendapati bahwa .
Di sisi lain, jika , maka langkah 1 tidak pernah berhenti, dan kami tidak pernah menolak pada langkah 2. Dalam hal ini mudah untuk melihat bahwa dan dalam tertentu, .
Kita dibiarkan menunjukkan arah lain dari teorema yang diperluas. Yaitu, kita perlu menunjukkan bahwa jika semua kondisi (1,2,3) bertahan, maka kita memiliki TM yang menerima , yaitu, . Dengan kata lain, kita perlu memperlihatkan mesin sehingga untuk setiap input yang , mesin menerima input ini, .
Berikut adalah perilaku mesin (pada input ):
Mengapa ini berhasil? Jika maka ia memiliki subset terbatas , dan sekali menampilkan subset itu, langkah 2.2 / 2.3 akan menemukan bahwa menerima semua kata dalam bahasa itu dan menerima.
Di sisi lain, jika itu tidak dapat menerima semua kata dalam untuk setiap . Memang, dengan syarat (1), setiap juga dalam , jadi jika menerima semua kata dalam untuk beberapa , maka dan dengan demikian , dalam kontradiksi.
Akhirnya, perhatikan bahwa berikut ini adalah wajar (dan sangat berguna) wajar dari hal di atas:
Konsekuensi (Beras, diperpanjang). Diberikan properti non sepele , sehingga , bahasa tidak dapat dihitung secara rekursif, yaitu, .
Salah satu alat yang bermanfaat adalah teorema Rice . Inilah yang dikatakan:
Mari satu set non-sepele fungsi unary sebagian komputasi dan sebuah Gödel penomoran dari . Kemudian set indeks
tidak rekursif.
Anda menemukannya juga dinyatakan dalam hal penyandian mesin Turing (atau bahasa pemrograman lengkap Turing lainnya), yaitu ; di sini mendefinisikan penomoran Gödel.
Artinya, Anda dapat menggunakan teorema Rice untuk membuktikan set non-rekursif yang merupakan set indeks set fungsi non-sepele (atau yang dapat direduksi menjadi ).
Perhatikan bahwa ada ekstensi yang dapat digunakan untuk menunjukkan bahwa kumpulan indeks tertentu tidak dapat dihitung secara rekursif.
Biarkan penomoran Gödel. Pertimbangkan serangkaian naturals
.
Sekarang karena untuk
Teorema Padi dapat diterapkan dan tidak dapat ditentukan.
Karena banyak yang tidak terbiasa dengan penomoran Gödel, perhatikan bahwa contoh ini bekerja dengan baik dalam hal mesin Turing (yaitu program) dengan menggunakan .
Pertimbangkan serangkaian naturals
yang tentu saja tidak dapat dihitung. Namun, bukan indeks yang ditetapkan untuk ! Biarkan untuk beberapa . Karena adalah penomoran Gödel , ada (sangat banyak) dengan tetapi untuk semua berlaku karena .
Berhati-hatilah dengan ini! Sebagai patokan, jika indeks fungsi digunakan pada "sisi kanan" atau sebagai parameter fungsi dalam definisi yang ditetapkan, kemungkinan bukan indeks yang ditetapkan. Anda mungkin memerlukan properti dari penomoran Gödel dan teorema fixpoint untuk menunjukkan bahwa set tidak ada set indeks.
Lihat di sini dan di sini untuk posting terkait pada teorema Rice.