アルファベット 上の言語 を次のように定める。
たとえば は に属する。一方、 は に属さない。
を受理する最小の完全 DFA(すべての状態と文字について遷移が定義された決定性有限オートマトン)の状態数を求めよ。
言語 について、接尾辞 で と が食い違う文字列 を見つけて同値類を数え、 を受理する最小の完全 DFA の状態数(例: の倍数を表す 2 進列の言語)を求められる
読み込み中…
右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
言語 について、文字列どうしを「この後どんな文字列が続くと結果が食い違うか」で仲間分けします。その仲間(同値類)の個数は、 を受理する最小の完全 DFA(すべての状態とすべての文字について遷移が決まっている DFA)の状態数とちょうど同じになります。これがマイヒル・ネローデの定理です。この技能を使うと、DFA を作ってから最小化しなくても、「区別できる文字列の組」を見つけるだけで最小状態数を求められ、それより少ない状態では受理できないことも示せます。2 進数の倍数判定や接尾辞の条件で決まる言語などで、余りや最後の数文字のうち本当に必要な情報だけを見抜くときに使います。
アルファベット 上の言語 を考えます。文字列 が「すべての文字列 (空列 も含む)について 」を満たすとき、 と書きます。これは同値関係です。反対に、ある について と の一方だけが に入るとき、 は で区別されるといい、この を区別する接尾辞と呼びます。
【下からの評価】 を受理する DFA を 1 つとり、 と を読んだ後に同じ状態 にいるとします。続けて を読むと、どちらも から同じ道をたどるので、 と の受理・非受理は一致します。したがって、区別される は必ず別の状態に行きます。互いに区別される文字列が 個あれば、DFA には少なくとも 個の状態が必要です。【上からの評価】逆に、同値類そのものを状態とする DFA を作れます。状態は ( の同値類)、初期状態は 、遷移は 、受理状態は となる とします。 なら、任意の について と の結果が一致するので となり、遷移は代表の選び方によらずに決まります。受理状態が代表の選び方によらないことは、 の場合からわかります。この DFA で を読んだ後の状態は なので、 が受理されるのはちょうど のときです。
2 つの評価が一致するので、同値類が有限個で 個あれば、最小の完全 DFA の状態数はちょうど です(同値類が無限個あるなら、下からの評価により を受理する DFA は存在しません)。前提の技能「DFA の最小化」で、到達不能な状態を除き、区別できない状態をまとめた後に残る各状態は、この同値類の 1 つ 1 つに対応しています。
を判定するのに何を覚えておけば十分かを考え、代表の候補となる文字列を並べる(例:2 進数なら より、 の余りで十分)。これで同値類の個数の上限が得られる。
候補どうしのうち、すべての について結果が一致するものを、理由を示して同じ類にまとめる。短い をいくつか試すだけで終わらせず、任意の で一致することを論証する。
残った代表の各対について、区別する接尾辞 を具体的に 1 つずつ挙げる。まず で区別できる対、つまり一方だけが に入る対を探す。すべての対が区別できれば、状態数は代表の個数以上である。
上限(すべての文字列がどれかの代表と同値)と下限(代表どうしが互いに区別できる)がそろえば、代表の個数が最小の完全 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) | A | C |
| B(余り 3) | A | C |
| C(余り 1, 4) | D | B |
| D(余り 2, 5) | C | D |
初期状態は A、受理状態は A のみです。C の行は、余り 4 から出発しても 、 となり、同じ類に移ることを確かめています。D の行も、余り 5 から出発すると 、 となり、同じ類に移ります。よって最小状態数は です。
答え:
余りの個数をそのまま状態数としてしまう誤り。「 の倍数」だから 6 状態とすると、 や を見落とします。正しくは、 のとき が だけで決まるので類がまとまり、4 状態になります。
を区別する接尾辞の候補から外してしまう誤り。余り と は、 ではいつも同じ結果になるので、 を考えないと同値だと誤解してしまいます。正しくは、 のとき 、 となるので、この 2 つは区別されます。
完全 DFA の死んだ状態を数え忘れる誤り。 上の「 で始まる文字列」の言語では、類は の 4 つです( や で始まる文字列はどう続けても に入らず、まとめて 1 つの類になります)。死んだ類を除いて 3 と答えるのは誤りで、正しくは 4 です。反対に、死んだ類がないと言うときは、類ごとに に入れる接尾辞を確かめます。たとえば上の例の D では も も に入らず、 を使います。
区別できる対をいくつか見つけただけで状態数が確定したとしてしまう誤り。互いに区別できる 個の文字列からわかるのは「 以上」だけです。正しくは、すべての文字列がその 個のどれかと同値であること(上限)も示す必要があります。逆に、短い をいくつか試して一致したからといって同値と結論してもいけません。 のように、すべての について論証します。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
アルファベット 上の言語 を次のように定める。
たとえば は に属する。一方、 は に属さない。
を受理する最小の完全 DFA(すべての状態と文字について遷移が定義された決定性有限オートマトン)の状態数を求めよ。
アルファベット 上の言語 を次のように定めます。
たとえば であり、 です。
を受理する完全な決定性有限オートマトン(DFA)のうち、状態数が最小のものの状態数を求めてください。ここで完全な DFA とは、すべての状態とすべての文字に対して遷移が定義されている DFA のことです。
アルファベット 上の言語 を
と定める。マイヒル・ネローデの定理を用いて、 を受理する最小の完全 DFA(すべての状態とすべての文字について遷移が定義されている決定性有限オートマトン)の状態数を求めよ。
アルファベット 上の言語 を次のように定める。
ここで は の長さを表し、部分文字列とは連続した文字の並びのことである(長さ の空列 の長さは で、 は の倍数とする)。
を受理する決定性有限オートマトン(DFA)のうち、状態数が最小のものの状態数を求めよ。ただし、DFA の遷移関数はすべての状態とすべての入力記号について定義されている(全域的である)ものとする。
アルファベット 上の文字列 について、 に含まれる の個数を と書く。言語 を
と定める(たとえば 、、、)。 を受理する決定性有限オートマトン(DFA)のうち状態数が最小のものの状態数を求めよ。ただし、DFA の遷移関数はすべての状態とすべての入力記号に対して定義されている(全域的である)ものとし、状態数には到達可能な状態だけを数える。
アルファベット 上の文字列 に含まれる の個数を 、 の個数を と書き、言語
を考える。ここで決定性有限オートマトン(DFA)とは、有限の状態集合 、遷移関数 (すべての状態と文字に対して遷移先がただ 1 つ定まる)、初期状態 、受理状態の集合 の組 とし、拡張遷移関数を 、 で定め、 が受理されるのは のときとする。DFA の状態数とは のことである。
を受理する DFA の状態数の最小値が であることを証明せよ。
アルファベット 上の言語 を次のように定める。
文字列 ()を 2 進数として読んだ値を とする(先頭に が続いてもよく、空文字列 の値は とする)。このとき
とする。 を受理する完全な決定性有限オートマトン(DFA。すべての状態とすべての入力記号に対して遷移が定義されているもの)のうち、状態数が最小のものの状態数を求めよ。
アルファベット 上の文字列 について、 に含まれる の個数を と書く。言語 を
と定める( も の倍数とみなす)。 を受理する決定性有限オートマトン(DFA)のうち、状態数が最小のものの状態数を求めよ。ただし、DFA の遷移関数はすべての状態とすべての入力記号に対して定義されている(完全な DFA)とする。
を 以上の整数とする。アルファベット 上の言語 を
と定める。つまり は、長さが 以上で、末尾から 番目の文字と最後の文字が等しい文字列全体の集合である。 を受理する最小の決定性有限オートマトン(遷移関数はすべての状態とすべての文字について定義されているものとする)の状態数を の式で求めよ。