§E18.3文脈自由言語

最終更新

文脈自由文法では、非終端記号を生成規則によって展開して語を作る。pushdown automaton は、有限制御に後入れ先出しのスタックを加えた機械であり、このスタックを用いて語を読む。本記事では、導出と構文木を定義し、空スタック受理と終状態受理の関係を明示したうえで、文脈自由文法と非決定性 pushdown automaton の表現力が一致することを両方向の有限構成によって証明する。

1 文法、導出、構文木

終端記号と非終端記号は互いに重ならない有限集合として固定する。

定義 1.1. 文脈自由文法 (context-free grammar)(CFG)は、四項組

G=(V,Σ,P,S)G=(V,\Sigma,P,S)

である。VVは有限な非終端記号集合、Σ\Sigmaは有限な終端記号集合であり、V∩Σ=∅V\cap\Sigma=\varnothingとする。S∈VS\in Vは開始記号である。PPは有限な生成規則集合であり、各規則は

A⟶γ(A∈V, γ∈(V∪Σ)∗)A\longrightarrow\gamma \qquad (A\in V,\ \gamma\in(V\cup\Sigma)^*)

の形をもつ。右辺γ=ε\gamma=\varepsilonも許す。

規則A→γA\to\gammaを用いて

αAβ⇒Gαγβ\alpha A\beta\Rightarrow_G\alpha\gamma\beta

と書く。⇒G\Rightarrow_Gの反射推移閉包を⇒G∗\Rightarrow_G^*と書き、

L(G)={w∈Σ∗:S⇒G∗w}L(G)=\{w\in\Sigma^*:S\Rightarrow_G^*w\}

をGGの生成言語 (generated language) という。ある CFG の生成言語である言語を文脈自由言語 (context-free language) という。

一段導出で置き換える非終端記号より左側に非終端記号がない場合、その導出を左端導出という。左端導出の反射推移閉包を⇒lm∗\Rightarrow_{\mathrm{lm}}^*と書く。

導出の途中では、非終端記号がまだ展開されずに残る。この状態も含めて木として表すため、導出木を、根を任意の非終端記号とし、未展開の葉を許す形で定義する。

定義 1.2. CFGG=(V,Σ,P,S)G=(V,\Sigma,P,S)とA∈VA\in Vに対して、AA-導出木 (A-derivation tree) は、根付き順序木であって、次を満たすものである。

  1. 根はAAで標識される。
  2. 各頂点はV∪Σ∪{ε}V\cup\Sigma\cup\{\varepsilon\}の元で標識される。Σ\Sigmaまたはε\varepsilonで標識された頂点は葉である。
  3. B∈VB\in Vで標識された頂点が子をもち、どの子もV∪ΣV\cup\Sigmaで標識されるならば、子の標識を左から並べた語X1⋯XkX_1\cdots X_kについて、B→X1⋯XkB\to X_1\cdots X_kはPPの規則である。
  4. B∈VB\in Vで標識された頂点の子が、ε\varepsilonで標識された一つの葉だけである場合、B→εB\to\varepsilonはPPの規則である。頂点が子をもつのは、条件 (c)または条件 (d)の場合に限る。

VVで標識された葉を未展開の葉 (unexpanded leaf) という。葉の標識を左から並べ、ε\varepsilonで標識された葉は記号を寄与しないものとして得られる(V∪Σ)∗(V\cup\Sigma)^*の元を、その木の成果 (yield)(yield)という。頂点vvに対して、vvを根とする部分木の成果をyield(v)\mathrm{yield}(v)と書く。

未展開の葉をもたないAA-導出木を完成した (completed)AA-導出木といい、その成果はΣ∗\Sigma^*に属する。完成したSS-導出木をGGの構文木 (parse tree) という。

任意の導出は、生成規則を左端から適用する導出へ並べ替えることができる。この事実を導出木を介して証明する。根を任意の非終端記号とするのは、証明の帰納段で部分木へ帰納法の仮定を適用するためである。

命題 1.3.G=(V,Σ,P,S)G=(V,\Sigma,P,S)、A∈VA\in Vおよびw∈Σ∗w\in\Sigma^*に対して、次の三条件は同値である。

  1. A⇒G∗wA\Rightarrow_G^*w。
  2. A⇒lm∗wA\Rightarrow_{\mathrm{lm}}^*w。
  3. 成果がwwである完成したAA-導出木が存在する。

とくにA=SA=Sの場合、三条件はw∈L(G)w\in L(G)と同値である。

証明.(2)⇒\Rightarrow(1)は直ちに従う。

(1)⇒\Rightarrow(3)を示す。導出

A=α0⇒Gα1⇒G⋯⇒Gαn=wA=\alpha_0\Rightarrow_G\alpha_1\Rightarrow_G\cdots\Rightarrow_G\alpha_n=w

を一つ取る。iiに関する帰納法で、成果がαi\alpha_iであるAA-導出木TiT_iを構成する。T0T_0はAAで標識された根だけからなる木とする。根は未展開の葉であり、子をもたないため、定義の四条件をすべて満たす。

TiT_iが得られたとする。一段導出αi=βBγ⇒Gβδγ=αi+1\alpha_i=\beta B\gamma\Rightarrow_G\beta\delta\gamma=\alpha_{i+1}が規則B→δB\to\deltaによるとする。TiT_iの成果はαi\alpha_iであるから、葉を左から読んだときβ\betaの直後に来る葉はBBで標識され、未展開である。この葉へ、δ\deltaの記号を左から順に子として付ける。δ=ε\delta=\varepsilonの場合にはε\varepsilonで標識された子を一つ付ける。得られる木Ti+1T_{i+1}は定義の四条件を満たすAA-導出木であり、その成果はβδγ=αi+1\beta\delta\gamma=\alpha_{i+1}である。

TnT_nの成果はw∈Σ∗w\in\Sigma^*であるから、TnT_nは未展開の葉をもたない。よってTnT_nは完成したAA-導出木である。

(3)⇒\Rightarrow(2)を示す。完成したAA-導出木の内部頂点数に関する帰納法を用いる。

内部頂点が根だけである場合、根の子はすべて葉であり、Σ\Sigmaまたはε\varepsilonで標識される。定義の定義 1.2 条件 (c)または定義 1.2 条件 (d)により、根に対応する規則を一度適用すれば成果wwを得る。

一般の場合、根の子を左からX1,…,XkX_1,\ldots,X_kとする。子がε\varepsilonで標識された一つの葉だけである場合は上の基底に含まれるため、どの子もV∪ΣV\cup\Sigmaで標識されるとしてよい。まず規則

A→X1⋯XkA\to X_1\cdots X_k

を適用する。Xj∈VX_j\in Vである子uju_jについて、uju_jを根とする部分木は完成したXjX_j-導出木であり、その内部頂点数は元の木より真に少ない。帰納法の仮定により、yield(uj)=wj\mathrm{yield}(u_j)=w_jに対してXj⇒lm∗wjX_j\Rightarrow_{\mathrm{lm}}^*w_jが成り立つ。この左端導出を、jjの小さい順に適用する。Xj∈ΣX_j\in\Sigmaである子は、その終端記号をそのまま寄与する。

左側の子をすべて処理し終えた時点では、その左側はすべて終端記号であるから、次の部分木に対する左端導出は木全体でも左端導出である。最後の子まで続けると、木の成果wwを得る。

最後に、A=SA=Sの場合を考える。定義 1.1によりw∈L(G)w\in L(G)はS⇒G∗wS\Rightarrow_G^*wと同値であるから、三条件はいずれもw∈L(G)w\in L(G)と同値である。▨

例 1.4. 開始記号をSSとし、生成規則を

S→aSb∣εS\to aSb\mid\varepsilon

とする。この文法の生成言語は

{anbn:n≥0}\{a^n b^n:n\ge 0\}

である。

実際、S→aSbS\to aSbをnn回適用してからS→εS\to\varepsilonを適用すればanbna^n b^nを得る。

逆向きには、文形式に関する次の不変量を導出の長さに関する帰納法で示す。SSから到達することができる文形式は、akSbka^kSb^kまたはakbka^kb^k(k≥0k\ge 0)の形に限る。実際、初期の文形式はa0Sb0a^0Sb^0である。akSbka^kSb^kにS→aSbS\to aSbを適用するとak+1Sbk+1a^{k+1}Sb^{k+1}を得て、S→εS\to\varepsilonを適用するとakbka^kb^kを得る。akbka^kb^kには非終端記号がないため、これ以上の一段導出は存在しない。個数の一致だけではababababのような語を排除することができないが、この不変量は語の形まで定めている。終端語である文形式はakbka^kb^kの形に限るため、生成言語は{anbn:n≥0}\{a^nb^n:n\ge 0\}である。

2 Pushdown automaton と受理方式

スタックの左端を上端とする。したがって、スタック語XβX\betaではXXが上端記号である。

定義 2.1. 非決定性 pushdown automaton (nondeterministic pushdown automaton)(PDA)は、七項組

M=(Q,Σ,Γ,δ,q0,Z0,F)M=(Q,\Sigma,\Gamma,\delta,q_0,Z_0,F)

である。QQは有限状態集合、Σ\Sigmaは有限入力アルファベット、Γ\Gammaは有限スタックアルファベット、q0∈Qq_0\in Qは初期状態、Z0∈ΓZ_0\in\Gammaは初期スタック記号、F⊆QF\subseteq Qは受理状態集合である。遷移関数は

δ:Q×(Σ∪{ε})×Γ⟶Pfin(Q×Γ∗)\delta:Q\times(\Sigma\cup\{\varepsilon\})\times\Gamma \longrightarrow\mathcal{P}_{\mathrm{fin}}(Q\times\Gamma^*)

である。

配置 (configuration) は(q,w,α)∈Q×Σ∗×Γ∗(q,w,\alpha)\in Q\times\Sigma^*\times\Gamma^*である。(p,γ)∈δ(q,a,X)(p,\gamma)\in\delta(q,a,X)ならば

(q,aw,Xβ)⊢M(p,w,γβ)(q,aw,X\beta)\vdash_M(p,w,\gamma\beta)

とし、(p,γ)∈δ(q,ε,X)(p,\gamma)\in\delta(q,\varepsilon,X)ならば

(q,w,Xβ)⊢M(p,w,γβ)(q,w,X\beta)\vdash_M(p,w,\gamma\beta)

とする。第一の遷移は入力aaを一文字消費し、第二の遷移は入力を消費しない。いずれも上端記号XXを語γ\gammaに置き換える。

PDA には二つの標準的な受理方式がある。

定義 2.2. PDAM=(Q,Σ,Γ,δ,q0,Z0,F)M=(Q,\Sigma,\Gamma,\delta,q_0,Z_0,F)が語wwを終状態で受理する (accept by final state) とは、あるf∈Ff\in Fとα∈Γ∗\alpha\in\Gamma^*が存在して

(q0,w,Z0)⊢M∗(f,ε,α)(q_0,w,Z_0)\vdash_M^*(f,\varepsilon,\alpha)

となることをいう。

受理状態集合を用いない PDA が語wwを空スタックで受理する (accept by empty stack) とは、あるq∈Qq\in Qが存在して

(q0,w,Z0)⊢M∗(q,ε,ε)(q_0,w,Z_0)\vdash_M^*(q,\varepsilon,\varepsilon)

となることをいう。

どちらの定義でも、入力全体を消費しなければ受理にならない。PDA は、空語遷移だけで受理状態または空スタックへ到達する場合には、空語を受理する。

定理 2.3. 終状態で受理する PDA と空スタックで受理する PDA は、同じ言語のクラスを受理する。

証明. 最初に、終状態で受理する

M=(Q,Σ,Γ,δ,q0,Z0,F)M=(Q,\Sigma,\Gamma,\delta,q_0,Z_0,F)

を空スタック受理へ変換する。QQに属さない新しい状態s,ds,dと、Γ\Gammaに属さない新しい底記号⊥\botをとる。新しい PDA は底記号⊥\botだけを初期スタックとし、

(s,w,⊥)⊢(q0,w,Z0⊥)(s,w,\bot)\vdash(q_0,w,Z_0\bot)

という空語遷移をもつ。MMの遷移はすべてそのまま複製する。さらに、各f∈Ff\in FとX∈Γ∪{⊥}X\in\Gamma\cup\{\bot\}に対して

(f,w,Xβ)⊢(d,w,Xβ)(f,w,X\beta)\vdash(d,w,X\beta)

という空語遷移を加え、ddでは各X∈Γ∪{⊥}X\in\Gamma\cup\{\bot\}を空語遷移で取り除く。

MMがwwを終状態で受理するなら、新しい機械はその計算を模倣し、状態ddへ移ってスタック全体を空にする。逆に、新しい機械が入力をすべて消費してスタックを空にするには、状態ddへ入らなければならず、その直前にはMMの受理状態にいる。状態ddには入力を消費する遷移がないため、その時点で入力はすでに空である。したがって、変換前後の受理言語は等しい。

次に、空スタックで受理する PDAMMを終状態受理へ変換する。QQに属さない新しい状態s,fs,fと、Γ\Gammaに属さない新しい底記号⊥\botをとる。初期スタックを⊥\botとし、空語遷移でssからq0q_0へ移るときに⊥\botをZ0⊥Z_0\botへ置き換える。MMの遷移をすべて複製し、各q∈Qq\in Qについて、上端が⊥\botになったときに空語遷移でffへ移り、⊥\botは残す。ffを唯一の受理状態とし、ffからの遷移は置かない。

MMが入力全体を消費して元のスタックを空にしたとき、新しい機械の上端は⊥\botであるためffへ移ることができる。逆に、新しい機械がffで入力全体を消費しているなら、ffへ入る直前には上端が⊥\botであり、元のスタックは空である。よって、この変換も受理言語を保存する。▨

上の証明で加えた新しい状態と底記号は、元の状態集合およびスタックアルファベットに属さないものを選ばなければならない。既存の記号を再利用すると、元の計算と受理後のスタック消去を区別することができない場合がある。

3 文脈自由文法から PDA へ

次の定理で構成する PDA は、CFG の左端導出を、スタックの上端にある左端記号の展開として実行する。

定理 3.1. 任意の CFGGGに対して、L(MG)=L(G)L(M_G)=L(G)を空スタックで受理する PDAMGM_Gを構成することができる。

証明.G=(V,Σ,P,S)G=(V,\Sigma,P,S)とする。一状態qqをもち、スタックアルファベットを

Γ=V∪Σ\Gamma=V\cup\Sigma

とし、初期スタック記号をSSとする PDAMGM_Gを構成する。各生成規則A→γA\to\gammaに対して

(q,γ)∈δ(q,ε,A)(q,\gamma)\in\delta(q,\varepsilon,A)

とし、各a∈Σa\in\Sigmaに対して

(q,ε)∈δ(q,a,a)(q,\varepsilon)\in\delta(q,a,a)

とする。前者は上端の非終端記号を規則の右辺へ置き換え、後者は入力の先頭文字と上端の終端記号が一致するときに両方を取り除く。

入力wwの接頭辞xxをすでに消費し、残りがyyで、スタックがα\alphaである配置

(q,y,α)(q,y,\alpha)

に対して、文形式xαx\alphaを対応させる。初期配置ではx=εx=\varepsilon、α=S\alpha=Sであるため、対応する文形式はSSである。

生成規則に対応する空語遷移が

(q,y,Aβ)⊢(q,y,γβ)(q,y,A\beta)\vdash(q,y,\gamma\beta)

を与えるとき、対応する文形式は

xAβ⇒GxγβxA\beta\Rightarrow_G x\gamma\beta

と変化する。xxは消費済みの終端語であるため、この導出は左端導出である。終端記号を照合する遷移

(q,ay,aβ)⊢(q,y,β)(q,ay,a\beta)\vdash(q,y,\beta)

では、消費済み接頭辞がxxからxaxaへ変わるが、対応する文形式は遷移の前後でともにxaβxa\betaであり、文法の導出は進まない。

したがって、MGM_Gに受理計算

(q,w,S)⊢∗(q,ε,ε)(q,w,S)\vdash^*(q,\varepsilon,\varepsilon)

が存在するなら、遷移列に沿って上の対応を適用することにより

S⇒lm∗wS\Rightarrow_{\mathrm{lm}}^*w

を得る。よってw∈L(G)w\in L(G)である。

逆にw∈L(G)w\in L(G)とする。命題 1.3により、左端導出

S⇒lm∗wS\Rightarrow_{\mathrm{lm}}^*w

が存在する。左端導出の各生成規則を、上端非終端記号を置き換える空語遷移で順に模倣する。文形式の先頭に終端記号が現れるたび、その文字を入力とスタックから同時に取り除く。左端導出であるため、次に展開する非終端記号より左側の終端記号はすべてこの方法で照合することができる。導出がwwに達した後、残る終端記号をすべて照合すると、入力とスタックが同時に空になる。したがってMGM_Gはwwを空スタックで受理する。ゆえにL(MG)=L(G)L(M_G)=L(G)である。▨

定理 2.3を適用すれば、同じ言語を終状態で受理する PDA も得られる。

4 PDA から文脈自由文法へ

逆向きの構成では、一つのスタック記号を取り除いてその下のスタック部分へ初めて戻るまでの計算区間を、一つの非終端記号で表す。

定義 4.1 (保護された計算区間). PDAMMの状態p,qp,q、スタック記号XX、語wwに対して

p⇒Xwqp\xRightarrow[X]{w}q

で表す関係を 保護された計算区間 (protected computation segment) といい、任意のスタック接尾辞β\betaに対して、入力wwをちょうど消費する計算

(p,w,Xβ)⊢M∗(q,ε,β)(p,w,X\beta)\vdash_M^*(q,\varepsilon,\beta)

が存在し、終点より前のすべての配置のスタックがρβ\rho\beta(ρ∈Γ+\rho\in\Gamma^+)の形をもつとき、かつそのときに限りp⇒Xwqp\xRightarrow[X]{w}qと定める。この計算は、最後の一手まで接尾辞β\betaの記号を読み書きしない。

遷移は上端だけを参照するため、あるβ\betaについて保護された計算が存在すれば、同じ遷移列を任意のβ\betaの上で実行することができる。したがって、定義中の「任意の接尾辞」を一つの接尾辞に置き換えても、定義される関係は変わらない。

定理 4.2. 任意の PDAMMに対して、L(GM)=L(M)L(G_M)=L(M)を満たす CFGGMG_Mを構成することができる。

証明.定理 2.3によって、MMは空スタックで受理すると仮定してよい。MMを

M=(Q,Σ,Γ,δ,q0,Z0)M=(Q,\Sigma,\Gamma,\delta,q_0,Z_0)

と書く。

各p,q∈Qp,q\in QとX∈ΓX\in\Gammaに対して、新しい非終端記号

[pXq][pXq]

を用意する。非終端記号[pXq][pXq]は入力記号およびスタック記号とは異なる形式的な記号である。さらに新しい開始記号S0S_0を用意し、各q∈Qq\in Qに対して

S0→[q0Z0q]S_0\to[q_0Z_0q]

を生成規則に加える。

PDA の遷移

(r,Y1⋯Yk)∈δ(p,a,X),a∈Σ∪{ε}(r,Y_1\cdots Y_k)\in\delta(p,a,X), \qquad a\in\Sigma\cup\{\varepsilon\}

を一つ固定する。k≥1k\ge 1の場合、任意の中間状態

s1,…,sk−1∈Qs_1,\ldots,s_{k-1}\in Q

と終状態q∈Qq\in Qに対して

[pXq]→a‾ [rY1s1][s1Y2s2]⋯[sk−1Ykq][pXq]\to \overline{a}\,[rY_1s_1][s_1Y_2s_2]\cdots [s_{k-1}Y_kq]

という展開規則を加える。ここで、a∈Σa\in\Sigmaならa‾=a\overline{a}=aとし、a=εa=\varepsilonならa‾\overline{a}は空語を表す。k=0k=0の場合には

[pXr]→a‾[pXr]\to\overline{a}

という消去規則を加える。Q,ΓQ,\Gammaおよび遷移集合が有限であり、各遷移が有限長のスタック語を押し込むため、この文法の非終端記号と生成規則は有限個である。

次の不変量を証明する。

[pXq]⇒GM∗w⟺p⇒Xwq.[pXq]\Rightarrow_{G_M}^*w \quad\Longleftrightarrow\quad p\xRightarrow[X]{w}q.

左から右を、完成した[pXq][pXq]-導出木の内部頂点数に関する帰納法で示す。命題 1.3は根を任意の非終端記号とする形で述べてあるため、GMG_Mの開始記号でない[pXq][pXq]を根とする導出木にも適用することができる。根で展開規則を用いたとする。PDA は最初に入力aaを消費するか、a=εa=\varepsilonの場合には入力を消費せず、

(p,a‾w1⋯wk,Xβ)⊢(r,w1⋯wk,Y1⋯Ykβ)(p,\overline{a}w_1\cdots w_k,X\beta) \vdash (r,w_1\cdots w_k,Y_1\cdots Y_k\beta)

と遷移する。各子の部分木は根の木より小さいため、帰納法の仮定により、wiw_iを消費してYiY_iを取り除き、状態を一つ前の中間状態から次の中間状態へ移す保護された計算が存在する。各子部分木に対応する保護された計算を左から順に連結すると、XXを取り除いて状態qqに至る保護された計算を得る。消去規則の場合には、最初の一遷移がXXを直ちに取り除くため主張が成り立つ。

右から左を、保護された計算の遷移回数に関する帰納法で示す。p⇒Xwqp\xRightarrow[X]{w}qを与える計算の最初の遷移を

(r,Y1⋯Yk)∈δ(p,a,X)(r,Y_1\cdots Y_k)\in\delta(p,a,X)

とする。k=0k=0ならば、この一遷移で接尾辞β\betaが露出する。保護された計算はその時点で終わらなければならないためq=rq=r、w=a‾w=\overline aであり、消去規則が[pXq]⇒∗w[pXq]\Rightarrow^*wを与える。

k≥1k\ge 1とする。計算は接尾辞β\betaに触れずにY1⋯YkY_1\cdots Y_kをすべて取り除く。各i=1,…,ki=1,\ldots,kについて、スタック全体が初めてYi+1⋯YkβY_{i+1}\cdots Y_k\betaに一致する時点をとる。ただしi=ki=kでは、スタックが初めてβ\betaになる終点をとる。スタック記号が重複する場合があるため、上端の記号ではなくスタック語全体で時点を定める。このような時点は、スタックが上端からしか変更されず、最終的にβ\betaへ戻るため必ず存在する。その時点の状態をsis_iとし、sk=qs_k=qとする。最初の遷移後からこれらの時点までに消費される入力を順にw1,…,wkw_1,\ldots,w_kと書くと、

w=a‾w1⋯wkw=\overline a w_1\cdots w_k

であり、

r⇒Y1w1s1,s1⇒Y2w2s2,…,sk−1⇒Ykwkqr\xRightarrow[Y_1]{w_1}s_1,\quad s_1\xRightarrow[Y_2]{w_2}s_2,\quad\ldots,\quad s_{k-1}\xRightarrow[Y_k]{w_k}q

が成り立つ。各区間は元の計算より遷移回数が少ないため、帰納法の仮定から

[rY1s1]⇒∗w1,…,[sk−1Ykq]⇒∗wk[rY_1s_1]\Rightarrow^*w_1,\quad\ldots,\quad [s_{k-1}Y_kq]\Rightarrow^*w_k

を得る。対応する展開規則を最初に適用し、各小区間に対応する導出を続ければ[pXq]⇒∗w[pXq]\Rightarrow^*wを得る。以上の二方向の帰納法によって、不変量の証明が完了する。

最後に、

w∈L(GM)⟺ある q∈Q について [q0Z0q]⇒∗w⟺ある q∈Q について q0⇒Z0wq⟺M が w を空スタックで受理する\begin{aligned} w\in L(G_M) &\Longleftrightarrow \text{ある }q\in Q\text{ について }[q_0Z_0q]\Rightarrow^*w\\ &\Longleftrightarrow \text{ある }q\in Q\text{ について }q_0\xRightarrow[Z_0]{w}q\\ &\Longleftrightarrow M\text{ が }w\text{ を空スタックで受理する} \end{aligned}

となる。よってL(GM)=L(M)L(G_M)=L(M)である。▨

二つの変換をまとめる。

定理 4.3. 有限アルファベットΣ\Sigma上の言語L⊆Σ∗L\subseteq\Sigma^*について、次の条件は同値である。

  1. LLはある文脈自由文法によって生成される。
  2. LLはある非決定性 PDA によって空スタックで受理される。
  3. LLはある非決定性 PDA によって終状態で受理される。

証明.(1)⇒\Rightarrow(2)は定理 3.1による。(2)⇔\Leftrightarrow(3)は定理 2.3による。(3)⇒\Rightarrow(1)は、終状態受理を空スタック受理へ変換した後、定理 4.2を適用すれば従う。▨

5 正規言語との関係

先行記事で扱った有限オートマトンの状態遷移は、右端の非終端記号の展開として書き直すことができる。この書き直しにより、正規言語が文脈自由言語であることが従う。

命題 5.1.Σ\Sigma上の任意の正規言語LLに対して、L(G)=LL(G)=Lとなる CFGGGが存在する。

証明.§E18.2 定義 1.1により、L=L(A)L=L(A)となる DFAA=(Q,Σ,δ,qℓ,F)A=(Q,\Sigma,\delta,q_\ell,F)を取る。Q={q1,…,qn}Q=\{q_1,\ldots,q_n\}と番号づけ、QQ、Σ\Sigmaのいずれにも属さない新しい非終端記号B1,…,BnB_1,\ldots,B_nを用意する。V:={B1,…,Bn}V:=\{B_1,\ldots,B_n\}とし、生成規則を

Bi→aBj(a∈Σ, δ(qi,a)=qj),Bi→ε(qi∈F)B_i\to aB_j\quad(a\in\Sigma,\ \delta(q_i,a)=q_j), \qquad B_i\to\varepsilon\quad(q_i\in F)

とする。開始記号はBℓB_\ellとする。QQとΣ\Sigmaが有限であるから、規則は有限個である。

以下では、§E18.1 補題 1.3の後半の形δ^(q,au)=δ^(δ(q,a),u)\widehat{\delta}(q,au)=\widehat{\delta}(\delta(q,a),u)を用いる。

各iiと各w∈Σ∗w\in\Sigma^*について

Bi⇒G∗w⟺δ^(qi,w)∈FB_i\Rightarrow_G^*w \quad\Longleftrightarrow\quad \widehat{\delta}(q_i,w)\in F

を、wwの長さに関する帰納法で示す。

w=εw=\varepsilonとする。BiB_iを左辺とする規則のうち、Bi→aBjB_i\to aB_jを適用した文形式は先頭に終端記号aaをもち、以後の適用でそのaaが消えることはない。したがってBi⇒G∗εB_i\Rightarrow_G^*\varepsilonとなるのはBi→εB_i\to\varepsilonが規則である場合に限り、それはqi∈Fq_i\in Fと同値である。一方δ^(qi,ε)=qi\widehat{\delta}(q_i,\varepsilon)=q_iであるから、両辺は同値である。

w=au′w=au'とする。Bi⇒G∗au′B_i\Rightarrow_G^*au'が成り立つとする。最初に適用する規則がBi→εB_i\to\varepsilonであれば文形式はε\varepsilonとなり、au′≠εau'\ne\varepsilonに達することはない。よって最初の規則はBi→aBjB_i\to aB_jの形であり、先頭の終端記号が一致するためδ(qi,a)=qj\delta(q_i,a)=q_jである。残りの導出はBj⇒G∗u′B_j\Rightarrow_G^*u'を与える。逆に、δ(qi,a)=qj\delta(q_i,a)=q_jかつBj⇒G∗u′B_j\Rightarrow_G^*u'ならば、Bi→aBjB_i\to aB_jを最初に適用してBi⇒G∗au′B_i\Rightarrow_G^*au'を得る。帰納法の仮定によりBj⇒G∗u′B_j\Rightarrow_G^*u'はδ^(qj,u′)∈F\widehat{\delta}(q_j,u')\in Fと同値であり、上で示した等式により

δ^(qj,u′)=δ^(δ(qi,a),u′)=δ^(qi,au′)\widehat{\delta}(q_j,u')=\widehat{\delta}(\delta(q_i,a),u')=\widehat{\delta}(q_i,au')

である。よって両辺は同値である。

i=ℓi=\ellとすれば、w∈L(G)w\in L(G)とδ^(qℓ,w)∈F\widehat{\delta}(q_\ell,w)\in Fが同値である。§E18.1 定義 1.4により後者はw∈L(A)=Lw\in L(A)=Lと同値であるから、L(G)=LL(G)=Lである。▨

命題 5.1と定理 4.3により、正規言語の全体は文脈自由言語の全体に含まれる。この包含が真であることは、§E18.2 命題 5.5と例 1.4から従う。

6 具体例

言語{anbn:n≥0}\{a^nb^n:n\ge 0\}を受理する専用の PDA を直接構成する。この PDA は、定理 3.1の一般構成で得られる機械とは別の機械である。

命題 6.1. 言語

{anbn:n≥0}\{a^n b^n:n\ge 0\}

を終状態で受理する PDA が存在する。

証明. 新しい底記号を⊥\bot、個数を記録する記号をXXとする。初期状態qsq_sから、入力を消費しない二つの選択を置く。一つは空語を受理する状態qfq_fへ移る選択であり、もう一つはaaを読む状態qaq_aへ移る選択である。

qaq_aではaaを一文字読むたびにXXを一つ積む。最初のbbを読むときにqbq_bへ移り、XXを一つ取り除く。qbq_bではbbを一文字読むたびにXXを一つ取り除く。qbq_bで上端が⊥\botになったときに、空語遷移でqfq_fへ移る。qfq_fから遷移は置かない。

定義 2.1の遷移関数は入力の残りを参照しないため、「入力を読み終えた」という条件を遷移の側に書くことはできない。上の遷移は入力が残っていても起こり得るが、qfq_fから出る遷移が一つもないため、その場合は入力を消費し切ることができず受理に至らない。定義 2.2が入力全体の消費を要求することが、この点を担っている。

qaq_aでaaをkk個読んだ直後のスタックがXk⊥X^k\botであることはkkに関する帰納法で従う。qbq_bでbbをjj個読んだ後、j≤kj\le kならスタックはXk−j⊥X^{k-j}\botである。j>kj>kなら取り除くXXが存在しないため計算は停止する。また、qbq_bではaaを読む遷移がなく、qaq_aへ戻る遷移もない。したがって、空語以外で受理される語はakbka^k b^kに限る。

逆に、anbna^n b^nではn=0n=0のとき初期状態から直接qfq_fへ移る。n>0n>0のとき、aaを読むたびにXXを積み、続くbbを読むたびにXXを取り除けば、入力の終端で上端が⊥\botになりqfq_fへ移ることができる。よって、受理言語はちょうど{anbn:n≥0}\{a^n b^n:n\ge0\}である。▨

7 文脈自由言語の限界

定理 4.3により、文脈自由文法で生成される言語のクラスと、PDA で受理される言語のクラスは一致する。このクラスがすべての言語を含むわけではないことを、構文木の形に対する制約から導く。

頂点vvの成果yield(v)\mathrm{yield}(v)は定義 1.2で定めた。あわせて、vvから葉へ至る道の辺数の最大値をvvの高さといい、根の高さを木の高さという。

補題 7.1. CFGG=(V,Σ,P,S)G=(V,\Sigma,P,S)に対して

b:=max⁡({2}∪{∣γ∣:A→γ∈P})b:=\max\bigl(\{2\}\cup\{|\gamma|:A\to\gamma\in P\}\bigr)

と置く。右辺の集合は22を要素にもつ有限集合であるから、P=∅P=\varnothingの場合を含めてbbは定まり、b≥2b\ge 2である。また、PPの各規則A→γA\to\gammaについて∣γ∣≤b|\gamma|\le bである。GGの構文木の任意の頂点vvについて、vvの高さがhhならば∣yield(v)∣≤bh|\mathrm{yield}(v)|\le b^{h}である。

証明.hhに関する帰納法を用いる。

h=0h=0のとき、vvは葉であり、定義 1.2によって終端記号またはε\varepsilonで標識される。したがって∣yield(v)∣≤1=b0|\mathrm{yield}(v)|\le 1=b^0である。

h≥1h\ge 1とする。vvの子を左からu1,…,uku_1,\ldots,u_kとする。vvが規則A→γA\to\gammaに対応するならばk=∣γ∣≤bk=|\gamma|\le bであり、vvが規則A→εA\to\varepsilonに対応するならばk=1≤bk=1\le bである。各uiu_iの高さは高々h−1h-1であるから、帰納法の仮定により∣yield(ui)∣≤bh−1|\mathrm{yield}(u_i)|\le b^{h-1}である。yield(v)\mathrm{yield}(v)はyield(u1)⋯yield(uk)\mathrm{yield}(u_1)\cdots\mathrm{yield}(u_k)に等しいから

∣yield(v)∣≤k bh−1≤b⋅bh−1=bh|\mathrm{yield}(v)|\le k\,b^{h-1}\le b\cdot b^{h-1}=b^{h}

である。▨

非終端記号は有限個であるから、成果が長い構文木には、根から葉への一本の道の上に同じ非終端記号が二度現れる。同じ非終端記号で標識された二つの頂点にはさまれた部分を、繰り返すことができる。

定理 7.2 (文脈自由言語のポンピング補題).LLを文脈自由言語とする。このとき、LLだけに依存する定数N≥1N\ge 1が存在して、∣w∣≥N|w|\ge Nを満たす任意のw∈Lw\in Lは

w=uvxyz(u,v,x,y,z∈Σ∗)w=uvxyz \qquad(u,v,x,y,z\in\Sigma^*)

の形に分解することができ、次の三条件を満たす。

  1. ∣vxy∣≤N|vxy|\le N。
  2. vy≠εvy\ne\varepsilon。
  3. すべてのi≥0i\ge 0についてuvixyiz∈Luv^ixy^iz\in L。

証明.L=L(G)L=L(G)となる CFGG=(V,Σ,P,S)G=(V,\Sigma,P,S)を取り、補題 7.1のbbを用いて

N:=b∣V∣+1N:=b^{|V|+1}

と置く。w∈Lw\in Lが∣w∣≥N|w|\ge Nを満たすとする。

命題 1.3により、成果がwwである構文木が存在する。そのような構文木の頂点数は正の整数であるから、頂点数が最小であるものを一つ取り、TTと書く。

TTの根から葉へ至る道のうち、辺数が最大であるものを一つ取り、π\piと書く。その辺数をhhとする。根から葉へ至る道の辺数の最大値は根の高さであるから、補題 7.1によりbh≥∣w∣≥N=b∣V∣+1b^{h}\ge|w|\ge N=b^{|V|+1}である。b≥2b\ge 2であるからh≥∣V∣+1h\ge|V|+1である。

π\pi上の頂点はh+1h+1個ある。末端の葉を除くhh個は子をもつため、定義 1.2 条件 (c)または定義 1.2 条件 (d)により非終端記号で標識される。h≥∣V∣+1h\ge|V|+1であるから、π\pi上で葉に近い側から非終端記号で標識された頂点を∣V∣+1|V|+1個取ることができる。非終端記号は∣V∣|V|種類であるから、鳩の巣原理により、この∣V∣+1|V|+1個のうち二つは同じ非終端記号AAで標識される。π\pi上で上にある方をr1r_1、下にある方をr2r_2とする。

π\piは根から葉へ至る道のうち辺数が最大であるから、π\pi上の頂点ppの高さは、π\piのうちppより下にある部分の辺数に等しい。実際、ppを根とする部分木に、ppから葉へ至るより長い道があれば、π\piのppより下を差し替えてπ\piより長い道を得るからである。r1r_1はπ\pi上で葉から数えて高々∣V∣+1|V|+1番目の非終端記号頂点であるから、π\piのうちr1r_1より下にある部分の辺数は高々∣V∣+1|V|+1であり、r1r_1の高さは高々∣V∣+1|V|+1である。したがって補題 7.1により

∣yield(r1)∣≤b∣V∣+1=N|\mathrm{yield}(r_1)|\le b^{|V|+1}=N

である。

r2r_2はr1r_1の真の子孫であるから、yield(r2)\mathrm{yield}(r_2)はyield(r1)\mathrm{yield}(r_1)の連続部分語であり、

yield(r1)=v yield(r2) y\mathrm{yield}(r_1)=v\,\mathrm{yield}(r_2)\,y

と一意に分かれる。x:=yield(r2)x:=\mathrm{yield}(r_2)と置く。同様にyield(r1)\mathrm{yield}(r_1)はwwの連続部分語であるからw=u yield(r1) zw=u\,\mathrm{yield}(r_1)\,zと分かれる。以上によりw=uvxyzw=uvxyzであり、∣vxy∣=∣yield(r1)∣≤N|vxy|=|\mathrm{yield}(r_1)|\le Nであるから条件 (a)が成り立つ。

ここで、二つの木を用意する。TTのr1r_1を根とする部分木を、r2r_2を根とする部分木で置き換えて得られる木をT−T^-とする。また、TTのr2r_2を根とする部分木を、r1r_1を根とする部分木の複製で置き換えて得られる木をT+T^+とする。r1r_1とr2r_2はともにAAで標識されるから、いずれの置き換えでも定義 1.2の四条件は保たれ、T−T^-とT+T^+はともに構文木である。成果はそれぞれuxzuxzとuv2xy2zuv^2xy^2zである。この二つの構成は、以下の仮定に依存しない。

条件 (b)を示す。v=y=εv=y=\varepsilonと仮定する。このときT−T^-の成果はuxz=uvxyz=wuxz=uvxyz=wでありTTと等しい。一方、r2r_2はr1r_1の真の子孫であるから、T−T^-の頂点数はTTの頂点数より真に少ない。これはTTの最小性に反する。よってvy≠εvy\ne\varepsilonである。

条件 (c)を示す。i=0i=0の場合、T−T^-が成果uxzuxzの構文木を与える。i≥1i\ge 1の場合、TTからT+T^+を作る操作を繰り返す。複製された部分木の中にはr2r_2に対応する頂点が再び現れるため、同じ操作をその頂点に対して適用することができる。操作の前後で成果はuvkxykzuv^kxy^kzからuvk+1xyk+1zuv^{k+1}xy^{k+1}zへ変わり、TTの成果がuvxyzuvxyzであることから、操作をi−1i-1回行えば成果uvixyizuv^ixy^izの構文木を得る。いずれの場合も命題 1.3によりuvixyiz∈L(G)=Luv^ixy^iz\in L(G)=Lである。▨

補題の条件 (a)により、繰り返す部分語v,yv,yは、長さNN以下の連続部分語vxyvxyの中にある。a,b,ca,b,cをこの順に同数ずつ並べた語からなる言語では、この制約から矛盾が導かれる。

命題 7.3.Σ={a,b,c}\Sigma=\{a,b,c\}とする。言語

L={anbncn:n≥0}L=\{a^nb^nc^n:n\ge 0\}

は文脈自由言語ではない。

証明.LLが文脈自由であると仮定し、定理 7.2の定数NNを取る。w:=aNbNcNw:=a^Nb^Nc^Nと置くとw∈Lw\in Lかつ∣w∣=3N≥N|w|=3N\ge Nであるから、三条件を満たす分解w=uvxyzw=uvxyzが存在する。

wwにおいて、aaが占める位置は11からNN、ccが占める位置は2N+12N+1から3N3Nである。aaの位置とccの位置をともに含む連続部分語の長さは(2N+1)−N+1=N+2(2N+1)-N+1=N+2以上であり、定理 7.2 条件 (a)の∣vxy∣≤N|vxy|\le Nに反する。したがって、連続部分語vxyvxyはaaとccの両方を含むことはない。

よってvyvyに現れる文字は{a,b}\{a,b\}または{b,c}\{b,c\}のいずれかに含まれ、a,b,ca,b,cのうち少なくとも一種の文字σ\sigmaはvyvyに現れない。

i=2i=2を取る。w=uvxyzw=uvxyzであるから、uv2xy2zuv^2xy^2zにおける各文字の個数は、wwにおける個数にvyvyにおける個数を加えたものである。したがってσ\sigmaの個数はNNのままである。一方、定理 7.2 条件 (b)によりvy≠εvy\ne\varepsilonであるから、vyvyに現れる文字τ\tauが存在し、uv2xy2zuv^2xy^2zにおけるτ\tauの個数はNNより真に大きい。σ≠τ\sigma\ne\tauであるから、uv2xy2zuv^2xy^2zでは三種の文字の個数が等しくない。ゆえにuv2xy2z∉Luv^2xy^2z\notin Lであり、これは定理 7.2 条件 (c)に反する。よってLLは文脈自由言語ではない。▨

命題 5.1により正規言語の全体が文脈自由言語の全体に含まれることが示され、§E18.2 命題 5.5と例 1.4によりこの包含が真であることが示される。命題 7.3により、PDA で受理することができない言語が存在することが示される。

8 演習

問題 8.1.

  1. S→aSb∣SS∣εS\to aSb\mid SS\mid\varepsilonの構文木を一つ描き、成果がaabbabaabbabとなる左端導出を構成せよ。
  2. 定理 3.1の PDA が、規則S→εS\to\varepsilonをもつ文法について空語を受理する計算を配置の列で示せ。
  3. 空スタックで受理する PDAMMを、状態集合{r,s}\{r,s\}、スタック記号{Z,Y}\{Z,Y\}、初期状態rr、初期スタック記号ZZ、遷移(r,YY)∈δ(r,ε,Z)(r,YY)\in\delta(r,\varepsilon,Z)、(r,ε)∈δ(r,a,Y)(r,\varepsilon)\in\delta(r,a,Y)、(s,ε)∈δ(r,b,Y)(s,\varepsilon)\in\delta(r,b,Y)、(s,ε)∈δ(s,b,Y)(s,\varepsilon)\in\delta(s,b,Y)で定める。MMが空スタックで受理する言語を求めよ。また、定理 4.2の生成規則のうち、中間状態s1s_1をrrに固定した展開規則だけを残した文法の言語を求め、二つの言語が異なることを示せ。
  4. 終状態受理から空スタック受理への変換で、排出状態ddが入力文字を消費する遷移をもつと受理言語が変わり得ることを示せ。
  5. 言語LLが「定数NNが存在し、∣w∣≥N|w|\geq Nを満たす任意のw∈Lw\in Lが定理 7.2 条件 (b)と定理 7.2 条件 (c)を満たす分解w=uvxyzw=uvxyzをもつ」という性質をもつとき、LLは弱いポンピング性質をもつという。定理 7.2 条件 (a)を課さない点だけが定理 7.2と異なる。{anbncn:n≥0}\{a^nb^nc^n:n\geq0\}は弱いポンピング性質をもたないことを示せ。一方、L′={anbmcndm:n,m≥0}L'=\{a^nb^mc^nd^m:n,m\geq0\}は弱いポンピング性質をもつが、定理 7.2により文脈自由でないことを示せ。
  6. 文法GGをS→SS∣S∣aS\to SS\mid S\mid aとし、w=aaaaw=aaaaとする。定理 7.2の証明のb=2b=2、N=b∣V∣+1=4N=b^{|V|+1}=4について、成果がwwである構文木TTで、証明と同じ手順(辺数が最大の道π\piを取り、葉に近い側から∣V∣+1|V|+1個の非終端記号頂点のうち同じ記号をもつ二つをr1,r2r_1,r_2とする)を適用するとv=y=εv=y=\varepsilonとなるものを構成せよ。また、頂点数が最小の構文木に同じ手順を適用するとvy≠εvy\neq\varepsilonとなることを、一つの最小な構文木について確かめよ。
解答 (演習の要点).
  1. 一例は、根SSの子をS,SS,Sとし、左の子からS→aSbS\to aSbを二回、S→εS\to\varepsilonを一回適用し、右の子からS→aSbS\to aSbとS→εS\to\varepsilonを適用した構文木である。対応する左端導出は

    S⇒SS⇒aSbS⇒aaSbbS⇒aabbS⇒aabbaSb⇒aabbabS\Rightarrow SS\Rightarrow aSbS\Rightarrow aaSbbS\Rightarrow aabbS\Rightarrow aabbaSb\Rightarrow aabbab

    であり、各段で最も左の非終端記号だけを展開している。

  2. 規則S→εS\to\varepsilonに対応する空語遷移(q,ε)∈δ(q,ε,S)(q,\varepsilon)\in\delta(q,\varepsilon,S)により、

    (q,ε,S)⊢(q,ε,ε)(q,\varepsilon,S)\vdash(q,\varepsilon,\varepsilon)

    となる。入力は最初から空であり、スタックも空になるため、空語が空スタックで受理される。

  3. MMは最初に入力を消費せずZZをYYYYに置き換えるほかに遷移をもたないので、受理計算は(r,w,Z)⊢(r,w,YY)(r,w,Z)\vdash(r,w,YY)から始まり、二つのYYを一文字ずつ消費して取り除く。状態rrではaaを読むとrrに、bbを読むとssに移り、状態ssではbbだけを読むことができる。したがって受理計算はr→ar→arr\xrightarrow{a}r\xrightarrow{a}r、r→ar→bsr\xrightarrow{a}r\xrightarrow{b}s、r→bs→bsr\xrightarrow{b}s\xrightarrow{b}sの三通りであり、空スタックで受理する言語は{aa,ab,bb}\{aa,ab,bb\}である。

    定理 4.2の文法の規則は、S0→[rZq]S_0\to[rZq](q∈{r,s}q\in\{r,s\})、展開規則[rZq]→[rYs1][s1Yq][rZq]\to[rYs_1][s_1Yq](s1,q∈{r,s}s_1,q\in\{r,s\})、消去規則[rYr]→a[rYr]\to a、[rYs]→b[rYs]\to b、[sYs]→b[sYs]\to bである。s1=rs_1=rに固定すると、展開規則は[rZr]→[rYr][rYr][rZr]\to[rYr][rYr]と[rZs]→[rYr][rYs][rZs]\to[rYr][rYs]だけになる。[rYr][rYr]と[rYs][rYs]はそれぞれaaとbbだけを導き、[sZq][sZq]と[sYr][sYr]を左辺にもつ規則はないので、[rZr][rZr]はaaaaだけを、[rZs][rZs]はababだけを導く。よって固定した文法の言語は{aa,ab}\{aa,ab\}であり、MMの言語と異なる。失われた語bbbbの導出S0⇒[rZs]⇒[rYs][sYs]⇒bbS_0\Rightarrow[rZs]\Rightarrow[rYs][sYs]\Rightarrow bbでは、一つ目のYYを取り除き終えたときの状態がssであり、展開規則の中間状態にssが必要である。

  4. 排出状態ddに入力文字を消費する遷移があると、受理状態へ到達した後に残った入力を排出中に消費することができてしまう。たとえば、一文字aaを読んで受理状態へ移る機械MMの受理言語は{a}\{a\}である。変換後の機械のddにbbを読みながらスタック記号を取り除く遷移を加えると、入力ababでも、aaを読んで受理状態に至り、ddでbbを消費しながらスタックを空にすることができるため、ababが受理され、受理言語が変わる。

  5. L3={anbncn:n≥0}L_3=\{a^nb^nc^n:n\geq0\}が弱いポンピング性質をもつと仮定し、その定数をNNとする。w=aNbNcNw=a^Nb^Nc^Nの分解w=uvxyzw=uvxyzでvy≠εvy\neq\varepsilonを満たすものを取る。vvが二種類以上の文字を含むならば、v2v^2の中にある文字の後に前の種類の文字が現れるので、uv2xy2zuv^2xy^2zはa∗b∗c∗a^*b^*c^*の形でなくL3L_3に属さない。yyについても同様である。vvとyyがそれぞれ一種類の文字だけからなるならば、vyvyに現れる文字は高々二種類であり、vy≠εvy\neq\varepsilonであるから、uv2xy2zuv^2xy^2zでは三つの文字の個数のうち少なくとも一つが増え、少なくとも一つが変わらないのでL3L_3に属さない。よってL3L_3は弱いポンピング性質をもたない。すなわちL3L_3が文脈自由でないことは、定理 7.2 条件 (a)を用いなくても示すことができる。

    L′L'についてN=1N=1とする。w=anbmcndm∈L′w=a^nb^mc^nd^m\in L'が∣w∣≥1|w|\geq1を満たすとき、n≥1n\geq1ならばu=εu=\varepsilon、v=av=a、x=an−1bmcn−1x=a^{n-1}b^mc^{n-1}、y=cy=c、z=dmz=d^mとおくとuvixyiz=an−1+ibmcn−1+idm∈L′uv^ixy^iz=a^{n-1+i}b^mc^{n-1+i}d^m\in L'である。n=0n=0ならばm≥1m\geq1であり、v=bv=b、y=dy=dとして同様である。よってL′L'は弱いポンピング性質をもつ。

    L′L'が文脈自由であると仮定し、定理 7.2の定数をNNとする。w=aNbNcNdNw=a^Nb^Nc^Nd^Nの分解を取ると、∣vxy∣≤N|vxy|\leq Nであるから、vxyvxyはaaとccの両方を含まず、bbとddの両方も含まない。vvまたはyyが二種類以上の文字を含むならば、前段と同じ理由でuv2xy2z∉L′uv^2xy^2z\notin L'である。そうでなければ、vy≠εvy\neq\varepsilonに現れる文字の種類eeを一つ取ると、eeと対になる文字(aaとcc、bbとdd)はvyvyに現れないので、uv2xy2zuv^2xy^2zではeeの個数は増え、対になる文字の個数は変わらない。よってuv2xy2z∉L′uv^2xy^2z\notin L'であり、定理 7.2 条件 (c)に反する。したがってL′L'は文脈自由でない。この証明では、対になる文字の区間がNN以上離れていることを定理 7.2 条件 (a)とともに用いた。

  6. 文法の右辺の長さの最大値は22であり、∣V∣=1|V|=1である。最小な構文木の例として、根rrに規則S→SSS\to SSを適用し、その二つの子s1,s2s_1,s_2にもS→SSS\to SSを適用し、四つの孫s11,s12,s21,s22s_{11},s_{12},s_{21},s_{22}にS→aS\to aを適用した木T0T_0を取る。この木はS→SS\to Sを含まず、四つのaaの葉と七つの非終端記号頂点からなる。T0T_0の頂点数が最小であることを確かめる。成果がaaaaaaaaである任意の構文木では、空語を生む規則がないので葉はちょうど四つのaaであり、各葉の親は規則S→aS\to aを適用した頂点であるから、そのような頂点は四つある。各頂点の子は一つまたは二つであり、葉が四つの根付き木では子を二つもつ頂点の個数は葉の個数より一つ少ないので、S→SSS\to SSを適用した頂点はちょうど三つある。残りの頂点はS→SS\to Sを適用した頂点であるから、頂点数は4+4+3=114+4+3=11にS→SS\to Sの頂点の個数を加えたものである。T0T_0はS→SS\to Sを含まないので、頂点数1111は最小である。根から葉への道の辺数の最大値は33であり、π\piとしてr,s1,s11r,s_1,s_{11}と葉を通る道を取る。葉に近い側の二つの非終端記号頂点はs11s_{11}とs1s_1であり、ともにSSであるからr1=s1r_1=s_1、r2=s11r_2=s_{11}である。yield(s1)=aa\mathrm{yield}(s_1)=aa、yield(s11)=a\mathrm{yield}(s_{11})=aであるからu=εu=\varepsilon、v=εv=\varepsilon、x=ax=a、y=ay=a、z=aaz=aaであり、vy=a≠εvy=a\neq\varepsilon、∣vxy∣=2≤4|vxy|=2\leq4である。

    次に、T0T_0のs11s_{11}と葉の間にS→SS\to Sを適用した頂点ttを挿入した木TTを作る。すなわちs11s_{11}の唯一の子をttとし、ttの唯一の子を葉aaとする。TTの成果はaaaaaaaaのままであり、根から葉への道の辺数の最大値は44で、それを与える道はr,s1,s11,tr,s_1,s_{11},tと葉を通るものだけである。葉に近い側の二つの非終端記号頂点はttとs11s_{11}であり、ともにSSであるからr1=s11r_1=s_{11}、r2=tr_2=tである。yield(s11)=yield(t)=a\mathrm{yield}(s_{11})=\mathrm{yield}(t)=aであるからv=y=εv=y=\varepsilonとなる。TTの頂点数はT0T_0より多く、TTのr1r_1を根とする部分木をr2r_2を根とする部分木で置き換えるとT0T_0に戻る。これが定理 7.2の証明で最小性によりv=y=εv=y=\varepsilonを排除する議論である。

▨

参考文献

  1. John E. Hopcroft, Rajeev Motwani, and Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, 3rd ed., Pearson, 2007.文脈自由言語のポンピング補題と非文脈自由性の証明を参考にした。
  2. Michael Sipser, Introduction to the Theory of Computation, 3rd ed., Cengage, Boston, 2013.文脈自由言語のポンピング補題を参考にした。

前提記事