部分递归函数(Partial Recursive Function)
定义图灵机不单单是为了好玩,还为了研究什么样的东西才是“可计算”的。从图灵机“一步一步”操作的方式来看,好像任意函数都能被计算。但实际上,只有某一类函数可被图灵机计算。这类函数被称作部分递归函数,与图灵机可计算的函数是等价的。
前面漫长的证明哥德尔不完备定理过程中,哥德尔引入了“原始递归和递归函数”的概念,然后利用哥德尔编码把符号、好式子、证明,等一系列形式系统里的东西变成递归函数,再把递归函数变回形式系统里的符号,从而构造出“自指”的奇怪好式子。这里图灵用了同样的手法,让我们一步步看看图灵的戏法。
前面提到了递归函数的概念:(a) 初始函数、零函数和投射函数;(b) 替代操作;(c) 递归操作;(d) 受限 μ− μ − 操作。我们说,一个函数是递归的,当且仅当,它是(a)中的某一种函数,或者由递归函数通过(b)(c)(d)中任意一种操作而成。
在这里,我们放宽一下(d)操作,把受限 μ− μ − 操作变成非受限 μ− μ − 操作(unrestricted μ− μ − operation):
注意,对于某一组 ,若没有 y y 满足 ,则 f(x1,...,xn) f ( x 1 , . . . , x n ) 的函数值就没有定义,这也是为什么称为“部分函数”。
我们说,一个函数 f(x1,...,xn) f ( x 1 , . . . , x n ) 是部分递归函数(partial recursive function),当且仅当,它是初始函数,或者由部分递归函数经过替代、递归、非受限 μ− μ − 操作而构成。
我们将证明,部分递归函数与图灵机可计算函数等价。为此,我们先证明任一部分递归函数都可被图灵机计算。
标准图灵可计算(Standard Turing-Computable, ST-compute)
这里定义标准图灵可计算只是为了讨论方便,并没有引入新概念。
我们说,部分函数(partial function) f(x1,...,xn) f ( x 1 , . . . , x n ) 是标准图灵可计算(standard Turing-computable),当存在一个图灵机 F F ,使得对于任意自然数 k1,...,kn k 1 , . . . , k n ,以下条件成立:
令 Bk1¯¯¯¯¯Bk2¯¯¯¯¯B...Bkn¯¯¯¯¯ B k 1 ¯ B k 2 ¯ B . . . B k n ¯ 表示磁带上的一个“参数带(argument strip)”。注意,参数带右方没有格子,左方可能有其它格子。图灵机 F F 从参数带的 k1¯¯¯¯¯ k 1 ¯ 的第一个格子开始操作:
1. F F 停止,当且仅当, f(k1,...,kn) f ( k 1 , . . . , k n ) 有定义;
2. 若 F F 停止,磁带上保留参数带,并且在右方打印 Bf(x1,...,xn)¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ B f ( x 1 , . . . , x n ) ¯ ,也即把结果打印在参数带的右方。
3. 停机时,磁头对着 f(x1,...,xn)¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ f ( x 1 , . . . , x n ) ¯ 左起第一个格子;
4. 停机时, f(x1,...,xn)¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ f ( x 1 , . . . , x n