3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-13 20:38:43 +00:00

tuning auxiliary literals and clauses

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2014-08-02 14:25:04 -07:00
parent 8814ba0629
commit 9681dc12b1

View file

@ -257,7 +257,7 @@ public:
void max_resolve(ptr_vector<expr>& core, rational const& w) {
SASSERT(!core.empty());
expr_ref fml(m), asum(m);
app_ref cls(m), d(m);
app_ref cls(m), d(m), dd(m);
m_B.reset();
m_B.append(core.size(), core.c_ptr());
d = m.mk_true();
@ -276,10 +276,20 @@ public:
for (unsigned i = 1; i < core.size(); ++i) {
expr* b_i = m_B[i-1].get();
expr* b_i1 = m_B[i].get();
d = m.mk_and(b_i, d);
if (i > 2) {
dd = mk_fresh_bool("d");
fml = m.mk_implies(dd, d);
m_s->assert_expr(fml);
fml = m.mk_implies(dd, b_i);
m_s->assert_expr(fml);
d = dd;
}
else {
d = m.mk_and(b_i, d);
}
asum = mk_fresh_bool("a");
cls = m.mk_or(b_i1, d);
fml = m.mk_iff(asum, cls);
fml = m.mk_implies(asum, cls);
new_assumption(asum, w);
m_s->assert_expr(fml);
}