アルファベット 上の決定性有限オートマトン(DFA) を考える。状態の集合は 、初期状態は 、受理状態は と の 2 つである。遷移関数 は次の表で与えられる。
| 状態 | 入力 | 入力 |
|---|---|---|
が受理する言語と同じ言語を受理する DFA のうち、状態数が最小のもの(最小 DFA)の状態数を求めよ。ただし、DFA の遷移関数はすべての状態と入力文字について定義されているものとする。
到達不能な状態を除き、区別可能な状態の対を表で順に印をつける方法(または同値類の分割の細分)で同値な状態をまとめ、与えられた DFA と同じ言語を受理する最小 DFA の状態数を求められる
有限オートマトン(DFA)は、同じ言語を受理するものでも状態数がいろいろあります。この技能では、到達できない状態を取り除いたあと、「どんな入力を続けても受理・不受理の結果が変わらない」状態どうしを見つけてまとめます。こうして、同じ言語を受理する DFA のうち状態数が最も少ないもの(最小 DFA)とその状態数が求められます。回路やプログラムの状態機械を簡単にするとき、また 2 つの DFA が同じ言語を受理するかを調べるときに使います。
DFA を とします。 は状態 から文字列 を読んだあとの状態です。2 つの状態 について、ある文字列 があって と のちょうど一方だけが受理状態になるとき、 は区別可能であるといいます。どんな (空文字列 も含む)についても両方受理か両方不受理なら、 は同値であるといいます。同値な状態は、その先の振る舞いがまったく同じなので、1 つにまとめても受理する言語は変わりません。
区別可能な対は次の 2 つの規則で見つかります。(1) のとき:一方が受理状態で他方が受理状態でなければ区別可能です。(2) ある文字 について と が文字列 で区別可能なら、 は で区別可能です。逆に、区別可能な対 を区別する最短の文字列を とすると、 はより短い で区別されます。そのため、文字列の長さについての帰納法により、区別可能な対はすべていつかこの 2 規則で印がつきます。印がつかずに残った対がちょうど同値な対です。同値という関係は「 かつ なら 」を満たします。そのため、状態は同値なものどうしのグループ(同値類)に分かれます。また なら なので、まとめた後の遷移も矛盾なく決まります。
まとめた DFA が最小である理由は次のとおりです。まとめた後の状態が 個あり、どれも到達可能で、どの 2 つも区別可能だとします。各状態 に到達する文字列 を 1 つずつ選ぶと、 に対して と の一方だけが受理される があります。同じ言語を受理する別の DFA が と を読んで同じ状態にいたとすると、続けて を読んでも同じ状態になり、矛盾します。よってどの DFA も少なくとも 個の状態を持ちます。到達不能な状態を先に除くのは、それらが受理言語に関係しないのに、残しておくと状態数が余計に数えられてしまうからです。
到達不能な状態を除く:初期状態 から遷移をたどって行ける状態をすべて集め、行けない状態を捨てる。
残った状態のすべての対 の表を作る。一方だけが受理状態である対( など)に印をつける。
印のない各対 と各文字 について、行き先の対 を調べる。それが印のついた対なら に印をつける(文字は 1 つで足りる。行き先が同じ状態なら、その文字では区別されない)。
手順 3 を表全体について繰り返し、1 周しても新しい印が 1 つも増えなくなったら止める。
最後まで印のない対は同値なので、同値な状態をまとめて同値類に分ける。同値類の個数が最小 DFA の状態数である(新しい遷移は、 を含む類から を含む類へとする)。
アルファベット 上の DFA が次の遷移表で与えられている。初期状態は 、受理状態は のみである。
| 状態 | ||
|---|---|---|
この DFA と同じ言語を受理する最小 DFA の状態数を求めよ。
手順 1(到達不能な状態を除く): から へ行けます。 から 、 から へ行けます。 からは新しい状態へ行けません。 へ入る遷移は 自身からしかないので、 は到達不能です。残りは で、対は 個です。
手順 2(初期の印):受理状態は だけなので、 に印をつけます。
手順 3(1 周目):
- : で に行き、これは印あり。よって印をつける。
- : で (印なし)、 で (同じ状態)。今は印をつけない。
- : で に行き印あり。よって印をつける。
- : で に行き印あり。よって印をつける。
- : で (印なし)、 で (同じ状態)。今は印をつけない。
- : で に行き印あり。よって印をつける。
手順 4(2 周目):印のない対は と です。行き先は と 、 と で、どれも印がありません。新しい印は増えないので止めます。
手順 5(まとめる):印のない対は なので、同値類は の 3 つです。したがって最小 DFA の状態数は です(この DFA は「 で終わる文字列」を受理しています)。
答え:
到達不能な状態を除かずに表を作ってしまう誤り。例題で を残すと、 は で (印あり)へ行くなどして、 はどの状態とも区別されます。その結果、答えを としてしまいます。正しくは最初に を捨てて です。
手順 3 を 1 周しただけで止めてしまう誤り。ある周で新しくついた印が、次の周で別の対の印の根拠になることがあります。正しくは、1 周しても印が増えなくなるまで繰り返します。
受理状態どうし・非受理状態どうしをすべて同値としてしまう誤り。例題で を 1 つにまとめて 状態とするのは誤りです。正しくは は で区別可能です( からは が不受理、 からは が受理)。
印をつける条件を取り違える誤り。すべての文字で行き先が印つきである必要はなく、ある 1 文字 で が印つきなら十分です。また、行き先が同じ状態(例: の での行き先 )は区別の根拠になりません。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
アルファベット 上の決定性有限オートマトン(DFA) を考える。状態の集合は 、初期状態は 、受理状態は と の 2 つである。遷移関数 は次の表で与えられる。
| 状態 | 入力 | 入力 |
|---|---|---|
が受理する言語と同じ言語を受理する DFA のうち、状態数が最小のもの(最小 DFA)の状態数を求めよ。ただし、DFA の遷移関数はすべての状態と入力文字について定義されているものとする。
アルファベット 上の決定性有限オートマトン(DFA) を考える。状態の集合は 、初期状態は 、受理状態は と の 2 つである。遷移関数 は次の表で与えられる。
| 状態 | 入力 | 入力 |
|---|---|---|
と同じ言語を受理する DFA のうち、状態数が最小のもの(最小 DFA)の状態数を求めよ。
アルファベット 上の決定性有限オートマトン(DFA) を考える。状態の集合は 、初期状態は 、受理状態は の 3 つであり、遷移関数 は次の表で与えられる。
| 状態 | ||
|---|---|---|
が受理する言語と同じ言語を受理する DFA のうち、状態数が最小のもの(最小 DFA)の状態数を求めよ。ただし、DFA の遷移関数はすべての状態と文字に対して定義されているものとする。
アルファベット 上の文字列 について、 に含まれる の個数を と書く。言語 を
と定める(たとえば 、、、)。 を受理する決定性有限オートマトン(DFA)のうち状態数が最小のものの状態数を求めよ。ただし、DFA の遷移関数はすべての状態とすべての入力記号に対して定義されている(全域的である)ものとし、状態数には到達可能な状態だけを数える。
アルファベット 上の非決定性有限オートマトン( 遷移なし) を考える。状態の集合は 、初期状態は 、受理状態は と の 2 つであり、遷移関数 は次の表で与えられる( はその記号での遷移先がないことを表す)。
| 状態 | ||
|---|---|---|
が受理する言語 を受理する決定性有限オートマトン(遷移関数がすべての状態と記号について定義されたもの)のうち、状態数が最小のものの状態数を求めよ。
アルファベット 上の言語 を次のように定める。
文字列 ()を 2 進数として読んだ値を とする(先頭に が続いてもよく、空文字列 の値は とする)。このとき
とする。 を受理する完全な決定性有限オートマトン(DFA。すべての状態とすべての入力記号に対して遷移が定義されているもの)のうち、状態数が最小のものの状態数を求めよ。
アルファベット 上の文字列 について、 に含まれる の個数を と書く。言語 を
と定める( も の倍数とみなす)。 を受理する決定性有限オートマトン(DFA)のうち、状態数が最小のものの状態数を求めよ。ただし、DFA の遷移関数はすべての状態とすべての入力記号に対して定義されている(完全な DFA)とする。