提取SMT-LIB公式

时间:2014-10-31 02:20:44

标签: z3

有没有办法从C ++ API的solver / model / context类中提取SMT-LIB公式,包括所有声明,定义和约束到.smt2文件中。即与函数相反的是" Z3_parse_smtlib2_string"确实。

1 个答案:

答案 0 :(得分:4)

好点。 C ++缺乏此功能。 Python绑定现在为解算器类提供了它。

这是一个可能的草图:

    std::string to_smt2() {
        expr_vector es = assertions();
        ast* const* fmls = es.ptr();
        unsigned sz = es.size();
        if (sz > 0) {
            --sz;
            fml = fmls[sz];
        }
        else {
            fml = ctx().bool_val(true);
        }
        std::string result;
        result = Z3_benchmark_to_smtlib_string(ctx(),
                                               "", "", "", "", 
                                               sz, 
                                               fmls, 
                                               fml);
        return result;
    }