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


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)))))


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.