Skip to content

sekino/test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 

Repository files navigation

5章 究極の機械

3章と4章でやったこと

基本的な機械を使って↓を実現した

  • 複雑な文字列を認識する方法
  • 正規表現にマッチさせる方法
  • プログラミング言語をパースする方法 ただ、有限オートマトン、プッシュダウン・オートマトンには大きな制限があり、できないことが多い

この章で分かること

自動機械 (automatic machine) の設計方法について

決定性チューリングマシン

4章では有限オートマトンに、スタックを追加することで計算能力を高めた
-> 任意の情報を格納する必要のある問題を扱えるようになった

チューリングマシン

無限の長さの空白のテープにアクセスする機械のこと
チューリングマシンは計算をしながら、テープにある文字を読み、必要に応じて上書きすることができる
無限の長さのテープにアクスセスすることで、任意の量のデータを任意の場所に格納することができる

ストレージ

RAMの機能をどのように実現するか
テープ + テープヘッド
-> テープヘッドはテープ上の特定の位置を指す
-> 機械はその位置にある文字だけを読み書きする
-> 計算をするたびにテープヘッドを左右どちらかに1マス移動することができる

規則

コンピュータによって実行される操作を、これ以上分解するのが困難な、基本的で「単純な操作」に分解する
計算のステップごとにある「単純な操作」

  • 現在の位置にある文字を読む
  • その位置に正しい文字を書く
  • ヘッドを左右どちらかに移動する
  • 状態を変更する

決定性

チューリングマシンにおける決定性
チューリングのとるべき次のアクションは、現在の状態と現在のテープヘッドの下にある文字によって決まる
矛盾がない -> 状態と文字の組み合わせに対して規則を1つだけ持つ
省略がない -> 可能な全ての状況に対して規則を必ず1つもつ 適用できる規則がない場合は、暗黙の行き詰まり状態になる

シミュレーション

チューリングマシンのテープを実装する
テープを実装するエレガントな方法は、テープを3つに分解する

  1. テープヘッドの左側にある全ての文字
  2. テープヘッドの下にある文字
  3. テープヘッドの右にある全ての文字 それぞれを個別に格納する

無限に長く、空白で埋められたテープの実現
有限個の空白でない文字を超えてヘッドが動いた時に、その場所に新たな空白を配置する
-> テープヘッドがテープの未踏部分まで動いた時に、テープヘッドの下に空白を表す文字を出現させる

構成

チューリングマシンにおける構成 -> 状態とテープの組み合わせ
チューリングマシンのの規則は、その構成を直接扱うようにして実装する

それぞれの規則は、現在の状態と現在のテープヘッドの下にある文字が期待しているものと一致したときのみ、適用する
規則が適用されたら、機械の構成を更新する

非決定性

非決定性はチューリングマシンの能力を高めてくれるのか -> Noです

決定性チューリングマシンは、非決定性チューリングマシンをシュミレートする力を持っている
非決定性ユーリングマシンをシュミレートするために

  • 構成をキューとしてテープに格納
  • 先頭の構成を読んで新しい構成に更新
  • キューの後ろに新しい構成を追加

最大の能力

チューリングマシンは小さく効率よくすることはできるが、新しい能力を与えることは不可能

チューリングマシンの拡張

内部ストレージ

テープヘッドの下にある文字を記憶する -> 特定のタスクの実行が簡単になる
これまで出来なかったことが可能になるわけではない
チューリングマシンの優れた内部ストレージ -> 現在の状態
上限数は予め決めておく必要がある
ステップごとに任意の情報を保持する -> 状態に前に読んだ文字も含めてしまうなど

サブルーチン

規則を機械の一部に格納して、必要なときに呼び出す -> 規則集の設計が簡単になる
新しい能力が、加わるわけではない
サブルーチンで可能になること -> 小さなチューリングマシンを繋げて大きなチューリングマシンを構築する
問題 -> チューリングマシンはサブルーチンを実行した後、元の場所に戻ってこれない..
サーブルーチンの実現 -> 使う箇所ごとに規則を複製する

複数のテープ

チューリングマシンは、複数のテープを1本にたたみこめる -> テープを追加しても能力は高まらない
畳み込みの実現

  • 畳み込む文字と文字の間に空白もじをいれる
  • テープヘッドの位置を示すためのマーカーを書いておく
多次元のテープ

テープを左右だけでなく、上下にも動かせるようにした状態
-> 内部ストレージの特定の場所にアクセスするときに役立つ
-> 文字の大きさを表現できる

2次元の格子は、1次元のテープを2本使うことで再現できる
-> 格子の各業をマーキングしながら1本めのテープに格納
-> マーキングまで来たら次の行までずらす
-> 上下に移動する場合は、行末か行頭までの数を2本目のテープに保存して、オフセット分移動させる
-> ヘッドがはみ出した場合は空行を作成する

2本のテープは1本のテープに畳み込めるため、新しい能力は追加されない

汎用機械

これまでの機械の重大な欠点 -> 規則がハードコードされていて、様々なタスクに適用できない
チューリングマシンは、マシンのシュミレートに必要な情報をテープから読む事が可能
-> その機械がやることをシュミレートすることができる
他の機械をシュミレート可能な機械を、万能チューリングマシン(UTM)という

エンコード

UTMは任意のチューリングマシンの規則、受理状態、開始構成を読み込み、進行に合わせて構成を繰り返し更新する必要がある
課題 -> 格納できる有限個の状態と有限個の文字を持っており、規則集によって事前に決まっている

  • 10種類の文字を扱うUTMは、11種類の文字を扱うチューリングマシンをシュミレートできない
  • 特別な意味を持つ文字の衝突 -> エスケープする必要がある 実現するには -> テープ内容をエンコードするスキームを考案する

シュミレートするチューリングマシンの規則を表現するために

  • 規則の各パーツをエンコードし、必要なところにセパレータ文字を入れながらテープ上でつなぎ合わせる

About

test

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors