正規言語

同義語:regular language正則言語タイプ3言語

概要

正規言語(regular language)とは、生成規則が $A\to wB$ または $A\to w$($w$ は終端記号の列)の形に限られた右線形文法によって生成される形式言語のことである。Kleene の定理により、正規言語のクラスは正規表現で表せる言語のクラス、および有限オートマトンで受理できる言語のクラスと一致し、「有限個の状態だけを記憶として判定できる言語」と理解できる。和・連接・Kleene 閉包・補集合・共通部分・鏡像・商について閉じており、Myhill–Nerode の定理は右不変な同値関係の類の個数の有限性によって正規性を特徴づける。反復補題は $\{0^{n}1^{n}\}$ のような言語が正規でないことを示す標準的な道具であり、正規言語は Chomsky 階層の最下位(タイプ 3)に位置する。

$$\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$ はアルファベット、$\Sigma^{*}$ はその上の文字列全体、$\varepsilon$ は空語を表す。

右線形文法

右線形文法(right-linear grammar)とは、$4$ つ組 $G=(V,\Sigma,R,S)$ であって次を満たすものをいう。

  • $V$ は $\Sigma$ と交わらない空でない有限集合(変数記号、非終端記号の集合)
  • $R$ は $V\times(\Sigma^{*}V\cup\Sigma^{*})$ の有限部分集合(生成規則の集合)
  • $S\in V$(開始記号)
    $(A,\alpha)\in R$ を $A\to\alpha$ と書く。すなわち各生成規則は $A\to wB$($w\in\Sigma^{*}$、$B\in V$)または $A\to w$($w\in\Sigma^{*}$)の形であり、右辺には終端記号の列の末尾に高々一つの変数記号が現れる。
    $(V\cup\Sigma)^{*}$ の文字列 $\gamma A\delta$ の中の変数記号 $A$ の一つの出現を、生成規則 $A\to\alpha$ によって $\alpha$ で置き換える操作を $\gamma A\delta\Rightarrow\gamma\alpha\delta$ と書き、$\Rightarrow$ を有限回($0$ 回を含む)続けて得られる関係を $\Rightarrow^{*}$ と書く(導出)。$G$ が生成する言語は
    $$L(G):=\{\,w\in\Sigma^{*}\mid S\Rightarrow^{*}w\,\}$$
    である。右線形文法では、$S$ から導出される文字列はつねに $xA$($x\in\Sigma^{*}$、$A\in V$)または $x\in\Sigma^{*}$ の形をしており、後者に達した時点で導出は終わる。
正規言語

$\Sigma$ 上の言語 $L\subset\Sigma^{*}$ が正規言語(regular language)であるとは、ある右線形文法 $G$ が存在して $L=L(G)$ となることをいう。右線形文法を正規文法(regular grammar)、タイプ 3 の文法ともいう。

左線形文法

左線形文法(left-linear grammar)とは、生成規則の集合を $V\times(V\Sigma^{*}\cup\Sigma^{*})$ の有限部分集合に置き換えた $4$ つ組 $(V,\Sigma,R,S)$ である。すなわち各規則は $A\to Bw$ または $A\to w$($w\in\Sigma^{*}$)の形であり、変数記号が右辺の先頭に現れる。導出と生成言語は右線形文法と同じに定める。左線形文法が生成する言語のクラスは正規言語のクラスと一致する(prop-regular-language-left-linear)。

定義の流儀

正規言語を「有限オートマトンで受理される言語」または「正規表現で表される言語」として定義する教科書も多い(Sip12 §1.1、HMU06 §2.2)。三つの定義は thm-regular-language-kleene により同じクラスを定めるので、どれを出発点にしても以後の理論は変わらない。旧来の日本語文献では「正則言語」ともいう。右線形文法と左線形文法の規則を一つの文法に混ぜると正規言語でない言語を生成しうるので(rem-regular-language-mixed-linear)、「線形文法」と「正規文法」は区別される。

直感

正規言語は「有限個の状態だけを記憶として持つ機械で判定できる言語」である。文字列を左から $1$ 記号ずつ読み進めながら、これまでに読んだ部分について有限個の場合のどれに当たるかだけを覚えておけば受理・非受理を決められる、という条件がその特徴づけである。右線形文法の導出 $S\Rightarrow x_1A_1\Rightarrow x_1x_2A_2\Rightarrow\cdots$ は、文字列を左から生成しながら「現在の変数記号」という有限個の状態を持ち歩く過程であり、有限オートマトンの計算そのものである(prop-regular-language-grammar-automaton)。
有限個の状態では「開き括弧を何個読んだか」のような無限個の値を区別できないので、対応の取れた括弧列や $\{0^{n}1^{n}\}$ は正規言語でない。この限界を精密に述べたものが反復補題(prop-regular-language-pumping)であり、正規言語の反例を作る標準的な道具である。

例

文字列全体

$\Sigma=\{0,1\}$ とする。$\Sigma^{*}$ は正規言語である。実際、$V=\{S\}$、$R=\{S\to0S,\ S\to1S,\ S\to\varepsilon\}$ とすると、$S\Rightarrow^{*}xS\Rightarrow x$ により任意の $x\in\Sigma^{*}$ が生成され、逆に生成される文字列はすべて $\Sigma^{*}$ の元である。同じ文法で規則 $S\to\varepsilon$ を除けば $L(G)=\emptyset$ になり、$R=\{S\to\varepsilon\}$ とすれば $L(G)=\{\varepsilon\}$ になる。

1 をちょうど 3 個含む文字列

$\Sigma=\{0,1\}$ 上で、$1$ をちょうど $3$ 個含む文字列全体は正規言語である。$V=\{S,A_1,A_2,A_3\}$ とし
$$S\to0S,\quad S\to1A_1,\quad A_1\to0A_1,\quad A_1\to1A_2,\quad A_2\to0A_2,\quad A_2\to1A_3,\quad A_3\to0A_3,\quad A_3\to\varepsilon$$
とする。$1$ を生成するたびに変数記号の添字が一つ進み、$A_3$ でしか導出を終えられないので、ちょうど $3$ 個の $1$ を含む文字列だけが生成される。たとえば $S\Rightarrow0S\Rightarrow01A_1\Rightarrow011A_2\Rightarrow0110A_2\Rightarrow01101A_3\Rightarrow01101$ である。対応する有限オートマトンは 有限オートマトン の記事の例、正規表現 $0^{*}10^{*}10^{*}10^{*}$ は 正規表現 の記事の例にある。

自然数の二進表現

先頭に不要な $0$ を付けない自然数の二進表現全体 $\{0\}\cup1\{0,1\}^{*}$ は正規言語である。$V=\{S,A\}$ とし
$$S\to0,\quad S\to1A,\quad A\to0A,\quad A\to1A,\quad A\to\varepsilon$$
とすればよい。$0$ の表記だけは最上位桁が $0$ なので、この言語を「先頭が $0$ でない文字列全体」と言い換えることはできない。$S\Rightarrow1A\Rightarrow10A\Rightarrow101A\Rightarrow101$ は $101$ の導出である。

有限言語

任意の有限言語 $L=\{w_1,\ldots,w_m\}\subset\Sigma^{*}$ は正規言語である。$V=\{S\}$、$R=\{S\to w_1,\ldots,S\to w_m\}$ とすれば $L(G)=L$ である($m=0$ なら $R=\emptyset$ で $L(G)=\emptyset$)。したがって正規言語のクラスは、有限言語から出発して和・連接・Kleene閉包で閉じたクラス(prop-regular-language-closure-regular-operations)を含む。実はこれらの演算で得られる言語がすべてであることが thm-regular-language-kleene の内容である。

反例:前半と後半の長さが等しい文字列

$L=\{\,0^{n}1^{n}\mid n\in\mathbb{N}\,\}$ は正規言語ではない。$L$ が正規であると仮定し、prop-regular-language-pumping の定数 $p$ をとる。$w=0^{p}1^{p}\in L$ は $|w|\ge p$ なので、$w=xyz$、$|y|\ge1$、$|xy|\le p$、すべての $m\in\mathbb{N}$ について $xy^{m}z\in L$ となる分解がある。$|xy|\le p$ より $xy$ は $w$ の先頭 $p$ 記号の中に収まるので $y=0^{r}$($r\ge1$)である。$m=0$ とすると $xz=0^{p-r}1^{p}$ となり、$0$ の個数が $1$ の個数より少ないので $xz\notin L$ である。これは矛盾であり、$L$ は正規でない。$L$ は「文脈自由言語である」という性質を満たし(文脈自由言語 の記事の例)、「正規言語である」という性質を満たさない。したがって「文脈自由ならば正規」という含意は成り立たない。同じ議論で、対応の取れた括弧列全体(Dyck言語)も正規でないことが分かる。

反例:偶数長の回文

$\Sigma=\{0,1\}$ 上の偶数長の回文全体 $P=\{\,ww^{\mathrm{R}}\mid w\in\Sigma^{*}\,\}$($w^{\mathrm{R}}$ は $w$ の鏡像)は正規言語ではない。正規であると仮定して反復補題の定数 $p$ をとり、$0^{p}110^{p}\in P$ を $xyz$($|xy|\le p$、$|y|\ge1$)と分解すると $y=0^{r}$($r\ge1$)であり、$xz=0^{p-r}110^{p}$ は左右の $0$ の個数が異なるので回文でない。これは矛盾である。$P$ は文脈自由文法 $S\to0S0$、$S\to1S1$、$S\to\varepsilon$ で生成される文脈自由言語である。

反例:右線形と左線形の規則の混在

右線形の規則と左線形の規則を一つの文法に混ぜると、生成される言語は正規とは限らない。$V=\{S,A\}$、$R=\{S\to0A,\ A\to S1,\ S\to\varepsilon\}$ の各規則はそれぞれ右線形または左線形の形をしているが、$S\Rightarrow0A\Rightarrow0S1\Rightarrow00A1\Rightarrow00S11\Rightarrow0011$ のように $L(G)=\{0^{n}1^{n}\mid n\in\mathbb{N}\}$ を生成し、これは rem-regular-language-nonexample-anbn により正規でない。「各規則が右線形または左線形」という性質は満たすが「生成言語が正規」という性質は満たさず、正規言語の定義で規則の向きを文法全体で揃える必要があることを示す。

性質

有限オートマトンとの同値

右線形文法と有限オートマトンの同値性

$\Sigma$ 上の言語 $L$ について、$L$ が右線形文法で生成されることと、$L$ を受理する有限オートマトンが存在することは同値である。

(文法からオートマトンへ)$G=(V,\Sigma,R,S)$ を右線形文法とする。状態集合を $V$ に新しい状態 $f$ と、各規則ごとの中間状態を加えたものとし、遷移を次のように定める。規則 $r\colon A\to a_1a_2\cdots a_kB$($k\ge0$、$a_i\in\Sigma$、$B\in V$)に対し、$k\ge1$ なら新しい状態 $r_1,\ldots,r_{k-1}$ を用意して遷移 $A\xrightarrow{a_1}r_1\xrightarrow{a_2}r_2\cdots r_{k-1}\xrightarrow{a_k}B$ を置き($k=1$ なら $A\xrightarrow{a_1}B$)、$k=0$ なら $\varepsilon$ 遷移 $A\xrightarrow{\varepsilon}B$ を置く。規則 $A\to a_1\cdots a_k$ に対しても同様に、終点を $f$ とした遷移の列($k=0$ なら $A\xrightarrow{\varepsilon}f$)を置く。初期状態を $S$、受理状態集合を $\{f\}$ とした有限オートマトン $\mathcal{A}$ をとる。中間状態には対応する規則の遷移以外は出入りしないので、$\mathcal{A}$ において変数記号 $A$ から変数記号 $B$(または $f$)へ他の変数記号や $f$ を経由せずに至る経路は、ちょうど一つの規則 $A\to wB$(または $A\to w$)に対応し、そのラベルは $w$ である。
「$A\Rightarrow^{*}w$($w\in\Sigma^{*}$)であることと、$\mathcal{A}$ において $A$ から $f$ へラベル $w$ の経路があることは同値」を示す。導出 $A\Rightarrow w_1A_1\Rightarrow w_1w_2A_2\Rightarrow\cdots\Rightarrow w_1\cdots w_{n-1}A_{n-1}\Rightarrow w_1\cdots w_n=w$ は、規則 $A\to w_1A_1$、$A_1\to w_2A_2$、$\ldots$、$A_{n-1}\to w_n$ の列にほかならず、これは上の対応により $A$ から $A_1$、$A_1$ から $A_2$、$\ldots$、$A_{n-1}$ から $f$ へのラベル $w_1,\ldots,w_n$ の経路の列に対応する。逆に $A$ から $f$ への経路を、通過する変数記号で区切れば、同じ対応により規則の列、したがって導出が得られる。$A=S$ とすれば $L(G)=L(\mathcal{A})$ である。
(オートマトンから文法へ)$L=L(\mathcal{A})$ とする。有限オートマトン の記事の命題($\varepsilon$ 遷移の除去)により $\mathcal{A}=(Q,\Sigma,\Delta,q_0,F)$ は $\varepsilon$ 遷移を持たないとしてよい。変数記号の集合を $Q$、開始記号を $q_0$ とし、生成規則を
$$R:=\{\,p\to aq\mid (p,a,q)\in\Delta\,\}\cup\{\,p\to\varepsilon\mid p\in F\,\}$$
と定めた右線形文法 $G$ をとる。「$p\Rightarrow^{*}w$ であることと、$p$ から $F$ の元へラベル $w$ の経路があることは同値」を $|w|$ に関する帰納法で示す。$w=\varepsilon$ のとき、$p\Rightarrow^{*}\varepsilon$ となるのは規則 $p\to\varepsilon$ を使うときに限るので(他の規則は必ず記号を一つ生成する)、$p\in F$ と同値であり、これは長さ $0$ の経路の存在と同値である。$w=aw'$ のとき、$p\Rightarrow^{*}aw'$ の最初の一歩は $p\to aq$ の形で、続いて $q\Rightarrow^{*}w'$ である。帰納法の仮定により後者は $q$ から $F$ へのラベル $w'$ の経路の存在と同値であり、これに遷移 $(p,a,q)$ を前置すれば $p$ からのラベル $aw'$ の経路が得られる。逆も同様である。$p=q_0$ とおけば $L(G)=L(\mathcal{A})$ である。

Kleene の定理

$\Sigma$ 上の言語 $L$ について次は同値である。

  1. $L$ は正規言語である。
  2. $L$ を表す正規表現が存在する。
  3. $L$ を受理する有限オートマトンが存在する。
Kleene の定理の証明の所在
  1. と (3) の同値は prop-regular-language-grammar-automaton で示した。(2) から (3) は 正規表現 の記事の命題(正規表現から有限オートマトンへの構成)、(3) から (2) は 正規表現 の記事の命題(有限オートマトンから正規表現への変換)で証明する。原論文は Kle56、教科書では HMU06 §3.2、Sip12 Theorem 1.54 を参照。以下では、この定理により正規言語 $L$ に対して $L$ を受理する完全な決定性有限オートマトン(DFA。有限オートマトン の記事の定義)が存在すること(有限オートマトン の記事の命題(部分集合構成))を自由に用いる。

反復補題

正規言語の反復補題

$L$ を正規言語とする。このとき正の整数 $p$(反復定数)が存在して、$|w|\ge p$ を満たす任意の $w\in L$ は、次の三条件を満たす分解 $w=xyz$ を持つ。

  1. $|y|\ge1$
  2. $|xy|\le p$
  3. すべての $m\in\mathbb{N}$ について $xy^{m}z\in L$
    $p$ としては、$L$ を受理する DFA の状態数がとれる。

$L$ を受理する DFA $\mathcal{A}=(Q,\Sigma,\delta,q_0,F)$ をとり、$p:=|Q|$ とおく。$|w|\ge p$ なる $w=a_1a_2\cdots a_n\in L$($n\ge p$)に対し、$q_i:=\delta(q_0,a_1\cdots a_i)$($i=0,1,\ldots,n$)とおく。$q_0,q_1,\ldots,q_p$ は $p+1$ 個の状態からなり $Q$ の元は $p$ 個なので、鳩の巣原理により $q_i=q_j$ となる $0\le i< j\le p$ が存在する。
$x:=a_1\cdots a_i$、$y:=a_{i+1}\cdots a_j$、$z:=a_{j+1}\cdots a_n$ とおく。$|y|=j-i\ge1$(条件 1)、$|xy|=j\le p$(条件 2)である。$\delta(q_0,x)=q_i$、$\delta(q_i,y)=q_j=q_i$ であるから、$m$ に関する帰納法により $\delta(q_i,y^{m})=q_i$ がすべての $m\in\mathbb{N}$ について成り立つ。よって
$$\delta(q_0,xy^{m}z)=\delta(\delta(\delta(q_0,x),y^{m}),z)=\delta(q_i,z)=\delta(q_j,z)=\delta(q_0,w)=q_n\in F$$
であり、$xy^{m}z\in L$(条件 3)である。

反復補題の使い方

反復補題は正規言語の必要条件であって十分条件ではない。すなわち、三条件を満たす分解が常に存在しても正規でない言語がある(HMU06 §4.1 の演習、Sip12 Problem 1.54 を参照)。したがって反復補題は「正規でない」ことを示す(対偶を使う)ためにだけ使える。使い方は rem-regular-language-nonexample-anbn のとおりで、$p$ が与えられたとき、相手が選ぶどんな分解 $xyz$ に対しても $xy^{m}z\notin L$ となる $m$ を示せる文字列 $w$ を選ぶ。条件 2 は $y$ の位置を先頭付近に限定するために使う。正規でないことを示す別の方法として Myhill–Nerode の定理(prop-regular-language-myhill-nerode)がある。

閉包性

和・連接・Kleene 閉包に関する閉包性

$L_1,L_2,L\subset\Sigma^{*}$ が正規言語ならば、和集合 $L_1\cup L_2$、連接 $L_1L_2$、Kleene 閉包 $L^{*}$ はいずれも正規言語である。

$L_1=L(G_1)$、$L_2=L(G_2)$、$G_i=(V_i,\Sigma,R_i,S_i)$ を右線形文法とし、変数記号の名前を付け替えて $V_1\cap V_2=\emptyset$ としておく。右線形文法の導出では、文字列はつねに $xA$($x\in\Sigma^{*}$、$A$ は変数記号)の形をしており、変数記号は一つしかないので、規則を適用する場所の選択はなく、導出はその規則の列によって定まる。
和集合:新しい開始記号 $S$ を用意し、$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$ の変数記号しか現れないので、それぞれ $G_1$、$G_2$ の導出である。よって $L(G_\cup)=L_1\cup L_2$。
連接:$R_1$ の規則のうち右辺に変数記号を含まないもの $A\to w$($w\in\Sigma^{*}$)をすべて $A\to wS_2$ に置き換えた規則集合を $R_1'$ とし、$G_\cdot:=(V_1\cup V_2,\Sigma,R_1'\cup R_2,S_1)$ とする。$G_\cdot$ における終端文字列の導出は、$V_1$ の変数記号だけが現れる区間と $V_2$ の変数記号だけが現れる区間に分かれ、境目はちょうど置き換えた規則 $A\to wS_2$ の適用である。前半の区間で $A\to wS_2$ を $A\to w$ に戻せば $G_1$ の導出 $S_1\Rightarrow^{*}u$($u\in L_1$)が得られ、後半は $G_2$ の導出 $S_2\Rightarrow^{*}v$($v\in L_2$)である。よって生成される文字列は $uv$ の形であり、逆に $u\in L_1$、$v\in L_2$ の導出をこの順につなげば $uv$ が導出される。よって $L(G_\cdot)=L_1L_2$。
Kleene 閉包:$L=L(G)$、$G=(V,\Sigma,R,S)$ とし、新しい開始記号 $S'\notin V$ を用意して
$$R_{*}:=R\cup\{\,A\to wS\mid (A\to w)\in R,\ w\in\Sigma^{*}\,\}\cup\{S'\to S,\ S'\to\varepsilon\},\qquad G_{*}:=(V\cup\{S'\},\Sigma,R_{*},S')$$
とおく。元の規則 $A\to w$(終了規則)はそのまま残し、同じ文字列を生成したあと $S$ から再開する規則 $A\to wS$(再開規則)を加えている。$S'\Rightarrow\varepsilon$ により $\varepsilon\in L(G_{*})$ である。$S'\Rightarrow S$ から始まる終端文字列の導出を、再開規則の適用の箇所で区切ると、各区間は $S$ から始まり、$R$ の規則を用いて $S\Rightarrow^{*}xA$ と進んだのち、再開規則 $A\to wS$(最後の区間では終了規則 $A\to w$)を適用したものである。再開規則を対応する終了規則に戻せば各区間は $G$ の導出 $S\Rightarrow^{*}xw$ になるので、生成される文字列は $L$ の元を有限個並べたもの、すなわち $L^{*}$ の元である。逆に $u_1,\ldots,u_n\in L$ に対し、$u_1,\ldots,u_{n-1}$ の $G$ における導出の最後の一歩を再開規則に替えてつなぎ、$u_n$ の導出で終えれば $S'\Rightarrow S\Rightarrow^{*}u_1\cdots u_n$ が得られる。よって $L(G_{*})=L^{*}$。
いずれの構成でも、規則の右辺は「終端記号の列の末尾に高々一つの変数記号」という形を保つので、得られる文法は右線形である。

Kleene 閉包の構成で終了規則を残す理由

終了規則 $A\to w$ を再開規則 $A\to wS$ に置き換えてしまう(残さない)と、導出を終えられなくなり生成言語は $\{\varepsilon\}$ になる。また、元の開始記号 $S$ に $S\to\varepsilon$ を加えるだけの構成も一般には正しくない。たとえば $S\to aS$、$S\to b$ は $\{a^{n}b\mid n\in\mathbb{N}\}$ を生成するが、$S\to\varepsilon$ を加えると $a$ が生成され、これは Kleene 閉包に属さない。prf-regular-language-closure-regular-operations の構成は、終了と再開を別の規則で区別することでこの問題を避けている。

補集合・共通部分・差に関する閉包性

$L_1,L_2\subset\Sigma^{*}$ が正規言語ならば、補集合 $\Sigma^{*}\setminus L_1$、共通部分 $L_1\cap L_2$、差 $L_1\setminus L_2$ は正規言語である。

thm-regular-language-kleene により、$L_1$、$L_2$ を受理する DFA $\mathcal{A}_1$、$\mathcal{A}_2$ がとれる。有限オートマトン の記事の命題(積構成と補集合)により、$\mathcal{A}_1$ の受理状態集合を入れ替えた DFA は $\Sigma^{*}\setminus L_1$ を、積 $\mathcal{A}_1\times\mathcal{A}_2$ は $L_1\cap L_2$ を受理する。よって両者は正規言語であり、$L_1\setminus L_2=L_1\cap(\Sigma^{*}\setminus L_2)$ も正規言語である。補集合の構成には完全な DFA が必要であること(NFA や不完全な DFA の受理状態を入れ替えても補集合にならないこと)は 有限オートマトン の記事の注意を参照。

鏡像と商に関する閉包性

$L\subset\Sigma^{*}$ が正規言語ならば、鏡像 $L^{\mathrm{R}}$ は正規言語である。また任意の言語 $K\subset\Sigma^{*}$(正規でなくてもよい)に対し、左商 $K^{-1}L=\{\,v\mid\exists u\in K,\ uv\in L\,\}$ と右商 $LK^{-1}=\{\,u\mid\exists v\in K,\ uv\in L\,\}$ は正規言語である。特に文字列 $w$ による商 $w^{-1}L$、$Lw^{-1}$ は正規言語である。

鏡像:$L$ を受理する $\varepsilon$ 遷移のない有限オートマトン $\mathcal{A}=(Q,\Sigma,\Delta,q_0,F)$ をとる(有限オートマトン の記事の命題($\varepsilon$ 遷移の除去))。新しい初期状態 $s\notin Q$ を用意し、
$$\Delta^{\mathrm{R}}:=\{\,(q,a,p)\mid(p,a,q)\in\Delta\,\}\cup\{\,(s,\varepsilon,f)\mid f\in F\,\},\qquad \mathcal{A}^{\mathrm{R}}:=(Q\cup\{s\},\Sigma,\Delta^{\mathrm{R}},s,\{q_0\})$$
とおく。$\mathcal{A}$ における $q_0$ から $f\in F$ へのラベル $a_1\cdots a_n$ の経路 $q_0,p_1,\ldots,p_{n-1},f$ を逆にたどれば、$\mathcal{A}^{\mathrm{R}}$ における $f$ から $q_0$ へのラベル $a_n\cdots a_1$ の経路が得られ、先頭に $s\xrightarrow{\varepsilon}f$ を付ければ受理経路になる。逆に $\mathcal{A}^{\mathrm{R}}$ の受理経路は $s\xrightarrow{\varepsilon}f$ で始まり、以後は $\Delta$ の遷移を逆向きにたどるので、逆にたどり直せば $\mathcal{A}$ の受理経路になる。よって $L(\mathcal{A}^{\mathrm{R}})=L^{\mathrm{R}}$。
商:$L$ を受理する DFA $\mathcal{A}=(Q,\Sigma,\delta,q_0,F)$ をとる。左商については、$I_K:=\{\,\delta(q_0,u)\mid u\in K\,\}\subset Q$ とおき、新しい初期状態 $s$ から $I_K$ の各状態への $\varepsilon$ 遷移を加えた有限オートマトン $\mathcal{A}_K$ を考える。$v$ が $\mathcal{A}_K$ で受理されることは、ある $q\in I_K$ について $\delta(q,v)\in F$ となること、すなわちある $u\in K$ について $\delta(q_0,uv)\in F$、つまり $uv\in L$ となることと同値である。よって $L(\mathcal{A}_K)=K^{-1}L$。右商については、受理状態集合を $F_K:=\{\,q\in Q\mid\exists v\in K,\ \delta(q,v)\in F\,\}$ に取り替えた DFA を考えると、$u$ が受理されることは $\delta(q_0,u)\in F_K$、すなわちある $v\in K$ について $uv\in L$ となることと同値である。よってこの DFA は $LK^{-1}$ を受理する。$K$ が正規でなくても $I_K$、$F_K$ は $Q$ の部分集合であって有限に定まるので、これは存在証明として有効である(ただし $K$ の記述から $I_K$、$F_K$ を計算する手続きがあると主張しているわけではない)。

Myhill–Nerode の定理

言語の右不変同値関係

$\Sigma$ 上の言語 $L$ に対し、$\Sigma^{*}$ 上の二項関係 $\sim_L$ を
$$x\sim_L y\ :\iff\ \forall z\in\Sigma^{*}\ (xz\in L\iff yz\in L)$$
で定める。$\sim_L$ は同値関係であり、$x\sim_L y$ ならば任意の $a\in\Sigma$ について $xa\sim_L ya$ である(右不変性)。$\sim_L$ を $L$ の Nerode 同値関係といい、同値類の個数を $L$ の指数(index)という。

Myhill–Nerode の定理

$\Sigma$ 上の言語 $L$ について次は同値である。

  1. $L$ は正規言語である。
  2. $\sim_L$ の同値類は有限個である。
    このとき $L$ を受理する DFA の状態数の最小値は $\sim_L$ の同値類の個数に等しい。

まず $\sim_L$ が同値関係であることは、定義が「$z$ を付けたときの $L$ への所属が一致する」という条件の同値関係であることから明らかであり、右不変性は、$x\sim_L y$ のとき任意の $z$ について $(xa)z=x(az)\in L\iff y(az)=(ya)z\in L$ となることから従う。
(1) から (2):$L$ を受理する DFA $\mathcal{A}=(Q,\Sigma,\delta,q_0,F)$ をとる。$\delta(q_0,x)=\delta(q_0,y)$ ならば、任意の $z$ について $\delta(q_0,xz)=\delta(\delta(q_0,x),z)=\delta(\delta(q_0,y),z)=\delta(q_0,yz)$ なので $xz\in L\iff yz\in L$、すなわち $x\sim_L y$ である。したがって「同じ状態 $\delta(q_0,x)$ に着く」という同値関係は $\sim_L$ を細分する(その各同値類は $\sim_L$ のある同値類に含まれる)。この同値関係の類は高々 $|Q|$ 個なので、$\sim_L$ の同値類の個数も $|Q|$ 以下であり、有限である。
(2) から (1):同値類全体の有限集合 $Q:=\Sigma^{*}/{\sim_L}$ を状態集合とし、$x$ の同値類を $[x]$ と書いて
$$\delta([x],a):=[xa],\qquad q_0:=[\varepsilon],\qquad F:=\{\,[x]\mid x\in L\,\}$$
と定める。$\delta$ は右不変性により代表元の取り方によらず定まり、$F$ も矛盾なく定まる($x\sim_L y$ なら $z=\varepsilon$ をとって $x\in L\iff y\in L$)。$w$ に関する帰納法により $\delta([x],w)=[xw]$ であるから、$\delta(q_0,w)=[w]$ であり、$w$ が受理されることは $[w]\in F$、すなわち $w\in L$ と同値である。よってこの DFA は $L$ を受理し、thm-regular-language-kleene により $L$ は正規である。
最後の主張:(1) から (2) の議論により任意の DFA の状態数は同値類の個数以上であり、(2) から (1) で構成した DFA の状態数はちょうど同値類の個数である。

Myhill–Nerode の定理の使い方

定理の (2) は正規性の必要十分条件なので、反復補題と違って正規でないことの証明にも正規であることの証明にも使える。$L=\{0^{n}1^{n}\}$ では $i\ne j$ のとき $0^{i}1^{i}\in L$、$0^{j}1^{i}\notin L$ なので $0^{i}\not\sim_L0^{j}$ であり、同値類は無限個ある。よって $L$ は正規でない。また (2) から (1) の構成で得られる DFA は最小の状態数を持ち、状態の付け替えを除いて一意である(最小 DFA。有限オートマトン の記事の補足)。定理は A. Nerode(Ner58)による。教科書では HMU06 §4.4、HU79 §3.4 を参照。

左線形文法

左線形文法との同値性

言語 $L$ が正規であることと、ある左線形文法で生成されることは同値である。

まず次の補題を示す。補題(規則の右辺を鏡像にした文法は鏡像言語を生成する):規則がすべて $A\to\alpha$($A\in V$、$\alpha\in(V\cup\Sigma)^{*}$)の形である任意の文法(右線形文法・左線形文法・文脈自由文法のいずれでもよい)$G=(V,\Sigma,R,S)$ に対し、各規則の右辺を鏡像に置き換えた文法を $G^{\mathrm{R}}:=(V,\Sigma,\{A\to\alpha^{\mathrm{R}}\mid A\to\alpha\in R\},S)$ とおくと、$L(G^{\mathrm{R}})=L(G)^{\mathrm{R}}$ である。実際、$G$ の導出 $\alpha_0\Rightarrow\alpha_1\Rightarrow\cdots\Rightarrow\alpha_n$ の各文字列を鏡像に置き換えると、規則 $A\to\alpha$ による置き換え $\gamma A\delta\Rightarrow\gamma\alpha\delta$ は $\delta^{\mathrm{R}}A\gamma^{\mathrm{R}}\Rightarrow\delta^{\mathrm{R}}\alpha^{\mathrm{R}}\gamma^{\mathrm{R}}$、すなわち規則 $A\to\alpha^{\mathrm{R}}$ による置き換えになるので、$G^{\mathrm{R}}$ の導出 $S\Rightarrow^{*}\alpha_n^{\mathrm{R}}$ が得られる。逆も同様($(G^{\mathrm{R}})^{\mathrm{R}}=G$)であるから、$w\in L(G)$ と $w^{\mathrm{R}}\in L(G^{\mathrm{R}})$ は同値であり、$L(G^{\mathrm{R}})=L(G)^{\mathrm{R}}$ である。
$G$ が右線形なら $G^{\mathrm{R}}$ は左線形であり($(wB)^{\mathrm{R}}=Bw^{\mathrm{R}}$)、$G$ が左線形なら $G^{\mathrm{R}}$ は右線形である。
$L$ が正規なら、prop-regular-language-closure-reversal-quotient により $L^{\mathrm{R}}$ も正規なので右線形文法 $G$ で $L(G)=L^{\mathrm{R}}$ となるものがあり、左線形文法 $G^{\mathrm{R}}$ が $L(G^{\mathrm{R}})=(L^{\mathrm{R}})^{\mathrm{R}}=L$ を生成する。逆に $L$ が左線形文法 $G$ で生成されるなら、右線形文法 $G^{\mathrm{R}}$ が $L^{\mathrm{R}}$ を生成するので $L^{\mathrm{R}}$ は正規であり、再び鏡像の閉包性から $L=(L^{\mathrm{R}})^{\mathrm{R}}$ も正規である。

個数と決定問題

正規言語の個数

固定したアルファベット $\Sigma$ 上の正規言語は可算無限個であり、したがって正規でない言語が存在する。

右線形文法は、変数記号の名前を $A_1,A_2,\ldots$ と付け替えれば、有限個の記号からなる有限の文字列として書き表せるので、右線形文法全体は可算集合である(形式言語 の記事の命題(言語の個数)の証明と同じ番号づけによる)。各文法は一つの言語を定めるから正規言語は高々可算個であり、ex-regular-language-finite により有限言語はすべて正規で無限個あるので可算無限個である。一方 $\Sigma^{*}$ の部分集合全体は非可算であるから、正規でない言語が存在する。

正規言語については多くの問題が機械的に判定できる。$L$ を受理する DFA が与えられたとき、文字列 $w$ が $L$ に属するかは $w$ を読んで到達状態を見ればよく、$L=\emptyset$ かは 有限オートマトン の記事の命題(短い受理語と空性の判定)により、$L=\Sigma^{*}$ かは補集合の空性により、$L_1=L_2$ かは対称差 $(L_1\setminus L_2)\cup(L_2\setminus L_1)$ の空性により判定できる(prop-regular-language-closure-boolean)。$L$ が無限集合かどうかも、反復補題の $p$ に対して長さが $p$ 以上 $2p$ 未満の受理語の有無を調べれば判定できる(HMU06 §4.3)。

補足

名称と歴史

「正規」(regular)という名称は Kleene(Kle56)の regular events に由来し、正規表現・正規言語・正規文法に共通して使われる。正規言語のクラスは、有限言語を含み、和・連接・Kleene 閉包で閉じた最小の言語のクラスとしても特徴づけられる(ex-regular-language-finite と thm-regular-language-kleene)。有限オートマトンによる特徴づけと非決定性の除去は Rabin と Scott(RS59)、右線形文法による特徴づけは Chomsky の階層(形式言語 の記事の補足)のタイプ 3 として与えられた。標準的な教科書として HMU06 第 2–4 章、Sip12 第 1 章、Igr11 第 2–3 章を挙げる。

母関数

正規言語の数え上げ関数(長さ $n$ の元の個数)$\Gamma_L(n)$ は、DFA の遷移行列の冪から計算でき、その母関数 $\sum_n\Gamma_L(n)z^{n}$ は有理関数である。形式言語 の記事の補足を参照。

関連項目

参考文献

[5]
Stephen C. Kleene, Representation of events in nerve nets and finite automata, Automata Studies (Annals of Mathematics Studies 34), Princeton University Press, 1956, 3–41

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