3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-15 13:28:47 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-03-03 19:11:35 -08:00
parent b8f076a072
commit adeccfcabf

View file

@ -65,6 +65,7 @@ struct euclidean_solver::imp {
} }
} }
} }
/** /**
Equation as[0]*xs[0] + ... + as[n-1]*xs[n-1] + c = 0 with justification bs[0]*js[0] + ... + bs[m-1]*js[m-1] Equation as[0]*xs[0] + ... + as[n-1]*xs[n-1] + c = 0 with justification bs[0]*js[0] + ... + bs[m-1]*js[m-1]
@ -139,6 +140,20 @@ struct euclidean_solver::imp {
for (unsigned i = 0; i < num; i++) { for (unsigned i = 0; i < num; i++) {
m().swap(as[i], buffer[xs[i]]); m().swap(as[i], buffer[xs[i]]);
} }
unsigned j = 0;
for (unsigned i = 0; i < num; ++i) {
if (i > 0 && xs[j] == xs[i]) {
m().add(as[j], as[i], as[j]);
continue;
}
if (i != j) {
xs[j] = xs[i];
m().set(as[j], as[i]);
}
++j;
}
xs.shrink(j);
as.shrink(j);
} }
template<typename Numeral> template<typename Numeral>
@ -736,6 +751,7 @@ struct euclidean_solver::imp {
tout << m().to_string(as[i]) << "*x" << xs[i] << " "; tout << m().to_string(as[i]) << "*x" << xs[i] << " ";
} }
tout << "\n";); tout << "\n";);
m_norm_xs_vector.reset(); m_norm_xs_vector.reset();
m_norm_as_vector.reset(); m_norm_as_vector.reset();
for (unsigned i = 0; i < num; i++) { for (unsigned i = 0; i < num; i++) {
@ -744,6 +760,7 @@ struct euclidean_solver::imp {
m().set(m_norm_as_vector.back(), as[i]); m().set(m_norm_as_vector.back(), as[i]);
} }
sort(m_norm_as_vector, m_norm_xs_vector, m_as_buffer); sort(m_norm_as_vector, m_norm_xs_vector, m_as_buffer);
DEBUG_CODE(for (unsigned i = 1; i < m_norm_xs_vector.size(); ++i) SASSERT(m_norm_xs_vector[i - 1] != m_norm_xs_vector[i]););
m_norm_bs_vector.reset(); m_norm_bs_vector.reset();
js.reset(); js.reset();
m().set(c_prime, c); m().set(c_prime, c);