Пример #1
0
 bool is_target_core(expr * n, rational & u) {
     if (!is_uninterp_const(n))
         return false;
     rational l; bool s;
     if (m_bm.has_lower(n, l, s) &&
         m_bm.has_upper(n, u, s) &&  
         l.is_zero() &&
         !u.is_neg() && 
         u.get_num_bits() <= m_max_bits) {
         
         return true;
     }
     return false;
 }
Пример #2
0
 unsigned context::scoped_state::add(expr* f, rational const& w, symbol const& id) {
     if (w.is_neg()) {
         throw default_exception("Negative weight supplied. Weight should be positive");
     }
     if (w.is_zero()) {
         throw default_exception("Zero weight supplied. Weight should be positive");
     }
     if (!m.is_bool(f)) {
         throw default_exception("Soft constraint should be Boolean");
     }
     if (!m_indices.contains(id)) {
         m_objectives.push_back(objective(m, id));
         m_indices.insert(id, m_objectives.size() - 1);
     }
     SASSERT(m_indices.contains(id));        
     unsigned idx = m_indices[id];
     m_objectives[idx].m_terms.push_back(f);
     m_objectives[idx].m_weights.push_back(w);
     m_objectives_term_trail.push_back(idx);
     return idx;
 }