決定性プッシュダウンオートマトン

Download Report

Transcript 決定性プッシュダウンオートマトン

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