オートマトンをXORする方法?


7

3つのDFAがあるとします。私たちはそれらをOR、AND、またはNOTする方法を知っています。しかし、それらをどのようにXORするのでしょうか。これについては、オンラインでの言及は1つだけではありません。

xXORyXORz=((x|y)(¬x|y)|z)(¬((x|y)(¬x|y))|z)。これは、描画するには複雑すぎて時間がかかります。別の方法はありませんか?

お時間をいただきありがとうございます!


1
注:xorは対称集合の差です。
ラファエル

1
ラファエルありがとう!私がやったのはε-closureでしたが、囲まれた受け入れ状態の数が奇数である場合に状態を受け入れとして設定しました。状態にシンボルの遷移がない場合、その状態は拒否されたと見なしましたが、グループ化された他の状態は拒否しませんでした。
Xpl0 2014年

回答:


10

2つのオートマトンの共通部分と結合部分( "and"と "or")の構成は、どの状態が受け入れられるかの定義を除いて、まったく同じであることに注意してください。同じ原則が、有限の言語セットのブール値の組み合わせにも適用されます。製品の構造と、どの状態を受け入れるかについての適切な定義を使用してください。


非常に役に立ち、すべてがすぐに理にかなっています。ありがとうございました!
Xpl0 2014年

6

3つのマシンはすべて確定的であるため、組み合わせた操作はまったく複雑ではありません。マシンを並行して実行し、交差にも使用されるような直接的な製品構成を使用し、各トリプルステートXORで最終状態の存在を確認して、XOR製品の新しい状態を受け入れるかどうかを確認します。


あなたの返事とデビッドの返事にはそれほど違いはありませんが、私は一つ選ぶ必要がありました。私はあなたの助けに本当に感謝しています!
Xpl0 2014年

正しい:私たちの答えはお互いの1分以内に書かれました。お役に立てて幸いです。あなたの感謝はここで危機に瀕しているクレジットよりも価値があります。
Hendrik Jan

2

DFAのみを使用しているため、2つのオートマトンのクロス積を作成し、1つの状態が受け入れ状態であるが、両方ではない状態のペアを受け入れ状態として受け入れることにより、2つのオートマトンをXORできます。

この構成は、各状態がアルファベット記号ごとに1つの後続状態を持つDFAに対してのみ機能することに注意してください。これにより、オートマトンのシミュレーション時に常に状態に到達することが保証され、単語の受け入れは、この状態が終了状態であるかどうかにのみ依存します。時々、DFAは、各状態が各アルファベット記号に対して多くても1つの後続状態を持つように定義されます。この場合、単語が受け入れられない2番目の理由があるため、上記の構文は機能しなくなります。いくつかの単語では、状態にまったく到達しません。


「この場合、上記の構成はもう機能しません」-基本的には機能します。エラー状態を挿入して標準の構造を使用するか、欠落している遷移(つまり、拒否)を製品オートマトンに引き継ぎます。
ラファエル

@ラファエル。もちろん、エラー状態を追加できます。このようにして、各状態に正確に1つの後続状態があることを確認してから、構築が機能します。ポイントはこれが必要なステップであるということです。
Hoopje 2014年

いいえ、ちがいます。構造は簡単に適応できます。多分私は十分に明確ではなかったのですか?2つのコンポーネントオートマトンのいずれかに文字の遷移がない場合は、拒否されたかのように続行します(つまり、交差の遷移を含めず、和集合と対称集合の差分を含めて、対応する元のオートマトンに移動します)。
ラファエル

Hoopjeありがとうございます!私は基本的にあなたの指示に従いましたが、Raphaelが追加したものをそのまま使用しました。
Xpl0 2014年

@ラファエル。次に、状態の構築中に適用されるブール関数を知る必要があります。どの状態を受け入れるかを選択するときだけではありません(質問に対するすべての回答で主張されているように)。
Hoopje 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.