From 704a41ee36c75f22c227606eaa2cf563caf061dc Mon Sep 17 00:00:00 2001 From: Nikolaj Bjorner Date: Wed, 6 Apr 2022 13:40:40 +0200 Subject: [PATCH] disable polysat inside of recursive solver --- src/math/polysat/univariate/univariate_solver.cpp | 8 +++++--- src/sat/sat_extension.h | 1 + src/sat/sat_solver.cpp | 3 +++ src/sat/smt/euf_solver.h | 2 +- src/tactic/portfolio/smt_strategic_solver.cpp | 3 ++- 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/math/polysat/univariate/univariate_solver.cpp b/src/math/polysat/univariate/univariate_solver.cpp index 7851e208c..4e629fafc 100644 --- a/src/math/polysat/univariate/univariate_solver.cpp +++ b/src/math/polysat/univariate/univariate_solver.cpp @@ -42,10 +42,11 @@ namespace polysat { bit_width(bit_width), x_decl(m), x(m) { - // m.register_plugin(symbol("bv"), alloc(bv_decl_plugin)); // this alone doesn't work reg_decl_plugins(m); bv = alloc(bv_util, m); - s = mk_solver(m, params_ref::get_empty(), false, true, true, symbol::null); + params_ref p; + p.set_bool("bv.polysat", false); + s = mk_solver(m, p, false, true, true, symbol::null); x_decl = m.mk_const_decl("x", bv->mk_sort(bit_width)); x = m.mk_const(x_decl); } @@ -68,7 +69,8 @@ namespace polysat { expr* mk_poly(univariate const& p) const { if (p.empty()) { return mk_numeral(rational::zero()); - } else { + } + else { expr* e = mk_numeral(p.back()); for (unsigned i = p.size() - 1; i-- > 0; ) { e = bv->mk_bv_mul(e, x); diff --git a/src/sat/sat_extension.h b/src/sat/sat_extension.h index 147bc90cc..1c39cd7c9 100644 --- a/src/sat/sat_extension.h +++ b/src/sat/sat_extension.h @@ -121,6 +121,7 @@ namespace sat { virtual bool check_model(model const& m) const { return true; } virtual void gc_vars(unsigned num_vars) {} virtual bool should_research(sat::literal_vector const& core) { return false;} + virtual void updt_params(params_ref const& p) {} virtual void add_assumptions(literal_set& ext_assumptions) {} virtual bool tracking_assumptions() { return false; } virtual bool enable_self_propagate() const { return false; } diff --git a/src/sat/sat_solver.cpp b/src/sat/sat_solver.cpp index 90e31b97a..26cf5c9de 100644 --- a/src/sat/sat_solver.cpp +++ b/src/sat/sat_solver.cpp @@ -110,6 +110,7 @@ namespace sat { void solver::set_extension(extension* ext) { m_ext = ext; if (ext) { + ext->updt_params(m_params); ext->set_solver(this); for (unsigned i = num_user_scopes(); i-- > 0;) ext->user_push(); @@ -3758,6 +3759,8 @@ namespace sat { if (m_config.m_cut_simplify && !m_cut_simplifier && m_user_scope_literals.empty()) { m_cut_simplifier = alloc(cut_simplifier, *this); } + if (m_ext) + m_ext->updt_params(m_params); } void solver::collect_param_descrs(param_descrs & d) { diff --git a/src/sat/smt/euf_solver.h b/src/sat/smt/euf_solver.h index d921a6b2c..36d68ced0 100644 --- a/src/sat/smt/euf_solver.h +++ b/src/sat/smt/euf_solver.h @@ -278,7 +278,7 @@ namespace euf { } trail_stack& get_trail_stack() { return m_trail; } - void updt_params(params_ref const& p); + void updt_params(params_ref const& p) override; void set_lookahead(sat::lookahead* s) override { m_lookahead = s; } void init_search() override; double get_reward(literal l, ext_constraint_idx idx, sat::literal_occs_fun& occs) const override; diff --git a/src/tactic/portfolio/smt_strategic_solver.cpp b/src/tactic/portfolio/smt_strategic_solver.cpp index 52df38247..7dc244195 100644 --- a/src/tactic/portfolio/smt_strategic_solver.cpp +++ b/src/tactic/portfolio/smt_strategic_solver.cpp @@ -139,7 +139,7 @@ public: else l = logic; - tactic_params tp; + tactic_params tp(p); tactic_ref t; if (tp.default_tactic() != symbol::null && !tp.default_tactic().is_numerical() && @@ -151,6 +151,7 @@ public: sexpr_ref se = parse_sexpr(ctx, is, p, file_name); if (se) { t = sexpr2tactic(ctx, se.get()); + t->updt_params(p); } }