sig
  type level
  val older : Stak.level -> Stak.level -> bool
  val size : unit -> int
  val depth : unit -> int
  val level : unit -> Stak.level
  val levels : unit -> Stak.level list
  val nb_choice_points : unit -> int
  exception Level_not_found of Stak.level
  val cut : Stak.level -> unit
  exception Fail of string
  val fail : string -> 'a
  type 'a ref
  val ref : '-> 'Stak.ref
  val set : 'Stak.ref -> '-> unit
  val get : 'Stak.ref -> 'a
  type gl = { name : string; call : unit -> Stak.gl option; }
  exception Empty_stack
  val reset : unit -> unit
  val save : Stak.gl list -> Stak.level
  val backtrack : unit -> Stak.gl list
  val backtrack_all : unit -> unit
  val trail : (unit -> unit) -> unit
  val cut_bottom : Stak.level -> unit
  val unsafe_set : 'Stak.ref -> '-> unit
end