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