直接SAT转换为3-SAT


18

此处的目标是使用最少数量的子句和变量,在多项式时间内将任意SAT问题简化为3-SAT。我的问题是出于好奇。不那么正式,我想知道:“从SAT到3-SAT的'最自然的'减少是什么?”

现在,我在教科书中经常看到的减少是这样的:

  1. 首先以您的SAT实例为例,并应用Cook-Levin定理将其简化为电路SAT。

  2. 然后,通过将子句替换为gates,通过将SAT电路标准缩减为3-SAT来完成工作。

在这种情况下,由于库克-莱文定理的最初应用,最终产生的3-SAT子句最终看起来几乎与您最初使用的SAT子句不同。

有人可以跳过中间电路步骤,直接进入3-SAT,再看看如何直接进行简化吗?我对直接减少n-SAT的特殊情况感到满意。

(我猜想在计算时间和输出大小之间会有一些折衷。显然,简并的解决方案是只解决SAT问题,然后发出琐碎的3,尽管幸运的是,除非P = NP,否则它是不可接受的。 -SAT实例...)

编辑:基于棘轮的答案,现在很明显,将n-SAT的减少是微不足道的(在发布之前,我真的应该以为再仔细一点)。如果有人知道更一般情况的答案,我将这个问题保留一小段时间,否则我将只接受棘轮的答案。


7
我不了解(1)中Cook-Levin的用法。布尔公式SAT是否已经是电路图的结构恰好是树的电路SAT的特殊情况?
卡·特雷维森

Answers:


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}s1和扩展为s2新变量,其值将取决于原始子句中的哪个变量为true


6
小心。谁说输入SAT必须有“条款”?
Jeffε

6
问题是“直接减少n-SAT的特殊情况,我什至会感到满意”
Ryan Williams

是的,行得通!我想在添加最后一行之前,我应该仔细考虑一下,但是如果我对更一般的问题没有答案,我会接受的。
Mikola

1
@Mikola也许Tseitin或Plaisted-Greenbaum转换为您提供了3CNF?(我不太确定我是否完全理解这个问题:))
Mikolas 2011年

我一直想知道为什么棘轮所提到的专门针对k = 1的扩展名没有出现在任何书中(至少到目前为止我没有遇到过)。我的理由是,根据定义,文字可以是'not a1',不能像{a1,a1,a1}这样扩展。另一方面,您不能执行{'not a1','not a1','not a1]},因为它需要另一种逻辑来识别原始的sat是否包含取反的文字。这是(可能是)包括Michael R. Garey和David S. Johnson在内的所有作者在其帖子中使用“ Carlos LinaresLópez”提出的不同扩展名的原因。
KGhatak


19

如果您需要将k-SAT降低到3-SAT,那么棘轮的答案就可以了。

如果您想直接从通用命题公式简化为CNF(以及3-SAT),那么-至少从“ SAT求解器角度”来看-我认为您的问题的答案是“最自然的”简化... ?,是:没有“自然”还原

从(非常好)这本书的第二章“ CNF编码”的结论中得出:满意度手册

...
在CNF中,通常有很多方法可以对给定问题进行建模,而在其中进行选择的准则很少。通常可以选择问题特征来建模为变量,有些特征可能需要花费相当多的思考才能发现。Tseitin编码是紧凑且可机械化的,但实际上并不总是导致最佳模型,某些子公式可能会得到更好的扩展。出于极性考虑,可能会省略某些子句,并且可能会添加隐含的对称性破损或阻塞子句。不同的编码可能具有不同的优缺点,例如大小或解密度,而对于一个SAT解算器而言,什么是优点可能对另一种求解器而言却是不利的。简而言之,CNF建模是一门艺术,我们必须经常通过直觉和实验来进行。
...

最著名的算法是Tseitin算法(G. Tseitin。关于命题演算的推导复杂性。推理自动化:计算逻辑中的经典论文,2:466–483,1983年。Springer-Verlag。)

有关CNF编码的良好介绍,请阅读建议的手册Handbook o Satisfiability。您还可以阅读一些最新作品并查看参考资料。例如:

  • P. Jackson和D. Sheridan。布尔电路的子句形式转换。在HH Hoos和DG Mitchell中,《满意度测试的理论和应用》,第七届国际会议,SAT 2004,LNCS的3542卷,第183-198页。Springer,2004年。(旨在减少子句的数量)
  • P. Manolios,D。Vroon,CNF转换的高效电路。在理论与满足性测试中的应用- SAT 2007(2007),页4-9

15

让我请发布另一个类似于Ratchel的解决方案,但有所不同。这直接取自Steven Skiena撰写的“算法设计手册”第二版第9章

  • 如果该子句只有一个文字C = {z1},则创建两个新变量v1和v2以及四个新的3字母子句:{v1,v2,z1},{!v1,v2,z1},{v1,! v2,z1}和{!v1,!v2,z1}。注意,同时满足这四个子句的唯一方法是z1 = T,这也意味着将满足原始C
  • 如果该子句有两个文字,C = {z1,z2},则创建一个新变量v1和两个新子句:{v1,z1,z2}和{!v1,z1,z2}。同样,满足这两个子句的唯一方法是让z1和z2中的至少一个为真,从而满足C
  • 如果该子句具有三个文字,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 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.