Section InverseTransport.
Local Arguments many_pure_app : simpl never.
Local Arguments map : simpl never.

(* decompose third layer of Wells' type checking term *)
Lemma decompose_x_W {n σ Gamma s' t'} :
let s := many_poly_abs n (subst_poly_type σ (poly_arr s' s')) in
pure_typing ((ren_poly_type (Nat.add n) s) :: Gamma) (pure_var 0) (subst_poly_type σ (poly_arr t' t')) ->
exists τ, subst_poly_type (funcomp (subst_poly_type τ) σ) s' = subst_poly_type σ t'.