Ejemplo n.º 1
0
 void subst(contains_app& x, rational const& vl, expr_ref& fml, expr_ref* def) override {
     app_ref c(m_bv.mk_numeral(vl, m_bv.get_bv_size(x.x())), m);
     m_replace.apply_substitution(x.x(), c, fml);
     if (def) {
         *def = m_bv.mk_numeral(vl, m_bv.get_bv_size(x.x()));
     }
 }
Ejemplo n.º 2
0
 bool project(contains_app& x, model_ref& model, expr_ref& fml) override {
     model_evaluator model_eval(*model);
     expr_ref val_x(m);
     rational val(0);
     unsigned bv_size;
     model_eval(x.x(), val_x);
     m_bv.is_numeral(val_x, val, bv_size);
     subst(x, val, fml, nullptr);
     return true;
 }
Ejemplo n.º 3
0
 bool add_atom(contains_app& contains_x, bool is_pos, app* a) {
     app* x = contains_x.x();
     SASSERT(contains_x(a));
     if (m_mark.is_marked(a)) {
         return true;
     }
     m_mark.mark(a, true);
     func_decl* f = a->get_decl();
     if (m_util.is_recognizer(f) && a->get_arg(0) == x) {
         m_recognizers.push_back(a);
         TRACE("quant_elim", tout << "add recognizer:" << mk_pp(a, m) << "\n";);
Ejemplo n.º 4
0
 void assign(contains_app & x,expr * fml,const rational & v) {
     SASSERT(v.is_unsigned());
     eq_atoms& eqs = get_eqs(x.x(), fml);            
     unsigned uv = v.get_unsigned();
     uint64 domain_size;
     if (is_small_domain(x, eqs, domain_size)) {
         SASSERT(v < rational(domain_size, rational::ui64()));
         assign_small_domain(x, eqs, uv);
     }
     else {
         assign_large_domain(x, eqs, uv);
     }
 }
Ejemplo n.º 5
0
 bool get_num_branches(contains_app & x,expr * fml,rational & num_branches) {
     if (!update_eqs(x, fml)) {
         return false;
     }
     eq_atoms& eqs = get_eqs(x.x(), fml);
     uint64 domain_size;
     if (is_small_domain(x, eqs, domain_size)) {
         num_branches = rational(domain_size, rational::ui64());
     }
     else {
         num_branches = rational(eqs.num_eqs() + 1);
     }
     return true;
 }
Ejemplo n.º 6
0
 void subst(contains_app & x,const rational & v,expr_ref & fml, expr_ref* def) {
     SASSERT(v.is_unsigned());
     eq_atoms& eqs = get_eqs(x.x(), fml);           
     unsigned uv = v.get_unsigned();
     uint64 domain_size;
     if (is_small_domain(x, eqs, domain_size)) {
         SASSERT(uv < domain_size);
         subst_small_domain(x, eqs, uv, fml);
     }
     else {
         subst_large_domain(x, eqs, uv, fml);
     }
     if (def) {
         *def = 0; // TBD
     }
 }
Ejemplo n.º 7
0
 bool get_num_branches(contains_app& x, expr* fml, rational& nb) override {
     unsigned sz = m_bv.get_bv_size(x.x());
     nb = power(rational(2), sz);
     return true;
 }