从Z3版本3.2迁移到版本4.0

时间:2012-06-02 07:49:02

标签: z3

我正在从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

我的问题如下 -

  1. 如何调试此错误?这仍然适用于版本3.2,但没有求解器。
  2. 我必须在完成向上下文添加变量后才能创建求解器吗?创建解算器后,我可以在上下文中添加变量吗?或者我必须重新创建求解器?

  3. 对不起,不好意思。我正在混合求解器和上下文以将它们传递给求解器。 但是,问题仍然没有得到解决。 我在Z3_ast_to_String() API崩溃了。 我将尝试解决问题并发布更新。

2 个答案:

答案 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)吗?