3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-07 18:05:21 +00:00

#5417 designate quantifier axioms as auxiliary

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2021-07-19 15:35:18 -07:00
parent 4388ab2e3e
commit a64867942d
4 changed files with 11 additions and 6 deletions

View file

@ -39,11 +39,15 @@ namespace euf {
}
void solver::add_root(unsigned n, sat::literal const* lits) {
if (!relevancy_enabled())
return;
ensure_dual_solver();
m_dual_solver->add_root(n, lits);
}
void solver::add_aux(unsigned n, sat::literal const* lits) {
if (!relevancy_enabled())
return;
ensure_dual_solver();
m_dual_solver->add_aux(n, lits);
}

View file

@ -361,6 +361,7 @@ namespace euf {
void add_root(sat::literal_vector const& lits) { add_root(lits.size(), lits.data()); }
void add_root(sat::literal lit) { add_root(1, &lit); }
void add_root(sat::literal a, sat::literal b) { sat::literal lits[2] = {a, b}; add_root(2, lits); }
void add_aux(sat::literal_vector const& lits) { add_aux(lits.size(), lits.data()); }
void add_aux(unsigned n, sat::literal const* lits);
void add_aux(sat::literal a, sat::literal b) { sat::literal lits[2] = {a, b}; add_aux(2, lits); }
void track_relevancy(sat::bool_var v);

View file

@ -45,8 +45,7 @@ namespace q {
for (expr* e : exp) {
sat::literal lit = ctx.internalize(e, l.sign(), false, false);
add_clause(~l, lit);
if (ctx.relevancy_enabled())
ctx.add_root(~l, lit);
ctx.add_aux(~l, lit);
}
return;
}
@ -56,14 +55,14 @@ namespace q {
for (expr* e : exp)
lits.push_back(ctx.internalize(e, l.sign(), false, false));
add_clause(lits);
ctx.add_root(lits);
ctx.add_aux(lits);
return;
}
if (l.sign() == is_forall(e)) {
sat::literal lit = skolemize(q);
add_clause(~l, lit);
ctx.add_root(~l, lit);
ctx.add_aux(~l, lit);
}
else {
ctx.push_vec(m_universal, l);

View file

@ -81,9 +81,9 @@ namespace sat {
return literal(m_var2ext[lit.var()], lit.sign());
}
void dual_solver::add_root(unsigned sz, literal const* clause) {
TRACE("dual", tout << "root: " << literal_vector(sz, clause) << "\n";);
void dual_solver::add_root(unsigned sz, literal const* clause) {
if (sz == 1) {
TRACE("dual", tout << "unit: " << clause[0] << "\n";);
m_units.push_back(clause[0]);
return;
}
@ -91,6 +91,7 @@ namespace sat {
for (unsigned i = 0; i < sz; ++i)
m_solver.mk_clause(root, ~ext2lit(clause[i]), status::input());
m_roots.push_back(~root);
TRACE("dual", tout << "root: " << ~root << " => " << literal_vector(sz, clause) << "\n";);
}
void dual_solver::add_aux(unsigned sz, literal const* clause) {