Search code examples
pythonpython-3.xsympyboolean-expression

Python Sympy - Select monomials from the ANF of a Boolean expression


I have some truth table in GF(2) and I compute the corresponding Algebraic Normal Form (ANF) or Zhegalkin polynomial. Below a dummy example with two variables.

from sympy.logic.boolalg import ANFform
from sympy.abc import x, y

truth_table = [0, 1, 1, 1]

expr = ANFform([x, y], truth_table)

which prints

x ^ y ^ (x & y)

I would then like to extract and select the individuals monomials of the resulting expression.

For example, I would have something like this:

expr_monoms[2] # (x & y)

How to achieve this?


Solution

  • You can use .args:

    In [50]: from sympy.logic.boolalg import ANFform
        ...: from sympy.abc import x, y
        ...: 
        ...: truth_table = [0, 1, 1, 1]
        ...: 
        ...: expr = ANFform([x, y], truth_table)
    
    In [51]: expr
    Out[51]: x ⊻ y ⊻ (x ∧ y)
    
    In [52]: expr.args[2]
    Out[52]: x ∧ y