如何在Z3中用编程语言描述整数除法?

时间:2012-11-21 15:51:40

标签: z3

我正在使用SMT求解器来帮助分析程序。 在编程语言中,满足以下条件:

int x;
if((x/2) * 2 != x)  {
//reachable
}

但对于数学中的整数类型,这是不可满足的。 我可以用Z3来描述这个吗? 感谢。

1 个答案:

答案 0 :(得分:1)

您的示例在数学整数中也是可以满足的。您可以找到x的模型为任何奇数。

在Z3中,您应该使用机器整数,即bit-vectors进行建模:

(declare-const x (_ BitVec 32))
(assert (not (= (bvmul (bvsdiv x (_ bv2 32)) (_ bv2 32)) x)))
(check-sat)
(get-model)

这个例子 rise4fun link 确实令人满意。