mirror of
https://github.com/Z3Prover/z3
synced 2025-08-21 02:30:23 +00:00
fix gc to not remove ternary clauses that are on assignment trail. This addresses issue with drat proofs that don't pass drat-trim due to deletion during gc, but use in conflicts
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
598fc810b5
commit
4c799c144a
11 changed files with 201 additions and 71 deletions
|
@ -45,6 +45,7 @@ namespace sat {
|
|||
svector<watched_clause> m_watched_clauses;
|
||||
typedef svector<unsigned> watch;
|
||||
solver& s;
|
||||
clause_allocator m_alloc;
|
||||
std::ostream* m_out;
|
||||
std::ostream* m_bout;
|
||||
ptr_vector<clause> m_proof;
|
||||
|
@ -61,6 +62,8 @@ namespace sat {
|
|||
void append(literal l1, literal l2, status st);
|
||||
void append(clause& c, status st);
|
||||
|
||||
bool is_clause(clause& c, literal l1, literal l2, literal l3, status st1, status st2);
|
||||
|
||||
friend std::ostream& operator<<(std::ostream & out, status st);
|
||||
status get_status(bool learned) const;
|
||||
|
||||
|
@ -104,6 +107,7 @@ namespace sat {
|
|||
bool contains(unsigned n, literal const* c);
|
||||
bool contains(literal l1, literal l2) { literal lits[2] = {l1, l2}; return contains(2, lits); }
|
||||
bool contains(literal l1, literal l2, literal l3) { literal lits[3] = {l1, l2, l3}; return contains(3, lits); }
|
||||
bool contains(literal c, justification const& j);
|
||||
|
||||
void check_model(model const& m);
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue