sig
  type 'a t
  type 'a bdd = Bool of bool | Ite of int * 'Cudd.Bdd.t * 'Cudd.Bdd.t
  type dt = Cudd.Man.d Cudd.Bdd.t
  type vt = Cudd.Man.v Cudd.Bdd.t
  external manager : 'Cudd.Bdd.t -> 'Cudd.Man.t
    = "camlidl_cudd_bdd_manager"
  external is_cst : 'Cudd.Bdd.t -> bool = "camlidl_cudd_bdd_is_cst"
  external is_complement : 'Cudd.Bdd.t -> bool
    = "camlidl_cudd_bdd_is_complement"
  external topvar : 'Cudd.Bdd.t -> int = "camlidl_cudd_bdd_topvar"
  external dthen : 'Cudd.Bdd.t -> 'Cudd.Bdd.t = "camlidl_cudd_bdd_dthen"
  external delse : 'Cudd.Bdd.t -> 'Cudd.Bdd.t = "camlidl_cudd_bdd_delse"
  external cofactors : int -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t * 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_cofactors"
  external cofactor : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_cofactor"
  external inspect : 'Cudd.Bdd.t -> 'Cudd.Bdd.bdd
    = "camlidl_cudd_bdd_inspect"
  external support : 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_support"
  external supportsize : 'Cudd.Bdd.t -> int
    = "camlidl_cudd_bdd_supportsize"
  external is_var_in : int -> 'Cudd.Bdd.t -> bool
    = "camlidl_cudd_bdd_is_var_in"
  external vectorsupport : 'Cudd.Bdd.t array -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_vectorsupport"
  external support_inter : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_support_inter"
  external support_union : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_dand"
  external support_diff : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_cofactor"
  external list_of_support : 'Cudd.Bdd.t -> int list
    = "camlidl_cudd_list_of_support"
  external dtrue : 'Cudd.Man.t -> 'Cudd.Bdd.t = "camlidl_cudd_bdd_dtrue"
  external dfalse : 'Cudd.Man.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_dfalse"
  external ithvar : 'Cudd.Man.t -> int -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_ithvar"
  external newvar : 'Cudd.Man.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_newvar"
  external newvar_at_level : 'Cudd.Man.t -> int -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_newvar_at_level"
  external is_true : 'Cudd.Bdd.t -> bool = "camlidl_cudd_bdd_is_true"
  external is_false : 'Cudd.Bdd.t -> bool = "camlidl_cudd_bdd_is_false"
  external is_equal : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> bool
    = "camlidl_cudd_bdd_is_equal"
  external is_leq : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> bool
    = "camlidl_cudd_bdd_is_leq"
  external is_inter_empty : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> bool
    = "camlidl_cudd_bdd_is_inter_empty"
  external is_equal_when :
    'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> bool
    = "camlidl_cudd_bdd_is_equal_when"
  external is_leq_when :
    'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> bool
    = "camlidl_cudd_bdd_is_leq_when"
  val is_included_in : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> bool
  external is_ite_cst :
    'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> bool option
    = "camlidl_cudd_bdd_is_ite_cst"
  external is_var_dependent : int -> 'Cudd.Bdd.t -> bool
    = "camlidl_cudd_bdd_is_var_dependent"
  external is_var_essential : int -> bool -> 'Cudd.Bdd.t -> bool
    = "camlidl_cudd_bdd_is_var_essential"
  external size : 'Cudd.Bdd.t -> int = "camlidl_cudd_bdd_size"
  external nbpaths : 'Cudd.Bdd.t -> float = "camlidl_cudd_bdd_nbpaths"
  external nbtruepaths : 'Cudd.Bdd.t -> float
    = "camlidl_cudd_bdd_nbtruepaths"
  external nbminterms : int -> 'Cudd.Bdd.t -> float
    = "camlidl_cudd_bdd_nbminterms"
  external density : int -> 'Cudd.Bdd.t -> float
    = "camlidl_cudd_bdd_density"
  external dnot : 'Cudd.Bdd.t -> 'Cudd.Bdd.t = "camlidl_cudd_bdd_dnot"
  external dand : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_dand"
  external dor : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_dor"
  external xor : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_xor"
  external nand : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_nand"
  external nor : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_nor"
  external nxor : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_nxor"
  val eq : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
  external ite :
    'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_ite"
  external ite_cst :
    'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t option
    = "camlidl_cudd_bdd_ite_cst"
  external compose : int -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_compose"
  val vectorcompose :
    ?memo:Cudd.Memo.t ->
    'Cudd.Bdd.t array -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
  external intersect : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_intersect"
  external varmap : 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_varmap"
  val permute :
    ?memo:Cudd.Memo.t -> 'Cudd.Bdd.t -> int array -> 'Cudd.Bdd.t
  external iter_node : ('Cudd.Bdd.t -> unit) -> 'Cudd.Bdd.t -> unit
    = "camlidl_cudd_iter_node"
  external iter_cube :
    (Cudd.Man.tbool array -> unit) -> 'Cudd.Bdd.t -> unit
    = "camlidl_cudd_bdd_iter_cube"
  external iter_prime :
    (Cudd.Man.tbool array -> unit) -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> unit
    = "camlidl_cudd_bdd_iter_prime"
  external exist : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_exist"
  external forall : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_forall"
  external existand :
    'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_existand"
  external existxor :
    'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_existxor"
  external booleandiff : 'Cudd.Bdd.t -> int -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_booleandiff"
  external cube_of_bdd : 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_cube_of_bdd"
  external cube_of_minterm :
    'Cudd.Man.t -> Cudd.Man.tbool array -> 'Cudd.Bdd.t
    = "camlidl_cudd_cube_of_minterm"
  external list_of_cube : 'Cudd.Bdd.t -> (int * bool) list
    = "camlidl_cudd_list_of_cube"
  external cube_union : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_cube_union"
  external pick_minterm : 'Cudd.Bdd.t -> Cudd.Man.tbool array
    = "camlidl_cudd_pick_minterm"
  external pick_cube_on_support :
    'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_pick_cube_on_support"
  external pick_cubes_on_support :
    'Cudd.Bdd.t -> 'Cudd.Bdd.t -> int -> 'Cudd.Bdd.t array
    = "camlidl_cudd_pick_cubes_on_support"
  external constrain : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_constrain"
  external tdconstrain : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_tdconstrain"
  external restrict : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_restrict"
  external tdrestrict : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_tdrestrict"
  external minimize : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_minimize"
  external licompaction : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_licompaction"
  external squeeze : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_squeeze"
  external clippingand :
    'Cudd.Bdd.t -> 'Cudd.Bdd.t -> int -> bool -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_clippingand"
  external clippingexistand :
    'Cudd.Bdd.t ->
    'Cudd.Bdd.t -> 'Cudd.Bdd.t -> int -> bool -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_clippingexistand"
  external underapprox :
    int -> int -> bool -> float -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_underapprox"
  external overapprox :
    int -> int -> bool -> float -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_overapprox"
  external remapunderapprox :
    int -> int -> float -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_remapunderapprox"
  external remapoverapprox :
    int -> int -> float -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_remapoverapprox"
  external biasedunderapprox :
    int ->
    int -> float -> float -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_biasedunderapprox_bytecode"
    "camlidl_cudd_bdd_biasedunderapprox"
  external biasedoverapprox :
    int ->
    int -> float -> float -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_biasedoverapprox_bytecode"
    "camlidl_cudd_bdd_biasedoverapprox"
  external subsetcompress : int -> int -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_subsetcompress"
  external supersetcompress : int -> int -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_supersetcompress"
  external subsetHB : int -> int -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_subsetHB"
  external supersetHB : int -> int -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_supersetHB"
  external subsetSP : int -> int -> bool -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_subsetSP"
  external supersetSP : int -> int -> bool -> 'Cudd.Bdd.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_supersetSP"
  external approxconjdecomp :
    'Cudd.Bdd.t -> ('Cudd.Bdd.t * 'Cudd.Bdd.t) option
    = "camlidl_cudd_bdd_approxconjdecomp"
  external approxdisjdecomp :
    'Cudd.Bdd.t -> ('Cudd.Bdd.t * 'Cudd.Bdd.t) option
    = "camlidl_cudd_bdd_approxdisjdecomp"
  external iterconjdecomp :
    'Cudd.Bdd.t -> ('Cudd.Bdd.t * 'Cudd.Bdd.t) option
    = "camlidl_cudd_bdd_iterconjdecomp"
  external iterdisjdecomp :
    'Cudd.Bdd.t -> ('Cudd.Bdd.t * 'Cudd.Bdd.t) option
    = "camlidl_cudd_bdd_iterdisjdecomp"
  external genconjdecomp :
    'Cudd.Bdd.t -> ('Cudd.Bdd.t * 'Cudd.Bdd.t) option
    = "camlidl_cudd_bdd_genconjdecomp"
  external gendisjdecomp :
    'Cudd.Bdd.t -> ('Cudd.Bdd.t * 'Cudd.Bdd.t) option
    = "camlidl_cudd_bdd_gendisjdecomp"
  external varconjdecomp :
    'Cudd.Bdd.t -> ('Cudd.Bdd.t * 'Cudd.Bdd.t) option
    = "camlidl_cudd_bdd_varconjdecomp"
  external vardisjdecomp :
    'Cudd.Bdd.t -> ('Cudd.Bdd.t * 'Cudd.Bdd.t) option
    = "camlidl_cudd_bdd_vardisjdecomp"
  external transfer : 'Cudd.Bdd.t -> 'Cudd.Man.t -> 'Cudd.Bdd.t
    = "camlidl_cudd_bdd_transfer"
  external correlation : 'Cudd.Bdd.t -> 'Cudd.Bdd.t -> float
    = "camlidl_cudd_bdd_correlation"
  external correlationweights :
    'Cudd.Bdd.t -> 'Cudd.Bdd.t -> float array -> float
    = "camlidl_cudd_bdd_correlationweights"
  external _print : 'Cudd.Bdd.t -> unit = "camlidl_cudd_print"
  val print__minterm : Format.formatter -> 'Cudd.Bdd.t -> unit
  val print_minterm :
    (Format.formatter -> int -> unit) ->
    Format.formatter -> 'Cudd.Bdd.t -> unit
  val print :
    (Format.formatter -> int -> unit) ->
    Format.formatter -> 'Cudd.Bdd.t -> unit
  val print_list :
    (Format.formatter -> int -> unit) ->
    Format.formatter -> (int * bool) list -> unit
end