3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-02-07 17:47:58 +00:00

fix choosing rows for horner's schem

Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
Lev Nachmanson 2019-07-31 12:12:30 -07:00
parent 7cf23c1a32
commit aef26598e5
5 changed files with 31 additions and 15 deletions

View file

@ -173,7 +173,7 @@ void emonomials::remove_cg_mon(const monomial& m) {
lpvar u = m.var(), w;
// equivalence class of u:
if (m_cg_table.find(u, w)) {
TRACE("nla_solver", tout << "erase << " << m << "\n";);
TRACE("nla_solver_mons", tout << "erase << " << m << "\n";);
m_cg_table.erase(u);
}
}
@ -226,7 +226,7 @@ bool emonomials::elists_are_consistent(std::unordered_map<unsigned_vector, std::
c.insert(e.var());
auto it = lists.find(m.rvars());
CTRACE("nla_solver", it->second != c,
CTRACE("nla_solver_mons", it->second != c,
tout << "m = " << m << "\n";
tout << "c = " ; print_vector(c, tout); tout << "\n";
if (it == lists.end()) {
@ -249,7 +249,7 @@ void emonomials::insert_cg_mon(monomial & m) {
lpvar v = m.var(), w;
if (m_cg_table.find(v, w)) {
if (v == w) {
TRACE("nla_solver", tout << "found " << v << "\n";);
TRACE("nla_solver_mons", tout << "found " << v << "\n";);
return;
}
unsigned v_idx = m_var2index[v];
@ -257,11 +257,11 @@ void emonomials::insert_cg_mon(monomial & m) {
unsigned max_i = std::max(v_idx, w_idx);
while (m_u_f.get_num_vars() <= max_i)
m_u_f.mk_var();
TRACE("nla_solver", tout << "merge " << v << " idx " << v_idx << ", and " << w << " idx " << w_idx << "\n";);
TRACE("nla_solver_mons", tout << "merge " << v << " idx " << v_idx << ", and " << w << " idx " << w_idx << "\n";);
m_u_f.merge(v_idx, w_idx);
}
else {
TRACE("nla_solver", tout << "insert " << m << "\n";);
TRACE("nla_solver_mons", tout << "insert " << m << "\n";);
m_cg_table.insert(v);
}
}
@ -282,7 +282,7 @@ bool emonomials::is_visited(monomial const& m) const {
class of equal up-to var_eqs monomials.
*/
void emonomials::add(lpvar v, unsigned sz, lpvar const* vs) {
TRACE("nla_solver", tout << "v = " << v << "\n";);
TRACE("nla_solver_mons", tout << "v = " << v << "\n";);
unsigned idx = m_monomials.size();
m_monomials.push_back(monomial(v, sz, vs, idx));
lpvar last_var = UINT_MAX;
@ -376,17 +376,17 @@ void emonomials::merge_eh(signed_var r2, signed_var r1, signed_var v2, signed_va
}
void emonomials::after_merge_eh(signed_var r2, signed_var r1, signed_var v2, signed_var v1) {
TRACE("nla_solver", tout << r2 << " <- " << r1 << "\n";);
TRACE("nla_solver_mons", tout << r2 << " <- " << r1 << "\n";);
if (m_ve.find(~r1) == m_ve.find(~r2)) { // the other sign has also been merged
m_use_lists.reserve(std::max(r2.var(), r1.var()) + 1);
TRACE("nla_solver", tout << "rehasing " << r1.var() << "\n";);
TRACE("nla_solver_mons", tout << "rehasing " << r1.var() << "\n";);
merge_cells(m_use_lists[r2.var()], m_use_lists[r1.var()]);
rehash_cg(r1.var());
}
}
void emonomials::unmerge_eh(signed_var r2, signed_var r1) {
TRACE("nla_solver", tout << r2 << " -> " << r1 << "\n";);
TRACE("nla_solver_mons", tout << r2 << " -> " << r1 << "\n";);
if (m_ve.find(~r1) != m_ve.find(~r2)) { // the other sign has also been unmerged
unmerge_cells(m_use_lists[r2.var()], m_use_lists[r1.var()]);
rehash_cg(r1.var());