sig
  module IntTable :
    sig
      type key = int
      type 'a t
      val create : int -> 'a t
      val clear : 'a t -> unit
      val copy : 'a t -> 'a t
      val add : 'a t -> key -> '-> unit
      val remove : 'a t -> key -> unit
      val find : 'a t -> key -> 'a
      val find_all : 'a t -> key -> 'a list
      val replace : 'a t -> key -> '-> unit
      val mem : 'a t -> key -> bool
      val iter : (key -> '-> unit) -> 'a t -> unit
      val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val length : 'a t -> int
    end
  module StringTable :
    sig
      type key = string
      type 'a t
      val create : int -> 'a t
      val clear : 'a t -> unit
      val copy : 'a t -> 'a t
      val add : 'a t -> key -> '-> unit
      val remove : 'a t -> key -> unit
      val find : 'a t -> key -> 'a
      val find_all : 'a t -> key -> 'a list
      val replace : 'a t -> key -> '-> unit
      val mem : 'a t -> key -> bool
      val iter : (key -> '-> unit) -> 'a t -> unit
      val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
      val length : 'a t -> int
    end
  val list_remove_first : ('-> bool) -> 'a list -> 'a list
  val lists_unordered_equal :
    ('-> '-> bool) -> 'a list -> 'b list -> bool
  val lists_equal : ('-> '-> bool) -> 'a list -> 'b list -> bool
  val lists_merge : ('-> '-> bool) -> 'a list -> 'a list -> 'a list
  val list_add : ('-> '-> bool) -> 'a list -> '-> 'a list
  val list_first : int -> 'a list -> 'a list
  val do_lists_intersect : ('-> '-> bool) -> 'a list -> 'a list -> bool
  val lists_shared : ('-> '-> bool) -> 'a list list -> 'a list
  val list_map : ('-> 'a) -> 'a list -> 'a list
  val mapping_extend :
    ('a * 'b) list ->
    ('-> '-> bool) -> ('-> '-> bool) -> '-> '-> ('a * 'b) list
  val array_iter2 : ('-> '-> unit) -> 'a array -> 'b array -> unit
  val array_fold2 :
    ('-> '-> '-> 'a) -> '-> 'b array -> 'c array -> 'a
  val array_exists : ('-> bool) -> 'a array -> bool
  val array_for_all : ('-> bool) -> 'a array -> bool
  val array_find : ('-> bool) -> 'a array -> 'a
  val array_for_all2 : ('-> '-> bool) -> 'a array -> 'b array -> bool
  val compare_int : int -> int -> int
  val max_int : int -> int -> int
  val find_max : ('-> '-> int) -> 'a list -> 'a
end