Church–Turingのテーゼ(Church–Turing thesis)とは、直観的な意味で機械的な手順によって計算できる自然数の部分関数はすべて Turing 機械で計算できる、という主張である。「機械的な手順」が数学的に定義された概念でないため定理ではないが、Turing 機械・μ再帰関数・レジスタ機械など独立に提案された計算のモデルがどれも同じ関数の全体を定めるという、モデルごとに証明できる一致に支えられている。テーゼは、計算の手順を書き下す手間を省く根拠として、また停止問題の決定不能性のような Turing 機械についての定理を「どんな機械的な手順でも不可能」と読む根拠として使われる。
「計算できる関数とは何か」という問いに対して、1930 年代にいくつもの答えが提案された。Turing は 1936 年に Turing機械 を(OLT26 p. 475)、Herbrand・Kleene・Gödel は再帰的な関数の定義(μ再帰関数)を(Gal15 p. 355)提案し、Church が考案した λ計算も計算のモデルとして使えることが分かった(OLT26 p. 619)。そして、Turing 機械と再帰的な関数が同じ関数の全体を定めることが示された(Gal15 §7.7.1、p. 355)。Church–Turing のテーゼ は、この共通の全体が「機械的な手順で計算できる関数」をちょうど捉えている、という主張である。
テーゼは数学の定理ではない。「機械的な手順で計算できる」という概念が数学的に定義されていないからである。一方、テーゼを支える「異なる計算のモデルが同じ関数の全体を定める」という部分は、モデルを決めれば定理として証明できる。この記事では、テーゼの主張と証明できる部分を区別して述べ、証明できる部分の例として、μ再帰関数とレジスタ機械で計算できる関数が一致することを完全に証明する。
以下、$\mathbb{N}=\{0,1,2,\dots\}$ とし、部分関数 $f\colon\mathbb{N}^k\rightharpoonup\mathbb{N}$、$f(\vec x)\!\downarrow$(定義される)、$f(\vec x)\!\uparrow$(定義されない)、$\simeq$ の記法は μ再帰関数 の記事に従う。
逆向きの「Turing 計算可能な関数は機械的な手順で計算できる」ことは、問題にならない。Turing 機械の動作表そのものが機械的な手順だからである。したがってテーゼは、「機械的な手順で計算できる関数」という直観的な概念を、Turing 計算可能な関数という数学的な概念で置き換えてよい、という主張になる。
単に Church のテーゼ ともよばれる(OLT26 p. 448 はこの名で引いている)。Turing 機械の代わりに μ再帰関数を使って述べても、下で述べるようにこれらのモデルは同じ関数の全体を定めることが証明されているので、主張としては同じである。Gal15 p. 355 は、テーゼを「計算できる関数の合理的な定義はどれも部分再帰関数の概念と同値である」という形で述べている。
テーゼが定理として証明されないのは、左辺の「直観的な意味で計算できる」が数学的な対象ではないからである(Gal15 p. 356)。証明するには「機械的な手順」を数学的に定義しなければならないが、そうして得た定義が直観を正しく捉えているかどうかが、また同じ問いになる。
それでも、テーゼには次の 3 種類の根拠がある。
| 種類 | 内容 | 数学的な身分 |
|---|---|---|
| モデルの一致 | Turing 機械、μ再帰関数、レジスタ機械などが同じ部分関数の全体を定める | 定理(各組ごとに証明される) |
| 変種への頑健性 | テープを複数本にしても、1 本のテープの機械で同じ計算を模倣できる(MSm24 Theorem 4.3.1) | 定理 |
| 提案の一致 | 計算できる関数を捉えようとして提案された定義が、どれも同じ全体を与えた(OLT26 p. 492) | 歴史的な事実 |
テーゼを否定する方法は、原理的にはある。機械的な手順で計算できるのに Turing 計算可能でない関数を 1 つ示せばよい。Gal15 p. 356 は、この分野の研究者の多くがテーゼを信じていると述べている。
次の一致は、すべて定理である。
一致の証明を 1 つ完全に示すために、Turing 機械よりも数の計算に近いモデルを導入する。数を 1 つずつ入れる箱(レジスタ)が無限個あり、プログラムは「箱の中身を 1 増やす」「箱が空でなければ 1 減らす」という 2 種類の命令だけからなる。
$n\in\mathbb{N}$ とする。レジスタ機械のプログラム(長さ $n$)とは、命令の有限列 $P=(I_0,\dots,I_{n-1})$ であって、各命令が次のどちらかの形をしたものをいう($r\in\mathbb{N}$、$j,j'\in\{0,1,\dots,n\}$)。
様相 とは、組 $(\ell,\rho)$($\ell\in\{0,\dots,n\}$、$\rho\colon\mathbb{N}\to\mathbb{N}$ は有限個の $i$ を除いて $\rho(i)=0$)のことで、$\ell$ を次に実行する命令の番号、$\rho(i)$ を $R_i$ の中身と読む。$\ell=n$ の様相を 停止様相 という。停止様相でない $(\ell,\rho)$ の 次の様相 を、$I_\ell=\mathrm{INC}(r,j)$ なら $(j,\rho+\mathbf{e}_r)$、$I_\ell=\mathrm{DEC}(r,j,j')$ なら $\rho(r)>0$ のとき $(j,\rho-\mathbf{e}_r)$、$\rho(r)=0$ のとき $(j',\rho)$ と定める($\mathbf{e}_r$ は $r$ で $1$、ほかで $0$ の関数)。様相 $C_0$ から次の様相を順にとった列が停止様相に達するとき、$P$ は $C_0$ から 停止する という。
$\vec x\in\mathbb{N}^k$ に対し、$\rho_{\vec x}(i)=x_i$($1\le i\le k$)、それ以外の $i$ で $\rho_{\vec x}(i)=0$ とする。プログラム $P$ が部分関数 $f\colon\mathbb{N}^k\rightharpoonup\mathbb{N}$ を 計算する とは、すべての $\vec x$ について、$f(\vec x)\!\downarrow$ なら $P$ は $(0,\rho_{\vec x})$ から停止し、停止様相 $(n,\rho')$ で $\rho'(0)=f(\vec x)$ となり、$f(\vec x)\!\uparrow$ なら $P$ は $(0,\rho_{\vec x})$ から停止しないことをいう。さらに、$f(\vec x)\!\downarrow$ のとき停止様相で $\rho'(i)=x_i$($1\le i\le k$)、$\rho'(i)=0$($i>k$)ともなるなら、$P$ は $f$ を 整った形で計算する という。ある $P$ が計算する部分関数を レジスタ機械で計算できる 関数という。
入力は $R_1,\dots,R_k$ に置き、出力は $R_0$ から読む。整った形で計算するプログラムは、計算が終わると入力を元に戻し、作業に使ったレジスタを空にする。この性質は、プログラムを部品として組み合わせるときに使う。
長さ $4$ のプログラム
$$
I_0=\mathrm{DEC}(1,1,2),\quad I_1=\mathrm{INC}(0,0),\quad I_2=\mathrm{DEC}(2,3,4),\quad I_3=\mathrm{INC}(0,2)
$$
は加法 $(x,y)\mapsto x+y$ を計算する。$I_0,I_1$ の繰り返しで $R_1$ の中身を $1$ ずつ $R_0$ へ移し、$R_1=0$ になると $I_2$ へ進み、$I_2,I_3$ の繰り返しで $R_2$ の中身を $R_0$ へ移して、$R_2=0$ になると停止様相 $\ell=4$ に達する。停止したとき $R_0=x+y$、$R_1=R_2=0$ なので、このプログラムは加法を計算するが、整った形ではない。
プログラムを組み合わせるために、2 つの操作を使う。
要点:どちらもステップ数についての帰納法で、各命令が次の様相を「命令の番号と 1 つのレジスタの中身」だけで決めることを使う。
1:$P;Q$ の番号 $0,\dots,n-1$ の命令は $P$ の命令そのもので、行き先は $\{0,\dots,n\}$ に入る。よって $P$ の計算が停止様相に達するまで、$P;Q$ は同じ様相の列をたどる($P$ が停止しなければ $P;Q$ も停止しない)。$P$ が $(n,\rho')$ に達した後、$P;Q$ の番号 $n+\ell$ の命令は $Q$ の $I_\ell$ の行き先を $n$ ずらしたものなので、$P;Q$ の様相 $(n+\ell,\rho'')$ は $Q$ の様相 $(\ell,\rho'')$ と同じ変化をする。$Q$ の停止様相 $(m,\cdot)$ は $P;Q$ の停止様相 $(n+m,\cdot)$ に対応する。
2:$t$ についての帰納法による。$t=0$ では仮定そのものである。$t$ で成り立つとし、$I_{\ell_t}=\mathrm{INC}(r,j)$ とすると、$P^\sigma$ の対応する命令は $\mathrm{INC}(\sigma(r),j)$ なので、$\tilde\rho_{t+1}=\tilde\rho_t+\mathbf{e}_{\sigma(r)}$ である。$\sigma$ は単射なので $\tilde\rho_{t+1}\circ\sigma=\rho_t+\mathbf{e}_r=\rho_{t+1}$ であり、像に入らない $i$ では値は変わらない。$\mathrm{DEC}(r,j,j')$ の場合も、$\tilde\rho_t(\sigma(r))=\rho_t(r)$ なので分岐が一致し、同様である。停止様相の番号は両方とも $n$ なので、停止も一致する。
3:1 と同じ帰納法による。番号 $s+\ell$($\ell< n$)の命令は $P$ の $I_\ell$ の行き先を $s$ ずらし(停止の番号 $n$ だけは $e$ に替え)たものなので、様相 $(s+\ell,\rho'')$ は $P$ の様相 $(\ell,\rho'')$ と同じ変化をし、$P$ の停止様相 $(n,\rho')$ に当たる段で $(e,\rho')$ に進む。$\square$
付け替え $P^\sigma$ は、$P$ の作業を「$\sigma$ で指定した別の箱」で行わせる操作である。2 により、$P^\sigma$ は $\sigma$ の像の外の箱に触れない。
次の小さなプログラムを部品として使う($a,b,t$ は相異なる番号)。
すべての μ再帰関数 $f\colon\mathbb{N}^k\rightharpoonup\mathbb{N}$ は、あるプログラムによって整った形で計算される。とくに μ再帰関数はレジスタ機械で計算できる。
整った形で計算できる部分関数の全体を $\mathcal{R}$ とする。$\mathcal{R}$ が基本関数を含み、合成・原始再帰・μ 作用素で閉じていることを示せば、μ再帰関数の全体はそのような集まりのうち最小のもの(μ再帰関数 の記事の定義「μ再帰関数」)なので、$\mathcal{R}$ に含まれる。
以下、部品となるプログラムが使うレジスタの番号の最大値と $k+1$ のどちらよりも大きい $N$ をとり、新しいレジスタは $N$ より大きい番号から選ぶ。部品 $G$ を「出力を $R_u$ に、入力 $i$ を $R_{v_i}$ に、そのほかの作業を $R_{W+i}$ に」置いて動かすとは、$\sigma(0)=u$、$\sigma(i)=v_i$(入力の番号 $i$)、$\sigma(i)=W+i$(それ以外の $i$)となる単射 $\sigma$ による付け替え $G^\sigma$ を動かすことをいう。$R_u$ と $R_{W+i}$ が $0$ の状態からこれを動かすと、lem-ctt-compose の 2 と $G$ が整った形で計算することにより、$G$ の値が定義されるなら停止して $R_u$ に値が入り、入力の箱は元のまま、$R_{W+i}$ は $0$ に戻り、$\sigma$ の像の外の箱は変わらない。値が定義されなければ停止しない。
基本関数. ゼロ関数 $Z$ は長さ $0$ のプログラム(初期様相がすでに停止様相)が整った形で計算する。後者関数 $S$ は $\mathrm{CPY}(1,0;2);\mathrm{INC}(0,1)$(最後の命令は長さ $1$ のプログラム)が、射影 $P^k_i$ は $\mathrm{CPY}(i,0;k+1)$ が整った形で計算する。
合成. $f(\vec x)\simeq g(h_1(\vec x),\dots,h_m(\vec x))$ とし、$g$ を $G$ が、$h_j$ を $H_j$ が整った形で計算するとする。$c_j:=N+j$($1\le j\le m$)、$W:=N+m$ とおき、次のプログラムを考える。
原始再帰. $f(\vec x,0)\simeq g(\vec x)$、$f(\vec x,y+1)\simeq h(\vec x,y,f(\vec x,y))$ とし、$g$ を $G$ が、$h$ を $H$ が整った形で計算するとする。入力は $R_1,\dots,R_k$ に $\vec x$、$R_{k+1}$ に $y$ である。$a,c,d,b,t$ を $N+1,\dots,N+5$、$W:=N+5$ とおき、次のように動くプログラムを組む。
μ 作用素. $f(\vec x)\simeq\mu y\,[g(\vec x,y)=0]$ とし、$g$ を $G$ が整った形で計算するとする。$c:=N+1$、$b:=N+2$、$W:=N+2$ とおく。
逆向きでは、レジスタ機械の様相を 1 つの自然数で表し、1 段の変化が原始再帰関数で書けることを使う。有限列の符号 $\langle a_0,\dots,a_{m}\rangle:=\prod_{i\le m}p(i)^{a_i+1}$ と $i$ 番目の項 $(c)_i$ は原始再帰関数である(万能Turing機械 の記事の補題「列の操作は原始再帰的」)。
レジスタ機械で計算できる部分関数は μ再帰関数である。
長さ $n$ のプログラム $P$ が $f\colon\mathbb{N}^k\rightharpoonup\mathbb{N}$ を計算するとする。$P$ に現れるレジスタの番号と $k$ より大きい $m$ をとる。$R_i$($i\ge m$)は $P$ に現れず、初期様相で $0$ なので、計算の間ずっと $0$ のままである。そこで様相 $(\ell,\rho)$ を
$$
\ulcorner\ell,\rho\urcorner:=\langle\ell,\rho(0),\rho(1),\dots,\rho(m-1)\rangle
$$
で表す。
段 1(1 段の変化). 列の符号 $c$ の $i$ 番目の項を $v$ に替える関数 $\mathrm{rep}(c,i,v):=\bigl\lfloor c/p(i)^{(c)_i+1}\bigr\rfloor\cdot p(i)^{v+1}$ は原始再帰関数である(商 $\lfloor a/b\rfloor$ は有界最小化 $\mu q< a+1\,[\,(q+1)\cdot b>a\,]$ で書ける。原始再帰関数 の記事の命題「有界な和・積・量化・最小化」)。$\mathrm{St}(c)$ を次の場合分けで定める。
段 2(計算をなぞる). 原始再帰で
$$
\mathrm{cf}(\vec x,0):=\langle0,0,x_1,\dots,x_k,0,\dots,0\rangle,\qquad\mathrm{cf}(\vec x,s+1):=\mathrm{St}(\mathrm{cf}(\vec x,s))
$$
と定める(右辺の列の長さは $m+1$)。$\mathrm{cf}$ は原始再帰関数である。$\mathrm{cf}(\vec x,0)=\ulcorner0,\rho_{\vec x}\urcorner$ であり、段 1 と $s$ についての帰納法により、$P$ の $(0,\rho_{\vec x})$ からの計算の $s$ 番目の様相 $C_s$ が存在すれば $\mathrm{cf}(\vec x,s)$ はその符号であり、計算が $t\le s$ 番目で停止様相に達していれば $\mathrm{cf}(\vec x,s)=\mathrm{cf}(\vec x,t)$ である。
段 3(停止を探す).
$$
f(\vec x)\simeq\Bigl(\mathrm{cf}\bigl(\vec x,\ \mu s\,[\,(\mathrm{cf}(\vec x,s))_0=n\,]\bigr)\Bigr)_1
$$
を示す。$f(\vec x)$ が定義されるなら、$P$ は停止し、最初に停止様相に達する番号を $t$ とすると、$s< t$ では $(\mathrm{cf}(\vec x,s))_0< n$、$s=t$ では $(\mathrm{cf}(\vec x,t))_0=n$ なので $\mu s$ の値は $t$ であり、右辺は停止様相の $R_0$ の中身 $f(\vec x)$ である。$f(\vec x)$ が定義されないなら $P$ は停止せず、どの $s$ でも $(\mathrm{cf}(\vec x,s))_0< n$ なので右辺は定義されない。μ 作用素を施す関数 $\lvert(\mathrm{cf}(\vec x,s))_0-n\rvert$ は全域的な原始再帰関数なので、右辺は μ再帰関数である。$\square$
この証明でも、上界のない探索 $\mu s$ は 1 回しか使っていない。μ再帰関数 の記事の定理「Kleene の標準形定理」、万能Turing機械 の記事の定理「万能関数の標準形」と同じ形である。
部分関数 $f\colon\mathbb{N}^k\rightharpoonup\mathbb{N}$ について、次は同値である。
1 ⇒ 2 は thm-ctt-mu-to-rm、2 ⇒ 1 は thm-ctt-rm-to-mu である。$\square$
レジスタ機械は Turing 機械と見かけがまったく違う。テープも記号もなく、数そのものを箱に入れる。それでも計算できる関数の全体は同じになる。cor-ctt-models はテーゼの証拠の 1 つであるが、テーゼの証明ではない。証明されたのは 2 つの数学的なモデルの一致であり、「直観的に計算できる」という概念は一度も現れていない。
テーゼは、数学の議論の中で 2 通りに使われる(OLT26 §31.10、pp. 492–493)。
テーゼの「機械的な手順」には、命令が有限個であること、各段階が基本的な操作であること、値が有限回の段階で出力されることが含まれている。それぞれを外したモデルは、Turing 計算可能でない関数を「計算」してしまう。
| 外す条件 | 反例 | 成り立たなくなること |
|---|---|---|
| 命令が有限個 | 命令を無限個並べたレジスタ機械 | 計算できる関数が μ再帰関数に限られること:任意の $g\colon\mathbb{N}\to\mathbb{N}$ が計算できる |
| 各命令が基本的な操作 | 「$R_r$ の中身が自己停止集合 $K$ に属するか」で分岐する命令を加えた機械 | 同上:$\chi_K$ が計算できる |
| 出力は有限回の段階の後に得る | 止まらずに動き続け、$R_0$ の中身の極限を出力とする機械 | 同上:$\chi_K$ が極限として得られる |
1 行目:$g$ を任意の関数とする。命令に $(y,0)$ と $(y,1,i)$($y\in\mathbb{N}$、$0\le i< g(y)$)という無限個の番号を付け、ほかに停止を表す番号 $\mathrm{H}$ を用意する。$(y,1,g(y))$ は $\mathrm{H}$ を表すと約束する。番号 $(y,0)$ の命令を $\mathrm{DEC}(1,(y+1,0),(y,1,0))$、番号 $(y,1,i)$ の命令を $\mathrm{INC}(0,(y,1,i+1))$ とし、$(0,0)$ から始める。入力 $x$ から始めると、$R_1$ から $x$ 回 $1$ を引いた後に $(x,1,0)$ へ進み、$R_0$ に $1$ を $g(x)$ 回足して $\mathrm{H}$ に達するので、出力は $g(x)$ である。$g$ が μ再帰関数でなくても(たとえば Turing機械 の記事の定理「Turing 計算可能でない関数の存在」の関数でも)この「機械」は計算する。
2 行目:この分岐を $\mathrm{ORC}(r,j,j')$ と書く。長さ $2$ のプログラム $\mathrm{ORC}(1,1,2),\ \mathrm{INC}(0,2)$ は、入力 $x\in K$ なら $R_0=1$、$x\notin K$ なら $R_0=0$ で停止するので $\chi_K$ を計算する。$\chi_K$ は Turing 計算可能でなく(停止問題 の記事の定理「停止問題の決定不能性」)、したがって μ再帰関数でもない。
3 行目:停止問題 の記事の補題「計算の記録と停止」と 万能Turing機械 の記事の補題「1 ステップの関数の正しさ」により、「$M_e$ が入力 $e$ で $s$ ステップ以内に停止する」ことの特性関数 $c(e,s)$ は原始再帰関数である。各 $s$ について $c(e,s)$ を計算して $R_0$ に書き直しながら動き続ける機械を考えると、$s$ 段目の $R_0$ の中身は $c(e,s)$ であり、$s\to\infty$ の極限は、$e\in K$ なら(ある段から先は)$1$、$e\notin K$ なら $0$ である。よって極限は $\chi_K(e)$ に等しい。
3 つのモデルはどれも数学的に定義できるが、「機械的な手順」の条件のどれかを破っているので、テーゼへの反例にはならない。テーゼが主張しているのは、条件をすべて満たす手順の範囲についてである。
Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する