sig
  type term = Reasoner.term
  type ty = Reasoner.ty
  class type core =
    object
      method owns : Plugin.term -> bool
      method signature : Plugin.ty Libzipperposition.ID.Map.t
    end
  class type ['a] t =
    object
      method clauses : Reasoner.clause list
      method of_fact : Plugin.term -> 'a option
      method owns : term -> bool
      method signature : ty Libzipperposition.ID.Map.t
      method to_fact : '-> Plugin.term
    end
  type foclause = Encoding.foclause
  module Set :
    sig
      type t
      val empty : Plugin.Set.t
      val add : Plugin.Set.t -> Plugin.core -> Plugin.Set.t
      val signature : Plugin.Set.t -> Plugin.ty Libzipperposition.ID.Map.t
    end
  val holds : Plugin.foclause Plugin.t
  val axiom : (Libzipperposition.ID.t * Plugin.term list) Plugin.t
  val theory : (Libzipperposition.ID.t * Plugin.term list) Plugin.t
  val lemma : Plugin.foclause Plugin.t
  val pre_rewrite : (Plugin.term * Plugin.term) list Plugin.t
  val rewrite :
    (Libzipperposition.FOTerm.t * Libzipperposition.FOTerm.t) list Plugin.t
  module Base :
    sig
      val set : Plugin.Set.t
      val signature : Plugin.ty Libzipperposition.ID.Map.t
    end
  val facts : Reasoner.t -> 'Plugin.t -> 'Sequence.t
  val of_consequence : Reasoner.consequence -> 'Plugin.t -> 'a option
  val of_consequences :
    Reasoner.consequence Sequence.t -> 'Plugin.t -> 'Sequence.t
end