使用 Z3 的 C++ api 创建长求和?

Create a long Sum using the C++ api of Z3?

创建具有可变数量 int 的 long Sum 的首选方法是什么?

我的猜测是这样的:

expr mk_add(expr_vector args) {
    vector<Z3_ast> arr;
    for (int i = 0; i < (int)args.size(); i++)
        arr.push_back(args[i]);
    return to_expr(args.ctx(), Z3_mk_add(args.ctx(), arr.size(), &arr[0]));
}

这是正确的吗?

是的,看起来是正确的。请记住要小心 Z3_ast 对象,因为它们的引用计数不会自动更新(这里 to_expr 应该注意这一点)。

另一个保留在 C++ API 中并且不需要笨拙翻译的解决方案是:

expr mk_add(expr_vector args) {
    expr r = args[0];
    for (int i = 1; i < (int)args.size(); i++)
        r = to_expr(args.ctx(), r + args[i]);
    return r;
}