3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-22 05:43:39 +00:00

adding user-propagator ability

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-08-17 22:39:55 -07:00
parent c13e3ce693
commit 152c95f72a
15 changed files with 305 additions and 21 deletions

View file

@ -43,12 +43,13 @@ Revision History:
#include "ast/ast_smt_pp.h"
#include "smt/watch_list.h"
#include "util/trail.h"
#include "smt/fingerprints.h"
#include "util/ref.h"
#include "smt/proto_model/proto_model.h"
#include "model/model.h"
#include "util/timer.h"
#include "util/statistics.h"
#include "smt/fingerprints.h"
#include "smt/proto_model/proto_model.h"
#include "smt/user_propagator.h"
#include "model/model.h"
#include "solver/progress_callback.h"
#include <tuple>
@ -92,6 +93,7 @@ namespace smt {
scoped_ptr<quantifier_manager> m_qmanager;
scoped_ptr<model_generator> m_model_generator;
scoped_ptr<relevancy_propagator> m_relevancy_propagator;
scoped_ptr<user_propagator> m_user_propagator;
random_gen m_random;
bool m_flushing; // (debug support) true when flushing
mutable unsigned m_lemma_id;
@ -1677,6 +1679,27 @@ namespace smt {
void get_assertions(ptr_vector<expr> & result) { m_asserted_formulas.get_assertions(result); }
/*
* user-propagator
*/
void register_user_propagator(
void* ctx,
std::function<void(void*, unsigned, expr*)>& fixed_eh,
std::function<void(void*)>& push_eh,
std::function<void(void*, unsigned)>& pop_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.c_ptr());
}
void assign_fixed(enode* n, expr* val, literal explain) {
assign_fixed(n, val, 1, &explain);
}
void display(std::ostream & out) const;
void display_unsat_core(std::ostream & out) const;