如何在z3 c ++界面中启用校样?

时间:2017-02-11 00:33:50

标签: c++ z3

如何通过Z3中的C ++界面启用校样?我已经尝试了以下设置:将 - proof-proofs设置为true,但是如果我取消注释该行,当我尝试添加!猜想到解决方案时,我甚至在取消注释调用proof()的行之前就会崩溃。基于示例C ++文件中的函数:

        void prove_example2(std::ostream& os) {
        os << "prove_example2\n";

        context c;
        solver s(c);
        params p(c);
        //p.set(":produce-proofs", true);
        s.set(p);

        expr x = c.int_const("x");
        expr y = c.int_const("y");
        expr z = c.int_const("z");
        sort I = c.int_sort();
        func_decl g = function("g", I, I);

        expr conjecture1 = implies(g(g(x) - g(y)) != g(z) && x + z <= y && y <= x,
            z < 0);


        s.add(!conjecture1);
        os << "conjecture 1:\n" << conjecture1 << "\n";
        if (s.check() == unsat) {
            os << "proved" << "\n";
            // Needs setup before calling
            //os << s.proof() << "\n";
        }
        else
            os << "failed to prove" << "\n";
}

1 个答案:

答案 0 :(得分:0)

请参阅test_capi.c中的wwwroot/lib/jquery/。必须在上下文和解算器中启用证明。在C ++中,最简单的方法可能是通过

设置全局默认参数
mk_proof_context

在创建任何上下文或解算器之前。