Module Find_subterm

Finding subterms, possibly up to some unification function, possibly at some given occurrences

exception NotUnifiable of (EConstr.constr * EConstr.constr * Pretype_errors.unification_error) option
exception SubtermUnificationError of Pretype_errors.subterm_unification_error

A testing function is typically a unification function returning a substitution or failing with a NotUnifiable error, together with a function to merge substitutions and an initial substitution; last_found is used for error messages and it has to be initialized with None.

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;
}

This is the basic testing function, looking for exact matches of a closed term

replace_term_occ_modulo occl test mk c looks in c for subterm modulo a testing function test and replaces successfully matching subterms at the indicated occurrences occl with mk (); it turns a NotUnifiable exception raised by the testing function into a SubtermUnificationError.

replace_term_occ_decl_modulo is similar to replace_term_occ_modulo but for a named_declaration.

subst_closed_term_occ occl c d replaces occurrences of closed c at positions occl by Rel 1 in d (see also Note OCC), unifying universes which results in a set of constraints.

subst_closed_term_occ_decl evd occl c decl replaces occurrences of closed c at positions occl by Rel 1 in decl.