3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-06 03:10:25 +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

61
src/sat/sat_elim_vars.h Normal file
View file

@ -0,0 +1,61 @@
/*++
Copyright (c) 2017 Microsoft Corporation
Module Name:
sat_elim_vars.h
Abstract:
Helper class for eliminating variables
Author:
Nikolaj Bjorner (nbjorner) 2017-10-14
Revision History:
--*/
#ifndef SAT_ELIM_VARS_H_
#define SAT_ELIM_VARS_H_
#include "sat/sat_types.h"
#include "sat/sat_bdd.h"
namespace sat {
class solver;
class simplifier;
class elim_vars {
friend class simplifier;
simplifier& simp;
solver& s;
bdd_manager m;
svector<bool_var> m_vars;
unsigned_vector m_mark;
unsigned m_mark_lim;
unsigned_vector m_var2index;
unsigned m_max_literals;
unsigned num_vars() const { return m_vars.size(); }
void reset_mark();
void mark_var(bool_var v);
bool mark_literals(clause_use_list & occs);
bool mark_literals(literal lit);
bdd make_clauses(clause_use_list & occs);
bdd make_clauses(literal lit);
bdd mk_literal(literal l);
void get_clauses(bdd const& b, literal_vector& lits, clause_vector& clauses, literal_vector& units);
void add_clauses(bdd const& b, literal_vector& lits);
public:
elim_vars(simplifier& s);
bool operator()(bool_var v);
};
};
#endif