(* 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 ren_pure_term_id {M} : ren_pure_term id M = M.