Fungsi rekursif primitif didefinisikan lebih dari bilangan asli. Namun, sepertinya konsep tersebut harus digeneralisasi ke tipe data lain, memungkinkan seseorang untuk berbicara tentang fungsi rekursif primitif yang memetakan daftar ke pohon biner, misalnya. Dengan analogi, fungsi rekursif parsial dari bilangan asli menggeneralisasi dengan baik ke fungsi yang dapat dihitung pada tipe data apa pun, dan saya ingin memahami cara membuat generalisasi yang sama untuk fungsi rekursif primitif.
Secara intuitif, jika saya harus mendefinisikan bahasa imperatif sederhana yang memungkinkan operasi dasar, katakan daftar (seperti penggabungan, mengambil kepala dan ekor, perbandingan elemen) dan bentuk iterasi yang membutuhkan mengetahui sebelumnya berapa banyak iterasi akan terjadi ( seperti iterasi atas elemen-elemen dalam daftar tidak berubah), maka bahasa seperti itu paling banyak harus dapat menghitung fungsi rekursif primitif atas daftar. Tetapi bagaimana saya bisa memahami ini secara formal, dan lebih khusus lagi, bagaimana saya bisa membuktikan bahwa bahasa saya menghitung semua fungsi rekursif primitif dari daftar dan bukan hanya sebagian dari mereka?
Untuk lebih jelasnya, saya tertarik untuk memahami fungsi rekursif primitif sebagai kelas fungsi yang terdefinisi dengan baik (jika memang benar), daripada hanya dalam operasi rekursi primitif itu sendiri, yang tampaknya mudah. Saya akan tertarik pada petunjuk apa pun yang telah ditulis tentang rekursi primitif atas struktur data umum, atau memang dalam konteks apa pun selain bilangan asli.
Pembaruan: Saya mungkin telah menemukan jawaban, dalam makalah yang disebut Walther Recursion , oleh McAllester dan Arkoudas. (Prosiding CADE 1996 ). Ini sepertinya berisi versi umum dari rekursi primitif serta rekursi Walther yang lebih kuat. Saya berniat untuk menulis jawaban sendiri setelah saya mencerna ini, tetapi sementara itu catatan ini mungkin bisa membantu orang lain dengan pertanyaan yang sama.
sumber
Jawaban:
Secara umum, dalam bahasa dengan tipe data (seperti daftar, pohon, dll.) Mudah untuk menggambarkan bahasa fungsi yang berperilaku persis seperti yang kita harapkan terjadi perulangan primitif.
Sebagai contoh jika datatype adalah , dan konstruktor c 1 , ... , c n memiliki jenisD c1,…,cn
maka recursor untuk tipe output O akan memiliki tiperecOD O
dan semantik operasionalnya adalah:
untuk setiap .i
Sesuatu yang penuh mulut! Setidaknya untuk bilangan asli, kita memang mendapatkan
dan r e c O N f 0 f 1 (Sn)→ f 0 n( r e c O N f 0 f 1 n)
seperti yang diharapkan (perhatikan bahwa konstruktor nol tidak memiliki argumen!).
Akan menyenangkan untuk memiliki deskripsi yang lebih elegan dari proses ini. Itulah jawaban Carlos yang masuk: tipe data ini dapat digambarkan secara lebih elegan dalam teori kategori sebagai aljabar awal fungsi -fungsi tertentu, sering disebut fungsi-fungsi polinomial . Kemudian, kursor hanyalah (varian dari) morfisme awal aljabar ini, kadang-kadang disebut catamorfisme oleh orang-orang yang mencoba membingungkan berbagai hal. Morfisme ini ada melalui konstruksi aljabar awal.
Sebuah paramorphism hanyalah varian tertentu saya jelaskan di atas.
sumber
Saya baru-baru ini mengajukan pertanyaan ini, dan saya menemukan beberapa artikel yang menarik:
Logika Presentatif Induktif : (a) mendefinisikan logika yang memberikan gagasan generik tentang rekursi primitif atas semua tipe data yang memenuhi persyaratan tertentu (b) membuktikan logika ini adalah perpanjangan konservatif aritmatika rekursif primitif.
Kompleksitas Program Loop : membuktikan gagasan mereka tentang program loop setara dengan fungsi rekursif primitif.
Program Logika untuk Set Rekursif Primitif : membuktikan kelas program logika mereka setara dengan fungsi rekursif primitif.
Karakterisasi bukti-teoretis dari fungsi himpunan rekursif primitif : membuktikan semua fungsi rekursif primitif pada himpunan tertentu hanyalah yang dapat didefinisikan dalam himpunan teori yang sangat lemah.
sumber
Mungkin Anda sedang memikirkan konsep paramorphism ?
Dari Pemrograman Fungsional dengan Pisang, Lensa, Amplop dan Kawat Berduri :
sumber