Python:访问数组/列表第一个元素,数据类型为 Z3

Python: accessing array's / list's first element, with Z3 datatypes

在Python(协作)中,我有以下变量c

array([x_1 > 1000, y_1 < x_1 + 1], dtype=object)

其中 x_1 > 1000y_1 < x_1 + 1 是 z3 (py) 变量/谓词。我想完全访问它的 'first element': 数组/列表 [x_1 > 1000, y_1 < x_1 + 1],但我没有能力。

这些是我所做的尝试:

我想访问数组的那个元素的原因是我想以自动方式执行以下 z3 计算:

And([x_1 > 1000, y_1 < x_1 + 1])。所以制作类似 And(c[0]).

的东西会很好

这可能是初学者的错误,但我看不到。有帮助吗?


编辑:

请注意,询问 And(c[0]) 的问题是我正在做 And(x_1 > 1000),而我想执行:And(x_1 > 1000, y_1 < x_1 + 1)(即,显然 And(c[0],c[1]) .

最好 post 完整的代码段,即那些可以被读者加载和执行而无需填充缺失部分的代码段。否则真的很难 replicate/understand 你想做什么以及你遇到了什么错误。

我不使用 collab(不确定它是什么),但是如果 c 是一个列表,您可以使用 * 符号将其内容转换为参数。像这样:

from z3 import *

x_1, y_1 = Ints('x_1 y_1')
c = [x_1 > 1000, y_1 < x_1 + 1]

s = Solver()
s.add(And(*c))
print(s.sexpr())

这会打印:

(declare-fun x_1 () Int)
(declare-fun y_1 () Int)
(assert (and (> x_1 1000) (< y_1 (+ x_1 1))))

无论您在列表中有多少元素,这都会正常工作 c。请注意,这与 z3 无关,但它是一个 Python 成语。

我不确定你的 array 构造;但如果它可以变成一个列表,上面的技巧应该有效。这是您要找的吗?