sig
  type 'a capsule = private { content : 'a; }
  type 'a unique
  type 'a t = 'Cudd.Mtbddc.unique Cudd.Vdd.t
  type 'a table = 'Cudd.Mtbddc.unique Cudd.PWeakke.t
  val print_table :
    ?first:(unit, Format.formatter, unit) Pervasives.format ->
    ?sep:(unit, Format.formatter, unit) Pervasives.format ->
    ?last:(unit, Format.formatter, unit) Pervasives.format ->
    (Format.formatter -> '-> unit) ->
    Format.formatter -> 'Cudd.Mtbddc.table -> unit
  val make_table :
    hash:('-> int) -> equal:('-> '-> bool) -> 'Cudd.Mtbddc.table
  val unique : 'Cudd.Mtbddc.table -> '-> 'Cudd.Mtbddc.unique
  val get : 'Cudd.Mtbddc.unique -> 'a
  type 'a mtbdd =
      Leaf of 'Cudd.Mtbddc.unique
    | Ite of int * 'Cudd.Mtbddc.t * 'Cudd.Mtbddc.t
  external manager : 'Cudd.Mtbddc.t -> Cudd.Man.v Cudd.Man.t
    = "camlidl_cudd_bdd_manager"
  external is_cst : 'Cudd.Mtbddc.t -> bool = "camlidl_cudd_bdd_is_cst"
  external topvar : 'Cudd.Mtbddc.t -> int = "camlidl_cudd_bdd_topvar"
  external dthen : 'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.t
    = "camlidl_cudd_add_dthen"
  external delse : 'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.t
    = "camlidl_cudd_add_delse"
  external cofactors :
    int -> 'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.t * 'Cudd.Mtbddc.t
    = "camlidl_cudd_add_cofactors"
  external cofactor :
    'Cudd.Mtbddc.t -> Cudd.Man.v Cudd.Bdd.t -> 'Cudd.Mtbddc.t
    = "camlidl_cudd_add_cofactor"
  val dval_u : 'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.unique
  val dval : 'Cudd.Mtbddc.t -> 'a
  val inspect : 'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.mtbdd
  external support : 'Cudd.Mtbddc.t -> Cudd.Man.v Cudd.Bdd.t
    = "camlidl_cudd_bdd_support"
  external supportsize : 'Cudd.Mtbddc.t -> int
    = "camlidl_cudd_bdd_supportsize"
  external is_var_in : int -> 'Cudd.Mtbddc.t -> bool
    = "camlidl_cudd_bdd_is_var_in"
  external vectorsupport : 'Cudd.Mtbddc.t array -> Cudd.Man.v Cudd.Bdd.t
    = "camlidl_cudd_bdd_vectorsupport"
  external vectorsupport2 :
    Cudd.Man.v Cudd.Bdd.t array ->
    'Cudd.Mtbddc.t array -> Cudd.Man.v Cudd.Bdd.t
    = "camlidl_cudd_add_vectorsupport2"
  val cst_u :
    Cudd.Man.v Cudd.Man.t -> 'Cudd.Mtbddc.unique -> 'Cudd.Mtbddc.t
  val cst :
    Cudd.Man.v Cudd.Man.t -> 'Cudd.Mtbddc.table -> '-> 'Cudd.Mtbddc.t
  external ite :
    Cudd.Man.v Cudd.Bdd.t ->
    'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.t
    = "camlidl_cudd_add_ite"
  external ite_cst :
    Cudd.Man.v Cudd.Bdd.t ->
    'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.t option
    = "camlidl_cudd_add_ite_cst"
  external eval_cst :
    'Cudd.Mtbddc.t -> Cudd.Man.v Cudd.Bdd.t -> 'Cudd.Mtbddc.t option
    = "camlidl_cudd_add_eval_cst"
  external compose :
    int -> Cudd.Man.v Cudd.Bdd.t -> 'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.t
    = "camlidl_cudd_add_compose"
  external vectorcompose :
    Cudd.Man.v Cudd.Bdd.t array -> 'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.t
    = "camlidl_cudd_add_vectorcompose"
  external is_equal : 'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.t -> bool
    = "camlidl_cudd_bdd_is_equal"
  external is_equal_when :
    'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.t -> Cudd.Man.v Cudd.Bdd.t -> bool
    = "camlidl_cudd_bdd_is_equal_when"
  val is_eval_cst_u :
    'Cudd.Mtbddc.t -> Cudd.Man.v Cudd.Bdd.t -> 'Cudd.Mtbddc.unique option
  val is_ite_cst_u :
    Cudd.Man.v Cudd.Bdd.t ->
    'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.unique option
  val is_eval_cst : 'Cudd.Mtbddc.t -> Cudd.Man.v Cudd.Bdd.t -> 'a option
  val is_ite_cst :
    Cudd.Man.v Cudd.Bdd.t ->
    'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.t -> 'a option
  external size : 'Cudd.Mtbddc.t -> int = "camlidl_cudd_bdd_size"
  external nbpaths : 'Cudd.Mtbddc.t -> float = "camlidl_cudd_bdd_nbpaths"
  external nbnonzeropaths : 'Cudd.Mtbddc.t -> float
    = "camlidl_cudd_bdd_nbtruepaths"
  external nbminterms : int -> 'Cudd.Mtbddc.t -> float
    = "camlidl_cudd_bdd_nbminterms"
  external density : int -> 'Cudd.Mtbddc.t -> float
    = "camlidl_cudd_bdd_density"
  external nbleaves : 'Cudd.Mtbddc.t -> int = "camlidl_cudd_add_nbleaves"
  external varmap : 'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.t
    = "camlidl_cudd_add_varmap"
  external permute : 'Cudd.Mtbddc.t -> int array -> 'Cudd.Mtbddc.t
    = "camlidl_cudd_add_permute"
  val iter_cube_u :
    (Cudd.Man.tbool array -> 'Cudd.Mtbddc.unique -> unit) ->
    'Cudd.Mtbddc.t -> unit
  val iter_cube :
    (Cudd.Man.tbool array -> '-> unit) -> 'Cudd.Mtbddc.t -> unit
  external iter_node : ('Cudd.Mtbddc.t -> unit) -> 'Cudd.Mtbddc.t -> unit
    = "camlidl_cudd_iter_node"
  external guard_of_node :
    'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.t -> Cudd.Man.v Cudd.Bdd.t
    = "camlidl_cudd_add_guard_of_node"
  external guard_of_nonbackground : 'Cudd.Mtbddc.t -> Cudd.Man.v Cudd.Bdd.t
    = "camlidl_cudd_add_guard_of_nonbackground"
  val nodes_below_level :
    ?max:int -> 'Cudd.Mtbddc.t -> int option -> 'Cudd.Mtbddc.t array
  val guard_of_leaf_u :
    'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.unique -> Cudd.Man.v Cudd.Bdd.t
  val guard_of_leaf :
    'Cudd.Mtbddc.table -> 'Cudd.Mtbddc.t -> '-> Cudd.Man.v Cudd.Bdd.t
  val leaves_u : 'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.unique array
  val leaves : 'Cudd.Mtbddc.t -> 'a array
  val pick_leaf_u : 'Cudd.Mtbddc.t -> 'Cudd.Mtbddc.unique
  val pick_leaf : 'Cudd.Mtbddc.t -> 'a
  val guardleafs_u :
    'Cudd.Mtbddc.t -> (Cudd.Man.v Cudd.Bdd.t * 'Cudd.Mtbddc.unique) array
  val guardleafs : 'Cudd.Mtbddc.t -> (Cudd.Man.v Cudd.Bdd.t * 'a) array
  external constrain :
    'Cudd.Mtbddc.t -> Cudd.Man.v Cudd.Bdd.t -> 'Cudd.Mtbddc.t
    = "camlidl_cudd_add_constrain"
  external tdconstrain :
    'Cudd.Mtbddc.t -> Cudd.Man.v Cudd.Bdd.t -> 'Cudd.Mtbddc.t
    = "camlidl_cudd_add_tdconstrain"
  external restrict :
    'Cudd.Mtbddc.t -> Cudd.Man.v Cudd.Bdd.t -> 'Cudd.Mtbddc.t
    = "camlidl_cudd_add_restrict"
  external tdrestrict :
    'Cudd.Mtbddc.t -> Cudd.Man.v Cudd.Bdd.t -> 'Cudd.Mtbddc.t
    = "camlidl_cudd_add_tdrestrict"
  external transfer :
    'Cudd.Mtbddc.t -> Cudd.Man.v Cudd.Man.t -> 'Cudd.Mtbddc.t
    = "camlidl_cudd_add_transfer"
  val print__minterm :
    (Format.formatter -> '-> unit) ->
    Format.formatter -> 'Cudd.Mtbddc.t -> unit
  val print_minterm :
    (Format.formatter -> int -> unit) ->
    (Format.formatter -> '-> unit) ->
    Format.formatter -> 'Cudd.Mtbddc.t -> unit
  val print :
    (Format.formatter -> Cudd.Man.v Cudd.Bdd.t -> unit) ->
    (Format.formatter -> '-> unit) ->
    Format.formatter -> 'Cudd.Mtbddc.t -> unit
end