如何使用z3位向量或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,

我想使用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, 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]