142
5
章 究極の機械
5.1.3
決定性
チューリングマシンの設計を決定的にするためには、決定性プッシュダウン・オートマトンと同じ制
約にしたがう必要があります(「4.1.3 決定性」を参照)。ただし、チューリングマシンには自由移動が
ないため、自由移動について気にする必要はありません。
チューリングマシンがとるべき次のアクションは、現在の状態と現在テープヘッドの下にある文字に
よって決まります。次のアクションにあいまいさをなくすため、決定性機械は状態と文字の組み合わせ
に対して、「矛盾がない」規則を1 つだけ持つことができます。話を簡単にするため、DPDAでやった
のと同じように、「省略がない」という制約を緩和することにします。可能なすべての状況に対して規則
を必ず1つ持つ代わりに、適用できる規則がないときには暗黙の行き詰まり状態になるものとします。
5.1.4
シミュレーション
これで決定性チューリングマシンの動きがわかりました。Rubyでシミュレーションを構築し、実際
に動かしてみましょう。
最初のステップは、チューリングマシンのテープを実装することです。テープの実装には、テープに
書かれている文字を格納するのはもちろんのこと、テープヘッドの現在の位置も覚えておく必要があり
ます。これによって、シミュレーションは現在のヘッドの位置にある文字を読み、新しい文字を書き、
ヘッドを左右に動かして別の位置に到達することができます。
テープを実装するエレガントなやり方は、テープを3 つの部分、テープヘッドの左側 ...