3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 00:55:31 +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

@ -30,19 +30,12 @@ Revision History:
namespace qe {
lbool mbi_plugin::check(func_decl_ref_vector const& vars, expr_ref_vector& lits, model_ref& mdl) {
ast_manager& m = lits.get_manager();
expr_ref_vector lits0(lits);
while (true) {
lits.reset();
lits.append(lits0);
switch ((*this)(vars, lits, mdl)) {
case mbi_sat:
return l_true;
case mbi_unsat:
if (lits.empty()) return l_false;
TRACE("qe", tout << "block: " << lits << "\n";);
block(lits);
break;
return l_false;
case mbi_undef:
return l_undef;
case mbi_augment:
@ -113,8 +106,7 @@ namespace qe {
m(s->get_manager()),
m_atoms(m),
m_solver(s),
m_dual_solver(sNot)
{
m_dual_solver(sNot) {
params_ref p;
p.set_bool("core.minimize", true);
m_solver->updt_params(p);
@ -256,6 +248,7 @@ namespace qe {
case l_true:
return l_true;
case l_false:
std::cout << lits << "\n";
a.block(lits);
itps.push_back(mk_not(mk_and(lits)));
break;

View file

@ -701,7 +701,7 @@ namespace qe {
}
void solve() {
ptr_vector<term> worklist;
ptr_vector<term> worklist;
for (term * t : m_tg.m_terms) {
// skip pure terms
if (m_term2app.contains(t->get_id())) continue;
@ -785,8 +785,7 @@ namespace qe {
do {
expr* member = mk_pure(*r);
SASSERT(member);
if (!members.contains(member) &&
(!is_projected(*r) || !is_solved_eq(rep, member))) {
if (!members.contains(member) && (!is_projected(*r) || !is_solved_eq(rep, member))) {
res.push_back(m.mk_eq(rep, member));
members.insert(member);
}
@ -814,6 +813,7 @@ namespace qe {
return mk_equalities(false, res);
}
// TBD: generalize for also the case of a (:var n)
bool is_solved_eq(expr *_lhs, expr* _rhs) {
if (!is_app(_lhs) || !is_app(_rhs)) return false;
app *lhs, *rhs;