3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-10 19:27:06 +00:00
This commit is contained in:
Nikolaj Bjorner 2022-10-13 15:22:19 +02:00
parent 2449ba93c5
commit 9bf5e3f5fc
2 changed files with 25 additions and 10 deletions

View file

@ -1020,12 +1020,7 @@ namespace mbp {
vector<expr_ref_vector> result;
expr_ref_vector pinned(m);
obj_map<expr, unsigned> pid;
model::scoped_model_completion _smc(mdl, true);
for (term *t : m_tg.m_terms) {
expr* a = t->get_expr();
if (!is_app(a)) continue;
if (m.is_bool(a) && !include_bool) continue;
expr_ref val = mdl(a);
auto insert_val = [&](expr* a, expr* val) {
unsigned p = 0;
// NB. works for simple domains Integers, Rationals,
// but not for algebraic numerals.
@ -1036,7 +1031,18 @@ namespace mbp {
result.push_back(expr_ref_vector(m));
}
result[p].push_back(a);
};
model::scoped_model_completion _smc(mdl, true);
for (term *t : m_tg.m_terms) {
expr* a = t->get_expr();
if (!is_app(a))
continue;
if (m.is_bool(a) && !include_bool)
continue;
expr_ref val = mdl(a);
insert_val(a, val);
}
return result;
}
@ -1238,7 +1244,13 @@ namespace mbp {
for (expr* e : vec) term2pid.insert(e, id);
++id;
}
auto partition_of = [&](expr* e) { return partitions[term2pid[e]]; };
expr_ref_vector empty(m);
auto partition_of = [&](expr* e) {
unsigned pid;
if (!term2pid.find(e, pid))
return empty;
return partitions[pid];
};
auto in_table = [&](expr* a, expr* b) {
return diseqs.contains(pair_t(a, b));
};

View file

@ -74,10 +74,13 @@ class propagate_values_tactic : public tactic {
void push_result(expr * new_curr, proof * new_pr) {
if (m_goal->proofs_enabled()) {
proof * pr = m_goal->pr(m_idx);
new_pr = m.mk_modus_ponens(pr, new_pr);
proof* pr = m_goal->pr(m_idx);
new_pr = m.mk_modus_ponens(pr, new_pr);
}
else
new_pr = nullptr;
expr_dependency_ref new_d(m);
if (m_goal->unsat_core_enabled()) {
new_d = m_goal->dep(m_idx);