2015-09-22 2 views
1

Согласно sympy docs на logic package, мы можем преобразовать произвольное булево выражение в форму DNF/CNF, используя to_cnf/to_dnf или simplify_logic(expr, form='cnf'/'dnf').Как получить выражения выражения DNF/CNF в sympy?

Но после этого, как получить предложения из результата?

Мы можем попробовать использовать поле args. НО использовать это очень неудобно. Например, если вы преобразуете простое выражение, например ~a, в CNF/DNF, то в результате вы получите ~a, а затем вызывается (~a).args(), что не является предложением! (конечно, я могу обходиться с if проверками, но это уродливо)

ответ

1

Я не смог найти собственный метод в sympy, но я ошибся, когда написал, что использование 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).

Смежные вопросы