繁体   English   中英

Z3Py:增加两个向量不等式的约束

[英]Z3Py: add constraint of two vectors inequality

(主题)

这是我的尝试:

#!/usr/bin/python
from z3 import *

s=Solver()

veclen=3

tmp_false=BoolVector ('tmp_false', veclen)
for x in range(veclen):
    s.add(tmp_false[x]==False)

tmp=BoolVector ('tmp', veclen)

s.add(tmp!=tmp_false) # not working

# I want here tmp equals to anything except False,False,False

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

我会使用元组,但是向量的长度是在运行时设置的。 我应该使用数组吗? 还是Z3手册中所述的元组中类似LISP的con-cell?

BoolVector函数仅创建一个列表结构。 python列表上的!=运算符不会创建表达式。 它只是评估为“ true”。 因此,您实际上并没有向Z3发送表达式。 要创建元组表达式,可以使用代数数据类型。 记录类型是代数数据类型的特例,并且Z3知道如何推理这些。 因此,例如,您可以编写:

from z3 import *

s=Solver()

Bv = Datatype("record")
Bv.declare('mk', ('1', BoolSort()), ('2', BoolSort()), ('3', BoolSort()))   
Bv = Bv.create()

tmp_false = Bv.mk(False, False, False)
tmp = Const('tmp', Bv)

print tmp != tmp_false
s.add(tmp!=tmp_false) 

# I want here tmp equals to anything except False,False,False

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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