sig
  type bnode = BIte of int * int * bool * int | BTrue
  type 'a bdd = {
    cond : int PSette.t Pervasives.ref;
    mutable bdef : (int, Bdd.Output.bnode) PMappe.t;
    bhash : ('Cudd.Bdd.t, int) Hashhe.t;
    mutable blastid : int;
  }
  type 'a vnode = VIte of int * int * int | VCst of 'a
  type 'a vdd = {
    cond : int PSette.t Pervasives.ref;
    mutable vdef : (int, 'Bdd.Output.vnode) PMappe.t;
    lhash : ('a, unit) PHashhe.t;
    vhash : ('Cudd.Vdd.t, int) Hashhe.t;
    mutable vlastid : int;
  }
  type anode = AIte of int * int * int | ACst of float
  type add = {
    cond : int PSette.t Pervasives.ref;
    mutable adef : (int, Bdd.Output.anode) PMappe.t;
    mutable lset : float Sette.t;
    ahash : (Cudd.Add.t, int) Hashhe.t;
    mutable alastid : int;
  }
  val make_bdd : cond:int PSette.t Pervasives.ref -> 'Bdd.Output.bdd
  val signid_of_bdd : 'Bdd.Output.bdd -> 'Cudd.Bdd.t -> bool * int
  val make_vdd :
    compare:'Cudd.PWeakke.compare ->
    cond:int PSette.t Pervasives.ref -> 'Bdd.Output.vdd
  val make_mtbdd :
    table:'Cudd.Mtbdd.table ->
    cond:int PSette.t Pervasives.ref -> 'Cudd.Mtbdd.unique Bdd.Output.vdd
  val make_mtbddc :
    table:'Cudd.Mtbddc.table ->
    cond:int PSette.t Pervasives.ref -> 'Cudd.Mtbddc.unique Bdd.Output.vdd
  val id_of_vdd : 'Bdd.Output.vdd -> 'Cudd.Vdd.t -> int
  val iter_cond_ordered :
    int PSette.t -> 'Cudd.Man.t -> (int -> unit) -> unit
  val iter_bdef_ordered :
    'Bdd.Output.bdd -> (int -> Bdd.Output.bnode -> unit) -> unit
  val iter_vdef_ordered :
    'Bdd.Output.vdd -> (int -> 'Bdd.Output.vnode -> unit) -> unit
end