Mendefinisikan fungsi rekursif primitif atas tipe data umum

9

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.

Nathaniel
sumber
1
Bagi saya tidak jelas apa yang sebenarnya Anda cari. Sepertinya Anda hanya berusaha menemukan tipe-W , tetapi mungkin bukan itu.
Andrej Bauer
3
Mungkin berguna untuk mencatat bahwa tipe data "biasa" (seperti pohon) dapat dikodekan dengan cara yang sangat mudah menjadi bilangan asli, dan kemudian fungsi PR di atas natural adalah representasi yang cukup bagus dari apa yang mungkin Anda inginkan. Sebagai alternatif, Anda dapat menggunakan System T dari Gödel yang diperluas ke tipe data orde pertama yang benar-benar positif dengan receptor "biasa".
cody
1
Anda dapat membatasi jenis output dari eliminator menjadi tipe dasar jika Anda ingin menghilangkan "fitur" ini.
cody
1
Menurut saya, bentuk tipe-W terbatas adalah yang Anda cari. Sesuatu seperti tipe-W dengan percabangan terbatas dan reseptor terbatas untuk menghilangkan tipe-tipe W terbatas lainnya.
Andrej Bauer
1
Konferensi CADE 1996 mengunjungi di sini: dblp.org/db/conf/cade/cade96
John Fisher

Jawaban:

5

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 jenisDc1,,cn

ci:T1iT2iTk1iDD

maka recursor untuk tipe output O akan memiliki tiperecDOO

recDO:(T11Tk11DDOO)DO

dan semantik operasionalnya adalah:

recDO f1  fn (ci t1tki d1dm)fi t1tki (recDO f1 fn d1)(recDO f1fn dm)

untuk setiap .i

Sesuatu yang penuh mulut! Setidaknya untuk bilangan asli, kita memang mendapatkan

recNO:(NHAIHAI)HAINHAI

dan r e c O N f 0 f 1 (Sn) f 0 n( r e c O N f 0 f 1 n)

recNHAI f0 f1 0f1 0
recNHAI f0 f1 (S n)f0 n (recNHAI f0 f1 n)

seperti yang diharapkan (perhatikan bahwa konstruktor nol tidak memiliki argumen!).

recDHAIHAI

Tsayaj


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.

cody
sumber
recNHAI:(NHAIHAI)HAINHAI
recN
Saya tidak punya referensi dasar begitu saja, meskipun saya kira slide ini memberikan pengantar lembut yang bagus, dan bab 3 dari tesis Ralph Mattes masuk ke detail teknis yang sangat besar, meskipun memungkinkan jenis induktif non "first order".
cody
2

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.

Stephen Skeirik
sumber
0

Mungkin Anda sedang memikirkan konsep paramorphism ?

Dari Pemrograman Fungsional dengan Pisang, Lensa, Amplop dan Kawat Berduri :

h=(b,)

h0=bh(n+1)=n(hn)

b=1nm=(n+1)×m

h

hnol=bh(kontraSebuahb)=Sebuah(b,hb)
pengguna76284
sumber