Church–Turingのテーゼ

同義語:Church-TuringのテーゼChurch–Turing thesisChurchのテーゼChurch's thesisチャーチ=チューリングのテーゼ

概要

Church–Turingのテーゼ(Church–Turing thesis)とは、直観的な意味で機械的な手順によって計算できる自然数の部分関数はすべて Turing 機械で計算できる、という主張である。「機械的な手順」が数学的に定義された概念でないため定理ではないが、Turing 機械・μ再帰関数・レジスタ機械など独立に提案された計算のモデルがどれも同じ関数の全体を定めるという、モデルごとに証明できる一致に支えられている。テーゼは、計算の手順を書き下す手間を省く根拠として、また停止問題の決定不能性のような Turing 機械についての定理を「どんな機械的な手順でも不可能」と読む根拠として使われる。

$$\newcommand{C}[0]{\mathbb{C}} \newcommand{div}[0]{\mathbin{÷}} \newcommand{N}[0]{\mathbb{N}} \newcommand{Q}[0]{\mathbb{Q}} \newcommand{R}[0]{\mathbb{R}} \newcommand{Z}[0]{\mathbb{Z}} $$

前提知識: 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$ の記法は μ再帰関数 の記事に従う。

テーゼの主張

Church–Turing のテーゼ

Church–Turing のテーゼ(Church–Turing thesis)とは、次の主張である。

直観的な意味で機械的な手順によって計算できる部分関数 $f\colon\mathbb{N}^k\rightharpoonup\mathbb{N}$ は、Turing 計算可能である。
「機械的な手順」(実効的な手順、アルゴリズム)は数学的に定義された概念ではなく、おおよそ「有限の長さの文で指定できる計算の段階の列」を指す(MSm24 p. 151)。テーゼの述べ方は OLT26 Definition 31.22(p. 492)と MSm24 §4.4(p. 152)による。

逆向きの「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 は、この分野の研究者の多くがテーゼを信じていると述べている。

証明できる部分:計算のモデルの一致

知られている一致

次の一致は、すべて定理である。

  • Turing 計算可能な 1 変数の部分関数は μ再帰関数である。これは 万能Turing機械 の記事で証明されている(定理「万能関数の標準形」と、定理「万能 Turing 機械の存在」の後の注意)。変数が 2 個以上の場合は Gal15 §7.7.1(p. 355)、Bil03 Theorem 14.8(p. 97)による(この記事では証明しない)。
  • μ再帰関数は Turing 計算可能である(Gal15 §7.7.1、p. 355、全域関数については Bil03 Theorem 13.14、p. 92。この記事では証明しない)。
  • λ計算で定義できる部分関数は μ再帰関数であり、全域的な μ再帰関数は λ計算で定義できる(OLT26 Theorem 44.18、p. 667、Proposition 44.16、p. 666。この記事では証明しない)。
  • テープを複数本にしても、1 本のテープの機械で同じ計算を模倣できる(MSm24 Theorem 4.3.1、pp. 148–150。この記事では証明しない)。
  • μ再帰関数はレジスタ機械で計算でき、逆にレジスタ機械で計算できる関数は μ再帰関数である。この記事で証明する(thm-ctt-mu-to-rm、thm-ctt-rm-to-mu)。
    どの一致の証明も、「一方のモデルの計算を、もう一方のモデルで 1 段ずつ模倣する」という同じ形をしている。模倣が可能なのは、どのモデルでも計算の各段階が有限の情報で表され、1 段の変化が単純な規則で決まるからである。テーゼは、この「有限の情報と単純な 1 段」という特徴が、機械的な手順一般に共通すると主張している。

レジスタ機械

一致の証明を 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\}$)。

  • $\mathrm{INC}(r,j)$:レジスタ $R_r$ の中身に $1$ を足し、命令 $j$ へ進む。
  • $\mathrm{DEC}(r,j,j')$:$R_r$ の中身が正なら $1$ を引いて命令 $j$ へ進み、$0$ なら何も変えずに命令 $j'$ へ進む。

様相 とは、組 $(\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 つの操作を使う。

  • 連結:長さ $n$ の $P$ と長さ $m$ の $Q$ に対し、$P$ の命令の後に、$Q$ の命令の行き先の番号をすべて $n$ だけずらしたものを並べたプログラムを $P;Q$ と書く(長さ $n+m$)。$P$ の停止様相の番号 $n$ は $Q$ の最初の命令の番号になる。
  • 付け替え:単射 $\sigma\colon\mathbb{N}\to\mathbb{N}$ に対し、$P$ の各命令のレジスタの番号 $r$ を $\sigma(r)$ に替えたプログラムを $P^\sigma$ と書く。
連結と付け替え
  1. $P;Q$ を様相 $(0,\rho)$ から動かすと、$P$ を $(0,\rho)$ から動かしたのと同じ変化をし、$P$ が停止様相 $(n,\rho')$ に達したら、続けて $Q$ を $(0,\rho')$ から動かしたのと同じ変化をする。とくに $P;Q$ が停止するのは、$P$ が停止し、その後 $Q$ が停止するときちょうどである。
  2. $\rho,\tilde\rho\colon\mathbb{N}\to\mathbb{N}$ が $\tilde\rho\circ\sigma=\rho$ を満たすとする。$P$ の $(0,\rho)$ からの計算を $(\ell_t,\rho_t)$ とすると、$P^\sigma$ の $(0,\tilde\rho)$ からの計算は $(\ell_t,\tilde\rho_t)$ であり、$\tilde\rho_t\circ\sigma=\rho_t$、かつ $\sigma$ の像に入らない $i$ では $\tilde\rho_t(i)=\tilde\rho(i)$ である。とくに $P^\sigma$ が停止するのは $P$ が停止するときちょうどである。
  3. 長さ $n$ の $P$ の命令を番号 $s,\dots,s+n-1$ に置き、行き先の番号 $j< n$ を $s+j$ に、停止の番号 $n$ を任意の番号 $e$ に替えて、より長いプログラムの一部にする。このプログラムを $(s,\rho)$ から動かすと、$P$ を $(0,\rho)$ から動かしたのと同じ変化をし、$P$ が停止様相 $(n,\rho')$ に達したとき $(e,\rho')$ に進む。

要点:どちらもステップ数についての帰納法で、各命令が次の様相を「命令の番号と 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$ は相異なる番号)。

  • $\mathrm{CLR}(a)$:長さ $1$ のプログラム $\mathrm{DEC}(a,0,1)$。$R_a$ を $0$ にして停止する。
  • $\mathrm{MOV}(a,b)$:$\mathrm{DEC}(a,1,2),\ \mathrm{INC}(b,0)$。$R_b$ に $R_a$ の中身を足し、$R_a$ を $0$ にする。
  • $\mathrm{CPY}(a,b;t)$:$\mathrm{DEC}(a,1,3),\ \mathrm{INC}(b,2),\ \mathrm{INC}(t,0),\ \mathrm{DEC}(t,4,5),\ \mathrm{INC}(a,3)$。$R_t=0$ から始めると、$R_b$ に $R_a$ の中身を足し、$R_a$ は元に戻り、$R_t=0$ で停止する。
    どれも、$R_a$ の中身についての帰納法で動作がすぐ確かめられる。

μ再帰関数はレジスタ機械で計算できる

μ再帰関数のレジスタ機械による計算

すべての μ再帰関数 $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$ とおき、次のプログラムを考える。

  1. $j=1,\dots,m$ の順に、$H_j$ を「出力を $R_{c_j}$ に、入力 $i$ を $R_i$ に、作業を $R_{W+i}$ に」置いて動かす。
  2. $G$ を「出力を $R_0$ に、入力 $j$ を $R_{c_j}$ に、作業を $R_{W+i}$ に」置いて動かす。
  3. $\mathrm{CLR}(c_1);\dots;\mathrm{CLR}(c_m)$。
    初期様相では $R_1,\dots,R_k$ に $\vec x$ が入り、ほかは $0$ である。ある $h_j(\vec x)$ が定義されなければ、それより前の段は停止し、段 1 の $j$ 番目で停止しない。このとき $f(\vec x)$ も定義されない。すべての $h_j(\vec x)=y_j$ が定義されるなら、段 1 の後 $R_{c_j}=y_j$、入力は元のまま、作業の箱は $0$ である。$g(\vec y)$ が定義されなければ段 2 で停止せず、$f(\vec x)$ も定義されない。定義されるなら段 2 の後 $R_0=g(\vec y)=f(\vec x)$ で、段 3 で $R_{c_j}$ を空にすると、整った形の停止様相になる。

原始再帰. $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$ とおき、次のように動くプログラムを組む。

  1. $G$ を「出力を $R_a$ に、入力 $i$ を $R_i$ に」置いて動かし、$\mathrm{CPY}(k+1,d;t)$ を実行する。
  2. (ループの先頭)$\mathrm{DEC}(d,\cdot,\cdot)$ で、$R_d>0$ なら $1$ を引いて 3 へ、$R_d=0$ なら 4 へ進む。
  3. $H$ を「出力を $R_b$ に、入力 $i\le k$ を $R_i$ に、入力 $k+1$ を $R_c$ に、入力 $k+2$ を $R_a$ に」置いて動かし、$\mathrm{CLR}(a);\mathrm{MOV}(b,a)$ を実行し、$R_c$ に $1$ を足して 2 へ戻る。
  4. $\mathrm{MOV}(a,0);\mathrm{CLR}(c)$ を実行して停止する。
    組み立て方は連結と同じで、段 3 の最後の行き先だけを段 2 の命令の番号に替える。lem-ctt-compose の 2・3 により、各部品は単独で動かしたのと同じ変化をし、停止したら指定した次の命令へ進む(下の μ 作用素の組み立ても同じである)。$f(\vec x,y)$ が定義されるときは、段 2 に $i$ 回目に来たとき($0\le i\le y$)、$R_c=i$、$R_d=y-i$、$R_a=f(\vec x,i)$ で、$R_b$、$R_t$、作業の箱は $0$ である。これは $i$ についての帰納法で確かめられる($i\to i+1$ では段 3 が $R_a$ を $h(\vec x,i,f(\vec x,i))=f(\vec x,i+1)$ に替え、$R_c$ を $1$ 増やす)。$i=y$ で $R_d=0$ となり、段 4 で $R_0=f(\vec x,y)$ となって整った形で停止する。$f(\vec x,y)$ が定義されないときは、$f(\vec x,i)$ が定義されない最小の $i\le y$ があり、$i=0$ なら段 1 の $G$ が、$i\ge1$ なら $i$ 回目の段 3 の $H$ が停止しない。パラメータのない原始再帰($f(0)=a_0$)では、段 1 の $G$ の代わりに $\mathrm{INC}(a,\cdot)$ を $a_0$ 回並べる。

μ 作用素. $f(\vec x)\simeq\mu y\,[g(\vec x,y)=0]$ とし、$g$ を $G$ が整った形で計算するとする。$c:=N+1$、$b:=N+2$、$W:=N+2$ とおく。

  1. (ループの先頭)$G$ を「出力を $R_b$ に、入力 $i\le k$ を $R_i$ に、入力 $k+1$ を $R_c$ に」置いて動かす。
  2. $\mathrm{DEC}(b,\cdot,\cdot)$ で、$R_b>0$ なら 3 へ、$R_b=0$ なら 4 へ進む。
  3. $\mathrm{CLR}(b)$ を実行し、$R_c$ に $1$ を足して 1 へ戻る。
  4. $\mathrm{MOV}(c,0)$ を実行して停止する。
    段 1 に $z$ 回目に来たとき、$R_c=z$、$R_b=0$ で、すべての $z'< z$ について $g(\vec x,z')$ は定義されて $0$ でない($z$ についての帰納法)。$g(\vec x,z)$ が定義されなければ段 1 で停止しない。このとき $\mu y$ の定義により $f(\vec x)$ も定義されない。$g(\vec x,z)=0$ なら段 4 で $R_0=z=f(\vec x)$ となり、$R_b=R_c=0$ で整った形で停止する。$g(\vec x,z)>0$ なら段 3 を経て $z+1$ 回目に進む。$g(\vec x,y)=0$ となる $y$ がなく、すべて定義されるなら、ループは止まらず、$f(\vec x)$ も定義されない。$\square$

レジスタ機械で計算できる関数は μ再帰関数である

逆向きでは、レジスタ機械の様相を 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)$ を次の場合分けで定める。

  • $(c)_0\ge n$ なら $\mathrm{St}(c):=c$。
  • $(c)_0=\ell< n$、$I_\ell=\mathrm{INC}(r,j)$ なら $\mathrm{St}(c):=\mathrm{rep}\bigl(\mathrm{rep}(c,r+1,(c)_{r+1}+1),0,j\bigr)$。
  • $(c)_0=\ell< n$、$I_\ell=\mathrm{DEC}(r,j,j')$ なら、$(c)_{r+1}>0$ のとき $\mathrm{St}(c):=\mathrm{rep}\bigl(\mathrm{rep}(c,r+1,(c)_{r+1}\mathbin{\dot-}1),0,j\bigr)$、$(c)_{r+1}=0$ のとき $\mathrm{St}(c):=\mathrm{rep}(c,0,j')$。
    $P$ は固定されているので場合は有限個であり、同じ命題の場合分けを有限回使えば $\mathrm{St}$ は原始再帰関数である。定義から、停止様相でない $(\ell,\rho)$ について $\mathrm{St}(\ulcorner\ell,\rho\urcorner)$ は次の様相の符号であり、停止様相の符号は $\mathrm{St}$ で動かない。

段 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. $f$ は μ再帰関数である。
  2. $f$ はレジスタ機械で計算できる。
    さらに、1 は「$f$ は Turing 計算可能である」と同値である(上の「知られている一致」で引いた定理による。$k=1$ の「Turing 計算可能なら μ再帰的」は 万能Turing機械 の記事で証明されている)。

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)。

  1. 構成の省略.ある関数を計算する手順を言葉や疑似コードで書き、「テーゼにより Turing 計算可能である」として、機械の構成を省く。たとえば Chomsky階層 の記事では、文法と入力から所属を判定する手順が Turing 機械で実現できることを、この立場で述べている。この使い方は原理的には不要で、手間をかければ機械や μ再帰関数の定義を書き下せる。計算可能関数・停止問題・万能Turing機械 の記事の定理は、テーゼを使わずに μ再帰関数と Turing 機械の一致(定理)だけを使って証明されている。
  2. 不可能性の解釈.停止問題 の決定不能性は「停止を判定する Turing 機械は存在しない」という定理である。これを「停止を判定する機械的な手順はどんな形でも存在しない」と読むには、テーゼが必要である。Turing 機械にできないことが、どんな手順にもできないと言えるのは、テーゼを認めたときだけである。
    2 の使い方では、テーゼは定理の結論を変えない。定理は Turing 機械についての主張のまま正しく、テーゼはその主張が「計算」一般についての主張として読めることを保証している。

反例:手順の条件を外すと成り立たない

テーゼの「機械的な手順」には、命令が有限個であること、各段階が基本的な操作であること、値が有限回の段階で出力されることが含まれている。それぞれを外したモデルは、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 つのモデルはどれも数学的に定義できるが、「機械的な手順」の条件のどれかを破っているので、テーゼへの反例にはならない。テーゼが主張しているのは、条件をすべて満たす手順の範囲についてである。

補足

  • テーゼと計算資源. Turing 機械にはステップ数やテープの長さの制限がない(OLT26 p. 475)。したがってテーゼの「計算できる」は「原理的に計算できる」という意味であり、現実の計算機で現実的な時間内に計算できることとは別である。計算に必要な時間や記憶の量は、計算量の理論で扱う。
  • 定義としての役割. テーゼを認めれば、「計算可能」は Turing 機械・μ再帰関数・レジスタ機械のどれで定義してもよく、議論に便利なものを選べる。計算可能関数 の記事は Turing 機械で定義し、μ再帰関数との一致を使って議論している。

関連項目

参考文献

Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する