チューリングマシンとは何か?(第1回/全3回)

先月、DeepMindのCEOであるDemis Hassabisが、XでYann LeCunに反論した。その中で、私の目を引く主張があった。

「人間の脳(およびAI基盤モデル)は、近似的なチューリングマシンである。」1

「チューリングマシン」や「チューリング完全」という言葉は、これまで何度も耳にしてきた。しかし正直なところ、本当の意味を理解していたかと言われると怪しい。この記事では、短く、密度高く、それでいてわかりやすい説明を目指す。第1回では、チューリングマシンが実際に何であるかを扱う。第2回では、「チューリング完全」の意味を説明し、Demisの主張を再検討する。

歴史的背景

1930年代、数学者たちは「計算」とは何かを形式化しようとしていた。電子計算機が存在する以前、「computer」とは文字通り、規則に従い、紙に途中経過を書きながら手計算を行う人間のことだった。

Alan Turingはこう問いかけた。あらゆる機械的な計算を捉えるために必要な最小限の操作は何か?彼の答えは、一見自明に思えるほど単純でありながら、計算可能なものすべてを計算できるほど強力な抽象機械だった。

チューリングマシン

直感的な理解

机に座っている人を想像してほしい。その人は次のものを持っている。

  • 無限に長い、マス目に区切られた紙テープ(テープ
  • 鉛筆と消しゴム
  • 有限個の暗記された命令

その人ができることは次の4つだけ。

  1. 一度に1つのマスだけを見る
  2. そのマスに記号を書くか消す
  3. 注意を左右どちらかに1マス移動する
  4. 有限個の「心的状態」のいずれかにある

これだけだ。演算装置もメモリバンクも並列処理もない。読み、書き、移動し、状態を変える。その繰り返しだ。

これを実際に見てみよう。

例1:1の個数が偶数

1の個数が偶数である2進数文字列を受理するマシン $M$ を構築しよう。

入力 $w = \texttt{1011}$ を考える。これは1が3つ(奇数)なので、$M$ は拒否すべきである。入力 $w = \texttt{1100}$ は1が2つ(偶数)なので、$M$ は受理すべきである。

テープは入力が書かれた状態で始まり、その後ろに空白($b$ と書く)が右に無限に続く:

$$\texttt{1} \quad \texttt{0} \quad \texttt{1} \quad \texttt{1} \quad b \quad b \quad b \quad \cdots$$

マシンのヘッドは最も左のセルから、初期状態 $q_0$ で開始する。戦略はこうだ。右に走査し、1に出会うたびに「偶数個見た」と「奇数個見た」を切り替え、0は無視し、空白に到達したら受理または拒否する。

状態:$Q = \lbrace q_{\text{偶数}}, q_{\text{奇数}}, q_{\text{受理}}, q_{\text{拒否}} \rbrace$、$q_0 = q_{\text{偶数}}$(0個の1は偶数)。

遷移

状態読む書く移動次の状態
$q_{\text{偶数}}$00$q_{\text{偶数}}$
$q_{\text{偶数}}$11$q_{\text{奇数}}$
$q_{\text{偶数}}$$b$$b$$q_{\text{受理}}$
$q_{\text{奇数}}$00$q_{\text{奇数}}$
$q_{\text{奇数}}$11$q_{\text{偶数}}$
$q_{\text{奇数}}$$b$$b$$q_{\text{拒否}}$

各行はこう読む。「状態にいるときに、この記号を読んだら、この記号を書いて、この方向に移動(左または右)し、次の状態になる。」

$w = \texttt{1011}$ を追跡してみよう:

  1. 状態 $q_{\text{偶数}}$、1 を読む → 右に移動、$q_{\text{奇数}}$ に切り替え
  2. 状態 $q_{\text{奇数}}$、0 を読む → 右に移動、$q_{\text{奇数}}$ のまま
  3. 状態 $q_{\text{奇数}}$、1 を読む → 右に移動、$q_{\text{偶数}}$ に切り替え
  4. 状態 $q_{\text{偶数}}$、1 を読む → 右に移動、$q_{\text{奇数}}$ に切り替え
  5. 状態 $q_{\text{奇数}}$、$b$ を読む → $q_{\text{拒否}}$ で停止

予想通り、拒否された。$w = \texttt{1100}$ を自分で試してほしい。$q_{\text{受理}}$ で終わるはずだ。

気づいただろうか?このマシンは新しいものを何も書かず、左にも移動しない。ただ右に走査し、状態を切り替えているだけだ。チューリングマシンの全能力はまだ使っていない。

例2:回文検出

では、書き込みと双方向の移動を必要とするものを試そう。回文の検出だ。

文字列が回文であるとは、前から読んでも後ろから読んでも同じということだ。$w = \texttt{101}$ を考えよう:これは回文なので、$M$ は受理すべきである。入力 $w = \texttt{100}$ は回文ではないので、$M$ は拒否すべきである。

アルゴリズム

  1. 最も左の文字を読み、それを(状態を通じて)記憶し、$X$ でマークする
  2. 右に走査してマークされていない最も右の文字を見つける
  3. 記憶したものと一致するか確認;一致しなければ拒否
  4. $X$ でマークし、左に走査して最初のマークされていない文字に戻る
  5. すべての文字がマークされる(受理)か、不一致が見つかる(拒否)まで繰り返す

$w = \texttt{101}$ を追跡してみよう。テープは次のように始まる:

$$\texttt{1} \quad \texttt{0} \quad \texttt{1} \quad b \quad \cdots$$

反復1:状態 $q_0$ で、左端の 1 を読む。$q_{\text{1を探す}}$(「1を探している」)に遷移し、$X$ を書く。

$$X \quad \texttt{0} \quad \texttt{1} \quad b \quad \cdots$$

$q_{\text{1を探す}}$ で、マークされていない最も右の文字(1)まで右に走査する。一致した! $X$ を書き、$q_{\text{戻る}}$ に遷移する。

$$X \quad \texttt{0} \quad X \quad b \quad \cdots$$

$q_{\text{戻る}}$ で、最初のマークされていない文字(0)まで左に走査し、$q_0$ に遷移する。

反復2:$q_0$ で 0 を読む。$q_{\text{0を探す}}$ に遷移し、$X$ を書く。

$$X \quad X \quad X \quad b \quad \cdots$$

$q_{\text{0を探す}}$ で、マークされていない最も右の文字を探して右に走査する...存在しない。すべてマークされているので、$q_{\text{受理}}$ に遷移する。

この例は、例1では必要なかったものを示している。

  • 書き込み:進捗を追跡するために $X$ でマークする
  • 双方向の移動:左右に繰り返し走査する
  • 記憶としての状態:「0を探す」か「1を探す」かを状態で記憶する

$X$ は入力の一部ではないことに注意。入力アルファベットは $\Sigma = \lbrace \texttt{0}, \texttt{1} \rbrace$ だが、テープアルファベットは $\Gamma = \lbrace \texttt{0}, \texttt{1}, X, b \rbrace$ である。マシンは有効な入力に現れるもの以外の記号も読み書きできる。

形式的定義

例を見てきたので、ここで形式的な定義を示す。チューリングマシンは7つ組である:

$$M = (Q, \Gamma, b, \Sigma, \delta, q_0, F)$$

記号意味
$Q$有限の状態集合
$\Gamma$テープアルファベット(マシンが読み書きできる記号の有限集合)
$b \in \Gamma$空白記号(入力の先にある無限のテープを埋める)
$\Sigma \subseteq \Gamma \setminus \lbrace b \rbrace$入力アルファベット(有効な入力記号)
$q_0 \in Q$初期状態
$F \subseteq Q$受理状態の集合
$\delta: Q \times \Gamma \rightarrow Q \times \Gamma \times \lbrace L, R \rbrace$遷移関数

遷移関数 $\delta$ はマシンの頭脳だ。「状態 $q$ にいて記号 $s$ を見たら、$s'$ を書き、左か右に移動し、状態 $q'$ に切り替える。」

マシンは、最終的に $F$ 内の状態に到達すれば、入力 $w$ を受理する。マシンが認識する言語は、受理するすべての文字列の集合だ。$L(M) = \lbrace w \in \Sigma^* \mid M \text{が} w \text{を受理する} \rbrace$ と書く。ここで $\Sigma^$ は入力アルファベット上のすべての有限文字列を意味する。例えば $\lbrace 0, 1 \rbrace^ = \lbrace \epsilon, 0, 1, 00, 01, \ldots \rbrace$ だ。

$L(M)$ をもう一度見てほしい。マシン $M$ は有限だ:有限個の状態、有限のテープアルファベット、したがって有限個の遷移規則。しかし言語 $L(M)$ は無限個の文字列を含みうる。チューリングマシンは、潜在的に無限の集合の有限な記述である。

これはラッセルのパラドックスに関する記事で探求したことと重なる。内包的記法では、$\lbrace x : x > 5 \rbrace$ はわずかな記号で無限個の数を表す。チューリングマシンも同様のことをする。

$$\lbrace x : x > 5 \rbrace \quad \text{vs} \quad \lbrace w : M \text{が} w \text{を受理する} \rbrace$$

どちらも所属条件によって集合を定義している。違いはこうだ。内包的記法は任意の性質を許すが、その中には機械的なテストが存在しないものも含まれる(「$n$ は来週の宝くじの当選番号に現れる」は集合を定義するが、所属をテストするのは無理だ)。一方、チューリングマシンは構成上、それ自体がテストである2。定義と手続きは同一なのだ。候補 $w$ を渡してくれれば、$M$ を実行できる。

「1の個数が偶数」マシンは6つの遷移規則しかないが、無限個の文字列を受理する。$\epsilon$、00011000011110110...すべてを列挙することは不可能だが、任意の文字列を渡してくれれば、マシンを実行してそれが集合に属するかどうかを判定できる。

2

1つ注意点がある。マシンは停止せずに永遠に動き続ける可能性がある。これについては第2回で詳しく述べる。

次回予告

チューリングマシンとは何かを見てきた。機械的計算のための最小限の抽象化だ。読み、書き、移動し、状態を変える。

しかし、なぜこのような単純なマシンが重要なのか?第2回では、「チューリング完全」の意味、なぜこの原始的なマシンが最大の計算能力を持つのか、そしてDemisが「近似的なチューリングマシン」で何を意味したのかを扱う。



この記事はClaude(Opus 4.5)と協力して執筆しました。