3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-11-14 01:51:16 +00:00

Add some clause names

This commit is contained in:
Jakob Rath 2023-03-29 15:30:05 +02:00
parent c516d6fe0c
commit 64e452e086
5 changed files with 26 additions and 15 deletions

View file

@ -397,12 +397,12 @@ namespace polysat {
// b = 0 ==> q = -1
// TODO: when a,b become evaluable, can we actually propagate q,r? doesn't seem like it.
// Maybe we need something like an op_constraint for better propagation.
s.add_clause(eq(b * q + r - a), false);
s.add_clause(~umul_ovfl(b, q), false);
s.add_clause("[axiom] quot_rem 1", { eq(b * q + r - a) }, false);
s.add_clause("[axiom] quot_rem 2", { ~umul_ovfl(b, q) }, false);
// r <= b*q+r
// { apply equivalence: p <= q <=> q-p <= -p-1 }
// b*q <= -r-1
s.add_clause(ule(b*q, -r-1), false);
s.add_clause("[axiom] quot_rem 3", { ule(b*q, -r-1) }, false);
#if 0
// b*q <= b*q+r
// { apply equivalence: p <= q <=> q-p <= -p-1 }
@ -411,8 +411,8 @@ namespace polysat {
#endif
auto c_eq = eq(b);
s.add_clause(c_eq, ult(r, b), false);
s.add_clause(~c_eq, eq(q + 1), false);
s.add_clause("[axiom] quot_rem 4", { c_eq, ult(r, b) }, false);
s.add_clause("[axiom] quot_rem 5", { ~c_eq, eq(q + 1) }, false);
return {std::move(q), std::move(r)};
}