예제 #1
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);
     }
 }
예제 #2
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
     }
 }