Transcript PowerPoint

計算の理論 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にたどり着くことのでき
る入力列の集合
 R ijk  R ikk 1 ( R kkk 1 *) R kjk 1  R ijk 1 ( k  1)

 0
 R ij  { a |  ( q i , a )  q j }  { } ( i  j のとき )
 0

 R ij  { a |  ( q i , a )  q j } ( i  j のとき )
正則表現の式との対応
 R ijk  R ikk 1 ( R kkk 1 *) R kjk1  R ijk 1 ( k  1)

 0
 R ij  { a |  ( q i , a )  q j }  { } ( i  j のとき )
 0

 R ij  { a |  ( q i , 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)
r11  { a |  ( q 1 , a )  q 1 }    
(1  1)
r12  { a |  ( q 1 , a )  q 2 }  0
(1  2 )
r13  { a |  ( q 1 , a )  q 3 }  1
(1  3 )
r21  { a |  ( q 2 , a )  q 1 }  0
( 2  1)
r22  { a |  ( q 2 , a )  q 2 }    
(2  2)
0
1
0
q1
0
1
q2
0
0,1
開始
q3
0
0
δ
0
0
1
q1
q2
q3
r23  { a |  ( q 2 , a )  q 3 }  1
( 2  3)
q2
q1
q3
r31  { a |  ( q 3 , a )  q 1 }  ○
( 3  1)
q3
q2
q2
r32  { a |  ( q 3 , a )  q 2 }  0  1
(3  2 )
r33  { a |  ( q 3 , a )  q 3 }    
(3  3)
0
0
0
0
どんどん進める
1
k=1
r  r ( r *) r  r   (  *)     
1
11
0
11
0
11
0
11
0
11
0
q1
開始
r12  r11 ( r11 *) r12  r12   (  *) 0  0  0  0  0
1
0
0
0
0
r13  r11 ( r11 *) r13  r13   (  *) 1  1  1  1  1
1
0
0
0
0
r21  r21 ( r11 *) r11  r21  0 (  *)   0  0  0  0
1
0
0
0
0
r22  r21 ( r11 *) r12  r22  0 (  *) 0    00  
1
0
0
0
0
r23  r21 ( r11 *) r13  r23  0 (  *) 1  1  01  1
1
0
0
0
0
r31  r31 ( r11 *) r11  r31  φ(  *)   φ  φ
1
0
0
0
0
r32  r31 ( r11 *) r12  r32  φ(  *) 0  0  1  0  1
1
0
0
0
0
r33  r31 ( r11 *) r13  r33  φ(  *) 1    
1
0
0
0
0
0
1
q2
0,1
q3
どんどん進める
1
k=2
r11  r12 ( r22 *) r21  r11  0 (( 00   )*) 0    0 ( 00 ) * 0    ( 00 ) *
2
1
1
1
1
0
q1
開始
r12  r12 ( r22 *) r22  r12  0 (( 00   )*)( 00   )  0  0 ( 00 ) *  0  0 ( 00 ) *
2
1
1
1
1
r13  r12 ( r22 *) r23  r13  0 (( 00   )*)( 01  1)  1  0 ( 00 ) * ( 0   )1  1
2
1
1
1
1
 00 * 1  1  0 * 1
r21  r22 ( r22 *) r21  r21  ( 00   )(( 00   )*) 0  0  ( 00 ) * 0  0  ( 00 ) * 0
2
1
1
1
1
r22  r22 ( r22 *) r22  r22  ( 00   )(( 00   )*)( 00   )  ( 00   )
2
1
1
1
1
 ( 00 ) *  00    ( 00 ) *
r23  r22 ( r22 *) r23  r23  ( 00   )(( 00   )*)( 01  1)  ( 01  1)
2
1
1
1
1
 ( 00 ) * ( 0   )1  01  1  0 * 1  01  1  0 * 1
r31  r32 ( r22 *) r21  r31  ( 0  1) (( 00   )*) 0  φ  ( 0  1)( 00 ) * 0
2
1
1
1
1
r32  r32 ( r22 *) r22  r32  ( 0  1) (( 00   )*)( 00   )  ( 0  1)
2
1
1
1
1
 ( 0  1)( 00 ) *  ( 0  1)  ( 0  1)( 00 ) *
r33  r32 ( r22 *) r23  r33  ( 0  1) (( 00   )*)( 01  1)  
2
1
1
1
1
 ( 0  1)( 00 ) * ( 01  1)    ( 0  1)( 00 ) * ( 0   )1    ( 0  1) 0 * 1  
0
1
q2
0,1
q3
最終状態への道
k=3
3
12
r
 r ( r *) r  r
2
13
2
33
2
32
2
12
1
0
q1
0
1
q2
0,1
q3
開始
 ( 0 * 1)((( 0  1) 0 * 1   )*)( 0  1)( 00 ) *  0 ( 00 ) *
 0 * 1(( 0  1) 0 * 1) * ( 0  1)( 00 ) *  0 ( 00 ) *
r13  r13 ( r33 *) r33  r13
3
2
2
2
2
 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) *
r12  r13  0 * 1(( 0  1) 0 * 1) * ( 0  1)( 00 ) *  ( 00 ) *  0 * 1(( 0  1) 0 * 1) *
3
3
 0 * 1(( 0  1) 0 * 1) * (( 0  1)( 00 ) *   )  0 ( 00 ) *
まとめ方が難しい?
 演習問題 2.16 (p. 67)を使う
rs sr
○*  
(r  s)  t  r  (s  t )
( r *)*  r *
( rs ) t  r ( st )
(   r )*  r *
r ( s  t )  rs  rt
( r * s *)*  ( r  s ) *
( r  s ) t  rt  st
変換例
(演習問題 2.13, p. 66)
下の状態図に対応する正則表現を求めよ。
b)
0
A
B
0
開始
1
1
C
0
1
とりあえず番号をつける
0
A
1
0
1
B
0
A
A
r11  
A
B
r12  0
A
C
r13  1
B
A
r21  0
B
B
r22  
C
r23  1
A
r31  1
B
r32  0
C
r33  
C
1
開始
0
0
0
1から!
A→1
B→2
C→3
0
0
0
B
0
C
C
0
0
C
状態Aが加わった
k=1 その1
r11  r11 ( r11 *) r11  r11   ( *)     
1
0
0
0
0
ε
ε
A
ε
A
A
A
A
A
ε
ε
A
A
ε
A
A
A
ε
A
ε
A
A
r12  r11 ( r11 *) r12  r12   ( *) 0  0  0  0  0
1
0
0
0
0
ε
A
A
A
ε
A
A
ε
A
ε
A
B
ε
A
B
A
ε
A
ε
A
B
状態Aが加わった
k=1 その2
r13  r11 ( r11 *) r13  r13   (  *) 1  1  1  1  1
1
0
0
0
0
ε
ε
A
ε
A
A
A
C
A
ε
ε
A
ε
A
A
A
C
ε
A
ε
A
C
r21  r21 ( r11 *) r11  r21  0 ( 0*)   0  00 *  0  00 *
1
0
0
0
0
ε
A
B
A
ε
B
A
ε
A
ε
A
A
ε
B
A
A
ε
A
ε
A
A
状態Aが加わった
k=1 その3
r22  r21 ( r11 *) r12  r22  0 ( *) 0    00  
1
0
0
0
0
ε
ε
A
ε
B
B
A
B
A
ε
ε
A
ε
A
A
B
B
ε
A
ε
A
B
r23  r21 ( r11 *) r13  r23  0 (  *) 1  1  01  1
1
0
0
0
0
ε
ε
A
B
A
ε
B
A
ε
A
ε
A
C
ε
B
C
A
ε
A
ε
A
C
状態Aが加わった
k=1 その4
r31  r31 ( r11 *) r11  r31  1(  *)   1  1  1  1
1
0
0
0
0
ε
ε
A
ε
C
C
A
A
A
ε
ε
A
ε
A
A
C
A
ε
A
ε
A
A
r32  r31 ( r11 *) r12  r32  1(  *) 0  0  10  0
1
0
0
0
0
ε
ε
A
B
A
ε
B
A
ε
A
ε
A
C
ε
B
C
A
ε
A
ε
A
C
状態Aが加わった
k=1 その5
r33  r31 ( r11 *) r13  r33  1(  *) 1    11  
1
0
0
0
0
ε
ε
A
ε
C
C
A
ε
r 
1
11
r 0
1
12
r 1
A
A
ε
ε
A
1
13
C
A
C
C
1
21
r
1
22
r
1
23
r
ε
A
ε
A
 00 *
r31  1
 00  
r32  10  0
 01  1
r33  11  
1
1
1
C
さらに状態Bが加わった
k=2 例1
r11  r12 ( r22 *) r21  r11  0 (( 00   )*) 00 *  
2
1
1
1
1
 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
r12  r12 ( r22 *) r22  r12  0 (( 00   )*)( 00   )  0  0 ( 00 ) *  0  0 ( 00 ) *
2
1
1
1
1
r13  r12 ( r22 *) r23  r13  0 (( 00   )*)( 01  1)  1  0 ( 00 ) * ( 0   )1  1
2
1
1
1
1
 00 * 1  1  0 * 1
r21  r22 ( r22 *) r21  r21  ( 00   )(( 00   )*) 00 *  00 *  ( 00 ) * 00 *  00 *
2
1
1
1
1
 ( 00 ) * 00 *
r22  r22 ( r22 *) r22  r22  ( 00   )(( 00   )*)( 00   )  ( 00   )  ( 00 ) *
2
1
1
1
1
r23  r22 ( r22 *) r23  r23  ( 00   )(( 00   )*)( 01  1)  ( 01  1)
2
1
1
1
1
 (( 00 ) *   )( 01  1)  ( 00 ) * ( 0   )1  0 * 1
r31  r32 ( r22 *) r21  r31  (10  0 )(( 00   )*) 00 *  1  (10  0 )( 00 ) * 00 *  1
2
1
1
1
1
r32  r32 ( r22 *) r22  r32  (10  0 )(( 00   )*)( 00   )  (10  0 )
2
1
1
1
1
 (10  0 )(( 00 ) *   )  (10  0 )( 00 ) *
r33  r32 ( r22 *) r23  r33  (10  0 )(( 00   )*)( 01  1)  (11   )
2
1
1
1
1
 (10  0 )( 00 ) * ( 0   )1  11    (10  0 ) 0 * 1  11  
最終状態への道
k=3
r11  0 ( 00 ) * 00 *  
1
r12  0 ( 00 ) *
2
r13  0 * 1
1
r  r12  r13
3
3
r21  ( 00 ) * 00 *
1
r12  r13 ( r33 *) r32  r12
r22  ( 00 ) *
r  r ( r *) r  r
r23  0 * 1
3
3
13
2
2
13
2
2
33
2
2
33
2
2
13
1
1
r31  (10  0 )( 00 ) * 00 *  1
2
r32  (10  0 )( 00 ) *
2
r33  (10  0 ) 0 * 1  11  
2
最終解
k=3
r12  0 ( 00 ) *
r32  (10  0 )( 00 ) *
r13  0 * 1
r33  (10  0 ) 0 * 1  11  
2
1
2
2
r12  0 * 1((( 10  0 ) 0 * 1  11   )*)( 10  0 )( 00 ) *  0 ( 00 ) *
3
 0 * 1(( 10  0 ) 0 * 1  11 ) * (10  0 )( 00 ) *  0 ( 00 ) *
 0 * 1((( 10  0 ) 0 * 1) * (11 )*) * (10  0 )( 00 ) *  0 ( 00 ) *
r13  0 * 1((( 10  0 ) 0 * 1  11   )*)(( 10  0 ) 0 * 1  11   )  0 * 1
3
 0 * 1(( 10  0 ) 0 * 1  11 ) *  0 * 1
 0 * 1((( 10  0 ) 0 * 1) * (11 )*) *  0 * 1
r12  r13  0 ( 00 ) *  0 * 1(   ((( 10  0 ) 0 * 1) * (11 )*) * (   (10  0 )( 00 )*))
3
3
今日のミニテスト
 ミニテスト
– 演習問題 2.12のa
– 教科書・資料を見ても良い
 資料、ミニテストがない人は前へ
 提出したら帰って良し
 次回
– 最小化ができればいいかな