3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-04-29 15:23:37 +00:00

Generalized variable elimination

This commit is contained in:
Clemens Eisenhofer 2022-12-29 22:31:39 +01:00
parent ab9a9d2308
commit 6f78c33558
7 changed files with 235 additions and 65 deletions

View file

@ -137,6 +137,7 @@ namespace polysat {
friend class ex_polynomial_superposition;
friend class free_variable_elimination;
friend class saturation;
friend class parity_tracker;
friend class constraint_manager;
friend class scoped_solverv;
friend class test_polysat;
@ -422,9 +423,9 @@ namespace polysat {
signed_constraint eq(pdd const& p, rational const& q) { return eq(p - q); }
signed_constraint eq(pdd const& p, unsigned q) { return eq(p - q); }
signed_constraint odd(pdd const& p) { return ~even(p); }
signed_constraint even(pdd const& p) { return parity(p, 1); }
signed_constraint even(pdd const& p) { return parity_at_least(p, 1); }
/** parity(p) >= k */
signed_constraint parity(pdd const& p, unsigned k) { // TODO: rename to parity_at_least?
signed_constraint parity_at_least(pdd const& p, unsigned k) {
unsigned N = p.manager().power_of_2();
// parity(p) >= k
// <=> p * 2^(N - k) == 0
@ -449,7 +450,7 @@ namespace polysat {
return eq(p.manager().zero());
}
else
return ~parity(p, k + 1);
return ~parity_at_least(p, k + 1);
}
signed_constraint diseq(pdd const& p, rational const& q) { return diseq(p - q); }
signed_constraint diseq(pdd const& p, unsigned q) { return diseq(p - q); }