3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-29 20:05:51 +00:00

reorganize polysat functionality to use abstract solver interface

make dependency be self-contained
This commit is contained in:
Nikolaj Bjorner 2023-12-09 09:38:18 -08:00
parent 837e111d93
commit 81c6f00c99
23 changed files with 381 additions and 123 deletions

View file

@ -18,7 +18,7 @@ Author:
#include "sat/smt/sat_th.h"
#include "math/dd/dd_pdd.h"
#include "sat/smt/polysat_core.h"
#include "sat/smt/polysat/polysat_core.h"
namespace euf {
class solver;
@ -27,7 +27,7 @@ namespace euf {
namespace polysat {
class solver : public euf::th_euf_solver {
class solver : public euf::th_euf_solver, public solver_interface {
typedef euf::theory_var theory_var;
typedef euf::theory_id theory_id;
typedef sat::literal literal;
@ -53,8 +53,6 @@ namespace polysat {
expr* get_hint(euf::solver& s) const override { return nullptr; }
};
friend class core;
bv_util bv;
arith_util m_autil;
stats m_stats;
@ -128,12 +126,14 @@ namespace polysat {
void internalize_set(euf::theory_var v, pdd const& p);
// callbacks from core
void add_eq_literal(pvar v, rational const& val);
void set_conflict(dependency_vector const& core);
void set_lemma(vector<signed_constraint> const& lemma, unsigned level, dependency_vector const& core);
dependency propagate(signed_constraint sc, dependency_vector const& deps);
void propagate(dependency const& d, bool sign, dependency_vector const& deps);
void add_eq_literal(pvar v, rational const& val) override;
void set_conflict(dependency_vector const& core) override;
void set_lemma(vector<signed_constraint> const& lemma, unsigned level, dependency_vector const& core) override;
dependency propagate(signed_constraint sc, dependency_vector const& deps) override;
void propagate(dependency const& d, bool sign, dependency_vector const& deps) override;
trail_stack& trail() override;
bool inconsistent() const override;
void add_lemma(vector<signed_constraint> const& lemma);
std::pair<sat::literal_vector, euf::enode_pair_vector> explain_deps(dependency_vector const& deps);