(* Autor(s): Andrej Dudenhefner (1) Affiliation(s): (1) Saarland University, Saarbrücken, Germany  Description: Theorem "pure_typable_intro_prenex" can be used to introduce/eliminate closed assumption ∀..∀.s where s is simple. Theorem "pure_typable_intro_poly_arr_0_0" can be used to introduce/eliminate the assumption 0 -> 0 [1].  Related Work: [1] Wells, Joe B. "Typability and Type-Checking in the Second-Order lambda-Calculus are Equivalent and Undecidable." Proceedings Ninth Annual IEEE Symposium on Logic In Computer Science. IEEE, 1994. *)
From Undecidability.SystemF.Util Require Import Facts poly_type_facts pure_term_facts term_facts typing_facts iipc2_facts pure_typing_facts.
(* (\_.M) N *)
Definition K' M N := pure_app (pure_abs (ren_pure_term S M)) N.

Lemma leftmost_poly_var_subst_poly_type {σ t} :
leftmost_poly_var (subst_poly_type σ t) = obind (σ >> leftmost_poly_var) (leftmost_poly_var t).