ラムダ計算について読んでいます。セクション 2.1 の最後からhttp://www.toves.org/books/lambda/ :
(λx.(λx.λy.x × y) 3 ((λz.x + z) 2)) 1 ⇒ (λx.λy.x × y) 3 ((λz.x + z) 2) where x = 1
⇒ (λy.x × y) ((λz.x + z) 2) where x = 3
⇒ x × y where x = 3 and y = (λz.x + z) 2
⇒ x × y where x = 3 and y = x + z and z = 2
⇒ x × y where x = 3 and y = 5 and z = 2
⇒ 15
それは言う
ただし、実際には、y は 5 ではなく 3 の値を取得する必要があります。これは、最初のベータ還元で 1 が式の x の位置に差し込まれるためです。このため、遅延パラメーターは、各リダクションで現在の変数コンテキストを保持する必要があります。この場合、式 λy.x × y 内では x = 3 ですが、式の外では x = 1 であるという事実を維持します。
しかし、ベータ削減中の操作の順序について混乱しています。残念ながら、説明があいまいです。x は (λx.λy.x × y) 内で 1 である必要があり、次に y = 3 を渡す必要があることを意味する可能性があります。これは、次に渡されるパラメーターであり、x が既に設定されている (間違っていると感じます)、または以下のルートに進むことを意味します。 :
(λx.(λx.λy.x × y) 3 ((λz.x + z) 2)) 1
は (λx.(λt.λy.t × y) 3 ((λz. x + z) 2)) 1
x はここで境界ですか? 1でいいんじゃない?
つまり、これを減らすと、 (λt.λy.t × y) 3 ((λz.1 + z) 2)) x = 1 (λy.3 × y) ((λz.1 + z) 2)) x = 1、t = 3 3 × ((λz.1 + z) 2)) x = 1、t = 3、y = ((λz.1 + z) 2)) 3 × ((λz.1 + z) 2)) x = 1、t = 3、y = ((λz.1 + z) 2))、z = 2 3 × (1 + 2) x = 1、t = 3、y = ((λz.1 + z) 2)), z = 2 3 x 3 = 9
あれは正しいですか?それとも、間違って減らしましたか?