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

re-organize proof and model converters to be associated with goals instead of external

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2017-11-18 16:33:54 -08:00
parent 00f5308a0e
commit 4bbece6616
118 changed files with 617 additions and 1070 deletions

View file

@ -659,9 +659,8 @@ namespace qe {
goal_ref g = alloc(goal, m);
g->assert_expr(fml);
expr_dependency_ref core(m);
model_converter_ref mc;
goal_ref_buffer result;
(*m_nftactic)(g, result, mc, core);
(*m_nftactic)(g, result, core);
SASSERT(result.size() == 1);
TRACE("qe", result[0]->display(tout););
g2s(*result[0], m_params, m_solver, m_a2b, m_t2x);
@ -812,14 +811,13 @@ namespace qe {
void operator()(/* in */ goal_ref const & in,
/* out */ goal_ref_buffer & result,
/* out */ model_converter_ref & mc,
/* out */ expr_dependency_ref & core) {
tactic_report report("nlqsat-tactic", *in);
ptr_vector<expr> fmls;
expr_ref fml(m);
mc = 0; core = 0;
core = 0;
in->get_formulas(fmls);
fml = mk_and(m, fmls.size(), fmls.c_ptr());
if (m_mode == elim_t) {
@ -850,7 +848,9 @@ namespace qe {
in->inc_depth();
result.push_back(in.get());
if (in->models_enabled()) {
model_converter_ref mc;
VERIFY(mk_model(mc));
in->add(mc.get());
}
break;
case l_undef:

View file

@ -2533,10 +2533,9 @@ class qe_lite_tactic : public tactic {
void operator()(goal_ref const & g,
goal_ref_buffer & result,
model_converter_ref & mc,
expr_dependency_ref & core) {
SASSERT(g->is_well_sorted());
mc = 0; core = 0;
core = 0;
tactic_report report("qe-lite", *g);
proof_ref new_pr(m);
expr_ref new_f(m);
@ -2603,9 +2602,8 @@ public:
virtual void operator()(goal_ref const & in,
goal_ref_buffer & result,
model_converter_ref & mc,
expr_dependency_ref & core) {
(*m_imp)(in, result, mc, core);
(*m_imp)(in, result, core);
}

View file

@ -234,7 +234,6 @@ namespace qe {
virtual void operator()(
goal_ref const& goal,
goal_ref_buffer& result,
model_converter_ref& mc,
expr_dependency_ref& core)
{
try {
@ -259,7 +258,7 @@ namespace qe {
else {
goal->reset();
// equi-satisfiable. What to do with model?
mc = model2model_converter(&*model);
goal->add(model2model_converter(&*model));
}
result.push_back(goal.get());
}
@ -269,16 +268,16 @@ namespace qe {
}
virtual void collect_statistics(statistics & st) const {
for (unsigned i = 0; i < m_solvers.size(); ++i) {
m_solvers[i]->collect_statistics(st);
for (auto const * s : m_solvers) {
s->collect_statistics(st);
}
m_solver.collect_statistics(st);
m_ctx_rewriter.collect_statistics(st);
}
virtual void reset_statistics() {
for (unsigned i = 0; i < m_solvers.size(); ++i) {
m_solvers[i]->reset_statistics();
for (auto * s : m_solvers) {
s->reset_statistics();
}
m_solver.reset_statistics();
m_ctx_rewriter.reset_statistics();

View file

@ -51,10 +51,9 @@ class qe_tactic : public tactic {
void operator()(goal_ref const & g,
goal_ref_buffer & result,
model_converter_ref & mc,
expr_dependency_ref & core) {
SASSERT(g->is_well_sorted());
mc = 0; core = 0;
core = 0;
tactic_report report("qe", *g);
m_fparams.m_model = g->models_enabled();
proof_ref new_pr(m);
@ -121,9 +120,8 @@ public:
virtual void operator()(goal_ref const & in,
goal_ref_buffer & result,
model_converter_ref & mc,
expr_dependency_ref & core) {
(*m_imp)(in, result, mc, core);
(*m_imp)(in, result, core);
m_st.reset();
m_imp->collect_statistics(m_st);

View file

@ -1212,13 +1212,12 @@ namespace qe {
void operator()(/* in */ goal_ref const & in,
/* out */ goal_ref_buffer & result,
/* out */ model_converter_ref & mc,
/* out */ expr_dependency_ref & core) {
tactic_report report("qsat-tactic", *in);
ptr_vector<expr> fmls;
expr_ref_vector defs(m);
expr_ref fml(m);
mc = 0; core = 0;
core = 0;
in->get_formulas(fmls);
@ -1271,8 +1270,10 @@ namespace qe {
in->inc_depth();
result.push_back(in.get());
if (in->models_enabled()) {
model_converter_ref mc;
mc = model2model_converter(m_model.get());
mc = concat(m_pred_abs.fmc(), mc.get());
in->add(mc.get());
}
break;
case l_undef: