3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 09:05:31 +00:00

add ddnf tests, add facility to solve QF_NRA + QF_UF(and other theories) in joint solver to allow broader use of QF_NRA core

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2015-05-09 19:40:34 -07:00
parent 9377779e58
commit 839e3fbb7c
20 changed files with 1158 additions and 8 deletions

View file

@ -22,6 +22,7 @@ Notes:
#include"smt_params.h"
#include"smt_params_helper.hpp"
#include"rewriter_types.h"
#include"filter_model_converter.h"
class smt_tactic : public tactic {
smt_params m_params;
@ -150,6 +151,7 @@ public:
scoped_ptr<expr2expr_map> dep2bool;
scoped_ptr<expr2expr_map> bool2dep;
ptr_vector<expr> assumptions;
ref<filter_model_converter> fmc;
if (in->unsat_core_enabled()) {
if (in->proofs_enabled())
throw tactic_exception("smt tactic does not support simultaneous generation of proofs and unsat cores");
@ -191,6 +193,10 @@ public:
dep2bool->insert(d, b);
bool2dep->insert(b, d);
assumptions.push_back(b);
if (!fmc) {
fmc = alloc(filter_model_converter, m);
}
fmc->insert(to_app(b)->get_decl());
}
clause.push_back(m.mk_not(b));
}
@ -229,11 +235,12 @@ public:
// the empty assertion set is trivially satifiable.
in->reset();
result.push_back(in.get());
// store the model in a do nothin model converter.
// store the model in a no-op model converter, and filter fresh Booleans
if (in->models_enabled()) {
model_ref md;
m_ctx->get_model(md);
mc = model2model_converter(md.get());
mc = concat(fmc.get(), mc.get());
}
pc = 0;
core = 0;