예제 #1
0
void goal::update(unsigned i, expr * f, proof * pr, expr_dependency * d) {
    SASSERT(proofs_enabled() == (pr != 0 && !m().is_undef_proof(pr)));
    if (m_inconsistent)
        return;
    if (proofs_enabled()) {
        expr_ref out_f(m());
        proof_ref out_pr(m());
        slow_process(true, f, pr, d, out_f, out_pr);
        if (!m_inconsistent) {
            if (m().is_false(out_f)) {
                push_back(out_f, out_pr, d);
            }
            else {
                m().set(m_forms, i, out_f);
                m().set(m_proofs, i, out_pr);
                if (unsat_core_enabled()) 
                    m().set(m_dependencies, i, d);
            }
        }
    }
    else {
        quick_process(true, f, d);
        if (!m_inconsistent) {
            if (m().is_false(f)) {
                push_back(f, 0, d);
            }
            else {
                m().set(m_forms, i, f);
                if (unsat_core_enabled()) 
                    m().set(m_dependencies, i, d);
            }
        }
    }
}
예제 #2
0
void assertion_set::update(unsigned i, expr * f, proof * pr) {
    SASSERT(m().proofs_enabled() == (pr != 0 && !m().is_undef_proof(pr)));
    if (m_inconsistent)
        return;
    if (m().proofs_enabled()) {
        expr_ref out_f(m());
        proof_ref out_pr(m());
        slow_process(true, f, pr, out_f, out_pr);
        if (!m_inconsistent) {
            if (m().is_false(out_f)) {
                push_back(out_f, out_pr);
            }
            else {
                m().set(m_forms, i, out_f);
                m().set(m_proofs, i, out_pr);
            }
        }
    }
    else {
        quick_process(true, f);
        if (!m_inconsistent) {
            if (m().is_false(f))
                push_back(f, 0);
            else
                m().set(m_forms, i, f);
        }
    }
}
예제 #3
0
void assertion_stack::update(unsigned i, expr * f, proof * pr, expr_dependency * d) {
    SASSERT(i >= m_form_qhead);
    SASSERT(proofs_enabled() == (pr != 0 && !m().is_undef_proof(pr)));
    if (m_inconsistent)
        return;
    if (proofs_enabled()) {
        expr_ref out_f(m());
        proof_ref out_pr(m());
        slow_process(true, f, pr, d, out_f, out_pr);
        if (!m_inconsistent) {
            if (m().is_false(out_f)) {
                push_back(out_f, out_pr, d);
            }
            else {
                m().inc_ref(out_f);
                m().dec_ref(m_forms[i]);
                m_forms[i] = out_f;

                m().inc_ref(out_pr);
                m().dec_ref(m_proofs[i]);
                m_proofs[i] = out_pr;

                if (unsat_core_enabled()) {
                    m().inc_ref(d);
                    m().dec_ref(m_deps[i]);
                    m_deps[i] = d;
                }
            }
        }
    }
    else {
        quick_process(true, f, d);
        if (!m_inconsistent) {
            if (m().is_false(f)) {
                push_back(f, 0, d);
            }
            else {
                m().inc_ref(f);
                m().dec_ref(m_forms[i]);
                m_forms[i] = f;

                if (unsat_core_enabled()) {
                    m().inc_ref(d);
                    m().dec_ref(m_deps[i]);
                    m_deps[i] = d;
                }
            }
        }
    }
}
예제 #4
0
void goal::slow_process(expr * f, proof * pr, expr_dependency * d) {
    expr_ref out_f(m());
    proof_ref out_pr(m());
    slow_process(false, f, pr, d, out_f, out_pr);
}
예제 #5
0
void assertion_stack::slow_process(expr * f, proof * pr, expr_dependency * d) {
    expr_ref out_f(m());
    proof_ref out_pr(m());
    slow_process(false, f, pr, d, out_f, out_pr);
}
예제 #6
0
void assertion_set::slow_process(expr * f, proof * pr) {
    expr_ref out_f(m());
    proof_ref out_pr(m());
    slow_process(false, f, pr, out_f, out_pr);
}