我正在从 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
我的问题如下 -
- 如何调试此错误?这仍然适用于 3.2 版,但没有求解器。
- 是否有必要仅在将变量添加到上下文后才必须创建求解器?创建求解器后,我可以将变量添加到上下文中吗?或者我必须重新创建求解器?
抱歉,添麻烦了。我正在混合求解器和上下文以将它们传递给求解器。然而,问题仍然没有解决。我在Z3_ast_to_String()
API 中遇到了崩溃。我将尝试解决问题并发布更新。