1.59k likes | 1.95k Views
形式言語とオートマトン 講義資料 . ver.1.8 b(2013/4/24). 教科書. オートマトン 言語理論 計算論 Ⅰ (第2版) J. ホップクロフト・ R. モトワニ・ J. ウルマン. 授業資料. http://thales.philos.k.hosei.ac.jp/automaton/. 何をする学問分野か?. 次の 1 ~3のための 統一的な枠組み 1. 言語理論として: プログラミング言語、通信プロトコル、知識表現 2. 計算論として: 計算の限界、計算の量 3. オートマトンとして: アルゴリズムとその表現. 他の科目との関係.
E N D
形式言語とオートマトン 講義資料 ver.1.8 b(2013/4/24)
教科書 オートマトン 言語理論 計算論 Ⅰ (第2版) J.ホップクロフト・R.モトワニ・J.ウルマン 授業資料 http://thales.philos.k.hosei.ac.jp/automaton/
何をする学問分野か? 次の1~3のための統一的な枠組み 1. 言語理論として: プログラミング言語、通信プロトコル、知識表現 2. 計算論として: 計算の限界、計算の量 3. オートマトンとして: アルゴリズムとその表現
他の科目との関係 • 計算量の理論(2年後期) • コンパイラ(3年前期) • 形式言語の応用分野 • コンパイラ演習(3年前期) • コンパイラ作成 • プログラミング言語理論・設計(3年後期) • プログラミング言語の基礎理論
学習の目標 • オートマトンの概念を理解する(今日) • 簡単なオートマトンが設計できる • 正則表現が書ける • 文法が表す言語が判る 以上に加えて、 • コンピュータに関する理論のトレーニング • 情報・計算システムについて語るためのリテラシー
例題 狼と山羊とキャベツをもった男が川の左岸から右岸に舟で渡ろうとしている。 • 舟は小さいので3つのうち1つしか積めない。 • 男が見張っていないと… • 狼は山羊を食べる • 山羊はキャベツを食べる 3つの品物を右岸に運べるか? YESならどうやって?NOならなぜ?
WC ー MG MWGC ー システムの記述 男M,狼W,山羊G,キャベツCを川の左右の岸に応じてハイフン ー の左右に書く。 はじめ: MWGC ー 男が山羊を右岸に運ぶと、 WC ー MG と変わる。この状態が変化する様子を次のように表す g
可能な遷移すべてを図示=状態遷移図 g m MWCーG MWGCー WCーMG c m w g c w CーMWG WーMGC
状態遷移図の性質 • 状態の数は有限 • 矢印(のラベル)の種類は有限 • (例の場合、g, m, w, c) • したがって図全体として有限 (有限状態系) • ゴールに至るラベルの列が答え (一通りとは限らない!)
例からわかったこと • 問題の答えは状態遷移図を描けば経路(の存在)としてわかる。 • 与えられた手順(行為の列)が答えか否かはそのとおり状態遷移図をたどっていけるか否かでわかる。(解か否かを認識できる) • 例: gmwwcgwmgは解か? 上のように状態遷移図を認識装置とみなしたものを(有限)オートマトンという。
レポート問題1 白石○3つと黒石●2つを横一直線にならべる。 真ん中の石を左、右の端に移動させる操作l,r によって並べ替えることを考える。 ○○○●●から始めて、白黒の色の並びが左右対称になるように並べ替えたい。 • 操作回数が最小の手順は何か? • rlllrrlrrlは解か?
言語との関係 • 解となる記号列全体はどのような集合か? • 逆に、与えられた(有限とは限らない)集合の要素だけを認識する方法は何か? • C言語の正しいプログラムかどうかは有限オートマトンで判定できるか否か? 記号列の集合=(形式)言語
言語とオートマトン 有限オートマトン の集合 言語を認識するオートマトンは? オートマトンで 認識できる 言語の集合 オートマトンが認識する言語は?
通信プロトコルへの応用 “RFC793” TCP接続状態遷移図
これからの内容 • 有限オートマトンと言語を取り扱うための数学の準備 • 論理、集合、関係、グラフ、帰納法 • オートマトンと正則言語の等価性と変換方法 • オートマトンで認識できない言語 • もっと表現力豊かな言語~文法で表される言語
数学的準備 • 記号列 • 集合 • グラフ • 帰納的定義 • 構造帰納法 • 論理 • 関係と関数
記号列 • 記号(symbol)― 定義なしで用いる対象 • 記号列(string)― 記号の有限個の並び. 語(word)ともいう。 例 a, b, cが記号のとき abbacは記号列 • 記号列wを構成する記号の数をwの長さといい |w|であらわす。 例 記号列wがabbacであるとき|w|=5 • 長さが0である(記号がひとつもない)記号列のことを e と書き、空語(empty word)と呼ぶ。 | e|=0
接頭語と接尾語 • 記号列w の先頭のいくつかの記号の並びからなる語をwの接頭語(prefix)という。 wそのものと空語e もまたwの接頭語である。 例 abbはabbacの接頭語。 abcはabbacの接頭語ではない • 同様に、記号列w の末尾のいくつかの記号の並びからなる語をwの接尾語(postfix)という。 wそのものと空語e もまたwの接尾語である。 • wの接頭語でwとは異なるものをwの真の(proper)接尾語という 問 記号列abbacの接頭語をすべて挙げよ。
連接 • 2つの記号列u,v をこの順に繋げてできる新しい記号列w をuとv の連接(concatenation)といいuvであらわす。 例 hot とdogの連接はhotdog (空白をあけてはいけない) 注:記号列wと空語の連接はw(eは連接の単位元) we = e w = w • 記号列wのn個の連接 ww… w をwnとかく w0= e と定義する n個
言語 • 記号の有限集合をアルファベット(alphabet)という。 例 {a,b,…z}, {0,1}はそれぞれアルファベット • あるアルファベットに属する記号の列の集合を言語(language)と呼ぶ。 注:空集合φもまたひとつの言語である。 {e }(空語1つだけからなる言語)と区別せよ • アルファベットSに属する記号のすべての列の集合をS *とかく。
言語の例 - 回文 • 前から読んでも後ろから読んでも同じになる言葉を回文(palindrome)という。 例 たけやぶやけた わたしまけましたわ • 語wの記号の順序を逆にしたwRであらわす。 • アルファベットS 上の回文とは、 S *の要素wでwR= wとなるもの。 S = {0,1}上の回文全体は言語である。
集合 • 集合(set) 特定の性質をもつものの集まり • x が集合A の要素(element)であることをx∈A 、そうでないないことはx∈Aとかく • 集合Bの要素がすべて集合Aに含まれるとき、 BはA の部分集合(subset)であるといい、B ⊆Aとかく。 • 「xについて命題Pが成り立つ」ことをP(x)とかく • P(x)となるx全体の集合を{x|P(x)} また集合Aの要素xでP(x)となるもの全体の集合を {x∈A |P(x)}のように書く。 例 {w∈S *| wR= w} S上の回文全体 • {f(x1,…, xn)|P(x1,…, xn)} P(x1,…, xn)となるx1,…, xnからつくられるf(x1,…, xn)全体の集合 /
集合に対する演算 AとBを集合とする A∪B={x | x∈Aまたはx∈B} (AとBの和, union) A-B={x | x∈Aかつx∈B} (AとBの差, difference) A∩B={x | x∈Aかつx∈B} (AとBの共通部分, intersection) A×B ={(x, y)| x∈A, y∈B} (AとBの直積, Cartesian product) 2A={X|X⊆A} ( Aのべき集合, power set) 問 A ={1, 2}, B={2, 3}として上の集合を求めよ。 /
言語に対する演算 A,B,Cを言語とする AB={xy | x∈A,y∈B} (AとBの連接) ABC= A(BC) = (AB)C An = AA…A (n個, n>0) A0 ={e} A*= A0 ∪ A1 ∪…= ∪Ai (Aの閉包) 問 A ={0, 1}, B={2}, C={2}として上の言語を求めよ。 ∞ i=0
1 3 4 グラフ • グラフGは頂点(vertexまたはnode)の有限集合Vと頂点の対で表される辺(edge)の有限集合Eの組であってG=(V,E)で表される。 例 V={1,2,3,4,5}, E={(1,3), (3,4), (2,5), (2,2)} のときグラフ(V,E)は 5 2 • グラフの頂点の列v1,v2,…vkが道(path)であるとは(v1,v2),(v2,v3),…(vk-1,vk)が辺であること。
有向グラフ • 有向グラフはグラフの辺の向きを考慮したものでやはりG=(V,E)で表す。辺の代わりに有向辺(arc)といい、u→vのように書く。 • 有向グラフの頂点の列v1,v2,…,vkが道であるとはv1→v2, v2→v3,…vk-1→vkが有向辺であること。 問 有向グラフ({x∈N|0<x<5},{i→j | i<j}) を図示せよ。 (Nは自然数の集合) • v1,v2,…,vkが(有向)グラフGの道であってv1=vkであるとき、道v1,v2,…,vkは閉路(cycle)であるという。
レポート問題3 • a,b,cを記号とする。記号列x,y,zをそれぞれabc, bb, abcabとするとき、|xyz|,|xxx|,|xeyeze|,|xjykzl|はいくらか? • a,b,c,dを記号とし、A={a,b}, B={b,c,d}とするとき、 次の言語の要素を書き下せ。 • AAB • {w∈A* | |w| < 5} • V={0,1,2,3,4,5,6,7}, E={i→j | i, j ∈ V, j = i2%8 }とするとき、 G=〈 V, E 〉を図示せよ。 (m%nはmをnで割った余りを表す。)
帰納的定義(inductive definition) 例 自然数の定義 • 0は自然数 [基礎(base)] • 自然数nに1を加えたものn+1は自然数 [帰納ステップ(inductive step)] • 上のようにして得られたものだけが自然数
木の帰納的定義 • 基礎: 頂点1個だけで有向辺を持たない有向グラフは木であり、その根はその唯一の頂点。 • 帰納ステップ:1個の頂点rと、( rを頂点とせず、また互いに頂点を共有しない)有限個の木T1,…,Tkの根はr1,rkをk本の有向辺r→r1, …,r →rkで繋いで合成した有向グラフ Tree(T1,…,Tk)は木で根はr • 上のようにして構成した有向グラフだけが木
T0 Tree(T1,…,Tk) r r ならば … r1 rk r1 rk … … T1 Tk
帰納法 数学的帰納法: すべての自然数nに対して命題P(n)がなりたつことを証明する方法 • P(0)がなりたつ。 • P(k)がなりたつと仮定すれば(帰納法の仮定)、 P(k+1)がなりたつ。 1,2から「すべての自然数nに対してP(n)がなりたつ」ことが推論できる。
構造帰納法 • すべての木で「頂点の数は有向辺の数より1つ多い」ことを証明する。 木Tについて上の「…」が成り立つことをP(T)と書く。 木Tの頂点の数をn(T)、有向辺の数をe(T)と書く。 帰納法による証明 基礎: P(T0) (∵ n(T0)=1, e(T0)=0) 帰納ステップ: P(T1), P(T2), …, P(Tk) ならばP(Tree(T1,…,Tk)) (∵ e(Tree(T1,…,Tk))= e(T1) +…+ e(Tk) + k n(Tree(T1,…,Tk))= n(T1) +…+ n(Tk) + 1 = (e(T1) + 1) +…+ (e(Tk) + 1) + 1 (帰納法の仮定) = e(T1) +…+ e(Tk) + k+ 1 これらからすべての木Tに対してP(T)と推論してよい。
レポート問題4 S={0,1}のとき、 言語Lを次のように帰納的に定義する • e, 01, 10 はLの要素 • x, yがLの要素のとき、 xyはLの要素 Lの要素はすべて0と1の数が同じであることを 構造帰納法で示せ。
レポート問題5 Sをアルファベットとする言語Lを 次のように帰納的に定義する • e∈L • a∈S、x∈Lのとき、 axはLの要素 このとき、 L= S*であることを示せ。 (ヒント) L⊆S*は自明。逆を長さに関する帰納法で示せ。
論理 ∀x.P(x)「すべてのxについてP(x) 」 ∃x.P(x) 「あるxについてP(x) 」 あるいは、 ∀x∈A.P(x) 「Aのすべての要素xについてP(x)」 などと書く。 ∀を全称限量子(universal quantifier) ∃を存在限量子(existential quantifier)という。
関係 • 集合AとBの間の(2項)関係とは AとBの直積A×Bの部分集合のこと。 • A上の関係、というときはAとAの間の関係R⊆A2のことを指す。 • Rが集合AとBの間の関係であるとき、 (a, b)∈Rであることを、(記号Rを演算子のように用いて)aRbのように書く。
関数 集合AとBの間の関係 f は次の2条件を満たすとき AからBへの関数(写像)であるといい、f : A→Bと書く。 (存在) ∀x∈A.∃y∈B. xfy (唯一) ∀x∈A.∀y1∈B .∀ y2∈B . xfy1∧xfy2 ⇒y1=y2 f : A→Bであるとき、 afbのかわりにf: a |→ bと書く。 afbとなるただ一つのb∈B をf (b)で表す。 集合Aをfの定義域、 Bをfの値域と呼ぶ。 関数f : A→Bは値域Bが明らかであるか、もしくは度外視する場合は 単にA上の関数という。 すすんだ用語: 関数f : A→Bにおいて、 集合X⊆Aに対して、{f (x)| x∈X} ⊆B をXのfによる像(image)といいf [X]で表す。 とくに定義域Aの像f [A]のことをIm(f)と書く。 (上の定義と異なり、Im(f)のことを値域と呼び、Bを終域と呼んで区別する立場もある。) 関数の定義から(存在)の条件を除いたものを部分関数(写像)と呼ぶ。 部分関数では{ x∈A | ∃y∈B. xfy }を定義域, Aを始域と呼んで区別する。
関数の帰納的定義 関数f :A → Bを集合(⊆A×B)として帰納的に定義することをいう。 大抵の場合、Aの帰納的定義におけるAの要素の定義と同時にfによって対応づけられる値を定義するように変更すればよい。 例: 記号列に対してその長さを対応づける関数 f :S* → Nは次のように帰納的に定義される。 [基礎](e∈S*であって、)f(e) = 0 [帰納ステップ]a∈S,x∈S*のとき、 (ax∈S*であって、) f(ax) = f(x)+1
レポート問題6 • ={0,1}のとき、 Sの語wを引数とし、2進数と解釈したときの値を返す関数 j :S*→Nを帰納的に定義せよ。( 0以外で先頭の0は無視し、 eに対する値は0とする。) (0以外に0から始まる語はない)正しい2進数およびその値を定義するように上を修正せよ。 eも除外のこと。
有限オートマトン 決定性有限オートマトン(DFA)Mは次の5つ組で定義される。 M=<Q, S, q0, d, F> Q : 状態(state)の有限集合 S :入力アルファベット q0 :開始状態(初期状態とも) (∈ Q) d : Q×S → Q遷移関数 d (q, a) =pは状態qのときaを読んだとき 次の状態がpであることを表す F :最終状態(受理状態とも)の集合 (⊆ Q)
遷移表 遷移関数を表で表したものを遷移表という。 →は開始状態、*は最終状態を表す 上の遷移表が表す遷移関数を図で表せ。
遷移関数 • (q, a) =pを図で表す。 p a q
状態遷移図 0 q2 0 1 開始 q0 q1 1 0,1
オートマトンが受理する言語 DFAが受理する言語の直観的な説明 入力記号列を w=001001 とする 0 q2 0 0 1 0 0 1 1 0 q0 q2 q2 q1 q1 q1 q1 q0 q1 開始 1 0,1 受理状態に導く語全体の集合を DFA Mの受理する言語と定義する。
遷移関数の拡張 入力記号列(の接頭語)を読んだときの状態を返す関数dˆ: Q×S*→ Qを次のように帰納的に定義する。(☞入力記号列の長さに関する帰納法) (基礎) dˆ(q, e)=q (帰納ステップ)dˆ(q, xa)= d (dˆ(q, x), a) ただしa∈S, x∈S*とする。
拡張された遷移関数の計算 dˆ(q0, 001001) = d (dˆ(q0, 00100), 1) = d (d (dˆ(q0, 0010), 0), 1) = d (d (d (dˆ(q0, 001), 0), 0), 1) … = d (d (d (d (d (dˆ(q0, 0), 0), 1), 0), 0), 1) = d (d (d (d (d (d (dˆ(q0, e), 0), 0), 1), 0), 0), 1) = d (d (d (d (d (d (q0, 0), 0), 1), 0), 0), 1) = d (d (d (d (d (q2, 0), 1), 0), 0), 1) … = q1
受理言語の定義 DFAA=<Q, S, d, q0, F> が受理する言語L(A)は次で定義される。 L(A) ={w∈S*|dˆ(q0, w)∈F} (受理状態に導く入力記号列全体の集合) また言語Lは、あるDFAAを用いてL = L(A) とかけるとき正則(regular)であるという。 正則な言語を正則言語(regular language)と呼ぶ
q2 1 0 開始 q0 0 q1 0,1 1 q3 0,1 正則言語の例 接頭語01を持つ語(∈{0,1}*)全体の集合は正則か? ヒント:定義より当該言語を受理するDFAが存在すれば正則。
レポート問題7 次の言語を受理するDFAを設計せよ。 • 0と1が交互に並ぶ語全体。ただし、e, 0,1もこの言語の語であるものとする。 • 1がちょうど3回現れる語全体 • 2進数とみなせる列全体 • (やや難)3で割り切れる2進数全体