Пример #1
0
 void euf_arith_mbi_plugin::filter_private_arith(app_ref_vector& avars) {
     arith_util a(m);
     unsigned j = 0;
     obj_hashtable<func_decl> shared;
     for (func_decl* f : m_shared) shared.insert(f);
     for (unsigned i = 0; i < avars.size(); ++i) {
         app* v = avars.get(i);
         if (!shared.contains(v->get_decl()) && 
             v->get_family_id() != a.get_family_id()) {
             avars[j++] = v;
         }
     }
     avars.shrink(j);
 }
Пример #2
0
 bool solve(model& model, app_ref_vector& vars, expr_ref_vector& lits) {
     expr_mark is_var, is_rem;
     if (vars.empty()) {
         return false;
     }
     bool reduced = false;
     for (unsigned i = 0; i < vars.size(); ++i) { 
         is_var.mark(vars[i].get());
     }
     expr_ref tmp(m), t(m), v(m);            
     th_rewriter rw(m);
     for (unsigned i = 0; i < lits.size(); ++i) {
         expr* e = lits[i].get(), *l, *r;
         if (m.is_eq(e, l, r) && reduce_eq(is_var, l, r, v, t)) {
             reduced = true;
             project_plugin::erase(lits, i);
             expr_safe_replace sub(m);
             sub.insert(v, t);
             is_rem.mark(v);
             for (unsigned j = 0; j < lits.size(); ++j) {
                 sub(lits[j].get(), tmp);
                 rw(tmp);
                 lits[j] = tmp;
             }
         }
     }
     if (reduced) {
         unsigned j = 0;
         for (unsigned i = 0; i < vars.size(); ++i) {
             if (!is_rem.is_marked(vars[i].get())) {
                 if (i != j) {
                     vars[j] = vars[i].get();
                 }
                 ++j;
             }
         }
         vars.shrink(j);
     }
     return reduced;
 }