sig
  type 'a printer = Format.formatter -> '-> unit
  type 'a lit = Eq of 'a * 'a * bool | Prop of 'a * bool | Bool of bool
  val fmap_lit : ('-> 'b) -> 'Encoding.lit -> 'Encoding.lit
  type 'a clause = 'Encoding.lit list
  val fmap_clause : ('-> 'b) -> 'Encoding.clause -> 'Encoding.clause
  type foterm = Libzipperposition.FOTerm.t
  type hoterm = Libzipperposition.TypedSTerm.t
  type foclause = Encoding.foterm Encoding.clause
  type hoclause = Encoding.hoterm Encoding.clause
  val foclause_of_clause :
    Libzipperposition.FOTerm.t Libzipperposition.SLiteral.t list ->
    Encoding.foclause
  val clause_of_foclause :
    Encoding.foclause ->
    Libzipperposition.FOTerm.t Libzipperposition.SLiteral.t list
  val pp_clause : 'Encoding.printer -> 'Encoding.clause Encoding.printer
  class type ['a, 'b] t =
    object method decode : '-> 'a option method encode : '-> 'end
  val id : ('a, 'a) Encoding.t
  val compose :
    ('a, 'b) Encoding.t -> ('b, 'c) Encoding.t -> ('a, 'c) Encoding.t
  val ( >>> ) :
    ('a, 'b) Encoding.t -> ('b, 'c) Encoding.t -> ('a, 'c) Encoding.t
  val currying :
    (Encoding.foterm Encoding.clause, Encoding.hoterm Encoding.clause)
    Encoding.t
  module EncodedClause :
    sig
      type t = private Reasoner.term
      val pp : t CCFormat.printer
      val to_string : t -> string
      val equal : t -> t -> bool
      val hash_fun : t -> CCHash.state -> CCHash.state
      val hash : t -> int
      val compare : t -> t -> int
      val __magic : Encoding.hoterm -> Encoding.EncodedClause.t
    end
  val clause_prop : (Encoding.hoclause, Encoding.EncodedClause.t) Encoding.t
end