SATから3-SATへの直接還元


18

ここでの目標は、最少数の節と変数を使用して、任意のSAT問題を多項式時間で3-SATに減らすことです。私の質問は好奇心が動機です。あまり正式ではありませんが、「SATから3-SATへの「最も自然な」削減とは何ですか?」

今、私は教科書でいつも見ている削減は次のようになります:

  1. 最初にSATのインスタンスを取得し、クックレビンの定理を適用して、SATを巡回します。

  2. 次に、ゲートを句に置き換えて、回線SATを3-SATに標準的に縮小することにより、ジョブを終了します。

これは機能しますが、クック-レビンの定理が最初に適用されるため、結果として得られる3-SAT句は、最初に使用したSAT句とほとんど同じように見えます。

中間回路のステップをスキップして、3-SATに直接進む、削減をより直接的に行う方法を誰でも見ることができますか?n-SATの特殊なケースを直接削減できれば幸いです。

(計算時間と出力サイズの間にトレードオフがあると思います。P= NPでない限り幸いにも受け入れられませんが、明らかに退化は解決策がSAT問題を解決することであり、それから些細な3 -SATインスタンス...)

編集:ラチェットの答えに基づいて、n-SATの削減はいくぶん些細なことであることが明らかになりました(投稿する前に、これをもう少し慎重に考えるべきでした)。誰かがより一般的な状況に対する答えを知っている場合に備えて、この質問を少し公開しておきます。そうでない場合は、単にラチェットの答えを受け入れます。


7
(1)でCook-Levinの使用を理解していません。boolean-formula-SATは、回路のグラフ構造がたまたまツリーであるcircuit-SATの特殊なケースではありませんか?
ルカトレビザン

回答:


28

各SAT句には、1、2、3、またはそれ以上の変数があります。3変数句は問題なくコピーできます

1および2変数句は{a1}、およびにそれぞれ{a1,a2}展開できます。{a1,a1,a1}{a1,a2,a1}

3つ以上の 変数を持つ節は、元の節のどの変数が真であるかに依存する値{a1,a2,a3,a4,a5}{a1,a2,s1}{!s1,a3,s2}{!s2,a4,a5}持つwith s1およびs2新しい変数に展開できます。


6
慎重に。SATへの入力には「節」が必要だと誰が言いますか?
ジェフ

6
質問は、「n-SATの特別なケースを直接削減できれば幸いです」
ライアンウィリアムズ

うん、うまくいく!最後の行を追加する前にもう少し慎重に考えるべきだったと思いますが、より一般的な質問に対する答えが得られない場合は、これを受け入れます。
ミコラ

1
@Mikola TseitinまたはPlaisted-Greenbaum変換により3CNFが得られるでしょうか?(私は完全に質問を完全に理解する:))
ミコラス

ラチェットによって言及されたk = 1専用の拡張子がどの本にも載っていないのか不思議に思っています(少なくともこれまでに出会ったものは)。私の推論では、定義上、リテラルは「not a1」になる可能性があり、{a1、a1、a1}のように拡張することはできません。一方、{'not a1'、 'not a1'、 'not a1]}を実行することはできません。元のsatに否定リテラルが含まれるかどうかを識別する別のロジックが必要になるためです。これが(おそらく)マイケルR.ガレイとデビッドS.ジョンソンを含むすべての著者がここでの投稿で「カルロスリナレスロペス」によって提示された別の拡張子を使用した理由です。
KGhatak

27

nnます。大まかに言うと、k-CNF-SATインスタンスの変数の数は、CNF-SAT式の節の数に常に依存します。


19

k-SATから3-SATに削減する必要がある場合、ラチェットの答えは問題なく機能します。

汎用命題式からCNF(および3-SAT)への直接削減が必要な場合は、少なくとも「SATソルバーの観点」から-あなたの質問に対する答えは「最も自然な」削減とは何ですか... ?、:「自然な」減少はありません!。

第2章の結論から-「CNFエンコーディング」(非常に良い)本の:満足度ハンドブック

...
通常、CNFで特定の問題をモデル化する方法は多くあり、それらの中から選択するためのガイドラインはほとんど知られていません。多くの場合、変数としてモデル化する問題の特徴の選択肢があり、いくつかは発見するのにかなりの思考を必要とするかもしれません。Tseitinエンコーディングはコンパクトで機械化可能ですが、実際には常に最良のモデルにつながるとは限らず、一部のサブ式はより適切に拡張される可能性があります。一部の句は、極性を考慮すると省略される場合があり、暗黙の対称性の破れまたはブロックされた句が追加される場合があります。エンコーディングが異なると、サイズやソリューション密度などの長所と短所が異なる場合があり、SATソルバーの利点は別のソルバーの欠点になる場合があります。要するに、CNFモデリングは芸術であり、私たちはしばしば直感と実験によって進めなければなりません。
...

最も知られているアルゴリズムはTseitinアルゴリズムです(G. Tseitin。命題計算の導出の複雑さについて。推論の自動化:計算論理における古典論文、2:466–483、1983。Springer-Verlag。)

CNF encodingsへの良い紹介のために、提案された本Handbook o Satisfiabilityを読んでください。また、最近のいくつかの作品を読んで、参考文献を見ることができます。例えば:

  • P.ジャクソンとD.シェリダン。ブール回路の句形式変換。HH HoosおよびDG Mitchell、編集者、満足度テストの理論と応用」、第7回国際会議、SAT 2004、LNCSのボリューム3542、183〜198ページ。Springer、2004。(条項の数を減らすことを目的としています)
  • P. Manolios、D。Vroon、効率的なCNF変換回路。で理論と充足テストの応用- 。SAT 2007(2007)、頁4-9

15

Ratchelに似ていますが、多少異なる別のソリューションを投稿してください。これは、Steven Skienaによる「アルゴリズム設計マニュアル」の第2版の第9章から直接引用されています。

  • 句にリテラルC = {z1}が1つしかない場合、2つの新しい変数v1およびv2と4つの新しい3リテラル句を作成します:{v1、v2、z1}、{!v1、v2、z1}、{v1、! v2、z1}および{!v1、!v2、z1}。これらの4つの句すべてを同時に満たすことができる唯一の方法は、z1 = Tの場合のみです。これは、元のCも満たされることを意味します。
  • 句に2つのリテラルC = {z1、z2}がある場合、1つの新しい変数v1と2つの新しい句{v1、z1、z2}および{!v1、z1、z2}を作成します。繰り返しますが、これらの両方の句を満たす唯一の方法は、z1とz2の少なくとも一方をtrueにして、Cを満たすことです。
  • 節に3つのリテラルC = {z1、z2、z3}がある場合、変更せずにCを3-SATインスタンスにコピーします。
  • 節に3つ以上のリテラルC = {z1、z2、...、zn}がある場合、チェーン内にn-3個の新しい変数とn-2個の新しい節を作成します。ここで、2 <= j <= n-2 、Cij = {v1、j-1、zj + 1、!vi、j}、Ci1 = {z1、z2、!vi、1}およびCi、n-2 = {vi、n-3、zn-1 zn}

1
@TayfunPayこのソリューションがより正しいと考える理由を説明できますか?変数の複製は私にとってより自然なことのようであり、私が見た3SATの定義に違反しません。このソリューションを改善する技術はありますか?
crockeea 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.