技能一覧 › 大学数学 オートマトン・形式言語

マイヒル・ネローデの定理と最小状態数

言語 について、接尾辞 で と が食い違う文字列 を見つけて同値類を数え、 を受理する最小の完全 DFA の状態数(例: の倍数を表す 2 進列の言語)を求められる

前提

この技能までの道筋(21 技能)
算数中学高校大学大学院

読み込み中…

右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。

一覧で見る(前提が先)
  1. 決定性有限オートマトンの動作と受理判定 (大学数学 オートマトン・形式言語)
  2. DFA の最小化(区別可能な状態の対) (大学数学 オートマトン・形式言語)
  3. 分数のたし算・ひき算 (算数 計算と数のきまり)
  4. 小数の四則計算 (算数 計算と数のきまり)
  5. 正負の数の加法・減法 (中学数学 数と式)
  6. 分数のかけ算・わり算 (算数 計算と数のきまり)
  7. 四則の混じった計算の順序 (算数 計算と数のきまり)
  8. 正負の数の乗除・累乗と四則混合 (中学数学 数と式)
  9. 分配法則を使った計算のくふう (算数 計算と数のきまり)
  10. 文字式の計算(同類項・分配法則) (中学数学 数と式)
  11. 乗法公式による展開 (中学数学 数と式)
  12. 因数分解 (中学数学 数と式)
  13. 約数の見つけ方 (算数 整数の性質)
  14. 文字式で表した整数の性質 (中学数学 数と式)
  15. 余りによる整数の分類 (数学A 整数の性質)
  16. 樹形図で数え上げる (算数 場合の数)
  17. 積の法則と和の法則 (算数 場合の数)
  18. 和の法則・積の法則と樹形図 (数学A 場合の数と確率)
  19. 合同式 (数学A 整数の性質)
  20. n 進法 (数学A 整数の性質)
  21. 言語の条件から DFA を作る(余り・接尾辞・積構成) (大学数学 オートマトン・形式言語)

説明

言語 について、文字列どうしを「この後どんな文字列が続くと結果が食い違うか」で仲間分けします。その仲間(同値類)の個数は、 を受理する最小の完全 DFA(すべての状態とすべての文字について遷移が決まっている DFA)の状態数とちょうど同じになります。これがマイヒル・ネローデの定理です。この技能を使うと、DFA を作ってから最小化しなくても、「区別できる文字列の組」を見つけるだけで最小状態数を求められ、それより少ない状態では受理できないことも示せます。2 進数の倍数判定や接尾辞の条件で決まる言語などで、余りや最後の数文字のうち本当に必要な情報だけを見抜くときに使います。

なぜそうしてよいのか

アルファベット 上の言語 を考えます。文字列 が「すべての文字列 (空列 も含む)について 」を満たすとき、 と書きます。これは同値関係です。反対に、ある について と の一方だけが に入るとき、 は で区別されるといい、この を区別する接尾辞と呼びます。

【下からの評価】 を受理する DFA を 1 つとり、 と を読んだ後に同じ状態 にいるとします。続けて を読むと、どちらも から同じ道をたどるので、 と の受理・非受理は一致します。したがって、区別される は必ず別の状態に行きます。互いに区別される文字列が 個あれば、DFA には少なくとも 個の状態が必要です。【上からの評価】逆に、同値類そのものを状態とする DFA を作れます。状態は ( の同値類)、初期状態は 、遷移は 、受理状態は となる とします。 なら、任意の について と の結果が一致するので となり、遷移は代表の選び方によらずに決まります。受理状態が代表の選び方によらないことは、 の場合からわかります。この DFA で を読んだ後の状態は なので、 が受理されるのはちょうど のときです。

2 つの評価が一致するので、同値類が有限個で 個あれば、最小の完全 DFA の状態数はちょうど です(同値類が無限個あるなら、下からの評価により を受理する DFA は存在しません)。前提の技能「DFA の最小化」で、到達不能な状態を除き、区別できない状態をまとめた後に残る各状態は、この同値類の 1 つ 1 つに対応しています。

手順

  1. を判定するのに何を覚えておけば十分かを考え、代表の候補となる文字列を並べる(例:2 進数なら より、 の余りで十分)。これで同値類の個数の上限が得られる。

  2. 候補どうしのうち、すべての について結果が一致するものを、理由を示して同じ類にまとめる。短い をいくつか試すだけで終わらせず、任意の で一致することを論証する。

  3. 残った代表の各対について、区別する接尾辞 を具体的に 1 つずつ挙げる。まず で区別できる対、つまり一方だけが に入る対を探す。すべての対が区別できれば、状態数は代表の個数以上である。

  4. 上限(すべての文字列がどれかの代表と同値)と下限(代表どうしが互いに区別できる)がそろえば、代表の個数が最小の完全 DFA の状態数である。このとき、どう続けても に入らない「死んだ類」も 1 つの状態として数える。死んだ類があるかどうかは、各類から に入れる接尾辞を 1 つずつ挙げて確かめる。

例題

アルファベット 上の文字列 を 2 進数として読んだ値を とする。先頭の も許し、 とする。 とする( である)。 を受理する最小の完全 DFA の状態数を求めよ。

例題の解答

【手順 1】 なので、 かどうかは と だけで決まります。よって、余りが等しい文字列は同値です。余り の代表として がとれるので、同値類は多くても 6 個です。

【手順 2】 のとき、 と書けます。整数 について は だけで決まり、 は だけで決まります。したがって は だけで決まります。余り と はどちらも で割ると 余るので、 のとき かどうかは一致します。 のときは、どちらも の倍数ではないので に入りません。よって です。同じように、余り と はどちらも で割ると 余り、どちらも の倍数ではないので、 です。これで代表は (余り 0)、(余り 3)、(余り 1, 4)、(余り 2, 5)の 4 つに減ります。

【手順 3】4 つの代表からできる 6 つの対それぞれに、区別する接尾辞を挙げます。
・ と 、 と 、 と : とすると、 ですが、他の 3 つ(値 )は に入りません。
・ と : とすると、 なので 、 なので です。
・ と : とすると、、 なので です。
・ と : とすると、 なので 、 なので です。
したがって 4 つの代表は互いに区別でき、状態数は少なくとも 4 です。

【手順 4】上限と下限がともに 4 なので、同値類はちょうど 4 個です。余り の類を A、余り の類を B、余り の類を C、余り の類を D とします。死んだ類がないことは、各類から に入れる接尾辞を 1 つずつ挙げて確かめます。
・A:。
・B:()。
・C:(余り 1 の代表 では 、余り 4 の代表 では )。
・D:(余り 2 の代表 では 、余り 5 の代表 では )。
なお、D からは (余り )でも (余り )でも に入らないので、各類ごとに接尾辞を確かめる必要があります。

実際に 4 状態の DFA を作ると、次のようになります。遷移は に従います。

状態入力 0入力 1
A(余り 0)AC
B(余り 3)AC
C(余り 1, 4)DB
D(余り 2, 5)CD

初期状態は A、受理状態は A のみです。C の行は、余り 4 から出発しても 、 となり、同じ類に移ることを確かめています。D の行も、余り 5 から出発すると 、 となり、同じ類に移ります。よって最小状態数は です。

答え:

よくある誤り

この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。

入口の問題

この技能を使う問題