∀L,k. NF … (RR L) RS (⋆k).
definition CP2 ≝ λRR:lenv→relation term. λRS:relation term.
- â\88\80L,K,W,i. â\87\93[0,i] L ≡ K. 𝕓{Abst} W → NF … (RR L) RS (#i).
+ â\88\80L,K,W,i. â\87©[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 →
- â\87\93[d,e] L0 â\89¡ L â\86\92 â\87\91[d, e] T ≡ T0 → NF … (RR L0) RS T0.
+ â\87©[d,e] L0 â\89¡ L â\86\92 â\87§[d, e] T ≡ T0 → NF … (RR L0) RS T0.
definition CP4s ≝ λRR:lenv→relation term. λRS:relation term.
- â\88\80L0,L,des. â\87\93[des] L0 ≡ L →
- â\88\80T,T0. â\87\91[des] T ≡ T0 →
+ â\88\80L0,L,des. â\87©*[des] L0 ≡ L →
+ â\88\80T,T0. â\87§*[des] T ≡ T0 →
NF … (RR L) RS T → NF … (RR L0) RS T0.
(* requirements for abstract computation properties *)
include "Basic_2/static/aaa.ma".
include "Basic_2/computation/lsubc.ma".
(*
-axiom lsubc_ldrops_trans: â\88\80RP,L1,L2. L1 [RP] â\8a\91 L2 â\86\92 â\88\80K2,des. â\87\93[des] L2 ≡ K2 →
- â\88\83â\88\83K1. â\87\93[des] L1 ≡ K1 & K1 [RP] ⊑ K2.
+axiom lsubc_ldrops_trans: â\88\80RP,L1,L2. L1 [RP] â\8a\91 L2 â\86\92 â\88\80K2,des. â\87©[des] L2 ≡ K2 →
+ â\88\83â\88\83K1. â\87©[des] L1 ≡ K1 & K1 [RP] ⊑ K2.
*)
-axiom ldrops_lsubc_trans: â\88\80RP,L1,K1,des. â\87\93[des] L1 ≡ K1 → ∀K2. K1 [RP] ⊑ K2 →
- â\88\83â\88\83L2. L1 [RP] â\8a\91 L2 & â\87\93[des] L2 ≡ K2.
+axiom ldrops_lsubc_trans: â\88\80RP,L1,K1,des. â\87©*[des] L1 ≡ K1 → ∀K2. K1 [RP] ⊑ K2 →
+ â\88\83â\88\83L2. L1 [RP] â\8a\91 L2 & â\87©*[des] L2 ≡ K2.
-axiom lifts_trans: â\88\80T1,T,des1. â\87\91[des1] T1 â\89¡ T â\86\92 â\88\80T2:term. â\88\80des2. â\87\91[des2] T ≡ T2 →
- â\87\91[des1 @ des2] T1 ≡ T2.
+axiom lifts_trans: â\88\80T1,T,des1. â\87§*[des1] T1 â\89¡ T â\86\92 â\88\80T2:term. â\88\80des2. â\87§*[des2] T ≡ T2 →
+ â\87§*[des1 @ des2] T1 ≡ T2.
-axiom ldrops_trans: â\88\80L1,L,des1. â\87\93[des1] L1 â\89¡ L â\86\92 â\88\80L2,des2. â\87\93[des2] L ≡ L2 →
- â\87\93[des2 @ des1] L1 ≡ L2.
+axiom ldrops_trans: â\88\80L1,L,des1. â\87©*[des1] L1 â\89¡ L â\86\92 â\88\80L2,des2. â\87©*[des2] L ≡ L2 →
+ â\87©*[des2 @ des1] L1 ≡ L2.
(* ABSTRACT COMPUTATION PROPERTIES ******************************************)
axiom aacr_aaa_csubc_lifts: ∀RR,RS,RP.
acp RR RS RP → acr RR RS RP (λL,T. RP L T) →
- â\88\80L1,T,A. L1 â\8a¢ T ÷ A â\86\92 â\88\80L0,des. â\87\93[des] L0 ≡ L1 →
- â\88\80T0. â\87\91[des] T ≡ T0 → ∀L2. L2 [RP] ⊑ L0 →
+ â\88\80L1,T,A. L1 â\8a¢ T ÷ A â\86\92 â\88\80L0,des. â\87©*[des] L0 ≡ L1 →
+ â\88\80T0. â\87§*[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
∀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.
- â\88\80L,V1s,V2s. â\87\91[0, 1] V1s ≡ V2s →
+ â\88\80L,V1s,V2s. â\87§[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 â\86\92 â\87\93[d, e] L2 â\89¡ L1 â\86\92 â\87\91[d, e] T1 ≡ T2 → C L2 T2.
+ C L1 T1 â\86\92 â\87©[d, e] L2 â\89¡ L1 â\86\92 â\87§[d, e] T1 ≡ T2 → C L2 T2.
definition S7s ≝ λC:lenv→predicate term.
- â\88\80L1,L2,des. â\87\93[des] L2 ≡ L1 →
- â\88\80T1,T2. â\87\91[des] T1 ≡ T2 → C L1 T1 → C L2 T2.
+ â\88\80L1,L2,des. â\87©*[des] L2 ≡ L1 →
+ â\88\80T1,T2. â\87§*[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 ≝
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 â\87\92 â\88\80L0,V0,T0,des. aacr RP B L0 V0 â\86\92 â\87\93[des] L0 â\89¡ L â\86\92 â\87\91[des] T ≡ T0 →
+| APair B A â\87\92 â\88\80L0,V0,T0,des. aacr RP B L0 V0 â\86\92 â\87©*[des] L0 â\89¡ L â\86\92 â\87§*[des] T ≡ T0 →
aacr RP A L0 (𝕔{Appl} V0. T0)
].
qed.
lemma rp_lifts: ∀RR,RS,RP. acr RR RS RP (λL,T. RP L T) →
- â\88\80des,L0,L,V,V0. â\87\93[des] L0 â\89¡ L â\86\92 â\87\91[des] V ≡ V0 →
+ â\88\80des,L0,L,V,V0. â\87©*[des] L0 â\89¡ L â\86\92 â\87§*[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/
qed.
lemma rp_liftsv_all: ∀RR,RS,RP. acr RR RS RP (λL,T. RP L T) →
- â\88\80des,L0,L,Vs,V0s. â\87\91[des] Vs â\89¡ V0s â\86\92 â\87\93[des] L0 ≡ L →
+ â\88\80des,L0,L,Vs,V0s. â\87§*[des] Vs â\89¡ V0s â\86\92 â\87©*[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
*)
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 → (
- â\88\80L0,V0,T0,des. â\87\93[des] L0 â\89¡ L â\86\92 â\87\91[ss des] T ≡ T0 →
+ â\88\80L0,V0,T0,des. â\87©*[des] L0 â\89¡ L â\86\92 â\87§*[ss des] T ≡ T0 →
⦃L0, V0⦄ [RP] ϵ 〚B〛→ ⦃L0. 𝕓{Abbr} V0, T0⦄ [RP] ϵ 〚A〛
) →
⦃L, 𝕓{Abst} W. T⦄ [RP] ϵ 〚𝕔 B. A〛.
(* Main properties **********************************************************)
-theorem csn_aaa: â\88\80L,T,A. L â\8a¢ T ÷ A â\86\92 L â\8a¢ â\87\93 T.
+theorem csn_aaa: â\88\80L,T,A. L â\8a¢ T ÷ A â\86\92 L â\8a¢ â¬\87* T.
#L #T #A #H
@(acp_aaa … csn_acp csn_acr … H)
qed.
(* Advanced properties ******************************************************)
-axiom csn_acr: acr cpr (eq â\80¦) (csn â\80¦) (λL,T. L â\8a¢ â\87\93 T).
+axiom csn_acr: acr cpr (eq â\80¦) (csn â\80¦) (λL,T. L â\8a¢ â¬\87* T).
(* Main properties **********************************************************)
-theorem flift_lift: â\88\80T,d,e. â\87\91[d, e] T ≡ ↑[d, e] T.
+theorem flift_lift: â\88\80T,d,e. â\87§[d, e] T ≡ ↑[d, e] T.
#T elim T -T
[ * #i #d #e //
elim (lt_or_eq_or_gt i d) #Hid normalize
(* Main inversion properties ************************************************)
-theorem flift_inv_lift: â\88\80d,e,T1,T2. â\87\91[d, e] T1 ≡ T2 → ↑[d, e] T1 = T2.
+theorem flift_inv_lift: â\88\80d,e,T1,T2. â\87§[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
(* Derived properties *******************************************************)
-lemma flift_join: â\88\80e1,e2,T. â\87\91[e1, e2] ↑[0, e1] T ≡ ↑[0, e1 + e2] T.
+lemma flift_join: â\88\80e1,e2,T. â\87§[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
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).
(* Main properties **********************************************************)
theorem fsubst_delift: ∀K,V,T,L,d.
- â\87\93[0, d] L ≡ K. 𝕓{Abbr} V → L ⊢ T [d, 1] ≡ [d ← V] T.
+ â\87©[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
(* Main inversion properties ************************************************)
-theorem fsubst_inv_delift: â\88\80K,V,T1,L,T2,d. â\87\93[0, d] L ≡ K. 𝕓{Abbr} V →
+theorem fsubst_inv_delift: â\88\80K,V,T1,L,T2,d. â\87©[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
(* Substitution *************************************************************)
-notation "hvbox( â\87\91 [ d , break e ] break T1 ≡ break T2 )"
+notation "hvbox( â\87§ [ d , break e ] break T1 ≡ break T2 )"
non associative with precedence 45
for @{ 'RLift $d $e $T1 $T2 }.
-notation "hvbox( â\87\93 [ d , break e ] break L1 ≡ break L2 )"
+notation "hvbox( â\87© [ 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 â\8a¢ break term 90 T1 break [ d , break e ] â\89« break T2 )"
+notation "hvbox( L â\8a¢ break term 90 T1 break [ d , break e ] â\96¶ break T2 )"
non associative with precedence 45
for @{ 'PSubst $L $T1 $d $e $T2 }.
(* Unfold *******************************************************************)
-notation "hvbox( â\87\91 [ e ] break T1 ≡ break T2 )"
+notation "hvbox( â\87§ * [ e ] break T1 ≡ break T2 )"
non associative with precedence 45
- for @{ 'RLift $e $T1 $T2 }.
+ for @{ 'RLiftStar $e $T1 $T2 }.
-notation "hvbox( â\87\93 [ e ] break L1 ≡ break L2 )"
+notation "hvbox( â\87© * [ 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 ] â\89«* break T2 )"
+notation "hvbox( T1 break [ d , break e ] â\96¶* break T2 )"
non associative with precedence 45
for @{ 'PSubstStar $T1 $d $e $T2 }.
-notation "hvbox( L â\8a¢ break term 90 T1 break [ d , break e ] â\89«* break T2 )"
+notation "hvbox( L â\8a¢ break term 90 T1 break [ d , break e ] â\96¶* break T2 )"
non associative with precedence 45
for @{ 'PSubstStar $L $T1 $d $e $T2 }.
non associative with precedence 45
for @{ 'WHdNormal $L $T }.
-notation "hvbox( T1 â\87\92 break T2 )"
+notation "hvbox( T1 â\9e¡ break T2 )"
non associative with precedence 45
for @{ 'PRed $T1 $T2 }.
-notation "hvbox( L â\8a¢ break term 90 T1 â\87\92 break T2 )"
+notation "hvbox( L â\8a¢ break term 90 T1 â\9e¡ break T2 )"
non associative with precedence 45
for @{ 'PRed $L $T1 $T2 }.
-notation "hvbox( L1 â\8a¢ â\87\92 break L2 )"
+notation "hvbox( L1 â\8a¢ â\9e¡ break L2 )"
non associative with precedence 45
for @{ 'CPRed $L1 $L2 }.
(* Computation **************************************************************)
-notation "hvbox( T1 â\87\92* break T2 )"
+notation "hvbox( T1 â\9e¡* break T2 )"
non associative with precedence 45
for @{ 'PRedStar $T1 $T2 }.
-notation "hvbox( L â\8a¢ break term 90 T1 â\87\92* break T2 )"
+notation "hvbox( L â\8a¢ break term 90 T1 â\9e¡* break T2 )"
non associative with precedence 45
for @{ 'PRedStar $L $T1 $T2 }.
-notation "hvbox( L1 â\8a¢ â\87\92* break L2 )"
+notation "hvbox( L1 â\8a¢ â\9e¡* break L2 )"
non associative with precedence 45
for @{ 'CPRedStar $L1 $L2 }.
-notation "hvbox( â\87\93 T )"
+notation "hvbox( â¬\87 * T )"
non associative with precedence 45
for @{ 'SN $T }.
-notation "hvbox( L â\8a¢ â\87\93 T )"
+notation "hvbox( L â\8a¢ â¬\87 * T )"
non associative with precedence 45
for @{ 'SN $L $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 }.
(* Basic_1: includes: pr2_delta1 *)
definition cpr: lenv → relation term ≝
- λL,T1,T2. â\88\83â\88\83T. T1 â\87\92 T & L â\8a¢ T [0, |L|] â\89«* T2.
+ λL,T1,T2. â\88\83â\88\83T. T1 â\9e¡ T & L â\8a¢ T [0, |L|] â\96¶* T2.
interpretation
"context-sensitive parallel reduction (term)"
(* Basic properties *********************************************************)
(* Basic_1: was by definition: pr2_free *)
-lemma cpr_pr: â\88\80T1,T2. T1 â\87\92 T2 â\86\92 â\88\80L. L â\8a¢ T1 â\87\92 T2.
+lemma cpr_pr: â\88\80T1,T2. T1 â\9e¡ T2 â\86\92 â\88\80L. L â\8a¢ T1 â\9e¡ T2.
/2 width=3/ qed.
-lemma cpr_tpss: â\88\80L,T1,T2,d,e. L â\8a¢ T1 [d, e] â\89«* T2 â\86\92 L â\8a¢ T1 â\87\92 T2.
+lemma cpr_tpss: â\88\80L,T1,T2,d,e. L â\8a¢ T1 [d, e] â\96¶* T2 â\86\92 L â\8a¢ T1 â\9e¡ T2.
/3 width=5/ qed.
-lemma cpr_refl: â\88\80L,T. L â\8a¢ T â\87\92 T.
+lemma cpr_refl: â\88\80L,T. L â\8a¢ T â\9e¡ 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 â\8a¢ V1 â\87\92 V2 â\86\92 L â\8a¢ T1 â\87\92 T2 â\86\92 L â\8a¢ ð\9d\95\97{I} V1. T1 â\87\92 𝕗{I} V2. T2.
+ L â\8a¢ V1 â\9e¡ V2 â\86\92 L â\8a¢ T1 â\9e¡ T2 â\86\92 L â\8a¢ ð\9d\95\97{I} V1. T1 â\9e¡ 𝕗{I} V2. T2.
#I #L #V1 #V2 #T1 #T2 * #V #HV1 #HV2 * /3 width=5/
qed.
lemma cpr_cast: ∀L,V,T1,T2.
- L â\8a¢ T1 â\87\92 T2 â\86\92 L â\8a¢ ð\9d\95\94{Cast} V. T1 â\87\92 T2.
+ L â\8a¢ T1 â\9e¡ T2 â\86\92 L â\8a¢ ð\9d\95\94{Cast} V. T1 â\9e¡ 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: â\88\80L1,T1,T2. L1 â\8a¢ T1 â\87\92 T2 →
- â\88\80L2. L1 [0, |L1|] â\89¼ L2 â\86\92 L2 â\8a¢ T1 â\87\92 T2.
+lemma cpr_lsubs_conf: â\88\80L1,T1,T2. L1 â\8a¢ T1 â\9e¡ T2 →
+ â\88\80L2. L1 [0, |L1|] â\89¼ L2 â\86\92 L2 â\8a¢ T1 â\9e¡ T2.
#L1 #T1 #T2 * #T #HT1 #HT2 #L2 #HL12
lapply (tpss_lsubs_conf … HT2 … HL12) -HT2 -HL12 /3 width=4/
qed.
(* Basic inversion lemmas ***************************************************)
(* Basic_1: was: pr2_gen_csort *)
-lemma cpr_inv_atom: â\88\80T1,T2. â\8b\86 â\8a¢ T1 â\87\92 T2 â\86\92 T1 â\87\92 T2.
+lemma cpr_inv_atom: â\88\80T1,T2. â\8b\86 â\8a¢ T1 â\9e¡ T2 â\86\92 T1 â\9e¡ T2.
#T1 #T2 * #T #HT normalize #HT2
<(tpss_inv_refl_O2 … HT2) -HT2 //
qed-.
(* Basic_1: was: pr2_gen_sort *)
-lemma cpr_inv_sort1: â\88\80L,T2,k. L â\8a¢ â\8b\86k â\87\92 T2 → T2 = ⋆k.
+lemma cpr_inv_sort1: â\88\80L,T2,k. L â\8a¢ â\8b\86k â\9e¡ 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: â\88\80L,V1,T1,U2. L â\8a¢ ð\9d\95\94{Cast} V1. T1 â\87\92 U2 → (
- â\88\83â\88\83V2,T2. L â\8a¢ V1 â\87\92 V2 & L â\8a¢ T1 â\87\92 T2 &
+lemma cpr_inv_cast1: â\88\80L,V1,T1,U2. L â\8a¢ ð\9d\95\94{Cast} V1. T1 â\9e¡ U2 → (
+ â\88\83â\88\83V2,T2. L â\8a¢ V1 â\9e¡ V2 & L â\8a¢ T1 â\9e¡ T2 &
U2 = 𝕔{Cast} V2. T2
- ) â\88¨ L â\8a¢ T1 â\87\92 U2.
+ ) â\88¨ L â\8a¢ T1 â\9e¡ U2.
#L #V1 #T1 #U2 * #X #H #HU2
elim (tpr_inv_cast1 … H) -H /3 width=3/
* #V #T #HV1 #HT1 #H destruct
(* Advanced properties ******************************************************)
-lemma cpr_bind_sn: â\88\80I,L,V1,V2,T1,T2. L â\8a¢ V1 â\87\92 V2 â\86\92 T1 â\87\92 T2 →
- L â\8a¢ ð\9d\95\93{I} V1. T1 â\87\92 𝕓{I} V2. T2.
+lemma cpr_bind_sn: â\88\80I,L,V1,V2,T1,T2. L â\8a¢ V1 â\9e¡ V2 â\86\92 T1 â\9e¡ T2 →
+ L â\8a¢ ð\9d\95\93{I} V1. T1 â\9e¡ 𝕓{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: â\88\80I,L,V1,V2,T1,T2. V1 â\87\92 V2 â\86\92 L. ð\9d\95\93{I} V2 â\8a¢ T1 â\87\92 T2 →
- L â\8a¢ ð\9d\95\93{I} V1. T1 â\87\92 𝕓{I} V2. T2.
+lemma cpr_bind_dx: â\88\80I,L,V1,V2,T1,T2. V1 â\9e¡ V2 â\86\92 L. ð\9d\95\93{I} V2 â\8a¢ T1 â\9e¡ T2 →
+ L â\8a¢ ð\9d\95\93{I} V1. T1 â\9e¡ 𝕓{I} V2. T2.
#I #L #V1 #V2 #T1 #T2 #HV12 * #T #HT1 normalize #HT2
elim (tpss_split_up … HT2 1 ? ?) -HT2 // #T0 <minus_n_O #HT0 normalize <minus_plus_m_m #HT02
lapply (tpss_lsubs_conf … HT0 (⋆. 𝕓{I} V2) ?) -HT0 /2 width=1/ #HT0
(* Advanced forward lemmas **************************************************)
-lemma cpr_shift_fwd: â\88\80L,T1,T2. L â\8a¢ T1 â\87\92 T2 â\86\92 L @ T1 â\87\92 L @ T2.
+lemma cpr_shift_fwd: â\88\80L,T1,T2. L â\8a¢ T1 â\9e¡ T2 â\86\92 L @ T1 â\9e¡ L @ T2.
#L elim L -L
[ #T1 #T2 #HT12 @(cpr_inv_atom … HT12)
| normalize /3 width=1/
(* Main properties **********************************************************)
(* Basic_1: was: pr2_confluence *)
-theorem cpr_conf: â\88\80L,U0,T1,T2. L â\8a¢ U0 â\87\92 T1 â\86\92 L â\8a¢ U0 â\87\92 T2 →
- â\88\83â\88\83T. L â\8a¢ T1 â\87\92 T & L â\8a¢ T2 â\87\92 T.
+theorem cpr_conf: â\88\80L,U0,T1,T2. L â\8a¢ U0 â\9e¡ T1 â\86\92 L â\8a¢ U0 â\9e¡ T2 →
+ â\88\83â\88\83T. L â\8a¢ T1 â\9e¡ T & L â\8a¢ T2 â\9e¡ T.
#L #U0 #T1 #T2 * #U1 #HU01 #HUT1 * #U2 #HU02 #HUT2
elim (tpr_conf … HU01 HU02) -U0 #U #HU1 #HU2
elim (tpr_tpss_ltpr ? L … HU1 … HUT1) -U1 // #U1 #HTU1 #HU1
(* Advanced properties ******************************************************)
lemma cpr_cdelta: ∀L,K,V1,W1,W2,i.
- â\87\93[0, i] L â\89¡ K. ð\9d\95\93{Abbr} V1 â\86\92 K â\8a¢ V1 [0, |L| - i - 1] â\89«* W1 →
- â\87\91[0, i + 1] W1 â\89¡ W2 â\86\92 L â\8a¢ #i â\87\92 W2.
+ â\87©[0, i] L â\89¡ K. ð\9d\95\93{Abbr} V1 â\86\92 K â\8a¢ V1 [0, |L| - i - 1] â\96¶* W1 →
+ â\87§[0, i + 1] W1 â\89¡ W2 â\86\92 L â\8a¢ #i â\9e¡ W2.
#L #K #V1 #W1 #W2 #i #HLK #HVW1 #HW12
lapply (ldrop_fwd_ldrop2_length … HLK) #Hi
@ex2_1_intro [2: // | skip | @tpss_subst /width=6/ ] (**) (* /3 width=6/ is too slow *)
(* Advanced inversion lemmas ************************************************)
(* Basic_1: was: pr2_gen_lref *)
-lemma cpr_inv_lref1: â\88\80L,T2,i. L â\8a¢ #i â\87\92 T2 →
+lemma cpr_inv_lref1: â\88\80L,T2,i. L â\8a¢ #i â\9e¡ T2 →
T2 = #i ∨
- â\88\83â\88\83K,V1,T1. â\87\93[0, i] L ≡ K. 𝕓{Abbr} V1 &
- K â\8a¢ V1 [0, |L| - i - 1] â\89«* T1 &
- â\87\91[0, i + 1] T1 ≡ T2 &
+ â\88\83â\88\83K,V1,T1. â\87©[0, i] L ≡ K. 𝕓{Abbr} V1 &
+ K â\8a¢ V1 [0, |L| - i - 1] â\96¶* T1 &
+ â\87§[0, i + 1] T1 ≡ T2 &
i < |L|.
#L #T2 #i * #X #H
>(tpr_inv_atom1 … H) -H #H
qed-.
(* Basic_1: was: pr2_gen_abst *)
-lemma cpr_inv_abst1: â\88\80V1,T1,U2. ð\9d\95\94{Abst} V1. T1 â\87\92 U2 →
- â\88\83â\88\83V2,T2. V1 â\87\92 V2 & T1 â\87\92 T2 & U2 = 𝕔{Abst} V2. T2.
+lemma cpr_inv_abst1: â\88\80V1,T1,U2. ð\9d\95\94{Abst} V1. T1 â\9e¡ U2 →
+ â\88\83â\88\83V2,T2. V1 â\9e¡ V2 & T1 â\9e¡ T2 & U2 = 𝕔{Abst} V2. T2.
/2 width=3/ qed-.
(* Relocation properties ****************************************************)
(* Basic_1: was: pr2_lift *)
-lemma cpr_lift: â\88\80L,K,d,e. â\87\93[d, e] L ≡ K →
- â\88\80T1,U1. â\87\91[d, e] T1 â\89¡ U1 â\86\92 â\88\80T2,U2. â\87\91[d, e] T2 ≡ U2 →
- K â\8a¢ T1 â\87\92 T2 â\86\92 L â\8a¢ U1 â\87\92 U2.
+lemma cpr_lift: â\88\80L,K,d,e. â\87©[d, e] L ≡ K →
+ â\88\80T1,U1. â\87§[d, e] T1 â\89¡ U1 â\86\92 â\88\80T2,U2. â\87§[d, e] T2 ≡ U2 →
+ K â\8a¢ T1 â\9e¡ T2 â\86\92 L â\8a¢ U1 â\9e¡ 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
qed.
(* Basic_1: was: pr2_gen_lift *)
-lemma cpr_inv_lift: â\88\80L,K,d,e. â\87\93[d, e] L ≡ K →
- â\88\80T1,U1. â\87\91[d, e] T1 â\89¡ U1 â\86\92 â\88\80U2. L â\8a¢ U1 â\87\92 U2 →
- â\88\83â\88\83T2. â\87\91[d, e] T2 â\89¡ U2 & K â\8a¢ T1 â\87\92 T2.
+lemma cpr_inv_lift: â\88\80L,K,d,e. â\87©[d, e] L ≡ K →
+ â\88\80T1,U1. â\87§[d, e] T1 â\89¡ U1 â\86\92 â\88\80U2. L â\8a¢ U1 â\9e¡ U2 →
+ â\88\83â\88\83T2. â\87§[d, e] T2 â\89¡ U2 & K â\8a¢ T1 â\9e¡ 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
(* Note: we could invoke tpss_weak_all instead of ltpr_fwd_length *)
(* Basic_1: was only: pr2_subst1 *)
-lemma cpr_tpss_ltpr: â\88\80L1,L2. L1 â\87\92 L2 â\86\92 â\88\80T1,T2. L2 â\8a¢ T1 â\87\92 T2 →
- â\88\80d,e,U1. L1 â\8a¢ T1 [d, e] â\89«* U1 →
- â\88\83â\88\83U2. L2 â\8a¢ U1 â\87\92 U2 & L2 â\8a¢ T2 [d, e] â\89«* U2.
+lemma cpr_tpss_ltpr: â\88\80L1,L2. L1 â\9e¡ L2 â\86\92 â\88\80T1,T2. L2 â\8a¢ T1 â\9e¡ T2 →
+ â\88\80d,e,U1. L1 â\8a¢ T1 [d, e] â\96¶* U1 →
+ â\88\83â\88\83U2. L2 â\8a¢ U1 â\9e¡ U2 & L2 â\8a¢ T2 [d, e] â\96¶* 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: â\88\80L1,T1,T2. L1 â\8a¢ T1 â\87\92 T2 â\86\92 â\88\80L2. L1 â\87\92 L2 →
- â\88\83â\88\83T. L2 â\8a¢ T1 â\87\92 T & T2 â\87\92 T.
+lemma cpr_ltpr_conf_eq: â\88\80L1,T1,T2. L1 â\8a¢ T1 â\9e¡ T2 â\86\92 â\88\80L2. L1 â\9e¡ L2 →
+ â\88\83â\88\83T. L2 â\8a¢ T1 â\9e¡ T & T2 â\9e¡ 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: â\88\80L1,L2. L1 â\87\92 L2 â\86\92 â\88\80T1,T2. L1 â\8a¢ T1 â\87\92 T2 →
- â\88\80d,e,U1. L1 â\8a¢ T1 [d, e] â\89«* U1 →
- â\88\83â\88\83U2. L2 â\8a¢ U1 â\87\92 U2 & L2 â\8a¢ T2 â\87\92 U2.
+lemma cpr_ltpr_conf_tpss: â\88\80L1,L2. L1 â\9e¡ L2 â\86\92 â\88\80T1,T2. L1 â\8a¢ T1 â\9e¡ T2 →
+ â\88\80d,e,U1. L1 â\8a¢ T1 [d, e] â\96¶* U1 →
+ â\88\83â\88\83U2. L2 â\8a¢ U1 â\9e¡ U2 & L2 â\8a¢ T2 â\9e¡ 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
(* CONTEXT-SENSITIVE PARALLEL REDUCTION ON LOCAL ENVIRONMENTS *************)
definition lcpr: relation lenv ≝
- λL1,L2. â\88\83â\88\83L. L1 â\87\92 L & L [0, |L|] â\89«* L2
+ λL1,L2. â\88\83â\88\83L. L1 â\9e¡ L & L [0, |L|] â\96¶* L2
.
interpretation
(* Basic properties *********************************************************)
-lemma lcpr_refl: â\88\80L. L â\8a¢ â\87\92 L.
+lemma lcpr_refl: â\88\80L. L â\8a¢ â\9e¡ L.
/2 width=3/ qed.
(* Basic inversion lemmas ***************************************************)
-lemma lcpr_inv_atom1: â\88\80L2. â\8b\86 â\8a¢ â\87\92 L2 → L2 = ⋆.
+lemma lcpr_inv_atom1: â\88\80L2. â\8b\86 â\8a¢ â\9e¡ L2 → L2 = ⋆.
#L2 * #L #HL >(ltpr_inv_atom1 … HL) -HL #HL2 >(ltpss_inv_atom1 … HL2) -HL2 //
qed-.
inductive ltpr: relation lenv ≝
| ltpr_stom: ltpr (⋆) (⋆)
| ltpr_pair: ∀K1,K2,I,V1,V2.
- ltpr K1 K2 â\86\92 V1 â\87\92 V2 → ltpr (K1. 𝕓{I} V1) (K2. 𝕓{I} V2) (*𝕓*)
+ ltpr K1 K2 â\86\92 V1 â\9e¡ V2 → ltpr (K1. 𝕓{I} V1) (K2. 𝕓{I} V2) (*𝕓*)
.
interpretation
(* Basic properties *********************************************************)
-lemma ltpr_refl: â\88\80L:lenv. L â\87\92 L.
+lemma ltpr_refl: â\88\80L:lenv. L â\9e¡ L.
#L elim L -L // /2 width=1/
qed.
(* Basic inversion lemmas ***************************************************)
-fact ltpr_inv_atom1_aux: â\88\80L1,L2. L1 â\87\92 L2 → L1 = ⋆ → L2 = ⋆.
+fact ltpr_inv_atom1_aux: â\88\80L1,L2. L1 â\9e¡ L2 → L1 = ⋆ → L2 = ⋆.
#L1 #L2 * -L1 -L2
[ //
| #K1 #K2 #I #V1 #V2 #_ #_ #H destruct
qed.
(* Basic_1: was: wcpr0_gen_sort *)
-lemma ltpr_inv_atom1: â\88\80L2. â\8b\86 â\87\92 L2 → L2 = ⋆.
+lemma ltpr_inv_atom1: â\88\80L2. â\8b\86 â\9e¡ L2 → L2 = ⋆.
/2 width=3/ qed-.
-fact ltpr_inv_pair1_aux: â\88\80L1,L2. L1 â\87\92 L2 → ∀K1,I,V1. L1 = K1. 𝕓{I} V1 →
- â\88\83â\88\83K2,V2. K1 â\87\92 K2 & V1 â\87\92 V2 & L2 = K2. 𝕓{I} V2.
+fact ltpr_inv_pair1_aux: â\88\80L1,L2. L1 â\9e¡ L2 → ∀K1,I,V1. L1 = K1. 𝕓{I} V1 →
+ â\88\83â\88\83K2,V2. K1 â\9e¡ K2 & V1 â\9e¡ 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/
qed.
(* Basic_1: was: wcpr0_gen_head *)
-lemma ltpr_inv_pair1: â\88\80K1,I,V1,L2. K1. ð\9d\95\93{I} V1 â\87\92 L2 →
- â\88\83â\88\83K2,V2. K1 â\87\92 K2 & V1 â\87\92 V2 & L2 = K2. 𝕓{I} V2.
+lemma ltpr_inv_pair1: â\88\80K1,I,V1,L2. K1. ð\9d\95\93{I} V1 â\9e¡ L2 →
+ â\88\83â\88\83K2,V2. K1 â\9e¡ K2 & V1 â\9e¡ V2 & L2 = K2. 𝕓{I} V2.
/2 width=3/ qed-.
-fact ltpr_inv_atom2_aux: â\88\80L1,L2. L1 â\87\92 L2 → L2 = ⋆ → L1 = ⋆.
+fact ltpr_inv_atom2_aux: â\88\80L1,L2. L1 â\9e¡ L2 → L2 = ⋆ → L1 = ⋆.
#L1 #L2 * -L1 -L2
[ //
| #K1 #K2 #I #V1 #V2 #_ #_ #H destruct
]
qed.
-lemma ltpr_inv_atom2: â\88\80L1. L1 â\87\92 ⋆ → L1 = ⋆.
+lemma ltpr_inv_atom2: â\88\80L1. L1 â\9e¡ ⋆ → L1 = ⋆.
/2 width=3/ qed-.
-fact ltpr_inv_pair2_aux: â\88\80L1,L2. L1 â\87\92 L2 → ∀K2,I,V2. L2 = K2. 𝕓{I} V2 →
- â\88\83â\88\83K1,V1. K1 â\87\92 K2 & V1 â\87\92 V2 & L1 = K1. 𝕓{I} V1.
+fact ltpr_inv_pair2_aux: â\88\80L1,L2. L1 â\9e¡ L2 → ∀K2,I,V2. L2 = K2. 𝕓{I} V2 →
+ â\88\83â\88\83K1,V1. K1 â\9e¡ K2 & V1 â\9e¡ 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: â\88\80L1,K2,I,V2. L1 â\87\92 K2. 𝕓{I} V2 →
- â\88\83â\88\83K1,V1. K1 â\87\92 K2 & V1 â\87\92 V2 & L1 = K1. 𝕓{I} V1.
+lemma ltpr_inv_pair2: â\88\80L1,K2,I,V2. L1 â\9e¡ K2. 𝕓{I} V2 →
+ â\88\83â\88\83K1,V1. K1 â\9e¡ K2 & V1 â\9e¡ V2 & L1 = K1. 𝕓{I} V1.
/2 width=3/ qed-.
(* Basic forward lemmas *****************************************************)
-lemma ltpr_fwd_length: â\88\80L1,L2. L1 â\87\92 L2 → |L1| = |L2|.
+lemma ltpr_fwd_length: â\88\80L1,L2. L1 â\9e¡ L2 → |L1| = |L2|.
#L1 #L2 #H elim H -L1 -L2 normalize //
qed-.
(* CONTEXT-FREE PARALLEL REDUCTION ON LOCAL ENVIRONMENTS ********************)
(* Basic_1: was: wcpr0_ldrop *)
-lemma ltpr_ldrop_conf: â\88\80L1,K1,d,e. â\87\93[d, e] L1 â\89¡ K1 â\86\92 â\88\80L2. L1 â\87\92 L2 →
- â\88\83â\88\83K2. â\87\93[d, e] L2 â\89¡ K2 & K1 â\87\92 K2.
+lemma ltpr_ldrop_conf: â\88\80L1,K1,d,e. â\87©[d, e] L1 â\89¡ K1 â\86\92 â\88\80L2. L1 â\9e¡ L2 →
+ â\88\83â\88\83K2. â\87©[d, e] L2 â\89¡ K2 & K1 â\9e¡ 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
qed.
(* Basic_1: was: wcpr0_ldrop_back *)
-lemma ltpr_ldrop_trans: â\88\80L1,K1,d,e. â\87\93[d, e] L1 â\89¡ K1 â\86\92 â\88\80K2. K1 â\87\92 K2 →
- â\88\83â\88\83L2. â\87\93[d, e] L2 â\89¡ K2 & L1 â\87\92 L2.
+lemma ltpr_ldrop_trans: â\88\80L1,K1,d,e. â\87©[d, e] L1 â\89¡ K1 â\86\92 â\88\80K2. K1 â\9e¡ K2 →
+ â\88\83â\88\83L2. â\87©[d, e] L2 â\89¡ K2 & L1 â\9e¡ 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
(* Basic properties *********************************************************)
-lemma tpr_tif_eq: â\88\80T1,T2. T1 â\87\92 T2 → 𝕀[T1] → T1 = T2.
+lemma tpr_tif_eq: â\88\80T1,T2. T1 â\9e¡ T2 → 𝕀[T1] → T1 = T2.
#T1 #T2 #H elim H -T1 -T2
[ //
| * #V1 #V2 #T1 #T2 #_ #_ #IHV1 #IHT1 #H
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 â\86\92 tpr T1 T2 â\86\92 â\8b\86. ð\9d\95\93{I} V2 â\8a¢ T2 [0, 1] â\89« T →
+ tpr V1 V2 â\86\92 tpr T1 T2 â\86\92 â\8b\86. ð\9d\95\93{I} V2 â\8a¢ T2 [0, 1] â\96¶ T →
tpr (𝕓{I} V1. T1) (𝕓{I} V2. T)
| tpr_theta: ∀V,V1,V2,W1,W2,T1,T2.
- tpr V1 V2 â\86\92 â\87\91[0,1] V2 ≡ V → tpr W1 W2 → tpr T1 T2 →
+ tpr V1 V2 â\86\92 â\87§[0,1] V2 ≡ V → tpr W1 W2 → tpr T1 T2 →
tpr (𝕔{Appl} V1. 𝕔{Abbr} W1. T1) (𝕔{Abbr} W2. 𝕔{Appl} V. T2)
-| tpr_zeta : â\88\80V,T,T1,T2. â\87\91[0,1] T1 ≡ T → tpr T1 T2 →
+| tpr_zeta : â\88\80V,T,T1,T2. â\87§[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
.
(* Basic properties *********************************************************)
-lemma tpr_bind: â\88\80I,V1,V2,T1,T2. V1 â\87\92 V2 â\86\92 T1 â\87\92 T2 →
- ð\9d\95\93{I} V1. T1 â\87\92 𝕓{I} V2. T2.
+lemma tpr_bind: â\88\80I,V1,V2,T1,T2. V1 â\9e¡ V2 â\86\92 T1 â\9e¡ T2 →
+ ð\9d\95\93{I} V1. T1 â\9e¡ 𝕓{I} V2. T2.
/2 width=3/ qed.
(* Basic_1: was by definition: pr0_refl *)
-lemma tpr_refl: â\88\80T. T â\87\92 T.
+lemma tpr_refl: â\88\80T. T â\9e¡ T.
#T elim T -T //
#I elim I -I /2 width=1/
qed.
(* Basic inversion lemmas ***************************************************)
-fact tpr_inv_atom1_aux: â\88\80U1,U2. U1 â\87\92 U2 → ∀I. U1 = 𝕒{I} → U2 = 𝕒{I}.
+fact tpr_inv_atom1_aux: â\88\80U1,U2. U1 â\9e¡ U2 → ∀I. U1 = 𝕒{I} → U2 = 𝕒{I}.
#U1 #U2 * -U1 -U2
[ //
| #I #V1 #V2 #T1 #T2 #_ #_ #k #H destruct
qed.
(* Basic_1: was: pr0_gen_sort pr0_gen_lref *)
-lemma tpr_inv_atom1: â\88\80I,U2. ð\9d\95\92{I} â\87\92 U2 → U2 = 𝕒{I}.
+lemma tpr_inv_atom1: â\88\80I,U2. ð\9d\95\92{I} â\9e¡ U2 → U2 = 𝕒{I}.
/2 width=3/ qed-.
-fact tpr_inv_bind1_aux: â\88\80U1,U2. U1 â\87\92 U2 → ∀I,V1,T1. U1 = 𝕓{I} V1. T1 →
- (â\88\83â\88\83V2,T2,T. V1 â\87\92 V2 & T1 â\87\92 T2 &
- â\8b\86. ð\9d\95\93{I} V2 â\8a¢ T2 [0, 1] â\89« T &
+fact tpr_inv_bind1_aux: â\88\80U1,U2. U1 â\9e¡ U2 → ∀I,V1,T1. U1 = 𝕓{I} V1. T1 →
+ (â\88\83â\88\83V2,T2,T. V1 â\9e¡ V2 & T1 â\9e¡ T2 &
+ â\8b\86. ð\9d\95\93{I} V2 â\8a¢ T2 [0, 1] â\96¶ T &
U2 = 𝕓{I} V2. T
) ∨
- â\88\83â\88\83T. â\87\91[0,1] T â\89¡ T1 & T â\87\92 U2 & I = Abbr.
+ â\88\83â\88\83T. â\87§[0,1] T â\89¡ T1 & T â\9e¡ U2 & I = Abbr.
#U1 #U2 * -U1 -U2
[ #J #I #V #T #H destruct
| #I1 #V1 #V2 #T1 #T2 #_ #_ #I #V #T #H destruct
]
qed.
-lemma tpr_inv_bind1: â\88\80V1,T1,U2,I. ð\9d\95\93{I} V1. T1 â\87\92 U2 →
- (â\88\83â\88\83V2,T2,T. V1 â\87\92 V2 & T1 â\87\92 T2 &
- â\8b\86. ð\9d\95\93{I} V2 â\8a¢ T2 [0, 1] â\89« T &
+lemma tpr_inv_bind1: â\88\80V1,T1,U2,I. ð\9d\95\93{I} V1. T1 â\9e¡ U2 →
+ (â\88\83â\88\83V2,T2,T. V1 â\9e¡ V2 & T1 â\9e¡ T2 &
+ â\8b\86. ð\9d\95\93{I} V2 â\8a¢ T2 [0, 1] â\96¶ T &
U2 = 𝕓{I} V2. T
) ∨
- â\88\83â\88\83T. â\87\91[0,1] T â\89¡ T1 & T â\87\92 U2 & I = Abbr.
+ â\88\83â\88\83T. â\87§[0,1] T â\89¡ T1 & T â\9e¡ U2 & I = Abbr.
/2 width=3/ qed-.
(* Basic_1: was pr0_gen_abbr *)
-lemma tpr_inv_abbr1: â\88\80V1,T1,U2. ð\9d\95\93{Abbr} V1. T1 â\87\92 U2 →
- (â\88\83â\88\83V2,T2,T. V1 â\87\92 V2 & T1 â\87\92 T2 &
- â\8b\86. ð\9d\95\93{Abbr} V2 â\8a¢ T2 [0, 1] â\89« T &
+lemma tpr_inv_abbr1: â\88\80V1,T1,U2. ð\9d\95\93{Abbr} V1. T1 â\9e¡ U2 →
+ (â\88\83â\88\83V2,T2,T. V1 â\9e¡ V2 & T1 â\9e¡ T2 &
+ â\8b\86. ð\9d\95\93{Abbr} V2 â\8a¢ T2 [0, 1] â\96¶ T &
U2 = 𝕓{Abbr} V2. T
) ∨
- â\88\83â\88\83T. â\87\91[0,1] T â\89¡ T1 & T â\87\92 U2.
+ â\88\83â\88\83T. â\87§[0,1] T â\89¡ T1 & T â\9e¡ U2.
#V1 #T1 #U2 #H
elim (tpr_inv_bind1 … H) -H * /3 width=7/
qed-.
-fact tpr_inv_flat1_aux: â\88\80U1,U2. U1 â\87\92 U2 → ∀I,V1,U0. U1 = 𝕗{I} V1. U0 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. V1 â\87\92 V2 & U0 â\87\92 T2 &
+fact tpr_inv_flat1_aux: â\88\80U1,U2. U1 â\9e¡ U2 → ∀I,V1,U0. U1 = 𝕗{I} V1. U0 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. V1 â\9e¡ V2 & U0 â\9e¡ T2 &
U2 = 𝕗{I} V2. T2
- | â\88\83â\88\83V2,W,T1,T2. V1 â\87\92 V2 & T1 â\87\92 T2 &
+ | â\88\83â\88\83V2,W,T1,T2. V1 â\9e¡ V2 & T1 â\9e¡ T2 &
U0 = 𝕔{Abst} W. T1 &
U2 = 𝕔{Abbr} V2. T2 & I = Appl
- | â\88\83â\88\83V2,V,W1,W2,T1,T2. V1 â\87\92 V2 & W1 â\87\92 W2 & T1 â\87\92 T2 &
- â\87\91[0,1] V2 ≡ V &
+ | â\88\83â\88\83V2,V,W1,W2,T1,T2. V1 â\9e¡ V2 & W1 â\9e¡ W2 & T1 â\9e¡ T2 &
+ â\87§[0,1] V2 ≡ V &
U0 = 𝕔{Abbr} W1. T1 &
U2 = 𝕔{Abbr} W2. 𝕔{Appl} V. T2 &
I = Appl
- | (U0 â\87\92 U2 ∧ I = Cast).
+ | (U0 â\9e¡ 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/
]
qed.
-lemma tpr_inv_flat1: â\88\80V1,U0,U2,I. ð\9d\95\97{I} V1. U0 â\87\92 U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. V1 â\87\92 V2 & U0 â\87\92 T2 &
+lemma tpr_inv_flat1: â\88\80V1,U0,U2,I. ð\9d\95\97{I} V1. U0 â\9e¡ U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. V1 â\9e¡ V2 & U0 â\9e¡ T2 &
U2 = 𝕗{I} V2. T2
- | â\88\83â\88\83V2,W,T1,T2. V1 â\87\92 V2 & T1 â\87\92 T2 &
+ | â\88\83â\88\83V2,W,T1,T2. V1 â\9e¡ V2 & T1 â\9e¡ T2 &
U0 = 𝕔{Abst} W. T1 &
U2 = 𝕔{Abbr} V2. T2 & I = Appl
- | â\88\83â\88\83V2,V,W1,W2,T1,T2. V1 â\87\92 V2 & W1 â\87\92 W2 & T1 â\87\92 T2 &
- â\87\91[0,1] V2 ≡ V &
+ | â\88\83â\88\83V2,V,W1,W2,T1,T2. V1 â\9e¡ V2 & W1 â\9e¡ W2 & T1 â\9e¡ T2 &
+ â\87§[0,1] V2 ≡ V &
U0 = 𝕔{Abbr} W1. T1 &
U2 = 𝕔{Abbr} W2. 𝕔{Appl} V. T2 &
I = Appl
- | (U0 â\87\92 U2 ∧ I = Cast).
+ | (U0 â\9e¡ U2 ∧ I = Cast).
/2 width=3/ qed-.
(* Basic_1: was pr0_gen_appl *)
-lemma tpr_inv_appl1: â\88\80V1,U0,U2. ð\9d\95\94{Appl} V1. U0 â\87\92 U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. V1 â\87\92 V2 & U0 â\87\92 T2 &
+lemma tpr_inv_appl1: â\88\80V1,U0,U2. ð\9d\95\94{Appl} V1. U0 â\9e¡ U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. V1 â\9e¡ V2 & U0 â\9e¡ T2 &
U2 = 𝕔{Appl} V2. T2
- | â\88\83â\88\83V2,W,T1,T2. V1 â\87\92 V2 & T1 â\87\92 T2 &
+ | â\88\83â\88\83V2,W,T1,T2. V1 â\9e¡ V2 & T1 â\9e¡ T2 &
U0 = 𝕔{Abst} W. T1 &
U2 = 𝕔{Abbr} V2. T2
- | â\88\83â\88\83V2,V,W1,W2,T1,T2. V1 â\87\92 V2 & W1 â\87\92 W2 & T1 â\87\92 T2 &
- â\87\91[0,1] V2 ≡ V &
+ | â\88\83â\88\83V2,V,W1,W2,T1,T2. V1 â\9e¡ V2 & W1 â\9e¡ W2 & T1 â\9e¡ T2 &
+ â\87§[0,1] V2 ≡ V &
U0 = 𝕔{Abbr} W1. T1 &
U2 = 𝕔{Abbr} W2. 𝕔{Appl} V. T2.
#V1 #U0 #U2 #H
qed-.
(* Note: the main property of simple terms *)
-lemma tpr_inv_appl1_simple: â\88\80V1,T1,U. ð\9d\95\94{Appl} V1. T1 â\87\92 U → 𝕊[T1] →
- â\88\83â\88\83V2,T2. V1 â\87\92 V2 & T1 â\87\92 T2 &
+lemma tpr_inv_appl1_simple: â\88\80V1,T1,U. ð\9d\95\94{Appl} V1. T1 â\9e¡ U → 𝕊[T1] →
+ â\88\83â\88\83V2,T2. V1 â\9e¡ V2 & T1 â\9e¡ T2 &
U = 𝕔{Appl} V2. T2.
#V1 #T1 #U #H #HT1
elim (tpr_inv_appl1 … H) -H *
qed-.
(* Basic_1: was: pr0_gen_cast *)
-lemma tpr_inv_cast1: â\88\80V1,T1,U2. ð\9d\95\94{Cast} V1. T1 â\87\92 U2 →
- (â\88\83â\88\83V2,T2. V1 â\87\92 V2 & T1 â\87\92 T2 & U2 = 𝕔{Cast} V2. T2)
- â\88¨ T1 â\87\92 U2.
+lemma tpr_inv_cast1: â\88\80V1,T1,U2. ð\9d\95\94{Cast} V1. T1 â\9e¡ U2 →
+ (â\88\83â\88\83V2,T2. V1 â\9e¡ V2 & T1 â\9e¡ T2 & U2 = 𝕔{Cast} V2. T2)
+ â\88¨ T1 â\9e¡ U2.
#V1 #T1 #U2 #H
elim (tpr_inv_flat1 … H) -H * /3 width=5/
[ #V2 #W #W1 #W2 #_ #_ #_ #_ #H destruct
]
qed-.
-fact tpr_inv_lref2_aux: â\88\80T1,T2. T1 â\87\92 T2 → ∀i. T2 = #i →
+fact tpr_inv_lref2_aux: â\88\80T1,T2. T1 â\9e¡ T2 → ∀i. T2 = #i →
∨∨ T1 = #i
- | â\88\83â\88\83V,T,T0. â\87\91[O,1] T0 â\89¡ T & T0 â\87\92 #i &
+ | â\88\83â\88\83V,T,T0. â\87§[O,1] T0 â\89¡ T & T0 â\9e¡ #i &
T1 = 𝕔{Abbr} V. T
- | â\88\83â\88\83V,T. T â\87\92 #i & T1 = 𝕔{Cast} V. T.
+ | â\88\83â\88\83V,T. T â\9e¡ #i & T1 = 𝕔{Cast} V. T.
#T1 #T2 * -T1 -T2
[ #I #i #H destruct /2 width=1/
| #I #V1 #V2 #T1 #T2 #_ #_ #i #H destruct
]
qed.
-lemma tpr_inv_lref2: â\88\80T1,i. T1 â\87\92 #i →
+lemma tpr_inv_lref2: â\88\80T1,i. T1 â\9e¡ #i →
∨∨ T1 = #i
- | â\88\83â\88\83V,T,T0. â\87\91[O,1] T0 â\89¡ T & T0 â\87\92 #i &
+ | â\88\83â\88\83V,T,T0. â\87§[O,1] T0 â\89¡ T & T0 â\9e¡ #i &
T1 = 𝕔{Abbr} V. T
- | â\88\83â\88\83V,T. T â\87\92 #i & T1 = 𝕔{Cast} V. T.
+ | â\88\83â\88\83V,T. T â\9e¡ #i & T1 = 𝕔{Cast} V. T.
/2 width=3/ qed-.
(* Basic_1: removed theorems 3:
(* Relocation properties ****************************************************)
(* Basic_1: was: pr0_lift *)
-lemma tpr_lift: â\88\80T1,T2. T1 â\87\92 T2 →
- â\88\80d,e,U1. â\87\91[d, e] T1 â\89¡ U1 â\86\92 â\88\80U2. â\87\91[d, e] T2 â\89¡ U2 â\86\92 U1 â\87\92 U2.
+lemma tpr_lift: â\88\80T1,T2. T1 â\9e¡ T2 →
+ â\88\80d,e,U1. â\87§[d, e] T1 â\89¡ U1 â\86\92 â\88\80U2. â\87§[d, e] T2 â\89¡ U2 â\86\92 U1 â\9e¡ U2.
#T1 #T2 #H elim H -T1 -T2
[ * #i #d #e #U1 #HU1 #U2 #HU2
lapply (lift_mono … HU1 … HU2) -HU1 #H destruct
qed.
(* Basic_1: was: pr0_gen_lift *)
-lemma tpr_inv_lift: â\88\80T1,T2. T1 â\87\92 T2 →
- â\88\80d,e,U1. â\87\91[d, e] U1 ≡ T1 →
- â\88\83â\88\83U2. â\87\91[d, e] U2 â\89¡ T2 & U1 â\87\92 U2.
+lemma tpr_inv_lift: â\88\80T1,T2. T1 â\9e¡ T2 →
+ â\88\80d,e,U1. â\87§[d, e] U1 ≡ T1 →
+ â\88\83â\88\83U2. â\87§[d, e] U2 â\89¡ T2 & U1 â\9e¡ U2.
#T1 #T2 #H elim H -T1 -T2
[ * #i #d #e #U1 #HU1
[ lapply (lift_inv_sort2 … HU1) -HU1 #H destruct /2 width=3/
(* Advanced inversion lemmas ************************************************)
-fact tpr_inv_abst1_aux: â\88\80U1,U2. U1 â\87\92 U2 → ∀V1,T1. U1 = 𝕔{Abst} V1. T1 →
- â\88\83â\88\83V2,T2. V1 â\87\92 V2 & T1 â\87\92 T2 & U2 = 𝕔{Abst} V2. T2.
+fact tpr_inv_abst1_aux: â\88\80U1,U2. U1 â\9e¡ U2 → ∀V1,T1. U1 = 𝕔{Abst} V1. T1 →
+ â\88\83â\88\83V2,T2. V1 â\9e¡ V2 & T1 â\9e¡ T2 & U2 = 𝕔{Abst} V2. T2.
#U1 #U2 * -U1 -U2
[ #I #V #T #H destruct
| #I #V1 #V2 #T1 #T2 #_ #_ #V #T #H destruct
qed.
(* Basic_1: was pr0_gen_abst *)
-lemma tpr_inv_abst1: â\88\80V1,T1,U2. ð\9d\95\94{Abst} V1. T1 â\87\92 U2 →
- â\88\83â\88\83V2,T2. V1 â\87\92 V2 & T1 â\87\92 T2 & U2 = 𝕔{Abst} V2. T2.
+lemma tpr_inv_abst1: â\88\80V1,T1,U2. ð\9d\95\94{Abst} V1. T1 â\9e¡ U2 →
+ â\88\83â\88\83V2,T2. V1 â\9e¡ V2 & T1 â\9e¡ T2 & U2 = 𝕔{Abst} V2. T2.
/2 width=3/ qed-.
(* Confluence lemmas ********************************************************)
-fact tpr_conf_atom_atom: â\88\80I. â\88\83â\88\83X. ð\9d\95\92{I} â\87\92 X & ð\9d\95\92{I} â\87\92 X.
+fact tpr_conf_atom_atom: â\88\80I. â\88\83â\88\83X. ð\9d\95\92{I} â\9e¡ X & ð\9d\95\92{I} â\9e¡ X.
/2 width=3/ qed.
fact tpr_conf_flat_flat:
∀I,V0,V1,T0,T1,V2,T2. (
∀X0:term. #[X0] < #[V0] + #[T0] + 1 →
- â\88\80X1,X2. X0 â\87\92 X1 â\86\92 X0 â\87\92 X2 →
- â\88\83â\88\83X. X1 â\87\92 X & X2 â\87\92 X
+ â\88\80X1,X2. X0 â\9e¡ X1 â\86\92 X0 â\9e¡ X2 →
+ â\88\83â\88\83X. X1 â\9e¡ X & X2 â\9e¡ X
) →
- V0 â\87\92 V1 â\86\92 V0 â\87\92 V2 â\86\92 T0 â\87\92 T1 â\86\92 T0 â\87\92 T2 →
- â\88\83â\88\83T0. ð\9d\95\97{I} V1. T1 â\87\92 T0 & ð\9d\95\97{I} V2. T2 â\87\92 T0.
+ V0 â\9e¡ V1 â\86\92 V0 â\9e¡ V2 â\86\92 T0 â\9e¡ T1 â\86\92 T0 â\9e¡ T2 →
+ â\88\83â\88\83T0. ð\9d\95\97{I} V1. T1 â\9e¡ T0 & ð\9d\95\97{I} V2. T2 â\9e¡ 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/
fact tpr_conf_flat_beta:
∀V0,V1,T1,V2,W0,U0,T2. (
∀X0:term. #[X0] < #[V0] + (#[W0] + #[U0] + 1) + 1 →
- â\88\80X1,X2. X0 â\87\92 X1 â\86\92 X0 â\87\92 X2 →
- â\88\83â\88\83X. X1 â\87\92 X & X2 â\87\92 X
+ â\88\80X1,X2. X0 â\9e¡ X1 â\86\92 X0 â\9e¡ X2 →
+ â\88\83â\88\83X. X1 â\9e¡ X & X2 â\9e¡ X
) →
- V0 â\87\92 V1 â\86\92 V0 â\87\92 V2 →
- U0 â\87\92 T2 â\86\92 ð\9d\95\94{Abst} W0. U0 â\87\92 T1 →
- â\88\83â\88\83X. ð\9d\95\94{Appl} V1. T1 â\87\92 X & ð\9d\95\94{Abbr} V2. T2 â\87\92 X.
+ V0 â\9e¡ V1 â\86\92 V0 â\9e¡ V2 →
+ U0 â\9e¡ T2 â\86\92 ð\9d\95\94{Abst} W0. U0 â\9e¡ T1 →
+ â\88\83â\88\83X. ð\9d\95\94{Appl} V1. T1 â\9e¡ X & ð\9d\95\94{Abbr} V2. T2 â\9e¡ 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
fact tpr_conf_flat_theta:
∀V0,V1,T1,V2,V,W0,W2,U0,U2. (
∀X0:term. #[X0] < #[V0] + (#[W0] + #[U0] + 1) + 1 →
- â\88\80X1,X2. X0 â\87\92 X1 â\86\92 X0 â\87\92 X2 →
- â\88\83â\88\83X. X1 â\87\92 X & X2 â\87\92 X
+ â\88\80X1,X2. X0 â\9e¡ X1 â\86\92 X0 â\9e¡ X2 →
+ â\88\83â\88\83X. X1 â\9e¡ X & X2 â\9e¡ X
) →
- V0 â\87\92 V1 â\86\92 V0 â\87\92 V2 â\86\92 â\87\91[O,1] V2 ≡ V →
- W0 â\87\92 W2 â\86\92 U0 â\87\92 U2 â\86\92 ð\9d\95\94{Abbr} W0. U0 â\87\92 T1 →
- â\88\83â\88\83X. ð\9d\95\94{Appl} V1. T1 â\87\92 X & ð\9d\95\94{Abbr} W2. ð\9d\95\94{Appl} V. U2 â\87\92 X.
+ V0 â\9e¡ V1 â\86\92 V0 â\9e¡ V2 â\86\92 â\87§[O,1] V2 ≡ V →
+ W0 â\9e¡ W2 â\86\92 U0 â\9e¡ U2 â\86\92 ð\9d\95\94{Abbr} W0. U0 â\9e¡ T1 →
+ â\88\83â\88\83X. ð\9d\95\94{Appl} V1. T1 â\9e¡ X & ð\9d\95\94{Abbr} W2. ð\9d\95\94{Appl} V. U2 â\9e¡ 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
fact tpr_conf_flat_cast:
∀X2,V0,V1,T0,T1. (
∀X0:term. #[X0] < #[V0] + #[T0] + 1 →
- â\88\80X1,X2. X0 â\87\92 X1 â\86\92 X0 â\87\92 X2 →
- â\88\83â\88\83X. X1 â\87\92 X & X2 â\87\92 X
+ â\88\80X1,X2. X0 â\9e¡ X1 â\86\92 X0 â\9e¡ X2 →
+ â\88\83â\88\83X. X1 â\9e¡ X & X2 â\9e¡ X
) →
- V0 â\87\92 V1 â\86\92 T0 â\87\92 T1 â\86\92 T0 â\87\92 X2 →
- â\88\83â\88\83X. ð\9d\95\94{Cast} V1. T1 â\87\92 X & X2 â\87\92 X.
+ V0 â\9e¡ V1 â\86\92 T0 â\9e¡ T1 â\86\92 T0 â\9e¡ X2 →
+ â\88\83â\88\83X. ð\9d\95\94{Cast} V1. T1 â\9e¡ X & X2 â\9e¡ X.
#X2 #V0 #V1 #T0 #T1 #IH #_ #HT01 #HT02
elim (IH … HT01 … HT02) -HT01 -HT02 -IH // /3 width=3/
qed.
fact tpr_conf_beta_beta:
∀W0:term. ∀V0,V1,T0,T1,V2,T2. (
∀X0:term. #[X0] < #[V0] + (#[W0] + #[T0] + 1) + 1 →
- â\88\80X1,X2. X0 â\87\92 X1 â\86\92 X0 â\87\92 X2 →
- â\88\83â\88\83X. X1 â\87\92 X & X2 â\87\92 X
+ â\88\80X1,X2. X0 â\9e¡ X1 â\86\92 X0 â\9e¡ X2 →
+ â\88\83â\88\83X. X1 â\9e¡ X & X2 â\9e¡ X
) →
- V0 â\87\92 V1 â\86\92 V0 â\87\92 V2 â\86\92 T0 â\87\92 T1 â\86\92 T0 â\87\92 T2 →
- â\88\83â\88\83X. ð\9d\95\94{Abbr} V1. T1 â\87\92X & ð\9d\95\94{Abbr} V2. T2 â\87\92 X.
+ V0 â\9e¡ V1 â\86\92 V0 â\9e¡ V2 â\86\92 T0 â\9e¡ T1 â\86\92 T0 â\9e¡ T2 →
+ â\88\83â\88\83X. ð\9d\95\94{Abbr} V1. T1 â\9e¡X & ð\9d\95\94{Abbr} V2. T2 â\9e¡ 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/
fact tpr_conf_delta_delta:
∀I1,V0,V1,T0,T1,TT1,V2,T2,TT2. (
∀X0:term. #[X0] < #[V0] + #[T0] + 1 →
- â\88\80X1,X2. X0 â\87\92 X1 â\86\92 X0 â\87\92 X2 →
- â\88\83â\88\83X. X1 â\87\92 X & X2 â\87\92 X
+ â\88\80X1,X2. X0 â\9e¡ X1 â\86\92 X0 â\9e¡ X2 →
+ â\88\83â\88\83X. X1 â\9e¡ X & X2 â\9e¡ X
) →
- V0 â\87\92 V1 â\86\92 V0 â\87\92 V2 â\86\92 T0 â\87\92 T1 â\86\92 T0 â\87\92 T2 →
- â\8b\86. ð\9d\95\93{I1} V1 â\8a¢ T1 [O, 1] â\89« TT1 →
- â\8b\86. ð\9d\95\93{I1} V2 â\8a¢ T2 [O, 1] â\89« TT2 →
- â\88\83â\88\83X. ð\9d\95\93{I1} V1. TT1 â\87\92 X & ð\9d\95\93{I1} V2. TT2 â\87\92 X.
+ V0 â\9e¡ V1 â\86\92 V0 â\9e¡ V2 â\86\92 T0 â\9e¡ T1 â\86\92 T0 â\9e¡ T2 →
+ â\8b\86. ð\9d\95\93{I1} V1 â\8a¢ T1 [O, 1] â\96¶ TT1 →
+ â\8b\86. ð\9d\95\93{I1} V2 â\8a¢ T2 [O, 1] â\96¶ TT2 →
+ â\88\83â\88\83X. ð\9d\95\93{I1} V1. TT1 â\9e¡ X & ð\9d\95\93{I1} V2. TT2 â\9e¡ 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
fact tpr_conf_delta_zeta:
∀X2,V0,V1,T0,T1,TT1,T2. (
∀X0:term. #[X0] < #[V0] + #[T0] + 1 →
- â\88\80X1,X2. X0 â\87\92 X1 â\86\92 X0 â\87\92 X2 →
- â\88\83â\88\83X. X1 â\87\92 X & X2 â\87\92 X
+ â\88\80X1,X2. X0 â\9e¡ X1 â\86\92 X0 â\9e¡ X2 →
+ â\88\83â\88\83X. X1 â\9e¡ X & X2 â\9e¡ X
) →
- V0 â\87\92 V1 â\86\92 T0 â\87\92 T1 â\86\92 â\8b\86. ð\9d\95\93{Abbr} V1 â\8a¢ T1 [O,1] â\89« TT1 →
- T2 â\87\92 X2 â\86\92 â\87\91[O, 1] T2 ≡ T0 →
- â\88\83â\88\83X. ð\9d\95\93{Abbr} V1. TT1 â\87\92 X & X2 â\87\92 X.
+ V0 â\9e¡ V1 â\86\92 T0 â\9e¡ T1 â\86\92 â\8b\86. ð\9d\95\93{Abbr} V1 â\8a¢ T1 [O,1] â\96¶ TT1 →
+ T2 â\9e¡ X2 â\86\92 â\87§[O, 1] T2 ≡ T0 →
+ â\88\83â\88\83X. ð\9d\95\93{Abbr} V1. TT1 â\9e¡ X & X2 â\9e¡ 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
fact tpr_conf_theta_theta:
∀VV1,V0,V1,W0,W1,T0,T1,V2,VV2,W2,T2. (
∀X0:term. #[X0] < #[V0] + (#[W0] + #[T0] + 1) + 1 →
- â\88\80X1,X2. X0 â\87\92 X1 â\86\92 X0 â\87\92 X2 →
- â\88\83â\88\83X. X1 â\87\92 X & X2 â\87\92 X
+ â\88\80X1,X2. X0 â\9e¡ X1 â\86\92 X0 â\9e¡ X2 →
+ â\88\83â\88\83X. X1 â\9e¡ X & X2 â\9e¡ X
) →
- V0 â\87\92 V1 â\86\92 V0 â\87\92 V2 â\86\92 W0 â\87\92 W1 â\86\92 W0 â\87\92 W2 â\86\92 T0 â\87\92 T1 â\86\92 T0 â\87\92 T2 →
- â\87\91[O, 1] V1 â\89¡ VV1 â\86\92 â\87\91[O, 1] V2 ≡ VV2 →
- â\88\83â\88\83X. ð\9d\95\94{Abbr} W1. ð\9d\95\94{Appl} VV1. T1 â\87\92 X & ð\9d\95\94{Abbr} W2. ð\9d\95\94{Appl} VV2. T2 â\87\92 X.
+ V0 â\9e¡ V1 â\86\92 V0 â\9e¡ V2 â\86\92 W0 â\9e¡ W1 â\86\92 W0 â\9e¡ W2 â\86\92 T0 â\9e¡ T1 â\86\92 T0 â\9e¡ T2 →
+ â\87§[O, 1] V1 â\89¡ VV1 â\86\92 â\87§[O, 1] V2 ≡ VV2 →
+ â\88\83â\88\83X. ð\9d\95\94{Abbr} W1. ð\9d\95\94{Appl} VV1. T1 â\9e¡ X & ð\9d\95\94{Abbr} W2. ð\9d\95\94{Appl} VV2. T2 â\9e¡ 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
fact tpr_conf_zeta_zeta:
∀V0:term. ∀X2,TT0,T0,T1,T2. (
∀X0:term. #[X0] < #[V0] + #[TT0] + 1 →
- â\88\80X1,X2. X0 â\87\92 X1 â\86\92 X0 â\87\92 X2 →
- â\88\83â\88\83X. X1 â\87\92 X & X2 â\87\92 X
+ â\88\80X1,X2. X0 â\9e¡ X1 â\86\92 X0 â\9e¡ X2 →
+ â\88\83â\88\83X. X1 â\9e¡ X & X2 â\9e¡ X
) →
- T0 â\87\92 T1 â\86\92 T2 â\87\92 X2 →
- â\87\91[O, 1] T0 â\89¡ TT0 â\86\92 â\87\91[O, 1] T2 ≡ TT0 →
- â\88\83â\88\83X. T1 â\87\92 X & X2 â\87\92 X.
+ T0 â\9e¡ T1 â\86\92 T2 â\9e¡ X2 →
+ â\87§[O, 1] T0 â\89¡ TT0 â\86\92 â\87§[O, 1] T2 ≡ TT0 →
+ â\88\83â\88\83X. T1 â\9e¡ X & X2 â\9e¡ 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
fact tpr_conf_tau_tau:
∀V0,T0:term. ∀X2,T1. (
∀X0:term. #[X0] < #[V0] + #[T0] + 1 →
- â\88\80X1,X2. X0 â\87\92 X1 â\86\92 X0 â\87\92 X2 →
- â\88\83â\88\83X. X1 â\87\92 X & X2 â\87\92 X
+ â\88\80X1,X2. X0 â\9e¡ X1 â\86\92 X0 â\9e¡ X2 →
+ â\88\83â\88\83X. X1 â\9e¡ X & X2 â\9e¡ X
) →
- T0 â\87\92 T1 â\86\92 T0 â\87\92 X2 →
- â\88\83â\88\83X. T1 â\87\92 X & X2 â\87\92 X.
+ T0 â\9e¡ T1 â\86\92 T0 â\9e¡ X2 →
+ â\88\83â\88\83X. T1 â\9e¡ X & X2 â\9e¡ X.
#V0 #T0 #X2 #T1 #IH #HT01 #HT02
elim (IH … HT01 … HT02) -HT01 -HT02 -IH // /2 width=3/
qed.
fact tpr_conf_aux:
∀Y0:term. (
∀X0:term. #[X0] < #[Y0] →
- â\88\80X1,X2. X0 â\87\92 X1 â\86\92 X0 â\87\92 X2 →
- â\88\83â\88\83X. X1 â\87\92 X & X2 â\87\92 X
+ â\88\80X1,X2. X0 â\9e¡ X1 â\86\92 X0 â\9e¡ X2 →
+ â\88\83â\88\83X. X1 â\9e¡ X & X2 â\9e¡ X
) →
- â\88\80X0,X1,X2. X0 â\87\92 X1 â\86\92 X0 â\87\92 X2 → X0 = Y0 →
- â\88\83â\88\83X. X1 â\87\92 X & X2 â\87\92 X.
+ â\88\80X0,X1,X2. X0 â\9e¡ X1 â\86\92 X0 â\9e¡ X2 → X0 = Y0 →
+ â\88\83â\88\83X. X1 â\9e¡ X & X2 â\9e¡ X.
#Y0 #IH #X0 #X1 #X2 * -X0 -X1
[ #I1 #H1 #H2 destruct
lapply (tpr_inv_atom1 … H1) -H1
qed.
(* Basic_1: was: pr0_confluence *)
-theorem tpr_conf: â\88\80T0:term. â\88\80T1,T2. T0 â\87\92 T1 â\86\92 T0 â\87\92 T2 →
- â\88\83â\88\83T. T1 â\87\92 T & T2 â\87\92 T.
+theorem tpr_conf: â\88\80T0:term. â\88\80T1,T2. T0 â\9e¡ T1 â\86\92 T0 â\9e¡ T2 →
+ â\88\83â\88\83T. T1 â\9e¡ T & T2 â\9e¡ T.
#T @(tw_wf_ind … T) -T /3 width=6 by tpr_conf_aux/
qed.
(* Unfold properties ********************************************************)
(* Basic_1: was: pr0_subst1 *)
-lemma tpr_tps_ltpr: â\88\80T1,T2. T1 â\87\92 T2 →
- â\88\80L1,d,e,U1. L1 â\8a¢ T1 [d, e] â\89« U1 →
- â\88\80L2. L1 â\87\92 L2 →
- â\88\83â\88\83U2. U1 â\87\92 U2 & L2 â\8a¢ T2 [d, e] â\89«* U2.
+lemma tpr_tps_ltpr: â\88\80T1,T2. T1 â\9e¡ T2 →
+ â\88\80L1,d,e,U1. L1 â\8a¢ T1 [d, e] â\96¶ U1 →
+ â\88\80L2. L1 â\9e¡ L2 →
+ â\88\83â\88\83U2. U1 â\9e¡ U2 & L2 â\8a¢ T2 [d, e] â\96¶* U2.
#T1 #T2 #H elim H -T1 -T2
[ #I #L1 #d #e #X #H
elim (tps_inv_atom1 … H) -H
]
qed.
-lemma tpr_tps_bind: â\88\80I,V1,V2,T1,T2,U1. V1 â\87\92 V2 â\86\92 T1 â\87\92 T2 →
- â\8b\86. ð\9d\95\93{I} V1 â\8a¢ T1 [0, 1] â\89« U1 →
- â\88\83â\88\83U2. U1 â\87\92 U2 & â\8b\86. ð\9d\95\93{I} V2 â\8a¢ T2 [0, 1] â\89« U2.
+lemma tpr_tps_bind: â\88\80I,V1,V2,T1,T2,U1. V1 â\9e¡ V2 â\86\92 T1 â\9e¡ T2 →
+ â\8b\86. ð\9d\95\93{I} V1 â\8a¢ T1 [0, 1] â\96¶ U1 →
+ â\88\83â\88\83U2. U1 â\9e¡ U2 & â\8b\86. ð\9d\95\93{I} V2 â\8a¢ T2 [0, 1] â\96¶ 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: â\88\80L1,L2. L1 â\87\92 L2 â\86\92 â\88\80T1,T2. T1 â\87\92 T2 →
- â\88\80d,e,U1. L1 â\8a¢ T1 [d, e] â\89«* U1 →
- â\88\83â\88\83U2. U1 â\87\92 U2 & L2 â\8a¢ T2 [d, e] â\89«* U2.
+lemma tpr_tpss_ltpr: â\88\80L1,L2. L1 â\9e¡ L2 â\86\92 â\88\80T1,T2. T1 â\9e¡ T2 →
+ â\88\80d,e,U1. L1 â\8a¢ T1 [d, e] â\96¶* U1 →
+ â\88\83â\88\83U2. U1 â\9e¡ U2 & L2 â\8a¢ T2 [d, e] â\96¶* 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
(* Basic properties *********************************************************)
-lemma tpr_thom: â\88\80T1,T2. T1 â\87\92 T2 → T1 ≈ T1 → T1 ≈ T2.
+lemma tpr_thom: â\88\80T1,T2. T1 â\9e¡ 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
inductive aaa: lenv → term → predicate aarity ≝
| aaa_sort: ∀L,k. aaa L (⋆k) 𝕒
-| aaa_lref: â\88\80I,L,K,V,B,i. â\87\93[0, i] L ≡ K. 𝕓{I} V → aaa K V B → aaa L (#i) B
+| aaa_lref: â\88\80I,L,K,V,B,i. â\87©[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.
.
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: â\88\80G1,G2,e. â\87\93[e] G1 ≡ G2 → |G1| ≤ e → G2 = ⋆.
+lemma gdrop_inv_gt: â\88\80G1,G2,e. â\87©[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
]
qed-.
-lemma gdrop_inv_eq: â\88\80G1,G2,e. â\87\93[e] G1 ≡ G2 → |G1| = e + 1 → G1 = G2.
+lemma gdrop_inv_eq: â\88\80G1,G2,e. â\87©[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
]
qed-.
-fact gdrop_inv_lt_aux: â\88\80I,G,G1,G2,V,e. â\87\93[e] G ≡ G2 → G = G1. 𝕓{I} V →
- e < |G1| â\86\92 â\87\93[e] G1 ≡ G2.
+fact gdrop_inv_lt_aux: â\88\80I,G,G1,G2,V,e. â\87©[e] G ≡ G2 → G = G1. 𝕓{I} V →
+ e < |G1| â\86\92 â\87©[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
qed.
lemma gdrop_inv_lt: ∀I,G1,G2,V,e.
- â\87\93[e] G1. ð\9d\95\93{I} V â\89¡ G2 â\86\92 e < |G1| â\86\92 â\87\93[e] G1 ≡ G2.
+ â\87©[e] G1. ð\9d\95\93{I} V â\89¡ G2 â\86\92 e < |G1| â\86\92 â\87©[e] G1 ≡ G2.
/2 width=5/ qed-.
(* Basic properties *********************************************************)
-lemma gdrop_total: â\88\80e,G1. â\88\83G2. â\87\93[e] G1 ≡ G2.
+lemma gdrop_total: â\88\80e,G1. â\88\83G2. â\87©[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
(* Main properties **********************************************************)
-theorem gdrop_mono: â\88\80G,G1,e. â\87\93[e] G â\89¡ G1 â\86\92 â\88\80G2. â\87\93[e] G ≡ G2 → G1 = G2.
+theorem gdrop_mono: â\88\80G,G1,e. â\87©[e] G â\89¡ G1 â\86\92 â\88\80G2. â\87©[e] G ≡ G2 → G1 = G2.
#G #G1 #e #H elim H -G -G1
[ #G #He #G2 #H
>(gdrop_inv_gt … H He) -H -He //
]
qed-.
-lemma gdrop_dec: â\88\80G1,G2,e. Decidable (â\87\93[e] G1 ≡ G2).
+lemma gdrop_dec: â\88\80G1,G2,e. Decidable (â\87©[e] G1 ≡ G2).
#G1 #G2 #e
elim (gdrop_total e G1) #G #HG1
elim (genv_eq_dec G G2) #HG2
| 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 â\86\92 â\87\91[d,e] V2 ≡ V1 →
+ ldrop d e L1 L2 â\86\92 â\87§[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: â\88\80d,e,L1,L2. â\87\93[d, e] L1 ≡ L2 → d = 0 → e = 0 → L1 = L2.
+fact ldrop_inv_refl_aux: â\88\80d,e,L1,L2. â\87©[d, e] L1 ≡ L2 → d = 0 → e = 0 → L1 = L2.
#d #e #L1 #L2 * -d -e -L1 -L2
[ //
| //
qed.
(* Basic_1: was: ldrop_gen_refl *)
-lemma ldrop_inv_refl: â\88\80L1,L2. â\87\93[0, 0] L1 ≡ L2 → L1 = L2.
+lemma ldrop_inv_refl: â\88\80L1,L2. â\87©[0, 0] L1 ≡ L2 → L1 = L2.
/2 width=5/ qed-.
-fact ldrop_inv_atom1_aux: â\88\80d,e,L1,L2. â\87\93[d, e] L1 ≡ L2 → L1 = ⋆ →
+fact ldrop_inv_atom1_aux: â\88\80d,e,L1,L2. â\87©[d, e] L1 ≡ L2 → L1 = ⋆ →
L2 = ⋆.
#d #e #L1 #L2 * -d -e -L1 -L2
[ //
qed.
(* Basic_1: was: ldrop_gen_sort *)
-lemma ldrop_inv_atom1: â\88\80d,e,L2. â\87\93[d, e] ⋆ ≡ L2 → L2 = ⋆.
+lemma ldrop_inv_atom1: â\88\80d,e,L2. â\87©[d, e] ⋆ ≡ L2 → L2 = ⋆.
/2 width=5/ qed-.
-fact ldrop_inv_O1_aux: â\88\80d,e,L1,L2. â\87\93[d, e] L1 ≡ L2 → d = 0 →
+fact ldrop_inv_O1_aux: â\88\80d,e,L1,L2. â\87©[d, e] L1 ≡ L2 → d = 0 →
∀K,I,V. L1 = K. 𝕓{I} V →
(e = 0 ∧ L2 = K. 𝕓{I} V) ∨
- (0 < e â\88§ â\87\93[d, e - 1] K ≡ L2).
+ (0 < e â\88§ â\87©[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/
]
qed.
-lemma ldrop_inv_O1: â\88\80e,K,I,V,L2. â\87\93[0, e] K. 𝕓{I} V ≡ L2 →
+lemma ldrop_inv_O1: â\88\80e,K,I,V,L2. â\87©[0, e] K. 𝕓{I} V ≡ L2 →
(e = 0 ∧ L2 = K. 𝕓{I} V) ∨
- (0 < e â\88§ â\87\93[0, e - 1] K ≡ L2).
+ (0 < e â\88§ â\87©[0, e - 1] K ≡ L2).
/2 width=3/ qed-.
(* Basic_1: was: ldrop_gen_ldrop *)
lemma ldrop_inv_ldrop1: ∀e,K,I,V,L2.
- â\87\93[0, e] K. ð\9d\95\93{I} V â\89¡ L2 â\86\92 0 < e â\86\92 â\87\93[0, e - 1] K ≡ L2.
+ â\87©[0, e] K. ð\9d\95\93{I} V â\89¡ L2 â\86\92 0 < e â\86\92 â\87©[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: â\88\80d,e,L1,L2. â\87\93[d, e] L1 ≡ L2 → 0 < d →
+fact ldrop_inv_skip1_aux: â\88\80d,e,L1,L2. â\87©[d, e] L1 ≡ L2 → 0 < d →
∀I,K1,V1. L1 = K1. 𝕓{I} V1 →
- â\88\83â\88\83K2,V2. â\87\93[d - 1, e] K1 ≡ K2 &
- â\87\91[d - 1, e] V2 ≡ V1 &
+ â\88\83â\88\83K2,V2. â\87©[d - 1, e] K1 ≡ K2 &
+ â\87§[d - 1, e] V2 ≡ V1 &
L2 = K2. 𝕓{I} V2.
#d #e #L1 #L2 * -d -e -L1 -L2
[ #d #e #_ #I #K #V #H destruct
qed.
(* Basic_1: was: ldrop_gen_skip_l *)
-lemma ldrop_inv_skip1: â\88\80d,e,I,K1,V1,L2. â\87\93[d, e] K1. 𝕓{I} V1 ≡ L2 → 0 < d →
- â\88\83â\88\83K2,V2. â\87\93[d - 1, e] K1 ≡ K2 &
- â\87\91[d - 1, e] V2 ≡ V1 &
+lemma ldrop_inv_skip1: â\88\80d,e,I,K1,V1,L2. â\87©[d, e] K1. 𝕓{I} V1 ≡ L2 → 0 < d →
+ â\88\83â\88\83K2,V2. â\87©[d - 1, e] K1 ≡ K2 &
+ â\87§[d - 1, e] V2 ≡ V1 &
L2 = K2. 𝕓{I} V2.
/2 width=3/ qed-.
-fact ldrop_inv_skip2_aux: â\88\80d,e,L1,L2. â\87\93[d, e] L1 ≡ L2 → 0 < d →
+fact ldrop_inv_skip2_aux: â\88\80d,e,L1,L2. â\87©[d, e] L1 ≡ L2 → 0 < d →
∀I,K2,V2. L2 = K2. 𝕓{I} V2 →
- â\88\83â\88\83K1,V1. â\87\93[d - 1, e] K1 ≡ K2 &
- â\87\91[d - 1, e] V2 ≡ V1 &
+ â\88\83â\88\83K1,V1. â\87©[d - 1, e] K1 ≡ K2 &
+ â\87§[d - 1, e] V2 ≡ V1 &
L1 = K1. 𝕓{I} V1.
#d #e #L1 #L2 * -d -e -L1 -L2
[ #d #e #_ #I #K #V #H destruct
qed.
(* Basic_1: was: ldrop_gen_skip_r *)
-lemma ldrop_inv_skip2: â\88\80d,e,I,L1,K2,V2. â\87\93[d, e] L1 ≡ K2. 𝕓{I} V2 → 0 < d →
- â\88\83â\88\83K1,V1. â\87\93[d - 1, e] K1 â\89¡ K2 & â\87\91[d - 1, e] V2 ≡ V1 &
+lemma ldrop_inv_skip2: â\88\80d,e,I,L1,K2,V2. â\87©[d, e] L1 ≡ K2. 𝕓{I} V2 → 0 < d →
+ â\88\83â\88\83K1,V1. â\87©[d - 1, e] K1 â\89¡ K2 & â\87§[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: â\88\80L. â\87\93[0, 0] L ≡ L.
+lemma ldrop_refl: â\88\80L. â\87©[0, 0] L ≡ L.
#L elim L -L //
qed.
lemma ldrop_ldrop_lt: ∀L1,L2,I,V,e.
- â\87\93[0, e - 1] L1 â\89¡ L2 â\86\92 0 < e â\86\92 â\87\93[0, e] L1. 𝕓{I} V ≡ L2.
+ â\87©[0, e - 1] L1 â\89¡ L2 â\86\92 0 < e â\86\92 â\87©[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 →
- â\88\80K1,V,i. â\87\93[0, i] L1 ≡ K1. 𝕓{Abbr} V →
+ â\88\80K1,V,i. â\87©[0, i] L1 ≡ K1. 𝕓{Abbr} V →
d ≤ i → i < d + e →
∃∃K2. K1 [0, d + e - i - 1] ≼ K2 &
- â\87\93[0, i] L2 ≡ K2. 𝕓{Abbr} V.
+ â\87©[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
(* Basic forvard lemmas *****************************************************)
(* Basic_1: was: ldrop_S *)
-lemma ldrop_fwd_ldrop2: â\88\80L1,I2,K2,V2,e. â\87\93[O, e] L1 ≡ K2. 𝕓{I2} V2 →
- â\87\93[O, e + 1] L1 ≡ K2.
+lemma ldrop_fwd_ldrop2: â\88\80L1,I2,K2,V2,e. â\87©[O, e] L1 ≡ K2. 𝕓{I2} V2 →
+ â\87©[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
]
qed-.
-lemma ldrop_fwd_lw: â\88\80L1,L2,d,e. â\87\93[d, e] L1 ≡ L2 → #[L2] ≤ #[L1].
+lemma ldrop_fwd_lw: â\88\80L1,L2,d,e. â\87©[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
qed-.
lemma ldrop_fwd_ldrop2_length: ∀L1,I2,K2,V2,e.
- â\87\93[0, e] L1 ≡ K2. 𝕓{I2} V2 → e < |L1|.
+ â\87©[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
]
qed-.
-lemma ldrop_fwd_O1_length: â\88\80L1,L2,e. â\87\93[0, e] L1 ≡ L2 → |L2| = |L1| - e.
+lemma ldrop_fwd_O1_length: â\88\80L1,L2,e. â\87©[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
(* Main properties **********************************************************)
(* Basic_1: was: ldrop_mono *)
-theorem ldrop_mono: â\88\80d,e,L,L1. â\87\93[d, e] L ≡ L1 →
- â\88\80L2. â\87\93[d, e] L ≡ L2 → L1 = L2.
+theorem ldrop_mono: â\88\80d,e,L,L1. â\87©[d, e] L ≡ L1 →
+ â\88\80L2. â\87©[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 //
qed-.
(* Basic_1: was: ldrop_conf_ge *)
-theorem ldrop_conf_ge: â\88\80d1,e1,L,L1. â\87\93[d1, e1] L ≡ L1 →
- â\88\80e2,L2. â\87\93[0, e2] L ≡ L2 → d1 + e1 ≤ e2 →
- â\87\93[0, e2 - e1] L1 ≡ L2.
+theorem ldrop_conf_ge: â\88\80d1,e1,L,L1. â\87©[d1, e1] L ≡ L1 →
+ â\88\80e2,L2. â\87©[0, e2] L ≡ L2 → d1 + e1 ≤ e2 →
+ â\87©[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 //
qed.
(* Basic_1: was: ldrop_conf_lt *)
-theorem ldrop_conf_lt: â\88\80d1,e1,L,L1. â\87\93[d1, e1] L ≡ L1 →
- â\88\80e2,K2,I,V2. â\87\93[0, e2] L ≡ K2. 𝕓{I} V2 →
+theorem ldrop_conf_lt: â\88\80d1,e1,L,L1. â\87©[d1, e1] L ≡ L1 →
+ â\88\80e2,K2,I,V2. â\87©[0, e2] L ≡ K2. 𝕓{I} V2 →
e2 < d1 → let d ≝ d1 - e2 - 1 in
- â\88\83â\88\83K1,V1. â\87\93[0, e2] L1 ≡ K1. 𝕓{I} V1 &
- â\87\93[d, e1] K2 â\89¡ K1 & â\87\91[d, e1] V1 ≡ V2.
+ â\88\83â\88\83K1,V1. â\87©[0, e2] L1 ≡ K1. 𝕓{I} V1 &
+ â\87©[d, e1] K2 â\89¡ K1 & â\87§[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
qed.
(* Basic_1: was: ldrop_trans_le *)
-theorem ldrop_trans_le: â\88\80d1,e1,L1,L. â\87\93[d1, e1] L1 ≡ L →
- â\88\80e2,L2. â\87\93[0, e2] L ≡ L2 → e2 ≤ d1 →
- â\88\83â\88\83L0. â\87\93[0, e2] L1 â\89¡ L0 & â\87\93[d1 - e2, e1] L0 ≡ L2.
+theorem ldrop_trans_le: â\88\80d1,e1,L1,L. â\87©[d1, e1] L1 ≡ L →
+ â\88\80e2,L2. â\87©[0, e2] L ≡ L2 → e2 ≤ d1 →
+ â\88\83â\88\83L0. â\87©[0, e2] L1 â\89¡ L0 & â\87©[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/
qed.
(* Basic_1: was: ldrop_trans_ge *)
-theorem ldrop_trans_ge: â\88\80d1,e1,L1,L. â\87\93[d1, e1] L1 ≡ L →
- â\88\80e2,L2. â\87\93[0, e2] L â\89¡ L2 â\86\92 d1 â\89¤ e2 â\86\92 â\87\93[0, e1 + e2] L1 ≡ L2.
+theorem ldrop_trans_ge: â\88\80d1,e1,L1,L. â\87©[d1, e1] L1 ≡ L →
+ â\88\80e2,L2. â\87©[0, e2] L â\89¡ L2 â\86\92 d1 â\89¤ e2 â\86\92 â\87©[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 //
qed.
theorem ldrop_trans_ge_comm: ∀d1,e1,e2,L1,L2,L.
- â\87\93[d1, e1] L1 â\89¡ L â\86\92 â\87\93[0, e2] L ≡ L2 → d1 ≤ e2 →
- â\87\93[0, e2 + e1] L1 ≡ L2.
+ â\87©[d1, e1] L1 â\89¡ L â\86\92 â\87©[0, e2] L ≡ L2 → d1 ≤ e2 →
+ â\87©[0, e2 + e1] L1 ≡ L2.
#e1 #e1 #e2 >commutative_plus /2 width=5/
qed.
(* Basic_1: was: ldrop_conf_rev *)
-axiom ldrop_div: â\88\80e1,L1,L. â\87\93[0, e1] L1 â\89¡ L â\86\92 â\88\80e2,L2. â\87\93[0, e2] L2 ≡ L →
- â\88\83â\88\83L0. â\87\93[0, e1] L0 â\89¡ L2 & â\87\93[e1, e2] L0 ≡ L1.
+axiom ldrop_div: â\88\80e1,L1,L. â\87©[0, e1] L1 â\89¡ L â\86\92 â\88\80e2,L2. â\87©[0, e2] L2 ≡ L →
+ â\88\83â\88\83L0. â\87©[0, e1] L0 â\89¡ L2 & â\87©[e1, e2] L0 ≡ L1.
(* Basic inversion lemmas ***************************************************)
-fact lift_inv_refl_O2_aux: â\88\80d,e,T1,T2. â\87\91[d, e] T1 ≡ T2 → e = 0 → T1 = T2.
+fact lift_inv_refl_O2_aux: â\88\80d,e,T1,T2. â\87§[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: â\88\80d,T1,T2. â\87\91[d, 0] T1 ≡ T2 → T1 = T2.
+lemma lift_inv_refl_O2: â\88\80d,T1,T2. â\87§[d, 0] T1 ≡ T2 → T1 = T2.
/2 width=4/ qed-.
-fact lift_inv_sort1_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 ≡ T2 → ∀k. T1 = ⋆k → T2 = ⋆k.
+fact lift_inv_sort1_aux: â\88\80d,e,T1,T2. â\87§[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
]
qed.
-lemma lift_inv_sort1: â\88\80d,e,T2,k. â\87\91[d,e] ⋆k ≡ T2 → T2 = ⋆k.
+lemma lift_inv_sort1: â\88\80d,e,T2,k. â\87§[d,e] ⋆k ≡ T2 → T2 = ⋆k.
/2 width=5/ qed-.
-fact lift_inv_lref1_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 ≡ T2 → ∀i. T1 = #i →
+fact lift_inv_lref1_aux: â\88\80d,e,T1,T2. â\87§[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
]
qed.
-lemma lift_inv_lref1: â\88\80d,e,T2,i. â\87\91[d,e] #i ≡ T2 →
+lemma lift_inv_lref1: â\88\80d,e,T2,i. â\87§[d,e] #i ≡ T2 →
(i < d ∧ T2 = #i) ∨ (d ≤ i ∧ T2 = #(i + e)).
/2 width=3/ qed-.
-lemma lift_inv_lref1_lt: â\88\80d,e,T2,i. â\87\91[d,e] #i ≡ T2 → i < d → T2 = #i.
+lemma lift_inv_lref1_lt: â\88\80d,e,T2,i. â\87§[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: â\88\80d,e,T2,i. â\87\91[d,e] #i ≡ T2 → d ≤ i → T2 = #(i + e).
+lemma lift_inv_lref1_ge: â\88\80d,e,T2,i. â\87§[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: â\88\80d,e,T1,T2. â\87\91[d,e] T1 ≡ T2 → ∀p. T1 = §p → T2 = §p.
+fact lift_inv_gref1_aux: â\88\80d,e,T1,T2. â\87§[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
]
qed.
-lemma lift_inv_gref1: â\88\80d,e,T2,p. â\87\91[d,e] §p ≡ T2 → T2 = §p.
+lemma lift_inv_gref1: â\88\80d,e,T2,p. â\87§[d,e] §p ≡ T2 → T2 = §p.
/2 width=5/ qed-.
-fact lift_inv_bind1_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 ≡ T2 →
+fact lift_inv_bind1_aux: â\88\80d,e,T1,T2. â\87§[d,e] T1 ≡ T2 →
∀I,V1,U1. T1 = 𝕓{I} V1.U1 →
- â\88\83â\88\83V2,U2. â\87\91[d,e] V1 â\89¡ V2 & â\87\91[d+1,e] U1 ≡ U2 &
+ â\88\83â\88\83V2,U2. â\87§[d,e] V1 â\89¡ V2 & â\87§[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
]
qed.
-lemma lift_inv_bind1: â\88\80d,e,T2,I,V1,U1. â\87\91[d,e] 𝕓{I} V1. U1 ≡ T2 →
- â\88\83â\88\83V2,U2. â\87\91[d,e] V1 â\89¡ V2 & â\87\91[d+1,e] U1 ≡ U2 &
+lemma lift_inv_bind1: â\88\80d,e,T2,I,V1,U1. â\87§[d,e] 𝕓{I} V1. U1 ≡ T2 →
+ â\88\83â\88\83V2,U2. â\87§[d,e] V1 â\89¡ V2 & â\87§[d+1,e] U1 ≡ U2 &
T2 = 𝕓{I} V2. U2.
/2 width=3/ qed-.
-fact lift_inv_flat1_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 ≡ T2 →
+fact lift_inv_flat1_aux: â\88\80d,e,T1,T2. â\87§[d,e] T1 ≡ T2 →
∀I,V1,U1. T1 = 𝕗{I} V1.U1 →
- â\88\83â\88\83V2,U2. â\87\91[d,e] V1 â\89¡ V2 & â\87\91[d,e] U1 ≡ U2 &
+ â\88\83â\88\83V2,U2. â\87§[d,e] V1 â\89¡ V2 & â\87§[d,e] U1 ≡ U2 &
T2 = 𝕗{I} V2. U2.
#d #e #T1 #T2 * -d -e -T1 -T2
[ #k #d #e #I #V1 #U1 #H destruct
]
qed.
-lemma lift_inv_flat1: â\88\80d,e,T2,I,V1,U1. â\87\91[d,e] 𝕗{I} V1. U1 ≡ T2 →
- â\88\83â\88\83V2,U2. â\87\91[d,e] V1 â\89¡ V2 & â\87\91[d,e] U1 ≡ U2 &
+lemma lift_inv_flat1: â\88\80d,e,T2,I,V1,U1. â\87§[d,e] 𝕗{I} V1. U1 ≡ T2 →
+ â\88\83â\88\83V2,U2. â\87§[d,e] V1 â\89¡ V2 & â\87§[d,e] U1 ≡ U2 &
T2 = 𝕗{I} V2. U2.
/2 width=3/ qed-.
-fact lift_inv_sort2_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 ≡ T2 → ∀k. T2 = ⋆k → T1 = ⋆k.
+fact lift_inv_sort2_aux: â\88\80d,e,T1,T2. â\87§[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
qed.
(* Basic_1: was: lift_gen_sort *)
-lemma lift_inv_sort2: â\88\80d,e,T1,k. â\87\91[d,e] T1 ≡ ⋆k → T1 = ⋆k.
+lemma lift_inv_sort2: â\88\80d,e,T1,k. â\87§[d,e] T1 ≡ ⋆k → T1 = ⋆k.
/2 width=5/ qed-.
-fact lift_inv_lref2_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 ≡ T2 → ∀i. T2 = #i →
+fact lift_inv_lref2_aux: â\88\80d,e,T1,T2. â\87§[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
qed.
(* Basic_1: was: lift_gen_lref *)
-lemma lift_inv_lref2: â\88\80d,e,T1,i. â\87\91[d,e] T1 ≡ #i →
+lemma lift_inv_lref2: â\88\80d,e,T1,i. â\87§[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: â\88\80d,e,T1,i. â\87\91[d,e] T1 ≡ #i → i < d → T1 = #i.
+lemma lift_inv_lref2_lt: â\88\80d,e,T1,i. â\87§[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
qed-.
(* Basic_1: was: lift_gen_lref_false *)
-lemma lift_inv_lref2_be: â\88\80d,e,T1,i. â\87\91[d,e] T1 ≡ #i →
+lemma lift_inv_lref2_be: â\88\80d,e,T1,i. â\87§[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 ]
qed-.
(* Basic_1: was: lift_gen_lref_ge *)
-lemma lift_inv_lref2_ge: â\88\80d,e,T1,i. â\87\91[d,e] T1 ≡ #i → d + e ≤ i → T1 = #(i - e).
+lemma lift_inv_lref2_ge: â\88\80d,e,T1,i. â\87§[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: â\88\80d,e,T1,T2. â\87\91[d,e] T1 ≡ T2 → ∀p. T2 = §p → T1 = §p.
+fact lift_inv_gref2_aux: â\88\80d,e,T1,T2. â\87§[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
]
qed.
-lemma lift_inv_gref2: â\88\80d,e,T1,p. â\87\91[d,e] T1 ≡ §p → T1 = §p.
+lemma lift_inv_gref2: â\88\80d,e,T1,p. â\87§[d,e] T1 ≡ §p → T1 = §p.
/2 width=5/ qed-.
-fact lift_inv_bind2_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 ≡ T2 →
+fact lift_inv_bind2_aux: â\88\80d,e,T1,T2. â\87§[d,e] T1 ≡ T2 →
∀I,V2,U2. T2 = 𝕓{I} V2.U2 →
- â\88\83â\88\83V1,U1. â\87\91[d,e] V1 â\89¡ V2 & â\87\91[d+1,e] U1 ≡ U2 &
+ â\88\83â\88\83V1,U1. â\87§[d,e] V1 â\89¡ V2 & â\87§[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
qed.
(* Basic_1: was: lift_gen_bind *)
-lemma lift_inv_bind2: â\88\80d,e,T1,I,V2,U2. â\87\91[d,e] T1 ≡ 𝕓{I} V2. U2 →
- â\88\83â\88\83V1,U1. â\87\91[d,e] V1 â\89¡ V2 & â\87\91[d+1,e] U1 ≡ U2 &
+lemma lift_inv_bind2: â\88\80d,e,T1,I,V2,U2. â\87§[d,e] T1 ≡ 𝕓{I} V2. U2 →
+ â\88\83â\88\83V1,U1. â\87§[d,e] V1 â\89¡ V2 & â\87§[d+1,e] U1 ≡ U2 &
T1 = 𝕓{I} V1. U1.
/2 width=3/ qed-.
-fact lift_inv_flat2_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 ≡ T2 →
+fact lift_inv_flat2_aux: â\88\80d,e,T1,T2. â\87§[d,e] T1 ≡ T2 →
∀I,V2,U2. T2 = 𝕗{I} V2.U2 →
- â\88\83â\88\83V1,U1. â\87\91[d,e] V1 â\89¡ V2 & â\87\91[d,e] U1 ≡ U2 &
+ â\88\83â\88\83V1,U1. â\87§[d,e] V1 â\89¡ V2 & â\87§[d,e] U1 ≡ U2 &
T1 = 𝕗{I} V1. U1.
#d #e #T1 #T2 * -d -e -T1 -T2
[ #k #d #e #I #V2 #U2 #H destruct
qed.
(* Basic_1: was: lift_gen_flat *)
-lemma lift_inv_flat2: â\88\80d,e,T1,I,V2,U2. â\87\91[d,e] T1 ≡ 𝕗{I} V2. U2 →
- â\88\83â\88\83V1,U1. â\87\91[d,e] V1 â\89¡ V2 & â\87\91[d,e] U1 ≡ U2 &
+lemma lift_inv_flat2: â\88\80d,e,T1,I,V2,U2. â\87§[d,e] T1 ≡ 𝕗{I} V2. U2 →
+ â\88\83â\88\83V1,U1. â\87§[d,e] V1 â\89¡ V2 & â\87§[d,e] U1 ≡ U2 &
T1 = 𝕗{I} V1. U1.
/2 width=3/ qed-.
-lemma lift_inv_pair_xy_x: â\88\80d,e,I,V,T. â\87\91[d, e] 𝕔{I} V. T ≡ V → False.
+lemma lift_inv_pair_xy_x: â\88\80d,e,I,V,T. â\87§[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
]
qed-.
-lemma lift_inv_pair_xy_y: â\88\80I,T,V,d,e. â\87\91[d, e] 𝕔{I} V. T ≡ T → False.
+lemma lift_inv_pair_xy_y: â\88\80I,T,V,d,e. â\87§[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
(* Basic forward lemmas *****************************************************)
-lemma tw_lift: â\88\80d,e,T1,T2. â\87\91[d, e] T1 ≡ T2 → #[T1] = #[T2].
+lemma tw_lift: â\88\80d,e,T1,T2. â\87§[d, e] T1 ≡ T2 → #[T1] = #[T2].
#d #e #T1 #T2 #H elim H -d -e -T1 -T2 normalize //
qed-.
-lemma lift_simple_dx: â\88\80d,e,T1,T2. â\87\91[d, e] T1 ≡ T2 → 𝕊[T1] → 𝕊[T2].
+lemma lift_simple_dx: â\88\80d,e,T1,T2. â\87§[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: â\88\80d,e,T1,T2. â\87\91[d, e] T1 ≡ T2 → 𝕊[T2] → 𝕊[T1].
+lemma lift_simple_sn: â\88\80d,e,T1,T2. â\87§[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)
(* Basic properties *********************************************************)
(* Basic_1: was: lift_lref_gt *)
-lemma lift_lref_ge_minus: â\88\80d,e,i. d + e â\89¤ i â\86\92 â\87\91[d, e] #(i - e) ≡ #i.
+lemma lift_lref_ge_minus: â\88\80d,e,i. d + e â\89¤ i â\86\92 â\87§[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: â\88\80d,e,i,j. d + e â\89¤ i â\86\92 j = i - e â\86\92 â\87\91[d, e] #j ≡ #i.
+lemma lift_lref_ge_minus_eq: â\88\80d,e,i,j. d + e â\89¤ i â\86\92 j = i - e â\86\92 â\87§[d, e] #j ≡ #i.
/2 width=1/ qed-.
(* Basic_1: was: lift_r *)
-lemma lift_refl: â\88\80T,d. â\87\91[d, 0] T ≡ T.
+lemma lift_refl: â\88\80T,d. â\87§[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: â\88\80T1,d,e. â\88\83T2. â\87\91[d,e] T1 ≡ T2.
+lemma lift_total: â\88\80T1,d,e. â\88\83T2. â\87§[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
qed.
(* Basic_1: was: lift_free (right to left) *)
-lemma lift_split: â\88\80d1,e2,T1,T2. â\87\91[d1, e2] T1 ≡ T2 →
+lemma lift_split: â\88\80d1,e2,T1,T2. â\87§[d1, e2] T1 ≡ T2 →
∀d2,e1. d1 ≤ d2 → d2 ≤ d1 + e1 → e1 ≤ e2 →
- â\88\83â\88\83T. â\87\91[d1, e1] T1 â\89¡ T & â\87\91[d2, e2 - e1] T ≡ T2.
+ â\88\83â\88\83T. â\87§[d1, e1] T1 â\89¡ T & â\87§[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 #_ #_
qed.
(* Basic_1: was only: dnf_dec2 dnf_dec *)
-lemma is_lift_dec: â\88\80T2,d,e. Decidable (â\88\83T1. â\87\91[d,e] T1 ≡ T2).
+lemma is_lift_dec: â\88\80T2,d,e. Decidable (â\88\83T1. â\87§[d,e] T1 ≡ T2).
#T1 elim T1 -T1
[ * [1,3: /3 width=2/ ] #i #d #e
elim (lt_dec i d) #Hid
(* Main properies ***********************************************************)
(* Basic_1: was: lift_inj *)
-theorem lift_inj: â\88\80d,e,T1,U. â\87\91[d,e] T1 â\89¡ U â\86\92 â\88\80T2. â\87\91[d,e] T2 ≡ U → T1 = T2.
+theorem lift_inj: â\88\80d,e,T1,U. â\87§[d,e] T1 â\89¡ U â\86\92 â\88\80T2. â\87§[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 //
qed-.
(* Basic_1: was: lift_gen_lift *)
-theorem lift_div_le: â\88\80d1,e1,T1,T. â\87\91[d1, e1] T1 ≡ T →
- â\88\80d2,e2,T2. â\87\91[d2 + e1, e2] T2 ≡ T →
+theorem lift_div_le: â\88\80d1,e1,T1,T. â\87§[d1, e1] T1 ≡ T →
+ â\88\80d2,e2,T2. â\87§[d2 + e1, e2] T2 ≡ T →
d1 ≤ d2 →
- â\88\83â\88\83T0. â\87\91[d1, e1] T0 â\89¡ T2 & â\87\91[d2, e2] T0 ≡ T1.
+ â\88\83â\88\83T0. â\87§[d1, e1] T0 â\89¡ T2 & â\87§[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/
qed.
(* Note: apparently this was missing in Basic_1 *)
-theorem lift_div_be: â\88\80d1,e1,T1,T. â\87\91[d1, e1] T1 ≡ T →
- â\88\80e,e2,T2. â\87\91[d1 + e, e2] T2 ≡ T →
+theorem lift_div_be: â\88\80d1,e1,T1,T. â\87§[d1, e1] T1 ≡ T →
+ â\88\80e,e2,T2. â\87§[d1 + e, e2] T2 ≡ T →
e ≤ e1 → e1 ≤ e + e2 →
- â\88\83â\88\83T0. â\87\91[d1, e] T0 â\89¡ T2 & â\87\91[d1, e + e2 - e1] T0 ≡ T1.
+ â\88\83â\88\83T0. â\87§[d1, e] T0 â\89¡ T2 & â\87§[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
]
qed.
-theorem lift_mono: â\88\80d,e,T,U1. â\87\91[d,e] T â\89¡ U1 â\86\92 â\88\80U2. â\87\91[d,e] T ≡ U2 → U1 = U2.
+theorem lift_mono: â\88\80d,e,T,U1. â\87§[d,e] T â\89¡ U1 â\86\92 â\88\80U2. â\87§[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 //
qed-.
(* Basic_1: was: lift_free (left to right) *)
-theorem lift_trans_be: â\88\80d1,e1,T1,T. â\87\91[d1, e1] T1 ≡ T →
- â\88\80d2,e2,T2. â\87\91[d2, e2] T ≡ T2 →
- d1 â\89¤ d2 â\86\92 d2 â\89¤ d1 + e1 â\86\92 â\87\91[d1, e1 + e2] T1 ≡ T2.
+theorem lift_trans_be: â\88\80d1,e1,T1,T. â\87§[d1, e1] T1 ≡ T →
+ â\88\80d2,e2,T2. â\87§[d2, e2] T ≡ T2 →
+ d1 â\89¤ d2 â\86\92 d2 â\89¤ d1 + e1 â\86\92 â\87§[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 //
qed.
(* Basic_1: was: lift_d (right to left) *)
-theorem lift_trans_le: â\88\80d1,e1,T1,T. â\87\91[d1, e1] T1 ≡ T →
- â\88\80d2,e2,T2. â\87\91[d2, e2] T ≡ T2 → d2 ≤ d1 →
- â\88\83â\88\83T0. â\87\91[d2, e2] T1 â\89¡ T0 & â\87\91[d1 + e2, e1] T0 ≡ T2.
+theorem lift_trans_le: â\88\80d1,e1,T1,T. â\87§[d1, e1] T1 ≡ T →
+ â\88\80d2,e2,T2. â\87§[d2, e2] T ≡ T2 → d2 ≤ d1 →
+ â\88\83â\88\83T0. â\87§[d2, e2] T1 â\89¡ T0 & â\87§[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/
qed.
(* Basic_1: was: lift_d (left to right) *)
-theorem lift_trans_ge: â\88\80d1,e1,T1,T. â\87\91[d1, e1] T1 ≡ T →
- â\88\80d2,e2,T2. â\87\91[d2, e2] T ≡ T2 → d1 + e1 ≤ d2 →
- â\88\83â\88\83T0. â\87\91[d2 - e1, e2] T1 â\89¡ T0 & â\87\91[d1, e1] T0 ≡ T2.
+theorem lift_trans_ge: â\88\80d1,e1,T1,T. â\87§[d1, e1] T1 ≡ T →
+ â\88\80d2,e2,T2. â\87§[d2, e2] T ≡ T2 → d1 + e1 ≤ d2 →
+ â\88\83â\88\83T0. â\87§[d2 - e1, e2] T1 â\89¡ T0 & â\87§[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/
inductive liftv (d,e:nat) : relation (list term) ≝
| liftv_nil : liftv d e ◊ ◊
| liftv_cons: ∀T1s,T2s,T1,T2.
- â\87\91[d, e] T1 ≡ T2 → liftv d e T1s T2s →
+ â\87§[d, e] T1 ≡ T2 → liftv d e T1s T2s →
liftv d e (T1 :: T1s) (T2 :: T2s)
.
(* Basic properties *********************************************************)
-lemma liftv_total: â\88\80d,e. â\88\80T1s:list term. â\88\83T2s. â\87\91[d, e] T1s ≡ T2s.
+lemma liftv_total: â\88\80d,e. â\88\80T1s:list term. â\88\83T2s. â\87§[d, e] T1s ≡ T2s.
#d #e #T1s elim T1s -T1s
[ /2 width=2/
| #T1 #T1s * #T2s #HT12s
| 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 â\86\92 L2 â\8a¢ V1 [0, e] â\89« V2 →
+ ltps 0 e L1 L2 â\86\92 L2 â\8a¢ V1 [0, e] â\96¶ 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 â\86\92 L2 â\8a¢ V1 [d, e] â\89« V2 →
+ ltps d e L1 L2 â\86\92 L2 â\8a¢ V1 [d, e] â\96¶ V2 →
ltps (d + 1) e (L1. 𝕓{I} V1) (L2. 𝕓{I} V2)
.
(* Basic properties *********************************************************)
lemma ltps_tps2_lt: ∀L1,L2,I,V1,V2,e.
- L1 [0, e - 1] â\89« L2 â\86\92 L2 â\8a¢ V1 [0, e - 1] â\89« V2 →
- 0 < e â\86\92 L1. ð\9d\95\93{I} V1 [0, e] â\89« L2. 𝕓{I} V2.
+ L1 [0, e - 1] â\96¶ L2 â\86\92 L2 â\8a¢ V1 [0, e - 1] â\96¶ V2 →
+ 0 < e â\86\92 L1. ð\9d\95\93{I} V1 [0, e] â\96¶ 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] â\89« L2 â\86\92 L2 â\8a¢ V1 [d - 1, e] â\89« V2 →
- 0 < d â\86\92 L1. ð\9d\95\93{I} V1 [d, e] â\89« L2. 𝕓{I} V2.
+ L1 [d - 1, e] â\96¶ L2 â\86\92 L2 â\8a¢ V1 [d - 1, e] â\96¶ V2 →
+ 0 < d â\86\92 L1. ð\9d\95\93{I} V1 [d, e] â\96¶ 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: â\88\80L,d,e. L [d, e] â\89« L.
+lemma ltps_refl: â\88\80L,d,e. L [d, e] â\96¶ 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: â\88\80d,e,L1,L2. L1 [d, e] â\89« L2 → e = 0 → L1 = L2.
+fact ltps_inv_refl_O2_aux: â\88\80d,e,L1,L2. L1 [d, e] â\96¶ 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
]
qed.
-lemma ltps_inv_refl_O2: â\88\80d,L1,L2. L1 [d, 0] â\89« L2 → L1 = L2.
+lemma ltps_inv_refl_O2: â\88\80d,L1,L2. L1 [d, 0] â\96¶ L2 → L1 = L2.
/2 width=4/ qed-.
fact ltps_inv_atom1_aux: ∀d,e,L1,L2.
- L1 [d, e] â\89« L2 → L1 = ⋆ → L2 = ⋆.
+ L1 [d, e] â\96¶ L2 → L1 = ⋆ → L2 = ⋆.
#d #e #L1 #L2 * -d -e -L1 -L2
[ //
| #L #I #V #H destruct
]
qed.
-lemma ltps_inv_atom1: â\88\80d,e,L2. â\8b\86 [d, e] â\89« L2 → L2 = ⋆.
+lemma ltps_inv_atom1: â\88\80d,e,L2. â\8b\86 [d, e] â\96¶ L2 → L2 = ⋆.
/2 width=5/ qed-.
-fact ltps_inv_tps21_aux: â\88\80d,e,L1,L2. L1 [d, e] â\89« L2 → d = 0 → 0 < e →
+fact ltps_inv_tps21_aux: â\88\80d,e,L1,L2. L1 [d, e] â\96¶ L2 → d = 0 → 0 < e →
∀K1,I,V1. L1 = K1. 𝕓{I} V1 →
- â\88\83â\88\83K2,V2. K1 [0, e - 1] â\89« K2 &
- K2 â\8a¢ V1 [0, e - 1] â\89« V2 &
+ â\88\83â\88\83K2,V2. K1 [0, e - 1] â\96¶ K2 &
+ K2 â\8a¢ V1 [0, e - 1] â\96¶ V2 &
L2 = K2. 𝕓{I} V2.
#d #e #L1 #L2 * -d -e -L1 -L2
[ #d #e #_ #_ #K1 #I #V1 #H destruct
]
qed.
-lemma ltps_inv_tps21: â\88\80e,K1,I,V1,L2. K1. ð\9d\95\93{I} V1 [0, e] â\89« L2 → 0 < e →
- â\88\83â\88\83K2,V2. K1 [0, e - 1] â\89« K2 & K2 â\8a¢ V1 [0, e - 1] â\89« V2 &
+lemma ltps_inv_tps21: â\88\80e,K1,I,V1,L2. K1. ð\9d\95\93{I} V1 [0, e] â\96¶ L2 → 0 < e →
+ â\88\83â\88\83K2,V2. K1 [0, e - 1] â\96¶ K2 & K2 â\8a¢ V1 [0, e - 1] â\96¶ V2 &
L2 = K2. 𝕓{I} V2.
/2 width=5/ qed-.
-fact ltps_inv_tps11_aux: â\88\80d,e,L1,L2. L1 [d, e] â\89« L2 → 0 < d →
+fact ltps_inv_tps11_aux: â\88\80d,e,L1,L2. L1 [d, e] â\96¶ L2 → 0 < d →
∀I,K1,V1. L1 = K1. 𝕓{I} V1 →
- â\88\83â\88\83K2,V2. K1 [d - 1, e] â\89« K2 &
- K2 â\8a¢ V1 [d - 1, e] â\89« V2 &
+ â\88\83â\88\83K2,V2. K1 [d - 1, e] â\96¶ K2 &
+ K2 â\8a¢ V1 [d - 1, e] â\96¶ V2 &
L2 = K2. 𝕓{I} V2.
#d #e #L1 #L2 * -d -e -L1 -L2
[ #d #e #_ #I #K1 #V1 #H destruct
]
qed.
-lemma ltps_inv_tps11: â\88\80d,e,I,K1,V1,L2. K1. ð\9d\95\93{I} V1 [d, e] â\89« L2 → 0 < d →
- â\88\83â\88\83K2,V2. K1 [d - 1, e] â\89« K2 &
- K2 â\8a¢ V1 [d - 1, e] â\89« V2 &
+lemma ltps_inv_tps11: â\88\80d,e,I,K1,V1,L2. K1. ð\9d\95\93{I} V1 [d, e] â\96¶ L2 → 0 < d →
+ â\88\83â\88\83K2,V2. K1 [d - 1, e] â\96¶ K2 &
+ K2 â\8a¢ V1 [d - 1, e] â\96¶ V2 &
L2 = K2. 𝕓{I} V2.
/2 width=3/ qed-.
fact ltps_inv_atom2_aux: ∀d,e,L1,L2.
- L1 [d, e] â\89« L2 → L2 = ⋆ → L1 = ⋆.
+ L1 [d, e] â\96¶ L2 → L2 = ⋆ → L1 = ⋆.
#d #e #L1 #L2 * -d -e -L1 -L2
[ //
| #L #I #V #H destruct
]
qed.
-lemma ltps_inv_atom2: â\88\80d,e,L1. L1 [d, e] â\89« ⋆ → L1 = ⋆.
+lemma ltps_inv_atom2: â\88\80d,e,L1. L1 [d, e] â\96¶ ⋆ → L1 = ⋆.
/2 width=5/ qed-.
-fact ltps_inv_tps22_aux: â\88\80d,e,L1,L2. L1 [d, e] â\89« L2 → d = 0 → 0 < e →
+fact ltps_inv_tps22_aux: â\88\80d,e,L1,L2. L1 [d, e] â\96¶ L2 → d = 0 → 0 < e →
∀K2,I,V2. L2 = K2. 𝕓{I} V2 →
- â\88\83â\88\83K1,V1. K1 [0, e - 1] â\89« K2 &
- K2 â\8a¢ V1 [0, e - 1] â\89« V2 &
+ â\88\83â\88\83K1,V1. K1 [0, e - 1] â\96¶ K2 &
+ K2 â\8a¢ V1 [0, e - 1] â\96¶ V2 &
L1 = K1. 𝕓{I} V1.
#d #e #L1 #L2 * -d -e -L1 -L2
[ #d #e #_ #_ #K1 #I #V1 #H destruct
]
qed.
-lemma ltps_inv_tps22: â\88\80e,L1,K2,I,V2. L1 [0, e] â\89« K2. 𝕓{I} V2 → 0 < e →
- â\88\83â\88\83K1,V1. K1 [0, e - 1] â\89« K2 & K2 â\8a¢ V1 [0, e - 1] â\89« V2 &
+lemma ltps_inv_tps22: â\88\80e,L1,K2,I,V2. L1 [0, e] â\96¶ K2. 𝕓{I} V2 → 0 < e →
+ â\88\83â\88\83K1,V1. K1 [0, e - 1] â\96¶ K2 & K2 â\8a¢ V1 [0, e - 1] â\96¶ V2 &
L1 = K1. 𝕓{I} V1.
/2 width=5/ qed-.
-fact ltps_inv_tps12_aux: â\88\80d,e,L1,L2. L1 [d, e] â\89« L2 → 0 < d →
+fact ltps_inv_tps12_aux: â\88\80d,e,L1,L2. L1 [d, e] â\96¶ L2 → 0 < d →
∀I,K2,V2. L2 = K2. 𝕓{I} V2 →
- â\88\83â\88\83K1,V1. K1 [d - 1, e] â\89« K2 &
- K2 â\8a¢ V1 [d - 1, e] â\89« V2 &
+ â\88\83â\88\83K1,V1. K1 [d - 1, e] â\96¶ K2 &
+ K2 â\8a¢ V1 [d - 1, e] â\96¶ V2 &
L1 = K1. 𝕓{I} V1.
#d #e #L1 #L2 * -d -e -L1 -L2
[ #d #e #_ #I #K2 #V2 #H destruct
]
qed.
-lemma ltps_inv_tps12: â\88\80L1,K2,I,V2,d,e. L1 [d, e] â\89« K2. 𝕓{I} V2 → 0 < d →
- â\88\83â\88\83K1,V1. K1 [d - 1, e] â\89« K2 &
- K2 â\8a¢ V1 [d - 1, e] â\89« V2 &
+lemma ltps_inv_tps12: â\88\80L1,K2,I,V2,d,e. L1 [d, e] â\96¶ K2. 𝕓{I} V2 → 0 < d →
+ â\88\83â\88\83K1,V1. K1 [d - 1, e] â\96¶ K2 &
+ K2 â\8a¢ V1 [d - 1, e] â\96¶ V2 &
L1 = K1. 𝕓{I} V1.
/2 width=3/ qed-.
(* PARALLEL SUBSTITUTION ON LOCAL ENVIRONMENTS ******************************)
-lemma ltps_ldrop_conf_ge: â\88\80L0,L1,d1,e1. L0 [d1, e1] â\89« L1 →
- â\88\80L2,e2. â\87\93[0, e2] L0 ≡ L2 →
- d1 + e1 â\89¤ e2 â\86\92 â\87\93[0, e2] L1 ≡ L2.
+lemma ltps_ldrop_conf_ge: â\88\80L0,L1,d1,e1. L0 [d1, e1] â\96¶ L1 →
+ â\88\80L2,e2. â\87©[0, e2] L0 ≡ L2 →
+ d1 + e1 â\89¤ e2 â\86\92 â\87©[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 //
| //
]
qed.
-lemma ltps_ldrop_trans_ge: â\88\80L1,L0,d1,e1. L1 [d1, e1] â\89« L0 →
- â\88\80L2,e2. â\87\93[0, e2] L0 ≡ L2 →
- d1 + e1 â\89¤ e2 â\86\92 â\87\93[0, e2] L1 ≡ L2.
+lemma ltps_ldrop_trans_ge: â\88\80L1,L0,d1,e1. L1 [d1, e1] â\96¶ L0 →
+ â\88\80L2,e2. â\87©[0, e2] L0 ≡ L2 →
+ d1 + e1 â\89¤ e2 â\86\92 â\87©[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 //
| //
]
qed.
-lemma ltps_ldrop_conf_be: â\88\80L0,L1,d1,e1. L0 [d1, e1] â\89« L1 →
- â\88\80L2,e2. â\87\93[0, e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 →
- â\88\83â\88\83L. L2 [0, d1 + e1 - e2] â\89« L & â\87\93[0, e2] L1 ≡ L.
+lemma ltps_ldrop_conf_be: â\88\80L0,L1,d1,e1. L0 [d1, e1] â\96¶ L1 →
+ â\88\80L2,e2. â\87©[0, e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 →
+ â\88\83â\88\83L. L2 [0, d1 + e1 - e2] â\96¶ L & â\87©[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
]
qed.
-lemma ltps_ldrop_trans_be: â\88\80L1,L0,d1,e1. L1 [d1, e1] â\89« L0 →
- â\88\80L2,e2. â\87\93[0, e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 →
- â\88\83â\88\83L. L [0, d1 + e1 - e2] â\89« L2 & â\87\93[0, e2] L1 ≡ L.
+lemma ltps_ldrop_trans_be: â\88\80L1,L0,d1,e1. L1 [d1, e1] â\96¶ L0 →
+ â\88\80L2,e2. â\87©[0, e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 →
+ â\88\83â\88\83L. L [0, d1 + e1 - e2] â\96¶ L2 & â\87©[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
]
qed.
-lemma ltps_ldrop_conf_le: â\88\80L0,L1,d1,e1. L0 [d1, e1] â\89« L1 →
- â\88\80L2,e2. â\87\93[0, e2] L0 ≡ L2 → e2 ≤ d1 →
- â\88\83â\88\83L. L2 [d1 - e2, e1] â\89« L & â\87\93[0, e2] L1 ≡ L.
+lemma ltps_ldrop_conf_le: â\88\80L0,L1,d1,e1. L0 [d1, e1] â\96¶ L1 →
+ â\88\80L2,e2. â\87©[0, e2] L0 ≡ L2 → e2 ≤ d1 →
+ â\88\83â\88\83L. L2 [d1 - e2, e1] â\96¶ L & â\87©[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/
]
qed.
-lemma ltps_ldrop_trans_le: â\88\80L1,L0,d1,e1. L1 [d1, e1] â\89« L0 →
- â\88\80L2,e2. â\87\93[0, e2] L0 ≡ L2 → e2 ≤ d1 →
- â\88\83â\88\83L. L [d1 - e2, e1] â\89« L2 & â\87\93[0, e2] L1 ≡ L.
+lemma ltps_ldrop_trans_le: â\88\80L1,L0,d1,e1. L1 [d1, e1] â\96¶ L0 →
+ â\88\80L2,e2. â\87©[0, e2] L0 ≡ L2 → e2 ≤ d1 →
+ â\88\83â\88\83L. L [d1 - e2, e1] â\96¶ L2 & â\87©[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/
(* PARALLEL SUBSTITUTION ON LOCAL ENVIRONMENTS ******************************)
-lemma ltps_tps_conf_ge: â\88\80L0,T2,U2,d2,e2. L0 â\8a¢ T2 [d2, e2] â\89« U2 →
- â\88\80L1,d1,e1. L0 [d1, e1] â\89« L1 → d1 + e1 ≤ d2 →
- L1 â\8a¢ T2 [d2, e2] â\89« U2.
+lemma ltps_tps_conf_ge: â\88\80L0,T2,U2,d2,e2. L0 â\8a¢ T2 [d2, e2] â\96¶ U2 →
+ â\88\80L1,d1,e1. L0 [d1, e1] â\96¶ L1 → d1 + e1 ≤ d2 →
+ L1 â\8a¢ T2 [d2, e2] â\96¶ 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
qed.
(* Basic_1: was: subst1_subst1_back *)
-lemma ltps_tps_conf: â\88\80L0,T2,U2,d2,e2. L0 â\8a¢ T2 [d2, e2] â\89« U2 →
- â\88\80L1,d1,e1. L0 [d1, e1] â\89« L1 →
- â\88\83â\88\83T. L1 â\8a¢ T2 [d2, e2] â\89« T &
- L1 â\8a¢ U2 [d1, e1] â\89« T.
+lemma ltps_tps_conf: â\88\80L0,T2,U2,d2,e2. L0 â\8a¢ T2 [d2, e2] â\96¶ U2 →
+ â\88\80L1,d1,e1. L0 [d1, e1] â\96¶ L1 →
+ â\88\83â\88\83T. L1 â\8a¢ T2 [d2, e2] â\96¶ T &
+ L1 â\8a¢ U2 [d1, e1] â\96¶ 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
]
qed.
-lemma ltps_tps_trans_ge: â\88\80L0,T2,U2,d2,e2. L0 â\8a¢ T2 [d2, e2] â\89« U2 →
- â\88\80L1,d1,e1. L1 [d1, e1] â\89« L0 → d1 + e1 ≤ d2 →
- L1 â\8a¢ T2 [d2, e2] â\89« U2.
+lemma ltps_tps_trans_ge: â\88\80L0,T2,U2,d2,e2. L0 â\8a¢ T2 [d2, e2] â\96¶ U2 →
+ â\88\80L1,d1,e1. L1 [d1, e1] â\96¶ L0 → d1 + e1 ≤ d2 →
+ L1 â\8a¢ T2 [d2, e2] â\96¶ 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
qed.
(* Basic_1: was: subst1_subst1 *)
-lemma ltps_tps_trans: â\88\80L0,T2,U2,d2,e2. L0 â\8a¢ T2 [d2, e2] â\89« U2 →
- â\88\80L1,d1,e1. L1 [d1, e1] â\89« L0 →
- â\88\83â\88\83T. L1 â\8a¢ T2 [d2, e2] â\89« T &
- L0 â\8a¢ T [d1, e1] â\89« U2.
+lemma ltps_tps_trans: â\88\80L0,T2,U2,d2,e2. L0 â\8a¢ T2 [d2, e2] â\96¶ U2 →
+ â\88\80L1,d1,e1. L1 [d1, e1] â\96¶ L0 →
+ â\88\83â\88\83T. L1 â\8a¢ T2 [d2, e2] â\96¶ T &
+ L0 â\8a¢ T [d1, e1] â\96¶ 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
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 →
- â\87\93[0, i] L â\89¡ K. ð\9d\95\93{Abbr} V â\86\92 â\87\91[0, i + 1] V ≡ W → tps d e L (#i) W
+ â\87©[0, i] L â\89¡ K. ð\9d\95\93{Abbr} V â\86\92 â\87§[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)
(* Basic properties *********************************************************)
-lemma tps_lsubs_conf: â\88\80L1,T1,T2,d,e. L1 â\8a¢ T1 [d, e] â\89« T2 →
- â\88\80L2. L1 [d, e] â\89¼ L2 â\86\92 L2 â\8a¢ T1 [d, e] â\89« T2.
+lemma tps_lsubs_conf: â\88\80L1,T1,T2,d,e. L1 â\8a¢ T1 [d, e] â\96¶ T2 →
+ â\88\80L2. L1 [d, e] â\89¼ L2 â\86\92 L2 â\8a¢ T1 [d, e] â\96¶ 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
]
qed.
-lemma tps_refl: â\88\80T,L,d,e. L â\8a¢ T [d, e] â\89« T.
+lemma tps_refl: â\88\80T,L,d,e. L â\8a¢ T [d, e] â\96¶ T.
#T elim T -T //
#I elim I -I /2 width=1/
qed.
(* Basic_1: was: subst1_ex *)
-lemma tps_full: â\88\80K,V,T1,L,d. â\87\93[0, d] L ≡ (K. 𝕓{Abbr} V) →
- â\88\83â\88\83T2,T. L â\8a¢ T1 [d, 1] â\89« T2 & â\87\91[d, 1] T ≡ T2.
+lemma tps_full: â\88\80K,V,T1,L,d. â\87©[0, d] L ≡ (K. 𝕓{Abbr} V) →
+ â\88\83â\88\83T2,T. L â\8a¢ T1 [d, 1] â\96¶ T2 & â\87§[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/
]
qed.
-lemma tps_weak: â\88\80L,T1,T2,d1,e1. L â\8a¢ T1 [d1, e1] â\89« T2 →
+lemma tps_weak: â\88\80L,T1,T2,d1,e1. L â\8a¢ T1 [d1, e1] â\96¶ T2 →
∀d2,e2. d2 ≤ d1 → d1 + e1 ≤ d2 + e2 →
- L â\8a¢ T1 [d2, e2] â\89« T2.
+ L â\8a¢ T1 [d2, e2] â\96¶ 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
qed.
lemma tps_weak_top: ∀L,T1,T2,d,e.
- L â\8a¢ T1 [d, e] â\89« T2 â\86\92 L â\8a¢ T1 [d, |L| - d] â\89« T2.
+ L â\8a¢ T1 [d, e] â\96¶ T2 â\86\92 L â\8a¢ T1 [d, |L| - d] â\96¶ T2.
#L #T1 #T2 #d #e #H elim H -L -T1 -T2 -d -e
[ //
| #L #K #V #W #i #d #e #Hdi #_ #HLK #HVW
qed.
lemma tps_weak_all: ∀L,T1,T2,d,e.
- L â\8a¢ T1 [d, e] â\89« T2 â\86\92 L â\8a¢ T1 [0, |L|] â\89« T2.
+ L â\8a¢ T1 [d, e] â\96¶ T2 â\86\92 L â\8a¢ T1 [0, |L|] â\96¶ 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: â\88\80L,T1,T2,d,e. L â\8a¢ T1 [d, e] â\89« T2 → ∀i. d ≤ i → i ≤ d + e →
- â\88\83â\88\83T. L â\8a¢ T1 [d, i - d] â\89« T & L â\8a¢ T [i, d + e - i] â\89« T2.
+lemma tps_split_up: â\88\80L,T1,T2,d,e. L â\8a¢ T1 [d, e] â\96¶ T2 → ∀i. d ≤ i → i ≤ d + e →
+ â\88\83â\88\83T. L â\8a¢ T1 [d, i - d] â\96¶ T & L â\8a¢ T [i, d + e - i] â\96¶ 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
(* Basic inversion lemmas ***************************************************)
-fact tps_inv_atom1_aux: â\88\80L,T1,T2,d,e. L â\8a¢ T1 [d, e] â\89« T2 → ∀I. T1 = 𝕒{I} →
+fact tps_inv_atom1_aux: â\88\80L,T1,T2,d,e. L â\8a¢ T1 [d, e] â\96¶ T2 → ∀I. T1 = 𝕒{I} →
T2 = 𝕒{I} ∨
∃∃K,V,i. d ≤ i & i < d + e &
- â\87\93[O, i] L ≡ K. 𝕓{Abbr} V &
- â\87\91[O, i + 1] V ≡ T2 &
+ â\87©[O, i] L ≡ K. 𝕓{Abbr} V &
+ â\87§[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/
]
qed.
-lemma tps_inv_atom1: â\88\80L,T2,I,d,e. L â\8a¢ ð\9d\95\92{I} [d, e] â\89« T2 →
+lemma tps_inv_atom1: â\88\80L,T2,I,d,e. L â\8a¢ ð\9d\95\92{I} [d, e] â\96¶ T2 →
T2 = 𝕒{I} ∨
∃∃K,V,i. d ≤ i & i < d + e &
- â\87\93[O, i] L ≡ K. 𝕓{Abbr} V &
- â\87\91[O, i + 1] V ≡ T2 &
+ â\87©[O, i] L ≡ K. 𝕓{Abbr} V &
+ â\87§[O, i + 1] V ≡ T2 &
I = LRef i.
/2 width=3/ qed-.
(* Basic_1: was: subst1_gen_sort *)
-lemma tps_inv_sort1: â\88\80L,T2,k,d,e. L â\8a¢ â\8b\86k [d, e] â\89« T2 → T2 = ⋆k.
+lemma tps_inv_sort1: â\88\80L,T2,k,d,e. L â\8a¢ â\8b\86k [d, e] â\96¶ 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: â\88\80L,T2,i,d,e. L â\8a¢ #i [d, e] â\89« T2 →
+lemma tps_inv_lref1: â\88\80L,T2,i,d,e. L â\8a¢ #i [d, e] â\96¶ T2 →
T2 = #i ∨
∃∃K,V. d ≤ i & i < d + e &
- â\87\93[O, i] L ≡ K. 𝕓{Abbr} V &
- â\87\91[O, i + 1] V ≡ T2.
+ â\87©[O, i] L ≡ K. 𝕓{Abbr} V &
+ â\87§[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: â\88\80L,T2,p,d,e. L â\8a¢ §p [d, e] â\89« T2 → T2 = §p.
+lemma tps_inv_gref1: â\88\80L,T2,p,d,e. L â\8a¢ §p [d, e] â\96¶ 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: â\88\80d,e,L,U1,U2. L â\8a¢ U1 [d, e] â\89« U2 →
+fact tps_inv_bind1_aux: â\88\80d,e,L,U1,U2. L â\8a¢ U1 [d, e] â\96¶ U2 →
∀I,V1,T1. U1 = 𝕓{I} V1. T1 →
- â\88\83â\88\83V2,T2. L â\8a¢ V1 [d, e] â\89« V2 &
- L. ð\9d\95\93{I} V2 â\8a¢ T1 [d + 1, e] â\89« T2 &
+ â\88\83â\88\83V2,T2. L â\8a¢ V1 [d, e] â\96¶ V2 &
+ L. ð\9d\95\93{I} V2 â\8a¢ T1 [d + 1, e] â\96¶ T2 &
U2 = 𝕓{I} V2. T2.
#d #e #L #U1 #U2 * -d -e -L -U1 -U2
[ #L #k #d #e #I #V1 #T1 #H destruct
]
qed.
-lemma tps_inv_bind1: â\88\80d,e,L,I,V1,T1,U2. L â\8a¢ ð\9d\95\93{I} V1. T1 [d, e] â\89« U2 →
- â\88\83â\88\83V2,T2. L â\8a¢ V1 [d, e] â\89« V2 &
- L. ð\9d\95\93{I} V2 â\8a¢ T1 [d + 1, e] â\89« T2 &
+lemma tps_inv_bind1: â\88\80d,e,L,I,V1,T1,U2. L â\8a¢ ð\9d\95\93{I} V1. T1 [d, e] â\96¶ U2 →
+ â\88\83â\88\83V2,T2. L â\8a¢ V1 [d, e] â\96¶ V2 &
+ L. ð\9d\95\93{I} V2 â\8a¢ T1 [d + 1, e] â\96¶ T2 &
U2 = 𝕓{I} V2. T2.
/2 width=3/ qed-.
-fact tps_inv_flat1_aux: â\88\80d,e,L,U1,U2. L â\8a¢ U1 [d, e] â\89« U2 →
+fact tps_inv_flat1_aux: â\88\80d,e,L,U1,U2. L â\8a¢ U1 [d, e] â\96¶ U2 →
∀I,V1,T1. U1 = 𝕗{I} V1. T1 →
- â\88\83â\88\83V2,T2. L â\8a¢ V1 [d, e] â\89« V2 & L â\8a¢ T1 [d, e] â\89« T2 &
+ â\88\83â\88\83V2,T2. L â\8a¢ V1 [d, e] â\96¶ V2 & L â\8a¢ T1 [d, e] â\96¶ T2 &
U2 = 𝕗{I} V2. T2.
#d #e #L #U1 #U2 * -d -e -L -U1 -U2
[ #L #k #d #e #I #V1 #T1 #H destruct
]
qed.
-lemma tps_inv_flat1: â\88\80d,e,L,I,V1,T1,U2. L â\8a¢ ð\9d\95\97{I} V1. T1 [d, e] â\89« U2 →
- â\88\83â\88\83V2,T2. L â\8a¢ V1 [d, e] â\89« V2 & L â\8a¢ T1 [d, e] â\89« T2 &
+lemma tps_inv_flat1: â\88\80d,e,L,I,V1,T1,U2. L â\8a¢ ð\9d\95\97{I} V1. T1 [d, e] â\96¶ U2 →
+ â\88\83â\88\83V2,T2. L â\8a¢ V1 [d, e] â\96¶ V2 & L â\8a¢ T1 [d, e] â\96¶ T2 &
U2 = 𝕗{I} V2. T2.
/2 width=3/ qed-.
-fact tps_inv_refl_O2_aux: â\88\80L,T1,T2,d,e. L â\8a¢ T1 [d, e] â\89« T2 → e = 0 → T1 = T2.
+fact tps_inv_refl_O2_aux: â\88\80L,T1,T2,d,e. L â\8a¢ T1 [d, e] â\96¶ 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
]
qed.
-lemma tps_inv_refl_O2: â\88\80L,T1,T2,d. L â\8a¢ T1 [d, 0] â\89« T2 → T1 = T2.
+lemma tps_inv_refl_O2: â\88\80L,T1,T2,d. L â\8a¢ T1 [d, 0] â\96¶ T2 → T1 = T2.
/2 width=6/ qed-.
(* Basic forward lemmas *****************************************************)
-lemma tps_fwd_tw: â\88\80L,T1,T2,d,e. L â\8a¢ T1 [d, e] â\89« T2 → #[T1] ≤ #[T2].
+lemma tps_fwd_tw: â\88\80L,T1,T2,d,e. L â\8a¢ T1 [d, e] â\96¶ 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-.
(* Advanced inversion lemmas ************************************************)
-fact tps_inv_refl_SO2_aux: â\88\80L,T1,T2,d,e. L â\8a¢ T1 [d, e] â\89« T2 → e = 1 →
- â\88\80K,V. â\87\93[0, d] L ≡ K. 𝕓{Abst} V → T1 = T2.
+fact tps_inv_refl_SO2_aux: â\88\80L,T1,T2,d,e. L â\8a¢ T1 [d, e] â\96¶ T2 → e = 1 →
+ â\88\80K,V. â\87©[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
]
qed.
-lemma tps_inv_refl_SO2: â\88\80L,T1,T2,d. L â\8a¢ T1 [d, 1] â\89« T2 →
- â\88\80K,V. â\87\93[0, d] L ≡ K. 𝕓{Abst} V → T1 = T2.
+lemma tps_inv_refl_SO2: â\88\80L,T1,T2,d. L â\8a¢ T1 [d, 1] â\96¶ T2 →
+ â\88\80K,V. â\87©[0, d] L ≡ K. 𝕓{Abst} V → T1 = T2.
/2 width=8/ qed-.
(* Relocation properties ****************************************************)
(* Basic_1: was: subst1_lift_lt *)
-lemma tps_lift_le: â\88\80K,T1,T2,dt,et. K â\8a¢ T1 [dt, et] â\89« T2 →
- â\88\80L,U1,U2,d,e. â\87\93[d, e] L ≡ K →
- â\87\91[d, e] T1 â\89¡ U1 â\86\92 â\87\91[d, e] T2 ≡ U2 →
+lemma tps_lift_le: â\88\80K,T1,T2,dt,et. K â\8a¢ T1 [dt, et] â\96¶ T2 →
+ â\88\80L,U1,U2,d,e. â\87©[d, e] L ≡ K →
+ â\87§[d, e] T1 â\89¡ U1 â\86\92 â\87§[d, e] T2 ≡ U2 →
dt + et ≤ d →
- L â\8a¢ U1 [dt, et] â\89« U2.
+ L â\8a¢ U1 [dt, et] â\96¶ 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 //
]
qed.
-lemma tps_lift_be: â\88\80K,T1,T2,dt,et. K â\8a¢ T1 [dt, et] â\89« T2 →
- â\88\80L,U1,U2,d,e. â\87\93[d, e] L ≡ K →
- â\87\91[d, e] T1 â\89¡ U1 â\86\92 â\87\91[d, e] T2 ≡ U2 →
+lemma tps_lift_be: â\88\80K,T1,T2,dt,et. K â\8a¢ T1 [dt, et] â\96¶ T2 →
+ â\88\80L,U1,U2,d,e. â\87©[d, e] L ≡ K →
+ â\87§[d, e] T1 â\89¡ U1 â\86\92 â\87§[d, e] T2 ≡ U2 →
dt ≤ d → d ≤ dt + et →
- L â\8a¢ U1 [dt, et + e] â\89« U2.
+ L â\8a¢ U1 [dt, et + e] â\96¶ 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 //
qed.
(* Basic_1: was: subst1_lift_ge *)
-lemma tps_lift_ge: â\88\80K,T1,T2,dt,et. K â\8a¢ T1 [dt, et] â\89« T2 →
- â\88\80L,U1,U2,d,e. â\87\93[d, e] L ≡ K →
- â\87\91[d, e] T1 â\89¡ U1 â\86\92 â\87\91[d, e] T2 ≡ U2 →
+lemma tps_lift_ge: â\88\80K,T1,T2,dt,et. K â\8a¢ T1 [dt, et] â\96¶ T2 →
+ â\88\80L,U1,U2,d,e. â\87©[d, e] L ≡ K →
+ â\87§[d, e] T1 â\89¡ U1 â\86\92 â\87§[d, e] T2 ≡ U2 →
d ≤ dt →
- L â\8a¢ U1 [dt + e, et] â\89« U2.
+ L â\8a¢ U1 [dt + e, et] â\96¶ 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 //
qed.
(* Basic_1: was: subst1_gen_lift_lt *)
-lemma tps_inv_lift1_le: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\89« U2 →
- â\88\80K,d,e. â\87\93[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87\91[d, e] T1 ≡ U1 →
+lemma tps_inv_lift1_le: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\96¶ U2 →
+ â\88\80K,d,e. â\87©[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87§[d, e] T1 ≡ U1 →
dt + et ≤ d →
- â\88\83â\88\83T2. K â\8a¢ T1 [dt, et] â\89« T2 & â\87\91[d, e] T2 ≡ U2.
+ â\88\83â\88\83T2. K â\8a¢ T1 [dt, et] â\96¶ T2 & â\87§[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/
]
qed.
-lemma tps_inv_lift1_be: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\89« U2 →
- â\88\80K,d,e. â\87\93[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87\91[d, e] T1 ≡ U1 →
+lemma tps_inv_lift1_be: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\96¶ U2 →
+ â\88\80K,d,e. â\87©[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87§[d, e] T1 ≡ U1 →
dt ≤ d → d + e ≤ dt + et →
- â\88\83â\88\83T2. K â\8a¢ T1 [dt, et - e] â\89« T2 & â\87\91[d, e] T2 ≡ U2.
+ â\88\83â\88\83T2. K â\8a¢ T1 [dt, et - e] â\96¶ T2 & â\87§[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/
qed.
(* Basic_1: was: subst1_gen_lift_ge *)
-lemma tps_inv_lift1_ge: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\89« U2 →
- â\88\80K,d,e. â\87\93[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87\91[d, e] T1 ≡ U1 →
+lemma tps_inv_lift1_ge: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\96¶ U2 →
+ â\88\80K,d,e. â\87©[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87§[d, e] T1 ≡ U1 →
d + e ≤ dt →
- â\88\83â\88\83T2. K â\8a¢ T1 [dt - e, et] â\89« T2 & â\87\91[d, e] T2 ≡ U2.
+ â\88\83â\88\83T2. K â\8a¢ T1 [dt - e, et] â\96¶ T2 & â\87§[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/
(* Basic_1: was: subst1_gen_lift_eq *)
lemma tps_inv_lift1_eq: ∀L,U1,U2,d,e.
- L â\8a¢ U1 [d, e] â\89« U2 â\86\92 â\88\80T1. â\87\91[d, e] T1 ≡ U1 → U1 = U2.
+ L â\8a¢ U1 [d, e] â\96¶ U2 â\86\92 â\88\80T1. â\87§[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
(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: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\89« U2 →
- â\88\80K,d,e. â\87\93[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87\91[d, e] T1 ≡ U1 →
+lemma tps_inv_lift1_up: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\96¶ U2 →
+ â\88\80K,d,e. â\87©[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87§[d, e] T1 ≡ U1 →
d ≤ dt → dt ≤ d + e → d + e ≤ dt + et →
- â\88\83â\88\83T2. K â\8a¢ T1 [d, dt + et - (d + e)] â\89« T2 & â\87\91[d, e] T2 ≡ U2.
+ â\88\83â\88\83T2. K â\8a¢ T1 [d, dt + et - (d + e)] â\96¶ T2 & â\87§[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
elim (tps_inv_lift1_ge … HU2 … HLK … HTU1 ?) -U -L // <minus_plus_m_m /2 width=3/
qed.
-lemma tps_inv_lift1_be_up: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\89« U2 →
- â\88\80K,d,e. â\87\93[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87\91[d, e] T1 ≡ U1 →
+lemma tps_inv_lift1_be_up: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\96¶ U2 →
+ â\88\80K,d,e. â\87©[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87§[d, e] T1 ≡ U1 →
dt ≤ d → dt + et ≤ d + e →
- â\88\83â\88\83T2. K â\8a¢ T1 [dt, d - dt] â\89« T2 & â\87\91[d, e] T2 ≡ U2.
+ â\88\83â\88\83T2. K â\8a¢ T1 [dt, d - dt] â\96¶ T2 & â\87§[d, e] T2 ≡ U2.
#L #U1 #U2 #dt #et #HU12 #K #d #e #HLK #T1 #HTU1 #Hdtd #Hdetde
lapply (tps_weak … HU12 dt (d + e - dt) ? ?) -HU12 // /2 width=3/ -Hdetde #HU12
elim (tps_inv_lift1_be … HU12 … HLK … HTU1 ? ?) -U1 -L // /2 width=3/
(* Main properties **********************************************************)
(* Basic_1: was: subst1_confluence_eq *)
-theorem tps_conf_eq: â\88\80L,T0,T1,d1,e1. L â\8a¢ T0 [d1, e1] â\89« T1 →
- â\88\80T2,d2,e2. L â\8a¢ T0 [d2, e2] â\89« T2 →
- â\88\83â\88\83T. L â\8a¢ T1 [d2, e2] â\89« T & L â\8a¢ T2 [d1, e1] â\89« T.
+theorem tps_conf_eq: â\88\80L,T0,T1,d1,e1. L â\8a¢ T0 [d1, e1] â\96¶ T1 →
+ â\88\80T2,d2,e2. L â\8a¢ T0 [d2, e2] â\96¶ T2 →
+ â\88\83â\88\83T. L â\8a¢ T1 [d2, e2] â\96¶ T & L â\8a¢ T2 [d1, e1] â\96¶ T.
#L #T0 #T1 #d1 #e1 #H elim H -L -T0 -T1 -d1 -e1
[ /2 width=3/
| #L #K1 #V1 #T1 #i0 #d1 #e1 #Hd1 #Hde1 #HLK1 #HVT1 #T2 #d2 #e2 #H
qed.
(* Basic_1: was: subst1_confluence_neq *)
-theorem tps_conf_neq: â\88\80L1,T0,T1,d1,e1. L1 â\8a¢ T0 [d1, e1] â\89« T1 →
- â\88\80L2,T2,d2,e2. L2 â\8a¢ T0 [d2, e2] â\89« T2 →
+theorem tps_conf_neq: â\88\80L1,T0,T1,d1,e1. L1 â\8a¢ T0 [d1, e1] â\96¶ T1 →
+ â\88\80L2,T2,d2,e2. L2 â\8a¢ T0 [d2, e2] â\96¶ T2 →
(d1 + e1 ≤ d2 ∨ d2 + e2 ≤ d1) →
- â\88\83â\88\83T. L2 â\8a¢ T1 [d2, e2] â\89« T & L1 â\8a¢ T2 [d1, e1] â\89« T.
+ â\88\83â\88\83T. L2 â\8a¢ T1 [d2, e2] â\96¶ T & L1 â\8a¢ T2 [d1, e1] â\96¶ T.
#L1 #T0 #T1 #d1 #e1 #H elim H -L1 -T0 -T1 -d1 -e1
[ /2 width=3/
| #L1 #K1 #V1 #T1 #i0 #d1 #e1 #Hd1 #Hde1 #HLK1 #HVT1 #L2 #T2 #d2 #e2 #H1 #H2
(* Note: the constant 1 comes from tps_subst *)
(* Basic_1: was: subst1_trans *)
-theorem tps_trans_ge: â\88\80L,T1,T0,d,e. L â\8a¢ T1 [d, e] â\89« T0 →
- â\88\80T2. L â\8a¢ T0 [d, 1] â\89« T2 → 1 ≤ e →
- L â\8a¢ T1 [d, e] â\89« T2.
+theorem tps_trans_ge: â\88\80L,T1,T0,d,e. L â\8a¢ T1 [d, e] â\96¶ T0 →
+ â\88\80T2. L â\8a¢ T0 [d, 1] â\96¶ T2 → 1 ≤ e →
+ L â\8a¢ T1 [d, e] â\96¶ T2.
#L #T1 #T0 #d #e #H elim H -L -T1 -T0 -d -e
[ #L #I #d #e #T2 #H #He
elim (tps_inv_atom1 … H) -H
]
qed.
-theorem tps_trans_down: â\88\80L,T1,T0,d1,e1. L â\8a¢ T1 [d1, e1] â\89« T0 →
- â\88\80T2,d2,e2. L â\8a¢ T0 [d2, e2] â\89« T2 → d2 + e2 ≤ d1 →
- â\88\83â\88\83T. L â\8a¢ T1 [d2, e2] â\89« T & L â\8a¢ T [d1, e1] â\89« T2.
+theorem tps_trans_down: â\88\80L,T1,T0,d1,e1. L â\8a¢ T1 [d1, e1] â\96¶ T0 →
+ â\88\80T2,d2,e2. L â\8a¢ T0 [d2, e2] â\96¶ T2 → d2 + e2 ≤ d1 →
+ â\88\83â\88\83T. L â\8a¢ T1 [d2, e2] â\96¶ T & L â\8a¢ T [d1, e1] â\96¶ T2.
#L #T1 #T0 #d1 #e1 #H elim H -L -T1 -T0 -d1 -e1
[ /2 width=3/
| #L #K #V #W #i1 #d1 #e1 #Hdi1 #Hide1 #HLK #HVW #T2 #d2 #e2 #HWT2 #Hde2d1
(* DELIFT ON TERMS **********************************************************)
definition delift: nat → nat → lenv → relation term ≝
- λd,e,L,T1,T2. â\88\83â\88\83T. L â\8a¢ T1 [d, e] â\89«* T & â\87\91[d, e] T2 ≡ T.
+ λd,e,L,T1,T2. â\88\83â\88\83T. L â\8a¢ T1 [d, e] â\96¶* T & â\87§[d, e] T2 ≡ T.
interpretation "delift (term)"
'TSubst L T1 d e T2 = (delift d e L T1 T2).
lemma delift_fwd_lref1_be: ∀L,U2,d,e,i. L ⊢ #i [d, e] ≡ U2 →
d ≤ i → i < d + e →
- â\88\83â\88\83K,V1,V2. â\87\93[0, i] L ≡ K. 𝕓{Abbr} V1 &
+ â\88\83â\88\83K,V1,V2. â\87©[0, i] L ≡ K. 𝕓{Abbr} V1 &
K ⊢ V1 [0, d + e - i - 1] ≡ V2 &
- â\87\91[0, d] V2 ≡ U2.
+ â\87§[0, d] V2 ≡ U2.
#L #U2 #d #e #i * #U #HU #HU2 #Hdi #Hide
elim (tpss_inv_lref1 … HU) -HU
[ #H destruct elim (lift_inv_lref2_be … HU2 ? ?) //
inductive ldrops: list2 nat nat → relation lenv ≝
| ldrops_nil : ∀L. ldrops ⟠ L L
| ldrops_cons: ∀L1,L,L2,des,d,e.
- ldrops des L1 L â\86\92 â\87\93[d,e] L ≡ L2 → ldrops ({d, e} :: des) L1 L2
+ ldrops des L1 L â\86\92 â\87©[d,e] L ≡ L2 → ldrops ({d, e} :: des) L1 L2
.
interpretation "generic local environment slicing"
- 'RLDrop des T1 T2 = (ldrops des T1 T2).
+ 'RDropStar des T1 T2 = (ldrops des T1 T2).
(* Basic properties *********************************************************)
-lemma ldrops_skip: â\88\80L1,L2,des. â\87\93[des] L1 â\89¡ L2 â\86\92 â\88\80V1,V2. â\87\91[des] V2 ≡ V1 →
- â\88\80I. â\87\93[ss des] L1. 𝕓{I} V1 ≡ L2. 𝕓{I} V2.
+lemma ldrops_skip: â\88\80L1,L2,des. â\87©*[des] L1 â\89¡ L2 â\86\92 â\88\80V1,V2. â\87§*[des] V2 ≡ V1 →
+ â\88\80I. â\87©*[ss des] L1. 𝕓{I} V1 ≡ L2. 𝕓{I} V2.
#L1 #L2 #des #H elim H -L1 -L2 -des
[ #L #V1 #V2 #HV12 #I
>(lifts_inv_nil … HV12) -HV12 //
inductive lifts: list2 nat nat → relation term ≝
| lifts_nil : ∀T. lifts ⟠ T T
| lifts_cons: ∀T1,T,T2,des,d,e.
- â\87\91[d,e] T1 ≡ T → lifts des T T2 → lifts ({d, e} :: des) T1 T2
+ â\87§[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: â\88\80T1,T2,des. â\87\91[des] T1 ≡ T2 → des = ⟠ → T1 = T2.
+fact lifts_inv_nil_aux: â\88\80T1,T2,des. â\87§*[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: â\88\80T1,T2. â\87\91[⟠] T1 ≡ T2 → T1 = T2.
+lemma lifts_inv_nil: â\88\80T1,T2. â\87§*[⟠] T1 ≡ T2 → T1 = T2.
/2 width=3/ qed-.
-fact lifts_inv_cons_aux: â\88\80T1,T2,des. â\87\91[des] T1 ≡ T2 →
+fact lifts_inv_cons_aux: â\88\80T1,T2,des. â\87§*[des] T1 ≡ T2 →
∀d,e,tl. des = {d, e} :: tl →
- â\88\83â\88\83T. â\87\91[d, e] T1 â\89¡ T & â\87\91[tl] T ≡ T2.
+ â\88\83â\88\83T. â\87§[d, e] T1 â\89¡ T & â\87§*[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: â\88\80T1,T2,d,e,des. â\87\91[{d, e} :: des] T1 ≡ T2 →
- â\88\83â\88\83T. â\87\91[d, e] T1 â\89¡ T & â\87\91[des] T ≡ T2.
+lemma lifts_inv_cons: â\88\80T1,T2,d,e,des. â\87§*[{d, e} :: des] T1 ≡ T2 →
+ â\88\83â\88\83T. â\87§[d, e] T1 â\89¡ T & â\87§*[des] T ≡ T2.
/2 width=3/ qed-.
-lemma lifts_inv_bind1: â\88\80I,T2,des,V1,U1. â\87\91[des] 𝕓{I} V1. U1 ≡ T2 →
- â\88\83â\88\83V2,U2. â\87\91[des] V1 â\89¡ V2 & â\87\91[ss des] U1 ≡ U2 &
+lemma lifts_inv_bind1: â\88\80I,T2,des,V1,U1. â\87§*[des] 𝕓{I} V1. U1 ≡ T2 →
+ â\88\83â\88\83V2,U2. â\87§*[des] V1 â\89¡ V2 & â\87§*[ss des] U1 ≡ U2 &
T2 = 𝕓{I} V2. U2.
#I #T2 #des elim des -des
[ #V1 #U1 #H
]
qed-.
-lemma lifts_inv_flat1: â\88\80I,T2,des,V1,U1. â\87\91[des] 𝕗{I} V1. U1 ≡ T2 →
- â\88\83â\88\83V2,U2. â\87\91[des] V1 â\89¡ V2 & â\87\91[des] U1 ≡ U2 &
+lemma lifts_inv_flat1: â\88\80I,T2,des,V1,U1. â\87§*[des] 𝕗{I} V1. U1 ≡ T2 →
+ â\88\83â\88\83V2,U2. â\87§*[des] V1 â\89¡ V2 & â\87§*[des] U1 ≡ U2 &
T2 = 𝕗{I} V2. U2.
#I #T2 #des elim des -des
[ #V1 #U1 #H
(* Basic forward lemmas *****************************************************)
-lemma lifts_simple_dx: â\88\80T1,T2,des. â\87\91[des] T1 ≡ T2 → 𝕊[T1] → 𝕊[T2].
+lemma lifts_simple_dx: â\88\80T1,T2,des. â\87§*[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: â\88\80T1,T2,des. â\87\91[des] T1 ≡ T2 → 𝕊[T2] → 𝕊[T1].
+lemma lifts_simple_sn: â\88\80T1,T2,des. â\87§*[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: â\88\80I,T2,V1,V2,des. â\87\91[des] V1 ≡ V2 →
- â\88\80T1. â\87\91[ss des] T1 ≡ T2 →
- â\87\91[des] 𝕓{I} V1. T1 ≡ 𝕓{I} V2. T2.
+lemma lifts_bind: â\88\80I,T2,V1,V2,des. â\87§*[des] V1 ≡ V2 →
+ â\88\80T1. â\87§*[ss des] T1 ≡ T2 →
+ â\87§*[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
]
qed.
-lemma lifts_flat: â\88\80I,T2,V1,V2,des. â\87\91[des] V1 ≡ V2 →
- â\88\80T1. â\87\91[des] T1 ≡ T2 →
- â\87\91[des] 𝕗{I} V1. T1 ≡ 𝕗{I} V2. T2.
+lemma lifts_flat: â\88\80I,T2,V1,V2,des. â\87§*[des] V1 ≡ V2 →
+ â\88\80T1. â\87§*[des] T1 ≡ T2 →
+ â\87§*[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
]
qed.
-lemma lifts_total: â\88\80des,T1. â\88\83T2. â\87\91[des] T1 ≡ T2.
+lemma lifts_total: â\88\80des,T1. â\88\83T2. â\87§*[des] T1 ≡ T2.
#des elim des -des /2 width=2/
#d #e #des #IH #T1
elim (lift_total T1 d e) #T #HT1
inductive liftsv (des:list2 nat nat) : relation (list term) ≝
| liftsv_nil : liftsv des ◊ ◊
| liftsv_cons: ∀T1s,T2s,T1,T2.
- â\87\91[des] T1 ≡ T2 → liftsv des T1s T2s →
+ â\87§*[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: â\88\80V1s,U1,T2,des. â\87\91[des] Ⓐ V1s. U1 ≡ T2 →
- â\88\83â\88\83V2s,U2. â\87\91[des] V1s â\89¡ V2s & â\87\91[des] U1 ≡ U2 &
+axiom lifts_inv_applv1: â\88\80V1s,U1,T2,des. â\87§*[des] Ⓐ V1s. U1 ≡ T2 →
+ â\88\83â\88\83V2s,U2. â\87§*[des] V1s â\89¡ V2s & â\87§*[des] U1 ≡ U2 &
T2 = Ⓐ V2s. U2.
(* Basic properties *********************************************************)
-lemma liftsv_applv: â\88\80V1s,V2s,des. â\87\91[des] V1s ≡ V2s →
- â\88\80T1,T2. â\87\91[des] T1 ≡ T2 →
- â\87\91[des] Ⓐ V1s. T1 ≡ Ⓐ V2s. T2.
+lemma liftsv_applv: â\88\80V1s,V2s,des. â\87§*[des] V1s ≡ V2s →
+ â\88\80T1,T2. â\87§*[des] T1 ≡ T2 →
+ â\87§*[des] Ⓐ V1s. T1 ≡ Ⓐ V2s. T2.
#V1s #V2s #des #H elim H -V1s -V2s // /3 width=1/
qed.
(* Basic eliminators ********************************************************)
lemma ltpss_ind: ∀d,e,L1. ∀R:predicate lenv. R L1 →
- (â\88\80L,L2. L1 [d, e] â\89«* L â\86\92 L [d, e] â\89« L2 → R L → R L2) →
- â\88\80L2. L1 [d, e] â\89«* L2 → R L2.
+ (â\88\80L,L2. L1 [d, e] â\96¶* L â\86\92 L [d, e] â\96¶ L2 → R L → R L2) →
+ â\88\80L2. L1 [d, e] â\96¶* 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] â\89« L â\86\92 L [d, e] â\89«* L2 â\86\92 L1 [d, e] â\89«* L2.
+ L1 [d, e] â\96¶ L â\86\92 L [d, e] â\96¶* L2 â\86\92 L1 [d, e] â\96¶* L2.
/2 width=3/ qed.
-lemma ltpss_refl: â\88\80L,d,e. L [d, e] â\89«* L.
+lemma ltpss_refl: â\88\80L,d,e. L [d, e] â\96¶* L.
/2 width=1/ qed.
(* Basic inversion lemmas ***************************************************)
-lemma ltpss_inv_refl_O2: â\88\80d,L1,L2. L1 [d, 0] â\89«* L2 → L1 = L2.
+lemma ltpss_inv_refl_O2: â\88\80d,L1,L2. L1 [d, 0] â\96¶* 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: â\88\80d,e,L2. â\8b\86 [d, e] â\89«* L2 → L2 = ⋆.
+lemma ltpss_inv_atom1: â\88\80d,e,L2. â\8b\86 [d, e] â\96¶* 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: â\88\80d,e,L1,L2. L1 [d, e] â\89«* L2 → L2 = ⋆ → L1 = ⋆.
+fact ltpss_inv_atom2_aux: â\88\80d,e,L1,L2. L1 [d, e] â\96¶* 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: â\88\80d,e,L1. L1 [d, e] â\89«* ⋆ → L1 = ⋆.
+lemma ltpss_inv_atom2: â\88\80d,e,L1. L1 [d, e] â\96¶* ⋆ → L1 = ⋆.
/2 width=5/ qed-.
(*
-fact ltps_inv_tps22_aux: â\88\80d,e,L1,L2. L1 [d, e] â\89« L2 → d = 0 → 0 < e →
+fact ltps_inv_tps22_aux: â\88\80d,e,L1,L2. L1 [d, e] â\96¶ L2 → d = 0 → 0 < e →
∀K2,I,V2. L2 = K2. 𝕓{I} V2 →
- â\88\83â\88\83K1,V1. K1 [0, e - 1] â\89« K2 &
- K2 â\8a¢ V1 [0, e - 1] â\89« V2 &
+ â\88\83â\88\83K1,V1. K1 [0, e - 1] â\96¶ K2 &
+ K2 â\8a¢ V1 [0, e - 1] â\96¶ V2 &
L1 = K1. 𝕓{I} V1.
#d #e #L1 #L2 * -d e L1 L2
[ #d #e #_ #_ #K1 #I #V1 #H destruct
]
qed.
-lemma ltps_inv_tps22: â\88\80e,L1,K2,I,V2. L1 [0, e] â\89« K2. 𝕓{I} V2 → 0 < e →
- â\88\83â\88\83K1,V1. K1 [0, e - 1] â\89« K2 & K2 â\8a¢ V1 [0, e - 1] â\89« V2 &
+lemma ltps_inv_tps22: â\88\80e,L1,K2,I,V2. L1 [0, e] â\96¶ K2. 𝕓{I} V2 → 0 < e →
+ â\88\83â\88\83K1,V1. K1 [0, e - 1] â\96¶ K2 & K2 â\8a¢ V1 [0, e - 1] â\96¶ V2 &
L1 = K1. 𝕓{I} V1.
/2 width=5/ qed.
-fact ltps_inv_tps12_aux: â\88\80d,e,L1,L2. L1 [d, e] â\89« L2 → 0 < d →
+fact ltps_inv_tps12_aux: â\88\80d,e,L1,L2. L1 [d, e] â\96¶ L2 → 0 < d →
∀I,K2,V2. L2 = K2. 𝕓{I} V2 →
- â\88\83â\88\83K1,V1. K1 [d - 1, e] â\89« K2 &
- K2 â\8a¢ V1 [d - 1, e] â\89« V2 &
+ â\88\83â\88\83K1,V1. K1 [d - 1, e] â\96¶ K2 &
+ K2 â\8a¢ V1 [d - 1, e] â\96¶ V2 &
L1 = K1. 𝕓{I} V1.
#d #e #L1 #L2 * -d e L1 L2
[ #d #e #_ #I #K2 #V2 #H destruct
]
qed.
-lemma ltps_inv_tps12: â\88\80L1,K2,I,V2,d,e. L1 [d, e] â\89« K2. 𝕓{I} V2 → 0 < d →
- â\88\83â\88\83K1,V1. K1 [d - 1, e] â\89« K2 &
- K2 â\8a¢ V1 [d - 1, e] â\89« V2 &
+lemma ltps_inv_tps12: â\88\80L1,K2,I,V2,d,e. L1 [d, e] â\96¶ K2. 𝕓{I} V2 → 0 < d →
+ â\88\83â\88\83K1,V1. K1 [d - 1, e] â\96¶ K2 &
+ K2 â\8a¢ V1 [d - 1, e] â\96¶ V2 &
L1 = K1. 𝕓{I} V1.
/2 width=1/ qed.
*)
(* PARTIAL UNFOLD ON LOCAL ENVIRONMENTS *************************************)
-lemma ltpss_ldrop_conf_ge: â\88\80L0,L1,d1,e1. L0 [d1, e1] â\89«* L1 →
- â\88\80L2,e2. â\87\93[0, e2] L0 ≡ L2 →
- d1 + e1 â\89¤ e2 â\86\92 â\87\93[0, e2] L1 ≡ L2.
+lemma ltpss_ldrop_conf_ge: â\88\80L0,L1,d1,e1. L0 [d1, e1] â\96¶* L1 →
+ â\88\80L2,e2. â\87©[0, e2] L0 ≡ L2 →
+ d1 + e1 â\89¤ e2 â\86\92 â\87©[0, e2] L1 ≡ L2.
#L0 #L1 #d1 #e1 #H @(ltpss_ind … H) -L1 // /3 width=6/
qed.
-lemma ltpss_ldrop_trans_ge: â\88\80L1,L0,d1,e1. L1 [d1, e1] â\89«* L0 →
- â\88\80L2,e2. â\87\93[0, e2] L0 ≡ L2 →
- d1 + e1 â\89¤ e2 â\86\92 â\87\93[0, e2] L1 ≡ L2.
+lemma ltpss_ldrop_trans_ge: â\88\80L1,L0,d1,e1. L1 [d1, e1] â\96¶* L0 →
+ â\88\80L2,e2. â\87©[0, e2] L0 ≡ L2 →
+ d1 + e1 â\89¤ e2 â\86\92 â\87©[0, e2] L1 ≡ L2.
#L1 #L0 #d1 #e1 #H @(ltpss_ind … H) -L0 // /3 width=6/
qed.
-lemma ltpss_ldrop_conf_be: â\88\80L0,L1,d1,e1. L0 [d1, e1] â\89«* L1 →
- â\88\80L2,e2. â\87\93[0, e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 →
- â\88\83â\88\83L. L2 [0, d1 + e1 - e2] â\89«* L & â\87\93[0, e2] L1 ≡ L.
+lemma ltpss_ldrop_conf_be: â\88\80L0,L1,d1,e1. L0 [d1, e1] â\96¶* L1 →
+ â\88\80L2,e2. â\87©[0, e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 →
+ â\88\83â\88\83L. L2 [0, d1 + e1 - e2] â\96¶* L & â\87©[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
]
qed.
-lemma ltpss_ldrop_trans_be: â\88\80L1,L0,d1,e1. L1 [d1, e1] â\89«* L0 →
- â\88\80L2,e2. â\87\93[0, e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 →
- â\88\83â\88\83L. L [0, d1 + e1 - e2] â\89«* L2 & â\87\93[0, e2] L1 ≡ L.
+lemma ltpss_ldrop_trans_be: â\88\80L1,L0,d1,e1. L1 [d1, e1] â\96¶* L0 →
+ â\88\80L2,e2. â\87©[0, e2] L0 ≡ L2 → d1 ≤ e2 → e2 ≤ d1 + e1 →
+ â\88\83â\88\83L. L [0, d1 + e1 - e2] â\96¶* L2 & â\87©[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
]
qed.
-lemma ltpss_ldrop_conf_le: â\88\80L0,L1,d1,e1. L0 [d1, e1] â\89«* L1 →
- â\88\80L2,e2. â\87\93[0, e2] L0 ≡ L2 → e2 ≤ d1 →
- â\88\83â\88\83L. L2 [d1 - e2, e1] â\89«* L & â\87\93[0, e2] L1 ≡ L.
+lemma ltpss_ldrop_conf_le: â\88\80L0,L1,d1,e1. L0 [d1, e1] â\96¶* L1 →
+ â\88\80L2,e2. â\87©[0, e2] L0 ≡ L2 → e2 ≤ d1 →
+ â\88\83â\88\83L. L2 [d1 - e2, e1] â\96¶* L & â\87©[0, e2] L1 ≡ L.
#L0 #L1 #d1 #e1 #H @(ltpss_ind … H) -L1
[ /2 width=3/
| #L #L1 #_ #HL1 #IHL #L2 #e2 #HL02 #He2d1
]
qed.
-lemma ltpss_ldrop_trans_le: â\88\80L1,L0,d1,e1. L1 [d1, e1] â\89«* L0 →
- â\88\80L2,e2. â\87\93[0, e2] L0 ≡ L2 → e2 ≤ d1 →
- â\88\83â\88\83L. L [d1 - e2, e1] â\89«* L2 & â\87\93[0, e2] L1 ≡ L.
+lemma ltpss_ldrop_trans_le: â\88\80L1,L0,d1,e1. L1 [d1, e1] â\96¶* L0 →
+ â\88\80L2,e2. â\87©[0, e2] L0 ≡ L2 → e2 ≤ d1 →
+ â\88\83â\88\83L. L [d1 - e2, e1] â\96¶* L2 & â\87©[0, e2] L1 ≡ L.
#L1 #L0 #d1 #e1 #H @(ltpss_ind … H) -L0
[ /2 width=3/
| #L #L0 #_ #HL0 #IHL #L2 #e2 #HL02 #He2d1
(* Main properties **********************************************************)
theorem ltpss_trans_eq: ∀L1,L,L2,d,e.
- L1 [d, e] â\89«* L â\86\92 L [d, e] â\89«* L2 â\86\92 L1 [d, e] â\89«* L2.
+ L1 [d, e] â\96¶* L â\86\92 L [d, e] â\96¶* L2 â\86\92 L1 [d, e] â\96¶* L2.
/2 width=3/ qed.
lemma ltpss_tpss2: ∀L1,L2,I,V1,V2,e.
- L1 [0, e] â\89«* L2 â\86\92 L2 â\8a¢ V1 [0, e] â\89«* V2 →
- L1. ð\9d\95\93{I} V1 [0, e + 1] â\89«* L2. 𝕓{I} V2.
+ L1 [0, e] â\96¶* L2 â\86\92 L2 â\8a¢ V1 [0, e] â\96¶* V2 →
+ L1. ð\9d\95\93{I} V1 [0, e + 1] â\96¶* 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/
qed.
lemma ltpss_tpss2_lt: ∀L1,L2,I,V1,V2,e.
- L1 [0, e - 1] â\89«* L2 â\86\92 L2 â\8a¢ V1 [0, e - 1] â\89«* V2 →
- 0 < e â\86\92 L1. ð\9d\95\93{I} V1 [0, e] â\89«* L2. 𝕓{I} V2.
+ L1 [0, e - 1] â\96¶* L2 â\86\92 L2 â\8a¢ V1 [0, e - 1] â\96¶* V2 →
+ 0 < e â\86\92 L1. ð\9d\95\93{I} V1 [0, e] â\96¶* 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] â\89«* L2 â\86\92 L2 â\8a¢ V1 [d, e] â\89«* V2 →
- L1. ð\9d\95\93{I} V1 [d + 1, e] â\89«* L2. 𝕓{I} V2.
+ L1 [d, e] â\96¶* L2 â\86\92 L2 â\8a¢ V1 [d, e] â\96¶* V2 →
+ L1. ð\9d\95\93{I} V1 [d + 1, e] â\96¶* 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/
qed.
lemma ltpss_tpss1_lt: ∀L1,L2,I,V1,V2,d,e.
- L1 [d - 1, e] â\89«* L2 â\86\92 L2 â\8a¢ V1 [d - 1, e] â\89«* V2 →
- 0 < d â\86\92 L1. ð\9d\95\93{I} V1 [d, e] â\89«* L2. 𝕓{I} V2.
+ L1 [d - 1, e] â\96¶* L2 â\86\92 L2 â\8a¢ V1 [d - 1, e] â\96¶* V2 →
+ 0 < d â\86\92 L1. ð\9d\95\93{I} V1 [d, e] â\96¶* L2. 𝕓{I} V2.
#L1 #L2 #I #V1 #V2 #d #e #HL12 #HV12 #Hd
>(plus_minus_m_m d 1) // /2 width=1/
qed.
(* Properties concerning partial unfold on terms ****************************)
-lemma ltpss_tpss_trans_ge: â\88\80L1,L0,d1,e1. L1 [d1, e1] â\89«* L0 →
- â\88\80T2,U2,d2,e2. L0 â\8a¢ T2 [d2, e2] â\89«* U2 →
- d1 + e1 â\89¤ d2 â\86\92 L1 â\8a¢ T2 [d2, e2] â\89«* U2.
+lemma ltpss_tpss_trans_ge: â\88\80L1,L0,d1,e1. L1 [d1, e1] â\96¶* L0 →
+ â\88\80T2,U2,d2,e2. L0 â\8a¢ T2 [d2, e2] â\96¶* U2 →
+ d1 + e1 â\89¤ d2 â\86\92 L1 â\8a¢ T2 [d2, e2] â\96¶* 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: â\88\80L1,L0,d1,e1. L1 [d1, e1] â\89«* L0 →
- â\88\80T2,U2,d2,e2. L0 â\8a¢ T2 [d2, e2] â\89« U2 →
- d1 + e1 â\89¤ d2 â\86\92 L1 â\8a¢ T2 [d2, e2] â\89«* U2.
+lemma ltpss_tps_trans_ge: â\88\80L1,L0,d1,e1. L1 [d1, e1] â\96¶* L0 →
+ â\88\80T2,U2,d2,e2. L0 â\8a¢ T2 [d2, e2] â\96¶ U2 →
+ d1 + e1 â\89¤ d2 â\86\92 L1 â\8a¢ T2 [d2, e2] â\96¶* 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: â\88\80L0,L1,d,e. L0 [d, e] â\89«* L1 →
- â\88\80T2,U2. L1 â\8a¢ T2 [d, e] â\89«* U2 â\86\92 L0 â\8a¢ T2 [d, e] â\89«* U2.
+lemma ltpss_tpss_trans_eq: â\88\80L0,L1,d,e. L0 [d, e] â\96¶* L1 →
+ â\88\80T2,U2. L1 â\8a¢ T2 [d, e] â\96¶* U2 â\86\92 L0 â\8a¢ T2 [d, e] â\96¶* U2.
#L0 #L1 #d #e #H @(ltpss_ind … H) -L1
[ /2 width=1/
| #L #L1 #_ #HL1 #IHL #T2 #U2 #HTU2
]
qed.
-lemma ltpss_tps_trans_eq: â\88\80L0,L1,d,e. L0 [d, e] â\89«* L1 →
- â\88\80T2,U2. L1 â\8a¢ T2 [d, e] â\89« U2 â\86\92 L0 â\8a¢ T2 [d, e] â\89«* U2.
+lemma ltpss_tps_trans_eq: â\88\80L0,L1,d,e. L0 [d, e] â\96¶* L1 →
+ â\88\80T2,U2. L1 â\8a¢ T2 [d, e] â\96¶ U2 â\86\92 L0 â\8a¢ T2 [d, e] â\96¶* U2.
/3 width=3/ qed.
lemma ltpss_tpss_conf_ge: ∀L0,L1,T2,U2,d1,e1,d2,e2. d1 + e1 ≤ d2 →
- L0 â\8a¢ T2 [d2, e2] â\89«* U2 â\86\92 L0 [d1, e1] â\89«* L1 →
- L1 â\8a¢ T2 [d2, e2] â\89«* U2.
+ L0 â\8a¢ T2 [d2, e2] â\96¶* U2 â\86\92 L0 [d1, e1] â\96¶* L1 →
+ L1 â\8a¢ T2 [d2, e2] â\96¶* U2.
#L0 #L1 #T2 #U2 #d1 #e1 #d2 #e2 #Hde1d2 #HTU2 #H @(ltpss_ind … H) -L1
[ //
| -HTU2 #L #L1 #_ #HL1 #IHL
qed.
lemma ltpss_tps_conf_ge: ∀L0,L1,T2,U2,d1,e1,d2,e2. d1 + e1 ≤ d2 →
- L0 â\8a¢ T2 [d2, e2] â\89« U2 â\86\92 L0 [d1, e1] â\89«* L1 →
- L1 â\8a¢ T2 [d2, e2] â\89«* U2.
+ L0 â\8a¢ T2 [d2, e2] â\96¶ U2 â\86\92 L0 [d1, e1] â\96¶* L1 →
+ L1 â\8a¢ T2 [d2, e2] â\96¶* 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 â\8a¢ T2 [d, e] â\89«* U2 â\86\92 L0 [d, e] â\89«* L1 →
- â\88\83â\88\83T. L1 â\8a¢ T2 [d, e] â\89«* T & L1 â\8a¢ U2 [d, e] â\89«* T.
+ L0 â\8a¢ T2 [d, e] â\96¶* U2 â\86\92 L0 [d, e] â\96¶* L1 →
+ â\88\83â\88\83T. L1 â\8a¢ T2 [d, e] â\96¶* T & L1 â\8a¢ U2 [d, e] â\96¶* T.
#L0 #L1 #T2 #U2 #d #e #HTU2 #H @(ltpss_ind … H) -L1
[ /2 width=3/
| -HTU2 #L #L1 #_ #HL1 * #W2 #HTW2 #HUW2
qed.
lemma ltpss_tps_conf_eq: ∀L0,L1,T2,U2,d,e.
- L0 â\8a¢ T2 [d, e] â\89« U2 â\86\92 L0 [d, e] â\89«* L1 →
- â\88\83â\88\83T. L1 â\8a¢ T2 [d, e] â\89«* T & L1 â\8a¢ U2 [d, e] â\89«* T.
+ L0 â\8a¢ T2 [d, e] â\96¶ U2 â\86\92 L0 [d, e] â\96¶* L1 →
+ â\88\83â\88\83T. L1 â\8a¢ T2 [d, e] â\96¶* T & L1 â\8a¢ U2 [d, e] â\96¶* T.
/3 width=3/ qed.
-lemma ltpss_tpss_conf: â\88\80L1,T1,T2,d,e. L1 â\8a¢ T1 [d, e] â\89«* T2 →
- â\88\80L2,ds,es. L1 [ds, es] â\89«* L2 →
- â\88\83â\88\83T. L2 â\8a¢ T1 [d, e] â\89«* T & L1 â\8a¢ T2 [ds, es] â\89«* T.
+lemma ltpss_tpss_conf: â\88\80L1,T1,T2,d,e. L1 â\8a¢ T1 [d, e] â\96¶* T2 →
+ â\88\80L2,ds,es. L1 [ds, es] â\96¶* L2 →
+ â\88\83â\88\83T. L2 â\8a¢ T1 [d, e] â\96¶* T & L1 â\8a¢ T2 [ds, es] â\96¶* 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
]
qed.
-lemma ltpss_tps_conf: â\88\80L1,T1,T2,d,e. L1 â\8a¢ T1 [d, e] â\89« T2 →
- â\88\80L2,ds,es. L1 [ds, es] â\89«* L2 →
- â\88\83â\88\83T. L2 â\8a¢ T1 [d, e] â\89«* T & L1 â\8a¢ T2 [ds, es] â\89«* T.
+lemma ltpss_tps_conf: â\88\80L1,T1,T2,d,e. L1 â\8a¢ T1 [d, e] â\96¶ T2 →
+ â\88\80L2,ds,es. L1 [ds, es] â\96¶* L2 →
+ â\88\83â\88\83T. L2 â\8a¢ T1 [d, e] â\96¶* T & L1 â\8a¢ T2 [ds, es] â\96¶* T.
/3 width=1/ qed.
(* Advanced properties ******************************************************)
lemma ltpss_tps2: ∀L1,L2,I,e.
- L1 [0, e] â\89«* L2 â\86\92 â\88\80V1,V2. L2 â\8a¢ V1 [0, e] â\89« V2 →
- L1. ð\9d\95\93{I} V1 [0, e + 1] â\89«* L2. 𝕓{I} V2.
+ L1 [0, e] â\96¶* L2 â\86\92 â\88\80V1,V2. L2 â\8a¢ V1 [0, e] â\96¶ V2 →
+ L1. ð\9d\95\93{I} V1 [0, e + 1] â\96¶* L2. 𝕓{I} V2.
#L1 #L2 #I #e #H @(ltpss_ind … H) -L2
[ /3 width=1/
| #L #L2 #_ #HL2 #IHL #V1 #V2 #HV12
qed.
lemma ltpss_tps2_lt: ∀L1,L2,I,V1,V2,e.
- L1 [0, e - 1] â\89«* L2 â\86\92 L2 â\8a¢ V1 [0, e - 1] â\89« V2 →
- 0 < e â\86\92 L1. ð\9d\95\93{I} V1 [0, e] â\89«* L2. 𝕓{I} V2.
+ L1 [0, e - 1] â\96¶* L2 â\86\92 L2 â\8a¢ V1 [0, e - 1] â\96¶ V2 →
+ 0 < e â\86\92 L1. ð\9d\95\93{I} V1 [0, e] â\96¶* 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: â\88\80L1,L2,I,d,e. L1 [d, e] â\89«* L2 →
- â\88\80V1,V2. L2 â\8a¢ V1 [d, e] â\89« V2 →
- L1. ð\9d\95\93{I} V1 [d + 1, e] â\89«* L2. 𝕓{I} V2.
+lemma ltpss_tps1: â\88\80L1,L2,I,d,e. L1 [d, e] â\96¶* L2 →
+ â\88\80V1,V2. L2 â\8a¢ V1 [d, e] â\96¶ V2 →
+ L1. ð\9d\95\93{I} V1 [d + 1, e] â\96¶* L2. 𝕓{I} V2.
#L1 #L2 #I #d #e #H @(ltpss_ind … H) -L2
[ /3 width=1/
| #L #L2 #_ #HL2 #IHL #V1 #V2 #HV12
qed.
lemma ltpss_tps1_lt: ∀L1,L2,I,V1,V2,d,e.
- L1 [d - 1, e] â\89«* L2 â\86\92 L2 â\8a¢ V1 [d - 1, e] â\89« V2 →
- 0 < d â\86\92 L1. ð\9d\95\93{I} V1 [d, e] â\89«* L2. 𝕓{I} V2.
+ L1 [d - 1, e] â\96¶* L2 â\86\92 L2 â\8a¢ V1 [d - 1, e] â\96¶ V2 →
+ 0 < d â\86\92 L1. ð\9d\95\93{I} V1 [d, e] â\96¶* 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: â\88\80e,K1,I,V1,L2. 0 < e â\86\92 K1. ð\9d\95\93{I} V1 [0, e] â\89«* L2 →
- â\88\83â\88\83K2,V2. K1 [0, e - 1] â\89«* K2 & K1 â\8a¢ V1 [0, e - 1] â\89«* V2 &
+lemma ltpss_fwd_tpss21: â\88\80e,K1,I,V1,L2. 0 < e â\86\92 K1. ð\9d\95\93{I} V1 [0, e] â\96¶* L2 →
+ â\88\83â\88\83K2,V2. K1 [0, e - 1] â\96¶* K2 & K1 â\8a¢ V1 [0, e - 1] â\96¶* V2 &
L2 = K2. 𝕓{I} V2.
#e #K1 #I #V1 #L2 #He #H @(ltpss_ind … H) -L2
[ /2 width=5/
]
qed-.
-lemma ltpss_fwd_tpss11: â\88\80d,e,I,K1,V1,L2. 0 < d â\86\92 K1. ð\9d\95\93{I} V1 [d, e] â\89«* L2 →
- â\88\83â\88\83K2,V2. K1 [d - 1, e] â\89«* K2 &
- K1 â\8a¢ V1 [d - 1, e] â\89«* V2 &
+lemma ltpss_fwd_tpss11: â\88\80d,e,I,K1,V1,L2. 0 < d â\86\92 K1. ð\9d\95\93{I} V1 [d, e] â\96¶* L2 →
+ â\88\83â\88\83K2,V2. K1 [d - 1, e] â\96¶* K2 &
+ K1 â\8a¢ V1 [d - 1, e] â\96¶* V2 &
L2 = K2. 𝕓{I} V2.
#d #e #K1 #I #V1 #L2 #Hd #H @(ltpss_ind … H) -L2
[ /2 width=5/
(* Basic eliminators ********************************************************)
lemma tpss_ind: ∀d,e,L,T1. ∀R:predicate term. R T1 →
- (â\88\80T,T2. L â\8a¢ T1 [d, e] â\89«* T â\86\92 L â\8a¢ T [d, e] â\89« T2 → R T → R T2) →
- â\88\80T2. L â\8a¢ T1 [d, e] â\89«* T2 → R T2.
+ (â\88\80T,T2. L â\8a¢ T1 [d, e] â\96¶* T â\86\92 L â\8a¢ T [d, e] â\96¶ T2 → R T → R T2) →
+ â\88\80T2. L â\8a¢ T1 [d, e] â\96¶* 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 â\8a¢ T1 [d, e] â\89« T â\86\92 L â\8a¢ T [d, e] â\89«* T2 â\86\92 L â\8a¢ T1 [d, e] â\89«* T2.
+ L â\8a¢ T1 [d, e] â\96¶ T â\86\92 L â\8a¢ T [d, e] â\96¶* T2 â\86\92 L â\8a¢ T1 [d, e] â\96¶* T2.
/2 width=3/ qed.
-lemma tpss_lsubs_conf: â\88\80L1,T1,T2,d,e. L1 â\8a¢ T1 [d, e] â\89«* T2 →
- â\88\80L2. L1 [d, e] â\89¼ L2 â\86\92 L2 â\8a¢ T1 [d, e] â\89«* T2.
+lemma tpss_lsubs_conf: â\88\80L1,T1,T2,d,e. L1 â\8a¢ T1 [d, e] â\96¶* T2 →
+ â\88\80L2. L1 [d, e] â\89¼ L2 â\86\92 L2 â\8a¢ T1 [d, e] â\96¶* T2.
/3 width=3/ qed.
-lemma tpss_refl: â\88\80d,e,L,T. L â\8a¢ T [d, e] â\89«* T.
+lemma tpss_refl: â\88\80d,e,L,T. L â\8a¢ T [d, e] â\96¶* T.
/2 width=1/ qed.
-lemma tpss_bind: â\88\80L,V1,V2,d,e. L â\8a¢ V1 [d, e] â\89«* V2 →
- â\88\80I,T1,T2. L. ð\9d\95\93{I} V2 â\8a¢ T1 [d + 1, e] â\89«* T2 →
- L â\8a¢ ð\9d\95\93{I} V1. T1 [d, e] â\89«* 𝕓{I} V2. T2.
+lemma tpss_bind: â\88\80L,V1,V2,d,e. L â\8a¢ V1 [d, e] â\96¶* V2 →
+ â\88\80I,T1,T2. L. ð\9d\95\93{I} V2 â\8a¢ T1 [d + 1, e] â\96¶* T2 →
+ L â\8a¢ ð\9d\95\93{I} V1. T1 [d, e] â\96¶* 𝕓{I} V2. T2.
#L #V1 #V2 #d #e #HV12 elim HV12 -V2
[ #V2 #HV12 #I #T1 #T2 #HT12 elim HT12 -T2
[ /3 width=5/
qed.
lemma tpss_flat: ∀L,I,V1,V2,T1,T2,d,e.
- L â\8a¢ V1 [d, e] â\89« * V2 â\86\92 L â\8a¢ T1 [d, e] â\89«* T2 →
- L â\8a¢ ð\9d\95\97{I} V1. T1 [d, e] â\89«* 𝕗{I} V2. T2.
+ L â\8a¢ V1 [d, e] â\96¶ * V2 â\86\92 L â\8a¢ T1 [d, e] â\96¶* T2 →
+ L â\8a¢ ð\9d\95\97{I} V1. T1 [d, e] â\96¶* 𝕗{I} V2. T2.
#L #I #V1 #V2 #T1 #T2 #d #e #HV12 elim HV12 -V2
[ #V2 #HV12 #HT12 elim HT12 -T2
[ /3 width=1/
]
qed.
-lemma tpss_weak: â\88\80L,T1,T2,d1,e1. L â\8a¢ T1 [d1, e1] â\89«* T2 →
+lemma tpss_weak: â\88\80L,T1,T2,d1,e1. L â\8a¢ T1 [d1, e1] â\96¶* T2 →
∀d2,e2. d2 ≤ d1 → d1 + e1 ≤ d2 + e2 →
- L â\8a¢ T1 [d2, e2] â\89«* T2.
+ L â\8a¢ T1 [d2, e2] â\96¶* T2.
#L #T1 #T2 #d1 #e1 #H #d1 #d2 #Hd21 #Hde12 @(tpss_ind … H) -T2
[ //
| #T #T2 #_ #HT12 #IHT
qed.
lemma tpss_weak_top: ∀L,T1,T2,d,e.
- L â\8a¢ T1 [d, e] â\89«* T2 â\86\92 L â\8a¢ T1 [d, |L| - d] â\89«* T2.
+ L â\8a¢ T1 [d, e] â\96¶* T2 â\86\92 L â\8a¢ T1 [d, |L| - d] â\96¶* T2.
#L #T1 #T2 #d #e #H @(tpss_ind … H) -T2
[ //
| #T #T2 #_ #HT12 #IHT
qed.
lemma tpss_weak_all: ∀L,T1,T2,d,e.
- L â\8a¢ T1 [d, e] â\89«* T2 â\86\92 L â\8a¢ T1 [0, |L|] â\89«* T2.
+ L â\8a¢ T1 [d, e] â\96¶* T2 â\86\92 L â\8a¢ T1 [0, |L|] â\96¶* T2.
#L #T1 #T2 #d #e #HT12
lapply (tpss_weak … HT12 0 (d + e) ? ?) -HT12 // #HT12
lapply (tpss_weak_top … HT12) //
(* Basic inversion lemmas ***************************************************)
(* Note: this can be derived from tpss_inv_atom1 *)
-lemma tpss_inv_sort1: â\88\80L,T2,k,d,e. L â\8a¢ â\8b\86k [d, e] â\89«* T2 → T2 = ⋆k.
+lemma tpss_inv_sort1: â\88\80L,T2,k,d,e. L â\8a¢ â\8b\86k [d, e] â\96¶* T2 → T2 = ⋆k.
#L #T2 #k #d #e #H @(tpss_ind … H) -T2
[ //
| #T #T2 #_ #HT2 #IHT destruct
qed-.
(* Note: this can be derived from tpss_inv_atom1 *)
-lemma tpss_inv_gref1: â\88\80L,T2,p,d,e. L â\8a¢ §p [d, e] â\89«* T2 → T2 = §p.
+lemma tpss_inv_gref1: â\88\80L,T2,p,d,e. L â\8a¢ §p [d, e] â\96¶* T2 → T2 = §p.
#L #T2 #p #d #e #H @(tpss_ind … H) -T2
[ //
| #T #T2 #_ #HT2 #IHT destruct
]
qed-.
-lemma tpss_inv_bind1: â\88\80d,e,L,I,V1,T1,U2. L â\8a¢ ð\9d\95\93{I} V1. T1 [d, e] â\89«* U2 →
- â\88\83â\88\83V2,T2. L â\8a¢ V1 [d, e] â\89«* V2 &
- L. ð\9d\95\93{I} V2 â\8a¢ T1 [d + 1, e] â\89«* T2 &
+lemma tpss_inv_bind1: â\88\80d,e,L,I,V1,T1,U2. L â\8a¢ ð\9d\95\93{I} V1. T1 [d, e] â\96¶* U2 →
+ â\88\83â\88\83V2,T2. L â\8a¢ V1 [d, e] â\96¶* V2 &
+ L. ð\9d\95\93{I} V2 â\8a¢ T1 [d + 1, e] â\96¶* T2 &
U2 = 𝕓{I} V2. T2.
#d #e #L #I #V1 #T1 #U2 #H @(tpss_ind … H) -U2
[ /2 width=5/
]
qed-.
-lemma tpss_inv_flat1: â\88\80d,e,L,I,V1,T1,U2. L â\8a¢ ð\9d\95\97{I} V1. T1 [d, e] â\89«* U2 →
- â\88\83â\88\83V2,T2. L â\8a¢ V1 [d, e] â\89«* V2 & L â\8a¢ T1 [d, e] â\89«* T2 &
+lemma tpss_inv_flat1: â\88\80d,e,L,I,V1,T1,U2. L â\8a¢ ð\9d\95\97{I} V1. T1 [d, e] â\96¶* U2 →
+ â\88\83â\88\83V2,T2. L â\8a¢ V1 [d, e] â\96¶* V2 & L â\8a¢ T1 [d, e] â\96¶* T2 &
U2 = 𝕗{I} V2. T2.
#d #e #L #I #V1 #T1 #U2 #H @(tpss_ind … H) -U2
[ /2 width=5/
]
qed-.
-lemma tpss_inv_refl_O2: â\88\80L,T1,T2,d. L â\8a¢ T1 [d, 0] â\89«* T2 → T1 = T2.
+lemma tpss_inv_refl_O2: â\88\80L,T1,T2,d. L â\8a¢ T1 [d, 0] â\96¶* T2 → T1 = T2.
#L #T1 #T2 #d #H @(tpss_ind … H) -T2
[ //
| #T #T2 #_ #HT2 #IHT <(tps_inv_refl_O2 … HT2) -HT2 //
lemma tpss_subst: ∀L,K,V,U1,i,d,e.
d ≤ i → i < d + e →
- â\87\93[0, i] L â\89¡ K. ð\9d\95\93{Abbr} V â\86\92 K â\8a¢ V [0, d + e - i - 1] â\89«* U1 →
- â\88\80U2. â\87\91[0, i + 1] U1 â\89¡ U2 â\86\92 L â\8a¢ #i [d, e] â\89«* U2.
+ â\87©[0, i] L â\89¡ K. ð\9d\95\93{Abbr} V â\86\92 K â\8a¢ V [0, d + e - i - 1] â\96¶* U1 →
+ â\88\80U2. â\87§[0, i + 1] U1 â\89¡ U2 â\86\92 L â\8a¢ #i [d, e] â\96¶* 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
(* Advanced inverion lemmas *************************************************)
-lemma tpss_inv_atom1: â\88\80L,T2,I,d,e. L â\8a¢ ð\9d\95\92{I} [d, e] â\89«* T2 →
+lemma tpss_inv_atom1: â\88\80L,T2,I,d,e. L â\8a¢ ð\9d\95\92{I} [d, e] â\96¶* T2 →
T2 = 𝕒{I} ∨
∃∃K,V1,V2,i. d ≤ i & i < d + e &
- â\87\93[O, i] L ≡ K. 𝕓{Abbr} V1 &
- K â\8a¢ V1 [0, d + e - i - 1] â\89«* V2 &
- â\87\91[O, i + 1] V2 ≡ T2 &
+ â\87©[O, i] L ≡ K. 𝕓{Abbr} V1 &
+ K â\8a¢ V1 [0, d + e - i - 1] â\96¶* V2 &
+ â\87§[O, i + 1] V2 ≡ T2 &
I = LRef i.
#L #T2 #I #d #e #H @(tpss_ind … H) -T2
[ /2 width=1/
]
qed-.
-lemma tpss_inv_lref1: â\88\80L,T2,i,d,e. L â\8a¢ #i [d, e] â\89«* T2 →
+lemma tpss_inv_lref1: â\88\80L,T2,i,d,e. L â\8a¢ #i [d, e] â\96¶* T2 →
T2 = #i ∨
∃∃K,V1,V2. d ≤ i & i < d + e &
- â\87\93[O, i] L ≡ K. 𝕓{Abbr} V1 &
- K â\8a¢ V1 [0, d + e - i - 1] â\89«* V2 &
- â\87\91[O, i + 1] V2 ≡ T2.
+ â\87©[O, i] L ≡ K. 𝕓{Abbr} V1 &
+ K â\8a¢ V1 [0, d + e - i - 1] â\96¶* V2 &
+ â\87§[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: â\88\80L,T1,T2,d. L â\8a¢ T1 [d, 1] â\89«* T2 →
- â\88\80K,V. â\87\93[0, d] L ≡ K. 𝕓{Abst} V → T1 = T2.
+lemma tpss_inv_refl_SO2: â\88\80L,T1,T2,d. L â\8a¢ T1 [d, 1] â\96¶* T2 →
+ â\88\80K,V. â\87©[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: â\88\80K,T1,T2,dt,et. K â\8a¢ T1 [dt, et] â\89«* T2 →
- â\88\80L,U1,d,e. dt + et â\89¤ d â\86\92 â\87\93[d, e] L ≡ K →
- â\87\91[d, e] T1 â\89¡ U1 â\86\92 â\88\80U2. â\87\91[d, e] T2 ≡ U2 →
- L â\8a¢ U1 [dt, et] â\89«* U2.
+lemma tpss_lift_le: â\88\80K,T1,T2,dt,et. K â\8a¢ T1 [dt, et] â\96¶* T2 →
+ â\88\80L,U1,d,e. dt + et â\89¤ d â\86\92 â\87©[d, e] L ≡ K →
+ â\87§[d, e] T1 â\89¡ U1 â\86\92 â\88\80U2. â\87§[d, e] T2 ≡ U2 →
+ L â\8a¢ U1 [dt, et] â\96¶* 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
]
qed.
-lemma tpss_lift_be: â\88\80K,T1,T2,dt,et. K â\8a¢ T1 [dt, et] â\89«* T2 →
+lemma tpss_lift_be: â\88\80K,T1,T2,dt,et. K â\8a¢ T1 [dt, et] â\96¶* T2 →
∀L,U1,d,e. dt ≤ d → d ≤ dt + et →
- â\87\93[d, e] L â\89¡ K â\86\92 â\87\91[d, e] T1 ≡ U1 →
- â\88\80U2. â\87\91[d, e] T2 â\89¡ U2 â\86\92 L â\8a¢ U1 [dt, et + e] â\89«* U2.
+ â\87©[d, e] L â\89¡ K â\86\92 â\87§[d, e] T1 ≡ U1 →
+ â\88\80U2. â\87§[d, e] T2 â\89¡ U2 â\86\92 L â\8a¢ U1 [dt, et + e] â\96¶* 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
]
qed.
-lemma tpss_lift_ge: â\88\80K,T1,T2,dt,et. K â\8a¢ T1 [dt, et] â\89«* T2 →
- â\88\80L,U1,d,e. d â\89¤ dt â\86\92 â\87\93[d, e] L ≡ K →
- â\87\91[d, e] T1 â\89¡ U1 â\86\92 â\88\80U2. â\87\91[d, e] T2 ≡ U2 →
- L â\8a¢ U1 [dt + e, et] â\89«* U2.
+lemma tpss_lift_ge: â\88\80K,T1,T2,dt,et. K â\8a¢ T1 [dt, et] â\96¶* T2 →
+ â\88\80L,U1,d,e. d â\89¤ dt â\86\92 â\87©[d, e] L ≡ K →
+ â\87§[d, e] T1 â\89¡ U1 â\86\92 â\88\80U2. â\87§[d, e] T2 ≡ U2 →
+ L â\8a¢ U1 [dt + e, et] â\96¶* 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
]
qed.
-lemma tpss_inv_lift1_le: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\89«* U2 →
- â\88\80K,d,e. â\87\93[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87\91[d, e] T1 ≡ U1 →
+lemma tpss_inv_lift1_le: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\96¶* U2 →
+ â\88\80K,d,e. â\87©[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87§[d, e] T1 ≡ U1 →
dt + et ≤ d →
- â\88\83â\88\83T2. K â\8a¢ T1 [dt, et] â\89«* T2 & â\87\91[d, e] T2 ≡ U2.
+ â\88\83â\88\83T2. K â\8a¢ T1 [dt, et] â\96¶* T2 & â\87§[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
]
qed.
-lemma tpss_inv_lift1_be: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\89«* U2 →
- â\88\80K,d,e. â\87\93[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87\91[d, e] T1 ≡ U1 →
+lemma tpss_inv_lift1_be: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\96¶* U2 →
+ â\88\80K,d,e. â\87©[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87§[d, e] T1 ≡ U1 →
dt ≤ d → d + e ≤ dt + et →
- â\88\83â\88\83T2. K â\8a¢ T1 [dt, et - e] â\89«* T2 & â\87\91[d, e] T2 ≡ U2.
+ â\88\83â\88\83T2. K â\8a¢ T1 [dt, et - e] â\96¶* T2 & â\87§[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
]
qed.
-lemma tpss_inv_lift1_ge: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\89«* U2 →
- â\88\80K,d,e. â\87\93[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87\91[d, e] T1 ≡ U1 →
+lemma tpss_inv_lift1_ge: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\96¶* U2 →
+ â\88\80K,d,e. â\87©[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87§[d, e] T1 ≡ U1 →
d + e ≤ dt →
- â\88\83â\88\83T2. K â\8a¢ T1 [dt - e, et] â\89«* T2 & â\87\91[d, e] T2 ≡ U2.
+ â\88\83â\88\83T2. K â\8a¢ T1 [dt - e, et] â\96¶* T2 & â\87§[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
qed.
lemma tpss_inv_lift1_eq: ∀L,U1,U2,d,e.
- L â\8a¢ U1 [d, e] â\89«* U2 â\86\92 â\88\80T1. â\87\91[d, e] T1 ≡ U1 → U1 = U2.
+ L â\8a¢ U1 [d, e] â\96¶* U2 â\86\92 â\88\80T1. â\87§[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: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\89«* U2 →
- â\88\80K,d,e. â\87\93[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87\91[d, e] T1 ≡ U1 →
+lemma tpss_inv_lift1_be_up: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\96¶* U2 →
+ â\88\80K,d,e. â\87©[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87§[d, e] T1 ≡ U1 →
dt ≤ d → dt + et ≤ d + e →
- â\88\83â\88\83T2. K â\8a¢ T1 [dt, d - dt] â\89«* T2 & â\87\91[d, e] T2 ≡ U2.
+ â\88\83â\88\83T2. K â\8a¢ T1 [dt, d - dt] â\96¶* T2 & â\87§[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
(* Properties concerning parallel substitution on local environments ********)
lemma ltps_tpss_conf_ge: ∀L0,L1,T2,U2,d1,e1,d2,e2.
- d1 + e1 â\89¤ d2 â\86\92 L0 [d1, e1] â\89« L1 →
- L0 â\8a¢ T2 [d2, e2] â\89«* U2 â\86\92 L1 â\8a¢ T2 [d2, e2] â\89«* U2.
+ d1 + e1 â\89¤ d2 â\86\92 L0 [d1, e1] â\96¶ L1 →
+ L0 â\8a¢ T2 [d2, e2] â\96¶* U2 â\86\92 L1 â\8a¢ T2 [d2, e2] â\96¶* 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] â\89« L1 â\86\92 L0 â\8a¢ T2 [d2, e2] â\89«* U2 →
- â\88\83â\88\83T. L1 â\8a¢ T2 [d2, e2] â\89«* T & L1 â\8a¢ U2 [d1, e1] â\89«* T.
+ L0 [d1, e1] â\96¶ L1 â\86\92 L0 â\8a¢ T2 [d2, e2] â\96¶* U2 →
+ â\88\83â\88\83T. L1 â\8a¢ T2 [d2, e2] â\96¶* T & L1 â\8a¢ U2 [d1, e1] â\96¶* T.
#L0 #L1 #T2 #U2 #d1 #e1 #d2 #e2 #HL01 #H @(tpss_ind … H) -U2
[ /3 width=3/
| #U #U2 #_ #HU2 * #T #HT2 #HUT
qed.
lemma ltps_tpss_trans_ge: ∀L0,L1,T2,U2,d1,e1,d2,e2.
- d1 + e1 â\89¤ d2 â\86\92 L1 [d1, e1] â\89« L0 →
- L0 â\8a¢ T2 [d2, e2] â\89«* U2 â\86\92 L1 â\8a¢ T2 [d2, e2] â\89«* U2.
+ d1 + e1 â\89¤ d2 â\86\92 L1 [d1, e1] â\96¶ L0 →
+ L0 â\8a¢ T2 [d2, e2] â\96¶* U2 â\86\92 L1 â\8a¢ T2 [d2, e2] â\96¶* 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] â\89« L0 â\86\92 L0 â\8a¢ T2 [d2, e2] â\89«* U2 →
- â\88\83â\88\83T. L1 â\8a¢ T2 [d2, e2] â\89«* T & L0 â\8a¢ T [d1, e1] â\89«* U2.
+ L1 [d1, e1] â\96¶ L0 â\86\92 L0 â\8a¢ T2 [d2, e2] â\96¶* U2 →
+ â\88\83â\88\83T. L1 â\8a¢ T2 [d2, e2] â\96¶* T & L0 â\8a¢ T [d1, e1] â\96¶* 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
qed.
fact ltps_tps_trans_eq_aux: ∀Y1,X2,L1,T2,U2,d,e.
- L1 â\8a¢ T2 [d, e] â\89« U2 â\86\92 â\88\80L0. L0 [d, e] â\89« L1 →
- Y1 = L1 â\86\92 X2 = T2 â\86\92 L0 â\8a¢ T2 [d, e] â\89«* U2.
+ L1 â\8a¢ T2 [d, e] â\96¶ U2 â\86\92 â\88\80L0. L0 [d, e] â\96¶ L1 →
+ Y1 = L1 â\86\92 X2 = T2 â\86\92 L0 â\8a¢ T2 [d, e] â\96¶* U2.
#Y1 #X2 @(cw_wf_ind … Y1 X2) -Y1 -X2 #Y1 #X2 #IH
#L1 #T2 #U2 #d #e * -L1 -T2 -U2 -d -e
[ //
]
qed.
-lemma ltps_tps_trans_eq: â\88\80L1,T2,U2,d,e. L1 â\8a¢ T2 [d, e] â\89« U2 →
- â\88\80L0. L0 [d, e] â\89« L1 â\86\92 L0 â\8a¢ T2 [d, e] â\89«* U2.
+lemma ltps_tps_trans_eq: â\88\80L1,T2,U2,d,e. L1 â\8a¢ T2 [d, e] â\96¶ U2 →
+ â\88\80L0. L0 [d, e] â\96¶ L1 â\86\92 L0 â\8a¢ T2 [d, e] â\96¶* U2.
/2 width=5/ qed.
-lemma ltps_tpss_trans_eq: â\88\80L0,L1,T2,U2,d,e. L0 [d, e] â\89« L1 →
- L1 â\8a¢ T2 [d, e] â\89«* U2 â\86\92 L0 â\8a¢ T2 [d, e] â\89«* U2.
+lemma ltps_tpss_trans_eq: â\88\80L0,L1,T2,U2,d,e. L0 [d, e] â\96¶ L1 →
+ L1 â\8a¢ T2 [d, e] â\96¶* U2 â\86\92 L0 â\8a¢ T2 [d, e] â\96¶* 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.
(* Advanced properties ******************************************************)
-lemma tpss_tps: â\88\80L,T1,T2,d. L â\8a¢ T1 [d, 1] â\89«* T2 â\86\92 L â\8a¢ T1 [d, 1] â\89« T2.
+lemma tpss_tps: â\88\80L,T1,T2,d. L â\8a¢ T1 [d, 1] â\96¶* T2 â\86\92 L â\8a¢ T1 [d, 1] â\96¶ 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: â\88\80L,T0,T1,d1,e1. L â\8a¢ T0 [d1, e1] â\89«* T1 →
- â\88\80T2,d2,e2. L â\8a¢ T0 [d2, e2] â\89« T2 →
- â\88\83â\88\83T. L â\8a¢ T1 [d2, e2] â\89« T & L â\8a¢ T2 [d1, e1] â\89«* T.
+lemma tpss_strip_eq: â\88\80L,T0,T1,d1,e1. L â\8a¢ T0 [d1, e1] â\96¶* T1 →
+ â\88\80T2,d2,e2. L â\8a¢ T0 [d2, e2] â\96¶ T2 →
+ â\88\83â\88\83T. L â\8a¢ T1 [d2, e2] â\96¶ T & L â\8a¢ T2 [d1, e1] â\96¶* T.
/3 width=3/ qed.
-lemma tpss_strip_neq: â\88\80L1,T0,T1,d1,e1. L1 â\8a¢ T0 [d1, e1] â\89«* T1 →
- â\88\80L2,T2,d2,e2. L2 â\8a¢ T0 [d2, e2] â\89« T2 →
+lemma tpss_strip_neq: â\88\80L1,T0,T1,d1,e1. L1 â\8a¢ T0 [d1, e1] â\96¶* T1 →
+ â\88\80L2,T2,d2,e2. L2 â\8a¢ T0 [d2, e2] â\96¶ T2 →
(d1 + e1 ≤ d2 ∨ d2 + e2 ≤ d1) →
- â\88\83â\88\83T. L2 â\8a¢ T1 [d2, e2] â\89« T & L1 â\8a¢ T2 [d1, e1] â\89«* T.
+ â\88\83â\88\83T. L2 â\8a¢ T1 [d2, e2] â\96¶ T & L1 â\8a¢ T2 [d1, e1] â\96¶* T.
/3 width=3/ qed.
-lemma tpss_strap1_down: â\88\80L,T1,T0,d1,e1. L â\8a¢ T1 [d1, e1] â\89«* T0 →
- â\88\80T2,d2,e2. L â\8a¢ T0 [d2, e2] â\89« T2 → d2 + e2 ≤ d1 →
- â\88\83â\88\83T. L â\8a¢ T1 [d2, e2] â\89« T & L â\8a¢ T [d1, e1] â\89«* T2.
+lemma tpss_strap1_down: â\88\80L,T1,T0,d1,e1. L â\8a¢ T1 [d1, e1] â\96¶* T0 →
+ â\88\80T2,d2,e2. L â\8a¢ T0 [d2, e2] â\96¶ T2 → d2 + e2 ≤ d1 →
+ â\88\83â\88\83T. L â\8a¢ T1 [d2, e2] â\96¶ T & L â\8a¢ T [d1, e1] â\96¶* T2.
/3 width=3/ qed.
-lemma tpss_strap2_down: â\88\80L,T1,T0,d1,e1. L â\8a¢ T1 [d1, e1] â\89« T0 →
- â\88\80T2,d2,e2. L â\8a¢ T0 [d2, e2] â\89«* T2 → d2 + e2 ≤ d1 →
- â\88\83â\88\83T. L â\8a¢ T1 [d2, e2] â\89«* T & L â\8a¢ T [d1, e1] â\89« T2.
+lemma tpss_strap2_down: â\88\80L,T1,T0,d1,e1. L â\8a¢ T1 [d1, e1] â\96¶ T0 →
+ â\88\80T2,d2,e2. L â\8a¢ T0 [d2, e2] â\96¶* T2 → d2 + e2 ≤ d1 →
+ â\88\83â\88\83T. L â\8a¢ T1 [d2, e2] â\96¶* T & L â\8a¢ T [d1, e1] â\96¶ T2.
/3 width=3/ qed.
-lemma tpss_split_up: â\88\80L,T1,T2,d,e. L â\8a¢ T1 [d, e] â\89«* T2 →
+lemma tpss_split_up: â\88\80L,T1,T2,d,e. L â\8a¢ T1 [d, e] â\96¶* T2 →
∀i. d ≤ i → i ≤ d + e →
- â\88\83â\88\83T. L â\8a¢ T1 [d, i - d] â\89«* T & L â\8a¢ T [i, d + e - i] â\89«* T2.
+ â\88\83â\88\83T. L â\8a¢ T1 [d, i - d] â\96¶* T & L â\8a¢ T [i, d + e - i] â\96¶* T2.
#L #T1 #T2 #d #e #H #i #Hdi #Hide @(tpss_ind … H) -T2
[ /2 width=3/
| #T #T2 #_ #HT12 * #T3 #HT13 #HT3
]
qed.
-lemma tpss_inv_lift1_up: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\89«* U2 →
- â\88\80K,d,e. â\87\93[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87\91[d, e] T1 ≡ U1 →
+lemma tpss_inv_lift1_up: â\88\80L,U1,U2,dt,et. L â\8a¢ U1 [dt, et] â\96¶* U2 →
+ â\88\80K,d,e. â\87©[d, e] L â\89¡ K â\86\92 â\88\80T1. â\87§[d, e] T1 ≡ U1 →
d ≤ dt → dt ≤ d + e → d + e ≤ dt + et →
- â\88\83â\88\83T2. K â\8a¢ T1 [d, dt + et - (d + e)] â\89«* T2 & â\87\91[d, e] T2 ≡ U2.
+ â\88\83â\88\83T2. K â\8a¢ T1 [d, dt + et - (d + e)] â\96¶* T2 & â\87§[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
(* Main properties **********************************************************)
-theorem tpss_conf_eq: â\88\80L,T0,T1,d1,e1. L â\8a¢ T0 [d1, e1] â\89«* T1 →
- â\88\80T2,d2,e2. L â\8a¢ T0 [d2, e2] â\89«* T2 →
- â\88\83â\88\83T. L â\8a¢ T1 [d2, e2] â\89«* T & L â\8a¢ T2 [d1, e1] â\89«* T.
+theorem tpss_conf_eq: â\88\80L,T0,T1,d1,e1. L â\8a¢ T0 [d1, e1] â\96¶* T1 →
+ â\88\80T2,d2,e2. L â\8a¢ T0 [d2, e2] â\96¶* T2 →
+ â\88\83â\88\83T. L â\8a¢ T1 [d2, e2] â\96¶* T & L â\8a¢ T2 [d1, e1] â\96¶* T.
/3 width=3/ qed.
-theorem tpss_conf_neq: â\88\80L1,T0,T1,d1,e1. L1 â\8a¢ T0 [d1, e1] â\89«* T1 →
- â\88\80L2,T2,d2,e2. L2 â\8a¢ T0 [d2, e2] â\89«* T2 →
+theorem tpss_conf_neq: â\88\80L1,T0,T1,d1,e1. L1 â\8a¢ T0 [d1, e1] â\96¶* T1 →
+ â\88\80L2,T2,d2,e2. L2 â\8a¢ T0 [d2, e2] â\96¶* T2 →
(d1 + e1 ≤ d2 ∨ d2 + e2 ≤ d1) →
- â\88\83â\88\83T. L2 â\8a¢ T1 [d2, e2] â\89«* T & L1 â\8a¢ T2 [d1, e1] â\89«* T.
+ â\88\83â\88\83T. L2 â\8a¢ T1 [d2, e2] â\96¶* T & L1 â\8a¢ T2 [d1, e1] â\96¶* T.
/3 width=3/ qed.
theorem tpss_trans_eq: ∀L,T1,T,T2,d,e.
- L â\8a¢ T1 [d, e] â\89«* T â\86\92 L â\8a¢ T [d, e] â\89«* T2 →
- L â\8a¢ T1 [d, e] â\89«* T2.
+ L â\8a¢ T1 [d, e] â\96¶* T â\86\92 L â\8a¢ T [d, e] â\96¶* T2 →
+ L â\8a¢ T1 [d, e] â\96¶* T2.
/2 width=3/ qed.
-theorem tpss_trans_down: â\88\80L,T1,T0,d1,e1. L â\8a¢ T1 [d1, e1] â\89«* T0 →
- â\88\80T2,d2,e2. L â\8a¢ T0 [d2, e2] â\89«* T2 → d2 + e2 ≤ d1 →
- â\88\83â\88\83T. L â\8a¢ T1 [d2, e2] â\89«* T & L â\8a¢ T [d1, e1] â\89«* T2.
+theorem tpss_trans_down: â\88\80L,T1,T0,d1,e1. L â\8a¢ T1 [d1, e1] â\96¶* T0 →
+ â\88\80T2,d2,e2. L â\8a¢ T0 [d2, e2] â\96¶* T2 → d2 + e2 ≤ d1 →
+ â\88\83â\88\83T. L â\8a¢ T1 [d2, e2] â\96¶* T & L â\8a¢ T [d1, e1] â\96¶* T2.
/3 width=3/ qed.