Janin, jika Anda belum pernah mendengarnya, dapat dibaca di sini . Ia menggunakan sistem 'matriks panggilan' dan 'grafik panggilan' untuk menemukan semua 'perilaku rekursi' dari panggilan rekursif dalam suatu fungsi. Untuk menunjukkan bahwa suatu fungsi berakhir, itu menunjukkan bahwa semua perilaku rekursi dari panggilan rekursif yang dilakukan pada suatu fungsi mematuhi 'pemesanan leksikografis' tertentu. Pengecek terminasi ini memungkinkan semua fungsi rekursif primitif dan fungsi seperti fungsi Ackermann. Pada dasarnya itu memungkinkan rekursi primitif multi-argumen. Ini pada dasarnya juga merupakan pemeriksa penghentian Agda; Saya percaya bahwa Coq memiliki beberapa fasilitas serupa walaupun mungkin lebih umum.
Dari membaca kertas "Total Functional Programming" oleh DA Turner . Dia menjelaskan bahwa bahasa yang diusulkannya akan mampu mengekspresikan semua "fungsi rekursif primitif" seperti yang terlihat dalam Sistem T yang dipelajari oleh Godel. Dia melanjutkan dengan mengatakan bahwa sistem ini "diketahui mencakup setiap fungsi rekursif yang totalitasnya dapat dibuktikan dalam logika urutan pertama".
Dosis Janin memungkinkan semua fungsi rekursif primitif? Jika demikian, apakah itu memungkinkan fungsi yang bukan fungsional rekursif primitif? Bisakah kutipan diberikan untuk jawaban ini? (Ini sebenarnya tidak perlu karena saya hanya tertarik; Hanya saja beberapa membaca perkawinan tentang masalah ini akan menyenangkan)
Pertanyaan bonus: Fungsional rekursif primitif memiliki definisi yang sangat ringkas dalam hal combinator: diketik S dan K (yang tidak dapat mengekspresikan combinator titik tetap), nol, fungsi penerus, dan fungsi iterasi; itu dia. Apakah ada bahasa lain yang lebih umum yang memiliki definisi ringkas dan di mana semua ekspresi berakhir?
Jawaban:
Ya, pemeriksa janin dapat memeriksa semua yang ada di Goedel's T. Anda dapat menunjukkan ini dengan menggunakan pemeriksa untuk menunjukkan bahwa operator iterasi di T sedang mengakhiri. Misalnya, definisi berikut akan berfungsi:
Ini sangat mudah bagi pemeriksa janin (atau sebagian besar pemeriksa penghentian lainnya) untuk memeriksanya, karena ini merupakan definisi rekursif struktural yang jelas.
Agda dan Coq keduanya membuktikan pembatalan fungsi yang jauh melebihi apa yang terbukti total dalam aritmatika orde pertama. Fitur yang memungkinkan ini adalah bahwa mereka mengizinkan mendefinisikan jenis dengan rekursi pada data, yang disebut "eliminasi besar". (Dalam teori himpunan ZF, skema aksioma penggantian kira-kira memiliki tujuan yang sama.)
Contoh mudah dari sesuatu yang melampaui T adalah konsistensi dari Goedel's T itu sendiri! Kami dapat memberikan sintaks sebagai tipe data:
Perhatikan bahwa dependensi jenis memungkinkan kita untuk menentukan tipe data dari istilah yang hanya mengandung istilah T. yang diketik dengan baik. Kemudian kita dapat memberikan fungsi interpretasi untuk jenis-jenis:
Ini mengatakan bahwa itu
N
harus bilangan asli Agda, dan panah T harus ditafsirkan sebagai ruang fungsi Agda. Ini adalah eliminasi "besar", karena kita mendefinisikan satu set oleh rekursi pada struktur tipe data T.Kami kemudian dapat mendefinisikan fungsi interpretasi, menunjukkan bahwa setiap istilah Goedel's T dapat ditafsirkan oleh istilah Agda:
(Saya tidak memiliki Agda di mesin ini, jadi pasti ada beberapa impor yang hilang, deklarasi fixity, dan kesalahan ketik. Memperbaiki itu adalah latihan untuk pembaca, yang juga bisa menjadi editor, jika mereka mau.)
Saya tidak tahu apa kekuatan konsistensi Agda, tetapi Benjamin Werner telah menunjukkan bahwa Kalkulus Konstruksi Induktif (kalkulus kernel Coq) sama dengan ZFC plus banyak kardinal yang tidak dapat diakses.
sumber
Sebagai sarana klarifikasi, saya harus mencatat bahwa Fetus dikembangkan oleh Andreas Abel , yang juga mengembangkan pemeriksa terminasi asli untuk Agda , dan bekerja pada teknik terminasi yang lebih maju sejak itu.
sumber
Jika dengan fungsi rekursif primitif yang Anda maksud adalah fungsi rekursif primitif dan Anda tahu bahwa Janin mengandung fungsi Ackermann maka Fetus tidak bertepatan dengan kelas fungsi pr karena fungsi Ackermann bukan rekursif primitif. Ini ditunjukkan oleh Ackermann dan kemudian sebuah bukti yang disederhanakan diberikan oleh Rosza Peter dalam " Konstruktion nichtrekursiver Funktionen " 1935 (sayangnya hanya di Jerman sejauh yang saya tahu).
Jika Anda mencari kelas yang lebih besar dari fungsi rekursif yang dijamin akan berakhir yang mungkin bertepatan dengan kelas fungsi yang ditangkap oleh Fetus maka beberapa karya lain dari Rosza Peter mungkin menarik bagi Anda.
[sunting] Fungsi rekursif primitif tidak sama dengan fungsi rekursif primitif seperti yang disebutkan dalam komentar di bawah ini. Namun saya pikir seseorang dapat mentransfer konsep rekursi transfinite ke fungsional. Namun, tidak jelas apakah itu masih lebih kuat dan pengaturan fungsional.
sumber