我想知道,SMT-LIB 2.0 脚本中是否有可能访问求解器的最后一个可满足性决策(sat、unsat、...)。例如,下面的代码:
(set-option :produce-unsat-cores true)
(set-option :produce-models true)
(set-logic QF_UF)
(declare-fun p () Bool)
(declare-fun q () Bool)
(declare-fun r () Bool)
(assert (! (=> p q) :named PQ))
(assert (! (=> q r) :named QR))
(assert (! (not (=> p r)) :named nPR))
(check-sat)
(get-model)
(get-unsat-core)
在 Z3 中运行返回:
unsat
(error "line 15 column 10: model is not available")
(PQ QR nPR)
并在 MathSAT 中运行返回:
unsat
(error "model generation not enabled")
在 MathSAT 5 中,它只是中断(get-model),甚至没有达到(get-unsat-core)。如果决定是 SAT,SMT-LIB 2.0 语言中是否有任何方法可以获取模型,如果决定是 UNSAT,则为 unsat-core?例如,解决方案可能如下所示:
(check-sat)
(ite (= (was-sat) true) (get-model) (get-unsat-core))
我搜索了 SMT-LIB 2.0 语言文档,但没有找到任何提示。
编辑:我也尝试了下面的代码,不幸的是它没有工作。
(ite (= (check-sat) "sat") (get-model) (get-unsat-core))