我对Z3 SMT解算器的实现很粗糙,但我发现Java API非常难以访问。 我使用parseSMTLIB2String并且它可以很好地完成工作,直到SAT检查返回一个UNSATISFIABLE。然后它继续返回UNSATISFIABLE,即使之前的值返回SATISFIABLE。我使用解算器错了吗?
public static Boolean checkSat(int checkMakespan, Flowshop fs) {
String smtString = FlowShopSmtGen.generateSMTFromFlowshop(fs, checkMakespan);
HashMap<String, String> cfg = new HashMap<>();
Context ctx = new Context(cfg);
BoolExpr fsresult = ctx.parseSMTLIB2String(smtString, null, null, null, null);
Solver solver = ctx.mkSolver();
solver.add(fsresult);
Status s = solver.check();
System.out.println(s);
if (s == Status.SATISFIABLE) {
return true;
} else {
return false;
}
}
答案 0 :(得分:0)
如果您将断言添加到已经不可满足的断言集中,那么您应该继续获得不可满足的答案。
但如果你在中间弹出一些断言,那么可能会有一些可疑的东西。