18#include <adiar/bdd/bdd.h>
19#include <adiar/bool_op.h>
20#include <adiar/exec_policy.h>
21#include <adiar/functional.h>
22#include <adiar/zdd/zdd.h>
101 template <
typename ForwardIt>
158 template <
typename ForwardIt>
205 template <
typename ForwardIt>
240 template <
typename ForwardIt>
291 template <
typename ForwardIt>
326 template <
typename ForwardIt>
357 template <
typename ForwardIt>
396 template <
typename ForwardIt>
619 template <
typename ForwardIt>
629 template <
typename ForwardIt>
671 template <
typename ForwardIt>
681 template <
typename ForwardIt>
764 template <
typename ForwardIt>
774 template <
typename ForwardIt>
858 template <
typename ForwardIt>
868 template <
typename ForwardIt>
952 template <
typename ForwardIt>
962 template <
typename ForwardIt>
1136 template <
typename ForwardIt>
1153 template <
typename ForwardIt>
1167 template <
typename ForwardIt>
1180 template <
typename ForwardIt>
1197 template <
typename ForwardIt>
1211 template <
typename ForwardIt>
1488 typename = enable_if<!is_convertible<OutputIt, consumer<zdd::label_type>>>>
1550 template <
typename ForwardIt>
1597 typename = enable_if<!is_convertible<OutputIt, consumer<zdd::label_type>>>>
1645 typename = enable_if<!is_convertible<OutputIt, consumer<zdd::label_type>>>>
1700 template <
typename ForwardIt>
1711 template <
typename ForwardIt>
A (possibly unreduced) Zero-suppressed Decision Diagram.
Definition zdd.h:24
A reduced Binary Decision Diagram.
Definition bdd.h:53
Settings to dictate the execution of Adiar's algorithms.
Definition exec_policy.h:35
node_type::label_type label_type
Type of this node's variable label.
Definition dd.h:282
Reduced Ordered Zero-suppressed Decision Diagram.
Definition zdd.h:62
__bdd operator|(const bdd &lhs, const bdd &rhs)
__bdd bdd_from(const zdd &A, const generator< bdd::label_type > &dom)
Obtains the BDD that represents the same function/set as the given ZDD within the given domain.
bdd operator+(const bdd &f)
__bdd operator&(const bdd &lhs, const bdd &rhs)
__bdd operator*(const bdd &lhs, const bdd &rhs)
bool operator!=(const bdd &f, const bdd &g)
bdd operator~(const bdd &f)
bool operator==(const bdd &f, const bdd &g)
bdd operator-(const bdd &f)
function< optional< RetType >()> generator
Generator function that produces a new value of RetType for each call.
Definition functional.h:169
function< void(Arg)> consumer
Consumer function of value(s) of type(s) Args.
Definition functional.h:60
generator< typename ForwardIt::value_type > make_generator(ForwardIt &begin, ForwardIt &end)
Wrap a begin and end iterator pair into a generator function.
Definition functional.h:176
function< bool(Args...)> predicate
Predicate function given value(s) of type(s) Args.
Definition functional.h:48
consumer< ValueType > make_consumer(OutputIt &iter)
Wrap an iterator into a consumer function.
Definition functional.h:67
__zdd zdd_change(const zdd &A, const generator< zdd::label_type > &vars)
The symmetric difference between each set in the family and the given set of variables.
zdd zdd_null()
The family only with the empty set, i.e. { Ø } .
zdd zdd_top()
Top of the powerset lattice.
zdd::label_type zdd_minvar(const zdd &A)
Get the minimal occurring variable in the family.
zdd::label_type zdd_topvar(const zdd &f)
Get the root's variable label.
zdd zdd_ithvar(zdd::label_type var, const generator< zdd::label_type > &dom)
The set of bitvectors over a given domain where var is set to true.
zdd zdd_point(const generator< zdd::label_type > &vars)
The family { { 1, 2, ..., k } } with a single bit-vector.
bool zdd_disjoint(const zdd &A, const zdd &B)
Whether the two families are disjoint.
__zdd zdd_binop(const zdd &A, const zdd &B, const predicate< bool, bool > &op)
Apply a binary operator between the sets of two families.
void zdd_printdot(const zdd &A, std::ostream &out=std::cout, bool include_id=false)
Output a DOT drawing of a ZDD to the given output stream.
zdd zdd_powerset(const generator< zdd::label_type > &vars)
The powerset of all given variables.
__zdd zdd_onset(const zdd &A, zdd::label_type var)
Subset that do include the given element.
zdd::label_type zdd_maxvar(const zdd &A)
Get the maximal occurring variable in the family.
__zdd zdd_expand(const zdd &A, const generator< zdd::label_type > &vars)
Expands the domain of the given ZDD to also include the given set of labels.
bool zdd_isempty(const zdd &A)
Whether it is the empty family, i.e. Ø .
bool zdd_subseteq(const zdd &A, const zdd &B)
Whether one family is a subset or equal to the other.
zdd zdd_nithvar(zdd::label_type var, const generator< zdd::label_type > &dom)
The set of bitvectors over a given domain where var is set to false.
zdd zdd_vars(const generator< zdd::label_type > &vars)
The family { { 1, 2, ..., k } }.
bool zdd_isfalse(const zdd &A)
Whether this ZDD represents false terminal.
uint64_t zdd_size(const zdd &A)
The number of sets in the family of sets.
bool zdd_equal(const zdd &A, const zdd &B)
Whether they represent the same family.
bool operator>(const zdd &lhs, const zdd &rhs)
zdd zdd_singletons(const generator< zdd::label_type > &vars)
The family { {1}, {2}, ..., {k} }.
__zdd zdd_offset(const zdd &A, zdd::label_type var)
Subset that do not include the given element.
size_t zdd_nodecount(const zdd &A)
The number of (internal) nodes used to represent the family of sets.
bool zdd_contains(const zdd &A, const generator< zdd::label_type > &a)
Whether the family includes the given set of labels.
bool zdd_isnull(const zdd &A)
Whether it is the null family, i.e. { Ø } .
zdd zdd_minelem(const zdd &A)
Retrieves the lexicographically smallest set a in A.
bool operator<=(const zdd &lhs, const zdd &rhs)
bool zdd_istrue(const zdd &A)
Whether this BDD represents true terminal.
bool operator>=(const zdd &lhs, const zdd &rhs)
__zdd zdd_union(const zdd &A, const zdd &B)
The union of two families of sets.
__zdd zdd_complement(const zdd &A, const generator< zdd::label_type > &dom)
Complement of A within the given domain.
bool zdd_subset(const zdd &A, const zdd &B)
Whether one family is a strict subset of the other.
bool zdd_isterminal(const zdd &A)
Whether this ZDD represents a terminal.
zdd zdd_bot()
Bottom of the powerset lattice.
zdd zdd_maxelem(const zdd &A)
Retrieves the lexicographically largest set a in A.
bool operator<(const zdd &lhs, const zdd &rhs)
zdd zdd_singleton(zdd::label_type var)
The family { {i} } .
bool zdd_ispoint(const zdd &A)
Whether it contains a single bit-vector a, i.e. A = { a }.
__zdd zdd_project(const zdd &A, const predicate< zdd::label_type > &dom)
Project family of sets onto a domain, i.e. remove from every set all variables not within the domain.
zdd zdd_empty()
The empty family, i.e. Ø .
__zdd zdd_intsec(const zdd &A, const zdd &B)
The intersection of two families of sets.
bool zdd_unequal(const zdd &A, const zdd &B)
Whether they represent two different families.
zdd zdd_terminal(bool value)
The ZDD of only a single terminal.
__zdd zdd_from(const bdd &f, const generator< zdd::label_type > &dom)
Obtains the ZDD that represents the same function/set as the given BDD within the given domain.
bool zdd_iscanonical(const zdd &A)
Check whether a given ZDD is canonical.
void zdd_support(const zdd &A, const consumer< zdd::label_type > &cb)
Get (in ascending order) all of the variable labels that occur in the family.
zdd::label_type zdd_varcount(const zdd &A)
The number of variables that exist in the family of sets, i.e. the number of levels in the ZDD.
__zdd zdd_diff(const zdd &A, const zdd &B)
The set difference of two families of sets.
Core types.
Definition adiar.h:40