mirror of
https://github.com/Z3Prover/z3
synced 2025-07-23 20:58:54 +00:00
delay internalize (#4714)
* adding array solver Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * use default in model construction Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * debug delay internalization Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * bv Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * arrays Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * get rid of implied values and bounds Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * redo egraph * remove out Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * remove files Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
25724401cf
commit
367e5fdd52
60 changed files with 1343 additions and 924 deletions
|
@ -132,6 +132,7 @@ namespace euf {
|
|||
SASSERT(m_egraph.find(e)->bool_var() == v);
|
||||
return lit;
|
||||
}
|
||||
TRACE("euf", tout << "attach " << v << " " << mk_bounded_pp(e, m) << "\n";);
|
||||
m_var2expr[v] = e;
|
||||
m_var_trail.push_back(v);
|
||||
enode* n = m_egraph.find(e);
|
||||
|
@ -299,20 +300,18 @@ namespace euf {
|
|||
if (m.is_ite(n->get_expr()))
|
||||
return true;
|
||||
|
||||
theory_id th_id = null_theory_id;
|
||||
for (auto p : euf::enode_th_vars(n)) {
|
||||
if (th_id == null_theory_id)
|
||||
th_id = p.get_id();
|
||||
else
|
||||
return true;
|
||||
}
|
||||
if (th_id == null_theory_id)
|
||||
return false;
|
||||
|
||||
// the variable is shared if the equivalence class of n
|
||||
// contains a parent application.
|
||||
|
||||
for (euf::enode* parent : euf::enode_parents(n)) {
|
||||
family_id th_id = m.get_basic_family_id();
|
||||
for (auto p : euf::enode_th_vars(n)) {
|
||||
if (m.get_basic_family_id() != p.get_id()) {
|
||||
th_id = p.get_id();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (enode* parent : euf::enode_parents(n)) {
|
||||
app* p = to_app(parent->get_expr());
|
||||
family_id fid = p->get_family_id();
|
||||
if (fid != th_id && fid != m.get_basic_family_id())
|
||||
|
@ -345,9 +344,13 @@ namespace euf {
|
|||
// the theories of (array int int) and (array (array int int) int).
|
||||
// Remark: The inconsistency is not going to be detected if they are
|
||||
// not marked as shared.
|
||||
return true;
|
||||
// TODO
|
||||
// return get_theory(th_id)->is_shared(l->get_var());
|
||||
|
||||
for (auto p : euf::enode_th_vars(n))
|
||||
if (fid2solver(p.get_id())->is_shared(p.get_var()))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
expr_ref solver::mk_eq(expr* e1, expr* e2) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue