オートマトンとチューリング機械

オートマトンとチューリング機械
有限オートマトン
有限オートマトン
• 有限個の状態
– 現在の状態
– 初期状態
– 受理状態
• 入力文字列
– 有限個の文字 … アルファベット
• 状態遷移
– 入力文字と現在の状態に従って、
現在の状態をかえる。
状態遷移図
0
初期状態
二進数を、0と1から
成る文字列として入力し、
3の余りを計算する
有限オートマトン
1
1
0
0
1
言語
• アルファベット
– 有限個の文字の集合
– Σなどで表す。例:Σ={0,1}
• 文字列(語)
– アルファベットに属する文字の有限列
– 例:0, 00, 1100, 0101
– 空列も文字列。εやλで表す。
– 文字列の全体をΣ* で表す。
• 言語(形式言語)
– 文字列の集合、すなわちΣ* の部分集合。
– 例:3で割り切れる二進数の全体
言語の認識装置としての
有限オートマトン
• 状態のいくつかを受理状態とする。
– 受理状態は複数あってもよい。
• 与えられた文字列に従って、
初期状態からはじめて状態遷移を繰り返す。
– 初期状態は一つ。
• 文字列を読み終わった直後の状態が
受理状態ならば、その文字列を受理。
• 有限オートマトンMが受理する
文字列の全体をL(M)と書く。
• L(M)をMの受理言語という。
有限オートマトン
0
初期状態
3で割り切れる二進数の
全体を受理する
有限オートマトン
受理状態でもある。
1
1
0
0
1
有限オートマトン
初期状態
0
0
1
1
1
0
0
1
0と1を
奇数個ずつ
含む文字列を
受理する
オートマトン
正則表現
• 言語を表す記法
• 文字列のパターンを表す。
• 例:0(10)*1
– 0で始まり10が繰り返されて1で終わる文字列
– そういう文字列からなる言語
• 例:0(11+00)1
– 0の次に11または00が来て、1で終わる文字列
• 例:0(11+00)*1
正則表現から有限オートマトンへ
• 正則表現⇒有限オートマトン
– 任意の正則表現に対して、その言語を受理する
非決定的な有限オートマトンが存在する。
• 決定化
– 非決定的な有限オートマトンは、受理言語が同じ
決定的なオートマトンに変換できる。
• 最小化
– 決定的なオートマトンは、
受理言語をかえずに状態数が最小化できる。
• 有限オートマトン⇒正則表現
• 正則言語
非決定的な有限オートマトン
ε遷移:
文字を入力せずに
遷移できる。
ε
初期状態
0
0
0
1
1
1
非決定的な有限オートマトン
受理状態に至る遷移のしかたが
一つでもあればよい。
0
初期状態
0
0
0
1
1
1
1
決定的な有限オートマトン
初期状態
0
0
0
0
1
1
1
決定的な有限オートマトン
初期状態
0
0
0
0
1
1
1
1
0
0
1
1
状態数最小の有限オートマトン
0
初期状態
0
0
1
1
1
1
0
0
1
有限オートマトンの性質
• 受理言語の合併、交わり、補集合、連接、
閉包などに関して閉じている。
– 任意のM1とM2に対して、
L(M1)∪L(M2)=L(M)となるMが存在する。
• 二つのオートマトンが受理する言語が同じか
どうかを判定することができる。
• 数を数えられない:有限オートマトンの限界
– 例えば、0と1を同じ数だけ含む文字列のみを
受理する有限オートマトンは存在しない。
チューリング機械
チューリング機械
ヘッド
テープ
有限状態制御部
チューリング機械の動作
• 有限状態制御部の状態と、
ヘッド上の文字の各組み合わせに対して、
– ヘッドが書き込む文字(同じ文字をかけば無変化)
– 次の状態
– (文字を書いた後に)ヘッドを
左右のどちらに動かすか、
動かさないか。
という動作を定義。
• 動作が一通りに定まらないものは、
非決定的なチューリング機械
チューリング機械の停止
• 停止状態を定めることもある。
• 次の動作が定義されなかったら停止。
• 場合によっては、停止しないこともある。
言語の認識装置としての
チューリング機械
• 入力文字列をテープ上に書き込み、
– 書き込む前は空白文字が埋まっている。
– テープには、入力文字列に現れる文字以外の
文字を書き込んでもよい。
– 入力アルファベット ⊂ テープ・アルファベット
•
•
•
•
ヘッドを最初の文字の上におき、
状態を初期状態にセットして、
機械を走らせる。
停止したら、その文字列を受理。
– 受理状態において停止したら、
とすることもある。
int[][] nextstate = ...;
int[][] chartowrite = ...
int[][] nextmove = ...;
int[] tape = ...;
int state = ...;
int head = ...;
while (nextstate[state][tape[head]] >= 0) {
int c = tape[head]; int s = state;
state = nextstate[s][c];
tape[head] = chartowrite[s][c];
head += nextmove[s][c];
}
演習
• 0と1が同じ数だけ含む文字列のみを
受理するチューリング機械を定義せよ。
• そのチューリング機械を、
Javaプログラムによって走らせてみよ。
チューリング機械と計算可能性
言語の認識装置として
• 入力アルファベット上の言語Lが、
チューリング機械Mによって
認識できるとき、その言語を
帰納的に可算という。
• Mを用いれば、与えられた文字列が
– Lに属しているとき、
有限時間内にそのことがわかる。
– Lに属していないときは、
Mは止まらないかもしれないので、
そのことはいつまでたっても
わからないかもしれない。
• 以上のような認識が、
計算の限界である。
– チャーチのテーゼ
w∈L
入力文字列w
0 1 1 0 1
チューリング
機械
M
受理or不受理
(or非停止)
w∈L
帰納的に可算 vs. 帰納的
• 入力アルファベット上の言語Lが、
常に停止するチューリング機械
Mによって認識できるとき、
その言語を帰納的いう。
• Mを用いれば、与えられた文字列が
– Lに属しているとき、
有限時間内にそのことがわかる。
– Lに属していないときも、
有限時間内にそのことがわかる。
• 言語Lとその補集合がどちらも
帰納的に可算ならば、
L(およびその補集合)は
帰納的になる。
w∈L
Mへの入力
0 1 1 0 1
チューリング
機械
M
受理or不受理
(常に停止する)
w∈L
関数の実現機構として
• チューリング機械を用いて、
文字列をもらって文字列を返す関数を実現できる。
– 入力文字列をテープ上に書き込み、
チューリング機械を走らせる。
– 停止したら、テープ上の文字列を返す。
• 空白は無視する。
• チューリング機械は止まらないかもしれないので、
いつも出力が得られるとは限らない。
– 部分関数
• このような関数を部分帰納的関数という。
• 常に出力が得られるときは、帰納的関数という。
– チューリング機械が常に止まる場合。
決定性と非決定性
• 計算可能性に関して(言語の認識装置として)、
決定的なチューリング機械と
非決定的なチューリング機械に
能力の差はない。
– 非決定的なチューリング機械が入力文字列を
受理するとは、入力文字列をテープ上に書き込み、
非決定的な動作を適切に選べば、
(受理状態で)停止すること。
– 任意の非決定的なチューリング機械に対して、
同じ言語を受理する決定的なチューリング機械が
存在する。
0 1 1 0 1
チューリング
機械
非決定的な
チューリング機械
M
1 1 1 0 1
0 1 1 0 1
チューリング
機械
チューリング
機械
M
M
1 0 1 0 1
1 1 1 0 1
チューリング
機械
チューリング
機械
M
M
分身を作ると
思えばよい。
分身の一つが
受理すればよい。
万能チューリング機械
Mへの入力
Mのプログラム
Mへの入力
0 1 1 0 1
s c z k q b
0 1 1 0 1
チューリング
機械
M
受理or不受理(or非停止)
万能
チューリング
機械
受理or不受理(or非停止)
万能チューリング機械と停止問題
• 万能チューリング機械は、
任意のチューリング機械Mのプログラムと
Mへの入力に対して、Mをシミュレートできる。
– Mが停止しないときは、
万能チューリング機械も停止しない。
• Mが停止しないときも停止して、
Mの非停止を判定できるような
万能チューリング機械は存在するか。
– プログラムが停止しないことを、
プログラムを実行せずに判定できるか?
• 答えは否。
チューリング機械と計算量
言語の認識の計算量
• 帰納的な言語を考える。
– それを受理するチューリング機械は、
任意の文字列に対して必ず停止する。
• 入力文字列に対して、
チューリング機械が停止するまでの
動作ステップ数が、入力文字列の長さに
どのように依存するか。
– 特に、入力文字列の長さnの「多項式」に比例した
ステップ数(以下)で停止するか。
例えば、n2, n3...
P:多項式時間
• 帰納的な言語に対して、
それを受理する決定的な(常に停止する)
チューリング機械で、
停止するまでの動作ステップ数が
入力文字列の長さの多項式で
抑えられるものが存在するとき、
その言語をPという。
– もしくは、そのような言語のクラス(集まり)を
Pという。
NP:非決定的多項式時間
• 帰納的な言語に対して、
それを受理する非決定的な(常に停止する)
チューリング機械で、
停止するまでの動作ステップ数が
入力文字列の長さの多項式で
抑えられるものが存在するとき、
その言語をNPという。
• 動作の選び方をうまく選んだとき、
受理状態で停止するならば、
その入力文字列は受理されたとする。
PとNP
• もちろん、PはNPに含まれる。
– Pである言語はNPでもある。
• PとNPは等しいか?
– クレイ数学研究所が2000年に提示した
七つのミレニアム問題の一つ
(賞金100万ドル)
NP完全
• PとNPが等しいかどうかはわからないが、
PとNPが等しくないと仮定すると、
NP-Pに含まれることを示せる問題がある。
– NPのうちで最も難しい問題
– NPに属する任意の問題は、
多項式ステップでそのような問題に還元できる。
– そのような問題をNP完全という。
– 逆に、NP完全の問題がPに属するならば、
NPに属するすべての問題がPに属する。
NP完全問題
• ハミルトン経路問題
– グラフにハミルトン経路が存在するか。
• 指定された点から始まり指定された点に終わり、
すべての点をちょうど一回ずつ訪れる経路があるか。
• グラフを適当なアルファベットの文字列として表現する。
• ブール式の充足可能性問題
– ブール式は充足可能か。
• ブール変数の真偽を適当に定めると
ブール式全体を真にできるか。
• ブール式を適当なアルファベットの文字列として表現する。
関数の計算量
• ハミルトン経路問題はNP完全である。
• では、与えられたグラフに対して
ハミルトン経路を求める問題は
どのくらい難しいか?
– もし、ハミルトン経路が
決定的なチューリング機械により、
多項式時間で計算できるならば、
ハミルトン経路があるかどうかが
多項式時間で判定できてしまう。
– 従って、ハミルトン経路の計算も、
多項式ではできないはず。
PSPACE:多項式空間
• 帰納的な言語を認識するチューリング機械が、
停止するまでに、入力文字列の長さの
多項式で抑えられる空間(テープの量)しか
消費しないとき、その言語をPSPACEという。
• 決定的でも非決定的でも差はない。
• NPを含む。
(真に含むかどうかはわからない。)
P⊆NP⊆PSPACE