決定性プッシュダウンオートマトン,そのグラフ表現

Download Report

Transcript 決定性プッシュダウンオートマトン,そのグラフ表現

形式言語 と オートマト
第5回
鳥取大学工学研究科
情報エレクトロニクス専攻
田中美栄子
本日の予定
形式言語とオートマト
プッシュダウンオートマトンとは?
+
→ プッシュダウンオートマトン(PDA)
(FSAのような単純な装置では扱えない入力の判断を扱える)
DPDA: deterministic pushdown automaton
NPDA: non- deterministic pushdown automaton
形式言語とオートマト
記憶装置
ポップアップ
後入れ先出し(LIFO:Last-In First-Out)
方式の記憶装置
形式言語とオートマト
決定性プッシュダウンオートマトン
M  Q ,  ,  ,  , q 0 , Z 0 , F 
Q
状態の有限集合

入力記号の有限集合

プッシュダウン記号の有限集合

動作関数
 : Q  (   { })   の部分集合
q0
Z0
F
初期状態
ボトムマーカー
受理状態の有限集合
 Q
q0  Q
Z0  
F Q
7字組
*
1ステップの動作(1)
と様相の書き方
…
x
a
$
 (q, a, Y )  ( p, )
有限制御部
の際
q
状態
様相は:( q,ax,Y
Y
形式言語とオートマト

Z0
Z 0 )
1ステップの動作(1)
と様相の書き方
…
x
a
$
pd-スタックの先頭の記号
を書き換える
有限制御部
状態
p
( q,ax,Y  Z 0 )
M
( p,x,  Z 0 )
に遷移する

形式言語とオートマト

Z0
1ステップの動作(2)
と様相の書き方
…
x
a
$
空動作
 (q,  , Y )  ( p, )
有限制御部
q
状態
の際
様相は:( q,ax,Y
Y
形式言語とオートマト

Z0
Z 0 )
1ステップの動作(2)
と様相の書き方
…
x
a
$
( q,ax,Y  Z 0 )
移動しない
M(
有限制御部
状態
p

形式言語とオートマト

Z0
p,ax,  Z 0 )
様相の書き方と受理条件
a1 a 2 a 3
…
an
$
初期様相
有限制御部
状態
q0
 ( q 0 , a1 , Z 0 )  ( q1 , YZ 0 )
次の様相
Z0
形式言語とオートマト
( q 0 , a1 a 2 a 3 ... a n , Z 0 )
( q 0 , a 2 a 3 ... a n , AZ 0 )
様相の書き方と受理条件
a1 a 2 a 3
…
an
$
初期様相
有限制御部
状態
q0
 ( q 0 , a1 , Z 0 )  ( q1 , YZ 0 )
次の様相
Z0
形式言語とオートマト
( q 0 , a1 a 2 a 3 ... a n , Z 0 )
( q1 , a 2 a 3 ... a n , YZ 0 )
ステップを繰り返して,
形式言語とオートマト
(qn ,  , n Z 0 )
動作停止時の様相
a1 a 2 a 3
…
an
$
qn  F

 n  
入力  を受理する
有限制御部
( q 0 , a1 a 2 ... a n , Z 0 )
*M
状態
qn
(qn ,  , n Z 0 )
n
形式言語とオートマト
Z0
M
31
 Q ,  ,  ,  , q 0 , Z 0 , F 
Q  { q 0 , q1 , q 2 }
  { a , b}
  { A, Z 0 }
 : Q  (   { })   の部分集合
 ( q 0 , a , Z 0 )  ( q 0 , AZ 0 ),
 ( q 0 , a , A )  ( q 0 , AA ),
 ( q 0 , b , A )  ( q 1 ,  ),
 ( q 1 , b , A )  ( q 1 ,  ),
 ( q1 ,  , Z 0 )  ( q 2 , Z 0 )
F  {q 2 }
 Q
*
入力語 aaabbb に対する
a
a
a
b
b
b
M 31の動作
(𝑞0 , 𝑎𝑎𝑎𝑏𝑏𝑏, 𝑍0 )
$
 : Q  (   { })   の部分集合
 Q
*
 ( q 0 , a , Z 0 )  ( q 0 , AZ 0 ),
 ( q 0 , a , A )  ( q 0 , AA ),
 ( q 0 , b , A )  ( q 1 ,  ),
 ( q 1 , b , A )  ( q 1 ,  ),
 ( q1 ,  , Z 0 )  ( q 2 , Z 0 )
Z0
a
a
a
b
b
b
(𝑞0 , 𝑎𝑎𝑏𝑏𝑏, 𝐴𝑍0 )
$
 : Q  (   { })   の部分集合
 Q
*
 ( q 0 , a , Z 0 )  ( q 0 , AZ 0 ),
 ( q 0 , a , A )  ( q 0 , AA ),
 ( q 0 , b , A )  ( q 1 ,  ),
 ( q 1 , b , A )  ( q 1 ,  ),
 ( q1 ,  , Z 0 )  ( q 2 , Z 0 )
A Z0
a
a
a
b
b
b
(𝑞0 , 𝑎𝑏𝑏𝑏, 𝐴𝐴𝑍0 )
$
 : Q  (   { })   の部分集合
 Q
*
 ( q 0 , a , Z 0 )  ( q 0 , AZ 0 ),
 ( q 0 , a , A )  ( q 0 , AA ),
 ( q 0 , b , A )  ( q 1 ,  ),
 ( q 1 , b , A )  ( q 1 ,  ),
 ( q1 ,  , Z 0 )  ( q 2 , Z 0 )
A A Z0
a
a
a
b
b
b
(𝑞0 , 𝑏𝑏𝑏, 𝐴𝐴𝐴𝑍0 )
$
 : Q  (   { })   の部分集合
 Q
*
 ( q 0 , a , Z 0 )  ( q 0 , AZ 0 ),
 ( q 0 , a , A )  ( q 0 , AA ),
 ( q 0 , b , A )  ( q 1 ,  ),
 ( q 1 , b , A )  ( q 1 ,  ),
 ( q1 ,  , Z 0 )  ( q 2 , Z 0 )
A
A A Z0
a
a
a
b
b
b
(𝑞1 , 𝑏𝑏, 𝐴𝐴𝑍0 )
$
 : Q  (   { })   の部分集合
 Q
*
 ( q 0 , a , Z 0 )  ( q 0 , AZ 0 ),
 ( q 0 , a , A )  ( q 0 , AA ),
 ( q 0 , b , A )  ( q 1 ,  ),
 ( q 1 , b , A )  ( q 1 ,  ),
 ( q1 ,  , Z 0 )  ( q 2 , Z 0 )
A A Z0
a
a
a
b
b
b
(𝑞1 , 𝑏, 𝐴𝑍0 )
$
 : Q  (   { })   の部分集合
 Q
*
 ( q 0 , a , Z 0 )  ( q 0 , AZ 0 ),
 ( q 0 , a , A )  ( q 0 , AA ),
 ( q 0 , b , A )  ( q 1 ,  ),
 ( q 1 , b , A )  ( q 1 ,  ),
 ( q1 ,  , Z 0 )  ( q 2 , Z 0 )
A Z0
a
a
a
b
b
b
(𝑞1 , 𝜀, 𝑍0 )
$
 : Q  (   { })   の部分集合
 Q
*
 ( q 0 , a , Z 0 )  ( q 0 , AZ 0 ),
 ( q 0 , a , A )  ( q 0 , AA ),
 ( q 0 , b , A )  ( q 1 ,  ),
 ( q 1 , b , A )  ( q 1 ,  ),
 ( q1 ,  , Z 0 )  ( q 2 , Z 0 )
Z0
a
a
a
b
b
b
(𝑞2 , 𝜀, 𝑍0 )
$
q2  F

 ( q 0 , a , Z 0 )  ( q 0 , AZ 0 ),   n  
 : Q  (   { })   の部分集合
 Q
 ( q 0 , a , A )  ( q 0 , AA ),
 ( q 0 , b , A )  ( q 1 ,  ),
*
入力語を受理する
 ( q 1 , b , A )  ( q 1 ,  ),
 ( q1 ,  , Z 0 )  ( q 2 , Z 0 )
Z0
様相変化でM31が受理される
言語を見つける!
形式言語とオートマト
aを一個入力
(𝑞0 , 𝑎𝑎𝑎𝑏𝑏𝑏, 𝑍0 )
 ( q 0 , a , Z 0 )  ( q 0 , AZ 0 ),
M
(𝑞0 , 𝑎𝑎𝑏𝑏𝑏, 𝐴𝑍0 )
M
(𝑞0 , 𝑎𝑏𝑏𝑏, 𝐴𝐴𝑍0 )
M
(𝑞0 , 𝑏𝑏𝑏, 𝐴𝐴𝐴𝑍0 )
M
(𝑞1 , 𝑏𝑏, 𝐴𝐴𝑍0 )
 ( q 0 , a , A )  ( q 0 , AA ),
 ( q 0 , b , A )  ( q 1 ,  ),
 ( q 1 , b , A )  ( q 1 ,  ),
 ( q1 ,  , Z 0 )  ( q 2 , Z 0 )
Aを一個増やす
bを一個入力
Aを一個減らす
M
(𝑞1 , 𝑏, 𝐴𝑍0 )
M
(𝑞1 , 𝜀, 𝑍0 )
M
(𝑞2 , 𝜀, 𝑍0 )
よって,M31が受理される言語
L ( M 31 )  { a b | n  1}
n
形式言語とオートマト
n
練習
Q:次の7字組で表されるdpdaに入力abbを読み込ませた場合の
様相の変化を示せ。また、受理するかを示すこと。
M  Q ,  ,  ,  , q 0 , Z 0 , F 
Q  { q 0 , q1 , q 2 }
  { A, Z 0 }
  { a , b}
F  {q 2 }
 : Q  (   { })   の部分集合
 ( q 0 , a , Z 0 )  ( q 0 , AAZ 0 ),
 ( q 0 , a , A )  ( q 0 , AAA ),
 ( q 0 , b , A )  ( q 1 ,  ),
 ( q 1 , b , A )  ( q 1 ,  ),
 ( q1 ,  , Z 0 )  ( q 2 , Z 0 )
形式言語とオートマト
 Q
*
練習
Q:次の7字組で表されるdpdaに入力abbを読み込ませた場合の
様相の変化を示せ。また、受理するかを示すこと。
A:
( q 0 , abb , Z 0 )
M
( q1 ,  , Z 0 )
受理する
形式言語とオートマト
M
( q 0 , bb , AAZ 0 )
M
(q2 ,  , Z 0 )
M
( q1 , b , AZ 0 )
有限オートマトンと同様に、プッシュダウ
ンオートマトンも形式的な7字組ではなく、
状態遷移図で定義することができる
形式言語とオートマト
プッシュダウンオートマトン状態遷移図を
構成する方法も有限オートマトンと同じ
形式言語とオートマト
M 31の状態遷移図
F
{ 1q,2q}2 }
q 0{
Q 
q 0q, 0q
異なる
a , Z 0 / AZ 0
b, A / 
q0
b, A / 
q1
 , Z0 / Z0
a , A / AA
完成
 ( q(0q,(a0q(,0qZa,(1b
,)A
,)(A
q,AA
,1b,A
),q)
Z0(,q
(AZ
)q(,
)(, q) )2), Z 0 )
0,q
0 0 1 01
形式言語とオートマト
q2
F
{ 1q,2q}2 }
q 0{
Q 
q 0q, 0q
a , Z 0 / AZ 0
b, A / 
q0
b, A / 
q1
 , Z0 / Z0
a , A / AA
 ( q(0q,(a0q(,0qZa,(1b
,)A
,)(A
q,AA
,1b,A
),q)
Z0(,q
(AZ
)q(,
)(, q) )2), Z 0 )
0,q
0 0 1 01
形式言語とオートマト
q2
入力語 aaabb に対する
a
a
a
b
$
b
a , Z 0 / AZ 0
M 31の動作
b, A / 
q0
b, A / 
q1
 , Z0 / Z0
a , A / AA
L ( M 31 )  { a b | n  1}
n
n
Z0
q2
a
a
a
b
$
b
a , Z 0 / AZ 0
b, A / 
q0
b, A / 
q1
 , Z0 / Z0
a , A / AA
A Z0
q2
a
a
a
b
$
b
a , Z 0 / AZ 0
b, A / 
q0
b, A / 
q1
 , Z0 / Z0
a , A / AA
A A Z0
q2
a
a
a
b
b
a , Z 0 / AZ 0
$
b, A / 
q0
b, A / 
q1
 , Z0 / Z0
a , A / AA
A
A A Z0
q2
a
a
a
b
$
b
a , Z 0 / AZ 0
b, A / 
q0
b, A / 
q1
 , Z0 / Z0
a , A / AA
A A Z0
q2
a
a
a
b
$
b
入力語は読み終えたが,
受理状態ではなく,
プッシュダウンスタックも空ではない。
これ以上遷移できないので M31 は入力語
aaabb を拒否する。
a , Z 0 / AZ 0
b, A / 
q0
b, A / 
q1
 , Z0 / Z0
a , A / AA
A Z0
q2
入力語 aaabbbb に対する
a
a
a
b
b
a , Z 0 / AZ 0
b
M 31の動作
$
b
b, A / 
q0
b, A / 
q1
 , Z0 / Z0
a , A / AA
Z0
q2
a
a
a
b
b
a , Z 0 / AZ 0
b
$
b
b, A / 
q0
b, A / 
q1
 , Z0 / Z0
a , A / AA
A Z0
q2
a
a
a
b
b
a , Z 0 / AZ 0
b
b
$
b, A / 
q0
b, A / 
q1
 , Z0 / Z0
a , A / AA
A A Z0
q2
a
a
a
b
b
a , Z 0 / AZ 0
b
b
$
b, A / 
q0
b, A / 
q1
 , Z0 / Z0
a , A / AA
A
A A Z0
q2
a
a
a
b
b
a , Z 0 / AZ 0
b
b
$
b, A / 
q0
b, A / 
q1
 , Z0 / Z0
a , A / AA
A A Z0
q2
a
a
a
b
b
a , Z 0 / AZ 0
b
$
b
b, A / 
q0
b, A / 
q1
 , Z0 / Z0
a , A / AA
A Z0
q2
a
a
a
b
b
a , Z 0 / AZ 0
b
b
$
入力語を読み終えることがで
きない(これ以上遷移できな
い ) の で , M31 は 入 力 語
aaabbbb を拒否する。
b, A / 
q0
b, A / 
q1
 , Z0 / Z0
a , A / AA
Z0
q2
お疲れ様
小テストです
形式言語とオートマト