是否C ++参数:逻辑和:超时在Z3不稳定分支中被弃用?

时间:2015-01-26 18:17:49

标签: c++ api z3

对于我的应用程序代码,我为我的求解器使用了以下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;保持在某个地方?

1 个答案:

答案 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