如何使用z3位向量或Int作为数组索引?
我想使用Int向量作为数组索引 蟒蛇如何使用z3位向量或Int作为数组索引?,z3,symbolic-math,z3py,Z3,Symbolic Math,Z3py,我想使用Int向量作为数组索引 蟒蛇 array = [12,45,66,34] s= Solver() x = Int('x') s.add(array[x] == 66) 所以x应该是2 我该怎么做呢?这里有一种方法: from z3 import * s = Solver () array = [12, 45, 66, 34] A = Array ('A', IntSort(), IntSort()) i = 0 for elem in array: A = Store(A,
array = [12,45,66,34]
s= Solver()
x = Int('x')
s.add(array[x] == 66)
所以x应该是2
我该怎么做呢?这里有一种方法:
from z3 import *
s = Solver ()
array = [12, 45, 66, 34]
A = Array ('A', IntSort(), IntSort())
i = 0
for elem in array:
A = Store(A, i, elem)
i = i + 1
x = Int ('x')
s.add(x >= 0)
s.add(x < len(array))
s.add(Select(A, x) == 66)
if s.check() == sat:
print s.model()
else:
print "Not found!"
为什么要添加
x>=0
和x
约束。我以为Select
只是从那个范围中选择?@stklik那不是真的<代码>选择将操作整个域,即所有整数值。Z3数组没有上下限的概念。通过移除这些约束并观察Z3的作用,您可以很容易地看到这一点。
$ python a.py
[x = 2]