sig
  type 'a t
  type 'a hashtbl = 'Cudd.Weakke.t
  type 'a compare = { hash : '-> int; equal : '-> '-> bool; }
  val create : int -> 'Cudd.Weakke.t
  val clear : 'Cudd.Weakke.t -> unit
  val merge : 'Cudd.Weakke.t -> '-> 'a
  val merge_map : 'Cudd.Weakke.t -> '-> ('-> 'a) -> 'a
  val add : 'Cudd.Weakke.t -> '-> unit
  val remove : 'Cudd.Weakke.t -> '-> unit
  val find : 'Cudd.Weakke.t -> '-> 'a
  val find_all : 'Cudd.Weakke.t -> '-> 'a list
  val mem : 'Cudd.Weakke.t -> '-> bool
  val iter : ('-> 'b) -> 'Cudd.Weakke.t -> unit
  val fold : ('-> '-> 'b) -> 'Cudd.Weakke.t -> '-> 'b
  val count : 'Cudd.Weakke.t -> int
  val stats : 'Cudd.Weakke.t -> int * int * int * int * int * int
  val print :
    ?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.Weakke.t -> unit
  module type S =
    sig
      type data
      type t
      val create : int -> Cudd.Weakke.S.t
      val clear : Cudd.Weakke.S.t -> unit
      val merge : Cudd.Weakke.S.t -> Cudd.Weakke.S.data -> Cudd.Weakke.S.data
      val merge_map :
        Cudd.Weakke.S.t ->
        Cudd.Weakke.S.data ->
        (Cudd.Weakke.S.data -> Cudd.Weakke.S.data) -> Cudd.Weakke.S.data
      val add : Cudd.Weakke.S.t -> Cudd.Weakke.S.data -> unit
      val remove : Cudd.Weakke.S.t -> Cudd.Weakke.S.data -> unit
      val find : Cudd.Weakke.S.t -> Cudd.Weakke.S.data -> Cudd.Weakke.S.data
      val find_all :
        Cudd.Weakke.S.t -> Cudd.Weakke.S.data -> Cudd.Weakke.S.data list
      val mem : Cudd.Weakke.S.t -> Cudd.Weakke.S.data -> bool
      val iter : (Cudd.Weakke.S.data -> unit) -> Cudd.Weakke.S.t -> unit
      val fold :
        (Cudd.Weakke.S.data -> '-> 'a) -> Cudd.Weakke.S.t -> '-> 'a
      val count : Cudd.Weakke.S.t -> int
      val stats : Cudd.Weakke.S.t -> int * int * int * int * int * int
      val print :
        ?first:(unit, Format.formatter, unit) Pervasives.format ->
        ?sep:(unit, Format.formatter, unit) Pervasives.format ->
        ?last:(unit, Format.formatter, unit) Pervasives.format ->
        (Format.formatter -> Cudd.Weakke.S.data -> unit) ->
        Format.formatter -> Cudd.Weakke.S.t -> unit
    end
  module Make :
    functor (H : Hashtbl.HashedType->
      sig
        type data = H.t
        type t
        val create : int -> t
        val clear : t -> unit
        val merge : t -> data -> data
        val merge_map : t -> data -> (data -> data) -> data
        val add : t -> data -> unit
        val remove : t -> data -> unit
        val find : t -> data -> data
        val find_all : t -> data -> data list
        val mem : t -> data -> bool
        val iter : (data -> unit) -> t -> unit
        val fold : (data -> '-> 'a) -> t -> '-> 'a
        val count : t -> int
        val stats : t -> int * int * int * int * int * int
        val print :
          ?first:(unit, Format.formatter, unit) format ->
          ?sep:(unit, Format.formatter, unit) format ->
          ?last:(unit, Format.formatter, unit) format ->
          (Format.formatter -> data -> unit) -> Format.formatter -> t -> unit
      end
  module Compare :
    sig
      val add : 'Cudd.Weakke.compare -> 'Cudd.Weakke.t -> '-> unit
      val find_or :
        'Cudd.Weakke.compare ->
        'Cudd.Weakke.t -> '-> (int -> int -> 'a) -> 'a
      val merge : 'Cudd.Weakke.compare -> 'Cudd.Weakke.t -> '-> 'a
      val merge_map :
        'Cudd.Weakke.compare -> 'Cudd.Weakke.t -> '-> ('-> 'a) -> 'a
      val find : 'Cudd.Weakke.compare -> 'Cudd.Weakke.t -> '-> 'a
      val find_shadow :
        'Cudd.Weakke.compare ->
        'Cudd.Weakke.t -> '-> ('Weak.t -> int -> 'b) -> '-> 'b
      val remove : 'Cudd.Weakke.compare -> 'Cudd.Weakke.t -> '-> unit
      val mem : 'Cudd.Weakke.compare -> 'Cudd.Weakke.t -> '-> bool
      val find_all :
        'Cudd.Weakke.compare -> 'Cudd.Weakke.t -> '-> 'a list
    end
end