一般的な充足可能性(ホーン句などのいくつかの例外を除く)には、アルゴリズムによる解決策があるとは考えられていません。ただし、次のアルゴリズムは一般的な充足可能性の解決策のようです。次のアルゴリズムの欠陥は何ですか?
- してみましょう必ずしも真または偽でなければならないすべての変数が含まれています空のセットも。
- してみましょう節の集合とします。
- ループします。
- 非条件変数†が見つかるたびに、それをから削除して挿入し。W
- この葉空の含意場合‡からその空の意味合いですべての変数を削除と挿入。W
- この葉空または暗示する場合‡、含意がある場合意味合い(つまり、1つの変数を持つところ、各インスタンスのお得な情報、アルゴリズムの新しいインスタンスを作成します。、1つのインスタンス作成挿入され、1をここで、は挿入され、とは挿入され。x W y Wy W
- すべての変数を、必要な値に設定します。
- 変数再度挿入中でその変更した値で、すべての句が満たされているかどうかを確認。L
- 充足可能性が満たされている場合はを返し、それ以外の場合は「満たされていない」を返します。
†非条件変数は、真または偽である必要がある変数として定義されます。たとえば、またはです。
‡空の含意は、片側が空である含意(例:)または反対側が必然的に真である(例:)として定義されます。T R U E ∨ A
アルゴリズムをより直感的に理解するために、以下の一連の節検討してください。
アルゴリズムは次のことを行います。
1)、、は非条件変数なので、アルゴリズムはそれらを挿入し。。f g W W = { c 、f 、g }
2)、およびを削除すると、空の句が残ります:。これらはに追加され。。f gW W = { C 、F 、G 、B 、¬ }
3)変数をに再挿入すると、最初の句に違反します:。はfalseであるため、はfalseであり、(v)の項に違反しています。アルゴリズムは「満足できない」を返しますA ∧ Ba c
アルゴリズムが混乱しているように見えることを知っています。お気軽にご相談ください。
コメントから、今では効率的な一般的な充足可能性アルゴリズムは知られていないことがわかりました。私のアルゴリズムに関するフィードバックにはまだ興味があります。うまくいきますか?一般的なアルゴリズムとどのように比較しますか?