mirror of
https://github.com/Z3Prover/z3
synced 2025-07-19 10:52:02 +00:00
* fixing #4670 Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * init Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * arrays Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * arrays Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * arrays Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
ee00542e76
commit
cfa7c733db
48 changed files with 1591 additions and 359 deletions
|
@ -48,7 +48,7 @@ namespace euf {
|
|||
deps.insert(n, nullptr);
|
||||
continue;
|
||||
}
|
||||
auto* mb = get_solver(n->get_owner());
|
||||
auto* mb = get_solver(n->get_expr());
|
||||
if (mb)
|
||||
mb->add_dep(n, deps);
|
||||
else
|
||||
|
@ -56,13 +56,13 @@ namespace euf {
|
|||
}
|
||||
}
|
||||
|
||||
void solver::dependencies2values(deps_t& deps, expr_ref_vector& values, model_ref const& mdl) {
|
||||
void solver::dependencies2values(deps_t& deps, expr_ref_vector& values, model_ref& mdl) {
|
||||
user_sort_factory user_sort(m);
|
||||
for (enode* n : deps.top_sorted()) {
|
||||
unsigned id = n->get_root_id();
|
||||
if (values.get(id, nullptr))
|
||||
continue;
|
||||
expr* e = n->get_owner();
|
||||
expr* e = n->get_expr();
|
||||
values.reserve(id + 1);
|
||||
if (m.is_bool(e) && is_uninterp_const(e) && mdl->get_const_interp(to_app(e)->get_decl())) {
|
||||
values.set(id, mdl->get_const_interp(to_app(e)->get_decl()));
|
||||
|
@ -96,13 +96,13 @@ namespace euf {
|
|||
}
|
||||
auto* mb = get_solver(e);
|
||||
if (mb)
|
||||
mb->add_value(n, values);
|
||||
mb->add_value(n, *mdl, values);
|
||||
else if (m.is_uninterp(m.get_sort(e))) {
|
||||
expr* v = user_sort.get_fresh_value(m.get_sort(e));
|
||||
values.set(id, v);
|
||||
}
|
||||
else if ((mb = get_solver(m.get_sort(e))))
|
||||
mb->add_value(n, values);
|
||||
mb->add_value(n, *mdl, values);
|
||||
else {
|
||||
IF_VERBOSE(1, verbose_stream() << "no model values created for " << mk_pp(e, m) << "\n");
|
||||
}
|
||||
|
@ -112,7 +112,7 @@ namespace euf {
|
|||
void solver::values2model(deps_t const& deps, expr_ref_vector const& values, model_ref& mdl) {
|
||||
ptr_vector<expr> args;
|
||||
for (enode* n : deps.top_sorted()) {
|
||||
expr* e = n->get_owner();
|
||||
expr* e = n->get_expr();
|
||||
if (!is_app(e))
|
||||
continue;
|
||||
app* a = to_app(e);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue