1 (* Basic_1: was by definition: ty3_bind *)
2 (* Basic_2A1: was by definition: nta_bind ntaa_bind *)
5 (* Basic_2A1: was by definition: nta_pure ntaa_pure *)
8 (* Basic_1: was: ty3_gen_bind *)
9 (* Basic_2A1: was: nta_inv_bind1 ntaa_inv_bind1 *)
12 | ntaa_cast: ∀L,T,U,W. ntaa h L T U → ntaa h L U W → ntaa h L (ⓝU. T) U
14 (* Advanced properties ******************************************************)
16 lemma nta_cast_alt: ∀h,L,T,W,U. ⦃h, L⦄ ⊢ T : W → ⦃h, L⦄ ⊢ T : U → ⦃h, L⦄ ⊢ ⓝW.T : U.
17 #h #L #T #W #U #HTW #HTU
18 lapply (nta_mono … HTW … HTU) #HWU
19 elim (nta_fwd_correct … HTU) -HTU /3 width=3/
22 lemma nta_inv_cast1: ∀h,L,X,Y,U. ⦃h, L⦄ ⊢ ⓝY.X : U → ⦃h, L⦄ ⊢ X : Y ∧ L ⊢ Y ⬌* U.
25 (* Basic_1: uses: ty3_gen_cast *)
26 lemma nta_inv_cast_sn_old (a) (h) (G) (L) (X2):
27 ∀T0,T1. ⦃G,L⦄ ⊢ ⓝT1.T0 :[a,h] X2 →
28 ∃∃T2. ⦃G,L⦄ ⊢ T0 :[a,h] T1 & ⦃G,L⦄ ⊢ T1 :[a,h] T2 & ⦃G,L⦄ ⊢ ⓝT2.T1 ⬌*[h] X2 & ⦃G,L⦄ ⊢ X2 ![a,h].
30 (* Basic_1: was: ty3_typecheck *)
31 lemma nta_typecheck: ∀h,L,T,U. ⦃h, L⦄ ⊢ T : U → ∃T0. ⦃h, L⦄ ⊢ ⓝU.T : T0.
34 (* Basic_1: was: ty3_correct *)
35 (* Basic_2A1: was: ntaa_fwd_correct *)
36 lemma nta_fwd_correct: ∀h,L,T,U. ⦃h, L⦄ ⊢ T : U → ∃T0. ⦃h, L⦄ ⊢ U : T0.
38 elim (ntaa_fwd_correct … (nta_ntaa … H)) -H /3 width=2 by ntaa_nta, ex_intro/