“Urutan aplikatif” dan “Urutan normal” di lambda-calculus

14

Urutan yang berlaku: Selalu sepenuhnya mengevaluasi argumen dari suatu fungsi sebelum mengevaluasi fungsi itu sendiri, seperti -

(λx.x2(λx.(x+1)  2)))(λx.x2(2+1)) (λx.x2(3)) 32  9

Urutan normal: Ekspresi akan dikurangi dari luar, seperti -

(λx.x2(λx.(x+1) 2)) (λx.(x+1)   2)2 (2+1)2 32  9

Misalkan M=(λx.y (λx.(x  x) λx.(x  x)))

Mengapa dengan urutan aplikatif, loop tak terbatas, tetapi dalam urutan normal, M y ?M
My

URL87
sumber
1
Sudahkah Anda mencoba mengevaluasi mereka sama sekali? Apakah ini kasus pertama atau kedua yang tidak jelas?
Karolis Juodelė
@ KarolisJuodelė: 1
URL87
1
Seharusnya ekspresi lambda tidak ditulis dengan tanda kurung untuk menandai akhir dari ekspresi lambda pertama dan awal dari argumen, misalnya:Let M = (λx.y) ((λx.(x x)) λx.(x x))
mattgately

Jawaban:

7

adalah loop tak terhingga karena λ x . ( x x ) λ x . ( x x ) λ x . ( x x ) λ x . ( x x ) Perhatikan bahwa λ x . ( x(λx.y (λx.(x  x) λx.(x  x)))

λx.(x  x) λx.(x  x)λx.(x  x) λx.(x  x)
hanya menulis argumennya dua kali.λx.(x  x)
Karolis Juodelė
sumber
15

Istilah yang Anda kurangi adalah mana K y adalah fungsi konstan λ x . y (selalu mengembalikan y , mengabaikan argumennya) dan Ω = ( λ x . ( x(KyΩ)Kyλx.yy adalah istilah yang tidak berakhir. Dalam beberapa hal Ω adalah istilah non-terminasi terakhir: ini beta-reduksi ke dirinya sendiri, yaitu Ω Ω . (Pastikan untuk mengerjakannya di atas kertas setidaknya satu kali dalam hidup Anda.)Ω=(λx.(xx)λx.(xx))ΩΩΩ

Pengurangan order yang berlaku harus mengurangi argumen fungsi ke bentuk normal, sebelum dapat mengevaluasi redex tingkat atas. Karena argumen tidak memiliki bentuk normal, pengurangan urutan aplikatif tidak terbatas. Secara umum, untuk istilah M , M Ω M Ω , dan ini adalah pengurangan yang dipilih oleh strategi urutan aplikatif.ΩM.M.ΩM.Ω

Reduksi urutan normal dimulai dengan mengurangi redex tingkat atas (karena fungsi sudah dalam bentuk normal). Karena K y mengabaikan argumennya, ( K y Ω ) y dalam satu langkah. Secara umum, K y N y untuk istilah N apa pun , dan ini adalah pengurangan yang dipilih oleh strategi urutan normal.KyKy(KyΩ)yKyNyN

Kasus ini menggambarkan fenomena yang lebih umum: pengurangan pesanan yang aplikatif hanya pernah menemukan bentuk normal jika istilah tersebut sangat normal, sedangkan pengurangan urutan normal selalu menemukan bentuk normal jika ada. Ini terjadi karena urutan aplikatif selalu mengevaluasi argumen sepenuhnya terlebih dahulu, dan karena itu melewatkan kesempatan untuk argumen yang ternyata tidak digunakan; sedangkan urutan normal mengevaluasi argumen selambat mungkin, dan selalu menang jika argumen ternyata tidak digunakan.

(Sisi sebaliknya adalah bahwa urutan aplikatif cenderung lebih cepat dalam praktik, karena relatif jarang argumen tidak digunakan; sedangkan argumen umum digunakan beberapa kali, dan di bawah urutan aplikatif argumen hanya dievaluasi satu kali. Normal order mengevaluasi argumen sesering yang digunakan, baik 0, 1 atau berkali-kali.)

Gilles 'SANGAT berhenti menjadi jahat'
sumber
KyNNy