用于避免NP完全性的受限布尔公式

时间:2017-09-25 18:16:44

标签: logic boolean-logic model-checking satisfiability

我有布尔公式A和B,想检查多项式时间内“A - > B”(A暗示B)是否为真。

对于完全通式A和B,这是NP完全的,因为“”A - > B“为真”与“不(A - > B)”相同是不可满足的。

我的目标是找到有用的限制,以便可以进行多项式时间验证。我也有兴趣找到O(n)或O(n log n)限制(n是某种长度| A |或| B |)。我宁愿限制B而不是A。

一般来说,我知道以下“更简单”的布尔公式:

  • (可重复)角形公式可以在线性时间内求解(它们是CNF形式,最多只有一个正变量)。
  • DNF表格中的所有公式都很容易检查
  • 2-SAT是CNF公式,每个子句最多2个变量,可以线性时间求解。
  • XOR-SAT是具有XOR而不是OR的CNF公式。它们可以通过O(n ^ 3)
  • 中的高斯消元来求解

主要问题是我的公式“A - > B”又名“(不是A)或B”,很快变为非CNF而非DNF用于非平凡的A / B.

如果我正确理解Tseytin变换,那么我可以用O(| X |)= O(| Y |)将任何公式X转换为CNF Y,因此我可以假设 - 如果我想 - 我有我的公式在CNF。

有一些悬而未决的成果:

  • if | B |是常数和小,我可以枚举B的所有解,并检查它们是否产生真正的A。
  • 类似地,如果| A |是常数和小,我可以枚举所有A的解决方案,并检查它们是否产生错误的B

更有趣的是:

  • 如果B在DNF中,那么我可以将A转换为CNF,这将使“(非A)或B”DNF在线性时间内可解。
  • 对于一般B,如果| B |在O(log | A |)中,我可以将B转换为DNF并以此方式解决

但是,我不确定如何使用其他更简单的课程,或者是否可以使用。

由于分配性,CNF中的A或B几乎肯定会在试图将“(不是A)或B”带回CNF时成倍地爆发 - 如果我没有弄错的话。

注意:我的用例可能比B公式更复杂/更长。

所以我的问题归结为:布尔公式A和B是否有用,这样“A - > B”可以用多项式(最好是线性)时间证明? - 除了我已经提到的4个案例。

编辑:对此有不同的看法:在以下某个类别中,A和B的条件是“A - > B”:

  • in DNF
  • CNF中的
  • 和Horn公式(Horn-SAT)
  • CNF中的
  • 和二元式(2-SAT)
  • CNF中的
  • 和算术公式(XOR的CNF)

0 个答案:

没有答案