[英]Reducing lambda calculus term to normal form
這是在任何人要求之前進行的作業,我只是在尋找指導。
這是第一個問題項:
(λx.λy.x y)(λx.x y)
=(λx.λz.x z)(λx.x y) α-renaming
=(λz.(λx.x y) z)
=(λx.x y)
我想確保我正確地考慮了這一點。 右邊的術語是放置在參數x中的值,對嗎? 然后,將x的每個實例替換為右邊的項。 我重命名了y,所以與自由y和有界y沒有任何混淆。 現在我不明白的是第二行以=開頭。 是否將最右邊的z作為變量z的參數傳遞? 還是將其傳遞給x? 無論哪種方式,我都認為答案是相同的,但是我想知道哪種方法是正確的。
這是第二個問題
((λx.λy.x y)(λx.x)) y
=((λx.λz.x z)(λx.x)) y
=(λz.(λx.x)z) y
=(λx.x)y
=(λx.x)
由於括號的原因,(λx.x)項是否可以代替參數x? 還是用y代替x?
我希望這是有道理的。 在此先感謝您的幫助。
Lambda演算包含上下文無關的語法
E ::= v Variable
| λ v. E Abstraction
| E E Application
其中v
覆蓋變量,以及beta和eta減少規則
(λ x. B) E -> B where every occurrence of x in B in substituted by E
λ x. E x -> E if x doesn't occur free in E
a
在λ b. ba
是自由的 λ b. ba
λ b. ba
,但不在λ a. λ b. ba
λ a. λ b. ba
λ a. λ b. ba
。 兩個歸約規則都不適用的表達式是正常形式 。
減少最左邊的redex是優先事項。 應用順序在替換之前將參數標准化,而正常順序則不會。
糾正兩個表達式的正態beta-和eta-規范化:
(λ x. (λ y. x y)) (λ a. a b)
= (λ x. x) (λ a. a b) Eta-reduction
= λ a. a b Beta-reduction
((λ x. (λ y. x y)) (λ a. a)) f
= ((λ x. x) (λ a. a)) f
= (λ a. a) f
= f
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.