院試hub

オートマトンと正規言語DFA・NFA・部分集合構成・正規表現・反復補題

有限オートマトンは、有限個の状態と、入力記号ごとの状態遷移で文字列を受理するかを決める機械である。決定性(DFA)と非決定性(NFA)は受理できる言語のクラスが同じで、NFA は部分集合構成で DFA に変換できる。DFA で受理できる言語を正規言語といい、正規表現で表せる言語と一致する。ある言語が正規でないことは、反復補題の条件が成り立たないことを示して証明する。

計算理論 の第1単元(全2単元)。

情報系院試の問題集・ロードマップ

東大情報理工・東京科学大・阪大の大学別に、出題マップと類題を1冊にした教材(各4,980円)。収録内容と見本を商品ページで確認できる。

情報系の教材を見る

言語・DFA・NFA・正規表現の定義

定義

アルファベットと言語

空でない有限集合 Σ\Sigma をアルファベット、その要素の有限列を文字列(語)という。長さ0の文字列を ε\varepsilon、すべての文字列の集合を Σ∗\Sigma^* と書く。Σ∗\Sigma^* の部分集合を言語という。言語 L1,L2L_1, L_2 の連接は L1L2={uv∣u∈L1, v∈L2}L_1L_2 = \{uv \mid u \in L_1,\ v \in L_2\}、クリーネ閉包は L∗=⋃k≥0LkL^* = \bigcup_{k \ge 0} L^k(L0={ε}L^0 = \{\varepsilon\})である。

定義

決定性有限オートマトン(DFA)

DFA は5つ組 M=(Q,Σ,δ,q0,F)M = (Q, \Sigma, \delta, q_0, F) で、QQ は有限の状態集合、δ:Q×Σ→Q\delta: Q \times \Sigma \to Q は遷移関数、q0∈Qq_0 \in Q は初期状態、F⊆QF \subseteq Q は受理状態の集合である。遷移を文字列に広げた δ^(q,ε)=q\hat\delta(q, \varepsilon) = q、δ^(q,wa)=δ(δ^(q,w),a)\hat\delta(q, wa) = \delta(\hat\delta(q, w), a) を使い、MM が受理する言語を

L(M)={w∈Σ∗∣δ^(q0,w)∈F}L(M) = \{ w \in \Sigma^* \mid \hat\delta(q_0, w) \in F \}

と定める。

定義

非決定性有限オートマトン(NFA)

NFA は遷移関数を δ:Q×(Σ∪{ε})→2Q\delta: Q \times (\Sigma \cup \{\varepsilon\}) \to 2^Q(状態の集合への写像)に替えたものである。入力を読み終えたとき、とり得る状態のどれか1つでも FF に入っていれば受理する。ε\varepsilon 遷移は入力を読まずに状態を移る。

定義

正規表現

∅\emptyset、ε\varepsilon、各 a∈Σa \in \Sigma は正規表現で、r,sr, s が正規表現なら (r+s)(r + s)、(rs)(rs)、(r∗)(r^*) も正規表現である。表す言語はそれぞれ ∅\emptyset、{ε}\{\varepsilon\}、{a}\{a\}、和集合、連接、クリーネ閉包とする。++ を ∣| と書く流儀もある。

部分集合構成・クリーネの定理・閉包性

定理・法則

部分集合構成(NFA と DFA の等価性)

条件

N=(Q,Σ,δ,q0,F)N = (Q, \Sigma, \delta, q_0, F) は NFA(ε\varepsilon 遷移を含んでよい)。E(S)E(S) は状態集合 SS から ε\varepsilon 遷移だけでたどれる状態全体(ε\varepsilon 閉包)。

主張

状態集合を 2Q2^Q、初期状態を E({q0})E(\{q_0\})、遷移を δD(S,a)=E(⋃q∈Sδ(q,a))\delta_D(S, a) = E\bigl(\bigcup_{q \in S} \delta(q, a)\bigr)、受理状態を FF と交わる集合全体とする DFA DD は、L(D)=L(N)L(D) = L(N) を満たす。

要点

DFA の状態数は最悪 2∣Q∣2^{|Q|} になる。実際の構成では初期状態から到達できる集合だけを作る。

定理・法則

クリーネの定理

条件

アルファベット Σ\Sigma 上の言語 LL。

主張

LL がある DFA で受理されることと、LL がある正規表現で表されることは同値である。この言語のクラスを正規言語という。

要点

正規表現から ε\varepsilon-NFA へはトンプソン構成、DFA から正規表現へは状態除去法や Rij(k)R_{ij}^{(k)} の漸化式で変換する。

定理・法則

正規言語の閉包性

条件

L1,L2L_1, L_2 は同じアルファベット Σ\Sigma 上の正規言語。

主張

L1∪L2L_1 \cup L_2、L1L2L_1 L_2、L1∗L_1^*、補集合 Σ∗∖L1\Sigma^* \setminus L_1、L1∩L2L_1 \cap L_2、反転 L1RL_1^R はどれも正規言語である。

要点

補集合は完全な DFA(すべての状態とすべての記号に遷移がある)で受理状態と非受理状態を入れ替えて作る。NFA のまま入れ替えても補集合にならない。共通部分は2つの DFA の直積で作る。

定理・法則

最小 DFA(マイヒル・ネローデの定理)

条件

L⊆Σ∗L \subseteq \Sigma^*。x≡Lyx \equiv_L y を「すべての zz で xz∈L  ⟺  yz∈Lxz \in L \iff yz \in L」で定める。

主張

LL が正規であることと、≡L\equiv_L の同値類が有限個であることは同値である。正規なら、同値類の個数が LL を受理する DFA の最小状態数で、最小 DFA は状態の名前を除いて一意である。

DFA の設計と部分集合構成の計算例

計算例

3で割り切れる2進数を受理する DFA

Σ={0,1}\Sigma = \{0, 1\} の文字列を上位桁から読む2進数とみなし、値が3で割り切れる文字列を受理する DFA を作れ(ε\varepsilon は値0とみなす)。

解答

状態を、それまでに読んだ値を3で割った余り q∈{0,1,2}q \in \{0, 1, 2\} とする。値 vv の後ろに aa を付けると値は 2v+a2v + a になるので

δ(q,a)=(2q+a) mod 3\delta(q, a) = (2q + a) \bmod 3

とし、初期状態 00、受理状態 {0}\{0\} とする。遷移表は δ(0,0)=0\delta(0,0) = 0、δ(0,1)=1\delta(0,1) = 1、δ(1,0)=2\delta(1,0) = 2、δ(1,1)=0\delta(1,1) = 0、δ(2,0)=1\delta(2,0) = 1、δ(2,1)=2\delta(2,1) = 2。

検算

10011001(9)は状態 0→1→2→1→00 \to 1 \to 2 \to 1 \to 0 で受理、10111011(11)は 0→1→2→2→20 \to 1 \to 2 \to 2 \to 2 で拒否する。長さ1〜12のすべての文字列で、受理と「値が3の倍数」が一致することを実装で確かめた。

計算例

部分集合構成で NFA を DFA に変換する

「後ろから2文字目が1」の文字列を受理する NFA:状態 pp(初期)、qq、rr(受理)、遷移 p→0,1pp \xrightarrow{0,1} p、p→1qp \xrightarrow{1} q、q→0,1rq \xrightarrow{0,1} r を DFA に変換せよ。

解答

{p}\{p\} から始め、到達できる集合だけを作る。

01{p}{p}{p,q}{p,q}{p,r}{p,q,r}{p,r}{p}{p,q}{p,q,r}{p,r}{p,q,r}\begin{array}{c|cc} & 0 & 1 \\ \hline \{p\} & \{p\} & \{p,q\} \\ \{p,q\} & \{p,r\} & \{p,q,r\} \\ \{p,r\} & \{p\} & \{p,q\} \\ \{p,q,r\} & \{p,r\} & \{p,q,r\} \end{array}

状態は4個で、rr を含む {p,r}\{p,r\} と {p,q,r}\{p,q,r\} が受理状態である。DFA の状態は、直前の2文字(00,01,10,1100, 01, 10, 11)を覚えていることに対応する。

検算

長さ0〜10のすべての文字列で、この DFA の受理と「長さ2以上で後ろから2文字目が1」が一致する。後ろから kk 文字目が1の言語では、NFA は k+1k + 1 状態、最小 DFA は 2k2^k 状態になる。

計算例

正規表現と DFA の対応

Σ={0,1}\Sigma = \{0,1\} で、0101 で終わる文字列の言語を正規表現と DFA で表せ。

解答

正規表現は (0+1)∗01(0 + 1)^*01。DFA は「末尾がどこまで 0101 に一致しているか」を状態にする。状態 AA(一致なし、初期)、BB(末尾が 00)、CC(末尾が 0101、受理)として

δ(A,0)=B, δ(A,1)=A, δ(B,0)=B, δ(B,1)=C, δ(C,0)=B, δ(C,1)=A\delta(A,0) = B,\ \delta(A,1) = A,\ \delta(B,0) = B,\ \delta(B,1) = C,\ \delta(C,0) = B,\ \delta(C,1) = A

検算

長さ0〜10の全文字列で、この DFA と正規表現の受理が一致する。ε\varepsilon、00、0101 は互いに別の同値類である(ε\varepsilon と 00 は後ろに 11 を付けると、0101 と他の2つは何も付けないと受理が分かれる)。マイヒル・ネローデの定理から3状態より少なくはできない。

反復補題で正規でないことを示す

定理・法則

正規言語の反復補題

条件

LL は正規言語。

主張

ある整数 p≥1p \ge 1 が存在して、∣w∣≥p|w| \ge p を満たす任意の w∈Lw \in L は、次の3条件を満たす w=xyzw = xyz に分解できる。

  • ∣xy∣≤p|xy| \le p
  • ∣y∣≥1|y| \ge 1
  • すべての i≥0i \ge 0 で xyiz∈Lxy^iz \in L

要点

pp を DFA の状態数にとると、長さ pp 以上の文字列を読む途中で同じ状態を2回通り、その間の部分が yy になる。逆は成り立たない。反復補題の条件を満たしても正規とは限らないので、この補題は正規でないことの証明にだけ使う。

計算例

{anbn}\{a^n b^n\} が正規でないことの証明

L={anbn∣n≥0}L = \{a^n b^n \mid n \ge 0\} が正規言語でないことを示せ。

解答

LL が正規だと仮定し、反復補題の定数を pp とする。w=apbp∈Lw = a^p b^p \in L は ∣w∣=2p≥p|w| = 2p \ge p を満たす。任意の分解 w=xyzw = xyz(∣xy∣≤p|xy| \le p、∣y∣≥1|y| \ge 1)で、xyxy は先頭 pp 文字に含まれるので y=aky = a^k(1≤k≤p1 \le k \le p)である。i=2i = 2 とすると xy2z=ap+kbpxy^2z = a^{p+k}b^p で、aa と bb の個数が異なるから LL に入らない。これは補題に反するので LL は正規でない。

検算

p=1,…,7p = 1, \dots, 7 で apbpa^pb^p のすべての分解を列挙し、xy2z∉Lxy^2z \notin L を確かめた。LL は文脈自由言語で、文法 S→aSb∣εS \to aSb \mid \varepsilon で生成できる。

反復補題による証明は「任意の pp に対して、ある ww を選び、任意の分解に対して、ある ii で LL から外れる」という順の論理になる。ww と ii は自分で選べるが、pp と分解は選べない。閉包性と組み合わせる方法もある。たとえば L′={w∣w の a と b の個数が等しい}L' = \{w \mid w \text{ の } a \text{ と } b \text{ の個数が等しい}\} が正規なら、L′∩a∗b∗={anbn}L' \cap a^*b^* = \{a^nb^n\} も正規になって矛盾する。

答案でよくある誤り

  1. 1

    反復補題で分解 xyzxyz を自分に都合よく1つ選ぶ。分解は「任意の」分解で、∣xy∣≤p|xy| \le p と ∣y∣≥1|y| \ge 1 を満たすすべての場合で LL から外れることを示す。

  2. 2

    反復補題の条件を満たすことを確かめて「正規である」と結論する。補題は必要条件なので、正規であることは DFA・NFA・正規表現を作るか閉包性で示す。

  3. 3

    NFA の受理状態と非受理状態を入れ替えて補集合の NFA とする。非決定性のままでは補集合にならないので、部分集合構成で完全な DFA にしてから入れ替える。

  4. 4

    DFA で、ある状態から出る遷移が足りないまま完成とする。DFA は全状態・全記号に遷移が1つずつ必要で、行き先がない場合は抜け出せない非受理状態(死に状態)を加える。

  5. 5

    部分集合構成で ε\varepsilon 閉包をとり忘れる。初期状態にも、各遷移の行き先にも E(⋅)E(\cdot) を適用する。

  6. 6

    (a+b)∗(a+b)^* と a∗+b∗a^* + b^* を同じ言語とする。abab は前者に入るが後者には入らない。

オートマトンと正規言語が出た院試の過去問

院試hubが年度別解説の大問を分類した集計から、この単元の内容を扱う出題を挙げる。問題文は各大学の公式過去問で確かめ、解き方は各年度の解説ページで読める。

オートマトン理論

11大学・24問(2011〜2027年度)

新しい年度の出題

解答まで無料で読める演習問題

オートマトン理論の出題実績(大学×年度)をすべて見る

正規表現・形式言語

10大学・33問(2017〜2027年度)

新しい年度の出題

解答まで無料で読める演習問題

正規表現・形式言語の出題実績(大学×年度)をすべて見る

計算理論の前後の単元

このページの本文を数式のLaTeXのまま読むには Markdown版。最終更新 2026-11-16。誤りに気づいたら 運営者 へ連絡してほしい。

情報系院試の問題集・ロードマップ

東大情報理工・東京科学大・阪大の大学別に、出題マップと類題を1冊にした教材(各4,980円)。収録内容と見本を商品ページで確認できる。

情報系の教材を見る