繁体   English   中英

或z3Py中的位向量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM