'status * cic_term * cic_term (* status, term, type *)
val apply_subst:
#pstatus as 'status -> NCic.context -> cic_term -> 'status * cic_term
+val apply_subst_context :
+ #pstatus -> fix_projections:bool -> NCic.context -> NCic.context
val fix_sorts: #pstatus as 'status -> cic_term -> 'status * cic_term
val saturate :
#pstatus as 'status -> ?delta:int -> cic_term -> 'status * cic_term * cic_term list
#pstatus as 'status -> ?attrs:NCic.meta_attrs -> NCic.context ->
[ `Decl of cic_term | `Def of cic_term ] -> NCicUntrusted.meta_kind ->
'status * cic_term
-val instantiate: #pstatus as 'status -> int -> cic_term -> 'status
+
+(* default value for refine: true; you can use false if the term has already been refined with
+ the expected type for the meta (e.g. after a reduction tactic) *)
+val instantiate: #pstatus as 'status -> ?refine:bool -> int -> cic_term -> 'status
val instantiate_with_ast: #pstatus as 'status -> int -> tactic_term -> 'status
val select_term: