ほとんどすべてのSATソルバーがDNFの代わりにCNFを使用する理由はよくわかりません。SATを解くのはDNFを使用する方が簡単だと思う。結局のところ、暗黙のセットをスキャンして、そのうちの1つに変数とその否定の両方が含まれていないかどうかを確認するだけです。CNFの場合、このような簡単な手順はありません。
ほとんどすべてのSATソルバーがDNFの代わりにCNFを使用する理由はよくわかりません。SATを解くのはDNFを使用する方が簡単だと思う。結局のところ、暗黙のセットをスキャンして、そのうちの1つに変数とその否定の両方が含まれていないかどうかを確認するだけです。CNFの場合、このような簡単な手順はありません。
回答:
カープによる3SATにSATから教科書の低減は、任意のブール式変換「等価」CNFブール式にΦ '多項式サイズのように、Φがあれば充足され、場合にのみ、Φは「充足可能です。(厳密には、Φ ′には追加の変数があるため、これら2つの式は同等ではありませんが、Φ ′の値は実際にはこれらの新しい変数に依存しません。)
任意のブール式からDNF式への同様の縮小は知られていない。すべての既知の変換は、式のサイズを指数関数的に増加させます。さらに、P = NPでない限り、そのような削減は不可能です!
重要なことのほとんどは言われましたが、私はいくつかの点を強調したいと思います。
したがって、SATソルバーは充足可能性を対象とし、線形時間で充足可能性を維持しながらCNFに変換できるため、CNFを使用します。
7 番目の 2013年9月:追加さらに答え、ページのチェック下
基本的に、DNF式は、句の論理和であるそれぞれ句、C iは = LをIを、1 ∧ 。。。∧ L I 、kはリテラルの接続詞です。レッツ・コール節C iの場合は矛盾すると、それは文字通りの両方が含まれている場合にのみリットルとその否定¬ リットルを。競合しない各句は2 n − kをエンコードするだけであることが簡単にわかります。式の解。したがって、DNF全体はソリューションの単なる列挙です。数式には指数関数的に多くの解が含まれる場合があるため、対応するDNF数式には指数関数的に多くの句が含まれる場合があります。このCNF式を変換してみてください:
対応するDNF数式に追加すると、句が多すぎます。一言で言えば、CNFはコンパクトですが、DNFはコンパクトではありません。CNFは暗黙的ですが、DNFは明示的です。
次の問題はNP完全です:DNFインスタンスが与えられた場合、すべての句を偽造する変数の割り当てがありますか?
私はもう一つのことに気づきました。これは別の答えに値することを願っています。質問の推定は完全に真実ではありません。二分決定図(BDD)は、DNFのコンパクトな/洗練された表現として見ることができます。BDDを使用するSATソルバーがいくつかありましたが、それらはもう表示されないと思います。
ブール関数のさまざまな表現の異なる特性を研究しているDarwicheとMarquisによる素晴らしい論文があります。
この追加の回答は、前回の回答に対するdividebyzeroのコメントへのフィードバックとして意図されています。
splitbyzeroが言うように、CNFとDNFが同じコインの2つの側面であることは確かに真実です。
あなたが満足の割り当てを見つけなければならない場合には、DNFはそれmanifestedly示すように、明示的であるあなたの満足の割り当て(DNF充足が属する)それはラップしてあなたの目からその満足割り当てを隠すために巻くように、CNFのに対し、暗黙的である(CNF充足があるN P − c o m p l e t e)。CNF式を展開して、指数関数的なサイズではないいくつかの同等のDNF式に戻すことができる手順はわかりません。これは私の以前の答えのポイントでした(その例は指数関数的な爆発を示すことを意図していましたが、明らかにこのような例は最良の選択ではありませんでした)。
逆に、偽造割り当てを見つける必要がある場合、CNFは偽造割り当てを明示的に示すため明示的です(CNF偽造可能性は属します)。はN P − c o m p l e t e)です。DNF式を展開し、指数関数的なサイズではない等化可能なCNF式に戻すことができる手順はわかりません。
一方の端には矛盾、つまり不満足な式があります。反対側の端には、トートロジー、つまり偽造不可能なフォーミュラがあります。中間には、充足可能かつ偽造可能な式があります。
変数を含むCNF式では、長さkのすべての節は明らかに2 n − kの偽装割り当てをエンコードします。
変数を含むDNF式では、長さkのすべての項が2 n - kの割り当てを満たすことを明らかにエンコードします。
節のないCNFフォーミュラは、改ざんの割り当てがないため、トートロジーです。空の句()はすべての2 nの代入が偽造されていることを示すため、空の句(他のすべての句を包含する)を含むCNF式は矛盾です。他のCNF式は、矛盾または中央の式のいずれかです(これら2つのケースを区別するのはN P − c o m p l e t eです)。
用語のないDNF式は、満足のいく割り当てがないため、矛盾です。空の用語(1つおきの用語を含む)を含むDNF数式は、空の用語(を持つ)がすべての2 n割り当てが満たされていることを示すため、トートロジーです。他のDNFフォーミュラは、トートロジーまたは中央のそれらのフォーミュラのいずれかです(これら2つのケースを区別するのはN P - c o m p l e t eです)。
この観点から、CNFの充足可能性とDNFのFalsifiabilityが計算の難易度に関して同等である理由がより明確になります。基本的なタスクはまったく同じであるため、実際にはまったく同じ問題であるため、複数のセットの和集合がすべての可能性の空間に等しいかどうかを判断するためです。このようなタスクは、私たちをより広い範囲のカウントに導きます。これは、これらの問題について無視できない進歩を遂げることを望むために熱心に探求されるべき道の1つである私の謙虚な意見です(解像度ベースのソルバーに関するさらなる研究最終的に画期的な理論的進歩をもたらす可能性がありますが、驚くべき実用的進歩を確実にもたらし続けます。
このようなタスクの難しさは、それらのセットが包含-除外の形で激しく重なり合っていることです。
そのような重複の存在は、カウントの難しさが存在する場所です。さらに、これらのセットをオーバーラップさせているという事実は、解空間が指数関数的に大きいコンパクトな数式を作成できるまさにその理由です。
このスレッドのすべての回答(特にGiorgio Cameraniの回答)を素敵なテーブルに変えて、一目で双対性が見えるようにすることにしました。
:これらの検索の問題、およびDNFからCNFへの変換(またはその逆)は、出力のサイズが大きいため指数関数的な時間が必要です。それらはFPSPACEにあります。実際、それらは多項式時間ビットグラフを持つ関数によって解くことができます。これは指数サイズ出力関数の場合と同じくらい効率的ですが、このクラスに名前があることは知りません。ポリタイム削減の通常の概念は、多項式サイズの出力を持つ関数でのみ適切に機能します。現在のケースにそれらを盲目的に適用すると、出力のサイズが原因で、これらの検索問題がすべてFEXP完全になります。
:これらの検索問題は、次のような多項式時間ビットグラフを使用した指数時間関数によって解決できます。 。ただし、これらは、逆に、ポリタイムチューリング削減ではNP困難です(検索問題と決定問題を比較しているため、ここでは多くの削減は意味がありません)。
質問に対する最短の答え:DNFを介した充足可能性の表示(SATの解決)は、上の表に従って指数関数的な時間でのみ実行できます。