文脈依存言語(context-sensitive language)とは、生成規則が「左右の文脈 $\gamma,\delta$ の中の一つの変数記号 $A$ を空でない記号列 $\alpha$ で置き換える」形 $\gamma A\delta\to\gamma\alpha\delta$ に限られた文脈依存文法によって生成される形式言語のことである(空語のため $S\to\varepsilon$ だけを例外的に許す)。規則が文字列を縮めないため、そのクラスは非収縮文法で生成される言語のクラスと一致し(Kuroda の定理)、入力長に比例した作業領域を持つ非決定性線形有界オートマトンで受理できる言語のクラスとも一致する。$\{a^{n}b^{n}c^{n}\}$ のような文脈自由でない言語を含み、所属問題は判定でき、補集合を含む基本演算で閉じている。Chomsky 階層のタイプ 1 である。
前提知識: 形式言語, 句構造言語, 文脈自由言語, 数学的帰納法
文脈依存言語は、「一つの変数記号を、その左右の文脈が指定された記号列であるときに限って、空でない記号列へ書き換える」規則からなる文法で生成される形式言語である。以下、$\Sigma$ はアルファベット、$\Sigma^{*}$ はその上の文字列全体、$\varepsilon$ は空語を表す。
文脈依存文法(context-sensitive grammar; CSG。タイプ 1 の文法ともいう)とは、$4$ つ組 $G=(V,\Sigma,R,S)$ であって次を満たすものをいう。
$\Sigma$ 上の言語 $L\subset\Sigma^{*}$ が文脈依存言語(context-sensitive language; CSL)であるとは、ある文脈依存文法 $G$ が存在して $L=L(G)$ となることをいう。
非収縮文法(noncontracting grammar。単調文法(monotonic grammar)ともいう)とは、句構造文法 $G=(V,\Sigma,R,S)$ であって、各規則 $\alpha\to\beta\in R$ が $|\alpha|\le|\beta|$ を満たすもの(例外として $S\to\varepsilon$ を、$S$ がどの規則の右辺にも現れないときに限り許す)をいう。文脈依存文法は非収縮文法である(prop-context-sensitive-language-nondecreasing)。逆に非収縮文法が生成する言語はつねに文脈依存言語である(thm-context-sensitive-language-kuroda)。
規則 $S\to\varepsilon$ の例外は、空語を含む言語を扱うための規約である。この例外なしでは、規則がすべて長さを減らさないため $\varepsilon$ を生成できず、文脈自由言語のうち $\varepsilon$ を含むものが文脈依存言語でなくなってしまう。「$S$ が右辺に現れない」という条件は、$S\to\varepsilon$ を導出の途中で使って文字列を縮めることを禁じ、非減少性(prop-context-sensitive-language-nondecreasing)を実質的に保つためのものである。文献によっては、非収縮文法を文脈依存文法の定義として採用するもの(HU79 §9.3)や、$\varepsilon$ を最初から除外して $L\setminus\{\varepsilon\}$ だけを扱うものがある。
文脈依存文法の規則 $\gamma A\delta\to\gamma\alpha\delta$ は、文脈自由文法の規則 $A\to\alpha$ に「左右の文脈が $\gamma,\delta$ のときだけ」という条件を付けたものである。文脈を空にとれば文脈自由文法の規則になるので、文脈依存文法は(空語規則の扱いを除いて)文脈自由文法を含む。文脈の条件により、「隣にある記号を見てから書き換える」という制御が可能になり、$\{a^{n}b^{n}c^{n}\}$ のように複数の部分の個数を同時に一致させる言語が生成できる(prop-context-sensitive-language-anbncn)。
もう一つの特徴は、規則が文字列を縮めないことである。このため、長さ $n$ の文字列の導出の途中に現れる文字列の長さはすべて $n$ 以下であり、有限個の候補を調べれば所属が判定できる(prop-context-sensitive-language-decidable)。機械の側では、これは作業領域が入力の長さに比例して制限されたTuring機械、すなわち線形有界オートマトンに対応する(thm-context-sensitive-language-lba)。
$\Sigma=\{a\}$、$V=\{S\}$、$R=\{S\to a\}$ は、$\gamma=\delta=\varepsilon$、$A=S$、$\alpha=a$ の場合の規則一本からなる文脈依存文法であり、$L(G)=\{a\}$ である。任意の有限言語も同様に文脈依存言語である(空語を含むときは $S\to\varepsilon$ を加える)。
$\Sigma=\{a,b\}$、$V=\{S\}$、$R=\{S\to aSb,\ S\to ab\}$ は、文脈が空の規則だけからなる文脈依存文法であり、$L(G)=\{\,a^{n}b^{n}\mid n\ge1\,\}$ である(句構造言語 の記事の例)。空語も含めた $\{a^{n}b^{n}\mid n\in\mathbb{N}\}$ を生成するには、新しい開始記号 $S_0$ をとり $S_0\to S$、$S_0\to\varepsilon$ を加えればよい。文脈自由文法 $S\to aSb$、$S\to\varepsilon$ は $\varepsilon$ 規則を持つので文脈依存文法ではないが、生成言語は同じである。一般に文脈自由言語は文脈依存言語である(prop-context-sensitive-language-includes-cfl)。
$\Sigma=\{a,b,c\}$、$V=\{S,B,C\}$ とし、規則を
$$S\to aSBC,\quad S\to aBC,\quad CB\to BC,\quad aB\to ab,\quad bB\to bb,\quad bC\to bc,\quad cC\to cc$$
とする。この文法は非収縮文法であり、$L(G)=\{\,a^{n}b^{n}c^{n}\mid n\ge1\,\}$ である(prop-context-sensitive-language-anbncn)。規則 $CB\to BC$ は $2$ つの変数記号を入れ替えるもので、def-context-sensitive-language-grammar の「文脈の中の一つの変数記号を書き換える」形をしていないが、rem-context-sensitive-language-strict-anbncn のように文脈依存文法の形の規則に置き換えられる。$\{a^{n}b^{n}c^{n}\}$ は文脈自由言語ではない(文脈自由言語 の記事の命題)ので、文脈自由言語のクラスは文脈依存言語のクラスに真に含まれる。
ex-context-sensitive-language-anbncn の規則 $CB\to BC$ を、新しい変数記号 $W,Z$ を用いた四つの規則
$$CB\to CZ,\qquad CZ\to WZ,\qquad WZ\to WC,\qquad WC\to BC$$
で置き換えると、各規則は文脈依存文法の形(それぞれ文脈 $(C,\varepsilon)$ の中の $B$、文脈 $(\varepsilon,Z)$ の中の $C$、文脈 $(W,\varepsilon)$ の中の $Z$、文脈 $(\varepsilon,C)$ の中の $W$ を一つの記号で置き換える)をしており、四つを続けて適用すると $CB\Rightarrow CZ\Rightarrow WZ\Rightarrow WC\Rightarrow BC$ となって $CB\to BC$ と同じ効果を持つ。$Z$ を消せる規則は $WZ\to WC$ だけ、$W$ を消せる規則は $WC\to BC$ だけであり、$W$ は $Z$ の直前の $C$ からしか生じないので、終端文字列に至る導出ではこの四つの規則は必ず同じ組の上でこの順に使われ、他の規則と交互に使われても効果は $CB\to BC$ に等しい。したがって得られる文脈依存文法は同じ言語 $\{a^{n}b^{n}c^{n}\mid n\ge1\}$ を生成する。任意の非収縮文法についてこの種の書き換えが可能であることが thm-context-sensitive-language-kuroda の内容である。
$\Sigma=\{a,b\}$ 上の言語 $\{\,ww\mid w\in\Sigma^{*}\,\}$ は文脈依存言語である。文脈自由言語ではない(文脈自由言語 の記事の注意)。文法は、$w$ の各記号をコピーしてマーカーで右端まで運ぶ規則の組で作れるが、線形有界オートマトンで受理できること(前半と後半を一記号ずつ照合する)を見るほうが容易であり、thm-context-sensitive-language-lba により文脈依存言語であることが従う。同様に $\{a^{n}b^{m}c^{n}d^{m}\}$、$\{a^{2^{n}}\}$、素数個の $a$ からなる文字列全体なども文脈依存言語である(HU79 第 9 章)。
$\Sigma=\{a,b\}$、$V=\{S,A\}$、$R=\{S\to aAb,\ A\to\varepsilon\}$ は句構造文法であり $S\Rightarrow aAb\Rightarrow ab$ により $L(G)=\{ab\}$ を生成するが、規則 $A\to\varepsilon$ は開始記号でない変数記号を空語に書き換えるので、文脈依存文法の規則の形をしていない。これは「文法が文脈依存文法である」という性質を満たさない例であって、「言語 $\{ab\}$ が文脈依存言語である」ことを否定する例ではない($S\to ab$ の一本で生成できる)。文法の形と、それが生成する言語のクラスは区別しなければならない。同様に、$\varepsilon$ 規則を持つ文脈自由文法は文脈依存文法ではないが、生成言語はつねに文脈依存言語である(prop-context-sensitive-language-includes-cfl)。
所属問題が判定できる言語(帰納的言語)であって文脈依存でないものが存在する。証明は対角線論法による。文脈依存文法を有限のアルファベット上の文字列として符号化し、文字列 $w_i$ と文法の符号を並べて、$L:=\{\,w_i\mid w_i\notin L(G_i)\,\}$($G_i$ は $w_i$ が符号化する文脈依存文法)とおくと、prop-context-sensitive-language-decidable により $L$ の所属は判定できるが、$L$ はどの $L(G_i)$ とも異なる(HU79 §9.3)。この言語は「帰納的言語である」という性質を満たすが、「文脈依存言語である」という性質を満たさない。したがって文脈依存言語のクラスは帰納的言語のクラスに、さらに句構造言語のクラスに真に含まれる。
文脈依存文法(より一般に非収縮文法)$G$ の $S\to\varepsilon$ 以外の各規則 $\alpha\to\beta$ について $|\alpha|\le|\beta|$ が成り立つ。したがって、$S\to\varepsilon$ を使わない導出 $\eta_0\Rightarrow\eta_1\Rightarrow\cdots\Rightarrow\eta_n$ において $|\eta_0|\le|\eta_1|\le\cdots\le|\eta_n|$ である。さらに、$w\ne\varepsilon$ の導出 $S\Rightarrow^{*}w$ は $S\to\varepsilon$ を使わない。
規則 $\gamma A\delta\to\gamma\alpha\delta$ について、$|\gamma A\delta|=|\gamma|+1+|\delta|$、$|\gamma\alpha\delta|=|\gamma|+|\alpha|+|\delta|$ であり、$\alpha\ne\varepsilon$ より $|\alpha|\ge1$ なので $|\gamma A\delta|\le|\gamma\alpha\delta|$ である。非収縮文法では定義そのものである。一歩 $\gamma'\alpha\delta'\Rightarrow\gamma'\beta\delta'$ で長さは $|\beta|-|\alpha|\ge0$ だけ変わるので、長さの列は単調非減少である。最後に、$S\to\varepsilon$ を含む文法では $S$ は右辺に現れないので、$S$ が現れる文字列は導出の最初の $S$ だけである。$S\to\varepsilon$ をこれに適用すると $\varepsilon$ になり、$\varepsilon$ からは何も導出できない。よって $w\ne\varepsilon$ の導出では $S\to\varepsilon$ は使われない。
ex-context-sensitive-language-anbncn の文法 $G$ について $L(G)=\{\,a^{n}b^{n}c^{n}\mid n\ge1\,\}$ が成り立つ。
($\supset$)$n\ge1$ とする。$S\to aSBC$ を $n-1$ 回、$S\to aBC$ を $1$ 回適用して $S\Rightarrow^{*}a^{n}(BC)^{n}$ を得る。$CB\to BC$ を繰り返して、$C$ の右にある $B$ を順に左へ移せば $a^{n}B^{n}C^{n}$ になる($C$ の右にある $B$ の個数の和は各適用で $1$ 減るので有限回で終わる)。次に $aB\to ab$ を $1$ 回、$bB\to bb$ を $n-1$ 回適用して $a^{n}b^{n}C^{n}$、$bC\to bc$ を $1$ 回、$cC\to cc$ を $n-1$ 回適用して $a^{n}b^{n}c^{n}$ を得る(句構造言語 の記事の命題(導出の文脈への代入合致性)により、部分文字列の書き換えは全体の中で実行できる)。
($\subset$)$S$ から導出されるすべての文字列 $\theta$ について、次の三つが成り立つことを導出の長さに関する帰納法で示す。記号 $x$ の $\theta$ における出現回数を $\#_x(\theta)$ と書く。
任意の文脈自由言語は文脈依存言語である。逆は成り立たない。
$L$ を文脈自由言語とする。文脈自由言語 の記事の命題(空語規則の除去)により、$L=L(G')$ となる文脈自由文法 $G'=(V,\Sigma,R',S')$ で、$\varepsilon$ 規則が高々 $S'\to\varepsilon$ だけであり、それがあるのは $\varepsilon\in L$ のときに限り、$S'$ がどの規則の右辺にも現れないものがとれる。$R'$ の $S'\to\varepsilon$ 以外の各規則 $A\to\alpha$ は $\alpha\ne\varepsilon$ を満たすので、$\gamma=\delta=\varepsilon$ とおいた文脈依存文法の規則 $\gamma A\delta\to\gamma\alpha\delta$ である。$S'\to\varepsilon$ があれば、それは文脈依存文法の空語の規約をちょうど満たす。よって $G'$ はそのまま文脈依存文法であり、導出と生成言語の定義は同じであるから $L=L(G')$ は文脈依存言語である。逆が成り立たないことは ex-context-sensitive-language-anbncn と prop-context-sensitive-language-anbncn による。
言語 $L$ について次は同値である。
文脈依存文法 $G=(V,\Sigma,R,S)$ と文字列 $w\in\Sigma^{*}$ が与えられたとき、$w\in L(G)$ かどうかは有限の手続きで判定できる。すなわち、文脈依存言語は帰納的言語(所属問題が判定できる言語)である。
$w=\varepsilon$ の場合:prop-context-sensitive-language-nondecreasing により、$S\to\varepsilon$ 以外の規則は長さを減らさないので、$\varepsilon$ に至る導出は最初の $S$ に直接 $S\to\varepsilon$ を適用するものに限る($S$ が長さ $2$ 以上の文字列の一部になった後は、$S\to\varepsilon$ を適用しても長さ $1$ 以上の文字列が残り、以後長さは減らない。また $S$ は右辺に現れないので、$S$ 以外の長さ $1$ の文字列から $S$ に戻ることもない)。よって $\varepsilon\in L(G)$ であることは $S\to\varepsilon\in R$ と同値であり、有限の検査で判定できる。
$w\ne\varepsilon$ の場合:$n:=|w|$ とおく。同じ命題により、$S\Rightarrow^{*}w$ の導出は $S\to\varepsilon$ を使わず、途中に現れる文字列の長さはすべて $n$ 以下である。$V\cup\Sigma$ 上の長さ $n$ 以下の文字列全体 $\Gamma_n$ は有限集合であり、$\eta,\theta\in\Gamma_n$ について $\eta\Rightarrow\theta$ かどうかは、$\eta$ の各部分文字列と $R$ の各規則の左辺を比べればよいので有限の手続きで決まる。したがって $\Gamma_n$ を頂点、$\Rightarrow$ を辺とする有限の有向グラフが構成でき、$w\in L(G)$ は「このグラフで $S$ から $w$ に到達できる」ことと同値である。有限グラフの到達可能性は、$S$ から到達できる頂点の集合を辺をたどって順に拡げていく(既に加えた頂点は再訪しない)ことで有限回で計算できる。
prf-context-sensitive-language-decidable は、すべての導出が有限で終わると主張しているのではない。規則 $A\to A$ のような循環があれば無限に続く導出が存在する。主張は、所属を判定するための探索が有限の範囲で済むということである。この探索に必要な記憶量は $|\Gamma_n|$ に比例し、$n$ について指数的であるが、非決定的に導出を一本だけ推測して照合するなら記憶量は $n$ に比例する。これが線形有界オートマトンとの対応(thm-context-sensitive-language-lba)の直感的な内容である。
言語 $L$ が文脈依存言語であることと、$L$ を受理する非決定性線形有界オートマトン(入力の長さに比例した長さのテープしか使えない非決定性 Turing 機械)が存在することは同値である。
文脈依存言語のクラスは、和集合、連接、Kleene 閉包、共通部分、鏡像、および補集合について閉じている。
和集合・連接・Kleene 閉包・鏡像については、Kuroda 標準形などで終端記号を分離した文法をとり、文脈自由言語 の記事の命題(閉包性)と同様の構成をする(規則の左辺が複数の記号からなるため、二つの文法の変数記号を互いに素にし、境界をまたいで規則が適用されないように分離形にする必要がある。HU79 第 11 章)。共通部分については線形有界オートマトンの積構成による(HU79 §9.3)。補集合について閉じていること(Immerman–Szelepcsényi の定理)は長く未解決であったが、N. Immerman と R. Szelepcsényi が 1987 年に独立に、非決定性の空間計算量クラスが補集合で閉じることを示して解決した(Imm88、Sze88)。
文脈依存言語は Chomsky階層(表は 形式言語 の記事の補足)のタイプ 1 に位置する。文脈自由言語を真に含み(prop-context-sensitive-language-includes-cfl)、帰納的言語(所属問題が判定できる言語)に真に含まれ(prop-context-sensitive-language-decidable と rem-context-sensitive-language-nonexample-recursive)、したがって句構造言語に真に含まれる(句構造言語 の記事の命題)。
$$\text{正規言語}\subsetneq\text{文脈自由言語}\subsetneq\text{文脈依存言語}\subsetneq\text{帰納的言語}\subsetneq\text{句構造言語}$$
文脈依存文法は N. Chomsky(Cho59)が階層のタイプ 1 として導入した。文脈の形の規則と非収縮規則の同値、および線形有界オートマトンとの対応は Kuroda(Kur64)による。補集合に関する閉包性は 1987 年まで未解決であった(Imm88、Sze88)。標準的な教科書として HU79 第 9 章、Igr11 第 5 章を挙げる。HMU06 と Sip12 は文脈依存言語をほとんど扱わない。
Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する