Combinators untuk Fungsi Rekursif Primitif

19

Sudah diketahui bahwa kombinator S dan K Turing Lengkap. Adakah kombinator yang cukup untuk menghasilkan (hanya) fungsi rekursif primitif?

NietzscheanAI
sumber
1
Apakah ini yang Anda tanyakan? mathoverflow.net/questions/48006/…
Andrej Bauer

Jawaban:

17

Ya, tetapi Anda harus mempertimbangkan kombinator yang diketik. Artinya, Anda perlu memberi dan K skema jenis berikut: K : A B A S : ( A B C ) ( A B ) ( A C )SK

K:SEBUAHBSEBUAHS:(SEBUAHBC)(SEBUAHB)(SEBUAHC)
mana , dan C adalah meta-variabel yang dapat dipakai untuk semua jenis beton pada setiap penggunaan.SEBUAH,BC

Kemudian, Anda ingin menambahkan tipe dari bilangan asli ke bahasa tipe, dan menambahkan kombinator berikut: z : N s u c c : NN i t e r : N( NN ) NNN

z:Nskamucc:NNsayater:N(NN)NN

Aturan kesetaraan untuk penambahan adalah:

sayatersayafz=sayasayatersayaf(skamucce)=f(sayatersayafe)

sayater:SEBUAH(SEBUAHSEBUAH)NSEBUAH
sayater

sayater

halred=λk.sayater(z,z)(λ(n,n).(skamuccn,n))khalred=λk.snd(halredk)

NN×N

Neel Krishnaswami
sumber
Jadi ini kurang dari Turing-lengkap karena pembatasan untuk combinator yang diketik? Bisakah variabel tipe (secara rekursif) menunjukkan fungsi lebih dari variabel tipe (mis. A = D -> E untuk beberapa tipe D dan E)?
NietzscheanAI
2
SK
Neel, terima kasih. Apakah saya benar dalam berpikir bahwa itu mungkin untuk mewakili z, succ dan iter dalam hal S dan K melalui pengkodean angka Gereja?
NietzscheanAI
00(skamuccx)x
@ Xoff: fungsi pendahulunya memiliki definisi waktu linear yang terkenal iter. Ini bisa menjadi objek pertanyaan di cs.stackexchange.com ...
cody