3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-28 19:35:50 +00:00

add sample bdd vector operations

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2021-04-16 10:22:48 -07:00
parent af2376e9e4
commit c7868579c0
4 changed files with 73 additions and 7 deletions

View file

@ -972,4 +972,44 @@ namespace dd {
}
}
bdd bdd_manager::mk_eq(bddv const& a, bddv const& b) {
bdd eq = mk_true();
for (unsigned i = a.size(); i-- > 0; ) {
eq &= !(a[i] ^ b[i]);
}
return eq;
}
bdd bdd_manager::mk_ule(bddv const& a, bddv const& b) {
SASSERT(a.size() == b.size());
bdd lt = mk_false();
bdd eq = mk_true();
for (unsigned i = a.size(); i-- > 0; ) {
lt |= eq && (!a[i] && b[i]);
eq &= !(a[i] ^ b[i]);
}
return lt || eq;
}
bdd bdd_manager::mk_uge(bddv const& a, bddv const& b) { return mk_ule(b, a); }
bdd bdd_manager::mk_ult(bddv const& a, bddv const& b) { return mk_ule(a, b) && !mk_eq(a, b); }
bdd bdd_manager::mk_ugt(bddv const& a, bddv const& b) { return mk_ult(b, a); }
#if 0
bdd bdd_manager::mk_sle(bddv const& a, bddv const& b);
bdd bdd_manager::mk_sge(bddv const& a, bddv const& b) { return mk_sle(b, a); }
bdd bdd_manager::mk_slt(bddv const& a, bddv const& b) { return mk_sle(a, b) && !mk_eq(a, b); }
bdd bdd_manager::mk_sgt(bddv const& a, bddv const& b) { return mk_slt(b, a); }
bdd_manager::bddv bdd_manager::mk_num(rational const& n, unsigned num_bits);
bdd_manager::bddv bdd_manager::mk_ones(unsigned num_bits);
bdd_manager::bddv bdd_manager::mk_zero(unsigned num_bits);
bdd_manager::bddv bdd_manager::mk_var(unsigned num_bits, unsigned const* vars);
bdd_manager::bddv bdd_manager::mk_var(unsigned_vector const& vars);
bdd_manager::bddv bdd_manager::mk_add(bddv const& a, bddv const& b);
bdd_manager::bddv bdd_manager::mk_sub(bddv const& a, bddv const& b);
bdd_manager::bddv bdd_manager::mk_mul(bddv const& a, bddv const& b);
bdd_manager::bddv bdd_manager::mk_mul(bddv const& a, bool_vector const& b);
void bdd_manager::mk_quot_rem(bddv const& a, bddv const& b, bddv& quot, bddv& rem);
rational bdd_manager::to_val(bddv const& a);
#endif
}