Bahasa apa pun yang tidak lengkap Turing tidak dapat menulis penerjemah untuk itu sendiri. Saya tidak tahu di mana saya membaca itu tetapi saya telah melihatnya digunakan beberapa kali. Sepertinya ini memunculkan semacam bahasa "Turing" non-Turing lengkap; satu-satunya yang hanya bisaditafsirkan oleh mesin Turing. Bahasa-bahasa ini tidak harus mampu menghitung semua fungsi total dari naturals ke naturals juga tidak harus isomorfik (yang mungkin merupakan bahasa pamungkas A dan B ada sedemikian rupa sehingga ada fungsi F yang A dapat dihitung tetapi B tidak dapat). Agda dapat menafsirkan sistem Godel T dan Agda bersifat total sehingga bahasa utama semacam itu harus benar-benar lebih kuat sehingga sistem Godel T akan terlihat. Tampaknya bagi saya bahwa bahasa seperti itu setidaknya akan sekuat agda juga (meskipun saya tidak punya bukti, hanya firasat).
Apakah ada penelitian yang dilakukan dalam bidang ini? Apa hasil yang diketahui (yaitu bahasa "akhir" yang dikenal)?
Bonus: Saya khawatir ada kasus patologis yang tidak dapat menghitung fungsi yang Godel's System T masih bisa hanya dapat ditafsirkan oleh mesin Turing karena memungkinkan beberapa fungsi yang sangat aneh untuk dihitung. Apakah ini masalahnya atau dapatkah kita tahu bahwa bahasa seperti itu akan dapat menghitung apa pun yang dapat dihitung oleh Sistem T Godel?
Jawaban:
Ini adalah pertanyaan yang diutarakan dengan buruk, jadi mari kita pertama-tama memahaminya. Saya akan melakukannya dengan gaya teori komputabilitas. Jadi saya akan menggunakan angka alih-alih string: sepotong kode sumber adalah angka, bukan serangkaian simbol. Tidak masalah, Anda dapat mengganti dengan s t r i n gN string seluruh bawah.
Mari⟨m,n⟩ menjadi fungsi pasangan .
Katakanlah bahasa pemrogramanL=(P,ev) diberikan oleh data berikut:
Fakta bahwa adalah decidable berarti ada total peta yang dapat dihitung v a l i d : N → { 0 , 1 } sedemikian rupa sehingga v a l i d ( n )P valid:N→{0,1} . Secara informal, kami mengatakan bahwa adalah mungkin untuk mengetahui apakah string yang diberikan adalah bagian kode yang valid. Fungsi e v sangat penting sebagai juru bahasa kita: e v ( m , n ) menjalankan kode m pada input nvalid(n)=1⟺n∈P ev ev(m,n) m n - hasilnya mungkin tidak ditentukan.
Kami sekarang dapat memperkenalkan beberapa terminologi:
Definisi lain dari " interprets L 2 " dimungkinkan, tetapi saya tidak akan membahasnya sekarang.L1 L2
Kami mengatakan bahwa dan L 2 adalah setara jika mereka menginterpretasikan satu sama lain.L1 L2
Ada "bahasa yang paling kuat" dari mesin Turing (yang Anda sebut sebagai "mesin Turing") di mana n ∈ N adalah penyandian mesin Turing dan φ ( n , m ) adalah fungsi komputasi sebagian yang "menjalankan mesin Turing yang dikodekan oleh n pada input m ". Bahasa ini dapat memadukan semua bahasa lain, jelas karena kami membutuhkan e vT=(N,φ) n∈N φ(n,m) n m ev menjadi dihitung.
Definisi bahasa pemrograman kami sangat santai. Agar hal-hal berikut dapat dilalui, mari kita membutuhkan tiga kondisi lagi:
Hasil klasiknya adalah ini:
Teorema: Jika suatu bahasa dapat menafsirkan dirinya sendiri maka itu tidak total.
Bukti. Misalkan adalah program universal untuk total langauge L diimplementasikan dalam L , yaitu, untuk semua m ∈ P dan n ∈ N , e v ( u , ⟨ m , n ⟩ ) ≃ e v ( m , n ) . Sebagai penerus, diagonal, dan e v ( u , - ) diimplementasikan dalam L , demikian juga komposisi mereka e vu L L m∈P n∈N
Perhatikan bahwa kami dapat mengganti peta pengganti dengan peta bebas-fixpoint lainnya.
Berikut adalah teorema kecil yang saya pikir akan membersihkan kesalahpahaman.
Teorema: Setiap bahasa total dapat ditafsirkan oleh bahasa total lainnya.
Bukti. Biarkan menjadi bahasa total. Kami mendapatkan total L ' yang menafsirkan L oleh sebelahnya untuk L nya evaluator e v . Lebih tepatnya, mari P ' = { ⟨ 0 , n ⟩ | n ∈ P } ∪ { ⟨ 1 , 0 ⟩ } dan mendefinisikan e v ' sebagai e v ' ( ⟨ b , n ⟩ , mL L′ L L ev P′={⟨0,n⟩∣n∈P}∪{⟨1,0⟩} ev′
Jelas, L ' total karenaLtotal. Untuk melihat bahwa L ' dapat mensimulasikanLhanya mengambilu=⟨1,0
sumber
is_total
, yang sebaliknya tidak dapat di-cmputable, tetapi tidak dapat mengimplementasikan evaluasi (karena Anda juga harus menghitung bit dari fungsi yang dihasilkan). Secara umum saya akan mengatakan itu bukan bahasa pemrograman jika Anda bahkan tidak dapat mengimplementasikan parser untuk itu.Pernyataan ini salah. Pertimbangkan bahasa pemrograman di mana semantik setiap string adalah "Abaikan masukan Anda dan segera hentikan". Bahasa pemrograman ini tidak lengkap, tetapi setiap program adalah juru bahasa.
sumber