3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-19 01:32:17 +00:00

adding BDD-based variable elimination routine

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2017-10-14 15:12:02 -07:00
parent 09fdfcc963
commit d36406f845
8 changed files with 372 additions and 3 deletions

View file

@ -21,6 +21,7 @@ Revision History:
#include "sat/sat_simplifier.h"
#include "sat/sat_simplifier_params.hpp"
#include "sat/sat_solver.h"
#include "sat/sat_elim_vars.h"
#include "util/stopwatch.h"
#include "util/trace.h"
@ -1308,7 +1309,6 @@ namespace sat {
clause_use_list & neg_occs = m_use_list.get(neg_l);
unsigned num_pos = pos_occs.size() + num_bin_pos;
unsigned num_neg = neg_occs.size() + num_bin_neg;
m_elim_counter -= num_pos + num_neg;
TRACE("resolution", tout << v << " num_pos: " << num_pos << " neg_pos: " << num_neg << "\n";);
@ -1349,7 +1349,6 @@ namespace sat {
collect_clauses(pos_l, m_pos_cls);
collect_clauses(neg_l, m_neg_cls);
m_elim_counter -= num_pos * num_neg + before_lits;
TRACE("resolution_detail", tout << "collecting number of after_clauses\n";);
unsigned before_clauses = num_pos + num_neg;
@ -1371,6 +1370,8 @@ namespace sat {
TRACE("resolution", tout << "found var to eliminate, before: " << before_clauses << " after: " << after_clauses << "\n";);
m_elim_counter -= num_pos * num_neg + before_lits;
// eliminate variable
model_converter::entry & mc_entry = s.m_mc.mk(model_converter::ELIM_VAR, v);
save_clauses(mc_entry, m_pos_cls);
@ -1454,14 +1455,21 @@ namespace sat {
elim_var_report rpt(*this);
bool_var_vector vars;
order_vars_for_elim(vars);
// sat::elim_vars elim_bdd(*this);
std::cout << "vars to elim: " << vars.size() << "\n";
for (bool_var v : vars) {
checkpoint();
if (m_elim_counter < 0)
if (m_elim_counter < 0)
break;
if (try_eliminate(v)) {
m_num_elim_vars++;
}
#if 0
else if (elim_bdd(v)) {
m_num_elim_vars++;
}
#endif
}
m_pos_cls.finalize();