sig
  module Ground :
    sig
      type subst = Lang.F.pred -> Lang.F.pred
      val singleton : Lang.F.pred -> Letify.Ground.subst
      val compute :
        Lang.F.pred array -> Letify.Ground.subst array * Letify.Ground.subst
      type env
      val pretty : Format.formatter -> Letify.Ground.env -> unit
      val top : unit -> Letify.Ground.env
      val copy : Letify.Ground.env -> Letify.Ground.env
      val e_apply : Letify.Ground.env -> Lang.F.term -> Lang.F.term
      val p_apply : Letify.Ground.env -> Lang.F.pred -> Lang.F.pred
      val forward : Letify.Ground.env -> Lang.F.pred -> Lang.F.pred
      val backward : Letify.Ground.env -> Lang.F.pred -> Lang.F.pred
      val branch :
        Letify.Ground.env ->
        Lang.F.pred -> Lang.F.pred * Letify.Ground.env * Letify.Ground.env
    end
  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