3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-28 19:35:50 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-10-22 11:31:41 -07:00
parent 9bd7df7e19
commit c9900720f8
7 changed files with 39 additions and 15 deletions

View file

@ -221,18 +221,18 @@ namespace q {
return value;
}
expr* model_fixer::invert_arg(app* t, unsigned i, expr* value) {
void model_fixer::invert_arg(app* t, unsigned i, expr* value, expr_ref_vector& lits) {
TRACE("q", tout << "invert-arg " << mk_pp(t, m) << " " << i << " " << mk_pp(value, m) << "\n";);
auto const* md = get_projection_data(t->get_decl(), i);
if (!md)
return m.mk_true();
return;
auto* proj = get_projection(t->get_decl()->get_domain(i));
if (!proj)
return m.mk_true();
return;
unsigned sz = md->values.size();
if (sz <= 1)
return m.mk_true();
return;
//
// md->values are sorted
@ -251,13 +251,18 @@ namespace q {
expr* arg = t->get_arg(i);
if (is_lt(md->values[1]))
return proj->mk_lt(arg, term(1));
if (is_lt(md->values[1])) {
lits.push_back(proj->mk_lt(arg, term(1)));
return;
}
for (unsigned j = 2; j < sz; ++j)
if (is_lt(md->values[j]))
return m.mk_and(proj->mk_le(term(j-1), arg), proj->mk_lt(arg, term(j)));
return proj->mk_le(term(sz-1), arg);
if (is_lt(md->values[j])) {
lits.push_back(proj->mk_le(term(j - 1), arg));
lits.push_back(proj->mk_lt(arg, term(j)));
return;
}
lits.push_back(proj->mk_le(term(sz-1), arg));
}
}