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