根据logic package上的同情文档,我们可以使用to_cnf
/ to_dnf
或simplify_logic(expr, form='cnf'/'dnf')
将任意布尔表达式转换为DNF / CNF格式。
但在那之后,如何从结果中获取子句?
我们可以尝试使用args
字段。但使用它非常不方便。例如,如果您将~a
之类的简单表达式转换为CNF / DNF,那么您会得到~a
作为结果,然后调用(~a).args
会返回()
,这不是条款寻求! (当然,我可以使用if
检查进行解决,但这很难看)
答案 0 :(得分:1)
我无法在同情中找到原生方法,但在撰写使用args
时,我错了。这是解决方案。
def clauses(expr) -> tuple: # for DNFs only
if not isinstance(expr, sympy.logic.boolalg.Or):
return expr,
return expr.args
Notre该函数返回(true,)
/ (false,)
的真/假值。对于CNF,请更改为isinstance(expr, And)
。