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:
parent
4388ab2e3e
commit
a64867942d
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue