如何使用命名上下文查找de Bruijn自由变量索引?

时间:2012-02-26 03:58:23

标签: lambda-calculus

在“类型和编程语言”的6.1.2节中,他们讨论了用于对lambda表达式中的自由变量进行编号的命名上下文。使用他们提供的示例方案,当λx.xbλx.xx明显不同的术语时,它们的de Bruijn表示为λ.00。这是如何工作的?

1 个答案:

答案 0 :(得分:14)

如您所述,本书使用命名上下文将n个自由变量映射到0n-1的数字。但是,如果仔细观察本书中的示例,您会注意到它不直接使用这些数字来表示变量。例如,即使λw. y w的映射为3而不是4,它也将λ. 4 0表示为y

这里发生的是他将变量的嵌套深度添加到数字中。即如果自由变量v嵌套在d lambdas中,它将获得索引Γ(v)+d,而不仅仅是Γ(v)

因此,在您的示例中,使用上下文Γ {b -> 0} λx.xb将表示为λ. 0 1,而不是λ. 0 0。因此没有歧义。