如何减少lambda演算

时间:2017-01-27 07:40:38

标签: haskell lambda-calculus

我尝试理解lambda演算并阅读精彩的article

在第8页上,有一个表达式:

(λy.(x(λx.xy)))

如果我打算用(λy)替换最左边的t

(λy.(x(λx.xy))) t

然后结果会是?

x(λx.xy)

1 个答案:

答案 0 :(得分:1)

我冒昧地将其重写为haskell语法

(\y -> x (\x-> x y))
(\y -> x (\x-> x y)) t

x (\x -> x t)

因为y已经绑定到输入\ y所有y将被t替换。

编辑:如下面的评论中所述,如果t包含一个空闲的x,那么将此范围内的绑定x重命名为" fresh"名称。这个名字目前没有任何意义。如果我们说

let t = \t -> x t

然后正确的替换看起来像

x (\z -> z (\t -> x t))

pigworker所述,选择某些z作为新鲜标识符来替换我们的绑定x以防止将自由x隐藏在t中。