Module Fol_let


module Fol_let: sig .. end

module Smap: Datatype.String.Map

type sigma = {
   cpt : int Smap.t;
   var : Fol.term Fol.Vmap.t;
}
val fresh : sigma -> Fol.Vmap.key -> Fol.Var.t * sigma
val alpha : sigma -> Fol.Vmap.key -> Fol.term
val def : Fol.pred -> Fol.pred
val redef : Fol.pred -> Fol.pred -> Fol.pred
val is_simple : Fol.term -> bool
val bind : Fol.Vmap.key -> Fol.term -> sigma -> sigma
val term : sigma -> Fol.term -> Fol.term
val pred : sigma -> Fol.pred -> Fol.pred
val empty : sigma
val compile : Fol.pred -> Fol.pred
val fresh_params : Fol.Var.t list ->
sigma -> Fol.Vmap.key list -> Fol.Var.t list * sigma
val compile_def : Fol.Vmap.key list -> Fol.pred -> Fol.Var.t list * Fol.pred