图灵证明了图灵机可计算的函数等价于由λ-calculus定义的可计算函数。在\l-calculus中,“计算”是通过term的rewrite来完成的,因此函数的计算往往意味着符号串的“递归”。我们将会定义递归函数(recursive functions)的概念,并证明满足该定义的函数等价于能用\l-term表示。
数学的\l-calculus表示
逻辑的表示(Logic)
\newcommand{\true}{\textsf{true}}\newcommand{false}{\textsf{false}}我们可以用\l-term表示逻辑真和逻辑假。我们可以用combinator K≡\lxy.x表示逻辑真,K∗≡\lxy.y表示逻辑假。记K≡true,K∗≡false。把\l-term的集合{true,false}称为布尔式(Boolean)。
假设一个\l-term B可以演算得到一个布尔式(B=true或B=\false),那么对于任意的P,Q∈Λ,BPQ就可以用来表示一个“if语句”:if B then P else Q。
自然数的表示(Numerals)
利用布尔值,我们可以表示有序对(ordered pair)。对于M,N∈Λ,(\lz.(zMN))\true =\trueMN=M,(\lz.(zMN))\false =\falseMN=N。我们把\lz.(zMN)记为[M,N],于是得到[M,N]\true=M,[M,N]\false=N。
利用有序对,我们可以表示自然数。首先,用\lx.x表示0,记为\num0;假设n表示为\numn,那么\numn+1可以表示为[\false,\numn]。在这样的表示下,我们可以找到一个combinator用来表示自然数的后继(successor):令S+≡\lx.[\false,x],我们有S+\numn=(\lx.[\false,x])\numn =[\false,\numn]=\numn+1。
我们可以找到一个combinator用来表示前驱(predecessor):令P−≡\lx.(x \false),我们有P−\numn+1≡ (\lx.(x \false))[\false,\numn]=[\false,\numn]\false=\numn。
还可以找到一个combinator用来判断一个数是否是0:只需令Zero≡\lx.(x \true),我们有Zero\num0≡(\lx.(x \true))(\lx.x)=(\lx.x)\true=\true,有Zero\numn+1≡(\lx.(x \true))[\false,\numn]=[\false,\numn]\true=\false。
数值函数的表示(Numeric Functions)
自然数的p元函数Np→N称为一个p-数值函数。对于一个p-数值函数φ,如果能找到一个combinator F满足:对于任意的n1,⋯,cp∈N,都有\numφ(n1,⋯,np)=F\numn1⋯\numnp,就称φ是λ-definable的(或称φ is \l-defined by F)。
递归函数(Recursive Functions)
我们已经看到,数值函数S+(n)=n+1可以由S+定义,数值函数Z(n)=0可以由\lx.\num0定义。数值函数函数Uin(x1,⋯,xn)=xi很容易用有序对的combinator来定义。以上三个数值函数Uin,S+,Z称为initial functions(初始函数)。Initial functions都是λ-definable的。
对于一个数值函数的集合A,如果A满足:∀p,m,对任意的A中的p-数值函数ψ1,⋯,ψm,以及\A中的m-数值函数χ,复合函数χ(ψ1(n1,⋯,np),⋯,ψm(n1,⋯,np))也是\A中的一个p-数值函数,就称集合\A对复合封闭(closed under composition)。
对于一个数值函数的集合A,如果A满足:∀p,对任意的A中的p-数值函数χ,以及\A中的p+2-数值函数ψ,定义p+1-数值函数φ:φ(0,n1,⋯,np) =χ(n1,⋯,np),φ(k+1,n1,⋯,cp) =ψ(φ(k,n1,⋯,np),k,n1,⋯,np),始终有φ∈\A,就称集合\A对原始递归封闭(closed under primitive recursion)。
对于一个数值函数的集合A,如果A满足:∀p,对任意的A中的p+1-数值函数χ,其中χ满足对任意的n1,⋯,np∈N,存在m使得χ(n1,⋯,np,m)=0,定义p-数值函数φ:φ(n1,⋯,np)的值为使得χ(n1,⋯,np,m)=0的最小m,若始终有φ∈\A,就称集合\A对取最小值封闭(closed under minimalization)。
\newcommand{\R}{\mathcal{R}}定义数值函数集合R,它是包含所有初始函数并且满足对复合、原始递归、取最小值封闭的最小集合。R称为递归函数类,称R中的函数为递归函数(recursive function)。
\l-definable函数与递归函数的等价性
我们已经证明,初始函数都是\l-definable的。如果我们能够证明,全体\l-definable的函数集合(记为ΛF)满足对复合、原始递归、取最小值封闭,就说明R⊆ΛF,也即递归函数一定是\l-definable的。下面我们就分别证明,ΛF对复合、原始递归、取最小值封闭。
下面证明ΛF对复合封闭。即证∀p,m,对任意的ΛF中的p-数值函数ψ1,⋯,ψm,以及ΛF中的m-数值函数χ,复合函数χ(ψ1(n1,⋯,np),⋯,ψm(n1,⋯,np))是\l-definable的。设ψ1,⋯,ψm分别由combinator H1,⋯,Hm定义,χ由combinator G定义,那么可以写出combinator F≡λx1⋯xm.(G(H1x1⋯xn) ⋯(Hmx1⋯xm)),可见该复合函数能被F定义。因此ΛF对复合封闭。
下面证明ΛF对原始递归封闭。即证∀p,对任意的ΛF中的p-数值函数χ,以及ΛF中的p+2-数值函数ψ,p+1-数值函数φ:φ(0,n1,⋯,np) =χ(n1,⋯,np),φ(k+1,n1,⋯,cp) =ψ(φ(k,n1,⋯,np),k,n1,⋯,np)是\l-definable的。设ψ由combinator H定义,χ由combinator G定义,现在我们要构造一个combinator F来定义φ。对于φ这样的分段函数,需要用逻辑条件的\l表示。我们希望Fxy1⋯yp=(Zero x)(Gy1⋯yp)(H(F(P−x)y1⋯yp)(P−x)y1⋯yp),其中Zero x是一个布尔变量,如果为真(此时x≡\num0)就会取前项Gy1⋯yp,如果为假(x≡\num0)就会取后项H(F(P−x)y1⋯yp)(P−x)y1⋯yp。我们注意到,正因为φ是递归定义的,所以我们写出的式子左右都包含F。所以刚才写出的式子不能作为F的构造式,而是一个F的“方程式”。把右边部分的式子(Zero x)(Gy1⋯yp)(H(F(P−x)y1⋯yp)(P−x)y1⋯yp)记为D(F,x,y1,⋯,yp),该方程写作F=λxy1⋯yp.(D(F,x,y1,⋯,yp))。这等价于F=λfxy1⋯yp.(D(f,x,y1,⋯,yp))F。把λfxy1⋯yp.(D(f,x,y1,⋯,yp))记为M,我们也就是要找到满足F=MF的F。令F≡(\lz.M(zz))(\lz.M(zz)),可以验证F=(\lz.M(zz))(\lz.M(zz))=M((\lz.M(zz))(\lz.M(zz)))=MF。(类比代数中x=f(x)的解称为不动点,这可以看作求\l表达式的不动点。从上述构造可以看出,对任意的M都可以写出对应的F满足MF=F。这一结果称为不动点定理(Fixed Point Theorem))。因此ΛF对原始递归封闭。
下面证明ΛF对取最小值封闭。即证∀p,对任意的ΛF中的p+1-数值函数χ,记μm[χ(n1,⋯,np,m)=0]表示满足χ(n1,⋯,np,m)=0的最小m,p-数值函数φ(n1,⋯,np)=μm[χ(n1,⋯,np,m)=0]是\l-definable的。设χ由combinator G定义。我们可以这样定义用来表示φ的combinator F:首先定义一个combinator H,对于Hx1⋯xpy,判断是否成立Gx1⋯xpy为\num0,如果成立返回y,否则返回Hx1⋯xp(S+y)。这样,Hx1⋯xp\num0就会返回最小的使得Gx1⋯xpy为\num0的y。用逻辑条件容易写出:Hx1⋯xpy=(Zero(Gx1⋯xpy)) (y)(Hx1⋯xp(S+y))。很容易想到,我们要再次用到不动点定理。令E(H,x1,⋯,xp,y))≡(Zero(Gx1⋯xpy)) (y)(Hx1⋯xp(S+y)),那么H=(\lhx1⋯xpy.E(h,x1,⋯,xp,y))H,由不动点定理可以解出H。于是,令F≡\lx1⋯xp.(Hx1⋯xp\num0),容易验证F定义了φ。因此ΛF对取最小值封闭。
还可以证明,ΛF⊆R(用\l-term的哥德尔编码证明,此处省略)。这样我们最终得到了ΛF=R,也即∀φ,φ是λ-definable的当且仅当φ∈R。