proposition: Lemma sn_type_assignment M : sn M -> exists Gamma t, type_assignment Gamma M t.
proof: Proof. move=> /sn_step'_nf [N] [/clos_rt_rt1n_iff]. elim. - move=> ? /nf_typable [] *. do 2 eexists. by eassumption. - move=> > /subject_expansion H _ /[apply]. move=> [?] [?] /typable_intro /H [] *. do 2 eexists. by eassumption. Qed.
imports: Undecidability.IntersectionTypes.CD Undecidability.IntersectionTypes.Util.CD_facts Undecidability.LambdaCalculus.Util.term_facts PeanoNat Relations List Lia ssreflect