X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambda_delta%2Fbasic_2%2Funfold%2Fthin_delift.ma;h=606c7702258968e9172b73e8ad2a33d3a5d8c4e6;hb=5ac2dc4e01aca542ddd13c02b304c646d8df9799;hp=849826663e453adcbcbd74f90a72e4d745a7bb40;hpb=913512bbc9202f2109d53acd43dc8c0270b17184;p=helm.git diff --git a/matita/matita/contribs/lambda_delta/basic_2/unfold/thin_delift.ma b/matita/matita/contribs/lambda_delta/basic_2/unfold/thin_delift.ma index 849826663..606c77022 100644 --- a/matita/matita/contribs/lambda_delta/basic_2/unfold/thin_delift.ma +++ b/matita/matita/contribs/lambda_delta/basic_2/unfold/thin_delift.ma @@ -12,14 +12,25 @@ (* *) (**************************************************************************) -include "basic_2/unfold/tpss_alt.ma". -include "basic_2/unfold/ltpss_ltpss.ma". -include "basic_2/unfold/delift_alt.ma". +include "basic_2/unfold/delift_tpss.ma". +include "basic_2/unfold/delift_ltpss.ma". include "basic_2/unfold/thin.ma". -(* DELIFT ON LOCAL ENVIRONMENTS *********************************************) +(* BASIC DELIFT ON LOCAL ENVIRONMENTS ***************************************) -(* Properties on deflift on terms *******************************************) +(* Inversion lemmas on inverse basic term relocation ************************) + +lemma thin_inv_delift1: ∀I,K1,V1,L2,d,e. K1. ⓑ{I} V1 [d, e] ≡ L2 → 0 < d → + ∃∃K2,V2. K1 [d - 1, e] ≡ K2 & + K1 ⊢ V1 [d - 1, e] ≡ V2 & + L2 = K2. ⓑ{I} V2. +#I #K1 #V1 #L2 #d #e * #X #HK1 #HL2 #e +elim (ltpss_inv_tpss11 … HK1 ?) -HK1 // #K #V #HK1 #HV1 #H destruct +elim (ldrop_inv_skip1 … HL2 ?) -HL2 // #K2 #V2 #HK2 #HV2 #H destruct +lapply (ltpss_tpss_trans_eq … HV1 … HK1) -HV1 /3 width=5/ +qed-. + +(* Properties on inverse basic term relocation ******************************) lemma thin_delift1: ∀L1,L2,d,e. L1 [d, e] ≡ L2 → ∀V1,V2. L1 ⊢ V1 [d, e] ≡ V2 → ∀I. L1.ⓑ{I}V1 [d + 1, e] ≡ L2.ⓑ{I}V2. @@ -30,19 +41,64 @@ lapply (tpss_inv_refl_O2 … H1) -H1 #H destruct lapply (lift_mono … H2 … HV2) -H2 #H destruct /3 width=5/ qed. -axiom delift_tpss_conf_be: ∀L,U1,U2,d,e. L ⊢ U1 [d, e] ▶* U2 → - ∀T1,dd,ee. L ⊢ U1 [dd, ee] ≡ T1 → ∀K. L [dd, ee] ≡ K → - d ≤ dd → dd + ee ≤ d + e → - ∃∃T2. K ⊢ T1 [dd - d, e - ee] ▶* T2 & L ⊢ U2 [dd, ee] ≡ T2. -(* -#L #U1 #U2 #d #e #H @(tpss_ind_alt … H) -L -U1 -U2 -d -e -[ #L * #i #d #e #X #dd #ee #H - [ >(delift_inv_sort1 … H) -X /2 width=3/ - | elim (delift_inv_lref1 … H) -H * [1,3: /3 width=3/ | /3 width=6/ ] - | >(delift_inv_gref1 … H) -X /2 width=3/ - ] -| #L #K1 #V1 #V2 #W2 #i #d #e #Hdi #Hide #HLK1 #_ #HVW2 #IHV12 #T1 #dd #ee #H #K2 #HLK2 #Hdd #Hddee - lapply - - @(ex2_1_intro … X) // /2 width=6/ -*) +lemma thin_delift_tpss_conf_le: ∀L,U1,U2,d,e. L ⊢ U1 ▶* [d, e] U2 → + ∀T1,dd,ee. L ⊢ U1 [dd, ee] ≡ T1 → + ∀K. L [dd, ee] ≡ K → d + e ≤ dd → + ∃∃T2. K ⊢ T1 ▶* [d, e] T2 & + L ⊢ U2 [dd, ee] ≡ T2. +#L #U1 #U2 #d #e #HU12 #T1 #dd #ee #HUT1 #K * #Y #HLY #HYK #Hdedd +lapply (delift_ltpss_conf_eq … HUT1 … HLY) -HUT1 #HUT1 +elim (ltpss_tpss_conf … HU12 … HLY) -HU12 #U #HU1 #HU2 +elim (delift_tpss_conf_le … HU1 … HUT1 … HYK ?) -HU1 -HUT1 // -Hdedd #T #HT1 #HUT +lapply (tpss_delift_trans_eq … HU2 … HUT) -U #HU2T +lapply (ltpss_delift_trans_eq … HLY … HU2T) -Y /2 width=3/ +qed. + +lemma thin_delift_tps_conf_le: ∀L,U1,U2,d,e. L ⊢ U1 ▶ [d, e] U2 → + ∀T1,dd,ee. L ⊢ U1 [dd, ee] ≡ T1 → + ∀K. L [dd, ee] ≡ K → d + e ≤ dd → + ∃∃T2. K ⊢ T1 ▶* [d, e] T2 & + L ⊢ U2 [dd, ee] ≡ T2. +/3 width=3/ qed. + +lemma thin_delift_tpss_conf_le_up: ∀L,U1,U2,d,e. L ⊢ U1 ▶* [d, e] U2 → + ∀T1,dd,ee. L ⊢ U1 [dd, ee] ≡ T1 → + ∀K. L [dd, ee] ≡ K → + d ≤ dd → dd ≤ d + e → d + e ≤ dd + ee → + ∃∃T2. K ⊢ T1 ▶* [d, dd - d] T2 & + L ⊢ U2 [dd, ee] ≡ T2. +#L #U1 #U2 #d #e #HU12 #T1 #dd #ee #HUT1 #K * #Y #HLY #HYK #Hdd #Hdde #Hddee +lapply (delift_ltpss_conf_eq … HUT1 … HLY) -HUT1 #HUT1 +elim (ltpss_tpss_conf … HU12 … HLY) -HU12 #U #HU1 #HU2 +elim (delift_tpss_conf_le_up … HU1 … HUT1 … HYK ? ? ?) -HU1 -HUT1 // -Hdd -Hdde -Hddee #T #HT1 #HUT +lapply (tpss_delift_trans_eq … HU2 … HUT) -U #HU2T +lapply (ltpss_delift_trans_eq … HLY … HU2T) -Y /2 width=3/ +qed. + +lemma thin_delift_tps_conf_le_up: ∀L,U1,U2,d,e. L ⊢ U1 ▶ [d, e] U2 → + ∀T1,dd,ee. L ⊢ U1 [dd, ee] ≡ T1 → + ∀K. L [dd, ee] ≡ K → + d ≤ dd → dd ≤ d + e → d + e ≤ dd + ee → + ∃∃T2. K ⊢ T1 ▶* [d, dd - d] T2 & + L ⊢ U2 [dd, ee] ≡ T2. +/3 width=6 by thin_delift_tpss_conf_le_up, tpss_strap/ qed. (**) (* too slow without trace *) + +lemma thin_delift_tpss_conf_be: ∀L,U1,U2,d,e. L ⊢ U1 ▶* [d, e] U2 → + ∀T1,dd,ee. L ⊢ U1 [dd, ee] ≡ T1 → + ∀K. L [dd, ee] ≡ K → d ≤ dd → dd + ee ≤ d + e → + ∃∃T2. K ⊢ T1 ▶* [d, e - ee] T2 & + L ⊢ U2 [dd, ee] ≡ T2. +#L #U1 #U2 #d #e #HU12 #T1 #dd #ee #HUT1 #K * #Y #HLY #HYK #Hdd #Hddee +lapply (delift_ltpss_conf_eq … HUT1 … HLY) -HUT1 #HUT1 +elim (ltpss_tpss_conf … HU12 … HLY) -HU12 #U #HU1 #HU2 +elim (delift_tpss_conf_be … HU1 … HUT1 … HYK ? ?) -HU1 -HUT1 // -Hdd -Hddee #T #HT1 #HUT +lapply (tpss_delift_trans_eq … HU2 … HUT) -U #HU2T +lapply (ltpss_delift_trans_eq … HLY … HU2T) -Y /2 width=3/ +qed. + +lemma thin_delift_tps_conf_be: ∀L,U1,U2,d,e. L ⊢ U1 ▶ [d, e] U2 → + ∀T1,dd,ee. L ⊢ U1 [dd, ee] ≡ T1 → + ∀K. L [dd, ee] ≡ K → d ≤ dd → dd + ee ≤ d + e → + ∃∃T2. K ⊢ T1 ▶* [d, e - ee] T2 & + L ⊢ U2 [dd, ee] ≡ T2. +/3 width=3/ qed.