Example #1
0
    static void tst10() {
        sat_solver<gate_extension> s;
        
        literal l1 = s.mk_var();
        literal l2 = s.mk_var();
        literal l3 = s.mk_var();
        
        s.push_scope();
        s.assign(l1, mk_axiom());
        s.push_scope();
        literal l4 = s.mk_var();
        literal l5 = s.mk_var();
        literal l6 = s.mk_iff(l4, l5);
        literal l7 = s.mk_var();
        literal l8 = s.mk_or(l6, l7);
        s.assign(l8, mk_axiom());
        s.mk_transient_clause(~l8, l3);
        s.mk_transient_clause(~l8, l2);
        s.mk_transient_clause(literal_vector(~l3, ~l1, ~l2));
        SASSERT(s.inconsistent());
#ifdef  Z3DEBUG
        bool r = 
#endif
            s.resolve_conflict();
        SASSERT(r);
        SASSERT(s.m_scope_lvl == 1);
        s.pop_scope(1);
        SASSERT(s.m_ref_count[l4.var()] > 0);
        SASSERT(s.m_ref_count[l5.var()] > 0);
        SASSERT(s.m_ref_count[l6.var()] > 0);
        SASSERT(s.m_ref_count[l7.var()] > 0);
        SASSERT(s.m_ref_count[l8.var()] > 0);
        s.push_scope();
        s.assign(~l1, mk_axiom());
        s.push_scope();
        s.assign(l5, mk_axiom());
        s.mk_transient_clause(~l5, ~l4);
        s.propagate();
        SASSERT(s.get_assignment(l6) == l_false);
        SASSERT(s.get_assignment(l8) == l_undef);
#ifdef  Z3DEBUG
        s.del_learned_clauses();
        SASSERT(s.m_ref_count[l7.var()] == 0);
        SASSERT(s.m_ref_count[l8.var()] ==  0);
        SASSERT(s.m_ref_count[l4.var()] > 0);
        SASSERT(s.m_ref_count[l5.var()] > 0);
        SASSERT(s.m_ref_count[l6.var()] > 0);
#endif 
        s.mk_transient_clause(l6, l3);
        s.mk_transient_clause(l6, l2);
        s.mk_transient_clause(literal_vector(~l3, l1, ~l2));
        SASSERT(s.inconsistent());
#ifdef  Z3DEBUG
        r = 
#endif
            s.resolve_conflict();
        SASSERT(r);
    }
Example #2
0
 void context::display(std::ostream& out, b_justification j) const {
     switch (j.get_kind()) {
     case b_justification::AXIOM:
         out << "axiom";
         break;
     case b_justification::BIN_CLAUSE: {
         literal l2 = j.get_literal();
         out << "bin-clause ";
         display_literal(out, l2);
         break;
     }
     case b_justification::CLAUSE: {
         clause * cls = j.get_clause();
         out << "clause ";
         if (cls) out << literal_vector(cls->get_num_literals(), cls->begin());
         break;
     }
     case b_justification::JUSTIFICATION: {
         out << "justification " << j.get_justification()->get_from_theory() << ": ";
         literal_vector lits;
         const_cast<conflict_resolution&>(*m_conflict_resolution).justification2literals(j.get_justification(), lits);
         display_literals(out, lits);
         break;
     }
     default:
         UNREACHABLE();
         break;
     }
     out << "\n";
 }