形式言語

同義語:formal language

概要

形式言語(formal language)とは、有限個の記号からなるアルファベット $\Sigma$ の上で、記号を有限個並べた文字列全体 $\Sigma^{*}$ の部分集合のことである。文字列の連接を演算とすると $\Sigma^{*}$ は空語 $\varepsilon$ を単位元とする自由モノイドになり、言語の連接・和集合・Kleene 閉包 $L^{*}$・鏡像・商・数え上げ関数はこの構造から自然に定まる。言語を有限的に指定する仕組み(文法・オートマトン・正規表現)の制限の強さに応じて、正規言語・文脈自由言語・文脈依存言語・句構造言語という真の包含からなる Chomsky 階層が得られ、形式言語はオートマトン理論・計算可能性理論・プログラミング言語の構文論の共通の土台となる。言語全体は非可算個あるのに対し、どの有限的な仕組みで指定できる言語も可算個しかない。

$$\newcommand{C}[0]{\mathbb{C}} \newcommand{N}[0]{\mathbb{N}} \newcommand{Q}[0]{\mathbb{Q}} \newcommand{R}[0]{\mathbb{R}} \newcommand{Z}[0]{\mathbb{Z}} $$

前提知識: 集合, 写像, モノイド, 数学的帰納法

定義

形式言語とは、有限個の記号を並べて作られる「文字列の集合」のことである。まず記号・文字列・連接を定め、次に主題である形式言語と、言語の上の基本的な演算を定める。

アルファベットと文字列

空でない有限集合 $\Sigma$ をアルファベット(alphabet。記号集合ともいう)といい、その元を記号(symbol, letter)という。$\Sigma$ の元を有限個($0$ 個でもよい)並べたもの $w=a_1a_2\cdots a_n$($a_i\in\Sigma$)を $\Sigma$ 上の文字列(string。語(word)、記号列ともいう)といい、並べた記号の個数 $n$ を $w$ の長さ(length)といって $|w|$ と書く。長さ $0$ の文字列を空語(empty word)といい $\varepsilon$ で表す。$\Sigma$ 上の文字列全体の集合を $\Sigma^{*}$、空語を除いた文字列全体を $\Sigma^{+}:=\Sigma^{*}\setminus\{\varepsilon\}$ と書く。
二つの文字列 $u=a_1\cdots a_n$ と $v=b_1\cdots b_m$ に対し、それらを順に並べた文字列 $a_1\cdots a_nb_1\cdots b_m$ を $u$ と $v$ の連接(concatenation)といい、$u\cdot v$ または単に $uv$ と書く。文字列 $w$ と自然数 $n$ に対し、$w$ を $n$ 個並べた文字列 $w^{n}$ を $w^{0}:=\varepsilon$、$w^{n+1}:=w^{n}w$ で帰納的に定める。

アルファベットの有限性は、以下で扱う理論(オートマトン・文法)が有限個の記号だけを扱うために課す約束であり、文字列や連接の定義そのものには不要である。無限個の記号を許す流儀もある(Backus–Naur記法 の記事の例を参照)。

形式言語

アルファベット $\Sigma$ 上の形式言語(formal language)とは、$\Sigma^{*}$ の部分集合 $L\subset\Sigma^{*}$ のことである。誤解のおそれがなければ単に言語(language)という。$\Sigma^{*}$ 自身、空集合 $\emptyset$、空語だけからなる $\{\varepsilon\}$ はいずれも $\Sigma$ 上の形式言語である。

言語の連接と Kleene 閉包

$\Sigma$ 上の言語 $L_1,L_2$ に対し、それらの連接を
$$L_1L_2:=\{\,uv\mid u\in L_1,\ v\in L_2\,\}$$
と定める。言語 $L$ と自然数 $n$ に対し、$L^{0}:=\{\varepsilon\}$、$L^{n+1}:=L^{n}L$ と帰納的に定め、
$$L^{*}:=\bigcup_{n\in\mathbb{N}}L^{n},\qquad L^{+}:=\bigcup_{n\ge1}L^{n}$$
をそれぞれ $L$ の Kleene 閉包(Kleene closure。Kleene 星ともいう)、正閉包(positive closure)という。$L^{*}$ は「$L$ の元を $0$ 個以上並べて得られる文字列全体」、$L^{+}$ は「$1$ 個以上並べて得られる文字列全体」である。アルファベット $\Sigma$ を長さ $1$ の文字列の集合とみなせば、この意味での $\Sigma^{*}$、$\Sigma^{+}$ は def-formal-language-alphabet の記法と一致する。

接頭辞・接尾辞・部分文字列

文字列 $w$ に対し、$w=uv$ となる文字列 $u,v$ が存在するとき $u$ を $w$ の接頭辞(prefix)、$v$ を $w$ の接尾辞(suffix)という。$w=xuy$ となる $x,y$ が存在するとき $u$ を $w$ の部分文字列(substring)という。接頭辞・接尾辞・部分文字列 $u$ が $u\ne w$ を満たすとき真の(proper)接頭辞・接尾辞・部分文字列という。空語 $\varepsilon$ と $w$ 自身はつねに $w$ の接頭辞かつ接尾辞である。

鏡像

文字列 $w=a_1a_2\cdots a_n$ に対し、記号の順序を逆にした文字列 $a_n\cdots a_2a_1$ を $w$ の鏡像(reversal。反転ともいう)といい $w^{\mathrm{R}}$ と書く。帰納的には $\varepsilon^{\mathrm{R}}:=\varepsilon$、$(ua)^{\mathrm{R}}:=a\,u^{\mathrm{R}}$($a\in\Sigma$)で定まる。言語 $L$ の鏡像を $L^{\mathrm{R}}:=\{\,w^{\mathrm{R}}\mid w\in L\,\}$ と定める。$w^{\mathrm{R}}=w$ を満たす文字列を回文(palindrome)という。

左商と右商

$\Sigma$ 上の言語 $L$ と文字列 $w\in\Sigma^{*}$ に対し、
$$w^{-1}L:=\{\,v\in\Sigma^{*}\mid wv\in L\,\},\qquad Lw^{-1}:=\{\,u\in\Sigma^{*}\mid uw\in L\,\}$$
をそれぞれ $L$ の $w$ による左商(left quotient)、右商(right quotient)という。より一般に、言語 $K$ による左商・右商を
$$K^{-1}L:=\bigcup_{w\in K}w^{-1}L=\{\,v\mid \exists w\in K,\ wv\in L\,\},\qquad LK^{-1}:=\bigcup_{w\in K}Lw^{-1}$$
と定める。

数え上げ関数と母関数

$\Sigma$ 上の言語 $L$ に対し、長さ $n$ の元の個数を与える写像
$$\Gamma_L\colon\mathbb{N}\to\mathbb{N},\qquad \Gamma_L(n):=\#\{\,w\in L\mid |w|=n\,\}$$
を $L$ の数え上げ関数(counting function)という($\Sigma$ が有限なので各 $n$ について右辺は有限である)。形式的冪級数
$$\mathbf{L}(z):=\sum_{n\in\mathbb{N}}\Gamma_L(n)\,z^{n}$$
を $L$ の母関数(generating function)という。

直感

形式言語の理論は、文字列を「意味」から切り離し、記号の並びとしてだけ扱う。連接を演算とみなすと $\Sigma^{*}$ は空語を単位元とするモノイドになり(prop-formal-language-free-monoid)、$\Sigma$ が生成する自由モノイドと呼ばれる。形式言語とは自由モノイドの部分集合であり、連接・和集合・Kleene 閉包はこの代数構造から自然に決まる言語の演算である。
理論の中心的な問いは「どのような有限的な仕組みで、無限個の文字列からなる言語を指定できるか」である。仕組みには、文字列を生成する形式文法と、文字列を読んで受理するか否かを判定する機械(オートマトン)の二種類がある。仕組みを制限するほど扱える言語の範囲は狭くなり、正規言語・文脈自由言語・文脈依存言語・句構造言語という入れ子の階層(Chomsky階層。表は rem-formal-language-chomsky-hierarchy)が得られる。この記事はその共通の土台となる語彙を定め、各クラスの定義と性質はそれぞれの記事に譲る。

例

文字列の連接と鏡像

ラテン文字をアルファベットとする。文字列 $\mathit{math}$ と $\mathit{pedia}$ の連接は $\mathit{mathpedia}$、$\mathit{no}$ と $\mathit{where}$ の連接は $\mathit{nowhere}$ である。$\varepsilon$ と $\varepsilon$ の連接は $\varepsilon$ である。$\mathit{mathpedia}$ の鏡像は $\mathit{aidephtam}$、$\mathit{tomato}$ の鏡像は $\mathit{otamot}$ であり、$\mathit{lol}$ の鏡像は $\mathit{lol}$ 自身、すなわち $\mathit{lol}$ は回文である。$\mathit{math}$ は $\mathit{mathpedia}$ の真の接頭辞、$\mathit{pedia}$ は真の接尾辞、$\mathit{ath}$ は部分文字列である。

有限言語と全体

$\Sigma=\{0,1\}$ とする。$\{\varepsilon,0,01,011\}$ のような有限集合は言語である(有限言語)。$\Sigma^{*}=\{\varepsilon,0,1,00,01,10,11,000,\ldots\}$ も言語であり、$\Gamma_{\Sigma^{*}}(n)=2^{n}$、母関数は $\sum_n 2^{n}z^{n}=1/(1-2z)$ である。$\Sigma^{+}$ は $\Sigma^{*}$ から空語を除いた言語で、$\Sigma^{*}=\{\varepsilon\}\cup\Sigma^{+}$ である。

前半と後半の長さが一致する文字列

$\Sigma=\{0,1\}$ 上の言語 $L=\{\,0^{n}1^{n}\mid n\in\mathbb{N}\,\}=\{\varepsilon,01,0011,000111,\ldots\}$ は、$0$ の並びの直後に同じ個数の $1$ が続く文字列全体である。$\Gamma_L(n)$ は $n$ が偶数なら $1$、奇数なら $0$ で、母関数は $1/(1-z^{2})$ である。この言語は文脈自由言語であるが正規言語ではなく(正規言語 の記事の反例)、言語クラスの階層が真に異なることを示す最も基本的な例である。

言語の演算

$\Sigma=\{a,b\}$、$L_1=\{a,ab\}$、$L_2=\{\varepsilon,b\}$ とする。$L_1L_2=\{a,ab,abb\}$ である($ab$ は $a\cdot b$ としても $ab\cdot\varepsilon$ としても得られるが、集合としては $1$ 回だけ数える)。$L_2^{*}=\{b\}^{*}=\{\varepsilon,b,bb,\ldots\}$、$L_1^{\mathrm{R}}=\{a,ba\}$、$a^{-1}L_1=\{\varepsilon,b\}$、$b^{-1}L_1=\emptyset$、$L_1b^{-1}=\{a\}$ である。また $\{a\}^{*}\{b\}^{*}=\{\,a^{m}b^{n}\mid m,n\in\mathbb{N}\,\}$ であり、これは ex-formal-language-anbn の言語を真に含む。

反例:空集合と空語だけの言語

$\emptyset$(元を一つも持たない言語)と $\{\varepsilon\}$(空語という $1$ 個の元を持つ言語)は異なる言語であり、混同しやすい。$\Gamma_{\emptyset}(n)=0$(すべての $n$)に対し $\Gamma_{\{\varepsilon\}}(0)=1$ である。演算に対する振る舞いも異なる。任意の言語 $L$ について $\emptyset L=L\emptyset=\emptyset$ であるが $\{\varepsilon\}L=L\{\varepsilon\}=L$ である。すなわち $\emptyset$ は連接の吸収元、$\{\varepsilon\}$ は連接の単位元であり、「$\emptyset$ は連接の単位元である」という含意は成り立たない。また Kleene 閉包については $\emptyset^{*}=\{\varepsilon\}^{*}=\{\varepsilon\}$ であって $\emptyset^{*}=\emptyset$ ではない($L^{0}=\{\varepsilon\}$ が必ず含まれるため)。

反例:連接は可換でない

$\Sigma=\{a,b\}$ のとき $ab\ne ba$ であり、言語についても $\{a\}\{b\}=\{ab\}\ne\{ba\}=\{b\}\{a\}$ である。したがって $(\Sigma^{*},\cdot)$ はモノイドではあるが可換モノイドではなく、「$L_1L_2=L_2L_1$」という等式は一般には成り立たない。$|\Sigma|=1$ の場合に限り、$\Sigma^{*}$ は $(\mathbb{N},+)$ と同型な可換モノイドになる。

性質

文字列のモノイドの自由性

連接を演算とする $(\Sigma^{*},\cdot)$ は $\varepsilon$ を単位元とするモノイドである。さらに、任意のモノイド $M$ と任意の写像 $f\colon\Sigma\to M$ に対し、$f$ を拡張するモノイドの準同型写像 $\bar f\colon\Sigma^{*}\to M$(すべての $a\in\Sigma$ について $\bar f(a)=f(a)$)がただ一つ存在する。すなわち $\Sigma^{*}$ は $\Sigma$ が生成する自由モノイドである。

結合律:$u=a_1\cdots a_k$、$v=b_1\cdots b_l$、$w=c_1\cdots c_m$ とすると、$(uv)w$ も $u(vw)$ も記号を $a_1,\dots,a_k,b_1,\dots,b_l,c_1,\dots,c_m$ の順に並べた同じ文字列である。単位元:$\varepsilon$ は記号を持たないので、任意の $w$ について $\varepsilon w=w\varepsilon=w$ である。
拡張の存在:$\bar f(a_1\cdots a_n):=f(a_1)f(a_2)\cdots f(a_n)$($M$ における積。$n=0$ のときは $M$ の単位元 $1_M$)と定める。文字列の記号への分解 $w=a_1\cdots a_n$ は一意である(文字列とは記号の有限列そのものである)から、$\bar f$ は矛盾なく定まる。$u=a_1\cdots a_k$、$v=b_1\cdots b_l$ に対し $\bar f(uv)=f(a_1)\cdots f(a_k)f(b_1)\cdots f(b_l)=\bar f(u)\bar f(v)$ であり、$\bar f(\varepsilon)=1_M$ だから $\bar f$ はモノイドの準同型写像で、$\bar f(a)=f(a)$ を満たす。
一意性:$g\colon\Sigma^{*}\to M$ が $f$ を拡張する準同型写像なら、$n$ に関する帰納法により $g(a_1\cdots a_n)=g(a_1)\cdots g(a_n)=f(a_1)\cdots f(a_n)=\bar f(a_1\cdots a_n)$ である($n=0$ では $g(\varepsilon)=1_M=\bar f(\varepsilon)$)。よって $g=\bar f$ である。

言語の演算の基本法則

$\Sigma$ 上の言語 $L,L_1,L_2,L_3$ について次が成り立つ。

  1. $(L_1L_2)L_3=L_1(L_2L_3)$、$\{\varepsilon\}L=L\{\varepsilon\}=L$、$\emptyset L=L\emptyset=\emptyset$。
  2. $L_1(L_2\cup L_3)=L_1L_2\cup L_1L_3$、$(L_1\cup L_2)L_3=L_1L_3\cup L_2L_3$。
  3. $L^{m}L^{n}=L^{m+n}$($m,n\in\mathbb{N}$)、$L^{*}L^{*}=L^{*}$、$(L^{*})^{*}=L^{*}$。
  4. $L^{+}=LL^{*}=L^{*}L$、$L^{*}=\{\varepsilon\}\cup L^{+}$、$L^{*}=\{\varepsilon\}\cup LL^{*}$。
  1. $(L_1L_2)L_3$ の元は $(uv)w$($u\in L_1$、$v\in L_2$、$w\in L_3$)の形の文字列全体であり、$L_1(L_2L_3)$ の元は $u(vw)$ の形の文字列全体である。prop-formal-language-free-monoid の結合律により両者は一致する。$\{\varepsilon\}L=\{\varepsilon w\mid w\in L\}=L$ であり、$L\{\varepsilon\}=L$ も同様。$\emptyset L$ の元は $uv$($u\in\emptyset$)の形だが $u$ は存在しないので $\emptyset L=\emptyset$ であり、$L\emptyset=\emptyset$ も同様。
  2. $w\in L_1(L_2\cup L_3)$ とは、ある $u\in L_1$ と $v\in L_2\cup L_3$ で $w=uv$ となることであり、$v\in L_2$ なら $w\in L_1L_2$、$v\in L_3$ なら $w\in L_1L_3$ である。逆の包含も同様で、右からの分配も同じ議論による。同じ議論により、連接は任意個の和集合と交換する:$L\left(\bigcup_{i}M_i\right)=\bigcup_{i}LM_i$。
  3. $L^{m}L^{n}=L^{m+n}$ を $n$ に関する帰納法で示す。$n=0$ では (1) により $L^{m}\{\varepsilon\}=L^{m}$。$n\to n+1$ では $L^{m}L^{n+1}=L^{m}(L^{n}L)=(L^{m}L^{n})L=L^{m+n}L=L^{m+n+1}$(結合律と帰納法の仮定)。次に $L^{*}L^{*}=L^{*}$:$w\in L^{*}L^{*}$ なら $w=uv$、$u\in L^{m}$、$v\in L^{n}$ となる $m,n$ があり、$w\in L^{m}L^{n}=L^{m+n}\subset L^{*}$。逆に $w\in L^{*}$ なら $w=w\varepsilon\in L^{*}L^{0}\subset L^{*}L^{*}$。最後に $(L^{*})^{*}=L^{*}$:$L^{*}=(L^{*})^{1}\subset(L^{*})^{*}$ である。逆に $(L^{*})^{n}\subset L^{*}$ を $n$ に関する帰納法で示せばよい。$n=0$ では $\{\varepsilon\}=L^{0}\subset L^{*}$、$n\to n+1$ では $(L^{*})^{n+1}=(L^{*})^{n}L^{*}\subset L^{*}L^{*}=L^{*}$。
    1. の最後の注意により $LL^{*}=\bigcup_{n}LL^{n}=\bigcup_{n}L^{1+n}=L^{+}$ であり、$L^{*}L=\bigcup_n L^{n}L=\bigcup_n L^{n+1}=L^{+}$。$L^{*}=L^{0}\cup\bigcup_{n\ge1}L^{n}=\{\varepsilon\}\cup L^{+}$ であり、最後の式は $L^{+}=LL^{*}$ から従う。
鏡像の性質

文字列 $u,v\in\Sigma^{*}$ と言語 $L,L_1,L_2$ について次が成り立つ。

  1. $(uv)^{\mathrm{R}}=v^{\mathrm{R}}u^{\mathrm{R}}$、$(u^{\mathrm{R}})^{\mathrm{R}}=u$、$|u^{\mathrm{R}}|=|u|$。
  2. $(L_1L_2)^{\mathrm{R}}=L_2^{\mathrm{R}}L_1^{\mathrm{R}}$、$(L_1\cup L_2)^{\mathrm{R}}=L_1^{\mathrm{R}}\cup L_2^{\mathrm{R}}$、$(L^{*})^{\mathrm{R}}=(L^{\mathrm{R}})^{*}$、$(L^{\mathrm{R}})^{\mathrm{R}}=L$。
  3. $(u^{-1}L)^{\mathrm{R}}=L^{\mathrm{R}}(u^{\mathrm{R}})^{-1}$。
    特に $w\mapsto w^{\mathrm{R}}$ は $\Sigma^{*}$ からそれ自身への全単射であり、連接の順序を逆にする(反準同型)。
  1. $(uv)^{\mathrm{R}}=v^{\mathrm{R}}u^{\mathrm{R}}$ を $|v|$ に関する帰納法で示す。$v=\varepsilon$ なら両辺とも $u^{\mathrm{R}}$ である。$v=v'a$($a\in\Sigma$)なら、定義と帰納法の仮定により $(uv'a)^{\mathrm{R}}=a\,(uv')^{\mathrm{R}}=a\,v'^{\mathrm{R}}u^{\mathrm{R}}=(v'a)^{\mathrm{R}}u^{\mathrm{R}}$。次に $(u^{\mathrm{R}})^{\mathrm{R}}=u$ を $|u|$ に関する帰納法で示す。$u=\varepsilon$ は明らか。$u=u'a$ なら $(u^{\mathrm{R}})^{\mathrm{R}}=(a\,u'^{\mathrm{R}})^{\mathrm{R}}=(u'^{\mathrm{R}})^{\mathrm{R}}a^{\mathrm{R}}=u'a=u$(いま示した式と $a^{\mathrm{R}}=a$ を用いた)。長さが保たれることは定義から明らかである。
  2. $(L_1L_2)^{\mathrm{R}}=\{(uv)^{\mathrm{R}}\mid u\in L_1,v\in L_2\}=\{v^{\mathrm{R}}u^{\mathrm{R}}\mid u\in L_1,v\in L_2\}=L_2^{\mathrm{R}}L_1^{\mathrm{R}}$。和集合との交換は明らか。$(L^{n})^{\mathrm{R}}=(L^{\mathrm{R}})^{n}$ が $n$ に関する帰納法で従い($(L^{n+1})^{\mathrm{R}}=(L^{n}L)^{\mathrm{R}}=L^{\mathrm{R}}(L^{\mathrm{R}})^{n}=(L^{\mathrm{R}})^{n+1}$。最後の等号は prop-formal-language-operation-laws (3))、両辺の $n$ についての和集合をとれば $(L^{*})^{\mathrm{R}}=(L^{\mathrm{R}})^{*}$。$(L^{\mathrm{R}})^{\mathrm{R}}=L$ は (1) から従う。
  3. $v\in u^{-1}L\iff uv\in L\iff v^{\mathrm{R}}u^{\mathrm{R}}\in L^{\mathrm{R}}\iff v^{\mathrm{R}}\in L^{\mathrm{R}}(u^{\mathrm{R}})^{-1}$ である。
    $w\mapsto w^{\mathrm{R}}$ は (1) により自分自身を逆写像とする全単射であり、$(uv)^{\mathrm{R}}=v^{\mathrm{R}}u^{\mathrm{R}}$ は反準同型性である。
言語の個数

$\Sigma^{*}$ は可算無限集合(可算集合)であり、$\Sigma$ 上の形式言語全体の集合 $\mathcal{P}(\Sigma^{*})$ は非可算集合である。

$k:=|\Sigma|\ge1$ とする。長さ $n$ の文字列は $k^{n}$ 個で有限であり、$\Sigma^{*}=\bigcup_{n\in\mathbb{N}}\{w\mid |w|=n\}$ は有限集合の可算個の和集合だから可算である。実際、$\Sigma$ の記号に順序をつけ、長さの昇順に、同じ長さでは辞書式順に並べれば、$\Sigma^{*}$ の元を $\mathbb{N}$ で番号づける全単射 $i\mapsto w_i$ が具体的に得られる。また $\varepsilon,a,aa,aaa,\ldots$($a\in\Sigma$)は互いに異なるので $\Sigma^{*}$ は無限集合である。
$\mathcal{P}(\Sigma^{*})$ が非可算であることはCantorの定理(集合からその冪集合への全射はない)から従う。直接示すなら、言語の列 $L_0,L_1,L_2,\ldots$ が任意に与えられたとき、上の番号づけを用いて $D:=\{\,w_i\mid w_i\notin L_i\,\}$ とおけば、各 $i$ について $w_i\in D\iff w_i\notin L_i$ だから $D\ne L_i$ であり、$D$ はどの $L_i$ とも異なる言語である。よって言語全体を番号づけることはできない。

この命題は、言語を指定する有限的な仕組み(文法・オートマトン・正規表現など、いずれも有限個の記号で書ける)がどれほど強力でも、その仕組みで指定できる言語は可算個しかなく、指定できない言語がつねに存在することを意味する。

4 段階の言語クラス

文字列を生成する仕組みである形式文法は、生成規則の形の制限によって $4$ 段階に分けられ、生成される言語のクラスと、それを受理する計算モデルが次のように対応する。この階層を Chomsky 階層(Chomsky hierarchy)といい、N. Chomsky が 1956 年から 1959 年にかけて導入した(Cho59)。

文法のタイプ生成規則の形言語のクラス受理する計算モデル
タイプ 0(句構造文法)$\alpha\to\beta$($\alpha\ne\varepsilon$、$\beta$ は任意)句構造言語Turing機械
タイプ 1(文脈依存文法)$\gamma A\delta\to\gamma\alpha\delta$($\alpha\ne\varepsilon$)文脈依存言語線形有界オートマトン
タイプ 2(文脈自由文法)$A\to\alpha$文脈自由言語プッシュダウンオートマトン
タイプ 3(右線形文法)$A\to wB$、$A\to w$($w\in\Sigma^{*}$)正規言語有限オートマトン

各クラスの定義・例・閉包性・反復補題はそれぞれの記事が扱い、正規表現 の記事はタイプ 3 の言語のもう一つの記述法を扱う。タイプ 1 の文法では、空語を生成するための例外規約(開始記号 $S$ が規則の右辺に現れないときに限り $S\to\varepsilon$ を許す)を採用したうえで、言語のクラスの包含
$$\text{正規言語}\subsetneq\text{文脈自由言語}\subsetneq\text{文脈依存言語}\subsetneq\text{句構造言語}$$
が成り立つ。包含そのものは、各タイプの文法が一つ上のタイプの文法でもある(タイプ 2 からタイプ 1 へは空語規則の除去を経る)ことから従い、文脈自由言語・文脈依存言語・句構造言語 の各記事で証明する。包含が真であることは、$\{0^{n}1^{n}\}$ が文脈自由だが正規でないこと(正規言語 の記事の反例と 文脈自由言語 の記事の例)、$\{a^{n}b^{n}c^{n}\}$ が文脈依存だが文脈自由でないこと(文脈自由言語 の記事の反例と 文脈依存言語 の記事の例)、および文脈依存でない句構造言語の存在(文脈依存言語 の記事の反例。証明は HU79 §9.3 を参照)による。

補足

用語と記法の流儀

「アルファベット」「記号集合」、「文字列」「語」「記号列」、「空語」「空列」は同じ概念の別名であり、文献によって使い分けられる。Kleene 閉包の記号 $L^{*}$ は正規表現の記号 $\alpha^{*}$ と同じ形で書かれる。鏡像を $w^{\mathrm{R}}$ のほか $\tilde w$、$\overleftarrow{w}$ と書く文献もある。連接を $u\cdot v$ と書くか $uv$ と書くかは自由であるが、記号 $a\in\Sigma$ と長さ $1$ の文字列 $a\in\Sigma^{*}$ を同一視する約束は、多くの文献で暗黙に用いられる。標準的な教科書として HMU06・Sip12(英語)、Igr11(日本語)を挙げる。

数え上げと母関数

数え上げ関数と母関数は、言語の「大きさ」を長さごとに測る組合せ論的な道具である。連接 $L_1L_2$ が一意分解可能(各 $w\in L_1L_2$ の $w=uv$、$u\in L_1$、$v\in L_2$ という分解が一意)なら $\Gamma_{L_1L_2}(n)=\sum_{i+j=n}\Gamma_{L_1}(i)\Gamma_{L_2}(j)$、すなわち $\mathbf{L_1L_2}(z)=\mathbf{L_1}(z)\mathbf{L_2}(z)$ が成り立つ。正規言語の母関数はつねに有理関数であり、曖昧でない文脈自由文法で生成される言語の母関数は代数関数である(Chomsky–Schützenberger の定理。Shi17 を参照)。この方向の一般論は数え上げ組合せ論の主題である。

関連項目

参考文献

[1]
John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, Pearson / Addison-Wesley, 2006, §1.5 The Central Concepts of Automata Theory(アルファベット・文字列・言語)、§4.2(言語の演算)
[2]
Michael Sipser, Introduction to the Theory of Computation, Cengage Learning, 2012, §0.2 Mathematical Notions and Terminology(文字列と言語)、§1.1 Regular operations(言語の演算)
[3]
John E. Hopcroft, Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, Addison-Wesley, 1979, Chapter 1 Preliminaries(§1.4 文字列と言語)、Chapter 9 The Chomsky Hierarchy(§9.3 文脈依存言語と帰納的言語の分離、§9.4 言語クラス間の関係)

Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する