如何使用z3消除表达式中的“not”?

时间:2012-08-03 08:52:05

标签: z3

我尝试使用代码在表达式中删除:

(declare-const t Int)

(assert (and (or (>= t 2) (>= t 1)) (not (= t 1))))

(apply ctx-solver-simplify)

我想得到的结果如下:t> = 2 但结果是:

(goals
(goal
  (>= t 1)
  (not (= t 1))
  :precision precise :depth 1)
)

有人会帮我怎么做吗?

1 个答案:

答案 0 :(得分:2)

策略simplify有一个选项:eq2ineq。启用后,它会将等级t1 = t2转换为t1 <= t2 and t1 >= t2。应用这种策略后,策略propagate-ineqs将更有效。

这是一个可以解决问题的脚本: http://rise4fun.com/Z3/JWit

请注意,这不是一般解决方案。内置策略都没有完全符合您的要求。