Python 如何在Z3Py中实现和逻辑

Python 如何在Z3Py中实现和逻辑,python,z3,smt,z3py,sat,Python,Z3,Smt,Z3py,Sat,我想实现一个约束,它需要Z3Py中的逻辑和。假设我们有两个变量a和b,我只想添加一个约束,它要求a==0和b==1。在Z3中应该有几种方法可以做到这一点,比如s.add(a==0,b==0)或s.add(And(a==0,b==0)。但是,我尝试了一种方法,它是s.add(a==0和b==0)。这种方法不起作用,代码是: from z3 import * a = Int('a') b = Int('b') s = Solver() #s.add(a == 0, b ==1) #s.add(

我想实现一个约束,它需要Z3Py中的逻辑和。假设我们有两个变量
a
b
,我只想添加一个约束,它要求
a==0
b==1
。在Z3中应该有几种方法可以做到这一点,比如
s.add(a==0,b==0)
s.add(And(a==0,b==0)
。但是,我尝试了一种方法,它是
s.add(a==0和b==0)
。这种方法不起作用,代码是:

from z3 import *

a = Int('a')
b = Int('b')

s = Solver()

#s.add(a == 0, b ==1)
#s.add(And(a == 0, b == 1))
s.add(a == 0 and b == 1)

print(s.check())
print(s.model())

这个文件的输出是
a=0
,这意味着b被忽略了……有人能解释为什么会发生这种情况吗?看起来是
和(a==0,b==1)
a==0和b==1在Z3Py中是不同的。

在我的系统上,
a==0
被忽略,而
b==1
被保留。我通过结合一个不可满足的约束来测试这一点。
和()
显然是一个
z3
定义的函数,它将术语连接在一起。它看起来不像
z3py
库中重载,但出于同样的目的,我可能在文档中遗漏了它。如果是这样的话,
python
的常规逻辑运算符。为什么它的行为不正确但是,我不能说是他的方式。是的,Python不允许某些运算符重载。而且“and”运算符不返回布尔值,而是返回最后一个计算的值;请参阅