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