NFAをDFAに変換する方法を学習しています。正しく実行されていることを確認したいと思います。明らかに、別の方向に戻ることは重要ではありません。DFAがNFAと同等であることを確認するアルゴリズムを知っている人はいますか?
NFAをDFAに変換する方法を学習しています。正しく実行されていることを確認したいと思います。明らかに、別の方向に戻ることは重要ではありません。DFAがNFAと同等であることを確認するアルゴリズムを知っている人はいますか?
回答:
これは問題のある質問です。オートマトンの同等性をチェックする方法があります。これについては、これから説明しますが、最後に説明するように、それは役に立たないと思います。
と場合、2つのセットとは等しいことを思い出してください(これは、セットの等価性の定義です)。したがって、およびであることを確認するだけで十分です。ここで、およびはそれぞれDFAおよびNFAです。
しかし、どのようにして言語の包含をチェックするのか、あなたは尋ねるかもしれません。さて、今ことが観察 IFF(ここでの補数である)。
最初にかどうかを確認してみましょう。これを行うには、を補完する(非常に簡単-受け入れ状態の受け入れを入れ替える)後、を使用して交差オートマトン(たとえば、製品構成を含む)を構築し、受け入れ状態へのパスを見つけることによって空性をチェックします。
しかし、逆の方向は、これがなぜあなたを助けないかを示します。かどうかを確認するには、を補う必要があります。ただし、NFAを補完するには、まずNFAをDFAに変換して、アイデア全体を無意味にする必要があります。
基本的に、あなたの質問の問題ははるかに深いものです。自分(未定義の計算モデル)が適切に定義されたアルゴリズムを適切に実行したことを確認したいとします。したがって、これは実際にはコンピュータサイエンスの問題ではありません。
私はこれを言うだろう:私は提案構造を以下、結論するのは難しいではないでの長さの単語があるときに限りがほとんど(の状態の数であります)一方では受け入れられ、他方では受け入れられない。したがって、この長さまでのすべての単語を試すことができます。2 2 n n N
続行する1つの方法は、NFAをDFAに変換してから、線形アルゴリズム[1]がある2つのDFAの同等性を確認することです。
次のペーパーでは、2つのNFAが同等である、より一般的なケースを扱います(もちろん、ケースにも当てはまります)。
Filippo Bonchi、Damien Pous、合同までのバイシミュレーションによるNFAの同等性のチェック 、プログラミング言語の原則(POPL)、2013年1月、ローマ、イタリア。ACM、pp.457-468、2013。
要約。非決定性有限オートマトンの言語等価性を証明する手法として、合同までのバイシミュレーションを紹介します。この手法を利用して、HopcroftとKarpによる古典的なアルゴリズムの最適化を考案しました[1]。アプローチを最近導入されたアンチチェーンアルゴリズムと比較し、2つの基礎となる共帰証明法を分析して関連付けます。アンチチェーンに対して指数関数的に改善する具体例を示します。さらに、実験結果は無視できないほどの改善を示しています。
[1] JE HopcroftおよびRM Karp。有限オートマトンの等価性をテストするための線形アルゴリズム。TR 114、コーネル大学、1971年12月。
結果のCoq証明スクリプト、実装へのリンク、および対話型アプレットを含む、このペーパーのWeb付録も参照してください。
この質問は、理論的な質問というよりは、実際に適用されたソフトウェアのテストと正確性の検証についてです。
交差と補数(および空のDFA言語)を計算する他のコードがある場合は、とが両方とも空であるという考え方を使用できます。ここで、は補数。 D 2 ∩ ¯ D 1 ˉ D
結果を検証するためにテストされた、以前にテストされたソフトウェアに依存できます。例:AT&T FSMライブラリ
別のアイデア:ランダム化されたテスト。言語内でランダムな文字列を選択します。文字列がDFA / NFAによって受け入れられるかどうかを決定します。2つが等しくない場合、高い確率で一致しない文字列が見つかります。
別のアイデア:DFAとNFAのすべてのブランチを特定の深さまでトラバースし、不一致を探すコードを記述できます。これは、指定された長さの受け入れ可能なすべての文字列を列挙することと同じです。