mirror of
https://github.com/Z3Prover/z3
synced 2025-04-13 12:28:44 +00:00
emonics
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
316f2194e0
commit
cc74dd6373
|
@ -54,7 +54,7 @@ public:
|
|||
|
||||
|
||||
class factorization {
|
||||
svector<factor> m_factors;
|
||||
svector<factor> m_factors;
|
||||
const monic* m_mon;
|
||||
public:
|
||||
factorization(const monic* m): m_mon(m) {
|
||||
|
@ -63,18 +63,14 @@ public:
|
|||
m_factors.push_back(factor(j, factor_type::VAR));
|
||||
}
|
||||
}
|
||||
bool is_mon() const {
|
||||
return m_mon != nullptr;
|
||||
}
|
||||
bool is_mon() const { return m_mon != nullptr; }
|
||||
bool is_empty() const { return m_factors.empty(); }
|
||||
const factor& operator[](unsigned k) const { return m_factors[k]; }
|
||||
factor& operator[](unsigned k) { return m_factors[k]; }
|
||||
size_t size() const { return m_factors.size(); }
|
||||
const factor* begin() const { return m_factors.begin(); }
|
||||
const factor* end() const { return m_factors.end(); }
|
||||
void push_back(factor const& v) {
|
||||
m_factors.push_back(v);
|
||||
}
|
||||
void push_back(factor const& v) { m_factors.push_back(v); }
|
||||
const monic& mon() const { return *m_mon; }
|
||||
void set_mon(const monic* m) { m_mon = m; }
|
||||
|
||||
|
|
|
@ -36,8 +36,11 @@ public:
|
|||
unsigned size() const { return m_vs.size(); }
|
||||
bool sign() const { return m_sign; }
|
||||
const svector<lp::var_index>& vars() const { return m_vs; }
|
||||
svector<lp::var_index>& vars() { return m_vs; }
|
||||
bool empty() const { return m_vs.empty(); }
|
||||
|
||||
protected:
|
||||
svector<lp::var_index>& vars1() { return m_vs; }
|
||||
|
||||
};
|
||||
|
||||
// support the congruence
|
||||
|
@ -53,7 +56,7 @@ public:
|
|||
}
|
||||
monic(bool sign, lpvar v, const svector<lpvar> &vs, unsigned idx):
|
||||
mon_eq(sign, v, vs), m_rsign(false), m_visited(0) {
|
||||
std::sort(vars().begin(), vars().end());
|
||||
std::sort(vars1().begin(), vars1().end());
|
||||
}
|
||||
|
||||
unsigned visited() const { return m_visited; }
|
||||
|
|
|
@ -57,7 +57,6 @@ struct common {
|
|||
|
||||
template <typename T> rational val(T const& t) const;
|
||||
rational val(lpvar) const;
|
||||
rational rval(const monic&) const;
|
||||
template <typename T> lpvar var(T const& t) const;
|
||||
bool done() const;
|
||||
template <typename T> void explain(const T&);
|
||||
|
|
|
@ -87,7 +87,6 @@ svector<lpvar> core::sorted_rvars(const factor& f) const {
|
|||
svector<lpvar> r; r.push_back(map_to_root(f.var()));
|
||||
return r;
|
||||
}
|
||||
TRACE("nla_solver", tout << "nv";);
|
||||
return m_emons[f.var()].rvars();
|
||||
}
|
||||
|
||||
|
@ -799,7 +798,7 @@ void core::explain(const factorization& f, lp::explanation& exp) {
|
|||
}
|
||||
}
|
||||
|
||||
bool core:: has_zero_factor(const factorization& factorization) const {
|
||||
bool core::has_zero_factor(const factorization& factorization) const {
|
||||
for (factor f : factorization) {
|
||||
if (val(f).is_zero())
|
||||
return true;
|
||||
|
|
|
@ -2049,8 +2049,8 @@ public:
|
|||
set_evidence(ev.second);
|
||||
}
|
||||
}
|
||||
// The call mk_bound() can set the m_infeasible_column in lar_solver
|
||||
// so the explanation is safer to take before this call.
|
||||
// The call mk_bound() can set the m_infeasible_column in lar_solver
|
||||
// so the explanation is safer to take before this call.
|
||||
app_ref b = mk_bound(m_lia->get_term(), m_lia->get_offset(), !m_lia->is_upper());
|
||||
if (m.has_trace_stream()) {
|
||||
th.log_axiom_instantiation(b);
|
||||
|
@ -3483,6 +3483,8 @@ public:
|
|||
if (dump_lemmas()) {
|
||||
unsigned id = ctx().display_lemma_as_smt_problem(m_core.size(), m_core.c_ptr(), m_eqs.size(), m_eqs.c_ptr(), false_literal);
|
||||
(void)id;
|
||||
std::cout << id << "\n";
|
||||
SASSERT(id != 49);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue