(* Autor(s): Andrej Dudenhefner (1) Affiliation(s): (1) Saarland University, Saarbrücken, Germany *)
(* evaluates predicate p on all free variables *)
Fixpoint allfv_pure_term (p: nat -> Prop) (M: pure_term) :=
match M with
| pure_var x => p x
| pure_app M N => allfv_pure_term p M /\ allfv_pure_term p N
| pure_abs M => allfv_pure_term (scons True p) M
end.

Lemma allfv_pure_term_ren_pure_term {p ξ M} :
allfv_pure_term p (ren_pure_term ξ M) <-> allfv_pure_term (ξ >> p) M.