我正在使用SMT求解器来帮助分析程序。 在编程语言中,满足以下条件:
int x;
if((x/2) * 2 != x) {
//reachable
}
但对于数学中的整数类型,这是不可满足的。 我可以用Z3来描述这个吗? 感谢。
答案 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 确实令人满意。