From 39e80f80b26e18cf78f805e814ba2f2e8400c1f1 Mon Sep 17 00:00:00 2001 From: Ferruccio Guidi Date: Sun, 8 Jan 2012 15:01:27 +0000 Subject: [PATCH 1/1] - notation restyling ... --- .../lambda_delta/Basic_2/computation/acp.ma | 8 +- .../Basic_2/computation/acp_aaa.ma | 20 ++-- .../Basic_2/computation/acp_cr.ma | 16 +-- .../Basic_2/computation/csn_aaa.ma | 2 +- .../Basic_2/computation/csn_cr.ma | 2 +- .../lambda_delta/Basic_2/functional/lift.ma | 6 +- .../Basic_2/functional/rtm_step.ma | 3 + .../lambda_delta/Basic_2/functional/subst.ma | 4 +- .../contribs/lambda_delta/Basic_2/notation.ma | 45 +++++--- .../lambda_delta/Basic_2/reducibility/cpr.ma | 26 ++--- .../Basic_2/reducibility/cpr_cpr.ma | 14 +-- .../Basic_2/reducibility/cpr_lift.ma | 28 ++--- .../Basic_2/reducibility/cpr_ltpr.ma | 16 +-- .../lambda_delta/Basic_2/reducibility/lcpr.ma | 6 +- .../lambda_delta/Basic_2/reducibility/ltpr.ma | 30 ++--- .../Basic_2/reducibility/ltpr_ldrop.ma | 8 +- .../lambda_delta/Basic_2/reducibility/tnf.ma | 2 +- .../lambda_delta/Basic_2/reducibility/tpr.ma | 96 ++++++++-------- .../Basic_2/reducibility/tpr_lift.ma | 18 +-- .../Basic_2/reducibility/tpr_tpr.ma | 108 +++++++++--------- .../Basic_2/reducibility/tpr_tpss.ma | 20 ++-- .../Basic_2/reducibility/twhnf.ma | 2 +- .../lambda_delta/Basic_2/static/aaa.ma | 2 +- .../Basic_2/substitution/gdrop.ma | 14 +-- .../Basic_2/substitution/gdrop_gdrop.ma | 4 +- .../Basic_2/substitution/ldrop.ma | 62 +++++----- .../Basic_2/substitution/ldrop_ldrop.ma | 36 +++--- .../lambda_delta/Basic_2/substitution/lift.ma | 94 +++++++-------- .../Basic_2/substitution/lift_lift.ma | 34 +++--- .../Basic_2/substitution/lift_vector.ma | 4 +- .../lambda_delta/Basic_2/substitution/ltps.ma | 70 ++++++------ .../Basic_2/substitution/ltps_ldrop.ma | 36 +++--- .../Basic_2/substitution/ltps_tps.ma | 28 ++--- .../lambda_delta/Basic_2/substitution/tps.ma | 72 ++++++------ .../Basic_2/substitution/tps_lift.ma | 64 +++++------ .../Basic_2/substitution/tps_tps.ma | 24 ++-- .../lambda_delta/Basic_2/unfold/delift.ma | 2 +- .../Basic_2/unfold/delift_lift.ma | 4 +- .../lambda_delta/Basic_2/unfold/ldrops.ma | 8 +- .../lambda_delta/Basic_2/unfold/lifts.ma | 43 +++---- .../Basic_2/unfold/lifts_vector.ma | 14 +-- .../lambda_delta/Basic_2/unfold/ltpss.ma | 38 +++--- .../Basic_2/unfold/ltpss_ldrop.ma | 36 +++--- .../Basic_2/unfold/ltpss_ltpss.ma | 18 +-- .../lambda_delta/Basic_2/unfold/ltpss_tpss.ma | 76 ++++++------ .../lambda_delta/Basic_2/unfold/tpss.ma | 46 ++++---- .../lambda_delta/Basic_2/unfold/tpss_lift.ma | 72 ++++++------ .../lambda_delta/Basic_2/unfold/tpss_ltps.ma | 28 ++--- .../lambda_delta/Basic_2/unfold/tpss_tpss.ma | 58 +++++----- 49 files changed, 739 insertions(+), 728 deletions(-) diff --git a/matita/matita/contribs/lambda_delta/Basic_2/computation/acp.ma b/matita/matita/contribs/lambda_delta/Basic_2/computation/acp.ma index 9cd2a3fa6..3e13d9ac3 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/computation/acp.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/computation/acp.ma @@ -20,18 +20,18 @@ definition CP1 ≝ λRR:lenv→relation term. λRS:relation term. ∀L,k. NF … (RR L) RS (⋆k). definition CP2 ≝ λRR:lenv→relation term. λRS:relation term. - ∀L,K,W,i. ⇓[0,i] L ≡ K. 𝕓{Abst} W → NF … (RR L) RS (#i). + ∀L,K,W,i. ⇩[0,i] L ≡ K. 𝕓{Abst} W → NF … (RR L) RS (#i). definition CP3 ≝ λRR:lenv→relation term. λRP:lenv→predicate term. ∀L,V,k. RP L (𝕔{Appl}⋆k.V) → RP L V. definition CP4 ≝ λRR:lenv→relation term. λRS:relation term. ∀L0,L,T,T0,d,e. NF … (RR L) RS T → - ⇓[d,e] L0 ≡ L → ⇑[d, e] T ≡ T0 → NF … (RR L0) RS T0. + ⇩[d,e] L0 ≡ L → ⇧[d, e] T ≡ T0 → NF … (RR L0) RS T0. definition CP4s ≝ λRR:lenv→relation term. λRS:relation term. - ∀L0,L,des. ⇓[des] L0 ≡ L → - ∀T,T0. ⇑[des] T ≡ T0 → + ∀L0,L,des. ⇩*[des] L0 ≡ L → + ∀T,T0. ⇧*[des] T ≡ T0 → NF … (RR L) RS T → NF … (RR L0) RS T0. (* requirements for abstract computation properties *) diff --git a/matita/matita/contribs/lambda_delta/Basic_2/computation/acp_aaa.ma b/matita/matita/contribs/lambda_delta/Basic_2/computation/acp_aaa.ma index a47d224d3..03526d8f1 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/computation/acp_aaa.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/computation/acp_aaa.ma @@ -15,17 +15,17 @@ include "Basic_2/static/aaa.ma". include "Basic_2/computation/lsubc.ma". (* -axiom lsubc_ldrops_trans: ∀RP,L1,L2. L1 [RP] ⊑ L2 → ∀K2,des. ⇓[des] L2 ≡ K2 → - ∃∃K1. ⇓[des] L1 ≡ K1 & K1 [RP] ⊑ K2. +axiom lsubc_ldrops_trans: ∀RP,L1,L2. L1 [RP] ⊑ L2 → ∀K2,des. ⇩[des] L2 ≡ K2 → + ∃∃K1. ⇩[des] L1 ≡ K1 & K1 [RP] ⊑ K2. *) -axiom ldrops_lsubc_trans: ∀RP,L1,K1,des. ⇓[des] L1 ≡ K1 → ∀K2. K1 [RP] ⊑ K2 → - ∃∃L2. L1 [RP] ⊑ L2 & ⇓[des] L2 ≡ K2. +axiom ldrops_lsubc_trans: ∀RP,L1,K1,des. ⇩*[des] L1 ≡ K1 → ∀K2. K1 [RP] ⊑ K2 → + ∃∃L2. L1 [RP] ⊑ L2 & ⇩*[des] L2 ≡ K2. -axiom lifts_trans: ∀T1,T,des1. ⇑[des1] T1 ≡ T → ∀T2:term. ∀des2. ⇑[des2] T ≡ T2 → - ⇑[des1 @ des2] T1 ≡ T2. +axiom lifts_trans: ∀T1,T,des1. ⇧*[des1] T1 ≡ T → ∀T2:term. ∀des2. ⇧*[des2] T ≡ T2 → + ⇧*[des1 @ des2] T1 ≡ T2. -axiom ldrops_trans: ∀L1,L,des1. ⇓[des1] L1 ≡ L → ∀L2,des2. ⇓[des2] L ≡ L2 → - ⇓[des2 @ des1] L1 ≡ L2. +axiom ldrops_trans: ∀L1,L,des1. ⇩*[des1] L1 ≡ L → ∀L2,des2. ⇩*[des2] L ≡ L2 → + ⇩*[des2 @ des1] L1 ≡ L2. (* ABSTRACT COMPUTATION PROPERTIES ******************************************) @@ -33,8 +33,8 @@ axiom ldrops_trans: ∀L1,L,des1. ⇓[des1] L1 ≡ L → ∀L2,des2. ⇓[des2] L axiom aacr_aaa_csubc_lifts: ∀RR,RS,RP. acp RR RS RP → acr RR RS RP (λL,T. RP L T) → - ∀L1,T,A. L1 ⊢ T ÷ A → ∀L0,des. ⇓[des] L0 ≡ L1 → - ∀T0. ⇑[des] T ≡ T0 → ∀L2. L2 [RP] ⊑ L0 → + ∀L1,T,A. L1 ⊢ T ÷ A → ∀L0,des. ⇩*[des] L0 ≡ L1 → + ∀T0. ⇧*[des] T ≡ T0 → ∀L2. L2 [RP] ⊑ L0 → ⦃L2, T0⦄ [RP] ϵ 〚A〛. (* #RR #RS #RP #H1RP #H2RP #L1 #T #A #H elim H -L1 -T -A diff --git a/matita/matita/contribs/lambda_delta/Basic_2/computation/acp_cr.ma b/matita/matita/contribs/lambda_delta/Basic_2/computation/acp_cr.ma index f954ca15b..fc0b87b17 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/computation/acp_cr.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/computation/acp_cr.ma @@ -32,18 +32,18 @@ definition S3 ≝ λRP,C:lenv→predicate term. ∀L,Vs,V,T,W. C L (ⒶVs. 𝕔{Abbr}V. T) → RP L W → C L (ⒶVs. 𝕔{Appl}V. 𝕔{Abst}W. T). definition S5 ≝ λRP,C:lenv→predicate term. - ∀L,V1s,V2s. ⇑[0, 1] V1s ≡ V2s → + ∀L,V1s,V2s. ⇧[0, 1] V1s ≡ V2s → ∀V,T. C (L. 𝕓{Abbr}V) (ⒶV2s. T) → RP L V → C L (ⒶV1s. 𝕔{Abbr}V. T). definition S6 ≝ λRP,C:lenv→predicate term. ∀L,Vs,T,W. C L (ⒶVs. T) → RP L W → C L (ⒶVs. 𝕔{Cast}W. T). definition S7 ≝ λC:lenv→predicate term. ∀L1,L2,T1,T2,d,e. - C L1 T1 → ⇓[d, e] L2 ≡ L1 → ⇑[d, e] T1 ≡ T2 → C L2 T2. + C L1 T1 → ⇩[d, e] L2 ≡ L1 → ⇧[d, e] T1 ≡ T2 → C L2 T2. definition S7s ≝ λC:lenv→predicate term. - ∀L1,L2,des. ⇓[des] L2 ≡ L1 → - ∀T1,T2. ⇑[des] T1 ≡ T2 → C L1 T1 → C L2 T2. + ∀L1,L2,des. ⇩*[des] L2 ≡ L1 → + ∀T1,T2. ⇧*[des] T1 ≡ T2 → C L1 T1 → C L2 T2. (* properties of the abstract candidate of reducibility *) record acr (RR:lenv->relation term) (RS:relation term) (RP,C:lenv→predicate term) : Prop ≝ @@ -59,7 +59,7 @@ record acr (RR:lenv->relation term) (RS:relation term) (RP,C:lenv→predicate te let rec aacr (RP:lenv→predicate term) (A:aarity) (L:lenv) on A: predicate term ≝ λT. match A with [ AAtom ⇒ RP L T -| APair B A ⇒ ∀L0,V0,T0,des. aacr RP B L0 V0 → ⇓[des] L0 ≡ L → ⇑[des] T ≡ T0 → +| APair B A ⇒ ∀L0,V0,T0,des. aacr RP B L0 V0 → ⇩*[des] L0 ≡ L → ⇧*[des] T ≡ T0 → aacr RP A L0 (𝕔{Appl} V0. T0) ]. @@ -79,7 +79,7 @@ lemma acr_lifts: ∀C. S7 C → S7s C. qed. lemma rp_lifts: ∀RR,RS,RP. acr RR RS RP (λL,T. RP L T) → - ∀des,L0,L,V,V0. ⇓[des] L0 ≡ L → ⇑[des] V ≡ V0 → + ∀des,L0,L,V,V0. ⇩*[des] L0 ≡ L → ⇧*[des] V ≡ V0 → RP L V → RP L0 V0. #RR #RS #RP #HRP #des #L0 #L #V #V0 #HL0 #HV0 #HV @acr_lifts /width=6/ @@ -87,7 +87,7 @@ lemma rp_lifts: ∀RR,RS,RP. acr RR RS RP (λL,T. RP L T) → qed. lemma rp_liftsv_all: ∀RR,RS,RP. acr RR RS RP (λL,T. RP L T) → - ∀des,L0,L,Vs,V0s. ⇑[des] Vs ≡ V0s → ⇓[des] L0 ≡ L → + ∀des,L0,L,Vs,V0s. ⇧*[des] Vs ≡ V0s → ⇩*[des] L0 ≡ L → all … (RP L) Vs → all … (RP L0) V0s. #RR #RS #RP #HRP #des #L0 #L #Vs #V0s #H elim H -Vs -V0s normalize // #T1s #T2s #T1 #T2 #HT12 #_ #IHT2s #HL0 * #HT1 #HT1s @@ -134,7 +134,7 @@ qed. *) lemma aacr_abst: ∀RR,RS,RP. acp RR RS RP → acr RR RS RP (λL,T. RP L T) → ∀L,W,T,A,B. RP L W → ( - ∀L0,V0,T0,des. ⇓[des] L0 ≡ L → ⇑[ss des] T ≡ T0 → + ∀L0,V0,T0,des. ⇩*[des] L0 ≡ L → ⇧*[ss des] T ≡ T0 → ⦃L0, V0⦄ [RP] ϵ 〚B〛→ ⦃L0. 𝕓{Abbr} V0, T0⦄ [RP] ϵ 〚A〛 ) → ⦃L, 𝕓{Abst} W. T⦄ [RP] ϵ 〚𝕔 B. A〛. diff --git a/matita/matita/contribs/lambda_delta/Basic_2/computation/csn_aaa.ma b/matita/matita/contribs/lambda_delta/Basic_2/computation/csn_aaa.ma index 097b045dc..8bc613aa4 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/computation/csn_aaa.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/computation/csn_aaa.ma @@ -19,7 +19,7 @@ include "Basic_2/computation/csn_cr.ma". (* Main properties **********************************************************) -theorem csn_aaa: ∀L,T,A. L ⊢ T ÷ A → L ⊢ ⇓ T. +theorem csn_aaa: ∀L,T,A. L ⊢ T ÷ A → L ⊢ ⬇* T. #L #T #A #H @(acp_aaa … csn_acp csn_acr … H) qed. diff --git a/matita/matita/contribs/lambda_delta/Basic_2/computation/csn_cr.ma b/matita/matita/contribs/lambda_delta/Basic_2/computation/csn_cr.ma index 5dadd06de..98a8db1de 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/computation/csn_cr.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/computation/csn_cr.ma @@ -19,4 +19,4 @@ include "Basic_2/computation/csn.ma". (* Advanced properties ******************************************************) -axiom csn_acr: acr cpr (eq …) (csn …) (λL,T. L ⊢ ⇓ T). +axiom csn_acr: acr cpr (eq …) (csn …) (λL,T. L ⊢ ⬇* T). diff --git a/matita/matita/contribs/lambda_delta/Basic_2/functional/lift.ma b/matita/matita/contribs/lambda_delta/Basic_2/functional/lift.ma index c94f11c8b..90e41e9a5 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/functional/lift.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/functional/lift.ma @@ -33,7 +33,7 @@ interpretation "functional relocation" 'Lift d e T = (flift d e T). (* Main properties **********************************************************) -theorem flift_lift: ∀T,d,e. ⇑[d, e] T ≡ ↑[d, e] T. +theorem flift_lift: ∀T,d,e. ⇧[d, e] T ≡ ↑[d, e] T. #T elim T -T [ * #i #d #e // elim (lt_or_eq_or_gt i d) #Hid normalize @@ -47,7 +47,7 @@ qed. (* Main inversion properties ************************************************) -theorem flift_inv_lift: ∀d,e,T1,T2. ⇑[d, e] T1 ≡ T2 → ↑[d, e] T1 = T2. +theorem flift_inv_lift: ∀d,e,T1,T2. ⇧[d, e] T1 ≡ T2 → ↑[d, e] T1 = T2. #d #e #T1 #T2 #H elim H -d -e -T1 -T2 normalize // [ #i #d #e #Hid >(tri_lt ?????? Hid) // | #i #d #e #Hid @@ -60,7 +60,7 @@ qed-. (* Derived properties *******************************************************) -lemma flift_join: ∀e1,e2,T. ⇑[e1, e2] ↑[0, e1] T ≡ ↑[0, e1 + e2] T. +lemma flift_join: ∀e1,e2,T. ⇧[e1, e2] ↑[0, e1] T ≡ ↑[0, e1 + e2] T. #e1 #e2 #T lapply (flift_lift T 0 (e1+e2)) #H elim (lift_split … H e1 e1 ? ? ?) -H // #U #H diff --git a/matita/matita/contribs/lambda_delta/Basic_2/functional/rtm_step.ma b/matita/matita/contribs/lambda_delta/Basic_2/functional/rtm_step.ma index 470288882..e1fabb8fa 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/functional/rtm_step.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/functional/rtm_step.ma @@ -52,3 +52,6 @@ inductive rtm_step: relation rtm ≝ rtm_step (mk_rtm G u E S (𝕔{Abbr} V. T)) (mk_rtm G u (E. ④{Abbr} {u, E, V}) S T) . + +interpretation "sequential reduction (RTM)" + 'SRed O1 O2 = (rtm_step O1 O2). diff --git a/matita/matita/contribs/lambda_delta/Basic_2/functional/subst.ma b/matita/matita/contribs/lambda_delta/Basic_2/functional/subst.ma index 46d311740..d415c19d6 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/functional/subst.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/functional/subst.ma @@ -34,7 +34,7 @@ interpretation "functional core substitution" 'Subst V d T = (fsubst V d T). (* Main properties **********************************************************) theorem fsubst_delift: ∀K,V,T,L,d. - ⇓[0, d] L ≡ K. 𝕓{Abbr} V → L ⊢ T [d, 1] ≡ [d ← V] T. + ⇩[0, d] L ≡ K. 𝕓{Abbr} V → L ⊢ T [d, 1] ≡ [d ← V] T. #K #V #T elim T -T [ * #i #L #d #HLK normalize in ⊢ (? ? ? ? ? %); /2 width=3/ elim (lt_or_eq_or_gt i d) #Hid @@ -48,7 +48,7 @@ qed. (* Main inversion properties ************************************************) -theorem fsubst_inv_delift: ∀K,V,T1,L,T2,d. ⇓[0, d] L ≡ K. 𝕓{Abbr} V → +theorem fsubst_inv_delift: ∀K,V,T1,L,T2,d. ⇩[0, d] L ≡ K. 𝕓{Abbr} V → L ⊢ T1 [d, 1] ≡ T2 → [d ← V] T1 = T2. #K #V #T1 elim T1 -T1 [ * #i #L #T2 #d #HLK #H diff --git a/matita/matita/contribs/lambda_delta/Basic_2/notation.ma b/matita/matita/contribs/lambda_delta/Basic_2/notation.ma index f528a9062..a801fae21 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/notation.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/notation.ma @@ -90,37 +90,41 @@ notation "hvbox( T1 break [ d , break e ] ≼ break T2 )" (* Substitution *************************************************************) -notation "hvbox( ⇑ [ d , break e ] break T1 ≡ break T2 )" +notation "hvbox( ⇧ [ d , break e ] break T1 ≡ break T2 )" non associative with precedence 45 for @{ 'RLift $d $e $T1 $T2 }. -notation "hvbox( ⇓ [ d , break e ] break L1 ≡ break L2 )" +notation "hvbox( ⇩ [ e ] break L1 ≡ break L2 )" non associative with precedence 45 - for @{ 'RLDrop $d $e $L1 $L2 }. + for @{ 'RDrop $e $L1 $L2 }. -notation "hvbox( T1 break [ d , break e ] ≫ break T2 )" +notation "hvbox( ⇩ [ d , break e ] break L1 ≡ break L2 )" + non associative with precedence 45 + for @{ 'RDrop $d $e $L1 $L2 }. + +notation "hvbox( T1 break [ d , break e ] ▶ break T2 )" non associative with precedence 45 for @{ 'PSubst $T1 $d $e $T2 }. -notation "hvbox( L ⊢ break term 90 T1 break [ d , break e ] ≫ break T2 )" +notation "hvbox( L ⊢ break term 90 T1 break [ d , break e ] ▶ break T2 )" non associative with precedence 45 for @{ 'PSubst $L $T1 $d $e $T2 }. (* Unfold *******************************************************************) -notation "hvbox( ⇑ [ e ] break T1 ≡ break T2 )" +notation "hvbox( ⇧ * [ e ] break T1 ≡ break T2 )" non associative with precedence 45 - for @{ 'RLift $e $T1 $T2 }. + for @{ 'RLiftStar $e $T1 $T2 }. -notation "hvbox( ⇓ [ e ] break L1 ≡ break L2 )" +notation "hvbox( ⇩ * [ e ] break L1 ≡ break L2 )" non associative with precedence 45 - for @{ 'RLDrop $e $L1 $L2 }. + for @{ 'RDropStar $e $L1 $L2 }. -notation "hvbox( T1 break [ d , break e ] ≫* break T2 )" +notation "hvbox( T1 break [ d , break e ] ▶* break T2 )" non associative with precedence 45 for @{ 'PSubstStar $T1 $d $e $T2 }. -notation "hvbox( L ⊢ break term 90 T1 break [ d , break e ] ≫* break T2 )" +notation "hvbox( L ⊢ break term 90 T1 break [ d , break e ] ▶* break T2 )" non associative with precedence 45 for @{ 'PSubstStar $L $T1 $d $e $T2 }. @@ -188,37 +192,37 @@ notation "hvbox( L ⊢ 𝕎ℍℕ [ T ] )" non associative with precedence 45 for @{ 'WHdNormal $L $T }. -notation "hvbox( T1 ⇒ break T2 )" +notation "hvbox( T1 ➡ break T2 )" non associative with precedence 45 for @{ 'PRed $T1 $T2 }. -notation "hvbox( L ⊢ break term 90 T1 ⇒ break T2 )" +notation "hvbox( L ⊢ break term 90 T1 ➡ break T2 )" non associative with precedence 45 for @{ 'PRed $L $T1 $T2 }. -notation "hvbox( L1 ⊢ ⇒ break L2 )" +notation "hvbox( L1 ⊢ ➡ break L2 )" non associative with precedence 45 for @{ 'CPRed $L1 $L2 }. (* Computation **************************************************************) -notation "hvbox( T1 ⇒* break T2 )" +notation "hvbox( T1 ➡* break T2 )" non associative with precedence 45 for @{ 'PRedStar $T1 $T2 }. -notation "hvbox( L ⊢ break term 90 T1 ⇒* break T2 )" +notation "hvbox( L ⊢ break term 90 T1 ➡* break T2 )" non associative with precedence 45 for @{ 'PRedStar $L $T1 $T2 }. -notation "hvbox( L1 ⊢ ⇒* break L2 )" +notation "hvbox( L1 ⊢ ➡* break L2 )" non associative with precedence 45 for @{ 'CPRedStar $L1 $L2 }. -notation "hvbox( ⇓ T )" +notation "hvbox( ⬇ * T )" non associative with precedence 45 for @{ 'SN $T }. -notation "hvbox( L ⊢ ⇓ T )" +notation "hvbox( L ⊢ ⬇ * T )" non associative with precedence 45 for @{ 'SN $L $T }. @@ -240,3 +244,6 @@ notation "hvbox( [ d ← break V ] break T )" non associative with precedence 55 for @{ 'Subst $V $d $T }. +notation "hvbox( T1 ⇨ break T2 )" + non associative with precedence 45 + for @{ 'SRed $T1 $T2 }. diff --git a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/cpr.ma b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/cpr.ma index 3b05c3ea6..bcc50fa6e 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/cpr.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/cpr.ma @@ -20,7 +20,7 @@ include "Basic_2/reducibility/tpr.ma". (* Basic_1: includes: pr2_delta1 *) definition cpr: lenv → relation term ≝ - λL,T1,T2. ∃∃T. T1 ⇒ T & L ⊢ T [0, |L|] ≫* T2. + λL,T1,T2. ∃∃T. T1 ➡ T & L ⊢ T [0, |L|] ▶* T2. interpretation "context-sensitive parallel reduction (term)" @@ -29,31 +29,31 @@ interpretation (* Basic properties *********************************************************) (* Basic_1: was by definition: pr2_free *) -lemma cpr_pr: ∀T1,T2. T1 ⇒ T2 → ∀L. L ⊢ T1 ⇒ T2. +lemma cpr_pr: ∀T1,T2. T1 ➡ T2 → ∀L. L ⊢ T1 ➡ T2. /2 width=3/ qed. -lemma cpr_tpss: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ≫* T2 → L ⊢ T1 ⇒ T2. +lemma cpr_tpss: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ▶* T2 → L ⊢ T1 ➡ T2. /3 width=5/ qed. -lemma cpr_refl: ∀L,T. L ⊢ T ⇒ T. +lemma cpr_refl: ∀L,T. L ⊢ T ➡ T. /2 width=1/ qed. (* Note: new property *) (* Basic_1: was only: pr2_thin_dx *) lemma cpr_flat: ∀I,L,V1,V2,T1,T2. - L ⊢ V1 ⇒ V2 → L ⊢ T1 ⇒ T2 → L ⊢ 𝕗{I} V1. T1 ⇒ 𝕗{I} V2. T2. + L ⊢ V1 ➡ V2 → L ⊢ T1 ➡ T2 → L ⊢ 𝕗{I} V1. T1 ➡ 𝕗{I} V2. T2. #I #L #V1 #V2 #T1 #T2 * #V #HV1 #HV2 * /3 width=5/ qed. lemma cpr_cast: ∀L,V,T1,T2. - L ⊢ T1 ⇒ T2 → L ⊢ 𝕔{Cast} V. T1 ⇒ T2. + L ⊢ T1 ➡ T2 → L ⊢ 𝕔{Cast} V. T1 ➡ T2. #L #V #T1 #T2 * /3 width=3/ qed. (* Note: it does not hold replacing |L1| with |L2| *) (* Basic_1: was only: pr2_change *) -lemma cpr_lsubs_conf: ∀L1,T1,T2. L1 ⊢ T1 ⇒ T2 → - ∀L2. L1 [0, |L1|] ≼ L2 → L2 ⊢ T1 ⇒ T2. +lemma cpr_lsubs_conf: ∀L1,T1,T2. L1 ⊢ T1 ➡ T2 → + ∀L2. L1 [0, |L1|] ≼ L2 → L2 ⊢ T1 ➡ T2. #L1 #T1 #T2 * #T #HT1 #HT2 #L2 #HL12 lapply (tpss_lsubs_conf … HT2 … HL12) -HT2 -HL12 /3 width=4/ qed. @@ -61,23 +61,23 @@ qed. (* Basic inversion lemmas ***************************************************) (* Basic_1: was: pr2_gen_csort *) -lemma cpr_inv_atom: ∀T1,T2. ⋆ ⊢ T1 ⇒ T2 → T1 ⇒ T2. +lemma cpr_inv_atom: ∀T1,T2. ⋆ ⊢ T1 ➡ T2 → T1 ➡ T2. #T1 #T2 * #T #HT normalize #HT2 <(tpss_inv_refl_O2 … HT2) -HT2 // qed-. (* Basic_1: was: pr2_gen_sort *) -lemma cpr_inv_sort1: ∀L,T2,k. L ⊢ ⋆k ⇒ T2 → T2 = ⋆k. +lemma cpr_inv_sort1: ∀L,T2,k. L ⊢ ⋆k ➡ T2 → T2 = ⋆k. #L #T2 #k * #X #H >(tpr_inv_atom1 … H) -H #H >(tpss_inv_sort1 … H) -H // qed-. (* Basic_1: was: pr2_gen_cast *) -lemma cpr_inv_cast1: ∀L,V1,T1,U2. L ⊢ 𝕔{Cast} V1. T1 ⇒ U2 → ( - ∃∃V2,T2. L ⊢ V1 ⇒ V2 & L ⊢ T1 ⇒ T2 & +lemma cpr_inv_cast1: ∀L,V1,T1,U2. L ⊢ 𝕔{Cast} V1. T1 ➡ U2 → ( + ∃∃V2,T2. L ⊢ V1 ➡ V2 & L ⊢ T1 ➡ T2 & U2 = 𝕔{Cast} V2. T2 - ) ∨ L ⊢ T1 ⇒ U2. + ) ∨ L ⊢ T1 ➡ U2. #L #V1 #T1 #U2 * #X #H #HU2 elim (tpr_inv_cast1 … H) -H /3 width=3/ * #V #T #HV1 #HT1 #H destruct diff --git a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/cpr_cpr.ma b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/cpr_cpr.ma index 5ac57a614..553cde83a 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/cpr_cpr.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/cpr_cpr.ma @@ -19,15 +19,15 @@ include "Basic_2/reducibility/cpr.ma". (* Advanced properties ******************************************************) -lemma cpr_bind_sn: ∀I,L,V1,V2,T1,T2. L ⊢ V1 ⇒ V2 → T1 ⇒ T2 → - L ⊢ 𝕓{I} V1. T1 ⇒ 𝕓{I} V2. T2. +lemma cpr_bind_sn: ∀I,L,V1,V2,T1,T2. L ⊢ V1 ➡ V2 → T1 ➡ T2 → + L ⊢ 𝕓{I} V1. T1 ➡ 𝕓{I} V2. T2. #I #L #V1 #V2 #T1 #T2 * #V #HV1 #HV2 #HT12 @ex2_1_intro [2: @(tpr_delta … HV1 HT12) | skip ] /2 width=3/ (* /3 width=5/ is too slow *) qed. (* Basic_1: was only: pr2_gen_cbind *) -lemma cpr_bind_dx: ∀I,L,V1,V2,T1,T2. V1 ⇒ V2 → L. 𝕓{I} V2 ⊢ T1 ⇒ T2 → - L ⊢ 𝕓{I} V1. T1 ⇒ 𝕓{I} V2. T2. +lemma cpr_bind_dx: ∀I,L,V1,V2,T1,T2. V1 ➡ V2 → L. 𝕓{I} V2 ⊢ T1 ➡ T2 → + L ⊢ 𝕓{I} V1. T1 ➡ 𝕓{I} V2. T2. #I #L #V1 #V2 #T1 #T2 #HV12 * #T #HT1 normalize #HT2 elim (tpss_split_up … HT2 1 ? ?) -HT2 // #T0 (tpr_inv_atom1 … H) -H #H @@ -44,16 +44,16 @@ elim (tpss_inv_lref1 … H) -H /2 width=1/ qed-. (* Basic_1: was: pr2_gen_abst *) -lemma cpr_inv_abst1: ∀V1,T1,U2. 𝕔{Abst} V1. T1 ⇒ U2 → - ∃∃V2,T2. V1 ⇒ V2 & T1 ⇒ T2 & U2 = 𝕔{Abst} V2. T2. +lemma cpr_inv_abst1: ∀V1,T1,U2. 𝕔{Abst} V1. T1 ➡ U2 → + ∃∃V2,T2. V1 ➡ V2 & T1 ➡ T2 & U2 = 𝕔{Abst} V2. T2. /2 width=3/ qed-. (* Relocation properties ****************************************************) (* Basic_1: was: pr2_lift *) -lemma cpr_lift: ∀L,K,d,e. ⇓[d, e] L ≡ K → - ∀T1,U1. ⇑[d, e] T1 ≡ U1 → ∀T2,U2. ⇑[d, e] T2 ≡ U2 → - K ⊢ T1 ⇒ T2 → L ⊢ U1 ⇒ U2. +lemma cpr_lift: ∀L,K,d,e. ⇩[d, e] L ≡ K → + ∀T1,U1. ⇧[d, e] T1 ≡ U1 → ∀T2,U2. ⇧[d, e] T2 ≡ U2 → + K ⊢ T1 ➡ T2 → L ⊢ U1 ➡ U2. #L #K #d #e #HLK #T1 #U1 #HTU1 #T2 #U2 #HTU2 * #T #HT1 #HT2 elim (lift_total T d e) #U #HTU lapply (tpr_lift … HT1 … HTU1 … HTU) -T1 #HU1 @@ -64,9 +64,9 @@ elim (lt_or_ge (|K|) d) #HKd qed. (* Basic_1: was: pr2_gen_lift *) -lemma cpr_inv_lift: ∀L,K,d,e. ⇓[d, e] L ≡ K → - ∀T1,U1. ⇑[d, e] T1 ≡ U1 → ∀U2. L ⊢ U1 ⇒ U2 → - ∃∃T2. ⇑[d, e] T2 ≡ U2 & K ⊢ T1 ⇒ T2. +lemma cpr_inv_lift: ∀L,K,d,e. ⇩[d, e] L ≡ K → + ∀T1,U1. ⇧[d, e] T1 ≡ U1 → ∀U2. L ⊢ U1 ➡ U2 → + ∃∃T2. ⇧[d, e] T2 ≡ U2 & K ⊢ T1 ➡ T2. #L #K #d #e #HLK #T1 #U1 #HTU1 #U2 * #U #HU1 #HU2 elim (tpr_inv_lift … HU1 … HTU1) -U1 #T #HTU #T1 elim (lt_or_ge (|L|) d) #HLd diff --git a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/cpr_ltpr.ma b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/cpr_ltpr.ma index 1311e5290..ae26fa75d 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/cpr_ltpr.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/cpr_ltpr.ma @@ -21,24 +21,24 @@ include "Basic_2/reducibility/cpr.ma". (* Note: we could invoke tpss_weak_all instead of ltpr_fwd_length *) (* Basic_1: was only: pr2_subst1 *) -lemma cpr_tpss_ltpr: ∀L1,L2. L1 ⇒ L2 → ∀T1,T2. L2 ⊢ T1 ⇒ T2 → - ∀d,e,U1. L1 ⊢ T1 [d, e] ≫* U1 → - ∃∃U2. L2 ⊢ U1 ⇒ U2 & L2 ⊢ T2 [d, e] ≫* U2. +lemma cpr_tpss_ltpr: ∀L1,L2. L1 ➡ L2 → ∀T1,T2. L2 ⊢ T1 ➡ T2 → + ∀d,e,U1. L1 ⊢ T1 [d, e] ▶* U1 → + ∃∃U2. L2 ⊢ U1 ➡ U2 & L2 ⊢ T2 [d, e] ▶* U2. #L1 #L2 #HL12 #T1 #T2 * #T #HT1 #HT2 #d #e #U1 #HTU1 elim (tpr_tpss_ltpr … HL12 … HT1 … HTU1) -L1 -HT1 #U #HU1 #HTU elim (tpss_conf_eq … HT2 … HTU) -T /3 width=3/ qed. -lemma cpr_ltpr_conf_eq: ∀L1,T1,T2. L1 ⊢ T1 ⇒ T2 → ∀L2. L1 ⇒ L2 → - ∃∃T. L2 ⊢ T1 ⇒ T & T2 ⇒ T. +lemma cpr_ltpr_conf_eq: ∀L1,T1,T2. L1 ⊢ T1 ➡ T2 → ∀L2. L1 ➡ L2 → + ∃∃T. L2 ⊢ T1 ➡ T & T2 ➡ T. #L1 #T1 #T2 * #T #HT1 #HT2 #L2 #HL12 >(ltpr_fwd_length … HL12) in HT2; #HT2 elim (tpr_tpss_ltpr … HL12 … HT2) -L1 /3 width=3/ qed. -lemma cpr_ltpr_conf_tpss: ∀L1,L2. L1 ⇒ L2 → ∀T1,T2. L1 ⊢ T1 ⇒ T2 → - ∀d,e,U1. L1 ⊢ T1 [d, e] ≫* U1 → - ∃∃U2. L2 ⊢ U1 ⇒ U2 & L2 ⊢ T2 ⇒ U2. +lemma cpr_ltpr_conf_tpss: ∀L1,L2. L1 ➡ L2 → ∀T1,T2. L1 ⊢ T1 ➡ T2 → + ∀d,e,U1. L1 ⊢ T1 [d, e] ▶* U1 → + ∃∃U2. L2 ⊢ U1 ➡ U2 & L2 ⊢ T2 ➡ U2. #L1 #L2 #HL12 #T1 #T2 #HT12 #d #e #U1 #HTU1 elim (cpr_ltpr_conf_eq … HT12 … HL12) -HT12 #T #HT1 #HT2 elim (cpr_tpss_ltpr … HL12 … HT1 … HTU1) -L1 -HT1 #U2 #HU12 #HTU2 diff --git a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/lcpr.ma b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/lcpr.ma index 30df056e0..80d14a2e5 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/lcpr.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/lcpr.ma @@ -18,7 +18,7 @@ include "Basic_2/reducibility/ltpr.ma". (* CONTEXT-SENSITIVE PARALLEL REDUCTION ON LOCAL ENVIRONMENTS *************) definition lcpr: relation lenv ≝ - λL1,L2. ∃∃L. L1 ⇒ L & L [0, |L|] ≫* L2 + λL1,L2. ∃∃L. L1 ➡ L & L [0, |L|] ▶* L2 . interpretation @@ -27,11 +27,11 @@ interpretation (* Basic properties *********************************************************) -lemma lcpr_refl: ∀L. L ⊢ ⇒ L. +lemma lcpr_refl: ∀L. L ⊢ ➡ L. /2 width=3/ qed. (* Basic inversion lemmas ***************************************************) -lemma lcpr_inv_atom1: ∀L2. ⋆ ⊢ ⇒ L2 → L2 = ⋆. +lemma lcpr_inv_atom1: ∀L2. ⋆ ⊢ ➡ L2 → L2 = ⋆. #L2 * #L #HL >(ltpr_inv_atom1 … HL) -HL #HL2 >(ltpss_inv_atom1 … HL2) -HL2 // qed-. diff --git a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/ltpr.ma b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/ltpr.ma index 2208557a7..3675669c3 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/ltpr.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/ltpr.ma @@ -19,7 +19,7 @@ include "Basic_2/reducibility/tpr.ma". inductive ltpr: relation lenv ≝ | ltpr_stom: ltpr (⋆) (⋆) | ltpr_pair: ∀K1,K2,I,V1,V2. - ltpr K1 K2 → V1 ⇒ V2 → ltpr (K1. 𝕓{I} V1) (K2. 𝕓{I} V2) (*𝕓*) + ltpr K1 K2 → V1 ➡ V2 → ltpr (K1. 𝕓{I} V1) (K2. 𝕓{I} V2) (*𝕓*) . interpretation @@ -28,13 +28,13 @@ interpretation (* Basic properties *********************************************************) -lemma ltpr_refl: ∀L:lenv. L ⇒ L. +lemma ltpr_refl: ∀L:lenv. L ➡ L. #L elim L -L // /2 width=1/ qed. (* Basic inversion lemmas ***************************************************) -fact ltpr_inv_atom1_aux: ∀L1,L2. L1 ⇒ L2 → L1 = ⋆ → L2 = ⋆. +fact ltpr_inv_atom1_aux: ∀L1,L2. L1 ➡ L2 → L1 = ⋆ → L2 = ⋆. #L1 #L2 * -L1 -L2 [ // | #K1 #K2 #I #V1 #V2 #_ #_ #H destruct @@ -42,11 +42,11 @@ fact ltpr_inv_atom1_aux: ∀L1,L2. L1 ⇒ L2 → L1 = ⋆ → L2 = ⋆. qed. (* Basic_1: was: wcpr0_gen_sort *) -lemma ltpr_inv_atom1: ∀L2. ⋆ ⇒ L2 → L2 = ⋆. +lemma ltpr_inv_atom1: ∀L2. ⋆ ➡ L2 → L2 = ⋆. /2 width=3/ qed-. -fact ltpr_inv_pair1_aux: ∀L1,L2. L1 ⇒ L2 → ∀K1,I,V1. L1 = K1. 𝕓{I} V1 → - ∃∃K2,V2. K1 ⇒ K2 & V1 ⇒ V2 & L2 = K2. 𝕓{I} V2. +fact ltpr_inv_pair1_aux: ∀L1,L2. L1 ➡ L2 → ∀K1,I,V1. L1 = K1. 𝕓{I} V1 → + ∃∃K2,V2. K1 ➡ K2 & V1 ➡ V2 & L2 = K2. 𝕓{I} V2. #L1 #L2 * -L1 -L2 [ #K1 #I #V1 #H destruct | #K1 #K2 #I #V1 #V2 #HK12 #HV12 #L #J #W #H destruct /2 width=5/ @@ -54,35 +54,35 @@ fact ltpr_inv_pair1_aux: ∀L1,L2. L1 ⇒ L2 → ∀K1,I,V1. L1 = K1. 𝕓{I} V1 qed. (* Basic_1: was: wcpr0_gen_head *) -lemma ltpr_inv_pair1: ∀K1,I,V1,L2. K1. 𝕓{I} V1 ⇒ L2 → - ∃∃K2,V2. K1 ⇒ K2 & V1 ⇒ V2 & L2 = K2. 𝕓{I} V2. +lemma ltpr_inv_pair1: ∀K1,I,V1,L2. K1. 𝕓{I} V1 ➡ L2 → + ∃∃K2,V2. K1 ➡ K2 & V1 ➡ V2 & L2 = K2. 𝕓{I} V2. /2 width=3/ qed-. -fact ltpr_inv_atom2_aux: ∀L1,L2. L1 ⇒ L2 → L2 = ⋆ → L1 = ⋆. +fact ltpr_inv_atom2_aux: ∀L1,L2. L1 ➡ L2 → L2 = ⋆ → L1 = ⋆. #L1 #L2 * -L1 -L2 [ // | #K1 #K2 #I #V1 #V2 #_ #_ #H destruct ] qed. -lemma ltpr_inv_atom2: ∀L1. L1 ⇒ ⋆ → L1 = ⋆. +lemma ltpr_inv_atom2: ∀L1. L1 ➡ ⋆ → L1 = ⋆. /2 width=3/ qed-. -fact ltpr_inv_pair2_aux: ∀L1,L2. L1 ⇒ L2 → ∀K2,I,V2. L2 = K2. 𝕓{I} V2 → - ∃∃K1,V1. K1 ⇒ K2 & V1 ⇒ V2 & L1 = K1. 𝕓{I} V1. +fact ltpr_inv_pair2_aux: ∀L1,L2. L1 ➡ L2 → ∀K2,I,V2. L2 = K2. 𝕓{I} V2 → + ∃∃K1,V1. K1 ➡ K2 & V1 ➡ V2 & L1 = K1. 𝕓{I} V1. #L1 #L2 * -L1 -L2 [ #K2 #I #V2 #H destruct | #K1 #K2 #I #V1 #V2 #HK12 #HV12 #K #J #W #H destruct /2 width=5/ ] qed. -lemma ltpr_inv_pair2: ∀L1,K2,I,V2. L1 ⇒ K2. 𝕓{I} V2 → - ∃∃K1,V1. K1 ⇒ K2 & V1 ⇒ V2 & L1 = K1. 𝕓{I} V1. +lemma ltpr_inv_pair2: ∀L1,K2,I,V2. L1 ➡ K2. 𝕓{I} V2 → + ∃∃K1,V1. K1 ➡ K2 & V1 ➡ V2 & L1 = K1. 𝕓{I} V1. /2 width=3/ qed-. (* Basic forward lemmas *****************************************************) -lemma ltpr_fwd_length: ∀L1,L2. L1 ⇒ L2 → |L1| = |L2|. +lemma ltpr_fwd_length: ∀L1,L2. L1 ➡ L2 → |L1| = |L2|. #L1 #L2 #H elim H -L1 -L2 normalize // qed-. diff --git a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/ltpr_ldrop.ma b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/ltpr_ldrop.ma index 08ac62aaf..9dd48e062 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/ltpr_ldrop.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/ltpr_ldrop.ma @@ -18,8 +18,8 @@ include "Basic_2/reducibility/ltpr.ma". (* CONTEXT-FREE PARALLEL REDUCTION ON LOCAL ENVIRONMENTS ********************) (* Basic_1: was: wcpr0_ldrop *) -lemma ltpr_ldrop_conf: ∀L1,K1,d,e. ⇓[d, e] L1 ≡ K1 → ∀L2. L1 ⇒ L2 → - ∃∃K2. ⇓[d, e] L2 ≡ K2 & K1 ⇒ K2. +lemma ltpr_ldrop_conf: ∀L1,K1,d,e. ⇩[d, e] L1 ≡ K1 → ∀L2. L1 ➡ L2 → + ∃∃K2. ⇩[d, e] L2 ≡ K2 & K1 ➡ K2. #L1 #K1 #d #e #H elim H -L1 -K1 -d -e [ #d #e #X #H >(ltpr_inv_atom1 … H) -H /2 width=3/ | #K1 #I #V1 #X #H @@ -35,8 +35,8 @@ lemma ltpr_ldrop_conf: ∀L1,K1,d,e. ⇓[d, e] L1 ≡ K1 → ∀L2. L1 ⇒ L2 qed. (* Basic_1: was: wcpr0_ldrop_back *) -lemma ltpr_ldrop_trans: ∀L1,K1,d,e. ⇓[d, e] L1 ≡ K1 → ∀K2. K1 ⇒ K2 → - ∃∃L2. ⇓[d, e] L2 ≡ K2 & L1 ⇒ L2. +lemma ltpr_ldrop_trans: ∀L1,K1,d,e. ⇩[d, e] L1 ≡ K1 → ∀K2. K1 ➡ K2 → + ∃∃L2. ⇩[d, e] L2 ≡ K2 & L1 ➡ L2. #L1 #K1 #d #e #H elim H -L1 -K1 -d -e [ #d #e #X #H >(ltpr_inv_atom1 … H) -H /2 width=3/ | #K1 #I #V1 #X #H diff --git a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tnf.ma b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tnf.ma index 1353c7f06..83ca7d0af 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tnf.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tnf.ma @@ -62,7 +62,7 @@ qed-. (* Basic properties *********************************************************) -lemma tpr_tif_eq: ∀T1,T2. T1 ⇒ T2 → 𝕀[T1] → T1 = T2. +lemma tpr_tif_eq: ∀T1,T2. T1 ➡ T2 → 𝕀[T1] → T1 = T2. #T1 #T2 #H elim H -T1 -T2 [ // | * #V1 #V2 #T1 #T2 #_ #_ #IHV1 #IHT1 #H diff --git a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tpr.ma b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tpr.ma index 57a619fa5..12aa95df6 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tpr.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tpr.ma @@ -25,12 +25,12 @@ inductive tpr: relation term ≝ tpr V1 V2 → tpr T1 T2 → tpr (𝕔{Appl} V1. 𝕔{Abst} W. T1) (𝕔{Abbr} V2. T2) | tpr_delta: ∀I,V1,V2,T1,T2,T. - tpr V1 V2 → tpr T1 T2 → ⋆. 𝕓{I} V2 ⊢ T2 [0, 1] ≫ T → + tpr V1 V2 → tpr T1 T2 → ⋆. 𝕓{I} V2 ⊢ T2 [0, 1] ▶ T → tpr (𝕓{I} V1. T1) (𝕓{I} V2. T) | tpr_theta: ∀V,V1,V2,W1,W2,T1,T2. - tpr V1 V2 → ⇑[0,1] V2 ≡ V → tpr W1 W2 → tpr T1 T2 → + tpr V1 V2 → ⇧[0,1] V2 ≡ V → tpr W1 W2 → tpr T1 T2 → tpr (𝕔{Appl} V1. 𝕔{Abbr} W1. T1) (𝕔{Abbr} W2. 𝕔{Appl} V. T2) -| tpr_zeta : ∀V,T,T1,T2. ⇑[0,1] T1 ≡ T → tpr T1 T2 → +| tpr_zeta : ∀V,T,T1,T2. ⇧[0,1] T1 ≡ T → tpr T1 T2 → tpr (𝕔{Abbr} V. T) T2 | tpr_tau : ∀V,T1,T2. tpr T1 T2 → tpr (𝕔{Cast} V. T1) T2 . @@ -41,19 +41,19 @@ interpretation (* Basic properties *********************************************************) -lemma tpr_bind: ∀I,V1,V2,T1,T2. V1 ⇒ V2 → T1 ⇒ T2 → - 𝕓{I} V1. T1 ⇒ 𝕓{I} V2. T2. +lemma tpr_bind: ∀I,V1,V2,T1,T2. V1 ➡ V2 → T1 ➡ T2 → + 𝕓{I} V1. T1 ➡ 𝕓{I} V2. T2. /2 width=3/ qed. (* Basic_1: was by definition: pr0_refl *) -lemma tpr_refl: ∀T. T ⇒ T. +lemma tpr_refl: ∀T. T ➡ T. #T elim T -T // #I elim I -I /2 width=1/ qed. (* Basic inversion lemmas ***************************************************) -fact tpr_inv_atom1_aux: ∀U1,U2. U1 ⇒ U2 → ∀I. U1 = 𝕒{I} → U2 = 𝕒{I}. +fact tpr_inv_atom1_aux: ∀U1,U2. U1 ➡ U2 → ∀I. U1 = 𝕒{I} → U2 = 𝕒{I}. #U1 #U2 * -U1 -U2 [ // | #I #V1 #V2 #T1 #T2 #_ #_ #k #H destruct @@ -66,15 +66,15 @@ fact tpr_inv_atom1_aux: ∀U1,U2. U1 ⇒ U2 → ∀I. U1 = 𝕒{I} → U2 = 𝕒 qed. (* Basic_1: was: pr0_gen_sort pr0_gen_lref *) -lemma tpr_inv_atom1: ∀I,U2. 𝕒{I} ⇒ U2 → U2 = 𝕒{I}. +lemma tpr_inv_atom1: ∀I,U2. 𝕒{I} ➡ U2 → U2 = 𝕒{I}. /2 width=3/ qed-. -fact tpr_inv_bind1_aux: ∀U1,U2. U1 ⇒ U2 → ∀I,V1,T1. U1 = 𝕓{I} V1. T1 → - (∃∃V2,T2,T. V1 ⇒ V2 & T1 ⇒ T2 & - ⋆. 𝕓{I} V2 ⊢ T2 [0, 1] ≫ T & +fact tpr_inv_bind1_aux: ∀U1,U2. U1 ➡ U2 → ∀I,V1,T1. U1 = 𝕓{I} V1. T1 → + (∃∃V2,T2,T. V1 ➡ V2 & T1 ➡ T2 & + ⋆. 𝕓{I} V2 ⊢ T2 [0, 1] ▶ T & U2 = 𝕓{I} V2. T ) ∨ - ∃∃T. ⇑[0,1] T ≡ T1 & T ⇒ U2 & I = Abbr. + ∃∃T. ⇧[0,1] T ≡ T1 & T ➡ U2 & I = Abbr. #U1 #U2 * -U1 -U2 [ #J #I #V #T #H destruct | #I1 #V1 #V2 #T1 #T2 #_ #_ #I #V #T #H destruct @@ -86,37 +86,37 @@ fact tpr_inv_bind1_aux: ∀U1,U2. U1 ⇒ U2 → ∀I,V1,T1. U1 = 𝕓{I} V1. T1 ] qed. -lemma tpr_inv_bind1: ∀V1,T1,U2,I. 𝕓{I} V1. T1 ⇒ U2 → - (∃∃V2,T2,T. V1 ⇒ V2 & T1 ⇒ T2 & - ⋆. 𝕓{I} V2 ⊢ T2 [0, 1] ≫ T & +lemma tpr_inv_bind1: ∀V1,T1,U2,I. 𝕓{I} V1. T1 ➡ U2 → + (∃∃V2,T2,T. V1 ➡ V2 & T1 ➡ T2 & + ⋆. 𝕓{I} V2 ⊢ T2 [0, 1] ▶ T & U2 = 𝕓{I} V2. T ) ∨ - ∃∃T. ⇑[0,1] T ≡ T1 & T ⇒ U2 & I = Abbr. + ∃∃T. ⇧[0,1] T ≡ T1 & T ➡ U2 & I = Abbr. /2 width=3/ qed-. (* Basic_1: was pr0_gen_abbr *) -lemma tpr_inv_abbr1: ∀V1,T1,U2. 𝕓{Abbr} V1. T1 ⇒ U2 → - (∃∃V2,T2,T. V1 ⇒ V2 & T1 ⇒ T2 & - ⋆. 𝕓{Abbr} V2 ⊢ T2 [0, 1] ≫ T & +lemma tpr_inv_abbr1: ∀V1,T1,U2. 𝕓{Abbr} V1. T1 ➡ U2 → + (∃∃V2,T2,T. V1 ➡ V2 & T1 ➡ T2 & + ⋆. 𝕓{Abbr} V2 ⊢ T2 [0, 1] ▶ T & U2 = 𝕓{Abbr} V2. T ) ∨ - ∃∃T. ⇑[0,1] T ≡ T1 & T ⇒ U2. + ∃∃T. ⇧[0,1] T ≡ T1 & T ➡ U2. #V1 #T1 #U2 #H elim (tpr_inv_bind1 … H) -H * /3 width=7/ qed-. -fact tpr_inv_flat1_aux: ∀U1,U2. U1 ⇒ U2 → ∀I,V1,U0. U1 = 𝕗{I} V1. U0 → - ∨∨ ∃∃V2,T2. V1 ⇒ V2 & U0 ⇒ T2 & +fact tpr_inv_flat1_aux: ∀U1,U2. U1 ➡ U2 → ∀I,V1,U0. U1 = 𝕗{I} V1. U0 → + ∨∨ ∃∃V2,T2. V1 ➡ V2 & U0 ➡ T2 & U2 = 𝕗{I} V2. T2 - | ∃∃V2,W,T1,T2. V1 ⇒ V2 & T1 ⇒ T2 & + | ∃∃V2,W,T1,T2. V1 ➡ V2 & T1 ➡ T2 & U0 = 𝕔{Abst} W. T1 & U2 = 𝕔{Abbr} V2. T2 & I = Appl - | ∃∃V2,V,W1,W2,T1,T2. V1 ⇒ V2 & W1 ⇒ W2 & T1 ⇒ T2 & - ⇑[0,1] V2 ≡ V & + | ∃∃V2,V,W1,W2,T1,T2. V1 ➡ V2 & W1 ➡ W2 & T1 ➡ T2 & + ⇧[0,1] V2 ≡ V & U0 = 𝕔{Abbr} W1. T1 & U2 = 𝕔{Abbr} W2. 𝕔{Appl} V. T2 & I = Appl - | (U0 ⇒ U2 ∧ I = Cast). + | (U0 ➡ U2 ∧ I = Cast). #U1 #U2 * -U1 -U2 [ #I #J #V #T #H destruct | #I #V1 #V2 #T1 #T2 #HV12 #HT12 #J #V #T #H destruct /3 width=5/ @@ -128,29 +128,29 @@ fact tpr_inv_flat1_aux: ∀U1,U2. U1 ⇒ U2 → ∀I,V1,U0. U1 = 𝕗{I} V1. U0 ] qed. -lemma tpr_inv_flat1: ∀V1,U0,U2,I. 𝕗{I} V1. U0 ⇒ U2 → - ∨∨ ∃∃V2,T2. V1 ⇒ V2 & U0 ⇒ T2 & +lemma tpr_inv_flat1: ∀V1,U0,U2,I. 𝕗{I} V1. U0 ➡ U2 → + ∨∨ ∃∃V2,T2. V1 ➡ V2 & U0 ➡ T2 & U2 = 𝕗{I} V2. T2 - | ∃∃V2,W,T1,T2. V1 ⇒ V2 & T1 ⇒ T2 & + | ∃∃V2,W,T1,T2. V1 ➡ V2 & T1 ➡ T2 & U0 = 𝕔{Abst} W. T1 & U2 = 𝕔{Abbr} V2. T2 & I = Appl - | ∃∃V2,V,W1,W2,T1,T2. V1 ⇒ V2 & W1 ⇒ W2 & T1 ⇒ T2 & - ⇑[0,1] V2 ≡ V & + | ∃∃V2,V,W1,W2,T1,T2. V1 ➡ V2 & W1 ➡ W2 & T1 ➡ T2 & + ⇧[0,1] V2 ≡ V & U0 = 𝕔{Abbr} W1. T1 & U2 = 𝕔{Abbr} W2. 𝕔{Appl} V. T2 & I = Appl - | (U0 ⇒ U2 ∧ I = Cast). + | (U0 ➡ U2 ∧ I = Cast). /2 width=3/ qed-. (* Basic_1: was pr0_gen_appl *) -lemma tpr_inv_appl1: ∀V1,U0,U2. 𝕔{Appl} V1. U0 ⇒ U2 → - ∨∨ ∃∃V2,T2. V1 ⇒ V2 & U0 ⇒ T2 & +lemma tpr_inv_appl1: ∀V1,U0,U2. 𝕔{Appl} V1. U0 ➡ U2 → + ∨∨ ∃∃V2,T2. V1 ➡ V2 & U0 ➡ T2 & U2 = 𝕔{Appl} V2. T2 - | ∃∃V2,W,T1,T2. V1 ⇒ V2 & T1 ⇒ T2 & + | ∃∃V2,W,T1,T2. V1 ➡ V2 & T1 ➡ T2 & U0 = 𝕔{Abst} W. T1 & U2 = 𝕔{Abbr} V2. T2 - | ∃∃V2,V,W1,W2,T1,T2. V1 ⇒ V2 & W1 ⇒ W2 & T1 ⇒ T2 & - ⇑[0,1] V2 ≡ V & + | ∃∃V2,V,W1,W2,T1,T2. V1 ➡ V2 & W1 ➡ W2 & T1 ➡ T2 & + ⇧[0,1] V2 ≡ V & U0 = 𝕔{Abbr} W1. T1 & U2 = 𝕔{Abbr} W2. 𝕔{Appl} V. T2. #V1 #U0 #U2 #H @@ -158,8 +158,8 @@ elim (tpr_inv_flat1 … H) -H * /3 width=12/ #_ #H destruct qed-. (* Note: the main property of simple terms *) -lemma tpr_inv_appl1_simple: ∀V1,T1,U. 𝕔{Appl} V1. T1 ⇒ U → 𝕊[T1] → - ∃∃V2,T2. V1 ⇒ V2 & T1 ⇒ T2 & +lemma tpr_inv_appl1_simple: ∀V1,T1,U. 𝕔{Appl} V1. T1 ➡ U → 𝕊[T1] → + ∃∃V2,T2. V1 ➡ V2 & T1 ➡ T2 & U = 𝕔{Appl} V2. T2. #V1 #T1 #U #H #HT1 elim (tpr_inv_appl1 … H) -H * @@ -172,9 +172,9 @@ elim (tpr_inv_appl1 … H) -H * qed-. (* Basic_1: was: pr0_gen_cast *) -lemma tpr_inv_cast1: ∀V1,T1,U2. 𝕔{Cast} V1. T1 ⇒ U2 → - (∃∃V2,T2. V1 ⇒ V2 & T1 ⇒ T2 & U2 = 𝕔{Cast} V2. T2) - ∨ T1 ⇒ U2. +lemma tpr_inv_cast1: ∀V1,T1,U2. 𝕔{Cast} V1. T1 ➡ U2 → + (∃∃V2,T2. V1 ➡ V2 & T1 ➡ T2 & U2 = 𝕔{Cast} V2. T2) + ∨ T1 ➡ U2. #V1 #T1 #U2 #H elim (tpr_inv_flat1 … H) -H * /3 width=5/ [ #V2 #W #W1 #W2 #_ #_ #_ #_ #H destruct @@ -182,11 +182,11 @@ elim (tpr_inv_flat1 … H) -H * /3 width=5/ ] qed-. -fact tpr_inv_lref2_aux: ∀T1,T2. T1 ⇒ T2 → ∀i. T2 = #i → +fact tpr_inv_lref2_aux: ∀T1,T2. T1 ➡ T2 → ∀i. T2 = #i → ∨∨ T1 = #i - | ∃∃V,T,T0. ⇑[O,1] T0 ≡ T & T0 ⇒ #i & + | ∃∃V,T,T0. ⇧[O,1] T0 ≡ T & T0 ➡ #i & T1 = 𝕔{Abbr} V. T - | ∃∃V,T. T ⇒ #i & T1 = 𝕔{Cast} V. T. + | ∃∃V,T. T ➡ #i & T1 = 𝕔{Cast} V. T. #T1 #T2 * -T1 -T2 [ #I #i #H destruct /2 width=1/ | #I #V1 #V2 #T1 #T2 #_ #_ #i #H destruct @@ -198,11 +198,11 @@ fact tpr_inv_lref2_aux: ∀T1,T2. T1 ⇒ T2 → ∀i. T2 = #i → ] qed. -lemma tpr_inv_lref2: ∀T1,i. T1 ⇒ #i → +lemma tpr_inv_lref2: ∀T1,i. T1 ➡ #i → ∨∨ T1 = #i - | ∃∃V,T,T0. ⇑[O,1] T0 ≡ T & T0 ⇒ #i & + | ∃∃V,T,T0. ⇧[O,1] T0 ≡ T & T0 ➡ #i & T1 = 𝕔{Abbr} V. T - | ∃∃V,T. T ⇒ #i & T1 = 𝕔{Cast} V. T. + | ∃∃V,T. T ➡ #i & T1 = 𝕔{Cast} V. T. /2 width=3/ qed-. (* Basic_1: removed theorems 3: diff --git a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tpr_lift.ma b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tpr_lift.ma index 32a80aafc..91da5fabe 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tpr_lift.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tpr_lift.ma @@ -20,8 +20,8 @@ include "Basic_2/reducibility/tpr.ma". (* Relocation properties ****************************************************) (* Basic_1: was: pr0_lift *) -lemma tpr_lift: ∀T1,T2. T1 ⇒ T2 → - ∀d,e,U1. ⇑[d, e] T1 ≡ U1 → ∀U2. ⇑[d, e] T2 ≡ U2 → U1 ⇒ U2. +lemma tpr_lift: ∀T1,T2. T1 ➡ T2 → + ∀d,e,U1. ⇧[d, e] T1 ≡ U1 → ∀U2. ⇧[d, e] T2 ≡ U2 → U1 ➡ U2. #T1 #T2 #H elim H -T1 -T2 [ * #i #d #e #U1 #HU1 #U2 #HU2 lapply (lift_mono … HU1 … HU2) -HU1 #H destruct @@ -57,9 +57,9 @@ lemma tpr_lift: ∀T1,T2. T1 ⇒ T2 → qed. (* Basic_1: was: pr0_gen_lift *) -lemma tpr_inv_lift: ∀T1,T2. T1 ⇒ T2 → - ∀d,e,U1. ⇑[d, e] U1 ≡ T1 → - ∃∃U2. ⇑[d, e] U2 ≡ T2 & U1 ⇒ U2. +lemma tpr_inv_lift: ∀T1,T2. T1 ➡ T2 → + ∀d,e,U1. ⇧[d, e] U1 ≡ T1 → + ∃∃U2. ⇧[d, e] U2 ≡ T2 & U1 ➡ U2. #T1 #T2 #H elim H -T1 -T2 [ * #i #d #e #U1 #HU1 [ lapply (lift_inv_sort2 … HU1) -HU1 #H destruct /2 width=3/ @@ -101,8 +101,8 @@ qed. (* Advanced inversion lemmas ************************************************) -fact tpr_inv_abst1_aux: ∀U1,U2. U1 ⇒ U2 → ∀V1,T1. U1 = 𝕔{Abst} V1. T1 → - ∃∃V2,T2. V1 ⇒ V2 & T1 ⇒ T2 & U2 = 𝕔{Abst} V2. T2. +fact tpr_inv_abst1_aux: ∀U1,U2. U1 ➡ U2 → ∀V1,T1. U1 = 𝕔{Abst} V1. T1 → + ∃∃V2,T2. V1 ➡ V2 & T1 ➡ T2 & U2 = 𝕔{Abst} V2. T2. #U1 #U2 * -U1 -U2 [ #I #V #T #H destruct | #I #V1 #V2 #T1 #T2 #_ #_ #V #T #H destruct @@ -116,6 +116,6 @@ fact tpr_inv_abst1_aux: ∀U1,U2. U1 ⇒ U2 → ∀V1,T1. U1 = 𝕔{Abst} V1. T1 qed. (* Basic_1: was pr0_gen_abst *) -lemma tpr_inv_abst1: ∀V1,T1,U2. 𝕔{Abst} V1. T1 ⇒ U2 → - ∃∃V2,T2. V1 ⇒ V2 & T1 ⇒ T2 & U2 = 𝕔{Abst} V2. T2. +lemma tpr_inv_abst1: ∀V1,T1,U2. 𝕔{Abst} V1. T1 ➡ U2 → + ∃∃V2,T2. V1 ➡ V2 & T1 ➡ T2 & U2 = 𝕔{Abst} V2. T2. /2 width=3/ qed-. diff --git a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tpr_tpr.ma b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tpr_tpr.ma index e541b5777..d0243cfb7 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tpr_tpr.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tpr_tpr.ma @@ -18,17 +18,17 @@ include "Basic_2/reducibility/tpr_tpss.ma". (* Confluence lemmas ********************************************************) -fact tpr_conf_atom_atom: ∀I. ∃∃X. 𝕒{I} ⇒ X & 𝕒{I} ⇒ X. +fact tpr_conf_atom_atom: ∀I. ∃∃X. 𝕒{I} ➡ X & 𝕒{I} ➡ X. /2 width=3/ qed. fact tpr_conf_flat_flat: ∀I,V0,V1,T0,T1,V2,T2. ( ∀X0:term. #[X0] < #[V0] + #[T0] + 1 → - ∀X1,X2. X0 ⇒ X1 → X0 ⇒ X2 → - ∃∃X. X1 ⇒ X & X2 ⇒ X + ∀X1,X2. X0 ➡ X1 → X0 ➡ X2 → + ∃∃X. X1 ➡ X & X2 ➡ X ) → - V0 ⇒ V1 → V0 ⇒ V2 → T0 ⇒ T1 → T0 ⇒ T2 → - ∃∃T0. 𝕗{I} V1. T1 ⇒ T0 & 𝕗{I} V2. T2 ⇒ T0. + V0 ➡ V1 → V0 ➡ V2 → T0 ➡ T1 → T0 ➡ T2 → + ∃∃T0. 𝕗{I} V1. T1 ➡ T0 & 𝕗{I} V2. T2 ➡ T0. #I #V0 #V1 #T0 #T1 #V2 #T2 #IH #HV01 #HV02 #HT01 #HT02 elim (IH … HV01 … HV02) -HV01 -HV02 // #V #HV1 #HV2 elim (IH … HT01 … HT02) -HT01 -HT02 -IH // /3 width=5/ @@ -37,12 +37,12 @@ qed. fact tpr_conf_flat_beta: ∀V0,V1,T1,V2,W0,U0,T2. ( ∀X0:term. #[X0] < #[V0] + (#[W0] + #[U0] + 1) + 1 → - ∀X1,X2. X0 ⇒ X1 → X0 ⇒ X2 → - ∃∃X. X1 ⇒ X & X2 ⇒ X + ∀X1,X2. X0 ➡ X1 → X0 ➡ X2 → + ∃∃X. X1 ➡ X & X2 ➡ X ) → - V0 ⇒ V1 → V0 ⇒ V2 → - U0 ⇒ T2 → 𝕔{Abst} W0. U0 ⇒ T1 → - ∃∃X. 𝕔{Appl} V1. T1 ⇒ X & 𝕔{Abbr} V2. T2 ⇒ X. + V0 ➡ V1 → V0 ➡ V2 → + U0 ➡ T2 → 𝕔{Abst} W0. U0 ➡ T1 → + ∃∃X. 𝕔{Appl} V1. T1 ➡ X & 𝕔{Abbr} V2. T2 ➡ X. #V0 #V1 #T1 #V2 #W0 #U0 #T2 #IH #HV01 #HV02 #HT02 #H elim (tpr_inv_abst1 … H) -H #W1 #U1 #HW01 #HU01 #H destruct elim (IH … HV01 … HV02) -HV01 -HV02 /2 width=1/ #V #HV1 #HV2 @@ -56,12 +56,12 @@ qed. fact tpr_conf_flat_theta: ∀V0,V1,T1,V2,V,W0,W2,U0,U2. ( ∀X0:term. #[X0] < #[V0] + (#[W0] + #[U0] + 1) + 1 → - ∀X1,X2. X0 ⇒ X1 → X0 ⇒ X2 → - ∃∃X. X1 ⇒ X & X2 ⇒ X + ∀X1,X2. X0 ➡ X1 → X0 ➡ X2 → + ∃∃X. X1 ➡ X & X2 ➡ X ) → - V0 ⇒ V1 → V0 ⇒ V2 → ⇑[O,1] V2 ≡ V → - W0 ⇒ W2 → U0 ⇒ U2 → 𝕔{Abbr} W0. U0 ⇒ T1 → - ∃∃X. 𝕔{Appl} V1. T1 ⇒ X & 𝕔{Abbr} W2. 𝕔{Appl} V. U2 ⇒ X. + V0 ➡ V1 → V0 ➡ V2 → ⇧[O,1] V2 ≡ V → + W0 ➡ W2 → U0 ➡ U2 → 𝕔{Abbr} W0. U0 ➡ T1 → + ∃∃X. 𝕔{Appl} V1. T1 ➡ X & 𝕔{Abbr} W2. 𝕔{Appl} V. U2 ➡ X. #V0 #V1 #T1 #V2 #V #W0 #W2 #U0 #U2 #IH #HV01 #HV02 #HV2 #HW02 #HU02 #H elim (IH … HV01 … HV02) -HV01 -HV02 /2 width=1/ #VV #HVV1 #HVV2 elim (lift_total VV 0 1) #VVV #HVV @@ -93,11 +93,11 @@ qed. fact tpr_conf_flat_cast: ∀X2,V0,V1,T0,T1. ( ∀X0:term. #[X0] < #[V0] + #[T0] + 1 → - ∀X1,X2. X0 ⇒ X1 → X0 ⇒ X2 → - ∃∃X. X1 ⇒ X & X2 ⇒ X + ∀X1,X2. X0 ➡ X1 → X0 ➡ X2 → + ∃∃X. X1 ➡ X & X2 ➡ X ) → - V0 ⇒ V1 → T0 ⇒ T1 → T0 ⇒ X2 → - ∃∃X. 𝕔{Cast} V1. T1 ⇒ X & X2 ⇒ X. + V0 ➡ V1 → T0 ➡ T1 → T0 ➡ X2 → + ∃∃X. 𝕔{Cast} V1. T1 ➡ X & X2 ➡ X. #X2 #V0 #V1 #T0 #T1 #IH #_ #HT01 #HT02 elim (IH … HT01 … HT02) -HT01 -HT02 -IH // /3 width=3/ qed. @@ -105,11 +105,11 @@ qed. fact tpr_conf_beta_beta: ∀W0:term. ∀V0,V1,T0,T1,V2,T2. ( ∀X0:term. #[X0] < #[V0] + (#[W0] + #[T0] + 1) + 1 → - ∀X1,X2. X0 ⇒ X1 → X0 ⇒ X2 → - ∃∃X. X1 ⇒ X & X2 ⇒ X + ∀X1,X2. X0 ➡ X1 → X0 ➡ X2 → + ∃∃X. X1 ➡ X & X2 ➡ X ) → - V0 ⇒ V1 → V0 ⇒ V2 → T0 ⇒ T1 → T0 ⇒ T2 → - ∃∃X. 𝕔{Abbr} V1. T1 ⇒X & 𝕔{Abbr} V2. T2 ⇒ X. + V0 ➡ V1 → V0 ➡ V2 → T0 ➡ T1 → T0 ➡ T2 → + ∃∃X. 𝕔{Abbr} V1. T1 ➡X & 𝕔{Abbr} V2. T2 ➡ X. #W0 #V0 #V1 #T0 #T1 #V2 #T2 #IH #HV01 #HV02 #HT01 #HT02 elim (IH … HV01 … HV02) -HV01 -HV02 /2 width=1/ elim (IH … HT01 … HT02) -HT01 -HT02 -IH /2 width=1/ /3 width=5/ @@ -119,13 +119,13 @@ qed. fact tpr_conf_delta_delta: ∀I1,V0,V1,T0,T1,TT1,V2,T2,TT2. ( ∀X0:term. #[X0] < #[V0] + #[T0] + 1 → - ∀X1,X2. X0 ⇒ X1 → X0 ⇒ X2 → - ∃∃X. X1 ⇒ X & X2 ⇒ X + ∀X1,X2. X0 ➡ X1 → X0 ➡ X2 → + ∃∃X. X1 ➡ X & X2 ➡ X ) → - V0 ⇒ V1 → V0 ⇒ V2 → T0 ⇒ T1 → T0 ⇒ T2 → - ⋆. 𝕓{I1} V1 ⊢ T1 [O, 1] ≫ TT1 → - ⋆. 𝕓{I1} V2 ⊢ T2 [O, 1] ≫ TT2 → - ∃∃X. 𝕓{I1} V1. TT1 ⇒ X & 𝕓{I1} V2. TT2 ⇒ X. + V0 ➡ V1 → V0 ➡ V2 → T0 ➡ T1 → T0 ➡ T2 → + ⋆. 𝕓{I1} V1 ⊢ T1 [O, 1] ▶ TT1 → + ⋆. 𝕓{I1} V2 ⊢ T2 [O, 1] ▶ TT2 → + ∃∃X. 𝕓{I1} V1. TT1 ➡ X & 𝕓{I1} V2. TT2 ➡ X. #I1 #V0 #V1 #T0 #T1 #TT1 #V2 #T2 #TT2 #IH #HV01 #HV02 #HT01 #HT02 #HTT1 #HTT2 elim (IH … HV01 … HV02) -HV01 -HV02 // #V #HV1 #HV2 elim (IH … HT01 … HT02) -HT01 -HT02 -IH // #T #HT1 #HT2 @@ -138,12 +138,12 @@ qed. fact tpr_conf_delta_zeta: ∀X2,V0,V1,T0,T1,TT1,T2. ( ∀X0:term. #[X0] < #[V0] + #[T0] + 1 → - ∀X1,X2. X0 ⇒ X1 → X0 ⇒ X2 → - ∃∃X. X1 ⇒ X & X2 ⇒ X + ∀X1,X2. X0 ➡ X1 → X0 ➡ X2 → + ∃∃X. X1 ➡ X & X2 ➡ X ) → - V0 ⇒ V1 → T0 ⇒ T1 → ⋆. 𝕓{Abbr} V1 ⊢ T1 [O,1] ≫ TT1 → - T2 ⇒ X2 → ⇑[O, 1] T2 ≡ T0 → - ∃∃X. 𝕓{Abbr} V1. TT1 ⇒ X & X2 ⇒ X. + V0 ➡ V1 → T0 ➡ T1 → ⋆. 𝕓{Abbr} V1 ⊢ T1 [O,1] ▶ TT1 → + T2 ➡ X2 → ⇧[O, 1] T2 ≡ T0 → + ∃∃X. 𝕓{Abbr} V1. TT1 ➡ X & X2 ➡ X. #X2 #V0 #V1 #T0 #T1 #TT1 #T2 #IH #_ #HT01 #HTT1 #HTX2 #HTT20 elim (tpr_inv_lift … HT01 … HTT20) -HT01 #TT2 #HTT21 #HTT2 lapply (tps_inv_lift1_eq … HTT1 … HTT21) -HTT1 #HTT1 destruct @@ -155,12 +155,12 @@ qed. fact tpr_conf_theta_theta: ∀VV1,V0,V1,W0,W1,T0,T1,V2,VV2,W2,T2. ( ∀X0:term. #[X0] < #[V0] + (#[W0] + #[T0] + 1) + 1 → - ∀X1,X2. X0 ⇒ X1 → X0 ⇒ X2 → - ∃∃X. X1 ⇒ X & X2 ⇒ X + ∀X1,X2. X0 ➡ X1 → X0 ➡ X2 → + ∃∃X. X1 ➡ X & X2 ➡ X ) → - V0 ⇒ V1 → V0 ⇒ V2 → W0 ⇒ W1 → W0 ⇒ W2 → T0 ⇒ T1 → T0 ⇒ T2 → - ⇑[O, 1] V1 ≡ VV1 → ⇑[O, 1] V2 ≡ VV2 → - ∃∃X. 𝕔{Abbr} W1. 𝕔{Appl} VV1. T1 ⇒ X & 𝕔{Abbr} W2. 𝕔{Appl} VV2. T2 ⇒ X. + V0 ➡ V1 → V0 ➡ V2 → W0 ➡ W1 → W0 ➡ W2 → T0 ➡ T1 → T0 ➡ T2 → + ⇧[O, 1] V1 ≡ VV1 → ⇧[O, 1] V2 ≡ VV2 → + ∃∃X. 𝕔{Abbr} W1. 𝕔{Appl} VV1. T1 ➡ X & 𝕔{Abbr} W2. 𝕔{Appl} VV2. T2 ➡ X. #VV1 #V0 #V1 #W0 #W1 #T0 #T1 #V2 #VV2 #W2 #T2 #IH #HV01 #HV02 #HW01 #HW02 #HT01 #HT02 #HVV1 #HVV2 elim (IH … HV01 … HV02) -HV01 -HV02 /2 width=1/ #V #HV1 #HV2 elim (IH … HW01 … HW02) -HW01 -HW02 /2 width=1/ #W #HW1 #HW2 @@ -174,12 +174,12 @@ qed. fact tpr_conf_zeta_zeta: ∀V0:term. ∀X2,TT0,T0,T1,T2. ( ∀X0:term. #[X0] < #[V0] + #[TT0] + 1 → - ∀X1,X2. X0 ⇒ X1 → X0 ⇒ X2 → - ∃∃X. X1 ⇒ X & X2 ⇒ X + ∀X1,X2. X0 ➡ X1 → X0 ➡ X2 → + ∃∃X. X1 ➡ X & X2 ➡ X ) → - T0 ⇒ T1 → T2 ⇒ X2 → - ⇑[O, 1] T0 ≡ TT0 → ⇑[O, 1] T2 ≡ TT0 → - ∃∃X. T1 ⇒ X & X2 ⇒ X. + T0 ➡ T1 → T2 ➡ X2 → + ⇧[O, 1] T0 ≡ TT0 → ⇧[O, 1] T2 ≡ TT0 → + ∃∃X. T1 ➡ X & X2 ➡ X. #V0 #X2 #TT0 #T0 #T1 #T2 #IH #HT01 #HTX2 #HTT0 #HTT20 lapply (lift_inj … HTT0 … HTT20) -HTT0 #H destruct lapply (tw_lift … HTT20) -HTT20 #HTT20 @@ -189,11 +189,11 @@ qed. fact tpr_conf_tau_tau: ∀V0,T0:term. ∀X2,T1. ( ∀X0:term. #[X0] < #[V0] + #[T0] + 1 → - ∀X1,X2. X0 ⇒ X1 → X0 ⇒ X2 → - ∃∃X. X1 ⇒ X & X2 ⇒ X + ∀X1,X2. X0 ➡ X1 → X0 ➡ X2 → + ∃∃X. X1 ➡ X & X2 ➡ X ) → - T0 ⇒ T1 → T0 ⇒ X2 → - ∃∃X. T1 ⇒ X & X2 ⇒ X. + T0 ➡ T1 → T0 ➡ X2 → + ∃∃X. T1 ➡ X & X2 ➡ X. #V0 #T0 #X2 #T1 #IH #HT01 #HT02 elim (IH … HT01 … HT02) -HT01 -HT02 -IH // /2 width=3/ qed. @@ -203,11 +203,11 @@ qed. fact tpr_conf_aux: ∀Y0:term. ( ∀X0:term. #[X0] < #[Y0] → - ∀X1,X2. X0 ⇒ X1 → X0 ⇒ X2 → - ∃∃X. X1 ⇒ X & X2 ⇒ X + ∀X1,X2. X0 ➡ X1 → X0 ➡ X2 → + ∃∃X. X1 ➡ X & X2 ➡ X ) → - ∀X0,X1,X2. X0 ⇒ X1 → X0 ⇒ X2 → X0 = Y0 → - ∃∃X. X1 ⇒ X & X2 ⇒ X. + ∀X0,X1,X2. X0 ➡ X1 → X0 ➡ X2 → X0 = Y0 → + ∃∃X. X1 ➡ X & X2 ➡ X. #Y0 #IH #X0 #X1 #X2 * -X0 -X1 [ #I1 #H1 #H2 destruct lapply (tpr_inv_atom1 … H1) -H1 @@ -281,7 +281,7 @@ fact tpr_conf_aux: qed. (* Basic_1: was: pr0_confluence *) -theorem tpr_conf: ∀T0:term. ∀T1,T2. T0 ⇒ T1 → T0 ⇒ T2 → - ∃∃T. T1 ⇒ T & T2 ⇒ T. +theorem tpr_conf: ∀T0:term. ∀T1,T2. T0 ➡ T1 → T0 ➡ T2 → + ∃∃T. T1 ➡ T & T2 ➡ T. #T @(tw_wf_ind … T) -T /3 width=6 by tpr_conf_aux/ qed. diff --git a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tpr_tpss.ma b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tpr_tpss.ma index e043031bd..7fd1011c0 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tpr_tpss.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/tpr_tpss.ma @@ -20,10 +20,10 @@ include "Basic_2/reducibility/ltpr_ldrop.ma". (* Unfold properties ********************************************************) (* Basic_1: was: pr0_subst1 *) -lemma tpr_tps_ltpr: ∀T1,T2. T1 ⇒ T2 → - ∀L1,d,e,U1. L1 ⊢ T1 [d, e] ≫ U1 → - ∀L2. L1 ⇒ L2 → - ∃∃U2. U1 ⇒ U2 & L2 ⊢ T2 [d, e] ≫* U2. +lemma tpr_tps_ltpr: ∀T1,T2. T1 ➡ T2 → + ∀L1,d,e,U1. L1 ⊢ T1 [d, e] ▶ U1 → + ∀L2. L1 ➡ L2 → + ∃∃U2. U1 ➡ U2 & L2 ⊢ T2 [d, e] ▶* U2. #T1 #T2 #H elim H -T1 -T2 [ #I #L1 #d #e #X #H elim (tps_inv_atom1 … H) -H @@ -75,16 +75,16 @@ lemma tpr_tps_ltpr: ∀T1,T2. T1 ⇒ T2 → ] qed. -lemma tpr_tps_bind: ∀I,V1,V2,T1,T2,U1. V1 ⇒ V2 → T1 ⇒ T2 → - ⋆. 𝕓{I} V1 ⊢ T1 [0, 1] ≫ U1 → - ∃∃U2. U1 ⇒ U2 & ⋆. 𝕓{I} V2 ⊢ T2 [0, 1] ≫ U2. +lemma tpr_tps_bind: ∀I,V1,V2,T1,T2,U1. V1 ➡ V2 → T1 ➡ T2 → + ⋆. 𝕓{I} V1 ⊢ T1 [0, 1] ▶ U1 → + ∃∃U2. U1 ➡ U2 & ⋆. 𝕓{I} V2 ⊢ T2 [0, 1] ▶ U2. #I #V1 #V2 #T1 #T2 #U1 #HV12 #HT12 #HTU1 elim (tpr_tps_ltpr … HT12 … HTU1 (⋆. 𝕓{I} V2) ?) -T1 /2 width=1/ /3 width=3/ qed. -lemma tpr_tpss_ltpr: ∀L1,L2. L1 ⇒ L2 → ∀T1,T2. T1 ⇒ T2 → - ∀d,e,U1. L1 ⊢ T1 [d, e] ≫* U1 → - ∃∃U2. U1 ⇒ U2 & L2 ⊢ T2 [d, e] ≫* U2. +lemma tpr_tpss_ltpr: ∀L1,L2. L1 ➡ L2 → ∀T1,T2. T1 ➡ T2 → + ∀d,e,U1. L1 ⊢ T1 [d, e] ▶* U1 → + ∃∃U2. U1 ➡ U2 & L2 ⊢ T2 [d, e] ▶* U2. #L1 #L2 #HL12 #T1 #T2 #HT12 #d #e #U1 #HTU1 @(tpss_ind … HTU1) -U1 [ /2 width=3/ | -HT12 #U #U1 #_ #HU1 * #T #HUT #HT2 diff --git a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/twhnf.ma b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/twhnf.ma index fe6b66447..1ee06ad02 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/reducibility/twhnf.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/reducibility/twhnf.ma @@ -31,7 +31,7 @@ qed-. (* Basic properties *********************************************************) -lemma tpr_thom: ∀T1,T2. T1 ⇒ T2 → T1 ≈ T1 → T1 ≈ T2. +lemma tpr_thom: ∀T1,T2. T1 ➡ T2 → T1 ≈ T1 → T1 ≈ T2. #T1 #T2 #H elim H -T1 -T2 // [ #I #V1 #V2 #T1 #T2 #_ #_ #_ #IHT12 #H elim (thom_inv_flat1 … H) -H #W2 #U2 #HT1U2 #HT1 #_ #H1 #H2 destruct diff --git a/matita/matita/contribs/lambda_delta/Basic_2/static/aaa.ma b/matita/matita/contribs/lambda_delta/Basic_2/static/aaa.ma index 526688e5c..ea3e2d1c7 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/static/aaa.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/static/aaa.ma @@ -19,7 +19,7 @@ include "Basic_2/substitution/ldrop.ma". inductive aaa: lenv → term → predicate aarity ≝ | aaa_sort: ∀L,k. aaa L (⋆k) 𝕒 -| aaa_lref: ∀I,L,K,V,B,i. ⇓[0, i] L ≡ K. 𝕓{I} V → aaa K V B → aaa L (#i) B +| aaa_lref: ∀I,L,K,V,B,i. ⇩[0, i] L ≡ K. 𝕓{I} V → aaa K V B → aaa L (#i) B | aaa_abbr: ∀L,V,T,B,A. aaa L V B → aaa (L. 𝕓{Abbr} V) T A → aaa L (𝕔{Abbr} V. T) A | aaa_abst: ∀L,V,T,B,A. diff --git a/matita/matita/contribs/lambda_delta/Basic_2/substitution/gdrop.ma b/matita/matita/contribs/lambda_delta/Basic_2/substitution/gdrop.ma index 2f677cb2f..869b47757 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/substitution/gdrop.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/substitution/gdrop.ma @@ -23,11 +23,11 @@ inductive gdrop (e:nat): relation genv ≝ . interpretation "global slicing" - 'RLDrop e G1 G2 = (gdrop e G1 G2). + 'RDrop e G1 G2 = (gdrop e G1 G2). (* basic inversion lemmas ***************************************************) -lemma gdrop_inv_gt: ∀G1,G2,e. ⇓[e] G1 ≡ G2 → |G1| ≤ e → G2 = ⋆. +lemma gdrop_inv_gt: ∀G1,G2,e. ⇩[e] G1 ≡ G2 → |G1| ≤ e → G2 = ⋆. #G1 #G2 #e * -G1 -G2 // [ #G #H >H -H >commutative_plus #H lapply (le_plus_to_le_r … 0 H) -H #H @@ -39,7 +39,7 @@ lemma gdrop_inv_gt: ∀G1,G2,e. ⇓[e] G1 ≡ G2 → |G1| ≤ e → G2 = ⋆. ] qed-. -lemma gdrop_inv_eq: ∀G1,G2,e. ⇓[e] G1 ≡ G2 → |G1| = e + 1 → G1 = G2. +lemma gdrop_inv_eq: ∀G1,G2,e. ⇩[e] G1 ≡ G2 → |G1| = e + 1 → G1 = G2. #G1 #G2 #e * -G1 -G2 // [ #G #H1 #H2 >H2 in H1; -H2 >commutative_plus #H lapply (le_plus_to_le_r … 0 H) -H #H @@ -50,8 +50,8 @@ lemma gdrop_inv_eq: ∀G1,G2,e. ⇓[e] G1 ≡ G2 → |G1| = e + 1 → G1 = G2. ] qed-. -fact gdrop_inv_lt_aux: ∀I,G,G1,G2,V,e. ⇓[e] G ≡ G2 → G = G1. 𝕓{I} V → - e < |G1| → ⇓[e] G1 ≡ G2. +fact gdrop_inv_lt_aux: ∀I,G,G1,G2,V,e. ⇩[e] G ≡ G2 → G = G1. 𝕓{I} V → + e < |G1| → ⇩[e] G1 ≡ G2. #I #G #G1 #G2 #V #e * -G -G2 [ #G #H1 #H destruct #H2 lapply (le_to_lt_to_lt … H1 H2) -H1 -H2 normalize in ⊢ (? % ? → ?); >commutative_plus #H @@ -64,12 +64,12 @@ fact gdrop_inv_lt_aux: ∀I,G,G1,G2,V,e. ⇓[e] G ≡ G2 → G = G1. 𝕓{I} V qed. lemma gdrop_inv_lt: ∀I,G1,G2,V,e. - ⇓[e] G1. 𝕓{I} V ≡ G2 → e < |G1| → ⇓[e] G1 ≡ G2. + ⇩[e] G1. 𝕓{I} V ≡ G2 → e < |G1| → ⇩[e] G1 ≡ G2. /2 width=5/ qed-. (* Basic properties *********************************************************) -lemma gdrop_total: ∀e,G1. ∃G2. ⇓[e] G1 ≡ G2. +lemma gdrop_total: ∀e,G1. ∃G2. ⇩[e] G1 ≡ G2. #e #G1 elim G1 -G1 /3 width=2/ #I #V #G1 * #G2 #HG12 elim (lt_or_eq_or_gt e (|G1|)) #He diff --git a/matita/matita/contribs/lambda_delta/Basic_2/substitution/gdrop_gdrop.ma b/matita/matita/contribs/lambda_delta/Basic_2/substitution/gdrop_gdrop.ma index 9083e2b3a..640c36c78 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/substitution/gdrop_gdrop.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/substitution/gdrop_gdrop.ma @@ -18,7 +18,7 @@ include "Basic_2/substitution/gdrop.ma". (* Main properties **********************************************************) -theorem gdrop_mono: ∀G,G1,e. ⇓[e] G ≡ G1 → ∀G2. ⇓[e] G ≡ G2 → G1 = G2. +theorem gdrop_mono: ∀G,G1,e. ⇩[e] G ≡ G1 → ∀G2. ⇩[e] G ≡ G2 → G1 = G2. #G #G1 #e #H elim H -G -G1 [ #G #He #G2 #H >(gdrop_inv_gt … H He) -H -He // @@ -29,7 +29,7 @@ theorem gdrop_mono: ∀G,G1,e. ⇓[e] G ≡ G1 → ∀G2. ⇓[e] G ≡ G2 → G1 ] qed-. -lemma gdrop_dec: ∀G1,G2,e. Decidable (⇓[e] G1 ≡ G2). +lemma gdrop_dec: ∀G1,G2,e. Decidable (⇩[e] G1 ≡ G2). #G1 #G2 #e elim (gdrop_total e G1) #G #HG1 elim (genv_eq_dec G G2) #HG2 diff --git a/matita/matita/contribs/lambda_delta/Basic_2/substitution/ldrop.ma b/matita/matita/contribs/lambda_delta/Basic_2/substitution/ldrop.ma index c3219f4f4..d3788f410 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/substitution/ldrop.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/substitution/ldrop.ma @@ -24,15 +24,15 @@ inductive ldrop: nat → nat → relation lenv ≝ | ldrop_pair : ∀L,I,V. ldrop 0 0 (L. 𝕓{I} V) (L. 𝕓{I} V) | ldrop_ldrop: ∀L1,L2,I,V,e. ldrop 0 e L1 L2 → ldrop 0 (e + 1) (L1. 𝕓{I} V) L2 | ldrop_skip : ∀L1,L2,I,V1,V2,d,e. - ldrop d e L1 L2 → ⇑[d,e] V2 ≡ V1 → + ldrop d e L1 L2 → ⇧[d,e] V2 ≡ V1 → ldrop (d + 1) e (L1. 𝕓{I} V1) (L2. 𝕓{I} V2) . -interpretation "local slicing" 'RLDrop d e L1 L2 = (ldrop d e L1 L2). +interpretation "local slicing" 'RDrop d e L1 L2 = (ldrop d e L1 L2). (* Basic inversion lemmas ***************************************************) -fact ldrop_inv_refl_aux: ∀d,e,L1,L2. ⇓[d, e] L1 ≡ L2 → d = 0 → e = 0 → L1 = L2. +fact ldrop_inv_refl_aux: ∀d,e,L1,L2. ⇩[d, e] L1 ≡ L2 → d = 0 → e = 0 → L1 = L2. #d #e #L1 #L2 * -d -e -L1 -L2 [ // | // @@ -42,10 +42,10 @@ fact ldrop_inv_refl_aux: ∀d,e,L1,L2. ⇓[d, e] L1 ≡ L2 → d = 0 → e = 0 qed. (* Basic_1: was: ldrop_gen_refl *) -lemma ldrop_inv_refl: ∀L1,L2. ⇓[0, 0] L1 ≡ L2 → L1 = L2. +lemma ldrop_inv_refl: ∀L1,L2. ⇩[0, 0] L1 ≡ L2 → L1 = L2. /2 width=5/ qed-. -fact ldrop_inv_atom1_aux: ∀d,e,L1,L2. ⇓[d, e] L1 ≡ L2 → L1 = ⋆ → +fact ldrop_inv_atom1_aux: ∀d,e,L1,L2. ⇩[d, e] L1 ≡ L2 → L1 = ⋆ → L2 = ⋆. #d #e #L1 #L2 * -d -e -L1 -L2 [ // @@ -56,13 +56,13 @@ fact ldrop_inv_atom1_aux: ∀d,e,L1,L2. ⇓[d, e] L1 ≡ L2 → L1 = ⋆ → qed. (* Basic_1: was: ldrop_gen_sort *) -lemma ldrop_inv_atom1: ∀d,e,L2. ⇓[d, e] ⋆ ≡ L2 → L2 = ⋆. +lemma ldrop_inv_atom1: ∀d,e,L2. ⇩[d, e] ⋆ ≡ L2 → L2 = ⋆. /2 width=5/ qed-. -fact ldrop_inv_O1_aux: ∀d,e,L1,L2. ⇓[d, e] L1 ≡ L2 → d = 0 → +fact ldrop_inv_O1_aux: ∀d,e,L1,L2. ⇩[d, e] L1 ≡ L2 → d = 0 → ∀K,I,V. L1 = K. 𝕓{I} V → (e = 0 ∧ L2 = K. 𝕓{I} V) ∨ - (0 < e ∧ ⇓[d, e - 1] K ≡ L2). + (0 < e ∧ ⇩[d, e - 1] K ≡ L2). #d #e #L1 #L2 * -d -e -L1 -L2 [ #d #e #_ #K #I #V #H destruct | #L #I #V #_ #K #J #W #HX destruct /3 width=1/ @@ -71,23 +71,23 @@ fact ldrop_inv_O1_aux: ∀d,e,L1,L2. ⇓[d, e] L1 ≡ L2 → d = 0 → ] qed. -lemma ldrop_inv_O1: ∀e,K,I,V,L2. ⇓[0, e] K. 𝕓{I} V ≡ L2 → +lemma ldrop_inv_O1: ∀e,K,I,V,L2. ⇩[0, e] K. 𝕓{I} V ≡ L2 → (e = 0 ∧ L2 = K. 𝕓{I} V) ∨ - (0 < e ∧ ⇓[0, e - 1] K ≡ L2). + (0 < e ∧ ⇩[0, e - 1] K ≡ L2). /2 width=3/ qed-. (* Basic_1: was: ldrop_gen_ldrop *) lemma ldrop_inv_ldrop1: ∀e,K,I,V,L2. - ⇓[0, e] K. 𝕓{I} V ≡ L2 → 0 < e → ⇓[0, e - 1] K ≡ L2. + ⇩[0, e] K. 𝕓{I} V ≡ L2 → 0 < e → ⇩[0, e - 1] K ≡ L2. #e #K #I #V #L2 #H #He elim (ldrop_inv_O1 … H) -H * // #H destruct elim (lt_refl_false … He) qed-. -fact ldrop_inv_skip1_aux: ∀d,e,L1,L2. ⇓[d, e] L1 ≡ L2 → 0 < d → +fact ldrop_inv_skip1_aux: ∀d,e,L1,L2. ⇩[d, e] L1 ≡ L2 → 0 < d → ∀I,K1,V1. L1 = K1. 𝕓{I} V1 → - ∃∃K2,V2. ⇓[d - 1, e] K1 ≡ K2 & - ⇑[d - 1, e] V2 ≡ V1 & + ∃∃K2,V2. ⇩[d - 1, e] K1 ≡ K2 & + ⇧[d - 1, e] V2 ≡ V1 & L2 = K2. 𝕓{I} V2. #d #e #L1 #L2 * -d -e -L1 -L2 [ #d #e #_ #I #K #V #H destruct @@ -98,16 +98,16 @@ fact ldrop_inv_skip1_aux: ∀d,e,L1,L2. ⇓[d, e] L1 ≡ L2 → 0 < d → qed. (* Basic_1: was: ldrop_gen_skip_l *) -lemma ldrop_inv_skip1: ∀d,e,I,K1,V1,L2. ⇓[d, e] K1. 𝕓{I} V1 ≡ L2 → 0 < d → - ∃∃K2,V2. ⇓[d - 1, e] K1 ≡ K2 & - ⇑[d - 1, e] V2 ≡ V1 & +lemma ldrop_inv_skip1: ∀d,e,I,K1,V1,L2. ⇩[d, e] K1. 𝕓{I} V1 ≡ L2 → 0 < d → + ∃∃K2,V2. ⇩[d - 1, e] K1 ≡ K2 & + ⇧[d - 1, e] V2 ≡ V1 & L2 = K2. 𝕓{I} V2. /2 width=3/ qed-. -fact ldrop_inv_skip2_aux: ∀d,e,L1,L2. ⇓[d, e] L1 ≡ L2 → 0 < d → +fact ldrop_inv_skip2_aux: ∀d,e,L1,L2. ⇩[d, e] L1 ≡ L2 → 0 < d → ∀I,K2,V2. L2 = K2. 𝕓{I} V2 → - ∃∃K1,V1. ⇓[d - 1, e] K1 ≡ K2 & - ⇑[d - 1, e] V2 ≡ V1 & + ∃∃K1,V1. ⇩[d - 1, e] K1 ≡ K2 & + ⇧[d - 1, e] V2 ≡ V1 & L1 = K1. 𝕓{I} V1. #d #e #L1 #L2 * -d -e -L1 -L2 [ #d #e #_ #I #K #V #H destruct @@ -118,28 +118,28 @@ fact ldrop_inv_skip2_aux: ∀d,e,L1,L2. ⇓[d, e] L1 ≡ L2 → 0 < d → qed. (* Basic_1: was: ldrop_gen_skip_r *) -lemma ldrop_inv_skip2: ∀d,e,I,L1,K2,V2. ⇓[d, e] L1 ≡ K2. 𝕓{I} V2 → 0 < d → - ∃∃K1,V1. ⇓[d - 1, e] K1 ≡ K2 & ⇑[d - 1, e] V2 ≡ V1 & +lemma ldrop_inv_skip2: ∀d,e,I,L1,K2,V2. ⇩[d, e] L1 ≡ K2. 𝕓{I} V2 → 0 < d → + ∃∃K1,V1. ⇩[d - 1, e] K1 ≡ K2 & ⇧[d - 1, e] V2 ≡ V1 & L1 = K1. 𝕓{I} V1. /2 width=3/ qed-. (* Basic properties *********************************************************) (* Basic_1: was by definition: ldrop_refl *) -lemma ldrop_refl: ∀L. ⇓[0, 0] L ≡ L. +lemma ldrop_refl: ∀L. ⇩[0, 0] L ≡ L. #L elim L -L // qed. lemma ldrop_ldrop_lt: ∀L1,L2,I,V,e. - ⇓[0, e - 1] L1 ≡ L2 → 0 < e → ⇓[0, e] L1. 𝕓{I} V ≡ L2. + ⇩[0, e - 1] L1 ≡ L2 → 0 < e → ⇩[0, e] L1. 𝕓{I} V ≡ L2. #L1 #L2 #I #V #e #HL12 #He >(plus_minus_m_m e 1) // /2 width=1/ qed. lemma ldrop_lsubs_ldrop1_abbr: ∀L1,L2,d,e. L1 [d, e] ≼ L2 → - ∀K1,V,i. ⇓[0, i] L1 ≡ K1. 𝕓{Abbr} V → + ∀K1,V,i. ⇩[0, i] L1 ≡ K1. 𝕓{Abbr} V → d ≤ i → i < d + e → ∃∃K2. K1 [0, d + e - i - 1] ≼ K2 & - ⇓[0, i] L2 ≡ K2. 𝕓{Abbr} V. + ⇩[0, i] L2 ≡ K2. 𝕓{Abbr} V. #L1 #L2 #d #e #H elim H -L1 -L2 -d -e [ #d #e #K1 #V #i #H lapply (ldrop_inv_atom1 … H) -H #H destruct @@ -167,8 +167,8 @@ qed. (* Basic forvard lemmas *****************************************************) (* Basic_1: was: ldrop_S *) -lemma ldrop_fwd_ldrop2: ∀L1,I2,K2,V2,e. ⇓[O, e] L1 ≡ K2. 𝕓{I2} V2 → - ⇓[O, e + 1] L1 ≡ K2. +lemma ldrop_fwd_ldrop2: ∀L1,I2,K2,V2,e. ⇩[O, e] L1 ≡ K2. 𝕓{I2} V2 → + ⇩[O, e + 1] L1 ≡ K2. #L1 elim L1 -L1 [ #I2 #K2 #V2 #e #H lapply (ldrop_inv_atom1 … H) -H #H destruct | #K1 #I1 #V1 #IHL1 #I2 #K2 #V2 #e #H @@ -179,7 +179,7 @@ lemma ldrop_fwd_ldrop2: ∀L1,I2,K2,V2,e. ⇓[O, e] L1 ≡ K2. 𝕓{I2} V2 → ] qed-. -lemma ldrop_fwd_lw: ∀L1,L2,d,e. ⇓[d, e] L1 ≡ L2 → #[L2] ≤ #[L1]. +lemma ldrop_fwd_lw: ∀L1,L2,d,e. ⇩[d, e] L1 ≡ L2 → #[L2] ≤ #[L1]. #L1 #L2 #d #e #H elim H -L1 -L2 -d -e // normalize [ /2 width=3/ | #L1 #L2 #I #V1 #V2 #d #e #_ #HV21 #IHL12 @@ -188,7 +188,7 @@ lemma ldrop_fwd_lw: ∀L1,L2,d,e. ⇓[d, e] L1 ≡ L2 → #[L2] ≤ #[L1]. qed-. lemma ldrop_fwd_ldrop2_length: ∀L1,I2,K2,V2,e. - ⇓[0, e] L1 ≡ K2. 𝕓{I2} V2 → e < |L1|. + ⇩[0, e] L1 ≡ K2. 𝕓{I2} V2 → e < |L1|. #L1 elim L1 -L1 [ #I2 #K2 #V2 #e #H lapply (ldrop_inv_atom1 … H) -H #H destruct | #K1 #I1 #V1 #IHL1 #I2 #K2 #V2 #e #H @@ -199,7 +199,7 @@ lemma ldrop_fwd_ldrop2_length: ∀L1,I2,K2,V2,e. ] qed-. -lemma ldrop_fwd_O1_length: ∀L1,L2,e. ⇓[0, e] L1 ≡ L2 → |L2| = |L1| - e. +lemma ldrop_fwd_O1_length: ∀L1,L2,e. ⇩[0, e] L1 ≡ L2 → |L2| = |L1| - e. #L1 elim L1 -L1 [ #L2 #e #H >(ldrop_inv_atom1 … H) -H // | #K1 #I1 #V1 #IHL1 #L2 #e #H diff --git a/matita/matita/contribs/lambda_delta/Basic_2/substitution/ldrop_ldrop.ma b/matita/matita/contribs/lambda_delta/Basic_2/substitution/ldrop_ldrop.ma index e9b92d9e3..2c4b8879f 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/substitution/ldrop_ldrop.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/substitution/ldrop_ldrop.ma @@ -20,8 +20,8 @@ include "Basic_2/substitution/ldrop.ma". (* Main properties **********************************************************) (* Basic_1: was: ldrop_mono *) -theorem ldrop_mono: ∀d,e,L,L1. ⇓[d, e] L ≡ L1 → - ∀L2. ⇓[d, e] L ≡ L2 → L1 = L2. +theorem ldrop_mono: ∀d,e,L,L1. ⇩[d, e] L ≡ L1 → + ∀L2. ⇩[d, e] L ≡ L2 → L1 = L2. #d #e #L #L1 #H elim H -d -e -L -L1 [ #d #e #L2 #H >(ldrop_inv_atom1 … H) -L2 // @@ -37,9 +37,9 @@ theorem ldrop_mono: ∀d,e,L,L1. ⇓[d, e] L ≡ L1 → qed-. (* Basic_1: was: ldrop_conf_ge *) -theorem ldrop_conf_ge: ∀d1,e1,L,L1. ⇓[d1, e1] L ≡ L1 → - ∀e2,L2. ⇓[0, e2] L ≡ L2 → d1 + e1 ≤ e2 → - ⇓[0, e2 - e1] L1 ≡ L2. +theorem ldrop_conf_ge: ∀d1,e1,L,L1. ⇩[d1, e1] L ≡ L1 → + ∀e2,L2. ⇩[0, e2] L ≡ L2 → d1 + e1 ≤ e2 → + ⇩[0, e2 - e1] L1 ≡ L2. #d1 #e1 #L #L1 #H elim H -d1 -e1 -L -L1 [ #d #e #e2 #L2 #H >(ldrop_inv_atom1 … H) -L2 // @@ -56,11 +56,11 @@ theorem ldrop_conf_ge: ∀d1,e1,L,L1. ⇓[d1, e1] L ≡ L1 → qed. (* Basic_1: was: ldrop_conf_lt *) -theorem ldrop_conf_lt: ∀d1,e1,L,L1. ⇓[d1, e1] L ≡ L1 → - ∀e2,K2,I,V2. ⇓[0, e2] L ≡ K2. 𝕓{I} V2 → +theorem ldrop_conf_lt: ∀d1,e1,L,L1. ⇩[d1, e1] L ≡ L1 → + ∀e2,K2,I,V2. ⇩[0, e2] L ≡ K2. 𝕓{I} V2 → e2 < d1 → let d ≝ d1 - e2 - 1 in - ∃∃K1,V1. ⇓[0, e2] L1 ≡ K1. 𝕓{I} V1 & - ⇓[d, e1] K2 ≡ K1 & ⇑[d, e1] V1 ≡ V2. + ∃∃K1,V1. ⇩[0, e2] L1 ≡ K1. 𝕓{I} V1 & + ⇩[d, e1] K2 ≡ K1 & ⇧[d, e1] V1 ≡ V2. #d1 #e1 #L #L1 #H elim H -d1 -e1 -L -L1 [ #d #e #e2 #K2 #I #V2 #H lapply (ldrop_inv_atom1 … H) -H #H destruct @@ -78,9 +78,9 @@ theorem ldrop_conf_lt: ∀d1,e1,L,L1. ⇓[d1, e1] L ≡ L1 → qed. (* Basic_1: was: ldrop_trans_le *) -theorem ldrop_trans_le: ∀d1,e1,L1,L. ⇓[d1, e1] L1 ≡ L → - ∀e2,L2. ⇓[0, e2] L ≡ L2 → e2 ≤ d1 → - ∃∃L0. ⇓[0, e2] L1 ≡ L0 & ⇓[d1 - e2, e1] L0 ≡ L2. +theorem ldrop_trans_le: ∀d1,e1,L1,L. ⇩[d1, e1] L1 ≡ L → + ∀e2,L2. ⇩[0, e2] L ≡ L2 → e2 ≤ d1 → + ∃∃L0. ⇩[0, e2] L1 ≡ L0 & ⇩[d1 - e2, e1] L0 ≡ L2. #d1 #e1 #L1 #L #H elim H -d1 -e1 -L1 -L [ #d #e #e2 #L2 #H >(ldrop_inv_atom1 … H) -L2 /2 width=3/ @@ -100,8 +100,8 @@ theorem ldrop_trans_le: ∀d1,e1,L1,L. ⇓[d1, e1] L1 ≡ L → qed. (* Basic_1: was: ldrop_trans_ge *) -theorem ldrop_trans_ge: ∀d1,e1,L1,L. ⇓[d1, e1] L1 ≡ L → - ∀e2,L2. ⇓[0, e2] L ≡ L2 → d1 ≤ e2 → ⇓[0, e1 + e2] L1 ≡ L2. +theorem ldrop_trans_ge: ∀d1,e1,L1,L. ⇩[d1, e1] L1 ≡ L → + ∀e2,L2. ⇩[0, e2] L ≡ L2 → d1 ≤ e2 → ⇩[0, e1 + e2] L1 ≡ L2. #d1 #e1 #L1 #L #H elim H -d1 -e1 -L1 -L [ #d #e #e2 #L2 #H >(ldrop_inv_atom1 … H) -H -L2 // @@ -116,11 +116,11 @@ theorem ldrop_trans_ge: ∀d1,e1,L1,L. ⇓[d1, e1] L1 ≡ L → qed. theorem ldrop_trans_ge_comm: ∀d1,e1,e2,L1,L2,L. - ⇓[d1, e1] L1 ≡ L → ⇓[0, e2] L ≡ L2 → d1 ≤ e2 → - ⇓[0, e2 + e1] L1 ≡ L2. + ⇩[d1, e1] L1 ≡ L → ⇩[0, e2] L ≡ L2 → d1 ≤ e2 → + ⇩[0, e2 + e1] L1 ≡ L2. #e1 #e1 #e2 >commutative_plus /2 width=5/ qed. (* Basic_1: was: ldrop_conf_rev *) -axiom ldrop_div: ∀e1,L1,L. ⇓[0, e1] L1 ≡ L → ∀e2,L2. ⇓[0, e2] L2 ≡ L → - ∃∃L0. ⇓[0, e1] L0 ≡ L2 & ⇓[e1, e2] L0 ≡ L1. +axiom ldrop_div: ∀e1,L1,L. ⇩[0, e1] L1 ≡ L → ∀e2,L2. ⇩[0, e2] L2 ≡ L → + ∃∃L0. ⇩[0, e1] L0 ≡ L2 & ⇩[e1, e2] L0 ≡ L1. diff --git a/matita/matita/contribs/lambda_delta/Basic_2/substitution/lift.ma b/matita/matita/contribs/lambda_delta/Basic_2/substitution/lift.ma index 0e0e6a748..5c7a28bd2 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/substitution/lift.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/substitution/lift.ma @@ -37,14 +37,14 @@ interpretation "relocation" 'RLift d e T1 T2 = (lift d e T1 T2). (* Basic inversion lemmas ***************************************************) -fact lift_inv_refl_O2_aux: ∀d,e,T1,T2. ⇑[d, e] T1 ≡ T2 → e = 0 → T1 = T2. +fact lift_inv_refl_O2_aux: ∀d,e,T1,T2. ⇧[d, e] T1 ≡ T2 → e = 0 → T1 = T2. #d #e #T1 #T2 #H elim H -d -e -T1 -T2 // /3 width=1/ qed. -lemma lift_inv_refl_O2: ∀d,T1,T2. ⇑[d, 0] T1 ≡ T2 → T1 = T2. +lemma lift_inv_refl_O2: ∀d,T1,T2. ⇧[d, 0] T1 ≡ T2 → T1 = T2. /2 width=4/ qed-. -fact lift_inv_sort1_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → ∀k. T1 = ⋆k → T2 = ⋆k. +fact lift_inv_sort1_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀k. T1 = ⋆k → T2 = ⋆k. #d #e #T1 #T2 * -d -e -T1 -T2 // [ #i #d #e #_ #k #H destruct | #I #V1 #V2 #T1 #T2 #d #e #_ #_ #k #H destruct @@ -52,10 +52,10 @@ fact lift_inv_sort1_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → ∀k. T1 = ⋆k ] qed. -lemma lift_inv_sort1: ∀d,e,T2,k. ⇑[d,e] ⋆k ≡ T2 → T2 = ⋆k. +lemma lift_inv_sort1: ∀d,e,T2,k. ⇧[d,e] ⋆k ≡ T2 → T2 = ⋆k. /2 width=5/ qed-. -fact lift_inv_lref1_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → ∀i. T1 = #i → +fact lift_inv_lref1_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀i. T1 = #i → (i < d ∧ T2 = #i) ∨ (d ≤ i ∧ T2 = #(i + e)). #d #e #T1 #T2 * -d -e -T1 -T2 [ #k #d #e #i #H destruct @@ -67,23 +67,23 @@ fact lift_inv_lref1_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → ∀i. T1 = #i → ] qed. -lemma lift_inv_lref1: ∀d,e,T2,i. ⇑[d,e] #i ≡ T2 → +lemma lift_inv_lref1: ∀d,e,T2,i. ⇧[d,e] #i ≡ T2 → (i < d ∧ T2 = #i) ∨ (d ≤ i ∧ T2 = #(i + e)). /2 width=3/ qed-. -lemma lift_inv_lref1_lt: ∀d,e,T2,i. ⇑[d,e] #i ≡ T2 → i < d → T2 = #i. +lemma lift_inv_lref1_lt: ∀d,e,T2,i. ⇧[d,e] #i ≡ T2 → i < d → T2 = #i. #d #e #T2 #i #H elim (lift_inv_lref1 … H) -H * // #Hdi #_ #Hid lapply (le_to_lt_to_lt … Hdi Hid) -Hdi -Hid #Hdd elim (lt_refl_false … Hdd) qed-. -lemma lift_inv_lref1_ge: ∀d,e,T2,i. ⇑[d,e] #i ≡ T2 → d ≤ i → T2 = #(i + e). +lemma lift_inv_lref1_ge: ∀d,e,T2,i. ⇧[d,e] #i ≡ T2 → d ≤ i → T2 = #(i + e). #d #e #T2 #i #H elim (lift_inv_lref1 … H) -H * // #Hid #_ #Hdi lapply (le_to_lt_to_lt … Hdi Hid) -Hdi -Hid #Hdd elim (lt_refl_false … Hdd) qed-. -fact lift_inv_gref1_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → ∀p. T1 = §p → T2 = §p. +fact lift_inv_gref1_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀p. T1 = §p → T2 = §p. #d #e #T1 #T2 * -d -e -T1 -T2 // [ #i #d #e #_ #k #H destruct | #I #V1 #V2 #T1 #T2 #d #e #_ #_ #k #H destruct @@ -91,12 +91,12 @@ fact lift_inv_gref1_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → ∀p. T1 = §p → ] qed. -lemma lift_inv_gref1: ∀d,e,T2,p. ⇑[d,e] §p ≡ T2 → T2 = §p. +lemma lift_inv_gref1: ∀d,e,T2,p. ⇧[d,e] §p ≡ T2 → T2 = §p. /2 width=5/ qed-. -fact lift_inv_bind1_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → +fact lift_inv_bind1_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀I,V1,U1. T1 = 𝕓{I} V1.U1 → - ∃∃V2,U2. ⇑[d,e] V1 ≡ V2 & ⇑[d+1,e] U1 ≡ U2 & + ∃∃V2,U2. ⇧[d,e] V1 ≡ V2 & ⇧[d+1,e] U1 ≡ U2 & T2 = 𝕓{I} V2. U2. #d #e #T1 #T2 * -d -e -T1 -T2 [ #k #d #e #I #V1 #U1 #H destruct @@ -108,14 +108,14 @@ fact lift_inv_bind1_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → ] qed. -lemma lift_inv_bind1: ∀d,e,T2,I,V1,U1. ⇑[d,e] 𝕓{I} V1. U1 ≡ T2 → - ∃∃V2,U2. ⇑[d,e] V1 ≡ V2 & ⇑[d+1,e] U1 ≡ U2 & +lemma lift_inv_bind1: ∀d,e,T2,I,V1,U1. ⇧[d,e] 𝕓{I} V1. U1 ≡ T2 → + ∃∃V2,U2. ⇧[d,e] V1 ≡ V2 & ⇧[d+1,e] U1 ≡ U2 & T2 = 𝕓{I} V2. U2. /2 width=3/ qed-. -fact lift_inv_flat1_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → +fact lift_inv_flat1_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀I,V1,U1. T1 = 𝕗{I} V1.U1 → - ∃∃V2,U2. ⇑[d,e] V1 ≡ V2 & ⇑[d,e] U1 ≡ U2 & + ∃∃V2,U2. ⇧[d,e] V1 ≡ V2 & ⇧[d,e] U1 ≡ U2 & T2 = 𝕗{I} V2. U2. #d #e #T1 #T2 * -d -e -T1 -T2 [ #k #d #e #I #V1 #U1 #H destruct @@ -127,12 +127,12 @@ fact lift_inv_flat1_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → ] qed. -lemma lift_inv_flat1: ∀d,e,T2,I,V1,U1. ⇑[d,e] 𝕗{I} V1. U1 ≡ T2 → - ∃∃V2,U2. ⇑[d,e] V1 ≡ V2 & ⇑[d,e] U1 ≡ U2 & +lemma lift_inv_flat1: ∀d,e,T2,I,V1,U1. ⇧[d,e] 𝕗{I} V1. U1 ≡ T2 → + ∃∃V2,U2. ⇧[d,e] V1 ≡ V2 & ⇧[d,e] U1 ≡ U2 & T2 = 𝕗{I} V2. U2. /2 width=3/ qed-. -fact lift_inv_sort2_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → ∀k. T2 = ⋆k → T1 = ⋆k. +fact lift_inv_sort2_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀k. T2 = ⋆k → T1 = ⋆k. #d #e #T1 #T2 * -d -e -T1 -T2 // [ #i #d #e #_ #k #H destruct | #I #V1 #V2 #T1 #T2 #d #e #_ #_ #k #H destruct @@ -141,10 +141,10 @@ fact lift_inv_sort2_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → ∀k. T2 = ⋆k qed. (* Basic_1: was: lift_gen_sort *) -lemma lift_inv_sort2: ∀d,e,T1,k. ⇑[d,e] T1 ≡ ⋆k → T1 = ⋆k. +lemma lift_inv_sort2: ∀d,e,T1,k. ⇧[d,e] T1 ≡ ⋆k → T1 = ⋆k. /2 width=5/ qed-. -fact lift_inv_lref2_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → ∀i. T2 = #i → +fact lift_inv_lref2_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀i. T2 = #i → (i < d ∧ T1 = #i) ∨ (d + e ≤ i ∧ T1 = #(i - e)). #d #e #T1 #T2 * -d -e -T1 -T2 [ #k #d #e #i #H destruct @@ -157,12 +157,12 @@ fact lift_inv_lref2_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → ∀i. T2 = #i → qed. (* Basic_1: was: lift_gen_lref *) -lemma lift_inv_lref2: ∀d,e,T1,i. ⇑[d,e] T1 ≡ #i → +lemma lift_inv_lref2: ∀d,e,T1,i. ⇧[d,e] T1 ≡ #i → (i < d ∧ T1 = #i) ∨ (d + e ≤ i ∧ T1 = #(i - e)). /2 width=3/ qed-. (* Basic_1: was: lift_gen_lref_lt *) -lemma lift_inv_lref2_lt: ∀d,e,T1,i. ⇑[d,e] T1 ≡ #i → i < d → T1 = #i. +lemma lift_inv_lref2_lt: ∀d,e,T1,i. ⇧[d,e] T1 ≡ #i → i < d → T1 = #i. #d #e #T1 #i #H elim (lift_inv_lref2 … H) -H * // #Hdi #_ #Hid lapply (le_to_lt_to_lt … Hdi Hid) -Hdi -Hid #Hdd elim (lt_inv_plus_l … Hdd) -Hdd #Hdd @@ -170,7 +170,7 @@ elim (lt_refl_false … Hdd) qed-. (* Basic_1: was: lift_gen_lref_false *) -lemma lift_inv_lref2_be: ∀d,e,T1,i. ⇑[d,e] T1 ≡ #i → +lemma lift_inv_lref2_be: ∀d,e,T1,i. ⇧[d,e] T1 ≡ #i → d ≤ i → i < d + e → False. #d #e #T1 #i #H elim (lift_inv_lref2 … H) -H * [ #H1 #_ #H2 #_ | #H2 #_ #_ #H1 ] @@ -179,14 +179,14 @@ elim (lt_refl_false … H) qed-. (* Basic_1: was: lift_gen_lref_ge *) -lemma lift_inv_lref2_ge: ∀d,e,T1,i. ⇑[d,e] T1 ≡ #i → d + e ≤ i → T1 = #(i - e). +lemma lift_inv_lref2_ge: ∀d,e,T1,i. ⇧[d,e] T1 ≡ #i → d + e ≤ i → T1 = #(i - e). #d #e #T1 #i #H elim (lift_inv_lref2 … H) -H * // #Hid #_ #Hdi lapply (le_to_lt_to_lt … Hdi Hid) -Hdi -Hid #Hdd elim (lt_inv_plus_l … Hdd) -Hdd #Hdd elim (lt_refl_false … Hdd) qed-. -fact lift_inv_gref2_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → ∀p. T2 = §p → T1 = §p. +fact lift_inv_gref2_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀p. T2 = §p → T1 = §p. #d #e #T1 #T2 * -d -e -T1 -T2 // [ #i #d #e #_ #k #H destruct | #I #V1 #V2 #T1 #T2 #d #e #_ #_ #k #H destruct @@ -194,12 +194,12 @@ fact lift_inv_gref2_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → ∀p. T2 = §p → ] qed. -lemma lift_inv_gref2: ∀d,e,T1,p. ⇑[d,e] T1 ≡ §p → T1 = §p. +lemma lift_inv_gref2: ∀d,e,T1,p. ⇧[d,e] T1 ≡ §p → T1 = §p. /2 width=5/ qed-. -fact lift_inv_bind2_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → +fact lift_inv_bind2_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀I,V2,U2. T2 = 𝕓{I} V2.U2 → - ∃∃V1,U1. ⇑[d,e] V1 ≡ V2 & ⇑[d+1,e] U1 ≡ U2 & + ∃∃V1,U1. ⇧[d,e] V1 ≡ V2 & ⇧[d+1,e] U1 ≡ U2 & T1 = 𝕓{I} V1. U1. #d #e #T1 #T2 * -d -e -T1 -T2 [ #k #d #e #I #V2 #U2 #H destruct @@ -212,14 +212,14 @@ fact lift_inv_bind2_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → qed. (* Basic_1: was: lift_gen_bind *) -lemma lift_inv_bind2: ∀d,e,T1,I,V2,U2. ⇑[d,e] T1 ≡ 𝕓{I} V2. U2 → - ∃∃V1,U1. ⇑[d,e] V1 ≡ V2 & ⇑[d+1,e] U1 ≡ U2 & +lemma lift_inv_bind2: ∀d,e,T1,I,V2,U2. ⇧[d,e] T1 ≡ 𝕓{I} V2. U2 → + ∃∃V1,U1. ⇧[d,e] V1 ≡ V2 & ⇧[d+1,e] U1 ≡ U2 & T1 = 𝕓{I} V1. U1. /2 width=3/ qed-. -fact lift_inv_flat2_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → +fact lift_inv_flat2_aux: ∀d,e,T1,T2. ⇧[d,e] T1 ≡ T2 → ∀I,V2,U2. T2 = 𝕗{I} V2.U2 → - ∃∃V1,U1. ⇑[d,e] V1 ≡ V2 & ⇑[d,e] U1 ≡ U2 & + ∃∃V1,U1. ⇧[d,e] V1 ≡ V2 & ⇧[d,e] U1 ≡ U2 & T1 = 𝕗{I} V1. U1. #d #e #T1 #T2 * -d -e -T1 -T2 [ #k #d #e #I #V2 #U2 #H destruct @@ -232,12 +232,12 @@ fact lift_inv_flat2_aux: ∀d,e,T1,T2. ⇑[d,e] T1 ≡ T2 → qed. (* Basic_1: was: lift_gen_flat *) -lemma lift_inv_flat2: ∀d,e,T1,I,V2,U2. ⇑[d,e] T1 ≡ 𝕗{I} V2. U2 → - ∃∃V1,U1. ⇑[d,e] V1 ≡ V2 & ⇑[d,e] U1 ≡ U2 & +lemma lift_inv_flat2: ∀d,e,T1,I,V2,U2. ⇧[d,e] T1 ≡ 𝕗{I} V2. U2 → + ∃∃V1,U1. ⇧[d,e] V1 ≡ V2 & ⇧[d,e] U1 ≡ U2 & T1 = 𝕗{I} V1. U1. /2 width=3/ qed-. -lemma lift_inv_pair_xy_x: ∀d,e,I,V,T. ⇑[d, e] 𝕔{I} V. T ≡ V → False. +lemma lift_inv_pair_xy_x: ∀d,e,I,V,T. ⇧[d, e] 𝕔{I} V. T ≡ V → False. #d #e #J #V elim V -V [ * #i #T #H [ lapply (lift_inv_sort2 … H) -H #H destruct @@ -251,7 +251,7 @@ lemma lift_inv_pair_xy_x: ∀d,e,I,V,T. ⇑[d, e] 𝕔{I} V. T ≡ V → False. ] qed-. -lemma lift_inv_pair_xy_y: ∀I,T,V,d,e. ⇑[d, e] 𝕔{I} V. T ≡ T → False. +lemma lift_inv_pair_xy_y: ∀I,T,V,d,e. ⇧[d, e] 𝕔{I} V. T ≡ T → False. #J #T elim T -T [ * #i #V #d #e #H [ lapply (lift_inv_sort2 … H) -H #H destruct @@ -267,17 +267,17 @@ qed-. (* Basic forward lemmas *****************************************************) -lemma tw_lift: ∀d,e,T1,T2. ⇑[d, e] T1 ≡ T2 → #[T1] = #[T2]. +lemma tw_lift: ∀d,e,T1,T2. ⇧[d, e] T1 ≡ T2 → #[T1] = #[T2]. #d #e #T1 #T2 #H elim H -d -e -T1 -T2 normalize // qed-. -lemma lift_simple_dx: ∀d,e,T1,T2. ⇑[d, e] T1 ≡ T2 → 𝕊[T1] → 𝕊[T2]. +lemma lift_simple_dx: ∀d,e,T1,T2. ⇧[d, e] T1 ≡ T2 → 𝕊[T1] → 𝕊[T2]. #d #e #T1 #T2 #H elim H -d -e -T1 -T2 // #I #V1 #V2 #T1 #T2 #d #e #_ #_ #_ #_ #H elim (simple_inv_bind … H) qed-. -lemma lift_simple_sn: ∀d,e,T1,T2. ⇑[d, e] T1 ≡ T2 → 𝕊[T2] → 𝕊[T1]. +lemma lift_simple_sn: ∀d,e,T1,T2. ⇧[d, e] T1 ≡ T2 → 𝕊[T2] → 𝕊[T1]. #d #e #T1 #T2 #H elim H -d -e -T1 -T2 // #I #V1 #V2 #T1 #T2 #d #e #_ #_ #_ #_ #H elim (simple_inv_bind … H) @@ -286,22 +286,22 @@ qed-. (* Basic properties *********************************************************) (* Basic_1: was: lift_lref_gt *) -lemma lift_lref_ge_minus: ∀d,e,i. d + e ≤ i → ⇑[d, e] #(i - e) ≡ #i. +lemma lift_lref_ge_minus: ∀d,e,i. d + e ≤ i → ⇧[d, e] #(i - e) ≡ #i. #d #e #i #H >(plus_minus_m_m i e) in ⊢ (? ? ? ? %); /2 width=2/ /3 width=2/ qed. -lemma lift_lref_ge_minus_eq: ∀d,e,i,j. d + e ≤ i → j = i - e → ⇑[d, e] #j ≡ #i. +lemma lift_lref_ge_minus_eq: ∀d,e,i,j. d + e ≤ i → j = i - e → ⇧[d, e] #j ≡ #i. /2 width=1/ qed-. (* Basic_1: was: lift_r *) -lemma lift_refl: ∀T,d. ⇑[d, 0] T ≡ T. +lemma lift_refl: ∀T,d. ⇧[d, 0] T ≡ T. #T elim T -T [ * #i // #d elim (lt_or_ge i d) /2 width=1/ | * /2 width=1/ ] qed. -lemma lift_total: ∀T1,d,e. ∃T2. ⇑[d,e] T1 ≡ T2. +lemma lift_total: ∀T1,d,e. ∃T2. ⇧[d,e] T1 ≡ T2. #T1 elim T1 -T1 [ * #i /2 width=2/ #d #e elim (lt_or_ge i d) /3 width=2/ | * #I #V1 #T1 #IHV1 #IHT1 #d #e @@ -313,9 +313,9 @@ lemma lift_total: ∀T1,d,e. ∃T2. ⇑[d,e] T1 ≡ T2. qed. (* Basic_1: was: lift_free (right to left) *) -lemma lift_split: ∀d1,e2,T1,T2. ⇑[d1, e2] T1 ≡ T2 → +lemma lift_split: ∀d1,e2,T1,T2. ⇧[d1, e2] T1 ≡ T2 → ∀d2,e1. d1 ≤ d2 → d2 ≤ d1 + e1 → e1 ≤ e2 → - ∃∃T. ⇑[d1, e1] T1 ≡ T & ⇑[d2, e2 - e1] T ≡ T2. + ∃∃T. ⇧[d1, e1] T1 ≡ T & ⇧[d2, e2 - e1] T ≡ T2. #d1 #e2 #T1 #T2 #H elim H -d1 -e2 -T1 -T2 [ /3 width=3/ | #i #d1 #e2 #Hid1 #d2 #e1 #Hd12 #_ #_ @@ -334,7 +334,7 @@ lemma lift_split: ∀d1,e2,T1,T2. ⇑[d1, e2] T1 ≡ T2 → qed. (* Basic_1: was only: dnf_dec2 dnf_dec *) -lemma is_lift_dec: ∀T2,d,e. Decidable (∃T1. ⇑[d,e] T1 ≡ T2). +lemma is_lift_dec: ∀T2,d,e. Decidable (∃T1. ⇧[d,e] T1 ≡ T2). #T1 elim T1 -T1 [ * [1,3: /3 width=2/ ] #i #d #e elim (lt_dec i d) #Hid diff --git a/matita/matita/contribs/lambda_delta/Basic_2/substitution/lift_lift.ma b/matita/matita/contribs/lambda_delta/Basic_2/substitution/lift_lift.ma index 6626b4e57..235c4233d 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/substitution/lift_lift.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/substitution/lift_lift.ma @@ -19,7 +19,7 @@ include "Basic_2/substitution/lift.ma". (* Main properies ***********************************************************) (* Basic_1: was: lift_inj *) -theorem lift_inj: ∀d,e,T1,U. ⇑[d,e] T1 ≡ U → ∀T2. ⇑[d,e] T2 ≡ U → T1 = T2. +theorem lift_inj: ∀d,e,T1,U. ⇧[d,e] T1 ≡ U → ∀T2. ⇧[d,e] T2 ≡ U → T1 = T2. #d #e #T1 #U #H elim H -d -e -T1 -U [ #k #d #e #X #HX lapply (lift_inv_sort2 … HX) -HX // @@ -37,10 +37,10 @@ theorem lift_inj: ∀d,e,T1,U. ⇑[d,e] T1 ≡ U → ∀T2. ⇑[d,e] T2 ≡ U qed-. (* Basic_1: was: lift_gen_lift *) -theorem lift_div_le: ∀d1,e1,T1,T. ⇑[d1, e1] T1 ≡ T → - ∀d2,e2,T2. ⇑[d2 + e1, e2] T2 ≡ T → +theorem lift_div_le: ∀d1,e1,T1,T. ⇧[d1, e1] T1 ≡ T → + ∀d2,e2,T2. ⇧[d2 + e1, e2] T2 ≡ T → d1 ≤ d2 → - ∃∃T0. ⇑[d1, e1] T0 ≡ T2 & ⇑[d2, e2] T0 ≡ T1. + ∃∃T0. ⇧[d1, e1] T0 ≡ T2 & ⇧[d2, e2] T0 ≡ T1. #d1 #e1 #T1 #T #H elim H -d1 -e1 -T1 -T [ #k #d1 #e1 #d2 #e2 #T2 #Hk #Hd12 lapply (lift_inv_sort2 … Hk) -Hk #Hk destruct /3 width=3/ @@ -70,10 +70,10 @@ theorem lift_div_le: ∀d1,e1,T1,T. ⇑[d1, e1] T1 ≡ T → qed. (* Note: apparently this was missing in Basic_1 *) -theorem lift_div_be: ∀d1,e1,T1,T. ⇑[d1, e1] T1 ≡ T → - ∀e,e2,T2. ⇑[d1 + e, e2] T2 ≡ T → +theorem lift_div_be: ∀d1,e1,T1,T. ⇧[d1, e1] T1 ≡ T → + ∀e,e2,T2. ⇧[d1 + e, e2] T2 ≡ T → e ≤ e1 → e1 ≤ e + e2 → - ∃∃T0. ⇑[d1, e] T0 ≡ T2 & ⇑[d1, e + e2 - e1] T0 ≡ T1. + ∃∃T0. ⇧[d1, e] T0 ≡ T2 & ⇧[d1, e + e2 - e1] T0 ≡ T1. #d1 #e1 #T1 #T #H elim H -d1 -e1 -T1 -T [ #k #d1 #e1 #e #e2 #T2 #H >(lift_inv_sort2 … H) -H /2 width=3/ | #i #d1 #e1 #Hid1 #e #e2 #T2 #H #He1 #He1e2 @@ -99,7 +99,7 @@ theorem lift_div_be: ∀d1,e1,T1,T. ⇑[d1, e1] T1 ≡ T → ] qed. -theorem lift_mono: ∀d,e,T,U1. ⇑[d,e] T ≡ U1 → ∀U2. ⇑[d,e] T ≡ U2 → U1 = U2. +theorem lift_mono: ∀d,e,T,U1. ⇧[d,e] T ≡ U1 → ∀U2. ⇧[d,e] T ≡ U2 → U1 = U2. #d #e #T #U1 #H elim H -d -e -T -U1 [ #k #d #e #X #HX lapply (lift_inv_sort1 … HX) -HX // @@ -117,9 +117,9 @@ theorem lift_mono: ∀d,e,T,U1. ⇑[d,e] T ≡ U1 → ∀U2. ⇑[d,e] T ≡ U2 qed-. (* Basic_1: was: lift_free (left to right) *) -theorem lift_trans_be: ∀d1,e1,T1,T. ⇑[d1, e1] T1 ≡ T → - ∀d2,e2,T2. ⇑[d2, e2] T ≡ T2 → - d1 ≤ d2 → d2 ≤ d1 + e1 → ⇑[d1, e1 + e2] T1 ≡ T2. +theorem lift_trans_be: ∀d1,e1,T1,T. ⇧[d1, e1] T1 ≡ T → + ∀d2,e2,T2. ⇧[d2, e2] T ≡ T2 → + d1 ≤ d2 → d2 ≤ d1 + e1 → ⇧[d1, e1 + e2] T1 ≡ T2. #d1 #e1 #T1 #T #H elim H -d1 -e1 -T1 -T [ #k #d1 #e1 #d2 #e2 #T2 #HT2 #_ #_ >(lift_inv_sort1 … HT2) -HT2 // @@ -145,9 +145,9 @@ theorem lift_trans_be: ∀d1,e1,T1,T. ⇑[d1, e1] T1 ≡ T → qed. (* Basic_1: was: lift_d (right to left) *) -theorem lift_trans_le: ∀d1,e1,T1,T. ⇑[d1, e1] T1 ≡ T → - ∀d2,e2,T2. ⇑[d2, e2] T ≡ T2 → d2 ≤ d1 → - ∃∃T0. ⇑[d2, e2] T1 ≡ T0 & ⇑[d1 + e2, e1] T0 ≡ T2. +theorem lift_trans_le: ∀d1,e1,T1,T. ⇧[d1, e1] T1 ≡ T → + ∀d2,e2,T2. ⇧[d2, e2] T ≡ T2 → d2 ≤ d1 → + ∃∃T0. ⇧[d2, e2] T1 ≡ T0 & ⇧[d1 + e2, e1] T0 ≡ T2. #d1 #e1 #T1 #T #H elim H -d1 -e1 -T1 -T [ #k #d1 #e1 #d2 #e2 #X #HX #_ >(lift_inv_sort1 … HX) -HX /2 width=3/ @@ -172,9 +172,9 @@ theorem lift_trans_le: ∀d1,e1,T1,T. ⇑[d1, e1] T1 ≡ T → qed. (* Basic_1: was: lift_d (left to right) *) -theorem lift_trans_ge: ∀d1,e1,T1,T. ⇑[d1, e1] T1 ≡ T → - ∀d2,e2,T2. ⇑[d2, e2] T ≡ T2 → d1 + e1 ≤ d2 → - ∃∃T0. ⇑[d2 - e1, e2] T1 ≡ T0 & ⇑[d1, e1] T0 ≡ T2. +theorem lift_trans_ge: ∀d1,e1,T1,T. ⇧[d1, e1] T1 ≡ T → + ∀d2,e2,T2. ⇧[d2, e2] T ≡ T2 → d1 + e1 ≤ d2 → + ∃∃T0. ⇧[d2 - e1, e2] T1 ≡ T0 & ⇧[d1, e1] T0 ≡ T2. #d1 #e1 #T1 #T #H elim H -d1 -e1 -T1 -T [ #k #d1 #e1 #d2 #e2 #X #HX #_ >(lift_inv_sort1 … HX) -HX /2 width=3/ diff --git a/matita/matita/contribs/lambda_delta/Basic_2/substitution/lift_vector.ma b/matita/matita/contribs/lambda_delta/Basic_2/substitution/lift_vector.ma index 2f7c9bbc5..ef422bdd4 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/substitution/lift_vector.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/substitution/lift_vector.ma @@ -20,7 +20,7 @@ include "Basic_2/substitution/lift.ma". inductive liftv (d,e:nat) : relation (list term) ≝ | liftv_nil : liftv d e ◊ ◊ | liftv_cons: ∀T1s,T2s,T1,T2. - ⇑[d, e] T1 ≡ T2 → liftv d e T1s T2s → + ⇧[d, e] T1 ≡ T2 → liftv d e T1s T2s → liftv d e (T1 :: T1s) (T2 :: T2s) . @@ -28,7 +28,7 @@ interpretation "relocation (vector)" 'RLift d e T1s T2s = (liftv d e T1s T2s). (* Basic properties *********************************************************) -lemma liftv_total: ∀d,e. ∀T1s:list term. ∃T2s. ⇑[d, e] T1s ≡ T2s. +lemma liftv_total: ∀d,e. ∀T1s:list term. ∃T2s. ⇧[d, e] T1s ≡ T2s. #d #e #T1s elim T1s -T1s [ /2 width=2/ | #T1 #T1s * #T2s #HT12s diff --git a/matita/matita/contribs/lambda_delta/Basic_2/substitution/ltps.ma b/matita/matita/contribs/lambda_delta/Basic_2/substitution/ltps.ma index c804efa41..9adf78710 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/substitution/ltps.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/substitution/ltps.ma @@ -21,10 +21,10 @@ inductive ltps: nat → nat → relation lenv ≝ | ltps_atom: ∀d,e. ltps d e (⋆) (⋆) | ltps_pair: ∀L,I,V. ltps 0 0 (L. 𝕓{I} V) (L. 𝕓{I} V) | ltps_tps2: ∀L1,L2,I,V1,V2,e. - ltps 0 e L1 L2 → L2 ⊢ V1 [0, e] ≫ V2 → + ltps 0 e L1 L2 → L2 ⊢ V1 [0, e] ▶ V2 → ltps 0 (e + 1) (L1. 𝕓{I} V1) L2. 𝕓{I} V2 | ltps_tps1: ∀L1,L2,I,V1,V2,d,e. - ltps d e L1 L2 → L2 ⊢ V1 [d, e] ≫ V2 → + ltps d e L1 L2 → L2 ⊢ V1 [d, e] ▶ V2 → ltps (d + 1) e (L1. 𝕓{I} V1) (L2. 𝕓{I} V2) . @@ -34,28 +34,28 @@ interpretation "parallel substritution (local environment)" (* Basic properties *********************************************************) lemma ltps_tps2_lt: ∀L1,L2,I,V1,V2,e. - L1 [0, e - 1] ≫ L2 → L2 ⊢ V1 [0, e - 1] ≫ V2 → - 0 < e → L1. 𝕓{I} V1 [0, e] ≫ L2. 𝕓{I} V2. + L1 [0, e - 1] ▶ L2 → L2 ⊢ V1 [0, e - 1] ▶ V2 → + 0 < e → L1. 𝕓{I} V1 [0, e] ▶ L2. 𝕓{I} V2. #L1 #L2 #I #V1 #V2 #e #HL12 #HV12 #He >(plus_minus_m_m e 1) /2 width=1/ qed. lemma ltps_tps1_lt: ∀L1,L2,I,V1,V2,d,e. - L1 [d - 1, e] ≫ L2 → L2 ⊢ V1 [d - 1, e] ≫ V2 → - 0 < d → L1. 𝕓{I} V1 [d, e] ≫ L2. 𝕓{I} V2. + L1 [d - 1, e] ▶ L2 → L2 ⊢ V1 [d - 1, e] ▶ V2 → + 0 < d → L1. 𝕓{I} V1 [d, e] ▶ L2. 𝕓{I} V2. #L1 #L2 #I #V1 #V2 #d #e #HL12 #HV12 #Hd >(plus_minus_m_m d 1) /2 width=1/ qed. (* Basic_1: was by definition: csubst1_refl *) -lemma ltps_refl: ∀L,d,e. L [d, e] ≫ L. +lemma ltps_refl: ∀L,d,e. L [d, e] ▶ L. #L elim L -L // #L #I #V #IHL * /2 width=1/ * /2 width=1/ qed. (* Basic inversion lemmas ***************************************************) -fact ltps_inv_refl_O2_aux: ∀d,e,L1,L2. L1 [d, e] ≫ L2 → e = 0 → L1 = L2. +fact ltps_inv_refl_O2_aux: ∀d,e,L1,L2. L1 [d, e] ▶ L2 → e = 0 → L1 = L2. #d #e #L1 #L2 #H elim H -d -e -L1 -L2 // [ #L1 #L2 #I #V1 #V2 #e #_ #_ #_ >commutative_plus normalize #H destruct | #L1 #L2 #I #V1 #V2 #d #e #_ #HV12 #IHL12 #He destruct @@ -63,11 +63,11 @@ fact ltps_inv_refl_O2_aux: ∀d,e,L1,L2. L1 [d, e] ≫ L2 → e = 0 → L1 = L2. ] qed. -lemma ltps_inv_refl_O2: ∀d,L1,L2. L1 [d, 0] ≫ L2 → L1 = L2. +lemma ltps_inv_refl_O2: ∀d,L1,L2. L1 [d, 0] ▶ L2 → L1 = L2. /2 width=4/ qed-. fact ltps_inv_atom1_aux: ∀d,e,L1,L2. - L1 [d, e] ≫ L2 → L1 = ⋆ → L2 = ⋆. + L1 [d, e] ▶ L2 → L1 = ⋆ → L2 = ⋆. #d #e #L1 #L2 * -d -e -L1 -L2 [ // | #L #I #V #H destruct @@ -76,13 +76,13 @@ fact ltps_inv_atom1_aux: ∀d,e,L1,L2. ] qed. -lemma ltps_inv_atom1: ∀d,e,L2. ⋆ [d, e] ≫ L2 → L2 = ⋆. +lemma ltps_inv_atom1: ∀d,e,L2. ⋆ [d, e] ▶ L2 → L2 = ⋆. /2 width=5/ qed-. -fact ltps_inv_tps21_aux: ∀d,e,L1,L2. L1 [d, e] ≫ L2 → d = 0 → 0 < e → +fact ltps_inv_tps21_aux: ∀d,e,L1,L2. L1 [d, e] ▶ L2 → d = 0 → 0 < e → ∀K1,I,V1. L1 = K1. 𝕓{I} V1 → - ∃∃K2,V2. K1 [0, e - 1] ≫ K2 & - K2 ⊢ V1 [0, e - 1] ≫ V2 & + ∃∃K2,V2. K1 [0, e - 1] ▶ K2 & + K2 ⊢ V1 [0, e - 1] ▶ V2 & L2 = K2. 𝕓{I} V2. #d #e #L1 #L2 * -d -e -L1 -L2 [ #d #e #_ #_ #K1 #I #V1 #H destruct @@ -92,15 +92,15 @@ fact ltps_inv_tps21_aux: ∀d,e,L1,L2. L1 [d, e] ≫ L2 → d = 0 → 0 < e → ] qed. -lemma ltps_inv_tps21: ∀e,K1,I,V1,L2. K1. 𝕓{I} V1 [0, e] ≫ L2 → 0 < e → - ∃∃K2,V2. K1 [0, e - 1] ≫ K2 & K2 ⊢ V1 [0, e - 1] ≫ V2 & +lemma ltps_inv_tps21: ∀e,K1,I,V1,L2. K1. 𝕓{I} V1 [0, e] ▶ L2 → 0 < e → + ∃∃K2,V2. K1 [0, e - 1] ▶ K2 & K2 ⊢ V1 [0, e - 1] ▶ V2 & L2 = K2. 𝕓{I} V2. /2 width=5/ qed-. -fact ltps_inv_tps11_aux: ∀d,e,L1,L2. L1 [d, e] ≫ L2 → 0 < d → +fact ltps_inv_tps11_aux: ∀d,e,L1,L2. L1 [d, e] ▶ L2 → 0 < d → ∀I,K1,V1. L1 = K1. 𝕓{I} V1 → - ∃∃K2,V2. K1 [d - 1, e] ≫ K2 & - K2 ⊢ V1 [d - 1, e] ≫ V2 & + ∃∃K2,V2. K1 [d - 1, e] ▶ K2 & + K2 ⊢ V1 [d - 1, e] ▶ V2 & L2 = K2. 𝕓{I} V2. #d #e #L1 #L2 * -d -e -L1 -L2 [ #d #e #_ #I #K1 #V1 #H destruct @@ -110,14 +110,14 @@ fact ltps_inv_tps11_aux: ∀d,e,L1,L2. L1 [d, e] ≫ L2 → 0 < d → ] qed. -lemma ltps_inv_tps11: ∀d,e,I,K1,V1,L2. K1. 𝕓{I} V1 [d, e] ≫ L2 → 0 < d → - ∃∃K2,V2. K1 [d - 1, e] ≫ K2 & - K2 ⊢ V1 [d - 1, e] ≫ V2 & +lemma ltps_inv_tps11: ∀d,e,I,K1,V1,L2. K1. 𝕓{I} V1 [d, e] ▶ L2 → 0 < d → + ∃∃K2,V2. K1 [d - 1, e] ▶ K2 & + K2 ⊢ V1 [d - 1, e] ▶ V2 & L2 = K2. 𝕓{I} V2. /2 width=3/ qed-. fact ltps_inv_atom2_aux: ∀d,e,L1,L2. - L1 [d, e] ≫ L2 → L2 = ⋆ → L1 = ⋆. + L1 [d, e] ▶ L2 → L2 = ⋆ → L1 = ⋆. #d #e #L1 #L2 * -d -e -L1 -L2 [ // | #L #I #V #H destruct @@ -126,13 +126,13 @@ fact ltps_inv_atom2_aux: ∀d,e,L1,L2. ] qed. -lemma ltps_inv_atom2: ∀d,e,L1. L1 [d, e] ≫ ⋆ → L1 = ⋆. +lemma ltps_inv_atom2: ∀d,e,L1. L1 [d, e] ▶ ⋆ → L1 = ⋆. /2 width=5/ qed-. -fact ltps_inv_tps22_aux: ∀d,e,L1,L2. L1 [d, e] ≫ L2 → d = 0 → 0 < e → +fact ltps_inv_tps22_aux: ∀d,e,L1,L2. L1 [d, e] ▶ L2 → d = 0 → 0 < e → ∀K2,I,V2. L2 = K2. 𝕓{I} V2 → - ∃∃K1,V1. K1 [0, e - 1] ≫ K2 & - K2 ⊢ V1 [0, e - 1] ≫ V2 & + ∃∃K1,V1. K1 [0, e - 1] ▶ K2 & + K2 ⊢ V1 [0, e - 1] ▶ V2 & L1 = K1. 𝕓{I} V1. #d #e #L1 #L2 * -d -e -L1 -L2 [ #d #e #_ #_ #K1 #I #V1 #H destruct @@ -142,15 +142,15 @@ fact ltps_inv_tps22_aux: ∀d,e,L1,L2. L1 [d, e] ≫ L2 → d = 0 → 0 < e → ] qed. -lemma ltps_inv_tps22: ∀e,L1,K2,I,V2. L1 [0, e] ≫ K2. 𝕓{I} V2 → 0 < e → - ∃∃K1,V1. K1 [0, e - 1] ≫ K2 & K2 ⊢ V1 [0, e - 1] ≫ V2 & +lemma ltps_inv_tps22: ∀e,L1,K2,I,V2. L1 [0, e] ▶ K2. 𝕓{I} V2 → 0 < e → + ∃∃K1,V1. K1 [0, e - 1] ▶ K2 & K2 ⊢ V1 [0, e - 1] ▶ V2 & L1 = K1. 𝕓{I} V1. /2 width=5/ qed-. -fact ltps_inv_tps12_aux: ∀d,e,L1,L2. L1 [d, e] ≫ L2 → 0 < d → +fact ltps_inv_tps12_aux: ∀d,e,L1,L2. L1 [d, e] ▶ L2 → 0 < d → ∀I,K2,V2. L2 = K2. 𝕓{I} V2 → - ∃∃K1,V1. K1 [d - 1, e] ≫ K2 & - K2 ⊢ V1 [d - 1, e] ≫ V2 & + ∃∃K1,V1. K1 [d - 1, e] ▶ K2 & + K2 ⊢ V1 [d - 1, e] ▶ V2 & L1 = K1. 𝕓{I} V1. #d #e #L1 #L2 * -d -e -L1 -L2 [ #d #e #_ #I #K2 #V2 #H destruct @@ -160,9 +160,9 @@ fact ltps_inv_tps12_aux: ∀d,e,L1,L2. L1 [d, e] ≫ L2 → 0 < d → ] qed. -lemma ltps_inv_tps12: ∀L1,K2,I,V2,d,e. L1 [d, e] ≫ K2. 𝕓{I} V2 → 0 < d → - ∃∃K1,V1. K1 [d - 1, e] ≫ K2 & - K2 ⊢ V1 [d - 1, e] ≫ V2 & +lemma ltps_inv_tps12: ∀L1,K2,I,V2,d,e. L1 [d, e] ▶ K2. 𝕓{I} V2 → 0 < d → + ∃∃K1,V1. K1 [d - 1, e] ▶ K2 & + K2 ⊢ V1 [d - 1, e] ▶ V2 & L1 = K1. 𝕓{I} V1. /2 width=3/ qed-. diff --git a/matita/matita/contribs/lambda_delta/Basic_2/substitution/ltps_ldrop.ma b/matita/matita/contribs/lambda_delta/Basic_2/substitution/ltps_ldrop.ma index 11745b425..bf4e1f711 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/substitution/ltps_ldrop.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/substitution/ltps_ldrop.ma @@ -16,9 +16,9 @@ include "Basic_2/substitution/ltps.ma". (* PARALLEL SUBSTITUTION ON LOCAL ENVIRONMENTS ******************************) -lemma ltps_ldrop_conf_ge: ∀L0,L1,d1,e1. L0 [d1, e1] ≫ L1 → - ∀L2,e2. ⇓[0, e2] L0 ≡ L2 → - d1 + e1 ≤ e2 → ⇓[0, e2] L1 ≡ L2. +lemma ltps_ldrop_conf_ge: ∀L0,L1,d1,e1. L0 [d1, e1] ▶ L1 → + ∀L2,e2. ⇩[0, e2] L0 ≡ L2 → + d1 + e1 ≤ e2 → ⇩[0, e2] L1 ≡ L2. #L0 #L1 #d1 #e1 #H elim H -L0 -L1 -d1 -e1 [ #d1 #e1 #L2 #e2 #H >(ldrop_inv_atom1 … H) -H // | // @@ -33,9 +33,9 @@ lemma ltps_ldrop_conf_ge: ∀L0,L1,d1,e1. L0 [d1, e1] ≫ L1 → ] qed. -lemma ltps_ldrop_trans_ge: ∀L1,L0,d1,e1. L1 [d1, e1] ≫ L0 → - ∀L2,e2. ⇓[0, e2] L0 ≡ L2 → - d1 + e1 ≤ e2 → ⇓[0, e2] L1 ≡ L2. +lemma ltps_ldrop_trans_ge: ∀L1,L0,d1,e1. L1 [d1, e1] ▶ L0 → + ∀L2,e2. ⇩[0, e2] L0 ≡ L2 → + d1 + e1 ≤ e2 → ⇩[0, e2] L1 ≡ L2. #L1 #L0 #d1 #e1 #H elim H -L1 -L0 -d1 -e1 [ #d1 #e1 #L2 #e2 #H >(ldrop_inv_atom1 … H) -H // | // @@ -50,9 +50,9 @@ lemma ltps_ldrop_trans_ge: ∀L1,L0,d1,e1. L1 [d1, e1] ≫ L0 → ] qed. -lemma ltps_ldrop_conf_be: ∀L0,L1,d1,e1. L0 [d1, e1] ≫ L1 → - ∀L2,e2. ⇓[0, e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 → - ∃∃L. L2 [0, d1 + e1 - e2] ≫ L & ⇓[0, e2] L1 ≡ L. +lemma ltps_ldrop_conf_be: ∀L0,L1,d1,e1. L0 [d1, e1] ▶ L1 → + ∀L2,e2. ⇩[0, e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 → + ∃∃L. L2 [0, d1 + e1 - e2] ▶ L & ⇩[0, e2] L1 ≡ L. #L0 #L1 #d1 #e1 #H elim H -L0 -L1 -d1 -e1 [ #d1 #e1 #L2 #e2 #H >(ldrop_inv_atom1 … H) -H /2 width=3/ | normalize #L #I #V #L2 #e2 #HL2 #_ #He2 @@ -72,9 +72,9 @@ lemma ltps_ldrop_conf_be: ∀L0,L1,d1,e1. L0 [d1, e1] ≫ L1 → ] qed. -lemma ltps_ldrop_trans_be: ∀L1,L0,d1,e1. L1 [d1, e1] ≫ L0 → - ∀L2,e2. ⇓[0, e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 → - ∃∃L. L [0, d1 + e1 - e2] ≫ L2 & ⇓[0, e2] L1 ≡ L. +lemma ltps_ldrop_trans_be: ∀L1,L0,d1,e1. L1 [d1, e1] ▶ L0 → + ∀L2,e2. ⇩[0, e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 → + ∃∃L. L [0, d1 + e1 - e2] ▶ L2 & ⇩[0, e2] L1 ≡ L. #L1 #L0 #d1 #e1 #H elim H -L1 -L0 -d1 -e1 [ #d1 #e1 #L2 #e2 #H >(ldrop_inv_atom1 … H) -H /2 width=3/ | normalize #L #I #V #L2 #e2 #HL2 #_ #He2 @@ -94,9 +94,9 @@ lemma ltps_ldrop_trans_be: ∀L1,L0,d1,e1. L1 [d1, e1] ≫ L0 → ] qed. -lemma ltps_ldrop_conf_le: ∀L0,L1,d1,e1. L0 [d1, e1] ≫ L1 → - ∀L2,e2. ⇓[0, e2] L0 ≡ L2 → e2 ≤ d1 → - ∃∃L. L2 [d1 - e2, e1] ≫ L & ⇓[0, e2] L1 ≡ L. +lemma ltps_ldrop_conf_le: ∀L0,L1,d1,e1. L0 [d1, e1] ▶ L1 → + ∀L2,e2. ⇩[0, e2] L0 ≡ L2 → e2 ≤ d1 → + ∃∃L. L2 [d1 - e2, e1] ▶ L & ⇩[0, e2] L1 ≡ L. #L0 #L1 #d1 #e1 #H elim H -L0 -L1 -d1 -e1 [ #d1 #e1 #L2 #e2 #H >(ldrop_inv_atom1 … H) -H /2 width=3/ | /2 width=3/ @@ -112,9 +112,9 @@ lemma ltps_ldrop_conf_le: ∀L0,L1,d1,e1. L0 [d1, e1] ≫ L1 → ] qed. -lemma ltps_ldrop_trans_le: ∀L1,L0,d1,e1. L1 [d1, e1] ≫ L0 → - ∀L2,e2. ⇓[0, e2] L0 ≡ L2 → e2 ≤ d1 → - ∃∃L. L [d1 - e2, e1] ≫ L2 & ⇓[0, e2] L1 ≡ L. +lemma ltps_ldrop_trans_le: ∀L1,L0,d1,e1. L1 [d1, e1] ▶ L0 → + ∀L2,e2. ⇩[0, e2] L0 ≡ L2 → e2 ≤ d1 → + ∃∃L. L [d1 - e2, e1] ▶ L2 & ⇩[0, e2] L1 ≡ L. #L1 #L0 #d1 #e1 #H elim H -L1 -L0 -d1 -e1 [ #d1 #e1 #L2 #e2 #H >(ldrop_inv_atom1 … H) -H /2 width=3/ | /2 width=3/ diff --git a/matita/matita/contribs/lambda_delta/Basic_2/substitution/ltps_tps.ma b/matita/matita/contribs/lambda_delta/Basic_2/substitution/ltps_tps.ma index 8bf9f197d..473f813b6 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/substitution/ltps_tps.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/substitution/ltps_tps.ma @@ -17,9 +17,9 @@ include "Basic_2/substitution/ltps_ldrop.ma". (* PARALLEL SUBSTITUTION ON LOCAL ENVIRONMENTS ******************************) -lemma ltps_tps_conf_ge: ∀L0,T2,U2,d2,e2. L0 ⊢ T2 [d2, e2] ≫ U2 → - ∀L1,d1,e1. L0 [d1, e1] ≫ L1 → d1 + e1 ≤ d2 → - L1 ⊢ T2 [d2, e2] ≫ U2. +lemma ltps_tps_conf_ge: ∀L0,T2,U2,d2,e2. L0 ⊢ T2 [d2, e2] ▶ U2 → + ∀L1,d1,e1. L0 [d1, e1] ▶ L1 → d1 + e1 ≤ d2 → + L1 ⊢ T2 [d2, e2] ▶ U2. #L0 #T2 #U2 #d2 #e2 #H elim H -L0 -T2 -U2 -d2 -e2 [ // | #L0 #K0 #V0 #W0 #i2 #d2 #e2 #Hdi2 #Hide2 #HLK0 #HVW0 #L1 #d1 #e1 #HL01 #Hde1d2 @@ -32,10 +32,10 @@ lemma ltps_tps_conf_ge: ∀L0,T2,U2,d2,e2. L0 ⊢ T2 [d2, e2] ≫ U2 → qed. (* Basic_1: was: subst1_subst1_back *) -lemma ltps_tps_conf: ∀L0,T2,U2,d2,e2. L0 ⊢ T2 [d2, e2] ≫ U2 → - ∀L1,d1,e1. L0 [d1, e1] ≫ L1 → - ∃∃T. L1 ⊢ T2 [d2, e2] ≫ T & - L1 ⊢ U2 [d1, e1] ≫ T. +lemma ltps_tps_conf: ∀L0,T2,U2,d2,e2. L0 ⊢ T2 [d2, e2] ▶ U2 → + ∀L1,d1,e1. L0 [d1, e1] ▶ L1 → + ∃∃T. L1 ⊢ T2 [d2, e2] ▶ T & + L1 ⊢ U2 [d1, e1] ▶ T. #L0 #T2 #U2 #d2 #e2 #H elim H -L0 -T2 -U2 -d2 -e2 [ /2 width=3/ | #L0 #K0 #V0 #W0 #i2 #d2 #e2 #Hdi2 #Hide2 #HLK0 #HVW0 #L1 #d1 #e1 #HL01 @@ -64,9 +64,9 @@ lemma ltps_tps_conf: ∀L0,T2,U2,d2,e2. L0 ⊢ T2 [d2, e2] ≫ U2 → ] qed. -lemma ltps_tps_trans_ge: ∀L0,T2,U2,d2,e2. L0 ⊢ T2 [d2, e2] ≫ U2 → - ∀L1,d1,e1. L1 [d1, e1] ≫ L0 → d1 + e1 ≤ d2 → - L1 ⊢ T2 [d2, e2] ≫ U2. +lemma ltps_tps_trans_ge: ∀L0,T2,U2,d2,e2. L0 ⊢ T2 [d2, e2] ▶ U2 → + ∀L1,d1,e1. L1 [d1, e1] ▶ L0 → d1 + e1 ≤ d2 → + L1 ⊢ T2 [d2, e2] ▶ U2. #L0 #T2 #U2 #d2 #e2 #H elim H -L0 -T2 -U2 -d2 -e2 [ // | #L0 #K0 #V0 #W0 #i2 #d2 #e2 #Hdi2 #Hide2 #HLK0 #HVW0 #L1 #d1 #e1 #HL10 #Hde1d2 @@ -79,10 +79,10 @@ lemma ltps_tps_trans_ge: ∀L0,T2,U2,d2,e2. L0 ⊢ T2 [d2, e2] ≫ U2 → qed. (* Basic_1: was: subst1_subst1 *) -lemma ltps_tps_trans: ∀L0,T2,U2,d2,e2. L0 ⊢ T2 [d2, e2] ≫ U2 → - ∀L1,d1,e1. L1 [d1, e1] ≫ L0 → - ∃∃T. L1 ⊢ T2 [d2, e2] ≫ T & - L0 ⊢ T [d1, e1] ≫ U2. +lemma ltps_tps_trans: ∀L0,T2,U2,d2,e2. L0 ⊢ T2 [d2, e2] ▶ U2 → + ∀L1,d1,e1. L1 [d1, e1] ▶ L0 → + ∃∃T. L1 ⊢ T2 [d2, e2] ▶ T & + L0 ⊢ T [d1, e1] ▶ U2. #L0 #T2 #U2 #d2 #e2 #H elim H -L0 -T2 -U2 -d2 -e2 [ /2 width=3/ | #L0 #K0 #V0 #W0 #i2 #d2 #e2 #Hdi2 #Hide2 #HLK0 #HVW0 #L1 #d1 #e1 #HL10 diff --git a/matita/matita/contribs/lambda_delta/Basic_2/substitution/tps.ma b/matita/matita/contribs/lambda_delta/Basic_2/substitution/tps.ma index df69749cd..8a5dc13d0 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/substitution/tps.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/substitution/tps.ma @@ -20,7 +20,7 @@ include "Basic_2/substitution/ldrop.ma". inductive tps: nat → nat → lenv → relation term ≝ | tps_atom : ∀L,I,d,e. tps d e L (𝕒{I}) (𝕒{I}) | tps_subst: ∀L,K,V,W,i,d,e. d ≤ i → i < d + e → - ⇓[0, i] L ≡ K. 𝕓{Abbr} V → ⇑[0, i + 1] V ≡ W → tps d e L (#i) W + ⇩[0, i] L ≡ K. 𝕓{Abbr} V → ⇧[0, i + 1] V ≡ W → tps d e L (#i) W | tps_bind : ∀L,I,V1,V2,T1,T2,d,e. tps d e L V1 V2 → tps (d + 1) e (L. 𝕓{I} V2) T1 T2 → tps d e L (𝕓{I} V1. T1) (𝕓{I} V2. T2) @@ -34,8 +34,8 @@ interpretation "parallel substritution (term)" (* Basic properties *********************************************************) -lemma tps_lsubs_conf: ∀L1,T1,T2,d,e. L1 ⊢ T1 [d, e] ≫ T2 → - ∀L2. L1 [d, e] ≼ L2 → L2 ⊢ T1 [d, e] ≫ T2. +lemma tps_lsubs_conf: ∀L1,T1,T2,d,e. L1 ⊢ T1 [d, e] ▶ T2 → + ∀L2. L1 [d, e] ≼ L2 → L2 ⊢ T1 [d, e] ▶ T2. #L1 #T1 #T2 #d #e #H elim H -L1 -T1 -T2 -d -e [ // | #L1 #K1 #V #W #i #d #e #Hdi #Hide #HLK1 #HVW #L2 #HL12 @@ -45,14 +45,14 @@ lemma tps_lsubs_conf: ∀L1,T1,T2,d,e. L1 ⊢ T1 [d, e] ≫ T2 → ] qed. -lemma tps_refl: ∀T,L,d,e. L ⊢ T [d, e] ≫ T. +lemma tps_refl: ∀T,L,d,e. L ⊢ T [d, e] ▶ T. #T elim T -T // #I elim I -I /2 width=1/ qed. (* Basic_1: was: subst1_ex *) -lemma tps_full: ∀K,V,T1,L,d. ⇓[0, d] L ≡ (K. 𝕓{Abbr} V) → - ∃∃T2,T. L ⊢ T1 [d, 1] ≫ T2 & ⇑[d, 1] T ≡ T2. +lemma tps_full: ∀K,V,T1,L,d. ⇩[0, d] L ≡ (K. 𝕓{Abbr} V) → + ∃∃T2,T. L ⊢ T1 [d, 1] ▶ T2 & ⇧[d, 1] T ≡ T2. #K #V #T1 elim T1 -T1 [ * #i #L #d #HLK /2 width=4/ elim (lt_or_eq_or_gt i d) #Hid /3 width=4/ @@ -67,9 +67,9 @@ lemma tps_full: ∀K,V,T1,L,d. ⇓[0, d] L ≡ (K. 𝕓{Abbr} V) → ] qed. -lemma tps_weak: ∀L,T1,T2,d1,e1. L ⊢ T1 [d1, e1] ≫ T2 → +lemma tps_weak: ∀L,T1,T2,d1,e1. L ⊢ T1 [d1, e1] ▶ T2 → ∀d2,e2. d2 ≤ d1 → d1 + e1 ≤ d2 + e2 → - L ⊢ T1 [d2, e2] ≫ T2. + L ⊢ T1 [d2, e2] ▶ T2. #L #T1 #T2 #d1 #e1 #H elim H -L -T1 -T2 -d1 -e1 [ // | #L #K #V #W #i #d1 #e1 #Hid1 #Hide1 #HLK #HVW #d2 #e2 #Hd12 #Hde12 @@ -81,7 +81,7 @@ lemma tps_weak: ∀L,T1,T2,d1,e1. L ⊢ T1 [d1, e1] ≫ T2 → qed. lemma tps_weak_top: ∀L,T1,T2,d,e. - L ⊢ T1 [d, e] ≫ T2 → L ⊢ T1 [d, |L| - d] ≫ T2. + L ⊢ T1 [d, e] ▶ T2 → L ⊢ T1 [d, |L| - d] ▶ T2. #L #T1 #T2 #d #e #H elim H -L -T1 -T2 -d -e [ // | #L #K #V #W #i #d #e #Hdi #_ #HLK #HVW @@ -93,14 +93,14 @@ lemma tps_weak_top: ∀L,T1,T2,d,e. qed. lemma tps_weak_all: ∀L,T1,T2,d,e. - L ⊢ T1 [d, e] ≫ T2 → L ⊢ T1 [0, |L|] ≫ T2. + L ⊢ T1 [d, e] ▶ T2 → L ⊢ T1 [0, |L|] ▶ T2. #L #T1 #T2 #d #e #HT12 lapply (tps_weak … HT12 0 (d + e) ? ?) -HT12 // #HT12 lapply (tps_weak_top … HT12) // qed. -lemma tps_split_up: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ≫ T2 → ∀i. d ≤ i → i ≤ d + e → - ∃∃T. L ⊢ T1 [d, i - d] ≫ T & L ⊢ T [i, d + e - i] ≫ T2. +lemma tps_split_up: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ▶ T2 → ∀i. d ≤ i → i ≤ d + e → + ∃∃T. L ⊢ T1 [d, i - d] ▶ T & L ⊢ T [i, d + e - i] ▶ T2. #L #T1 #T2 #d #e #H elim H -L -T1 -T2 -d -e [ /2 width=3/ | #L #K #V #W #i #d #e #Hdi #Hide #HLK #HVW #j #Hdj #Hjde @@ -124,11 +124,11 @@ qed. (* Basic inversion lemmas ***************************************************) -fact tps_inv_atom1_aux: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ≫ T2 → ∀I. T1 = 𝕒{I} → +fact tps_inv_atom1_aux: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ▶ T2 → ∀I. T1 = 𝕒{I} → T2 = 𝕒{I} ∨ ∃∃K,V,i. d ≤ i & i < d + e & - ⇓[O, i] L ≡ K. 𝕓{Abbr} V & - ⇑[O, i + 1] V ≡ T2 & + ⇩[O, i] L ≡ K. 𝕓{Abbr} V & + ⇧[O, i + 1] V ≡ T2 & I = LRef i. #L #T1 #T2 #d #e * -L -T1 -T2 -d -e [ #L #I #d #e #J #H destruct /2 width=1/ @@ -138,43 +138,43 @@ fact tps_inv_atom1_aux: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ≫ T2 → ∀I. T1 = ] qed. -lemma tps_inv_atom1: ∀L,T2,I,d,e. L ⊢ 𝕒{I} [d, e] ≫ T2 → +lemma tps_inv_atom1: ∀L,T2,I,d,e. L ⊢ 𝕒{I} [d, e] ▶ T2 → T2 = 𝕒{I} ∨ ∃∃K,V,i. d ≤ i & i < d + e & - ⇓[O, i] L ≡ K. 𝕓{Abbr} V & - ⇑[O, i + 1] V ≡ T2 & + ⇩[O, i] L ≡ K. 𝕓{Abbr} V & + ⇧[O, i + 1] V ≡ T2 & I = LRef i. /2 width=3/ qed-. (* Basic_1: was: subst1_gen_sort *) -lemma tps_inv_sort1: ∀L,T2,k,d,e. L ⊢ ⋆k [d, e] ≫ T2 → T2 = ⋆k. +lemma tps_inv_sort1: ∀L,T2,k,d,e. L ⊢ ⋆k [d, e] ▶ T2 → T2 = ⋆k. #L #T2 #k #d #e #H elim (tps_inv_atom1 … H) -H // * #K #V #i #_ #_ #_ #_ #H destruct qed-. (* Basic_1: was: subst1_gen_lref *) -lemma tps_inv_lref1: ∀L,T2,i,d,e. L ⊢ #i [d, e] ≫ T2 → +lemma tps_inv_lref1: ∀L,T2,i,d,e. L ⊢ #i [d, e] ▶ T2 → T2 = #i ∨ ∃∃K,V. d ≤ i & i < d + e & - ⇓[O, i] L ≡ K. 𝕓{Abbr} V & - ⇑[O, i + 1] V ≡ T2. + ⇩[O, i] L ≡ K. 𝕓{Abbr} V & + ⇧[O, i + 1] V ≡ T2. #L #T2 #i #d #e #H elim (tps_inv_atom1 … H) -H /2 width=1/ * #K #V #j #Hdj #Hjde #HLK #HVT2 #H destruct /3 width=4/ qed-. -lemma tps_inv_gref1: ∀L,T2,p,d,e. L ⊢ §p [d, e] ≫ T2 → T2 = §p. +lemma tps_inv_gref1: ∀L,T2,p,d,e. L ⊢ §p [d, e] ▶ T2 → T2 = §p. #L #T2 #p #d #e #H elim (tps_inv_atom1 … H) -H // * #K #V #i #_ #_ #_ #_ #H destruct qed-. -fact tps_inv_bind1_aux: ∀d,e,L,U1,U2. L ⊢ U1 [d, e] ≫ U2 → +fact tps_inv_bind1_aux: ∀d,e,L,U1,U2. L ⊢ U1 [d, e] ▶ U2 → ∀I,V1,T1. U1 = 𝕓{I} V1. T1 → - ∃∃V2,T2. L ⊢ V1 [d, e] ≫ V2 & - L. 𝕓{I} V2 ⊢ T1 [d + 1, e] ≫ T2 & + ∃∃V2,T2. L ⊢ V1 [d, e] ▶ V2 & + L. 𝕓{I} V2 ⊢ T1 [d + 1, e] ▶ T2 & U2 = 𝕓{I} V2. T2. #d #e #L #U1 #U2 * -d -e -L -U1 -U2 [ #L #k #d #e #I #V1 #T1 #H destruct @@ -184,15 +184,15 @@ fact tps_inv_bind1_aux: ∀d,e,L,U1,U2. L ⊢ U1 [d, e] ≫ U2 → ] qed. -lemma tps_inv_bind1: ∀d,e,L,I,V1,T1,U2. L ⊢ 𝕓{I} V1. T1 [d, e] ≫ U2 → - ∃∃V2,T2. L ⊢ V1 [d, e] ≫ V2 & - L. 𝕓{I} V2 ⊢ T1 [d + 1, e] ≫ T2 & +lemma tps_inv_bind1: ∀d,e,L,I,V1,T1,U2. L ⊢ 𝕓{I} V1. T1 [d, e] ▶ U2 → + ∃∃V2,T2. L ⊢ V1 [d, e] ▶ V2 & + L. 𝕓{I} V2 ⊢ T1 [d + 1, e] ▶ T2 & U2 = 𝕓{I} V2. T2. /2 width=3/ qed-. -fact tps_inv_flat1_aux: ∀d,e,L,U1,U2. L ⊢ U1 [d, e] ≫ U2 → +fact tps_inv_flat1_aux: ∀d,e,L,U1,U2. L ⊢ U1 [d, e] ▶ U2 → ∀I,V1,T1. U1 = 𝕗{I} V1. T1 → - ∃∃V2,T2. L ⊢ V1 [d, e] ≫ V2 & L ⊢ T1 [d, e] ≫ T2 & + ∃∃V2,T2. L ⊢ V1 [d, e] ▶ V2 & L ⊢ T1 [d, e] ▶ T2 & U2 = 𝕗{I} V2. T2. #d #e #L #U1 #U2 * -d -e -L -U1 -U2 [ #L #k #d #e #I #V1 #T1 #H destruct @@ -202,12 +202,12 @@ fact tps_inv_flat1_aux: ∀d,e,L,U1,U2. L ⊢ U1 [d, e] ≫ U2 → ] qed. -lemma tps_inv_flat1: ∀d,e,L,I,V1,T1,U2. L ⊢ 𝕗{I} V1. T1 [d, e] ≫ U2 → - ∃∃V2,T2. L ⊢ V1 [d, e] ≫ V2 & L ⊢ T1 [d, e] ≫ T2 & +lemma tps_inv_flat1: ∀d,e,L,I,V1,T1,U2. L ⊢ 𝕗{I} V1. T1 [d, e] ▶ U2 → + ∃∃V2,T2. L ⊢ V1 [d, e] ▶ V2 & L ⊢ T1 [d, e] ▶ T2 & U2 = 𝕗{I} V2. T2. /2 width=3/ qed-. -fact tps_inv_refl_O2_aux: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ≫ T2 → e = 0 → T1 = T2. +fact tps_inv_refl_O2_aux: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ▶ T2 → e = 0 → T1 = T2. #L #T1 #T2 #d #e #H elim H -L -T1 -T2 -d -e [ // | #L #K #V #W #i #d #e #Hdi #Hide #_ #_ #H destruct @@ -218,12 +218,12 @@ fact tps_inv_refl_O2_aux: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ≫ T2 → e = 0 → T ] qed. -lemma tps_inv_refl_O2: ∀L,T1,T2,d. L ⊢ T1 [d, 0] ≫ T2 → T1 = T2. +lemma tps_inv_refl_O2: ∀L,T1,T2,d. L ⊢ T1 [d, 0] ▶ T2 → T1 = T2. /2 width=6/ qed-. (* Basic forward lemmas *****************************************************) -lemma tps_fwd_tw: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ≫ T2 → #[T1] ≤ #[T2]. +lemma tps_fwd_tw: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ▶ T2 → #[T1] ≤ #[T2]. #L #T1 #T2 #d #e #H elim H -L -T1 -T2 -d -e normalize /3 by monotonic_le_plus_l, le_plus/ (**) (* just /3 width=1/ is too slow *) qed-. diff --git a/matita/matita/contribs/lambda_delta/Basic_2/substitution/tps_lift.ma b/matita/matita/contribs/lambda_delta/Basic_2/substitution/tps_lift.ma index 3b1453c37..78c324e46 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/substitution/tps_lift.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/substitution/tps_lift.ma @@ -19,8 +19,8 @@ include "Basic_2/substitution/tps.ma". (* Advanced inversion lemmas ************************************************) -fact tps_inv_refl_SO2_aux: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ≫ T2 → e = 1 → - ∀K,V. ⇓[0, d] L ≡ K. 𝕓{Abst} V → T1 = T2. +fact tps_inv_refl_SO2_aux: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ▶ T2 → e = 1 → + ∀K,V. ⇩[0, d] L ≡ K. 𝕓{Abst} V → T1 = T2. #L #T1 #T2 #d #e #H elim H -L -T1 -T2 -d -e [ // | #L #K0 #V0 #W #i #d #e #Hdi #Hide #HLK0 #_ #H destruct @@ -33,18 +33,18 @@ fact tps_inv_refl_SO2_aux: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ≫ T2 → e = 1 → ] qed. -lemma tps_inv_refl_SO2: ∀L,T1,T2,d. L ⊢ T1 [d, 1] ≫ T2 → - ∀K,V. ⇓[0, d] L ≡ K. 𝕓{Abst} V → T1 = T2. +lemma tps_inv_refl_SO2: ∀L,T1,T2,d. L ⊢ T1 [d, 1] ▶ T2 → + ∀K,V. ⇩[0, d] L ≡ K. 𝕓{Abst} V → T1 = T2. /2 width=8/ qed-. (* Relocation properties ****************************************************) (* Basic_1: was: subst1_lift_lt *) -lemma tps_lift_le: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ≫ T2 → - ∀L,U1,U2,d,e. ⇓[d, e] L ≡ K → - ⇑[d, e] T1 ≡ U1 → ⇑[d, e] T2 ≡ U2 → +lemma tps_lift_le: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ▶ T2 → + ∀L,U1,U2,d,e. ⇩[d, e] L ≡ K → + ⇧[d, e] T1 ≡ U1 → ⇧[d, e] T2 ≡ U2 → dt + et ≤ d → - L ⊢ U1 [dt, et] ≫ U2. + L ⊢ U1 [dt, et] ▶ U2. #K #T1 #T2 #dt #et #H elim H -K -T1 -T2 -dt -et [ #K #I #dt #et #L #U1 #U2 #d #e #_ #H1 #H2 #_ >(lift_mono … H1 … H2) -H1 -H2 // @@ -65,11 +65,11 @@ lemma tps_lift_le: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ≫ T2 → ] qed. -lemma tps_lift_be: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ≫ T2 → - ∀L,U1,U2,d,e. ⇓[d, e] L ≡ K → - ⇑[d, e] T1 ≡ U1 → ⇑[d, e] T2 ≡ U2 → +lemma tps_lift_be: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ▶ T2 → + ∀L,U1,U2,d,e. ⇩[d, e] L ≡ K → + ⇧[d, e] T1 ≡ U1 → ⇧[d, e] T2 ≡ U2 → dt ≤ d → d ≤ dt + et → - L ⊢ U1 [dt, et + e] ≫ U2. + L ⊢ U1 [dt, et + e] ▶ U2. #K #T1 #T2 #dt #et #H elim H -K -T1 -T2 -dt -et [ #K #I #dt #et #L #U1 #U2 #d #e #_ #H1 #H2 #_ #_ >(lift_mono … H1 … H2) -H1 -H2 // @@ -98,11 +98,11 @@ lemma tps_lift_be: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ≫ T2 → qed. (* Basic_1: was: subst1_lift_ge *) -lemma tps_lift_ge: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ≫ T2 → - ∀L,U1,U2,d,e. ⇓[d, e] L ≡ K → - ⇑[d, e] T1 ≡ U1 → ⇑[d, e] T2 ≡ U2 → +lemma tps_lift_ge: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ▶ T2 → + ∀L,U1,U2,d,e. ⇩[d, e] L ≡ K → + ⇧[d, e] T1 ≡ U1 → ⇧[d, e] T2 ≡ U2 → d ≤ dt → - L ⊢ U1 [dt + e, et] ≫ U2. + L ⊢ U1 [dt + e, et] ▶ U2. #K #T1 #T2 #dt #et #H elim H -K -T1 -T2 -dt -et [ #K #I #dt #et #L #U1 #U2 #d #e #_ #H1 #H2 #_ >(lift_mono … H1 … H2) -H1 -H2 // @@ -122,10 +122,10 @@ lemma tps_lift_ge: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ≫ T2 → qed. (* Basic_1: was: subst1_gen_lift_lt *) -lemma tps_inv_lift1_le: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ≫ U2 → - ∀K,d,e. ⇓[d, e] L ≡ K → ∀T1. ⇑[d, e] T1 ≡ U1 → +lemma tps_inv_lift1_le: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ▶ U2 → + ∀K,d,e. ⇩[d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → dt + et ≤ d → - ∃∃T2. K ⊢ T1 [dt, et] ≫ T2 & ⇑[d, e] T2 ≡ U2. + ∃∃T2. K ⊢ T1 [dt, et] ▶ T2 & ⇧[d, e] T2 ≡ U2. #L #U1 #U2 #dt #et #H elim H -L -U1 -U2 -dt -et [ #L * #i #dt #et #K #d #e #_ #T1 #H #_ [ lapply (lift_inv_sort2 … H) -H #H destruct /2 width=3/ @@ -149,10 +149,10 @@ lemma tps_inv_lift1_le: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ≫ U2 → ] qed. -lemma tps_inv_lift1_be: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ≫ U2 → - ∀K,d,e. ⇓[d, e] L ≡ K → ∀T1. ⇑[d, e] T1 ≡ U1 → +lemma tps_inv_lift1_be: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ▶ U2 → + ∀K,d,e. ⇩[d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → dt ≤ d → d + e ≤ dt + et → - ∃∃T2. K ⊢ T1 [dt, et - e] ≫ T2 & ⇑[d, e] T2 ≡ U2. + ∃∃T2. K ⊢ T1 [dt, et - e] ▶ T2 & ⇧[d, e] T2 ≡ U2. #L #U1 #U2 #dt #et #H elim H -L -U1 -U2 -dt -et [ #L * #i #dt #et #K #d #e #_ #T1 #H #_ [ lapply (lift_inv_sort2 … H) -H #H destruct /2 width=3/ @@ -187,10 +187,10 @@ lemma tps_inv_lift1_be: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ≫ U2 → qed. (* Basic_1: was: subst1_gen_lift_ge *) -lemma tps_inv_lift1_ge: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ≫ U2 → - ∀K,d,e. ⇓[d, e] L ≡ K → ∀T1. ⇑[d, e] T1 ≡ U1 → +lemma tps_inv_lift1_ge: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ▶ U2 → + ∀K,d,e. ⇩[d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → d + e ≤ dt → - ∃∃T2. K ⊢ T1 [dt - e, et] ≫ T2 & ⇑[d, e] T2 ≡ U2. + ∃∃T2. K ⊢ T1 [dt - e, et] ▶ T2 & ⇧[d, e] T2 ≡ U2. #L #U1 #U2 #dt #et #H elim H -L -U1 -U2 -dt -et [ #L * #i #dt #et #K #d #e #_ #T1 #H #_ [ lapply (lift_inv_sort2 … H) -H #H destruct /2 width=3/ @@ -221,7 +221,7 @@ qed. (* Basic_1: was: subst1_gen_lift_eq *) lemma tps_inv_lift1_eq: ∀L,U1,U2,d,e. - L ⊢ U1 [d, e] ≫ U2 → ∀T1. ⇑[d, e] T1 ≡ U1 → U1 = U2. + L ⊢ U1 [d, e] ▶ U2 → ∀T1. ⇧[d, e] T1 ≡ U1 → U1 = U2. #L #U1 #U2 #d #e #H elim H -L -U1 -U2 -d -e [ // | #L #K #V #W #i #d #e #Hdi #Hide #_ #_ #T1 #H @@ -253,10 +253,10 @@ qed. (le d i) -> (lt i (plus d h)) -> (EX u1 | t1 = (lift (minus (plus d h) (S i)) (S i) u1)). *) -lemma tps_inv_lift1_up: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ≫ U2 → - ∀K,d,e. ⇓[d, e] L ≡ K → ∀T1. ⇑[d, e] T1 ≡ U1 → +lemma tps_inv_lift1_up: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ▶ U2 → + ∀K,d,e. ⇩[d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → d ≤ dt → dt ≤ d + e → d + e ≤ dt + et → - ∃∃T2. K ⊢ T1 [d, dt + et - (d + e)] ≫ T2 & ⇑[d, e] T2 ≡ U2. + ∃∃T2. K ⊢ T1 [d, dt + et - (d + e)] ▶ T2 & ⇧[d, e] T2 ≡ U2. #L #U1 #U2 #dt #et #HU12 #K #d #e #HLK #T1 #HTU1 #Hddt #Hdtde #Hdedet elim (tps_split_up … HU12 (d + e) ? ?) -HU12 // -Hdedet #U #HU1 #HU2 lapply (tps_weak … HU1 d e ? ?) -HU1 // [ >commutative_plus /2 width=1/ ] -Hddt -Hdtde #HU1 @@ -264,10 +264,10 @@ lapply (tps_inv_lift1_eq … HU1 … HTU1) -HU1 #HU1 destruct elim (tps_inv_lift1_ge … HU2 … HLK … HTU1 ?) -U -L // (lifts_inv_nil … HV12) -HV12 // diff --git a/matita/matita/contribs/lambda_delta/Basic_2/unfold/lifts.ma b/matita/matita/contribs/lambda_delta/Basic_2/unfold/lifts.ma index 43859f108..4e005842b 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/unfold/lifts.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/unfold/lifts.ma @@ -25,36 +25,37 @@ let rec ss (des:list2 nat nat) ≝ match des with inductive lifts: list2 nat nat → relation term ≝ | lifts_nil : ∀T. lifts ⟠ T T | lifts_cons: ∀T1,T,T2,des,d,e. - ⇑[d,e] T1 ≡ T → lifts des T T2 → lifts ({d, e} :: des) T1 T2 + ⇧[d,e] T1 ≡ T → lifts des T T2 → lifts ({d, e} :: des) T1 T2 . -interpretation "generic relocation" 'RLift des T1 T2 = (lifts des T1 T2). +interpretation "generic relocation" + 'RLiftStar des T1 T2 = (lifts des T1 T2). (* Basic inversion lemmas ***************************************************) -fact lifts_inv_nil_aux: ∀T1,T2,des. ⇑[des] T1 ≡ T2 → des = ⟠ → T1 = T2. +fact lifts_inv_nil_aux: ∀T1,T2,des. ⇧*[des] T1 ≡ T2 → des = ⟠ → T1 = T2. #T1 #T2 #des * -T1 -T2 -des // #T1 #T #T2 #d #e #des #_ #_ #H destruct qed. -lemma lifts_inv_nil: ∀T1,T2. ⇑[⟠] T1 ≡ T2 → T1 = T2. +lemma lifts_inv_nil: ∀T1,T2. ⇧*[⟠] T1 ≡ T2 → T1 = T2. /2 width=3/ qed-. -fact lifts_inv_cons_aux: ∀T1,T2,des. ⇑[des] T1 ≡ T2 → +fact lifts_inv_cons_aux: ∀T1,T2,des. ⇧*[des] T1 ≡ T2 → ∀d,e,tl. des = {d, e} :: tl → - ∃∃T. ⇑[d, e] T1 ≡ T & ⇑[tl] T ≡ T2. + ∃∃T. ⇧[d, e] T1 ≡ T & ⇧*[tl] T ≡ T2. #T1 #T2 #des * -T1 -T2 -des [ #T #d #e #tl #H destruct | #T1 #T #T2 #des #d #e #HT1 #HT2 #hd #he #tl #H destruct /2 width=3/ qed. -lemma lifts_inv_cons: ∀T1,T2,d,e,des. ⇑[{d, e} :: des] T1 ≡ T2 → - ∃∃T. ⇑[d, e] T1 ≡ T & ⇑[des] T ≡ T2. +lemma lifts_inv_cons: ∀T1,T2,d,e,des. ⇧*[{d, e} :: des] T1 ≡ T2 → + ∃∃T. ⇧[d, e] T1 ≡ T & ⇧*[des] T ≡ T2. /2 width=3/ qed-. -lemma lifts_inv_bind1: ∀I,T2,des,V1,U1. ⇑[des] 𝕓{I} V1. U1 ≡ T2 → - ∃∃V2,U2. ⇑[des] V1 ≡ V2 & ⇑[ss des] U1 ≡ U2 & +lemma lifts_inv_bind1: ∀I,T2,des,V1,U1. ⇧*[des] 𝕓{I} V1. U1 ≡ T2 → + ∃∃V2,U2. ⇧*[des] V1 ≡ V2 & ⇧*[ss des] U1 ≡ U2 & T2 = 𝕓{I} V2. U2. #I #T2 #des elim des -des [ #V1 #U1 #H @@ -67,8 +68,8 @@ lemma lifts_inv_bind1: ∀I,T2,des,V1,U1. ⇑[des] 𝕓{I} V1. U1 ≡ T2 → ] qed-. -lemma lifts_inv_flat1: ∀I,T2,des,V1,U1. ⇑[des] 𝕗{I} V1. U1 ≡ T2 → - ∃∃V2,U2. ⇑[des] V1 ≡ V2 & ⇑[des] U1 ≡ U2 & +lemma lifts_inv_flat1: ∀I,T2,des,V1,U1. ⇧*[des] 𝕗{I} V1. U1 ≡ T2 → + ∃∃V2,U2. ⇧*[des] V1 ≡ V2 & ⇧*[des] U1 ≡ U2 & T2 = 𝕗{I} V2. U2. #I #T2 #des elim des -des [ #V1 #U1 #H @@ -83,19 +84,19 @@ qed-. (* Basic forward lemmas *****************************************************) -lemma lifts_simple_dx: ∀T1,T2,des. ⇑[des] T1 ≡ T2 → 𝕊[T1] → 𝕊[T2]. +lemma lifts_simple_dx: ∀T1,T2,des. ⇧*[des] T1 ≡ T2 → 𝕊[T1] → 𝕊[T2]. #T1 #T2 #des #H elim H -T1 -T2 -des // /3 width=5 by lift_simple_dx/ qed-. -lemma lifts_simple_sn: ∀T1,T2,des. ⇑[des] T1 ≡ T2 → 𝕊[T2] → 𝕊[T1]. +lemma lifts_simple_sn: ∀T1,T2,des. ⇧*[des] T1 ≡ T2 → 𝕊[T2] → 𝕊[T1]. #T1 #T2 #des #H elim H -T1 -T2 -des // /3 width=5 by lift_simple_sn/ qed-. (* Basic properties *********************************************************) -lemma lifts_bind: ∀I,T2,V1,V2,des. ⇑[des] V1 ≡ V2 → - ∀T1. ⇑[ss des] T1 ≡ T2 → - ⇑[des] 𝕓{I} V1. T1 ≡ 𝕓{I} V2. T2. +lemma lifts_bind: ∀I,T2,V1,V2,des. ⇧*[des] V1 ≡ V2 → + ∀T1. ⇧*[ss des] T1 ≡ T2 → + ⇧*[des] 𝕓{I} V1. T1 ≡ 𝕓{I} V2. T2. #I #T2 #V1 #V2 #des #H elim H -V1 -V2 -des [ #V #T1 #H >(lifts_inv_nil … H) -H // | #V1 #V #V2 #des #d #e #HV1 #_ #IHV #T1 #H @@ -103,9 +104,9 @@ lemma lifts_bind: ∀I,T2,V1,V2,des. ⇑[des] V1 ≡ V2 → ] qed. -lemma lifts_flat: ∀I,T2,V1,V2,des. ⇑[des] V1 ≡ V2 → - ∀T1. ⇑[des] T1 ≡ T2 → - ⇑[des] 𝕗{I} V1. T1 ≡ 𝕗{I} V2. T2. +lemma lifts_flat: ∀I,T2,V1,V2,des. ⇧*[des] V1 ≡ V2 → + ∀T1. ⇧*[des] T1 ≡ T2 → + ⇧*[des] 𝕗{I} V1. T1 ≡ 𝕗{I} V2. T2. #I #T2 #V1 #V2 #des #H elim H -V1 -V2 -des [ #V #T1 #H >(lifts_inv_nil … H) -H // | #V1 #V #V2 #des #d #e #HV1 #_ #IHV #T1 #H @@ -113,7 +114,7 @@ lemma lifts_flat: ∀I,T2,V1,V2,des. ⇑[des] V1 ≡ V2 → ] qed. -lemma lifts_total: ∀des,T1. ∃T2. ⇑[des] T1 ≡ T2. +lemma lifts_total: ∀des,T1. ∃T2. ⇧*[des] T1 ≡ T2. #des elim des -des /2 width=2/ #d #e #des #IH #T1 elim (lift_total T1 d e) #T #HT1 diff --git a/matita/matita/contribs/lambda_delta/Basic_2/unfold/lifts_vector.ma b/matita/matita/contribs/lambda_delta/Basic_2/unfold/lifts_vector.ma index a40736142..3032bc476 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/unfold/lifts_vector.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/unfold/lifts_vector.ma @@ -20,23 +20,23 @@ include "Basic_2/unfold/lifts.ma". inductive liftsv (des:list2 nat nat) : relation (list term) ≝ | liftsv_nil : liftsv des ◊ ◊ | liftsv_cons: ∀T1s,T2s,T1,T2. - ⇑[des] T1 ≡ T2 → liftsv des T1s T2s → + ⇧*[des] T1 ≡ T2 → liftsv des T1s T2s → liftsv des (T1 :: T1s) (T2 :: T2s) . interpretation "generic relocation (vector)" - 'RLift des T1s T2s = (liftsv des T1s T2s). + 'RLiftStar des T1s T2s = (liftsv des T1s T2s). (* Basic inversion lemmas ***************************************************) -axiom lifts_inv_applv1: ∀V1s,U1,T2,des. ⇑[des] Ⓐ V1s. U1 ≡ T2 → - ∃∃V2s,U2. ⇑[des] V1s ≡ V2s & ⇑[des] U1 ≡ U2 & +axiom lifts_inv_applv1: ∀V1s,U1,T2,des. ⇧*[des] Ⓐ V1s. U1 ≡ T2 → + ∃∃V2s,U2. ⇧*[des] V1s ≡ V2s & ⇧*[des] U1 ≡ U2 & T2 = Ⓐ V2s. U2. (* Basic properties *********************************************************) -lemma liftsv_applv: ∀V1s,V2s,des. ⇑[des] V1s ≡ V2s → - ∀T1,T2. ⇑[des] T1 ≡ T2 → - ⇑[des] Ⓐ V1s. T1 ≡ Ⓐ V2s. T2. +lemma liftsv_applv: ∀V1s,V2s,des. ⇧*[des] V1s ≡ V2s → + ∀T1,T2. ⇧*[des] T1 ≡ T2 → + ⇧*[des] Ⓐ V1s. T1 ≡ Ⓐ V2s. T2. #V1s #V2s #des #H elim H -V1s -V2s // /3 width=1/ qed. diff --git a/matita/matita/contribs/lambda_delta/Basic_2/unfold/ltpss.ma b/matita/matita/contribs/lambda_delta/Basic_2/unfold/ltpss.ma index 7c86262d9..6ede048c5 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/unfold/ltpss.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/unfold/ltpss.ma @@ -26,46 +26,46 @@ interpretation "partial unfold (local environment)" (* Basic eliminators ********************************************************) lemma ltpss_ind: ∀d,e,L1. ∀R:predicate lenv. R L1 → - (∀L,L2. L1 [d, e] ≫* L → L [d, e] ≫ L2 → R L → R L2) → - ∀L2. L1 [d, e] ≫* L2 → R L2. + (∀L,L2. L1 [d, e] ▶* L → L [d, e] ▶ L2 → R L → R L2) → + ∀L2. L1 [d, e] ▶* L2 → R L2. #d #e #L1 #R #HL1 #IHL1 #L2 #HL12 @(TC_star_ind … HL1 IHL1 … HL12) // qed-. (* Basic properties *********************************************************) lemma ltpss_strap: ∀L1,L,L2,d,e. - L1 [d, e] ≫ L → L [d, e] ≫* L2 → L1 [d, e] ≫* L2. + L1 [d, e] ▶ L → L [d, e] ▶* L2 → L1 [d, e] ▶* L2. /2 width=3/ qed. -lemma ltpss_refl: ∀L,d,e. L [d, e] ≫* L. +lemma ltpss_refl: ∀L,d,e. L [d, e] ▶* L. /2 width=1/ qed. (* Basic inversion lemmas ***************************************************) -lemma ltpss_inv_refl_O2: ∀d,L1,L2. L1 [d, 0] ≫* L2 → L1 = L2. +lemma ltpss_inv_refl_O2: ∀d,L1,L2. L1 [d, 0] ▶* L2 → L1 = L2. #d #L1 #L2 #H @(ltpss_ind … H) -L2 // #L #L2 #_ #HL2 #IHL <(ltps_inv_refl_O2 … HL2) -HL2 // qed-. -lemma ltpss_inv_atom1: ∀d,e,L2. ⋆ [d, e] ≫* L2 → L2 = ⋆. +lemma ltpss_inv_atom1: ∀d,e,L2. ⋆ [d, e] ▶* L2 → L2 = ⋆. #d #e #L2 #H @(ltpss_ind … H) -L2 // #L #L2 #_ #HL2 #IHL destruct >(ltps_inv_atom1 … HL2) -HL2 // qed-. -fact ltpss_inv_atom2_aux: ∀d,e,L1,L2. L1 [d, e] ≫* L2 → L2 = ⋆ → L1 = ⋆. +fact ltpss_inv_atom2_aux: ∀d,e,L1,L2. L1 [d, e] ▶* L2 → L2 = ⋆ → L1 = ⋆. #d #e #L1 #L2 #H @(ltpss_ind … H) -L2 // #L2 #L #_ #HL2 #IHL2 #H destruct lapply (ltps_inv_atom2 … HL2) -HL2 /2 width=1/ qed. -lemma ltpss_inv_atom2: ∀d,e,L1. L1 [d, e] ≫* ⋆ → L1 = ⋆. +lemma ltpss_inv_atom2: ∀d,e,L1. L1 [d, e] ▶* ⋆ → L1 = ⋆. /2 width=5/ qed-. (* -fact ltps_inv_tps22_aux: ∀d,e,L1,L2. L1 [d, e] ≫ L2 → d = 0 → 0 < e → +fact ltps_inv_tps22_aux: ∀d,e,L1,L2. L1 [d, e] ▶ L2 → d = 0 → 0 < e → ∀K2,I,V2. L2 = K2. 𝕓{I} V2 → - ∃∃K1,V1. K1 [0, e - 1] ≫ K2 & - K2 ⊢ V1 [0, e - 1] ≫ V2 & + ∃∃K1,V1. K1 [0, e - 1] ▶ K2 & + K2 ⊢ V1 [0, e - 1] ▶ V2 & L1 = K1. 𝕓{I} V1. #d #e #L1 #L2 * -d e L1 L2 [ #d #e #_ #_ #K1 #I #V1 #H destruct @@ -75,15 +75,15 @@ fact ltps_inv_tps22_aux: ∀d,e,L1,L2. L1 [d, e] ≫ L2 → d = 0 → 0 < e → ] qed. -lemma ltps_inv_tps22: ∀e,L1,K2,I,V2. L1 [0, e] ≫ K2. 𝕓{I} V2 → 0 < e → - ∃∃K1,V1. K1 [0, e - 1] ≫ K2 & K2 ⊢ V1 [0, e - 1] ≫ V2 & +lemma ltps_inv_tps22: ∀e,L1,K2,I,V2. L1 [0, e] ▶ K2. 𝕓{I} V2 → 0 < e → + ∃∃K1,V1. K1 [0, e - 1] ▶ K2 & K2 ⊢ V1 [0, e - 1] ▶ V2 & L1 = K1. 𝕓{I} V1. /2 width=5/ qed. -fact ltps_inv_tps12_aux: ∀d,e,L1,L2. L1 [d, e] ≫ L2 → 0 < d → +fact ltps_inv_tps12_aux: ∀d,e,L1,L2. L1 [d, e] ▶ L2 → 0 < d → ∀I,K2,V2. L2 = K2. 𝕓{I} V2 → - ∃∃K1,V1. K1 [d - 1, e] ≫ K2 & - K2 ⊢ V1 [d - 1, e] ≫ V2 & + ∃∃K1,V1. K1 [d - 1, e] ▶ K2 & + K2 ⊢ V1 [d - 1, e] ▶ V2 & L1 = K1. 𝕓{I} V1. #d #e #L1 #L2 * -d e L1 L2 [ #d #e #_ #I #K2 #V2 #H destruct @@ -93,9 +93,9 @@ fact ltps_inv_tps12_aux: ∀d,e,L1,L2. L1 [d, e] ≫ L2 → 0 < d → ] qed. -lemma ltps_inv_tps12: ∀L1,K2,I,V2,d,e. L1 [d, e] ≫ K2. 𝕓{I} V2 → 0 < d → - ∃∃K1,V1. K1 [d - 1, e] ≫ K2 & - K2 ⊢ V1 [d - 1, e] ≫ V2 & +lemma ltps_inv_tps12: ∀L1,K2,I,V2,d,e. L1 [d, e] ▶ K2. 𝕓{I} V2 → 0 < d → + ∃∃K1,V1. K1 [d - 1, e] ▶ K2 & + K2 ⊢ V1 [d - 1, e] ▶ V2 & L1 = K1. 𝕓{I} V1. /2 width=1/ qed. *) diff --git a/matita/matita/contribs/lambda_delta/Basic_2/unfold/ltpss_ldrop.ma b/matita/matita/contribs/lambda_delta/Basic_2/unfold/ltpss_ldrop.ma index f042449ae..b52cedae7 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/unfold/ltpss_ldrop.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/unfold/ltpss_ldrop.ma @@ -17,21 +17,21 @@ include "Basic_2/unfold/ltpss.ma". (* PARTIAL UNFOLD ON LOCAL ENVIRONMENTS *************************************) -lemma ltpss_ldrop_conf_ge: ∀L0,L1,d1,e1. L0 [d1, e1] ≫* L1 → - ∀L2,e2. ⇓[0, e2] L0 ≡ L2 → - d1 + e1 ≤ e2 → ⇓[0, e2] L1 ≡ L2. +lemma ltpss_ldrop_conf_ge: ∀L0,L1,d1,e1. L0 [d1, e1] ▶* L1 → + ∀L2,e2. ⇩[0, e2] L0 ≡ L2 → + d1 + e1 ≤ e2 → ⇩[0, e2] L1 ≡ L2. #L0 #L1 #d1 #e1 #H @(ltpss_ind … H) -L1 // /3 width=6/ qed. -lemma ltpss_ldrop_trans_ge: ∀L1,L0,d1,e1. L1 [d1, e1] ≫* L0 → - ∀L2,e2. ⇓[0, e2] L0 ≡ L2 → - d1 + e1 ≤ e2 → ⇓[0, e2] L1 ≡ L2. +lemma ltpss_ldrop_trans_ge: ∀L1,L0,d1,e1. L1 [d1, e1] ▶* L0 → + ∀L2,e2. ⇩[0, e2] L0 ≡ L2 → + d1 + e1 ≤ e2 → ⇩[0, e2] L1 ≡ L2. #L1 #L0 #d1 #e1 #H @(ltpss_ind … H) -L0 // /3 width=6/ qed. -lemma ltpss_ldrop_conf_be: ∀L0,L1,d1,e1. L0 [d1, e1] ≫* L1 → - ∀L2,e2. ⇓[0, e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 → - ∃∃L. L2 [0, d1 + e1 - e2] ≫* L & ⇓[0, e2] L1 ≡ L. +lemma ltpss_ldrop_conf_be: ∀L0,L1,d1,e1. L0 [d1, e1] ▶* L1 → + ∀L2,e2. ⇩[0, e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 → + ∃∃L. L2 [0, d1 + e1 - e2] ▶* L & ⇩[0, e2] L1 ≡ L. #L0 #L1 #d1 #e1 #H @(ltpss_ind … H) -L1 [ /2 width=3/ | #L #L1 #_ #HL1 #IHL #L2 #e2 #HL02 #Hd1e2 #He2de1 @@ -40,9 +40,9 @@ lemma ltpss_ldrop_conf_be: ∀L0,L1,d1,e1. L0 [d1, e1] ≫* L1 → ] qed. -lemma ltpss_ldrop_trans_be: ∀L1,L0,d1,e1. L1 [d1, e1] ≫* L0 → - ∀L2,e2. ⇓[0, e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 → - ∃∃L. L [0, d1 + e1 - e2] ≫* L2 & ⇓[0, e2] L1 ≡ L. +lemma ltpss_ldrop_trans_be: ∀L1,L0,d1,e1. L1 [d1, e1] ▶* L0 → + ∀L2,e2. ⇩[0, e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 → + ∃∃L. L [0, d1 + e1 - e2] ▶* L2 & ⇩[0, e2] L1 ≡ L. #L1 #L0 #d1 #e1 #H @(ltpss_ind … H) -L0 [ /2 width=3/ | #L #L0 #_ #HL0 #IHL #L2 #e2 #HL02 #Hd1e2 #He2de1 @@ -51,9 +51,9 @@ lemma ltpss_ldrop_trans_be: ∀L1,L0,d1,e1. L1 [d1, e1] ≫* L0 → ] qed. -lemma ltpss_ldrop_conf_le: ∀L0,L1,d1,e1. L0 [d1, e1] ≫* L1 → - ∀L2,e2. ⇓[0, e2] L0 ≡ L2 → e2 ≤ d1 → - ∃∃L. L2 [d1 - e2, e1] ≫* L & ⇓[0, e2] L1 ≡ L. +lemma ltpss_ldrop_conf_le: ∀L0,L1,d1,e1. L0 [d1, e1] ▶* L1 → + ∀L2,e2. ⇩[0, e2] L0 ≡ L2 → e2 ≤ d1 → + ∃∃L. L2 [d1 - e2, e1] ▶* L & ⇩[0, e2] L1 ≡ L. #L0 #L1 #d1 #e1 #H @(ltpss_ind … H) -L1 [ /2 width=3/ | #L #L1 #_ #HL1 #IHL #L2 #e2 #HL02 #He2d1 @@ -62,9 +62,9 @@ lemma ltpss_ldrop_conf_le: ∀L0,L1,d1,e1. L0 [d1, e1] ≫* L1 → ] qed. -lemma ltpss_ldrop_trans_le: ∀L1,L0,d1,e1. L1 [d1, e1] ≫* L0 → - ∀L2,e2. ⇓[0, e2] L0 ≡ L2 → e2 ≤ d1 → - ∃∃L. L [d1 - e2, e1] ≫* L2 & ⇓[0, e2] L1 ≡ L. +lemma ltpss_ldrop_trans_le: ∀L1,L0,d1,e1. L1 [d1, e1] ▶* L0 → + ∀L2,e2. ⇩[0, e2] L0 ≡ L2 → e2 ≤ d1 → + ∃∃L. L [d1 - e2, e1] ▶* L2 & ⇩[0, e2] L1 ≡ L. #L1 #L0 #d1 #e1 #H @(ltpss_ind … H) -L0 [ /2 width=3/ | #L #L0 #_ #HL0 #IHL #L2 #e2 #HL02 #He2d1 diff --git a/matita/matita/contribs/lambda_delta/Basic_2/unfold/ltpss_ltpss.ma b/matita/matita/contribs/lambda_delta/Basic_2/unfold/ltpss_ltpss.ma index e4291acf9..e9995db70 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/unfold/ltpss_ltpss.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/unfold/ltpss_ltpss.ma @@ -19,12 +19,12 @@ include "Basic_2/unfold/ltpss_tpss.ma". (* Main properties **********************************************************) theorem ltpss_trans_eq: ∀L1,L,L2,d,e. - L1 [d, e] ≫* L → L [d, e] ≫* L2 → L1 [d, e] ≫* L2. + L1 [d, e] ▶* L → L [d, e] ▶* L2 → L1 [d, e] ▶* L2. /2 width=3/ qed. lemma ltpss_tpss2: ∀L1,L2,I,V1,V2,e. - L1 [0, e] ≫* L2 → L2 ⊢ V1 [0, e] ≫* V2 → - L1. 𝕓{I} V1 [0, e + 1] ≫* L2. 𝕓{I} V2. + L1 [0, e] ▶* L2 → L2 ⊢ V1 [0, e] ▶* V2 → + L1. 𝕓{I} V1 [0, e + 1] ▶* L2. 𝕓{I} V2. #L1 #L2 #I #V1 #V2 #e #HL12 #H @(tpss_ind … H) -V2 [ /2 width=1/ | #V #V2 #_ #HV2 #IHV @(ltpss_trans_eq … IHV) /2 width=1/ @@ -32,15 +32,15 @@ lemma ltpss_tpss2: ∀L1,L2,I,V1,V2,e. qed. lemma ltpss_tpss2_lt: ∀L1,L2,I,V1,V2,e. - L1 [0, e - 1] ≫* L2 → L2 ⊢ V1 [0, e - 1] ≫* V2 → - 0 < e → L1. 𝕓{I} V1 [0, e] ≫* L2. 𝕓{I} V2. + L1 [0, e - 1] ▶* L2 → L2 ⊢ V1 [0, e - 1] ▶* V2 → + 0 < e → L1. 𝕓{I} V1 [0, e] ▶* L2. 𝕓{I} V2. #L1 #L2 #I #V1 #V2 #e #HL12 #HV12 #He >(plus_minus_m_m e 1) // /2 width=1/ qed. lemma ltpss_tpss1: ∀L1,L2,I,V1,V2,d,e. - L1 [d, e] ≫* L2 → L2 ⊢ V1 [d, e] ≫* V2 → - L1. 𝕓{I} V1 [d + 1, e] ≫* L2. 𝕓{I} V2. + L1 [d, e] ▶* L2 → L2 ⊢ V1 [d, e] ▶* V2 → + L1. 𝕓{I} V1 [d + 1, e] ▶* L2. 𝕓{I} V2. #L1 #L2 #I #V1 #V2 #d #e #HL12 #H @(tpss_ind … H) -V2 [ /2 width=1/ | #V #V2 #_ #HV2 #IHV @(ltpss_trans_eq … IHV) /2 width=1/ @@ -48,8 +48,8 @@ lemma ltpss_tpss1: ∀L1,L2,I,V1,V2,d,e. qed. lemma ltpss_tpss1_lt: ∀L1,L2,I,V1,V2,d,e. - L1 [d - 1, e] ≫* L2 → L2 ⊢ V1 [d - 1, e] ≫* V2 → - 0 < d → L1. 𝕓{I} V1 [d, e] ≫* L2. 𝕓{I} V2. + L1 [d - 1, e] ▶* L2 → L2 ⊢ V1 [d - 1, e] ▶* V2 → + 0 < d → L1. 𝕓{I} V1 [d, e] ▶* L2. 𝕓{I} V2. #L1 #L2 #I #V1 #V2 #d #e #HL12 #HV12 #Hd >(plus_minus_m_m d 1) // /2 width=1/ qed. diff --git a/matita/matita/contribs/lambda_delta/Basic_2/unfold/ltpss_tpss.ma b/matita/matita/contribs/lambda_delta/Basic_2/unfold/ltpss_tpss.ma index c75119b66..5dbe0dea1 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/unfold/ltpss_tpss.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/unfold/ltpss_tpss.ma @@ -19,23 +19,23 @@ include "Basic_2/unfold/ltpss.ma". (* Properties concerning partial unfold on terms ****************************) -lemma ltpss_tpss_trans_ge: ∀L1,L0,d1,e1. L1 [d1, e1] ≫* L0 → - ∀T2,U2,d2,e2. L0 ⊢ T2 [d2, e2] ≫* U2 → - d1 + e1 ≤ d2 → L1 ⊢ T2 [d2, e2] ≫* U2. +lemma ltpss_tpss_trans_ge: ∀L1,L0,d1,e1. L1 [d1, e1] ▶* L0 → + ∀T2,U2,d2,e2. L0 ⊢ T2 [d2, e2] ▶* U2 → + d1 + e1 ≤ d2 → L1 ⊢ T2 [d2, e2] ▶* U2. #L1 #L0 #d1 #e1 #H @(ltpss_ind … H) -L0 // #L #L0 #_ #HL0 #IHL #T2 #U2 #d2 #e2 #HTU2 #Hde1d2 lapply (ltps_tpss_trans_ge … HL0 HTU2) -HL0 -HTU2 /2 width=1/ qed. -lemma ltpss_tps_trans_ge: ∀L1,L0,d1,e1. L1 [d1, e1] ≫* L0 → - ∀T2,U2,d2,e2. L0 ⊢ T2 [d2, e2] ≫ U2 → - d1 + e1 ≤ d2 → L1 ⊢ T2 [d2, e2] ≫* U2. +lemma ltpss_tps_trans_ge: ∀L1,L0,d1,e1. L1 [d1, e1] ▶* L0 → + ∀T2,U2,d2,e2. L0 ⊢ T2 [d2, e2] ▶ U2 → + d1 + e1 ≤ d2 → L1 ⊢ T2 [d2, e2] ▶* U2. #L1 #L0 #d1 #e1 #HL10 #T2 #U2 #d2 #e2 #HTU2 #Hde1d2 @(ltpss_tpss_trans_ge … HL10 … Hde1d2) /2 width=1/ (**) (* /3 width=6/ is too slow *) qed. -lemma ltpss_tpss_trans_eq: ∀L0,L1,d,e. L0 [d, e] ≫* L1 → - ∀T2,U2. L1 ⊢ T2 [d, e] ≫* U2 → L0 ⊢ T2 [d, e] ≫* U2. +lemma ltpss_tpss_trans_eq: ∀L0,L1,d,e. L0 [d, e] ▶* L1 → + ∀T2,U2. L1 ⊢ T2 [d, e] ▶* U2 → L0 ⊢ T2 [d, e] ▶* U2. #L0 #L1 #d #e #H @(ltpss_ind … H) -L1 [ /2 width=1/ | #L #L1 #_ #HL1 #IHL #T2 #U2 #HTU2 @@ -43,13 +43,13 @@ lemma ltpss_tpss_trans_eq: ∀L0,L1,d,e. L0 [d, e] ≫* L1 → ] qed. -lemma ltpss_tps_trans_eq: ∀L0,L1,d,e. L0 [d, e] ≫* L1 → - ∀T2,U2. L1 ⊢ T2 [d, e] ≫ U2 → L0 ⊢ T2 [d, e] ≫* U2. +lemma ltpss_tps_trans_eq: ∀L0,L1,d,e. L0 [d, e] ▶* L1 → + ∀T2,U2. L1 ⊢ T2 [d, e] ▶ U2 → L0 ⊢ T2 [d, e] ▶* U2. /3 width=3/ qed. lemma ltpss_tpss_conf_ge: ∀L0,L1,T2,U2,d1,e1,d2,e2. d1 + e1 ≤ d2 → - L0 ⊢ T2 [d2, e2] ≫* U2 → L0 [d1, e1] ≫* L1 → - L1 ⊢ T2 [d2, e2] ≫* U2. + L0 ⊢ T2 [d2, e2] ▶* U2 → L0 [d1, e1] ▶* L1 → + L1 ⊢ T2 [d2, e2] ▶* U2. #L0 #L1 #T2 #U2 #d1 #e1 #d2 #e2 #Hde1d2 #HTU2 #H @(ltpss_ind … H) -L1 [ // | -HTU2 #L #L1 #_ #HL1 #IHL @@ -58,15 +58,15 @@ lemma ltpss_tpss_conf_ge: ∀L0,L1,T2,U2,d1,e1,d2,e2. d1 + e1 ≤ d2 → qed. lemma ltpss_tps_conf_ge: ∀L0,L1,T2,U2,d1,e1,d2,e2. d1 + e1 ≤ d2 → - L0 ⊢ T2 [d2, e2] ≫ U2 → L0 [d1, e1] ≫* L1 → - L1 ⊢ T2 [d2, e2] ≫* U2. + L0 ⊢ T2 [d2, e2] ▶ U2 → L0 [d1, e1] ▶* L1 → + L1 ⊢ T2 [d2, e2] ▶* U2. #L0 #L1 #T2 #U2 #d1 #e1 #d2 #e2 #Hde1d2 #HTU2 #HL01 @(ltpss_tpss_conf_ge … Hde1d2 … HL01) /2 width=1/ (**) (* /3 width=6/ is too slow *) qed. lemma ltpss_tpss_conf_eq: ∀L0,L1,T2,U2,d,e. - L0 ⊢ T2 [d, e] ≫* U2 → L0 [d, e] ≫* L1 → - ∃∃T. L1 ⊢ T2 [d, e] ≫* T & L1 ⊢ U2 [d, e] ≫* T. + L0 ⊢ T2 [d, e] ▶* U2 → L0 [d, e] ▶* L1 → + ∃∃T. L1 ⊢ T2 [d, e] ▶* T & L1 ⊢ U2 [d, e] ▶* T. #L0 #L1 #T2 #U2 #d #e #HTU2 #H @(ltpss_ind … H) -L1 [ /2 width=3/ | -HTU2 #L #L1 #_ #HL1 * #W2 #HTW2 #HUW2 @@ -79,13 +79,13 @@ lemma ltpss_tpss_conf_eq: ∀L0,L1,T2,U2,d,e. qed. lemma ltpss_tps_conf_eq: ∀L0,L1,T2,U2,d,e. - L0 ⊢ T2 [d, e] ≫ U2 → L0 [d, e] ≫* L1 → - ∃∃T. L1 ⊢ T2 [d, e] ≫* T & L1 ⊢ U2 [d, e] ≫* T. + L0 ⊢ T2 [d, e] ▶ U2 → L0 [d, e] ▶* L1 → + ∃∃T. L1 ⊢ T2 [d, e] ▶* T & L1 ⊢ U2 [d, e] ▶* T. /3 width=3/ qed. -lemma ltpss_tpss_conf: ∀L1,T1,T2,d,e. L1 ⊢ T1 [d, e] ≫* T2 → - ∀L2,ds,es. L1 [ds, es] ≫* L2 → - ∃∃T. L2 ⊢ T1 [d, e] ≫* T & L1 ⊢ T2 [ds, es] ≫* T. +lemma ltpss_tpss_conf: ∀L1,T1,T2,d,e. L1 ⊢ T1 [d, e] ▶* T2 → + ∀L2,ds,es. L1 [ds, es] ▶* L2 → + ∃∃T. L2 ⊢ T1 [d, e] ▶* T & L1 ⊢ T2 [ds, es] ▶* T. #L1 #T1 #T2 #d #e #HT12 #L2 #ds #es #H @(ltpss_ind … H) -L2 [ /3 width=3/ | #L #L2 #HL1 #HL2 * #T #HT1 #HT2 @@ -96,16 +96,16 @@ lemma ltpss_tpss_conf: ∀L1,T1,T2,d,e. L1 ⊢ T1 [d, e] ≫* T2 → ] qed. -lemma ltpss_tps_conf: ∀L1,T1,T2,d,e. L1 ⊢ T1 [d, e] ≫ T2 → - ∀L2,ds,es. L1 [ds, es] ≫* L2 → - ∃∃T. L2 ⊢ T1 [d, e] ≫* T & L1 ⊢ T2 [ds, es] ≫* T. +lemma ltpss_tps_conf: ∀L1,T1,T2,d,e. L1 ⊢ T1 [d, e] ▶ T2 → + ∀L2,ds,es. L1 [ds, es] ▶* L2 → + ∃∃T. L2 ⊢ T1 [d, e] ▶* T & L1 ⊢ T2 [ds, es] ▶* T. /3 width=1/ qed. (* Advanced properties ******************************************************) lemma ltpss_tps2: ∀L1,L2,I,e. - L1 [0, e] ≫* L2 → ∀V1,V2. L2 ⊢ V1 [0, e] ≫ V2 → - L1. 𝕓{I} V1 [0, e + 1] ≫* L2. 𝕓{I} V2. + L1 [0, e] ▶* L2 → ∀V1,V2. L2 ⊢ V1 [0, e] ▶ V2 → + L1. 𝕓{I} V1 [0, e + 1] ▶* L2. 𝕓{I} V2. #L1 #L2 #I #e #H @(ltpss_ind … H) -L2 [ /3 width=1/ | #L #L2 #_ #HL2 #IHL #V1 #V2 #HV12 @@ -116,15 +116,15 @@ lemma ltpss_tps2: ∀L1,L2,I,e. qed. lemma ltpss_tps2_lt: ∀L1,L2,I,V1,V2,e. - L1 [0, e - 1] ≫* L2 → L2 ⊢ V1 [0, e - 1] ≫ V2 → - 0 < e → L1. 𝕓{I} V1 [0, e] ≫* L2. 𝕓{I} V2. + L1 [0, e - 1] ▶* L2 → L2 ⊢ V1 [0, e - 1] ▶ V2 → + 0 < e → L1. 𝕓{I} V1 [0, e] ▶* L2. 𝕓{I} V2. #L1 #L2 #I #V1 #V2 #e #HL12 #HV12 #He >(plus_minus_m_m e 1) // /2 width=1/ qed. -lemma ltpss_tps1: ∀L1,L2,I,d,e. L1 [d, e] ≫* L2 → - ∀V1,V2. L2 ⊢ V1 [d, e] ≫ V2 → - L1. 𝕓{I} V1 [d + 1, e] ≫* L2. 𝕓{I} V2. +lemma ltpss_tps1: ∀L1,L2,I,d,e. L1 [d, e] ▶* L2 → + ∀V1,V2. L2 ⊢ V1 [d, e] ▶ V2 → + L1. 𝕓{I} V1 [d + 1, e] ▶* L2. 𝕓{I} V2. #L1 #L2 #I #d #e #H @(ltpss_ind … H) -L2 [ /3 width=1/ | #L #L2 #_ #HL2 #IHL #V1 #V2 #HV12 @@ -135,16 +135,16 @@ lemma ltpss_tps1: ∀L1,L2,I,d,e. L1 [d, e] ≫* L2 → qed. lemma ltpss_tps1_lt: ∀L1,L2,I,V1,V2,d,e. - L1 [d - 1, e] ≫* L2 → L2 ⊢ V1 [d - 1, e] ≫ V2 → - 0 < d → L1. 𝕓{I} V1 [d, e] ≫* L2. 𝕓{I} V2. + L1 [d - 1, e] ▶* L2 → L2 ⊢ V1 [d - 1, e] ▶ V2 → + 0 < d → L1. 𝕓{I} V1 [d, e] ▶* L2. 𝕓{I} V2. #L1 #L2 #I #V1 #V2 #d #e #HL12 #HV12 #Hd >(plus_minus_m_m d 1) // /2 width=1/ qed. (* Advanced forward lemmas **************************************************) -lemma ltpss_fwd_tpss21: ∀e,K1,I,V1,L2. 0 < e → K1. 𝕓{I} V1 [0, e] ≫* L2 → - ∃∃K2,V2. K1 [0, e - 1] ≫* K2 & K1 ⊢ V1 [0, e - 1] ≫* V2 & +lemma ltpss_fwd_tpss21: ∀e,K1,I,V1,L2. 0 < e → K1. 𝕓{I} V1 [0, e] ▶* L2 → + ∃∃K2,V2. K1 [0, e - 1] ▶* K2 & K1 ⊢ V1 [0, e - 1] ▶* V2 & L2 = K2. 𝕓{I} V2. #e #K1 #I #V1 #L2 #He #H @(ltpss_ind … H) -L2 [ /2 width=5/ @@ -155,9 +155,9 @@ lemma ltpss_fwd_tpss21: ∀e,K1,I,V1,L2. 0 < e → K1. 𝕓{I} V1 [0, e] ≫* L2 ] qed-. -lemma ltpss_fwd_tpss11: ∀d,e,I,K1,V1,L2. 0 < d → K1. 𝕓{I} V1 [d, e] ≫* L2 → - ∃∃K2,V2. K1 [d - 1, e] ≫* K2 & - K1 ⊢ V1 [d - 1, e] ≫* V2 & +lemma ltpss_fwd_tpss11: ∀d,e,I,K1,V1,L2. 0 < d → K1. 𝕓{I} V1 [d, e] ▶* L2 → + ∃∃K2,V2. K1 [d - 1, e] ▶* K2 & + K1 ⊢ V1 [d - 1, e] ▶* V2 & L2 = K2. 𝕓{I} V2. #d #e #K1 #I #V1 #L2 #Hd #H @(ltpss_ind … H) -L2 [ /2 width=5/ diff --git a/matita/matita/contribs/lambda_delta/Basic_2/unfold/tpss.ma b/matita/matita/contribs/lambda_delta/Basic_2/unfold/tpss.ma index 0f6196e52..0db2e9395 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/unfold/tpss.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/unfold/tpss.ma @@ -25,27 +25,27 @@ interpretation "partial unfold (term)" (* Basic eliminators ********************************************************) lemma tpss_ind: ∀d,e,L,T1. ∀R:predicate term. R T1 → - (∀T,T2. L ⊢ T1 [d, e] ≫* T → L ⊢ T [d, e] ≫ T2 → R T → R T2) → - ∀T2. L ⊢ T1 [d, e] ≫* T2 → R T2. + (∀T,T2. L ⊢ T1 [d, e] ▶* T → L ⊢ T [d, e] ▶ T2 → R T → R T2) → + ∀T2. L ⊢ T1 [d, e] ▶* T2 → R T2. #d #e #L #T1 #R #HT1 #IHT1 #T2 #HT12 @(TC_star_ind … HT1 IHT1 … HT12) // qed-. (* Basic properties *********************************************************) lemma tpss_strap: ∀L,T1,T,T2,d,e. - L ⊢ T1 [d, e] ≫ T → L ⊢ T [d, e] ≫* T2 → L ⊢ T1 [d, e] ≫* T2. + L ⊢ T1 [d, e] ▶ T → L ⊢ T [d, e] ▶* T2 → L ⊢ T1 [d, e] ▶* T2. /2 width=3/ qed. -lemma tpss_lsubs_conf: ∀L1,T1,T2,d,e. L1 ⊢ T1 [d, e] ≫* T2 → - ∀L2. L1 [d, e] ≼ L2 → L2 ⊢ T1 [d, e] ≫* T2. +lemma tpss_lsubs_conf: ∀L1,T1,T2,d,e. L1 ⊢ T1 [d, e] ▶* T2 → + ∀L2. L1 [d, e] ≼ L2 → L2 ⊢ T1 [d, e] ▶* T2. /3 width=3/ qed. -lemma tpss_refl: ∀d,e,L,T. L ⊢ T [d, e] ≫* T. +lemma tpss_refl: ∀d,e,L,T. L ⊢ T [d, e] ▶* T. /2 width=1/ qed. -lemma tpss_bind: ∀L,V1,V2,d,e. L ⊢ V1 [d, e] ≫* V2 → - ∀I,T1,T2. L. 𝕓{I} V2 ⊢ T1 [d + 1, e] ≫* T2 → - L ⊢ 𝕓{I} V1. T1 [d, e] ≫* 𝕓{I} V2. T2. +lemma tpss_bind: ∀L,V1,V2,d,e. L ⊢ V1 [d, e] ▶* V2 → + ∀I,T1,T2. L. 𝕓{I} V2 ⊢ T1 [d + 1, e] ▶* T2 → + L ⊢ 𝕓{I} V1. T1 [d, e] ▶* 𝕓{I} V2. T2. #L #V1 #V2 #d #e #HV12 elim HV12 -V2 [ #V2 #HV12 #I #T1 #T2 #HT12 elim HT12 -T2 [ /3 width=5/ @@ -58,8 +58,8 @@ lemma tpss_bind: ∀L,V1,V2,d,e. L ⊢ V1 [d, e] ≫* V2 → qed. lemma tpss_flat: ∀L,I,V1,V2,T1,T2,d,e. - L ⊢ V1 [d, e] ≫ * V2 → L ⊢ T1 [d, e] ≫* T2 → - L ⊢ 𝕗{I} V1. T1 [d, e] ≫* 𝕗{I} V2. T2. + L ⊢ V1 [d, e] ▶ * V2 → L ⊢ T1 [d, e] ▶* T2 → + L ⊢ 𝕗{I} V1. T1 [d, e] ▶* 𝕗{I} V2. T2. #L #I #V1 #V2 #T1 #T2 #d #e #HV12 elim HV12 -V2 [ #V2 #HV12 #HT12 elim HT12 -T2 [ /3 width=1/ @@ -70,9 +70,9 @@ lemma tpss_flat: ∀L,I,V1,V2,T1,T2,d,e. ] qed. -lemma tpss_weak: ∀L,T1,T2,d1,e1. L ⊢ T1 [d1, e1] ≫* T2 → +lemma tpss_weak: ∀L,T1,T2,d1,e1. L ⊢ T1 [d1, e1] ▶* T2 → ∀d2,e2. d2 ≤ d1 → d1 + e1 ≤ d2 + e2 → - L ⊢ T1 [d2, e2] ≫* T2. + L ⊢ T1 [d2, e2] ▶* T2. #L #T1 #T2 #d1 #e1 #H #d1 #d2 #Hd21 #Hde12 @(tpss_ind … H) -T2 [ // | #T #T2 #_ #HT12 #IHT @@ -81,7 +81,7 @@ lemma tpss_weak: ∀L,T1,T2,d1,e1. L ⊢ T1 [d1, e1] ≫* T2 → qed. lemma tpss_weak_top: ∀L,T1,T2,d,e. - L ⊢ T1 [d, e] ≫* T2 → L ⊢ T1 [d, |L| - d] ≫* T2. + L ⊢ T1 [d, e] ▶* T2 → L ⊢ T1 [d, |L| - d] ▶* T2. #L #T1 #T2 #d #e #H @(tpss_ind … H) -T2 [ // | #T #T2 #_ #HT12 #IHT @@ -90,7 +90,7 @@ lemma tpss_weak_top: ∀L,T1,T2,d,e. qed. lemma tpss_weak_all: ∀L,T1,T2,d,e. - L ⊢ T1 [d, e] ≫* T2 → L ⊢ T1 [0, |L|] ≫* T2. + L ⊢ T1 [d, e] ▶* T2 → L ⊢ T1 [0, |L|] ▶* T2. #L #T1 #T2 #d #e #HT12 lapply (tpss_weak … HT12 0 (d + e) ? ?) -HT12 // #HT12 lapply (tpss_weak_top … HT12) // @@ -99,7 +99,7 @@ qed. (* Basic inversion lemmas ***************************************************) (* Note: this can be derived from tpss_inv_atom1 *) -lemma tpss_inv_sort1: ∀L,T2,k,d,e. L ⊢ ⋆k [d, e] ≫* T2 → T2 = ⋆k. +lemma tpss_inv_sort1: ∀L,T2,k,d,e. L ⊢ ⋆k [d, e] ▶* T2 → T2 = ⋆k. #L #T2 #k #d #e #H @(tpss_ind … H) -T2 [ // | #T #T2 #_ #HT2 #IHT destruct @@ -108,7 +108,7 @@ lemma tpss_inv_sort1: ∀L,T2,k,d,e. L ⊢ ⋆k [d, e] ≫* T2 → T2 = ⋆k. qed-. (* Note: this can be derived from tpss_inv_atom1 *) -lemma tpss_inv_gref1: ∀L,T2,p,d,e. L ⊢ §p [d, e] ≫* T2 → T2 = §p. +lemma tpss_inv_gref1: ∀L,T2,p,d,e. L ⊢ §p [d, e] ▶* T2 → T2 = §p. #L #T2 #p #d #e #H @(tpss_ind … H) -T2 [ // | #T #T2 #_ #HT2 #IHT destruct @@ -116,9 +116,9 @@ lemma tpss_inv_gref1: ∀L,T2,p,d,e. L ⊢ §p [d, e] ≫* T2 → T2 = §p. ] qed-. -lemma tpss_inv_bind1: ∀d,e,L,I,V1,T1,U2. L ⊢ 𝕓{I} V1. T1 [d, e] ≫* U2 → - ∃∃V2,T2. L ⊢ V1 [d, e] ≫* V2 & - L. 𝕓{I} V2 ⊢ T1 [d + 1, e] ≫* T2 & +lemma tpss_inv_bind1: ∀d,e,L,I,V1,T1,U2. L ⊢ 𝕓{I} V1. T1 [d, e] ▶* U2 → + ∃∃V2,T2. L ⊢ V1 [d, e] ▶* V2 & + L. 𝕓{I} V2 ⊢ T1 [d + 1, e] ▶* T2 & U2 = 𝕓{I} V2. T2. #d #e #L #I #V1 #T1 #U2 #H @(tpss_ind … H) -U2 [ /2 width=5/ @@ -128,8 +128,8 @@ lemma tpss_inv_bind1: ∀d,e,L,I,V1,T1,U2. L ⊢ 𝕓{I} V1. T1 [d, e] ≫* U2 ] qed-. -lemma tpss_inv_flat1: ∀d,e,L,I,V1,T1,U2. L ⊢ 𝕗{I} V1. T1 [d, e] ≫* U2 → - ∃∃V2,T2. L ⊢ V1 [d, e] ≫* V2 & L ⊢ T1 [d, e] ≫* T2 & +lemma tpss_inv_flat1: ∀d,e,L,I,V1,T1,U2. L ⊢ 𝕗{I} V1. T1 [d, e] ▶* U2 → + ∃∃V2,T2. L ⊢ V1 [d, e] ▶* V2 & L ⊢ T1 [d, e] ▶* T2 & U2 = 𝕗{I} V2. T2. #d #e #L #I #V1 #T1 #U2 #H @(tpss_ind … H) -U2 [ /2 width=5/ @@ -138,7 +138,7 @@ lemma tpss_inv_flat1: ∀d,e,L,I,V1,T1,U2. L ⊢ 𝕗{I} V1. T1 [d, e] ≫* U2 ] qed-. -lemma tpss_inv_refl_O2: ∀L,T1,T2,d. L ⊢ T1 [d, 0] ≫* T2 → T1 = T2. +lemma tpss_inv_refl_O2: ∀L,T1,T2,d. L ⊢ T1 [d, 0] ▶* T2 → T1 = T2. #L #T1 #T2 #d #H @(tpss_ind … H) -T2 [ // | #T #T2 #_ #HT2 #IHT <(tps_inv_refl_O2 … HT2) -HT2 // diff --git a/matita/matita/contribs/lambda_delta/Basic_2/unfold/tpss_lift.ma b/matita/matita/contribs/lambda_delta/Basic_2/unfold/tpss_lift.ma index 23d571549..89c767133 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/unfold/tpss_lift.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/unfold/tpss_lift.ma @@ -21,8 +21,8 @@ include "Basic_2/unfold/tpss.ma". lemma tpss_subst: ∀L,K,V,U1,i,d,e. d ≤ i → i < d + e → - ⇓[0, i] L ≡ K. 𝕓{Abbr} V → K ⊢ V [0, d + e - i - 1] ≫* U1 → - ∀U2. ⇑[0, i + 1] U1 ≡ U2 → L ⊢ #i [d, e] ≫* U2. + ⇩[0, i] L ≡ K. 𝕓{Abbr} V → K ⊢ V [0, d + e - i - 1] ▶* U1 → + ∀U2. ⇧[0, i + 1] U1 ≡ U2 → L ⊢ #i [d, e] ▶* U2. #L #K #V #U1 #i #d #e #Hdi #Hide #HLK #H @(tpss_ind … H) -U1 [ /3 width=4/ | #U #U1 #_ #HU1 #IHU #U2 #HU12 @@ -36,12 +36,12 @@ qed. (* Advanced inverion lemmas *************************************************) -lemma tpss_inv_atom1: ∀L,T2,I,d,e. L ⊢ 𝕒{I} [d, e] ≫* T2 → +lemma tpss_inv_atom1: ∀L,T2,I,d,e. L ⊢ 𝕒{I} [d, e] ▶* T2 → T2 = 𝕒{I} ∨ ∃∃K,V1,V2,i. d ≤ i & i < d + e & - ⇓[O, i] L ≡ K. 𝕓{Abbr} V1 & - K ⊢ V1 [0, d + e - i - 1] ≫* V2 & - ⇑[O, i + 1] V2 ≡ T2 & + ⇩[O, i] L ≡ K. 𝕓{Abbr} V1 & + K ⊢ V1 [0, d + e - i - 1] ▶* V2 & + ⇧[O, i + 1] V2 ≡ T2 & I = LRef i. #L #T2 #I #d #e #H @(tpss_ind … H) -T2 [ /2 width=1/ @@ -56,29 +56,29 @@ lemma tpss_inv_atom1: ∀L,T2,I,d,e. L ⊢ 𝕒{I} [d, e] ≫* T2 → ] qed-. -lemma tpss_inv_lref1: ∀L,T2,i,d,e. L ⊢ #i [d, e] ≫* T2 → +lemma tpss_inv_lref1: ∀L,T2,i,d,e. L ⊢ #i [d, e] ▶* T2 → T2 = #i ∨ ∃∃K,V1,V2. d ≤ i & i < d + e & - ⇓[O, i] L ≡ K. 𝕓{Abbr} V1 & - K ⊢ V1 [0, d + e - i - 1] ≫* V2 & - ⇑[O, i + 1] V2 ≡ T2. + ⇩[O, i] L ≡ K. 𝕓{Abbr} V1 & + K ⊢ V1 [0, d + e - i - 1] ▶* V2 & + ⇧[O, i + 1] V2 ≡ T2. #L #T2 #i #d #e #H elim (tpss_inv_atom1 … H) -H /2 width=1/ * #K #V1 #V2 #j #Hdj #Hjde #HLK #HV12 #HVT2 #H destruct /3 width=6/ qed-. -lemma tpss_inv_refl_SO2: ∀L,T1,T2,d. L ⊢ T1 [d, 1] ≫* T2 → - ∀K,V. ⇓[0, d] L ≡ K. 𝕓{Abst} V → T1 = T2. +lemma tpss_inv_refl_SO2: ∀L,T1,T2,d. L ⊢ T1 [d, 1] ▶* T2 → + ∀K,V. ⇩[0, d] L ≡ K. 𝕓{Abst} V → T1 = T2. #L #T1 #T2 #d #H #K #V #HLK @(tpss_ind … H) -T2 // #T #T2 #_ #HT2 #IHT <(tps_inv_refl_SO2 … HT2 … HLK) // qed-. (* Relocation properties ****************************************************) -lemma tpss_lift_le: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ≫* T2 → - ∀L,U1,d,e. dt + et ≤ d → ⇓[d, e] L ≡ K → - ⇑[d, e] T1 ≡ U1 → ∀U2. ⇑[d, e] T2 ≡ U2 → - L ⊢ U1 [dt, et] ≫* U2. +lemma tpss_lift_le: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ▶* T2 → + ∀L,U1,d,e. dt + et ≤ d → ⇩[d, e] L ≡ K → + ⇧[d, e] T1 ≡ U1 → ∀U2. ⇧[d, e] T2 ≡ U2 → + L ⊢ U1 [dt, et] ▶* U2. #K #T1 #T2 #dt #et #H #L #U1 #d #e #Hdetd #HLK #HTU1 @(tpss_ind … H) -T2 [ #U2 #H >(lift_mono … HTU1 … H) -H // | -HTU1 #T #T2 #_ #HT2 #IHT #U2 #HTU2 @@ -88,10 +88,10 @@ lemma tpss_lift_le: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ≫* T2 → ] qed. -lemma tpss_lift_be: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ≫* T2 → +lemma tpss_lift_be: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ▶* T2 → ∀L,U1,d,e. dt ≤ d → d ≤ dt + et → - ⇓[d, e] L ≡ K → ⇑[d, e] T1 ≡ U1 → - ∀U2. ⇑[d, e] T2 ≡ U2 → L ⊢ U1 [dt, et + e] ≫* U2. + ⇩[d, e] L ≡ K → ⇧[d, e] T1 ≡ U1 → + ∀U2. ⇧[d, e] T2 ≡ U2 → L ⊢ U1 [dt, et + e] ▶* U2. #K #T1 #T2 #dt #et #H #L #U1 #d #e #Hdtd #Hddet #HLK #HTU1 @(tpss_ind … H) -T2 [ #U2 #H >(lift_mono … HTU1 … H) -H // | -HTU1 #T #T2 #_ #HT2 #IHT #U2 #HTU2 @@ -101,10 +101,10 @@ lemma tpss_lift_be: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ≫* T2 → ] qed. -lemma tpss_lift_ge: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ≫* T2 → - ∀L,U1,d,e. d ≤ dt → ⇓[d, e] L ≡ K → - ⇑[d, e] T1 ≡ U1 → ∀U2. ⇑[d, e] T2 ≡ U2 → - L ⊢ U1 [dt + e, et] ≫* U2. +lemma tpss_lift_ge: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ▶* T2 → + ∀L,U1,d,e. d ≤ dt → ⇩[d, e] L ≡ K → + ⇧[d, e] T1 ≡ U1 → ∀U2. ⇧[d, e] T2 ≡ U2 → + L ⊢ U1 [dt + e, et] ▶* U2. #K #T1 #T2 #dt #et #H #L #U1 #d #e #Hddt #HLK #HTU1 @(tpss_ind … H) -T2 [ #U2 #H >(lift_mono … HTU1 … H) -H // | -HTU1 #T #T2 #_ #HT2 #IHT #U2 #HTU2 @@ -114,10 +114,10 @@ lemma tpss_lift_ge: ∀K,T1,T2,dt,et. K ⊢ T1 [dt, et] ≫* T2 → ] qed. -lemma tpss_inv_lift1_le: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ≫* U2 → - ∀K,d,e. ⇓[d, e] L ≡ K → ∀T1. ⇑[d, e] T1 ≡ U1 → +lemma tpss_inv_lift1_le: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ▶* U2 → + ∀K,d,e. ⇩[d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → dt + et ≤ d → - ∃∃T2. K ⊢ T1 [dt, et] ≫* T2 & ⇑[d, e] T2 ≡ U2. + ∃∃T2. K ⊢ T1 [dt, et] ▶* T2 & ⇧[d, e] T2 ≡ U2. #L #U1 #U2 #dt #et #H #K #d #e #HLK #T1 #HTU1 #Hdetd @(tpss_ind … H) -U2 [ /2 width=3/ | -HTU1 #U #U2 #_ #HU2 * #T #HT1 #HTU @@ -125,10 +125,10 @@ lemma tpss_inv_lift1_le: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ≫* U2 → ] qed. -lemma tpss_inv_lift1_be: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ≫* U2 → - ∀K,d,e. ⇓[d, e] L ≡ K → ∀T1. ⇑[d, e] T1 ≡ U1 → +lemma tpss_inv_lift1_be: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ▶* U2 → + ∀K,d,e. ⇩[d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → dt ≤ d → d + e ≤ dt + et → - ∃∃T2. K ⊢ T1 [dt, et - e] ≫* T2 & ⇑[d, e] T2 ≡ U2. + ∃∃T2. K ⊢ T1 [dt, et - e] ▶* T2 & ⇧[d, e] T2 ≡ U2. #L #U1 #U2 #dt #et #H #K #d #e #HLK #T1 #HTU1 #Hdtd #Hdedet @(tpss_ind … H) -U2 [ /2 width=3/ | -HTU1 #U #U2 #_ #HU2 * #T #HT1 #HTU @@ -136,10 +136,10 @@ lemma tpss_inv_lift1_be: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ≫* U2 → ] qed. -lemma tpss_inv_lift1_ge: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ≫* U2 → - ∀K,d,e. ⇓[d, e] L ≡ K → ∀T1. ⇑[d, e] T1 ≡ U1 → +lemma tpss_inv_lift1_ge: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ▶* U2 → + ∀K,d,e. ⇩[d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → d + e ≤ dt → - ∃∃T2. K ⊢ T1 [dt - e, et] ≫* T2 & ⇑[d, e] T2 ≡ U2. + ∃∃T2. K ⊢ T1 [dt - e, et] ▶* T2 & ⇧[d, e] T2 ≡ U2. #L #U1 #U2 #dt #et #H #K #d #e #HLK #T1 #HTU1 #Hdedt @(tpss_ind … H) -U2 [ /2 width=3/ | -HTU1 #U #U2 #_ #HU2 * #T #HT1 #HTU @@ -148,16 +148,16 @@ lemma tpss_inv_lift1_ge: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ≫* U2 → qed. lemma tpss_inv_lift1_eq: ∀L,U1,U2,d,e. - L ⊢ U1 [d, e] ≫* U2 → ∀T1. ⇑[d, e] T1 ≡ U1 → U1 = U2. + L ⊢ U1 [d, e] ▶* U2 → ∀T1. ⇧[d, e] T1 ≡ U1 → U1 = U2. #L #U1 #U2 #d #e #H #T1 #HTU1 @(tpss_ind … H) -U2 // #U #U2 #_ #HU2 #IHU destruct <(tps_inv_lift1_eq … HU2 … HTU1) -HU2 -HTU1 // qed. -lemma tpss_inv_lift1_be_up: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ≫* U2 → - ∀K,d,e. ⇓[d, e] L ≡ K → ∀T1. ⇑[d, e] T1 ≡ U1 → +lemma tpss_inv_lift1_be_up: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ▶* U2 → + ∀K,d,e. ⇩[d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → dt ≤ d → dt + et ≤ d + e → - ∃∃T2. K ⊢ T1 [dt, d - dt] ≫* T2 & ⇑[d, e] T2 ≡ U2. + ∃∃T2. K ⊢ T1 [dt, d - dt] ▶* T2 & ⇧[d, e] T2 ≡ U2. #L #U1 #U2 #dt #et #H #K #d #e #HLK #T1 #HTU1 #Hdtd #Hdetde @(tpss_ind … H) -U2 [ /2 width=3/ | -HTU1 #U #U2 #_ #HU2 * #T #HT1 #HTU diff --git a/matita/matita/contribs/lambda_delta/Basic_2/unfold/tpss_ltps.ma b/matita/matita/contribs/lambda_delta/Basic_2/unfold/tpss_ltps.ma index f07ee8ee3..b59015200 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/unfold/tpss_ltps.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/unfold/tpss_ltps.ma @@ -20,16 +20,16 @@ include "Basic_2/unfold/tpss_tpss.ma". (* Properties concerning parallel substitution on local environments ********) lemma ltps_tpss_conf_ge: ∀L0,L1,T2,U2,d1,e1,d2,e2. - d1 + e1 ≤ d2 → L0 [d1, e1] ≫ L1 → - L0 ⊢ T2 [d2, e2] ≫* U2 → L1 ⊢ T2 [d2, e2] ≫* U2. + d1 + e1 ≤ d2 → L0 [d1, e1] ▶ L1 → + L0 ⊢ T2 [d2, e2] ▶* U2 → L1 ⊢ T2 [d2, e2] ▶* U2. #L0 #L1 #T2 #U2 #d1 #e1 #d2 #e2 #Hde1d2 #HL01 #H @(tpss_ind … H) -U2 // #U #U2 #_ #HU2 #IHU lapply (ltps_tps_conf_ge … HU2 … HL01 ?) -HU2 -HL01 // /2 width=3/ qed. lemma ltps_tpss_conf: ∀L0,L1,T2,U2,d1,e1,d2,e2. - L0 [d1, e1] ≫ L1 → L0 ⊢ T2 [d2, e2] ≫* U2 → - ∃∃T. L1 ⊢ T2 [d2, e2] ≫* T & L1 ⊢ U2 [d1, e1] ≫* T. + L0 [d1, e1] ▶ L1 → L0 ⊢ T2 [d2, e2] ▶* U2 → + ∃∃T. L1 ⊢ T2 [d2, e2] ▶* T & L1 ⊢ U2 [d1, e1] ▶* T. #L0 #L1 #T2 #U2 #d1 #e1 #d2 #e2 #HL01 #H @(tpss_ind … H) -U2 [ /3 width=3/ | #U #U2 #_ #HU2 * #T #HT2 #HUT @@ -40,16 +40,16 @@ lemma ltps_tpss_conf: ∀L0,L1,T2,U2,d1,e1,d2,e2. qed. lemma ltps_tpss_trans_ge: ∀L0,L1,T2,U2,d1,e1,d2,e2. - d1 + e1 ≤ d2 → L1 [d1, e1] ≫ L0 → - L0 ⊢ T2 [d2, e2] ≫* U2 → L1 ⊢ T2 [d2, e2] ≫* U2. + d1 + e1 ≤ d2 → L1 [d1, e1] ▶ L0 → + L0 ⊢ T2 [d2, e2] ▶* U2 → L1 ⊢ T2 [d2, e2] ▶* U2. #L0 #L1 #T2 #U2 #d1 #e1 #d2 #e2 #Hde1d2 #HL10 #H @(tpss_ind … H) -U2 // #U #U2 #_ #HU2 #IHU lapply (ltps_tps_trans_ge … HU2 … HL10 ?) -HU2 -HL10 // /2 width=3/ qed. lemma ltps_tpss_trans_down: ∀L0,L1,T2,U2,d1,e1,d2,e2. d2 + e2 ≤ d1 → - L1 [d1, e1] ≫ L0 → L0 ⊢ T2 [d2, e2] ≫* U2 → - ∃∃T. L1 ⊢ T2 [d2, e2] ≫* T & L0 ⊢ T [d1, e1] ≫* U2. + L1 [d1, e1] ▶ L0 → L0 ⊢ T2 [d2, e2] ▶* U2 → + ∃∃T. L1 ⊢ T2 [d2, e2] ▶* T & L0 ⊢ T [d1, e1] ▶* U2. #L0 #L1 #T2 #U2 #d1 #e1 #d2 #e2 #Hde2d1 #HL10 #H @(tpss_ind … H) -U2 [ /3 width=3/ | #U #U2 #_ #HU2 * #T #HT2 #HTU @@ -60,8 +60,8 @@ lemma ltps_tpss_trans_down: ∀L0,L1,T2,U2,d1,e1,d2,e2. d2 + e2 ≤ d1 → qed. fact ltps_tps_trans_eq_aux: ∀Y1,X2,L1,T2,U2,d,e. - L1 ⊢ T2 [d, e] ≫ U2 → ∀L0. L0 [d, e] ≫ L1 → - Y1 = L1 → X2 = T2 → L0 ⊢ T2 [d, e] ≫* U2. + L1 ⊢ T2 [d, e] ▶ U2 → ∀L0. L0 [d, e] ▶ L1 → + Y1 = L1 → X2 = T2 → L0 ⊢ T2 [d, e] ▶* U2. #Y1 #X2 @(cw_wf_ind … Y1 X2) -Y1 -X2 #Y1 #X2 #IH #L1 #T2 #U2 #d #e * -L1 -T2 -U2 -d -e [ // @@ -84,12 +84,12 @@ fact ltps_tps_trans_eq_aux: ∀Y1,X2,L1,T2,U2,d,e. ] qed. -lemma ltps_tps_trans_eq: ∀L1,T2,U2,d,e. L1 ⊢ T2 [d, e] ≫ U2 → - ∀L0. L0 [d, e] ≫ L1 → L0 ⊢ T2 [d, e] ≫* U2. +lemma ltps_tps_trans_eq: ∀L1,T2,U2,d,e. L1 ⊢ T2 [d, e] ▶ U2 → + ∀L0. L0 [d, e] ▶ L1 → L0 ⊢ T2 [d, e] ▶* U2. /2 width=5/ qed. -lemma ltps_tpss_trans_eq: ∀L0,L1,T2,U2,d,e. L0 [d, e] ≫ L1 → - L1 ⊢ T2 [d, e] ≫* U2 → L0 ⊢ T2 [d, e] ≫* U2. +lemma ltps_tpss_trans_eq: ∀L0,L1,T2,U2,d,e. L0 [d, e] ▶ L1 → + L1 ⊢ T2 [d, e] ▶* U2 → L0 ⊢ T2 [d, e] ▶* U2. #L0 #L1 #T2 #U2 #d #e #HL01 #H @(tpss_ind … H) -U2 // #U #U2 #_ #HU2 #IHU @(tpss_trans_eq … IHU) /2 width=3/ qed. diff --git a/matita/matita/contribs/lambda_delta/Basic_2/unfold/tpss_tpss.ma b/matita/matita/contribs/lambda_delta/Basic_2/unfold/tpss_tpss.ma index 9b40460f2..981402a24 100644 --- a/matita/matita/contribs/lambda_delta/Basic_2/unfold/tpss_tpss.ma +++ b/matita/matita/contribs/lambda_delta/Basic_2/unfold/tpss_tpss.ma @@ -19,36 +19,36 @@ include "Basic_2/unfold/tpss_lift.ma". (* Advanced properties ******************************************************) -lemma tpss_tps: ∀L,T1,T2,d. L ⊢ T1 [d, 1] ≫* T2 → L ⊢ T1 [d, 1] ≫ T2. +lemma tpss_tps: ∀L,T1,T2,d. L ⊢ T1 [d, 1] ▶* T2 → L ⊢ T1 [d, 1] ▶ T2. #L #T1 #T2 #d #H @(tpss_ind … H) -T2 // #T #T2 #_ #HT2 #IHT1 lapply (tps_trans_ge … IHT1 … HT2 ?) // qed. -lemma tpss_strip_eq: ∀L,T0,T1,d1,e1. L ⊢ T0 [d1, e1] ≫* T1 → - ∀T2,d2,e2. L ⊢ T0 [d2, e2] ≫ T2 → - ∃∃T. L ⊢ T1 [d2, e2] ≫ T & L ⊢ T2 [d1, e1] ≫* T. +lemma tpss_strip_eq: ∀L,T0,T1,d1,e1. L ⊢ T0 [d1, e1] ▶* T1 → + ∀T2,d2,e2. L ⊢ T0 [d2, e2] ▶ T2 → + ∃∃T. L ⊢ T1 [d2, e2] ▶ T & L ⊢ T2 [d1, e1] ▶* T. /3 width=3/ qed. -lemma tpss_strip_neq: ∀L1,T0,T1,d1,e1. L1 ⊢ T0 [d1, e1] ≫* T1 → - ∀L2,T2,d2,e2. L2 ⊢ T0 [d2, e2] ≫ T2 → +lemma tpss_strip_neq: ∀L1,T0,T1,d1,e1. L1 ⊢ T0 [d1, e1] ▶* T1 → + ∀L2,T2,d2,e2. L2 ⊢ T0 [d2, e2] ▶ T2 → (d1 + e1 ≤ d2 ∨ d2 + e2 ≤ d1) → - ∃∃T. L2 ⊢ T1 [d2, e2] ≫ T & L1 ⊢ T2 [d1, e1] ≫* T. + ∃∃T. L2 ⊢ T1 [d2, e2] ▶ T & L1 ⊢ T2 [d1, e1] ▶* T. /3 width=3/ qed. -lemma tpss_strap1_down: ∀L,T1,T0,d1,e1. L ⊢ T1 [d1, e1] ≫* T0 → - ∀T2,d2,e2. L ⊢ T0 [d2, e2] ≫ T2 → d2 + e2 ≤ d1 → - ∃∃T. L ⊢ T1 [d2, e2] ≫ T & L ⊢ T [d1, e1] ≫* T2. +lemma tpss_strap1_down: ∀L,T1,T0,d1,e1. L ⊢ T1 [d1, e1] ▶* T0 → + ∀T2,d2,e2. L ⊢ T0 [d2, e2] ▶ T2 → d2 + e2 ≤ d1 → + ∃∃T. L ⊢ T1 [d2, e2] ▶ T & L ⊢ T [d1, e1] ▶* T2. /3 width=3/ qed. -lemma tpss_strap2_down: ∀L,T1,T0,d1,e1. L ⊢ T1 [d1, e1] ≫ T0 → - ∀T2,d2,e2. L ⊢ T0 [d2, e2] ≫* T2 → d2 + e2 ≤ d1 → - ∃∃T. L ⊢ T1 [d2, e2] ≫* T & L ⊢ T [d1, e1] ≫ T2. +lemma tpss_strap2_down: ∀L,T1,T0,d1,e1. L ⊢ T1 [d1, e1] ▶ T0 → + ∀T2,d2,e2. L ⊢ T0 [d2, e2] ▶* T2 → d2 + e2 ≤ d1 → + ∃∃T. L ⊢ T1 [d2, e2] ▶* T & L ⊢ T [d1, e1] ▶ T2. /3 width=3/ qed. -lemma tpss_split_up: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ≫* T2 → +lemma tpss_split_up: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ▶* T2 → ∀i. d ≤ i → i ≤ d + e → - ∃∃T. L ⊢ T1 [d, i - d] ≫* T & L ⊢ T [i, d + e - i] ≫* T2. + ∃∃T. L ⊢ T1 [d, i - d] ▶* T & L ⊢ T [i, d + e - i] ▶* T2. #L #T1 #T2 #d #e #H #i #Hdi #Hide @(tpss_ind … H) -T2 [ /2 width=3/ | #T #T2 #_ #HT12 * #T3 #HT13 #HT3 @@ -58,10 +58,10 @@ lemma tpss_split_up: ∀L,T1,T2,d,e. L ⊢ T1 [d, e] ≫* T2 → ] qed. -lemma tpss_inv_lift1_up: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ≫* U2 → - ∀K,d,e. ⇓[d, e] L ≡ K → ∀T1. ⇑[d, e] T1 ≡ U1 → +lemma tpss_inv_lift1_up: ∀L,U1,U2,dt,et. L ⊢ U1 [dt, et] ▶* U2 → + ∀K,d,e. ⇩[d, e] L ≡ K → ∀T1. ⇧[d, e] T1 ≡ U1 → d ≤ dt → dt ≤ d + e → d + e ≤ dt + et → - ∃∃T2. K ⊢ T1 [d, dt + et - (d + e)] ≫* T2 & ⇑[d, e] T2 ≡ U2. + ∃∃T2. K ⊢ T1 [d, dt + et - (d + e)] ▶* T2 & ⇧[d, e] T2 ≡ U2. #L #U1 #U2 #dt #et #HU12 #K #d #e #HLK #T1 #HTU1 #Hddt #Hdtde #Hdedet elim (tpss_split_up … HU12 (d + e) ? ?) -HU12 // -Hdedet #U #HU1 #HU2 lapply (tpss_weak … HU1 d e ? ?) -HU1 // [ >commutative_plus /2 width=1/ ] -Hddt -Hdtde #HU1 @@ -71,23 +71,23 @@ qed. (* Main properties **********************************************************) -theorem tpss_conf_eq: ∀L,T0,T1,d1,e1. L ⊢ T0 [d1, e1] ≫* T1 → - ∀T2,d2,e2. L ⊢ T0 [d2, e2] ≫* T2 → - ∃∃T. L ⊢ T1 [d2, e2] ≫* T & L ⊢ T2 [d1, e1] ≫* T. +theorem tpss_conf_eq: ∀L,T0,T1,d1,e1. L ⊢ T0 [d1, e1] ▶* T1 → + ∀T2,d2,e2. L ⊢ T0 [d2, e2] ▶* T2 → + ∃∃T. L ⊢ T1 [d2, e2] ▶* T & L ⊢ T2 [d1, e1] ▶* T. /3 width=3/ qed. -theorem tpss_conf_neq: ∀L1,T0,T1,d1,e1. L1 ⊢ T0 [d1, e1] ≫* T1 → - ∀L2,T2,d2,e2. L2 ⊢ T0 [d2, e2] ≫* T2 → +theorem tpss_conf_neq: ∀L1,T0,T1,d1,e1. L1 ⊢ T0 [d1, e1] ▶* T1 → + ∀L2,T2,d2,e2. L2 ⊢ T0 [d2, e2] ▶* T2 → (d1 + e1 ≤ d2 ∨ d2 + e2 ≤ d1) → - ∃∃T. L2 ⊢ T1 [d2, e2] ≫* T & L1 ⊢ T2 [d1, e1] ≫* T. + ∃∃T. L2 ⊢ T1 [d2, e2] ▶* T & L1 ⊢ T2 [d1, e1] ▶* T. /3 width=3/ qed. theorem tpss_trans_eq: ∀L,T1,T,T2,d,e. - L ⊢ T1 [d, e] ≫* T → L ⊢ T [d, e] ≫* T2 → - L ⊢ T1 [d, e] ≫* T2. + L ⊢ T1 [d, e] ▶* T → L ⊢ T [d, e] ▶* T2 → + L ⊢ T1 [d, e] ▶* T2. /2 width=3/ qed. -theorem tpss_trans_down: ∀L,T1,T0,d1,e1. L ⊢ T1 [d1, e1] ≫* T0 → - ∀T2,d2,e2. L ⊢ T0 [d2, e2] ≫* T2 → d2 + e2 ≤ d1 → - ∃∃T. L ⊢ T1 [d2, e2] ≫* T & L ⊢ T [d1, e1] ≫* T2. +theorem tpss_trans_down: ∀L,T1,T0,d1,e1. L ⊢ T1 [d1, e1] ▶* T0 → + ∀T2,d2,e2. L ⊢ T0 [d2, e2] ▶* T2 → d2 + e2 ≤ d1 → + ∃∃T. L ⊢ T1 [d2, e2] ▶* T & L ⊢ T [d1, e1] ▶* T2. /3 width=3/ qed. -- 2.39.2