]> matita.cs.unibo.it Git - helm.git/blob - matita/matita/contribs/lambdadelta/basic_2/etc/nta/nta.etc
update in basic_2 and static_2
[helm.git] / matita / matita / contribs / lambdadelta / basic_2 / etc / nta / nta.etc
1 (* Basic_1: was by definition: ty3_bind *)
2 (* Basic_2A1: was by definition: nta_bind ntaa_bind *)
3 lemma nta_bind
4
5 (* Basic_2A1: was by definition: nta_pure ntaa_pure *)
6 lemma nta_pure
7
8 (* Basic_1: was: ty3_gen_bind *)
9 (* Basic_2A1: was: nta_inv_bind1 ntaa_inv_bind1 *)
10 lemma nta_inv_bind_sn
11
12 | ntaa_cast: ∀L,T,U,W. ntaa h L T U → ntaa h L U W → ntaa h L (ⓝU. T) U
13
14 (* Advanced properties ******************************************************)
15
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/
20 qed.
21
22 lemma nta_inv_cast1: ∀h,L,X,Y,U. ⦃h, L⦄ ⊢ ⓝY.X : U →  ⦃h, L⦄ ⊢ X : Y ∧ L ⊢ Y ⬌* U.
23 /2 width=3/ qed-.
24
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].
29
30 (* Basic_1: was: ty3_typecheck *)
31 lemma nta_typecheck: ∀h,L,T,U. ⦃h, L⦄ ⊢ T : U → ∃T0. ⦃h, L⦄ ⊢ ⓝU.T : T0.
32 /3 width=2/ qed.
33
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.
37 #h #L #T #U #H
38 elim (ntaa_fwd_correct … (nta_ntaa … H)) -H /3 width=2 by ntaa_nta, ex_intro/
39 qed-.