sig
  type 'a typ = [ `Benum of 'a ]
  type 'a typdef = [ `Benum of 'a array ]
  type 'a t = { typ : string; reg : 'Bdd.Reg.t; }
  type dt = Cudd.Man.d Bdd.Enum.t
  type vt = Cudd.Man.v Bdd.Enum.t
  val of_label :
    ('a, [> 'Bdd.Env.typ ], [> 'Bdd.Env.typdef ], 'd, 'e) Bdd.Env.O.t ->
    '-> 'Bdd.Enum.t
  val is_cst : 'Bdd.Enum.t -> bool
  val to_code : 'Bdd.Enum.t -> int
  val to_label :
    ('a, [> 'Bdd.Env.typ ], [> 'Bdd.Env.typdef ], 'd, 'e) Bdd.Env.O.t ->
    'Bdd.Enum.t -> 'a
  val equal_label :
    ('a, [> 'Bdd.Env.typ ], [> 'Bdd.Env.typdef ], 'd, 'e) Bdd.Env.O.t ->
    'Bdd.Enum.t -> '-> 'Cudd.Bdd.t
  val equal :
    ('a, [> 'Bdd.Env.typ ], [> 'Bdd.Env.typdef ], 'd, 'e) Bdd.Env.O.t ->
    'Bdd.Enum.t -> 'Bdd.Enum.t -> 'Cudd.Bdd.t
  val ite : 'Cudd.Bdd.t -> 'Bdd.Enum.t -> 'Bdd.Enum.t -> 'Bdd.Enum.t
  val guard_of_label :
    ('a, [> 'Bdd.Env.typ ], [> 'Bdd.Env.typdef ], 'd, 'e) Bdd.Env.O.t ->
    'Bdd.Enum.t -> '-> 'Cudd.Bdd.t
  val guardlabels :
    ('a, [> 'Bdd.Env.typ ], [> 'Bdd.Env.typdef ], 'd, 'e) Bdd.Env.O.t ->
    'Bdd.Enum.t -> ('Cudd.Bdd.t * 'a) list
  val cofactor : 'Bdd.Enum.t -> 'Cudd.Bdd.t -> 'Bdd.Enum.t
  val restrict : 'Bdd.Enum.t -> 'Cudd.Bdd.t -> 'Bdd.Enum.t
  val tdrestrict : 'Bdd.Enum.t -> 'Cudd.Bdd.t -> 'Bdd.Enum.t
  val print :
    (Format.formatter -> int -> unit) ->
    Format.formatter -> 'Bdd.Enum.t -> unit
  val print_minterm :
    (Format.formatter -> 'Cudd.Bdd.t -> unit) ->
    ('a, [> 'Bdd.Env.typ ], [> 'Bdd.Env.typdef ], 'd, 'e) Bdd.Env.O.t ->
    Format.formatter -> 'Bdd.Enum.t -> unit
  val size_of_typ :
    ('a, [> 'Bdd.Env.typ ], [> 'Bdd.Env.typdef ], 'd, 'e) Bdd.Env.O.t ->
    '-> int
  val maxcode_of_typ :
    ('a, [> 'Bdd.Env.typ ], [> 'Bdd.Env.typdef ], 'd, 'e) Bdd.Env.O.t ->
    '-> int
  val mem_typcode :
    ('a, [> 'Bdd.Env.typ ], [> 'Bdd.Env.typdef ], 'd, 'e) Bdd.Env.O.t ->
    '-> int -> bool
  val labels_of_typ :
    ('a, [> 'Bdd.Env.typ ], [> 'Bdd.Env.typdef ], 'd, 'e) Bdd.Env.O.t ->
    '-> 'a array
  val code_of_label :
    ('a, [> 'Bdd.Env.typ ], [> 'Bdd.Env.typdef ], 'd, 'e) Bdd.Env.O.t ->
    '-> int
  val label_of_typcode :
    ('a, [> 'Bdd.Env.typ ], [> 'Bdd.Env.typdef ], 'd, 'e) Bdd.Env.O.t ->
    '-> int -> 'a
  module Minterm :
    sig
      val iter :
        ('a, [> 'Bdd.Env.typ ], [> 'Bdd.Env.typdef ], 'd, 'e) Bdd.Env.O.t ->
        '-> ('-> unit) -> Bdd.Reg.Minterm.t -> unit
      val map :
        ('a, [> 'Bdd.Env.typ ], [> 'Bdd.Env.typdef ], 'd, 'e) Bdd.Env.O.t ->
        '-> ('-> 'f) -> Bdd.Reg.Minterm.t -> 'f list
    end
  val permute :
    ?memo:Cudd.Memo.t -> 'Bdd.Enum.t -> int array -> 'Bdd.Enum.t
  val varmap : 'Bdd.Enum.t -> 'Bdd.Enum.t
  val vectorcompose :
    ?memo:Cudd.Memo.t ->
    'Cudd.Bdd.t array -> 'Bdd.Enum.t -> 'Bdd.Enum.t
end