mirror of
https://github.com/Z3Prover/z3
synced 2025-07-31 08:23:17 +00:00
use array interpretations whenever possible for #2378. Also strengthen equality test for lambda
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
3ca32efd18
commit
4deb9d2af2
6 changed files with 124 additions and 100 deletions
|
@ -418,10 +418,7 @@ expr_ref model::cleanup_expr(top_sort& ts, expr* e, unsigned current_partition)
|
|||
// only expand auxiliary definitions that occur once.
|
||||
if (can_inline_def(ts, f)) {
|
||||
fi = get_func_interp(f);
|
||||
for (sort* s : *f) {
|
||||
domain.push_back(s);
|
||||
}
|
||||
new_t = fi->get_array_interp(domain);
|
||||
new_t = fi->get_array_interp(f);
|
||||
TRACE("model", tout << "array interpretation:" << new_t << "\n";);
|
||||
}
|
||||
}
|
||||
|
@ -429,17 +426,6 @@ expr_ref model::cleanup_expr(top_sort& ts, expr* e, unsigned current_partition)
|
|||
if (new_t) {
|
||||
// noop
|
||||
}
|
||||
else if (fi && fi->get_interp()) {
|
||||
f = autil.get_as_array_func_decl(a);
|
||||
expr_ref_vector sargs(m);
|
||||
sort_ref_vector vars(m);
|
||||
svector<symbol> var_names;
|
||||
for (unsigned i = 0; i < f->get_arity(); ++i) {
|
||||
var_names.push_back(symbol(i));
|
||||
vars.push_back(f->get_domain(f->get_arity() - i - 1));
|
||||
}
|
||||
new_t = m.mk_lambda(vars.size(), vars.c_ptr(), var_names.c_ptr(), fi->get_interp());
|
||||
}
|
||||
else if (f->is_skolem() && can_inline_def(ts, f) && (fi = get_func_interp(f)) &&
|
||||
fi->get_interp() && (!ts.partition_ids().find(f, pid) || pid != current_partition)) {
|
||||
var_subst vs(m, false);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue