什么是「;官方";Z3中PDR引擎的版本?

什么是「;官方";Z3中PDR引擎的版本?,z3,Z3,我在试用Z3中的PDR引擎,我不确定使用哪个版本的Z3 git的“官方”主分支似乎有效,但日期为2012年11月。我相信从那以后情况有所改善。另一方面,不稳定分支“可能包含不稳定和/或未测试的代码”,这似乎是正确的 发动机的最新“稳定”版本是什么 比如说 (declare-rel R (Real Real)) (declare-var x Real) (declare-var y Real) (rule (=> (and (= x 0) (= y 0)) (R x y)) )

我在试用Z3中的PDR引擎,我不确定使用哪个版本的Z3

git的“官方”主分支似乎有效,但日期为2012年11月。我相信从那以后情况有所改善。另一方面,不稳定分支“可能包含不稳定和/或未测试的代码”,这似乎是正确的

发动机的最新“稳定”版本是什么

比如说

(declare-rel R (Real Real))
(declare-var x Real)
(declare-var y Real)

(rule 
  (=> (and (= x 0) (= y 0)) (R x y)) 
)

(rule 
  (=> (R x y) (R (+ x 1) (+ y 1)))
)

(query 
  (and (R x y) (not (= x y)))
)

上面在master中工作,返回unsat,但在不稳定的分支中,引擎游走,无法解决问题。最近CAV的一篇论文也提出了同样的问题。

这是一种回归,感谢您指出这一点。 旧版本的PDR在检查归纳性时使用查询中的谓词。更新后的版本忽略了这一特性,即使该特性很容易被视为归纳特性,也会出现分歧。
使用查询中的谓词不是很普遍,我尝试用其他方法来代替它。例如,您可以执行一个“魔术集”转换,该转换应该向下推合适的谓词

有道理。如果有一个选项可以禁用任何非PDR的“谓词发明”,这样就可以单独使用PDR来更好地理解它,那就太好了。