sig
  val uuid : unit -> string
  val list_unique : 'a list -> 'a list
  val memo : ('-> 'b) -> '-> 'b
  val timestamp : unit -> string
  type label = string
  module type Messages =
    sig
      type t
      val create :
        ?enabled:bool -> Common.Util.label -> Common.Util.Messages.t
      val eprintf :
        ?raw:bool ->
        Common.Util.Messages.t ->
        ('a, unit, string, unit) Pervasives.format4 -> 'a
      val enable : Common.Util.label -> unit
      val disable : Common.Util.label -> unit
      val all_disabled : unit -> unit
      val all_enabled : unit -> unit
      val avalaible : unit -> Common.Util.label list
      val is_enabled : Common.Util.label -> bool
    end
  module Debug : Messages
  module Warning : Messages
  module Info : Messages
  module Notice : Messages
  module Logging :
    functor (X : sig val label : string end->
      sig
        val it : Info.t
        val info : ('a, unit, string, unit) Pervasives.format4 -> 'a
        val nt : Notice.t
        val notice : ('a, unit, string, unit) Pervasives.format4 -> 'a
        val wt : Warning.t
        val warning : ('a, unit, string, unit) Pervasives.format4 -> 'a
        val dt : Debug.t
        val debug : ('a, unit, string, unit) Pervasives.format4 -> 'a
        val fatal : ('a, unit, string, 'b) Pervasives.format4 -> 'a
      end
  module Progress :
    sig
      type t
      val create :
        ?enabled:bool ->
        ?total:int ->
        ?unbounded:bool -> Common.Util.label -> Common.Util.Progress.t
      val enable : Common.Util.label -> unit
      val disable : Common.Util.label -> unit
      val set_total : Common.Util.Progress.t -> int -> unit
      val progress : ?i:int -> Common.Util.Progress.t -> unit
      val reset : Common.Util.Progress.t -> unit
      val available : unit -> Common.Util.label list
    end
  module Timer :
    sig
      type t
      val create : ?enabled:bool -> string -> Common.Util.Timer.t
      val enable : Common.Util.label -> unit
      val pp_timer : Format.formatter -> Common.Util.Timer.t -> unit
      val dump : Format.formatter -> unit -> unit
      val start : Common.Util.Timer.t -> unit
      val stop : Common.Util.Timer.t -> '-> 'a
      val available : unit -> Common.Util.label list
    end
  module IntHashtbl :
    sig
      type key = int
      type 'a t
      val create : int -> 'a t
      val clear : 'a t -> unit
      val reset : '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
      val stats : 'a t -> Hashtbl.statistics
    end
  module IntPairHashtbl :
    sig
      type key = int * int
      type 'a t
      val create : int -> 'a t
      val clear : 'a t -> unit
      val reset : '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
      val stats : 'a t -> Hashtbl.statistics
    end
  module StringHashtbl :
    sig
      type key = string
      type 'a t
      val create : int -> 'a t
      val clear : 'a t -> unit
      val reset : '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
      val stats : 'a t -> Hashtbl.statistics
    end
  module StringPairHashtbl :
    sig
      type key = string * string
      type 'a t
      val create : int -> 'a t
      val clear : 'a t -> unit
      val reset : '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
      val stats : 'a t -> Hashtbl.statistics
    end
  val range : int -> int -> int list
  val string_of_list :
    ?delim:string * string ->
    ?sep:string -> ('-> string) -> 'a list -> string
  class type projection =
    object
      method add : int -> unit
      method inttovar : int -> int
      method vartoint : int -> int
    end
  class identity : projection
  class intprojection : int -> projection
end