这是在任何人问之前的家庭作业,我只是在寻找指导。
这是第一个问题:
(λ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?
我希望这是有道理的。在此先感谢您的帮助。
答案 0 :(得分:1)
Lambda演算包含无上下文语法
E ::= v Variable
| λ v. E Abstraction
| E E Application
其中v
范围与变量以及β和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. b a
中免费,但在λ a. λ b. b a
中则不行。两个缩减规则都不适用的表达式为 normal form 。
优先考虑减少最左边的重新索引。 适用订单在替换前规范化参数,正常订单不规则化。
纠正两个表达式的正常顺序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