当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))))))))))
这"几乎"如果您删除了nra
,lira
和qffpa
的行,那么Z3会毫无问题地执行此操作。似乎这三种策略没有暴露在Z3 4.4.1的SMT-LIB 2接口中。但是,另一个问题是,如果在Z3的未来版本中更新默认策略,那么任何硬编码策略(如我上面所写的内容)都不会更新。
我真正想做的是发出像(check-sat-using default)
这样的命令,或类似的命令,并得到与(check-sat)
获得的结果相同的结果。这可能吗?
答案 0 :(得分:2)
您引用的文件非常旧。 Z3已移至GitHub,最新版本的default_tactic.cpp为here。
QF_FP的默认策略现在称为qffp
,lira
策略也已导出,我刚刚导出nra
(截至this commit)
修改:自this commit起,default
策略也已导出,因此现在可以根据要求编写(check-sat-using default)
。