在Z3中使用量词消除时的SegFault

时间:2013-02-18 11:50:47

标签: z3

我在MacOS X 10.8下使用Z3 4.3.1(来自master分支)。 我在以下示例中遇到了分段错误:

(declare-const a Int)
(declare-const b Int)

(assert
  (exists ((k Int))
    (and 
     (= (- (* 2 k) a) 0)
     (= (- (* 2 k) b) 0)
    )
  )
)


(check-sat-using qe)

有任何想法,如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我设法使用OSX和Z3 4.3.1重现您描述的错误。 此错误已得到修复,将在下一个正式版本中提供。 在此期间,您可以使用每晚构建OSX或使用unstable(正在进行中)分支构建Z3。

夜间版本可以在http://z3.codeplex.com/releases下载。我们必须点击"计划"链接。我写了一些说明here

顺便说一句,如果我们想要检查可满足性,我们应该在smt之后使用最终游戏策略(例如qe),就像在Axel发布的示例中一样。如果我们要检查qe生成的结果,我们应该使用(apply qe)代替。

答案 1 :(得分:0)

以下在Windows XP + Z3 4.3.0

下正常工作
(declare-const a Int)
(declare-const b Int)

(assert
  (exists ((k Int))
    (and 
     (= (- (* 2 k) a) 0)
     (= (- (* 2 k) b) 0)
    )
  )
)
(check-sat-using (then qe smt))
(get-model)