sig
  type t
  val name : Goals.t -> string
  val fprint : Pervasives.out_channel -> Goals.t -> unit
  val fail : Goals.t
  val success : Goals.t
  val atomic : ?name:string -> (unit -> unit) -> Goals.t
  val create : ?name:string -> ('-> Goals.t) -> '-> Goals.t
  val create_rec : ?name:string -> (Goals.t -> Goals.t) -> Goals.t
  val ( &&~ ) : Goals.t -> Goals.t -> Goals.t
  val ( ||~ ) : Goals.t -> Goals.t -> Goals.t
  val forto : int -> int -> (int -> Goals.t) -> Goals.t
  val fordownto : int -> int -> (int -> Goals.t) -> Goals.t
  val once : Goals.t -> Goals.t
  val sigma : ?domain:Domain.t -> (Var.Fd.t -> Goals.t) -> Goals.t
  val unify : Var.Fd.t -> int -> Goals.t
  val indomain : Var.Fd.t -> Goals.t
  val instantiate : (Domain.t -> int) -> Var.Fd.t -> Goals.t
  val dichotomic : Var.Fd.t -> Goals.t
  module Conjunto : sig val indomain : Var.SetFd.t -> Goals.t end
  module Array :
    sig
      val foralli :
        ?select:('a array -> int) ->
        (int -> '-> Goals.t) -> 'a array -> Goals.t
      val forall :
        ?select:('a array -> int) -> ('-> Goals.t) -> 'a array -> Goals.t
      val existsi :
        ?select:('a array -> int) ->
        (int -> '-> Goals.t) -> 'a array -> Goals.t
      val exists :
        ?select:('a array -> int) -> ('-> Goals.t) -> 'a array -> Goals.t
      val choose_index :
        (Var.Attr.t -> Var.Attr.t -> bool) -> Var.Fd.t array -> int
      val not_instantiated_fd : Var.Fd.t array -> int
      val labeling : Var.Fd.t array -> Goals.t
    end
  module List :
    sig
      val forall :
        ?select:('a list -> 'a * 'a list) ->
        ('-> Goals.t) -> 'a list -> Goals.t
      val exists :
        ?select:('a list -> 'a * 'a list) ->
        ('-> Goals.t) -> 'a list -> Goals.t
      val member : Var.Fd.t -> int list -> Goals.t
      val labeling : Var.Fd.t list -> Goals.t
    end
  type bb_mode = Restart | Continue
  val minimize :
    ?step:int ->
    ?mode:Goals.bb_mode -> Goals.t -> Var.Fd.t -> (int -> unit) -> Goals.t
  val lds : ?step:int -> Goals.t -> Goals.t
  val solve : ?control:(int -> unit) -> Goals.t -> bool
  val reset : unit -> unit
end