3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-07-19 10:52:02 +00:00

reduce simplification

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2019-12-26 01:32:36 -08:00
parent 991e587950
commit 50873c8094
5 changed files with 98 additions and 44 deletions

View file

@ -70,7 +70,7 @@ namespace dd {
pdd pdd_manager::zero() { return pdd(zero_pdd, this); }
pdd pdd_manager::one() { return pdd(one_pdd, this); }
pdd pdd_manager::mk_or(pdd const& p, pdd const& q) { return p*q + p + q; }
pdd pdd_manager::mk_or(pdd const& p, pdd const& q) { return p + q - (p*q); }
pdd_manager::PDD pdd_manager::apply(PDD arg1, PDD arg2, pdd_op op) {
bool first = true;
@ -448,6 +448,19 @@ namespace dd {
return is_linear(p.root);
}
/*
Determine whether p is a binary polynomials
of the form v1, x*v1 + v2, or x*v1 + y*v2 + v3
where v1, v2 are values.
*/
bool pdd_manager::is_binary(PDD p) {
return is_val(p) || (is_val(hi(p)) && (is_val(lo(p)) || (is_val(hi(lo(p))) && is_val(lo(lo(p))))));
}
bool pdd_manager::is_binary(pdd const& p) {
return is_binary(p.root);
}
void pdd_manager::push(PDD b) {
m_pdd_stack.push_back(b);
}