X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fbasic_2%2Fdynamic%2Fnta_preserve.ma;h=b308c118d6ca11150f56b49cb0261bf5ab6145fe;hb=084ea7868f6153effc18e8ee1c0e6cdb34d181c0;hp=4e37eb806f4781af296ff6b8c2ff0a4f347fe414;hpb=0c302a9fda708e5019e48d14c5419a8a65190745;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_preserve.ma b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_preserve.ma index 4e37eb806..b308c118d 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_preserve.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/dynamic/nta_preserve.ma @@ -12,8 +12,8 @@ (* *) (**************************************************************************) -include "basic_2/rt_equivalence/cpcs_cprs.ma". -include "basic_2/dynamic/cnv_preserve.ma". +include "basic_2/rt_equivalence/cpcs_cpcs.ma". +include "basic_2/dynamic/cnv_cpcs.ma". include "basic_2/dynamic/nta.ma". (* NATIVE TYPE ASSIGNMENT FOR TERMS *****************************************) @@ -58,6 +58,53 @@ qed. (* Inversion lemmas based on preservation ***********************************) +lemma nta_inv_ldef_sn (a) (h) (G) (K) (V): + ∀X2. ⦃G,K.ⓓV⦄ ⊢ #0 :[a,h] X2 → + ∃∃W,U. ⦃G,K⦄ ⊢ V :[a,h] W & ⬆*[1] W ≘ U & ⦃G,K.ⓓV⦄ ⊢ U ⬌*[h] X2 & ⦃G,K.ⓓV⦄ ⊢ X2 ![a,h]. +#a #h #G #Y #X #X2 #H +elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2 +elim (cnv_inv_zero … H1) -H1 #Z #K #V #HV #H destruct +elim (cpms_inv_delta_sn … H2) -H2 * +[ #_ #H destruct +| #W #HVW #HWX1 + /3 width=5 by cnv_cpms_nta, cpcs_cprs_sn, ex4_2_intro/ +] +qed-. + +lemma nta_inv_lref_sn (a) (h) (G) (L): + ∀X2,i. ⦃G,L⦄ ⊢ #↑i :[a,h] X2 → + ∃∃I,K,T2,U2. ⦃G,K⦄ ⊢ #i :[a,h] T2 & ⬆*[1] T2 ≘ U2 & ⦃G,K.ⓘ{I}⦄ ⊢ U2 ⬌*[h] X2 & ⦃G,K.ⓘ{I}⦄ ⊢ X2 ![a,h] & L = K.ⓘ{I}. +#a #h #G #L #X2 #i #H +elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2 +elim (cnv_inv_lref … H1) -H1 #I #K #Hi #H destruct +elim (cpms_inv_lref_sn … H2) -H2 * +[ #_ #H destruct +| #X #HX #HX1 + /3 width=9 by cnv_cpms_nta, cpcs_cprs_sn, ex5_4_intro/ +] +qed-. + +lemma nta_inv_lref_sn_drops_cnv (a) (h) (G) (L): + ∀X2, i. ⦃G,L⦄ ⊢ #i :[a,h] X2 → + ∨∨ ∃∃K,V,W,U. ⬇*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V :[a,h] W & ⬆*[↑i] W ≘ U & ⦃G,L⦄ ⊢ U ⬌*[h] X2 & ⦃G,L⦄ ⊢ X2 ![a,h] + | ∃∃K,W,U. ⬇*[i] L ≘ K. ⓛW & ⦃G,K⦄ ⊢ W ![a,h] & ⬆*[↑i] W ≘ U & ⦃G,L⦄ ⊢ U ⬌*[h] X2 & ⦃G,L⦄ ⊢ X2 ![a,h]. +#a #h #G #L #X2 #i #H +elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2 +elim (cnv_inv_lref_drops … H1) -H1 #I #K #V #HLK #HV +elim (cpms_inv_lref1_drops … H2) -H2 * +[ #_ #H destruct +| #Y #X #W #H #HVW #HUX1 + lapply (drops_mono … H … HLK) -H #H destruct + /4 width=8 by cnv_cpms_nta, cpcs_cprs_sn, ex5_4_intro, or_introl/ +| #n #Y #X #U #H #HVU #HUX1 #H0 destruct + lapply (drops_mono … H … HLK) -H #H destruct + elim (lifts_total V (𝐔❴↑i❵)) #W #HVW + lapply (cpms_lifts_bi … HVU (Ⓣ) … L … HVW … HUX1) -U + [ /2 width=2 by drops_isuni_fwd_drop2/ ] #HWX1 + /4 width=9 by cprs_div, ex5_3_intro, or_intror/ +] +qed-. + lemma nta_inv_bind_sn_cnv (a) (h) (p) (I) (G) (K) (X2): ∀V,T. ⦃G,K⦄ ⊢ ⓑ{p,I}V.T :[a,h] X2 → ∃∃U. ⦃G,K⦄ ⊢ V ![a,h] & ⦃G,K.ⓑ{I}V⦄ ⊢ T :[a,h] U & ⦃G,K⦄ ⊢ ⓑ{p,I}V.U ⬌*[h] X2 & ⦃G,K⦄ ⊢ X2 ![a,h]. @@ -88,10 +135,34 @@ elim (cnv_inv_appl … H1) * [ | #n ] #p #W #U #Hn #HV #HT #HVW #HTU lapply (cpms_step_dx … HTU 1 (ⓛ{p}W.U0) ?) -HTU [ /2 width=1 by cpm_bind/ ] #HTU | lapply (le_n_O_to_eq n ?) [ /3 width=1 by le_S_S_to_le/ ] -Hn #H destruct ] -lapply (cpms_appl_dx … V V … HTU) [1,3: // ] #HVTU -elim (cnv_cpms_conf … H1 … H2 … HVTU) -H1 -H2 -HVTU