sig
  module Store :
    sig
      type store
      type state
      val obtain_state : Access.Store.store -> Access.Store.state
      val install_state : Access.Store.state -> unit
      val add_layer : Access.Store.state -> Access.Store.state
      val new_layer : Access.Store.store -> Access.Store.state
    end
  module Writer :
    sig
      type writer
      val make_writer :
        Opt.indextype -> Opt.indexargs -> int -> Access.Writer.writer
      val insert : Access.Writer.writer -> Term.term -> Fact.entry -> unit
      val remove_variant : Access.Writer.writer -> Term.term -> unit
      val clear : Access.Writer.writer -> unit
      val get_store : Access.Writer.writer -> Access.Store.store
      val size : Access.Writer.writer -> int
    end
  module Reader :
    sig
      type reader
      val make_readers : Access.Writer.writer -> Access.Reader.reader list
      val null_reader : unit -> Access.Reader.reader
      val applicability :
        Access.Reader.reader ->
        Opt.binding_pattern -> Opt.applicability_value
      val iter_unification_candidates :
        (Fact.entry -> unit) ->
        Access.Reader.reader -> Term.term -> Term.context -> unit
      val iter_instance_candidates :
        (Fact.entry -> unit) ->
        Access.Reader.reader -> Term.term -> Term.context -> unit
      val iter_generalization_candidates :
        (Fact.entry -> unit) ->
        Access.Reader.reader -> Term.term -> Term.context -> unit
      val iter_all : (Fact.entry -> unit) -> Access.Reader.reader -> unit
      val get_indexargs : Access.Reader.reader -> Opt.indexargs
      val print_info : Access.Reader.reader -> unit
    end
end