简化CNF公式,同时保留所有解决方案的某些变量

时间:2017-01-29 22:15:27

标签: z3 simplify sat

相关:CNF simplification(事实上,我认为该问题的提交者可能已经在我想要的地方之后)

存在许多工具用于简化(或在解决之前“预处理”)DIMACS格式CNF公式,并且大多数SAT求解器包含一些。然而,我所知道的只是将一个简单可满足的公式简化为具有零个或一个变量的平凡可满足的CNF,即它们仅试图保持公式的可满足性。我至少尝试过SatELite和cryptominisat的预处理模式。

然而,对于构建一个大问题的CNF,在我看来,一次简化一个明确定义的问题子集是非常有用的,这可能会在最后一次重复很多次CNF在这些子公式中的某些变量之间存在额外的约束。

那么,是否存在任何工具,或者普通的SAT求解器(或其他求解器,如我用来制作CNF的其他求解器,我想最小化)可以某种方式用于某些聪明,以简化CNF公式保留给定变量集的所有解?

3 个答案:

答案 0 :(得分:2)

Coprocessor SAT预处理器可以做你想要的。它可以给出一个可选的变量范围,并且只在该范围内应用等效保留的简化。在该范围之外,它将应用更强大,可满足的保留简化。至少在版本2中就是这种情况。

答案 1 :(得分:1)

也许不是你想要的,但espresso系统(http://embedded.eecs.berkeley.edu/pubs/downloads/espresso/)可以做布尔简化。它已经有20多年的历史了,但它仍然在行业中用于它的作用。

答案 2 :(得分:1)

另一种方法是将CNF转换为 And-Inverter-Graph AIG)并应用逻辑综合中的方法来重构和简化{{1} }。

这是在伯克利大学开发的ABC程序套件中完成的。一种方法是结构哈希:在AIG中查找公共(等效)子表达式并将它们绑定在一起以修剪图形。

奥地利林茨大学提供了一个AIGER工具集,专门用于和逆变器图。