Logic 避免NP完全性的限制布尔公式

Logic 避免NP完全性的限制布尔公式,logic,boolean-logic,model-checking,satisfiability,Logic,Boolean Logic,Model Checking,Satisfiability,我有布尔公式A和B,想检查“A->B”(A意味着B)在多项式时间内是否为真 对于完全通用的公式A和B,这是NP完全的,因为“A->B”为真“与“不(A->B)”相同,不可满足 我的目标是找到有用的限制,这样多项式时间验证是可能的。我还想找到O(n)或O(n logn)限制(n是某种长度| A |或| B |)。我宁愿限制B而不是A 一般来说,我知道以下几类“更简单”的布尔公式: (可重命名)Horn公式可以在线性时间内求解(它们是CNF形式,最多有一个正变量) DNF形式的所有公式都很容易检查

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

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

我的目标是找到有用的限制,这样多项式时间验证是可能的。我还想找到O(n)或O(n logn)限制(n是某种长度| A |或| B |)。我宁愿限制B而不是A

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

  • (可重命名)Horn公式可以在线性时间内求解(它们是CNF形式,最多有一个正变量)
  • DNF形式的所有公式都很容易检查
  • 2-SAT是CNF公式,每个子句最多有2个变量,可在线性时间内求解
  • XOR-SAT是用XOR代替OR的CNF公式。它们可以通过O(n^3)中的高斯消去法求解
主要的问题是,我有公式“A->B”aka(不是A)或B”,对于非平凡的A/B,它很快变成非CNF和非DNF

如果我正确理解了Tseytin变换,那么我可以将任意公式X变换为CNFy,其中O(| X |)=O(| Y |),因此,如果我愿意,我可以假设我的公式在CNF中

有一些低垂的果实:

  • 如果| 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公式

所以我的问题可以归结为:是否存在有用的布尔公式类A和B,使得“A->B”可以在多项式(最好是线性)时间内得到证明除了我刚才提到的4个案例之外

编辑:对这一点的不同理解:在下列类别之一的A和B的什么条件下是“A->B”:

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

  • 这绝对是一个有趣的结果。然而,我不知道如何使用它来解决我的问题。这些属性适用于公式“A->B”,而不是直接适用于A和B。我不确定A和B的含义是什么。我认为至少XOR CNF”(不是A)或B“polinomial不是吗?