Module pure_typable_intro_prenex_aux.

Lemma pure_typing_many_pure_term_absE {Gamma n M t}:
pure_typing Gamma (many_pure_term_abs n M) t ->
exists (nss : list (nat * poly_type)) t',
n = length nss /\
t = fold_right (fun '(n, s) r => many_poly_abs n (poly_arr s r)) t' nss /\
pure_typing (fold_left (fun Gamma '(n, s) => s :: map (ren_poly_type (Nat.add n)) Gamma) nss Gamma) M t'.