哪种工具最适合转换CNF中的子句(甚至更好的DIMACS CNF)?

时间:2018-06-01 08:48:06

标签: sat cnf

我使用C ++程序自动生成这样的子句:

((((((condition1#0 and not action1#0 and not action2#0 and TRUE) and (action1#1 and not action2#1 and not condition1#1 and TRUE) and TRUE)) or (not action1#0 and not action2#0 and not condition1#0 and action2#1 and not action1#1 and not condition1#1 and TRUE) or FALSE)))

然后我需要用一些工具(比如MiniSat)检查它们的可满足性,但在输入这些工具之前我需要在DIMACS CNF中转换它们,你知道任何可以自动为它做的工具吗? / p>

谢谢!

修改

非CNF坐式解算器也可以正常工作!

1 个答案:

答案 0 :(得分:1)

在pysmt中有一个称为人类可读解析器(hrparser)的解析器,它应该能够解析这些表达式。 [1]。

Pysmt与picosat和cudd bdd软件包集成,因此您可以轻松检查是否具有可满足性。通常,smt求解器在输入结构(非cnf)中更灵活。如果您可以更改c ++代码的输出,则创建smtlib文件并使用smt silver(例如yices,z3或cvc4)可能很容易。

注意:我是pysmt的开发者之一 [1] http://pysmt.readthedocs.io/en/latest/_modules/pysmt/parsing.html#HRParser