sig
  module Sigma :
    sig
      type t
      val equal : Letify.Sigma.t -> Letify.Sigma.t -> bool
      val pretty : string -> Format.formatter -> Letify.Sigma.t -> unit
      val e_apply : Letify.Sigma.t -> Lang.F.term -> Lang.F.term
      val p_apply : Letify.Sigma.t -> Lang.F.pred -> Lang.F.pred
      val empty : Letify.Sigma.t
      val add : Lang.F.var -> Lang.F.term -> Letify.Sigma.t -> Letify.Sigma.t
      val assume : Letify.Sigma.t -> Lang.F.pred -> Letify.Sigma.t
      val find : Lang.F.var -> Letify.Sigma.t -> Lang.F.term
      val iter :
        (Lang.F.var -> Lang.F.term -> unit) -> Letify.Sigma.t -> unit
      val domain : Letify.Sigma.t -> Lang.F.Vars.t
      val codomain : Letify.Sigma.t -> Lang.F.Vars.t
    end
  module Defs :
    sig
      type t
      val empty : Letify.Defs.t
      val merge : Letify.Defs.t -> Letify.Defs.t -> Letify.Defs.t
      val extract : Lang.F.pred -> Letify.Defs.t
      val add : Letify.Defs.t Pervasives.ref -> Lang.F.pred -> unit
      val domain : Letify.Defs.t -> Lang.F.Vars.t
    end
  val bind :
    Letify.Sigma.t -> Letify.Defs.t -> Lang.F.Vars.t -> Letify.Sigma.t
  val add_definitions :
    Letify.Sigma.t ->
    Letify.Defs.t -> Lang.F.Vars.t -> Lang.F.pred list -> Lang.F.pred list
  module Split :
    sig
      type occur
      val create : unit -> Letify.Split.occur
      val add : Letify.Split.occur -> Lang.F.pred -> unit
      val select : Letify.Split.occur -> (Lang.F.pred * int) list
    end
end