文脈自由言語(context-free language)とは、生成規則が「一つの変数記号 $A$ を、前後の文脈によらずに文字列 $\alpha$ で置き換える」形 $A\to\alpha$ に限られた文脈自由文法によって生成される形式言語のことである。対応の取れた括弧列(Dyck 言語)、算術式、プログラミング言語の構文、$\{0^{n}1^{n}\}$ のような入れ子構造を持つ言語を記述でき、正規言語のクラスを真に含み、スタックを一つ持つ非決定性プッシュダウンオートマトンで受理できる言語のクラスと一致する。和・連接・Kleene 閉包・鏡像について閉じるが共通部分・補集合については閉じず、反復補題により $\{a^{n}b^{n}c^{n}\}$ が文脈自由でないことが示される。Chomsky 階層ではタイプ 2 に位置し、文脈依存言語のクラスに真に含まれる。
前提知識: 形式言語, 正規言語, Backus–Naur記法, 数学的帰納法, 鳩の巣原理
文脈自由言語は、「一つの変数記号を、その前後の文脈によらずに書き換える」規則だけからなる文法で生成される形式言語である。以下、$\Sigma$ はアルファベット、$\Sigma^{*}$ はその上の文字列全体、$\varepsilon$ は空語を表す。
文脈自由文法(context-free grammar; CFG)とは、$4$ つ組 $G=(V,\Sigma,R,S)$ であって次を満たすものをいう。
$\Sigma$ 上の言語 $L\subset\Sigma^{*}$ が文脈自由言語(context-free language; CFL)であるとは、ある文脈自由文法 $G$ が存在して $L=L(G)$ となることをいう。文脈自由文法をタイプ 2 の文法ともいう。
文脈自由文法 $G=(V,\Sigma,R,S)$ の変数記号 $A$ を根とする構文木(parse tree。導出木ともいう)とは、各頂点に $V\cup\Sigma\cup\{\varepsilon\}$ の元のラベルが付いた有限の順序木であって次を満たすものをいう。
正規言語は「有限個の状態だけを記憶として判定できる言語」であった。文脈自由言語はそれに加えて「対応の取れた入れ子構造」を扱える。規則 $S\to(S)S$ のように右辺に同じ変数記号が現れることで、括弧の対応や算術式の入れ子のような再帰的な構造が、有限個の規則で無限に深く記述される。機械の側では、この再帰は後入れ先出しの記憶装置(スタック)を一つ持つプッシュダウンオートマトンに対応し、文脈自由言語はちょうど非決定性プッシュダウンオートマトンで受理できる言語である(thm-context-free-language-pda)。
「文脈自由」という名称は、規則 $A\to\alpha$ の適用が $A$ の前後の文字列(文脈)によらないことを指す。前後の文脈を条件にする規則を許した文法が文脈依存文法であり、それによって $\{a^{n}b^{n}c^{n}\}$ のような「三つの部分の個数が同時に一致する」言語が扱える(文脈依存言語)。文脈自由言語ではこれは扱えず、その限界を精密に述べるのが反復補題(prop-context-free-language-pumping)である。
$\Sigma=\{(,)\}$ とし、対応の取れた括弧列全体(Dyck 言語)を $D$ とする。$D$ は文脈自由言語である。実際、$V=\{S\}$、$R=\{S\to(S)S,\ S\to\varepsilon\}$ とすると $L(G)=D$ である。$L(G)\subset D$ は、Backus–Naur記法 の記事の系(生成規則に沿った帰納法)により、「対応が取れている」という性質が $\varepsilon$ について成り立ち、$u,v$ について成り立てば $(u)v$ についても成り立つことから従う。逆に $D\subset L(G)$ は、空でない対応の取れた括弧列 $w$ が、先頭の開き括弧とそれに対応する閉じ括弧によって $w=(u)v$($u,v\in D$)と分解できることから、$|w|$ に関する帰納法で従う。たとえば $S\Rightarrow(S)S\Rightarrow()S\Rightarrow()(S)S\Rightarrow()()S\Rightarrow()()$ である。$D$ は正規言語ではない(正規言語 の記事の反例と同じ議論による)。
$\Sigma=\{0,1\}$ 上の言語 $\{\,0^{n}1^{n}\mid n\in\mathbb{N}\,\}$ は文脈自由言語である。$V=\{S\}$、$R=\{S\to0S1,\ S\to\varepsilon\}$ が生成することの証明は(記号 $a,b$ を $0,1$ に読み替えて)Backus–Naur記法 の記事の命題(対応の取れた文字列の文法が生成する言語)にある。この言語は正規言語ではない(正規言語 の記事の反例)ので、正規言語のクラスは文脈自由言語のクラスに真に含まれる(prop-context-free-language-includes-regular)。
二進表現された自然数の四則演算と括弧からなる式全体は文脈自由言語である。$V=\{E,T,F,B,B'\}$、開始記号 $E$、規則
$$E\to T\mid E+T\mid E-T,\qquad T\to F\mid T\times F\mid T\div F,\qquad F\to B\mid(E),\qquad B\to0\mid1\mid1B',\qquad B'\to0\mid1\mid0B'\mid1B'$$
をとればよい。$B$ が生成するのは先頭に不要な $0$ を付けない二進表現 $\{0\}\cup1\{0,1\}^{*}$ であり、$E,T,F$ の三段の構成により乗除が加減より先に結び付き、同じ優先順位の演算は左から結び付く。たとえば $(0+10-1)\times101\div1$ はこの文法で生成される。この文法は式の形だけを定めるので、$1\div0$ のように値の定まらない式も生成される。文法と導出の詳細は Backus–Naur記法 の記事の例にある。
命題変数を有限個 $p_1,\ldots,p_n$ とし、終端記号を $p_1,\ldots,p_n,\top,\bot,\lnot,\land,\lor,\to,(,)$、変数記号を $\varphi$ とし、規則
$$\varphi\to p_i\ (1\le i\le n),\quad \varphi\to\top\mid\bot\mid(\lnot\varphi)\mid(\varphi\land\varphi)\mid(\varphi\lor\varphi)\mid(\varphi\to\varphi)$$
をとると、括弧を完全に付けた命題論理の論理式全体を生成する文脈自由文法になる(右辺の $\to$ は論理結合子であり、規則の矢印とは別である)。命題変数が可算無限個のときはアルファベットが無限になって定義から外れるが、$p_i$ を記号 $p$ と添字の二進表現で符号化すれば有限のアルファベットで同じ言語のクラスに収まる。詳細と、括弧を落とすと曖昧になることは Backus–Naur記法 の記事の例と注意を参照。
$\Sigma=\{0,1\}$、$V=\{S\}$、$R=\{S\to0S0\mid1S1\mid\varepsilon\}$ とすると、$L(G)=\{\,ww^{\mathrm{R}}\mid w\in\Sigma^{*}\,\}$(偶数長の回文全体。$w^{\mathrm{R}}$ は $w$ の鏡像)である。各規則は左右に同じ記号を加えるので生成文字列は偶数長の回文であり、逆に偶数長の回文は両端の同じ記号を取り除く帰納法で生成できる。たとえば $S\Rightarrow0S0\Rightarrow01S10\Rightarrow0110$。規則 $S\to0\mid1$ を加えれば回文全体になる。これらは正規言語ではない(正規言語 の記事の反例)。
$\Sigma=\{a,b,c\}$ 上の言語 $\{\,a^{n}b^{n}c^{n}\mid n\in\mathbb{N}\,\}$ は文脈自由言語ではない(prop-context-free-language-anbncn)。二つの部分の個数の一致 $\{a^{n}b^{n}\}$ はスタック一つ($a$ を積んで $b$ で降ろす)で確かめられるが、三つ目の部分と照合するときには記憶が失われている、というのが直感的な理由である。この言語は「文脈依存言語である」という性質を満たし(文脈依存言語 の記事の例)、「文脈自由言語である」という性質を満たさない。したがって「文脈依存ならば文脈自由」という含意は成り立たない。同様に $\{\,ww\mid w\in\{a,b\}^{*}\,\}$ や $\{\,a^{n}b^{m}c^{n}d^{m}\mid n,m\in\mathbb{N}\,\}$ も文脈自由でない(HMU06 §7.2)。
文脈自由言語であることは、各文字列の構文木が一通りに定まることを保証しない。$E\to E-E\mid E\times E\mid B$ のような文法では $1-1-1$ に二つの構文木があり、この文法は曖昧である(Backus–Naur記法 の記事の注意)。同じ言語を ex-context-free-language-arithmetic の曖昧でない文法で生成できるので、曖昧さは文法の性質であって言語の性質ではない。しかし $\{\,a^{i}b^{j}c^{k}\mid i=j\text{ または }j=k\,\}$ のように、どの文脈自由文法で生成しても曖昧になる言語(本質的に曖昧な言語)が存在し、与えられた文脈自由文法が曖昧かどうかを判定する手続きは存在しない(HMU06 §5.4、§9.5.2)。
任意の正規言語は文脈自由言語である。逆は成り立たない。
$L$ を正規言語とすると、正規言語 の記事の定義により、右線形文法 $G=(V,\Sigma,R,S)$(各規則が $A\to wB$ または $A\to w$、$w\in\Sigma^{*}$、$B\in V$ の形)で $L=L(G)$ となるものがある。右線形文法の規則は左辺が一つの変数記号で右辺が $(V\cup\Sigma)^{*}$ の元であるから、$G$ は文脈自由文法の条件を満たし、導出と生成言語の定義も同じである。よって $L=L(G)$ は文脈自由言語である。逆が成り立たないことは ex-context-free-language-anbn による。
文脈自由文法 $G$、変数記号 $A$、文字列 $\gamma\in(V\cup\Sigma)^{*}$ について、$A\Rightarrow^{*}\gamma$ であることと、$A$ を根とし生成文字列が $\gamma$ である構文木が存在することは同値である。特に $w\in L(G)$ であることと、$S$ を根とする完全な構文木で生成文字列が $w$ のものが存在することは同値である。
(導出から構文木へ)導出の長さ $n$ に関する帰納法。$n=0$ なら $\gamma=A$ であり、根だけの木がよい。$n\ge1$ なら導出は $A\Rightarrow^{*}\gamma'\Rightarrow\gamma$ と書け、最後の一歩は $\gamma'=\gamma_1B\gamma_2$ の $B$ を規則 $B\to\beta$ で置き換えて $\gamma=\gamma_1\beta\gamma_2$ を得るものである。帰納法の仮定により生成文字列 $\gamma'$ の構文木があり、その葉のうち置き換えた $B$ の出現に対応する葉に、$\beta$ の記号をラベルとする子($\beta=\varepsilon$ なら $\varepsilon$ の子一つ)を付ければ、生成文字列 $\gamma$ の構文木になる。
(構文木から導出へ)構文木の頂点数に関する帰納法。根だけなら $\gamma=A$ で $A\Rightarrow^{0}A$。根が子 $X_1,\ldots,X_k$ を持つ($A\to X_1\cdots X_k$ が規則)なら、各 $X_i$ を根とする部分木の生成文字列を $\gamma_i$ とすると $\gamma=\gamma_1\cdots\gamma_k$ であり、帰納法の仮定により $X_i\Rightarrow^{*}\gamma_i$($X_i$ が終端記号または $\varepsilon$ なら $\gamma_i=X_i$ で $0$ 歩)。導出は前後に文字列を付けても実行できる(Backus–Naur記法 の記事の命題の証明の冒頭の注意)ので、$A\Rightarrow X_1\cdots X_k\Rightarrow^{*}\gamma_1X_2\cdots X_k\Rightarrow^{*}\cdots\Rightarrow^{*}\gamma_1\cdots\gamma_k=\gamma$ が得られる。規則 $A\to\varepsilon$ の場合は $k=0$ とみなせばよい。
$L$ を文脈自由言語とする。このとき正の整数 $p$(反復定数)が存在して、$|w|\ge p$ を満たす任意の $w\in L$ は、次の三条件を満たす分解 $w=uvxyz$ を持つ。
$L=L(G)$、$G=(V,\Sigma,R,S)$ とし、
$$b:=\max\{\,2,\ \text{規則の右辺の長さの最大値}\,\}$$
とおく($b\ge2$ であり、どの規則の右辺の長さも $b$ 以下である)。変数記号の個数を $k:=|V|$ とし、$p:=b^{k+1}$ とおく。
構文木の各頂点の子は高々 $b$ 個なので、根からの最長経路の頂点数(高さ $+1$)が $h$ の構文木の葉は高々 $b^{h-1}$ 個であり、したがって生成文字列の長さも高々 $b^{h-1}$ である($\varepsilon$ の葉は長さに寄与しない)。
$|w|\ge p=b^{k+1}$ なる $w\in L$ をとる。lem-context-free-language-tree-derivation により $S$ を根とし生成文字列 $w$ の完全な構文木が存在する。その中で頂点数が最小のものを $T$ とし、$T$ の最長経路の頂点数を $h$ とする。上の評価により $|w|\le b^{h-1}$ であり、$b\ge2$ より $b^{k}< b^{k+1}=p\le|w|$ であるから、$h-1\ge k+1$、すなわち $T$ の最長経路の頂点数 $h$ は $k+2$ 以上である。その経路の末端は葉(終端記号または $\varepsilon$)なので、経路上には少なくとも $k+1$ 個の変数記号のラベルを持つ頂点がある。経路を葉から根に向かってたどり、変数記号のラベルを持つ頂点を下から $k+1$ 個とると、変数記号は $k$ 種類しかないので、鳩の巣原理により同じ変数記号 $A$ のラベルを持つ二つの頂点 $\nu_1$(上)と $\nu_2$(下)がある。
$\nu_1$ を根とする部分木の生成文字列を $vxy$、$\nu_2$ を根とする部分木の生成文字列を $x$ とし($\nu_2$ は $\nu_1$ の子孫なので $x$ は $vxy$ の部分文字列であり、その左側を $v$、右側を $y$ とする)、$w$ の残りを $u,z$ として $w=uvxyz$ と書く。lem-context-free-language-tree-derivation により
$$S\Rightarrow^{*}uAz,\qquad A\Rightarrow^{*}vAy,\qquad A\Rightarrow^{*}x$$
である。
条件 3:中央の導出 $A\Rightarrow^{*}vAy$ を $m$ 回繰り返してから $A\Rightarrow^{*}x$ を使えば、$S\Rightarrow^{*}uAz\Rightarrow^{*}uv^{m}Ay^{m}z\Rightarrow^{*}uv^{m}xy^{m}z$ となり、$uv^{m}xy^{m}z\in L$ である($m=0$ のときは $\nu_1$ の部分木を $\nu_2$ の部分木で置き換えた木に対応する)。
条件 1:$v=y=\varepsilon$ と仮定すると、$\nu_1$ の部分木を $\nu_2$ の部分木で置き換えた木は、生成文字列が $uxz=w$ のままで頂点数が真に少ない $S$ を根とする完全な構文木になり、$T$ の最小性に反する。よって $|vy|\ge1$。
条件 2:$\nu_1$ は最長経路上の、下から数えて $k+1$ 個目までの変数記号の頂点であるから、選んだ経路のうち $\nu_1$ から葉までの部分の頂点数は高々 $k+2$ である(変数記号の頂点が高々 $k+1$ 個、その下に葉が一つ)。選んだ経路は $T$ の根からの最長経路なので、その $\nu_1$ 以下の部分は $\nu_1$ を根とする部分木の中の最長経路でもある(より長い経路があれば、根から $\nu_1$ までの部分と継いで $T$ のより長い経路が得られる)。よって $\nu_1$ を根とする部分木の生成文字列の長さは $|vxy|\le b^{k+1}=p$ である。
$\Sigma=\{a,b,c\}$ 上の言語 $L=\{\,a^{n}b^{n}c^{n}\mid n\in\mathbb{N}\,\}$ は文脈自由言語ではない。
$L$ が文脈自由であると仮定し、prop-context-free-language-pumping の反復定数 $p$ をとる。$w=a^{p}b^{p}c^{p}\in L$ は $|w|\ge p$ なので、$w=uvxyz$、$|vy|\ge1$、$|vxy|\le p$、すべての $m$ について $uv^{m}xy^{m}z\in L$ となる分解がある。$|vxy|\le p$ より、$vxy$ は $w$ の中の連続した $p$ 記号以下の部分なので、$a$ と $c$ の両方を含むことはできない($a$ の最後と $c$ の最初の間には $p$ 個の $b$ がある)。$m=2$ とすると $uv^{2}xy^{2}z$ は、$vy$ に含まれる記号の個数だけが増え($|vy|\ge1$ なので少なくとも一種類は真に増える)、$vxy$ に含まれない記号の個数は $p$ のままである。$vxy$ は $a$ か $c$ の少なくとも一方を含まないので、$uv^{2}xy^{2}z$ では $a,b,c$ の個数がすべて等しいという条件が崩れ、$uv^{2}xy^{2}z\notin L$ となる。これは矛盾である。
$L_1,L_2,L$ が文脈自由言語ならば、$L_1\cup L_2$、$L_1L_2$、$L^{*}$、$L^{\mathrm{R}}$ はいずれも文脈自由言語である。
$L_i=L(G_i)$、$G_i=(V_i,\Sigma,R_i,S_i)$ とし、変数記号の名前を付け替えて $V_1\cap V_2=\emptyset$ とする。新しい変数記号 $S\notin V_1\cup V_2$ をとる。
和集合:$G_\cup:=(V_1\cup V_2\cup\{S\},\Sigma,R_1\cup R_2\cup\{S\to S_1,S\to S_2\},S)$。$S$ からの導出は最初の一歩で $S_1$ か $S_2$ を選び、以後 $V_1$ の規則だけ(または $V_2$ の規則だけ)を使うので、$L(G_\cup)=L_1\cup L_2$ である。
連接:$G_\cdot:=(V_1\cup V_2\cup\{S\},\Sigma,R_1\cup R_2\cup\{S\to S_1S_2\},S)$。$S\Rightarrow S_1S_2\Rightarrow^{*}w$ なる $w\in\Sigma^{*}$ に対し、Backus–Naur記法 の記事の補題(導出の分解補題)により $w=w_1w_2$、$S_1\Rightarrow^{*}w_1$、$S_2\Rightarrow^{*}w_2$ と分解でき、$S_i$ からの導出では $V_i$ の規則しか使えないので $w_i\in L_i$ である。逆に $w_1\in L_1$、$w_2\in L_2$ なら $S\Rightarrow S_1S_2\Rightarrow^{*}w_1S_2\Rightarrow^{*}w_1w_2$。よって $L(G_\cdot)=L_1L_2$。
Kleene 閉包:$L=L(G)$、$G=(V,\Sigma,R,S_0)$ とし、$G_{*}:=(V\cup\{S\},\Sigma,R\cup\{S\to S_0S,\ S\to\varepsilon\},S)$。$w\in L(G_{*})$ とし、lem-context-free-language-tree-derivation により $S$ を根とする完全な構文木をとる。$S$ の規則は $S\to S_0S$ と $S\to\varepsilon$ だけなので、この木は根から右端の子をたどる経路上に $S$ が $n+1$ 個並び、最後の $S$ の子が $\varepsilon$、途中の各 $S$ の左の子が $S_0$ という形をしており、生成文字列は $n$ 個の $S_0$ を根とする部分木の生成文字列 $w_1,\ldots,w_n$ の連接である。再び補題により $S_0\Rightarrow_G^{*}w_i$、すなわち $w_i\in L$ であるから $w\in L^{n}\subset L^{*}$。逆に $w_1,\ldots,w_n\in L$ なら $S\Rightarrow^{*}S_0^{n}S\Rightarrow S_0^{n}\Rightarrow^{*}w_1\cdots w_n$ である。よって $L(G_{*})=L^{*}$。
鏡像:$G^{\mathrm{R}}:=(V,\Sigma,\{A\to\alpha^{\mathrm{R}}\mid A\to\alpha\in R\},S_0)$ とおくと、これは文脈自由文法であり、正規言語 の記事の命題(左線形文法との同値)の証明中の補題(規則の右辺を鏡像にした文法は鏡像言語を生成する)により $L(G^{\mathrm{R}})=L(G)^{\mathrm{R}}=L^{\mathrm{R}}$ である。
文脈自由言語 $L_1,L_2$ であって $L_1\cap L_2$ が文脈自由でないものが存在する。また、文脈自由言語であって補集合 $\Sigma^{*}\setminus L$ が文脈自由でないものが存在する。
$\Sigma=\{a,b,c\}$ とし、$L_1:=\{\,a^{n}b^{n}c^{m}\mid n,m\in\mathbb{N}\,\}$、$L_2:=\{\,a^{m}b^{n}c^{n}\mid n,m\in\mathbb{N}\,\}$ とおく。$L_1$ は文法 $S\to AC$、$A\to aAb\mid\varepsilon$、$C\to cC\mid\varepsilon$ で生成される。実際 $A$ が生成するのは $\{a^{n}b^{n}\}$(ex-context-free-language-anbn と同じ)、$C$ が生成するのは $\{c^{m}\}$ であり、分解補題により $S$ が生成するのはそれらの連接である。$L_2$ も同様に $S\to AC$、$A\to aA\mid\varepsilon$、$C\to bCc\mid\varepsilon$ で生成される。ところが $L_1\cap L_2=\{\,a^{n}b^{n}c^{n}\mid n\in\mathbb{N}\,\}$ であり、これは prop-context-free-language-anbncn により文脈自由でない。
補集合について、文脈自由言語のクラスが補集合で閉じていると仮定すると、prop-context-free-language-closure の和集合の閉包性と De Morganの法則 $L_1\cap L_2=\Sigma^{*}\setminus\bigl((\Sigma^{*}\setminus L_1)\cup(\Sigma^{*}\setminus L_2)\bigr)$ により共通部分でも閉じることになり、前半に矛盾する。よって補集合が文脈自由でない文脈自由言語が存在する。
任意の文脈自由文法 $G=(V,\Sigma,R,S)$ に対し、次を満たす文脈自由文法 $G'=(V',\Sigma,R',S')$ で $L(G')=L(G)$ となるものが存在する。$R'$ の $\varepsilon$ 規則は高々 $S'\to\varepsilon$ だけであり、それがあるのは $\varepsilon\in L(G)$ のときに限り、$S'$ はどの規則の右辺にも現れない。
変数記号 $A$ が $A\Rightarrow^{*}\varepsilon$ を満たすとき $A$ を消去可能という。消去可能な変数記号の集合 $N$ は、次の規則で閉じた最小の集合として計算できる:$A\to\varepsilon\in R$ なら $A\in N$;$A\to B_1\cdots B_k\in R$ で $B_1,\ldots,B_k\in N$ なら $A\in N$。実際、この規則で得られる変数記号が消去可能なことは構成に関する帰納法で明らかであり、逆に $A\Rightarrow^{*}\varepsilon$ なら、導出の最初の一歩 $A\Rightarrow X_1\cdots X_k$ の右辺は変数記号だけからなり(終端記号は消えない)、分解補題により各 $X_i\Rightarrow^{*}\varepsilon$ がより短い導出で成り立つので、導出の長さに関する帰納法により $A\in N$ である。
規則の集合 $R_1$ を、$R$ の各規則 $A\to\alpha$ に対し、$\alpha$ に現れる $N$ の元の出現のうち任意個($0$ 個でもよい)を削除して得られる文字列 $\beta$ で $\beta\ne\varepsilon$ となるものすべてについて $A\to\beta$ を集めたものとする。$R_1$ は $\varepsilon$ 規則を含まない。主張:任意の変数記号 $A$ と空でない $w\in\Sigma^{*}$ について、$A\Rightarrow_{R_1}^{*}w$ と $A\Rightarrow_{R}^{*}w$ は同値である。
($R_1$ から $R$ へ)$R_1$ の規則 $A\to\beta$ は、$R$ の規則 $A\to\alpha$ から消去可能な変数記号を削除したものなので、$R$ において $A\Rightarrow\alpha\Rightarrow^{*}\beta$ が成り立つ(削除した各変数記号から $\varepsilon$ を導出する)。よって $R_1$ の導出の各一歩を $R$ の導出で置き換えられる。
($R$ から $R_1$ へ)$A\Rightarrow_R^{*}w$($w\ne\varepsilon$)の長さ $n\ge1$ に関する帰納法。最初の一歩を $A\Rightarrow X_1\cdots X_k$ とすると、分解補題により $w=w_1\cdots w_k$、$X_i\Rightarrow_R^{*}w_i$ であり、各導出の長さは $n$ 未満である。$w_i=\varepsilon$ となる $i$ については $X_i$ は変数記号で $X_i\in N$ である(終端記号なら $w_i=X_i\ne\varepsilon$)。それらの出現を $X_1\cdots X_k$ から削除した文字列を $\beta$ とすると、$w\ne\varepsilon$ より $\beta\ne\varepsilon$ なので $A\to\beta\in R_1$ である。残った各 $X_i$ については $w_i\ne\varepsilon$ なので帰納法の仮定により $X_i\Rightarrow_{R_1}^{*}w_i$ であり、これらをつなげば $A\Rightarrow_{R_1}\beta\Rightarrow_{R_1}^{*}w$ を得る。
最後に、新しい変数記号 $S'\notin V$ をとり、$R':=R_1\cup\{S'\to S\}$ とし、$\varepsilon\in L(G)$(すなわち $S\in N$)のときに限り規則 $S'\to\varepsilon$ を $R'$ に加えて、$G':=(V\cup\{S'\},\Sigma,R',S')$ とおく。$R_1$ の規則の右辺は $R$ の規則の右辺から記号を削除したものなので $S'$ を含まず、$S'\to S$ と $S'\to\varepsilon$ の右辺も $S'$ を含まないから、$S'$ はどの規則の右辺にも現れない。また $R'$ の $\varepsilon$ 規則は高々 $S'\to\varepsilon$ だけであり、それがあるのは $\varepsilon\in L(G)$ のときに限る。$S'$ からの導出は最初の一歩で $S'\to S$ または $S'\to\varepsilon$ を使い、以後 $S'$ は現れないので、空でない $w\in\Sigma^{*}$ については $w\in L(G')$ と $S\Rightarrow_{R_1}^{*}w$ が同値であり、上の主張によりこれは $S\Rightarrow_R^{*}w$、すなわち $w\in L(G)$ と同値である。$\varepsilon$ については、$R_1$ が $\varepsilon$ 規則を含まないので $S\Rightarrow_{R_1}^{*}\varepsilon$ は起こらず、$\varepsilon\in L(G')$ は $S'\to\varepsilon\in R'$、すなわち $\varepsilon\in L(G)$ と同値である。よって $L(G')=L(G)$ である。
この命題は、文脈自由言語が文脈依存言語であること(文脈依存言語 の記事の命題)の証明で用いる。さらに規則を $A\to BC$ または $A\to a$ の形に限った Chomsky標準形への変形も可能であり(HMU06 §7.1、Sip12 Theorem 2.9)、反復補題の別証明や構文解析の手続きの基礎になる。
$\Sigma$ 上の言語 $L$ が文脈自由言語であることと、$L$ を受理する非決定性プッシュダウンオートマトンが存在することは同値である。
プッシュダウンオートマトンは有限オートマトンにスタックを一つ加えた機械であり、その定義と同値性の証明は HMU06 §6.3、Sip12 Theorem 2.20、Igr11 第 4 章を参照。非決定性は本質的であり、決定性プッシュダウンオートマトンで受理できる言語(決定性文脈自由言語)のクラスは文脈自由言語のクラスより真に小さい(たとえば ex-context-free-language-palindrome の偶数長の回文全体は決定性では受理できない。HMU06 §6.4)。
文脈自由文法 $G$ と文字列 $w$ に対して $w\in L(G)$ かどうかは判定できる(Chomsky 標準形を用いる CYK 法により $|w|^{3}$ に比例する手間で判定できる。HMU06 §7.4.4)。$L(G)=\emptyset$ かどうか、$L(G)$ が有限かどうかも判定できる。一方、二つの文脈自由文法が等価かどうか、$L(G)=\Sigma^{*}$ かどうか、$G$ が曖昧かどうかは、判定する手続きが存在しない(HMU06 §9.5)。これは正規言語の場合(正規言語 の記事の決定問題の段落)との大きな違いである。
文脈自由言語は Chomsky階層(表は 形式言語 の記事の補足)のタイプ 2 に位置する。正規言語を真に含み(prop-context-free-language-includes-regular)、文脈依存言語に真に含まれる(文脈依存言語 の記事の命題と prop-context-free-language-anbncn)。ここで文脈自由文法が $\varepsilon$ 規則を持ちうるのに対し文脈依存文法は持てないので、文法の形としての包含はなく、prop-context-free-language-epsilon-elimination を経て言語のクラスの包含が得られる。
文脈自由文法は N. Chomsky が自然言語の統語論のモデルとして 1956–59 年に導入し(Cho59)、同じ頃 J. Backus と P. Naur がプログラミング言語 ALGOL の構文記述に用いた記法が Backus–Naur記法 である。反復補題は Y. Bar-Hillel、M. Perles、E. Shamir(BPS61)による。文脈自由文法はプログラミング言語の構文解析(構文木の復元)の基礎であり、曖昧でない文法に対する効率的な構文解析法(LL 法、LR 法)が知られている(HMU06 第 5 章、第 7 章)。曖昧でない文脈自由文法の生成言語の母関数は代数関数である(Chomsky–Schützenberger の定理。形式言語 の記事の補足)。
Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する