25#include <adiar/bdd/bdd.h>
26#include <adiar/bool_op.h>
27#include <adiar/exec_policy.h>
28#include <adiar/functional.h>
29#include <adiar/zdd/zdd.h>
110 template <
typename ForwardIt>
167 template <
typename ForwardIt>
214 template <
typename ForwardIt>
249 template <
typename ForwardIt>
300 template <
typename ForwardIt>
335 template <
typename ForwardIt>
366 template <
typename ForwardIt>
405 template <
typename ForwardIt>
652 template <
typename ForwardIt>
663 template <
typename ForwardIt>
708 template <
typename ForwardIt>
719 template <
typename ForwardIt>
809 template <
typename ForwardIt>
820 template <
typename ForwardIt>
911 template <
typename ForwardIt>
922 template <
typename ForwardIt>
1013 template <
typename ForwardIt>
1024 template <
typename ForwardIt>
1191 template <
typename ForwardIt>
1208 template <
typename ForwardIt>
1222 template <
typename ForwardIt>
1233 template <
typename ForwardIt>
1248 template <
typename ForwardIt>
1262 template <
typename ForwardIt>
1587 typename = enable_if<!is_convertible<OutputIt, consumer<zdd::label_type>>>>
1649 template <
typename ForwardIt>
1696 typename = enable_if<!is_convertible<OutputIt, consumer<zdd::label_type>>>>
1744 typename = enable_if<!is_convertible<OutputIt, consumer<zdd::label_type>>>>
1809 template <
typename ForwardIt>
1821 template <
typename ForwardIt>
A (possibly unreduced) Zero-suppressed Decision Diagram.
Definition zdd.h:24
A reduced Binary Decision Diagram.
Definition bdd.h:58
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:292
Reduced Ordered Zero-suppressed Decision Diagram.
Definition zdd.h:67
__bdd operator|(const bdd &lhs, const bdd &rhs)
bdd operator+(const bdd &f)
__bdd operator&(const bdd &lhs, const bdd &rhs)
__bdd operator*(const bdd &lhs, const bdd &rhs)
bdd operator~(const bdd &f)
bdd operator-(const bdd &f)
bool operator!=(const bdd &f, const bdd &g)
bool operator==(const bdd &f, const bdd &g)
function< optional< RetType >()> generator
Generator function that produces a new value of RetType for each call.
Definition functional.h:170
function< void(Arg)> consumer
Consumer function of value of type Arg.
Definition functional.h:64
generator< typename std::remove_reference_t< ForwardIt >::value_type > make_generator(ForwardIt &&begin, ForwardIt &&end)
Wrap a begin and end iterator pair into a generator function.
Definition functional.h:177
function< bool(Args...)> predicate
Predicate function given value(s) of type(s) Args.
Definition functional.h:51
consumer< ValueType > make_consumer(OutputIt &&iter)
Wrap an iterator into a consumer function.
Definition functional.h:71
__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_binop(const zdd &A, const zdd &B, const predicate< bool, bool > &op)
Apply a binary operator between the sets of two families.
__zdd zdd_onset(const zdd &A, zdd::label_type var)
Subset that do include the given element.
__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.
__zdd zdd_offset(const zdd &A, zdd::label_type var)
Subset that do not include the given element.
__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.
__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_intsec(const zdd &A, const zdd &B)
The intersection of two families of sets.
__zdd zdd_diff(const zdd &A, const zdd &B)
The set difference of two families of sets.
zdd zdd_null()
The family only with the empty set, i.e. { Ø } .
zdd zdd_top()
Top of the powerset lattice.
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.
zdd zdd_powerset(const generator< zdd::label_type > &vars)
The powerset of all given variables.
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 } }.
zdd zdd_singletons(const generator< zdd::label_type > &vars)
The family { {1}, {2}, ..., {k} }.
zdd zdd_bot()
Bottom of the powerset lattice.
zdd zdd_singleton(zdd::label_type var)
The family { {i} } .
zdd zdd_empty()
The empty family, i.e. Ø .
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.
uint64_t zdd_size(const zdd &A)
The number of sets in the family of sets.
size_t zdd_nodecount(const zdd &A)
The number of (internal) nodes used to represent the family of sets.
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 present in the ZD...
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.
bool zdd_disjoint(const zdd &A, const zdd &B)
Whether the two families are disjoint.
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.
bool zdd_isfalse(const zdd &A)
Whether this ZDD is the false terminal.
bool zdd_equal(const zdd &A, const zdd &B)
Whether they represent the same family.
bool operator>(const zdd &lhs, const zdd &rhs)
bool zdd_isnull(const zdd &A)
Whether it is the null family, i.e. { Ø } .
bool operator<=(const zdd &lhs, const zdd &rhs)
bool zdd_istrue(const zdd &A)
Whether this ZDD is the true terminal.
bool operator>=(const zdd &lhs, const zdd &rhs)
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.
bool operator<(const zdd &lhs, const zdd &rhs)
bool zdd_ispoint(const zdd &A)
Whether it contains a single bit-vector a, i.e. A = { a }.
bool zdd_unequal(const zdd &A, const zdd &B)
Whether they represent two different families.
bool zdd_iscanonical(const zdd &A)
Check whether a given ZDD is canonical.
Core types.
Definition adiar.h:40