substitution -> Cic.context -> Cic.metasenv -> Cic.term -> Cic.term ->
substitution * Cic.metasenv
+(* unwind_subst metasenv subst *)
+(* unwinds [subst] w.r.t. itself. *)
+(* It can restrict some metavariable in the [metasenv] *)
+val unwind_subst : Cic.metasenv -> substitution -> substitution * Cic.metasenv
+
(* apply_subst subst t *)
(* applies the substitution [subst] to [t] *)
+(* [subst] must be already unwinded *)
val apply_subst : substitution -> Cic.term -> Cic.term
(* apply_subst_reducing subst (Some (mtr,reductions_no)) t *)
(* eta-expansions have been performed and the head of the new *)
(* application has been unified with (META [meta_to_reduce]): *)
(* during the unwinding the eta-expansions are undone. *)
+(* [subst] must be already unwinded *)
val apply_subst_reducing :
substitution -> (int * int) option -> Cic.term -> Cic.term