将lambda演算项减少到正常形式

时间:2017-03-23 00:52:31

标签: computer-science lambda-calculus

这是在任何人问之前的家庭作业,我只是在寻找指导。

这是第一个问题:

(λ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?

我希望这是有道理的。在此先感谢您的帮助。

1 个答案:

答案 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