sig
  type 'a t
  val empty : 'Cubetrie.t
  val is_empty : 'Cubetrie.t -> bool
  val add : Types.Atom.t list -> '-> 'Cubetrie.t -> 'Cubetrie.t
  val add_force : Types.Atom.t list -> '-> 'Cubetrie.t -> 'Cubetrie.t
  val add_array : Types.ArrayAtom.t -> '-> 'Cubetrie.t -> 'Cubetrie.t
  val add_array_force :
    Types.ArrayAtom.t -> '-> 'Cubetrie.t -> 'Cubetrie.t
  val mem : Types.Atom.t list -> Node.t Cubetrie.t -> int list option
  val mem_array : Types.ArrayAtom.t -> Node.t Cubetrie.t -> int list option
  val mem_array_poly : Types.ArrayAtom.t -> 'Cubetrie.t -> bool
  val iter : ('-> unit) -> 'Cubetrie.t -> unit
  val fold : ('-> '-> 'b) -> '-> 'Cubetrie.t -> 'b
  val delete : ('-> bool) -> 'Cubetrie.t -> 'Cubetrie.t
  val iter_subsumed :
    ('-> unit) -> Types.Atom.t list -> 'Cubetrie.t -> unit
  val all_vals : 'Cubetrie.t -> 'a list
  val consistent : Types.Atom.t list -> 'Cubetrie.t -> 'a list
  val add_and_resolve : Node.t -> Node.t Cubetrie.t -> Node.t Cubetrie.t
  val delete_subsumed :
    ?cpt:int Pervasives.ref ->
    Node.t -> Node.t Cubetrie.t -> Node.t Cubetrie.t
  val add_node : Node.t -> Node.t Cubetrie.t -> Node.t Cubetrie.t
end