チューリングマシン・シミュレーター

チューリングマシンが遷移規則に従ってテープを読み書きし、無限のテープ上を移動する様子を観察しよう。

インタラクティブシミュレーションを読み込んでいます...

テープが一本だと回文は二次時間になる 🖖

回文のプリセットは 1,0,1,0,1 を21ステップで受理し、1,0,1,1 を13ステップで拒否します。この機械は両端を同時に比べられないので、左端の記号を消して状態に覚え込み、テープ全体を歩いて右端を確認し、それを消してまた戻ります。これを一組ごとに繰り返すのです。n 個の1が並んだテープでは、このプログラムはちょうど (n+1)(n+2)/2 ステップかかります。n = 5 なら21、n = 9 なら55、n = 21 なら253です。同じ機械に二本目のテープを与えれば仕事は線形になります。一本のテープでは線形になりえないことを、ヘニーが1965年に証明しました。コストはアルファベットでも状態数でもなく、歩くことにあるのです。

わずかな規則がすべてを動かす 🖖

チューリングマシンの構成はごく単純です。テープ、1マスを読むヘッド、そして短い規則表だけ。各ステップでは現在の状態とヘッド下の記号だけを見て、記号を書き込み、左か右へ1マス動き、状態を切り替えます。二進インクリメントのプリセットを実行すると、右端まで滑って進み、+1 の繰り上がりを左へ戻していく様子が見えます。まさに筆算の足し算と同じです。

ビジービーバーは宇宙より長く走る 🖖

最も素朴な問い——小さな機械は停止するまでどれだけ走れるか——を立てるだけで、計算は爆発します。状態5個・記号2個の機械は停止までにちょうど 47,176,870 ステップ進み、この値は2024年にようやく証明されました。状態6個では既知の記録はすでに 2↑↑↑5 を超え、宇宙のあらゆる原子をかすませる冪(べき)の塔となります。だからこそ、このようなシミュレータは各実行に上限を設けます。わずかな状態が永遠より長く生き延びうるのです。

全プロセスの詳細解説

  1. 回文プログラムが経る構成(入力 1 0 1 0 1) 5 ステップ

    回文判定プログラムがテープ 1 0 1 0 1、ヘッドはセル 0、状態 q0 から開始します。プログラムが停止するまでに通過するすべてのコンフィギュレーションを、実際に1ステップずつ実行することなくルール表からカウントし、入力が長くなるにつれてそのカウントがどのように変化するかを述べてください。

    1. テーブルを移動(ムーブ)のリストとしてではなく、ラウンドの繰り返しとして読み取ります。ラウンドを開始できるルールは 1 つだけです。q0 は最も左のシンボルを消去し、直前に消去した内容に応じて分岐します。1 であれば q1 へ、0 であれば q2 へ分岐します。この分岐が比較メカニズムのすべてです。マシンはシンボルをテープ上に保持するのではなく、どの状態にいるかによって保持するため、後で反対側の端と照合する際に追加の移動コストがかかりません。

    2. m 個のシンボルのブロックにおける 1 ラウンドをカウントします。左端の消去に 1 ムーブ。次にヘッドは残っている m − 1 個のシンボルを横断し、その先にある空白の上で向きを変えるためにさらに 1 ムーブ費やします。右端の消去に 1 ムーブ、残った m − 2 個の上を戻るのに m − 2 ムーブ、そして左端の空白上での最後の 1 ムーブにより、マシンは再び右を向いて q0 状態になります。

    3. 今回のテープでは 5、次に 3、そして単一のシンボルのブロックが得られますが、単一のシンボルはラウンドを構成しません。q0 がそれを消去し、q1 が右端から外へ進んで向きを変え、q1c がペアとなる相手がいるはずの場所に空白を見つけます。奇数長の回文にはペアのない中央のシンボルが存在し、その空白を見つけることが受理(accept)を意味します。

    4. 3 つを足し合わせ、フェンスポストエラーに注意します。移動回数は 21 です。問題でカウントするのはコンフィギュレーションであり、初期状態を含めると 21 回の移動により 22 個のコンフィギュレーションを通過します。

    5. 任意の奇数長 n に一般化します。ブロック長は n、n − 2、……と 3 まで減少し、それぞれ 2m + 1 のコストがかかり、中央は 3 のコストがかかります。このリストを合計すると n の 2 次式となり、1 次式(線形)にはなりません。

    解答

    22 コンフィギュレーション — 21 ムーブ。2 次式になるという点が押さえておくべき重要な部分です。21 シンボルの回文では 253 ムーブを要します。入力長が 4.2 倍になると、作業量は 12 倍になります。その理由は巧妙なトリックというよりも幾何学的なものです。比較される 2 つのシンボルは常に残りの部分の両端に位置し、ヘッドは 1 つしかないため、すべてのペアに対して残りのテープを 1 往復完全に横断するコストがかかります。マシンに 2 本目のテープを与えれば、同じ処理は線形(1次)になります。読み取りながら入力をコピーし、2 つのヘッドを逆方向に走らせて 1 回のパスで比較すれば、およそ 3n ムーブで済みます。1 本のテープではそのコピーを置く場所がなく、往復移動が強制されるのです。

参考文献 (3)

例題

  • ビット反転 - ビット反転: 0と1を入れ替える
  • 2進数+1 - 2進数のインクリメント: 1011→1100
  • 1111 → 10000 - インクリメントにおいて、考えうる最も厄介な入力を与えてみましょう。すべてのビットが1であるため、繰り上がりの処理ですべてのビットを反転させなければなりません。ヘッドが右端の空白まで進み、そこから左へと戻りながら各1を0へと変え、最後に入力外だった新しいセルに先頭の1を書き込む様子を追ってみてください。状況は全部で十一。テープは入力時よりも一セルだけ長くなって戻ってきます。
  • 単項 m+n - 単項(ユナリー)加算: 3+2=5
  • 1+1 = 2 - 考えうる最も単純な一進数の足し算ですが、これでも九つの状況を経ます。この機械は足し算ができるわけではありません。左のまとまりから1を一つ消去し、テープ全体を移動して、右端に1を一つ追加する。これを単位ごとに一回ずつ繰り返すのです。計算コストは記法の長さではなく、数の大きさに伴って増大します。より長い一進数のプリセットを読み込んで、その違いをご自身で数えてみてください。
  • 回文 ✓ - 回文判定: 10101
  • 1011 — 拒否 - 1011 — 却下