Evaluasi kalkulus lambda yang melibatkan angka-angka Gereja

10

Saya mengerti bahwa angka Gereja terlihat seperti (... n kali ...) . Ini berarti tidak lebih dari "fungsi diterapkan kali ke fungsi ". λ s . λ z . s scnλs.λz.ss n zszsnz

Definisi yang mungkin dari fungsi adalah sebagai berikut: . Melihat tubuh, saya mengerti logika di balik fungsi. Namun, ketika saya mulai mengevaluasi, saya mandek. Saya akan mengilustrasikannya dengan sebuah contoh:t i m e s = λ m . λ n . λ s . mtsayamestsayames=λm.λn.λs.m(ns)

(λm.λn.λs.m(ns))(λs.λz.ssz)(λs.λz.sssz)λs.(λs.λz.ssz)((λs.λz.sssz)s))λs.(λs.λz.ssz)(λz.sssz)λs.λz.(λz.sssz)(λz.sssz)z

Sekarang dalam situasi ini, jika saya pertama kali menerapkan , saya mendapatkan hasil yang diinginkan. Namun, jika saya menerapkan pertama, seperti yang seharusnya karena aplikasi asosiatif dari kiri, saya mendapatkan hasil yang salah:( λ z . s(λz.sssz)z(λz.sssz)(λz.sssz)

λs.λz.(λz.sssz)(λz.sssz)zλs.λz.(sss(λz.sssz))z

Saya tidak bisa lagi mengurangi ini. Apa yang saya lakukan salah? Hasilnya harusλs.λz.ssssssz

codd
sumber
Angka Gereja dalam term awal Anda tidak benar. 2 diwakili oleh , bukan . λ s . λ z . s s zλs.λz.s(sz)λs.λz.ssz
Uday Reddy

Jawaban:

7

Saya pikir pengurangan Anda benar (saya hanya melihatnya dengan mata saja). Pada akhirnya, Anda tidak dapat menerapkan ke , ini tidak pernah muncul dalam istilah. adalah , bukan . Fungsi dalam kalkulus lambda mengambil satu argumen; mereka secara efektif digulung : fungsi dua argumen diimplementasikan sebagai fungsi satu argumen yang mengambil argumen pertama dan mengembalikan fungsi satu argumen baru yang mengambil argumen kedua dan mengembalikan hasilnya.z λ z . f f z λ z . ( f f ) z λ z . f ( f z )(λz.sssz)zλz.ffzλz.(ff)zλz.f(fz)

Anda membuat kesalahan yang sama ketika mendefinisikan angka Gereja. Angka Gereja untuk didasarkan pada penyusunan fungsi kali. “Fungsi diterapkan kali pada fungsi ” . Apa yang Anda tulis adalah fungsi diterapkan kali ke fungsi dan akhirnya ke , yang tidak menurut saya istilah yang berguna.n s n z λ s . λ z . s ( s ( snnsnzs n - 1 s zλs.λz.s(s(...sz)...))sn-1sz

2×3 demikian . Saya akan membiarkan Anda memeriksa bahwa itu berkurang menjadi .(λmns.m(ns))(λsz.s(sz))(λsz.s(s(sz)))λsz.s(s(s(s(s(sz)))))

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Sejauh paragraf Anda berjalan, Anda benar dan saya menyadari hal ini. Itu hanya mengejutkan saya bahwa menerapkan asosiatif yang benar menghasilkan hasil yang tepat. Sejauh paragraf kedua: Anda benar. Tidak menggunakan kawat gigi salah bagi saya, lagi karena asosiasi kiri aplikasi. Saya akan mengurangi semuanya lagi sekarang dan melihat apakah kurangnya kawat gigi memang menyebabkan kesalahan saya!
codd
Itu benar. Anda memperhatikan bahwa notasi saya menyiratkan urutan aplikasi yang salah menyelesaikan masalah! Menerima jawaban Anda.
codd