sig
  val get_total_time : unit -> float
  val get_start_time : unit -> float
  module Section :
    sig
      type t
      val full_name : LogtkUtil.Section.t -> string
      val set_debug : LogtkUtil.Section.t -> int -> unit
      val clear_debug : LogtkUtil.Section.t -> unit
      val get_debug : LogtkUtil.Section.t -> int option
      val cur_level : LogtkUtil.Section.t -> int
      val iter : (string * LogtkUtil.Section.t) Sequence.t
      val root : LogtkUtil.Section.t
      val logtk : LogtkUtil.Section.t
      val make :
        ?parent:LogtkUtil.Section.t ->
        ?inheriting:LogtkUtil.Section.t list -> string -> LogtkUtil.Section.t
    end
  val set_debug : int -> unit
  val get_debug : unit -> int
  val need_cleanup : bool Pervasives.ref
  val debug :
    ?section:LogtkUtil.Section.t ->
    int -> ('a, Buffer.t, unit, unit) Pervasives.format4 -> 'a
  val pp_pos : Lexing.position -> string
  val set_memory_limit : int -> unit
  val set_time_limit : int -> unit
  module Infix :
    sig
      val ( |> ) : '-> ('-> 'b) -> 'b
      val ( %> ) : ('-> 'b) -> ('-> 'c) -> '-> 'c
      val ( %% ) : ('-> 'c) -> ('-> 'b) -> '-> 'c
    end
  type profiler
  val enable_profiling : bool Pervasives.ref
  val mk_profiler : string -> LogtkUtil.profiler
  val enter_prof : LogtkUtil.profiler -> unit
  val exit_prof : LogtkUtil.profiler -> unit
  val yield_prof : LogtkUtil.profiler -> unit
  type stat
  val mk_stat : string -> LogtkUtil.stat
  val print_global_stats : unit -> unit
  val incr_stat : LogtkUtil.stat -> unit
  val add_stat : LogtkUtil.stat -> int -> unit
  module Flag :
    sig
      type gen = int Pervasives.ref
      val create : unit -> LogtkUtil.Flag.gen
      val get_new : LogtkUtil.Flag.gen -> int
    end
  val lexicograph : ('-> '-> int) -> 'a list -> 'b list -> int
  val lexicograph_combine : int list -> int
  val opposite_order : ('-> '-> int) -> '-> '-> int
  val list_get : 'a list -> int -> 'a
  val list_set : 'a list -> int -> '-> 'a list
  val list_mapi : 'a list -> (int -> '-> 'b) -> 'b list
  val list_iteri : 'a list -> (int -> '-> unit) -> unit
  val list_remove : 'a list -> int -> 'a list
  val list_pos : 'a list -> ('a * int) list
  val list_mem : ('-> '-> bool) -> '-> 'a list -> bool
  val list_subset : ('-> '-> bool) -> 'a list -> 'a list -> bool
  val list_uniq : ('-> '-> bool) -> 'a list -> 'a list
  val list_merge : ('-> '-> int) -> 'a list -> 'a list -> 'a list
  val list_union : ('-> '-> bool) -> 'a list -> 'a list -> 'a list
  val list_inter : ('-> '-> bool) -> 'a list -> 'a list -> 'a list
  val list_split_at : int -> 'a list -> 'a list * 'a list
  val list_find : ('-> bool) -> 'a list -> (int * 'a) option
  val list_fmap : ('-> 'b option) -> 'a list -> 'b list
  val list_flatmap : ('-> 'b list) -> 'a list -> 'b list
  val list_take : int -> 'a list -> 'a list
  val list_drop : int -> 'a list -> 'a list
  val list_range : int -> int -> int list
  val list_foldi : ('-> int -> '-> 'b) -> '-> 'a list -> 'b
  val times : int -> (unit -> 'a) -> 'a list
  val list_product : 'a list -> 'b list -> ('a * 'b) list
  val list_fold_product :
    'a list -> 'b list -> '-> ('-> '-> '-> 'c) -> 'c
  val list_diagonal : 'a list -> ('a * 'a) list
  val array_shuffle : 'a array -> unit
  val list_shuffle : 'a list -> 'a list
  val array_foldi : ('-> int -> '-> 'b) -> '-> 'a array -> 'b
  val array_forall : ('-> bool) -> 'a array -> bool
  val array_forall2 : ('-> '-> bool) -> 'a array -> 'a array -> bool
  val array_exists : ('-> bool) -> 'a array -> bool
  val array_except_idx : 'a array -> int -> 'a list
  val str_sub : sub:string -> int -> string -> int -> bool
  val str_split : by:string -> string -> string list
  val str_find : ?start:int -> sub:string -> string -> int
  val str_repeat : string -> int -> string
  val str_prefix : pre:string -> string -> bool
  val finally : h:(unit -> unit) -> f:(unit -> 'a) -> 'a
  val with_lock_file : string -> (unit -> 'a) -> 'a
  val with_input : string -> (Pervasives.in_channel -> 'a) -> 'a option
  val with_output : string -> (Pervasives.out_channel -> 'a) -> 'a option
  val slurp : Pervasives.in_channel -> string
  type 'a or_error = [ `Error of string | `Ok of 'a ]
  val popen : cmd:string -> input:string -> string LogtkUtil.or_error
  val sprintf : ('a, Buffer.t, unit, string) Pervasives.format4 -> 'a
  val fprintf :
    Pervasives.out_channel ->
    ('a, Buffer.t, unit, unit) Pervasives.format4 -> 'a
  val printf : ('a, Buffer.t, unit, unit) Pervasives.format4 -> 'a
  val eprintf : ('a, Buffer.t, unit, unit) Pervasives.format4 -> 'a
  val on_buffer : (Buffer.t -> '-> unit) -> '-> string
  val pp_pair :
    ?sep:string ->
    (Buffer.t -> '-> unit) ->
    (Buffer.t -> '-> unit) -> Buffer.t -> 'a * '-> unit
  val pp_opt : (Buffer.t -> '-> unit) -> Buffer.t -> 'a option -> unit
  val pp_list :
    ?sep:string -> (Buffer.t -> '-> unit) -> Buffer.t -> 'a list -> unit
  val pp_array :
    ?sep:string -> (Buffer.t -> '-> unit) -> Buffer.t -> 'a array -> unit
  val pp_arrayi :
    ?sep:string ->
    (Buffer.t -> int -> '-> unit) -> Buffer.t -> 'a array -> unit
  val pp_seq :
    ?sep:string ->
    (Buffer.t -> '-> unit) -> Buffer.t -> 'Sequence.t -> unit
end