如何使用z3 BitVec或Int作为数组索引?

时间:2018-03-25 09:21:23

标签: z3 symbolic-math z3py

我想使用Int向量作为数组索引。

蟒。

array = [12,45,66,34]
s= Solver()
x = Int('x')
s.add(array[x] == 66)

所以x应该是2 ..

我该怎么做?

1 个答案:

答案 0 :(得分: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!"

打印:

$ python a.py
[x = 2]