決定性プッシュダウンオートマトン
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,YZ 0 )
Z0
1ステップの動作(1)
と様相の書き方
…
a
x
$
pd-スタックの先頭の記号
を書き換える
有限制御部
状態
p
(q,ax,YZ 0 )
M
( p,x,Z 0 )
に遷移する
形式言語とオートマト
Z0
1ステップの動作(2)
と様相の書き方
…
a
x
$
空動作
( q, , Y ) ( p, )
有限制御部
q
状態
の際
様相は:(q,ax,YZ 0 )
Y
形式言語とオートマト
Z0
1ステップの動作(2)
と様相の書き方
…
a
x
$
(q,ax,YZ 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
q0q, 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
q0q, 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
お疲れ様
小テストです
形式言語とオートマト