【问题标题】:How to get clauses of the DNF/CNF expression in sympy?如何在 sympy 中获取 DNF/CNF 表达式的子句?
【发布时间】:2015-09-22 16:17:40
【问题描述】:

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

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

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

【问题讨论】:

    标签: python sympy boolean-logic


    【解决方案1】:

    我在 sympy 中找不到本地方法,但是当我写到使用 args 很丑陋时我错了。这是解决方案。

    def clauses(expr) -> tuple:    # for DNFs only
        if not isinstance(expr, sympy.logic.boolalg.Or):
            return expr,
        return expr.args
    

    注意该函数返回 (true,)/(false,) 的真/假值。对于 CNF,请更改为 isinstance(expr, And)

    【讨论】:

      猜你喜欢
      • 2021-09-29
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      相关资源
      最近更新 更多