DennyQi's Log

02 λ-calculus与可计算性

\newcommand{\l}{\lambda}图灵证明了图灵机可计算的函数等价于由λ\lambda-calculus定义的可计算函数。在\l\l-calculus中,“计算”是通过term的rewrite来完成的,因此函数的计算往往意味着符号串的“递归”。我们将会定义递归函数(recursive functions)的概念,并证明满足该定义的函数等价于能用\l\l-term表示。

数学的\l\l-calculus表示

逻辑的表示(Logic)

\newcommand{\true}{\textsf{true}}\newcommand{false}{\textsf{false}}我们可以用\l\l-term表示逻辑真和逻辑假。我们可以用combinator K\lxy.x\textsf{K}\equiv \l xy.x表示逻辑真,K\lxy.y\textsf{K}_\ast \equiv \l xy.y表示逻辑假。记Ktrue,Kfalse\textsf{K}\equiv \textsf{true},\textsf{K}_\ast\equiv \textsf{false}。把\l\l-term的集合{true,false}\{\textsf{true},\textsf{false}\}称为布尔式(Boolean)。

假设一个\l\l-term BB可以演算得到一个布尔式(B=trueB=\textsf{true}B=\falseB=\false),那么对于任意的P,QΛP,Q\in \LambdaBPQBPQ就可以用来表示一个“if语句”:if B then P else Q

自然数的表示(Numerals)

利用布尔值,我们可以表示有序对(ordered pair)。对于M,NΛM,N\in\Lambda(\lz.(zMN))\true(\l z.(zMN) )\true =\trueMN=M=\true MN=M(\lz.(zMN))\false(\l z.(zMN) )\false =\falseMN=N=\false MN=N。我们把\lz.(zMN)\l z.(zMN)记为[M,N][M,N],于是得到[M,N]\true=M,[M,N]\false=N[M,N]\true=M,[M,N]\false=N

\newcommand{\num}[1]{\lceil #1 \rceil}利用有序对,我们可以表示自然数。首先,用\lx.x\l x.x表示00,记为\num0\num 0;假设nn表示为\numn\num n,那么\numn+1\num{n+1}可以表示为[\false,\numn][\false,\num n]。在这样的表示下,我们可以找到一个combinator用来表示自然数的后继(successor):令S+\lx.[\false,x]\textsf{S}^+ \equiv \l x.[\false,x],我们有S+\numn=(\lx.[\false,x])\numn\textsf{S}^+ \num n=(\l x.[\false ,x])\num n =[\false,\numn]=\numn+1= [\false,\num n] = \num {n+1}

我们可以找到一个combinator用来表示前驱(predecessor):令P\lx.(x \false)\textsf{P}^-\equiv\l x.(x\ \false),我们有P\numn+1\textsf{P}^-\num{n+1}\equiv (\lx.(x \false))[\false,\numn]=[\false,\numn]\false=\numn(\l x.(x \ \false))[\false,\num n]=[\false,\num n]\false = \num n

还可以找到一个combinator用来判断一个数是否是00:只需令Zero\lx.(x \true)\textsf{Zero}\equiv \l x.(x \ \true),我们有Zero\num0(\lx.(x \true))(\lx.x)=(\lx.x)\true=\true\textsf{Zero}\num 0 \equiv (\l x.(x \ \true))(\l x.x)=(\l x.x)\true=\true,有Zero\numn+1(\lx.(x \true))[\false,\numn]=[\false,\numn]\true=\false\textsf{Zero}\num{n+1}\equiv(\l x.(x \ \true))[\false,\num n]=[\false,\num n]\true=\false

数值函数的表示(Numeric Functions)

自然数的pp元函数NpN\N^p\to \N称为一个pp-数值函数。对于一个pp-数值函数φ\varphi,如果能找到一个combinator FF满足:对于任意的n1,,cpNn_1,\cdots,c_p\in\N,都有\numφ(n1,,np)=F\numn1\numnp\num{\varphi(n_1,\cdots,n_p)} = F\num{n_1}\cdots \num{n_p},就称φ\varphiλ\lambda-definable的(或称φ\varphi is \l\l-defined by FF)。

递归函数(Recursive Functions)

我们已经看到,数值函数S+(n)=n+1S^+(n)=n+1可以由S+\textsf{S}^+定义,数值函数Z(n)=0Z(n)=0可以由\lx.\num0\l x.\num 0定义。数值函数函数Uin(x1,,xn)=xiU_i^n(x_1,\cdots,x_n)=x_i很容易用有序对的combinator来定义。以上三个数值函数Uin,S+,ZU_i^n,S^+,Z称为initial functions(初始函数)。Initial functions都是λ\lambda-definable的。

\newcommand{\A}{\mathcal{A}}对于一个数值函数的集合A\mathcal{A},如果A\mathcal{A}满足:p,m\forall p,m,对任意的A\mathcal{A}中的pp-数值函数ψ1,,ψm\psi_1,\cdots,\psi_m,以及\A\A中的mm-数值函数χ\chi,复合函数χ(ψ1(n1,,np),,ψm(n1,,np))\chi(\psi_1(n_1,\cdots,n_p),\cdots,\psi_m(n_1,\cdots,n_p))也是\A\A中的一个pp-数值函数,就称集合\A\A对复合封闭(closed under composition)。

\newcommand{\A}{\mathcal{A}}对于一个数值函数的集合A\mathcal{A},如果A\mathcal{A}满足:p\forall p,对任意的A\mathcal{A}中的pp-数值函数χ\chi,以及\A\A中的p+2p+2-数值函数ψ\psi,定义p+1p+1-数值函数φ\varphiφ(0,n1,,np)\varphi(0,n_1,\cdots,n_p) =χ(n1,,np)=\chi(n_1,\cdots,n_p)φ(k+1,n1,,cp)\varphi(k+1,n_1,\cdots,c_p) =ψ(φ(k,n1,,np),k,n1,,np)=\psi(\varphi(k,n_1,\cdots,n_p),k,n_1,\cdots,n_p),始终有φ\A\varphi \in \A,就称集合\A\A对原始递归封闭(closed under primitive recursion)。

对于一个数值函数的集合A\mathcal{A},如果A\mathcal{A}满足:p\forall p,对任意的A\mathcal{A}中的p+1p+1-数值函数χ\chi,其中χ\chi满足对任意的n1,,npNn_1,\cdots,n_p\in \N,存在mm使得χ(n1,,np,m)=0\chi(n_1,\cdots,n_p,m)=0,定义pp-数值函数φ\varphiφ(n1,,np)\varphi(n_1,\cdots,n_p)的值为使得χ(n1,,np,m)=0\chi(n_1,\cdots,n_p,m)=0的最小mm,若始终有φ\A\varphi \in \A,就称集合\A\A对取最小值封闭(closed under minimalization)。

\newcommand{\R}{\mathcal{R}}定义数值函数集合R\R,它是包含所有初始函数并且满足对复合、原始递归、取最小值封闭的最小集合。R\R称为递归函数类,称R\R中的函数为递归函数(recursive function)。

\l\l-definable函数与递归函数的等价性

我们已经证明,初始函数都是\l\l-definable的。如果我们能够证明,全体\l\l-definable的函数集合(记为ΛF\Lambda_F)满足对复合、原始递归、取最小值封闭,就说明RΛF\R\subseteq \Lambda_F,也即递归函数一定是\l\l-definable的。下面我们就分别证明,ΛF\Lambda_F对复合、原始递归、取最小值封闭。

下面证明ΛF\Lambda_F对复合封闭。即证p,m\forall p,m,对任意的ΛF\Lambda_F中的pp-数值函数ψ1,,ψm\psi_1,\cdots,\psi_m,以及ΛF\Lambda_F中的mm-数值函数χ\chi,复合函数χ(ψ1(n1,,np),,ψm(n1,,np))\chi(\psi_1(n_1,\cdots,n_p),\cdots,\psi_m(n_1,\cdots,n_p))\l\l-definable的。设ψ1,,ψm\psi_1,\cdots,\psi_m分别由combinator H1,,HmH_1,\cdots,H_m定义,χ\chi由combinator GG定义,那么可以写出combinator Fλx1xm.(G(H1x1xn)F\equiv \lambda x_1\cdots x_m.(G(H_1x_1\cdots x_n) (Hmx1xm))\cdots (H_mx_1\cdots x_m)),可见该复合函数能被FF定义。因此ΛF\Lambda_F对复合封闭。

下面证明ΛF\Lambda_F对原始递归封闭。即证p\forall p,对任意的ΛF\Lambda_F中的pp-数值函数χ\chi,以及ΛF\Lambda_F中的p+2p+2-数值函数ψ\psip+1p+1-数值函数φ\varphiφ(0,n1,,np)\varphi(0,n_1,\cdots,n_p) =χ(n1,,np)=\chi(n_1,\cdots,n_p)φ(k+1,n1,,cp)\varphi(k+1,n_1,\cdots,c_p) =ψ(φ(k,n1,,np),k,n1,,np)=\psi(\varphi(k,n_1,\cdots,n_p),k,n_1,\cdots,n_p)\l\l-definable的。设ψ\psi由combinator HH定义,χ\chi由combinator GG定义,现在我们要构造一个combinator FF来定义φ\varphi。对于φ\varphi这样的分段函数,需要用逻辑条件的\l\l表示。我们希望Fxy1yp=(Zero x)(Gy1yp)(H(F(Px)y1yp)(Px)y1yp)Fxy_1\cdots y_p= (\textsf{Zero } x)(Gy_1\cdots y_p)(H(F(\textsf{P}^- x)y_1\cdots y_p)(\textsf{P}^- x)y_1\cdots y_p),其中Zero x\textsf{Zero }x是一个布尔变量,如果为真(此时x\num0x\equiv \num 0)就会取前项Gy1ypGy_1\cdots y_p,如果为假(x≢\num0x\not\equiv \num 0)就会取后项H(F(Px)y1yp)(Px)y1ypH(F(\textsf{P}^- x)y_1\cdots y_p)(\textsf{P}^- x)y_1\cdots y_p。我们注意到,正因为φ\varphi是递归定义的,所以我们写出的式子左右都包含FF。所以刚才写出的式子不能作为FF的构造式,而是一个FF的“方程式”。把右边部分的式子(Zero x)(Gy1yp)(H(F(Px)y1yp)(Px)y1yp)(\textsf{Zero } x)(Gy_1\cdots y_p)(H(F(\textsf{P}^- x)y_1\cdots y_p)(\textsf{P}^- x)y_1\cdots y_p)记为D(F,x,y1,,yp)D(F,x,y_1,\cdots,y_p),该方程写作F=λxy1yp.(D(F,x,y1,,yp))F=\lambda xy_1\cdots y_p.(D(F,x,y_1,\cdots,y_p))。这等价于F=λfxy1yp.(D(f,x,y1,,yp))FF=\lambda fxy_1\cdots y_p.(D(f,x,y_1,\cdots,y_p))F。把λfxy1yp.(D(f,x,y1,,yp))\lambda fxy_1\cdots y_p.(D(f,x,y_1,\cdots,y_p))记为MM,我们也就是要找到满足F=MFF=MFFF。令F(\lz.M(zz))(\lz.M(zz))F\equiv (\l z.M(zz))(\l z.M(zz)),可以验证F=(\lz.M(zz))(\lz.M(zz))=M((\lz.M(zz))(\lz.M(zz)))=MFF=(\l z.M(zz))(\l z.M(zz))=M((\l z.M(zz))(\l z.M(zz)))=MF。(类比代数中x=f(x)x=f(x)的解称为不动点,这可以看作求\l\l表达式的不动点。从上述构造可以看出,对任意的MM都可以写出对应的FF满足MF=FMF=F。这一结果称为不动点定理(Fixed Point Theorem))。因此ΛF\Lambda_F对原始递归封闭。

下面证明ΛF\Lambda_F对取最小值封闭。即证p\forall p,对任意的ΛF\Lambda_F中的p+1p+1-数值函数χ\chi,记μm[χ(n1,,np,m)=0]\mu m[\chi(n_1,\cdots,n_p,m)=0]表示满足χ(n1,,np,m)=0\chi(n_1,\cdots,n_p,m)=0的最小mmpp-数值函数φ(n1,,np)=μm[χ(n1,,np,m)=0]\varphi(n_1,\cdots,n_p)=\mu m[\chi(n_1,\cdots,n_p,m)=0]\l\l-definable的。设χ\chi由combinator GG定义。我们可以这样定义用来表示φ\varphi的combinator FF:首先定义一个combinator HH,对于Hx1xpyHx_1\cdots x_p y,判断是否成立Gx1xpyGx_1\cdots x_py\num0\num 0,如果成立返回yy,否则返回Hx1xp(S+y)Hx_1\cdots x_p(\textsf{S}^+ y)。这样,Hx1xp\num0Hx_1\cdots x_p\num 0就会返回最小的使得Gx1xpyGx_1\cdots x_py\num0\num 0yy。用逻辑条件容易写出:Hx1xpy=(Zero(Gx1xpy))Hx_1\cdots x_py=(\textsf{Zero}(Gx_1\cdots x_p y)) (y)(Hx1xp(S+y))(y)(Hx_1\cdots x_p(\textsf{S}^+ y))。很容易想到,我们要再次用到不动点定理。令E(H,x1,,xp,y))(Zero(Gx1xpy))E(H,x_1,\cdots,x_p,y))\equiv (\textsf{Zero}(Gx_1\cdots x_p y)) (y)(Hx1xp(S+y))(y)(Hx_1\cdots x_p(\textsf{S}^+ y)),那么H=(\lhx1xpy.E(h,x1,,xp,y))HH = (\l hx_1\cdots x_p y.E(h,x_1,\cdots,x_p,y))H,由不动点定理可以解出HH。于是,令F\lx1xp.(Hx1xp\num0)F\equiv \l x_1\cdots x_p.(Hx_1\cdots x_p\num 0),容易验证FF定义了φ\varphi。因此ΛF\Lambda_F对取最小值封闭。

还可以证明,ΛFR\Lambda_F\subseteq \R(用\l\l-term的哥德尔编码证明,此处省略)。这样我们最终得到了ΛF=R\Lambda_F=\R,也即φ\forall \varphiφ\varphiλ\lambda-definable的当且仅当φR\varphi\in \R