作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如何通过 Z3 中的 C++ 接口(interface)启用校样?我尝试了以下方法将 :produce-proofs 设置为 true,但如果我取消注释该行,稍后当我尝试将 !conjecture 添加到解决方案时,即使在取消注释调用 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";
}
最佳答案
参见 test_capi.c 中的 mk_proof_context
.必须在上下文和求解器中启用证明。在 C++ 中,最简单的方法可能是通过
z3::set_param("proof", "true");
在创建任何上下文或求解器之前。
关于c++ - 如何在 z3 c++ 界面中启用校样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42170841/
我是一名优秀的程序员,十分优秀!