プッシュダウン・オートマトン 直観的な説明 プッシュダウン・オートマトン (PDA):スタック付の "-NFA。 - 入力の他にスタックの先頭を読む - 状態を遷移させると同時に、スタックの先頭を除いて 0 個以上の記号を押し込む 1 例:Lwwr - = fwwR j w 2 f0; 1gg を認識する PDA。 1111 の受理を考えよう 2 形式的な定義 PDA は P = (Q; ; ; Æ; q0; Z0; F ) で与えられる。こ こで、 Q:状態の有限集合 - :入力記号の有限集合 - - :スタック記号の有限集合 Q - Æ : Q [ f"g ! 2 :推移関数 - q0:初期状態 - Z0 2 :スタックの開始記号 - F Q:受理状態の集合 3 例:p.2 の PDA は以下のように表せる P = (fq0; q1; q2g; f0; 1g; fZ0; 0; 1g; Æ; q0; Z0; fq2g) ここで、Æ は以下の通り " 0 1 Z0 f(q1; Z0)g f(q0; 0Z0)g f(q0; 1Z0)g q0 0 f(q1; 0)g f(q0; 00)g f(q0; 10)g 1 f(q1; 1)g f(q0; 01)g f(q0; 11)g Z0 f(q2; Z0)g ; ; q1 0 ; f(q1; ")g ; 1 ; ; f(q1; ")g Z0 ; ; ; q2 0 ; ; ; 1 ; ; ; 4 時点表示:PDA の動作を表す方法 - 途中の状況を 時点表示 (q; w; ) で表す。 q:状態、w:残りの入力系列、 :スタックの内容 - 1 ステップの動きを時点表示の列で表現する (p; ) 2 Æ(q; a; X ) のとき、 (q; aw; X ) ` (p; w; ) 0 ステップ以上を、` で表す 5 例: 次の PDA に 1111 を入力したときの動作: (q0; 1111; Z0) ` (q1; "; 1111Z0) (q0; 1111; Z0) ` (q1; "; 11Z0) (q0; 1111; Z0) ` (q2; "; Z0) (q0; 1111; Z0) ` (q2; 11; Z0) (q0; 1111; Z0) ` (q2; 1111; Z0) 6 7 時点表示の列に関する 3 つの性質 (定理 6.5、定理 6.6) - PDA の動作を表す時点表示の列に対して、入力に余 分な入力列を追加してもその PDA の動作を表す - PDA の動作を表す時点表示の列に対して、スタック に余分な記号列を追加してもその PDA の動作を表 す - PDA の動作を表す時点表示の列に消費されない入力 があるとき、その入力を削除してもその PDA の動作 を表す 8 PDA が表す言語 最終状態による受理 - PDA P = (Q; ; ; Æ; q0; Z0; F ) が最終状態によ り受理する言語 L(P ) = fw j (q0; w; Z0) ` (q; "; ); q 2 F g 空スタックによる受理 - PDA P = (Q; ; ; Æ; q0; Z0; F ) が空スタックに より受理する言語 N (P ) = fw j (q0; w; Z0) ` (q; "; ")g 9 空スタック受理から最終状態受理 = (Q; ; ; ÆN ; q0; Z0; F ) とするとき、 N (PN ) = L(PF ) を満たす PDA PF が存在する 略証:以下のように PN から PF を構成する PF = (Q [ fp0; pf g; ; [ fX0g; ÆF ; p0; X0; fpf g) 定理 6.9:PN 10 最終状態受理から空スタック受理 = (Q; ; ; ÆF ; q0; Z0; F ) とすると き、L(PF ) = N (PN ) を満たす PDA PN が存在する 略証:以下のように PF から PN を構成する PN = (Q [ fp0; pg; ; [ fX0g; ÆN ; p0; X0; ;) 定理 6.10:PF 11 PDA と CFG の等価性 PDA と CFG の等価性を示そう 12 CFG から PDA(空スタック受理) へ 変換の基本的アイデア - スタック上で最左導出を模倣する (q; w; A) ` (q; w; ) () A ) - 入力記号とスタックの先頭の記号を打ち消す (q; aw; a) ` (q; w; ) - 入力を読み切ったときにスタックが空になる (q; w; S ) ` (q; "; ") () S) w 左 13 G = (V; T; Q; S ) に対して、L(G) = N (P ) を満たす PDA P が存在する 略証:以下のように G から P を構成する P = (fqg; T; V [ T; Æ; q; S; ;) 定理 6.13:CFG - 各変数について、 Æ(q; "; A) = f(q; ) j A ! 2 Qg - 各終端記号について、 Æ(q; a; a) = f(q; ")g 14 例:次の CFG を PDA に変換 S ! 0S 1 j " PDA の遷移関数は、 Æ(q; "; S ) = f(q; 0S 1); (q; ")g; Æ(q; 0; 0) = f(q; ")g Æ(q; 1; 1) = f(q; ")g 導出と遷移の対応は、 (q; 0011; S ) ) 0S 1 `(q; 0011; 0S 1) `(q; 011; S 1) )00S 11 `(q; 011; 0S 11) `(q; 11; S 11) )0011 `(q; 11; 11) `(q; 1; 1) `(q; "; ") S 15 PDA(空スタック受理) から CFG へ 変換の基本的アイデア - (p; wu; X) ` (q; u; ) ならば、変数 [pXq℄ が w を 生成するように CFG を構成 16 = (Q; ; ; Æ; q0; Z0) に対して、 L(G) = N (P ) を満たす CFG G が存在する 略証:以下のように P から G を構成する G = (fS g [ f[pXq℄ j p; q 2 Q; X 2 g; ; R; S ) 規則 R は以下の規則からなる - 各状態 p について、 S ! [q0Z0p℄ 定理 6.14:PDAP 17 略証 (続き) - 各状態 q 、各 a 2 [ f"g、各スタック記号 X につ いて、 (r; ") 2 Æ(q; a; X ) に対して、 [q; X; r℄ ! a (r; Y1 Yk ) 2 Æ (q; a; X ) (k > 0) に対して すべての状態 r1 rk の組合せについて、 [q; X; rk℄ ! a[rY1r1℄[r1Y2r2℄ [rk 1Ykrk℄ 18 例:次の PDA を CFG に変換 Æ(q0; 1; Z0) Æ(q0; 1; 1) Æ(q1; 1; 1) Æ(q1; "; Z0) S ! [q0Z0q1℄ ! [q01q1℄ ! [q1Z0q1℄ ! [q11q1℄ ! = f(q0; 1Z0); (q1; Z0)g = f(q0; 11); (q1; 1)g = f(q1; ")g = f(q1; ")g [q0Z0q0℄ j [q0Z0q1℄ 1[q01q1℄[q1Z0q1℄ j 1[q1Z0q1℄ j 1[q01q1℄[q11q1℄ j 1[q11q1℄ j " 1 遷移と導出の対応は、 (q0; 111; Z0) `(q0; 11; 1Z0) `(q1; 1; 1Z0) `(q1; "; Z0) `(q1; "; ") S [q0Z0q1℄ )1[q01q1℄[q1Z0q1℄ )11[q11q1℄[q1Z0q1℄ )111[q1Z0q1℄ )111 ) 19
© Copyright 2024 ExpyDoc