在Wiki中阅读Lambda微积分时,遇到了“强>捕获 - 避免替换”一词。有人可以解释它的含义,因为我无法从任何地方找到定义。
谢谢
PS
我想知道的是告诉操作捕获避免替换的原因。如果有人能做到这一点,那将是一个很大的帮助
答案 0 :(得分:49)
通常,我们在lambda演算中选择的特定变量名称是无意义的 - x
的函数与a
或b
或{{1}的函数相同}}。换句话说:
(λx。(λy.yx))相当于(λa。(λb.ba)) - 将c
重命名为x
而将a
重命名为y
不改变任何事情。
由此可以得出结论,允许任何替换 - 即任何lambda术语中的任何变量都可以被任何其他变量替换。事实并非如此。考虑上面第一个表达式中的内部lambda:
(λy.yx)
在这个表达式中,b
是“自由的” - 它不受lambda抽象的“约束”。如果我们要将x
替换为y
,则表达式将变为:
(λx.xx)
这有着完全不同的含义。 x
现在都引用了lambda抽象的参数。最后x
(最初是“免费”)已被“捕获”;它被lambda抽象“束缚”。
避免意外捕获自由变量的替代品被称为“捕获 - 避免替换”。
现在,如果我们在lambda演算中所关心的只是将一个变量替换为另一个变量,那么生活将会非常无聊。更现实的是,我们想要做的是用 lambda术语替换变量。因此,我们可以用 lambda抽象(λx.t)或应用程序(x t)替换变量。在任何一种情况下,同样的考虑都适用 - 当我们进行替换时,我们希望确保不会通过意外“捕获”最初自由的变量来改变原始表达式的含义。
答案 1 :(得分:7)
如果变量被放置在绑定变量的lambda(或其他绑定结构,如果它们存在)下,则捕获。它被称为捕获 - 避免替换,因为该过程避免意外地允许在原始表达式中捕获替换中的自由变量。
答案 2 :(得分:5)
用E代替E'(写成[E'/ x] E)
示例: [y(λx.x)/ x]λy。 (λx.x)y x
重命名后:[y(λv.v)/ x]λz。 (λu.u)z x
替换后:λz。 (λu.u)z(y(λv.v))