実際にこれを行う必要がある場合は、SATソルバーを使用します。
xを受け入れ、yを拒否する状態のDFAがあるかどうかの問題は、SATインスタンスとして簡単に表現できます。たとえば、1つの方法は、2 k 2のブール変数を持つことです。入力ビットbで DFAが状態sから状態tに遷移する場合、z s 、b 、tはtrueです。これはDFAであることを強制するためにいくつかの句を追加し、いくつかの変数との句は、それが受け入れることを強制するために、Xと不良yは。kバツy2 k2zs 、b 、tstbバツy
今すぐにバイナリ検索を使用するの最小見つけるために、kのこの種のDFAが存在するようにします。関連する問題に関する論文で私が読んだものに基づいて、これは実際には合理的に効果的であると期待します。kk
これをSATとして他のエンコードも可能です。たとえば、トレースエンコーディングを使用できます。
場合、長さのあるメートル、あなたが追加することができますメートルLG k個のブール変数:LET S 0、sは1、... 、S 、Mの入力にトラバース状態のシーケンスであるX、およびそれぞれを表すよ、私が使用して⌈ LG kは⌉ブール変数を。xmmlgks0,s1,…,smxsi⌈lgk⌉
ここで、x i = x jであるようなごとに、s i − 1 = s j − 1という制約があります。i,jxi=xj。si−1=sj−1⟹si=sj
次に、処理するために、これを延ばす:せ、T 0、... 、T n個の入力にトラバース状態のシーケンスであるY、および各表現のT jを用いて、LG Kブール変数。y i = y jであるようなi 、jごとに、t i − 1 = t j − 1という制約を追加します。yt0,…,tnytjlgki,jyi=yj。ti−1=tj−1⟹ti=tj
同様に、x i = y jである各に対して、s i − 1 = t j − 1という制約を追加します。i,jxi=yj。si−1=tj−1⟹si=tj
両方のトレースは同じ開始点から開始する必要があるため、(WLOGではs 0 = t 0 = 0を要求できます)という要件を追加します。s0=t0s0=t0=0
DFAでのみ使用することを確実にするためにの状態を、必要とする0 ≤ sのI < Kと0 ≤ T J < kのすべてのための私、J。k0≤si<k0≤tj<ki,j
最後に、が受け入れられ、yが拒否されるという要件をエンコードするには、s m ≠ t nであることを要求します。xysm≠tn
これらの要件はすべて、SAT句としてエンコードできます。
前と同様に、バイナリ検索を使用して、そのようなDFAが存在する最小のkを見つけます。kk