什么是Z3的默认解算器?

时间:2016-02-29 18:02:41

标签: z3 smt

[新手]。根据{{​​3}},' smt'是Z3的主要策略。但是,使用它明确地打破了琐碎的问题。如何在战术序列中引用默认的Z3求解器?

http://rise4fun.com/Z3/tutorialcontent/strategies

(declare-fun var1 () Real)
(assert (= (* var1 var1) 9.0))
(assert (< var1 0.0))
; Works
;(check-sat)
;(get-model)
; Breaks
(check-sat-using smt)
(get-info :reason-unknown)

1 个答案:

答案 0 :(得分:3)

默认情况下,Z3将查看您的公式以确定需要哪些功能和逻辑,然后它将调用合适的解算器/策略。您可以提供(set-logic ...)命令来控制它,或者您可以直接使用其中一种默认策略。有关Z3具有自定义策略的SMT逻辑列表,请参阅default_tactic.cpp。如果它们都不匹配且没有选择逻辑,那么&#34; smt&#34;是将要执行的策略。

要查看运行哪些策略,请将-v:10添加到命令行,Z3将在执行时打印战术名称和统计信息。

对于这种类型的非线性实数,&#34; smt&#34;战术不是很强大,它会迅速放弃并返回&#34;未知&#34;。但是,它不是这类问题的默认策略;相反(在一些预处理之后)它是&#34; nlsat&#34;解决问题的策略,通过QF_NRA的默认策略调用(见qfnra.cpp)。