[英]Creating Dnf and Cnf in Python out of a logictable (sympy, sagemath)
[英]How to get clauses of the DNF/CNF expression in sympy?
根據有關邏輯包的 sympy文檔,我們可以使用to_cnf
/ to_dnf
或to_dnf
simplify_logic(expr, form='cnf'/'dnf')
將任意布爾表達式轉換為DNF / CNF形式。
但是之后,如何從結果中獲取子句呢?
我們可以嘗試使用args
字段。 但是使用它非常不方便。 例如,如果你改變一個簡單的語句,比如~a
成CNF / DNF,那么你得到~a
結果,然后調用(~a).args
回報()
這不是第追捧! (當然,我可以解決if
檢查問題,但這很丑陋)
我在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)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.