mirror of
https://github.com/Z3Prover/z3
synced 2025-06-15 18:36:16 +00:00
parent
26af694d2c
commit
e1f71d4932
4 changed files with 24 additions and 13 deletions
|
@ -311,6 +311,7 @@ void cmd_context::insert_macro(symbol const& s, unsigned arity, sort*const* doma
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmd_context::erase_macro(symbol const& s) {
|
void cmd_context::erase_macro(symbol const& s) {
|
||||||
|
std::cout << "erase " << s << "\n";
|
||||||
macro_decls decls;
|
macro_decls decls;
|
||||||
VERIFY(m_macros.find(s, decls));
|
VERIFY(m_macros.find(s, decls));
|
||||||
decls.erase_last(m());
|
decls.erase_last(m());
|
||||||
|
@ -501,6 +502,7 @@ cmd_context::cmd_context(bool main_ctx, ast_manager * m, symbol const & l):
|
||||||
install_basic_cmds(*this);
|
install_basic_cmds(*this);
|
||||||
install_ext_basic_cmds(*this);
|
install_ext_basic_cmds(*this);
|
||||||
install_core_tactic_cmds(*this);
|
install_core_tactic_cmds(*this);
|
||||||
|
m_mcs.push_back(nullptr);
|
||||||
SASSERT(m != 0 || !has_manager());
|
SASSERT(m != 0 || !has_manager());
|
||||||
if (m_main_ctx) {
|
if (m_main_ctx) {
|
||||||
set_verbose_stream(diagnostic_stream());
|
set_verbose_stream(diagnostic_stream());
|
||||||
|
@ -516,7 +518,7 @@ cmd_context::~cmd_context() {
|
||||||
finalize_tactic_cmds();
|
finalize_tactic_cmds();
|
||||||
finalize_probes();
|
finalize_probes();
|
||||||
reset(true);
|
reset(true);
|
||||||
m_mc0 = nullptr;
|
m_mcs.reset();
|
||||||
m_solver = nullptr;
|
m_solver = nullptr;
|
||||||
m_check_sat_result = nullptr;
|
m_check_sat_result = nullptr;
|
||||||
}
|
}
|
||||||
|
@ -889,21 +891,22 @@ void cmd_context::insert(symbol const & s, object_ref * r) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmd_context::model_add(symbol const & s, unsigned arity, sort *const* domain, expr * t) {
|
void cmd_context::model_add(symbol const & s, unsigned arity, sort *const* domain, expr * t) {
|
||||||
if (!m_mc0.get()) m_mc0 = alloc(generic_model_converter, m(), "cmd_context");
|
if (!mc0()) m_mcs.set(m_mcs.size()-1, alloc(generic_model_converter, m(), "cmd_context"));
|
||||||
if (m_solver.get() && !m_solver->mc0()) m_solver->set_model_converter(m_mc0.get());
|
if (m_solver.get() && !m_solver->mc0()) m_solver->set_model_converter(mc0());
|
||||||
func_decl_ref fn(m().mk_func_decl(s, arity, domain, m().get_sort(t)), m());
|
func_decl_ref fn(m().mk_func_decl(s, arity, domain, m().get_sort(t)), m());
|
||||||
func_decls & fs = m_func_decls.insert_if_not_there(s, func_decls());
|
func_decls & fs = m_func_decls.insert_if_not_there(s, func_decls());
|
||||||
fs.insert(m(), fn);
|
fs.insert(m(), fn);
|
||||||
VERIFY(fn->get_range() == m().get_sort(t));
|
VERIFY(fn->get_range() == m().get_sort(t));
|
||||||
m_mc0->add(fn, t);
|
mc0()->add(fn, t);
|
||||||
if (!m_global_decls)
|
if (!m_global_decls)
|
||||||
m_func_decls_stack.push_back(sf_pair(s, fn));
|
m_func_decls_stack.push_back(sf_pair(s, fn));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void cmd_context::model_del(func_decl* f) {
|
void cmd_context::model_del(func_decl* f) {
|
||||||
if (!m_mc0.get()) m_mc0 = alloc(generic_model_converter, m(), "cmd_context");
|
if (!mc0()) m_mcs.set(m_mcs.size() - 1, alloc(generic_model_converter, m(), "cmd_context"));
|
||||||
if (m_solver.get() && !m_solver->mc0()) m_solver->set_model_converter(m_mc0.get());
|
if (m_solver.get() && !m_solver->mc0()) m_solver->set_model_converter(mc0());
|
||||||
m_mc0->hide(f);
|
mc0()->hide(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1295,7 +1298,7 @@ void cmd_context::reset(bool finalize) {
|
||||||
reset_func_decls();
|
reset_func_decls();
|
||||||
restore_assertions(0);
|
restore_assertions(0);
|
||||||
m_solver = nullptr;
|
m_solver = nullptr;
|
||||||
m_mc0 = nullptr;
|
m_mcs.reset();
|
||||||
m_scopes.reset();
|
m_scopes.reset();
|
||||||
m_opt = nullptr;
|
m_opt = nullptr;
|
||||||
m_pp_env = nullptr;
|
m_pp_env = nullptr;
|
||||||
|
@ -1369,6 +1372,8 @@ void cmd_context::push() {
|
||||||
s.m_assertions_lim = m_assertions.size();
|
s.m_assertions_lim = m_assertions.size();
|
||||||
if (!m_global_decls)
|
if (!m_global_decls)
|
||||||
pm().push();
|
pm().push();
|
||||||
|
ast_translation tr(m(), m());
|
||||||
|
m_mcs.push_back(m_mcs.back() ? m_mcs.back()->copy(tr) : nullptr);
|
||||||
unsigned timeout = m_params.m_timeout;
|
unsigned timeout = m_params.m_timeout;
|
||||||
m().limit().push(m_params.rlimit());
|
m().limit().push(m_params.rlimit());
|
||||||
cancel_eh<reslimit> eh(m().limit());
|
cancel_eh<reslimit> eh(m().limit());
|
||||||
|
@ -1494,6 +1499,7 @@ void cmd_context::pop(unsigned n) {
|
||||||
restore_aux_pdecls(s.m_aux_pdecls_lim);
|
restore_aux_pdecls(s.m_aux_pdecls_lim);
|
||||||
restore_assertions(s.m_assertions_lim);
|
restore_assertions(s.m_assertions_lim);
|
||||||
restore_psort_inst(s.m_psort_inst_stack_lim);
|
restore_psort_inst(s.m_psort_inst_stack_lim);
|
||||||
|
m_mcs.shrink(m_mcs.size() - n);
|
||||||
m_scopes.shrink(new_lvl);
|
m_scopes.shrink(new_lvl);
|
||||||
if (!m_global_decls)
|
if (!m_global_decls)
|
||||||
pm().pop(n);
|
pm().pop(n);
|
||||||
|
@ -1655,7 +1661,7 @@ void cmd_context::display_dimacs() {
|
||||||
|
|
||||||
void cmd_context::display_model(model_ref& mdl) {
|
void cmd_context::display_model(model_ref& mdl) {
|
||||||
if (mdl) {
|
if (mdl) {
|
||||||
if (m_mc0) (*m_mc0)(mdl);
|
if (mc0()) (*mc0())(mdl);
|
||||||
model_params p;
|
model_params p;
|
||||||
if (p.compact()) mdl->compress();
|
if (p.compact()) mdl->compress();
|
||||||
add_declared_functions(*mdl);
|
add_declared_functions(*mdl);
|
||||||
|
|
|
@ -84,6 +84,7 @@ public:
|
||||||
bool empty() const { return !m_decls || m_decls->empty(); }
|
bool empty() const { return !m_decls || m_decls->empty(); }
|
||||||
expr* find(unsigned arity, sort *const* domain) const;
|
expr* find(unsigned arity, sort *const* domain) const;
|
||||||
void erase_last(ast_manager& m);
|
void erase_last(ast_manager& m);
|
||||||
|
macro_decl const& last() const { return m_decls->back(); }
|
||||||
vector<macro_decl>::iterator begin() const { return m_decls->begin(); }
|
vector<macro_decl>::iterator begin() const { return m_decls->begin(); }
|
||||||
vector<macro_decl>::iterator end() const { return m_decls->end(); }
|
vector<macro_decl>::iterator end() const { return m_decls->end(); }
|
||||||
};
|
};
|
||||||
|
@ -197,7 +198,8 @@ protected:
|
||||||
|
|
||||||
static std::ostringstream g_error_stream;
|
static std::ostringstream g_error_stream;
|
||||||
|
|
||||||
generic_model_converter_ref m_mc0;
|
generic_model_converter* mc0() { return m_mcs.back(); }
|
||||||
|
sref_vector<generic_model_converter> m_mcs;
|
||||||
ast_manager * m_manager;
|
ast_manager * m_manager;
|
||||||
bool m_own_manager;
|
bool m_own_manager;
|
||||||
bool m_manager_initialized;
|
bool m_manager_initialized;
|
||||||
|
@ -449,7 +451,7 @@ public:
|
||||||
|
|
||||||
dictionary<macro_decls> const & get_macros() const { return m_macros; }
|
dictionary<macro_decls> const & get_macros() const { return m_macros; }
|
||||||
|
|
||||||
model_converter* get_model_converter() { return m_mc0.get(); }
|
model_converter* get_model_converter() { return mc0(); }
|
||||||
|
|
||||||
bool is_model_available(model_ref& md) const;
|
bool is_model_available(model_ref& md) const;
|
||||||
|
|
||||||
|
|
|
@ -104,7 +104,7 @@ void generic_model_converter::display(std::ostream & out) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
model_converter * generic_model_converter::translate(ast_translation & translator) {
|
generic_model_converter * generic_model_converter::copy(ast_translation & translator) {
|
||||||
ast_manager& to = translator.to();
|
ast_manager& to = translator.to();
|
||||||
generic_model_converter * res = alloc(generic_model_converter, to, m_orig.c_str());
|
generic_model_converter * res = alloc(generic_model_converter, to, m_orig.c_str());
|
||||||
for (entry const& e : m_entries) {
|
for (entry const& e : m_entries) {
|
||||||
|
@ -123,6 +123,7 @@ model_converter * generic_model_converter::translate(ast_translation & translato
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void generic_model_converter::set_env(ast_pp_util* visitor) {
|
void generic_model_converter::set_env(ast_pp_util* visitor) {
|
||||||
if (!visitor) {
|
if (!visitor) {
|
||||||
m_env = nullptr;
|
m_env = nullptr;
|
||||||
|
|
|
@ -58,7 +58,9 @@ public:
|
||||||
|
|
||||||
void display(std::ostream & out) override;
|
void display(std::ostream & out) override;
|
||||||
|
|
||||||
model_converter * translate(ast_translation & translator) override;
|
model_converter * translate(ast_translation & translator) override { return copy(translator); }
|
||||||
|
|
||||||
|
generic_model_converter* copy(ast_translation & translator);
|
||||||
|
|
||||||
void set_env(ast_pp_util* visitor) override;
|
void set_env(ast_pp_util* visitor) override;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue