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

时间:2016-11-16 10:50:11

标签: c++ api z3 smt

使用可变数量int s创建长整数的首选方法是什么?

我的猜测是这样的:

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]));
}

这是正确的吗?

1 个答案:

答案 0 :(得分: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;
}