3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-03 18:00:23 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2019-08-02 18:05:04 +08:00
parent 95eb0a0521
commit 3d1c40ce23
12 changed files with 61 additions and 38 deletions

View file

@ -32,6 +32,7 @@ Revision History:
#include "smt/smt_types.h"
#include "util/obj_hashtable.h"
#include "util/map.h"
#include "util/ref.h"
class value_factory;
class proto_model;
@ -146,7 +147,7 @@ namespace smt {
\brief The array values has size equal to the size of the argument \c result in get_dependencies.
It contain the values built for the dependencies.
*/
virtual app * mk_value(model_generator & m, ptr_vector<expr> & values) = 0;
virtual app * mk_value(model_generator & m, expr_ref_vector const & values) = 0;
/**
\brief Return true if it is associated with a fresh value.
*/
@ -161,7 +162,7 @@ namespace smt {
app * m_value;
public:
expr_wrapper_proc(app * v):m_value(v) {}
app * mk_value(model_generator & m, ptr_vector<expr> & values) override { return m_value; }
app * mk_value(model_generator & m, expr_ref_vector const & values) override { return m_value; }
};
class fresh_value_proc : public model_value_proc {
@ -169,7 +170,7 @@ namespace smt {
public:
fresh_value_proc(extra_fresh_value * v):m_value(v) {}
void get_dependencies(buffer<model_value_dependency> & result) override;
app * mk_value(model_generator & m, ptr_vector<expr> & values) override { return to_app(values[0]); }
app * mk_value(model_generator & m, expr_ref_vector const & values) override { return to_app(values[0]); }
bool is_fresh() const override { return true; }
};
@ -183,7 +184,7 @@ namespace smt {
unsigned m_fresh_idx;
obj_map<enode, app *> m_root2value;
ast_ref_vector m_asts;
proto_model * m_model;
ref<proto_model> m_model;
obj_hashtable<func_decl> m_hidden_ufs;
void init_model();
@ -205,6 +206,13 @@ namespace smt {
void top_sort_sources(ptr_vector<enode> const & roots, obj_map<enode, model_value_proc *> const & root2proc, svector<source> & sorted_sources);
struct scoped_reset {
model_generator& mg;
ptr_vector<model_value_proc>& procs;
scoped_reset(model_generator& mg, ptr_vector<model_value_proc>& procs);
~scoped_reset();
};
public:
model_generator(ast_manager & m);
~model_generator();
@ -219,7 +227,7 @@ namespace smt {
proto_model & get_model() { SASSERT(m_model); return *m_model; }
void register_value(expr * val);
ast_manager & get_manager() { return m_manager; }
proto_model * mk_model();
proto_model* mk_model();
obj_map<enode, app *> const & get_root2value() const { return m_root2value; }
app * get_value(enode * n) const;