mirror of
https://github.com/Z3Prover/z3
synced 2025-04-12 12:08:18 +00:00
parent
fce4d2ad90
commit
f4bea58852
|
@ -700,6 +700,18 @@ namespace array {
|
||||||
n->unmark1();
|
n->unmark1();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool solver::check_lambdas() {
|
||||||
|
unsigned num_vars = get_num_vars();
|
||||||
|
for (unsigned i = 0; i < num_vars; i++) {
|
||||||
|
auto* n = var2enode(i);
|
||||||
|
if (a.is_as_array(n->get_expr()) || is_lambda(n->get_expr()))
|
||||||
|
for (euf::enode* p : euf::enode_parents(n))
|
||||||
|
if (!ctx.is_beta_redex(p, n))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool solver::is_shared_arg(euf::enode* r) {
|
bool solver::is_shared_arg(euf::enode* r) {
|
||||||
SASSERT(r->is_root());
|
SASSERT(r->is_root());
|
||||||
for (euf::enode* n : euf::enode_parents(r)) {
|
for (euf::enode* n : euf::enode_parents(r)) {
|
||||||
|
|
|
@ -252,6 +252,8 @@ namespace array {
|
||||||
return p->get_arg(0)->get_root() == n->get_root();
|
return p->get_arg(0)->get_root() == n->get_root();
|
||||||
if (a.is_map(p->get_expr()))
|
if (a.is_map(p->get_expr()))
|
||||||
return true;
|
return true;
|
||||||
|
if (a.is_store(p->get_expr()))
|
||||||
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -108,7 +108,9 @@ namespace array {
|
||||||
if (m_delay_qhead < m_axiom_trail.size())
|
if (m_delay_qhead < m_axiom_trail.size())
|
||||||
return sat::check_result::CR_CONTINUE;
|
return sat::check_result::CR_CONTINUE;
|
||||||
|
|
||||||
|
if (!check_lambdas())
|
||||||
|
return sat::check_result::CR_GIVEUP;
|
||||||
|
|
||||||
// validate_check();
|
// validate_check();
|
||||||
return sat::check_result::CR_DONE;
|
return sat::check_result::CR_DONE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -218,6 +218,7 @@ namespace array {
|
||||||
bool should_prop_upward(var_data const& d) const;
|
bool should_prop_upward(var_data const& d) const;
|
||||||
bool can_beta_reduce(euf::enode* n) const { return can_beta_reduce(n->get_expr()); }
|
bool can_beta_reduce(euf::enode* n) const { return can_beta_reduce(n->get_expr()); }
|
||||||
bool can_beta_reduce(expr* e) const;
|
bool can_beta_reduce(expr* e) const;
|
||||||
|
bool check_lambdas();
|
||||||
|
|
||||||
var_data& get_var_data(euf::enode* n) { return get_var_data(n->get_th_var(get_id())); }
|
var_data& get_var_data(euf::enode* n) { return get_var_data(n->get_th_var(get_id())); }
|
||||||
var_data& get_var_data(theory_var v) { return *m_var_data[v]; }
|
var_data& get_var_data(theory_var v) { return *m_var_data[v]; }
|
||||||
|
|
Loading…
Reference in a new issue