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

(* decompose second layer of Wells' type checking term *)
Lemma decompose_N_W {s} : pure_typing Gamma_W N_W (poly_arr s s) ->
exists n σ,
s = many_poly_abs n (subst_poly_type σ (poly_arr SUs' SUs')) /\
pure_typing (map (ren_poly_type (Nat.add n)) (s :: Gamma_W)) (pure_var 0) (subst_poly_type σ (poly_arr SUt0' SUt0')) /\
pure_typing (map (ren_poly_type (Nat.add n)) (s :: Gamma_W)) (pure_var 0) (subst_poly_type σ (poly_arr SUt1' SUt1')).