§E15.7計算可能関数

最終更新

Turing 機械は、入力に対して受理するかどうかだけでなく、自然数を出力する部分関数も計算する。 Turing 機械による関数定義とは別に、初期関数へ有限個の関数形成規則を適用して計算可能関数を定める方法がある。二つの定義は形式が異なるが、部分関数のクラスとして一致する。本記事では、両方向の変換を構成し、全域関数だけを生成する原始再帰の範囲が、全域 Turing 計算可能関数全体より真に狭いことを示す。

1 部分関数と Turing 計算可能性

部分関数f ⁣:Nk⇀Nf\colon\mathbb N^k\rightharpoonup\mathbb Nがx⃗\vec xで定義されることをf(x⃗)↓f(\vec x)\mathord\downarrow、定義されないことをf(x⃗)↑f(\vec x)\mathord\uparrowと書く。

定義 1.1. 部分関数f ⁣:Nk⇀Nf\colon\mathbb N^k\rightharpoonup\mathbb Nが部分 Turing 計算可能 (partial Turing computable) であるとは、次を満たす決定性 TMMMが存在することをいう。

  1. f(x⃗)↓f(\vec x)\mathord\downarrowならば、MMは入力1x1#⋯#1xk1^{x_1}\#\cdots\#1^{x_k}から開始し、有限時間後に受理状態qaccq_{\mathrm{acc}}で停止する。この停止配置では、ヘッドは位置00にあり、テープ内容は0≤i<f(x⃗)0\le i<f(\vec x)でT(i)=1T(i)=1、i≥f(x⃗)i\ge f(\vec x)でT(i)=⊔T(i)=\sqcupを満たす。
  2. f(x⃗)↑f(\vec x)\mathord\uparrowならば、MMはその入力で停止しない。

(1)の停止配置を正規出力配置 (normal output configuration) という。定義域がNk\mathbb N^k全体である部分 Turing 計算可能関数を全域 Turing 計算可能関数 (total Turing-computable function) という。

証明中では、入力の保存領域、作業用カウンタ、および出力領域を別々のテープに置くことがある。次の補題により、この中間的な多テープ計算を定義の正規出力配置へ変換することができる。

補題 1.2. 部分関数f ⁣:Nk⇀Nf\colon\mathbb N^k\rightharpoonup\mathbb Nと決定性多テープ TMNNを考える。NNの第1テープに入力1x1#⋯#1xk1^{x_1}\#\cdots\#1^{x_k}を置き、残りのテープを空白として計算を始める。一つのテープを出力テープ、一つの状態を返却状態として指定し、次の二条件を仮定する。

  1. f(x⃗)=nf(\vec x)=nならば、NNは有限時間後に返却状態へ入り、出力テープの位置0,…,n−10,\ldots,n-1に11、位置nnに空白を置く。各テープのヘッド位置、出力テープの位置n+1n+1以後、および他のテープの内容は任意でよい。
  2. f(x⃗)↑f(\vec x)\mathord\uparrowならば、NNは停止しない。

このとき、ffを定義 1.1の正規出力配置で計算する単テープ決定性 TMMMを構成することができる。

証明.§E15.4 定理 2.2の構成を用いて、NNの各テープを区切り記号で連結し、各ヘッド位置に印を付けた単テープ機械SSを作る。ただし、NNが返却状態へ入った場合にはSSを直ちに停止させず、出力清掃局面へ移す。模倣の不変条件により、この時点の有限な整形式符号から出力テープに対応する区間と、その位置00を特定することができる。

清掃局面では、出力区間の位置00から最初の空白までを走査する。読み取った11一つにつき、整形式符号の最後の区切りより右側へ作業記号XXを一つ追加する。仮定により作業記号はちょうどnn個になる。次に、最後の区切りを左印へ書き換え、作業記号列の直後の位置へ右印を置く。f(x⃗)=0f(\vec x)=0の場合には作業記号が一つも無いため、左印と右印は隣り合う二マスに付く。印を置いてから、左印より左側にある整形式符号を全て空白へ戻す。次に、左端位置から始まる出力前線と作業記号列の間を往復し、作業記号XXを一つ消すたびに出力前線へ11を一つ書いて前線を右へ移す。この反復はnn回で終わり、n=0n=0の場合には一度も実行されない。最後に両端の印と残った作業記号を消し、ヘッドを位置00へ戻して受理状態へ入る。各局面が走査する範囲と反復回数は有限なので、NNが返却状態へ入った後の清掃は有限時間で終了する。終了時のテープは位置0,…,n−10,\ldots,n-1だけに11をもち、それ以外の位置は空白である。

f(x⃗)=nf(\vec x)=nの場合には、NNの有限な計算、その各一段に対する有限な模倣、および有限な清掃の後に、MMは正規出力配置で停止する。f(x⃗)↑f(\vec x)\mathord\uparrowの場合にはNNが停止しないため、SSは模倣局面にとどまり、清掃局面へ入らない。したがってMMも停止しない。ゆえに、この変換は定義域、発散、および出力値を保存する。▨

定義 1.1が採用した一進表記は、表記の選択の一つである。次の命題により、この選択は得られる関数クラスへ影響しない。

命題 1.3.定義 1.1の一進表記を、各引数と出力の二進表記へ置き換えて同じ形の定義を行っても、部分 Turing 計算可能関数のクラスは変わらない。

証明. 一進表記の数と二進表記の数を相互に変換する二つの全域変換は、それぞれ決定性 TM で実行することができる。一進から二進への変換は、一進列から11を一つ消すたびに別領域の二進カウンタへ11を加える反復であり、二進から一進への変換は、二進カウンタから11を引くたびに一進列へ11を一つ追加する反復である。どちらの反復も、表されている数に等しい回数で終了する。区切り記号で連結されたkk個の引数には、この変換をブロックごとに適用する。

部分関数ffが二進表記の規約で TMMMによって計算されるとする。多テープ機械NNを、第1テープの一進入力を二進表記へ変換し、その結果を入力としてMMを模倣し、MMが受理停止した場合には出力の二進表記を一進列へ変換して出力テープへ書き、返却状態へ入るように構成する。前後の変換は全域であるため、NNが返却状態へ入ることとMMが停止することは同値であり、返却時の出力テープは同じ値f(x⃗)f(\vec x)の一進列である。補題 1.2をNNへ適用すれば、ffを一進表記の規約の正規出力配置で計算する単テープ決定性 TM を得る。逆向きも、変換の向きを入れ替えた同じ合成で従う。したがって、二つの規約が定める部分 Turing 計算可能関数のクラスは一致する。▨

2 原始再帰関数

定義 2.1. 次の関数を初期関数 (initial function) という。

Z(x)=0(零関数),S(x)=x+1(後続者関数),Pik(x1,…,xk)=xi(1≤i≤k)(射影関数).\begin{aligned} Z(x)&=0 &&\text{(零関数)},\\ S(x)&=x+1 &&\text{(後続者関数)},\\ P_i^k(x_1,\ldots,x_k)&=x_i\quad(1\le i\le k) &&\text{(射影関数)}. \end{aligned}

mm変数関数ffとkk変数関数g1,…,gmg_1,\ldots,g_mから

h(x⃗)=f(g1(x⃗),…,gm(x⃗))h(\vec x)=f(g_1(\vec x),\ldots,g_m(\vec x))

を作る操作を合成 (composition) という。

kk変数関数ffと(k+2)(k+2)変数関数ggから

h(x⃗,0)=f(x⃗),h(x⃗,n+1)=g(x⃗,n,h(x⃗,n))\begin{aligned} h(\vec x,0)&=f(\vec x),\\ h(\vec x,n+1)&=g(\vec x,n,h(\vec x,n)) \end{aligned}

を満たす(k+1)(k+1)変数関数hhを作る操作を原始再帰 (primitive recursion) という。原始再帰ではk=0k=0の場合も許す。このとき、基底のffの代わりに一つの自然数ccを指定し、h(0)=ch(0)=cかつh(n+1)=g(n,h(n))h(n+1)=g(n,h(n))を満たす一変数関数hhを作る。初期関数を含み、合成と原始再帰について閉じた最小の関数クラスを原始再帰関数 (primitive recursive function) のクラスという。

命題 2.2. 全ての原始再帰関数は全域関数である。

証明. 関数を生成する式の構造に関する帰納法を用いる。初期関数は表示された式によって全ての入力で値をもつ。全域関数f,g1,…,gmf,g_1,\ldots,g_mの合成では、全ての値gi(x⃗)g_i(\vec x)が定まり、f(g1(x⃗),…,gm(x⃗))f(g_1(\vec x),\ldots,g_m(\vec x))の値も定まるので、合成結果も全域である。

全域関数f,gf,gから原始再帰でhhを作る場合を考える。固定したx⃗\vec xについて、h(x⃗,0)=f(x⃗)h(\vec x,0)=f(\vec x)は定義される(k=0k=0の場合には、指定した自然数によってh(0)=ch(0)=cが定義される)。h(x⃗,n)h(\vec x,n)が定義されるならば、g(x⃗,n,h(x⃗,n))g(\vec x,n,h(\vec x,n))も定義されるのでh(x⃗,n+1)h(\vec x,n+1)が定義される。nnに関する帰納法により、全てのnnでh(x⃗,n)h(\vec x,n)が定義される。x⃗\vec xは任意なのでhhは全域である。したがって、有限回の生成規則で得られる全ての原始再帰関数は全域である。▨

命題 2.3. 加法、乗法、切捨て減法x−˙y=max⁡{x−y,0}x\mathbin{\dot-}y=\max\{x-y,0\}、等号の特性関数、有限の場合分け、固定底b≥2b\ge2による冪bnb^n、商⌊n/b⌋\lfloor n/b\rfloorと剰余n mod bn\bmod bは原始再帰関数である。さらに、原始再帰関数の有界和と有界積、原始再帰的述語に対する有界量化と有界最小化、および有限組の符号化と成分取出しを原始再帰関数によって実行することができる。

証明. 加法と乗法は

add⁡(x,0)=x,add⁡(x,n+1)=S(add⁡(x,n)),mul⁡(x,0)=0,mul⁡(x,n+1)=add⁡(mul⁡(x,n),x)\begin{aligned} \operatorname{add}(x,0)&=x,& \operatorname{add}(x,n+1)&=S(\operatorname{add}(x,n)),\\ \operatorname{mul}(x,0)&=0,& \operatorname{mul}(x,n+1)&=\operatorname{add}(\operatorname{mul}(x,n),x) \end{aligned}

という原始再帰で得られる。前者関数をpred⁡(0)=0\operatorname{pred}(0)=0、pred⁡(n+1)=n\operatorname{pred}(n+1)=nと定める。この式は、基底値c=0c=0とg=P12g=P_1^2によるk=0k=0の原始再帰である。さらに、x−˙0=xx\mathbin{\dot-}0=x、x−˙(n+1)=pred⁡(x−˙n)x\mathbin{\dot-}(n+1)=\operatorname{pred}(x\mathbin{\dot-}n)と再帰すれば切捨て減法を得る。

sg⁡(0)=0\operatorname{sg}(0)=0、sg⁡(n+1)=1\operatorname{sg}(n+1)=1と定め、iszero⁡(n)=1−˙sg⁡(n)\operatorname{iszero}(n)=1\mathbin{\dot-}\operatorname{sg}(n)と置く。すると

eq⁡(x,y)=iszero⁡((x−˙y)+(y−˙x))\operatorname{eq}(x,y) =\operatorname{iszero}\bigl((x\mathbin{\dot-}y)+(y\mathbin{\dot-}x)\bigr)

はx=yx=yの場合に11、それ以外で00となる。値が00または11の特性関数χ\chiに対する場合分けは

if⁡(χ,u,v)=χu+(1−˙χ)v\operatorname{if}(\chi,u,v)=\chi u+(1\mathbin{\dot-}\chi)v

で実行することができる。固定底の冪はp(0)=1p(0)=1、p(n+1)=b p(n)p(n+1)=b\,p(n)という原始再帰で得られる。原始再帰関数a(x⃗,j)a(\vec x,j)に対する有界和と有界積は

Sum⁡a(x⃗,0)=0,Sum⁡a(x⃗,t+1)=Sum⁡a(x⃗,t)+a(x⃗,t),Prod⁡a(x⃗,0)=1,Prod⁡a(x⃗,t+1)=Prod⁡a(x⃗,t)a(x⃗,t)\begin{aligned} \operatorname{Sum}_a(\vec x,0)&=0,& \operatorname{Sum}_a(\vec x,t+1)&=\operatorname{Sum}_a(\vec x,t)+a(\vec x,t),\\ \operatorname{Prod}_a(\vec x,0)&=1,& \operatorname{Prod}_a(\vec x,t+1)&=\operatorname{Prod}_a(\vec x,t)a(\vec x,t) \end{aligned}

という原始再帰で得られる。

原始再帰的述語R(x⃗,y)R(\vec x,y)の特性関数をχR\chi_Rとする。y≤ty\le tの範囲でR(x⃗,y)R(\vec x,y)が真となる最小のyyを返し、存在しない場合にはt+1t+1を返す関数BR(x⃗,t)B_R(\vec x,t)を、ttに関する原始再帰で構成する。t=0t=0ではχR(x⃗,0)=1\chi_R(\vec x,0)=1なら00、そうでなければ11とする。BR(x⃗,t)≤tB_R(\vec x,t)\le tなら以前の値を保ち、BR(x⃗,t)=t+1B_R(\vec x,t)=t+1ならχR(x⃗,t+1)\chi_R(\vec x,t+1)を調べ、真ならt+1t+1、偽ならt+2t+2とする。この更新は上の比較と場合分けだけで記述する。したがってBRB_Rは原始再帰関数である。有界存在量化はBR(x⃗,t)≤tB_R(\vec x,t)\le tの特性関数であり、有界全称量化は反例に対する有界存在量化の否定である。

bbによる商は、qb≤nqb\le nを満たす最大のq≤nq\le nを有界探索すれば得られ、剰余はn−˙b⌊n/b⌋n\mathbin{\dot-}b\lfloor n/b\rfloorで得られる。最大値の探索も、候補を00からnnまで走査して条件を満たすたびに保存値を更新する原始再帰である。

有限組には Cantor の対関数

⟨x,y⟩=(x+y)(x+y+1)2+y\langle x,y\rangle=\frac{(x+y)(x+y+1)}2+y

を用いる。分子は常に偶数であり、固定数22による商は既に構成した関数で計算することができる。⟨x,y⟩=z\langle x,y\rangle=zならx,y≤zx,y\le zなので、0≤x,y≤z0\le x,y\le zの有限範囲を有界探索して二成分を復元することができる。この探索は有界量化と場合分けの有限な入れ子であり、原始再帰的である。対を入れ子にすれば、任意の固定長の組の符号化と各成分の取出しも原始再帰的になる。▨

命題 2.4. 全ての原始再帰関数は全域 Turing 計算可能である。

証明. 生成式の構造に関する帰納法によって、各原始再帰関数を計算する多テープ TM を構成する。零関数の機械は出力テープを空にして停止し、後続者関数の機械は入力の一進列へ11を一つ追加する。射影関数の機械は区切り記号を数え、指定された入力成分を出力テープへ複写する。以上の初期関数用の機械は全入力で停止する。

h(x⃗)=f(g1(x⃗),…,gm(x⃗))h(\vec x)=f(g_1(\vec x),\ldots,g_m(\vec x))について、帰納法の仮定からffと各gig_iの機械がある。入力x⃗\vec xを保存し、各gi(x⃗)g_i(\vec x)を順に計算して別の作業領域へ保存する。得られたmm個の値をffの機械へ渡して出力する。各部分機械が全入力で停止するため、合成機械も停止し、h(x⃗)h(\vec x)を出力する。

原始再帰

h(x⃗,0)=f(x⃗),h(x⃗,n+1)=g(x⃗,n,h(x⃗,n))h(\vec x,0)=f(\vec x),\qquad h(\vec x,n+1)=g(\vec x,n,h(\vec x,n))

については、最初にf(x⃗)f(\vec x)を計算して作業領域vvへ保存する(k=0k=0の場合には、基底値ccの一進列をvvへ直接書き込む)。カウンタiiを00とし、i<ni<nの間、g(x⃗,i,v)g(\vec x,i,v)を計算してvvをその出力へ置き換え、iiを一つ増やす。nn回の反復後にvvを出力する。iiに関する帰納法により、反復開始時のvvはh(x⃗,i)h(\vec x,i)である。したがって終了時の出力はh(x⃗,n)h(\vec x,n)である。反復回数は有限であり、f,gf,gの機械は全域なので、この機械も全入力で停止する。

以上で各生成規則に対応する多テープ機械を構成した。各機械の出力テープは、位置00から始まる一進列として関数値を保持する。補題 1.2によって、各機械を正規出力配置で停止する単テープ決定性 TM へ変換することができる。ゆえに全ての原始再帰関数は全域 Turing 計算可能である。▨

3 非有界最小化と部分ミュー再帰

定義 3.1. 部分関数g ⁣:Nk+1⇀Ng\colon\mathbb N^{k+1}\rightharpoonup\mathbb Nに対し、

h(x⃗)=μy [g(x⃗,y)=0]h(\vec x)=\mu y\,[g(\vec x,y)=0]

を次のように定める。h(x⃗)=yh(\vec x)=yであるとは、

g(x⃗,y)=0かつ全ての z<y について g(x⃗,z)↓ かつ g(x⃗,z)≠0g(\vec x,y)=0 \quad\text{かつ}\quad \text{全ての }z<y\text{ について } g(\vec x,z)\mathord\downarrow\text{ かつ }g(\vec x,z)\ne0

が成り立つことをいう。そのようなyyが存在しなければh(x⃗)h(\vec x)は未定義である。この操作を非有界最小化 (unbounded minimization) という。

初期関数を含み、部分関数に対する合成、原始再帰、および非有界最小化について閉じた最小のクラスを部分ミュー再帰関数 (partial mu-recursive function) のクラスという。

最小の零点より前に未定義値がある場合にも最小化結果を未定義としたのは、y=0,1,2,…y=0,1,2,\ldotsを順番に計算する探索の動作と一致させるためである。

例 3.2 (停止しない最小化).g(x,y)=x+y+1g(x,y)=x+y+1は原始再帰関数であり、全てのx,y∈Nx,y\in\mathbb Nについて正である。したがって

h(x)=μy [x+y+1=0]h(x)=\mu y\,[x+y+1=0]

は全てのxxで未定義である。g(x,0),g(x,1),…g(x,0),g(x,1),\ldotsを順に計算する機械は、各値が正であることを確認して次の候補へ進み続け、停止しない。

4 部分ミュー再帰から Turing 機械へ

命題 4.1. 全ての部分ミュー再帰関数は部分 Turing 計算可能である。

証明. 生成式の構造に関する帰納法を用いる。初期関数に対応する停止機械は命題 2.4の証明で構成した。

部分関数の合成h(x⃗)=f(g1(x⃗),…,gm(x⃗))h(\vec x)=f(g_1(\vec x),\ldots,g_m(\vec x))では、入力を保存し、g1,…,gmg_1,\ldots,g_mの機械を順に実行する。いずれかが停止しなければ合成機械も同じ呼出しで停止しない。この停止しない動作は、合成が未定義である場合と一致する。全てが値を出力した場合には、値g1(x⃗),…,gm(x⃗)g_1(\vec x),\ldots,g_m(\vec x)をffの機械へ渡す。ffが停止すればf(g1(x⃗),…,gm(x⃗))f(g_1(\vec x),\ldots,g_m(\vec x))の値を出力し、停止しなければ合成機械も停止しない。したがって、定義域と値の両方が合成の定義に一致する。

部分関数f,gf,gからの原始再帰では、入力(x⃗,n)(\vec x,n)を保存し、最初にf(x⃗)f(\vec x)を実行して値vvを得る(k=0k=0の場合には基底値ccをvvとする)。停止しなければ全体も停止しない。次にi=0,…,n−1i=0,\ldots,n-1についてg(x⃗,i,v)g(\vec x,i,v)を実行し、停止して得た値でvvを更新する。途中の呼出しが停止しなければ全体も停止しない。全てのnn回が停止すれば最後のvvを出力する。iiに関する帰納法により、ii回の更新後のvvは、再帰式によって定義されるh(x⃗,i)h(\vec x,i)と一致する。したがって、構成した機械はh(x⃗,n)h(\vec x,n)が定義される場合に限って停止し、値h(x⃗,n)h(\vec x,n)を出力する。

最後にh(x⃗)=μy[g(x⃗,y)=0]h(\vec x)=\mu y[g(\vec x,y)=0]を考える。機械はy=0y=0から開始し、g(x⃗,y)g(\vec x,y)の機械を実行する。計算が停止して値00を出力したらyyを出力して停止し、正の値を出力したらyyを一つ増やして次の計算を始める。あるg(x⃗,y)g(\vec x,y)が未定義ならば機械はその呼出しで停止しない。したがって、この機械がyyを出力するための必要十分条件は、全てのz<yz<yでg(x⃗,z)g(\vec x,z)が定義されて正であり、g(x⃗,y)=0g(\vec x,y)=0であることである。以上で構成した最小化機械の停止条件は、非有界最小化の定義と一致する。

各構成は有限個の作業テープをもつ中間機械として実行することができ、停止する場合には、出力テープの位置00から始まる一進列として値を返す。補題 1.2を適用すれば、定義域、発散、および出力を保ち、正規出力配置で停止する単テープ決定性 TM が得られる。ゆえに全ての部分ミュー再帰関数は部分 Turing 計算可能である。▨

5 Turing 機械の計算の算術化

逆方向では、固定した TM の一つの配置を一つの自然数で表し、一段遷移を原始再帰関数に変換する。一段遷移を表す原始再帰関数を時刻について原始再帰し、停止時刻だけを非有界最小化で探す。

補題 5.1. 固定した単テープ決定性 TMMMについて、次の関数を原始再帰関数として構成することができる。

  1. 入力x⃗\vec xの初期配置の符号Init⁡M(x⃗)\operatorname{Init}_M(\vec x)。
  2. 配置符号ccの一段後の配置符号Step⁡M(c)\operatorname{Step}_M(c)。
  3. ccが停止配置であるかを表す特性関数Halt⁡M(c)\operatorname{Halt}_M(c)。
  4. 停止配置ccの出力を読み取る関数Out⁡M(c)\operatorname{Out}_M(c)。

停止配置についてはStep⁡M(c)=c\operatorname{Step}_M(c)=cと定める。

証明.MMのテープ文字へ0,…,b−10,\ldots,b-1の番号を付け、空白記号の番号を00とする。配置を

(q,h,L,R)(q,h,L,R)

で表す。qqは状態番号、hhはヘッド位置である。LLのbb進の最下位桁から順に、ヘッドの左隣、二つ左隣、という順序でテープ文字を記録する。RRの最下位桁はヘッド位置の文字、その上位桁は右側の文字を順に記録する。末尾の空白は番号00なので省略することができる。四つ組は命題 2.3の対関数を入れ子にして一つの自然数へ符号化する。

入力は一進ブロック1x1#⋯#1xk1^{x_1}\#\cdots\#1^{x_k}である。各ブロックの開始位置はx1+⋯+xi−1+i−1x_1+\cdots+x_{i-1}+i-1という加法で表され、その位置へ対応するテープ記号を置いたbb進整数RRは、入力長を上界とするbjb^jの有界和で表される。各位置の記号番号は、固定個数kkのブロック境界との比較と場合分けによって原始再帰的に定まる。したがって、命題 2.3の有界和によりRRは原始再帰関数である。初期状態番号、h=0h=0、L=0L=0とこのRRを組にすることでInit⁡M\operatorname{Init}_Mを得る。

現在の走査記号はa=R mod ba=R\bmod bである。MMの遷移表は有限なので、各組(q,a)(q,a)に対する(q′,a′,D)(q',a',D)は、等号の特性関数と有限の場合分けによって原始再帰的に選ぶことができる。R0=⌊R/b⌋R_0=\lfloor R/b\rfloorと置く。書込み後に右へ動く場合には

qnew=q′,hnew=h+1,Lnew=a′+bL,Rnew=R0q_{\mathrm{new}}=q',\qquad h_{\mathrm{new}}=h+1,\qquad L_{\mathrm{new}}=a'+bL,\qquad R_{\mathrm{new}}=R_0

とする。左へ動き、h>0h>0である場合には、ℓ=L mod b\ell=L\bmod bを左隣の記号として

qnew=q′,hnew=h−1,Lnew=⌊L/b⌋,Rnew=ℓ+b(a′+bR0)q_{\mathrm{new}}=q',\qquad h_{\mathrm{new}}=h-1,\qquad L_{\mathrm{new}}=\lfloor L/b\rfloor,\qquad R_{\mathrm{new}}=\ell+b(a'+bR_0)

とする。左端で左へ動く場合と、その場にとどまる場合には、h,L,Rh,L,Rを定義どおりに更新する。表示した更新式は、加法、乗法、固定数による商と剰余、および有限の場合分けからなるので原始再帰的である。停止状態では入力四つ組をそのまま返す場合分けを加える。以上の場合分けで定めた関数がStep⁡M\operatorname{Step}_Mである。

qqが有限個の停止状態番号の一つと等しいかどうかは、等号の特性関数の有限和で判定することができる。この停止状態の特性関数がHalt⁡M\operatorname{Halt}_Mである。

出力規約では、停止時のテープは位置00から11がnn個並び、その次が空白である。位置iiのテープ文字は、i<hi<hならLLの第h−1−ih-1-i桁、i≥hi\ge hならRRの第i−hi-h桁であり、固定底の冪、商、および剰余によって原始再帰的に取り出す。最初の空白位置はh+R+1h+R+1以下にある。実際、i<hi<hの位置はこの上界未満であり、i≥hi\ge hの非零桁数はR+1R+1以下である。したがって、位置00からh+R+1h+R+1までの有界最小化によって最初の空白位置を求めることができる。正しい停止出力では、最初の空白位置が出力nnである。この最初の空白位置を返す関数をOut⁡M(c)\operatorname{Out}_M(c)とする。不正な配置符号には値00を返す有限の場合分けを加えれば、四つの関数は全ての自然数上で全域な原始再帰関数になる。▨

命題 5.2. 全ての部分 Turing 計算可能関数は部分ミュー再帰関数である。

証明. 部分関数f ⁣:Nk⇀Nf\colon\mathbb N^k\rightharpoonup\mathbb Nを計算する TMMMを固定する。補題 5.1の関数を用い、

CM(x⃗,0)=Init⁡M(x⃗),CM(x⃗,t+1)=Step⁡M(CM(x⃗,t))\begin{aligned} C_M(\vec x,0)&=\operatorname{Init}_M(\vec x),\\ C_M(\vec x,t+1)&=\operatorname{Step}_M(C_M(\vec x,t)) \end{aligned}

と定める。表示した再帰式はttに関する原始再帰であるからCMC_Mは原始再帰関数である。ttに関する帰納法により、CM(x⃗,t)C_M(\vec x,t)はMMの入力x⃗\vec x上のtt段後の配置を正確に符号化する。停止後にはStep⁡M\operatorname{Step}_Mが配置を固定するため、この主張は停止時刻以後についても成り立つ。

次に

GM(x⃗,t)=1−˙Halt⁡M(CM(x⃗,t))G_M(\vec x,t) =1\mathbin{\dot-}\operatorname{Halt}_M(C_M(\vec x,t))

と置く。GMG_Mは原始再帰関数であり、MMが時刻ttまでに停止している場合に限って値00をとる。したがって

τM(x⃗)=μt [GM(x⃗,t)=0]\tau_M(\vec x)=\mu t\,[G_M(\vec x,t)=0]

は、MMがx⃗\vec xで停止する場合には最初の停止時刻を値とし、停止しない場合には未定義となる部分ミュー再帰関数である。

最後に

FM(x⃗)=Out⁡M(CM(x⃗,τM(x⃗)))F_M(\vec x) =\operatorname{Out}_M\bigl(C_M(\vec x,\tau_M(\vec x))\bigr)

と定める。部分ミュー再帰関数は合成について閉じているためFMF_Mも部分ミュー再帰関数である。MMが停止しない入力ではτM\tau_Mが未定義なのでFMF_Mも未定義である。MMが停止する入力では、CM(x⃗,τM(x⃗))C_M(\vec x,\tau_M(\vec x))が最初の停止配置であり、Out⁡M\operatorname{Out}_Mはその出力f(x⃗)f(\vec x)を返す。したがってFMF_Mとffは定義域と値が一致する。ゆえにffは部分ミュー再帰関数である。▨

前二命題は、それぞれ関数形成規則を実行する機械と、機械遷移を実行する算術関数を具体的に与えている。したがって、次の同値は「計算手続き」という未定義の直観を用いるのではなく、二つの形式体系間の相互変換から従う。

定理 5.3. 部分関数f ⁣:Nk⇀Nf\colon\mathbb N^k\rightharpoonup\mathbb Nについて、次の二条件は同値である。

  1. ffは部分ミュー再帰関数である。
  2. ffは部分 Turing 計算可能である。

証明.(1)⇒\Rightarrow(2)は命題 4.1で証明した。(2)⇒\Rightarrow(1)は命題 5.2で証明した。いずれの構成も、定義される入力では同じ値を返して停止し、定義されない入力では停止しない。したがって、部分関数として両クラスが一致する。▨

6 原始再帰関数は真部分クラスである

原始再帰関数は全域なので、命題 2.4によって全域 Turing 計算可能関数の部分クラスをなす。真の包含を示すため、全ての一変数原始再帰関数を列挙して対角線上で異なる全域関数を構成する。

補題 6.1. 一変数原始再帰関数の有限記述には有効な符号化e∈Ne\in\mathbb Nがあり、次を満たす全域 Turing 計算可能関数E ⁣:N2→NE\colon\mathbb N^2\to\mathbb Nが存在する。

  1. eeが一変数原始再帰関数φe\varphi_eの正しい符号なら、E(e,x)=φe(x)E(e,x)=\varphi_e(x)である。
  2. 全ての一変数原始再帰関数φ\varphiに対し、φ=φe\varphi=\varphi_eとなる正しい符号eeが存在する。
  3. eeが正しい符号でなければE(e,x)=0E(e,x)=0である。

証明. 初期関数の記号を葉とし、合成と原始再帰の記号を、その引数となる有限個の関数記述を子にもつ節点とする有限構文木を考える。k=0k=0の原始再帰の基底値は、数字列の葉として表す。各記号と括弧を有限アルファベットで表すことができるので、構文木は自然数へ符号化することができる。有限文字列の括弧対応、各節点の種類、子の個数、および入出力の項数は有限走査で検査することができる。したがって、正しい一変数関数記述であるかどうかを判定する TM が存在する。

評価器は正しい構文木を根から解釈する。零、後続者、射影の葉では定義式を直接実行する。合成節点では、各子の値を再帰的に評価してから外側の関数の子を評価する。原始再帰節点では、再帰引数がnnならば基底関数を一回評価し(k=0k=0の場合には基底値の葉を読み)、段階関数をnn回評価する。構文木の高さに関する帰納法により、各子の評価は有限時間で終了する。原始再帰節点の反復回数nnも有限なので、節点全体の評価も終了する。したがって、正しい符号と任意の入力xxに対して評価器は停止し、記述された関数の値を返す。不正な符号では構文検査後に00を返すようにすれば、評価器EEは全入力で停止する。

原始再帰関数の定義は、初期関数から合成と原始再帰を有限回適用して得られる関数をちょうど集めたものである。したがって、各一変数原始再帰関数には、その有限な生成履歴を表す構文木があり、その符号eeが存在する。以上で三条件が全て成り立つ。▨

定理 6.2. 原始再帰関数のクラスは、全域 Turing 計算可能関数のクラスの真部分クラスである。

証明.命題 2.4により、全ての原始再帰関数は全域 Turing 計算可能である。逆の包含が成り立たないことを示すため、補題 6.1のEEを用いて

d(n)=E(n,n)+1d(n)=E(n,n)+1

と定める。EEは全域 Turing 計算可能であり、後続者関数も全域 Turing 計算可能なので、ddは全域 Turing 計算可能である。

ddが原始再帰関数であると仮定する。評価器の列挙性により、d=φed=\varphi_eとなる正しい符号eeが存在する。n=en=eを代入すると、

d(e)=E(e,e)+1=φe(e)+1=d(e)+1d(e)=E(e,e)+1=\varphi_e(e)+1=d(e)+1

を得る。自然数は自分自身に11を加えた数と等しくないので矛盾である。したがってddは原始再帰関数ではない。原始再帰関数は全域 Turing 計算可能関数に含まれ、しかもddは後者にだけ属するので、包含は真である。▨

7 同値定理と Church–Turing の提唱

注意 7.1 (定理と提唱の区別).定理 5.3は、二つの形式的に定義された関数クラスが一致することを証明した数学的定理である。この形式的同値定理に対して、人が有限の規則に従って「有効に計算することができる」という形式化以前の概念が Turing 計算可能性、したがって部分ミュー再帰性によって尽くされるという主張は Church–Turing の提唱である。「有効に計算することができる」という直観的概念は数学的定義の一方ではないため、この主張は同値定理だけから証明されない。

8 演習

問題 8.1.

  1. 原始再帰で定義されるh(x⃗,n)h(\vec x,n)の計算が、各入力で有限回の反復しか行わない理由を説明せよ。
  2. 部分関数ggに対する最小化で、g(x⃗,0)g(\vec x,0)が未定義だがg(x⃗,1)=0g(\vec x,1)=0である場合、μy[g(x⃗,y)=0]\mu y[g(\vec x,y)=0]が未定義になる理由を定義と探索機械の両方から説明せよ。
  3. 配置遷移の算術化で、停止配置を自分自身へ移すと定めた理由を説明せよ。
  4. 対角関数d(n)=E(n,n)+1d(n)=E(n,n)+1の証明では、EE自身が原始再帰関数であることを仮定していない。必要なのがEEの全域 Turing 計算可能性だけである理由を説明せよ。
解答 (演習の要点).
  1. 再帰引数nnが反復回数を与え、00からn−1n-1までのちょうどnn回で終了するためである。
  2. 定義は零点より前の全ての値が定義されて正であることを要求する。順番に調べる機械もg(x⃗,0)g(\vec x,0)の計算で停止せず、y=1y=1へ到達しない。
  3. CM(x⃗,t)C_M(\vec x,t)を全てのttに対する全域な原始再帰関数として定め、停止後の時刻でも同じ停止配置を表すためである。
  4. ddを計算するにはEEを実行して11を加える TM があればよい。ddが原始再帰的だという仮定は、列挙中の符号eeを得てd(e)=d(e)+1d(e)=d(e)+1という矛盾を導く箇所だけで使う。

▨

参考文献

  1. Nigel Cutland, Computability: An Introduction to Recursive Function Theory, Cambridge University Press, Cambridge, 1980.原始再帰関数、最小化、計算の算術化、および Turing 計算可能性との同値を参考にした。
  2. Hartley, Jr. Rogers, Theory of Recursive Functions and Effective Computability, MIT Press, 1987, originally published 1967.部分再帰関数、機械計算、符号化、および正規形を参考にした。

前提記事