mirror of
https://github.com/Z3Prover/z3
synced 2025-08-25 20:46:01 +00:00
introducing base namespace for user propagator
This commit is contained in:
parent
c083aa82ee
commit
5857236f2f
14 changed files with 189 additions and 172 deletions
|
@ -661,25 +661,25 @@ public:
|
|||
|
||||
void user_propagate_init(
|
||||
void* ctx,
|
||||
solver::push_eh_t& push_eh,
|
||||
solver::pop_eh_t& pop_eh,
|
||||
solver::fresh_eh_t& fresh_eh) override {
|
||||
user_propagator::push_eh_t& push_eh,
|
||||
user_propagator::pop_eh_t& pop_eh,
|
||||
user_propagator::fresh_eh_t& fresh_eh) override {
|
||||
ensure_euf()->user_propagate_init(ctx, push_eh, pop_eh, fresh_eh);
|
||||
}
|
||||
|
||||
void user_propagate_register_fixed(solver::fixed_eh_t& fixed_eh) override {
|
||||
void user_propagate_register_fixed(user_propagator::fixed_eh_t& fixed_eh) override {
|
||||
ensure_euf()->user_propagate_register_fixed(fixed_eh);
|
||||
}
|
||||
|
||||
void user_propagate_register_final(solver::final_eh_t& final_eh) override {
|
||||
void user_propagate_register_final(user_propagator::final_eh_t& final_eh) override {
|
||||
ensure_euf()->user_propagate_register_final(final_eh);
|
||||
}
|
||||
|
||||
void user_propagate_register_eq(solver::eq_eh_t& eq_eh) override {
|
||||
void user_propagate_register_eq(user_propagator::eq_eh_t& eq_eh) override {
|
||||
ensure_euf()->user_propagate_register_eq(eq_eh);
|
||||
}
|
||||
|
||||
void user_propagate_register_diseq(solver::eq_eh_t& diseq_eh) override {
|
||||
void user_propagate_register_diseq(user_propagator::eq_eh_t& diseq_eh) override {
|
||||
ensure_euf()->user_propagate_register_diseq(diseq_eh);
|
||||
}
|
||||
|
||||
|
@ -959,11 +959,11 @@ private:
|
|||
extract_asm2dep(asm2dep);
|
||||
sat::literal_vector const& core = m_solver.get_core();
|
||||
TRACE("sat",
|
||||
for (auto kv : m_dep2asm) {
|
||||
for (auto const& kv : m_dep2asm) {
|
||||
tout << mk_pp(kv.m_key, m) << " |-> " << sat::literal(kv.m_value) << "\n";
|
||||
}
|
||||
tout << "asm2fml: ";
|
||||
for (auto kv : asm2fml) {
|
||||
for (auto const& kv : asm2fml) {
|
||||
tout << mk_pp(kv.m_key, m) << " |-> " << mk_pp(kv.m_value, m) << "\n";
|
||||
}
|
||||
tout << "core: "; for (auto c : core) tout << c << " "; tout << "\n";
|
||||
|
|
|
@ -295,7 +295,7 @@ namespace euf {
|
|||
return;
|
||||
bool sign = l.sign();
|
||||
m_egraph.set_value(n, sign ? l_false : l_true);
|
||||
for (auto th : enode_th_vars(n))
|
||||
for (auto const& th : enode_th_vars(n))
|
||||
m_id2solver[th.get_id()]->asserted(l);
|
||||
|
||||
size_t* c = to_ptr(l);
|
||||
|
@ -519,8 +519,7 @@ namespace euf {
|
|||
|
||||
void solver::push() {
|
||||
si.push();
|
||||
scope s;
|
||||
s.m_var_lim = m_var_trail.size();
|
||||
scope s(m_var_trail.size());
|
||||
m_scopes.push_back(s);
|
||||
m_trail.push_scope();
|
||||
for (auto* e : m_solvers)
|
||||
|
@ -994,9 +993,9 @@ namespace euf {
|
|||
|
||||
void solver::user_propagate_init(
|
||||
void* ctx,
|
||||
::solver::push_eh_t& push_eh,
|
||||
::solver::pop_eh_t& pop_eh,
|
||||
::solver::fresh_eh_t& fresh_eh) {
|
||||
user_propagator::push_eh_t& push_eh,
|
||||
user_propagator::pop_eh_t& pop_eh,
|
||||
user_propagator::fresh_eh_t& fresh_eh) {
|
||||
m_user_propagator = alloc(user_solver::solver, *this);
|
||||
m_user_propagator->add(ctx, push_eh, pop_eh, fresh_eh);
|
||||
for (unsigned i = m_scopes.size(); i-- > 0; )
|
||||
|
|
|
@ -72,6 +72,7 @@ namespace euf {
|
|||
};
|
||||
struct scope {
|
||||
unsigned m_var_lim;
|
||||
scope(unsigned l) : m_var_lim(l) {}
|
||||
};
|
||||
|
||||
|
||||
|
@ -400,27 +401,27 @@ namespace euf {
|
|||
// user propagator
|
||||
void user_propagate_init(
|
||||
void* ctx,
|
||||
::solver::push_eh_t& push_eh,
|
||||
::solver::pop_eh_t& pop_eh,
|
||||
::solver::fresh_eh_t& fresh_eh);
|
||||
user_propagator::push_eh_t& push_eh,
|
||||
user_propagator::pop_eh_t& pop_eh,
|
||||
user_propagator::fresh_eh_t& fresh_eh);
|
||||
bool watches_fixed(enode* n) const;
|
||||
void assign_fixed(enode* n, expr* val, unsigned sz, literal const* explain);
|
||||
void assign_fixed(enode* n, expr* val, literal_vector const& explain) { assign_fixed(n, val, explain.size(), explain.data()); }
|
||||
void assign_fixed(enode* n, expr* val, literal explain) { assign_fixed(n, val, 1, &explain); }
|
||||
|
||||
void user_propagate_register_final(::solver::final_eh_t& final_eh) {
|
||||
void user_propagate_register_final(user_propagator::final_eh_t& final_eh) {
|
||||
check_for_user_propagator();
|
||||
m_user_propagator->register_final(final_eh);
|
||||
}
|
||||
void user_propagate_register_fixed(::solver::fixed_eh_t& fixed_eh) {
|
||||
void user_propagate_register_fixed(user_propagator::fixed_eh_t& fixed_eh) {
|
||||
check_for_user_propagator();
|
||||
m_user_propagator->register_fixed(fixed_eh);
|
||||
}
|
||||
void user_propagate_register_eq(::solver::eq_eh_t& eq_eh) {
|
||||
void user_propagate_register_eq(user_propagator::eq_eh_t& eq_eh) {
|
||||
check_for_user_propagator();
|
||||
m_user_propagator->register_eq(eq_eh);
|
||||
}
|
||||
void user_propagate_register_diseq(::solver::eq_eh_t& diseq_eh) {
|
||||
void user_propagate_register_diseq(user_propagator::eq_eh_t& diseq_eh) {
|
||||
check_for_user_propagator();
|
||||
m_user_propagator->register_diseq(diseq_eh);
|
||||
}
|
||||
|
|
|
@ -21,11 +21,12 @@ Author:
|
|||
|
||||
#include "sat/smt/sat_th.h"
|
||||
#include "solver/solver.h"
|
||||
#include "tactic/user_propagator_base.h"
|
||||
|
||||
|
||||
namespace user_solver {
|
||||
|
||||
class solver : public euf::th_euf_solver, public ::solver::propagate_callback {
|
||||
class solver : public euf::th_euf_solver, public user_propagator::callback {
|
||||
|
||||
struct prop_info {
|
||||
unsigned_vector m_ids;
|
||||
|
@ -47,15 +48,15 @@ namespace user_solver {
|
|||
};
|
||||
|
||||
void* m_user_context;
|
||||
::solver::push_eh_t m_push_eh;
|
||||
::solver::pop_eh_t m_pop_eh;
|
||||
::solver::fresh_eh_t m_fresh_eh;
|
||||
::solver::final_eh_t m_final_eh;
|
||||
::solver::fixed_eh_t m_fixed_eh;
|
||||
::solver::eq_eh_t m_eq_eh;
|
||||
::solver::eq_eh_t m_diseq_eh;
|
||||
::solver::context_obj* m_api_context { nullptr };
|
||||
unsigned m_qhead { 0 };
|
||||
user_propagator::push_eh_t m_push_eh;
|
||||
user_propagator::pop_eh_t m_pop_eh;
|
||||
user_propagator::fresh_eh_t m_fresh_eh;
|
||||
user_propagator::final_eh_t m_final_eh;
|
||||
user_propagator::fixed_eh_t m_fixed_eh;
|
||||
user_propagator::eq_eh_t m_eq_eh;
|
||||
user_propagator::eq_eh_t m_diseq_eh;
|
||||
user_propagator::context_obj* m_api_context = nullptr;
|
||||
unsigned m_qhead = 0;
|
||||
vector<prop_info> m_prop;
|
||||
unsigned_vector m_prop_lim;
|
||||
vector<sat::literal_vector> m_id2justification;
|
||||
|
@ -91,9 +92,9 @@ namespace user_solver {
|
|||
*/
|
||||
void add(
|
||||
void* ctx,
|
||||
::solver::push_eh_t& push_eh,
|
||||
::solver::pop_eh_t& pop_eh,
|
||||
::solver::fresh_eh_t& fresh_eh) {
|
||||
user_propagator::push_eh_t& push_eh,
|
||||
user_propagator::pop_eh_t& pop_eh,
|
||||
user_propagator::fresh_eh_t& fresh_eh) {
|
||||
m_user_context = ctx;
|
||||
m_push_eh = push_eh;
|
||||
m_pop_eh = pop_eh;
|
||||
|
@ -102,10 +103,10 @@ namespace user_solver {
|
|||
|
||||
unsigned add_expr(expr* e);
|
||||
|
||||
void register_final(::solver::final_eh_t& final_eh) { m_final_eh = final_eh; }
|
||||
void register_fixed(::solver::fixed_eh_t& fixed_eh) { m_fixed_eh = fixed_eh; }
|
||||
void register_eq(::solver::eq_eh_t& eq_eh) { m_eq_eh = eq_eh; }
|
||||
void register_diseq(::solver::eq_eh_t& diseq_eh) { m_diseq_eh = diseq_eh; }
|
||||
void register_final(user_propagator::final_eh_t& final_eh) { m_final_eh = final_eh; }
|
||||
void register_fixed(user_propagator::fixed_eh_t& fixed_eh) { m_fixed_eh = fixed_eh; }
|
||||
void register_eq(user_propagator::eq_eh_t& eq_eh) { m_eq_eh = eq_eh; }
|
||||
void register_diseq(user_propagator::eq_eh_t& diseq_eh) { m_diseq_eh = diseq_eh; }
|
||||
|
||||
bool has_fixed() const { return (bool)m_fixed_eh; }
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue