我正在从Z3版本3.2迁移到版本4.0。 但是,之前工作的代码不再直接工作,我试图找出相同的原因。我将整个代码简化为一个非常简单的声明和断言,但它仍然不起作用。代码是 -
long intSort = Z3_mk_int_sort (context);
long periodDeclStr = Z3_mk_string_symbol(context, "period");
long periodVar = Z3_mk_const(context, periodDeclStr, intSort);
long solver = z3_mk_solver();
long zero = Z3_mk_int (context, 0, intSort);
long eqSt = Z3_mk_eq(context, periodVar, zero);
Z3_solver_assert (context, solver, eqSt);
问题在于最后一个语句Z3_mk_eq()
我收到错误 -
WARNING: invalid function application, sort mismatch on argument at position 2
WARNING: (define = arith arith Bool) applied to:
period of sort arith
0::Int of sort Int
我的问题如下 -
对不起,不好意思。我正在混合求解器和上下文以将它们传递给求解器。
但是,问题仍然没有得到解决。
我在Z3_ast_to_String()
API崩溃了。
我将尝试解决问题并发布更新。
答案 0 :(得分:2)
现在有一个与Z3 4.0的交互日志,可以精确地记录API交互。 应该可以使用此功能来调试JNI分层和您找到的错误。 使用Z3_open_log()打开日志。 您应该在创建任何上下文之前打开日志。 如果您只想捕获交互的子集,也可以在任何时刻关闭日志(Z3_close_log())。您可以通过给出后缀“.log”重放日志并在其上运行Z3。 或者,您可以使用选项/ log运行Z3,即“Z3.exe / log”以重放交互。
答案 1 :(得分:0)
您不想Z3_mk_eq(context, id, zero)
代替Z3_mk_eq(context, periodDecl, zero)
吗?