参考资料: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项的计算结果