Z3_parse_smtlib_string使用问题

时间:2014-07-02 05:21:52

标签: c++ c z3

在下面的代码中,我提出了一个明确不满意的Z3声明,然后尝试使用C ++ / C Z3 API以编程方式解决它。

问题是这段代码总是触发输出的检查:" SAT?!"。即,明确不可满足的表达式被确定为在API调用的当前使用中是可满足的。

如何让这种操作按预期工作?

#include "z3++.h"
int main(){
  z3::context c;

  std::string testing = "(declare-const p0 Bool)(assert(= p0 true))(assert(= p0 false))(check-sat)";

  Z3_ast parsed = Z3_parse_smtlib2_string(c,testing.c_str(),0,0,0,0,0,0);
  z3::expr e(c, parsed);

  z3::solver s(c);
  if(s.check() == z3::sat)
    std::cout << "SAT?!\n";
  return 0;
}

1 个答案:

答案 0 :(得分:2)

在这种情况下Z3是正确的,因为没有向求解器添加约束,因此这是非常令人满意的。关键部分是:

Z3_ast parsed = Z3_parse_...
z3::expr e(c, parsed);

z3::solver s(c);
s.add(e); // <--- Add constraints to solver here
if(s.check() ...