mirror of
https://github.com/Z3Prover/z3
synced 2025-04-14 21:08:46 +00:00
This commit is contained in:
parent
7cda90c06a
commit
ae6aea7a4d
|
@ -193,8 +193,8 @@ namespace euf {
|
||||||
}
|
}
|
||||||
s().mk_clause(lits, st);
|
s().mk_clause(lits, st);
|
||||||
if (relevancy_enabled())
|
if (relevancy_enabled())
|
||||||
add_root(lits.size(), lits.data());
|
add_root(lits);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// g(f(x_i)) = x_i
|
// g(f(x_i)) = x_i
|
||||||
// f(x_1) = a + .... + f(x_n) = a >= 2
|
// f(x_1) = a + .... + f(x_n) = a >= 2
|
||||||
|
|
|
@ -357,6 +357,9 @@ namespace euf {
|
||||||
// relevancy
|
// relevancy
|
||||||
bool relevancy_enabled() const { return get_config().m_relevancy_lvl > 0; }
|
bool relevancy_enabled() const { return get_config().m_relevancy_lvl > 0; }
|
||||||
void add_root(unsigned n, sat::literal const* lits);
|
void add_root(unsigned n, sat::literal const* lits);
|
||||||
|
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(unsigned n, sat::literal const* lits);
|
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 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);
|
void track_relevancy(sat::bool_var v);
|
||||||
|
|
|
@ -42,8 +42,12 @@ namespace q {
|
||||||
|
|
||||||
auto const& exp = expand(q);
|
auto const& exp = expand(q);
|
||||||
if (exp.size() > 1 && is_forall(q)) {
|
if (exp.size() > 1 && is_forall(q)) {
|
||||||
for (expr* e : exp)
|
for (expr* e : exp) {
|
||||||
add_clause(~l, ctx.internalize(e, l.sign(), false, false));
|
sat::literal lit = ctx.internalize(e, l.sign(), false, false);
|
||||||
|
add_clause(~l, lit);
|
||||||
|
if (ctx.relevancy_enabled())
|
||||||
|
ctx.add_root(~l, lit);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (exp.size() > 1 && is_exists(q)) {
|
if (exp.size() > 1 && is_exists(q)) {
|
||||||
|
@ -52,6 +56,8 @@ namespace q {
|
||||||
for (expr* e : exp)
|
for (expr* e : exp)
|
||||||
lits.push_back(ctx.internalize(e, l.sign(), false, false));
|
lits.push_back(ctx.internalize(e, l.sign(), false, false));
|
||||||
add_clause(lits);
|
add_clause(lits);
|
||||||
|
if (ctx.relevancy_enabled())
|
||||||
|
ctx.add_root(lits);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue