3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-16 07:45:27 +00:00
This commit is contained in:
Nikolaj Bjorner 2021-02-14 13:52:10 -08:00
parent 04a1d4245c
commit 083d09aa81
14 changed files with 366 additions and 294 deletions

View file

@ -51,6 +51,14 @@ namespace euf {
size_t to_index() const { return sat::constraint_base::mem2base(this); }
};
class clause_pp {
solver& s;
sat::literal_vector const& lits;
public:
clause_pp(solver& s, sat::literal_vector const& lits):s(s), lits(lits) {}
std::ostream& display(std::ostream& out) const;
};
class solver : public sat::extension, public th_internalizer, public th_decompile {
typedef top_sort<euf::enode> deps_t;
friend class ackerman;
@ -266,6 +274,9 @@ namespace euf {
bool is_external(bool_var v) override;
bool propagated(literal l, ext_constraint_idx idx) override;
bool unit_propagate() override;
bool should_research(sat::literal_vector const& core) override;
void add_assumptions() override;
bool tracking_assumptions() override;
void propagate(literal lit, ext_justification_idx idx);
bool propagate(enode* a, enode* b, ext_justification_idx idx);
@ -297,6 +308,7 @@ namespace euf {
std::ostream& display_justification(std::ostream& out, ext_justification_idx idx) const override;
std::ostream& display_constraint(std::ostream& out, ext_constraint_idx idx) const override;
euf::egraph::b_pp bpp(enode* n) { return m_egraph.bpp(n); }
clause_pp pp(literal_vector const& lits) { return clause_pp(*this, lits); }
void collect_statistics(statistics& st) const override;
extension* copy(sat::solver* s) override;
enode* copy(solver& dst_ctx, enode* src_n);
@ -396,8 +408,14 @@ namespace euf {
};
inline std::ostream& operator<<(std::ostream& out, clause_pp const& p) {
return p.display(out);
}
};
inline std::ostream& operator<<(std::ostream& out, euf::solver const& s) {
return s.display(out);
}