我注意到Z3 C ++(和C)API允许您提供要使用的逻辑。
我有两个问题,我无法通过在线查看来回答:
QF_LRA
我的上下文主要是QF没有BV,但其他一切可能,我正在逐步使用SMT求解器,我总能找出我将在开始时使用的逻辑。
答案 0 :(得分:3)
Z3还将尝试弄清楚逻辑是什么(当使用默认选项运行时),但它没有针对所有理论组合的自定义策略(请参阅default_tactic.cpp和smt_strategic_solver.cpp)。如果您不确定Z3将决定做什么,那么最好先预先设置策略,这样如果您尝试使用不符合该逻辑的内容,您将会遇到错误。它还将使用该信息来设置smt内核,例如,启用各种预处理器,各种求解器功能和选择启发式(参见例如smt_setup.cpp)。
答案 1 :(得分:1)
试一试,看看!
通常它会产生很大的不同。设置逻辑意味着求解器将使用专门的策略来解决公式,而不是通过通用循环。 Z3也会尝试猜测逻辑,但通常最好先提供它。