計算の理論 I -数学的概念と記法-

計算の理論 I
ー反復補題ー
月曜3校時
大月 美佳
連絡事項
 ちょいまち。
今日の講義内容
1. 前回のミニテスト
1. ミニテスト(演習問題 2.13のa )の解答例
2. DFAから正則表現へ変換してみる
3. 今日の新しいこと
1. 正則表現とFAの等価性 つづき
1. 正則表現からのε-動作を含むNFAの作り方
→ 例2.12 (p. 42)
2. DFAからの正則表現の作り方
→ 例2.13 (p. 45)
前回のミニテスト
(演習問題 2.13, p. 66)
下の状態図に対応する正則表現を求めよ。
a)
0
1
A
0
B
C
1
開始
0
とりあえず番号をつける
r110  {a |  (q1 , a)  q1}    0  
00
A
1
B
0
C
1
開始
0
A → q1
B → q2
C → q3
r120  {a |  (q1 , a)  q2 }  1
r130  {a |  (q1 , a)  q3} ○
r210  {a |  (q2 , a)  q1} ○
r220  {a |  (q2 , a)  q2 }    
r230  {a |  (q2 , a)  q3}  0
r310  {a |  (q3 , a)  q1}  0
r320  {a |  (q3 , a)  q2 }  1
r330  {a |  (q3 , a)  q3}    
どんどん進める
k=1
r111  r110 (r110 *)r110  r110  (0   )((0   )*)(0   )  (0   )  0 *
r121  r110 (r110 *)r120  r120  (0   )((0   )*)1  1  0 *1  1  0 *1
r131  r110 (r110 *)r130  r130  (0   )((0   )*)○○○
r211  r210 (r110 *)r110  r210 ○((0   )*)(0   ) ○○○○
r221  r210 (r110 *)r120  r220 ○((0   )*)1   ○  
r231  r210 (r110 *)r130  r230 ○((0   )*)○0 ○0  0
r311  r310 (r110 *)r110  r310  0((0   )*)(0   ) ○ 00* ○ 00*
r321  r310 (r110 *)r120  r320  0((0   )*)1  1  00*1  1  0 *1
r331  r310 (r110 *)r130  r330  0((0   )*)○  
どんどん進める
k=2
r112  r121 (r221 *)r211  r111  0 *1( *)○0* ○0*  0 *
r122  r121 (r221 *)r221  r121  0 *1( *)  0 *1  0 *1  0 *1  0 *1
r132  r121 (r221 *)r231  r131  0 *1( *)0 ○ 0 *10
r212  r221 (r221 *)r211  r211   ( *)○○○○○
r222  r221 (r221 *)r221  r221   ( *)    
r232  r221 (r221 *)r231  r231   ( *)0  0  0  0  0
r312  r321 (r221 *)r211  r311  0 *1( *)○00* ○00*  00*
r322  r321 (r221 *)r221  r321  0 *1( *)  0 *1  0 *1  0 *1  0 *1
r332  r321 (r221 *)r231  r331  0 *1( *)0    0 *10  
最終状態への道
k=3
r  r (r *)r  r
r112  0 *
 0 *10((0 *10   )*)00* 0 *
 0 *10(0 *10) * 00* 0 *
 (0 *10(0 *10) * 0   )0 *
r122  0 *1
3
11
2
13
2
33
2
31
00
A
2
11
r212 ○
r222  
r232  0
1
B
0
C
1
開始
r132  0 *10
0
r312  00 *
r322  0 *1
r332  0 *10  
前々回の例2.12
q0
ε
q1
ε
q3
q2
1
0
ε
01*+1
δ
q
9
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
-
-
-
2.12から生成された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 ]}
DFAから正則表現へ
δ´´
[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
開始
[q6 ,q7 ,q8 ,q9]
1
[q0 ] → q1
[q2, q9] → q2
[q4 , q5 , q6 , q8, q9] → q3
[q6 , q7 , q8, q9] → q4
r110  
r210 ○
r310 ○
r410 ○
r120  1
r220  
r320 ○
r420 ○
r130  0
r230 ○
r330  
r430 ○
r ○
r240 ○
r340  1
r440  1  
0
14
どんどん進める
k=1 その1
r111  r110 (r110 *)r110  r110   ( *)    
r121  r110 (r110 *)r120  r120   ( *)1  1  1  1  1
r131  r110 (r110 *)r130  r130   ( *)0  0  0  0  0
r141  r110 (r110 *)r140  r140   ( *)○○○
r211  r210 (r110 *)r110  r210 ○( *) ○○○○
r  r (r *)r  r ○( *)1   ○  
1
22
0
21
0
11
0
12
0
22
r231  r210 (r110 *)r130  r230 ○( *)0 ○○○○
r241  r210 (r110 *)r140  r240 ○( *)○○○○○
どんどん進める
k=1 その2
r111  r110 (r110 *)r110  r110   ( *)    
r311  r310 (r110 *)r110  r310 ○( *) ○○○○
r321  r310 (r110 *)r120  r320 ○( *)1 ○○○○
r331  r310 (r110 *)r130  r330 ○( *)0   ○  
r341  r310 (r110 *)r140  r340 ○( *)○1 ○1  1
r411  r410 (r110 *)r110  r410 ○( *) ○○○○
r421  r410 (r110 *)r120  r420 ○( *)1 ○○○○
r431  r410 (r110 *)r130  r430 ○( *)0 ○○○○
r441  r410 (r110 *)r140  r440 ○( *)○1   ○1    1  
どんどん進める
k=2 その1
r112  r121 (r221 *)r211  r111  1( *)○ ○  
r122  r121 (r221 *)r221  r121  1( *)  1  1  1  1
r132  r121 (r221 *)r231  r131  1( *)○0 ○0  0
r  r (r *)r  r  1( *)○○○
2
14
1
12
1
22
1
24
1
14
r212  r221 (r221 *)r211  r211   ( *)○○○○○
r222  r221 (r221 *)r221  r221   ( *)   ○  
r232  r221 (r221 *)r231  r231   ( *)○○○○○
r  r (r *)r  r   ( *)○○○○○
2
24
1
22
1
22
1
24
1
24
どんどん進める
k=2 その2
r312  r321 (r221 *)r211  r311 ○( *)○○○○○
r322  r321 (r221 *)r221  r321 ○( *) ○○○○
r332  r321 (r221 *)r231  r331 ○( *)○  
r342  r321 (r221 *)r241  r341 ○( *)○1 ○1  1
r412  r421 (r221 *)r211  r411 ○( *)○○○○○
r422  r421 (r221 *)r221  r421 ○( *) ○○○○
r432  r421 (r221 *)r231  r431 ○( *)○○○○○
r442  r421 (r110 *)r241  r441 ○( *)○1   ○1    1  
どんどん進める
k=3 その1
r113  r132 (r332 *)r312  r112  0( *)○ ○  
r123  r132 (r332 *)r322  r122  0( *)○1 ○1  1
r133  r132 (r332 *)r332  r132  0( *)  0  0  0  0
r143  r132 (r332 *)r342  r142  0( *)1 ○ 01○ 01
r213  r232 (r332 *)r312  r212 ○( *)○○○○○
r223  r232 (r332 *)r322  r222 ○( *)○ ○  
r233  r232 (r332 *)r332  r232 ○( *) ○○○○
r243  r232 (r332 *)r342  r242 ○( *)1 ○○○○
どんどん進める
k=3 その2
r313  r332 (r332 *)r312  r312   ( *)○○○○○
r323  r332 (r332 *)r322  r322   ( *)○○○○○
r333  r332 (r332 *)r332  r332   ( *)        
r343  r332 (r332 *)r342  r342   ( *)1  1  1  1  1
r413  r432 (r332 *)r312  r412 ○( *)○○○○○
r423  r432 (r332 *)r322  r422 ○( *)○○○○○
r433  r432 (r332 *)r332  r432 ○( *) ○○○○
r443  r432 (r332 *)r342  r442 ○( *)1  1   ○1    1  
最終状態への道
k=4
r124  r143 (r443 *)r432  r123
 01((1   )*)○1  1
r  r (r *)r  r
4
13
3
14
3
44
3
43
3
13
 01((1   )*)○0  0
r144  r143 (r443 *)r443  r143
 01((1   )*)(1   )  01  011*
r113  
r123  1
r133  0
r143 ○
r213 ○
r223  
r233 ○
r243 ○
r313 ○
r323 ○
r333  
r343  1
r413 ○
r423 ○
r  r  r  1  0  011*  1  01*
4
12
4
13
4
14
r433 ○
r443  1  
今日の新しいこと
1. 正則集合の性質(第3章, p. 71~)
1. 反復補題 (節3.1, p. 71)
→ある集合が正則でないことを示す
2. 閉包性 (節3.2, p. 75)
→正則表現に対する各種演算
3. 決定手続き (節3.3, p. 81)
→空、有限、無限、等価性
4. Myhill-Nerodeの定理 (節3.4, p. 84)
→最小化
反復補題
 別名
– ポンプの定理 (pumping lemma)
 何がしたいのか
– 何か言語が与えられたとき、正則でないことを示す。
– 例3.1 (p. 74)
0が2乗の個数であるような記号列の集合
– 例3.2 (p. 74)
0と1の記号列を2進数とみたとき、
素数であるような記号列の集合
反復補題とは
 正則集合Lに対して次の条件を満たす定数nが
存在する。
zがLに属する語で|z|≧nならば、適当な語u, v, w
を選んで、
z  uvw, | uv | n, | v | 1, uv w  L(i  0)
i
を満たすようにすることができる。このnは、Lを
受理する最小の(すなわち状態数が最も少な
い)FAの状態数を超えない。
 証明はp.73
正則でないことの示し方
(背理法)
1. 正則でないことを示す対象言語:L
2. Lに対して補題の性質をもつ数nを仮定する
(敵の仮定)。仮定後変更してはならない。
3. Lの元zをひとつ決める( |z|≧n) 。
4. z を、|uv|≦nかつ|v|≧1であるようなu, v, w に分
解する(敵の作業)
i
5. uv w がLに入らないようなiを指摘する。どの
ようなnに対してもこれを示す。
例3.1
Step 1 調べたい言語 L
 0の列で、長さが完全平方数であるものの
全体
L  {0 | iは1以上の整数}
 0, 0000, 000000000, 0000000000000000,
…
i2
1の2乗 2の2乗 3の2乗
4の2乗
Step 2~4
 補題の性質をもつnを仮定
n2
z  0 とおく
 z を |uv|≦nかつ|v|≧1であるようなu, v, w
に分解したとする。このzは、
z  uvw
1 | v | n (| uv | n)
uvi w  L (i  0)
Step 5
 i=2のとき、
2
2
2
2
n | uv w | n  n  (n  1)
 これは完全平方数ではなく、Lに含まれな
い。これは矛盾。
 よってLは正則ではない。
今日のミニテスト
 ミニテスト
– 演習問題 2.13のb
– 教科書・資料を見ても良い
 資料、ミニテストがない人は前へ
 提出したら帰って良し
 次回
– 閉包性。