講義URL: http://www.kono.cis.iwate-u.ac.jp/~yamanaka/Lecture/Automata/index.html ※ 文字化けしてしまう場合はブラウザのエンコードを変更してみて下さい 形式言語とオートマトン 第13回 山中克久 目次 復習:文脈自由言語の反復補題 l 練習問題回答例 l プッシュダウンオートマトン l 文脈自由文法の限界 正規表現がそうだったように,文脈自由文法で表現できる 言語(文脈自由言語)とそうでない言語がある{ an bn cn | n >=0 } 与えられた言語が,正規言語でな いことを示すために反復補題を用 いた 文脈自由言語に関しても,同様 に,(文脈自由言語の)反復補題 を用いて,与えられた言語が文 脈自由言語でないことを示す { an bn | n >=0 } チューリング機械で受 理される言語のクラス 文脈自由言語のクラス 正規言語のクラス 反復補題の概要 導出木において,同じ変数(下図での変数A)が少 なくとも2回出現することに注目 変数Aが出現してからもう一度出現するまでの導出 を繰り返すことができる S S uとvを反復させる A A A A A u v x y z u v v y x y z (再掲)例4.3: 正しい括弧の系列 文脈自由文法 G = ({S}, {(,)}, {S à (S) | SS | ε}, S) は,正しい括弧の系列を生成する (正しい括弧の系列: 開括弧と閉括弧の対応が取れる系列) S S ( S ( ( S S ) S ) ) S ( ) ε ε ((())())の導出木 S à (S) à (SS) à ((S)S) à (((S))S) à ((())S) à ((())(S)) à ((())()) 定理4.12(文脈自由言語の反復補題) 定理4.12 文脈自由言語 L に対して次の条件を満たす正整 数 m が存在する.すなわち,L に属する長さが m 以上の任意の系列 w は,適当な u,v,x,y,z ∊ Σ* が 存在して,w=uvxyz と表されて,次の3つの条件が 満たされる.ここで,|w| は系列 w の長さを表す (1) 任意の i ≥ 0 に対して,uvixyiz ∊ L, (2) |vy| ≥ 1 w= u v x y (3) |vxy| ≤ m ※証明は省略 z ∊L 反復補題を例({0n1n | n≥0})で確 認 言語 { 0n1n | n≥0 } は文脈自由言語なので,反復 補題が成立するはず m=2 として考える w = 01 として,反復補題が成立するか考える u=ε, v=0, x=ε, y=1, z=ε とすると,3つの条件を満たす (1) uvixyiz ∊ { 0n1n | n≥0 } (2) |vy| ≥ 1 (3) |vxy| ≤ m 定理4.12 文脈自由言語 L に対して次の条件を満たす 正整数 m が存在する.すなわち,L に属す る長さが m 以上の任意の系列 w は,適当 な u,v,x,y,z ∊ Σ* が存在して,w=uvxyz と表 されて,次の3つの条件が満たされる.ここ で,|w| は系列 w の長さを表す (1) 任意の i ≥ 0 に対して,uvixyiz ∊ L, (2) |vy| ≥ 1 (3) |vxy| ≤ m 例4.13 言語 L = {an bn cn | n ≥ 0 } が文脈自由言語でない ことを反復補題を用いて示せ 証明 背理法による 反復補題より,3つの条件を満たすな正整数 m が 存在して,m 以上の長さをもつ L中の系列 an bn cn に対して,次の2つが成立しなければならない (1) an bn cn が uvxyz と表される (2) uv2xy2z が L に属する この(1)と(2)が同時に成立することはないことが示 されれば,背理法により言語 L は文脈自由文法で ないことが導かれる 例4.13 言語 L = {an bn cn | n ≥ 0 } が文脈自由言語でない ことを反復補題を用いて示せ 証明(続き) |vy| ≥ 1 より,v と y の少なくとも一方は空系列でない à 一般性を失うことなく v が空系列ではないと仮定する このとき v は高々1種類の記号を含む もしそうでないとすると, anbncn は記号の変わる箇所が2箇所だが, uv2xy2z は記号の変わる箇所が4箇所になり矛盾 uv2xy2z = aa … a aa … a bb … b aa … a bb … b bb…b cc … c v v 例4.13 言語 L = {an bn cn | n ≥ 0 } が文脈自由言語でない ことを反復補題を用いて示せ 証明(さらに続き) (再掲) v は高々1種類の記号を含む v は,an または bn,cn のいずれかに真に含まれる à y についても同様のことが言える uvxyz = aaaaaaaaabbbbbbbbbbcccccccccc v y したがって,uv2xy2z は L に含まれない 練習問題 練習問題12-1 言語 {ai bj ck | i ≤ j ≤ k } が文脈自由言語で ないことを証明せよ 有限オートマトンを違った視点で解釈 入力テープ 1 0 1 0 1 0 1 0 1 0 1 0 入力ヘッド 0 1 0 1 1 1文字目 読み込む 0 1 1 0 1 2文字目 読み込む 3文字目 読み込む 0 1 0 1 0 1 1 0 1 4文字目 読み込む 0 1 1 0 1 1 1 制御部 1 0 1 0 0 終了 0 1 有限オートマトンとプッシュダウン オートマトン 入力テープ上の系列を読み取る機械のバリ エーション à プッシュダウンオートマトン 入力テープ 入力テープ 入力ヘッド 制御部 有限オートマトンをテープ読み取り 機械として解釈した図 入力ヘッド トップ スタック ヘッド 制御部 スタック プッシュダウンオートマトン プッシュダウンオートマトンの動き テープヘッドの記号aと,スタックヘッ ドの記号b,現在の状態q から, 次の状態 q’ と,スタックへ書込む 系列 u が決まる v a w v w u 状態 q’ z テープの a を読み, スタックの u を読み, 状態 q’ になって, スタックのトップの 系列 b を u に上書き (q’,u) ∊ δ(q,a,b) b z a v a w 状態 q u 状態 q’ z テープ のε を読み, (何も読み込まず), スタックの u を読み, 状態 q’ になって, スタックのトップの 系列 b を u に上書き (q’,u) ∊ δ(q,ε,b) PDA プッシュダウンオートマトン(PushDown Automaton, PDA)とは6項組 M = (Q, Σ, Γ, δ, q0, F) である. ここで, P(A)は, 集合A (1) Qは状態の有限集合 のべき集合 (2)Σは入力アルファベット (3)Γはスタックアルファベット (4)δ: Q × Σε × Γε à P(Q × Γ*)は状態遷移関数 (5)q0 ∊ Q は開始状態 (6)F ∊ Q は受理状態の集合 ※ Σε = Σ∪{ε}, Γε = Γ∪{ε} ※ P(Q×Γ*) は, {(q1,u1), … , (qm,um)} と書いてもよい ただし,q1,…,qm ∊ Q,u1,…,um ∊ Γ* (非決定的な遷移関数になっていることに注意) 再掲: プッシュダウンオートマトンの 動き テープヘッドの記号aと,スタックヘッ ドの記号b,現在の状態q から, 次の状態 q’ と,スタックへ書込む 系列 u が決まる v a w v a w u 状態 q’ q a,b à u q’ z (q’,u) ∊ δ(q,a,b) b z v 状態 q a w u 状態 q’ q ε,b à u z (q’,u) ∊ δ(q,ε,b) q’ 例5.2: { 0n1n | n≥0 } のPDA start q1 ε,ε à $ q2 0,ε à 0 1,0 à ε q4 ε,$ à ε q3 1,0 à ε 気持ち 0を読み込む à スタックに0を貯める 1を読み込む à スタック中の0を1つ消す PDA を M = (Q, Σ, Γ, δ, q0, F) とする 系列wの受理 スタックが空からスタート Q = {q1,q2,q3,q4}, Σ = {0,1}, Γ = {0, $}, w を読み込む δ(q1,ε,ε) = {(q2,$)} δ(q2,0,ε) = {(q2,0)}, δ(q2,1,0) = {(q3,ε)} スタックが空でかつ受理 δ(q3,1,0) = {(q3,ε)}, δ(q3,ε,$) = {(q4,ε)} 状態で終わるような遷移 が存在 F = {q1,q4} 例5.3: {wwR | w ∊ {0,1}*} のPDA start q1 ε,ε à $ q2 0,ε à 0 1,ε à 1 ε,ε à ε q4 ε,$ à ε q3 0,0 à ε 1,1 à ε 気持ち(w=1001111001 を例に) 前半(10011)をスタックに プッシュ 後半(11001)と一致するか を1記号ずつチェック PDA を M = (Q, Σ, Γ, δ, q0, F) とする Q = {q1,q2,q3,q4}, Σ = {0,1}, Γ = {0,1,$}, 1 1 0 0 1 $ スタック の変化 δ(q1,ε,ε) = {(q2,$)} δ(q2,0,ε) = {(q2,0)}, δ(q2,1,ε) = {(q2,1)}, δ(q2,ε,ε) = {(q3,ε)} δ(q3,0,0) = {(q3,ε)}, δ(q3,1,1) = {(q3,ε)}, δ(q3,ε,$) = {(q4,ε)} F = {q1,q4} 例5.4: {w ∊ {0,1}* | N0(w)=N1(w)} 気持ち start 0,$ à 0$ ε,ε à $ スタックの先頭が$ q1 1,$ à 1$ 入力が0なら,0をプッシュ, 0,0 à 00 q2 入力が1なら,1をプッシュ 1,0 à ε ε,$ à ε 1,1 à 11 スタックの先頭が0 q3 0,1 à ε 入力が0なら,0をプッシュ, ※「0,0 à 00」を 入力が1なら,0をポップ 「0,ε à 0」に変えてはダメ スタックの先頭が1 系列1101000011 を入力したとき 入力が1なら,1をプッシュ, のスタックの様子 入力が0なら,1をポップ 1 1 0 1 1 1 1 1 0 0 0 $ $ $ $ $ $ $ $ $ $ $ 文脈自由言語とプッシュダウンオー トマトン言語の関係 文脈自由言語のクラスとプッシュダウンオートマトンで受理 される言語のクラスは一致する { an bn cn | n >=0 } { an bn | n >=0 } チューリング機械で受 理される言語のクラス 文脈自由言語のクラス 正規言語のクラス = プッシュダウンオートマ トンで受理される言語 のクラス 練習問題 練習問題12-2 次の言語を受理するプッシュダウンオートマトンを 作成せよ(例5.2〜5.4のように状態遷移図を作成 する) { 0 i1 j | 0 ≤ i ≤ j } { w ∊ {0,1,2}* | N0(w)=N1(w) } { ai bj ck | i = j または j=k となる非負整数 }
© Copyright 2024 ExpyDoc