X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fbasic_2%2Freduction%2Fcpr.ma;h=3c0514a3c7a876b4ca2c0f1a305b54d837e3f621;hb=32bdf7f107be22a121fab8225c5fae4eb6b33633;hp=e6ad7b2bac33235f086ad727f68cad5ec9152609;hpb=09af7a9751464291ec3f32fb80c92fe1accdbf88;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr.ma b/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr.ma index e6ad7b2ba..3c0514a3c 100644 --- a/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr.ma +++ b/matita/matita/contribs/lambdadelta/basic_2/reduction/cpr.ma @@ -12,49 +12,49 @@ (* *) (**************************************************************************) -include "basic_2/unfold/cpqs.ma". +include "basic_2/notation/relations/pred_4.ma". +include "basic_2/grammar/genv.ma". +include "basic_2/grammar/cl_shift.ma". +include "basic_2/relocation/ldrop_append.ma". +include "basic_2/relocation/lsubr.ma". (* CONTEXT-SENSITIVE PARALLEL REDUCTION FOR TERMS ***************************) -(* Basic_1: includes: pr0_delta1 pr2_delta1 pr2_thin_dx pr2_head_1 *) +(* activate genv *) +(* Basic_1: includes: pr0_delta1 pr2_delta1 pr2_thin_dx *) (* Note: cpr_flat: does not hold in basic_1 *) -inductive cpr: lenv → relation term ≝ -| cpr_atom : ∀I,L. cpr L (⓪{I}) (⓪{I}) -| cpr_delta: ∀L,K,V,V2,W2,i. - ⇩[0, i] L ≡ K. ⓓV → cpr K V V2 → - ⇧[0, i + 1] V2 ≡ W2 → cpr L (#i) W2 -| cpr_bind : ∀a,I,L,V1,V2,T1,T2. - cpr L V1 V2 → cpr (L. ⓑ{I} V1) T1 T2 → - cpr L (ⓑ{a,I} V1. T1) (ⓑ{a,I} V2. T2) -| cpr_flat : ∀I,L,V1,V2,T1,T2. - cpr L V1 V2 → cpr L T1 T2 → - cpr L (ⓕ{I} V1. T1) (ⓕ{I} V2. T2) -| cpr_zeta : ∀L,V,T1,T,T2. cpr (L.ⓓV) T1 T → - ⇧[0, 1] T2 ≡ T → cpr L (+ⓓV. T1) T2 -| cpr_tau : ∀L,V,T1,T2. cpr L T1 T2 → cpr L (ⓝV. T1) T2 -| cpr_beta : ∀a,L,V1,V2,W,T1,T2. - cpr L V1 V2 → cpr (L.ⓛW) T1 T2 → - cpr L (ⓐV1. ⓛ{a}W. T1) (ⓓ{a}V2. T2) -| cpr_theta: ∀a,L,V1,V,V2,W1,W2,T1,T2. - cpr L V1 V → ⇧[0, 1] V ≡ V2 → cpr L W1 W2 → cpr (L.ⓓW1) T1 T2 → - cpr L (ⓐV1. ⓓ{a}W1. T1) (ⓓ{a}W2. ⓐV2. T2) +inductive cpr: relation4 genv lenv term term ≝ +| cpr_atom : ∀I,G,L. cpr G L (⓪{I}) (⓪{I}) +| cpr_delta: ∀G,L,K,V,V2,W2,i. + ⇩[0, i] L ≡ K. ⓓV → cpr G K V V2 → + ⇧[0, i + 1] V2 ≡ W2 → cpr G L (#i) W2 +| cpr_bind : ∀a,I,G,L,V1,V2,T1,T2. + cpr G L V1 V2 → cpr G (L.ⓑ{I}V1) T1 T2 → + cpr G L (ⓑ{a,I}V1.T1) (ⓑ{a,I}V2.T2) +| cpr_flat : ∀I,G,L,V1,V2,T1,T2. + cpr G L V1 V2 → cpr G L T1 T2 → + cpr G L (ⓕ{I}V1.T1) (ⓕ{I}V2.T2) +| cpr_zeta : ∀G,L,V,T1,T,T2. cpr G (L.ⓓV) T1 T → + ⇧[0, 1] T2 ≡ T → cpr G L (+ⓓV.T1) T2 +| cpr_tau : ∀G,L,V,T1,T2. cpr G L T1 T2 → cpr G L (ⓝV.T1) T2 +| cpr_beta : ∀a,G,L,V1,V2,W1,W2,T1,T2. + cpr G L V1 V2 → cpr G L W1 W2 → cpr G (L.ⓛW1) T1 T2 → + cpr G L (ⓐV1.ⓛ{a}W1.T1) (ⓓ{a}ⓝW2.V2.T2) +| cpr_theta: ∀a,G,L,V1,V,V2,W1,W2,T1,T2. + cpr G L V1 V → ⇧[0, 1] V ≡ V2 → cpr G L W1 W2 → cpr G (L.ⓓW1) T1 T2 → + cpr G L (ⓐV1.ⓓ{a}W1.T1) (ⓓ{a}W2.ⓐV2.T2) . interpretation "context-sensitive parallel reduction (term)" - 'PRed L T1 T2 = (cpr L T1 T2). + 'PRed G L T1 T2 = (cpr G L T1 T2). (* Basic properties *********************************************************) -(* Note: it does not hold replacing |L1| with |L2| *) -lemma cpr_lsubr_trans: ∀L1,T1,T2. L1 ⊢ T1 ➡ T2 → - ∀L2. L2 ⊑ [0, |L1|] L1 → L2 ⊢ T1 ➡ T2. -#L1 #T1 #T2 #H elim H -L1 -T1 -T2 +lemma lsubr_cpr_trans: ∀G. lsub_trans … (cpr G) lsubr. +#G #L1 #T1 #T2 #H elim H -G -L1 -T1 -T2 [ // -| #L1 #K1 #V1 #V2 #W2 #i #HLK1 #_ #HVW2 #IHV12 #L2 #HL12 - lapply (ldrop_fwd_ldrop2_length … HLK1) #Hi - lapply (ldrop_fwd_O1_length … HLK1) #H2i - elim (ldrop_lsubr_ldrop2_abbr … HL12 … HLK1 ? ?) -HL12 -HLK1 // -Hi -