Optimization CNF简化

Optimization CNF简化,optimization,satisfiability,cnf,Optimization,Satisfiability,Cnf,给定一组子句,我想首先检查它们是否满足要求。如果是,我想简化它们并创建一个CNF,例如,(a或b)^(不是b)应该简化为:a^(不是b)。我只研究命题公式。我已经尝试使用JavaSAT4J库来实现这一点。它可以告诉我这组子句是否是可满足的,但似乎没有任何方法返回给我一个简化的CNF。如何有效简化CNF?有任何Java或Python实现吗?您可以使用Norbert Manthey的Riss3g来简化您的CNF SAT解算器允许执行以下操作 ,一个来自奥地利的SAT解算器有一个选项“-s”来简化CN

给定一组子句,我想首先检查它们是否满足要求。如果是,我想简化它们并创建一个CNF,例如,(a或b)^(不是b)应该简化为:a^(不是b)。我只研究命题公式。我已经尝试使用JavaSAT4J库来实现这一点。它可以告诉我这组子句是否是可满足的,但似乎没有任何方法返回给我一个简化的CNF。如何有效简化CNF?有任何Java或Python实现吗?

您可以使用Norbert Manthey的Riss3g来简化您的
CNF

SAT
解算器允许执行以下操作

,一个来自奥地利的
SAT
解算器有一个选项
“-s”
来简化
CNF
子句


要将布尔表达式转换为简化的
CNF
,您可以使用。

您好,谢谢您的推荐。SAT解算器minisat在预处理后不输出任何子句,即使这些子句是可满足的。所以,我认为这比我需要的要远。Riss3g协处理器也是如此。bc2cnf不起作用。玲玲看起来很有希望,但是它的文档严重缺乏,并且它没有创建所需的.o文件。我还可以检查其他的实现吗?当CNF子句被认为是可满足的时,它们会简化为一组一元子句,每个子句只有一个文本。因此,创建这种减少的CNF没有多大意义。解算器将只输出解(=满足CNF的变量赋值)。bc2cnf绝对“有效”。玲玲是一个世界级的工具,有大量的帮助和解释文件。如果你不能掌握它,你可能想发布一个额外的问题。我在这个电路上尝试了bc2cnf:BC1.0 K_4:=或(K_1,~K_2);K_5:=~K_1;分配K_4;分配K_5;我得到了以下结果:c实例是可满足的c K_4 T c K_5 T c K_1 F c K_2 F p cnf 1 1 1 0我需要的是一个简化的cnf,就像在这种情况下的两个子句:~K1和~K2,而不仅仅是一个可能的赋值。我知道的任何解算器都会通过重复的单位传播直接得出K_1=false和K_2=false的结论。您的“~K_1和~K_2”不能表示为一个子句。它必须写成两个条款。将SAT解决方案直接翻译成一组一元子句没有什么区别。我问了一个相关的问题,我怀疑这可能是原始提交人的目的: