第3章 「文脈自由言語」 3.1 文脈自由文法 3.2 プッシュダウンオートマトン 3.3 文脈自由文法とプッシュダウンオートマトン 3.4 正規文法と有限オートマトン 3.5 文脈自由文法の性質 3.6 決定性プッシュダウンオートマトン 形式言語と自然言語 1950年代に米国の言語学者N. Chomskyが形式言語 理論を提唱。形式文法とそれによって定義される言語 を自然言語の数学的モデルとして研究。 Noam Chomsky 語の構造を研究 文の構造を研究 She loves Neo 文の意味を研究 S NP P 言葉の発音を研究 VP V NP 文脈における文の意味を研究 PN She loves Neo ※ 上図写真:http://web.media.mit.edu/~nitin/mideast/chomsky.html 3.1 文脈自由文法 定義 文脈自由文法とは4つ組 G = (N, Σ, P, S) によって定義される。 N: 空でない有限集合。Nの要素を非終端記号という。 Σ: 空でない有限集合。Σの要素を終端記号という。 S: S∈Nで開始記号という。 P: P は N×(N∪Σ)* の有限部分集合。 P の要素 (A, α) は生成規則とよばれ、A→α と書かれる。 α=εのとき ε生成規則という。 非終端記号A を生成規則の左側にもつ P の要素を A →α1, …, A→αn とするとき、これらをまとめて A →α1| …|αn と書くこともある。 文脈自由文法の例 例3.1 (例3.3) G=(N, Σ, P, S) N = {S} Σ= {a, b} P = {S → ab, S → aSb} 例3.2 (例3.4) G=(N, Σ, P, S) N = {S, A, B} Σ= {x, 0, 1} P = {S → xA, A → 0|1B, B → ε|0B|1B} 語の導出 導出の定義 V G は省略することもある = N∪Σとする。 記号列 u,v∈V* が次を満たすとき u⇒Gv とかく。 (1) u = xAy, v = xαy (x, y,α∈V*, A∈N) (2) A →α は G の生成規則 * ⇒G の反射的推移閉包を ⇒G とかく。 n 導出の長さが n の場合、⇒G とかく。 V* の要素の列 w0, …, wn について、 w0 ⇒G w1 ⇒G ・・・ ⇒G wn のとき、w0 から wn が 導出されるという。 Gが生成する語、言語 開始記号Sより w∈Σ* が G の生成規則によって導 出されるとき、w は G の生成する語とよばれる。ま た G の生成する言語を L(G) = { w∈Σ* | S⇒G w} と書く。 言語 L⊆Σ* に対して L = L(G) となるとき、 G は L を生成するという。 Σ上の言語 L⊆S* に対して、 L を生成する文脈自由文法が存在するとき、 L は文脈自由言語とよばれる。 文脈自由言語とCFL CFL の定義 文脈自由言語のクラスをCFLと書くことにする。 すなわち、 集合の集合(族) CFL = { L | L = L(G) となる文脈自由文法 G がある} と定義する。 導出の例 例3.5 N = {S,A,B}, Σ= {x, 0, 1, +, ・, ), ( } P = {S → (S +S) | S・S | xA, A →ε| 1B, B →ε|0B|1B|0|1 } 例3.6 例3.7 N = {S}, Σ= { ), ( } P = {S →SS, S →(S), S →()} N = {S}, Σ= {0,1,φ,+,・,*,),( } P = {S →φ|0|1|(S+S)|(S・S)|S* } 構文木 導出の過程をVisualizeする道具 定義 構文木は次のように帰納的に定義される。 ここで、V = N∪S とする。 (1) 各A∈Vに対して、記号Aをラベルとする 1つの頂点のみからなる木 A (2) 生成規則 A→εに対して A ε 構文木(2) 定義つづき (3) T1, …, Tn を根のラベルが A1, …, An∈V である 構文木とする。 G の生成規則 A→A1…An に対して、 Aを根とする木 A A1 An ・・・ T1 Tn (4) 上記(1)~(3)の規則を使って定義される 有限の木のみを構文木という。 構文木の例 例3.8 (例3.1の導出木) S S S a a a b b L(G) はどのような言語か? b 最左導出 最左導出と左側順走査 導出の各ステップにおいて一番左にある非終端 記号が置き換えられているとき、最左導出という。 * に対する構文木の走査は 最左導出 A⇒u 左側順走査となる。 例3.9 (例3.6の最左導出) 練習: 語 (())(()()) を最左導出する過程は? 補題3.1 補題3.1 G=(N,S,P,S)を文脈自由文法とする。 導出 u⇒v があるならば、 u から v への最左導出がある。 証明 u = w1A1w2 … wkAkwk+1 (Ai∈N, wj∈Σ*) とする。 v = w1A1w2A2w3 … wkAkwk+1 ① ② ・・・ k v = w1v1 w2 v2w3 … wkvkwk+1 * (1≦i ≦k) Ai⇒v i 左側順走査による 最左導出とする 3.2 プッシュダウンオートマトン 概念図と基本動作 (1) 状態を変える。 (2) プッシュダウンストアの トップ記号を他の記号列 で置き換える。 (3) 入力ヘッドが記号を読む 場合はヘッドの位置の 記号を取り去る。 有限制御部 入力テープ a1 a2 A を push A を pop q ai A B A B Z0 プッシュダウンストア プッシュダウンオートマトンの定義 定義 プッシュダウンオートマトン(pda)は7つ組 M=(K, Σ,Γ,δ, q0, Z0, F) によって定義される。 K : 状態とよばれる空でない有限集合。 Σ: 入力アルファベット Γ: プッシュダウンストアのアルファベット 非決定的な定義 q0: 初期状態 q0∈K であることに注意 F : 最終状態 F⊆K Z0: プッシュダウンストアの初期記号 Z0∈Γ δ : K×(S∪{e})×G×K×G*の有限部分集合 (q,a,Z,p,α)∈δのとき、(p,α)∈δ(q,a,Z)と書く δを遷移関数とよび、δの要素を遷移とよぶ。 PDAによる語の受理 計算状況 q∈K、入力 w∈S*、および a∈Γ* なる(q,w,α) を計算 状況という。 状態 α=Zβ とかけるとき、Zがトップ記号である。 K×Σ*×Γ*上の関係├M (q,ax,Zα)├M (p,x,βα) ⇔ (p,β)∈δ(q,a,Z) (q,ax,Zα) から (p,x,βα) へ動作するという a =εのときをε動作という。 関係├M の反射的推移閉包を├M* とかく PDAによる語の受理 → L(M) 最終状態かつ空ストアによって受理 → N(M) 最終状態によって受理 命題3.2 命題3.2 言語L⊆Σ* に対して次の (1)(2) は同値である。 (1) あるpda Mに対してL=L(M)となる。 (2) あるpda Mに対してL=N(M)となる。 証明 (1)→(2) Mにおいて受理される w に対して、 * (f,ε,γ) (q0, w, Z0)├M’ となり、さらにε動作で残りのγを取り除くような動作をする M’ を考えればよい。 (2)→(1) 上と似たやり方で、今度は逆に M’ から M を構成する。 決定性PDAと非決定性PDA 決定性と非決定性 非決定性プッシュダウンオートマトン 計算状況に対して一意に次の計算状況が決まらない。 決定性プッシュダウンオートマトン 任意の計算状況に対して次の計算状況が一意に決まる。 決定性PDAの定義 PDA M=(K,Σ,Γ,δ,q0,Z0,F) は、次の (1)(2) の条件を満た すとき決定性であるという。 (1) |δ(q, a, Z)| ≦ 1 (a∈Σ∪{ε}) (2) δ(q,ε,Z) ≠φ ならば、全ての a∈Σ に対して δ(q,a,Z)=φ (2) が無いと、入力語を消費する前にε動作をするため、非決定的な動作になる。 決定性PDAと非決定性PDAの違い 非決定性PDAの場合は命題3.2が成り立つ 決定性PDAの場合は成り立たない 決定性PDAがεを最終状態と空ストアによって受理するな らば一意に (q0,ε,Z0)├M* (q,ε,ε) (q∈F) となる。するとどんな入力に対しても (q0, x, Z0)├*M (q, x,ε) となり、入力 x が読み込まれずに停止する。 したがって、ε∈N(M) ⇒ N(M)={ε} となる。 クラスNPDAとDPDA 定義 NPDA={L | ある npda M に対して L=L(M)} (2) DPDA={L | ある dpda M に対して L=L(M)} (1) 命題3.3 L1,L2∈NPDA ならば L1∪L2∈NPDA である。 証明 省略(補題2.2と同様に証明できる) 3.3 文脈自由文法とPDA 定理3.4 CFL = NPDA 文脈自由言語のクラスと非決定性プッシュダウン オートマトンによって受理される言語のクラスは 一致する。 2つの補題に分けてこの定理を証明する。 補題3.5 CFL⊆NPDA 補題3.6 NPDA⊆CFL 補題3.5 CFL⊆NPDA この補題の意味 任意の言語 LCFL について、 LNPDA (L を受理するnpdaがある) NPDA CFL 証明のアイデア L∈CFLとし、L⊆Σ* を生成する文脈自由文法をG = (N,Σ, P, S) とする この G に対応する npda M をつくり、 L(G) = N(M) となることを示せばよい 補題3.5の証明 (1) 言語 L を最終状態と空ストアで受理する npda M = (K,Σ,Γ,δ, q0, Z0, F) を(天下り的に)定義 K = {q0} Γ= N∪Σ q0 が初期状態 S∈N が初期記号 Z0 F = {q0} 遷移関係 は次のように与えられる。 (i)δ(q0,ε, A) = {(q0,α) | A→α∈P} (ii)δ(q0, a, a) = {(q0,ε)} (ただし a∈Σ) 注:これは、文脈自由文法から等価なPDAを作る手法になる! 補題3.5の証明 (2) L(G) = N(M) を証明するぞ! X∈N, u∈Σ*, ∈N(N∪Σ)*∪{ε} とするとき 次の (a) (b) が同値であることを示す。 * (a) 最左導出 X ⇒ uα がある。 (b) (q0, u, X)├*(q0,ε,α) となる。 まずは 入力から u を消費してストアのXをαに変える (a)⇒(b) (導出の長さについての帰納法) 長さが 0 のときは u =ε, α= X であるので自明。 最左導出の長さが n のとき成立すると仮定する。 このとき長さ n+1の最左導出 n+1 X ⇒ u をとる。ただし u∈Σ*,α∈(N∪Σ)*∪{ε} とする。 補題3.5の証明 (3) n X v A β γ (xθ) この最左導出は、 n X ⇒ vAβ⇒ vγβ (ただし v∈Σ*, A→γ∈P) のように、長さ n の最左導出と、長さ 1 の最左導出に分解できる。 ここで u = vx, x∈Σ*,γβ= xαと書ける。帰納法の仮定より (q0, v, X)├* (q0,ε, Aβ) となる。したがって (q0, vx, X)├* (q0, x, A) ├ (q0, x, x) ((i)の遷移と = x による) ├*(q0, , ) ((ii)の遷移による) このようにして (q0, u, X)├ (q0, , )となる。 よって(a)⇒(b)が成り立つ。 補題3.5の証明 (4) (b)⇒(a)の証明 計算のステップ数についての帰納法で証明する。 ステップ数が 0 の場合は自明。 ステップ数が n 以下のとき成立すると仮定する。長さ n+1 の計算 (q0, u0, a0)├ ・・・├ (q0, un,an)├ (q0, un+1,an+1) をとる。ただし u0 = u, un+1 =ε, a0 = X, an +1 = a とする。 n+1 番目のステップで (i) の遷移(ε動作)が使われている場合: 上の計算は (q0, u, X)├n (q0,ε, Aβ)├ (q0,ε,γβ) と分解できる。ただし A→γ∈P,γβ=αである。 帰納法の仮定により、最左導出 * uAβ X⇒ が存在する。 A→γ∈P であり、また u∈Σ* だから、 * uAβ⇒ uγβ X⇒ は最左導出である。 * uαなる最左導出が存在する。 よって X ⇒ 補題3.5の証明 (5) n+1 番目のステップで (ii) の遷移が使われている場合: X は非終端記号なので、第1ステップ目では (ii) の遷移を適用できない。 したがって、ある時点 m(2≦m≦n+1) が存在して、m-1ステップ目では (i)の遷移が使われ、すべての t(m≦t≦n+1)に対して t ステップ目では (ii) の遷移が適応されている。 すると、計算 (q0, u, X)├n+1 (q0,ε,α) は (u = vx とおくと) (q0, vx, X)├m-2 (q0, x, Aβ ) ├ (q0, x,γβ) (m-1回目の遷移は(i)の遷移) ├n-m+2 (q0,ε,α) (残りはすべて(ii)の遷移) と分解できる。また (q0, vx, X)├m-2 (q0, x, Aβ) ならば (q0, v, X)├m-2 (q0,ε, Aβ) であるので、帰納法の仮定より最左導出 * vAβ X⇒ (m-1回目の遷移に対応) が存在する。すると * vAβ⇒ vγβ X⇒ は最左導出である。 * γβ= xα, vx = u であるので X ⇒ uαがあることになる。 補題3.5の証明 (6) (a) と (b) が同値であることがわかった。 * (a) 最左導出 X⇒u がある。 (b) (q0, u, X)├*(q0, , ) となる。 以上により 補題3.1より、G の導出は最左導出としておいてよいので、 w∈Σ* に対して * w ⇔ (q , w, S)├ *(q , , ) S⇒ 0 0 となる。したがって L(G) = N(M) となる。 命題3.2より L∈NPDA となる。 【証明終】 補題3.1 * vが G = (N, , P, S) を文脈自由文法とする。導出 u ⇒ あるならば、 u から v への最左導出がある。 例3.13 文脈自由文法 G = (N, Σ, P, S) を N = {S} Σ= {a, b} P = {S → aSb, S → ab} とする。このとき補題3.5で構成されるnpdaの遷移 関数δは次のようになる 現在の状態 入力ヘッダが見ている記号 ストアのヘッダが見ている記号 q x Z δ(q, x, Z) q0 q0 q0 a b S a b {(q0, aSb), (q0, ab)} {(q0, )} {(q0, )} 補題3.6 NPDA⊆CFL この補題の意味 任意の言語 LNPDA について、 LCFL (L を導出するCFLがある) 証明のアイデア L∈NPDAとし、この CFL NPDA L を最終状態と空ストアで受 理するnpdaを M=(K,Σ,Γ,δ, q0, Z0, F) とする この M に対応する文脈自由文法 G をつくり、 N(M) = L(G) となることを示せばよい 補題3.6の証明 (1) L を生成する文脈自由文法 G=(N,Σ, P, S) を (天下り的に)定義 N = (K×Γ×K)∪{S} P は次の生成規則よりなる (i) 各 p∈F に対して S→(q0, Z0, p) は生成規則である。 (ii) (p, Z1・・・Zk)∈δ(q, a, Z) (k≧1, a∈S∪{ε})のとき 任意のq1, q2, …,qk∈K に対して (q, Z, qk) → a(p, Z1, q1)(q1, Z2, q2)・・・(qk-1, Zk, qk) は生成規則である (iii) (p,ε)∈δ(q, a, Z) (a∈S∪{ε}) のとき (q, Z, p) → a は生成規則 注:これは、PDAから等価な文脈自由文法を作る手法になる! 補題3.6の証明 (2) L(G) = N(M) を証明するぞ! (a) (b) が同値であることを示す。 * x (a) (q, Z, p) ⇒ (b) (q, x, Z)├*(p,ε,ε) その前に、次の (a)⇒(b)の証明(導出の長さについての帰納法で証明) 長さが 1 のときは、生成規則 (iii) により x ∈ S ∪{ε} で (p,ε) ∈ d (q, x, Z ) となっている。したがって (q, x, Z)├ (p,ε,ε) となる。 長さ n 以下の導出に対して成立することを仮定する。 長さ n+1 ≧ 2 の導出 (q, Z, p) ⇒ x をとる。導出の長さが 2 以上だから一番初めに適用される 生成規則は (ii) の形のものである。 補題3.6の証明 (3) このとき上の導出は (q, Z, p) ⇒ a(q1, Z1, q2)(q2, Z2, q3)・・・(qk, Zk, p) * x ⇒ と書ける。ただし (q1, Z1・・・ Zk) ∈ d (q, a, Z) である。 すると、x = ax1・・・ xk (xi∈Σ*) と書けて、各 i (1≦i≦k)に 対して、長さ n 以下の導出で * x (qi, Zi , qi+1) ⇒ i となる。 ただし qk+1 = p とする。 帰納法の仮定より (qi, xi, Zi)├ (qi+1,ε,ε) (1≦i≦k) となる。このとき (qi, xi, Zi )├ (q1, x1・・・ xk , Z1・・・ Zk ) ├*(q2, x2・・・ xk, Z2・・・ Zk ) ・・・ ├* (qk, xk, Zk ) ├* (p,ε,ε) となる。 補題3.6の証明 (4) (b)⇒(a)の証明(計算のステップ数についての帰納法) (iii) より (q, Z, p) → x は P の要素となる。 よってステップ数が 1 のときは成立する。n+1≧2 として (q, x, Z)├n+1 (p,ε,ε) とする。これを最初の1ステップと残りの n ステップに分解する。 n≧1 だから第 1 ステップでは Z がポップされてεに置き換えられ ることはない。よって (q, x, Z) ├ (r, y, Z1・・・Zk ) ├n (p,ε,ε) となる。ここで x = ay, a ∈Σ∪{ε} であり、 (r, Z1・・・Zk ) ∈δ(q, a, Z) である。 補題3.6の証明 (5) 各 Zi はいずれポップされるので、 分解 y = y1・・・yk (yi∈Σ*, 1≦i≦k) と状態 q1・・・qk が存在して、 各 i (1≦i≦k) に対して、n 以下のステップ数で (qi, yi, Zi )├*(qi+1,ε,ε) となる。ただし q1 = r , qk+1 = p とする。 帰納法の仮定より * y (qi, Zi, qi+1) ⇒ (1≦i≦k) i となる。 (ii)より (q, Z, p) ⇒ a(q1, Z1, q2) ・・・ (qk, Zk, p ) だから (q, Z, p) ⇒ a(q1, Z1, q2 ) ・・・ (qk, Zk, p ) * ay ・・・ y ⇒ 1 k * x となる。 となる。 よって (q, Z, p) ⇒ 補題3.6の証明 (6) (a) と (b) が同値であることがわかった。 * x (a) (q, Z, p) ⇒ (b) (q, x, Z)├* (p,ε,ε) 以上により * ならば (i) により、 x∈Σ* に対して S ⇒x ある状態 p∈F が存在して、S ⇒ (q0, Z0 , p) ⇒*x となる。 したがって (q0, x, Z0)├ * (p,ε,ε) となり、 x は M によって受理される。 逆に x が M によって受理されれば、 * x となることも同様にわかる。 S⇒ 【証明終】 そこで 例3.14 M = (K,Σ,Γ,δ, q0, Z0, F) を言語 {anbn | n≧1} を最終状態と空ストアで 受理する例3.12の npda とする。このとき補題3.6で構成される文脈自由 文法 G=(N, S, P, S) は次のようになる。 N = {q0, q1}×{A, Z0}×{q0, q1}∪{S} P の生成規則は次のとおり。 S → (q0, Z0, q1) (q0, Z0, q0) → a(q0, A, q0) (q0, Z0, q1) → a(q0, A, q1) (q0, A, q0) → a(q0, A, q0) (q0, A, q0) 無駄な生成規則 (q0, A, q0) → a(q0, A, q1) (q1, A, q0) が多いよ (・∀・) (q0, A, q1) → a(q0, A, q0) (q0, A, q1) (q0, A, q1) → a(q0, A, q1) (q1, A, q1) (q0, A, q1) → b (q0, A, q1) → b 3.3節の結論 以下の補題が証明された 補題3.5 CFL⊆NPDA 補題3.6 NPDA⊆CFL すなわち 定理3.4 CFL = NPDA 文脈自由言語のクラスと非決定性プッシュダウン オートマトンによって受理される言語のクラスは 一致する。(言語を定義する能力が等しい) 3.4 正規文法と有限オートマトン 正規文法 右線形文法 A wB Aw (A, B N, wΣ* ) 左線形文法 A Bw Aw (A, B N, wΣ* ) 例3.15 右線形文法の例 N = {S, A} P = {S 1A, A 0A, A } S A A A A 1 0 0 0 例3.16 左線形文法の例 N = {S} P = {S S0, S 1} S S S S S 1 0 0 0 0 定理3.7 定理3.7 言語 L⊆Σ* に対して、次の (1)-(3) は同値である。 (1) L を生成する右線形文法がある。 (2) L は有限オートマトンによって受理される。 (3) L を生成する左線形文法がある。 正規文法 正規表現 有限オートマトン 証明 (1)⇒(2) 例3.15 の場合 N = {S, A} P = {S 1A, A 0A, A } M: S 1 A f 0 L(M) = L(G) を帰納法を用いて証明する。 証明 (2)⇒(3) 例: 1 を奇数個含む語を受理するオートマトン M: q0 0 1 1 q1 0 G = (K,Σ, P, q0 ) P = { q0 1q1, q0 0q0, q1 1q0, q1 0q1, q1 } L(M) = L(G) を帰納法を用いて証明する。 証明 (1)⇒(3); (3)⇒(1) N = {S, A} P = {S 1A, A 0A, A } S A A N = {S, A}∪{S} P = {S A S1, A A0, S S A } A A A A A 1 0 0 0 A S 1 0 0 0 3.5 文脈自由文法の性質 この節の内容 定理3.8 ε生成規則消去定理 定理3.9 鎖生成規則の消去定理 定理3.10 Chomsky標準形への変形 定理3.11 挿入定理 定理3.8 ε生成規則消去定理 定理3.8 G = (N,Σ, P, S ) に対して、 次の (1)-(3) を満たす文脈自由文法 G’ = (N’,Σ, P’, S’ ) を構成できる。 (1) L(G ) = L(G ) (2) ε∈L(G ) のときのみ G’ はε生成規則を持ち、 それは S’ε に限る。 (3) G’ の開始記号 S’ は P’ のどの生成規則の 右辺にも現れない. 文脈自由文法 証明の手引き G に対して、条件に合うような G’ を(天下り的に) 定義する。 G の非終端記号 N のうち εを生成するものの集合 Nn を作る。 その前準備として、元の こうして作った G’ が (2) と (3) を満たすのは明らか。 残る(1) L(G’ ) = L(G ) を証明する。 L(G’ ) ⊆ L(G ) を証明 L(G’ ) ⊇ L(G ) を証明 N Nn εを導出する 証明 (1) 証明 N = N∪{S} P は次のとおり このP’の作り方がε生成規則を省く方法になる (i) L(G ) ならば S は生成規則 (ii) S S は生成規則 (iii) A 1 A1 2 ・・・ k Ak k+1 P, Ai N∪Σ (1 i k), k Nn* ならば、 A A1 ・・・ Ak は生成規則 注:αk はεを導出する 証明 (2) L(G) ⊆ L(G) (i) から、 L(G ) L(G ) * ここで、S (wΣ+) ならば、 G w * S * S G G w となる導出がある。 L(G) ⊇ L(G) (b) AN∪Σのとき,AG w, w∈Σ+ ならば AG w である。 (b) を導出の長さの帰納法によって証明。 (b) より, S G w, w∈Σ+ ならば S G w となるので、 S G w となる。 例3.17 G = (N,Σ, P, S ) を次の生成規則をもつ 文脈自由文法とする。 S AB A ABAC | B | a BC|b| CB|c| ε生成規則をなくした G’ をつくってみよう 定理3.9 鎖生成規則の消去定理 定理3.9 G = (N,Σ, P, S ) に対して、 次の (1)-(3) を満たす文脈自由文法 G = (N,Σ, P, S ) を構成できる。 (1) ∈L(G ) のときのみ S (2) A ( | | 2, ∈((N∪Σ{S})*) (3) A a ( a ) (4) L(G) = L(G ) 文脈自由文法 注:S を右辺に含まないということ 証明の手引き G に対して、条件に合うような G’ を(天下り的に) 定義する。 G の非終端記号 N のうち、 鎖生成規則であるような集合 Nn(A) を作る。 その前準備として、もとの こうして作った G’ が (1)-(3) を満たすのは明らか。 残る(4) L(G’ ) = L(G ) を証明する。 L(G’ ) ⊆ L(G ) を証明 L(G’ ) ⊇ L(G ) を証明 N Nn(A) 鎖生成規則 証明 (1) 証明 N, S は同じ P は次のとおり、 P = {A | B∈N (A) [B∈P かつ N] } n * B} Nn(A) = {BN | A G ( n = |N | ) 証明 (2) L(G) ⊆ L(G) A P ならば、ある BNn(A) が存在して、 * B * となる。よって A * A G G G * * ということは、 A G w ならば必ず AG w となるので、L(G ) ⊆ L(G ) 。 L(G ) ⊇ L(G ) AN, wΣ+ t に対して、AG w ならば A*G w これを導出の長さの帰納法によって証明(略)。 t これより、S G w, wΣ+ ならば * w となる。よって L(G’)⊇L(G) 。 S G 例3.18 G = (N,Σ, P, S ) を次の生成規則をもつ 文脈自由文法とする。 SA A AB | a BC|b CA|c 鎖生成規則をなくした G’ をつくってみよう Chomsky標準形 定義 G = (N,Σ, P, S ) はその生成規則の形が A BC (A, B, C∈N ) または, Aa (A∈N, a∈Σ ) のとき Chomsky標準形であるという。 注:Chomsky標準形は空語 を含まない。 定理3.10 Chomsky標準形への変形 定理3.10 G = (N,Σ, P, S ) に対して、 L(G ) {} を生成する Chomsky 標準形の 文脈自由文法 G = (N,Σ, P, S ) を構成できる。 文脈自由文法 証明 証明 の S 以外の生成規則の形は A ( | | 2, ((N∪Σ{S})*) A a ( a ) であるとしてよい。 このとき G の生成規則を次のように置き換える。 定理3.9により、G A X1 X2 X3 X4 X5 ・・・ Xk Y1 Z1 Z2 Z1 Y2 Y3 Z 3 Z2 Zk-2 ・ ・ ・ Y Y k-1 k (Xi (N ){S}, k 2) Xi a ならば, Yi a 例3.19 G = (N,Σ, P, S ) を次の生成規則をもつ 文脈自由文法とする。 S AaAA Aa 等価なChomsky標準形の G’ をつくってみよう 定理3.11 挿入定理 定理3.11 G = (N, , P, S ) を文脈自由文法とする。 このとき整数 p(G) が存在して、|z| > p(G) なる 任意のz L(G) に対して、z の分解 z=uvwxy で次の (1)(3) を満たすものが存在する。 (1) すべての q 0 に対して、 u vq w xq y L(G) である。 (2) v または x である。 (3) |v w x| p(G) である。 証明の手引き (天下り的に)適当な p(G) をとる。 |z| > p(G) を満たす z∈L(G) について、 z の導出に対応する構文木を解析する。 以上の p(G)、z について、(1)(2)(3) が それぞれ成り立つことを確かめる。 証明(p(G)) 構文木の枝分かれの最大数は、 r = max{ || | A P } m 1 に対して、高さ m の構文木は 高々 rm 個の葉しかもたないことに注意。 p(G) = r2|N| とおく。 m rm個 証明(wを導出する構文木) p(G) = r2|N| zL(G) は |z| > p(G) を満たしているとする。 * z を,z を生成する最短の導出と仮定し、 S この導出に対応する構文木を T とする。 S 2|N|+1 以上 z ( |z| > r2|N| ) 証明(根から葉への最長パス ) S パス : S, X1, X2 , ・・・ , Xt , a X0 Xt+1 X1 X2 2|N|+1 以上 ・ ・ ・ Xt ・・・ a ・・・ z ( |z| > r2|N| ) X1 を根とする T の部分木を Ti ( 0 i t + 1 ) Ti に属する葉の個数を hi とすると h0 h1 ・・・ ht+1 = 1 証明(抽き出し法) h0 > r2|N| h0 h1 ・・・ ht+1 = 1 1 だから、ある s が存在して hs > r2|N| hs+1 となる。 Xi = Xj = X k = A (s i < j < k t) ・ ・ ・ Ts ・・・ ・・・ ・ ・ ・ 2|N|+1 以上 Ts+1 ・・・ ・・・ hs+1 hs 証明((3) |v w x| p(G) ) Xi = Xj = X k = A (s i < j < k t) * uX y S j * vX x Xj k * w Xk S Xj ・ ・ ・ Xk ・・・ u v ・・・ w x s i < j だから |v w x| hj hs+1 r2|N| y 証明((2) v または x ) S * uX y S j * vX x Xj k * w Xk Xj=A ・ ・ ・ Xk=A ・・・ u v ・・・ w x y * X v = x = とすると、A = Xj = Xk であるので、導出Xj k を短絡させて、より短い導出で z を導出できる。 * z が最短の導出であることに矛盾する。 これは、S 証明((1)q 0 に対して,u vq w xq yL(G)) S * uAy S * vAx A * w A Xj=A ・ ・ ・ Xk=A ・・・ u q v ・・・ w x y 0 について、 * uvAxy * uvqwxqy * uAy * ・・・ * uvqAxqy S となるので、u vq w xq y L(G) 例3.20 L = {anbncn | n 0} が文脈自由言語でない ことを挿入定理を用いて証明せよ。 3.6 決定性プッシュダウンオートマトン DPDAは和集合の演算について閉じていない。 L1 = {anbn | n≧1} と L2 = {anb2n | n≧1} について L1∪L2 ∈ NPDA は明らか。 (p43 命題3.3) L1∪L2 DPDA (定理3.13) よって DPDA≠NPDA 。(系3.13) 証明(略)
© Copyright 2024 ExpyDoc