CS
λ演算(一)
April 12, 2021
· Updated March 19, 2026
1936年,图灵在论文中引入了Turing Machine的概念,与此同时他在丘奇门下攻读博士学位。
而后经Kleene证明:λ演算、Turing Machine 和 Kurt Gödel引入的general recursion 函数等价。并由此提出了一个伟大命题——即任何可计算的东西都能被这三种方式所表达。
而函数式语言起源于 丘奇提出的λ演算。
λ 演算
λ演算是图灵完全的,这个计算模型可以解决任何可以机械计算的问题。
λ演算是一个形式系统,通过λ项和变换操作表达计算。
λ 表达式
其由下列符号组成:
- 变量:字符或字符串
- Lambda:λ
- 点:.
- 括号:()
$\lambda \ Term $ 定义:
- 一个变量是λ项,通常用小写字母表示。
- 如果M是λ项,那么λx.M也是,这种形式称为抽象形式。
- 如果M和N都是λ项,那么 M N 也是,这种形式称为应用形式。
除了以上的三种方式外均不能构成λ项;并且在以下情况下(即没有歧义)可以省略括号:
- λ项最外层的括号可以省略,即MN与(MN)是等价的。
- MN是左结合的,即MNP 与 ((MN)P)是等价的。
- 如果没有括号约束,抽象形式是尽量向右侧拓展的,即:λx.MN与λx.(MN)等价。
抽象形式λx.M定义了一个从x到M的映射;这个函数没有名称,以x为参数,M为输出。
应用形式MN表示将N应用在M上,类似于函数的调用M(N)。
规约
以上只是形式化的定义,我们需要定义相应的运动的操作,以使λ表达式实现演变。
前置知识:
- 约束变量:在抽象形式的定义中,λx.M是将输入变量x绑定到M表达式中的x。则M中的x为约束变量。
- 自由变量:不存在上述关系的变量。
替换(Substitution)是规约的基本动作:E[v:=R]表示用表达式R替换在表达式E中出现的自由变量v。
λ演算的三种规约
→表示归约过程:
- α变换:α变换允许改变约束变量的名字。例如:λx.x通过α变换改变为λy.y,记为λx.x→λy.y。经过α变换后的λ项是等价的。
- β归约:类似于函数求值过程,将替换作用于(应用)。(λx.M)N的β归约为M[x:=N],记为(λx.M)N→M[x:=N],它陈述了若所有的。
- η变换:指出,如果两个函数对于所有的参数都能给出一致的结果,那么这两个函数是等价的。
λ演算以β归约为主,因为其本质就是函数的调用,对应一组计算步骤,这个步骤重复应用β归约,直到不能再被替换。
例子
$ \lambda x.(\lambda y.(x * x + y * y)) $
表示一个以x为参数的函数(事实上,这种函数形式称为柯里化形式,且可以证明任何多参函数都可以转化为此种形式,即高阶函数),返回一个以y为参数的函数。令x=3,y=4,则β规约为:
(λx.(λy.(x∗x+y∗y)) 3) 4→(λy.(3∗3+y∗y)) 4→3∗3+4∗4
规约定理
- 一个形如(λx.M) N的λ项被称为β可约项。如果一个λ项不含有β可约项,则称其为β范式。若一个λ项P可以经过β规约到Q,则称Q为P的β范式。
- 若P存在β范式,那么该β范式在α变换下唯一。
- 若P存在β范式,那么P最左侧且最外的规约方式总能保证得到这个β范式。
- λ项是否存在β范式是不可判定的。