Module Find_subterm
exception
NotUnifiable of (EConstr.constr * EConstr.constr * Pretype_errors.unification_error) option
exception
SubtermUnificationError of Pretype_errors.subterm_unification_error
type 'a testing_function
=
{
match_fun : 'a -> EConstr.constr -> 'a;
merge_fun : 'a -> 'a -> 'a;
mutable testing_state : 'a;
mutable last_found : Pretype_errors.position_reporting option;
}
val make_eq_univs_test : Environ.env -> Evd.evar_map -> EConstr.constr -> Evd.evar_map testing_function
This is the basic testing function, looking for exact matches of a closed term
val replace_term_occ_modulo : Environ.env -> Evd.evar_map -> Locus.occurrences Locus.or_like_first -> 'a testing_function -> (unit -> EConstr.constr) -> EConstr.constr -> EConstr.constr
replace_term_occ_modulo occl test mk c
looks inc
for subterm modulo a testing functiontest
and replaces successfully matching subterms at the indicated occurrencesoccl
withmk ()
; it turns a NotUnifiable exception raised by the testing function into a SubtermUnificationError.
val replace_term_occ_decl_modulo : Environ.env -> Evd.evar_map -> (Locus.occurrences * Locus.hyp_location_flag) Locus.or_like_first -> 'a testing_function -> (unit -> EConstr.constr) -> EConstr.named_declaration -> EConstr.named_declaration
replace_term_occ_decl_modulo
is similar toreplace_term_occ_modulo
but for a named_declaration.
val subst_closed_term_occ : Environ.env -> Evd.evar_map -> Locus.occurrences Locus.or_like_first -> EConstr.constr -> EConstr.constr -> EConstr.constr * Evd.evar_map
subst_closed_term_occ occl c d
replaces occurrences of closedc
at positionsoccl
byRel 1
ind
(see also Note OCC), unifying universes which results in a set of constraints.
val subst_closed_term_occ_decl : Environ.env -> Evd.evar_map -> (Locus.occurrences * Locus.hyp_location_flag) Locus.or_like_first -> EConstr.constr -> EConstr.named_declaration -> EConstr.named_declaration * Evd.evar_map
subst_closed_term_occ_decl evd occl c decl
replaces occurrences of closedc
at positionsoccl
byRel 1
indecl
.