X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fbasic_2%2Fcomputation%2Flpxs_lleq.ma;h=a919045df2a6b7621ae1f9a6732fb72c5c136b73;hb=d95bd78c09617ad212fa9e96837a15fc907dcfca;hp=522d36f971e86c998600d667595bbf3a677f06e6;hpb=e2527c6784c2593ca67af35fafaf0b3725d80a60;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/basic_2/computation/lpxs_lleq.ma b/matita/matita/contribs/lambdadelta/basic_2/computation/lpxs_lleq.ma index 522d36f97..a919045df 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/computation/lpxs_lleq.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/computation/lpxs_lleq.ma @@ -20,75 +20,6 @@ include "basic_2/computation/lpxs_cpxs.ma". (* Advanced properties ******************************************************) -fact le_repl_sn_aux: ∀x,y,z:nat. x ≤ z → x = y → y ≤ z. -// qed-. - -axiom cpxs_cpys_conf_lpxs: ∀h,g,G,d,e. - ∀L0,T0,T1. ⦃G, L0⦄ ⊢ T0 ➡*[h, g] T1 → - ∀T2. ⦃G, L0⦄ ⊢ T0 ▶*[d, e] T2 → - ∀L1. ⦃G, L0⦄ ⊢ ➡*[h, g] L1 → - ∃∃T. ⦃G, L1⦄ ⊢ T1 ▶*[d, e] T & ⦃G, L0⦄ ⊢ T2 ➡*[h, g] T. - -axiom cpxs_conf_lpxs_lpys: ∀h,g,G,d,e. - ∀I,L0,V0,T0,T1. ⦃G, L0.ⓑ{I}V0⦄ ⊢ T0 ➡*[h, g] T1 → - ∀L1. ⦃G, L0⦄ ⊢ ➡*[h, g] L1 → ∀V2. ⦃G, L0⦄ ⊢ V0 ▶*[d, e] V2 → - ∃∃T. ⦃G, L1.ⓑ{I}V0⦄ ⊢ T1 ▶*[⫯d, e] T & ⦃G, L0.ⓑ{I}V2⦄ ⊢ T0 ➡*[h, g] T. - - -include "basic_2/reduction/cpx_cpys.ma". - -fact pippo_aux: ∀h,g,G,L1,T,T1,d,e. ⦃G, L1⦄ ⊢ T ▶*[d, e] T1 → e = ∞ → - ∀L2. ⦃G, L1⦄ ⊢ ➡*[h, g] L2 → - ∃∃T2. ⦃G, L2⦄ ⊢ T ▶*[d, e] T2 & ⦃G, L1⦄ ⊢ T1 ➡*[h, g] T2 & - L1 ⋕[T, d] L2 ↔ T1 = T2. -#h #g #G #L1 #T #T1 #d #e #H @(cpys_ind_alt … H) -G -L1 -T -T1 -d -e [ * ] -[ /5 width=5 by lpxs_fwd_length, lleq_sort, ex3_intro, conj/ -| #i #G #L1 elim (lt_or_ge i (|L1|)) [2: /6 width=6 by lpxs_fwd_length, lleq_free, le_repl_sn_aux, ex3_intro, conj/ ] - #Hi #d elim (ylt_split i d) [ /5 width=5 by lpxs_fwd_length, lleq_skip, ex3_intro, conj/ ] - #Hdi #e #He #L2 elim (lleq_dec (#i) L1 L2 d) [ /4 width=5 by lpxs_fwd_length, ex3_intro, conj/ ] - #HnL12 #HL12 elim (ldrop_O1_lt L1 i) // -Hi #I #K1 #V1 #HLK1 - elim (lpxs_ldrop_conf … HLK1 … HL12) -HL12 #X #H #HLK2 - elim (lpxs_inv_pair1 … H) -H #K2 #V2 #HK12 #HV12 #H destruct - elim (lift_total V2 0 (i+1)) #W2 #HVW2 - @(ex3_intro … W2) /2 width=7 by cpxs_delta, cpys_subst/ -I -K1 -V1 -Hdi - @conj #H [ elim HnL12 // | destruct elim (lift_inv_lref2_be … HVW2) // ] -| /5 width=5 by lpxs_fwd_length, lleq_gref, ex3_intro, conj/ -| #I #G #L1 #K1 #V #V1 #T1 #i #d #e #Hdi #Hide #HLK1 #HV1 #HVT1 #_ #He #L2 #HL12 destruct - elim (lpxs_ldrop_conf … HLK1 … HL12) -HL12 #X #H #HLK2 - elim (lpxs_inv_pair1 … H) -H #K2 #W #HK12 #HVW #H destruct - elim (cpxs_cpys_conf_lpxs … HVW … HV1 … HK12) -HVW -HV1 -HK12 #W1 #HW1 #VW1 - elim (lift_total W1 0 (i+1)) #U1 #HWU1 - lapply (ldrop_fwd_drop2 … HLK1) -HLK1 #HLK1 - @(ex3_intro … U1) /2 width=10 by cpxs_lift, cpys_subst/ -| #a #I #G #L #V #V1 #T #T1 #d #e #HV1 #_ #IHV1 #IHT1 #He #L2 #HL12 - elim (IHV1 … HL12) // -IHV1 #V2 #HV2 #HV12 * #H1V #H2V - elim (IHT1 … (L2.ⓑ{I}V2)) /4 width=3 by lpxs_cpx_trans, lpxs_pair, cpys_cpx/ -IHT1 -He #T2 #HT2 #HT12 * #H1T #H2T - elim (cpxs_conf_lpxs_lpys … HT12 … HL12 … HV1) -HT12 -HL12 -HV1 #T0 #HT20 #HT10 - @(ex3_intro … (ⓑ{a,I}V2.T0)) - [ @cpys_bind // @(cpys_trans_eq … T2) /3 width=5 by lsuby_cpys_trans, lsuby_succ/ - | /2 width=1 by cpxs_bind/ - | @conj #H destruct - [ elim (lleq_inv_bind … H) -H #HV #HT >H1V -H1V // - | @lleq_bind /2 width=1/ - - - /3 width=5 by lsuby_cpys_trans, lsuby_succ/ -| #I #G #L #V #V1 #T #T1 #d #e #HV1 #HT1 #IHV1 #IHT1 #He #L2 #HL12 - elim (IHV1 … HL12) // -IHV1 #V2 #HV2 #HV12 * #H1V #H2V - elim (IHT1 … HL12) // -IHT1 #T2 #HT2 #HT12 * #H1T #H2T -He -HL12 - @(ex3_intro … (ⓕ{I}V2.T2)) /2 width=1 by cpxs_flat, cpys_flat/ - @conj #H destruct [2: /3 width=1 by lleq_flat/ ] - elim (lleq_inv_flat … H) -H /3 width=1 by eq_f2/ -] - - - - [ - | @cpxs_bind // - @(lpx_cpxs_trans … HT12) -| -] - axiom lleq_lpxs_trans: ∀h,g,G,L1,L2,T,d. L1 ⋕[T, d] L2 → ∀K2. ⦃G, L2⦄ ⊢ ➡*[h, g] K2 → ∃∃K1. ⦃G, L1⦄ ⊢ ➡*[h, g] K1 & K1 ⋕[T, d] K2. (*