mirror of
https://github.com/Z3Prover/z3
synced 2025-06-19 12:23:38 +00:00
This commit is contained in:
parent
229ea569f1
commit
2fedcbd41e
3 changed files with 15 additions and 1 deletions
|
@ -63,8 +63,16 @@ namespace euf {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void solver::save_model(model_ref& mdl) {
|
||||||
|
m_qmodel = mdl;
|
||||||
|
}
|
||||||
|
|
||||||
void solver::update_model(model_ref& mdl) {
|
void solver::update_model(model_ref& mdl) {
|
||||||
TRACE("model", tout << "create model\n";);
|
TRACE("model", tout << "create model\n";);
|
||||||
|
if (m_qmodel) {
|
||||||
|
mdl = m_qmodel;
|
||||||
|
return;
|
||||||
|
}
|
||||||
mdl->reset_eval_cache();
|
mdl->reset_eval_cache();
|
||||||
for (auto* mb : m_solvers)
|
for (auto* mb : m_solvers)
|
||||||
mb->init_model();
|
mb->init_model();
|
||||||
|
|
|
@ -154,6 +154,7 @@ namespace euf {
|
||||||
// model building
|
// model building
|
||||||
expr_ref_vector m_values;
|
expr_ref_vector m_values;
|
||||||
obj_map<expr, enode*> m_values2root;
|
obj_map<expr, enode*> m_values2root;
|
||||||
|
model_ref m_qmodel;
|
||||||
bool include_func_interp(func_decl* f);
|
bool include_func_interp(func_decl* f);
|
||||||
void register_macros(model& mdl);
|
void register_macros(model& mdl);
|
||||||
void dependencies2values(user_sort& us, deps_t& deps, model_ref& mdl);
|
void dependencies2values(user_sort& us, deps_t& deps, model_ref& mdl);
|
||||||
|
@ -395,6 +396,7 @@ namespace euf {
|
||||||
relevancy& get_relevancy() { return m_relevancy; }
|
relevancy& get_relevancy() { return m_relevancy; }
|
||||||
|
|
||||||
// model construction
|
// model construction
|
||||||
|
void save_model(model_ref& mdl);
|
||||||
void update_model(model_ref& mdl);
|
void update_model(model_ref& mdl);
|
||||||
obj_map<expr, enode*> const& values2root();
|
obj_map<expr, enode*> const& values2root();
|
||||||
void model_updated(model_ref& mdl);
|
void model_updated(model_ref& mdl);
|
||||||
|
|
|
@ -48,6 +48,7 @@ namespace q {
|
||||||
lbool mbqi::operator()() {
|
lbool mbqi::operator()() {
|
||||||
lbool result = l_true;
|
lbool result = l_true;
|
||||||
m_model = nullptr;
|
m_model = nullptr;
|
||||||
|
ctx.save_model(m_model);
|
||||||
m_instantiations.reset();
|
m_instantiations.reset();
|
||||||
for (sat::literal lit : m_qs.m_universal) {
|
for (sat::literal lit : m_qs.m_universal) {
|
||||||
quantifier* q = to_quantifier(ctx.bool_var2expr(lit.var()));
|
quantifier* q = to_quantifier(ctx.bool_var2expr(lit.var()));
|
||||||
|
@ -73,6 +74,9 @@ namespace q {
|
||||||
m_qs.add_clause(~qlit, ~lit);
|
m_qs.add_clause(~qlit, ~lit);
|
||||||
}
|
}
|
||||||
m_instantiations.reset();
|
m_instantiations.reset();
|
||||||
|
if (result != l_true)
|
||||||
|
m_model = nullptr;
|
||||||
|
ctx.save_model(m_model);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue