[英]Or of bitvectors in z3Py
理想情况下,可以将两个数字“或”表示为位向量,但我做不到。 请告知代码中是否有错误或其他错误
line1 = BitVec('line1', 1)
line2 = BitVec('line2', 1)
s = Solver()
s.add(Or(line1, line2) == 0)
print s.check()
给出的错误是
error: 'type error'
WARNING: invalid function application for or, sort mismatch on argument at position 1, expected Bool but given (_ BitVec 1)
WARNING: (declare-fun or (Bool Bool) Bool) applied to:
line1 of sort (_ BitVec 1)
line2 of sort (_ BitVec 1)
从这个错误中我了解到Or只能对布尔变量执行。 我的问题是如何或针对BitVectors
是的, Or(a,b)
是布尔逻辑析取,您可能想按位进行,或者因为您试图比较位向量,所以可以在Python API中使用|
来完成。 从文档中获取 (示例的z3py链接为: http ://rise4fun.com/Z3Py/1l0):
line1 = BitVec('line1', 2)
line2 = BitVec('line2', 2)
s = Solver()
P = (line1 | line2) != 0
print P
s.add(P)
print s.check()
print s.model() # [line2 = 0, line1 = 3]
我更新了您的示例,使line1和line2的长度大于1位(这等效于boolean情况,但类型不同,因此会出现错误)。
请注意,这在SMT-LIB标准中是bvor
的,请参见http://smtlib.cs.uiowa.edu/logics/V1/QF_BV.smt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.