【问题标题】:Python Sympy - Check if variable present in ANF of Boolean expressionPython Sympy - 检查布尔表达式的 ANF 中是否存在变量
【发布时间】:2023-02-01 21:34:19
【问题描述】:

我有一个布尔表达式,它使用 Sympy 的逻辑模块转换为其代数范式 (ANF)。在下面找到一个包含六个变量的虚拟示例。

from sympy import symbols
from sympy.logic.boolalg import to_anf

a = symbols('a:{}'.format(2))
b = symbols('b:{}'.format(3))
c = symbols('c:{}'.format(1))

expr = ((a[0] & (~b[0])) ^ b[1]) & ((a[1] & (~b[2])) ^ c[0])
anf  = expr.to_anf()

print(anf)
>>> (a0 & a1) ^ (a0 & c0) ^ (a1 & b1) ^ (b1 & c0) ^ (a0 & a1 & b0) ^ (a0 & a1 & b2) ^ (a0 & b0 & c0) ^ (a1 & b1 & b2) ^ (a0 & a1 & b0 & b2)

我想找到结果的哪些单项式并且具有变量c0

【问题讨论】:

    标签: python-3.x sympy boolean-expression


    【解决方案1】:

    解决办法是

    1. 首先拆分 ANF 的单项式,
      monomials = []
      if anf.args:
          for monomial in anf.args:
              monomials.append(monomial)
      
      1. 然后检查每个单项式中是否存在变量。
      for monomial in monomials: 
          if c[0] in monomial.args:
              print(monomial, ' -> c0 is here')
      >>> a0 & c0  -> c0 is here
      >>> b1 & c0  -> c0 is here
      >>> a0 & b0 & c0  -> c0 is here
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2014-03-11
      • 2014-11-17
      • 1970-01-01
      相关资源
      最近更新 更多