sig
  module Ctx :
    sig
      val ord : unit -> Libzipperposition.Ordering.t
      val selection_fun : unit -> Selection.t
      val set_selection_fun : Selection.t -> unit
      val set_ord : Libzipperposition.Ordering.t -> unit
      val signature : unit -> Libzipperposition.Signature.t
      val renaming : Libzipperposition.Substs.Renaming.t
      val compare :
        Libzipperposition.FOTerm.t ->
        Libzipperposition.FOTerm.t -> Libzipperposition.Comparison.t
      val select : Selection.t
      val renaming_clear : unit -> Libzipperposition.Substs.Renaming.t
      val lost_completeness : unit -> unit
      val is_completeness_preserved : unit -> bool
      val add_signature : Libzipperposition.Signature.t -> unit
      val find_signature :
        Libzipperposition.ID.t -> Libzipperposition.Type.t option
      val find_signature_exn :
        Libzipperposition.ID.t -> Libzipperposition.Type.t
      val declare :
        Libzipperposition.ID.t -> Libzipperposition.Type.t -> unit
      val on_new_symbol :
        (Libzipperposition.ID.t * Libzipperposition.Type.t) Signal.t
      val on_signature_update : Libzipperposition.Signature.t Signal.t
      module Lit :
        sig
          val from_hooks : unit -> Literal.Conv.hook_from list
          val add_from_hook : Literal.Conv.hook_from -> unit
          val to_hooks : unit -> Literal.Conv.hook_to list
          val add_to_hook : Literal.Conv.hook_to -> unit
          val of_form :
            Libzipperposition.FOTerm.t Libzipperposition.SLiteral.t ->
            Literal.t
          val to_form :
            Literal.t ->
            Libzipperposition.FOTerm.t Libzipperposition.SLiteral.t
        end
    end
  module C :
    sig
      module Ctx :
        sig
          val ord : unit -> Libzipperposition.Ordering.t
          val selection_fun : unit -> Selection.t
          val set_selection_fun : Selection.t -> unit
          val set_ord : Libzipperposition.Ordering.t -> unit
          val signature : unit -> Libzipperposition.Signature.t
          val renaming : Libzipperposition.Substs.Renaming.t
          val compare :
            Libzipperposition.FOTerm.t ->
            Libzipperposition.FOTerm.t -> Libzipperposition.Comparison.t
          val select : Selection.t
          val renaming_clear : unit -> Libzipperposition.Substs.Renaming.t
          val lost_completeness : unit -> unit
          val is_completeness_preserved : unit -> bool
          val add_signature : Libzipperposition.Signature.t -> unit
          val find_signature :
            Libzipperposition.ID.t -> Libzipperposition.Type.t option
          val find_signature_exn :
            Libzipperposition.ID.t -> Libzipperposition.Type.t
          val declare :
            Libzipperposition.ID.t -> Libzipperposition.Type.t -> unit
          val on_new_symbol :
            (Libzipperposition.ID.t * Libzipperposition.Type.t) Signal.t
          val on_signature_update : Libzipperposition.Signature.t Signal.t
          module Lit :
            sig
              val from_hooks : unit -> Literal.Conv.hook_from list
              val add_from_hook : Literal.Conv.hook_from -> unit
              val to_hooks : unit -> Literal.Conv.hook_to list
              val add_to_hook : Literal.Conv.hook_to -> unit
              val of_form :
                Libzipperposition.FOTerm.t Libzipperposition.SLiteral.t ->
                Literal.t
              val to_form :
                Literal.t ->
                Libzipperposition.FOTerm.t Libzipperposition.SLiteral.t
            end
        end
      type t = Env.C.t
      type clause = t
      type flag = SClause.flag
      val set_flag : flag -> t -> bool -> unit
      val get_flag : flag -> t -> bool
      val mark_redundant : t -> unit
      val is_redundant : t -> bool
      val mark_backward_simplified : t -> unit
      val is_backward_simplified : t -> bool
      val equal : t -> t -> bool
      val hash_fun : t -> CCHash.state -> CCHash.state
      val hash : t -> int
      val compare : t -> t -> int
      val id : t -> int
      val lits : t -> Literal.t array
      val is_ground : t -> bool
      val weight : t -> int
      module CHashtbl :
        sig
          type key = t
          type 'a t = 'Env.C.CHashtbl.t
          val create : int -> 'a t
          val clear : 'a t -> unit
          val reset : 'a t -> unit
          val copy : 'a t -> 'a t
          val add : 'a t -> key -> '-> unit
          val remove : 'a t -> key -> unit
          val find : 'a t -> key -> 'a
          val find_all : 'a t -> key -> 'a list
          val replace : 'a t -> key -> '-> unit
          val mem : 'a t -> key -> bool
          val iter : (key -> '-> unit) -> 'a t -> unit
          val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
          val length : 'a t -> int
          val stats : 'a t -> Hashtbl.statistics
          val get : 'a t -> key -> 'a option
          val get_or : 'a t -> key -> or_:'-> 'a
          val add_list : 'a list t -> key -> '-> unit
          val incr : ?by:int -> int t -> key -> unit
          val decr : ?by:int -> int t -> key -> unit
          val keys : 'a t -> key CCHashtbl.sequence
          val values : 'a t -> 'CCHashtbl.sequence
          val keys_list : 'a t -> key list
          val values_list : 'a t -> 'a list
          val map_list : (key -> '-> 'b) -> 'a t -> 'b list
          val to_seq : 'a t -> (key * 'a) CCHashtbl.sequence
          val of_seq : (key * 'a) CCHashtbl.sequence -> 'a t
          val add_seq : 'a t -> (key * 'a) CCHashtbl.sequence -> unit
          val add_seq_count : int t -> key CCHashtbl.sequence -> unit
          val of_seq_count : key CCHashtbl.sequence -> int t
          val to_list : 'a t -> (key * 'a) list
          val of_list : (key * 'a) list -> 'a t
          val update :
            'a t -> f:(key -> 'a option -> 'a option) -> k:key -> unit
          val print :
            key CCHashtbl.printer ->
            'CCHashtbl.printer -> 'a t CCHashtbl.printer
        end
      val is_goal : t -> bool
      val distance_to_goal : t -> int option
      val pp_trail : Trail.t CCFormat.printer
      val has_trail : t -> bool
      val trail : t -> Trail.t
      val trail_l : t list -> Trail.t
      val update_trail : (Trail.t -> Trail.t) -> t -> t
      val trail_subsumes : t -> t -> bool
      val is_active : t -> v:Trail.valuation -> bool
      val create :
        trail:Trail.t -> Literal.t list -> Clause_intf.proof_step -> t
      val create_a :
        trail:Trail.t -> Literal.t array -> Clause_intf.proof_step -> t
      val of_sclause : SClause.t -> Clause_intf.proof_step -> t
      val of_forms :
        trail:Trail.t ->
        Libzipperposition.FOTerm.t Libzipperposition.SLiteral.t list ->
        Clause_intf.proof_step -> t
      val of_forms_axiom :
        file:string ->
        name:string ->
        Libzipperposition.FOTerm.t Libzipperposition.SLiteral.t list -> t
      val of_statement : Libzipperposition.Statement.clause_t -> t list
      val proof_step : t -> Clause_intf.proof_step
      val proof : t -> Clause_intf.proof
      val update_proof :
        t -> (Clause_intf.proof_step -> Clause_intf.proof_step) -> t
      val is_empty : t -> bool
      val length : t -> int
      val apply_subst :
        renaming:Libzipperposition.Substs.Renaming.t ->
        Libzipperposition.Substs.t -> t Libzipperposition.Scoped.t -> t
      val maxlits :
        t Libzipperposition.Scoped.t -> Libzipperposition.Substs.t -> CCBV.t
      val is_maxlit :
        t Libzipperposition.Scoped.t ->
        Libzipperposition.Substs.t -> idx:int -> bool
      val eligible_res :
        t Libzipperposition.Scoped.t -> Libzipperposition.Substs.t -> CCBV.t
      val eligible_param :
        t Libzipperposition.Scoped.t -> Libzipperposition.Substs.t -> CCBV.t
      val is_eligible_param :
        t Libzipperposition.Scoped.t ->
        Libzipperposition.Substs.t -> idx:int -> bool
      val has_selected_lits : t -> bool
      val is_selected : t -> int -> bool
      val selected_lits : t -> (Literal.t * int) list
      val is_unit_clause : t -> bool
      val is_oriented_rule : t -> bool
      val symbols :
        ?init:Libzipperposition.ID.Set.t ->
        t Sequence.t -> Libzipperposition.ID.Set.t
      val to_sclause : t -> SClause.t
      val to_forms :
        t -> Libzipperposition.FOTerm.t Libzipperposition.SLiteral.t list
      module Seq :
        sig
          val lits : t -> Literal.t Sequence.t
          val terms : t -> Libzipperposition.FOTerm.t Sequence.t
          val vars :
            t -> Libzipperposition.Type.t Libzipperposition.HVar.t Sequence.t
        end
      module Eligible :
        sig
          type t = int -> Literal.t -> bool
          val res : clause -> t
          val param : clause -> t
          val eq : t
          val arith : t
          val filter : (Literal.t -> bool) -> t
          val max : clause -> t
          val pos : t
          val neg : t
          val always : t
          val combine : t list -> t
          val ( ** ) : t -> t -> t
          val ( ++ ) : t -> t -> t
          val ( ~~ ) : t -> t
        end
      module ClauseSet :
        sig
          type elt = t
          type t = Env.C.ClauseSet.t
          val empty : t
          val is_empty : t -> bool
          val mem : elt -> t -> bool
          val add : elt -> t -> t
          val singleton : elt -> t
          val remove : elt -> t -> t
          val union : t -> t -> t
          val inter : t -> t -> t
          val diff : t -> t -> t
          val compare : t -> t -> int
          val equal : t -> t -> bool
          val subset : t -> t -> bool
          val iter : (elt -> unit) -> t -> unit
          val fold : (elt -> '-> 'a) -> t -> '-> 'a
          val for_all : (elt -> bool) -> t -> bool
          val exists : (elt -> bool) -> t -> bool
          val filter : (elt -> bool) -> t -> t
          val partition : (elt -> bool) -> t -> t * t
          val cardinal : t -> int
          val elements : t -> elt list
          val min_elt : t -> elt
          val max_elt : t -> elt
          val choose : t -> elt
          val split : elt -> t -> t * bool * t
          val find : elt -> t -> elt
          val of_seq : elt CCSet.sequence -> t
          val add_seq : t -> elt CCSet.sequence -> t
          val to_seq : t -> elt CCSet.sequence
          val of_list : elt list -> t
          val add_list : t -> elt list -> t
          val to_list : t -> elt list
          val pp :
            ?start:string ->
            ?stop:string ->
            ?sep:string -> elt CCSet.printer -> t CCSet.printer
          val print :
            ?start:string ->
            ?stop:string ->
            ?sep:string -> elt CCSet.formatter -> t CCSet.formatter
        end
      module Pos :
        sig
          val at :
            t -> Libzipperposition.Position.t -> Libzipperposition.FOTerm.t
        end
      module WithPos :
        sig
          type t =
            Env.C.WithPos.t = {
            clause : clause;
            pos : Libzipperposition.Position.t;
            term : Libzipperposition.FOTerm.t;
          }
          val compare : t -> t -> int
          val pp : t CCFormat.printer
        end
      val pp : t CCFormat.printer
      val pp_tstp : t CCFormat.printer
      val pp_tstp_full : t CCFormat.printer
      val to_string : t -> string
      val pp_set : ClauseSet.t CCFormat.printer
      val pp_set_tstp : ClauseSet.t CCFormat.printer
    end
  module CQueue :
    sig
      module C :
        sig
          module Ctx :
            sig
              val ord : unit -> Libzipperposition.Ordering.t
              val selection_fun : unit -> Selection.t
              val set_selection_fun : Selection.t -> unit
              val set_ord : Libzipperposition.Ordering.t -> unit
              val signature : unit -> Libzipperposition.Signature.t
              val renaming : Libzipperposition.Substs.Renaming.t
              val compare :
                Libzipperposition.FOTerm.t ->
                Libzipperposition.FOTerm.t -> Libzipperposition.Comparison.t
              val select : Selection.t
              val renaming_clear :
                unit -> Libzipperposition.Substs.Renaming.t
              val lost_completeness : unit -> unit
              val is_completeness_preserved : unit -> bool
              val add_signature : Libzipperposition.Signature.t -> unit
              val find_signature :
                Libzipperposition.ID.t -> Libzipperposition.Type.t option
              val find_signature_exn :
                Libzipperposition.ID.t -> Libzipperposition.Type.t
              val declare :
                Libzipperposition.ID.t -> Libzipperposition.Type.t -> unit
              val on_new_symbol :
                (Libzipperposition.ID.t * Libzipperposition.Type.t) Signal.t
              val on_signature_update :
                Libzipperposition.Signature.t Signal.t
              module Lit :
                sig
                  val from_hooks : unit -> Literal.Conv.hook_from list
                  val add_from_hook : Literal.Conv.hook_from -> unit
                  val to_hooks : unit -> Literal.Conv.hook_to list
                  val add_to_hook : Literal.Conv.hook_to -> unit
                  val of_form :
                    Libzipperposition.FOTerm.t Libzipperposition.SLiteral.t ->
                    Literal.t
                  val to_form :
                    Literal.t ->
                    Libzipperposition.FOTerm.t Libzipperposition.SLiteral.t
                end
            end
          type t = C.t
          type clause = t
          type flag = SClause.flag
          val set_flag : flag -> t -> bool -> unit
          val get_flag : flag -> t -> bool
          val mark_redundant : t -> unit
          val is_redundant : t -> bool
          val mark_backward_simplified : t -> unit
          val is_backward_simplified : t -> bool
          val equal : t -> t -> bool
          val hash_fun : t -> CCHash.state -> CCHash.state
          val hash : t -> int
          val compare : t -> t -> int
          val id : t -> int
          val lits : t -> Literal.t array
          val is_ground : t -> bool
          val weight : t -> int
          module CHashtbl :
            sig
              type key = t
              type 'a t = 'C.CHashtbl.t
              val create : int -> 'a t
              val clear : 'a t -> unit
              val reset : 'a t -> unit
              val copy : 'a t -> 'a t
              val add : 'a t -> key -> '-> unit
              val remove : 'a t -> key -> unit
              val find : 'a t -> key -> 'a
              val find_all : 'a t -> key -> 'a list
              val replace : 'a t -> key -> '-> unit
              val mem : 'a t -> key -> bool
              val iter : (key -> '-> unit) -> 'a t -> unit
              val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
              val length : 'a t -> int
              val stats : 'a t -> Hashtbl.statistics
              val get : 'a t -> key -> 'a option
              val get_or : 'a t -> key -> or_:'-> 'a
              val add_list : 'a list t -> key -> '-> unit
              val incr : ?by:int -> int t -> key -> unit
              val decr : ?by:int -> int t -> key -> unit
              val keys : 'a t -> key CCHashtbl.sequence
              val values : 'a t -> 'CCHashtbl.sequence
              val keys_list : 'a t -> key list
              val values_list : 'a t -> 'a list
              val map_list : (key -> '-> 'b) -> 'a t -> 'b list
              val to_seq : 'a t -> (key * 'a) CCHashtbl.sequence
              val of_seq : (key * 'a) CCHashtbl.sequence -> 'a t
              val add_seq : 'a t -> (key * 'a) CCHashtbl.sequence -> unit
              val add_seq_count : int t -> key CCHashtbl.sequence -> unit
              val of_seq_count : key CCHashtbl.sequence -> int t
              val to_list : 'a t -> (key * 'a) list
              val of_list : (key * 'a) list -> 'a t
              val update :
                'a t -> f:(key -> 'a option -> 'a option) -> k:key -> unit
              val print :
                key CCHashtbl.printer ->
                'CCHashtbl.printer -> 'a t CCHashtbl.printer
            end
          val is_goal : t -> bool
          val distance_to_goal : t -> int option
          val pp_trail : Trail.t CCFormat.printer
          val has_trail : t -> bool
          val trail : t -> Trail.t
          val trail_l : t list -> Trail.t
          val update_trail : (Trail.t -> Trail.t) -> t -> t
          val trail_subsumes : t -> t -> bool
          val is_active : t -> v:Trail.valuation -> bool
          val create :
            trail:Trail.t -> Literal.t list -> Clause_intf.proof_step -> t
          val create_a :
            trail:Trail.t -> Literal.t array -> Clause_intf.proof_step -> t
          val of_sclause : SClause.t -> Clause_intf.proof_step -> t
          val of_forms :
            trail:Trail.t ->
            Libzipperposition.FOTerm.t Libzipperposition.SLiteral.t list ->
            Clause_intf.proof_step -> t
          val of_forms_axiom :
            file:string ->
            name:string ->
            Libzipperposition.FOTerm.t Libzipperposition.SLiteral.t list -> t
          val of_statement : Libzipperposition.Statement.clause_t -> t list
          val proof_step : t -> Clause_intf.proof_step
          val proof : t -> Clause_intf.proof
          val update_proof :
            t -> (Clause_intf.proof_step -> Clause_intf.proof_step) -> t
          val is_empty : t -> bool
          val length : t -> int
          val apply_subst :
            renaming:Libzipperposition.Substs.Renaming.t ->
            Libzipperposition.Substs.t -> t Libzipperposition.Scoped.t -> t
          val maxlits :
            t Libzipperposition.Scoped.t ->
            Libzipperposition.Substs.t -> CCBV.t
          val is_maxlit :
            t Libzipperposition.Scoped.t ->
            Libzipperposition.Substs.t -> idx:int -> bool
          val eligible_res :
            t Libzipperposition.Scoped.t ->
            Libzipperposition.Substs.t -> CCBV.t
          val eligible_param :
            t Libzipperposition.Scoped.t ->
            Libzipperposition.Substs.t -> CCBV.t
          val is_eligible_param :
            t Libzipperposition.Scoped.t ->
            Libzipperposition.Substs.t -> idx:int -> bool
          val has_selected_lits : t -> bool
          val is_selected : t -> int -> bool
          val selected_lits : t -> (Literal.t * int) list
          val is_unit_clause : t -> bool
          val is_oriented_rule : t -> bool
          val symbols :
            ?init:Libzipperposition.ID.Set.t ->
            t Sequence.t -> Libzipperposition.ID.Set.t
          val to_sclause : t -> SClause.t
          val to_forms :
            t -> Libzipperposition.FOTerm.t Libzipperposition.SLiteral.t list
          module Seq :
            sig
              val lits : t -> Literal.t Sequence.t
              val terms : t -> Libzipperposition.FOTerm.t Sequence.t
              val vars :
                t ->
                Libzipperposition.Type.t Libzipperposition.HVar.t Sequence.t
            end
          module Eligible :
            sig
              type t = int -> Literal.t -> bool
              val res : clause -> t
              val param : clause -> t
              val eq : t
              val arith : t
              val filter : (Literal.t -> bool) -> t
              val max : clause -> t
              val pos : t
              val neg : t
              val always : t
              val combine : t list -> t
              val ( ** ) : t -> t -> t
              val ( ++ ) : t -> t -> t
              val ( ~~ ) : t -> t
            end
          module ClauseSet :
            sig
              type elt = t
              type t = C.ClauseSet.t
              val empty : t
              val is_empty : t -> bool
              val mem : elt -> t -> bool
              val add : elt -> t -> t
              val singleton : elt -> t
              val remove : elt -> t -> t
              val union : t -> t -> t
              val inter : t -> t -> t
              val diff : t -> t -> t
              val compare : t -> t -> int
              val equal : t -> t -> bool
              val subset : t -> t -> bool
              val iter : (elt -> unit) -> t -> unit
              val fold : (elt -> '-> 'a) -> t -> '-> 'a
              val for_all : (elt -> bool) -> t -> bool
              val exists : (elt -> bool) -> t -> bool
              val filter : (elt -> bool) -> t -> t
              val partition : (elt -> bool) -> t -> t * t
              val cardinal : t -> int
              val elements : t -> elt list
              val min_elt : t -> elt
              val max_elt : t -> elt
              val choose : t -> elt
              val split : elt -> t -> t * bool * t
              val find : elt -> t -> elt
              val of_seq : elt CCSet.sequence -> t
              val add_seq : t -> elt CCSet.sequence -> t
              val to_seq : t -> elt CCSet.sequence
              val of_list : elt list -> t
              val add_list : t -> elt list -> t
              val to_list : t -> elt list
              val pp :
                ?start:string ->
                ?stop:string ->
                ?sep:string -> elt CCSet.printer -> t CCSet.printer
              val print :
                ?start:string ->
                ?stop:string ->
                ?sep:string -> elt CCSet.formatter -> t CCSet.formatter
            end
          module Pos :
            sig
              val at :
                t ->
                Libzipperposition.Position.t -> Libzipperposition.FOTerm.t
            end
          module WithPos :
            sig
              type t =
                C.WithPos.t = {
                clause : clause;
                pos : Libzipperposition.Position.t;
                term : Libzipperposition.FOTerm.t;
              }
              val compare : t -> t -> int
              val pp : t CCFormat.printer
            end
          val pp : t CCFormat.printer
          val pp_tstp : t CCFormat.printer
          val pp_tstp_full : t CCFormat.printer
          val to_string : t -> string
          val pp_set : ClauseSet.t CCFormat.printer
          val pp_set_tstp : ClauseSet.t CCFormat.printer
        end
      module WeightFun :
        sig
          type t = C.t -> int
          val default : t
          val age : t
          val favor_all_neg : t
          val favor_non_all_neg : t
          val favor_ground : t
          val favor_horn : t
          val favor_goal : t
          val combine : (t * int) list -> t
        end
      type t
      val add : t -> C.t -> t
      val adds : t -> C.t Sequence.t -> t
      val is_empty : t -> bool
      val take_first : t -> t * C.t
      val name : t -> string
      val make : weight:(C.t -> int) -> string -> t
      val bfs : t
      val explore : t
      val ground : t
      val goal_oriented : t
      val default : t
      val of_profile : ClauseQueue_intf.profile -> t
      val pp : t CCFormat.printer
      val to_string : t -> string
    end
  module TermIndex :
    sig
      type t
      type elt = C.WithPos.t
      module Leaf :
        sig
          type t
          type elt = elt
          val empty : t
          val add : t -> Libzipperposition.Index_intf.term -> elt -> t
          val remove : t -> Libzipperposition.Index_intf.term -> elt -> t
          val is_empty : t -> bool
          val iter :
            t -> (Libzipperposition.Index_intf.term -> elt -> unit) -> unit
          val fold :
            t ->
            '->
            ('-> Libzipperposition.Index_intf.term -> elt -> 'a) -> 'a
          val size : t -> int
          val fold_unify :
            ?subst:Libzipperposition.Index_intf.subst ->
            t Libzipperposition.Scoped.t ->
            Libzipperposition.Index_intf.term Libzipperposition.Scoped.t ->
            (Libzipperposition.Index_intf.term * elt *
             Libzipperposition.Index_intf.subst)
            Sequence.t
          val fold_match :
            ?subst:Libzipperposition.Index_intf.subst ->
            t Libzipperposition.Scoped.t ->
            Libzipperposition.Index_intf.term Libzipperposition.Scoped.t ->
            (Libzipperposition.Index_intf.term * elt *
             Libzipperposition.Index_intf.subst)
            Sequence.t
          val fold_matched :
            ?subst:Libzipperposition.Index_intf.subst ->
            t Libzipperposition.Scoped.t ->
            Libzipperposition.Index_intf.term Libzipperposition.Scoped.t ->
            (Libzipperposition.Index_intf.term * elt *
             Libzipperposition.Index_intf.subst)
            Sequence.t
        end
      val name : string
      val empty : unit -> t
      val is_empty : t -> bool
      val size : t -> int
      val add : t -> Libzipperposition.Index_intf.term -> elt -> t
      val add_seq :
        t -> (Libzipperposition.Index_intf.term * elt) Sequence.t -> t
      val add_list : t -> (Libzipperposition.Index_intf.term * elt) list -> t
      val remove : t -> Libzipperposition.Index_intf.term -> elt -> t
      val iter :
        t -> (Libzipperposition.Index_intf.term -> elt -> unit) -> unit
      val fold :
        t ->
        ('-> Libzipperposition.Index_intf.term -> elt -> 'a) -> '-> 'a
      val retrieve_unifiables :
        ?subst:Libzipperposition.Index_intf.subst ->
        t Libzipperposition.Scoped.t ->
        Libzipperposition.Index_intf.term Libzipperposition.Scoped.t ->
        (Libzipperposition.Index_intf.term * elt *
         Libzipperposition.Index_intf.subst)
        Sequence.t
      val retrieve_generalizations :
        ?subst:Libzipperposition.Index_intf.subst ->
        t Libzipperposition.Scoped.t ->
        Libzipperposition.Index_intf.term Libzipperposition.Scoped.t ->
        (Libzipperposition.Index_intf.term * elt *
         Libzipperposition.Index_intf.subst)
        Sequence.t
      val retrieve_specializations :
        ?subst:Libzipperposition.Index_intf.subst ->
        t Libzipperposition.Scoped.t ->
        Libzipperposition.Index_intf.term Libzipperposition.Scoped.t ->
        (Libzipperposition.Index_intf.term * elt *
         Libzipperposition.Index_intf.subst)
        Sequence.t
      val to_dot : elt CCFormat.printer -> t CCFormat.printer
    end
  module UnitIndex :
    sig
      type t
      module E :
        sig
          type t =
              Libzipperposition.FOTerm.t * Libzipperposition.FOTerm.t *
              bool * C.t
          type rhs = Libzipperposition.FOTerm.t
          val compare : t -> t -> int
          val extract : t -> Libzipperposition.Index_intf.term * rhs * bool
          val priority : t -> int
        end
      type rhs = E.rhs
      val empty : unit -> t
      val is_empty : t -> bool
      val add : t -> E.t -> t
      val add_seq : t -> E.t Sequence.t -> t
      val add_list : t -> E.t list -> t
      val remove : t -> E.t -> t
      val remove_seq : t -> E.t Sequence.t -> t
      val size : t -> int
      val iter :
        t -> (Libzipperposition.Index_intf.term -> E.t -> unit) -> unit
      val retrieve :
        ?subst:Libzipperposition.Index_intf.subst ->
        sign:bool ->
        t Libzipperposition.Scoped.t ->
        Libzipperposition.Index_intf.term Libzipperposition.Scoped.t ->
        (Libzipperposition.Index_intf.term * rhs * E.t *
         Libzipperposition.Index_intf.subst)
        Sequence.t
      val to_dot : t CCFormat.printer
    end
  module SubsumptionIndex :
    sig
      type t
      module C :
        sig
          type t = C.t
          val compare : t -> t -> int
          val to_lits : t -> Libzipperposition.Index_intf.lits
        end
      val name : string
      val empty : unit -> t
      val add : t -> C.t -> t
      val add_seq : t -> C.t Sequence.t -> t
      val add_list : t -> C.t list -> t
      val remove : t -> C.t -> t
      val remove_seq : t -> C.t Sequence.t -> t
      val retrieve_subsuming :
        t -> Libzipperposition.Index_intf.lits -> C.t Sequence.t
      val retrieve_subsuming_c : t -> C.t -> C.t Sequence.t
      val retrieve_subsumed :
        t -> Libzipperposition.Index_intf.lits -> C.t Sequence.t
      val retrieve_subsumed_c : t -> C.t -> C.t Sequence.t
      val iter : t -> C.t Sequence.t
      val fold : ('-> C.t -> 'a) -> '-> t -> 'a
    end
  module type CLAUSE_SET =
    sig
      val on_add_clause : C.t Signal.t
      val on_remove_clause : C.t Signal.t
      val add : C.t Sequence.t -> unit
      val remove : C.t Sequence.t -> unit
    end
  module ActiveSet :
    sig
      val on_add_clause : C.t Signal.t
      val on_remove_clause : C.t Signal.t
      val add : C.t Sequence.t -> unit
      val remove : C.t Sequence.t -> unit
      val clauses : unit -> C.ClauseSet.t
      val num_clauses : unit -> int
    end
  module SimplSet : CLAUSE_SET
  module PassiveSet :
    sig
      val on_add_clause : C.t Signal.t
      val on_remove_clause : C.t Signal.t
      val add : C.t Sequence.t -> unit
      val remove : C.t Sequence.t -> unit
      val clauses : unit -> C.ClauseSet.t
      val queue : unit -> CQueue.t
      val next : unit -> C.t option
      val num_clauses : unit -> int
    end
  type stats = int * int * int
  val stats : unit -> stats
  val pp : unit CCFormat.printer
  val debug : unit CCFormat.printer
end