計算の理論 I ー正則表現とFAの等価性 その2ー 月曜3校時 大月 美佳 連絡事項 自転車がまだ散乱してますね 今日の講義内容 1. 前回のミニテスト 1. ミニテストの解答例 2. 正則表現からDFAまで変換してみる 3. 今日の新しいこと 1. 正則表現とFAの等価性 つづき 1. 正則表現からのε-動作を含むNFAの作り方 → 例2.12 (p. 42) 2. DFAからの正則表現の作り方 → 例2.13 (p. 45) 前回のミニテスト (演習問題 2.12, p. 66) 次の正則表現と同値な有限オートマトンを 構成せよ。 a) 10+(0+11)0*1 1. 括弧でくくってみる ((10)+(((0+(11))(0*))1) : 左優先 ((10)+((0+(11))((0*)1)) : 右優先 構文木 ((10)+(((0+11)(0*))1) ((10)+((0+11)((0*)1)) + + 連接 1 連接 連接 0 + 0 1 1 連接 1 0 連接 0 + 0 連接 * 連接 1 連接 1 1 * 0 1 最初の組合せで考えてみる r + r1 連接 r3 1 r2 0 連接 r5 r4 連接 r7 r9 0 1 + * r8 r10 連接 0 r12 1 1 r13 r6 r11 式の分解 r + r1 連接 r3 1 0 r2 連接 r5 r4 連接 r7 r9 0 r12 1 + * r8 r10 連接 0 1 1 r6 r13 r11 r=r1+r2 r1 =r3r4 r2 =r5r6 r3 =1 r4 =0 r5 =r7r8 r6 =1 r7 =r9 + r10 r8 =r11* r9 =0 r10 =r12r13 r11 =0 r12 =1 r13 =1 どんどん変換していこう 1 r r12 + r1 連接 r3 1 0 r2 連接 r5 r4 連接 r7 r9 0 r12 * r8 r10 連接 0 1 1 1 q1 1 q2 q3 q4 r6 1 + r13 開始 開始 r11 連接 r13 r10 ε 1 q1 開始 q2 1 q3 q4 どんどん変換していこう 2 r10 r9 q5 q1 q6 q2 1 q3 q4 開始 開始 r ε 1 0 + r1 連接 r3 1 0 r2 連接 r5 r4 連接 r7 r9 r12 1 r6 1 r7 * r8 + r10 連接 0 + 1 0 r13 ε r11 q7 開始 ε q5 q2 ε q6 q8 ε 1 q1 0 1 q3 q4 ε どんどん変換していこう 3 r r11 + r1 連接 r3 1 0 r2 連接 r5 r4 連接 r7 r9 0 r12 * r8 r10 連接 0 1 q10 r6 1 + 1 0 q9 開始 r11 * r13 r8 ε ε 開始 q11 ε 0 q9 q10 ε q12 どんどん変換していこう 4 r7 ε q7 ε q5 q2 ε q8 q11 1 q3 q4 ε 開始 ε q6 ε 1 q1 0 r8 ε 0 q9 ε q10 q12 ε 開始 連接 ε q7 開始 ε q5 r5 q2 ε q6 ε ε q8 ε 1 q1 0 ε q11 q9 q10 1 q3 q4 ε ε 0 ε q12 どんどん変換していこう 5 ε q7 0 q5 q1 1 q13 q8 q3 ε q4 ε 開始 連接 ε ε q11 ε 0 q9 q14 1 q2 開始 r6 ε q6 ε 1 ε r5 q10 r2 q12 ε ε q7 ε q5 0 q8 ε 1 q1 1 q2 開始 ε q6 q3 ε q4 ε ε q11 q9 ε ε 0 q10 ε q12 1 q13 q14 どんどん変換していこう 6 r r3 + r1 連接 r3 1 0 r2 連接 r5 r4 連接 r7 r9 0 r12 * r8 r10 連接 0 1 1 1 q15 0 q16 q17 q18 r6 1 + r4 開始 開始 r11 連接 r13 r1 ε 1 q15 開始 q16 1 q17 q18 これで(やっと)完成! r1 ε 1 r q15 ε q19 開始 r2 ε q7 ε 1 q16 ε q5 q17 q1 ε q20 0 ε q6 q8 ε 1 q18 1 q2 q3 ε q4 ε ε ε q11 q9 ε ε 0 q10 ε q12 1 q13 q14 オートマトンとして真面目に書く δ M(Q, {0, 1}, δ, q19, {q20}) Q={q1, q2, q3, q4, q5, q6, q7, q8, q9, q10, q11, q12, q13, q14, q15, q16, q17, q18, q19, q20} δ は右表 0 1 ε q1 - q2 - q2 - - q3 q3 - q4 - q4 - - q8 q5 q6 - - q6 - - q8 q7 - - q1 , q 5 q8 - - q11 q9 q10 - - q10 - - q9 , q12 q11 - - q13 q12 - - q13 q13 - q14 - q14 - - q20 q15 - q16 q16 - - q17 - q18 q18 - - q20 q19 - - q7 , q15 q20 - - - q17 ε - 前回の例2.12の表記 q0 ε q1 ε q3 q2 1 0 q9 ε q4 ε ε ε q5 ε q6 1 q7 ε q8 ε M(Q, {0, 1}, δ, q0, {q9}) Q={q1, q2, q3, q4, q5, q6, q7, q8, q9} δ は右表 δ 0 1 ε q0 - - {q1 } q1 - {q2 } - q2 - - {q9 } q3 {q4 } - - q4 - - {q5 } q5 - - {q6 , q8} q6 - {q7 } - q7 - - {q7, q8} q8 - - {q9 } q9 - - - εありNFAから εなしNFAを生成してみる q0 開始 ε q1 ε q3 q2 1 0 q9 ε q4 ε ε ε q5 ε q6 1 q7 ε q8 ε ε-CLOSURE(q1)={q1} ε-CLOSURE(q2)={q2 , q9} ε-CLOSURE(q3)={q3} ε-CLOSURE(q4)={q4 , q5 , q6 , q8 , q9} - CLOSUREが Fの元を含むとき F {q0 } F そう でないとき F (q, a) ˆ (q, a) (q Q, a ) ˆ (q , a) CLOSURE( (ˆ (q , ), a)) i ε-CLOSURE(q0)={q0, q1, q3} i ˆ (qi , ) CLOSURE(qi ) ˆ (qi , a) CLOSURE( ( CLOSURE(qi ), a)) ε-CLOSURE(q5)={q5 , q6 , q8 , q9} ε-CLOSURE(q6)={q6 } ε-CLOSURE(q7)={q7 , q6 , q8 , q9} ε-CLOSURE(q8)={q8 , q9} ε-CLOSURE(q9)={q9} δ´を求める q0について (qi , a) ˆ (qi , a) CLOSURE( ( CLOSURE(qi ), a)) ˆ (q0 ,0) CLOSURE( ( CLOSURE(q0 ),0)) CLOSURE( ({q0 , q1 , q3},0)) CLOSURE( (q0 ,0) (q1 ,0) (q3 ,0)) CLOSURE(○○{q4 }) CLOSURE(q4 ) {q4 , q5 , q6 , q8 , q9 } ˆ (q0 ,1) CLOSURE( ( CLOSURE(q0 ),1)) CLOSURE( ({q0 , q1 , q3},1)) CLOSURE( (q0 ,1) (q1 ,1) (q3 ,1)) CLOSURE(○{q2 } ○) CLOSURE(q2 ) {q2 , q9 } δ´を求める q1について (qi , a) ˆ (qi , a) CLOSURE( ( CLOSURE(qi ), a)) ˆ (q1 ,0) CLOSURE( ( CLOSURE(q1 ),0)) CLOSURE( ({q1},0)) CLOSURE( (q1 ,0)) CLOSURE(○) ○ ˆ (q1 ,1) CLOSURE( ( CLOSURE(q1 ),1)) CLOSURE( ({q1},1)) CLOSURE( (q1 ,1)) CLOSURE({q2 }) CLOSURE(q2 ) {q2 , q9 } δ´を求める q2について (qi , a ) ˆ (qi , a ) CLOSURE( ( CLOSURE(qi ), a )) ˆ (q2 ,0) CLOSURE( ( CLOSURE(q2 ),0)) CLOSURE( ({q2 , q9 },0)) CLOSURE( (q2 ,0) (q9 ,0)) CLOSURE(○○) CLOSURE(○) ○ ˆ (q2 ,1) CLOSURE( ( CLOSURE(q2 ),1)) CLOSURE( ({q2 , q9 },1)) CLOSURE( (q2 ,1) (q9 ,1)) CLOSURE(○○) CLOSURE(○) ○ δ´を求める q3について (qi , a) ˆ (qi , a) CLOSURE( ( CLOSURE(qi ), a)) ˆ (q3 ,0) CLOSURE( ( CLOSURE(q3 ),0)) CLOSURE( ({q3},0)) CLOSURE( (q3 ,0)) CLOSURE({q4 }) CLOSURE(q4 ) {q4 , q5 , q6 , q8 , q9 } ˆ (q3 ,1) CLOSURE( ( CLOSURE(q3 ),1)) CLOSURE( ({q3},1)) CLOSURE( (q3 ,1)) CLOSURE(○) ○ δ´を求める q4について (qi , a) ˆ (qi , a) CLOSURE( ( CLOSURE(qi ), a)) ˆ (q4 ,0) CLOSURE( ( CLOSURE(q4 ),0)) CLOSURE( ({q4 , q5 , q6 , q8 , q9 },0)) CLOSURE( (q4 ,0) (q5 ,0) (q6 ,0) (q8 ,0) (q9 ,0)) CLOSURE(○○○○○) CLOSURE(○) ○ ˆ (q4 ,1) CLOSURE( ( CLOSURE(q4 ),1)) CLOSURE( ({q4 , q5 , q6 , q8 , q9 },1)) CLOSURE( (q4 ,1) (q5 ,1) (q6 ,1) (q8 ,1) (q9 ,1)) CLOSURE(○○{q7 } ○○) CLOSURE(q7 ) {q7 , q6 , q8 , q9 } δ´を求める q5について (qi , a) ˆ (qi , a) CLOSURE( ( CLOSURE(qi ), a)) ˆ (q5 ,0) CLOSURE( ( CLOSURE(q5 ),0)) CLOSURE( ({q5 , q6 , q8 , q9 },0)) CLOSURE( (q5 ,0) (q6 ,0) (q8 ,0) (q9 ,0)) CLOSURE(○○○○) CLOSURE(○) ○ ˆ (q5 ,1) CLOSURE( ( CLOSURE(q5 ),1)) CLOSURE( ({q5 , q6 , q8 , q9 },1)) CLOSURE( (q5 ,1) (q6 ,1) (q8 ,1) (q9 ,1)) CLOSURE(○{q7 } ○○) CLOSURE(q7 ) {q6 , q7 , q8 , q9 } δ´を求める q6について (qi , a) ˆ (qi , a) CLOSURE( ( CLOSURE(qi ), a)) ˆ (q6 ,0) CLOSURE( ( CLOSURE(q6 ),0)) CLOSURE( ({q6 },0)) CLOSURE( (q6 ,0)) CLOSURE(○) ○ ˆ (q6 ,1) CLOSURE( ( CLOSURE(q6 ),1)) CLOSURE( ({q6 },1)) CLOSURE( (q6 ,1)) CLOSURE(q7 ) {q6 , q7 , q8 , q9 } δ´を求める q7について (qi , a) ˆ (qi , a) CLOSURE( ( CLOSURE(qi ), a)) ˆ (q7 ,0) CLOSURE( ( CLOSURE(q7 ),0)) CLOSURE( ({q6 , q7 , q8 , q9 },0)) CLOSURE( (q6 ,0) (q7 ,0) (q8 ,0) (q9 ,0)) CLOSURE(○○○○) CLOSURE(○) ○ ˆ (q7 ,1) CLOSURE( ( CLOSURE(q7 ),1)) CLOSURE( ({q6 , q7 , q8 , q9 },1)) CLOSURE( (q6 ,1) (q7 ,1) (q8 ,1) (q9 ,1)) CLOSURE({q7 } ○○○) CLOSURE(q7 ) {q6 , q7 , q8 , q9 } δ´を求める q8について (qi , a) ˆ (qi , a) CLOSURE( ( CLOSURE(qi ), a)) ˆ (q8 ,0) CLOSURE( ( CLOSURE(q8 ),0)) CLOSURE( ({q8 , q9 },0)) CLOSURE( (q8 ,0) (q9 ,0)) CLOSURE(○○) CLOSURE(○) ○ ˆ (q8 ,1) CLOSURE( ( CLOSURE(q8 ),1)) CLOSURE( ({q8 , q9 },1)) CLOSURE( (q8 ,1) (q9 ,1)) CLOSURE(○○) CLOSURE(○) ○ δ´を求める q9について (qi , a) ˆ (qi , a) CLOSURE( ( CLOSURE(qi ), a)) ˆ (q9 ,0) CLOSURE( ( CLOSURE(q9 ),0)) CLOSURE( ({q9 },0)) CLOSURE( (q9 ,0)) CLOSURE(○) ○ ˆ (q9 ,1) CLOSURE( ( CLOSURE(q9 ),1)) CLOSURE( ({q9 },1)) CLOSURE( (q9 ,1)) CLOSURE(○) ○ 生成されたNFA δ´ M´(Q´, {0,1},δ´,q0,{q9}) Q´={q0, q1, q2, q3, q4, q5, q6, q7, q8, q9} δ ´は右表 0 1 q0 {q4 , q5 , q6 , q8 , q9} {q2 , q9} q1 - {q2 , q9} q2 - - q3 {q4 , q5 , q6 , q8 , q9} - q4 - {q6 , q7 , q8 , q9} q5 - {q6 , q7 , q8 , q9} q6 - {q6 , q7 , q8 , q9} q7 - {q6 , q7 , q8 , q9} q8 - - q9 - - さらにDFAへ変換してみる δ´ δ´´ 0 1 0 1 q0 {q4 , q5 , q6 , q8 , q9} {q2 , q9} [q0 ] [q4 , q5 , q6 , q8 , q9] [q2 , q9] q1 - {q2 , q9} [q4 , q5 , q6 , q8 , q9] - [q6 , q7 , q8 , q9] q2 - - [q2 , q9] - - q3 {q4 , q5 , q6 , q8 , q9} - [q6 , q7 , q8 , q9] - [q6 , q7 , q8 , q9] q4 - {q6 , q7 , q8 , q9} q5 - {q6 , q7 , q8 , q9} q6 - {q6 , q7 , q8 , q9} q7 - {q6 , q7 , q8 , q9} q8 - - q9 - - M´´ (Q´´, {0,1},δ´´,[q0 ],F) Q´´={[q0 ], [q4, q5, q6, q8, q9 ], [q2, q9 ], [q6, q7, q8, q9 ]} δ´´は上表 F= {[q4, q5, q6, q8, q9 ], [q2, q9 ], [q6, q7, q8, q9 ]} もとの正則表現と比べてみる δ´´ [q2 , q9] 0 1 [q0 ] [q4 , q5 , q6 , q8 , q9] [q2 , q9] [q4 , q5 , q6 , q8 , q9] - [q6 , q7 , q8 , q9] [q2 , q9] - - [q6 , q7 , q8 , q9] - [q6 , q7 , q8 , q9] 1 [q0 ] 0 [q4 ,q5 ,q6 ,q8 ,q9] 1 開始 [q4 ,q5 ,q6 ,q8 ,q9] 1 01*+1 今日の新しいこと 1. 正則表現とFAの等価性 NFA ε-動作を含む NFA DFA 正則表現 1. 正則表現からのε-動作を含むNFAの作り方 先週やった →NFAの生成例 (例2.12, p. 42) 2. DFAからの正則表現の作り方 →正則表現の生成例 (例2.13, p. 45) DFAからの正則表現の作り方 考え方 1.ある状態からある状態の間の状態を0か らひとつずつ増やしていって、 2.途中の状態の任意の組からなる道が生 成することのできる文字列の正則表現を 再帰的に拡張していき、 3.最後に、初期状態から最終状態への道が 生成できる文字列の正則表現を求める。 状態を増やしていくとは? q1 … qn … q1 qs k=2 qn qn … qe k=0 … q1 qn q1 q2 qs qe k=1 qs qs qe qe k=n 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) どんどん進める 1 k=1 r r (r *)r r ( *) 1 11 0 11 0 11 0 11 0 11 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.13のa – 教科書・資料を見ても良い 資料、ミニテストがない人は前へ 提出したら帰って良し 次回 – 3章いきます。反復補題。
© Copyright 2024 ExpyDoc