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

Simplifying CNF formula while preserving all solutions wrt certain variables

相关:CNF simplification(事实上,我认为该问题的提交者可能已经找到了我想要的)

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

然而,对于构造一个大问题的 CNF,在我看来,一次简化问题的一个明确定义的子集是非常有用的,然后可以在最终的 CNF 在这些子公式中的某些变量之间具有附加约束。

所以,是否存在任何工具,或者普通的 SAT 求解器(或其他求解器,如 Z3,我正在使用它来生成我想最小化的 CNF)是否可以以某种巧妙的方式使用,以简化 CNF公式同时保留给定变量集的所有解决方案?

也许不是您要找的东西,但是浓缩咖啡系统 (http://embedded.eecs.berkeley.edu/pubs/downloads/espresso/) 可以进行布尔简化。它至今已有 20 多年的历史,但仍因其功能而在行业中使用。

另一种方法是将CNF转换为And-Inverter-GraphAIG)并应用逻辑综合的方法来重构和简化AIG.

这是在伯克利大学开发的 ABC 程序套件中完成的。一种方法是 结构散列 :在 AIG 中找到常见的( 等效 )子表达式并将它们连接在一起以修剪图形。

奥地利林茨大学提供 AIGER tool-set 专门用于 And-Inverter 图。

Coprocessor SAT 预处理器可以为所欲为。它可以被赋予一个可选的变量范围,并且只会在该范围内应用 equivalence-preserving 简化。在该范围之外,它将应用更强大的 satisfiability-preserving 简化。至少在版本 2 中是这样。