当断言0除以0为1时,z3返回未知

时间:2019-05-28 18:19:41

标签: z3

我正在尝试文章Z3: a tutorial中的示例。有一个示例说明所有功能都是合计的,包括“ div”:

(push)
(assert (= 1 (div 0 0))) 
(check-sat)
;sat (pop)

我注意到z3版本4.8.5返回的结果取决于是否使用“推”功能。

使用以下代码,z3返回未知:

(get-info :version)
;(push)
(assert (= 1 (div 0 0)))
(check-sat)

z3的输出是:

(:version "4.8.5 - build hashcode 8c085f1a1850")
unknown

相反,在下面的代码中,z3返回sat:

(get-info :version)
(push)
(assert (= 1 (div 0 0)))
(check-sat)
(get-model)

z3的输出是:

(:version "4.8.5 - build hashcode 8c085f1a1850")
sat
(model 
)

rise4fun教程中,它说“命令推送通过保存当前堆栈大小来创建新作用域”,似乎“ push”的使用不会在这里引起不同的结果,因为一个主张?

1 个答案:

答案 0 :(得分:0)

严格来说,unknownsat并不矛盾:允许求解器随时退出并说出unknown。例如,如果您明确使用战术,就会发生这种行为。

但是,您绝对正确的说法是,奇怪的push导致了这种差异。请在z3 github问题站点https://github.com/Z3Prover/z3/issues上提交票证,并告诉我们您所发现的信息!