3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-08 02:15:19 +00:00

breaking change. Enforce append semantics everywhere for parameter updates #5744

Replace semantics doesn't work with assumptions made elsewhere in code.
The remedy is to apply append (override) semantics for parameter changes.
This commit is contained in:
Nikolaj Bjorner 2021-12-30 19:11:14 -08:00
parent e8833f4dac
commit fc77345bec
53 changed files with 101 additions and 98 deletions

View file

@ -585,7 +585,7 @@ extern "C" {
to_fixedpoint_ref(d)->collect_param_descrs(descrs);
to_params(p)->m_params.validate(descrs);
to_fixedpoint_ref(d)->updt_params(to_param_ref(p));
to_fixedpoint(d)->m_params = to_param_ref(p);
to_fixedpoint(d)->m_params.append(to_param_ref(p));
Z3_CATCH;
}

View file

@ -859,8 +859,8 @@ ast_manager & th_rewriter::m() const {
}
void th_rewriter::updt_params(params_ref const & p) {
m_params = p;
m_imp->cfg().updt_params(p);
m_params.append(p);
m_imp->cfg().updt_params(m_params);
}
void th_rewriter::get_param_descrs(param_descrs & r) {

View file

@ -199,12 +199,12 @@ void tst_params(cmd_context & ctx) {
params_ref p1;
params_ref p2;
p1.set_uint("val", 100);
p2 = p1;
p2.append(p1);
SASSERT(p2.get_uint("val", 0) == 100);
p2.set_uint("val", 200);
SASSERT(p2.get_uint("val", 0) == 200);
SASSERT(p1.get_uint("val", 0) == 100);
p2 = p1;
p2.append(p1);
SASSERT(p2.get_uint("val", 0) == 100);
SASSERT(p1.get_uint("val", 0) == 100);
ctx.regular_stream() << "worked" << std::endl;

View file

@ -227,8 +227,8 @@ public:
}
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -395,8 +395,8 @@ public:
char const* name() const override { return "horn"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}

View file

@ -55,8 +55,8 @@ class nlsat_tactic : public tactic {
}
void updt_params(params_ref const & p) {
m_params = p;
m_solver.updt_params(p);
m_params.append(p);
m_solver.updt_params(m_params);
}
bool contains_unsupported(expr_ref_vector & b2a, expr_ref_vector & x2t) {
@ -226,7 +226,7 @@ public:
char const* name() const override { return "nlsat"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_params.append(p);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -190,7 +190,8 @@ void context_params::get_solver_params(params_ref & p, bool & proofs_enabled, bo
proofs_enabled &= p.get_bool("proof", m_proof);
models_enabled &= p.get_bool("model", m_model);
unsat_core_enabled = m_unsat_core || p.get_bool("unsat_core", false);
p = merge_default_params(p);
if (!m_auto_config && !p.contains("auto_config"))
p.set_bool("auto_config", false);
}

View file

@ -2466,7 +2466,7 @@ public:
}
void updt_params(params_ref const & p) override {
m_params = p;
m_params.append(p);
// m_imp->updt_params(p);
}

View file

@ -103,8 +103,8 @@ public:
char const* name() const override { return "qe"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}

View file

@ -201,8 +201,8 @@ public:
char const* name() const override { return "sat"; }
void updt_params(params_ref const & p) override {
m_params = p;
if (m_imp) m_imp->updt_params(p);
m_params.append(p);
if (m_imp) m_imp->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -124,7 +124,7 @@ namespace {
smt_params m_smt_params_save;
void push_params() override {
m_params_save = params_ref();
m_params_save.reset();
m_params_save.copy(solver::get_params());
m_smt_params_save = m_smt_params;
}

View file

@ -127,7 +127,8 @@ public:
scoped_init_ctx(smt_tactic & o, ast_manager & m):m_owner(o) {
m_params = o.fparams();
m_params_ref = o.params();
m_params_ref.reset();
m_params_ref.append(o.params());
smt::kernel * new_ctx = alloc(smt::kernel, m, m_params, m_params_ref);
TRACE("smt_tactic", tout << "logic: " << o.m_logic << "\n";);
new_ctx->set_logic(o.m_logic);

View file

@ -50,7 +50,7 @@ struct unit_subsumption_tactic : public tactic {
}
void updt_params(params_ref const& p) override {
m_params = p;
m_params.append(p);
// m_context.updt_params(p); does not exist.
}

View file

@ -226,7 +226,7 @@ void solver::collect_param_descrs(param_descrs & r) {
}
void solver::reset_params(params_ref const & p) {
m_params = p;
m_params.append(p);
solver_params sp(m_params);
m_cancel_backup_file = sp.cancel_backup_file();
}

View file

@ -149,8 +149,8 @@ public:
char const* name() const override { return "add_bounds"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -45,7 +45,7 @@ public:
char const* name() const override { return "card2bv"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_params.append(p);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -360,8 +360,8 @@ public:
char const* name() const override { return "diff_neq"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -297,8 +297,8 @@ public:
char const* name() const override { return "factor"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->m_rw.cfg().updt_params(p);
m_params.append(p);
m_imp->m_rw.cfg().updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -303,8 +303,8 @@ public:
char const* name() const override { return "fix_dl_var"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -1645,8 +1645,8 @@ public:
char const* name() const override { return "fm"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -135,8 +135,8 @@ public:
char const* name() const override { return "lia2card"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_compile_equality = p.get_bool("compile_equality", true);
m_params.append(p);
m_compile_equality = m_params.get_bool("compile_equality", true);
}
expr_ref mk_bounded(expr_ref_vector& axioms, app* x, unsigned lo, unsigned hi) {

View file

@ -308,8 +308,8 @@ public:
char const* name() const override { return "lia2pb"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -1010,8 +1010,8 @@ public:
char const* name() const override { return "pb2bv"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -543,8 +543,8 @@ propagate_ineqs_tactic::~propagate_ineqs_tactic() {
}
void propagate_ineqs_tactic::updt_params(params_ref const & p) {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void propagate_ineqs_tactic::operator()(goal_ref const & g,

View file

@ -906,7 +906,7 @@ public:
char const* name() const override { return "purify_arith"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_params.append(p);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -401,8 +401,8 @@ public:
char const* name() const override { return "recover_01"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -122,8 +122,8 @@ public:
char const* name() const override { return "bit_blaster"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -434,8 +434,8 @@ public:
char const* name() const override { return "bv1_blaster"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->m_rw.cfg().updt_params(p);
m_params.append(p);
m_imp->m_rw.cfg().updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -206,8 +206,8 @@ tactic * bv_bound_chk_tactic::translate(ast_manager & m) {
void bv_bound_chk_tactic::updt_params(params_ref const & p) {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void bv_bound_chk_tactic::cleanup() {

View file

@ -116,8 +116,8 @@ public:
char const* name() const override { return "bvarray2uf"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -207,7 +207,7 @@ class elim_small_bv_tactic : public tactic {
}
void updt_params(params_ref const & p) {
m_params = p;
m_params.append(p);
m_max_memory = megabytes_to_bytes(p.get_uint("max_memory", UINT_MAX));
m_max_steps = p.get_uint("max_steps", UINT_MAX);
m_max_bits = p.get_uint("max_bits", 4);
@ -241,8 +241,8 @@ public:
}
void updt_params(params_ref const & p) override {
m_params = p;
m_rw.cfg().updt_params(p);
m_params.append(p);
m_rw.cfg().updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -280,8 +280,8 @@ public:
char const* name() const override { return "max_bv_sharing"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->m_rw.cfg().updt_params(p);
m_params.append(p);
m_imp->m_rw.cfg().updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -174,8 +174,8 @@ public:
char const* name() const override { return "blast_term_ite"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->m_rw.m_cfg.updt_params(p);
m_params.append(p);
m_imp->m_rw.m_cfg.updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -52,7 +52,7 @@ public:
~cofactor_term_ite_tactic() override {}
char const* name() const override { return "cofactor"; }
void updt_params(params_ref const & p) override { m_params = p; m_elim_ite.updt_params(p); }
void updt_params(params_ref const & p) override { m_params.append(p); m_elim_ite.updt_params(m_params); }
void collect_param_descrs(param_descrs & r) override { m_elim_ite.collect_param_descrs(r); }
void operator()(goal_ref const & g, goal_ref_buffer& result) override {

View file

@ -60,7 +60,7 @@ public:
}
void updt_params(params_ref const & p) override {
m_params = p;
m_params.append(p);
}
void collect_param_descrs(param_descrs & r) override {}

View file

@ -605,8 +605,8 @@ ctx_simplify_tactic::~ctx_simplify_tactic() {
}
void ctx_simplify_tactic::updt_params(params_ref const & p) {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void ctx_simplify_tactic::get_param_descrs(param_descrs & r) {

View file

@ -143,8 +143,8 @@ public:
}
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->m_rw.cfg().updt_params(p);
m_params.append(p);
m_imp->m_rw.cfg().updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -862,9 +862,9 @@ public:
}
void updt_params(params_ref const & p) override {
m_params = p;
m_max_memory = megabytes_to_bytes(p.get_uint("max_memory", UINT_MAX));
m_max_steps = p.get_uint("max_steps", UINT_MAX);
m_params.append(p);
m_max_memory = megabytes_to_bytes(m_params.get_uint("max_memory", UINT_MAX));
m_max_steps = m_params.get_uint("max_steps", UINT_MAX);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -258,8 +258,8 @@ public:
char const* name() const override { return "injectivity"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_finder->updt_params(p);
m_params.append(p);
m_finder->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -51,7 +51,7 @@ public:
char const* name() const override { return "nnf"; }
void updt_params(params_ref const & p) override { m_params = p; }
void updt_params(params_ref const & p) override { m_params.append(p); }
void collect_param_descrs(param_descrs & r) override { nnf::get_param_descrs(r); }

View file

@ -219,9 +219,9 @@ public:
char const* name() const override { return "propagate_values"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_params.append(p);
m_r.updt_params(p);
updt_params_core(p);
updt_params_core(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -80,8 +80,8 @@ simplify_tactic::~simplify_tactic() {
}
void simplify_tactic::updt_params(params_ref const & p) {
m_params = p;
m_imp->m_r.updt_params(p);
m_params.append(p);
m_imp->m_r.updt_params(m_params);
}
void simplify_tactic::get_param_descrs(param_descrs & r) {

View file

@ -1092,8 +1092,8 @@ public:
char const* name() const override { return "solve_eqs"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -49,7 +49,7 @@ public:
~special_relations_tactic() override {}
void updt_params(params_ref const & p) override { m_params = p; }
void updt_params(params_ref const & p) override { m_params.append(p); }
void collect_param_descrs(param_descrs & r) override { }

View file

@ -894,8 +894,8 @@ public:
char const* name() const override { return "tseitin_cnf"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -123,8 +123,8 @@ public:
char const* name() const override { return "fp2bv"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -136,8 +136,8 @@ public:
char const* name() const override { return "solver_subsumption"; }
void updt_params(params_ref const& p) override {
m_params = p;
unsigned max_conflicts = p.get_uint("max_conflicts", 2);
m_params.append(p);
unsigned max_conflicts = m_params.get_uint("max_conflicts", 2);
m_params.set_uint("sat.max_conflicts", max_conflicts);
m_params.set_uint("smt.max_conflicts", max_conflicts);
}

View file

@ -53,8 +53,8 @@ public:
char const* name() const override { return "sls"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_engine->updt_params(p);
m_params.append(p);
m_engine->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -108,8 +108,8 @@ public:
char const* name() const override { return "macro_finder"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -103,8 +103,8 @@ public:
char const* name() const override { return "quasi_macros"; }
void updt_params(params_ref const & p) override {
m_params = p;
m_imp->updt_params(p);
m_params.append(p);
m_imp->updt_params(m_params);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -35,7 +35,7 @@ public:
}
void updt_params(params_ref const & p) override {
m_params = p;
m_params.append(p);
}
void collect_param_descrs(param_descrs & r) override {

View file

@ -520,7 +520,7 @@ params_ref::~params_ref() {
params_ref::params_ref(params_ref const & p):
m_params(nullptr) {
operator=(p);
set(p);
}
void params_ref::display(std::ostream & out) const {
@ -553,18 +553,18 @@ void params_ref::validate(param_descrs const & p) {
m_params->validate(p);
}
params_ref & params_ref::operator=(params_ref const & p) {
void params_ref::set(params_ref const & p) {
if (p.m_params)
p.m_params->inc_ref();
if (m_params)
m_params->dec_ref();
m_params = p.m_params;
return *this;
}
void params_ref::copy(params_ref const & src) {
if (m_params == nullptr)
operator=(src);
if (m_params == nullptr || m_params->empty())
set(src);
else {
init();
copy_core(src.m_params);

View file

@ -35,6 +35,8 @@ class params_ref {
params * m_params;
void init();
void copy_core(params const * p);
params_ref& operator=(params_ref const& p) = delete;
void set(params_ref const& p);
public:
params_ref():m_params(nullptr) {}
params_ref(params_ref const & p);
@ -42,8 +44,7 @@ public:
static params_ref const & get_empty() { return g_empty_params_ref; }
params_ref & operator=(params_ref const & p);
// copy params from src
void copy(params_ref const & src);
void append(params_ref const & src) { copy(src); }