用一个微不足道的forall得到未知的结果

时间:2013-04-18 22:02:29

标签: c++ z3

我正在使用z3 C ++ API。如果我创建这个简单的虚假表达式:

z3::expr x = C->int_const("x");
z3::expr p = z3::forall(x, x==0);

并尝试解决,我得到一个未知的结果。我不是策略和战术的专家,但我确信如果我使用正确的策略,z3可以解决这个问题。

我也试过

z3::expr p = !z3::forall(x, x==0);
当然,还有同样的知名度。

1 个答案:

答案 0 :(得分:0)

我不熟悉z3,但从一般的C ++角度来看,不会x==0先评估,不会使您的调用等同于implies(x, 1) ?从快速搜索看,您可能必须将语句的每个部分构造为z3对象,例如:

Z3_ast consequent = Z3_mk_eq(ctx, x, 0);
Z3_ast theorem = Z3_mk_implies(ctx, x, consequent);

但上述情况也不正确。我相信参数x0本身必须是Z3_ast的实例,它们封装了您的意思(与其插值或引用相对)。