mirror of
https://github.com/Z3Prover/z3
synced 2025-04-28 19:35:50 +00:00
na (#4254)
* remove level of indirection for context and ast_manager in smt_theory Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * add request by #4252 Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * move to def Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * int Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix #4251 Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix #4255 * fix #4257 * add code to debug #4246 * restore new solver as default * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix #4246 Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
becf423c77
commit
fdc87f286f
18 changed files with 269 additions and 231 deletions
|
@ -74,7 +74,46 @@ public:
|
|||
bool is_conflict() const { return m_ineqs.empty() && !m_expl.empty(); }
|
||||
};
|
||||
|
||||
class core;
|
||||
//
|
||||
// lemmas are created in a scope.
|
||||
// when the destructor of new_lemma is invoked
|
||||
// all constraints are assumed added to the lemma
|
||||
// correctness of the lemma can be checked at this point.
|
||||
//
|
||||
class new_lemma {
|
||||
core& c;
|
||||
public:
|
||||
new_lemma(core& c);
|
||||
~new_lemma();
|
||||
lemma& operator()();
|
||||
std::ostream& display(std::ostream& out) const;
|
||||
};
|
||||
|
||||
inline std::ostream& operator<<(std::ostream& out, new_lemma const& l) {
|
||||
return l.display(out);
|
||||
}
|
||||
|
||||
struct pp_fac {
|
||||
core const& c;
|
||||
factor const& f;
|
||||
pp_fac(core const& c, factor const& f): c(c), f(f) {}
|
||||
};
|
||||
|
||||
struct pp_var {
|
||||
core const& c;
|
||||
lpvar v;
|
||||
pp_var(core const& c, lpvar v): c(c), v(v) {}
|
||||
};
|
||||
|
||||
struct pp_factorization {
|
||||
core const& c;
|
||||
factorization const& f;
|
||||
pp_factorization(core const& c, factorization const& f): c(c), f(f) {}
|
||||
};
|
||||
|
||||
class core {
|
||||
friend class new_lemma;
|
||||
public:
|
||||
var_eqs<emonics> m_evars;
|
||||
lp::lar_solver& m_lar_solver;
|
||||
|
@ -92,8 +131,8 @@ public:
|
|||
private:
|
||||
emonics m_emons;
|
||||
svector<lpvar> m_add_buffer;
|
||||
mutable lp::u_set m_active_var_set;
|
||||
lp::u_set m_rows;
|
||||
mutable lp::u_set m_active_var_set;
|
||||
lp::u_set m_rows;
|
||||
public:
|
||||
reslimit m_reslim;
|
||||
|
||||
|
@ -161,7 +200,7 @@ public:
|
|||
svector<lpvar> sorted_rvars(const factor& f) const;
|
||||
bool done() const;
|
||||
|
||||
void add_lemma();
|
||||
|
||||
// the value of the factor is equal to the value of the variable multiplied
|
||||
// by the canonize_sign
|
||||
bool canonize_sign(const factor& f) const;
|
||||
|
@ -197,6 +236,7 @@ public:
|
|||
void explain_var_separated_from_zero(lpvar j);
|
||||
void explain_fixed_var(lpvar j);
|
||||
|
||||
|
||||
std::ostream & print_ineq(const ineq & in, std::ostream & out) const;
|
||||
std::ostream & print_var(lpvar j, std::ostream & out) const;
|
||||
std::ostream & print_monics(std::ostream & out) const;
|
||||
|
@ -224,8 +264,12 @@ public:
|
|||
void print_monic_stats(const monic& m, std::ostream& out);
|
||||
void print_stats(std::ostream& out);
|
||||
std::ostream& print_lemma(std::ostream& out) const;
|
||||
|
||||
void print_specific_lemma(const lemma& l, std::ostream& out) const;
|
||||
|
||||
pp_var pp(lpvar j) const { return pp_var(*this, j); }
|
||||
pp_fac pp(factor const& f) const { return pp_fac(*this, f); }
|
||||
pp_factorization pp(factorization const& f) const { return pp_factorization(*this, f); }
|
||||
|
||||
std::ostream& print_specific_lemma(const lemma& l, std::ostream& out) const;
|
||||
|
||||
|
||||
void trace_print_ol(const monic& ac,
|
||||
|
@ -440,23 +484,11 @@ struct pp_mon_with_vars {
|
|||
pp_mon_with_vars(core const& c, monic const& m): c(c), m(m) {}
|
||||
pp_mon_with_vars(core const& c, lpvar v): c(c), m(c.emons()[v]) {}
|
||||
};
|
||||
|
||||
inline std::ostream& operator<<(std::ostream& out, pp_mon const& p) { return p.c.print_monic(p.m, out); }
|
||||
inline std::ostream& operator<<(std::ostream& out, pp_mon_with_vars const& p) { return p.c.print_monic_with_vars(p.m, out); }
|
||||
|
||||
struct pp_fac {
|
||||
core const& c;
|
||||
factor const& f;
|
||||
pp_fac(core const& c, factor const& f): c(c), f(f) {}
|
||||
};
|
||||
|
||||
inline std::ostream& operator<<(std::ostream& out, pp_fac const& f) { return f.c.print_factor(f.f, out); }
|
||||
|
||||
struct pp_var {
|
||||
core const& c;
|
||||
lpvar v;
|
||||
pp_var(core const& c, lpvar v): c(c), v(v) {}
|
||||
};
|
||||
|
||||
inline std::ostream& operator<<(std::ostream& out, pp_factorization const& f) { return f.c.print_factorization(f.f, out); }
|
||||
inline std::ostream& operator<<(std::ostream& out, pp_var const& v) { return v.c.print_var(v.v, out); }
|
||||
|
||||
} // end of namespace nla
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue