3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-05-05 23:05:46 +00:00

first eufi example running

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2018-06-11 23:28:50 -07:00 committed by Arie Gurfinkel
parent 2288931b46
commit 74621e0b7d
26 changed files with 80 additions and 105 deletions

View file

@ -64,7 +64,6 @@ struct mus::imp {
}
void add_assumption(expr* lit) {
SASSERT(is_literal(lit));
m_assumptions.push_back(lit);
}
@ -78,17 +77,9 @@ struct mus::imp {
return get_mus1(mus);
}
lbool get_mus(ptr_vector<expr>& mus) {
mus.reset();
expr_ref_vector result(m);
lbool r = get_mus(result);
mus.append(result.size(), result.c_ptr());
return r;
}
lbool get_mus1(expr_ref_vector& mus) {
ptr_vector<expr> unknown(m_lit2expr.size(), m_lit2expr.c_ptr());
ptr_vector<expr> core_exprs;
expr_ref_vector core_exprs(m);
TRACE("mus", m_solver.display(tout););
while (!unknown.empty()) {
IF_VERBOSE(12, verbose_stream() << "(mus reducing core: " << unknown.size() << " new core: " << mus.size() << ")\n";);
@ -116,12 +107,12 @@ struct mus::imp {
if (!core_exprs.contains(not_lit)) {
// unknown := core_exprs \ mus
unknown.reset();
for (unsigned i = 0; i < core_exprs.size(); ++i) {
if (!mus.contains(core_exprs[i])) {
unknown.push_back(core_exprs[i]);
for (expr* c : core_exprs) {
if (!mus.contains(c)) {
unknown.push_back(c);
}
}
TRACE("mus", display_vec(tout << "core exprs:", core_exprs);
TRACE("mus", tout << "core exprs:" << core_exprs << "\n";
display_vec(tout << "core:", unknown);
display_vec(tout << "mus:", mus);
);
@ -242,11 +233,11 @@ struct mus::imp {
void get_core(expr_set& core) {
core.reset();
ptr_vector<expr> core_exprs;
expr_ref_vector core_exprs(m);
m_solver.get_unsat_core(core_exprs);
for (unsigned i = 0; i < core_exprs.size(); ++i) {
if (m_expr2lit.contains(core_exprs[i])) {
core.insert(core_exprs[i]);
for (expr* c : core_exprs) {
if (m_expr2lit.contains(c)) {
core.insert(c);
}
}
}
@ -375,9 +366,6 @@ void mus::add_assumption(expr* lit) {
return m_imp->add_assumption(lit);
}
lbool mus::get_mus(ptr_vector<expr>& mus) {
return m_imp->get_mus(mus);
}
lbool mus::get_mus(expr_ref_vector& mus) {
return m_imp->get_mus(mus);