CS

λ演算(一)

1936年,图灵在论文中引入了Turing Machine的概念,与此同时他在丘奇门下攻读博士学位。

而后经Kleene证明:λ\lambda演算、Turing Machine 和 Kurt Gödel引入的general recursion 函数等价。并由此提出了一个伟大命题——即任何可计算的东西都能被这三种方式所表达。

而函数式语言起源于 丘奇提出的λ\lambda演算。


λ\lambda 演算

λ\lambda演算是图灵完全的,这个计算模型可以解决任何可以机械计算的问题。

λ\lambda演算是一个形式系统,通过λ\lambda项和变换操作表达计算。

λ\lambda 表达式

其由下列符号组成:

  • 变量:字符或字符串
  • Lambda:λ\lambda
  • 点:.
  • 括号:()

$\lambda \ Term $ 定义:

  1. 一个变量是λ\lambda项,通常用小写字母表示。
  2. 如果M是λ\lambda项,那么λx.M\lambda x.M也是,这种形式称为抽象形式。
  3. 如果M和N都是λ\lambda项,那么 M N 也是,这种形式称为应用形式。

除了以上的三种方式外均不能构成λ\lambda项;并且在以下情况下(即没有歧义)可以省略括号:

  • λ\lambda项最外层的括号可以省略,即MNM N(MN)(M N)是等价的。
  • MNM N是左结合的,即MNPM N P((MN)P)((M N)P)是等价的。
  • 如果没有括号约束,抽象形式是尽量向右侧拓展的,即:λx.MN\lambda x.M Nλx.(MN)\lambda x.(M N)等价。

抽象形式λx.M\lambda x.M定义了一个从xxMM的映射;这个函数没有名称,以xx为参数,MM为输出。

应用形式MNM N表示将NN应用在MM上,类似于函数的调用M(N)M(N)

规约

以上只是形式化的定义,我们需要定义相应的运动的操作,以使λ\lambda表达式实现演变。

前置知识:

  • 约束变量:在抽象形式的定义中,λx.M\lambda x.M是将输入变量xx绑定到MM表达式中的xx。则MM中的xx为约束变量。
  • 自由变量:不存在上述关系的变量。

替换(Substitution)是规约的基本动作:E[v:=R]E[v:=R]表示用表达式RR替换在表达式EE中出现的自由变量vv

λ\lambda演算的三种规约

\rightarrow表示归约过程:

  • α\alpha变换:α\alpha变换允许改变约束变量的名字。例如:λx.x\lambda x.x通过α\alpha变换改变为λy.y\lambda y.y,记为λx.xλy.y\lambda x.x\rightarrow\lambda y.y。经过α\alpha变换后的λ\lambda项是等价的。
  • β\beta归约:类似于函数求值过程,将替换作用于(应用)。(λx.M)N(\lambda x.M) Nβ\beta归约为M[x:=N]M[x:=N],记为(λx.M)NM[x:=N](\lambda x.M) N\rightarrow M[x:=N],它陈述了若所有的。
  • η\eta变换:指出,如果两个函数对于所有的参数都能给出一致的结果,那么这两个函数是等价的。

λ\lambda演算以β\beta归约为主,因为其本质就是函数的调用,对应一组计算步骤,这个步骤重复应用β\beta归约,直到不能再被替换。

例子

$ \lambda x.(\lambda y.(x * x + y * y)) $

表示一个以xx为参数的函数(事实上,这种函数形式称为柯里化形式,且可以证明任何多参函数都可以转化为此种形式,即高阶函数),返回一个以yy为参数的函数。令x=3,y=4x=3,y=4,则β\beta规约为:

(λx.(λy.(xx+yy)) 3) 4(λy.(33+yy)) 433+44\begin{aligned} (\lambda x.(\lambda y.(x * x + y * y))\ 3)\ 4 \rightarrow (\lambda y.(3 * 3 + y * y))\ 4 \rightarrow 3 * 3+4*4 \end{aligned}

规约定理
  1. 一个形如(λx.M) N(\lambda x.M)\ Nλ\lambda项被称为β\beta可约项。如果一个λ\lambda项不含有β\beta可约项,则称其为β\beta范式。若一个λ\lambda项P可以经过β\beta规约到Q,则称Q为P的β\beta范式。
  2. 若P存在β\beta范式,那么该β\beta范式在α\alpha变换下唯一。
  3. 若P存在β\beta范式,那么P最左侧且最外的规约方式总能保证得到这个β\beta范式。
  4. λ\lambda项是否存在β\beta范式是不可判定的。