有限オートマトン(finite automaton)とは、有限個の状態、入力アルファベット、記号を読んで状態を移す遷移関係、初期状態、受理状態の集合からなる $5$ つ組 $(Q,\Sigma,\Delta,q_0,F)$ で表される計算モデルであり、文字列を左から $1$ 記号ずつ読んで状態を移し、読み終えたときに受理状態にいる経路があればその文字列を受理する。複数の行き先を許す非決定性や、記号を読まずに移る $\varepsilon$ 遷移を許しても受理できる言語の範囲は変わらず、$\varepsilon$ 遷移の除去と部分集合構成により任意の有限オートマトンは等価な決定性有限オートマトン(DFA)に変換できる。受理する言語のクラスは正規言語のクラス、正規表現で表せる言語のクラスと一致し(Kleene の定理)、Chomsky 階層のタイプ 3 に対応する最も基本的な計算モデルである。
有限オートマトンは、アルファベット $\Sigma$ 上の文字列を左から $1$ 記号ずつ読みながら有限個の状態の間を移り、読み終えたときの状態によってその文字列を受理するか否かを決める計算モデルである。本記事では、同じ状態・同じ記号に対して複数の行き先を許し(非決定性)、記号を読まずに状態を移る遷移($\varepsilon$ 遷移)も許す最も一般的な形を基本の定義とし、制限を加えた非決定性有限オートマトン・決定性有限オートマトンをその特別な場合として定める。以下 $\varepsilon$ は空語を表し、$\Sigma$ の元ではないものとする。
有限オートマトン(finite automaton)とは、$5$ つ組 $\mathcal{A}=(Q,\Sigma,\Delta,q_0,F)$ であって次を満たすものをいう。
有限オートマトン $\mathcal{A}=(Q,\Sigma,\Delta,q_0,F)$ が文字列 $w\in\Sigma^{*}$ を受理する(accept)とは、ある $n\in\mathbb{N}$、状態の列 $p_0,p_1,\ldots,p_n\in Q$、ラベルの列 $a_1,\ldots,a_n\in\Sigma\cup\{\varepsilon\}$ が存在して
有限オートマトン $\mathcal{A}=(Q,\Sigma,\Delta,q_0,F)$ が $\varepsilon$ 遷移を持たない($(p,a,q)\in\Delta$ ならば $a\in\Sigma$)とき、$\mathcal{A}$ を非決定性有限オートマトン(nondeterministic finite automaton; NFA)という。さらに、各 $(p,a)\in Q\times\Sigma$ に対して $(p,a,q)\in\Delta$ となる $q$ がちょうど一つ存在するとき、$\mathcal{A}$ を決定性有限オートマトン(deterministic finite automaton; DFA)という。DFA では遷移関係を写像 $\delta\colon Q\times\Sigma\to Q$、$\delta(p,a):=(\text{その一意な }q)$ で表し、$\mathcal{A}=(Q,\Sigma,\delta,q_0,F)$ と書く。$\delta$ を文字列に対して
$$\hat\delta(p,\varepsilon):=p,\qquad \hat\delta(p,wa):=\delta(\hat\delta(p,w),a)\quad(w\in\Sigma^{*},\ a\in\Sigma)$$
と帰納的に拡張すると、DFA が $w$ を受理することは $\hat\delta(q_0,w)\in F$ と同値である($w$ を読む経路が一通りしかないため)。以下、$\hat\delta$ も単に $\delta$ と書く。
DFA の遷移を「各 $(p,a)$ に行き先が高々一つ」とする(部分写像を許す)流儀もある。行き先が定義されていない組があれば、新しい非受理状態 $\bot$ を加え、未定義の遷移と $\bot$ からのすべての遷移を $\bot$ に向ければ、受理言語を変えずに本記事の意味での DFA(各 $(p,a)$ に行き先がちょうど一つ)が得られる。本記事の例では、簡潔さのために行き先のない組を残して書き、その場合は「読める遷移がなく経路が途切れる」と解釈する。また $\varepsilon$ による自己ループ $(p,\varepsilon,p)$ は受理経路から省けるので、あってもなくても受理言語は変わらない。
有限オートマトンは「有限個の状態を記憶として持ち、入力を $1$ 記号ずつ読んで状態を更新し、読み終えたときの状態で合否を決める機械」である。記憶が有限個の状態に限られるため、「これまでに読んだ $1$ の個数が $3$ 個以下か」のように有限個の場合分けで追跡できる条件は判定できるが、「$0$ の並びの後に同じ個数の $1$ が続いているか」のように無限個の値を区別する必要がある条件は判定できない(rem-finite-automaton-nonexample)。
非決定性とは「同じ状況で複数の遷移から任意に選んでよく、うまく選べば受理状態に着けるなら受理する」という約束であり、機械が偶然や並列計算をするという意味ではない。$\varepsilon$ 遷移は「記号を読まずに移ってよい」という自由度で、複数のオートマトンを部品として組み合わせるとき(和・連接・繰り返し)の構成を簡単にする。これらの自由度は表現力を増やさず、任意の有限オートマトンは等価な DFA に変換できる(prop-finite-automaton-subset-construction)。これが有限オートマトンの理論の出発点である。
以下の例ではすべて $\Sigma=\{0,1\}$ とし、遷移は $p\xrightarrow{a}q$ の形で列挙する。
$Q=\{q_0\}$、$F=\{q_0\}$、遷移を $q_0\xrightarrow{0}q_0$、$q_0\xrightarrow{1}q_0$ とする。どの記号を読んでも $q_0$ に留まり、$q_0$ は受理状態だから、空語を含むすべての文字列が受理される:$L(\mathcal{A})=\{0,1\}^{*}$。これは $1$ 状態の DFA である。$F=\emptyset$ に変えれば受理言語は $\emptyset$ になる。
$Q=\{q_0,q_1,q_2\}$、$F=\{q_1\}$、遷移を $q_0\xrightarrow{0}q_1$、$q_0\xrightarrow{1}q_1$、$q_1\xrightarrow{0}q_2$、$q_1\xrightarrow{1}q_2$ とし、$q_2$ からの遷移は置かない。$1$ 記号読むと受理状態 $q_1$ に着き、$2$ 記号読むと非受理状態 $q_2$ に着いてそれ以上読めない。よって $L(\mathcal{A})=\{0,1\}$ であり、空語も長さ $2$ 以上の文字列も受理されない。$q_2\xrightarrow{0}q_2$、$q_2\xrightarrow{1}q_2$ を加えれば本記事の意味での DFA になる。
$Q=\{q_0,q_1,q_2,q_3\}$、$F=\{q_3\}$、遷移を
$$q_i\xrightarrow{0}q_i\ (i=0,1,2,3),\qquad q_i\xrightarrow{1}q_{i+1}\ (i=0,1,2)$$
とする。状態 $q_i$ は「ここまでに読んだ $1$ の個数が $i$」を表す計数器として働く。$1$ を $4$ 個以上含む文字列では $q_3$ で $1$ を読む遷移がなく経路が途切れるので、$L(\mathcal{A})$ は $1$ をちょうど $3$ 個含む文字列全体である。$q_3\xrightarrow{1}q_4$ と $q_4$ からの自己ループを加えれば DFA になる。
ex-finite-automaton-exactly-three と同じ状態集合・初期状態・受理状態 $F=\{q_3\}$・遷移に、次のいずれかの $\varepsilon$ 遷移を加える。
先頭に不要な $0$ を付けない自然数の二進表現全体 $\{0\}\cup1\{0,1\}^{*}$ を受理するオートマトンは、$Q=\{q_0,q_1,q_2\}$、$F=\{q_1,q_2\}$、遷移を $q_0\xrightarrow{0}q_2$、$q_0\xrightarrow{1}q_1$、$q_1\xrightarrow{0}q_1$、$q_1\xrightarrow{1}q_1$ とすればよい。最初に $0$ を読むと $q_2$ に着いてそれ以上読めず、最初に $1$ を読むと以後は任意の記号を読める。$0$、$1$、$10$、$101$ は受理され、$\varepsilon$、$00$、$01$ は受理されない。同じ言語を生成する右線形文法は 正規言語 の記事の例、同じ言語を表す正規表現は 正規表現 の記事の例にある。
$\mathcal{A}_1$ が「$0$ で終わる文字列全体」を、$\mathcal{A}_2$ が「$1$ で終わる文字列全体」を受理するとする。状態の名前を付け替えて二つの状態集合を互いに素にし、新しい初期状態 $q_0$ を加えて $q_0\xrightarrow{\varepsilon}q_{0,1}$、$q_0\xrightarrow{\varepsilon}q_{0,2}$($q_{0,i}$ は $\mathcal{A}_i$ の初期状態)を置き、受理状態集合を $F_1\cup F_2$ とすれば、$L(\mathcal{A}_1)\cup L(\mathcal{A}_2)$(空でなく、$0$ または $1$ で終わる文字列全体)を受理する有限オートマトンが得られる。$q_0$ からどちらの部品に入るかを最初の $\varepsilon$ 遷移で選ぶだけで、部品の内部は変更しない。この構成は 正規表現 の記事の命題(正規表現から有限オートマトンへの構成)で一般化される。
$L=\{\,0^{n}1^{n}\mid n\in\mathbb{N}\,\}$ を受理する有限オートマトンは存在しない。もし存在すれば、部分集合構成により $L$ を受理する DFA が得られる。その状態数を $k$ とする。DFA が $0^{0},0^{1},\ldots,0^{k}$ の $k+1$ 通りの前半を読み終えたときの状態のうち二つは一致する(鳩の巣原理)ので、ある $0\le i< j\le k$ について $0^{i}$ と $0^{j}$ の後を区別できない。したがって $0^{i}1^{i}$ を受理するなら $0^{j}1^{i}\notin L$ も受理してしまい、矛盾する。この議論を一般化した主張が反復補題であり、証明は 正規言語 の記事の命題(正規言語の反復補題)にある。$L$ は「有限個の状態だけで判定できる」という性質を満たさず、「正規言語である」という含意を破る。一方 $L$ は文脈自由言語であり、スタック(後入れ先出しの無限の記憶)を一つ持つプッシュダウンオートマトンで受理できる。
有限オートマトンの三つの形($\varepsilon$-NFA・NFA・DFA)は受理できる言語の範囲が同じである。まず $\varepsilon$ 遷移を除き、次に非決定性を除く。
任意の有限オートマトン $\mathcal{A}=(Q,\Sigma,\Delta,q_0,F)$ に対し、同じ状態集合を持つ NFA $\mathcal{A}'=(Q,\Sigma,\Delta',q_0,F')$ で $L(\mathcal{A}')=L(\mathcal{A})$ となるものが存在する。
状態 $p\in Q$ に対し、$p$ から $\varepsilon$ 遷移だけを $0$ 回以上たどって到達できる状態全体を $E(p)\subset Q$ とおく($\varepsilon$ 閉包。$p\in E(p)$ である)。
$$\Delta':=\{\,(p,a,q)\mid a\in\Sigma,\ \exists p'\in E(p),\ \exists q'\in Q,\ (p',a,q')\in\Delta,\ q\in E(q')\,\},\qquad F':=\{\,p\in Q\mid E(p)\cap F\ne\emptyset\,\}$$
と定める。$\Delta'$ の各元は $\Sigma$ の記号をラベルに持つので $\mathcal{A}'$ は NFA である。
$L(\mathcal{A})\subset L(\mathcal{A}')$:$w=a_1\cdots a_n$($a_i\in\Sigma$)の $\mathcal{A}$ における受理経路をとる。この経路は、$\varepsilon$ 遷移の列、$a_1$ を読む遷移、$\varepsilon$ 遷移の列、$a_2$ を読む遷移、$\ldots$、$a_n$ を読む遷移、$\varepsilon$ 遷移の列、という形に区切れる。$a_i$ を読む遷移を $(p_i',a_i,q_i')$ とし、$q_0':=q_0$ とおく。$i$ 番目の $\varepsilon$ 遷移の列は $q_{i-1}'$ から $p_i'$ に至るので $p_i'\in E(q_{i-1}')$ であり、$q_i'\in E(q_i')$ だから $(q_{i-1}',a_i,q_i')\in\Delta'$ である。最後の $\varepsilon$ 遷移の列は $q_n'$ から $F$ の元に至るので $q_n'\in F'$ である。よって $q_0',q_1',\ldots,q_n'$ は $\mathcal{A}'$ における $w$ の受理経路である。$n=0$ のときは、$q_0$ から $\varepsilon$ 遷移だけで $F$ に至るので $q_0\in F'$ であり、$\varepsilon\in L(\mathcal{A}')$。
$L(\mathcal{A}')\subset L(\mathcal{A})$:$\mathcal{A}'$ における $w=a_1\cdots a_n$ の受理経路 $s_0=q_0,s_1,\ldots,s_n\in F'$ をとる。各 $(s_{i-1},a_i,s_i)\in\Delta'$ について、定義にある $p'\in E(s_{i-1})$、$q'$ をとれば、$\mathcal{A}$ において $s_{i-1}$ から $\varepsilon$ 遷移で $p'$ へ、$a_i$ で $q'$ へ、$\varepsilon$ 遷移で $s_i$ へ移る経路がある。これらをつなぎ、最後に $s_n\in F'$ から $\varepsilon$ 遷移で $F$ の元へ移る経路を加えれば、$\mathcal{A}$ における $w$ の受理経路が得られる。$n=0$ のときは $q_0\in F'$ が $E(q_0)\cap F\ne\emptyset$ を意味し、$\varepsilon\in L(\mathcal{A})$ である。
任意の有限オートマトン $\mathcal{A}$ に対し、$L(\mathcal{D})=L(\mathcal{A})$ となる DFA $\mathcal{D}$ が存在する。$\mathcal{A}$ の状態数が $k$ なら、$\mathcal{D}$ の状態数は $2^{k}$ 以下にとれる。
prop-finite-automaton-epsilon-removal により、$\mathcal{A}=(Q,\Sigma,\Delta,q_0,F)$ は NFA としてよい。状態集合を $Q$ の冪集合 $\mathcal{P}(Q)$ とし、
$$T(S,a):=\{\,q\in Q\mid \exists p\in S,\ (p,a,q)\in\Delta\,\}\quad(S\subset Q,\ a\in\Sigma),\qquad F_{\mathcal{D}}:=\{\,S\subset Q\mid S\cap F\ne\emptyset\,\}$$
とおいて $\mathcal{D}:=(\mathcal{P}(Q),\Sigma,T,\{q_0\},F_{\mathcal{D}})$ と定める。$T$ は各 $(S,a)$ に対して $\mathcal{P}(Q)$ の元をちょうど一つ定める写像なので $\mathcal{D}$ は DFA である。
$w=a_1\cdots a_n$ に対し、$\mathcal{D}$ の状態列を $S_0:=\{q_0\}$、$S_i:=T(S_{i-1},a_i)$ とおくと、$i$ に関する帰納法により
$$S_i=\{\,q\in Q\mid \mathcal{A}\text{ において }q_0\text{ から }a_1\cdots a_i\text{ を読んで }q\text{ に至る経路がある}\,\}$$
が成り立つ。実際 $i=0$ では両辺とも $\{q_0\}$ であり、$i-1$ から $i$ へは、$a_1\cdots a_i$ を読む経路とは $a_1\cdots a_{i-1}$ を読む経路の末尾に遷移 $(p,a_i,q)$ を継ぎ足したものにほかならず、それは $T$ の定義そのものである。したがって $\mathcal{D}$ が $w$ を受理する($S_n\cap F\ne\emptyset$)ことと、$\mathcal{A}$ において $w$ を読んで受理状態に至る経路があることは同値であり、$L(\mathcal{D})=L(\mathcal{A})$ である。状態数は $|\mathcal{P}(Q)|=2^{k}$ であり、$\{q_0\}$ から到達できる状態だけを残せばさらに減らせる。
部分集合構成の $2^{k}$ という上界は一般には改善できない。$\Sigma=\{0,1\}$ 上の言語 $L_k:=\{\,w\mid w\text{ の末尾から }k\text{ 番目の記号が }1\,\}$ は $k+1$ 状態の NFA(最初は自己ループで待ち、$1$ を読んだ時点で非決定的に「ここが末尾から $k$ 番目」と推測して残り $k-1$ 記号を読む)で受理できるが、これを受理する DFA は少なくとも $2^{k}$ 個の状態を必要とする。理由は、末尾 $k$ 記号の $2^{k}$ 通りの組合せを DFA が区別しなければならないことによる(Myhill–Nerode の定理。正規言語 の記事の命題を参照)。非決定性は表現力を増やさないが、記述の簡潔さを指数的に改善しうる。
$\Sigma$ 上の DFA $\mathcal{A}_1=(Q_1,\Sigma,\delta_1,q_1,F_1)$、$\mathcal{A}_2=(Q_2,\Sigma,\delta_2,q_2,F_2)$ に対し、
$$\mathcal{A}_1\times\mathcal{A}_2:=(Q_1\times Q_2,\ \Sigma,\ \delta,\ (q_1,q_2),\ F_1\times F_2),\qquad \delta((p_1,p_2),a):=(\delta_1(p_1,a),\delta_2(p_2,a))$$
とおくと $L(\mathcal{A}_1\times\mathcal{A}_2)=L(\mathcal{A}_1)\cap L(\mathcal{A}_2)$ である。受理状態集合を $(F_1\times Q_2)\cup(Q_1\times F_2)$ に変えれば受理言語は $L(\mathcal{A}_1)\cup L(\mathcal{A}_2)$ になる。また DFA $\mathcal{A}=(Q,\Sigma,\delta,q_0,F)$ の受理状態集合を $Q\setminus F$ に変えた DFA $\bar{\mathcal{A}}$ の受理言語は補集合 $\Sigma^{*}\setminus L(\mathcal{A})$ である。
$w\in\Sigma^{*}$ に関する帰納法により $\delta((p_1,p_2),w)=(\delta_1(p_1,w),\delta_2(p_2,w))$ が成り立つ($w=\varepsilon$ では両辺 $(p_1,p_2)$、$w=w'a$ では定義から従う)。よって $\delta((q_1,q_2),w)\in F_1\times F_2$ は $\delta_1(q_1,w)\in F_1$ かつ $\delta_2(q_2,w)\in F_2$、すなわち $w\in L(\mathcal{A}_1)\cap L(\mathcal{A}_2)$ と同値である。受理状態集合を $(F_1\times Q_2)\cup(Q_1\times F_2)$ にすれば「かつ」が「または」に変わり、和集合が得られる。補集合については、DFA では各 $w$ について到達状態 $\delta(q_0,w)$ がただ一つ定まるので、$w\in L(\bar{\mathcal{A}})\iff\delta(q_0,w)\in Q\setminus F\iff w\notin L(\mathcal{A})$ である。
受理状態集合を入れ替える構成は NFA には通用しない。たとえば ex-finite-automaton-at-most-three の最初の構成で $F$ を $\{q_0,q_1,q_2\}$ に入れ替えても、$1$ を $4$ 個以上含む文字列は依然として受理されない(経路が途切れる)ので、補集合は得られない。行き先のない組を残した「不完全な DFA」でも同じ問題が起きる。補集合をとる前に prop-finite-automaton-subset-construction で完全な DFA に直す必要がある。この注意は 正規言語 の記事の閉包性の証明で用いる。
状態数 $k$ の有限オートマトン $\mathcal{A}$ について、$L(\mathcal{A})\ne\emptyset$ ならば長さ $k$ 未満の受理される文字列が存在する。したがって、$L(\mathcal{A})=\emptyset$ かどうかは、長さ $k$ 未満の文字列を有限個調べることで判定できる。
prop-finite-automaton-epsilon-removal の構成は状態集合を変えないので、$\mathcal{A}$ は状態数 $k$ の NFA としてよい。$L(\mathcal{A})\ne\emptyset$ とし、受理される文字列のうち長さが最小のもの $w=a_1\cdots a_n$ をとり、その受理経路 $p_0,p_1,\ldots,p_n$ をとる。$n\ge k$ と仮定すると、$p_0,\ldots,p_n$ は $n+1>k$ 個の状態からなるので、鳩の巣原理により $p_i=p_j$ となる $i< j$ がある。このとき $p_0,\ldots,p_i,p_{j+1},\ldots,p_n$ は文字列 $a_1\cdots a_ia_{j+1}\cdots a_n$ の受理経路であり($p_i=p_j$ から $a_{j+1}$ で $p_{j+1}$ に移れる)、この文字列は $w$ より短い。これは $w$ の最小性に反する。よって $n< k$ である。空性の判定は、長さ $k$ 未満の文字列(有限個)のそれぞれについて受理経路の有無を調べればよい。
有限オートマトンは有限状態機械(finite state machine)ともいうが、「有限状態機械」の語は、各遷移または各状態に出力を伴い、受理・非受理ではなく出力列を主題とする機械(Mealy 機械・Moore 機械)を指して使われることも多く、その用法は本記事の有限オートマトン(受理器)とは区別される。
決定性有限オートマトンは 1950 年代に神経回路網や順序回路のモデルとして現れ、非決定性有限オートマトンとその DFA への変換(部分集合構成)は M. O. Rabin と D. Scott(RS59)による。Rabin と Scott はこの仕事で 1976 年の Turing 賞を受けた。$\varepsilon$ 遷移を許す形は、正規表現からオートマトンを機械的に組み立てる構成(正規表現 の記事の命題)で便利なため広く使われる。
同じ言語を受理する DFA のうち状態数が最小のものは、状態の付け替えを除いて一意に定まる(最小 DFA)。その存在と一意性は Myhill–Nerode の定理(正規言語 の記事の命題)から従い、与えられた DFA から最小 DFA を計算する手続き(区別できない状態の併合)が知られている(HMU06 §4.4、HU79 §3.4)。二つの有限オートマトンが等価かどうかは、対応する最小 DFA を比べるか、prop-finite-automaton-product を用いて対称差 $(L_1\setminus L_2)\cup(L_2\setminus L_1)$ を受理する DFA を作り prop-finite-automaton-shortest-word で空性を調べることで判定できる。
有限オートマトンは Chomsky階層(表は 形式言語 の記事の補足)のタイプ 3、すなわち正規言語に対応する計算モデルである。記憶を一つのスタックに拡張したものがプッシュダウンオートマトン(文脈自由言語)、入力長に比例する作業領域を持つ機械が線形有界オートマトン(文脈依存言語)、無制限の作業領域を持つ機械がTuring機械(句構造言語)である。標準的な教科書として HMU06 第 2 章、Sip12 §1.1–1.2、Igr11 第 2 章を挙げる。
Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する