mirror of
https://github.com/Z3Prover/z3
synced 2025-06-06 22:23:22 +00:00
Rename itp_solver into iuc_solver
IUC stands for Interpolanted UNSAT Core
This commit is contained in:
parent
5d3b515a50
commit
649bab2f58
5 changed files with 57 additions and 55 deletions
|
@ -11,7 +11,7 @@ z3_add_component(spacer
|
||||||
spacer_smt_context_manager.cpp
|
spacer_smt_context_manager.cpp
|
||||||
spacer_sym_mux.cpp
|
spacer_sym_mux.cpp
|
||||||
spacer_util.cpp
|
spacer_util.cpp
|
||||||
spacer_itp_solver.cpp
|
spacer_iuc_solver.cpp
|
||||||
spacer_virtual_solver.cpp
|
spacer_virtual_solver.cpp
|
||||||
spacer_legacy_mbp.cpp
|
spacer_legacy_mbp.cpp
|
||||||
spacer_unsat_core_learner.cpp
|
spacer_unsat_core_learner.cpp
|
||||||
|
|
|
@ -3,11 +3,11 @@ Copyright (c) 2017 Arie Gurfinkel
|
||||||
|
|
||||||
Module Name:
|
Module Name:
|
||||||
|
|
||||||
spacer_itp_solver.cpp
|
spacer_iuc_solver.cpp
|
||||||
|
|
||||||
Abstract:
|
Abstract:
|
||||||
|
|
||||||
A solver that produces interpolated unsat cores
|
A solver that produces interpolated unsat cores (IUCs)
|
||||||
|
|
||||||
Author:
|
Author:
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ Author:
|
||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
--*/
|
--*/
|
||||||
#include"muz/spacer/spacer_itp_solver.h"
|
#include"muz/spacer/spacer_iuc_solver.h"
|
||||||
#include"ast/ast.h"
|
#include"ast/ast.h"
|
||||||
#include"muz/spacer/spacer_util.h"
|
#include"muz/spacer/spacer_util.h"
|
||||||
#include"muz/base/proof_utils.h"
|
#include"muz/base/proof_utils.h"
|
||||||
|
@ -27,13 +27,13 @@ Notes:
|
||||||
#include "muz/spacer/spacer_iuc_proof.h"
|
#include "muz/spacer/spacer_iuc_proof.h"
|
||||||
|
|
||||||
namespace spacer {
|
namespace spacer {
|
||||||
void itp_solver::push ()
|
void iuc_solver::push ()
|
||||||
{
|
{
|
||||||
m_defs.push_back (def_manager (*this));
|
m_defs.push_back (def_manager (*this));
|
||||||
m_solver.push ();
|
m_solver.push ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void itp_solver::pop (unsigned n)
|
void iuc_solver::pop (unsigned n)
|
||||||
{
|
{
|
||||||
m_solver.pop (n);
|
m_solver.pop (n);
|
||||||
unsigned lvl = m_defs.size ();
|
unsigned lvl = m_defs.size ();
|
||||||
|
@ -45,7 +45,7 @@ void itp_solver::pop (unsigned n)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
app* itp_solver::fresh_proxy ()
|
app* iuc_solver::fresh_proxy ()
|
||||||
{
|
{
|
||||||
if (m_num_proxies == m_proxies.size()) {
|
if (m_num_proxies == m_proxies.size()) {
|
||||||
std::stringstream name;
|
std::stringstream name;
|
||||||
|
@ -64,7 +64,7 @@ app* itp_solver::fresh_proxy ()
|
||||||
return m_proxies.get (m_num_proxies++);
|
return m_proxies.get (m_num_proxies++);
|
||||||
}
|
}
|
||||||
|
|
||||||
app* itp_solver::mk_proxy (expr *v)
|
app* iuc_solver::mk_proxy (expr *v)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
expr *e = v;
|
expr *e = v;
|
||||||
|
@ -76,7 +76,7 @@ app* itp_solver::mk_proxy (expr *v)
|
||||||
return def.mk_proxy (v);
|
return def.mk_proxy (v);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool itp_solver::mk_proxies (expr_ref_vector &v, unsigned from)
|
bool iuc_solver::mk_proxies (expr_ref_vector &v, unsigned from)
|
||||||
{
|
{
|
||||||
bool dirty = false;
|
bool dirty = false;
|
||||||
for (unsigned i = from, sz = v.size(); i < sz; ++i) {
|
for (unsigned i = from, sz = v.size(); i < sz; ++i) {
|
||||||
|
@ -87,7 +87,7 @@ bool itp_solver::mk_proxies (expr_ref_vector &v, unsigned from)
|
||||||
return dirty;
|
return dirty;
|
||||||
}
|
}
|
||||||
|
|
||||||
void itp_solver::push_bg (expr *e)
|
void iuc_solver::push_bg (expr *e)
|
||||||
{
|
{
|
||||||
if (m_assumptions.size () > m_first_assumption)
|
if (m_assumptions.size () > m_first_assumption)
|
||||||
{ m_assumptions.shrink(m_first_assumption); }
|
{ m_assumptions.shrink(m_first_assumption); }
|
||||||
|
@ -95,7 +95,7 @@ void itp_solver::push_bg (expr *e)
|
||||||
m_first_assumption = m_assumptions.size ();
|
m_first_assumption = m_assumptions.size ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void itp_solver::pop_bg (unsigned n)
|
void iuc_solver::pop_bg (unsigned n)
|
||||||
{
|
{
|
||||||
if (n == 0) { return; }
|
if (n == 0) { return; }
|
||||||
|
|
||||||
|
@ -105,9 +105,9 @@ void itp_solver::pop_bg (unsigned n)
|
||||||
m_assumptions.shrink (m_first_assumption);
|
m_assumptions.shrink (m_first_assumption);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned itp_solver::get_num_bg () {return m_first_assumption;}
|
unsigned iuc_solver::get_num_bg () {return m_first_assumption;}
|
||||||
|
|
||||||
lbool itp_solver::check_sat (unsigned num_assumptions, expr * const *assumptions)
|
lbool iuc_solver::check_sat (unsigned num_assumptions, expr * const *assumptions)
|
||||||
{
|
{
|
||||||
// -- remove any old assumptions
|
// -- remove any old assumptions
|
||||||
if (m_assumptions.size () > m_first_assumption)
|
if (m_assumptions.size () > m_first_assumption)
|
||||||
|
@ -128,7 +128,7 @@ lbool itp_solver::check_sat (unsigned num_assumptions, expr * const *assumptions
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
app* itp_solver::def_manager::mk_proxy (expr *v)
|
app* iuc_solver::def_manager::mk_proxy (expr *v)
|
||||||
{
|
{
|
||||||
app* r;
|
app* r;
|
||||||
if (m_expr2proxy.find(v, r)) { return r; }
|
if (m_expr2proxy.find(v, r)) { return r; }
|
||||||
|
@ -146,7 +146,7 @@ app* itp_solver::def_manager::mk_proxy (expr *v)
|
||||||
return proxy;
|
return proxy;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool itp_solver::def_manager::is_proxy (app *k, app_ref &def)
|
bool iuc_solver::def_manager::is_proxy (app *k, app_ref &def)
|
||||||
{
|
{
|
||||||
app *r = nullptr;
|
app *r = nullptr;
|
||||||
bool found = m_proxy2def.find (k, r);
|
bool found = m_proxy2def.find (k, r);
|
||||||
|
@ -154,20 +154,20 @@ bool itp_solver::def_manager::is_proxy (app *k, app_ref &def)
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
void itp_solver::def_manager::reset ()
|
void iuc_solver::def_manager::reset ()
|
||||||
{
|
{
|
||||||
m_expr2proxy.reset ();
|
m_expr2proxy.reset ();
|
||||||
m_proxy2def.reset ();
|
m_proxy2def.reset ();
|
||||||
m_defs.reset ();
|
m_defs.reset ();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool itp_solver::def_manager::is_proxy_def (expr *v)
|
bool iuc_solver::def_manager::is_proxy_def (expr *v)
|
||||||
{
|
{
|
||||||
// XXX This might not be the most robust way to check
|
// XXX This might not be the most robust way to check
|
||||||
return m_defs.contains (v);
|
return m_defs.contains (v);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool itp_solver::is_proxy(expr *e, app_ref &def)
|
bool iuc_solver::is_proxy(expr *e, app_ref &def)
|
||||||
{
|
{
|
||||||
if (!is_uninterp_const(e)) { return false; }
|
if (!is_uninterp_const(e)) { return false; }
|
||||||
|
|
||||||
|
@ -183,23 +183,23 @@ bool itp_solver::is_proxy(expr *e, app_ref &def)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void itp_solver::collect_statistics (statistics &st) const
|
void iuc_solver::collect_statistics (statistics &st) const
|
||||||
{
|
{
|
||||||
m_solver.collect_statistics (st);
|
m_solver.collect_statistics (st);
|
||||||
st.update ("time.itp_solver.itp_core", m_itp_watch.get_seconds ());
|
st.update ("time.iuc_solver.iuc_core", m_iuc_watch.get_seconds ());
|
||||||
}
|
}
|
||||||
|
|
||||||
void itp_solver::reset_statistics ()
|
void iuc_solver::reset_statistics ()
|
||||||
{
|
{
|
||||||
m_itp_watch.reset ();
|
m_iuc_watch.reset ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void itp_solver::get_unsat_core (ptr_vector<expr> &core)
|
void iuc_solver::get_unsat_core (ptr_vector<expr> &core)
|
||||||
{
|
{
|
||||||
m_solver.get_unsat_core (core);
|
m_solver.get_unsat_core (core);
|
||||||
undo_proxies_in_core (core);
|
undo_proxies_in_core (core);
|
||||||
}
|
}
|
||||||
void itp_solver::undo_proxies_in_core (ptr_vector<expr> &r)
|
void iuc_solver::undo_proxies_in_core (ptr_vector<expr> &r)
|
||||||
{
|
{
|
||||||
app_ref e(m);
|
app_ref e(m);
|
||||||
expr_fast_mark1 bg;
|
expr_fast_mark1 bg;
|
||||||
|
@ -222,7 +222,7 @@ void itp_solver::undo_proxies_in_core (ptr_vector<expr> &r)
|
||||||
r.shrink (j);
|
r.shrink (j);
|
||||||
}
|
}
|
||||||
|
|
||||||
void itp_solver::undo_proxies (expr_ref_vector &r)
|
void iuc_solver::undo_proxies (expr_ref_vector &r)
|
||||||
{
|
{
|
||||||
app_ref e(m);
|
app_ref e(m);
|
||||||
// expand proxies
|
// expand proxies
|
||||||
|
@ -233,14 +233,14 @@ void itp_solver::undo_proxies (expr_ref_vector &r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void itp_solver::get_unsat_core (expr_ref_vector &_core)
|
void iuc_solver::get_unsat_core (expr_ref_vector &_core)
|
||||||
{
|
{
|
||||||
ptr_vector<expr> core;
|
ptr_vector<expr> core;
|
||||||
get_unsat_core (core);
|
get_unsat_core (core);
|
||||||
_core.append (core.size (), core.c_ptr ());
|
_core.append (core.size (), core.c_ptr ());
|
||||||
}
|
}
|
||||||
|
|
||||||
void itp_solver::elim_proxies (expr_ref_vector &v)
|
void iuc_solver::elim_proxies (expr_ref_vector &v)
|
||||||
{
|
{
|
||||||
expr_ref f = mk_and (v);
|
expr_ref f = mk_and (v);
|
||||||
scoped_ptr<expr_replacer> rep = mk_expr_simp_replacer (m);
|
scoped_ptr<expr_replacer> rep = mk_expr_simp_replacer (m);
|
||||||
|
@ -250,9 +250,9 @@ void itp_solver::elim_proxies (expr_ref_vector &v)
|
||||||
flatten_and (f, v);
|
flatten_and (f, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void itp_solver::get_itp_core (expr_ref_vector &core)
|
void iuc_solver::get_iuc(expr_ref_vector &core)
|
||||||
{
|
{
|
||||||
scoped_watch _t_ (m_itp_watch);
|
scoped_watch _t_ (m_iuc_watch);
|
||||||
|
|
||||||
typedef obj_hashtable<expr> expr_set;
|
typedef obj_hashtable<expr> expr_set;
|
||||||
expr_set B;
|
expr_set B;
|
||||||
|
@ -379,12 +379,12 @@ void itp_solver::get_itp_core (expr_ref_vector &core)
|
||||||
}
|
}
|
||||||
|
|
||||||
IF_VERBOSE(2,
|
IF_VERBOSE(2,
|
||||||
verbose_stream () << "Itp Core:\n"
|
verbose_stream () << "IUC Core:\n"
|
||||||
<< mk_pp (mk_and (core), m) << "\n";);
|
<< mk_pp (mk_and (core), m) << "\n";);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void itp_solver::refresh ()
|
void iuc_solver::refresh ()
|
||||||
{
|
{
|
||||||
// only refresh in non-pushed state
|
// only refresh in non-pushed state
|
||||||
SASSERT (m_defs.size () == 0);
|
SASSERT (m_defs.size () == 0);
|
|
@ -3,7 +3,7 @@ Copyright (c) 2017 Arie Gurfinkel
|
||||||
|
|
||||||
Module Name:
|
Module Name:
|
||||||
|
|
||||||
spacer_itp_solver.h
|
spacer_iuc_solver.h
|
||||||
|
|
||||||
Abstract:
|
Abstract:
|
||||||
|
|
||||||
|
@ -16,23 +16,23 @@ Author:
|
||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
--*/
|
--*/
|
||||||
#ifndef SPACER_ITP_SOLVER_H_
|
#ifndef SPACER_IUC_SOLVER_H_
|
||||||
#define SPACER_ITP_SOLVER_H_
|
#define SPACER_IUC_SOLVER_H_
|
||||||
|
|
||||||
#include"solver/solver.h"
|
#include"solver/solver.h"
|
||||||
#include"ast/expr_substitution.h"
|
#include"ast/expr_substitution.h"
|
||||||
#include"util/stopwatch.h"
|
#include"util/stopwatch.h"
|
||||||
namespace spacer {
|
namespace spacer {
|
||||||
class itp_solver : public solver {
|
class iuc_solver : public solver {
|
||||||
private:
|
private:
|
||||||
struct def_manager {
|
struct def_manager {
|
||||||
itp_solver &m_parent;
|
iuc_solver &m_parent;
|
||||||
obj_map<expr, app*> m_expr2proxy;
|
obj_map<expr, app*> m_expr2proxy;
|
||||||
obj_map<app, app*> m_proxy2def;
|
obj_map<app, app*> m_proxy2def;
|
||||||
|
|
||||||
expr_ref_vector m_defs;
|
expr_ref_vector m_defs;
|
||||||
|
|
||||||
def_manager(itp_solver &parent) :
|
def_manager(iuc_solver &parent) :
|
||||||
m_parent(parent), m_defs(m_parent.m)
|
m_parent(parent), m_defs(m_parent.m)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ private:
|
||||||
unsigned m_first_assumption;
|
unsigned m_first_assumption;
|
||||||
bool m_is_proxied;
|
bool m_is_proxied;
|
||||||
|
|
||||||
stopwatch m_itp_watch;
|
stopwatch m_iuc_watch;
|
||||||
|
|
||||||
expr_substitution m_elim_proxies_sub;
|
expr_substitution m_elim_proxies_sub;
|
||||||
bool m_split_literals;
|
bool m_split_literals;
|
||||||
|
@ -68,7 +68,9 @@ private:
|
||||||
app* fresh_proxy();
|
app* fresh_proxy();
|
||||||
void elim_proxies(expr_ref_vector &v);
|
void elim_proxies(expr_ref_vector &v);
|
||||||
public:
|
public:
|
||||||
itp_solver(solver &solver, unsigned iuc, unsigned iuc_arith, bool print_farkas_stats, bool old_hyp_reducer, bool split_literals = false) :
|
iuc_solver(solver &solver, unsigned iuc, unsigned iuc_arith,
|
||||||
|
bool print_farkas_stats, bool old_hyp_reducer,
|
||||||
|
bool split_literals = false) :
|
||||||
m(solver.get_manager()),
|
m(solver.get_manager()),
|
||||||
m_solver(solver),
|
m_solver(solver),
|
||||||
m_proxies(m),
|
m_proxies(m),
|
||||||
|
@ -85,11 +87,11 @@ public:
|
||||||
m_old_hyp_reducer(old_hyp_reducer)
|
m_old_hyp_reducer(old_hyp_reducer)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
~itp_solver() override {}
|
~iuc_solver() override {}
|
||||||
|
|
||||||
/* itp solver specific */
|
/* iuc solver specific */
|
||||||
void get_unsat_core(expr_ref_vector &core) override;
|
void get_unsat_core(expr_ref_vector &core) override;
|
||||||
virtual void get_itp_core(expr_ref_vector &core);
|
virtual void get_iuc(expr_ref_vector &core);
|
||||||
void set_split_literals(bool v) {m_split_literals = v;}
|
void set_split_literals(bool v) {m_split_literals = v;}
|
||||||
bool mk_proxies(expr_ref_vector &v, unsigned from = 0);
|
bool mk_proxies(expr_ref_vector &v, unsigned from = 0);
|
||||||
void undo_proxies(expr_ref_vector &v);
|
void undo_proxies(expr_ref_vector &v);
|
||||||
|
@ -149,22 +151,22 @@ public:
|
||||||
virtual void refresh();
|
virtual void refresh();
|
||||||
|
|
||||||
class scoped_mk_proxy {
|
class scoped_mk_proxy {
|
||||||
itp_solver &m_s;
|
iuc_solver &m_s;
|
||||||
expr_ref_vector &m_v;
|
expr_ref_vector &m_v;
|
||||||
public:
|
public:
|
||||||
scoped_mk_proxy(itp_solver &s, expr_ref_vector &v) : m_s(s), m_v(v)
|
scoped_mk_proxy(iuc_solver &s, expr_ref_vector &v) : m_s(s), m_v(v)
|
||||||
{m_s.mk_proxies(m_v);}
|
{m_s.mk_proxies(m_v);}
|
||||||
~scoped_mk_proxy()
|
~scoped_mk_proxy()
|
||||||
{m_s.undo_proxies(m_v);}
|
{m_s.undo_proxies(m_v);}
|
||||||
};
|
};
|
||||||
|
|
||||||
class scoped_bg {
|
class scoped_bg {
|
||||||
itp_solver &m_s;
|
iuc_solver &m_s;
|
||||||
unsigned m_bg_sz;
|
unsigned m_bg_sz;
|
||||||
public:
|
public:
|
||||||
scoped_bg(itp_solver &s) : m_s(s), m_bg_sz(m_s.get_num_bg()) {}
|
scoped_bg(iuc_solver &s) : m_s(s), m_bg_sz(m_s.get_num_bg()) {}
|
||||||
~scoped_bg()
|
~scoped_bg()
|
||||||
{if (m_s.get_num_bg() > m_bg_sz) { m_s.pop_bg(m_s.get_num_bg() - m_bg_sz); }}
|
{if(m_s.get_num_bg() > m_bg_sz) { m_s.pop_bg(m_s.get_num_bg() - m_bg_sz); }}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
|
@ -60,11 +60,11 @@ prop_solver::prop_solver(manager& pm, fixedpoint_params const& p, symbol const&
|
||||||
m_solvers[1] = pm.mk_fresh2();
|
m_solvers[1] = pm.mk_fresh2();
|
||||||
m_fparams[1] = &pm.fparams2();
|
m_fparams[1] = &pm.fparams2();
|
||||||
|
|
||||||
m_contexts[0] = alloc(spacer::itp_solver, *(m_solvers[0]), p.spacer_iuc(),
|
m_contexts[0] = alloc(spacer::iuc_solver, *(m_solvers[0]), p.spacer_iuc(),
|
||||||
p.spacer_iuc_arith(),
|
p.spacer_iuc_arith(),
|
||||||
p.spacer_iuc_old_hyp_reducer(),
|
p.spacer_iuc_old_hyp_reducer(),
|
||||||
p.spacer_iuc_split_farkas_literals());
|
p.spacer_iuc_split_farkas_literals());
|
||||||
m_contexts[1] = alloc(spacer::itp_solver, *(m_solvers[1]), p.spacer_iuc(),
|
m_contexts[1] = alloc(spacer::iuc_solver, *(m_solvers[1]), p.spacer_iuc(),
|
||||||
p.spacer_iuc_arith(),
|
p.spacer_iuc_arith(),
|
||||||
p.spacer_iuc_old_hyp_reducer(),
|
p.spacer_iuc_old_hyp_reducer(),
|
||||||
p.spacer_iuc_split_farkas_literals());
|
p.spacer_iuc_split_farkas_literals());
|
||||||
|
@ -138,7 +138,7 @@ void prop_solver::assert_expr(expr * form, unsigned level)
|
||||||
lbool prop_solver::maxsmt(expr_ref_vector &hard, expr_ref_vector &soft)
|
lbool prop_solver::maxsmt(expr_ref_vector &hard, expr_ref_vector &soft)
|
||||||
{
|
{
|
||||||
// replace expressions by assumption literals
|
// replace expressions by assumption literals
|
||||||
itp_solver::scoped_mk_proxy _p_(*m_ctx, hard);
|
iuc_solver::scoped_mk_proxy _p_(*m_ctx, hard);
|
||||||
unsigned hard_sz = hard.size();
|
unsigned hard_sz = hard.size();
|
||||||
// assume soft constraints are propositional literals (no need to proxy)
|
// assume soft constraints are propositional literals (no need to proxy)
|
||||||
hard.append(soft);
|
hard.append(soft);
|
||||||
|
@ -234,7 +234,7 @@ lbool prop_solver::internal_check_assumptions(
|
||||||
if (result == l_false && m_core && m.proofs_enabled() && !m_subset_based_core) {
|
if (result == l_false && m_core && m.proofs_enabled() && !m_subset_based_core) {
|
||||||
TRACE("spacer", tout << "theory core\n";);
|
TRACE("spacer", tout << "theory core\n";);
|
||||||
m_core->reset();
|
m_core->reset();
|
||||||
m_ctx->get_itp_core(*m_core);
|
m_ctx->get_iuc(*m_core);
|
||||||
} else if (result == l_false && m_core) {
|
} else if (result == l_false && m_core) {
|
||||||
m_core->reset();
|
m_core->reset();
|
||||||
m_ctx->get_unsat_core(*m_core);
|
m_ctx->get_unsat_core(*m_core);
|
||||||
|
@ -263,7 +263,7 @@ lbool prop_solver::check_assumptions(const expr_ref_vector & _hard,
|
||||||
// can be disabled if use_push_bg == true
|
// can be disabled if use_push_bg == true
|
||||||
// solver::scoped_push _s_(*m_ctx);
|
// solver::scoped_push _s_(*m_ctx);
|
||||||
if (!m_use_push_bg) { m_ctx->push(); }
|
if (!m_use_push_bg) { m_ctx->push(); }
|
||||||
itp_solver::scoped_bg _b_(*m_ctx);
|
iuc_solver::scoped_bg _b_(*m_ctx);
|
||||||
|
|
||||||
for (unsigned i = 0; i < num_bg; ++i)
|
for (unsigned i = 0; i < num_bg; ++i)
|
||||||
if (m_use_push_bg) { m_ctx->push_bg(bg [i]); }
|
if (m_use_push_bg) { m_ctx->push_bg(bg [i]); }
|
||||||
|
|
|
@ -31,7 +31,7 @@ Revision History:
|
||||||
#include "util/vector.h"
|
#include "util/vector.h"
|
||||||
#include "muz/spacer/spacer_manager.h"
|
#include "muz/spacer/spacer_manager.h"
|
||||||
#include "muz/spacer/spacer_smt_context_manager.h"
|
#include "muz/spacer/spacer_smt_context_manager.h"
|
||||||
#include "muz/spacer/spacer_itp_solver.h"
|
#include "muz/spacer/spacer_iuc_solver.h"
|
||||||
|
|
||||||
struct fixedpoint_params;
|
struct fixedpoint_params;
|
||||||
|
|
||||||
|
@ -45,8 +45,8 @@ private:
|
||||||
symbol m_name;
|
symbol m_name;
|
||||||
smt_params* m_fparams[2];
|
smt_params* m_fparams[2];
|
||||||
solver* m_solvers[2];
|
solver* m_solvers[2];
|
||||||
scoped_ptr<itp_solver> m_contexts[2];
|
scoped_ptr<iuc_solver> m_contexts[2];
|
||||||
itp_solver * m_ctx;
|
iuc_solver * m_ctx;
|
||||||
smt_params * m_ctx_fparams;
|
smt_params * m_ctx_fparams;
|
||||||
decl_vector m_level_preds;
|
decl_vector m_level_preds;
|
||||||
app_ref_vector m_pos_level_atoms; // atoms used to identify level
|
app_ref_vector m_pos_level_atoms; // atoms used to identify level
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue