3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-20 18:20:22 +00:00

expose extension conflict resolution as plugin to sat solver

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2017-02-05 10:08:57 -08:00
parent 5f70e4823d
commit 15283e4e7c
9 changed files with 223 additions and 307 deletions

View file

@ -21,15 +21,22 @@ Notes:
namespace sat {
class drat {
enum status { asserted, learned, deleted, external };
typedef ptr_vector<clause> watch;
public:
struct s_ext {};
struct s_unit {};
struct premise {
enum { t_clause, t_unit, t_ext } m_type;
union evidence {
union {
clause* m_clause;
literal m_literal;
} m_evidence;
};
premise(s_ext, literal l): m_type(t_ext), m_literal(l) {}
premise(s_unit, literal l): m_type(t_unit), m_literal(l) {}
premise(clause* c): m_type(t_clause), m_clause(c) {}
};
private:
enum status { asserted, learned, deleted, external };
typedef ptr_vector<clause> watch;
solver& s;
std::ostream* m_out;
ptr_vector<clause> m_proof;
@ -53,6 +60,8 @@ namespace sat {
void assign_propagate(literal l);
void del_watch(clause& c, literal l);
void verify(unsigned n, literal const* c);
bool is_drup(unsigned n, literal const* c);
bool is_drat(unsigned n, literal const* c);
lbool value(literal l) const;
void trace(std::ostream& out, unsigned n, literal const* c, status st);
void display(std::ostream& out) const;
@ -64,7 +73,7 @@ namespace sat {
void add(literal l, bool learned);
void add(literal l1, literal l2, bool learned);
void add(clause& c, bool learned);
void add(unsigned n, literal const* c, unsigned m, premise* const* premises);
void add(literal_vector const& c, svector<premise> const& premises);
void del(literal l);
void del(literal l1, literal l2);