sig
  module Mode :
    sig
      type t = No | Dep
      val of_string : string -> Jst.Mode.t
      val to_string : Jst.Mode.t -> string
      val is_none : unit -> bool
      val get : unit -> Jst.Mode.t
      val set : Jst.Mode.t -> unit
    end
  type t
  val pp : Jst.t Pretty.printer
  val axioms_of : Jst.t -> Atom.Set.t
  val of_axioms : Atom.Set.t -> Jst.t
  exception Inconsistent of Jst.t
  val axiom : Atom.t -> Jst.t
  val dep0 : Jst.t
  val dep1 : Jst.t -> Jst.t
  val dep2 : Jst.t -> Jst.t -> Jst.t
  val dep3 : Jst.t -> Jst.t -> Jst.t -> Jst.t
  val dep4 : Jst.t -> Jst.t -> Jst.t -> Jst.t -> Jst.t
  val dep5 : Jst.t -> Jst.t -> Jst.t -> Jst.t -> Jst.t -> Jst.t
  val dep : Jst.t list -> Jst.t
  type jst = Jst.t
  module Three :
    sig
      type t = Yes of Jst.jst | No of Jst.jst | X
      val to_three :
        Jst.jst list Pervasives.ref ->
        ('-> '-> Jst.Three.t) -> '-> '-> Three.t
      val of_three : ('-> Three.t) -> '-> Jst.Three.t
    end
  module Eqtrans :
    sig
      type t = Term.t -> Term.t * Jst.jst
      val id : Jst.Eqtrans.t
      val compose : Jst.Eqtrans.t -> Jst.Eqtrans.t -> Jst.Eqtrans.t
      val compose3 :
        Jst.Eqtrans.t -> Jst.Eqtrans.t -> Jst.Eqtrans.t -> Jst.Eqtrans.t
      val totalize : Jst.Eqtrans.t -> Jst.Eqtrans.t
      val compose_partial1 : Jst.Eqtrans.t -> Jst.Eqtrans.t -> Jst.Eqtrans.t
      val replace : Term.map -> Jst.Eqtrans.t -> Jst.Eqtrans.t
      val apply : Term.apply -> (Term.t * Term.t) * Jst.jst -> Jst.Eqtrans.t
      val pointwise : Jst.Eqtrans.t -> Term.t list -> Term.t list * Jst.jst
      val mapargs :
        (Sym.t -> Term.t list -> Term.t * Jst.jst) ->
        (Sym.t -> Jst.Eqtrans.t) -> Jst.Eqtrans.t
      val trace : Trace.level -> string -> Jst.Eqtrans.t -> Jst.Eqtrans.t
    end
  module Pred :
    sig
      type t = Term.t -> Jst.jst option
      val disj : Jst.Pred.t -> Jst.Pred.t -> Jst.Pred.t
      val apply : Jst.Eqtrans.t -> Jst.Pred.t -> Jst.Pred.t
      val trace : Trace.level -> string -> Jst.Pred.t -> Jst.Pred.t
    end
  module Pred2 :
    sig
      type t = Term.t -> Term.t -> Jst.jst option
      val apply : Jst.Eqtrans.t -> Jst.Pred2.t -> Jst.Pred2.t
      val orelse : Jst.Pred2.t -> Jst.Pred2.t -> Jst.Pred2.t
      val inj : (Term.t -> Term.t -> bool) -> Jst.Pred2.t
      val trace : Trace.level -> string -> Jst.Pred2.t -> Jst.Pred2.t
    end
  module Rel1 :
    sig
      type t = Term.t -> Jst.Three.t
      val apply : Jst.Eqtrans.t -> Jst.Rel1.t -> Jst.Rel1.t
      val orelse : Jst.Rel1.t -> Jst.Rel1.t -> Jst.Rel1.t
      val yes_or_no : Jst.Pred.t -> Jst.Pred.t -> Jst.Rel1.t
      val trace : Trace.level -> string -> Jst.Rel1.t -> Jst.Rel1.t
    end
  module Rel2 :
    sig
      type t = Term.t -> Term.t -> Jst.Three.t
      val apply : Jst.Eqtrans.t -> Jst.Rel2.t -> Jst.Rel2.t
      val orelse : Jst.Rel2.t -> Jst.Rel2.t -> Jst.Rel2.t
      val yes : Jst.Pred2.t -> Jst.Rel2.t
      val no : Jst.Pred2.t -> Jst.Rel2.t
      val yes_or_no : Jst.Pred2.t -> Jst.Pred2.t -> Jst.Rel2.t
      val trace : Trace.level -> string -> Jst.Rel2.t -> Jst.Rel2.t
    end
end