これを行う方法はたくさんあります。
これを行う簡単な方法の1つは、正規表現をNFAに変換することです。2つのNFAが同じ言語を認識するかどうかを確認するには:
両方のNFAの開始状態を考慮してください。
各NFAについて検討している州のイプシロン閉鎖を取ります。
1つのNFAの状態のセットに少なくとも1つの受け入れ状態が含まれているが、他のNFAのセットに受け入れ状態が含まれていない場合、NFAは等しくなく、完了です。
それ以外の場合は、シンボルごとに、そのシンボルに従ってNFAごとに新しい状態のセットを取得し、手順1に戻ります。
考慮すべき状態のセットの数には限りがあるため、これには有限のステップ数がかかります。
両方の正規表現を最小のDFAに変換して、それらが同形であることを示すこともできますが、この手法は実際には上記の手法とまったく同じですが、手順が異なります。
図
REaa*
とを検討してくださいa*a
。それらが同じ言語を認識することは明らかですが、アルゴリズムを説明するためにそれらを使用します。

まず、各NFAの開始状態を検討します。これらは{1}
、左側のRE{1}
用と右側のRE用であり、これを。と記述し{1},{1}
ます。
次に、イプシロンクロージャを取得します。これは{1},{1,2}
です。
どちらのセットにも終了状態が含まれていないため、続行します。
発信シンボルはのみa
であるため、すべてのa
遷移を取得してを取得します{2},{1,3}
。
イプシロンクロージャーは{2,3},{1,2,3}
です。
どちらにも終了状態が含まれているため、続行します。
繰り返しますが、発信シンボルはa
であるため、すべてのa
遷移を取得してを取得します{2},{1,3}
。
イプシロンクロージャーは{2,3},{1,2,3}
です。これはステップ5と同じなので、再度実行することはありません。
他に調べるものがないので、私たちは完了し、2つは同一であることが証明されました。