X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambda_delta%2Fbasic_2%2Fequivalence%2Fcpcs_delift.ma;h=c568941a5fe8306f054bbdbdca1d761cf24e53b0;hb=fec1a061eeca5e7e05b4f0c3e299983b163569c3;hp=e57f9f32b695e0d4a80dbecff6605b47cca2330d;hpb=cb38da6095e3af84131a3ebf47a9f252f34a804c;p=helm.git diff --git a/matita/matita/contribs/lambda_delta/basic_2/equivalence/cpcs_delift.ma b/matita/matita/contribs/lambda_delta/basic_2/equivalence/cpcs_delift.ma index e57f9f32b..c568941a5 100644 --- a/matita/matita/contribs/lambda_delta/basic_2/equivalence/cpcs_delift.ma +++ b/matita/matita/contribs/lambda_delta/basic_2/equivalence/cpcs_delift.ma @@ -12,14 +12,65 @@ (* *) (**************************************************************************) +include "basic_2/unfold/delift_lift.ma". include "basic_2/unfold/delift_delift.ma". include "basic_2/computation/cprs_delift.ma". include "basic_2/equivalence/cpcs_cpcs.ma". (* CONTEXT-SENSITIVE PARALLEL EQUIVALENCE ON TERMS **************************) +(* Advanced inversion lemmas ************************************************) + +lemma cprs_inv_appl1_cpcs: ∀L,V1,T1,U2. L ⊢ ⓐV1. T1 ➡* U2 → ( + ∃∃V2,T2. L ⊢ V1 ➡* V2 & L ⊢ T1 ➡* T2 & + L ⊢ U2 ➡* ⓐV2. T2 + ) ∨ + ∃∃V2,W,T. L ⊢ V1 ➡* V2 & + L ⊢ T1 ➡* ⓛW. T & L ⊢ ⓓV2. T ⬌* U2. +#L #V1 #T1 #U2 #H @(cprs_ind … H) -U2 /3 width=5/ +#U #U2 #_ #HU2 * * +[ #V0 #T0 #HV10 #HT10 #HUT0 + elim (cprs_strip … HUT0 … HU2) -U #U #H #HU2 + elim (cpr_inv_appl1 … H) -H * + [ #V2 #T2 #HV02 #HT02 #H destruct /4 width=5/ + | #V2 #W2 #T #T2 #HV02 #HT2 #H1 #H2 destruct + lapply (cprs_strap1 … HV10 HV02) -V0 #HV12 + lapply (cprs_div ? (ⓓV2.T) ? ? ? HU2) -HU2 /2 width=1/ /3 width=6/ + | #V #V2 #W0 #W2 #T #T2 #HV0 #HW02 #HT2 #HV2 #H1 #H2 destruct + lapply (cprs_strap1 … HV10 HV0) -V0 #HV1 + lapply (cprs_trans … HT10 (ⓓW2.T2) ?) -HT10 /2 width=1/ -W0 -T #HT1 + elim (sfr_delift (L.ⓓW2) (ⓐV2.T2) 0 1 ? ?) // #X #H1 + lapply (cprs_zeta_delift … H1) #H2 + lapply (cprs_trans … HU2 … H2) -HU2 -H2 #HU2T3 + elim (delift_inv_flat1 … H1) -H1 #V3 #T3 #HV23 #HT23 #H destruct + lapply (delift_inv_lift1_eq … HV23 … HV2) -V2 [ /2 width=1/ | skip ] #H destruct + lapply (cprs_zeta_delift … HT23) -HT23 #H + lapply (cprs_trans … HT1 … H) -W2 -T2 /3 width=5/ + ] +| /4 width=8/ +] +qed-. + +lemma cprs_inv_appl_abst: ∀L,V,T,W,U. L ⊢ ⓐV.T ➡* ⓛW.U → + ∃∃W0,T0,V1,T1. L ⊢ T ➡* ⓛW0.T0 & + L ⊢ ⓓV.T0 ➡* ⓛV1.T1 & + L ⊢ ⓛW.U ➡* ⓛV1.T1. +#L #V #T #W #U #H +elim (cprs_inv_appl1_cpcs … H) -H * +[ #V0 #T0 #HV0 #HT0 #H + elim (cprs_inv_abst1 Abst W … H) -H #W0 #U0 #_ #_ #H destruct +| #V0 #W0 #T0 #HV0 #HT0 #H + elim (cpcs_inv_abst2 … H) -H #V1 #T1 #H1 #H2 + lapply (cprs_trans … (ⓓV.T0) … H1) -H1 /2 width=1/ -V0 /2 width=7/ +] +qed-. + (* Properties on inverse basic term relocation ******************************) +lemma cpcs_zeta_delift_comm: ∀L,V,T1,T2. L.ⓓV ⊢ T1 ▼*[O, 1] ≡ T2 → + L ⊢ T2 ⬌* ⓓV.T1. +/3 width=1/ qed. + (* Basic_1: was only: pc3_gen_cabbr *) lemma thin_cpcs_delift_mono: ∀L,U1,U2. L ⊢ U1 ⬌* U2 → ∀K,d,e. L ▼*[d, e] ≡ K → ∀T1. L ⊢ U1 ▼*[d, e] ≡ T1 →