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