C++ライブラリとしてMiniSatを使用する場合、新しい変数はすべて、決定変数または非決定変数として作成できます。MiniSatの非決定変数の意味は何ですか?
私が大まかに理解しているところは、ソルバーが分岐の際に次にどの変数を使用するかを決めるときに、非決定変数は考慮されないということです。しかし、私のプロジェクトでは、式が実際にはUNSATだったにもかかわらず、ソルバーがSATを返したときに、非決定変数が含意の左側にあるときに同等の関係になるのではなく、問題に遭遇しました。
これは、非決定変数が2変数よりも長い式にある場合にのみ起こることを示しています(2変数式パスはソルバーに特殊なケースであるため、動作が異なります) 。
CNFの充足可能性はどういう意味ですか?すなわち、すべての変数が決定変数としてマークされている場合、すべての句に真であると評価される少なくとも1つのリテラルがあれば、CNFはSATと言うことができます。私の簡単な実験では、非決定変数を持つCNFの場合、すべての決定変数が真または偽に設定され、すべての句が真であると評価されるリテラルまたはundefのいずれかを持つ場合、CNFはSATとして報告されます。本当? – Xarn
すべての決定変数に値が正しく割り当てられている場合、MinisatはSATを報告します。それは他に何も気にしない。 Minisatがすべての決定変数に値を割り当てる方法が見つからない場合、ユニットルールの適用で常に変数が不足する前に競合が発生するため、UNSATが報告されます。矛盾は、現在の割り当てのために単調になっていた節を満たすために、変数が真と偽の両方である必要があったということです。 –