添付の DFA が正しいかどうか教えてもらえますか?
アルファベット Σ ={a, b} を持つ言語に DFA を与えるとします。
いいえ、複数の理由から:
bab
ab
最初のポイントについて: から始めてq1
、 を見てb
、 に行き、 をq2
見て、 にa
行き、 をq3
見て、b
に行きq4
ます。私たちはそれを見bab
て受け入れました。
2 番目の点について: から開始するとq1
、a
遷移が定義されていません。オートマトンは「クラッシュ」し、受け入れられません。そのため、 を含め、 で始まる文字列a
は受け入れられませんab
。
3 番目の点について: 多くの場合、DFA はすべての状態と遷移を表示する必要があります。これには、受理状態に戻ることのないデッド状態と遷移が含まれます。オートマトンのすべての遷移とすべての状態を表示するわけではありません。
Myhill-Nerode の定理を使用して、言語の最小 DFA に含まれる状態の数を決定できます。空の状態には、空の文字列を追加するか、b
言語ab
で文字列を取得することができます。追加a
できます。空の文字列を追加できますb
。、、または言語で文字列を取得するためb
に何も追加することはできません(したがって、これらは区別できません)。ただし、空の文字列を追加できます (したがって、 と区別できません)。aa
bb
ba
ab
b
そのように決定された等価クラスは、最小 DFA の状態に対応します。等価クラスは次のとおりです。
b
a
aa
は言語にあることに注意してくださいb
。したがって、2 番目のクラスは受け入れ状態に対応します。言語で文字列を取得するために何も追加できないことがわかりaa
ます。そのため、このクラスは DFA のデッド状態に対応します。これらの状態間の遷移は、新しいシンボルの追加によってどの新しい等価クラスに置かれるかを確認することで記述します。
空の文字列にa
追加すると (3) にあるものが得られるため、追加すると (3) になります。空の文字列に追加すると (2) にあるものが得られるため、追加すると (2)になります。a
a
b
b
b
a
に追加a
すると(4) になりb
ます。これは、言語の文字列のプレフィックスではないという点でba
似ています。aa
を追加b
すると、同様の議論によって (4) に到達します。
追加a
するaa
と、(4) になります。これを追加b
すると、(2) になります。ab
b
デッド ステートからのすべての遷移は、デッド ステートに戻ります。両方ともa
( b
4) に戻ります。
あなたは次のようなものになります:
q1 --a--> q3
| /|
b --b--< a
| / |
vv v
q2 -a,b-> q4 \
^ a,b
\_/
または表形式で:
q s q'
== = ==
q1 a q3
q1 b q2
q2 a q4
q2 b q4
q3 a q4
q3 b q2
q4 a q4
q4 b q4