計算の理論 I ー正則表現とFAの等価性ー 月曜3校時 大月 美佳 連絡事項 美観 – 自転車放置が目立つ – 玄関先のタバコ JABEE – 評価項目 – シラバスの変更 – 追加レポート(来週あたり) 今後のスケジュール(案) 回数 8 9 10 11 12 13 14 日付 6/10 6/17 6/24 7/1 7/8 7/15 7/22 内容 正則表現とFAの等価性 Myhill-Nerode の定理と最小化 文脈自由文法(CFL) 標準形 プッシュダウンオートマトン(PDF) PDFとCFLの等価性 おわりに 今日の講義内容 1. 前回のミニテストの補足 1. 正則表現とことば 2. 今日の新しいこと 1. 正則表現とFAの等価性 1. 正則表現からのε-動作を含むNFAの作り方 → 例2.12 (p. 42) 2. DFAからの正則表現の作り方 → 例2.13 (p. 45) 前回のミニテスト補足 (演習問題 2.11, p. 66) 「次の正則表現が表すのはどんな集合か、 ことばで説明せよ。」 性質を表す言葉⇔正則表現 の変換が重要(仕様はことばでしか来ない) (11+0)*ってどんな集合? あり得る記号列 – 01101111001101111011111111 – 偶数(0, 2, 4, ..)個連続する1と任意の数(0, 1, 2, …)連続する0が含まれる列 あり得ない記号列 – 011011110011101111011111111 – 奇数個連続する1を一つでも含む列 1が偶数個連続する記号列の集合 (00+1)*ってどんな集合? あり得る記号列 – 00100110000001100111000011111 – 偶数(0, 2, 4, ..)個連続する0と任意の数(0, 1, 2, …)連続する1が含まれる列 あり得ない記号列 – 0010011110001100111000011 – 奇数個連続する0を一つでも含む列 0が偶数個連続する記号列の集合 もうちょっと正規表現 慣れるためには、訓練が必要。 1. (00+1)*のバリエーション (000+1)* : 0の個数が3の倍数連続 (0000+1)* : 0の個数が4の倍数連続 2. 記号の連続の制限 (1+01)*(ε+0) : 2個以上続く0を含まない 3. いろいろと当たってみる 演習問題2.10, 2.11(p. 66) 今日の新しいこと 1. 正則表現とFAの等価性 NFA ε-動作を含む NFA DFA 正則表現 1. 正則表現からのε-動作を含むNFAの作り方 →NFAの生成例 (例2.12, p. 42) 2. DFAからの正則表現の作り方 →正則表現の生成例 (例2.13, p. 45) 正則表現からのε-動作を含む NFAの作り方 証明(定理2.3 p. 39~)と同じ手順 1. 括弧つきに書き換える (00+1) → ((00)+1)* * 2. 分解していく 1. 2. 3. + r = r 1* r1 = r2+r3, r3 =1 r2 = r4+r5, r4 =1 , r5 =1 連接 0 1 0 NFAの作り方 (NFAに変換 1) 3. 末端(最小構成)をFAに変換する 1. r =ε 開始 q0 * 2. r =○ 開始 q0 + qf 3. r = a 開始 連接 q0 a qf 0 1 0 NFAの作り方 (NFAに変換 2) 3. 末端から根に向かってどんどん変換す る 1. r =r1+r2 * → 定理2.3 (1)、図2.14 (a) 2. r =r1r2 + → 定理2.3 (2)、図2.14 (b) 3. r = r1* → 定理2.3 (3)、図2.14 (c) 連接 0 1 0 NFAの作り方 (図2.14 (a)) 最終状態が1個だけ r1 のNFA 開始 q1 f1 開始 q1 f1 ε r2 のNFA 開始 q2 f2 + ε q0 f0 ε ε q2 f2 NFAの作り方 (図2.14 (b)) 最終状態が1個だけ r1 のNFA 開始 q1 f1 r2 のNFA 開始 q2 f2 開始 q1 f1 q2 f2 連接 NFAの作り方 (図2.14 (c)) 最終状態が1個だけ r1 のNFA 開始 q1 f1 * 開始 q0 ε ε ε q1 f1 ε f0 どんどんやってみる 1 q5 q7 開始 q1 0 q6 q2 ε q3 0 やってみ てね * q8 q4 + q1 0 q2 ε q3 0 連接 q4 1 1 q5 開始 0 0 q2 q3 0 0 q1 開始 開始 開始 q4 q6 NFAの生成例 (例2.12, p. 42) 正規表現 : 01*+1 1. 括弧つきに書き換える r 01*+1 → ((0(1*))+1) + r1 2. 分解していく 1. r=r1+r2, r1=0(1*), r2=1 2. r1=r3r4, r3=0, r4=1* 3. r4=r5*, r5=1 r2 連接 r3 0 r4 * 1 r5 1 r NFAの生成例 r1 (つづき 1) r3 連接 0 正規表現 : 01*+1 3. 最小構成をFAに変換する 4. FAを組みあげていく (定理2.3) 1. r4=r5*, r5=1 + r4 * 1 開始 q5 1 q6 開始 q3 0 q4 開始 q1 1 q2 2. r1=r3r4 , r3=0 r2 3. r=r1+r2 , r2=1 r5 1 NFAの生成例 r (つづき 2) r1 4.1. r4=r5* (p. 41, 図2.14の(c))r 連接 * ε ε q5 1 r5=1 ε 1 q6 ε q8 r2 r4 3 0 q7 + r5 1 NFAの生成例 r (つづき 3) r1 4.2. r1=r3r4 (p. 41, 図2.14の(b))r 開始 0 q3 r4 3 * r5 q4 ε ε r2 1 ε q7 連接 0 r3=0 + q5 1 r5=1 ε r4=r5* q6 ε q8 1 r NFAの生成例 + r1 (つづき 4) r3 連接 4.3. r=r1+r2 (p. 41, 図2.14の(a))0 r2=1 ε q9 開始 q1 1 r2 r4 * 1 r5 1 ε q2 q10 ε 0 q3 ε q4 ε q7 ε ε ε q5 1 r5=1 q6 r4=r5* ε q8 DFAからの正則表現の作り方 考え方 1.ある状態からある状態の間の状態を0か らひとつずつ増やしていって、 2.状態の任意の組からなる道が生成するこ とのできる文字列の正則表現を再帰的に 拡張していき、 3.最後に、初期状態から最終状態への道が 生成できる文字列の正則表現を求める。 数学的に定義 Mの状態をqiから途中qjより大きな番号の 状態を通らずに、qjにたどり着くことのでき る入力列の集合 Rijk Rikk 1 ( Rkkk 1*)Rkjk 1 Rijk 1 (k 1) 0 Rij {a | (qi , a ) q j } { } (i jのとき ) 0 Rij {a | (qi , a ) q j } (i jのとき ) 正則表現の式との対応 Rijk Rikk 1 ( Rkkk 1*)R kjk1 Rijk 1 (k 1) 0 Rij {a | (qi , a ) q j } { } (i jのとき ) 0 Rij {a | (qi , a ) q j } (i jのとき ) ↓ 証明はp.44~45 rijk rikk 1 (rkkk 1*)rkjk 1 rijk 1 (k 1) 0 rij a (i jのとき ) 0 rij a (i jのとき ) 正則表現の生成例 (例2.13, p. 45) 1 0 q1 0 1 q2 0,1 開始 δ q3 r110 {a | (q1 , a ) q1} (1 1) r120 {a | (q1 , a ) q2 } 0 (1 2) r130 {a | (q1 , a ) q3 } 1 (1 3) r210 {a | (q2 , a ) q1} 0 (2 1) r220 {a | (q2 , a ) q2 } ( 2 2) 0 1 q1 q2 q3 r230 {a | (q2 , a ) q3 } 1 (2 3) q2 q1 q3 r310 {a | (q3 , a ) q1} ○ (3 1) q3 q2 q2 r320 {a | (q3 , a ) q2 } 0 1 (3 2) r330 {a | (q3 , a ) q3 } (3 3) どんどん進める k=1 r r (r *)r r ( *) 1 11 0 11 0 11 0 11 0 11 1 0 q1 開始 r121 r110 (r110 *)r120 r120 ( *)0 0 0 0 0 r131 r110 (r110 *)r130 r130 ( *)1 1 1 1 1 r211 r210 (r110 *)r110 r210 0( *) 0 0 0 0 r221 r210 (r110 *)r120 r220 0( *)0 00 r231 r210 (r110 *)r130 r230 0( *)1 1 01 1 r311 r310 (r110 *)r110 r310 φ( *) φφ r321 r310 (r110 *)r120 r320 φ( *)0 0 1 0 1 r331 r310 (r110 *)r130 r330 φ( *)1 0 1 q2 0,1 q3 どんどん進める k=2 1 0 q1 r112 r121 (r221 *)r211 r111 0((00 )*)0 0(00) * 0 (00) * 開始 r122 r121 (r221 *)r221 r121 0((00 )*)(00 ) 0 0(00) * 0 0(00) * r132 r121 (r221 *)r231 r131 0((00 )*)(01 1) 1 0(00) * (0 )1 1 00*1 1 0 *1 r212 r221 (r221 *)r211 r211 (00 )((00 )*)0 0 (00) * 0 0 (00) * 0 r222 r221 (r221 *)r221 r221 (00 )((00 )*)(00 ) (00 ) (00) * 00 (00) * r232 r221 (r221 *)r231 r231 (00 )((00 )*)(01 1) (01 1) (00) * (0 )1 01 1 0 *1 01 1 0 *1 r312 r321 (r221 *)r211 r311 (0 1)((00 )*)0 φ (0 1)(00) * 0 r322 r321 (r221 *)r221 r321 (0 1)((00 )*)(00 ) (0 1) (0 1)(00) * (0 1) (0 1)(00) * r332 r321 (r221 *)r231 r331 (0 1)((00 )*)(01 1) (0 1)(00) * (01 1) (0 1)(00) * (0 )1 (0 1)0 *1 0 1 q2 0,1 q3 最終状態への道 1 k=3 r r (r *)r r 3 12 2 13 2 33 2 32 2 12 (0 *1)(((0 1)0 *1 )*)(0 1)(00) * 0(00) * 0 *1((0 1)0 *1) * (0 1)(00) * 0(00) * 0 q1 0 1 q2 0,1 q3 開始 r133 r132 (r332 *)r332 r132 0 *1(((0 1)0 *1 )*)((0 1)0 *1 ) (0 *1) 0 *1((0 1)0 *1) * ((0 1)0 *1 ) 0 *1 0 *1((0 1)0 *1) * r123 r133 0 *1((0 1)0 *1) * (0 1)(00) * (00) * 0 *1((0 1)0 *1) * 0 *1((0 1)0 *1) * ((0 1)(00) * ) 0(00) * まとめ方が難しい? 演習問題 2.16 (p. 67)を使う rs sr (r s) t r ( s t ) (rs )t r ( st ) r ( s t ) rs rt (r s )t rt st ○* (r*)* r * ( r )* r * (r * s*)* (r s) * 変換例 (演習問題 2.13, p. 66) 下の状態図に対応する正則表現を求めよ。 b) 0 A B 0 開始 1 1 C 0 1 とりあえず番号をつける 0 A 1 0 1 B 0 A A r110 A B r120 0 A C r130 1 B A r210 0 B B r220 C r230 1 A r310 1 B r320 0 C r330 C 1 開始 1から! A→1 B→2 C→3 B C C C 状態Aが加わった k=1 その1 r111 r110 (r110 *)r110 r110 ( *) ε ε A ε A A A A A ε ε A ε A A A A ε A ε A A r121 r110 (r110 *)r120 r120 ( *)0 0 0 0 0 ε A A A ε A A ε A ε A B ε A B A ε A ε A B 状態Aが加わった k=1 その2 r131 r110 (r110 *)r130 r130 ( *)1 1 1 1 1 ε ε A ε A A A C A ε ε A ε A A A C ε A ε A C r211 r210 (r110 *)r110 r210 0(0*) 0 00* 0 00* ε A B A ε B A ε A ε A A ε B A A ε A ε A A 状態Aが加わった k=1 その3 r221 r210 (r110 *)r120 r220 0( *)0 00 ε ε A ε B B A B A ε ε A ε A A B B ε A ε A B r231 r210 (r110 *)r130 r230 0( *)1 1 011 ε ε A B A ε B A ε A ε A C ε B C A ε A ε A C 状態Aが加わった k=1 その4 r311 r310 (r110 *)r110 r310 1( *) 1 1 1 1 ε ε A ε C C A A A ε ε A ε A A C A ε A ε A A r321 r310 (r110 *)r120 r320 1( *)0 0 10 0 ε ε A B A ε B A ε A ε A C ε B C A ε A ε A C 状態Aが加わった k=1 その5 r331 r310 (r110 *)r130 r330 1( *)1 11 ε ε A ε C C A C A ε ε A ε A A C C ε A ε A r r 00* r311 1 r 0 r 00 r321 10 0 r 1 r 01 1 r331 11 1 11 1 12 1 13 1 21 1 22 1 23 C さらに状態Bが加わった k=2 例1 r112 r121 (r221 *)r211 r111 0((00 )*)00* 0(00) * 00* ε ε ε A B ε A A ε ε A A B ε ε A ε ε A A ε A A A ε ε B ε A ε A A ε A ε ε A B A ε A A ε A どんどん進める k=2 r122 r121 (r221 *)r221 r121 0((00 )*)(00 ) 0 0(00) * 0 0(00) * r132 r121 (r221 *)r231 r131 0((00 )*)(01 1) 1 0(00) * (0 )1 1 00*1 1 0 *1 r212 r221 (r221 *)r211 r211 (00 )((00 )*)00* 00* (00) * 00* 00* (00) * 00* r222 r221 (r221 *)r221 r221 (00 )((00 )*)(00 ) (00 ) (00) * r232 r221 (r221 *)r231 r231 (00 )((00 )*)(01 1) (01 1) ((00) * )(01 1) (00) * (0 )1 0 *1 r312 r321 (r221 *)r211 r311 (10 0)((00 )*)00* 1 (10 0)(00) * 00* 1 r322 r321 (r221 *)r221 r321 (10 0)((00 )*)(00 ) (10 0) (10 0)((00) * ) (10 0)(00) * r332 r321 (r221 *)r231 r331 (10 0)((00 )*)(01 1) (11 ) (10 0)(00) * (0 )1 11 (10 0)0 *1 11 最終状態への道 k=3 r111 0(00) * 00* r122 0(00) * r131 0 *1 r r123 r133 r211 (00) * 00* r123 r132 ( r332 *)r322 r122 r221 (00) * r r ( r *)r r r231 0 *1 3 13 2 13 2 33 2 33 2 13 r312 (10 0)(00) * 00* 1 r322 (10 0)(00) * r332 (10 0)0 *1 11 最終解 k=3 r122 0(00 ) * r322 (10 0)( 00 ) * r131 0 *1 r332 (10 0)0 *1 11 r123 0 *1(((10 0)0 *1 11 )*)(10 0)(00) * 0(00) * 0 *1((10 0)0 *1 11) * (10 0)(00) * 0(00) * 0 *1(((10 0)0 *1) * (11)*)* (10 0)(00) * 0(00) * r133 0 *1(((10 0)0 *1 11 )*)((10 0)0 *1 11 ) 0 *1 0 *1((10 0)0 *1 11) * 0 *1 0 *1(((10 0)0 *1) * (11)*)* 0 *1 r123 r133 0(00) * 0 *1( (((10 0)0 *1) * (11)*)* ( (10 0)(00)*)) 今日のミニテスト ミニテスト – 演習問題 2.12のa – 教科書・資料を見ても良い 資料、ミニテストがない人は前へ 提出したら帰って良し 次回 – 最小化ができればいいかな
© Copyright 2024 ExpyDoc