在Z3中使用函数,实数和量词

时间:2014-07-22 16:07:06

标签: z3

我试图向Z3提出涉及未解释函数(总是使用domain int),实数和量词的查询。我知道添加量词通常会导致unknown结果,但我对这种情况发生的速度感到惊讶:

(declare-fun $in1 (Int) Real)
(declare-fun $in2 (Int) Real)
(assert (< ($in1 0) ($in2 0)))
(assert (forall (($$out Real))
  (not (and (< ($in1 0) $$out) (< $$out ($in2 0))))))
(check-sat)

此查询应生成unsat,但会超时unknown。是否有我可以设置的标志或选项可能导致Z3解决此查询?我不愿意将所有未解释的功能整理成标量,但这是我能做的。

2 个答案:

答案 0 :(得分:2)

是的,看起来这是Z3的一个难题。电子匹配未能证明不可满足性,之后MBQI基本上开始枚举实数,这不会导致这里的目标。

如果您只想快速获得结果但不关心未知数,只需将smt.mbqi.max_iterations设置为足够小的值即可。您还可以尝试通过提供实例化模式来帮助电子匹配引擎(例如,参见quantifier section in the Z3 guide)。

还有一个相关问题可能有助于理解:Z3 patterns and injectivity

答案 1 :(得分:0)

Arie Gurfinkel指出(check-sat-using qe-sat)解决了这个问题。