Python 如何在Z3Py中实现和逻辑
我想实现一个约束,它需要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(
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”运算符不返回布尔值,而是返回最后一个计算的值;请参阅