是否可以使用 Z3 expr_vectors 创建连续的 OR 语句?

Is it possible to create consecutive OR statements using Z3 expr_vectors?

我正在尝试创建一个约束,使得值 X 是 expr_vector 的成员之一,例如,

context c;
expr_vector v(c);
expr x = c.int_const("x");
expr i1 = c.int_val(5);
expr i2 = c.int_val(7);
solver s(c);
s.add(x == i1 || x == i2); // this is what I want to create iteratively

我试图通过循环 expr_vector v 来创建布尔表达式来创建表达式,但我失败了。

我基本上想要的是能够写出这样的表达式。

v.push_back(i1);
v.push_back(i2);
s.add(belongs(x, v));

此功能由 z3 API 提供,称为 expr_mk_or,可用 here

您也可以将其实现为循环:从初始化为 false 的布尔表达式开始,在每次迭代中使用 or 组合器将它们串在一起。如果您 post 尝试过,我们可以指出您可能做错了什么。