我有一个布尔表达式,它被转换成代数范式(ANF),用的是逻辑模Symy,我们事先不知道ANF的单项式的次数是多少:它可以是1、2、3等。下面是一个包含六个变量的虚拟示例。
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()
其打印
(a0 & a1) ^ (a0 & c0) ^ (a1 & b1) ^ (b1 & c0) ^ (a0 & a1 & b0) ^ (a0 & a1 & b2) ^ (a0 & b0 & c0) ^ (a1 & b1 & b2) ^ (a0 & a1 & b0 & b2)
对于这个例子,单项式的最小次数是2(即两个变量相乘),我想找出结果ANF的哪些单项式特别具有一个变量(例如,上面例子中的c0
)。
2条答案
按热度按时间mklgxw1f1#
如果您正在寻找某种类型的子表达式,使用
atoms
可能是一个不错的方法:am46iovg2#
解决办法是
1.为了首先分裂ANF的单项式,
1.然后检查变量是否存在于每个单项式中。
输出: