我试图向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解决此查询?我不愿意将所有未解释的功能整理成标量,但这是我能做的。
答案 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)
解决了这个问题。