(check-sat-using default)或类似的?

时间:2016-05-25 16:52:26

标签: z3

当Z3在未指定逻辑的情况下运行并且发出(check-sat)时,default_tactic.cpp中的逻辑用于有条件地调用" best"求解。我想从SMT-LIB 2界面访问这个默认策略。

我尝试将default_tactic.cpp中的逻辑转换为SMT-LIB,我想出了这个:

(check-sat-using (and-then simplify
    (cond is-qfbv qfbv
    (cond is-qflia qflia
    (cond is-qflra qflra
    (cond is-qfnra qfnra
    (cond is-qfnia qfnia
    (cond is-nra nra
    (cond is-lira lira
    (cond is-qffpabv qffpa
    smt))))))))))

这"几乎"如果您删除了nraliraqffpa的行,那么Z3会毫无问题地执行此操作。似乎这三种策略没有暴露在Z3 4.4.1的SMT-LIB 2接口中。但是,另一个问题是,如果在Z3的未来版本中更新默认策略,那么任何硬编码策略(如我上面所写的内容)都不会更新。

我真正想做的是发出像(check-sat-using default)这样的命令,或类似的命令,并得到与(check-sat)获得的结果相同的结果。这可能吗?

1 个答案:

答案 0 :(得分:2)

您引用的文件非常旧。 Z3已移至GitHub,最新版本的default_tactic.cpp为here

QF_FP的默认策略现在称为qffplira策略也已导出,我刚刚导出nra(截至this commit

修改:自this commit起,default策略也已导出,因此现在可以根据要求编写(check-sat-using default)