簡體   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