为什么一个查询结果的变化,如果评一个中间`(检查-SAT)`打电话?(Why does a quer

2019-09-16 21:42发布

在调试UNSAT查询我注意到在查询状态的有趣的差异。 查询结构为:

assert(...)
(push)      ; commenting any of these two calls
(check-sat) ; makes the whole query UNSAT, otherwise it is SAT

assert(...)
(check-sat) ; SAT or UNSAT depending on existence of previous call
(exit)

有没有pop查询电话。 触发这种行为的查询是这里 。

想法,为什么?

注:我实际上并不需要渐进性,它是仅用于调试目的。 Z3的版本是3.2。

Answer 1:

这是量词推理引擎之一的错误。 这个错误会被修正。 在此期间,你能避免使用的数据类型,而不是未解释的种种+基数约束的错误。 也就是说,你声明QT为:

(声明-数据类型()((Q q_accept_S13 q_T0_init q_accept_S7 q_accept_S6 q_accept_S5 q_accept_S4 q_T0_S3 q_accept_S12 q_accept_S10 q_accept_S9 q_accept_all)))

(声明-数据类型()((T T_0 T_1 T_2 t_3处T_4 t_5 t_6 t_7)))

上述声明,基本上限定了两个“枚举”类型的。 有了这些声明,你将获得第二个查询一致的答案。



文章来源: Why does a query result changes if comment an intermediate `(check-sat)` call?
标签: z3 smt