我正在尝试文章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”的使用不会在这里引起不同的结果,因为一个主张?
答案 0 :(得分:0)
严格来说,unknown
和sat
并不矛盾:允许求解器随时退出并说出unknown
。例如,如果您明确使用战术,就会发生这种行为。
但是,您绝对正确的说法是,奇怪的push
导致了这种差异。请在z3 github问题站点https://github.com/Z3Prover/z3/issues上提交票证,并告诉我们您所发现的信息!