如何在同意中获得DNF / CNF表达的条款?

时间:2015-09-22 16:17:41

标签: python sympy boolean-logic

根据logic package上的同情文档,我们可以使用to_cnf / to_dnfsimplify_logic(expr, form='cnf'/'dnf')将任意布尔表达式转换为DNF / CNF格式。

但在那之后,如何从结果中获取子句?

我们可以尝试使用args字段。但使用它非常不方便。例如,如果您将~a之类的简单表达式转换为CNF / DNF,那么您会得到~a作为结果,然后调用(~a).args会返回(),这不是条款寻求! (当然,我可以使用if检查进行解决,但这很难看)

1 个答案:

答案 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)