1 文法、導出、構文木
終端記号と非終端記号は互いに重ならない有限集合として固定する。
定義 1.1. 文脈自由文法 (context-free grammar)(CFG)は、四項組
G=(V,Σ,P,S)である。Vは有限な非終端記号集合、Σは有限な終端記号集合であり、V∩Σ=∅とする。S∈Vは開始記号である。Pは有限な生成規則集合であり、各規則は
A⟶γ(A∈V, γ∈(V∪Σ)∗)の形をもつ。右辺γ=εも許す。
規則A→γを用いて
αAβ⇒Gαγβと書く。⇒Gの反射推移閉包を⇒G∗と書き、
L(G)={w∈Σ∗:S⇒G∗w}をGの生成言語 (generated language) という。ある CFG の生成言語である言語を文脈自由言語 (context-free language) という。
一段導出で置き換える非終端記号より左側に非終端記号がない場合、その導出を左端導出という。左端導出の反射推移閉包を⇒lm∗と書く。
導出の途中では、非終端記号がまだ展開されずに残る。この状態も含めて木として表すため、根を任意の非終端記号とし、未展開の葉を許す形で定義する。
定義 1.2. CFGG=(V,Σ,P,S)とA∈Vに対して、A-導出木 (A-derivation tree) は、根付き順序木であって、次を満たすものである。
- 根はAで標識される。
- 各頂点はV∪Σ∪{ε}の元で標識される。Σまたはεで標識された頂点は葉である。
- B∈Vで標識された頂点が子をもち、どの子もV∪Σで標識されるならば、子の標識を左から並べた語X1⋯Xkについて、B→X1⋯XkはPの規則である。
- B∈Vで標識された頂点の子が、εで標識された一つの葉だけである場合、B→εはPの規則である。頂点が子をもつのは、条件 (c)または条件 (d)の場合に限る。
Vで標識された葉を未展開の葉 (unexpanded leaf) という。葉の標識を左から並べ、εで標識された葉は記号を寄与しないものとして得られる(V∪Σ)∗の元を、その木の成果 (yield)(yield)という。頂点vに対して、vを根とする部分木の成果をyield(v)と書く。
未展開の葉をもたないA-導出木を完成した (completed)A-導出木といい、その成果はΣ∗に属する。完成したS-導出木をGの構文木 (parse tree) という。
任意の導出は、生成規則を左端から適用する導出へ並べ替えることができる。この事実を導出木を介して証明する。根を任意の非終端記号とするのは、証明の帰納段で部分木へ帰納法の仮定を適用するためである。
命題 1.3.G=(V,Σ,P,S)、A∈Vおよびw∈Σ∗に対して、次の三条件は同値である。
- A⇒G∗w。
- A⇒lm∗w。
- 成果がwである完成したA-導出木が存在する。
とくにA=Sの場合、三条件はw∈L(G)と同値である。
証明.(2)⇒(1)は直ちに従う。
(1)⇒(3)を示す。導出
A=α0⇒Gα1⇒G⋯⇒Gαn=wを一つ取る。iに関する帰納法で、成果がαiであるA-導出木Tiを構成する。T0はAで標識された根だけからなる木とする。根は未展開の葉であり、子をもたないため、定義の四条件をすべて満たす。
Tiが得られたとする。一段導出αi=βBγ⇒Gβδγ=αi+1が規則B→δによるとする。Tiの成果はαiであるから、葉を左から読んだときβの直後に来る葉はBで標識され、未展開である。この葉へ、δの記号を左から順に子として付ける。δ=εの場合にはεで標識された子を一つ付ける。得られる木Ti+1は定義の四条件を満たすA-導出木であり、その成果はβδγ=αi+1である。
Tnの成果はw∈Σ∗であるから、Tnは未展開の葉をもたない。よってTnは完成したA-導出木である。
(3)⇒(2)を示す。完成したA-導出木の内部頂点数に関する帰納法を用いる。
内部頂点が根だけである場合、根の子はすべて葉であり、Σまたはεで標識される。定義の定義 1.2 条件 (c)または定義 1.2 条件 (d)により、根に対応する規則を一度適用すれば成果wを得る。
一般の場合、根の子を左からX1,…,Xkとする。子がεで標識された一つの葉だけである場合は上の基底に含まれるため、どの子もV∪Σで標識されるとしてよい。まず規則
A→X1⋯Xkを適用する。Xj∈Vである子ujについて、ujを根とする部分木は完成したXj-導出木であり、その内部頂点数は元の木より真に少ない。帰納法の仮定により、yield(uj)=wjに対してXj⇒lm∗wjが成り立つ。この左端導出を、jの小さい順に適用する。Xj∈Σである子は、その終端記号をそのまま寄与する。
左側の子をすべて処理し終えた時点では、その左側はすべて終端記号であるから、次の部分木に対する左端導出は木全体でも左端導出である。最後の子まで続けると、木の成果wを得る。
最後に、A=Sの場合を考える。定義 1.1によりw∈L(G)はS⇒G∗wと同値であるから、三条件はいずれもw∈L(G)と同値である。▨
例 1.4 (a の並びの後に同数の b が続く言語). 開始記号をSとし、生成規則を
S→aSb∣εとする。この文法の生成言語は
{anbn:n≥0}である。
実際、S→aSbをn回適用してからS→εを適用すればanbnを得る。
逆向きには、文形式に関する次の不変量を導出の長さに関する帰納法で示す。Sから到達することができる文形式は、akSbkまたはakbk(k≥0)の形に限る。実際、初期の文形式はa0Sb0である。akSbkにS→aSbを適用するとak+1Sbk+1を得て、S→εを適用するとakbkを得る。akbkには非終端記号がないため、これ以上の一段導出は存在しない。個数の一致だけではababのような語を排除することができないが、この不変量は語の形まで定めている。終端語である文形式はakbkの形に限るため、生成言語は{anbn:n≥0}である。
2 Pushdown automaton と受理方式
スタックの左端を上端とする。したがって、スタック語XβではXが上端記号である。
定義 2.1. 非決定性 pushdown automaton (nondeterministic pushdown automaton)(PDA)は、七項組
M=(Q,Σ,Γ,δ,q0,Z0,F)である。Qは有限状態集合、Σは有限入力アルファベット、Γは有限スタックアルファベット、q0∈Qは初期状態、Z0∈Γは初期スタック記号、F⊆Qは受理状態集合である。遷移関数は
δ:Q×(Σ∪{ε})×Γ⟶Pfin(Q×Γ∗)である。
配置 (configuration) は(q,w,α)∈Q×Σ∗×Γ∗である。(p,γ)∈δ(q,a,X)ならば
(q,aw,Xβ)⊢M(p,w,γβ)とし、(p,γ)∈δ(q,ε,X)ならば
(q,w,Xβ)⊢M(p,w,γβ)とする。第一の遷移は入力aを一文字消費し、第二の遷移は入力を消費しない。いずれも上端記号Xを語γに置き換える。
PDA には二つの標準的な受理方式がある。
定義 2.2. PDAM=(Q,Σ,Γ,δ,q0,Z0,F)が語wを終状態で受理する (accept by final state) とは、あるf∈Fとα∈Γ∗が存在して
(q0,w,Z0)⊢M∗(f,ε,α)となることをいう。
受理状態集合を用いない PDA が語wを空スタックで受理する (accept by empty stack) とは、あるq∈Qが存在して
(q0,w,Z0)⊢M∗(q,ε,ε)となることをいう。
どちらの定義でも、入力全体を消費しなければ受理にならない。空語遷移だけで受理状態または空スタックへ到達した場合には、空語を受理する。
定理 2.3. 終状態で受理する PDA と空スタックで受理する PDA は、同じ言語のクラスを受理する。
証明. 最初に、終状態で受理する
M=(Q,Σ,Γ,δ,q0,Z0,F)を空スタック受理へ変換する。Qに属さない新しい状態s,dと、Γに属さない新しい底記号⊥をとる。新しい PDA は底記号⊥だけを初期スタックとし、
(s,w,⊥)⊢(q0,w,Z0⊥)という空語遷移をもつ。Mの遷移はすべてそのまま複製する。さらに、各f∈FとX∈Γ∪{⊥}に対して
(f,w,Xβ)⊢(d,w,Xβ)という空語遷移を加え、dでは各X∈Γ∪{⊥}を空語遷移で取り除く。
Mがwを終状態で受理するなら、新しい機械はその計算を模倣し、状態dへ移ってスタック全体を空にする。逆に、新しい機械が入力をすべて消費してスタックを空にするには、状態dへ入らなければならず、その直前にはMの受理状態にいる。状態dには入力を消費する遷移がないため、その時点で入力はすでに空である。したがって、変換前後の受理言語は等しい。
次に、空スタックで受理する PDAMを終状態受理へ変換する。Qに属さない新しい状態s,fと、Γに属さない新しい底記号⊥をとる。初期スタックを⊥とし、空語遷移でsからq0へ移るときに⊥をZ0⊥へ置き換える。Mの遷移をすべて複製し、各q∈Qについて、上端が⊥になったときに空語遷移でfへ移り、⊥は残す。fを唯一の受理状態とし、fからの遷移は置かない。
Mが入力全体を消費して元のスタックを空にしたとき、新しい機械の上端は⊥であるためfへ移ることができる。逆に、新しい機械がfで入力全体を消費しているなら、fへ入る直前には上端が⊥であり、元のスタックは空である。よって、この変換も受理言語を保存する。▨
新しい状態と底記号は、元の状態集合およびスタックアルファベットに属さないものを選ばなければならない。既存の記号を再利用すると、元の計算と受理後のスタック消去を区別することができない場合がある。
3 文脈自由文法から PDA へ
CFG の左端導出を、スタックの上端にある左端記号の展開として実行する。
定理 3.1. 任意の CFGGに対して、L(MG)=L(G)を空スタックで受理する PDAMGを構成することができる。
証明.G=(V,Σ,P,S)とする。一状態qをもち、スタックアルファベットを
Γ=V∪Σとし、初期スタック記号をSとする PDAMGを構成する。各生成規則A→γに対して
(q,γ)∈δ(q,ε,A)とし、各a∈Σに対して
(q,ε)∈δ(q,a,a)とする。前者は上端の非終端記号を規則の右辺へ置き換え、後者は入力の先頭文字と上端の終端記号が一致するときに両方を取り除く。
入力wの接頭辞xをすでに消費し、残りがyで、スタックがαである配置
(q,y,α)に対して、文形式xαを対応させる。初期配置ではx=ε、α=Sであるため、対応する文形式はSである。
生成規則に対応する空語遷移が
(q,y,Aβ)⊢(q,y,γβ)を与えるとき、対応する文形式は
xAβ⇒Gxγβと変化する。xは消費済みの終端語であるため、この導出は左端導出である。終端記号を照合する遷移
(q,ay,aβ)⊢(q,y,β)では、消費済み接頭辞がxからxaへ変わるが、対応する文形式は遷移の前後でともにxaβであり、文法の導出は進まない。
したがって、MGに受理計算
(q,w,S)⊢∗(q,ε,ε)が存在するなら、遷移列に沿って上の対応を適用することにより
S⇒lm∗wを得る。よってw∈L(G)である。
逆にw∈L(G)とする。命題 1.3により、左端導出
S⇒lm∗wが存在する。左端導出の各生成規則を、上端非終端記号を置き換える空語遷移で順に模倣する。文形式の先頭に終端記号が現れるたび、その文字を入力とスタックから同時に取り除く。左端導出であるため、次に展開する非終端記号より左側の終端記号はすべてこの方法で照合することができる。導出がwに達した後、残る終端記号をすべて照合すると、入力とスタックが同時に空になる。したがってMGはwを空スタックで受理する。ゆえにL(MG)=L(G)である。▨
定理 2.3を適用すれば、同じ言語を終状態で受理する PDA も得られる。
4 PDA から文脈自由文法へ
逆向きの構成では、一つのスタック記号を取り除き、その下のスタック部分へ初めて戻るまでの計算区間を、一つの非終端記号で表す。
定義 4.1 (保護された計算区間). PDAMの状態p,q、スタック記号X、語wに対して
pwXqで表す関係を 保護された計算区間 (protected computation segment) といい、任意のスタック接尾辞βに対して、入力wをちょうど消費する計算
(p,w,Xβ)⊢M∗(q,ε,β)が存在し、終点より前のすべての配置のスタックがρβ(ρ∈Γ+)の形をもつとき、かつそのときに限りpwXqと定める。この計算は、最後の一手まで接尾辞βの記号を読み書きしない。
遷移は上端だけを参照するため、あるβについて保護された計算が存在すれば、同じ遷移列を任意のβの上で実行することができる。したがって、定義中の「任意の接尾辞」は一つの接尾辞について確かめても同じ関係を与える。
定理 4.2. 任意の PDAMに対して、L(GM)=L(M)を満たす CFGGMを構成することができる。
証明.定理 2.3によって、Mは空スタックで受理すると仮定してよい。Mを
M=(Q,Σ,Γ,δ,q0,Z0)と書く。
各p,q∈QとX∈Γに対して、新しい非終端記号
[pXq]を用意する。非終端記号[pXq]は入力記号およびスタック記号とは異なる形式的な記号である。さらに新しい開始記号S0を用意し、各q∈Qに対して
S0→[q0Z0q]を生成規則に加える。
PDA の遷移
(r,Y1⋯Yk)∈δ(p,a,X),a∈Σ∪{ε}を一つ固定する。k≥1の場合、任意の中間状態
s1,…,sk−1∈Qと終状態q∈Qに対して
[pXq]→a[rY1s1][s1Y2s2]⋯[sk−1Ykq]という展開規則を加える。ここで、a∈Σならa=aとし、a=εならaは空語を表す。k=0の場合には
[pXr]→aという消去規則を加える。Q,Γおよび遷移集合が有限であり、各遷移が有限長のスタック語を押し込むため、この文法の非終端記号と生成規則は有限個である。
次の不変量を証明する。
[pXq]⇒GM∗w⟺pwXq.左から右を、完成した[pXq]-導出木の内部頂点数に関する帰納法で示す。命題 1.3は根を任意の非終端記号とする形で述べてあるため、GMの開始記号でない[pXq]を根とする導出木にも適用することができる。根で展開規則を用いたとする。PDA は最初に入力aを消費するか、a=εの場合には入力を消費せず、
(p,aw1⋯wk,Xβ)⊢(r,w1⋯wk,Y1⋯Ykβ)と遷移する。各子の部分木は根の木より小さいため、帰納法の仮定により、wiを消費してYiを取り除き、状態を一つ前の中間状態から次の中間状態へ移す保護された計算が存在する。各子部分木に対応する保護された計算を左から順に連結すると、Xを取り除いて状態qに至る保護された計算を得る。消去規則の場合には、最初の一遷移がXを直ちに取り除くため主張が成り立つ。
右から左を、保護された計算の遷移回数に関する帰納法で示す。pwXqを与える計算の最初の遷移を
(r,Y1⋯Yk)∈δ(p,a,X)とする。k=0ならば、この一遷移で接尾辞βが露出する。保護された計算はその時点で終わらなければならないためq=r、w=aであり、消去規則が[pXq]⇒∗wを与える。
k≥1とする。計算は接尾辞βに触れずにY1⋯Ykをすべて取り除く。各i=1,…,kについて、スタック全体が初めてYi+1⋯Ykβに一致する時点をとる。ただしi=kでは、スタックが初めてβになる終点をとる。スタック記号が重複する場合があるため、上端の記号ではなくスタック語全体で時点を定める。このような時点は、スタックが上端からしか変更されず、最終的にβへ戻るため必ず存在する。その時点の状態をsiとし、sk=qとする。最初の遷移後からこれらの時点までに消費される入力を順にw1,…,wkと書くと、
w=aw1⋯wkであり、
rw1Y1s1,s1w2Y2s2,…,sk−1wkYkqが成り立つ。各区間は元の計算より遷移回数が少ないため、帰納法の仮定から
[rY1s1]⇒∗w1,…,[sk−1Ykq]⇒∗wkを得る。対応する展開規則を最初に適用し、各小区間に対応する導出を続ければ[pXq]⇒∗wを得る。以上の二方向の帰納法によって、不変量の証明が完了する。
最後に、
w∈L(GM)⟺ある q∈Q について [q0Z0q]⇒∗w⟺ある q∈Q について q0wZ0q⟺M が w を空スタックで受理するとなる。よってL(GM)=L(M)である。▨
二つの変換をまとめる。
定理 4.3. 有限アルファベットΣ上の言語L⊆Σ∗について、次の条件は同値である。
- Lはある文脈自由文法によって生成される。
- Lはある非決定性 PDA によって空スタックで受理される。
- Lはある非決定性 PDA によって終状態で受理される。
5 正規言語との関係
先行記事の有限オートマトンは、状態遷移を右端の非終端記号の展開として書き直すことができる。これにより、正規言語が文脈自由言語であることが従う。
命題 5.1.Σ上の任意の正規言語Lに対して、L(G)=Lとなる CFGGが存在する。
証明.§E15.2 定義 1により、L=L(A)となる DFAA=(Q,Σ,δ,qℓ,F)を取る。Q={q1,…,qn}と番号づけ、Q、Σのいずれにも属さない新しい非終端記号B1,…,Bnを用意する。V:={B1,…,Bn}とし、生成規則を
Bi→aBj(a∈Σ, δ(qi,a)=qj),Bi→ε(qi∈F)とする。開始記号はBℓとする。QとΣが有限であるから、規則は有限個である。
以下では、§E15.1 補題 1.3の後半の形δ(q,au)=δ(δ(q,a),u)を用いる。
各iと各w∈Σ∗について
Bi⇒G∗w⟺δ(qi,w)∈Fを、wの長さに関する帰納法で示す。
w=εとする。Biを左辺とする規則のうち、Bi→aBjを適用した文形式は先頭に終端記号aをもち、以後の適用でそのaが消えることはない。したがってBi⇒G∗εとなるのはBi→εが規則である場合に限り、それはqi∈Fと同値である。一方δ(qi,ε)=qiであるから、両辺は同値である。
w=au′とする。Bi⇒G∗au′が成り立つとする。最初に適用する規則がBi→εであれば文形式はεとなり、au′=εに達することはない。よって最初の規則はBi→aBjの形であり、先頭の終端記号が一致するためδ(qi,a)=qjである。残りの導出はBj⇒G∗u′を与える。逆に、δ(qi,a)=qjかつBj⇒G∗u′ならば、Bi→aBjを最初に適用してBi⇒G∗au′を得る。帰納法の仮定によりBj⇒G∗u′はδ(qj,u′)∈Fと同値であり、上で示した等式により
δ(qj,u′)=δ(δ(qi,a),u′)=δ(qi,au′)である。よって両辺は同値である。
i=ℓとすれば、w∈L(G)とδ(qℓ,w)∈Fが同値である。§E15.1 定義 1.4により後者はw∈L(A)=Lと同値であるから、L(G)=Lである。▨
命題 5.1と定理 4.3により、正規言語の全体は文脈自由言語の全体に含まれる。この包含が真であることは、§E15.2 命題 5.5と例 1.4 (a の並びの後に同数の b が続く言語)から従う。
6 具体例
aとbの個数を照合する言語に対して、専用の PDA を直接構成する。定理 3.1の一般構成とは別の機械である。
命題 6.1. 言語
{anbn:n≥0}を終状態で受理する PDA が存在する。
証明. 新しい底記号を⊥、個数を記録する記号をXとする。初期状態qsから、入力を消費しない二つの選択を置く。一つは空語を受理する状態qfへ移る選択であり、もう一つはaを読む状態qaへ移る選択である。
qaではaを一文字読むたびにXを一つ積む。最初のbを読むときにqbへ移り、Xを一つ取り除く。qbではbを一文字読むたびにXを一つ取り除く。qbで上端が⊥になったときに、空語遷移でqfへ移る。qfから遷移は置かない。
定義 2.1の遷移関数は入力の残りを参照しないため、「入力を読み終えた」という条件を遷移の側に書くことはできない。上の遷移は入力が残っていても起こり得るが、qfから出る遷移が一つもないため、その場合は入力を消費し切ることができず受理に至らない。定義 2.2が入力全体の消費を要求することが、この点を担っている。
qaでaをk個読んだ直後のスタックがXk⊥であることはkに関する帰納法で従う。qbでbをj個読んだ後、j≤kならスタックはXk−j⊥である。j>kなら取り除くXが存在しないため計算は停止する。また、qbではaを読む遷移がなく、qaへ戻る遷移もない。したがって、空語以外で受理される語はakbkに限る。
逆に、anbnではn=0のとき初期状態から直接qfへ移る。n>0のとき、aを読むたびにXを積み、続くbを読むたびにXを取り除けば、入力の終端で上端が⊥になりqfへ移ることができる。よって、受理言語はちょうど{anbn:n≥0}である。▨
7 文脈自由言語の限界
定理 4.3は、二つの記述方法が同じ言語の範囲を定めることを述べる。その範囲がすべての言語を尽くすわけではないことを、構文木の形に対する制約から導く。
頂点vの成果yield(v)は定義 1.2で定めた。あわせて、vから葉へ至る道の辺数の最大値をvの高さといい、根の高さを木の高さという。
補題 7.1. CFGG=(V,Σ,P,S)に対して
b:=max({2}∪{∣γ∣:A→γ∈P})と置く。右辺の集合は2を要素にもつ有限集合であるから、P=∅の場合を含めてbは定まり、b≥2である。また、Pの各規則A→γについて∣γ∣≤bである。Gの構文木の任意の頂点vについて、vの高さがhならば∣yield(v)∣≤bhである。
証明.hに関する帰納法を用いる。
h=0のとき、vは葉であり、定義 1.2によって終端記号またはεで標識される。したがって∣yield(v)∣≤1=b0である。
h≥1とする。vの子を左からu1,…,ukとする。vが規則A→γに対応するならばk=∣γ∣≤bであり、vが規則A→εに対応するならばk=1≤bである。各uiの高さは高々h−1であるから、帰納法の仮定により∣yield(ui)∣≤bh−1である。yield(v)はyield(u1)⋯yield(uk)に等しいから
∣yield(v)∣≤kbh−1≤b⋅bh−1=bhである。▨
非終端記号は有限個であるから、成果が長い構文木には、根から葉への一本の道の上に同じ非終端記号が二度現れる。その二つの頂点にはさまれた部分を繰り返すことができる。
定理 7.2 (文脈自由言語のポンピング補題).Lを文脈自由言語とする。このとき、Lだけに依存する定数N≥1が存在して、∣w∣≥Nを満たす任意のw∈Lは
w=uvxyz(u,v,x,y,z∈Σ∗)の形に分解することができ、次の三条件を満たす。
- ∣vxy∣≤N。
- vy=ε。
- すべてのi≥0についてuvixyiz∈L。
証明.L=L(G)となる CFGG=(V,Σ,P,S)を取り、補題 7.1のbを用いて
N:=b∣V∣+1と置く。w∈Lが∣w∣≥Nを満たすとする。
命題 1.3により、成果がwである構文木が存在する。そのような構文木の頂点数は正の整数であるから、頂点数が最小であるものを一つ取り、Tと書く。
Tの根から葉へ至る道のうち、辺数が最大であるものを一つ取り、πと書く。その辺数をhとする。根から葉へ至る道の辺数の最大値は根の高さであるから、補題 7.1によりbh≥∣w∣≥N=b∣V∣+1である。b≥2であるからh≥∣V∣+1である。
π上の頂点はh+1個ある。末端の葉を除くh個は子をもつため、定義 1.2 条件 (c)または定義 1.2 条件 (d)により非終端記号で標識される。h≥∣V∣+1であるから、π上で葉に近い側から非終端記号で標識された頂点を∣V∣+1個取ることができる。非終端記号は∣V∣種類であるから、鳩の巣原理により、この∣V∣+1個のうち二つは同じ非終端記号Aで標識される。π上で上にある方をr1、下にある方をr2とする。
πは根から葉へ至る道のうち辺数が最大であるから、π上の頂点pの高さは、πのうちpより下にある部分の辺数に等しい。実際、pを根とする部分木に、pから葉へ至るより長い道があれば、πのpより下を差し替えてπより長い道を得るからである。r1はπ上で葉から数えて高々∣V∣+1番目の非終端記号頂点であるから、πのうちr1より下にある部分の辺数は高々∣V∣+1であり、r1の高さは高々∣V∣+1である。したがって補題 7.1により
∣yield(r1)∣≤b∣V∣+1=Nである。
r2はr1の真の子孫であるから、yield(r2)はyield(r1)の連続部分語であり、
yield(r1)=vyield(r2)yと一意に分かれる。x:=yield(r2)と置く。同様にyield(r1)はwの連続部分語であるからw=uyield(r1)zと分かれる。以上によりw=uvxyzであり、∣vxy∣=∣yield(r1)∣≤Nであるから条件 (a)が成り立つ。
ここで、二つの木を用意する。Tのr1を根とする部分木を、r2を根とする部分木で置き換えて得られる木をT−とする。また、Tのr2を根とする部分木を、r1を根とする部分木の複製で置き換えて得られる木をT+とする。r1とr2はともにAで標識されるから、いずれの置き換えでも定義 1.2の四条件は保たれ、T−とT+はともに構文木である。成果はそれぞれuxzとuv2xy2zである。この二つの構成は、以下の仮定に依存しない。
条件 (b)を示す。v=y=εと仮定する。このときT−の成果はuxz=uvxyz=wでありTと等しい。一方、r2はr1の真の子孫であるから、T−の頂点数はTの頂点数より真に少ない。これはTの最小性に反する。よってvy=εである。
条件 (c)を示す。i=0の場合、T−が成果uxzの構文木を与える。i≥1の場合、TからT+を作る操作を繰り返す。複製された部分木の中にはr2に対応する頂点が再び現れるため、同じ操作をその頂点に対して適用することができる。操作の前後で成果はuvkxykzからuvk+1xyk+1zへ変わり、Tの成果がuvxyzであることから、操作をi−1回行えば成果uvixyizの構文木を得る。いずれの場合も命題 1.3によりuvixyiz∈L(G)=Lである。▨
補題の条件 (a)は、繰り返す部分が語の中で近い位置に収まることを保証する。三つの区間の個数を同時に照合する言語では、この制約が矛盾を導く。
命題 7.3.Σ={a,b,c}とする。言語
L={anbncn:n≥0}は文脈自由言語ではない。
証明.Lが文脈自由であると仮定し、定理 7.2 (文脈自由言語のポンピング補題)の定数Nを取る。w:=aNbNcNと置くとw∈Lかつ∣w∣=3N≥Nであるから、三条件を満たす分解w=uvxyzが存在する。
wにおいて、aが占める位置は1からN、cが占める位置は2N+1から3Nである。aの位置とcの位置をともに含む連続部分語の長さは(2N+1)−N+1=N+2以上であり、定理 7.2 条件 (a)の∣vxy∣≤Nに反する。したがって、連続部分語vxyはaとcの両方を含むことはない。
よってvyに現れる文字は{a,b}または{b,c}のいずれかに含まれ、a,b,cのうち少なくとも一種の文字σはvyに現れない。
i=2を取る。w=uvxyzであるから、uv2xy2zにおける各文字の個数は、wにおける個数にvyにおける個数を加えたものである。したがってσの個数はNのままである。一方、定理 7.2 条件 (b)によりvy=εであるから、vyに現れる文字τが存在し、uv2xy2zにおけるτの個数はNより真に大きい。σ=τであるから、uv2xy2zでは三種の文字の個数が等しくない。ゆえにuv2xy2z∈/Lであり、これは定理 7.2 条件 (c)に反する。よってLは文脈自由言語ではない。▨
命題 5.1は正規言語の全体が文脈自由言語の全体に含まれることを示し、§E15.2 命題 5.5と例 1.4 (a の並びの後に同数の b が続く言語)はこの包含が真であることを示す。命題 7.3は、PDA の表現力にも真の限界があることを示す。より強い計算モデルは次の記事で扱う。
9 演習
問題 9.1.
- S→aSb∣SS∣εの構文木を一つ描き、成果がaabbabとなる左端導出を構成せよ。
- 定理 3.1の PDA が、規則S→εをもつ文法について空語を受理する計算を配置の列で示せ。
- 定理 4.2の生成規則で、中間状態をすべて列挙する必要がある理由を説明せよ。状態を固定すると失われる計算の例を構成せよ。
- 終状態受理から空スタック受理への変換で、排出状態dが入力文字を消費する遷移をもつと受理言語が変わり得ることを示せ。
- 定理 7.2 条件 (a)∣vxy∣≤Nを落とすと、命題 7.3の証明のどこが成り立たなくなるかを述べよ。
- 定理 7.2 (文脈自由言語のポンピング補題)の証明では、構文木Tを頂点数が最小であるものに取った。この最小性を用いた箇所を指摘し、最小性を仮定しない場合に導くことができなくなる主張を述べよ。
解答 (演習の要点).
- 一例は、根Sの子をS,Sとし、左の子からS→aSbを二回、S→εを一回適用し、右の子からS→aSbとS→εを適用した構文木である。対応する左端導出は
S⇒SS⇒aSbS⇒aaSbbS⇒aabbS⇒aabbaSb⇒aabbab
であり、各段で最も左の非終端記号だけを展開している。
- 規則S→εに対応する空語遷移(q,ε)∈δ(q,ε,S)により、
(q,ε,S)⊢(q,ε,ε)
となる。入力は最初から空であり、スタックも空になるため、空語が空スタックで受理される。
- 遷移がY1⋯Ykを積んだ時点では、各Yiを取り除き終えたときの状態が、その後の計算によって初めて決まるからである。文法の規則は計算より前に固定されるため、中間状態のすべての組合せを規則として用意し、実際の計算に一致しない組合せは終端語を導かない形で残す。例として、二状態r,sと遷移δ(r,a,Y)∋(r,ε)、δ(r,b,Y)∋(s,ε)、δ(s,b,Y)∋(s,ε)をもつ機械で、スタックYYを取り除く計算を考える。入力aaでは一つ目のYの除去が状態rで終わり、入力bbでは状態sで終わる。中間状態をrに固定した規則だけを許すと、bbを消費する計算に対応する導出が失われる。
- 排出状態dに入力文字を消費する遷移があると、受理状態へ到達した後に残った入力を排出中に消費することができてしまう。たとえば、一文字aを読んで受理状態へ移る機械Mの受理言語は{a}である。変換後の機械のdにbを読みながらスタック記号を取り除く遷移を加えると、入力abでも、aを読んで受理状態に至り、dでbを消費しながらスタックを空にすることができるため、abが受理され、受理言語が変わる。
- vxyの長さに制限がなければ、vxyがaの区間とcの区間の両方に交わることを排除することができない。その場合、vyが三種の文字すべてを含み得るため、uv2xy2zで三つの個数が同時に等しく増える可能性が残り、矛盾を導くことができない。
- 最小性は定理 7.2 条件 (b)vy=εの証明だけに用いた。最小性を仮定しない場合、v=y=εとなる分解が生じ得る。このとき定理 7.2 条件 (c)はすべてのiについてw自身を与えるだけであり、補題は非文脈自由性の証明に用いることができない主張になる。
▨