对于我的应用程序代码,我为我的求解器使用了以下z3参数设置
z3::params p(context);
p.set(":relevancy", static_cast<unsigned>(1));
p.set(":logic", QF_ABV);
p.set(":timeout", timeout);
solver.set(p);
更新到最新的Z#unstable后,我得到了C ++异常,主要说明逻辑和超时不是有效参数。我没有找到任何逻辑的等效选项,所以我认为这是自动推断的。但是,对于超时,有两个选项soft_timout和solver2_timeout。我知道solver2_timeout用于增量求解器(即使用push / pops),因此我将代码更改为使用以下参数。
z3::params p(context);
p.set(":relevancy", static_cast<unsigned>(1));
p.set(":soft_timeout", yices_timeout);
solver.set(p)
更改是否正确? soft_timeout与超时有何不同?是否有有效的&#34; z3 :: params&#34;保持在某个地方?
答案 0 :(得分:2)
通过运行z3 -p
获取参数的文档。通过运行z3 -pp:option_name
可获得有关特定选项的更多信息。
参数基础设施在4.3.2中发生了重大变化;现在有参数模块,soft_timeout驻留在smt模块中,即正确的名称是smt.soft_timeout
。没有设置逻辑,但我们不能假设它将自动确定(仅适用于其中一些)。相反,我们现在可以为特定逻辑构建Solver对象(在C ++中通过solver::solver(context & c, char const * logic)
),或者使用一种预定义的SMT策略(参见例如strategies tutorial)