参考资料:The Lambda Calculus Its Syntax and Semantics
Lambda项
- 关于归纳定义,可参见从不动点定理到编程语言
- Lambda演算是函数的演算
- 函数 –> 抽象
- 求值 –> 作用
- 函数的变量可以重命名,
- 函数的求值可以视为替换,
- 在不同的地方,有不同的形式。在数学中,它可以记为;在编程语言中,它可以记为fn x => f(x)
- 上面的演算经过形式化,可以得到无类型的Lambda演算,它可能不符合函数的特点。比如,函数应该作用于变量,但是我们允许变量作用于变量
- (变量)变量的集合
- (抽象)变量,表达式 –>
- (作用)表达式、 –>
- Lambda项,归纳定义
- (变量)如果,那么
- (抽象)如果,,那么
- (作用)如果、,那么
- 的子项,归纳定义
- (变量)
- (抽象)
- (作用)
- 的自由变量,归纳定义
- (变量)
- (抽象)
- (作用)
- 也就是说,出现在后面的变量是绑定变量,不出现在后面的变量是自由变量。如果,即没有自由变量,那么称为闭的Lambda项
替换、Alpha转换、Beta规约
- 在Lambda项中,将其中的变量替换为另一个Lambda项,记为
- (变量),()
- (抽象)
- (作用)
- (Alpha转换)将函数的变量重命名为变量,这对应于Alpha转换(Alpha Conversion)
- (新的绑定旧的)
- (旧的绑定新的)
- 也就是说,重名名使用的变量不能是的自由变量,也不能是后面的绑定变量,所以我们必须使用全新的变量,比如
- 因为是一个等价关系,所以也叫做Alpha等价。以后,我们将Alpha等价的Lambda项视为恒等的,并且将视为
- (Beta规约)将函数的求值视为替换,这对应于Beta规约(Beta Reduction)
- (等价关系)是一个等价关系
- (抽象)如果,那么
- (作用)如果,那么,
Church-Rosser定理
- 根据Beta规约,我们可以对Lambda项进行计算,这类似于函数的化简
- 然而,Lambda项的计算可能没有结果,或者结果不唯一。Church-Rosser定理用于刻画Lambda项的计算结果