Arrays 从Z3Py中的模型检索数组

Arrays 从Z3Py中的模型检索数组,arrays,z3,z3py,Arrays,Z3,Z3py,我知道有,但我找不到Z3Py的相应信息。我试图从Z3找到的模型中检索数组,这样我就可以使用索引访问数组的值。例如,如果我有 >>> b = Array('b', IntSort(), BitVecSort(8)) >>> s = Solver() >>> s.add(b[0] == 0) >>> s.check() sat 然后我想做一些类似的事情 >>> s.model()[b][0] 0 但我目前得

我知道有,但我找不到Z3Py的相应信息。我试图从Z3找到的模型中检索数组,这样我就可以使用索引访问数组的值。例如,如果我有

>>> b = Array('b', IntSort(), BitVecSort(8))
>>> s = Solver()
>>> s.add(b[0] == 0)
>>> s.check()
sat
然后我想做一些类似的事情

>>> s.model()[b][0]
0
但我目前得到:

>>> s.model()[b][0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'FuncInterp' object does not support indexing
>s.model()[b][0]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:“FuncInterp”对象不支持索引

P>从C++答案判断,似乎我必须用模型中的一些值来声明一个新函数,但我不太理解它自己,使之适应Z3Py。

< P>你可以通过建立对关联数组模型函数的调用来请求模型在特定点上评估(<代码> EVE(…)>代码>)数组。下面是一个例子:

b = Array('b', IntSort(), BitVecSort(8))
s = Solver()
s.add(b[0] == 21)
s.add(b[1] == 47)
s.check()

m = s.model()
print(m[b])

print(m.eval(b[0]))
print(m.eval(b[1]))
产生

[1 -> 47, 0 -> 21, else -> 47]
21
47