Z3 简化CNF公式同时保留某些变量的所有解

Z3 简化CNF公式同时保留某些变量的所有解,z3,simplify,sat,Z3,Simplify,Sat,相关:(事实上,我认为这个问题的提交人可能是在追求我想要的东西) 有许多工具用于简化(或在求解前“预处理”)DIMACS格式的CNF公式,大多数SAT解算器都包含一些工具。然而,我所知道的是,将一个平凡可满足的公式简化为一个具有零或一个变量的平凡可满足的CNF,也就是说,它们只是试图保持公式的可满足性。我至少尝试过卫星和加密卫星的预处理模式 然而,对于构建一个大型问题的CNF,在我看来,一次简化一个定义良好的问题子集是非常有用的,它可以在最终的CNF中重复大量次,并在这些子公式中的一些变量之间附

相关:(事实上,我认为这个问题的提交人可能是在追求我想要的东西)

有许多工具用于简化(或在求解前“预处理”)DIMACS格式的CNF公式,大多数SAT解算器都包含一些工具。然而,我所知道的是,将一个平凡可满足的公式简化为一个具有零或一个变量的平凡可满足的CNF,也就是说,它们只是试图保持公式的可满足性。我至少尝试过卫星和加密卫星的预处理模式

然而,对于构建一个大型问题的CNF,在我看来,一次简化一个定义良好的问题子集是非常有用的,它可以在最终的CNF中重复大量次,并在这些子公式中的一些变量之间附加约束


那么,是否存在任何工具,或者普通SAT解算器(或者像Z3这样的解算器,我正在使用它来生成我希望最小化的CNF)是否可以以某种方式巧妙地使用,以简化CNF公式,同时保留给定变量集的所有解?

也许不是您想要的,但是浓缩咖啡系统()可以做布尔简化。到目前为止,它已经有20多年的历史了,但它仍然在行业中使用。

另一种方法是将
CNF
转换为And反相器图(
AIG
),并应用逻辑合成的方法来重组和简化
AIG

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


<

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

< P> SAT预处理器可以做你想做的事情。可以给它一个可选的变量范围,并且只在该范围内应用保持等价性的简化。在该范围之外,它将应用更强大、更令人满意的简化。至少在版本2中是这样。

谢谢你的提示。很难让它工作。有一个-whitelist参数用于指定不接触变量,其格式没有文档记录(它接受一个文件、每行一个变量或每行一个范围,如1..10所示)。即使如此,它对命令行参数的顺序也非常敏感,如果顺序错误,它会以有趣的方式悄悄失败,并在过程中截断提供的input.cnf文件。多棒的软件啊:D