在Z3(API)中设置求解器的逻辑

时间:2016-01-14 12:43:49

标签: z3 smt

我注意到Z3 C ++(和C)API允许您提供要使用的逻辑。

我有两个问题,我无法通过在线查看来回答:

  1. 这些应该是标准SMT-LIB logics,即QF_LRA
  2. 这些值得提供的时间,即Z3何时会实际使用此信息
  3. 我的上下文主要是QF没有BV,但其他一切可能,我正在逐步使用SMT求解器,我总能找出我将在开始时使用的逻辑。

2 个答案:

答案 0 :(得分:3)

Z3还将尝试弄清楚逻辑是什么(当使用默认选项运行时),但它没有针对所有理论组合的自定义策略(请参阅default_tactic.cppsmt_strategic_solver.cpp)。如果您不确定Z3将决定做什么,那么最好先预先设置策略,这样如果您尝试使用不符合该逻辑的内容,您将会遇到错误。它还将使用该信息来设置smt内核,例如,启用各种预处理器,各种求解器功能和选择启发式(参见例如smt_setup.cpp)。

答案 1 :(得分:1)

试一试,看看!

通常它会产生很大的不同。设置逻辑意味着求解器将使用专门的策略来解决公式,而不是通过通用循环。 Z3也会尝试猜测逻辑,但通常最好先提供它。