mirror of
https://github.com/Z3Prover/z3
synced 2025-07-19 10:52:02 +00:00
arrays (#4684)
* arrays Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * arrays Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * arrays Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fill Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * update drat and fix euf bugs Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * const qualifiers Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * reorg ba Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * reorg Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * build warnings Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
d56dd1db7b
commit
796e2fd9eb
79 changed files with 2571 additions and 1850 deletions
|
@ -63,22 +63,14 @@ namespace sat {
|
|||
// consume tautology
|
||||
continue;
|
||||
}
|
||||
#if 0
|
||||
if (l1 != r1) {
|
||||
// add half r1 => r2, the other half ~r2 => ~r1 is added when traversing l2
|
||||
m_solver.m_watches[(~r1).index()].push_back(watched(r2, it->is_learned()));
|
||||
continue;
|
||||
}
|
||||
it->set_literal(r2); // keep it.
|
||||
#else
|
||||
if (l1 != r1 || l2 != r2) {
|
||||
if (r1.index() < r2.index()) {
|
||||
TRACE("elim_eqs", tout << l1 << " " << l2 << " " << r1 << " " << r2 << "\n";);
|
||||
m_new_bin.push_back(bin(r1, r2, it->is_learned()));
|
||||
}
|
||||
continue;
|
||||
}
|
||||
// keep it
|
||||
#endif
|
||||
}
|
||||
*itprev = *it;
|
||||
itprev++;
|
||||
|
@ -233,9 +225,10 @@ namespace sat {
|
|||
if (m_solver.m_cut_simplifier) m_solver.m_cut_simplifier->set_root(v, r);
|
||||
bool set_root = m_solver.set_root(l, r);
|
||||
bool root_ok = !m_solver.is_external(v) || set_root;
|
||||
TRACE("elim_eqs", tout << l << " " << r << "\n";);
|
||||
if (m_solver.is_assumption(v) || (m_solver.is_external(v) && (m_solver.is_incremental() || !root_ok))) {
|
||||
// cannot really eliminate v, since we have to notify extension of future assignments
|
||||
if (m_solver.m_config.m_drat && m_solver.m_config.m_drat_file.is_null()) {
|
||||
if (m_solver.m_config.m_drat) {
|
||||
m_solver.m_drat.add(~l, r, sat::status::redundant());
|
||||
m_solver.m_drat.add(l, ~r, sat::status::redundant());
|
||||
}
|
||||
|
@ -291,6 +284,7 @@ namespace sat {
|
|||
}
|
||||
|
||||
void elim_eqs::operator()(union_find<>& uf) {
|
||||
TRACE("elim_eqs", tout << "before union-find bin\n";);
|
||||
literal_vector roots(m_solver.num_vars(), null_literal);
|
||||
bool_var_vector to_elim;
|
||||
for (unsigned i = m_solver.num_vars(); i-- > 0; ) {
|
||||
|
@ -299,6 +293,7 @@ namespace sat {
|
|||
if (idx != l1.index()) {
|
||||
roots[i] = to_literal(idx);
|
||||
to_elim.push_back(i);
|
||||
TRACE("elim_eqs", tout << "remove " << roots[i] << "\n";);
|
||||
}
|
||||
else {
|
||||
roots[i] = l1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue