如何使用sympy根据布尔方程组中的其他变量提取布尔变量的值?

问题描述

我有一个布尔方程组(下面给出示例)

p = x & ~y
q = x & y

现在,我想根据系统中其他变量(如果可能,是LHS变量)来获取x的表达式,或者发现无法获得它。

是否可以在 sympy (或 z3 ?)中使用?
import sympy as s
p,q = s.symbols('p,q')
x,y = s.symbols('x,y')
v = s.And(s.Eq(p,x & y),s.Eq(q,x & ~y))

我看过solve()solveset(),但它们似乎在处理线性方程。

>>> s.solveset(v,x)
    raise ValueError("%s is not a valid SymPy expression" % f)
ValueError: Eq(p,x & y) & Eq(q,x & ~y) is not a valid SymPy expression

还有其他选择吗?

我真的不明白documentation。据此,以下内容应该有效,因为它清楚地表明在sympy.solvers.solvers.solve(f,*symbols,**flags)中,f可以是关系表达式 boolean

>>> s.And(s.Equivalent(p,x &y),s.Equivalent(q,x&~y)).simplify()
(x | ~p) & (x | ~q) & (y | ~p) & (~p | ~q) & (~q | ~y) & (p | q | ~x) & (q | y | ~x) & (p | ~x | ~y)

>>> s.solve(s.And(s.Equivalent(p,x&~y)),x)
TypeError: unsupported operand type(s) for -: 'And' and 'int'

>>> s.solveset(s.And(s.Equivalent(p,x)
ValueError: (Equivalent(p,x & y)) & (Equivalent(q,x & ~y)) is not a valid SymPy expression

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)