mirror of
https://github.com/Z3Prover/z3
synced 2025-08-03 18:00:23 +00:00
parent
95eb0a0521
commit
3d1c40ce23
12 changed files with 61 additions and 38 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue