Input dan output sebagai angka Gereja .
00000000 01011111 01100101 11101101 0
Dalam kalkulus lambda , itu adalah λ m . λ n . λ f . λ x . m f ( n f x ).
Indeks De Bruijn : λ λ λ λ 4 2 (3 2 1)
Kalkulus Lambda adalah cara ringkas untuk menggambarkan pemetaan (fungsi).
Misalnya, tugas ini dapat ditulis sebagai λ x . λ y . x + y
Yang perlu diperhatikan adalah, bahwa ini bukan lambda (fungsi) yang membutuhkan dua argumen. Ini sebenarnya lambda bersarang. Namun, ia berperilaku seperti lambda yang membutuhkan dua argumen, sehingga dapat digambarkan secara informal. Setiap lambda secara formal hanya membutuhkan satu argumen.
Misalnya, jika kita menerapkan lambda ini ke 3 dan 4:
(λ x . λ y . x + y ) 3 4 ≡ (λ y . 3 + y ) 4 ≡ 3 + 4 = 7
Jadi, lambda pertama sebenarnya mengembalikan lambda lain.
Angka Gereja adalah cara menghilangkan tanda-tanda tambahan, hanya menyisakan simbol dan variabel lambda.
Setiap angka dalam sistem Gereja sebenarnya adalah lambda yang menentukan berapa kali fungsi diterapkan pada suatu item.
Biarkan fungsi menjadi f dan item menjadi x .
Jadi, angka 1 akan sesuai dengan λ f . λ x . f x , yang berarti menerapkan f ke x tepat sekali.
Angka 3, misalnya, adalah λ f . λ x . f ( f ( f x )), yang berarti menerapkan f ke x tepat tiga kali.
Oleh karena itu, untuk menambahkan dua angka Gereja (katakanlah, m dan n ) bersamaan, itu sama dengan menerapkan f ke x , m + n kali.
Kita dapat mengamati bahwa ini sama dengan pertama kali menerapkan f ke x , n kali, dan kemudian menerapkan f pada item yang dihasilkan m kali.
Misalnya, 2 berarti f(f(x))
dan 3 berarti f(f(f(x)))
, jadi 2 + 3 adalah f(f(f(f(f(x)))))
.
Untuk menerapkan f ke x , n kali, kita memiliki n f x .
Anda dapat melihat m dan n sebagai fungsi yang mengambil dua argumen, secara informal.
Kemudian, kami menerapkan f lagi ke item yang dihasilkan ini, m kali: m f ( n f x ).
Kemudian, kami tambahkan kembali pelat untuk mendapatkan λ m . λ n . λ f . λ x . m f ( n f x ).
Sekarang, kita harus mengubahnya menjadi indeks De Bruijn .
Pertama, kami menghitung "jarak relatif" antara setiap variabel ke deklarasi lambda. Misalnya, m akan memiliki jarak 4, karena dinyatakan 4 lambdas "lalu". Demikian pula, n akan memiliki jarak 3, f akan memiliki jarak 2, dan x akan memiliki jarak 1.
Jadi, kami menuliskannya sebagai bentuk peralihan ini: λ m . λ n . λ f . λ x . 4 2 (3 2 1)
Kemudian, kita menghapus deklarasi variabel, meninggalkan kita dengan: λ λ λ λ 4 2 (3 2 1)
Sekarang, kami mengubahnya menjadi kalkulus lambda biner .
Aturannya adalah:
- λ menjadi
00
.
- m n (pengelompokan) menjadi
01 m n
.
- angka i menjadi
1
i kali + 0
, misalnya 4 menjadi 11110
.
λ λ λ λ 4 2 (3 2 1)
≡ λ λ λ λ 11110
110
( 1110
110
10
)
≡ λ λ λ λ 11110
110
0101 111011010
≡ λ λ λ λ 0101
111101100101111011010
≡ 00
00
00
00
0101
111101100101 111011010
≡ 000000000101111101100101111011010