Exemplo n.º 1
0
 void flatten_or(expr_ref_vector& result) {
     ast_manager& m = result.get_manager();
     expr* e1, *e2, *e3;
     for (unsigned i = 0; i < result.size(); ++i) {
         if (m.is_or(result[i].get())) {
             app* a = to_app(result[i].get());
             unsigned num_args = a->get_num_args();
             for (unsigned j = 0; j < num_args; ++j) {
                 result.push_back(a->get_arg(j));
             }
             result[i] = result.back();
             result.pop_back();
             --i;
         }
         else if (m.is_not(result[i].get(), e1) && m.is_not(e1, e2)) {
             result[i] = e2;
             --i;
         }
         else if (m.is_not(result[i].get(), e1) && m.is_and(e1)) {
             app* a = to_app(e1);
             unsigned num_args = a->get_num_args();
             for (unsigned j = 0; j < num_args; ++j) {
                 result.push_back(m.mk_not(a->get_arg(j)));
             }
             result[i] = result.back();
             result.pop_back();
             --i;                
         }
         else if (m.is_implies(result[i].get(),e2,e3)) {
             result.push_back(e3);
             result[i] = m.mk_not(e2);
             --i;
         }
         else if (m.is_false(result[i].get()) ||
                  (m.is_not(result[i].get(), e1) &&
                   m.is_true(e1))) {
             result[i] = result.back();
             result.pop_back();
             --i;                
         }
         else if (m.is_true(result[i].get()) ||
                  (m.is_not(result[i].get(), e1) &&
                   m.is_false(e1))) {
             result.reset();
             result.push_back(m.mk_true());
             return;
         }
     }        
 }
Exemplo n.º 2
0
void sym_mux::filter_non_model_lits(expr_ref_vector & vect) const
{
    unsigned i = 0;
    while (i < vect.size()) {
        if (!has_nonmodel_symbol(vect[i].get())) {
            i++;
            continue;
        }
        vect[i] = vect.back();
        vect.pop_back();
    }
}
Exemplo n.º 3
0
static void test_cs(app* x, expr_ref_vector& c, vector<expr_ref_vector> const& cs) {
    if (c.size() == cs.size()) {
        test_c(x, c);
        return;
    }
    expr_ref_vector const& c1 = cs[c.size()];
    for (unsigned i = 0; i < c1.size(); ++i) {
        c.push_back(c1[i]);
        test_cs(x, c, cs);
        c.pop_back();
    }
}
Exemplo n.º 4
0
void sym_mux::filter_idx(expr_ref_vector & vect, unsigned idx) const
{
    unsigned i = 0;
    while (i < vect.size()) {
        expr* e = vect[i].get();
        if (contains(e, idx) && is_homogenous_formula(e, idx)) {
            i++;
        } else {
            //we don't allow mixing states inside vector elements
            SASSERT(!contains(e, idx));
            vect[i] = vect.back();
            vect.pop_back();
        }
    }
}
Exemplo n.º 5
0
void project_plugin::erase(expr_ref_vector& lits, unsigned& i) {
    lits[i] = lits.back();
    lits.pop_back();
    --i;
}