Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Z3 为什么如果注释一个中间的`(check-sat)`调用,查询结果会改变?_Z3_Smt - Fatal编程技术网

Z3 为什么如果注释一个中间的`(check-sat)`调用,查询结果会改变?

Z3 为什么如果注释一个中间的`(check-sat)`调用,查询结果会改变?,z3,smt,Z3,Smt,在调试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) 查询

在调试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。

这是一个量词推理引擎中的错误。此错误将被修复。同时,您可以通过使用数据类型而不是未解释的排序+基数约束来避免该错误。也就是说,您将
Q
T
声明为:

(声明数据类型()((Q Q_accept_S13 Q_T0_init Q_accept_S7 q_接受_S6 q_接受_S5 q_接受_S4 q_T0_S3 q_接受_S12 q_接受_S10 q_接受(9 q_接受))

(声明数据类型()((T_0 T_1 T_2 T_3 T_4 T_5 T_6 T_7)))

上面的声明本质上定义了两种“枚举”类型。 通过这些声明,您将获得第二个查询的一致答案