3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-19 12:23:38 +00:00
This commit is contained in:
Nikolaj Bjorner 2022-04-02 01:27:56 -07:00
parent 229ea569f1
commit 2fedcbd41e
3 changed files with 15 additions and 1 deletions

View file

@ -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();

View file

@ -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);

View file

@ -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;
} }