講義URL: http://www.kono.cis.iwate-u.ac.jp/~yamanaka/Lecture/Automata/index.html ※ 文字化けしてしまう場合はブラウザのエンコードを変更してみて下さい 形式言語とオートマトン 第5回 山中克久 目次 復習: 正規表現の基本 l 正規表現 à 非決定性有限オートマトン l 反復補題 l 正規表現と似たもの: Unixコマンド 正規表現 記号列のパターンを記述したもの 正規表現に似た概念が使われる例 ⇒ UNIX のコマンド 「rm (remove)」 コマンド ディレクトリ内の txtファイルを一気に消したいとき % rm *.txt 「メタ文字」という特別な意味をもつ文字がある 正規表現の例 正規表現 記号列のパターンを記述したもの 正規表現の例 a(ba)* a + b(ab)* b * : 0回以上の繰り返し + : または 言葉で説明すると a のあとに,ba が0回以上現れて,最後に a が現れる, または,b のあとに,ab が0回以上現れて,最後に b が出現 上の正規表現で表されている系列の例: aa, abababaa, bb, babababb 正規表現の定義 再帰的に正規表現(regular expression)を定義 (1) a1,…, ak, ε, Φ は正規表現 (2) r と s が正規表現ならば,(r+s), (r・s), (r*) は いずれも正規表現 + : 和集合(または), ・ : 連接(前後をつなげる), * : 連接閉包(0回以上現れる) 正規表現の例: a(ba)* a + b(ab)* b 正規表現の定義 再帰的に正規表現を定義 (1) a1,…, ak, ε, Φ は正規表現 (2) r と s が正規表現ならば,(r+s), (r・s), (r*) は いずれも正規表現 先の例「a(ba)* a + b(ab)* b」は正規表現だろうか? + ・ a(ba)* a ・ a(ba)* ・ a a(ba)* a + b(ab)* b b(ab)* ・ * ・ (ba)* ba b a a * ・ a b b(ab)* b a (ab)* ab b よって 正規表現である! b 正規表現によって表される言語 正規表現: r = a(ba)* a + b(ab)* b r によって表される言語: L(r) = {aa, bb, abaa, babb, ababaa, … } = { w ∊ {a,b}* | a のあとに,ba が0回以上現れ て,最後に a が現れる,または,b のあとに, ab が0回以上現れて,最後に b が出現する ような w } ※正規表現によって表される言語(文字列の集合)を 正規言語と呼ぶ 例3.2 具体的な正規表現を等式の左辺で与え,それが表す 言語を右辺で説明する (0+1)* 110 (0+1)* = {w | w は 110 を部分系列として含む} (0+1)(0+1)(0+1)(0+1)* = { w | wの長さは3以上} 0+1+0 (0+1)* 0 + 1(0+1)* 1 = { w | w の初めと終わりの記号は同じ} 0* 1* 2* = { 0i 1j 2k | i ≧ 0,j ≧ 0,k ≧ 0 } NFA à 正規表現 定理3.18 任意の正規表現に対して,それが表す言語を受理 する非決定性有限オートマトンが存在する start q1 ε 1(0+1)* 1 正規表現 q0 1 1 start ε 0 q ε ε q4 6 q3 q8 ε q5 1 q7 ε NFA 0,1 q2 q0 1 q1 1 簡単化した NFA q2 証明のアイデア 定理3.18 任意の正規表現に対して,それが表す言語を受理 する非決定性有限オートマトンが存在する P(m): 現れる演算記号が m 個以下の正規表現 r に対し, 等価な非決定性有限オートマトンで,受理状態が 1個のものが存在する 帰納法で証明 1. P(0)を証明 2. P(m-1)を仮定して P(m) を証明する P(0)の証明 P(0): 現れる演算記号が 0 個以下の正規表現 r に対し, 等価な非決定性有限オートマトンで,受理状態が 1個のものが存在する (i) ε ε (ii) Φ (iii) a ∈ Σ M(ε) M(Φ) a M(a) P(m – 1)を仮定してP(m)を証明 P(m – 1)が成立すると仮定する P(m): 現れる演算記号が m 個以下の正規表現 r に対し, 等価な非決定性有限オートマトンで,受理状態が 1個のものが存在する r+s に対応 各演算ごとに考える: 集合和(+) M(r): r と等価なNFA M(r) start start start M(s): s と等価なNFA ε ε ε ε M(s) P(m – 1)を仮定してP(m)を証明 P(m – 1)が成立すると仮定する P(m): 現れる演算記号が m 個以下の正規表現 r に対し, 等価な非決定性有限オートマトンで,受理状態が 1個のものが存在する 各演算ごとに考える: 連接(・) M(r) rs に対応 start M(r) start start M(s) ε M(s) P(m – 1)を仮定してP(m)を証明 P(m – 1)が成立すると仮定する P(m): 現れる演算記号が m 個以下の正規表現 r に対し, 等価な非決定性有限オートマトンで,受理状態が 1個のものが存在する 各演算ごとに考える: 閉包(*) start M(r) start ε ε M(r) 全ての演算に対してP(m)が成立することが示せた 例で試す 正規表現: 1(0+1)* 1 Step 1 1 start 0 start Step 2 1 start 0 ε start start ε ε ε start ε start ε 1 ε ε ε 0 ε 1 ε start 1 start 1 ε 0 ε 1 ε Step 4 1 ε start 1 ε start 1 ε Step 3 1 start 1 ε Step 5 start ε 1 ε ε ε ε 0 1 ε ε 1 ε 正規表現と有限オートマトンの等価性 系3.21 非決定性有限オートマトンで受理される言語は, 正規表現で表される 証明略(教科書参照) 非決定性有限オートマトンで受理される言語と, 正規表現で表される言語は等価である まとめ 非決定性有限オートマトンで受理される言語と, 正規表現で表される言語は等価である 正規表現で表 される言語か らなる集合 = NFAで受理さ れる言語から なる集合 = DFAで受理さ れる言語から なる集合 練習問題 練習問題5-1 例3.2 に出現した正規言語と同じ言語とを受理する有 限オートマトンを書け.決定性有限オートマトンでも非 決定性有限オートマトンでもかまわない (0+1)* 110 (0+1)* = {w | w は 110 を部分系列として含む} (0+1)(0+1)(0+1)(0+1)* = { w | wの長さは3以上} 0+1+0 (0+1)* 0 + 1(0+1)* 1 = { w | w の初めと終わりの記号は同じ} 0* 1* 2* = { 0i 1j 2k | i ≧ 0,j ≧ 0,k ≧ 0 } 正規言語ではない言語 疑問 以下の言語は正規言語だろうか? { 0n 1n | n ≧ 1 } 正規言語: 正規表現で表される言語 復習: 正規表現 (1) a1,…, ak, ε, Φ は正規表現 (2) r と s が正規表現ならば,(r+s), (r・s), (r*) は いずれも正規表現 正規言語ではない言語 疑問 以下の言語は正規言語だろうか? { 0n 1n | n ≧ 1 } à No (個人的)直感的な理由: 正規表現で許されている演算で「個数を指定すること」 ができないから上記の言語は正規言語でない 「正規言語でないこと」をどのように証明したらよいか? 反復補題 定理3.22 Σ 上の正規言語 L に対して次の条件を満たす正整数 m が存在する.すなわち,長さが m 以上の任意の系列 w ∊ L は,適当な x,y,z ∊ Σ* が存在して w = xyz と表されて, 次の3つの条件を満たす. (1) 任意の i ≧ 0 に対して,xyiz ∊ L (2) |y| ≧ 1 w ∊L (3) |xy| ≦ m x y ≦m z 正規言語でないことの証明 例3.23 以下の言語が正規言語でないことを示せ L = { 0 n 1n | n ≧ 1 } 証明 背理法による.L は正規言語であると仮定する. { 0n 1n | n ≧ 1 } の任意の系列 w について,定理 3.22(反復補題)の条件を満たす m が存在する w = 0m1m とし, w について見ていく 例3.23 以下の言語が正規言語でないことを示せ L = { 0 n 1n | n ≧ 1 } 証明 w = 0m1m ∊ L とし, w について詳しく見ていく (1) 任意の i ≧ 0 に対して xyiz ∊ L,(2) |y| ≧ 1,(3) |xy| ≦ m w = 00000000000001111111111111 x y≠ε z ≦m ここで,xy0z = xz は,0の個数と1の個数が異なる ので xz ∉ L である.これは反復補題に矛盾する 正規言語でないことの証明 その2 例3.24 以下の言語が正規言語でないことを示せ L = { w ∊ {0,1}* | N0(w) = N1(w) } N0(w): w に含まれる 0 の個数 N1(w): w に含まれる 1 の個数 証明 背理法による.L は正規言語であると仮定する. L中の任意の系列 w について,定理3.22(反復補 題)の条件を満たす m が存在する w = 0m1m とし, w について見ていく 以下の言語が正規言語でないことを示せ L = { w ∊ {0,1}* | N0(w) = N1(w) } N0(w): w に含まれる 0 の個数 N1(w): w に含まれる 1 の個数 証明 w = 0m1m ∊ L とし, w について詳しく見ていく (1) 任意の i ≧ 0 に対して xyiz ∊ L,(2) |y| ≧ 1,(3) |xy| ≦ m w = 00000000000001111111111111 x y≠ε z ≦m ここで,xy0z = xz は,0の個数と1の個数が異なる ので xz ∉ L である.これは反復補題に矛盾する 練習問題 練習問題5-2 以下の言語が正規言語でないことを,(例えば, 教科書の例3.23 のように)きちんと示せ L = { ww | w ∊ {0,1}* } ※ L中の任意の系列では,同じ系列が2回出現する
© Copyright 2025 ExpyDoc