sig
type ('a, 'b) elt = { guard : 'a Cudd.Bdd.t; leaf : 'b; }
type ('a, 'b) t = ('a, 'b) Bddleaf.elt list
val fold2 : ('a -> 'b -> 'c -> 'a) -> 'a -> 'b list -> 'c list -> 'a
val iter2 : ('a -> 'b -> unit) -> 'a list -> 'b list -> unit
val check_unicity :
is_equal:('a -> 'a -> bool) -> ('b, 'a) Bddleaf.elt list -> bool
val check_disjointness : ('a, 'b) Bddleaf.elt list -> bool
val cons_unique :
is_equal:('a -> 'a -> bool) ->
('b, 'a) Bddleaf.elt ->
('b, 'a) Bddleaf.elt list -> ('b, 'a) Bddleaf.elt list
val append_unique :
is_equal:('a -> 'a -> bool) ->
('b, 'a) Bddleaf.elt list ->
('b, 'a) Bddleaf.elt list -> ('b, 'a) Bddleaf.elt list
val cons_disjoint :
is_equal:('a -> 'a -> bool) ->
merge:('a -> 'a -> 'a) ->
('b, 'a) Bddleaf.elt ->
('b, 'a) Bddleaf.elt list -> ('b, 'a) Bddleaf.elt list
val append_disjoint :
is_equal:('a -> 'a -> bool) ->
merge:('a -> 'a -> 'a) ->
('b, 'a) Bddleaf.elt list ->
('b, 'a) Bddleaf.elt list -> ('b, 'a) Bddleaf.elt list
val cons :
is_equal:('a -> 'a -> bool) ->
merge:('a -> 'a -> 'a) ->
unique:bool ->
disjoint:bool ->
('b, 'a) Bddleaf.elt ->
('b, 'a) Bddleaf.elt list -> ('b, 'a) Bddleaf.elt list
val append :
is_equal:('a -> 'a -> bool) ->
merge:('a -> 'a -> 'a) ->
unique:bool ->
disjoint:bool ->
('b, 'a) Bddleaf.elt list ->
('b, 'a) Bddleaf.elt list -> ('b, 'a) Bddleaf.elt list
val make_unique :
is_equal:('a -> 'a -> bool) ->
merge:('a -> 'a -> 'a) ->
disjoint:bool -> ('b, 'a) Bddleaf.elt list -> ('b, 'a) Bddleaf.elt list
val guard : cudd:'a Cudd.Man.t -> ('a, 'b) Bddleaf.t -> 'a Cudd.Bdd.t
end