+utf8Macro.cmo : utf8MacroTable.cmo utf8Macro.cmi
+utf8Macro.cmx : utf8MacroTable.cmx utf8Macro.cmi
utf8Macro.cmi :
utf8MacroTable.cmo :
utf8MacroTable.cmx :
-utf8Macro.cmo : utf8MacroTable.cmo utf8Macro.cmi
-utf8Macro.cmx : utf8MacroTable.cmx utf8Macro.cmi
-applyTransformation.cmo : applyTransformation.cmi
applyTransformation.cmx : applyTransformation.cmi
-buildTimeConf.cmo :
+applyTransformation.cmi :
buildTimeConf.cmx :
-cicMathView.cmo : matitaMisc.cmi matitaGuiTypes.cmi matitaGtkMisc.cmi \
- buildTimeConf.cmx applyTransformation.cmi cicMathView.cmi
cicMathView.cmx : matitaMisc.cmx matitaGuiTypes.cmi matitaGtkMisc.cmx \
buildTimeConf.cmx applyTransformation.cmx cicMathView.cmi
-lablGraphviz.cmo : lablGraphviz.cmi
+cicMathView.cmi : matitaGuiTypes.cmi applyTransformation.cmi
lablGraphviz.cmx : lablGraphviz.cmi
-matitaclean.cmo : matitaMisc.cmi matitaInit.cmi matitaclean.cmi
-matitaclean.cmx : matitaMisc.cmx matitaInit.cmx matitaclean.cmi
-matitac.cmo : matitaclean.cmi matitaMisc.cmi matitaInit.cmi matitaExcPp.cmi \
- matitaEngine.cmi
-matitac.cmx : matitaclean.cmx matitaMisc.cmx matitaInit.cmx matitaExcPp.cmx \
- matitaEngine.cmx
-matitaEngine.cmo : applyTransformation.cmi matitaEngine.cmi
-matitaEngine.cmx : applyTransformation.cmx matitaEngine.cmi
-matitaExcPp.cmo : matitaEngine.cmi matitaExcPp.cmi
-matitaExcPp.cmx : matitaEngine.cmx matitaExcPp.cmi
-matitaGtkMisc.cmo : matitaTypes.cmi buildTimeConf.cmx matitaGtkMisc.cmi
-matitaGtkMisc.cmx : matitaTypes.cmx buildTimeConf.cmx matitaGtkMisc.cmi
-matitaGui.cmo : matitaTypes.cmi matitaScript.cmi matitaMisc.cmi \
- matitaMathView.cmi matitaGuiTypes.cmi matitaGtkMisc.cmi matitaExcPp.cmi \
- buildTimeConf.cmx matitaGui.cmi
-matitaGui.cmx : matitaTypes.cmx matitaScript.cmx matitaMisc.cmx \
- matitaMathView.cmx matitaGuiTypes.cmi matitaGtkMisc.cmx matitaExcPp.cmx \
- buildTimeConf.cmx matitaGui.cmi
-matitaInit.cmo : matitaExcPp.cmi buildTimeConf.cmx matitaInit.cmi
-matitaInit.cmx : matitaExcPp.cmx buildTimeConf.cmx matitaInit.cmi
-matitaMathView.cmo : virtuals.cmi matitaTypes.cmi matitaMisc.cmi \
- matitaGuiTypes.cmi matitaGtkMisc.cmi matitaExcPp.cmi lablGraphviz.cmi \
- cicMathView.cmi buildTimeConf.cmx applyTransformation.cmi \
- matitaMathView.cmi
-matitaMathView.cmx : virtuals.cmx matitaTypes.cmx matitaMisc.cmx \
- matitaGuiTypes.cmi matitaGtkMisc.cmx matitaExcPp.cmx lablGraphviz.cmx \
- cicMathView.cmx buildTimeConf.cmx applyTransformation.cmx \
- matitaMathView.cmi
-matitaMisc.cmo : matitaGuiTypes.cmi buildTimeConf.cmx matitaMisc.cmi
-matitaMisc.cmx : matitaGuiTypes.cmi buildTimeConf.cmx matitaMisc.cmi
-matita.cmo : predefined_virtuals.cmi matitaScript.cmi matitaMisc.cmi \
- matitaInit.cmi matitaGui.cmi matitaGtkMisc.cmi buildTimeConf.cmx \
- applyTransformation.cmi
+lablGraphviz.cmi :
matita.cmx : predefined_virtuals.cmx matitaScript.cmx matitaMisc.cmx \
matitaInit.cmx matitaGui.cmx matitaGtkMisc.cmx buildTimeConf.cmx \
applyTransformation.cmx
-matitaScript.cmo : virtuals.cmi matitaTypes.cmi matitaMisc.cmi \
- matitaMathView.cmi matitaGtkMisc.cmi matitaEngine.cmi cicMathView.cmi \
- buildTimeConf.cmx matitaScript.cmi
-matitaScript.cmx : virtuals.cmx matitaTypes.cmx matitaMisc.cmx \
- matitaMathView.cmx matitaGtkMisc.cmx matitaEngine.cmx cicMathView.cmx \
- buildTimeConf.cmx matitaScript.cmi
-matitaTypes.cmo : matitaTypes.cmi
-matitaTypes.cmx : matitaTypes.cmi
-predefined_virtuals.cmo : virtuals.cmi predefined_virtuals.cmi
-predefined_virtuals.cmx : virtuals.cmx predefined_virtuals.cmi
-virtuals.cmo : virtuals.cmi
-virtuals.cmx : virtuals.cmi
-applyTransformation.cmi :
-cicMathView.cmi : matitaGuiTypes.cmi applyTransformation.cmi
-lablGraphviz.cmi :
-matitaclean.cmi :
+matitaEngine.cmx : applyTransformation.cmx matitaEngine.cmi
matitaEngine.cmi : applyTransformation.cmi
+matitaExcPp.cmx : matitaEngine.cmx matitaExcPp.cmi
matitaExcPp.cmi :
-matitaGtkMisc.cmi :
+matitaGeneratedGui.cmx :
+matitaGtkMisc.cmx : matitaTypes.cmx matitaGeneratedGui.cmx buildTimeConf.cmx \
+ matitaGtkMisc.cmi
+matitaGtkMisc.cmi : matitaGeneratedGui.cmx
+matitaGui.cmx : matitaTypes.cmx matitaScript.cmx matitaMisc.cmx \
+ matitaMathView.cmx matitaGuiTypes.cmi matitaGtkMisc.cmx \
+ matitaGeneratedGui.cmx matitaExcPp.cmx buildTimeConf.cmx matitaGui.cmi
matitaGui.cmi : matitaGuiTypes.cmi
-matitaGuiTypes.cmi : applyTransformation.cmi
+matitaGuiTypes.cmi : matitaGeneratedGui.cmx applyTransformation.cmi
+matitaInit.cmx : matitaExcPp.cmx buildTimeConf.cmx matitaInit.cmi
matitaInit.cmi :
+matitaMathView.cmx : virtuals.cmx matitaTypes.cmx matitaMisc.cmx \
+ matitaGuiTypes.cmi matitaGtkMisc.cmx matitaGeneratedGui.cmx \
+ matitaExcPp.cmx lablGraphviz.cmx cicMathView.cmx buildTimeConf.cmx \
+ applyTransformation.cmx matitaMathView.cmi
matitaMathView.cmi : matitaTypes.cmi matitaGuiTypes.cmi
+matitaMisc.cmx : matitaGuiTypes.cmi buildTimeConf.cmx matitaMisc.cmi
matitaMisc.cmi : matitaGuiTypes.cmi
+matitaScript.cmx : virtuals.cmx matitaTypes.cmx matitaMisc.cmx \
+ matitaMathView.cmx matitaGtkMisc.cmx matitaEngine.cmx cicMathView.cmx \
+ buildTimeConf.cmx matitaScript.cmi
matitaScript.cmi :
+matitaTypes.cmx : matitaTypes.cmi
matitaTypes.cmi :
+matitac.cmx : matitaclean.cmx matitaMisc.cmx matitaInit.cmx matitaExcPp.cmx \
+ matitaEngine.cmx
+matitaclean.cmx : matitaMisc.cmx matitaInit.cmx matitaclean.cmi
+matitaclean.cmi :
+predefined_virtuals.cmx : virtuals.cmx predefined_virtuals.cmi
predefined_virtuals.cmi :
+virtuals.cmx : virtuals.cmi
virtuals.cmi :
(* Basic properties *********************************************************)
-lemma Delta_lifts: â\88\80W1,W2,f. â¬\86*[f] W1 â\89¡ W2 →
- â¬\86*[f] (Delta W1) â\89¡ (Delta W2).
+lemma Delta_lifts: â\88\80W1,W2,f. â¬\86*[f] W1 â\89\98 W2 →
+ â¬\86*[f] (Delta W1) â\89\98 (Delta W2).
/4 width=1 by lifts_lref, lifts_bind, lifts_flat/ qed.
(* Main properties **********************************************************)
(* Note: the constant 0 cannot be generalized *)
lemma lsubsv_drop_O1_conf: ∀h,o,G,L1,L2. G ⊢ L1 ⫃¡[h, o] L2 →
- â\88\80K1,b,k. â¬\87[b, 0, k] L1 â\89¡ K1 →
- â\88\83â\88\83K2. G â\8a¢ K1 â«\83¡[h, o] K2 & â¬\87[b, 0, k] L2 â\89¡ K2.
+ â\88\80K1,b,k. â¬\87[b, 0, k] L1 â\89\98 K1 →
+ â\88\83â\88\83K2. G â\8a¢ K1 â«\83¡[h, o] K2 & â¬\87[b, 0, k] L2 â\89\98 K2.
#h #o #G #L1 #L2 #H elim H -L1 -L2
[ /2 width=3 by ex2_intro/
| #I #L1 #L2 #V #_ #IHL12 #K1 #b #k #H
(* Note: the constant 0 cannot be generalized *)
lemma lsubsv_drop_O1_trans: ∀h,o,G,L1,L2. G ⊢ L1 ⫃¡[h, o] L2 →
- â\88\80K2,b, k. â¬\87[b, 0, k] L2 â\89¡ K2 →
- â\88\83â\88\83K1. G â\8a¢ K1 â«\83¡[h, o] K2 & â¬\87[b, 0, k] L1 â\89¡ K1.
+ â\88\80K2,b, k. â¬\87[b, 0, k] L2 â\89\98 K2 →
+ â\88\83â\88\83K1. G â\8a¢ K1 â«\83¡[h, o] K2 & â¬\87[b, 0, k] L1 â\89\98 K1.
#h #o #G #L1 #L2 #H elim H -L1 -L2
[ /2 width=3 by ex2_intro/
| #I #L1 #L2 #V #_ #IHL12 #K2 #b #k #H
(* activate genv *)
inductive snv (h) (o): relation3 genv lenv term ≝
| snv_sort: ∀G,L,s. snv h o G L (⋆s)
-| snv_lref: â\88\80I,G,L,K,V,i. â¬\87[i] L â\89¡ K.ⓑ{I}V → snv h o G K V → snv h o G L (#i)
+| snv_lref: â\88\80I,G,L,K,V,i. â¬\87[i] L â\89\98 K.ⓑ{I}V → snv h o G K V → snv h o G L (#i)
| snv_bind: ∀a,I,G,L,V,T. snv h o G L V → snv h o G (L.ⓑ{I}V) T → snv h o G L (ⓑ{a,I}V.T)
| snv_appl: ∀a,G,L,V,W0,T,U0,d. snv h o G L V → snv h o G L T →
⦃G, L⦄ ⊢ V •*➡*[h, o, 1] W0 → ⦃G, L⦄ ⊢ T •*➡*[h, o, d] ⓛ{a}W0.U0 → snv h o G L (ⓐV.T)
(* Basic inversion lemmas ***************************************************)
fact snv_inv_lref_aux: ∀h,o,G,L,X. ⦃G, L⦄ ⊢ X ¡[h, o] → ∀i. X = #i →
- â\88\83â\88\83I,K,V. â¬\87[i] L â\89¡ K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ¡[h, o].
+ â\88\83â\88\83I,K,V. â¬\87[i] L â\89\98 K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ¡[h, o].
#h #o #G #L #X * -G -L -X
[ #G #L #s #i #H destruct
| #I #G #L #K #V #i0 #HLK #HV #i #H destruct /2 width=5 by ex2_3_intro/
qed-.
lemma snv_inv_lref: ∀h,o,G,L,i. ⦃G, L⦄ ⊢ #i ¡[h, o] →
- â\88\83â\88\83I,K,V. â¬\87[i] L â\89¡ K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ¡[h, o].
+ â\88\83â\88\83I,K,V. â¬\87[i] L â\89\98 K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ¡[h, o].
/2 width=3 by snv_inv_lref_aux/ qed-.
fact snv_inv_gref_aux: ∀h,o,G,L,X. ⦃G, L⦄ ⊢ X ¡[h, o] → ∀p. X = §p → ⊥.
(* Relocation properties ****************************************************)
-lemma snv_lift: â\88\80h,o,G,K,T. â¦\83G, Kâ¦\84 â\8a¢ T ¡[h, o] â\86\92 â\88\80L,b,l,k. â¬\87[b, l, k] L â\89¡ K →
- â\88\80U. â¬\86[l, k] T â\89¡ U → ⦃G, L⦄ ⊢ U ¡[h, o].
+lemma snv_lift: â\88\80h,o,G,K,T. â¦\83G, Kâ¦\84 â\8a¢ T ¡[h, o] â\86\92 â\88\80L,b,l,k. â¬\87[b, l, k] L â\89\98 K →
+ â\88\80U. â¬\86[l, k] T â\89\98 U → ⦃G, L⦄ ⊢ U ¡[h, o].
#h #o #G #K #T #H elim H -G -K -T
[ #G #K #s #L #b #l #k #_ #X #H
>(lift_inv_sort1 … H) -X -K -l -k //
]
qed.
-lemma snv_inv_lift: â\88\80h,o,G,L,U. â¦\83G, Lâ¦\84 â\8a¢ U ¡[h, o] â\86\92 â\88\80K,b,l,k. â¬\87[b, l, k] L â\89¡ K →
- â\88\80T. â¬\86[l, k] T â\89¡ U → ⦃G, K⦄ ⊢ T ¡[h, o].
+lemma snv_inv_lift: â\88\80h,o,G,L,U. â¦\83G, Lâ¦\84 â\8a¢ U ¡[h, o] â\86\92 â\88\80K,b,l,k. â¬\87[b, l, k] L â\89\98 K →
+ â\88\80T. â¬\86[l, k] T â\89\98 U → ⦃G, K⦄ ⊢ T ¡[h, o].
#h #o #G #L #U #H elim H -G -L -U
[ #G #L #s #K #b #l #k #_ #X #H
>(lift_inv_sort2 … H) -X -L -l -k //
(* CONTEXT-SENSITIVE PARALLEL EQUIVALENCE ON TERMS **************************)
definition cpcs: relation4 genv lenv term term ≝
- λG. LTC … (cpc G).
+ λG. CTC … (cpc G).
interpretation "context-sensitive parallel equivalence (term)"
'PConvStar G L T1 T2 = (cpcs G L T1 T2).
qed-.
(* Basic_1: was: pc3_gen_lift *)
-lemma cpcs_inv_lift: â\88\80G,L,K,b,l,k. â¬\87[b, l, k] L â\89¡ K →
- â\88\80T1,U1. â¬\86[l, k] T1 â\89¡ U1 â\86\92 â\88\80T2,U2. â¬\86[l, k] T2 â\89¡ U2 →
+lemma cpcs_inv_lift: â\88\80G,L,K,b,l,k. â¬\87[b, l, k] L â\89\98 K →
+ â\88\80T1,U1. â¬\86[l, k] T1 â\89\98 U1 â\86\92 â\88\80T2,U2. â¬\86[l, k] T2 â\89\98 U2 →
⦃G, L⦄ ⊢ U1 ⬌* U2 → ⦃G, K⦄ ⊢ T1 ⬌* T2.
#G #L #K #b #l #k #HLK #T1 #U1 #HTU1 #T2 #U2 #HTU2 #HU12
elim (cpcs_inv_cprs … HU12) -HU12 #U #HU1 #HU2
qed-.
(* Basic_1: was: pc3_lift *)
-lemma cpcs_lift: â\88\80G,L,K,b,l,k. â¬\87[b, l, k] L â\89¡ K →
- â\88\80T1,U1. â¬\86[l, k] T1 â\89¡ U1 â\86\92 â\88\80T2,U2. â¬\86[l, k] T2 â\89¡ U2 →
+lemma cpcs_lift: â\88\80G,L,K,b,l,k. â¬\87[b, l, k] L â\89\98 K →
+ â\88\80T1,U1. â¬\86[l, k] T1 â\89\98 U1 â\86\92 â\88\80T2,U2. â¬\86[l, k] T2 â\89\98 U2 →
⦃G, K⦄ ⊢ T1 ⬌* T2 → ⦃G, L⦄ ⊢ U1 ⬌* U2.
#G #L #K #b #l #k #HLK #T1 #U1 #HTU1 #T2 #U2 #HTU2 #HT12
elim (cpcs_inv_cprs … HT12) -HT12 #T #HT1 #HT2
(* ITERATED EXTENSION ON REFERRED ENTRIES OF A CONTEXT-SENSITIVE REALTION ***)
-definition tc_lfxs (R): term → relation lenv ≝ LTC … (lfxs R).
+definition tc_lfxs (R): term → relation lenv ≝ CTC … (lfxs R).
interpretation "iterated extension on referred entries (local environment)"
'RelationStarStar R T L1 L2 = (tc_lfxs R T L1 L2).
(* ITERATED EXTENSION ON REFERRED ENTRIES OF A CONTEXT-SENSITIVE REALTION ***)
definition tc_dedropable_sn: predicate (relation3 lenv term term) ≝
- λR. â\88\80b,f,L1,K1. â¬\87*[b, f] L1 â\89¡ K1 →
- â\88\80K2,T. K1 ⪤**[R, T] K2 â\86\92 â\88\80U. â¬\86*[f] T â\89¡ U →
- â\88\83â\88\83L2. L1 ⪤**[R, U] L2 & â¬\87*[b, f] L2 â\89¡ K2 & L1 â\89\90[f] L2.
+ λR. â\88\80b,f,L1,K1. â¬\87*[b, f] L1 â\89\98 K1 →
+ â\88\80K2,T. K1 ⪤**[R, T] K2 â\86\92 â\88\80U. â¬\86*[f] T â\89\98 U →
+ â\88\83â\88\83L2. L1 ⪤**[R, U] L2 & â¬\87*[b, f] L2 â\89\98 K2 & L1 â\89¡[f] L2.
definition tc_dropable_sn: predicate (relation3 lenv term term) ≝
- λR. â\88\80b,f,L1,K1. â¬\87*[b, f] L1 â\89¡ K1 → 𝐔⦃f⦄ →
- â\88\80L2,U. L1 ⪤**[R, U] L2 â\86\92 â\88\80T. â¬\86*[f] T â\89¡ U →
- â\88\83â\88\83K2. K1 ⪤**[R, T] K2 & â¬\87*[b, f] L2 â\89¡ K2.
+ λR. â\88\80b,f,L1,K1. â¬\87*[b, f] L1 â\89\98 K1 → 𝐔⦃f⦄ →
+ â\88\80L2,U. L1 ⪤**[R, U] L2 â\86\92 â\88\80T. â¬\86*[f] T â\89\98 U →
+ â\88\83â\88\83K2. K1 ⪤**[R, T] K2 & â¬\87*[b, f] L2 â\89\98 K2.
definition tc_dropable_dx: predicate (relation3 lenv term term) ≝
λR. ∀L1,L2,U. L1 ⪤**[R, U] L2 →
- â\88\80b,f,K2. â¬\87*[b, f] L2 â\89¡ K2 â\86\92 ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\88\80T. â¬\86*[f] T â\89¡ U →
- â\88\83â\88\83K1. â¬\87*[b, f] L1 â\89¡ K1 & K1 ⪤**[R, T] K2.
+ â\88\80b,f,K2. â¬\87*[b, f] L2 â\89\98 K2 â\86\92 ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\88\80T. â¬\86*[f] T â\89\98 U →
+ â\88\83â\88\83K1. â¬\87*[b, f] L1 â\89\98 K1 & K1 ⪤**[R, T] K2.
(* Properties with generic slicing for local environments *******************)
-lemma dedropable_sn_LTC: ∀R. dedropable_sn R → tc_dedropable_sn R.
+lemma dedropable_sn_CTC: ∀R. dedropable_sn R → tc_dedropable_sn R.
#R #HR #b #f #L1 #K1 #HLK1 #K2 #T #H elim H -K2
[ #K2 #HK12 #U #HTU elim (HR … HLK1 … HK12 … HTU) -K1 -T -HR
/3 width=4 by ex3_intro, inj/
(* Inversion lemmas with generic slicing for local environments *************)
-lemma dropable_sn_LTC: ∀R. dropable_sn R → tc_dropable_sn R.
+lemma dropable_sn_CTC: ∀R. dropable_sn R → tc_dropable_sn R.
#R #HR #b #f #L1 #K1 #HLK1 #Hf #L2 #U #H elim H -L2
[ #L2 #HL12 #T #HTU elim (HR … HLK1 … HL12 … HTU) -L1 -U -HR
/3 width=3 by inj, ex2_intro/
]
qed-.
-lemma dropable_dx_LTC: ∀R. dropable_dx R → tc_dropable_dx R.
+lemma dropable_dx_CTC: ∀R. dropable_dx R → tc_dropable_dx R.
#R #HR #L1 #L2 #U #H elim H -L2
[ #L2 #HL12 #b #f #K2 #HLK2 #Hf #T #HTU
elim (HR … HL12 … HLK2 … HTU) -L2 -U -HR
(* Basic_2A1: uses: TC_lpx_sn_pair TC_lpx_sn_pair_refl *)
lemma tc_lfxs_pair_refl: ∀R. c_reflexive … R →
- ∀L,V1,V2. LTC … R L V1 V2 → ∀I,T. L.ⓑ{I}V1 ⪤**[R, T] L.ⓑ{I}V2.
+ ∀L,V1,V2. CTC … R L V1 V2 → ∀I,T. L.ⓑ{I}V1 ⪤**[R, T] L.ⓑ{I}V2.
#R #HR #L #V1 #V2 #H elim H -V2
/3 width=3 by tc_lfxs_step_dx, lfxs_pair_refl, inj/
qed.
(* Properties with generic extension of a context sensitive relation ********)
lemma tc_lfxs_lex: ∀R. c_reflexive … R →
- ∀L1,L2,T. L1 ⪤[LTC … R] L2 → L1 ⪤**[R, T] L2.
+ ∀L1,L2,T. L1 ⪤[CTC … R] L2 → L1 ⪤**[R, T] L2.
#R #HR #L1 #L2 #T *
/5 width=7 by tc_lfxs_tc, lexs_inv_tc_dx, lexs_co, ext2_inv_tc, ext2_refl/
qed.
lemma tc_lfxs_lex_lfeq: ∀R. c_reflexive … R →
- ∀L1,L. L1 ⪤[LTC … R] L → ∀L2,T. L ≐[T] L2 →
+ ∀L1,L. L1 ⪤[CTC … R] L → ∀L2,T. L ≡[T] L2 →
L1 ⪤**[R, T] L2.
/3 width=3 by tc_lfxs_lex, tc_lfxs_step_dx, lfeq_fwd_lfxs/ qed.
s_rs_transitive … R (λ_.lex R) →
lfeq_transitive R →
∀L1,L2,T. L1 ⪤**[R, T] L2 →
- ∃∃L. L1 ⪤[LTC … R] L & L ≐[T] L2.
+ ∃∃L. L1 ⪤[CTC … R] L & L ≡[T] L2.
#R #H1R #H2R #H3R #H4R #L1 #L2 #T #H
lapply (s_rs_transitive_lex_inv_isid … H3R) -H3R #H3R
@(tc_lfxs_ind_sn … H1R … H) -H -L2
lapply (lexs_sdj … HL0 f1 ?) /2 width=1 by sdj_isid_sn/ #H
elim (frees_lexs_conf … Hf1 … H) // -H2R -H #f2 #Hf2 #Hf21
lapply (sle_lexs_trans … HL02 … Hf21) -f1 // #HL02
- lapply (lexs_co ?? cfull (LTC … (cext2 R)) … HL1) -HL1 /2 width=1 by ext2_inv_tc/ #HL1
+ lapply (lexs_co ?? cfull (CTC … (cext2 R)) … HL1) -HL1 /2 width=1 by ext2_inv_tc/ #HL1
/8 width=11 by lexs_inv_tc_dx, lexs_tc_dx, lexs_co, ext2_tc, ext2_refl, step, ex2_intro/ (**) (* full auto too slow *)
]
qed-.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The HELM team. *)
-(* ||A|| http://helm.cs.unibo.it *)
-(* \ / *)
-(* \ / This file is distributed under the terms of the *)
-(* v GNU General Public License Version 2 *)
-(* *)
-(**************************************************************************)
-
-(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-
-notation "hvbox( L1 ≐ [ break term 46 f ] break term 46 L2 )"
- non associative with precedence 45
- for @{ 'DotEqSn $f $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( L â\8a¢ ð\9d\90\85 * â¦\83 break term 46 T â¦\84 â\89¡ break term 46 f )"
+notation "hvbox( L â\8a¢ ð\9d\90\85 * â¦\83 break term 46 T â¦\84 â\89\98 break term 46 f )"
non associative with precedence 45
for @{ 'FreeStar $L $T $f }.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The HELM team. *)
+(* ||A|| http://helm.cs.unibo.it *)
+(* \ / *)
+(* \ / This file is distributed under the terms of the *)
+(* v GNU General Public License Version 2 *)
+(* *)
+(**************************************************************************)
+
+(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
+
+notation "hvbox( L1 ≡ [ break term 46 f ] break term 46 L2 )"
+ non associative with precedence 45
+ for @{ 'IdEqSn $f $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¬\87 * [ term 46 i ] break term 46 L1 â\89¡ break term 46 L2 )"
+notation "hvbox( â¬\87 * [ term 46 i ] break term 46 L1 â\89\98 break term 46 L2 )"
non associative with precedence 45
for @{ 'RDropStar $i $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¬\87 * [ term 46 b, break term 46 f ] break term 46 L1 â\89¡ break term 46 L2 )"
+notation "hvbox( â¬\87 * [ term 46 b, break term 46 f ] break term 46 L1 â\89\98 break term 46 L2 )"
non associative with precedence 45
for @{ 'RDropStar $b $f $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¬\86 * [ term 46 f ] break term 46 T1 â\89¡ break term 46 T2 )"
+notation "hvbox( â¬\86 * [ term 46 f ] break term 46 T1 â\89\98 break term 46 T2 )"
non associative with precedence 45
for @{ 'RLiftStar $f $T1 $T2 }.
| drops_atom: ∀f. (b = Ⓣ → 𝐈⦃f⦄) → drops b (f) (⋆) (⋆)
| drops_drop: ∀f,I,L1,L2. drops b f L1 L2 → drops b (⫯f) (L1.ⓘ{I}) L2
| drops_skip: ∀f,I1,I2,L1,L2.
- drops b f L1 L2 â\86\92 â¬\86*[f] I2 â\89¡ I1 →
+ drops b f L1 L2 â\86\92 â¬\86*[f] I2 â\89\98 I1 →
drops b (↑f) (L1.ⓘ{I1}) (L2.ⓘ{I2})
.
'RDropStar b f L1 L2 = (drops b f L1 L2).
definition d_liftable1: predicate (relation2 lenv term) ≝
- λR. â\88\80K,T. R K T â\86\92 â\88\80b,f,L. â¬\87*[b, f] L â\89¡ K →
- â\88\80U. â¬\86*[f] T â\89¡ U → R L U.
+ λR. â\88\80K,T. R K T â\86\92 â\88\80b,f,L. â¬\87*[b, f] L â\89\98 K →
+ â\88\80U. â¬\86*[f] T â\89\98 U → R L U.
definition d_liftable1_isuni: predicate (relation2 lenv term) ≝
- λR. â\88\80K,T. R K T â\86\92 â\88\80b,f,L. â¬\87*[b, f] L â\89¡ K → 𝐔⦃f⦄ →
- â\88\80U. â¬\86*[f] T â\89¡ U → R L U.
+ λR. â\88\80K,T. R K T â\86\92 â\88\80b,f,L. â¬\87*[b, f] L â\89\98 K → 𝐔⦃f⦄ →
+ â\88\80U. â¬\86*[f] T â\89\98 U → R L U.
definition d_deliftable1: predicate (relation2 lenv term) ≝
- λR. â\88\80L,U. R L U â\86\92 â\88\80b,f,K. â¬\87*[b, f] L â\89¡ K →
- â\88\80T. â¬\86*[f] T â\89¡ U → R K T.
+ λR. â\88\80L,U. R L U â\86\92 â\88\80b,f,K. â¬\87*[b, f] L â\89\98 K →
+ â\88\80T. â¬\86*[f] T â\89\98 U → R K T.
definition d_deliftable1_isuni: predicate (relation2 lenv term) ≝
- λR. â\88\80L,U. R L U â\86\92 â\88\80b,f,K. â¬\87*[b, f] L â\89¡ K → 𝐔⦃f⦄ →
- â\88\80T. â¬\86*[f] T â\89¡ U → R K T.
+ λR. â\88\80L,U. R L U â\86\92 â\88\80b,f,K. â¬\87*[b, f] L â\89\98 K → 𝐔⦃f⦄ →
+ â\88\80T. â¬\86*[f] T â\89\98 U → R K T.
definition d_liftable2_sn: ∀C:Type[0]. ∀S:rtmap → relation C.
predicate (lenv → relation C) ≝
- λC,S,R. â\88\80K,T1,T2. R K T1 T2 â\86\92 â\88\80b,f,L. â¬\87*[b, f] L â\89¡ K →
+ λC,S,R. â\88\80K,T1,T2. R K T1 T2 â\86\92 â\88\80b,f,L. â¬\87*[b, f] L â\89\98 K →
∀U1. S f T1 U1 →
∃∃U2. S f T2 U2 & R L U1 U2.
definition d_deliftable2_sn: ∀C:Type[0]. ∀S:rtmap → relation C.
predicate (lenv → relation C) ≝
- λC,S,R. â\88\80L,U1,U2. R L U1 U2 â\86\92 â\88\80b,f,K. â¬\87*[b, f] L â\89¡ K →
+ λC,S,R. â\88\80L,U1,U2. R L U1 U2 â\86\92 â\88\80b,f,K. â¬\87*[b, f] L â\89\98 K →
∀T1. S f T1 U1 →
∃∃T2. S f T2 U2 & R K T1 T2.
definition d_liftable2_bi: ∀C:Type[0]. ∀S:rtmap → relation C.
predicate (lenv → relation C) ≝
- λC,S,R. â\88\80K,T1,T2. R K T1 T2 â\86\92 â\88\80b,f,L. â¬\87*[b, f] L â\89¡ K →
+ λC,S,R. â\88\80K,T1,T2. R K T1 T2 â\86\92 â\88\80b,f,L. â¬\87*[b, f] L â\89\98 K →
∀U1. S f T1 U1 →
∀U2. S f T2 U2 → R L U1 U2.
definition d_deliftable2_bi: ∀C:Type[0]. ∀S:rtmap → relation C.
predicate (lenv → relation C) ≝
- λC,S,R. â\88\80L,U1,U2. R L U1 U2 â\86\92 â\88\80b,f,K. â¬\87*[b, f] L â\89¡ K →
+ λC,S,R. â\88\80L,U1,U2. R L U1 U2 â\86\92 â\88\80b,f,K. â¬\87*[b, f] L â\89\98 K →
∀T1. S f T1 U1 →
∀T2. S f T2 U2 → R K T1 T2.
definition co_dropable_sn: predicate (rtmap → relation lenv) ≝
- λR. â\88\80b,f,L1,K1. â¬\87*[b, f] L1 â\89¡ K1 → 𝐔⦃f⦄ →
- â\88\80f2,L2. R f2 L1 L2 â\86\92 â\88\80f1. f ~â\8a\9a f1 â\89¡ f2 →
- â\88\83â\88\83K2. R f1 K1 K2 & â¬\87*[b, f] L2 â\89¡ K2.
+ λR. â\88\80b,f,L1,K1. â¬\87*[b, f] L1 â\89\98 K1 → 𝐔⦃f⦄ →
+ â\88\80f2,L2. R f2 L1 L2 â\86\92 â\88\80f1. f ~â\8a\9a f1 â\89\98 f2 →
+ â\88\83â\88\83K2. R f1 K1 K2 & â¬\87*[b, f] L2 â\89\98 K2.
definition co_dropable_dx: predicate (rtmap → relation lenv) ≝
λR. ∀f2,L1,L2. R f2 L1 L2 →
- â\88\80b,f,K2. â¬\87*[b, f] L2 â\89¡ K2 → 𝐔⦃f⦄ →
- â\88\80f1. f ~â\8a\9a f1 â\89¡ f2 →
- â\88\83â\88\83K1. â¬\87*[b, f] L1 â\89¡ K1 & R f1 K1 K2.
+ â\88\80b,f,K2. â¬\87*[b, f] L2 â\89\98 K2 → 𝐔⦃f⦄ →
+ â\88\80f1. f ~â\8a\9a f1 â\89\98 f2 →
+ â\88\83â\88\83K1. â¬\87*[b, f] L1 â\89\98 K1 & R f1 K1 K2.
definition co_dedropable_sn: predicate (rtmap → relation lenv) ≝
- λR. â\88\80b,f,L1,K1. â¬\87*[b, f] L1 â\89¡ K1 → ∀f1,K2. R f1 K1 K2 →
- â\88\80f2. f ~â\8a\9a f1 â\89¡ f2 →
- â\88\83â\88\83L2. R f2 L1 L2 & â¬\87*[b, f] L2 â\89¡ K2 & L1 â\89\90[f] L2.
+ λR. â\88\80b,f,L1,K1. â¬\87*[b, f] L1 â\89\98 K1 → ∀f1,K2. R f1 K1 K2 →
+ â\88\80f2. f ~â\8a\9a f1 â\89\98 f2 →
+ â\88\83â\88\83L2. R f2 L1 L2 & â¬\87*[b, f] L2 â\89\98 K2 & L1 â\89¡[f] L2.
(* Basic properties *********************************************************)
-lemma drops_atom_F: â\88\80f. â¬\87*[â\92», f] â\8b\86 â\89¡ ⋆.
+lemma drops_atom_F: â\88\80f. â¬\87*[â\92», f] â\8b\86 â\89\98 ⋆.
#f @drops_atom #H destruct
qed.
-lemma drops_eq_repl_back: â\88\80b,L1,L2. eq_repl_back â\80¦ (λf. â¬\87*[b, f] L1 â\89¡ L2).
+lemma drops_eq_repl_back: â\88\80b,L1,L2. eq_repl_back â\80¦ (λf. â¬\87*[b, f] L1 â\89\98 L2).
#b #L1 #L2 #f1 #H elim H -f1 -L1 -L2
[ /4 width=3 by drops_atom, isid_eq_repl_back/
| #f1 #I #L1 #L2 #_ #IH #f2 #H elim (eq_inv_nx … H) -H
]
qed-.
-lemma drops_eq_repl_fwd: â\88\80b,L1,L2. eq_repl_fwd â\80¦ (λf. â¬\87*[b, f] L1 â\89¡ L2).
+lemma drops_eq_repl_fwd: â\88\80b,L1,L2. eq_repl_fwd â\80¦ (λf. â¬\87*[b, f] L1 â\89\98 L2).
#b #L1 #L2 @eq_repl_sym /2 width=3 by drops_eq_repl_back/ (**) (* full auto fails *)
qed-.
(* Basic_2A1: includes: drop_FT *)
-lemma drops_TF: â\88\80f,L1,L2. â¬\87*[â\93\89, f] L1 â\89¡ L2 â\86\92 â¬\87*[â\92», f] L1 â\89¡ L2.
+lemma drops_TF: â\88\80f,L1,L2. â¬\87*[â\93\89, f] L1 â\89\98 L2 â\86\92 â¬\87*[â\92», f] L1 â\89\98 L2.
#f #L1 #L2 #H elim H -f -L1 -L2
/3 width=1 by drops_atom, drops_drop, drops_skip/
qed.
(* Basic_2A1: includes: drop_gen *)
-lemma drops_gen: â\88\80b,f,L1,L2. â¬\87*[â\93\89, f] L1 â\89¡ L2 â\86\92 â¬\87*[b, f] L1 â\89¡ L2.
+lemma drops_gen: â\88\80b,f,L1,L2. â¬\87*[â\93\89, f] L1 â\89\98 L2 â\86\92 â¬\87*[b, f] L1 â\89\98 L2.
* /2 width=1 by drops_TF/
qed-.
(* Basic_2A1: includes: drop_T *)
-lemma drops_F: â\88\80b,f,L1,L2. â¬\87*[b, f] L1 â\89¡ L2 â\86\92 â¬\87*[â\92», f] L1 â\89¡ L2.
+lemma drops_F: â\88\80b,f,L1,L2. â¬\87*[b, f] L1 â\89\98 L2 â\86\92 â¬\87*[â\92», f] L1 â\89\98 L2.
* /2 width=1 by drops_TF/
qed-.
(* Basic inversion lemmas ***************************************************)
-fact drops_inv_atom1_aux: â\88\80b,f,X,Y. â¬\87*[b, f] X â\89¡ Y → X = ⋆ →
+fact drops_inv_atom1_aux: â\88\80b,f,X,Y. â¬\87*[b, f] X â\89\98 Y → X = ⋆ →
Y = ⋆ ∧ (b = Ⓣ → 𝐈⦃f⦄).
#b #f #X #Y * -f -X -Y
[ /3 width=1 by conj/
(* Basic_1: includes: drop_gen_sort *)
(* Basic_2A1: includes: drop_inv_atom1 *)
-lemma drops_inv_atom1: â\88\80b,f,Y. â¬\87*[b, f] â\8b\86 â\89¡ Y → Y = ⋆ ∧ (b = Ⓣ → 𝐈⦃f⦄).
+lemma drops_inv_atom1: â\88\80b,f,Y. â¬\87*[b, f] â\8b\86 â\89\98 Y → Y = ⋆ ∧ (b = Ⓣ → 𝐈⦃f⦄).
/2 width=3 by drops_inv_atom1_aux/ qed-.
-fact drops_inv_drop1_aux: â\88\80b,f,X,Y. â¬\87*[b, f] X â\89¡ Y → ∀g,I,K. X = K.ⓘ{I} → f = ⫯g →
- â¬\87*[b, g] K â\89¡ Y.
+fact drops_inv_drop1_aux: â\88\80b,f,X,Y. â¬\87*[b, f] X â\89\98 Y → ∀g,I,K. X = K.ⓘ{I} → f = ⫯g →
+ â¬\87*[b, g] K â\89\98 Y.
#b #f #X #Y * -f -X -Y
[ #f #Hf #g #J #K #H destruct
| #f #I #L1 #L2 #HL #g #J #K #H1 #H2 <(injective_next … H2) -g destruct //
(* Basic_1: includes: drop_gen_drop *)
(* Basic_2A1: includes: drop_inv_drop1_lt drop_inv_drop1 *)
-lemma drops_inv_drop1: â\88\80b,f,I,K,Y. â¬\87*[b, ⫯f] K.â\93\98{I} â\89¡ Y â\86\92 â¬\87*[b, f] K â\89¡ Y.
+lemma drops_inv_drop1: â\88\80b,f,I,K,Y. â¬\87*[b, ⫯f] K.â\93\98{I} â\89\98 Y â\86\92 â¬\87*[b, f] K â\89\98 Y.
/2 width=6 by drops_inv_drop1_aux/ qed-.
-fact drops_inv_skip1_aux: â\88\80b,f,X,Y. â¬\87*[b, f] X â\89¡ Y → ∀g,I1,K1. X = K1.ⓘ{I1} → f = ↑g →
- â\88\83â\88\83I2,K2. â¬\87*[b, g] K1 â\89¡ K2 & â¬\86*[g] I2 â\89¡ I1 & Y = K2.ⓘ{I2}.
+fact drops_inv_skip1_aux: â\88\80b,f,X,Y. â¬\87*[b, f] X â\89\98 Y → ∀g,I1,K1. X = K1.ⓘ{I1} → f = ↑g →
+ â\88\83â\88\83I2,K2. â¬\87*[b, g] K1 â\89\98 K2 & â¬\86*[g] I2 â\89\98 I1 & Y = K2.ⓘ{I2}.
#b #f #X #Y * -f -X -Y
[ #f #Hf #g #J1 #K1 #H destruct
| #f #I #L1 #L2 #_ #g #J1 #K1 #_ #H2 elim (discr_next_push … H2)
(* Basic_1: includes: drop_gen_skip_l *)
(* Basic_2A1: includes: drop_inv_skip1 *)
-lemma drops_inv_skip1: â\88\80b,f,I1,K1,Y. â¬\87*[b, â\86\91f] K1.â\93\98{I1} â\89¡ Y →
- â\88\83â\88\83I2,K2. â¬\87*[b, f] K1 â\89¡ K2 & â¬\86*[f] I2 â\89¡ I1 & Y = K2.ⓘ{I2}.
+lemma drops_inv_skip1: â\88\80b,f,I1,K1,Y. â¬\87*[b, â\86\91f] K1.â\93\98{I1} â\89\98 Y →
+ â\88\83â\88\83I2,K2. â¬\87*[b, f] K1 â\89\98 K2 & â¬\86*[f] I2 â\89\98 I1 & Y = K2.ⓘ{I2}.
/2 width=5 by drops_inv_skip1_aux/ qed-.
-fact drops_inv_skip2_aux: â\88\80b,f,X,Y. â¬\87*[b, f] X â\89¡ Y → ∀g,I2,K2. Y = K2.ⓘ{I2} → f = ↑g →
- â\88\83â\88\83I1,K1. â¬\87*[b, g] K1 â\89¡ K2 & â¬\86*[g] I2 â\89¡ I1 & X = K1.ⓘ{I1}.
+fact drops_inv_skip2_aux: â\88\80b,f,X,Y. â¬\87*[b, f] X â\89\98 Y → ∀g,I2,K2. Y = K2.ⓘ{I2} → f = ↑g →
+ â\88\83â\88\83I1,K1. â¬\87*[b, g] K1 â\89\98 K2 & â¬\86*[g] I2 â\89\98 I1 & X = K1.ⓘ{I1}.
#b #f #X #Y * -f -X -Y
[ #f #Hf #g #J2 #K2 #H destruct
| #f #I #L1 #L2 #_ #g #J2 #K2 #_ #H2 elim (discr_next_push … H2)
(* Basic_1: includes: drop_gen_skip_r *)
(* Basic_2A1: includes: drop_inv_skip2 *)
-lemma drops_inv_skip2: â\88\80b,f,I2,X,K2. â¬\87*[b, â\86\91f] X â\89¡ K2.ⓘ{I2} →
- â\88\83â\88\83I1,K1. â¬\87*[b, f] K1 â\89¡ K2 & â¬\86*[f] I2 â\89¡ I1 & X = K1.ⓘ{I1}.
+lemma drops_inv_skip2: â\88\80b,f,I2,X,K2. â¬\87*[b, â\86\91f] X â\89\98 K2.ⓘ{I2} →
+ â\88\83â\88\83I1,K1. â¬\87*[b, f] K1 â\89\98 K2 & â¬\86*[f] I2 â\89\98 I1 & X = K1.ⓘ{I1}.
/2 width=5 by drops_inv_skip2_aux/ qed-.
(* Basic forward lemmas *****************************************************)
-fact drops_fwd_drop2_aux: â\88\80b,f2,X,Y. â¬\87*[b, f2] X â\89¡ Y → ∀I,K. Y = K.ⓘ{I} →
- â\88\83â\88\83f1,f. ð\9d\90\88â¦\83f1â¦\84 & f2 â\8a\9a ⫯f1 â\89¡ f & â¬\87*[b, f] X â\89¡ K.
+fact drops_fwd_drop2_aux: â\88\80b,f2,X,Y. â¬\87*[b, f2] X â\89\98 Y → ∀I,K. Y = K.ⓘ{I} →
+ â\88\83â\88\83f1,f. ð\9d\90\88â¦\83f1â¦\84 & f2 â\8a\9a ⫯f1 â\89\98 f & â¬\87*[b, f] X â\89\98 K.
#b #f2 #X #Y #H elim H -f2 -X -Y
[ #f2 #Hf2 #J #K #H destruct
| #f2 #I #L1 #L2 #_ #IHL #J #K #H elim (IHL … H) -IHL
]
qed-.
-lemma drops_fwd_drop2: â\88\80b,f2,I,X,K. â¬\87*[b, f2] X â\89¡ K.ⓘ{I} →
- â\88\83â\88\83f1,f. ð\9d\90\88â¦\83f1â¦\84 & f2 â\8a\9a ⫯f1 â\89¡ f & â¬\87*[b, f] X â\89¡ K.
+lemma drops_fwd_drop2: â\88\80b,f2,I,X,K. â¬\87*[b, f2] X â\89\98 K.ⓘ{I} →
+ â\88\83â\88\83f1,f. ð\9d\90\88â¦\83f1â¦\84 & f2 â\8a\9a ⫯f1 â\89\98 f & â¬\87*[b, f] X â\89\98 K.
/2 width=4 by drops_fwd_drop2_aux/ qed-.
(* Properties with test for identity ****************************************)
(* Basic_2A1: includes: drop_refl *)
-lemma drops_refl: â\88\80b,L,f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] L â\89¡ L.
+lemma drops_refl: â\88\80b,L,f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] L â\89\98 L.
#b #L elim L -L /2 width=1 by drops_atom/
#L #I #IHL #f #Hf elim (isid_inv_gen … Hf) -Hf
/3 width=1 by drops_skip, liftsb_refl/
(* Basic_1: includes: drop_gen_refl *)
(* Basic_2A1: includes: drop_inv_O2 *)
-lemma drops_fwd_isid: â\88\80b,f,L1,L2. â¬\87*[b, f] L1 â\89¡ L2 → 𝐈⦃f⦄ → L1 = L2.
+lemma drops_fwd_isid: â\88\80b,f,L1,L2. â¬\87*[b, f] L1 â\89\98 L2 → 𝐈⦃f⦄ → L1 = L2.
#b #f #L1 #L2 #H elim H -f -L1 -L2 //
[ #f #I #L1 #L2 #_ #_ #H elim (isid_inv_next … H) //
| /5 width=5 by isid_inv_push, liftsb_fwd_isid, eq_f2, sym_eq/
]
qed-.
-lemma drops_after_fwd_drop2: â\88\80b,f2,I,X,K. â¬\87*[b, f2] X â\89¡ K.ⓘ{I} →
- â\88\80f1,f. ð\9d\90\88â¦\83f1â¦\84 â\86\92 f2 â\8a\9a ⫯f1 â\89¡ f â\86\92 â¬\87*[b, f] X â\89¡ K.
+lemma drops_after_fwd_drop2: â\88\80b,f2,I,X,K. â¬\87*[b, f2] X â\89\98 K.ⓘ{I} →
+ â\88\80f1,f. ð\9d\90\88â¦\83f1â¦\84 â\86\92 f2 â\8a\9a ⫯f1 â\89\98 f â\86\92 â¬\87*[b, f] X â\89\98 K.
#b #f2 #I #X #K #H #f1 #f #Hf1 #Hf elim (drops_fwd_drop2 … H) -H
#g1 #g #Hg1 #Hg #HK lapply (after_mono_eq … Hg … Hf ??) -Hg -Hf
/3 width=5 by drops_eq_repl_back, isid_inv_eq_repl, eq_next/
(* Forward lemmas with test for finite colength *****************************)
-lemma drops_fwd_isfin: â\88\80f,L1,L2. â¬\87*[â\93\89, f] L1 â\89¡ L2 → 𝐅⦃f⦄.
+lemma drops_fwd_isfin: â\88\80f,L1,L2. â¬\87*[â\93\89, f] L1 â\89\98 L2 → 𝐅⦃f⦄.
#f #L1 #L2 #H elim H -f -L1 -L2
/3 width=1 by isfin_next, isfin_push, isfin_isid/
qed-.
(* Properties with test for uniformity **************************************)
-lemma drops_isuni_ex: â\88\80f. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\88\80L. â\88\83K. â¬\87*[â\92», f] L â\89¡ K.
+lemma drops_isuni_ex: â\88\80f. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\88\80L. â\88\83K. â¬\87*[â\92», f] L â\89\98 K.
#f #H elim H -f /4 width=2 by drops_refl, drops_TF, ex_intro/
#f #_ #g #H #IH destruct * /2 width=2 by ex_intro/
#L #I elim (IH L) -IH /3 width=2 by drops_drop, ex_intro/
(* Inversion lemmas with test for uniformity ********************************)
-lemma drops_inv_isuni: â\88\80f,L1,L2. â¬\87*[â\93\89, f] L1 â\89¡ L2 → 𝐔⦃f⦄ →
+lemma drops_inv_isuni: â\88\80f,L1,L2. â¬\87*[â\93\89, f] L1 â\89\98 L2 → 𝐔⦃f⦄ →
(𝐈⦃f⦄ ∧ L1 = L2) ∨
- â\88\83â\88\83g,I,K. â¬\87*[â\93\89, g] K â\89¡ L2 & 𝐔⦃g⦄ & L1 = K.ⓘ{I} & f = ⫯g.
+ â\88\83â\88\83g,I,K. â¬\87*[â\93\89, g] K â\89\98 L2 & 𝐔⦃g⦄ & L1 = K.ⓘ{I} & f = ⫯g.
#f #L1 #L2 * -f -L1 -L2
[ /4 width=1 by or_introl, conj/
| /4 width=7 by isuni_inv_next, ex4_3_intro, or_intror/
qed-.
(* Basic_2A1: was: drop_inv_O1_pair1 *)
-lemma drops_inv_bind1_isuni: â\88\80b,f,I,K,L2. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] K.â\93\98{I} â\89¡ L2 →
+lemma drops_inv_bind1_isuni: â\88\80b,f,I,K,L2. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] K.â\93\98{I} â\89\98 L2 →
(𝐈⦃f⦄ ∧ L2 = K.ⓘ{I}) ∨
- â\88\83â\88\83g. ð\9d\90\94â¦\83gâ¦\84 & â¬\87*[b, g] K â\89¡ L2 & f = ⫯g.
+ â\88\83â\88\83g. ð\9d\90\94â¦\83gâ¦\84 & â¬\87*[b, g] K â\89\98 L2 & f = ⫯g.
#b #f #I #K #L2 #Hf #H elim (isuni_split … Hf) -Hf * #g #Hg #H0 destruct
[ lapply (drops_inv_skip1 … H) -H * #Z #Y #HY #HZ #H destruct
<(drops_fwd_isid … HY Hg) -Y >(liftsb_fwd_isid … HZ Hg) -Z
qed-.
(* Basic_2A1: was: drop_inv_O1_pair2 *)
-lemma drops_inv_bind2_isuni: â\88\80b,f,I,K,L1. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] L1 â\89¡ K.ⓘ{I} →
+lemma drops_inv_bind2_isuni: â\88\80b,f,I,K,L1. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] L1 â\89\98 K.ⓘ{I} →
(𝐈⦃f⦄ ∧ L1 = K.ⓘ{I}) ∨
- â\88\83â\88\83g,I1,K1. ð\9d\90\94â¦\83gâ¦\84 & â¬\87*[b, g] K1 â\89¡ K.ⓘ{I} & L1 = K1.ⓘ{I1} & f = ⫯g.
+ â\88\83â\88\83g,I1,K1. ð\9d\90\94â¦\83gâ¦\84 & â¬\87*[b, g] K1 â\89\98 K.ⓘ{I} & L1 = K1.ⓘ{I1} & f = ⫯g.
#b #f #I #K *
[ #Hf #H elim (drops_inv_atom1 … H) -H #H destruct
| #L1 #I1 #Hf #H elim (drops_inv_bind1_isuni … Hf H) -Hf -H *
]
qed-.
-lemma drops_inv_bind2_isuni_next: â\88\80b,f,I,K,L1. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, ⫯f] L1 â\89¡ K.ⓘ{I} →
- â\88\83â\88\83I1,K1. â¬\87*[b, f] K1 â\89¡ K.ⓘ{I} & L1 = K1.ⓘ{I1}.
+lemma drops_inv_bind2_isuni_next: â\88\80b,f,I,K,L1. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, ⫯f] L1 â\89\98 K.ⓘ{I} →
+ â\88\83â\88\83I1,K1. â¬\87*[b, f] K1 â\89\98 K.ⓘ{I} & L1 = K1.ⓘ{I1}.
#b #f #I #K #L1 #Hf #H elim (drops_inv_bind2_isuni … H) -H /2 width=3 by isuni_next/ -Hf *
[ #H elim (isid_inv_next … H) -H //
| /2 width=4 by ex2_2_intro/
]
qed-.
-fact drops_inv_TF_aux: â\88\80f,L1,L2. â¬\87*[â\92», f] L1 â\89¡ L2 → 𝐔⦃f⦄ →
- â\88\80I,K. L2 = K.â\93\98{I} â\86\92 â¬\87*[â\93\89, f] L1 â\89¡ K.ⓘ{I}.
+fact drops_inv_TF_aux: â\88\80f,L1,L2. â¬\87*[â\92», f] L1 â\89\98 L2 → 𝐔⦃f⦄ →
+ â\88\80I,K. L2 = K.â\93\98{I} â\86\92 â¬\87*[â\93\89, f] L1 â\89\98 K.ⓘ{I}.
#f #L1 #L2 #H elim H -f -L1 -L2
[ #f #_ #_ #J #K #H destruct
| #f #I #L1 #L2 #_ #IH #Hf #J #K #H destruct
qed-.
(* Basic_2A1: includes: drop_inv_FT *)
-lemma drops_inv_TF: â\88\80f,I,L,K. â¬\87*[â\92», f] L â\89¡ K.â\93\98{I} â\86\92 ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[â\93\89, f] L â\89¡ K.ⓘ{I}.
+lemma drops_inv_TF: â\88\80f,I,L,K. â¬\87*[â\92», f] L â\89\98 K.â\93\98{I} â\86\92 ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[â\93\89, f] L â\89\98 K.ⓘ{I}.
/2 width=3 by drops_inv_TF_aux/ qed-.
(* Basic_2A1: includes: drop_inv_gen *)
-lemma drops_inv_gen: â\88\80b,f,I,L,K. â¬\87*[b, f] L â\89¡ K.â\93\98{I} â\86\92 ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[â\93\89, f] L â\89¡ K.ⓘ{I}.
+lemma drops_inv_gen: â\88\80b,f,I,L,K. â¬\87*[b, f] L â\89\98 K.â\93\98{I} â\86\92 ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[â\93\89, f] L â\89\98 K.ⓘ{I}.
* /2 width=1 by drops_inv_TF/
qed-.
(* Basic_2A1: includes: drop_inv_T *)
-lemma drops_inv_F: â\88\80b,f,I,L,K. â¬\87*[â\92», f] L â\89¡ K.â\93\98{I} â\86\92 ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] L â\89¡ K.ⓘ{I}.
+lemma drops_inv_F: â\88\80b,f,I,L,K. â¬\87*[â\92», f] L â\89\98 K.â\93\98{I} â\86\92 ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] L â\89\98 K.ⓘ{I}.
* /2 width=1 by drops_inv_TF/
qed-.
(* Basic_1: was: drop_S *)
(* Basic_2A1: was: drop_fwd_drop2 *)
-lemma drops_isuni_fwd_drop2: â\88\80b,f,I,X,K. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] X â\89¡ K.â\93\98{I} â\86\92 â¬\87*[b, ⫯f] X â\89¡ K.
+lemma drops_isuni_fwd_drop2: â\88\80b,f,I,X,K. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] X â\89\98 K.â\93\98{I} â\86\92 â¬\87*[b, ⫯f] X â\89\98 K.
/3 width=7 by drops_after_fwd_drop2, after_isid_isuni/ qed-.
(* Inversion lemmas with uniform relocations ********************************)
-lemma drops_inv_atom2: â\88\80b,L,f. â¬\87*[b, f] L â\89¡ ⋆ →
- â\88\83â\88\83n,f1. â¬\87*[b, ð\9d\90\94â\9d´nâ\9dµ] L â\89¡ â\8b\86 & ð\9d\90\94â\9d´nâ\9dµ â\8a\9a f1 â\89¡ f.
+lemma drops_inv_atom2: â\88\80b,L,f. â¬\87*[b, f] L â\89\98 ⋆ →
+ â\88\83â\88\83n,f1. â¬\87*[b, ð\9d\90\94â\9d´nâ\9dµ] L â\89\98 â\8b\86 & ð\9d\90\94â\9d´nâ\9dµ â\8a\9a f1 â\89\98 f.
#b #L elim L -L
[ /3 width=4 by drops_atom, after_isid_sn, ex2_2_intro/
| #L #I #IH #f #H elim (pn_split f) * #g #H0 destruct
]
qed-.
-lemma drops_inv_succ: â\88\80L1,L2,i. â¬\87*[⫯i] L1 â\89¡ L2 →
- â\88\83â\88\83I,K. â¬\87*[i] K â\89¡ L2 & L1 = K.ⓘ{I}.
+lemma drops_inv_succ: â\88\80L1,L2,i. â¬\87*[⫯i] L1 â\89\98 L2 →
+ â\88\83â\88\83I,K. â¬\87*[i] K â\89\98 L2 & L1 = K.ⓘ{I}.
#L1 #L2 #i #H elim (drops_inv_isuni … H) -H // *
[ #H elim (isid_inv_next … H) -H //
| /2 width=4 by ex2_2_intro/
(* Properties with uniform relocations **************************************)
-lemma drops_F_uni: â\88\80L,i. â¬\87*[â\92», ð\9d\90\94â\9d´iâ\9dµ] L â\89¡ â\8b\86 â\88¨ â\88\83â\88\83I,K. â¬\87*[i] L â\89¡ K.ⓘ{I}.
+lemma drops_F_uni: â\88\80L,i. â¬\87*[â\92», ð\9d\90\94â\9d´iâ\9dµ] L â\89\98 â\8b\86 â\88¨ â\88\83â\88\83I,K. â¬\87*[i] L â\89\98 K.ⓘ{I}.
#L elim L -L /2 width=1 by or_introl/
#L #I #IH * /4 width=3 by drops_refl, ex1_2_intro, or_intror/
#i elim (IH i) -IH /3 width=1 by drops_drop, or_introl/
qed-.
(* Basic_2A1: includes: drop_split *)
-lemma drops_split_trans: â\88\80b,f,L1,L2. â¬\87*[b, f] L1 â\89¡ L2 â\86\92 â\88\80f1,f2. f1 â\8a\9a f2 â\89¡ f → 𝐔⦃f1⦄ →
- â\88\83â\88\83L. â¬\87*[b, f1] L1 â\89¡ L & â¬\87*[b, f2] L â\89¡ L2.
+lemma drops_split_trans: â\88\80b,f,L1,L2. â¬\87*[b, f] L1 â\89\98 L2 â\86\92 â\88\80f1,f2. f1 â\8a\9a f2 â\89\98 f → 𝐔⦃f1⦄ →
+ â\88\83â\88\83L. â¬\87*[b, f1] L1 â\89\98 L & â¬\87*[b, f2] L â\89\98 L2.
#b #f #L1 #L2 #H elim H -f -L1 -L2
[ #f #H0f #f1 #f2 #Hf #Hf1 @(ex2_intro … (⋆)) @drops_atom
#H lapply (H0f H) -b
]
qed-.
-lemma drops_split_div: â\88\80b,f1,L1,L. â¬\87*[b, f1] L1 â\89¡ L â\86\92 â\88\80f2,f. f1 â\8a\9a f2 â\89¡ f → 𝐔⦃f2⦄ →
- â\88\83â\88\83L2. â¬\87*[â\92», f2] L â\89¡ L2 & â¬\87*[â\92», f] L1 â\89¡ L2.
+lemma drops_split_div: â\88\80b,f1,L1,L. â¬\87*[b, f1] L1 â\89\98 L â\86\92 â\88\80f2,f. f1 â\8a\9a f2 â\89\98 f → 𝐔⦃f2⦄ →
+ â\88\83â\88\83L2. â¬\87*[â\92», f2] L â\89\98 L2 & â¬\87*[â\92», f] L1 â\89\98 L2.
#b #f1 #L1 #L #H elim H -f1 -L1 -L
[ #f1 #Hf1 #f2 #f #Hf #Hf2 @(ex2_intro … (⋆)) @drops_atom #H destruct
| #f1 #I #L1 #L #HL1 #IH #f2 #f #Hf #Hf2 elim (after_inv_nxx … Hf) -Hf [2,3: // ]
(* Properties with application **********************************************)
-lemma drops_tls_at: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 â\89¡ i2 →
- â\88\80b,L1,L2. â¬\87*[b,⫱*[i2]f] L1 â\89¡ L2 →
- â¬\87*[b,â\86\91⫱*[⫯i2]f] L1 â\89¡ L2.
+lemma drops_tls_at: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 â\89\98 i2 →
+ â\88\80b,L1,L2. â¬\87*[b,⫱*[i2]f] L1 â\89\98 L2 →
+ â¬\87*[b,â\86\91⫱*[⫯i2]f] L1 â\89\98 L2.
/3 width=3 by drops_eq_repl_fwd, at_inv_tls/ qed-.
-lemma drops_split_trans_bind2: â\88\80b,f,I,L,K0. â¬\87*[b, f] L â\89¡ K0.â\93\98{I} â\86\92 â\88\80i. @â¦\83O, fâ¦\84 â\89¡ i →
- â\88\83â\88\83J,K. â¬\87*[i]L â\89¡ K.â\93\98{J} & â¬\87*[b, ⫱*[⫯i]f] K â\89¡ K0 & â¬\86*[⫱*[⫯i]f] I â\89¡ J.
+lemma drops_split_trans_bind2: â\88\80b,f,I,L,K0. â¬\87*[b, f] L â\89\98 K0.â\93\98{I} â\86\92 â\88\80i. @â¦\83O, fâ¦\84 â\89\98 i →
+ â\88\83â\88\83J,K. â¬\87*[i]L â\89\98 K.â\93\98{J} & â¬\87*[b, ⫱*[⫯i]f] K â\89\98 K0 & â¬\86*[⫱*[⫯i]f] I â\89\98 J.
#b #f #I #L #K0 #H #i #Hf
elim (drops_split_trans … H) -H [ |5: @(after_uni_dx … Hf) |2,3: skip ] /2 width=1 by after_isid_dx/ #Y #HLY #H
lapply (drops_tls_at … Hf … H) -H #H
(* Main properties **********************************************************)
(* Basic_2A1: includes: drop_conf_ge drop_conf_be drop_conf_le *)
-theorem drops_conf: â\88\80b1,f1,L1,L. â¬\87*[b1, f1] L1 â\89¡ L →
- â\88\80b2,f,L2. â¬\87*[b2, f] L1 â\89¡ L2 →
- â\88\80f2. f1 â\8a\9a f2 â\89¡ f â\86\92 â¬\87*[b2, f2] L â\89¡ L2.
+theorem drops_conf: â\88\80b1,f1,L1,L. â¬\87*[b1, f1] L1 â\89\98 L →
+ â\88\80b2,f,L2. â¬\87*[b2, f] L1 â\89\98 L2 →
+ â\88\80f2. f1 â\8a\9a f2 â\89\98 f â\86\92 â¬\87*[b2, f2] L â\89\98 L2.
#b1 #f1 #L1 #L #H elim H -f1 -L1 -L
[ #f1 #_ #b2 #f #L2 #HL2 #f2 #Hf12 elim (drops_inv_atom1 … HL2) -b1 -HL2
#H #Hf destruct @drops_atom
(* Basic_2A1: includes: drop_trans_ge drop_trans_le drop_trans_ge_comm
drops_drop_trans
*)
-theorem drops_trans: â\88\80b1,f1,L1,L. â¬\87*[b1, f1] L1 â\89¡ L →
- â\88\80b2,f2,L2. â¬\87*[b2, f2] L â\89¡ L2 →
- â\88\80f. f1 â\8a\9a f2 â\89¡ f â\86\92 â¬\87*[b1â\88§b2, f] L1 â\89¡ L2.
+theorem drops_trans: â\88\80b1,f1,L1,L. â¬\87*[b1, f1] L1 â\89\98 L →
+ â\88\80b2,f2,L2. â¬\87*[b2, f2] L â\89\98 L2 →
+ â\88\80f. f1 â\8a\9a f2 â\89\98 f â\86\92 â¬\87*[b1â\88§b2, f] L1 â\89\98 L2.
#b1 #f1 #L1 #L #H elim H -f1 -L1 -L
[ #f1 #Hf1 #b2 #f2 #L2 #HL2 #f #Hf elim (drops_inv_atom1 … HL2) -HL2
#H #Hf2 destruct @drops_atom #H elim (andb_inv_true_dx … H) -H
]
qed-.
-theorem drops_conf_div: â\88\80f1,L,K. â¬\87*[â\93\89,f1] L â\89¡ K â\86\92 â\88\80f2. â¬\87*[â\93\89,f2] L â\89¡ K →
+theorem drops_conf_div: â\88\80f1,L,K. â¬\87*[â\93\89,f1] L â\89\98 K â\86\92 â\88\80f2. â¬\87*[â\93\89,f2] L â\89\98 K →
𝐔⦃f1⦄ → 𝐔⦃f2⦄ → f1 ≗ f2.
#f1 #L #K #H elim H -f1 -L -K
[ #f1 #Hf1 #f2 #Hf2 elim (drops_inv_atom1 … Hf2) -Hf2
(* Advanced properties ******************************************************)
(* Basic_2A1: includes: drop_mono *)
-lemma drops_mono: â\88\80b1,f,L,L1. â¬\87*[b1, f] L â\89¡ L1 →
- â\88\80b2,L2. â¬\87*[b2, f] L â\89¡ L2 → L1 = L2.
+lemma drops_mono: â\88\80b1,f,L,L1. â¬\87*[b1, f] L â\89\98 L1 →
+ â\88\80b2,L2. â¬\87*[b2, f] L â\89\98 L2 → L1 = L2.
#b1 #f #L #L1 lapply (after_isid_dx 𝐈𝐝 … f)
/3 width=8 by drops_conf, drops_fwd_isid/
qed-.
(* Basic_2A1: includes: drop_conf_lt *)
-lemma drops_conf_skip1: â\88\80b2,f,L,L2. â¬\87*[b2, f] L â\89¡ L2 →
- â\88\80b1,f1,I1,K1. â¬\87*[b1, f1] L â\89¡ K1.ⓘ{I1} →
- â\88\80f2. f1 â\8a\9a â\86\91f2 â\89¡ f →
+lemma drops_conf_skip1: â\88\80b2,f,L,L2. â¬\87*[b2, f] L â\89\98 L2 →
+ â\88\80b1,f1,I1,K1. â¬\87*[b1, f1] L â\89\98 K1.ⓘ{I1} →
+ â\88\80f2. f1 â\8a\9a â\86\91f2 â\89\98 f →
∃∃I2,K2. L2 = K2.ⓘ{I2} &
- â¬\87*[b2, f2] K1 â\89¡ K2 & â¬\86*[f2] I2 â\89¡ I1.
+ â¬\87*[b2, f2] K1 â\89\98 K2 & â¬\86*[f2] I2 â\89\98 I1.
#b2 #f #L #L2 #H2 #b1 #f1 #I1 #K1 #H1 #f2 #Hf lapply (drops_conf … H1 … H2 … Hf) -L -Hf
#H elim (drops_inv_skip1 … H) -H /2 width=5 by ex3_2_intro/
qed-.
(* Basic_2A1: includes: drop_trans_lt *)
-lemma drops_trans_skip2: â\88\80b1,f1,L1,L. â¬\87*[b1, f1] L1 â\89¡ L →
- â\88\80b2,f2,I2,K2. â¬\87*[b2, f2] L â\89¡ K2.ⓘ{I2} →
- â\88\80f. f1 â\8a\9a f2 â\89¡ ↑f →
+lemma drops_trans_skip2: â\88\80b1,f1,L1,L. â¬\87*[b1, f1] L1 â\89\98 L →
+ â\88\80b2,f2,I2,K2. â¬\87*[b2, f2] L â\89\98 K2.ⓘ{I2} →
+ â\88\80f. f1 â\8a\9a f2 â\89\98 ↑f →
∃∃I1,K1. L1 = K1.ⓘ{I1} &
- â¬\87*[b1â\88§b2, f] K1 â\89¡ K2 & â¬\86*[f] I2 â\89¡ I1.
+ â¬\87*[b1â\88§b2, f] K1 â\89\98 K2 & â¬\86*[f] I2 â\89\98 I1.
#b1 #f1 #L1 #L #H1 #b2 #f2 #I2 #K2 #H2 #f #Hf
lapply (drops_trans … H1 … H2 … Hf) -L -Hf
#H elim (drops_inv_skip2 … H) -H /2 width=5 by ex3_2_intro/
(* Basic_2A1: includes: drops_conf_div *)
lemma drops_conf_div_bind: ∀f1,f2,I1,I2,L,K.
- â¬\87*[â\93\89, f1] L â\89¡ K.â\93\98{I1} â\86\92 â¬\87*[â\93\89, f2] L â\89¡ K.ⓘ{I2} →
+ â¬\87*[â\93\89, f1] L â\89\98 K.â\93\98{I1} â\86\92 â¬\87*[â\93\89, f2] L â\89\98 K.ⓘ{I2} →
𝐔⦃f1⦄ → 𝐔⦃f2⦄ → f1 ≗ f2 ∧ I1 = I2.
#f1 #f2 #I1 #I2 #L #K #Hf1 #Hf2 #HU1 #HU2
lapply (drops_isuni_fwd_drop2 … Hf1) // #H1
destruct /2 width=1 by conj/
qed-.
-lemma drops_inv_uni: â\88\80L,i. â¬\87*[â\92», ð\9d\90\94â\9d´iâ\9dµ] L â\89¡ â\8b\86 â\86\92 â\88\80I,K. â¬\87*[i] L â\89¡ K.ⓘ{I} → ⊥.
+lemma drops_inv_uni: â\88\80L,i. â¬\87*[â\92», ð\9d\90\94â\9d´iâ\9dµ] L â\89\98 â\8b\86 â\86\92 â\88\80I,K. â¬\87*[i] L â\89\98 K.ⓘ{I} → ⊥.
#L #i #H1 #I #K #H2
lapply (drops_F … H2) -H2 #H2
lapply (drops_mono … H2 … H1) -L -i #H destruct
(* Forward lemmas with length for local environments ************************)
(* Basic_2A1: includes: drop_fwd_length_le4 *)
-lemma drops_fwd_length_le4: â\88\80b,f,L1,L2. â¬\87*[b, f] L1 â\89¡ L2 → |L2| ≤ |L1|.
+lemma drops_fwd_length_le4: â\88\80b,f,L1,L2. â¬\87*[b, f] L1 â\89\98 L2 → |L2| ≤ |L1|.
#b #f #L1 #L2 #H elim H -f -L1 -L2 /2 width=1 by le_S, le_S_S/
qed-.
(* Basic_2A1: includes: drop_fwd_length_eq1 *)
-theorem drops_fwd_length_eq1: â\88\80b1,b2,f,L1,K1. â¬\87*[b1, f] L1 â\89¡ K1 →
- â\88\80L2,K2. â¬\87*[b2, f] L2 â\89¡ K2 →
+theorem drops_fwd_length_eq1: â\88\80b1,b2,f,L1,K1. â¬\87*[b1, f] L1 â\89\98 K1 →
+ â\88\80L2,K2. â¬\87*[b2, f] L2 â\89\98 K2 →
|L1| = |L2| → |K1| = |K2|.
#b1 #b2 #f #L1 #K1 #HLK1 elim HLK1 -f -L1 -K1
[ #f #_ #L2 #K2 #HLK2 #H lapply (length_inv_zero_sn … H) -H
(* forward lemmas with finite colength assignment ***************************)
-lemma drops_fwd_fcla: â\88\80f,L1,L2. â¬\87*[â\93\89, f] L1 â\89¡ L2 →
- â\88\83â\88\83n. ð\9d\90\82â¦\83fâ¦\84 â\89¡ n & |L1| = |L2| + n.
+lemma drops_fwd_fcla: â\88\80f,L1,L2. â¬\87*[â\93\89, f] L1 â\89\98 L2 →
+ â\88\83â\88\83n. ð\9d\90\82â¦\83fâ¦\84 â\89\98 n & |L1| = |L2| + n.
#f #L1 #L2 #H elim H -f -L1 -L2
[ /4 width=3 by fcla_isid, ex2_intro/
| #f #I #L1 #L2 #_ * >length_bind /3 width=3 by fcla_next, ex2_intro, eq_f/
qed-.
(* Basic_2A1: includes: drop_fwd_length *)
-lemma drops_fcla_fwd: â\88\80f,L1,L2,n. â¬\87*[â\93\89, f] L1 â\89¡ L2 â\86\92 ð\9d\90\82â¦\83fâ¦\84 â\89¡ n →
+lemma drops_fcla_fwd: â\88\80f,L1,L2,n. â¬\87*[â\93\89, f] L1 â\89\98 L2 â\86\92 ð\9d\90\82â¦\83fâ¦\84 â\89\98 n →
|L1| = |L2| + n.
#f #l1 #l2 #n #Hf #Hn elim (drops_fwd_fcla … Hf) -Hf
#k #Hm #H <(fcla_mono … Hm … Hn) -f //
qed-.
-lemma drops_fwd_fcla_le2: â\88\80f,L1,L2. â¬\87*[â\93\89, f] L1 â\89¡ L2 →
- â\88\83â\88\83n. ð\9d\90\82â¦\83fâ¦\84 â\89¡ n & n ≤ |L1|.
+lemma drops_fwd_fcla_le2: â\88\80f,L1,L2. â¬\87*[â\93\89, f] L1 â\89\98 L2 →
+ â\88\83â\88\83n. ð\9d\90\82â¦\83fâ¦\84 â\89\98 n & n ≤ |L1|.
#f #L1 #L2 #H elim (drops_fwd_fcla … H) -H /2 width=3 by ex2_intro/
qed-.
(* Basic_2A1: includes: drop_fwd_length_le2 *)
-lemma drops_fcla_fwd_le2: â\88\80f,L1,L2,n. â¬\87*[â\93\89, f] L1 â\89¡ L2 â\86\92 ð\9d\90\82â¦\83fâ¦\84 â\89¡ n →
+lemma drops_fcla_fwd_le2: â\88\80f,L1,L2,n. â¬\87*[â\93\89, f] L1 â\89\98 L2 â\86\92 ð\9d\90\82â¦\83fâ¦\84 â\89\98 n →
n ≤ |L1|.
#f #L1 #L2 #n #H #Hn elim (drops_fwd_fcla_le2 … H) -H
#k #Hm #H <(fcla_mono … Hm … Hn) -f //
qed-.
-lemma drops_fwd_fcla_lt2: â\88\80f,L1,I2,K2. â¬\87*[â\93\89, f] L1 â\89¡ K2.ⓘ{I2} →
- â\88\83â\88\83n. ð\9d\90\82â¦\83fâ¦\84 â\89¡ n & n < |L1|.
+lemma drops_fwd_fcla_lt2: â\88\80f,L1,I2,K2. â¬\87*[â\93\89, f] L1 â\89\98 K2.ⓘ{I2} →
+ â\88\83â\88\83n. ð\9d\90\82â¦\83fâ¦\84 â\89\98 n & n < |L1|.
#f #L1 #I2 #K2 #H elim (drops_fwd_fcla … H) -H
#n #Hf #H >H -L1 /3 width=3 by le_S_S, ex2_intro/
qed-.
(* Basic_2A1: includes: drop_fwd_length_lt2 *)
lemma drops_fcla_fwd_lt2: ∀f,L1,I2,K2,n.
- â¬\87*[â\93\89, f] L1 â\89¡ K2.â\93\98{I2} â\86\92 ð\9d\90\82â¦\83fâ¦\84 â\89¡ n →
+ â¬\87*[â\93\89, f] L1 â\89\98 K2.â\93\98{I2} â\86\92 ð\9d\90\82â¦\83fâ¦\84 â\89\98 n →
n < |L1|.
#f #L1 #I2 #K2 #n #H #Hn elim (drops_fwd_fcla_lt2 … H) -H
#k #Hm #H <(fcla_mono … Hm … Hn) -f //
qed-.
(* Basic_2A1: includes: drop_fwd_length_lt4 *)
-lemma drops_fcla_fwd_lt4: â\88\80f,L1,L2,n. â¬\87*[â\93\89, f] L1 â\89¡ L2 â\86\92 ð\9d\90\82â¦\83fâ¦\84 â\89¡ n → 0 < n →
+lemma drops_fcla_fwd_lt4: â\88\80f,L1,L2,n. â¬\87*[â\93\89, f] L1 â\89\98 L2 â\86\92 ð\9d\90\82â¦\83fâ¦\84 â\89\98 n → 0 < n →
|L2| < |L1|.
#f #L1 #L2 #n #H #Hf #Hn lapply (drops_fcla_fwd … H Hf) -f
/2 width=1 by lt_minus_to_plus_r/ qed-.
(* Basic_2A1: includes: drop_inv_length_eq *)
-lemma drops_inv_length_eq: â\88\80f,L1,L2. â¬\87*[â\93\89, f] L1 â\89¡ L2 → |L1| = |L2| → 𝐈⦃f⦄.
+lemma drops_inv_length_eq: â\88\80f,L1,L2. â¬\87*[â\93\89, f] L1 â\89\98 L2 → |L1| = |L2| → 𝐈⦃f⦄.
#f #L1 #L2 #H #HL12 elim (drops_fwd_fcla … H) -H
#n #Hn <HL12 -L2 #H lapply (discr_plus_x_xy … H) -H
/2 width=3 by fcla_inv_xp/
qed-.
(* Basic_2A1: includes: drop_fwd_length_eq2 *)
-theorem drops_fwd_length_eq2: â\88\80f,L1,L2,K1,K2. â¬\87*[â\93\89, f] L1 â\89¡ K1 â\86\92 â¬\87*[â\93\89, f] L2 â\89¡ K2 →
+theorem drops_fwd_length_eq2: â\88\80f,L1,L2,K1,K2. â¬\87*[â\93\89, f] L1 â\89\98 K1 â\86\92 â¬\87*[â\93\89, f] L2 â\89\98 K2 →
|K1| = |K2| → |L1| = |L2|.
#f #L1 #L2 #K1 #K2 #HLK1 #HLK2 #HL12
elim (drops_fwd_fcla … HLK1) -HLK1 #n1 #Hn1 #H1 >H1 -L1
<(fcla_mono … Hn2 … Hn1) -f //
qed-.
-theorem drops_conf_div: â\88\80f1,f2,L1,L2. â¬\87*[â\93\89, f1] L1 â\89¡ L2 â\86\92 â¬\87*[â\93\89, f2] L1 â\89¡ L2 →
- â\88\83â\88\83n. ð\9d\90\82â¦\83f1â¦\84 â\89¡ n & ð\9d\90\82â¦\83f2â¦\84 â\89¡ n.
+theorem drops_conf_div: â\88\80f1,f2,L1,L2. â¬\87*[â\93\89, f1] L1 â\89\98 L2 â\86\92 â¬\87*[â\93\89, f2] L1 â\89\98 L2 →
+ â\88\83â\88\83n. ð\9d\90\82â¦\83f1â¦\84 â\89\98 n & ð\9d\90\82â¦\83f2â¦\84 â\89\98 n.
#f1 #f2 #L1 #L2 #H1 #H2
elim (drops_fwd_fcla … H1) -H1 #n1 #Hf1 #H1
elim (drops_fwd_fcla … H2) -H2 #n2 #Hf2 >H1 -L1 #H
qed-.
theorem drops_conf_div_fcla: ∀f1,f2,L1,L2,n1,n2.
- â¬\87*[â\93\89, f1] L1 â\89¡ L2 â\86\92 â¬\87*[â\93\89, f2] L1 â\89¡ L2 â\86\92 ð\9d\90\82â¦\83f1â¦\84 â\89¡ n1 â\86\92 ð\9d\90\82â¦\83f2â¦\84 â\89¡ n2 →
+ â¬\87*[â\93\89, f1] L1 â\89\98 L2 â\86\92 â¬\87*[â\93\89, f2] L1 â\89\98 L2 â\86\92 ð\9d\90\82â¦\83f1â¦\84 â\89\98 n1 â\86\92 ð\9d\90\82â¦\83f2â¦\84 â\89\98 n2 →
n1 = n2.
#f1 #f2 #L1 #L2 #n1 #n2 #Hf1 #Hf2 #Hn1 #Hn2
lapply (drops_fcla_fwd … Hf1 Hn1) -f1 #H1
lemma lexs_liftable_co_dedropable_bi: ∀RN,RP. d_liftable2_sn … liftsb RN → d_liftable2_sn … liftsb RP →
∀f2,L1,L2. L1 ⪤*[cfull, RP, f2] L2 → ∀f1,K1,K2. K1 ⪤*[RN, RP, f1] K2 →
- â\88\80b,f. â¬\87*[b, f] L1 â\89¡ K1 â\86\92 â¬\87*[b, f] L2 â\89¡ K2 →
- f ~â\8a\9a f1 â\89¡ f2 → L1 ⪤*[RN, RP, f2] L2.
+ â\88\80b,f. â¬\87*[b, f] L1 â\89\98 K1 â\86\92 â¬\87*[b, f] L2 â\89\98 K2 →
+ f ~â\8a\9a f1 â\89\98 f2 → L1 ⪤*[RN, RP, f2] L2.
#RN #RP #HRN #HRP #f2 #L1 #L2 #H elim H -f2 -L1 -L2 //
#g2 #I1 #I2 #L1 #L2 #HL12 #HI12 #IH #f1 #Y1 #Y2 #HK12 #b #f #HY1 #HY2 #H
[ elim (coafter_inv_xxn … H) [ |*: // ] -H #g #g1 #Hg2 #H1 #H2 destruct
]
qed-.
-fact lexs_dropable_dx_aux: â\88\80RN,RP,b,f,L2,K2. â¬\87*[b, f] L2 â\89¡ K2 → 𝐔⦃f⦄ →
- â\88\80f2,L1. L1 ⪤*[RN, RP, f2] L2 â\86\92 â\88\80f1. f ~â\8a\9a f1 â\89¡ f2 →
- â\88\83â\88\83K1. â¬\87*[b, f] L1 â\89¡ K1 & K1 ⪤*[RN, RP, f1] K2.
+fact lexs_dropable_dx_aux: â\88\80RN,RP,b,f,L2,K2. â¬\87*[b, f] L2 â\89\98 K2 → 𝐔⦃f⦄ →
+ â\88\80f2,L1. L1 ⪤*[RN, RP, f2] L2 â\86\92 â\88\80f1. f ~â\8a\9a f1 â\89\98 f2 →
+ â\88\83â\88\83K1. â¬\87*[b, f] L1 â\89\98 K1 & K1 ⪤*[RN, RP, f1] K2.
#RN #RP #b #f #L2 #K2 #H elim H -f -L2 -K2
[ #f #Hf #_ #f2 #X #H #f1 #Hf2 lapply (lexs_inv_atom2 … H) -H
#H destruct /4 width=3 by lexs_atom, drops_atom, ex2_intro/
(* Basic_2A1: includes: lpx_sn_drop_conf *) (**)
lemma lexs_drops_conf_next: ∀RN,RP.
∀f2,L1,L2. L1 ⪤*[RN, RP, f2] L2 →
- â\88\80b,f,I1,K1. â¬\87*[b, f] L1 â\89¡ K1.ⓘ{I1} → 𝐔⦃f⦄ →
- â\88\80f1. f ~â\8a\9a ⫯f1 â\89¡ f2 →
- â\88\83â\88\83I2,K2. â¬\87*[b, f] L2 â\89¡ K2.ⓘ{I2} & K1 ⪤*[RN, RP, f1] K2 & RN K1 I1 I2.
+ â\88\80b,f,I1,K1. â¬\87*[b, f] L1 â\89\98 K1.ⓘ{I1} → 𝐔⦃f⦄ →
+ â\88\80f1. f ~â\8a\9a ⫯f1 â\89\98 f2 →
+ â\88\83â\88\83I2,K2. â¬\87*[b, f] L2 â\89\98 K2.ⓘ{I2} & K1 ⪤*[RN, RP, f1] K2 & RN K1 I1 I2.
#RN #RP #f2 #L1 #L2 #HL12 #b #f #I1 #K1 #HLK1 #Hf #f1 #Hf2
elim (lexs_co_dropable_sn … HLK1 … Hf … HL12 … Hf2) -L1 -f2 -Hf
#X #HX #HLK2 elim (lexs_inv_next1 … HX) -HX
lemma lexs_drops_conf_push: ∀RN,RP.
∀f2,L1,L2. L1 ⪤*[RN, RP, f2] L2 →
- â\88\80b,f,I1,K1. â¬\87*[b, f] L1 â\89¡ K1.ⓘ{I1} → 𝐔⦃f⦄ →
- â\88\80f1. f ~â\8a\9a â\86\91f1 â\89¡ f2 →
- â\88\83â\88\83I2,K2. â¬\87*[b, f] L2 â\89¡ K2.ⓘ{I2} & K1 ⪤*[RN, RP, f1] K2 & RP K1 I1 I2.
+ â\88\80b,f,I1,K1. â¬\87*[b, f] L1 â\89\98 K1.ⓘ{I1} → 𝐔⦃f⦄ →
+ â\88\80f1. f ~â\8a\9a â\86\91f1 â\89\98 f2 →
+ â\88\83â\88\83I2,K2. â¬\87*[b, f] L2 â\89\98 K2.ⓘ{I2} & K1 ⪤*[RN, RP, f1] K2 & RP K1 I1 I2.
#RN #RP #f2 #L1 #L2 #HL12 #b #f #I1 #K1 #HLK1 #Hf #f1 #Hf2
elim (lexs_co_dropable_sn … HLK1 … Hf … HL12 … Hf2) -L1 -f2 -Hf
#X #HX #HLK2 elim (lexs_inv_push1 … HX) -HX
(* Basic_2A1: includes: lpx_sn_drop_trans *)
lemma lexs_drops_trans_next: ∀RN,RP,f2,L1,L2. L1 ⪤*[RN, RP, f2] L2 →
- â\88\80b,f,I2,K2. â¬\87*[b, f] L2 â\89¡ K2.ⓘ{I2} → 𝐔⦃f⦄ →
- â\88\80f1. f ~â\8a\9a ⫯f1 â\89¡ f2 →
- â\88\83â\88\83I1,K1. â¬\87*[b, f] L1 â\89¡ K1.ⓘ{I1} & K1 ⪤*[RN, RP, f1] K2 & RN K1 I1 I2.
+ â\88\80b,f,I2,K2. â¬\87*[b, f] L2 â\89\98 K2.ⓘ{I2} → 𝐔⦃f⦄ →
+ â\88\80f1. f ~â\8a\9a ⫯f1 â\89\98 f2 →
+ â\88\83â\88\83I1,K1. â¬\87*[b, f] L1 â\89\98 K1.ⓘ{I1} & K1 ⪤*[RN, RP, f1] K2 & RN K1 I1 I2.
#RN #RP #f2 #L1 #L2 #HL12 #b #f #I2 #K2 #HLK2 #Hf #f1 #Hf2
elim (lexs_co_dropable_dx … HL12 … HLK2 … Hf … Hf2) -L2 -f2 -Hf
#X #HLK1 #HX elim (lexs_inv_next2 … HX) -HX
qed-.
lemma lexs_drops_trans_push: ∀RN,RP,f2,L1,L2. L1 ⪤*[RN, RP, f2] L2 →
- â\88\80b,f,I2,K2. â¬\87*[b, f] L2 â\89¡ K2.ⓘ{I2} → 𝐔⦃f⦄ →
- â\88\80f1. f ~â\8a\9a â\86\91f1 â\89¡ f2 →
- â\88\83â\88\83I1,K1. â¬\87*[b, f] L1 â\89¡ K1.ⓘ{I1} & K1 ⪤*[RN, RP, f1] K2 & RP K1 I1 I2.
+ â\88\80b,f,I2,K2. â¬\87*[b, f] L2 â\89\98 K2.ⓘ{I2} → 𝐔⦃f⦄ →
+ â\88\80f1. f ~â\8a\9a â\86\91f1 â\89\98 f2 →
+ â\88\83â\88\83I1,K1. â¬\87*[b, f] L1 â\89\98 K1.ⓘ{I1} & K1 ⪤*[RN, RP, f1] K2 & RP K1 I1 I2.
#RN #RP #f2 #L1 #L2 #HL12 #b #f #I2 #K2 #HLK2 #Hf #f1 #Hf2
elim (lexs_co_dropable_dx … HL12 … HLK2 … Hf … Hf2) -L2 -f2 -Hf
#X #HLK1 #HX elim (lexs_inv_push2 … HX) -HX
lemma drops_lexs_trans_next: ∀RN,RP. (∀L. reflexive ? (RN L)) → (∀L. reflexive ? (RP L)) →
d_liftable2_sn … liftsb RN → d_liftable2_sn … liftsb RP →
∀f1,K1,K2. K1 ⪤*[RN, RP, f1] K2 →
- â\88\80b,f,I1,L1. â¬\87*[b, f] L1.â\93\98{I1} â\89¡ K1 →
- â\88\80f2. f ~â\8a\9a f1 â\89¡ ⫯f2 →
- â\88\83â\88\83I2,L2. â¬\87*[b, f] L2.â\93\98{I2} â\89¡ K2 & L1 ⪤*[RN, RP, f2] L2 & RN L1 I1 I2 & L1.â\93\98{I1} â\89\90[f] L2.ⓘ{I2}.
+ â\88\80b,f,I1,L1. â¬\87*[b, f] L1.â\93\98{I1} â\89\98 K1 →
+ â\88\80f2. f ~â\8a\9a f1 â\89\98 ⫯f2 →
+ â\88\83â\88\83I2,L2. â¬\87*[b, f] L2.â\93\98{I2} â\89\98 K2 & L1 ⪤*[RN, RP, f2] L2 & RN L1 I1 I2 & L1.â\93\98{I1} â\89¡[f] L2.ⓘ{I2}.
#RN #RP #H1RN #H1RP #H2RN #H2RP #f1 #K1 #K2 #HK12 #b #f #I1 #L1 #HLK1 #f2 #Hf2
elim (lexs_liftable_co_dedropable_sn … H1RN H1RP H2RN H2RP … HLK1 … HK12 … Hf2) -K1 -f1 -H1RN -H1RP -H2RN -H2RP
#X #HX #HLK2 #H1L12 elim (lexs_inv_next1 … HX) -HX
lemma drops_lexs_trans_push: ∀RN,RP. (∀L. reflexive ? (RN L)) → (∀L. reflexive ? (RP L)) →
d_liftable2_sn … liftsb RN → d_liftable2_sn … liftsb RP →
∀f1,K1,K2. K1 ⪤*[RN, RP, f1] K2 →
- â\88\80b,f,I1,L1. â¬\87*[b, f] L1.â\93\98{I1} â\89¡ K1 →
- â\88\80f2. f ~â\8a\9a f1 â\89¡ ↑f2 →
- â\88\83â\88\83I2,L2. â¬\87*[b, f] L2.â\93\98{I2} â\89¡ K2 & L1 ⪤*[RN, RP, f2] L2 & RP L1 I1 I2 & L1.â\93\98{I1} â\89\90[f] L2.ⓘ{I2}.
+ â\88\80b,f,I1,L1. â¬\87*[b, f] L1.â\93\98{I1} â\89\98 K1 →
+ â\88\80f2. f ~â\8a\9a f1 â\89\98 ↑f2 →
+ â\88\83â\88\83I2,L2. â¬\87*[b, f] L2.â\93\98{I2} â\89\98 K2 & L1 ⪤*[RN, RP, f2] L2 & RP L1 I1 I2 & L1.â\93\98{I1} â\89¡[f] L2.ⓘ{I2}.
#RN #RP #H1RN #H1RP #H2RN #H2RP #f1 #K1 #K2 #HK12 #b #f #I1 #L1 #HLK1 #f2 #Hf2
elim (lexs_liftable_co_dedropable_sn … H1RN H1RP H2RN H2RP … HLK1 … HK12 … Hf2) -K1 -f1 -H1RN -H1RP -H2RN -H2RP
#X #HX #HLK2 #H1L12 elim (lexs_inv_push1 … HX) -HX
#I2 #L2 #H2L12 #HI12 #H destruct /2 width=6 by ex4_2_intro/
qed-.
-lemma drops_atom2_lexs_conf: â\88\80RN,RP,b,f1,L1. â¬\87*[b, f1] L1 â\89¡ ⋆ → 𝐔⦃f1⦄ →
+lemma drops_atom2_lexs_conf: â\88\80RN,RP,b,f1,L1. â¬\87*[b, f1] L1 â\89\98 ⋆ → 𝐔⦃f1⦄ →
∀f,L2. L1 ⪤*[RN, RP, f] L2 →
- â\88\80f2. f1 ~â\8a\9a f2 â\89¡f â\86\92 â¬\87*[b, f1] L2 â\89¡ ⋆.
+ â\88\80f2. f1 ~â\8a\9a f2 â\89\98f â\86\92 â¬\87*[b, f1] L2 â\89\98 ⋆.
#RN #RP #b #f1 #L1 #H1 #Hf1 #f #L2 #H2 #f2 #H3
elim (lexs_co_dropable_sn … H1 … H2 … H3) // -H1 -H2 -H3 -Hf1
#L #H #HL2 lapply (lexs_inv_atom1 … H) -H //
@lexs_co_dropable_dx qed-.
(* Basic_2A1: includes: lreq_drop_trans_be *)
-lemma lreq_drops_trans_next: â\88\80f2,L1,L2. L1 â\89\90[f2] L2 →
- â\88\80b,f,I,K2. â¬\87*[b, f] L2 â\89¡ K2.ⓘ{I} → 𝐔⦃f⦄ →
- â\88\80f1. f ~â\8a\9a ⫯f1 â\89¡ f2 →
- â\88\83â\88\83K1. â¬\87*[b, f] L1 â\89¡ K1.â\93\98{I} & K1 â\89\90[f1] K2.
+lemma lreq_drops_trans_next: â\88\80f2,L1,L2. L1 â\89¡[f2] L2 →
+ â\88\80b,f,I,K2. â¬\87*[b, f] L2 â\89\98 K2.ⓘ{I} → 𝐔⦃f⦄ →
+ â\88\80f1. f ~â\8a\9a ⫯f1 â\89\98 f2 →
+ â\88\83â\88\83K1. â¬\87*[b, f] L1 â\89\98 K1.â\93\98{I} & K1 â\89¡[f1] K2.
#f2 #L1 #L2 #HL12 #b #f #I2 #K2 #HLK2 #Hf #f1 #Hf2
elim (lexs_drops_trans_next … HL12 … HLK2 Hf … Hf2) -f2 -L2 -Hf
#I1 #K1 #HLK1 #HK12 #H <(ceq_ext_inv_eq … H) -I2
qed-.
(* Basic_2A1: includes: lreq_drop_conf_be *)
-lemma lreq_drops_conf_next: â\88\80f2,L1,L2. L1 â\89\90[f2] L2 →
- â\88\80b,f,I,K1. â¬\87*[b, f] L1 â\89¡ K1.ⓘ{I} → 𝐔⦃f⦄ →
- â\88\80f1. f ~â\8a\9a ⫯f1 â\89¡ f2 →
- â\88\83â\88\83K2. â¬\87*[b, f] L2 â\89¡ K2.â\93\98{I} & K1 â\89\90[f1] K2.
+lemma lreq_drops_conf_next: â\88\80f2,L1,L2. L1 â\89¡[f2] L2 →
+ â\88\80b,f,I,K1. â¬\87*[b, f] L1 â\89\98 K1.ⓘ{I} → 𝐔⦃f⦄ →
+ â\88\80f1. f ~â\8a\9a ⫯f1 â\89\98 f2 →
+ â\88\83â\88\83K2. â¬\87*[b, f] L2 â\89\98 K2.â\93\98{I} & K1 â\89¡[f1] K2.
#f2 #L1 #L2 #HL12 #b #f #I1 #K1 #HLK1 #Hf #f1 #Hf2
elim (lreq_drops_trans_next … (lreq_sym … HL12) … HLK1 … Hf2) // -f2 -L1 -Hf
/3 width=3 by lreq_sym, ex2_intro/
qed-.
-lemma drops_lreq_trans_next: â\88\80f1,K1,K2. K1 â\89\90[f1] K2 →
- â\88\80b,f,I,L1. â¬\87*[b, f] L1.â\93\98{I} â\89¡ K1 →
- â\88\80f2. f ~â\8a\9a f1 â\89¡ ⫯f2 →
- â\88\83â\88\83L2. â¬\87*[b, f] L2.â\93\98{I} â\89¡ K2 & L1 â\89\90[f2] L2 & L1.â\93\98{I} â\89\90[f] L2.ⓘ{I}.
+lemma drops_lreq_trans_next: â\88\80f1,K1,K2. K1 â\89¡[f1] K2 →
+ â\88\80b,f,I,L1. â¬\87*[b, f] L1.â\93\98{I} â\89\98 K1 →
+ â\88\80f2. f ~â\8a\9a f1 â\89\98 ⫯f2 →
+ â\88\83â\88\83L2. â¬\87*[b, f] L2.â\93\98{I} â\89\98 K2 & L1 â\89¡[f2] L2 & L1.â\93\98{I} â\89¡[f] L2.ⓘ{I}.
#f1 #K1 #K2 #HK12 #b #f #I1 #L1 #HLK1 #f2 #Hf2
elim (drops_lexs_trans_next … HK12 … HLK1 … Hf2) -f1 -K1
/2 width=6 by cfull_lift_sn, ceq_lift_sn/
(* Properties with reflexive and transitive closure *************************)
(* Basic_2A1: was: d_liftable_LTC *)
-lemma d2_liftable_sn_LTC: ∀C,S,R. d_liftable2_sn C S R → d_liftable2_sn C S (LTC … R).
+lemma d2_liftable_sn_CTC: ∀C,S,R. d_liftable2_sn C S R → d_liftable2_sn C S (CTC … R).
#C #S #R #HR #K #T1 #T2 #H elim H -T2
[ #T2 #HT12 #b #f #L #HLK #U1 #HTU1
elim (HR … HT12 … HLK … HTU1) /3 width=3 by inj, ex2_intro/
qed-.
(* Basic_2A1: was: d_deliftable_sn_LTC *)
-lemma d2_deliftable_sn_LTC: ∀C,S,R. d_deliftable2_sn C S R → d_deliftable2_sn C S (LTC … R).
+lemma d2_deliftable_sn_CTC: ∀C,S,R. d_deliftable2_sn C S R → d_deliftable2_sn C S (CTC … R).
#C #S #R #HR #L #U1 #U2 #H elim H -U2
[ #U2 #HU12 #b #f #K #HLK #T1 #HTU1
elim (HR … HU12 … HLK … HTU1) -HR -L -U1 /3 width=3 by inj, ex2_intro/
]
qed-.
-lemma co_dropable_sn_TC: ∀R. co_dropable_sn R → co_dropable_sn (LTC … R).
+lemma co_dropable_sn_TC: ∀R. co_dropable_sn R → co_dropable_sn (CTC … R).
#R #HR #b #f #L1 #K1 #HLK1 #Hf #f2 #L2 #H elim H -L2
[ #L2 #HL12 #f1 #H elim (HR … HLK1 … Hf … HL12 … H) -HR -Hf -f2 -L1
/3 width=3 by inj, ex2_intro/
]
qed-.
-lemma co_dropable_dx_TC: ∀R. co_dropable_dx R → co_dropable_dx (LTC … R).
+lemma co_dropable_dx_TC: ∀R. co_dropable_dx R → co_dropable_dx (CTC … R).
#R #HR #f2 #L1 #L2 #H elim H -L2
[ #L2 #HL12 #b #f #K2 #HLK2 #Hf #f1 #Hf2 elim (HR … HL12 … HLK2 … Hf … Hf2) -HR -Hf -f2 -L2
/3 width=3 by inj, ex2_intro/
]
qed-.
-lemma co_dedropable_sn_TC: ∀R. co_dedropable_sn R → co_dedropable_sn (LTC … R).
+lemma co_dedropable_sn_TC: ∀R. co_dedropable_sn R → co_dedropable_sn (CTC … R).
#R #HR #b #f #L1 #K1 #HLK1 #f1 #K2 #H elim H -K2
[ #K2 #HK12 #f2 #Hf elim (HR … HLK1 … HK12 … Hf) -HR -f1 -K1
/3 width=4 by inj, ex3_intro/
definition d_liftable1_all: predicate (relation2 lenv term) ≝
λR. ∀K,Ts. all … (R K) Ts →
- â\88\80b,f,L. â¬\87*[b, f] L â\89¡ K →
- â\88\80Us. â¬\86*[f] Ts â\89¡ Us → all … (R L) Us.
+ â\88\80b,f,L. â¬\87*[b, f] L â\89\98 K →
+ â\88\80Us. â¬\86*[f] Ts â\89\98 Us → all … (R L) Us.
(* Properties with generic relocation for term vectors **********************)
(* Forward lemmas with weight for local environments ************************)
(* Basic_2A1: includes: drop_fwd_lw *)
-lemma drops_fwd_lw: â\88\80b,f,L1,L2. â¬\87*[b, f] L1 â\89¡ L2 → ♯{L2} ≤ ♯{L1}.
+lemma drops_fwd_lw: â\88\80b,f,L1,L2. â¬\87*[b, f] L1 â\89\98 L2 → ♯{L2} ≤ ♯{L1}.
#b #f #L1 #L2 #H elim H -f -L1 -L2 //
[ /2 width=3 by transitive_le/
| #f #I1 #I2 #L1 #L2 #_ #HI21 #IHL12 normalize
qed-.
(* Basic_2A1: includes: drop_fwd_lw_lt *)
-lemma drops_fwd_lw_lt: â\88\80f,L1,L2. â¬\87*[â\93\89, f] L1 â\89¡ L2 →
+lemma drops_fwd_lw_lt: â\88\80f,L1,L2. â¬\87*[â\93\89, f] L1 â\89\98 L2 →
(𝐈⦃f⦄ → ⊥) → ♯{L2} < ♯{L1}.
#f #L1 #L2 #H elim H -f -L1 -L2
[ #f #Hf #Hnf elim Hnf -Hnf /2 width=1 by/
(* Forward lemmas with restricted weight for closures ***********************)
(* Basic_2A1: includes: drop_fwd_rfw *)
-lemma drops_bind2_fwd_rfw: â\88\80b,f,I,L,K,V. â¬\87*[b, f] L â\89¡ K.ⓑ{I}V → ∀T. ♯{K, V} < ♯{L, T}.
+lemma drops_bind2_fwd_rfw: â\88\80b,f,I,L,K,V. â¬\87*[b, f] L â\89\98 K.ⓑ{I}V → ∀T. ♯{K, V} < ♯{L, T}.
#b #f #I #L #K #V #HLK lapply (drops_fwd_lw … HLK) -HLK
normalize in ⊢ (%→?→?%%); /3 width=3 by le_to_lt_to_lt, monotonic_lt_plus_r/
qed-.
(* Advanced inversion lemma *************************************************)
-lemma drops_inv_x_bind_xy: â\88\80b,f,I,L. â¬\87*[b, f] L â\89¡ L.ⓘ{I} → ⊥.
+lemma drops_inv_x_bind_xy: â\88\80b,f,I,L. â¬\87*[b, f] L â\89\98 L.ⓘ{I} → ⊥.
#b #f #I #L #H lapply (drops_fwd_lw … H) -b -f
/2 width=4 by lt_le_false/ (**) (* full auto is a bit slow: 19s *)
qed-.
(* Inversion lemmas with transitive closure *********************************)
(* Basic_2A1: was: lpx_sn_LTC_TC_lpx_sn *)
-lemma lex_inv_ltc: ∀R. c_reflexive … R →
- lex (LTC … R) ⊆ TC … (lex R).
+lemma lex_inv_CTC: ∀R. c_reflexive … R →
+ lex (CTC … R) ⊆ TC … (lex R).
#R #HR #L1 #L2 *
/5 width=11 by lexs_inv_tc_dx, lexs_co, ext2_inv_tc, ext2_refl, monotonic_TC, ex2_intro/
qed-.
(* Properties with transitive closure ***************************************)
(* Basic_2A1: was: TC_lpx_sn_inv_lpx_sn_LTC *)
-lemma lex_ltc: ∀R. s_rs_transitive … R (λ_. lex R) →
- TC … (lex R) ⊆ lex (LTC … R).
+lemma lex_CTC: ∀R. s_rs_transitive … R (λ_. lex R) →
+ TC … (lex R) ⊆ lex (CTC … R).
#R #HR #L1 #L2 #HL12
lapply (monotonic_TC … (lexs cfull (cext2 R) 𝐈𝐝) … HL12) -HL12
[ #L1 #L2 * /3 width=3 by lexs_eq_repl_fwd, eq_id_inv_isid/
]
qed-.
-lemma lex_ltc_step_dx: ∀R. c_reflexive … R → s_rs_transitive … R (λ_. lex R) →
- ∀L1,L. lex (LTC … R) L1 L →
- ∀L2. lex R L L2 → lex (LTC … R) L1 L2.
-/4 width=3 by lex_ltc, lex_inv_ltc, step/ qed-.
+lemma lex_CTC_step_dx: ∀R. c_reflexive … R → s_rs_transitive … R (λ_. lex R) →
+ ∀L1,L. lex (CTC … R) L1 L →
+ ∀L2. lex R L L2 → lex (CTC … R) L1 L2.
+/4 width=3 by lex_CTC, lex_inv_CTC, step/ qed-.
-lemma lex_ltc_step_sn: ∀R. c_reflexive … R → s_rs_transitive … R (λ_. lex R) →
+lemma lex_CTC_step_sn: ∀R. c_reflexive … R → s_rs_transitive … R (λ_. lex R) →
∀L1,L. lex R L1 L →
- ∀L2. lex (LTC … R) L L2 → lex (LTC … R) L1 L2.
-/4 width=3 by lex_ltc, lex_inv_ltc, TC_strap/ qed-.
+ ∀L2. lex (CTC … R) L L2 → lex (CTC … R) L1 L2.
+/4 width=3 by lex_CTC, lex_inv_CTC, TC_strap/ qed-.
theorem lexs_trans_gen (RN1) (RP1) (RN2) (RP2) (RN) (RP):
∀L1,f.
- (â\88\80g,I,K,n. â¬\87*[n] L1 â\89¡ K.ⓘ{I} → ⫯g = ⫱*[n] f → lexs_transitive RN1 RN2 RN RN1 RP1 g K I) →
- (â\88\80g,I,K,n. â¬\87*[n] L1 â\89¡ K.ⓘ{I} → ↑g = ⫱*[n] f → lexs_transitive RP1 RP2 RP RN1 RP1 g K I) →
+ (â\88\80g,I,K,n. â¬\87*[n] L1 â\89\98 K.ⓘ{I} → ⫯g = ⫱*[n] f → lexs_transitive RN1 RN2 RN RN1 RP1 g K I) →
+ (â\88\80g,I,K,n. â¬\87*[n] L1 â\89\98 K.ⓘ{I} → ↑g = ⫱*[n] f → lexs_transitive RP1 RP2 RP RN1 RP1 g K I) →
∀L0. L1 ⪤*[RN1, RP1, f] L0 →
∀L2. L0 ⪤*[RN2, RP2, f] L2 →
L1 ⪤*[RN, RP, f] L2.
(* Basic_2A1: includes: lpx_sn_conf *)
theorem lexs_conf (RN1) (RP1) (RN2) (RP2):
∀L,f.
- (â\88\80g,I,K,n. â¬\87*[n] L â\89¡ K.ⓘ{I} → ⫯g = ⫱*[n] f → R_pw_confluent2_lexs RN1 RN2 RN1 RP1 RN2 RP2 g K I) →
- (â\88\80g,I,K,n. â¬\87*[n] L â\89¡ K.ⓘ{I} → ↑g = ⫱*[n] f → R_pw_confluent2_lexs RP1 RP2 RN1 RP1 RN2 RP2 g K I) →
+ (â\88\80g,I,K,n. â¬\87*[n] L â\89\98 K.ⓘ{I} → ⫯g = ⫱*[n] f → R_pw_confluent2_lexs RN1 RN2 RN1 RP1 RN2 RP2 g K I) →
+ (â\88\80g,I,K,n. â¬\87*[n] L â\89\98 K.ⓘ{I} → ↑g = ⫱*[n] f → R_pw_confluent2_lexs RP1 RP2 RN1 RP1 RN2 RP2 g K I) →
pw_confluent2 … (lexs RN1 RP1 f) (lexs RN2 RP2 f) L.
#RN1 #RP1 #RN2 #RP2 #L elim L -L
[ #f #_ #_ #L1 #H1 #L2 #H2 >(lexs_inv_atom1 … H1) >(lexs_inv_atom1 … H2) -H2 -H1
lemma lexs_meet: ∀RN,RP,L1,L2.
∀f1. L1 ⪤*[RN, RP, f1] L2 →
∀f2. L1 ⪤*[RN, RP, f2] L2 →
- â\88\80f. f1 â\8b\92 f2 â\89¡ f → L1 ⪤*[RN, RP, f] L2.
+ â\88\80f. f1 â\8b\92 f2 â\89\98 f → L1 ⪤*[RN, RP, f] L2.
#RN #RP #L1 #L2 #f1 #H elim H -f1 -L1 -L2 //
#f1 #I1 #I2 #L1 #L2 #_ #HI12 #IH #f2 #H #f #Hf
elim (pn_split f2) * #g2 #H2 destruct
lemma lexs_join: ∀RN,RP,L1,L2.
∀f1. L1 ⪤*[RN, RP, f1] L2 →
∀f2. L1 ⪤*[RN, RP, f2] L2 →
- â\88\80f. f1 â\8b\93 f2 â\89¡ f → L1 ⪤*[RN, RP, f] L2.
+ â\88\80f. f1 â\8b\93 f2 â\89\98 f → L1 ⪤*[RN, RP, f] L2.
#RN #RP #L1 #L2 #f1 #H elim H -f1 -L1 -L2 //
#f1 #I1 #I2 #L1 #L2 #_ #HI12 #IH #f2 #H #f #Hf
elim (pn_split f2) * #g2 #H2 destruct
qed.
lemma lexs_tc_next_dx: ∀RN,RP. c_reflexive … RN → c_reflexive … RP →
- ∀f,I1,I2,L1. (LTC … RN) L1 I1 I2 → ∀L2. L1 ⪤*[RN, RP, f] L2 →
+ ∀f,I1,I2,L1. (CTC … RN) L1 I1 I2 → ∀L2. L1 ⪤*[RN, RP, f] L2 →
TC … (lexs RN RP (⫯f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}).
#RN #RP #HRN #HRP #f #I1 #I2 #L1 #H elim H -I2
/4 width=5 by lexs_refl, lexs_next, step, inj/
qed.
lemma lexs_tc_push_dx: ∀RN,RP. c_reflexive … RN → c_reflexive … RP →
- ∀f,I1,I2,L1. (LTC … RP) L1 I1 I2 → ∀L2. L1 ⪤*[RN, RP, f] L2 →
+ ∀f,I1,I2,L1. (CTC … RP) L1 I1 I2 → ∀L2. L1 ⪤*[RN, RP, f] L2 →
TC … (lexs RN RP (↑f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}).
#RN #RP #HRN #HRP #f #I1 #I2 #L1 #H elim H -I2
/4 width=5 by lexs_refl, lexs_push, step, inj/
qed.
-lemma lexs_tc_inj_sn: ∀RN,RP,f,L1,L2. L1 ⪤*[RN, RP, f] L2 → L1 ⪤*[LTC … RN, RP, f] L2.
+lemma lexs_tc_inj_sn: ∀RN,RP,f,L1,L2. L1 ⪤*[RN, RP, f] L2 → L1 ⪤*[CTC … RN, RP, f] L2.
#RN #RP #f #L1 #L2 #H elim H -f -L1 -L2
/3 width=1 by lexs_push, lexs_next, inj/
qed.
-lemma lexs_tc_inj_dx: ∀RN,RP,f,L1,L2. L1 ⪤*[RN, RP, f] L2 → L1 ⪤*[RN, LTC … RP, f] L2.
+lemma lexs_tc_inj_dx: ∀RN,RP,f,L1,L2. L1 ⪤*[RN, RP, f] L2 → L1 ⪤*[RN, CTC … RP, f] L2.
#RN #RP #f #L1 #L2 #H elim H -f -L1 -L2
/3 width=1 by lexs_push, lexs_next, inj/
qed.
(* Main properties with transitive closure **********************************)
theorem lexs_tc_next: ∀RN,RP. c_reflexive … RN → c_reflexive … RP →
- ∀f,I1,I2,L1. (LTC … RN) L1 I1 I2 → ∀L2. TC … (lexs RN RP f) L1 L2 →
+ ∀f,I1,I2,L1. (CTC … RN) L1 I1 I2 → ∀L2. TC … (lexs RN RP f) L1 L2 →
TC … (lexs RN RP (⫯f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}).
#RN #RP #HRN #HRP #f #I1 #I2 #L1 #H elim H -I2
/4 width=5 by lexs_tc_next_sn, lexs_tc_refl, trans_TC/
qed.
theorem lexs_tc_push: ∀RN,RP. c_reflexive … RN → c_reflexive … RP →
- ∀f,I1,I2,L1. (LTC … RP) L1 I1 I2 → ∀L2. TC … (lexs RN RP f) L1 L2 →
+ ∀f,I1,I2,L1. (CTC … RP) L1 I1 I2 → ∀L2. TC … (lexs RN RP f) L1 L2 →
TC … (lexs RN RP (↑f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}).
#RN #RP #HRN #HRP #f #I1 #I2 #L1 #H elim H -I2
/4 width=5 by lexs_tc_push_sn, lexs_tc_refl, trans_TC/
(* Basic_2A1: uses: TC_lpx_sn_ind *)
theorem lexs_tc_step_dx: ∀RN,RP. s_rs_transitive_isid RN RP →
∀f,L1,L. L1 ⪤*[RN, RP, f] L → 𝐈⦃f⦄ →
- ∀L2. L ⪤*[RN, LTC … RP, f] L2 → L1⪤* [RN, LTC … RP, f] L2.
+ ∀L2. L ⪤*[RN, CTC … RP, f] L2 → L1⪤* [RN, CTC … RP, f] L2.
#RN #RP #HRP #f #L1 #L #H elim H -f -L1 -L
[ #f #_ #Y #H -HRP >(lexs_inv_atom1 … H) -Y // ]
#f #I1 #I #L1 #L #HL1 #HI1 #IH #Hf #Y #H
(* Advanced properties ******************************************************)
lemma lexs_tc_dx: ∀RN,RP. s_rs_transitive_isid RN RP →
- ∀f. 𝐈⦃f⦄ → ∀L1,L2. TC … (lexs RN RP f) L1 L2 → L1 ⪤*[RN, LTC … RP, f] L2.
+ ∀f. 𝐈⦃f⦄ → ∀L1,L2. TC … (lexs RN RP f) L1 L2 → L1 ⪤*[RN, CTC … RP, f] L2.
#RN #RP #HRP #f #Hf #L1 #L2 #H @(TC_ind_dx ??????? H) -L1
/3 width=3 by lexs_tc_step_dx, lexs_tc_inj_dx/
qed.
(* Advanced inversion lemmas ************************************************)
lemma lexs_inv_tc_sn: ∀RN,RP. c_reflexive … RN → c_reflexive … RP →
- ∀f,L1,L2. L1 ⪤*[LTC … RN, RP, f] L2 → TC … (lexs RN RP f) L1 L2.
+ ∀f,L1,L2. L1 ⪤*[CTC … RN, RP, f] L2 → TC … (lexs RN RP f) L1 L2.
#RN #RP #HRN #HRP #f #L1 #L2 #H elim H -f -L1 -L2
/2 width=1 by lexs_tc_next, lexs_tc_push_sn, lexs_atom, inj/
qed-.
lemma lexs_inv_tc_dx: ∀RN,RP. c_reflexive … RN → c_reflexive … RP →
- ∀f,L1,L2. L1 ⪤*[RN, LTC … RP, f] L2 → TC … (lexs RN RP f) L1 L2.
+ ∀f,L1,L2. L1 ⪤*[RN, CTC … RP, f] L2 → TC … (lexs RN RP f) L1 L2.
#RN #RP #HRN #HRP #f #L1 #L2 #H elim H -f -L1 -L2
/2 width=1 by lexs_tc_push, lexs_tc_next_sn, lexs_atom, inj/
qed-.
*)
inductive lifts: rtmap → relation term ≝
| lifts_sort: ∀f,s. lifts f (⋆s) (⋆s)
-| lifts_lref: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 → lifts f (#i1) (#i2)
+| lifts_lref: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 → lifts f (#i1) (#i2)
| lifts_gref: ∀f,l. lifts f (§l) (§l)
| lifts_bind: ∀f,p,I,V1,V2,T1,T2.
lifts f V1 V2 → lifts (↑f) T1 T2 →
'RLiftStar f T1 T2 = (lifts f T1 T2).
definition liftable2_sn: predicate (relation term) ≝
- λR. â\88\80T1,T2. R T1 T2 â\86\92 â\88\80f,U1. â¬\86*[f] T1 â\89¡ U1 →
- â\88\83â\88\83U2. â¬\86*[f] T2 â\89¡ U2 & R U1 U2.
+ λR. â\88\80T1,T2. R T1 T2 â\86\92 â\88\80f,U1. â¬\86*[f] T1 â\89\98 U1 →
+ â\88\83â\88\83U2. â¬\86*[f] T2 â\89\98 U2 & R U1 U2.
definition deliftable2_sn: predicate (relation term) ≝
- λR. â\88\80U1,U2. R U1 U2 â\86\92 â\88\80f,T1. â¬\86*[f] T1 â\89¡ U1 →
- â\88\83â\88\83T2. â¬\86*[f] T2 â\89¡ U2 & R T1 T2.
+ λR. â\88\80U1,U2. R U1 U2 â\86\92 â\88\80f,T1. â¬\86*[f] T1 â\89\98 U1 →
+ â\88\83â\88\83T2. â¬\86*[f] T2 â\89\98 U2 & R T1 T2.
definition liftable2_bi: predicate (relation term) ≝
- λR. â\88\80T1,T2. R T1 T2 â\86\92 â\88\80f,U1. â¬\86*[f] T1 â\89¡ U1 →
- â\88\80U2. â¬\86*[f] T2 â\89¡ U2 → R U1 U2.
+ λR. â\88\80T1,T2. R T1 T2 â\86\92 â\88\80f,U1. â¬\86*[f] T1 â\89\98 U1 →
+ â\88\80U2. â¬\86*[f] T2 â\89\98 U2 → R U1 U2.
definition deliftable2_bi: predicate (relation term) ≝
- λR. â\88\80U1,U2. R U1 U2 â\86\92 â\88\80f,T1. â¬\86*[f] T1 â\89¡ U1 →
- â\88\80T2. â¬\86*[f] T2 â\89¡ U2 → R T1 T2.
+ λR. â\88\80U1,U2. R U1 U2 â\86\92 â\88\80f,T1. â¬\86*[f] T1 â\89\98 U1 →
+ â\88\80T2. â¬\86*[f] T2 â\89\98 U2 → R T1 T2.
(* Basic inversion lemmas ***************************************************)
-fact lifts_inv_sort1_aux: â\88\80f,X,Y. â¬\86*[f] X â\89¡ Y → ∀s. X = ⋆s → Y = ⋆s.
+fact lifts_inv_sort1_aux: â\88\80f,X,Y. â¬\86*[f] X â\89\98 Y → ∀s. X = ⋆s → Y = ⋆s.
#f #X #Y * -f -X -Y //
[ #f #i1 #i2 #_ #x #H destruct
| #f #p #I #V1 #V2 #T1 #T2 #_ #_ #x #H destruct
(* Basic_1: was: lift1_sort *)
(* Basic_2A1: includes: lift_inv_sort1 *)
-lemma lifts_inv_sort1: â\88\80f,Y,s. â¬\86*[f] â\8b\86s â\89¡ Y → Y = ⋆s.
+lemma lifts_inv_sort1: â\88\80f,Y,s. â¬\86*[f] â\8b\86s â\89\98 Y → Y = ⋆s.
/2 width=4 by lifts_inv_sort1_aux/ qed-.
-fact lifts_inv_lref1_aux: â\88\80f,X,Y. â¬\86*[f] X â\89¡ Y → ∀i1. X = #i1 →
- â\88\83â\88\83i2. @â¦\83i1, fâ¦\84 â\89¡ i2 & Y = #i2.
+fact lifts_inv_lref1_aux: â\88\80f,X,Y. â¬\86*[f] X â\89\98 Y → ∀i1. X = #i1 →
+ â\88\83â\88\83i2. @â¦\83i1, fâ¦\84 â\89\98 i2 & Y = #i2.
#f #X #Y * -f -X -Y
[ #f #s #x #H destruct
| #f #i1 #i2 #Hi12 #x #H destruct /2 width=3 by ex2_intro/
(* Basic_1: was: lift1_lref *)
(* Basic_2A1: includes: lift_inv_lref1 lift_inv_lref1_lt lift_inv_lref1_ge *)
-lemma lifts_inv_lref1: â\88\80f,Y,i1. â¬\86*[f] #i1 â\89¡ Y →
- â\88\83â\88\83i2. @â¦\83i1, fâ¦\84 â\89¡ i2 & Y = #i2.
+lemma lifts_inv_lref1: â\88\80f,Y,i1. â¬\86*[f] #i1 â\89\98 Y →
+ â\88\83â\88\83i2. @â¦\83i1, fâ¦\84 â\89\98 i2 & Y = #i2.
/2 width=3 by lifts_inv_lref1_aux/ qed-.
-fact lifts_inv_gref1_aux: â\88\80f,X,Y. â¬\86*[f] X â\89¡ Y → ∀l. X = §l → Y = §l.
+fact lifts_inv_gref1_aux: â\88\80f,X,Y. â¬\86*[f] X â\89\98 Y → ∀l. X = §l → Y = §l.
#f #X #Y * -f -X -Y //
[ #f #i1 #i2 #_ #x #H destruct
| #f #p #I #V1 #V2 #T1 #T2 #_ #_ #x #H destruct
qed-.
(* Basic_2A1: includes: lift_inv_gref1 *)
-lemma lifts_inv_gref1: â\88\80f,Y,l. â¬\86*[f] §l â\89¡ Y → Y = §l.
+lemma lifts_inv_gref1: â\88\80f,Y,l. â¬\86*[f] §l â\89\98 Y → Y = §l.
/2 width=4 by lifts_inv_gref1_aux/ qed-.
-fact lifts_inv_bind1_aux: â\88\80f,X,Y. â¬\86*[f] X â\89¡ Y →
+fact lifts_inv_bind1_aux: â\88\80f,X,Y. â¬\86*[f] X â\89\98 Y →
∀p,I,V1,T1. X = ⓑ{p,I}V1.T1 →
- â\88\83â\88\83V2,T2. â¬\86*[f] V1 â\89¡ V2 & â¬\86*[â\86\91f] T1 â\89¡ T2 &
+ â\88\83â\88\83V2,T2. â¬\86*[f] V1 â\89\98 V2 & â¬\86*[â\86\91f] T1 â\89\98 T2 &
Y = ⓑ{p,I}V2.T2.
#f #X #Y * -f -X -Y
[ #f #s #q #J #W1 #U1 #H destruct
(* Basic_1: was: lift1_bind *)
(* Basic_2A1: includes: lift_inv_bind1 *)
-lemma lifts_inv_bind1: â\88\80f,p,I,V1,T1,Y. â¬\86*[f] â\93\91{p,I}V1.T1 â\89¡ Y →
- â\88\83â\88\83V2,T2. â¬\86*[f] V1 â\89¡ V2 & â¬\86*[â\86\91f] T1 â\89¡ T2 &
+lemma lifts_inv_bind1: â\88\80f,p,I,V1,T1,Y. â¬\86*[f] â\93\91{p,I}V1.T1 â\89\98 Y →
+ â\88\83â\88\83V2,T2. â¬\86*[f] V1 â\89\98 V2 & â¬\86*[â\86\91f] T1 â\89\98 T2 &
Y = ⓑ{p,I}V2.T2.
/2 width=3 by lifts_inv_bind1_aux/ qed-.
-fact lifts_inv_flat1_aux: â\88\80f:rtmap. â\88\80X,Y. â¬\86*[f] X â\89¡ Y →
+fact lifts_inv_flat1_aux: â\88\80f:rtmap. â\88\80X,Y. â¬\86*[f] X â\89\98 Y →
∀I,V1,T1. X = ⓕ{I}V1.T1 →
- â\88\83â\88\83V2,T2. â¬\86*[f] V1 â\89¡ V2 & â¬\86*[f] T1 â\89¡ T2 &
+ â\88\83â\88\83V2,T2. â¬\86*[f] V1 â\89\98 V2 & â¬\86*[f] T1 â\89\98 T2 &
Y = ⓕ{I}V2.T2.
#f #X #Y * -f -X -Y
[ #f #s #J #W1 #U1 #H destruct
(* Basic_1: was: lift1_flat *)
(* Basic_2A1: includes: lift_inv_flat1 *)
-lemma lifts_inv_flat1: â\88\80f:rtmap. â\88\80I,V1,T1,Y. â¬\86*[f] â\93\95{I}V1.T1 â\89¡ Y →
- â\88\83â\88\83V2,T2. â¬\86*[f] V1 â\89¡ V2 & â¬\86*[f] T1 â\89¡ T2 &
+lemma lifts_inv_flat1: â\88\80f:rtmap. â\88\80I,V1,T1,Y. â¬\86*[f] â\93\95{I}V1.T1 â\89\98 Y →
+ â\88\83â\88\83V2,T2. â¬\86*[f] V1 â\89\98 V2 & â¬\86*[f] T1 â\89\98 T2 &
Y = ⓕ{I}V2.T2.
/2 width=3 by lifts_inv_flat1_aux/ qed-.
-fact lifts_inv_sort2_aux: â\88\80f,X,Y. â¬\86*[f] X â\89¡ Y → ∀s. Y = ⋆s → X = ⋆s.
+fact lifts_inv_sort2_aux: â\88\80f,X,Y. â¬\86*[f] X â\89\98 Y → ∀s. Y = ⋆s → X = ⋆s.
#f #X #Y * -f -X -Y //
[ #f #i1 #i2 #_ #x #H destruct
| #f #p #I #V1 #V2 #T1 #T2 #_ #_ #x #H destruct
(* Basic_1: includes: lift_gen_sort *)
(* Basic_2A1: includes: lift_inv_sort2 *)
-lemma lifts_inv_sort2: â\88\80f,X,s. â¬\86*[f] X â\89¡ ⋆s → X = ⋆s.
+lemma lifts_inv_sort2: â\88\80f,X,s. â¬\86*[f] X â\89\98 ⋆s → X = ⋆s.
/2 width=4 by lifts_inv_sort2_aux/ qed-.
-fact lifts_inv_lref2_aux: â\88\80f,X,Y. â¬\86*[f] X â\89¡ Y → ∀i2. Y = #i2 →
- â\88\83â\88\83i1. @â¦\83i1, fâ¦\84 â\89¡ i2 & X = #i1.
+fact lifts_inv_lref2_aux: â\88\80f,X,Y. â¬\86*[f] X â\89\98 Y → ∀i2. Y = #i2 →
+ â\88\83â\88\83i1. @â¦\83i1, fâ¦\84 â\89\98 i2 & X = #i1.
#f #X #Y * -f -X -Y
[ #f #s #x #H destruct
| #f #i1 #i2 #Hi12 #x #H destruct /2 width=3 by ex2_intro/
(* Basic_1: includes: lift_gen_lref lift_gen_lref_lt lift_gen_lref_false lift_gen_lref_ge *)
(* Basic_2A1: includes: lift_inv_lref2 lift_inv_lref2_lt lift_inv_lref2_be lift_inv_lref2_ge lift_inv_lref2_plus *)
-lemma lifts_inv_lref2: â\88\80f,X,i2. â¬\86*[f] X â\89¡ #i2 →
- â\88\83â\88\83i1. @â¦\83i1, fâ¦\84 â\89¡ i2 & X = #i1.
+lemma lifts_inv_lref2: â\88\80f,X,i2. â¬\86*[f] X â\89\98 #i2 →
+ â\88\83â\88\83i1. @â¦\83i1, fâ¦\84 â\89\98 i2 & X = #i1.
/2 width=3 by lifts_inv_lref2_aux/ qed-.
-fact lifts_inv_gref2_aux: â\88\80f,X,Y. â¬\86*[f] X â\89¡ Y → ∀l. Y = §l → X = §l.
+fact lifts_inv_gref2_aux: â\88\80f,X,Y. â¬\86*[f] X â\89\98 Y → ∀l. Y = §l → X = §l.
#f #X #Y * -f -X -Y //
[ #f #i1 #i2 #_ #x #H destruct
| #f #p #I #V1 #V2 #T1 #T2 #_ #_ #x #H destruct
qed-.
(* Basic_2A1: includes: lift_inv_gref1 *)
-lemma lifts_inv_gref2: â\88\80f,X,l. â¬\86*[f] X â\89¡ §l → X = §l.
+lemma lifts_inv_gref2: â\88\80f,X,l. â¬\86*[f] X â\89\98 §l → X = §l.
/2 width=4 by lifts_inv_gref2_aux/ qed-.
-fact lifts_inv_bind2_aux: â\88\80f,X,Y. â¬\86*[f] X â\89¡ Y →
+fact lifts_inv_bind2_aux: â\88\80f,X,Y. â¬\86*[f] X â\89\98 Y →
∀p,I,V2,T2. Y = ⓑ{p,I}V2.T2 →
- â\88\83â\88\83V1,T1. â¬\86*[f] V1 â\89¡ V2 & â¬\86*[â\86\91f] T1 â\89¡ T2 &
+ â\88\83â\88\83V1,T1. â¬\86*[f] V1 â\89\98 V2 & â¬\86*[â\86\91f] T1 â\89\98 T2 &
X = ⓑ{p,I}V1.T1.
#f #X #Y * -f -X -Y
[ #f #s #q #J #W2 #U2 #H destruct
(* Basic_1: includes: lift_gen_bind *)
(* Basic_2A1: includes: lift_inv_bind2 *)
-lemma lifts_inv_bind2: â\88\80f,p,I,V2,T2,X. â¬\86*[f] X â\89¡ ⓑ{p,I}V2.T2 →
- â\88\83â\88\83V1,T1. â¬\86*[f] V1 â\89¡ V2 & â¬\86*[â\86\91f] T1 â\89¡ T2 &
+lemma lifts_inv_bind2: â\88\80f,p,I,V2,T2,X. â¬\86*[f] X â\89\98 ⓑ{p,I}V2.T2 →
+ â\88\83â\88\83V1,T1. â¬\86*[f] V1 â\89\98 V2 & â¬\86*[â\86\91f] T1 â\89\98 T2 &
X = ⓑ{p,I}V1.T1.
/2 width=3 by lifts_inv_bind2_aux/ qed-.
-fact lifts_inv_flat2_aux: â\88\80f:rtmap. â\88\80X,Y. â¬\86*[f] X â\89¡ Y →
+fact lifts_inv_flat2_aux: â\88\80f:rtmap. â\88\80X,Y. â¬\86*[f] X â\89\98 Y →
∀I,V2,T2. Y = ⓕ{I}V2.T2 →
- â\88\83â\88\83V1,T1. â¬\86*[f] V1 â\89¡ V2 & â¬\86*[f] T1 â\89¡ T2 &
+ â\88\83â\88\83V1,T1. â¬\86*[f] V1 â\89\98 V2 & â¬\86*[f] T1 â\89\98 T2 &
X = ⓕ{I}V1.T1.
#f #X #Y * -f -X -Y
[ #f #s #J #W2 #U2 #H destruct
(* Basic_1: includes: lift_gen_flat *)
(* Basic_2A1: includes: lift_inv_flat2 *)
-lemma lifts_inv_flat2: â\88\80f:rtmap. â\88\80I,V2,T2,X. â¬\86*[f] X â\89¡ ⓕ{I}V2.T2 →
- â\88\83â\88\83V1,T1. â¬\86*[f] V1 â\89¡ V2 & â¬\86*[f] T1 â\89¡ T2 &
+lemma lifts_inv_flat2: â\88\80f:rtmap. â\88\80I,V2,T2,X. â¬\86*[f] X â\89\98 ⓕ{I}V2.T2 →
+ â\88\83â\88\83V1,T1. â¬\86*[f] V1 â\89\98 V2 & â¬\86*[f] T1 â\89\98 T2 &
X = ⓕ{I}V1.T1.
/2 width=3 by lifts_inv_flat2_aux/ qed-.
(* Advanced inversion lemmas ************************************************)
-lemma lifts_inv_atom1: â\88\80f,I,Y. â¬\86*[f] â\93ª{I} â\89¡ Y →
+lemma lifts_inv_atom1: â\88\80f,I,Y. â¬\86*[f] â\93ª{I} â\89\98 Y →
∨∨ ∃∃s. I = Sort s & Y = ⋆s
- | â\88\83â\88\83i,j. @â¦\83i, fâ¦\84 â\89¡ j & I = LRef i & Y = #j
+ | â\88\83â\88\83i,j. @â¦\83i, fâ¦\84 â\89\98 j & I = LRef i & Y = #j
| ∃∃l. I = GRef l & Y = §l.
#f * #n #Y #H
[ lapply (lifts_inv_sort1 … H)
] -H /3 width=5 by or3_intro0, or3_intro1, or3_intro2, ex3_2_intro, ex2_intro/
qed-.
-lemma lifts_inv_atom2: â\88\80f,I,X. â¬\86*[f] X â\89¡ ⓪{I} →
+lemma lifts_inv_atom2: â\88\80f,I,X. â¬\86*[f] X â\89\98 ⓪{I} →
∨∨ ∃∃s. X = ⋆s & I = Sort s
- | â\88\83â\88\83i,j. @â¦\83i, fâ¦\84 â\89¡ j & X = #i & I = LRef j
+ | â\88\83â\88\83i,j. @â¦\83i, fâ¦\84 â\89\98 j & X = #i & I = LRef j
| ∃∃l. X = §l & I = GRef l.
#f * #n #X #H
[ lapply (lifts_inv_sort2 … H)
qed-.
(* Basic_2A1: includes: lift_inv_pair_xy_x *)
-lemma lifts_inv_pair_xy_x: â\88\80f,I,V,T. â¬\86*[f] â\91¡{I}V.T â\89¡ V → ⊥.
+lemma lifts_inv_pair_xy_x: â\88\80f,I,V,T. â¬\86*[f] â\91¡{I}V.T â\89\98 V → ⊥.
#f #J #V elim V -V
[ * #i #U #H
[ lapply (lifts_inv_sort2 … H) -H #H destruct
(* Basic_1: includes: thead_x_lift_y_y *)
(* Basic_2A1: includes: lift_inv_pair_xy_y *)
-lemma lifts_inv_pair_xy_y: â\88\80I,T,V,f. â¬\86*[f] â\91¡{I}V.T â\89¡ T → ⊥.
+lemma lifts_inv_pair_xy_y: â\88\80I,T,V,f. â¬\86*[f] â\91¡{I}V.T â\89\98 T → ⊥.
#J #T elim T -T
[ * #i #W #f #H
[ lapply (lifts_inv_sort2 … H) -H #H destruct
(* Inversion lemmas with uniform relocations ********************************)
-lemma lifts_inv_lref1_uni: â\88\80l,Y,i. â¬\86*[l] #i â\89¡ Y → Y = #(l+i).
+lemma lifts_inv_lref1_uni: â\88\80l,Y,i. â¬\86*[l] #i â\89\98 Y → Y = #(l+i).
#l #Y #i1 #H elim (lifts_inv_lref1 … H) -H /4 width=4 by at_mono, eq_f/
qed-.
-lemma lifts_inv_lref2_uni: â\88\80l,X,i2. â¬\86*[l] X â\89¡ #i2 →
+lemma lifts_inv_lref2_uni: â\88\80l,X,i2. â¬\86*[l] X â\89\98 #i2 →
∃∃i1. X = #i1 & i2 = l + i1.
#l #X #i2 #H elim (lifts_inv_lref2 … H) -H
/3 width=3 by at_inv_uni, ex2_intro/
qed-.
-lemma lifts_inv_lref2_uni_ge: â\88\80l,X,i. â¬\86*[l] X â\89¡ #(l + i) → X = #i.
+lemma lifts_inv_lref2_uni_ge: â\88\80l,X,i. â¬\86*[l] X â\89\98 #(l + i) → X = #i.
#l #X #i2 #H elim (lifts_inv_lref2_uni … H) -H
#i1 #H1 #H2 destruct /4 width=2 by injective_plus_r, eq_f, sym_eq/
qed-.
-lemma lifts_inv_lref2_uni_lt: â\88\80l,X,i. â¬\86*[l] X â\89¡ #i → i < l → ⊥.
+lemma lifts_inv_lref2_uni_lt: â\88\80l,X,i. â¬\86*[l] X â\89\98 #i → i < l → ⊥.
#l #X #i2 #H elim (lifts_inv_lref2_uni … H) -H
#i1 #_ #H1 #H2 destruct /2 width=4 by lt_le_false/
qed-.
(* Basic forward lemmas *****************************************************)
(* Basic_2A1: includes: lift_inv_O2 *)
-lemma lifts_fwd_isid: â\88\80f,T1,T2. â¬\86*[f] T1 â\89¡ T2 → 𝐈⦃f⦄ → T1 = T2.
+lemma lifts_fwd_isid: â\88\80f,T1,T2. â¬\86*[f] T1 â\89\98 T2 → 𝐈⦃f⦄ → T1 = T2.
#f #T1 #T2 #H elim H -f -T1 -T2
/4 width=3 by isid_inv_at_mono, isid_push, eq_f2, eq_f/
qed-.
(* Basic_2A1: includes: lift_fwd_pair1 *)
-lemma lifts_fwd_pair1: â\88\80f:rtmap. â\88\80I,V1,T1,Y. â¬\86*[f] â\91¡{I}V1.T1 â\89¡ Y →
- â\88\83â\88\83V2,T2. â¬\86*[f] V1 â\89¡ V2 & Y = ②{I}V2.T2.
+lemma lifts_fwd_pair1: â\88\80f:rtmap. â\88\80I,V1,T1,Y. â¬\86*[f] â\91¡{I}V1.T1 â\89\98 Y →
+ â\88\83â\88\83V2,T2. â¬\86*[f] V1 â\89\98 V2 & Y = ②{I}V2.T2.
#f * [ #p ] #I #V1 #T1 #Y #H
[ elim (lifts_inv_bind1 … H) -H /2 width=4 by ex2_2_intro/
| elim (lifts_inv_flat1 … H) -H /2 width=4 by ex2_2_intro/
qed-.
(* Basic_2A1: includes: lift_fwd_pair2 *)
-lemma lifts_fwd_pair2: â\88\80f:rtmap. â\88\80I,V2,T2,X. â¬\86*[f] X â\89¡ ②{I}V2.T2 →
- â\88\83â\88\83V1,T1. â¬\86*[f] V1 â\89¡ V2 & X = ②{I}V1.T1.
+lemma lifts_fwd_pair2: â\88\80f:rtmap. â\88\80I,V2,T2,X. â¬\86*[f] X â\89\98 ②{I}V2.T2 →
+ â\88\83â\88\83V1,T1. â¬\86*[f] V1 â\89\98 V2 & X = ②{I}V1.T1.
#f * [ #p ] #I #V2 #T2 #X #H
[ elim (lifts_inv_bind2 … H) -H /2 width=4 by ex2_2_intro/
| elim (lifts_inv_flat2 … H) -H /2 width=4 by ex2_2_intro/
(* Basic properties *********************************************************)
-lemma lifts_eq_repl_back: â\88\80T1,T2. eq_repl_back â\80¦ (λf. â¬\86*[f] T1 â\89¡ T2).
+lemma lifts_eq_repl_back: â\88\80T1,T2. eq_repl_back â\80¦ (λf. â¬\86*[f] T1 â\89\98 T2).
#T1 #T2 #f1 #H elim H -T1 -T2 -f1
/4 width=5 by lifts_flat, lifts_bind, lifts_lref, at_eq_repl_back, eq_push/
qed-.
-lemma lifts_eq_repl_fwd: â\88\80T1,T2. eq_repl_fwd â\80¦ (λf. â¬\86*[f] T1 â\89¡ T2).
+lemma lifts_eq_repl_fwd: â\88\80T1,T2. eq_repl_fwd â\80¦ (λf. â¬\86*[f] T1 â\89\98 T2).
#T1 #T2 @eq_repl_sym /2 width=3 by lifts_eq_repl_back/ (**) (* full auto fails *)
qed-.
(* Basic_1: includes: lift_r *)
(* Basic_2A1: includes: lift_refl *)
-lemma lifts_refl: â\88\80T,f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 â¬\86*[f] T â\89¡ T.
+lemma lifts_refl: â\88\80T,f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 â¬\86*[f] T â\89\98 T.
#T elim T -T *
/4 width=3 by lifts_flat, lifts_bind, lifts_lref, isid_inv_at, isid_push/
qed.
(* Basic_2A1: includes: lift_total *)
-lemma lifts_total: â\88\80T1,f. â\88\83T2. â¬\86*[f] T1 â\89¡ T2.
+lemma lifts_total: â\88\80T1,f. â\88\83T2. â¬\86*[f] T1 â\89\98 T2.
#T1 elim T1 -T1 *
/3 width=2 by lifts_lref, lifts_sort, lifts_gref, ex_intro/
[ #p ] #I #V1 #T1 #IHV1 #IHT1 #f
]
qed-.
-lemma lift_lref_uni: â\88\80l,i. â¬\86*[l] #i â\89¡ #(l+i).
+lemma lift_lref_uni: â\88\80l,i. â¬\86*[l] #i â\89\98 #(l+i).
#l elim l -l /2 width=1 by lifts_lref/
qed.
(* Basic_1: includes: lift_free (right to left) *)
(* Basic_2A1: includes: lift_split *)
-lemma lifts_split_trans: â\88\80f,T1,T2. â¬\86*[f] T1 â\89¡ T2 →
- â\88\80f1,f2. f2 â\8a\9a f1 â\89¡ f →
- â\88\83â\88\83T. â¬\86*[f1] T1 â\89¡ T & â¬\86*[f2] T â\89¡ T2.
+lemma lifts_split_trans: â\88\80f,T1,T2. â¬\86*[f] T1 â\89\98 T2 →
+ â\88\80f1,f2. f2 â\8a\9a f1 â\89\98 f →
+ â\88\83â\88\83T. â¬\86*[f1] T1 â\89\98 T & â¬\86*[f2] T â\89\98 T2.
#f #T1 #T2 #H elim H -f -T1 -T2
[ /3 width=3 by lifts_sort, ex2_intro/
| #f #i1 #i2 #Hi #f1 #f2 #Ht elim (after_at_fwd … Hi … Ht) -Hi -Ht
qed-.
(* Note: apparently, this was missing in Basic_2A1 *)
-lemma lifts_split_div: â\88\80f1,T1,T2. â¬\86*[f1] T1 â\89¡ T2 →
- â\88\80f2,f. f2 â\8a\9a f1 â\89¡ f →
- â\88\83â\88\83T. â¬\86*[f2] T2 â\89¡ T & â¬\86*[f] T1 â\89¡ T.
+lemma lifts_split_div: â\88\80f1,T1,T2. â¬\86*[f1] T1 â\89\98 T2 →
+ â\88\80f2,f. f2 â\8a\9a f1 â\89\98 f →
+ â\88\83â\88\83T. â¬\86*[f2] T2 â\89\98 T & â¬\86*[f] T1 â\89\98 T.
#f1 #T1 #T2 #H elim H -f1 -T1 -T2
[ /3 width=3 by lifts_sort, ex2_intro/
| #f1 #i1 #i2 #Hi #f2 #f #Ht elim (after_at1_fwd … Hi … Ht) -Hi -Ht
(* Basic_1: includes: dnf_dec2 dnf_dec *)
(* Basic_2A1: includes: is_lift_dec *)
-lemma is_lifts_dec: â\88\80T2,f. Decidable (â\88\83T1. â¬\86*[f] T1 â\89¡ T2).
+lemma is_lifts_dec: â\88\80T2,f. Decidable (â\88\83T1. â¬\86*[f] T1 â\89\98 T2).
#T1 elim T1 -T1
[ * [1,3: /3 width=2 by lifts_sort, lifts_gref, ex_intro, or_introl/ ]
#i2 #f elim (is_at_dec f i2) //
(* Properties with uniform relocation ***************************************)
-lemma lifts_uni: â\88\80n1,n2,T,U. â¬\86*[ð\9d\90\94â\9d´n1â\9dµâ\88\98ð\9d\90\94â\9d´n2â\9dµ] T â\89¡ U â\86\92 â¬\86*[n1+n2] T â\89¡ U.
+lemma lifts_uni: â\88\80n1,n2,T,U. â¬\86*[ð\9d\90\94â\9d´n1â\9dµâ\88\98ð\9d\90\94â\9d´n2â\9dµ] T â\89\98 U â\86\92 â¬\86*[n1+n2] T â\89\98 U.
/3 width=4 by lifts_eq_repl_back, after_inv_total/ qed.
(* Basic_2A1: removed theorems 14:
(* Basic_inversion lemmas **************************************************)
-lemma liftsb_inv_unit_sn: â\88\80f,I,Z2. â¬\86*[f] BUnit I â\89¡ Z2 → Z2 = BUnit I.
+lemma liftsb_inv_unit_sn: â\88\80f,I,Z2. â¬\86*[f] BUnit I â\89\98 Z2 → Z2 = BUnit I.
/2 width=2 by ext2_inv_unit_sn/ qed-.
-lemma liftsb_inv_pair_sn: â\88\80f:rtmap. â\88\80Z2,I,V1. â¬\86*[f] BPair I V1 â\89¡ Z2 →
- â\88\83â\88\83V2. â¬\86*[f] V1 â\89¡ V2 & Z2 = BPair I V2.
+lemma liftsb_inv_pair_sn: â\88\80f:rtmap. â\88\80Z2,I,V1. â¬\86*[f] BPair I V1 â\89\98 Z2 →
+ â\88\83â\88\83V2. â¬\86*[f] V1 â\89\98 V2 & Z2 = BPair I V2.
/2 width=1 by ext2_inv_pair_sn/ qed-.
-lemma liftsb_inv_unit_dx: â\88\80f,I,Z1. â¬\86*[f] Z1 â\89¡ BUnit I → Z1 = BUnit I.
+lemma liftsb_inv_unit_dx: â\88\80f,I,Z1. â¬\86*[f] Z1 â\89\98 BUnit I → Z1 = BUnit I.
/2 width=2 by ext2_inv_unit_dx/ qed-.
-lemma liftsb_inv_pair_dx: â\88\80f:rtmap. â\88\80Z1,I,V2. â¬\86*[f] Z1 â\89¡ BPair I V2 →
- â\88\83â\88\83V1. â¬\86*[f] V1 â\89¡ V2 & Z1 = BPair I V1.
+lemma liftsb_inv_pair_dx: â\88\80f:rtmap. â\88\80Z1,I,V2. â¬\86*[f] Z1 â\89\98 BPair I V2 →
+ â\88\83â\88\83V1. â¬\86*[f] V1 â\89\98 V2 & Z1 = BPair I V1.
/2 width=1 by ext2_inv_pair_dx/ qed-.
(* Basic properties *********************************************************)
-lemma liftsb_eq_repl_back: â\88\80I1,I2. eq_repl_back â\80¦ (λf. â¬\86*[f] I1 â\89¡ I2).
+lemma liftsb_eq_repl_back: â\88\80I1,I2. eq_repl_back â\80¦ (λf. â¬\86*[f] I1 â\89\98 I2).
#I1 #I2 #f1 * -I1 -I2 /3 width=3 by lifts_eq_repl_back, ext2_pair/
qed-.
lemma liftsb_refl: ∀f. 𝐈⦃f⦄ → reflexive … (liftsb f).
/3 width=1 by lifts_refl, ext2_refl/ qed.
-lemma liftsb_total: â\88\80I1,f. â\88\83I2. â¬\86*[f] I1 â\89¡ I2.
+lemma liftsb_total: â\88\80I1,f. â\88\83I2. â¬\86*[f] I1 â\89\98 I2.
* [2: #I #T1 #f elim (lifts_total T1 f) ]
/3 width=2 by ext2_unit, ext2_pair, ex_intro/
qed-.
-lemma liftsb_split_trans: â\88\80f,I1,I2. â¬\86*[f] I1 â\89¡ I2 →
- â\88\80f1,f2. f2 â\8a\9a f1 â\89¡ f →
- â\88\83â\88\83I. â¬\86*[f1] I1 â\89¡ I & â¬\86*[f2] I â\89¡ I2.
+lemma liftsb_split_trans: â\88\80f,I1,I2. â¬\86*[f] I1 â\89\98 I2 →
+ â\88\80f1,f2. f2 â\8a\9a f1 â\89\98 f →
+ â\88\83â\88\83I. â¬\86*[f1] I1 â\89\98 I & â¬\86*[f2] I â\89\98 I2.
#f #I1 #I2 * -I1 -I2 /2 width=3 by ext2_unit, ex2_intro/
#I #V1 #V2 #HV12 #f1 #f2 #Hf elim (lifts_split_trans … HV12 … Hf) -f
/3 width=3 by ext2_pair, ex2_intro/
(* Basic forward lemmas *****************************************************)
-lemma liftsb_fwd_isid: â\88\80f,I1,I2. â¬\86*[f] I1 â\89¡ I2 → 𝐈⦃f⦄ → I1 = I2.
+lemma liftsb_fwd_isid: â\88\80f,I1,I2. â¬\86*[f] I1 â\89\98 I2 → 𝐈⦃f⦄ → I1 = I2.
#f #I1 #I2 * -I1 -I2 /3 width=3 by lifts_fwd_isid, eq_f2/
qed-.
(* Basic_1: includes: lift_gen_lift *)
(* Basic_2A1: includes: lift_div_le lift_div_be *)
-theorem lifts_div4: â\88\80f2,Tf,T. â¬\86*[f2] Tf â\89¡ T â\86\92 â\88\80g2,Tg. â¬\86*[g2] Tg â\89¡ T →
+theorem lifts_div4: â\88\80f2,Tf,T. â¬\86*[f2] Tf â\89\98 T â\86\92 â\88\80g2,Tg. â¬\86*[g2] Tg â\89\98 T →
∀f1,g1. H_at_div f2 g2 f1 g1 →
- â\88\83â\88\83T0. â¬\86*[f1] T0 â\89¡ Tf & â¬\86*[g1] T0 â\89¡ Tg.
+ â\88\83â\88\83T0. â¬\86*[f1] T0 â\89\98 Tf & â¬\86*[g1] T0 â\89\98 Tg.
#f2 #Tf #T #H elim H -f2 -Tf -T
[ #f2 #s #g2 #Tg #H #f1 #g1 #_
lapply (lifts_inv_sort2 … H) -H #H destruct
]
qed-.
-lemma lifts_div4_one: â\88\80f,Tf,T. â¬\86*[â\86\91f] Tf â\89¡ T →
- â\88\80T1. â¬\86*[1] T1 â\89¡ T →
- â\88\83â\88\83T0. â¬\86*[1] T0 â\89¡ Tf & â¬\86*[f] T0 â\89¡ T1.
+lemma lifts_div4_one: â\88\80f,Tf,T. â¬\86*[â\86\91f] Tf â\89\98 T →
+ â\88\80T1. â¬\86*[1] T1 â\89\98 T →
+ â\88\83â\88\83T0. â¬\86*[1] T0 â\89\98 Tf & â¬\86*[f] T0 â\89\98 T1.
/4 width=6 by lifts_div4, at_div_id_dx, at_div_pn/ qed-.
-theorem lifts_div3: â\88\80f2,T,T2. â¬\86*[f2] T2 â\89¡ T â\86\92 â\88\80f,T1. â¬\86*[f] T1 â\89¡ T →
- â\88\80f1. f2 â\8a\9a f1 â\89¡ f â\86\92 â¬\86*[f1] T1 â\89¡ T2.
+theorem lifts_div3: â\88\80f2,T,T2. â¬\86*[f2] T2 â\89\98 T â\86\92 â\88\80f,T1. â¬\86*[f] T1 â\89\98 T →
+ â\88\80f1. f2 â\8a\9a f1 â\89\98 f â\86\92 â¬\86*[f1] T1 â\89\98 T2.
#f2 #T #T2 #H elim H -f2 -T -T2
[ #f2 #s #f #T1 #H >(lifts_inv_sort2 … H) -T1 //
| #f2 #i2 #i #Hi2 #f #T1 #H #f1 #Ht21 elim (lifts_inv_lref2 … H) -H
(* Basic_1: was: lift1_lift1 (left to right) *)
(* Basic_1: includes: lift_free (left to right) lift_d lift1_xhg (right to left) lift1_free (right to left) *)
(* Basic_2A1: includes: lift_trans_be lift_trans_le lift_trans_ge lifts_lift_trans_le lifts_lift_trans *)
-theorem lifts_trans: â\88\80f1,T1,T. â¬\86*[f1] T1 â\89¡ T â\86\92 â\88\80f2,T2. â¬\86*[f2] T â\89¡ T2 →
- â\88\80f. f2 â\8a\9a f1 â\89¡ f â\86\92 â¬\86*[f] T1 â\89¡ T2.
+theorem lifts_trans: â\88\80f1,T1,T. â¬\86*[f1] T1 â\89\98 T â\86\92 â\88\80f2,T2. â¬\86*[f2] T â\89\98 T2 →
+ â\88\80f. f2 â\8a\9a f1 â\89\98 f â\86\92 â¬\86*[f] T1 â\89\98 T2.
#f1 #T1 #T #H elim H -f1 -T1 -T
[ #f1 #s #f2 #T2 #H >(lifts_inv_sort1 … H) -T2 //
| #f1 #i1 #i #Hi1 #f2 #T2 #H #f #Ht21 elim (lifts_inv_lref1 … H) -H
qed-.
(* Basic_2A1: includes: lift_conf_O1 lift_conf_be *)
-theorem lifts_conf: â\88\80f1,T,T1. â¬\86*[f1] T â\89¡ T1 â\86\92 â\88\80f,T2. â¬\86*[f] T â\89¡ T2 →
- â\88\80f2. f2 â\8a\9a f1 â\89¡ f â\86\92 â¬\86*[f2] T1 â\89¡ T2.
+theorem lifts_conf: â\88\80f1,T,T1. â¬\86*[f1] T â\89\98 T1 â\86\92 â\88\80f,T2. â¬\86*[f] T â\89\98 T2 →
+ â\88\80f2. f2 â\8a\9a f1 â\89\98 f â\86\92 â¬\86*[f2] T1 â\89\98 T2.
#f1 #T #T1 #H elim H -f1 -T -T1
[ #f1 #s #f #T2 #H >(lifts_inv_sort1 … H) -T2 //
| #f1 #i #i1 #Hi1 #f #T2 #H #f2 #Ht21 elim (lifts_inv_lref1 … H) -H
(* Main properties **********************************************************)
-theorem liftsb_div3: â\88\80f2,I,I2. â¬\86*[f2] I2 â\89¡ I â\86\92 â\88\80f,I1. â¬\86*[f] I1 â\89¡ I →
- â\88\80f1. f2 â\8a\9a f1 â\89¡ f â\86\92 â¬\86*[f1] I1 â\89¡ I2.
+theorem liftsb_div3: â\88\80f2,I,I2. â¬\86*[f2] I2 â\89\98 I â\86\92 â\88\80f,I1. â¬\86*[f] I1 â\89\98 I →
+ â\88\80f1. f2 â\8a\9a f1 â\89\98 f â\86\92 â¬\86*[f1] I1 â\89\98 I2.
#f2 #I #I2 * -I -I2 #I [2: #V #V2 #HV2 ] #f #I1 #H
[ elim (liftsb_inv_pair_dx … H) | lapply (liftsb_inv_unit_dx … H) ] -H
/3 width=6 by lifts_div3, ext2_pair, ext2_unit/
qed-.
-theorem liftsb_trans: â\88\80f1,I1,I. â¬\86*[f1] I1 â\89¡ I â\86\92 â\88\80f2,I2. â¬\86*[f2] I â\89¡ I2 →
- â\88\80f. f2 â\8a\9a f1 â\89¡ f â\86\92 â¬\86*[f] I1 â\89¡ I2.
+theorem liftsb_trans: â\88\80f1,I1,I. â¬\86*[f1] I1 â\89\98 I â\86\92 â\88\80f2,I2. â¬\86*[f2] I â\89\98 I2 →
+ â\88\80f. f2 â\8a\9a f1 â\89\98 f â\86\92 â¬\86*[f] I1 â\89\98 I2.
#f1 #I1 #I * -I1 -I #I1 [2: #V1 #V #HV1 ] #f2 #I2 #H
[ elim (liftsb_inv_pair_sn … H) | lapply (liftsb_inv_unit_sn … H) ] -H
/3 width=6 by lifts_trans, ext2_pair, ext2_unit/
qed-.
-theorem liftsb_conf: â\88\80f1,I,I1. â¬\86*[f1] I â\89¡ I1 â\86\92 â\88\80f,I2. â¬\86*[f] I â\89¡ I2 →
- â\88\80f2. f2 â\8a\9a f1 â\89¡ f â\86\92 â¬\86*[f2] I1 â\89¡ I2.
+theorem liftsb_conf: â\88\80f1,I,I1. â¬\86*[f1] I â\89\98 I1 â\86\92 â\88\80f,I2. â¬\86*[f] I â\89\98 I2 →
+ â\88\80f2. f2 â\8a\9a f1 â\89\98 f â\86\92 â¬\86*[f2] I1 â\89\98 I2.
#f1 #I #I1 * -I -I1 #I [2: #V #V1 #HV1 ] #f2 #I2 #H
[ elim (liftsb_inv_pair_sn … H) | lapply (liftsb_inv_unit_sn … H) ] -H
/3 width=6 by lifts_conf, ext2_pair, ext2_unit/
(* Main properties **********************************************************)
(* Basic_1: includes: lifts_inj *)
-theorem liftsv_inj: â\88\80f,T1s,Us. â¬\86*[f] T1s â\89¡ Us →
- â\88\80T2s. â¬\86*[f] T2s â\89¡ Us → T1s = T2s.
+theorem liftsv_inj: â\88\80f,T1s,Us. â¬\86*[f] T1s â\89\98 Us →
+ â\88\80T2s. â¬\86*[f] T2s â\89\98 Us → T1s = T2s.
#f #T1s #Us #H elim H -T1s -Us
[ #T2s #H >(liftsv_inv_nil2 … H) -H //
| #T1s #Us #T1 #U #HT1U #_ #IHT1Us #X #H destruct
qed-.
(* Basic_2A1: includes: liftv_mono *)
-theorem liftsv_mono: â\88\80f,Ts,U1s. â¬\86*[f] Ts â\89¡ U1s →
- â\88\80U2s. â¬\86*[f] Ts â\89¡ U2s → U1s = U2s.
+theorem liftsv_mono: â\88\80f,Ts,U1s. â¬\86*[f] Ts â\89\98 U1s →
+ â\88\80U2s. â¬\86*[f] Ts â\89\98 U2s → U1s = U2s.
#f #Ts #U1s #H elim H -Ts -U1s
[ #U2s #H >(liftsv_inv_nil1 … H) -H //
| #Ts #U1s #T #U1 #HTU1 #_ #IHTU1s #X #H destruct
(* Basic_1: includes: lifts1_xhg (right to left) *)
(* Basic_2A1: includes: liftsv_liftv_trans_le *)
-theorem liftsv_trans: â\88\80f1,T1s,Ts. â¬\86*[f1] T1s â\89¡ Ts â\86\92 â\88\80T2s,f2. â¬\86*[f2] Ts â\89¡ T2s →
- â\88\80f. f2 â\8a\9a f1 â\89¡ f â\86\92 â¬\86*[f] T1s â\89¡ T2s.
+theorem liftsv_trans: â\88\80f1,T1s,Ts. â¬\86*[f1] T1s â\89\98 Ts â\86\92 â\88\80T2s,f2. â¬\86*[f2] Ts â\89\98 T2s →
+ â\88\80f. f2 â\8a\9a f1 â\89\98 f â\86\92 â¬\86*[f] T1s â\89\98 T2s.
#f1 #T1s #Ts #H elim H -T1s -Ts
[ #T2s #f2 #H >(liftsv_inv_nil1 … H) -T2s /2 width=3 by liftsv_nil/
| #T1s #Ts #T1 #T #HT1 #_ #IHT1s #X #f2 #H elim (liftsv_inv_cons1 … H) -H
(* Forward lemmas with simple terms *****************************************)
(* Basic_2A1: includes: lift_simple_dx *)
-lemma lifts_simple_dx: â\88\80f,T1,T2. â¬\86*[f] T1 â\89¡ T2 → 𝐒⦃T1⦄ → 𝐒⦃T2⦄.
+lemma lifts_simple_dx: â\88\80f,T1,T2. â¬\86*[f] T1 â\89\98 T2 → 𝐒⦃T1⦄ → 𝐒⦃T2⦄.
#f #T1 #T2 #H elim H -f -T1 -T2 //
#f #p #I #V1 #V2 #T1 #T2 #_ #_ #_ #_ #H elim (simple_inv_bind … H)
qed-.
(* Basic_2A1: includes: lift_simple_sn *)
-lemma lifts_simple_sn: â\88\80f,T1,T2. â¬\86*[f] T1 â\89¡ T2 → 𝐒⦃T2⦄ → 𝐒⦃T1⦄.
+lemma lifts_simple_sn: â\88\80f,T1,T2. â¬\86*[f] T1 â\89\98 T2 → 𝐒⦃T2⦄ → 𝐒⦃T1⦄.
#f #T1 #T2 #H elim H -f -T1 -T2 //
#f #p #I #V1 #V2 #T1 #T2 #_ #_ #_ #_ #H elim (simple_inv_bind … H)
qed-.
inductive liftsv (f:rtmap): relation (list term) ≝
| liftsv_nil : liftsv f (◊) (◊)
| liftsv_cons: ∀T1s,T2s,T1,T2.
- â¬\86*[f] T1 â\89¡ T2 → liftsv f T1s T2s →
+ â¬\86*[f] T1 â\89\98 T2 → liftsv f T1s T2s →
liftsv f (T1 @ T1s) (T2 @ T2s)
.
(* Basic inversion lemmas ***************************************************)
-fact liftsv_inv_nil1_aux: â\88\80f,X,Y. â¬\86*[f] X â\89¡ Y → X = ◊ → Y = ◊.
+fact liftsv_inv_nil1_aux: â\88\80f,X,Y. â¬\86*[f] X â\89\98 Y → X = ◊ → Y = ◊.
#f #X #Y * -X -Y //
#T1s #T2s #T1 #T2 #_ #_ #H destruct
qed-.
(* Basic_2A1: includes: liftv_inv_nil1 *)
-lemma liftsv_inv_nil1: â\88\80f,Y. â¬\86*[f] â\97\8a â\89¡ Y → Y = ◊.
+lemma liftsv_inv_nil1: â\88\80f,Y. â¬\86*[f] â\97\8a â\89\98 Y → Y = ◊.
/2 width=5 by liftsv_inv_nil1_aux/ qed-.
-fact liftsv_inv_cons1_aux: â\88\80f:rtmap. â\88\80X,Y. â¬\86*[f] X â\89¡ Y →
+fact liftsv_inv_cons1_aux: â\88\80f:rtmap. â\88\80X,Y. â¬\86*[f] X â\89\98 Y →
∀T1,T1s. X = T1 @ T1s →
- â\88\83â\88\83T2,T2s. â¬\86*[f] T1 â\89¡ T2 & â¬\86*[f] T1s â\89¡ T2s &
+ â\88\83â\88\83T2,T2s. â¬\86*[f] T1 â\89\98 T2 & â¬\86*[f] T1s â\89\98 T2s &
Y = T2 @ T2s.
#f #X #Y * -X -Y
[ #U1 #U1s #H destruct
qed-.
(* Basic_2A1: includes: liftv_inv_cons1 *)
-lemma liftsv_inv_cons1: â\88\80f:rtmap. â\88\80T1,T1s,Y. â¬\86*[f] T1 @ T1s â\89¡ Y →
- â\88\83â\88\83T2,T2s. â¬\86*[f] T1 â\89¡ T2 & â¬\86*[f] T1s â\89¡ T2s &
+lemma liftsv_inv_cons1: â\88\80f:rtmap. â\88\80T1,T1s,Y. â¬\86*[f] T1 @ T1s â\89\98 Y →
+ â\88\83â\88\83T2,T2s. â¬\86*[f] T1 â\89\98 T2 & â¬\86*[f] T1s â\89\98 T2s &
Y = T2 @ T2s.
/2 width=3 by liftsv_inv_cons1_aux/ qed-.
-fact liftsv_inv_nil2_aux: â\88\80f,X,Y. â¬\86*[f] X â\89¡ Y → Y = ◊ → X = ◊.
+fact liftsv_inv_nil2_aux: â\88\80f,X,Y. â¬\86*[f] X â\89\98 Y → Y = ◊ → X = ◊.
#f #X #Y * -X -Y //
#T1s #T2s #T1 #T2 #_ #_ #H destruct
qed-.
-lemma liftsv_inv_nil2: â\88\80f,X. â¬\86*[f] X â\89¡ ◊ → X = ◊.
+lemma liftsv_inv_nil2: â\88\80f,X. â¬\86*[f] X â\89\98 ◊ → X = ◊.
/2 width=5 by liftsv_inv_nil2_aux/ qed-.
-fact liftsv_inv_cons2_aux: â\88\80f:rtmap. â\88\80X,Y. â¬\86*[f] X â\89¡ Y →
+fact liftsv_inv_cons2_aux: â\88\80f:rtmap. â\88\80X,Y. â¬\86*[f] X â\89\98 Y →
∀T2,T2s. Y = T2 @ T2s →
- â\88\83â\88\83T1,T1s. â¬\86*[f] T1 â\89¡ T2 & â¬\86*[f] T1s â\89¡ T2s &
+ â\88\83â\88\83T1,T1s. â¬\86*[f] T1 â\89\98 T2 & â¬\86*[f] T1s â\89\98 T2s &
X = T1 @ T1s.
#f #X #Y * -X -Y
[ #U2 #U2s #H destruct
]
qed-.
-lemma liftsv_inv_cons2: â\88\80f:rtmap. â\88\80X,T2,T2s. â¬\86*[f] X â\89¡ T2 @ T2s →
- â\88\83â\88\83T1,T1s. â¬\86*[f] T1 â\89¡ T2 & â¬\86*[f] T1s â\89¡ T2s &
+lemma liftsv_inv_cons2: â\88\80f:rtmap. â\88\80X,T2,T2s. â¬\86*[f] X â\89\98 T2 @ T2s →
+ â\88\83â\88\83T1,T1s. â¬\86*[f] T1 â\89\98 T2 & â¬\86*[f] T1s â\89\98 T2s &
X = T1 @ T1s.
/2 width=3 by liftsv_inv_cons2_aux/ qed-.
(* Basic_1: was: lifts1_flat (left to right) *)
-lemma lifts_inv_applv1: â\88\80f:rtmap. â\88\80V1s,U1,T2. â¬\86*[f] â\92¶ V1s.U1 â\89¡ T2 →
- â\88\83â\88\83V2s,U2. â¬\86*[f] V1s â\89¡ V2s & â¬\86*[f] U1 â\89¡ U2 &
+lemma lifts_inv_applv1: â\88\80f:rtmap. â\88\80V1s,U1,T2. â¬\86*[f] â\92¶ V1s.U1 â\89\98 T2 →
+ â\88\83â\88\83V2s,U2. â¬\86*[f] V1s â\89\98 V2s & â¬\86*[f] U1 â\89\98 U2 &
T2 = Ⓐ V2s.U2.
#f #V1s elim V1s -V1s
[ /3 width=5 by ex3_2_intro, liftsv_nil/
]
qed-.
-lemma lifts_inv_applv2: â\88\80f:rtmap. â\88\80V2s,U2,T1. â¬\86*[f] T1 â\89¡ Ⓐ V2s.U2 →
- â\88\83â\88\83V1s,U1. â¬\86*[f] V1s â\89¡ V2s & â¬\86*[f] U1 â\89¡ U2 &
+lemma lifts_inv_applv2: â\88\80f:rtmap. â\88\80V2s,U2,T1. â¬\86*[f] T1 â\89\98 Ⓐ V2s.U2 →
+ â\88\83â\88\83V1s,U1. â¬\86*[f] V1s â\89\98 V2s & â¬\86*[f] U1 â\89\98 U2 &
T1 = Ⓐ V1s.U1.
#f #V2s elim V2s -V2s
[ /3 width=5 by ex3_2_intro, liftsv_nil/
(* Basic properties *********************************************************)
(* Basic_2A1: includes: liftv_total *)
-lemma liftsv_total: â\88\80f. â\88\80T1s:list term. â\88\83T2s. â¬\86*[f] T1s â\89¡ T2s.
+lemma liftsv_total: â\88\80f. â\88\80T1s:list term. â\88\83T2s. â¬\86*[f] T1s â\89\98 T2s.
#f #T1s elim T1s -T1s
[ /2 width=2 by liftsv_nil, ex_intro/
| #T1 #T1s * #T2s #HT12s
qed-.
(* Basic_1: was: lifts1_flat (right to left) *)
-lemma lifts_applv: â\88\80f:rtmap. â\88\80V1s,V2s. â¬\86*[f] V1s â\89¡ V2s →
- â\88\80T1,T2. â¬\86*[f] T1 â\89¡ T2 →
- â¬\86*[f] â\92¶ V1s.T1 â\89¡ Ⓐ V2s.T2.
+lemma lifts_applv: â\88\80f:rtmap. â\88\80V1s,V2s. â¬\86*[f] V1s â\89\98 V2s →
+ â\88\80T1,T2. â¬\86*[f] T1 â\89\98 T2 →
+ â¬\86*[f] â\92¶ V1s.T1 â\89\98 Ⓐ V2s.T2.
#f #V1s #V2s #H elim H -V1s -V2s /3 width=1 by lifts_flat/
qed.
-lemma liftsv_split_trans: â\88\80f,T1s,T2s. â¬\86*[f] T1s â\89¡ T2s →
- â\88\80f1,f2. f2 â\8a\9a f1 â\89¡ f →
- â\88\83â\88\83Ts. â¬\86*[f1] T1s â\89¡ Ts & â¬\86*[f2] Ts â\89¡ T2s.
+lemma liftsv_split_trans: â\88\80f,T1s,T2s. â¬\86*[f] T1s â\89\98 T2s →
+ â\88\80f1,f2. f2 â\8a\9a f1 â\89\98 f →
+ â\88\83â\88\83Ts. â¬\86*[f1] T1s â\89\98 Ts & â¬\86*[f2] Ts â\89\98 T2s.
#f #T1s #T2s #H elim H -T1s -T2s
[ /2 width=3 by liftsv_nil, ex2_intro/
| #T1s #T2s #T1 #T2 #HT12 #_ #IH #f1 #f2 #Hf
(* Forward lemmas with weight for terms *************************************)
(* Basic_2A1: includes: lift_fwd_tw *)
-lemma lifts_fwd_tw: â\88\80f,T1,T2. â¬\86*[f] T1 â\89¡ T2 → ♯{T1} = ♯{T2}.
+lemma lifts_fwd_tw: â\88\80f,T1,T2. â¬\86*[f] T1 â\89\98 T2 → ♯{T1} = ♯{T2}.
#f #T1 #T2 #H elim H -f -T1 -T2 normalize //
qed-.
(* Forward lemmas with weight for binders ***********************************)
-lemma liftsb_fwd_bw: â\88\80f,I1,I2. â¬\86*[f] I1 â\89¡ I2 → ♯{I1} = ♯{I2}.
+lemma liftsb_fwd_bw: â\88\80f,I1,I2. â¬\86*[f] I1 â\89\98 I2 → ♯{I1} = ♯{I2}.
#f #I1 #I2 * -I1 -I2 /2 width=2 by lifts_fwd_tw/
qed-.
(* *)
(**************************************************************************)
-include "basic_2/notation/relations/doteqsn_3.ma".
+include "basic_2/notation/relations/ideqsn_3.ma".
include "basic_2/syntax/ceq_ext.ma".
include "basic_2/relocation/lexs.ma".
interpretation
"ranged equivalence (local environment)"
- 'DotEqSn f L1 L2 = (lreq f L1 L2).
+ 'IdEqSn f L1 L2 = (lreq f L1 L2).
(* Basic properties *********************************************************)
-lemma lreq_eq_repl_back: â\88\80L1,L2. eq_repl_back â\80¦ (λf. L1 â\89\90[f] L2).
+lemma lreq_eq_repl_back: â\88\80L1,L2. eq_repl_back â\80¦ (λf. L1 â\89¡[f] L2).
/2 width=3 by lexs_eq_repl_back/ qed-.
-lemma lreq_eq_repl_fwd: â\88\80L1,L2. eq_repl_fwd â\80¦ (λf. L1 â\89\90[f] L2).
+lemma lreq_eq_repl_fwd: â\88\80L1,L2. eq_repl_fwd â\80¦ (λf. L1 â\89¡[f] L2).
/2 width=3 by lexs_eq_repl_fwd/ qed-.
-lemma sle_lreq_trans: â\88\80f2,L1,L2. L1 â\89\90[f2] L2 →
- â\88\80f1. f1 â\8a\86 f2 â\86\92 L1 â\89\90[f1] L2.
+lemma sle_lreq_trans: â\88\80f2,L1,L2. L1 â\89¡[f2] L2 →
+ â\88\80f1. f1 â\8a\86 f2 â\86\92 L1 â\89¡[f1] L2.
/2 width=3 by sle_lexs_trans/ qed-.
(* Basic_2A1: includes: lreq_refl *)
(* Basic inversion lemmas ***************************************************)
(* Basic_2A1: includes: lreq_inv_atom1 *)
-lemma lreq_inv_atom1: â\88\80f,Y. â\8b\86 â\89\90[f] Y → Y = ⋆.
+lemma lreq_inv_atom1: â\88\80f,Y. â\8b\86 â\89¡[f] Y → Y = ⋆.
/2 width=4 by lexs_inv_atom1/ qed-.
(* Basic_2A1: includes: lreq_inv_pair1 *)
-lemma lreq_inv_next1: â\88\80g,J,K1,Y. K1.â\93\98{J} â\89\90[⫯g] Y →
- â\88\83â\88\83K2. K1 â\89\90[g] K2 & Y = K2.ⓘ{J}.
+lemma lreq_inv_next1: â\88\80g,J,K1,Y. K1.â\93\98{J} â\89¡[⫯g] Y →
+ â\88\83â\88\83K2. K1 â\89¡[g] K2 & Y = K2.ⓘ{J}.
#g #J #K1 #Y #H
elim (lexs_inv_next1 … H) -H #Z #K2 #HK12 #H1 #H2 destruct
<(ceq_ext_inv_eq … H1) -Z /2 width=3 by ex2_intro/
qed-.
(* Basic_2A1: includes: lreq_inv_zero1 lreq_inv_succ1 *)
-lemma lreq_inv_push1: â\88\80g,J1,K1,Y. K1.â\93\98{J1} â\89\90[↑g] Y →
- â\88\83â\88\83J2,K2. K1 â\89\90[g] K2 & Y = K2.ⓘ{J2}.
+lemma lreq_inv_push1: â\88\80g,J1,K1,Y. K1.â\93\98{J1} â\89¡[↑g] Y →
+ â\88\83â\88\83J2,K2. K1 â\89¡[g] K2 & Y = K2.ⓘ{J2}.
#g #J1 #K1 #Y #H elim (lexs_inv_push1 … H) -H /2 width=4 by ex2_2_intro/
qed-.
(* Basic_2A1: includes: lreq_inv_atom2 *)
-lemma lreq_inv_atom2: â\88\80f,X. X â\89\90[f] ⋆ → X = ⋆.
+lemma lreq_inv_atom2: â\88\80f,X. X â\89¡[f] ⋆ → X = ⋆.
/2 width=4 by lexs_inv_atom2/ qed-.
(* Basic_2A1: includes: lreq_inv_pair2 *)
-lemma lreq_inv_next2: â\88\80g,J,X,K2. X â\89\90[⫯g] K2.ⓘ{J} →
- â\88\83â\88\83K1. K1 â\89\90[g] K2 & X = K1.ⓘ{J}.
+lemma lreq_inv_next2: â\88\80g,J,X,K2. X â\89¡[⫯g] K2.ⓘ{J} →
+ â\88\83â\88\83K1. K1 â\89¡[g] K2 & X = K1.ⓘ{J}.
#g #J #X #K2 #H
elim (lexs_inv_next2 … H) -H #Z #K1 #HK12 #H1 #H2 destruct
<(ceq_ext_inv_eq … H1) -J /2 width=3 by ex2_intro/
qed-.
(* Basic_2A1: includes: lreq_inv_zero2 lreq_inv_succ2 *)
-lemma lreq_inv_push2: â\88\80g,J2,X,K2. X â\89\90[↑g] K2.ⓘ{J2} →
- â\88\83â\88\83J1,K1. K1 â\89\90[g] K2 & X = K1.ⓘ{J1}.
+lemma lreq_inv_push2: â\88\80g,J2,X,K2. X â\89¡[↑g] K2.ⓘ{J2} →
+ â\88\83â\88\83J1,K1. K1 â\89¡[g] K2 & X = K1.ⓘ{J1}.
#g #J2 #X #K2 #H elim (lexs_inv_push2 … H) -H /2 width=4 by ex2_2_intro/
qed-.
(* Basic_2A1: includes: lreq_inv_pair *)
-lemma lreq_inv_next: â\88\80f,I1,I2,L1,L2. L1.â\93\98{I1} â\89\90[⫯f] L2.ⓘ{I2} →
- L1 â\89\90[f] L2 ∧ I1 = I2.
+lemma lreq_inv_next: â\88\80f,I1,I2,L1,L2. L1.â\93\98{I1} â\89¡[⫯f] L2.ⓘ{I2} →
+ L1 â\89¡[f] L2 ∧ I1 = I2.
#f #I1 #I2 #L1 #L2 #H elim (lexs_inv_next … H) -H
/3 width=3 by ceq_ext_inv_eq, conj/
qed-.
(* Basic_2A1: includes: lreq_inv_succ *)
-lemma lreq_inv_push: â\88\80f,I1,I2,L1,L2. L1.â\93\98{I1} â\89\90[â\86\91f] L2.â\93\98{I2} â\86\92 L1 â\89\90[f] L2.
+lemma lreq_inv_push: â\88\80f,I1,I2,L1,L2. L1.â\93\98{I1} â\89¡[â\86\91f] L2.â\93\98{I2} â\86\92 L1 â\89¡[f] L2.
#f #I1 #I2 #L1 #L2 #H elim (lexs_inv_push … H) -H /2 width=1 by conj/
qed-.
-lemma lreq_inv_tl: â\88\80f,I,L1,L2. L1 â\89\90[⫱f] L2 â\86\92 L1.â\93\98{I} â\89\90[f] L2.ⓘ{I}.
+lemma lreq_inv_tl: â\88\80f,I,L1,L2. L1 â\89¡[⫱f] L2 â\86\92 L1.â\93\98{I} â\89¡[f] L2.ⓘ{I}.
/2 width=1 by lexs_inv_tl/ qed-.
(* Basic_2A1: removed theorems 5:
(* Forward lemmas with length for local environments ************************)
(* Basic_2A1: includes: lreq_fwd_length *)
-lemma lreq_fwd_length: â\88\80f,L1,L2. L1 â\89\90[f] L2 → |L1| = |L2|.
+lemma lreq_fwd_length: â\88\80f,L1,L2. L1 â\89¡[f] L2 → |L1| = |L2|.
/2 width=4 by lexs_fwd_length/ qed-.
theorem lreq_canc_dx: ∀f. right_cancellable … (lreq f).
/3 width=3 by lexs_canc_dx, lreq_trans, lreq_sym/ qed-.
-theorem lreq_join: â\88\80f1,L1,L2. L1 â\89\90[f1] L2 â\86\92 â\88\80f2. L1 â\89\90[f2] L2 →
- â\88\80f. f1 â\8b\93 f2 â\89¡ f â\86\92 L1 â\89\90[f] L2.
+theorem lreq_join: â\88\80f1,L1,L2. L1 â\89¡[f1] L2 â\86\92 â\88\80f2. L1 â\89¡[f2] L2 →
+ â\88\80f. f1 â\8b\93 f2 â\89\98 f â\86\92 L1 â\89¡[f] L2.
/2 width=5 by lexs_join/ qed-.
-theorem lreq_meet: â\88\80f1,L1,L2. L1 â\89\90[f1] L2 â\86\92 â\88\80f2. L1 â\89\90[f2] L2 →
- â\88\80f. f1 â\8b\92 f2 â\89¡ f â\86\92 L1 â\89\90[f] L2.
+theorem lreq_meet: â\88\80f1,L1,L2. L1 â\89¡[f1] L2 â\86\92 â\88\80f2. L1 â\89¡[f2] L2 →
+ â\88\80f. f1 â\8b\92 f2 â\89\98 f â\86\92 L1 â\89¡[f] L2.
/2 width=5 by lexs_meet/ qed-.
(* Basic_1: includes: pr1_pr0 *)
definition cprs: relation4 genv lenv term term ≝
- λG. LTC … (cpr G).
+ λG. CTC … (cpr G).
interpretation "context-sensitive parallel computation (term)"
'PRedStar G L T1 T2 = (cprs G L T1 T2).
normalize /2 width=3 by TC_strap/ qed-.
lemma lsubr_cprs_trans: ∀G. lsub_trans … (cprs G) lsubr.
-/3 width=5 by lsubr_cpr_trans, LTC_lsub_trans/
+/3 width=5 by lsubr_cpr_trans, CTC_lsub_trans/
qed-.
(* Basic_1: was: pr3_pr1 *)
/3 width=3 by cprs_strap1, cpr_cprs, cpr_pair_sn, cpr_flat/
qed.
-lemma cprs_zeta: â\88\80G,L,V,T1,T,T2. â¬\86[0, 1] T2 â\89¡ T →
+lemma cprs_zeta: â\88\80G,L,V,T1,T,T2. â¬\86[0, 1] T2 â\89\98 T →
⦃G, L.ⓓV⦄ ⊢ T1 ➡* T → ⦃G, L⦄ ⊢ +ⓓV.T1 ➡* T2.
#G #L #V #T1 #T #T2 #HT2 #H @(cprs_ind_dx … H) -T1
/3 width=3 by cprs_strap2, cpr_cprs, cpr_bind, cpr_zeta/
qed.
lemma cprs_theta_dx: ∀a,G,L,V1,V,V2,W1,W2,T1,T2.
- â¦\83G, Lâ¦\84 â\8a¢ V1 â\9e¡ V â\86\92 â¬\86[0, 1] V â\89¡ V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 →
+ â¦\83G, Lâ¦\84 â\8a¢ V1 â\9e¡ V â\86\92 â¬\86[0, 1] V â\89\98 V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 →
⦃G, L⦄ ⊢ W1 ➡ W2 → ⦃G, L⦄ ⊢ ⓐV1.ⓓ{a}W1.T1 ➡* ⓓ{a}W2.ⓐV2.T2.
#a #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 * -T2
/4 width=9 by cprs_strap1, cpr_cprs, cprs_bind_dx, cprs_flat_dx, cpr_theta/
qed.
theorem cprs_theta_rc: ∀a,G,L,V1,V,V2,W1,W2,T1,T2.
- â¦\83G, Lâ¦\84 â\8a¢ V1 â\9e¡ V â\86\92 â¬\86[0, 1] V â\89¡ V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 →
+ â¦\83G, Lâ¦\84 â\8a¢ V1 â\9e¡ V â\86\92 â¬\86[0, 1] V â\89\98 V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 →
⦃G, L⦄ ⊢ W1 ➡* W2 → ⦃G, L⦄ ⊢ ⓐV1.ⓓ{a}W1.T1 ➡* ⓓ{a}W2.ⓐV2.T2.
#a #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 #HT12 #H @(cprs_ind … H) -W2
/3 width=5 by cprs_trans, cprs_theta_dx, cprs_bind_dx/
qed.
theorem cprs_theta: ∀a,G,L,V1,V,V2,W1,W2,T1,T2.
- â¬\86[0, 1] V â\89¡ V2 → ⦃G, L⦄ ⊢ W1 ➡* W2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 →
+ â¬\86[0, 1] V â\89\98 V2 → ⦃G, L⦄ ⊢ W1 ➡* W2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ➡* T2 →
⦃G, L⦄ ⊢ V1 ➡* V → ⦃G, L⦄ ⊢ ⓐV1.ⓓ{a}W1.T1 ➡* ⓓ{a}W2.ⓐV2.T2.
#a #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV2 #HW12 #HT12 #H @(cprs_ind_dx … H) -V1
/3 width=3 by cprs_trans, cprs_theta_rc, cprs_flat_dx/
U2 = ⓐV2. T2
| ∃∃a,W,T. ⦃G, L⦄ ⊢ T1 ➡* ⓛ{a}W.T &
⦃G, L⦄ ⊢ ⓓ{a}ⓝW.V1.T ➡* U2
- | â\88\83â\88\83a,V0,V2,V,T. â¦\83G, Lâ¦\84 â\8a¢ V1 â\9e¡* V0 & â¬\86[0,1] V0 â\89¡ V2 &
+ | â\88\83â\88\83a,V0,V2,V,T. â¦\83G, Lâ¦\84 â\8a¢ V1 â\9e¡* V0 & â¬\86[0,1] V0 â\89\98 V2 &
⦃G, L⦄ ⊢ T1 ➡* ⓓ{a}V.T &
⦃G, L⦄ ⊢ ⓓ{a}V.ⓐV2.T ➡* U2.
#G #L #V1 #T1 #U2 #H @(cprs_ind … H) -U2 /3 width=5 by or3_intro0, ex3_2_intro/
(* Basic_1: was only: pr3_pr2_pr3_t pr3_wcpr0_t *)
lemma lpr_cprs_trans: ∀G. b_rs_transitive … (cpr G) (λ_. lpr G).
-#G @b_c_trans_LTC1 /2 width=3 by lpr_cpr_trans/ (**) (* full auto fails *)
+#G @b_c_trans_CTC1 /2 width=3 by lpr_cpr_trans/ (**) (* full auto fails *)
qed-.
(* Basic_1: was: pr3_strip *)
(* Note: apparently this was missing in basic_1 *)
lemma cprs_delta: ∀G,L,K,V,V2,i.
- â¬\87[i] L â\89¡ K.ⓓV → ⦃G, K⦄ ⊢ V ➡* V2 →
- â\88\80W2. â¬\86[0, i + 1] V2 â\89¡ W2 → ⦃G, L⦄ ⊢ #i ➡* W2.
+ â¬\87[i] L â\89\98 K.ⓓV → ⦃G, K⦄ ⊢ V ➡* V2 →
+ â\88\80W2. â¬\86[0, i + 1] V2 â\89\98 W2 → ⦃G, L⦄ ⊢ #i ➡* W2.
#G #L #K #V #V2 #i #HLK #H elim H -V2 [ /3 width=6 by cpr_cprs, cpr_delta/ ]
#V1 #V2 #_ #HV12 #IHV1 #W2 #HVW2
lapply (drop_fwd_drop2 … HLK) -HLK #HLK
(* Basic_1: was: pr3_gen_lref *)
lemma cprs_inv_lref1: ∀G,L,T2,i. ⦃G, L⦄ ⊢ #i ➡* T2 →
T2 = #i ∨
- â\88\83â\88\83K,V1,T1. â¬\87[i] L â\89¡ K.ⓓV1 & ⦃G, K⦄ ⊢ V1 ➡* T1 &
- â¬\86[0, i + 1] T1 â\89¡ T2.
+ â\88\83â\88\83K,V1,T1. â¬\87[i] L â\89\98 K.ⓓV1 & ⦃G, K⦄ ⊢ V1 ➡* T1 &
+ â¬\86[0, i + 1] T1 â\89\98 T2.
#G #L #T2 #i #H @(cprs_ind … H) -T2 /2 width=1 by or_introl/
#T #T2 #_ #HT2 *
[ #H destruct
(* Basic_1: was: pr3_lift *)
lemma cprs_lift: ∀G. d_liftable (cprs G).
-/3 width=10 by d_liftable_LTC, cpr_lift/ qed.
+/3 width=10 by d_liftable_CTC, cpr_lift/ qed.
(* Basic_1: was: pr3_gen_lift *)
lemma cprs_inv_lift1: ∀G. d_deliftable_sn (cprs G).
-/3 width=6 by d_deliftable_sn_LTC, cpr_inv_lift1/
+/3 width=6 by d_deliftable_sn_CTC, cpr_inv_lift1/
qed-.
(* UNCOUNTED CONTEXT-SENSITIVE PARALLEL RT-COMPUTATION FOR TERMS ************)
definition cpxs: sh → relation4 genv lenv term term ≝
- λh,G. LTC … (cpx h G).
+ λh,G. CTC … (cpx h G).
interpretation "uncounted context-sensitive parallel rt-computation (term)"
'PRedTyStar h G L T1 T2 = (cpxs h G L T1 T2).
/3 width=3 by cpxs_strap1, cpx_pair_sn/
qed.
-lemma cpxs_zeta: â\88\80h,G,L,V,T1,T,T2. â¬\86*[1] T2 â\89¡ T →
+lemma cpxs_zeta: â\88\80h,G,L,V,T1,T,T2. â¬\86*[1] T2 â\89\98 T →
⦃G, L.ⓓV⦄ ⊢ T1 ⬈*[h] T → ⦃G, L⦄ ⊢ +ⓓV.T1 ⬈*[h] T2.
#h #G #L #V #T1 #T #T2 #HT2 #H @(cpxs_ind_dx … H) -T1
/3 width=3 by cpxs_strap2, cpx_cpxs, cpx_bind, cpx_zeta/
qed.
lemma cpxs_theta_dx: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2.
- â¦\83G, Lâ¦\84 â\8a¢ V1 â¬\88[h] V â\86\92 â¬\86*[1] V â\89¡ V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ⬈*[h] T2 →
+ â¦\83G, Lâ¦\84 â\8a¢ V1 â¬\88[h] V â\86\92 â¬\86*[1] V â\89\98 V2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ⬈*[h] T2 →
⦃G, L⦄ ⊢ W1 ⬈[h] W2 → ⦃G, L⦄ ⊢ ⓐV1.ⓓ{p}W1.T1 ⬈*[h] ⓓ{p}W2.ⓐV2.T2.
#h #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 * -T2
/4 width=9 by cpx_cpxs, cpxs_strap1, cpxs_bind_dx, cpxs_flat_dx, cpx_theta/
qed.
theorem cpxs_theta_rc: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2.
- â¦\83G, Lâ¦\84 â\8a¢ V1 â¬\88[h] V â\86\92 â¬\86*[1] V â\89¡ V2 →
+ â¦\83G, Lâ¦\84 â\8a¢ V1 â¬\88[h] V â\86\92 â¬\86*[1] V â\89\98 V2 →
⦃G, L.ⓓW1⦄ ⊢ T1 ⬈*[h] T2 → ⦃G, L⦄ ⊢ W1 ⬈*[h] W2 →
⦃G, L⦄ ⊢ ⓐV1.ⓓ{p}W1.T1 ⬈*[h] ⓓ{p}W2.ⓐV2.T2.
#h #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 #HT12 #H @(cpxs_ind … H) -W2
qed.
theorem cpxs_theta: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2.
- â¬\86*[1] V â\89¡ V2 → ⦃G, L⦄ ⊢ W1 ⬈*[h] W2 →
+ â¬\86*[1] V â\89\98 V2 → ⦃G, L⦄ ⊢ W1 ⬈*[h] W2 →
⦃G, L.ⓓW1⦄ ⊢ T1 ⬈*[h] T2 → ⦃G, L⦄ ⊢ V1 ⬈*[h] V →
⦃G, L⦄ ⊢ ⓐV1.ⓓ{p}W1.T1 ⬈*[h] ⓓ{p}W2.ⓐV2.T2.
#h #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV2 #HW12 #HT12 #H @(TC_ind_dx … V1 H) -V1
∨∨ ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ⬈*[h] V2 & ⦃G, L⦄ ⊢ T1 ⬈*[h] T2 &
U2 = ⓐV2.T2
| ∃∃p,W,T. ⦃G, L⦄ ⊢ T1 ⬈*[h] ⓛ{p}W.T & ⦃G, L⦄ ⊢ ⓓ{p}ⓝW.V1.T ⬈*[h] U2
- | â\88\83â\88\83p,V0,V2,V,T. â¦\83G, Lâ¦\84 â\8a¢ V1 â¬\88*[h] V0 & â¬\86*[1] V0 â\89¡ V2 &
+ | â\88\83â\88\83p,V0,V2,V,T. â¦\83G, Lâ¦\84 â\8a¢ V1 â¬\88*[h] V0 & â¬\86*[1] V0 â\89\98 V2 &
⦃G, L⦄ ⊢ T1 ⬈*[h] ⓓ{p}V.T & ⦃G, L⦄ ⊢ ⓓ{p}V.ⓐV2.T ⬈*[h] U2.
#h #G #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 [ /3 width=5 by or3_intro0, ex3_2_intro/ ]
#U #U2 #_ #HU2 * *
(* Advanced properties ******************************************************)
lemma cpxs_delta: ∀h,I,G,K,V1,V2. ⦃G, K⦄ ⊢ V1 ⬈*[h] V2 →
- â\88\80W2. â¬\86*[1] V2 â\89¡ W2 → ⦃G, K.ⓑ{I}V1⦄ ⊢ #0 ⬈*[h] W2.
+ â\88\80W2. â¬\86*[1] V2 â\89\98 W2 → ⦃G, K.ⓑ{I}V1⦄ ⊢ #0 ⬈*[h] W2.
#h #I #G #K #V1 #V2 #H @(cpxs_ind … H) -V2
[ /3 width=3 by cpx_cpxs, cpx_delta/
| #V #V2 #_ #HV2 #IH #W2 #HVW2
qed.
lemma cpxs_lref: ∀h,I,G,K,T,i. ⦃G, K⦄ ⊢ #i ⬈*[h] T →
- â\88\80U. â¬\86*[1] T â\89¡ U → ⦃G, K.ⓘ{I}⦄ ⊢ #⫯i ⬈*[h] U.
+ â\88\80U. â¬\86*[1] T â\89\98 U → ⦃G, K.ⓘ{I}⦄ ⊢ #⫯i ⬈*[h] U.
#h #I #G #K #T #i #H @(cpxs_ind … H) -T
[ /3 width=3 by cpx_cpxs, cpx_lref/
| #T0 #T #_ #HT2 #IH #U #HTU
(* Basic_2A1: was: cpxs_delta *)
lemma cpxs_delta_drops: ∀h,I,G,L,K,V1,V2,i.
- â¬\87*[i] L â\89¡ K.ⓑ{I}V1 → ⦃G, K⦄ ⊢ V1 ⬈*[h] V2 →
- â\88\80W2. â¬\86*[⫯i] V2 â\89¡ W2 → ⦃G, L⦄ ⊢ #i ⬈*[h] W2.
+ â¬\87*[i] L â\89\98 K.ⓑ{I}V1 → ⦃G, K⦄ ⊢ V1 ⬈*[h] V2 →
+ â\88\80W2. â¬\86*[⫯i] V2 â\89\98 W2 → ⦃G, L⦄ ⊢ #i ⬈*[h] W2.
#h #I #G #L #K #V1 #V2 #i #HLK #H @(cpxs_ind … H) -V2
[ /3 width=7 by cpx_cpxs, cpx_delta_drops/
| #V #V2 #_ #HV2 #IH #W2 #HVW2
lemma cpxs_inv_zero1: ∀h,G,L,T2. ⦃G, L⦄ ⊢ #0 ⬈*[h] T2 →
T2 = #0 ∨
- â\88\83â\88\83I,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88*[h] V2 & â¬\86*[1] V2 â\89¡ T2 &
+ â\88\83â\88\83I,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88*[h] V2 & â¬\86*[1] V2 â\89\98 T2 &
L = K.ⓑ{I}V1.
#h #G #L #T2 #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/
#T #T2 #_ #HT2 *
lemma cpxs_inv_lref1: ∀h,G,L,T2,i. ⦃G, L⦄ ⊢ #⫯i ⬈*[h] T2 →
T2 = #(⫯i) ∨
- â\88\83â\88\83I,K,T. â¦\83G, Kâ¦\84 â\8a¢ #i â¬\88*[h] T & â¬\86*[1] T â\89¡ T2 & L = K.ⓘ{I}.
+ â\88\83â\88\83I,K,T. â¦\83G, Kâ¦\84 â\8a¢ #i â¬\88*[h] T & â¬\86*[1] T â\89\98 T2 & L = K.ⓘ{I}.
#h #G #L #T2 #i #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/
#T #T2 #_ #HT2 *
[ #H destruct
(* Basic_2A1: was: cpxs_inv_lref1 *)
lemma cpxs_inv_lref1_drops: ∀h,G,L,T2,i. ⦃G, L⦄ ⊢ #i ⬈*[h] T2 →
T2 = #i ∨
- â\88\83â\88\83I,K,V1,T1. â¬\87*[i] L â\89¡ K.ⓑ{I}V1 & ⦃G, K⦄ ⊢ V1 ⬈*[h] T1 &
- â¬\86*[⫯i] T1 â\89¡ T2.
+ â\88\83â\88\83I,K,V1,T1. â¬\87*[i] L â\89\98 K.ⓑ{I}V1 & ⦃G, K⦄ ⊢ V1 ⬈*[h] T1 &
+ â¬\86*[⫯i] T1 â\89\98 T2.
#h #G #L #T2 #i #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/
#T #T2 #_ #HT2 *
[ #H destruct
(* Basic_2A1: includes: cpxs_lift *)
lemma cpxs_lifts_sn: ∀h,G. d_liftable2_sn … lifts (cpxs h G).
-/3 width=10 by cpx_lifts_sn, cpxs_strap1, d2_liftable_sn_LTC/ qed-.
+/3 width=10 by cpx_lifts_sn, cpxs_strap1, d2_liftable_sn_CTC/ qed-.
lemma cpxs_lifts_bi: ∀h,G. d_liftable2_bi … lifts (cpxs h G).
/3 width=12 by cpxs_lifts_sn, d_liftable2_sn_bi, lifts_mono/ qed-.
(* Basic_2A1: includes: cpxs_inv_lift1 *)
lemma cpxs_inv_lifts_sn: ∀h,G. d_deliftable2_sn … lifts (cpxs h G).
-/3 width=6 by d2_deliftable_sn_LTC, cpx_inv_lifts_sn/ qed-.
+/3 width=6 by d2_deliftable_sn_CTC, cpx_inv_lifts_sn/ qed-.
lemma cpxs_inv_lifts_bi: ∀h,G. d_deliftable2_bi … lifts (cpxs h G).
/3 width=12 by cpxs_inv_lifts_sn, d_deliftable2_sn_bi, lifts_inj/ qed-.
(* Properties with uncounted parallel rt-transition on referred entries *****)
lemma lfpx_cpxs_conf: ∀h,G. s_r_confluent1 … (cpxs h G) (lfpx h G).
-/3 width=5 by lfpx_cpx_conf, s_r_conf1_LTC1/ qed-.
+/3 width=5 by lfpx_cpx_conf, s_r_conf1_CTC1/ qed-.
lemma lfpx_cpx_trans: ∀h,G. s_r_transitive … (cpx h G) (lfpx h G).
#h #G #L2 #T1 #T2 #H @(cpx_ind … H) -G -L2 -T1 -T2 //
qed.
lemma lfpx_cpxs_trans: ∀h,G. s_rs_transitive … (cpx h G) (lfpx h G).
-/3 width=6 by lfpx_cpx_conf, lfpx_cpx_trans, s_r_trans_LTC1/
+/3 width=6 by lfpx_cpx_conf, lfpx_cpx_trans, s_r_trans_CTC1/
qed-.
(* Advanced properties ******************************************************)
qed-.
lemma lpx_cpxs_trans: ∀h,G. s_rs_transitive … (cpx h G) (λ_.lpx h G).
-#h #G @s_r_trans_LTC1 /2 width=3 by lpx_cpx_trans/ (**) (* full auto fails *)
+#h #G @s_r_trans_CTC1 /2 width=3 by lpx_cpx_trans/ (**) (* full auto fails *)
qed-.
(* Properties with restricted refinement for local environments *************)
lemma lsubr_cpxs_trans: ∀h,G. lsub_trans … (cpxs h G) lsubr.
-/3 width=5 by lsubr_cpx_trans, LTC_lsub_trans/
+/3 width=5 by lsubr_cpx_trans, CTC_lsub_trans/
qed-.
(* Note: probably this is an inversion lemma *)
(* Basic_2A1: was: cpxs_fwd_delta *)
-lemma cpxs_fwd_delta_drops: â\88\80h,o,I,G,L,K,V1,i. â¬\87*[i] L â\89¡ K.ⓑ{I}V1 →
- â\88\80V2. â¬\86*[⫯i] V1 â\89¡ V2 →
+lemma cpxs_fwd_delta_drops: â\88\80h,o,I,G,L,K,V1,i. â¬\87*[i] L â\89\98 K.ⓑ{I}V1 →
+ â\88\80V2. â¬\86*[⫯i] V1 â\89\98 V2 →
∀U. ⦃G, L⦄ ⊢ #i ⬈*[h] U →
#i ⩳[h, o] U ∨ ⦃G, L⦄ ⊢ V2 ⬈*[h] U.
#h #o #I #G #L #K #V1 #i #HLK #V2 #HV12 #U #H
qed-.
lemma cpxs_fwd_theta: ∀h,o,p,G,L,V1,V,T,U. ⦃G, L⦄ ⊢ ⓐV1.ⓓ{p}V.T ⬈*[h] U →
- â\88\80V2. â¬\86*[1] V1 â\89¡ V2 → ⓐV1.ⓓ{p}V.T ⩳[h, o] U ∨
+ â\88\80V2. â¬\86*[1] V1 â\89\98 V2 → ⓐV1.ⓓ{p}V.T ⩳[h, o] U ∨
⦃G, L⦄ ⊢ ⓓ{p}V.ⓐV2.T ⬈*[h] U.
#h #o #p #G #L #V1 #V #T #U #H #V2 #HV12
elim (cpxs_inv_appl1 … H) -H *
qed-.
(* Basic_2A1: was: cpxs_fwd_delta_vector *)
-lemma cpxs_fwd_delta_drops_vector: â\88\80h,o,I,G,L,K,V1,i. â¬\87*[i] L â\89¡ K.ⓑ{I}V1 →
- â\88\80V2. â¬\86*[⫯i] V1 â\89¡ V2 →
+lemma cpxs_fwd_delta_drops_vector: â\88\80h,o,I,G,L,K,V1,i. â¬\87*[i] L â\89\98 K.ⓑ{I}V1 →
+ â\88\80V2. â¬\86*[⫯i] V1 â\89\98 V2 →
∀Vs,U. ⦃G, L⦄ ⊢ ⒶVs.#i ⬈*[h] U →
ⒶVs.#i ⩳[h, o] U ∨ ⦃G, L⦄ ⊢ ⒶVs.V2 ⬈*[h] U.
#h #o #I #G #L #K #V1 #i #HLK #V2 #HV12 #Vs elim Vs -Vs /2 width=5 by cpxs_fwd_delta_drops/
qed-.
(* Basic_1: was just: pr3_iso_appls_abbr *)
-lemma cpxs_fwd_theta_vector: â\88\80h,o,G,L,V1b,V2b. â¬\86*[1] V1b â\89¡ V2b →
+lemma cpxs_fwd_theta_vector: â\88\80h,o,G,L,V1b,V2b. â¬\86*[1] V1b â\89\98 V2b →
∀p,V,T,U. ⦃G, L⦄ ⊢ ⒶV1b.ⓓ{p}V.T ⬈*[h] U →
ⒶV1b.ⓓ{p}V.T ⩳[h, o] U ∨ ⦃G, L⦄ ⊢ ⓓ{p}V.ⒶV2b.T ⬈*[h] U.
#h #o #G #L #V1b #V2b * -V1b -V2b /3 width=1 by or_intror/
(* Basic_1: was just: sn3_abbr *)
(* Basic_2A1: was: csx_lref_bind *)
-lemma csx_lref_pair: â\88\80h,o,I,G,L,K,V,i. â¬\87*[i] L â\89¡ K.ⓑ{I}V →
+lemma csx_lref_pair: â\88\80h,o,I,G,L,K,V,i. â¬\87*[i] L â\89\98 K.ⓑ{I}V →
⦃G, K⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃#i⦄.
#h #o #I #G #L #K #V #i #HLK #HV
@csx_intro #X #H #Hi elim (cpx_inv_lref1_drops … H) -H
(* Basic_1: was: sn3_gen_def *)
(* Basic_2A1: was: csx_inv_lref_bind *)
-lemma csx_inv_lref_pair: â\88\80h,o,I,G,L,K,V,i. â¬\87*[i] L â\89¡ K.ⓑ{I}V →
+lemma csx_inv_lref_pair: â\88\80h,o,I,G,L,K,V,i. â¬\87*[i] L â\89\98 K.ⓑ{I}V →
⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃#i⦄ → ⦃G, K⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄.
#h #o #I #G #L #K #V #i #HLK #Hi
elim (lifts_total V (𝐔❴⫯i❵))
qed-.
lemma csx_inv_lref: ∀h,o,G,L,i. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃#i⦄ →
- â\88¨â\88¨ â¬\87*[â\92», ð\9d\90\94â\9d´iâ\9dµ] L â\89¡ ⋆
- | â\88\83â\88\83I,K. â¬\87*[i] L â\89¡ K.ⓤ{I}
- | â\88\83â\88\83I,K,V. â¬\87*[i] L â\89¡ K.ⓑ{I}V & ⦃G, K⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄.
+ â\88¨â\88¨ â¬\87*[â\92», ð\9d\90\94â\9d´iâ\9dµ] L â\89\98 ⋆
+ | â\88\83â\88\83I,K. â¬\87*[i] L â\89\98 K.ⓤ{I}
+ | â\88\83â\88\83I,K,V. â¬\87*[i] L â\89\98 K.ⓑ{I}V & ⦃G, K⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄.
#h #o #G #L #i #H elim (drops_F_uni L i) /2 width=1 by or3_intro0/
* * /4 width=9 by csx_inv_lref_pair, ex2_3_intro, ex1_2_intro, or3_intro2, or3_intro1/
qed-.
]
qed.
-lemma csx_applv_delta: â\88\80h,o,I,G,L,K,V1,i. â¬\87*[i] L â\89¡ K.ⓑ{I}V1 →
- â\88\80V2. â¬\86*[⫯i] V1 â\89¡ V2 →
+lemma csx_applv_delta: â\88\80h,o,I,G,L,K,V1,i. â¬\87*[i] L â\89\98 K.ⓑ{I}V1 →
+ â\88\80V2. â¬\86*[⫯i] V1 â\89\98 V2 →
∀Vs. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⒶVs.V2⦄ → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⒶVs.#i⦄.
#h #o #I #G #L #K #V1 #i #HLK #V2 #HV12 #Vs elim Vs -Vs
[ /4 width=11 by csx_inv_lifts, csx_lref_pair, drops_isuni_fwd_drop2/
qed.
(* Basic_1: was just: sn3_appls_abbr *)
-lemma csx_applv_theta: â\88\80h,o,p,G,L,V1b,V2b. â¬\86*[1] V1b â\89¡ V2b →
+lemma csx_applv_theta: â\88\80h,o,p,G,L,V1b,V2b. â¬\86*[1] V1b â\89\98 V2b →
∀V,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓓ{p}V.ⒶV2b.T⦄ →
⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⒶV1b.ⓓ{p}V.T⦄.
#h #o #p #G #L #V1b #V2b * -V1b -V2b /2 width=1 by/
]
qed.
-fact csx_appl_theta_aux: â\88\80h,o,p,G,L,U. â¦\83G, Lâ¦\84 â\8a¢ â¬\88*[h, o] ð\9d\90\92â¦\83Uâ¦\84 â\86\92 â\88\80V1,V2. â¬\86*[1] V1 â\89¡ V2 →
+fact csx_appl_theta_aux: â\88\80h,o,p,G,L,U. â¦\83G, Lâ¦\84 â\8a¢ â¬\88*[h, o] ð\9d\90\92â¦\83Uâ¦\84 â\86\92 â\88\80V1,V2. â¬\86*[1] V1 â\89\98 V2 →
∀V,T. U = ⓓ{p}V.ⓐV2.T → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓐV1.ⓓ{p}V.T⦄.
#h #o #p #G #L #X #H @(csx_ind_cpxs … H) -X
#X #HVT #IHVT #V1 #V2 #HV12 #V #T #H destruct
qed-.
lemma csx_appl_theta: ∀h,o,p,G,L,V,V2,T. ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓓ{p}V.ⓐV2.T⦄ →
- â\88\80V1. â¬\86*[1] V1 â\89¡ V2 → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓐV1.ⓓ{p}V.T⦄.
+ â\88\80V1. â¬\86*[1] V1 â\89\98 V2 → ⦃G, L⦄ ⊢ ⬈*[h, o] 𝐒⦃ⓐV1.ⓓ{p}V.T⦄.
/2 width=5 by csx_appl_theta_aux/ qed.
/2 width=1 by tc_lfxs_pair_refl/ qed.
lemma lfpxs_cpx_trans: ∀h,G. s_r_transitive … (cpx h G) (lfpxs h G).
-#h #G @s_r_trans_LTC2 @lfpx_cpxs_trans (**) (* auto fails *)
+#h #G @s_r_trans_CTC2 @lfpx_cpxs_trans (**) (* auto fails *)
qed-.
-(* Note: lfpxs_cpx_conf does not hold, thus we cannot invoke s_r_trans_LTC1 *)
+(* Note: lfpxs_cpx_conf does not hold, thus we cannot invoke s_r_trans_CTC1 *)
lemma lfpxs_cpxs_trans: ∀h,G. s_rs_transitive … (cpx h G) (lfpxs h G).
-#h #G @s_r_to_s_rs_trans @s_r_trans_LTC2
+#h #G @s_r_to_s_rs_trans @s_r_trans_CTC2
@s_rs_trans_TC1 /2 width=3 by lfpx_cpxs_trans/ (**) (* full auto too slow *)
qed-.
∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ⬈*[h] V2 & ⦃G, L.ⓓV1⦄ ⊢ T1 ⬈*[h] T2 &
U2 = ⓓ{p}V2.T2
) ∨
- â\88\83â\88\83T2. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â¬\88*[h] T2 & â¬\86*[1] U2 â\89¡ T2 & p = true.
+ â\88\83â\88\83T2. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â¬\88*[h] T2 & â¬\86*[1] U2 â\89\98 T2 & p = true.
#h #p #G #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 /3 width=5 by ex3_2_intro, or_introl/
#U0 #U2 #_ #HU02 * *
[ #V0 #T0 #HV10 #HT10 #H destruct
(* Basic_2A1: uses: drop_lpxs_trans *)
lemma drops_lfpxs_trans: ∀h,G. tc_dedropable_sn (cpx h G).
-/3 width=5 by drops_lfpx_trans, dedropable_sn_LTC/ qed-.
+/3 width=5 by drops_lfpx_trans, dedropable_sn_CTC/ qed-.
(* Inversion lemmas with generic slicing for local environments *************)
(* Basic_2A1: uses: lpxs_drop_conf *)
lemma lfpxs_drops_conf: ∀h,G. tc_dropable_sn (cpx h G).
-/3 width=5 by lfpx_drops_conf, dropable_sn_LTC/ qed-.
+/3 width=5 by lfpx_drops_conf, dropable_sn_CTC/ qed-.
(* Basic_2A1: uses: lpxs_drop_trans_O1 *)
lemma lfpxs_drops_trans: ∀h,G. tc_dropable_dx (cpx h G).
-/3 width=5 by lfpx_drops_trans, dropable_dx_LTC/ qed-.
+/3 width=5 by lfpx_drops_trans, dropable_dx_CTC/ qed-.
/2 width=1 by tc_lfxs_lex/ qed.
lemma lfpxs_lpxs_lfeq: ∀h,G,L1,L. ⦃G, L1⦄ ⊢ ⬈*[h] L →
- â\88\80L2,T. L â\89\90[T] L2 → ⦃G, L1⦄ ⊢ ⬈*[h, T] L2.
+ â\88\80L2,T. L â\89¡[T] L2 → ⦃G, L1⦄ ⊢ ⬈*[h, T] L2.
/2 width=3 by tc_lfxs_lex_lfeq/ qed.
(* Inversion lemmas with uncounted parallel rt-computation for local envs ***)
lemma lfpxs_inv_lpxs_lfeq: ∀h,G,L1,L2,T. ⦃G, L1⦄ ⊢ ⬈*[h, T] L2 →
- â\88\83â\88\83L. â¦\83G, L1â¦\84 â\8a¢ â¬\88*[h] L & L â\89\90[T] L2.
+ â\88\83â\88\83L. â¦\83G, L1â¦\84 â\8a¢ â¬\88*[h] L & L â\89¡[T] L2.
/3 width=5 by lfpx_fsge_comp, lpx_cpxs_trans, lfeq_cpx_trans, tc_lfxs_inv_lex_lfeq/ qed-.
(* Basic_2A1: uses: lsx_lref_be *)
lemma lfsx_lref_pair_drops: ∀h,o,G,K,V. ⦃G, K⦄ ⊢ ⬈*[h, o] 𝐒⦃V⦄ → G ⊢ ⬈*[h, o, V] 𝐒⦃K⦄ →
- â\88\80I,i,L. â¬\87*[i] L â\89¡ K.ⓑ{I}V → G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄.
+ â\88\80I,i,L. â¬\87*[i] L â\89\98 K.ⓑ{I}V → G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄.
#h #o #G #K #V #HV #HK #I #i elim i -i
[ #L #H >(drops_fwd_isid … H) -H /2 width=3 by lfsx_pair_lpxs/
| #i #IH #L #H
(* Advanced properties ******************************************************)
(* Basic_2A1: uses: lsx_lref_free *)
-lemma lfsx_lref_atom: â\88\80h,o,G,L,i. â¬\87*[â\92», ð\9d\90\94â\9d´iâ\9dµ] L â\89¡ ⋆ → G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄.
+lemma lfsx_lref_atom: â\88\80h,o,G,L,i. â¬\87*[â\92», ð\9d\90\94â\9d´iâ\9dµ] L â\89\98 ⋆ → G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄.
#h #o #G #L1 #i #HL1
@(lfsx_lifts … (#0) … HL1) -HL1 //
qed.
(* Basic_2A1: uses: lsx_lref_skip *)
-lemma lfsx_lref_unit: â\88\80h,o,I,G,L,K,i. â¬\87*[i] L â\89¡ K.ⓤ{I} → G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄.
+lemma lfsx_lref_unit: â\88\80h,o,I,G,L,K,i. â¬\87*[i] L â\89\98 K.ⓤ{I} → G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄.
#h #o #I #G #L1 #K1 #i #HL1
@(lfsx_lifts … (#0) … HL1) -HL1 //
qed.
(* Basic_2A1: uses: lsx_fwd_lref_be *)
lemma lfsx_fwd_lref_pair: ∀h,o,G,L,i. G ⊢ ⬈*[h, o, #i] 𝐒⦃L⦄ →
- â\88\80I,K,V. â¬\87*[i] L â\89¡ K.ⓑ{I}V → G ⊢ ⬈*[h, o, V] 𝐒⦃K⦄.
+ â\88\80I,K,V. â¬\87*[i] L â\89\98 K.ⓑ{I}V → G ⊢ ⬈*[h, o, V] 𝐒⦃K⦄.
#h #o #G #L #i #HL #I #K #V #HLK
lapply (lfsx_inv_lifts … HL … HLK … (#0) ?) -L
/2 width=2 by lfsx_fwd_pair/
(* Properties on context-sensitive parallel computation for terms ***********)
lemma lprs_cpr_trans: ∀G. b_c_transitive … (cpr G) (λ_. lprs G).
-/3 width=5 by b_c_trans_LTC2, lpr_cprs_trans/ qed-.
+/3 width=5 by b_c_trans_CTC2, lpr_cprs_trans/ qed-.
(* Basic_1: was just: pr3_pr3_pr3_t *)
-(* Note: alternative proof /3 width=5 by s_r_trans_LTC1, lprs_cpr_trans/ *)
+(* Note: alternative proof /3 width=5 by s_r_trans_CTC1, lprs_cpr_trans/ *)
lemma lprs_cprs_trans: ∀G. b_rs_transitive … (cpr G) (λ_. lprs G).
-#G @b_c_to_b_rs_trans @b_c_trans_LTC2
+#G @b_c_to_b_rs_trans @b_c_trans_CTC2
@b_rs_trans_TC1 /2 width=3 by lpr_cprs_trans/ (**) (* full auto too slow *)
qed-.
∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡* V2 & ⦃G, L.ⓓV1⦄ ⊢ T1 ➡* T2 &
U2 = ⓓ{a}V2.T2
) ∨
- â\88\83â\88\83T2. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â\9e¡* T2 & â¬\86[0, 1] U2 â\89¡ T2 & a = true.
+ â\88\83â\88\83T2. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â\9e¡* T2 & â¬\86[0, 1] U2 â\89\98 T2 & a = true.
#a #G #L #V1 #T1 #U2 #H @(cprs_ind … H) -U2 /3 width=5 by ex3_2_intro, or_introl/
#U0 #U2 #_ #HU02 * *
[ #V0 #T0 #HV10 #HT10 #H destruct
(* Basic_2A1: was: lpxs_strap1 *)
lemma lpxs_step_dx: ∀h,G,L1,L. ⦃G, L1⦄ ⊢ ⬈*[h] L →
∀L2. ⦃G, L⦄ ⊢ ⬈[h] L2 → ⦃G, L1⦄ ⊢ ⬈*[h] L2.
-/3 width=3 by lpx_cpxs_trans, lex_ltc_step_dx/ qed-.
+/3 width=3 by lpx_cpxs_trans, lex_CTC_step_dx/ qed-.
(* Basic_2A1: was: lpxs_strap2 *)
lemma lpxs_step_sn: ∀h,G,L1,L. ⦃G, L1⦄ ⊢ ⬈[h] L →
∀L2. ⦃G, L⦄ ⊢ ⬈*[h] L2 → ⦃G, L1⦄ ⊢ ⬈*[h] L2.
-/3 width=3 by lpx_cpxs_trans, lex_ltc_step_sn/ qed-.
+/3 width=3 by lpx_cpxs_trans, lex_CTC_step_sn/ qed-.
qed-.
lemma scpds_inv_abbr_abst: ∀h,o,a1,a2,G,L,V1,W2,T1,T2,d. ⦃G, L⦄ ⊢ ⓓ{a1}V1.T1 •*➡*[h, o, d] ⓛ{a2}W2.T2 →
- â\88\83â\88\83T. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â\80¢*â\9e¡*[h, o, d] T & â¬\86[0, 1] â\93\9b{a2}W2.T2 â\89¡ T & a1 = true.
+ â\88\83â\88\83T. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â\80¢*â\9e¡*[h, o, d] T & â¬\86[0, 1] â\93\9b{a2}W2.T2 â\89\98 T & a1 = true.
#h #o #a1 #a2 #G #L #V1 #W2 #T1 #T2 #d2 * #X #d1 #Hd21 #Hd1 #H1 #H2
lapply (da_inv_bind … Hd1) -Hd1 #Hd1
elim (lstas_inv_bind1 … H1) -H1 #U1 #HTU1 #H destruct
(* Properties with generic slicing ******************************************)
-lemma cnx_lref_atom: â\88\80h,o,G,L,i. â¬\87*[i] L â\89¡ ⋆ → ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃#i⦄.
+lemma cnx_lref_atom: â\88\80h,o,G,L,i. â¬\87*[i] L â\89\98 ⋆ → ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃#i⦄.
#h #o #G #L #i #Hi #X #H elim (cpx_inv_lref1_drops … H) -H // *
#I #K #V1 #V2 #HLK lapply (drops_mono … Hi … HLK) -L #H destruct
qed.
-lemma cnx_lref_unit: â\88\80h,o,I,G,L,K,i. â¬\87*[i] L â\89¡ K.ⓤ{I} → ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃#i⦄.
+lemma cnx_lref_unit: â\88\80h,o,I,G,L,K,i. â¬\87*[i] L â\89\98 K.ⓤ{I} → ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃#i⦄.
#h #o #I #G #L #K #i #HLK #X #H elim (cpx_inv_lref1_drops … H) -H // *
#Z #Y #V1 #V2 #HLY lapply (drops_mono … HLK … HLY) -L #H destruct
qed.
(* Inversion lemmas with generic slicing ************************************)
(* Basic_2A1: was: cnx_inv_delta *)
-lemma cnx_inv_lref_pair: â\88\80h,o,I,G,L,K,V,i. â¬\87*[i] L â\89¡ K.ⓑ{I}V → ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃#i⦄ → ⊥.
+lemma cnx_inv_lref_pair: â\88\80h,o,I,G,L,K,V,i. â¬\87*[i] L â\89\98 K.ⓑ{I}V → ⦃G, L⦄ ⊢ ⬈[h, o] 𝐍⦃#i⦄ → ⊥.
#h #o #I #G #L #K #V #i #HLK #H
elim (lifts_total V (𝐔❴⫯i❵)) #W #HVW
lapply (H W ?) -H /2 width=7 by cpx_delta_drops/ -HLK
| cpg_atom : ∀I,G,L. cpg Rt h (𝟘𝟘) G L (⓪{I}) (⓪{I})
| cpg_ess : ∀G,L,s. cpg Rt h (𝟘𝟙) G L (⋆s) (⋆(next h s))
| cpg_delta: ∀c,G,L,V1,V2,W2. cpg Rt h c G L V1 V2 →
- â¬\86*[1] V2 â\89¡ W2 → cpg Rt h c G (L.ⓓV1) (#0) W2
+ â¬\86*[1] V2 â\89\98 W2 → cpg Rt h c G (L.ⓓV1) (#0) W2
| cpg_ell : ∀c,G,L,V1,V2,W2. cpg Rt h c G L V1 V2 →
- â¬\86*[1] V2 â\89¡ W2 → cpg Rt h (c+𝟘𝟙) G (L.ⓛV1) (#0) W2
+ â¬\86*[1] V2 â\89\98 W2 → cpg Rt h (c+𝟘𝟙) G (L.ⓛV1) (#0) W2
| cpg_lref : ∀c,I,G,L,T,U,i. cpg Rt h c G L (#i) T →
- â¬\86*[1] T â\89¡ U → cpg Rt h c G (L.ⓘ{I}) (#⫯i) U
+ â¬\86*[1] T â\89\98 U → cpg Rt h c G (L.ⓘ{I}) (#⫯i) U
| cpg_bind : ∀cV,cT,p,I,G,L,V1,V2,T1,T2.
cpg Rt h cV G L V1 V2 → cpg Rt h cT G (L.ⓑ{I}V1) T1 T2 →
cpg Rt h ((↓cV)∨cT) G L (ⓑ{p,I}V1.T1) (ⓑ{p,I}V2.T2)
cpg Rt h cU G L U1 U2 → cpg Rt h cT G L T1 T2 →
cpg Rt h (cU∨cT) G L (ⓝU1.T1) (ⓝU2.T2)
| cpg_zeta : ∀c,G,L,V,T1,T,T2. cpg Rt h c G (L.ⓓV) T1 T →
- â¬\86*[1] T2 â\89¡ T → cpg Rt h (c+𝟙𝟘) G L (+ⓓV.T1) T2
+ â¬\86*[1] T2 â\89\98 T → cpg Rt h (c+𝟙𝟘) G L (+ⓓV.T1) T2
| cpg_eps : ∀c,G,L,V,T1,T2. cpg Rt h c G L T1 T2 → cpg Rt h (c+𝟙𝟘) G L (ⓝV.T1) T2
| cpg_ee : ∀c,G,L,V1,V2,T. cpg Rt h c G L V1 V2 → cpg Rt h (c+𝟘𝟙) G L (ⓝV1.T) V2
| cpg_beta : ∀cV,cW,cT,p,G,L,V1,V2,W1,W2,T1,T2.
cpg Rt h cV G L V1 V2 → cpg Rt h cW G L W1 W2 → cpg Rt h cT G (L.ⓛW1) T1 T2 →
cpg Rt h (((↓cV)∨(↓cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓛ{p}W1.T1) (ⓓ{p}ⓝW2.V2.T2)
| cpg_theta: ∀cV,cW,cT,p,G,L,V1,V,V2,W1,W2,T1,T2.
- cpg Rt h cV G L V1 V â\86\92 â¬\86*[1] V â\89¡ V2 → cpg Rt h cW G L W1 W2 →
+ cpg Rt h cV G L V1 V â\86\92 â¬\86*[1] V â\89\98 V2 → cpg Rt h cW G L W1 W2 →
cpg Rt h cT G (L.ⓓW1) T1 T2 →
cpg Rt h (((↓cV)∨(↓cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2)
.
fact cpg_inv_atom1_aux: ∀Rt,c,h,G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈[Rt, c, h] T2 → ∀J. T1 = ⓪{J} →
∨∨ T2 = ⓪{J} ∧ c = 𝟘𝟘
| ∃∃s. J = Sort s & T2 = ⋆(next h s) & c = 𝟘𝟙
- | â\88\83â\88\83cV,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V2 & â¬\86*[1] V2 â\89¡ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V2 & â¬\86*[1] V2 â\89\98 T2 &
L = K.ⓓV1 & J = LRef 0 & c = cV
- | â\88\83â\88\83cV,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V2 & â¬\86*[1] V2 â\89¡ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V2 & â¬\86*[1] V2 â\89\98 T2 &
L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙
- | â\88\83â\88\83I,K,T,i. â¦\83G, Kâ¦\84 â\8a¢ #i â¬\88[Rt, c, h] T & â¬\86*[1] T â\89¡ T2 &
+ | â\88\83â\88\83I,K,T,i. â¦\83G, Kâ¦\84 â\8a¢ #i â¬\88[Rt, c, h] T & â¬\86*[1] T â\89\98 T2 &
L = K.ⓘ{I} & J = LRef (⫯i).
#Rt #c #h #G #L #T1 #T2 * -c -G -L -T1 -T2
[ #I #G #L #J #H destruct /3 width=1 by or5_intro0, conj/
lemma cpg_inv_atom1: ∀Rt,c,h,J,G,L,T2. ⦃G, L⦄ ⊢ ⓪{J} ⬈[Rt, c, h] T2 →
∨∨ T2 = ⓪{J} ∧ c = 𝟘𝟘
| ∃∃s. J = Sort s & T2 = ⋆(next h s) & c = 𝟘𝟙
- | â\88\83â\88\83cV,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V2 & â¬\86*[1] V2 â\89¡ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V2 & â¬\86*[1] V2 â\89\98 T2 &
L = K.ⓓV1 & J = LRef 0 & c = cV
- | â\88\83â\88\83cV,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V2 & â¬\86*[1] V2 â\89¡ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V2 & â¬\86*[1] V2 â\89\98 T2 &
L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙
- | â\88\83â\88\83I,K,T,i. â¦\83G, Kâ¦\84 â\8a¢ #i â¬\88[Rt, c, h] T & â¬\86*[1] T â\89¡ T2 &
+ | â\88\83â\88\83I,K,T,i. â¦\83G, Kâ¦\84 â\8a¢ #i â¬\88[Rt, c, h] T & â¬\86*[1] T â\89\98 T2 &
L = K.ⓘ{I} & J = LRef (⫯i).
/2 width=3 by cpg_inv_atom1_aux/ qed-.
lemma cpg_inv_zero1: ∀Rt,c,h,G,L,T2. ⦃G, L⦄ ⊢ #0 ⬈[Rt, c, h] T2 →
∨∨ T2 = #0 ∧ c = 𝟘𝟘
- | â\88\83â\88\83cV,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V2 & â¬\86*[1] V2 â\89¡ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V2 & â¬\86*[1] V2 â\89\98 T2 &
L = K.ⓓV1 & c = cV
- | â\88\83â\88\83cV,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V2 & â¬\86*[1] V2 â\89¡ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V2 & â¬\86*[1] V2 â\89\98 T2 &
L = K.ⓛV1 & c = cV+𝟘𝟙.
#Rt #c #h #G #L #T2 #H
elim (cpg_inv_atom1 … H) -H * /3 width=1 by or3_intro0, conj/
lemma cpg_inv_lref1: ∀Rt,c,h,G,L,T2,i. ⦃G, L⦄ ⊢ #⫯i ⬈[Rt, c, h] T2 →
∨∨ T2 = #(⫯i) ∧ c = 𝟘𝟘
- | â\88\83â\88\83I,K,T. â¦\83G, Kâ¦\84 â\8a¢ #i â¬\88[Rt, c, h] T & â¬\86*[1] T â\89¡ T2 & L = K.ⓘ{I}.
+ | â\88\83â\88\83I,K,T. â¦\83G, Kâ¦\84 â\8a¢ #i â¬\88[Rt, c, h] T & â¬\86*[1] T â\89\98 T2 & L = K.ⓘ{I}.
#Rt #c #h #G #L #T2 #i #H
elim (cpg_inv_atom1 … H) -H * /3 width=1 by or_introl, conj/
[ #s #H destruct
∀p,J,V1,U1. U = ⓑ{p,J}V1.U1 →
∨∨ ∃∃cV,cT,V2,T2. ⦃G, L⦄ ⊢ V1 ⬈[Rt, cV, h] V2 & ⦃G, L.ⓑ{J}V1⦄ ⊢ U1 ⬈[Rt, cT, h] T2 &
U2 = ⓑ{p,J}V2.T2 & c = ((↓cV)∨cT)
- | â\88\83â\88\83cT,T. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ U1 â¬\88[Rt, cT, h] T & â¬\86*[1] U2 â\89¡ T &
+ | â\88\83â\88\83cT,T. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ U1 â¬\88[Rt, cT, h] T & â¬\86*[1] U2 â\89\98 T &
p = true & J = Abbr & c = cT+𝟙𝟘.
#Rt #c #h #G #L #U #U2 * -c -G -L -U -U2
[ #I #G #L #q #J #W #U1 #H destruct
lemma cpg_inv_bind1: ∀Rt,c,h,p,I,G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓑ{p,I}V1.T1 ⬈[Rt, c, h] U2 →
∨∨ ∃∃cV,cT,V2,T2. ⦃G, L⦄ ⊢ V1 ⬈[Rt, cV, h] V2 & ⦃G, L.ⓑ{I}V1⦄ ⊢ T1 ⬈[Rt, cT, h] T2 &
U2 = ⓑ{p,I}V2.T2 & c = ((↓cV)∨cT)
- | â\88\83â\88\83cT,T. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â¬\88[Rt, cT, h] T & â¬\86*[1] U2 â\89¡ T &
+ | â\88\83â\88\83cT,T. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â¬\88[Rt, cT, h] T & â¬\86*[1] U2 â\89\98 T &
p = true & I = Abbr & c = cT+𝟙𝟘.
/2 width=3 by cpg_inv_bind1_aux/ qed-.
lemma cpg_inv_abbr1: ∀Rt,c,h,p,G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓓ{p}V1.T1 ⬈[Rt, c, h] U2 →
∨∨ ∃∃cV,cT,V2,T2. ⦃G, L⦄ ⊢ V1 ⬈[Rt, cV, h] V2 & ⦃G, L.ⓓV1⦄ ⊢ T1 ⬈[Rt, cT, h] T2 &
U2 = ⓓ{p}V2.T2 & c = ((↓cV)∨cT)
- | â\88\83â\88\83cT,T. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â¬\88[Rt, cT, h] T & â¬\86*[1] U2 â\89¡ T &
+ | â\88\83â\88\83cT,T. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â¬\88[Rt, cT, h] T & â¬\86*[1] U2 â\89\98 T &
p = true & c = cT+𝟙𝟘.
#Rt #c #h #p #G #L #V1 #T1 #U2 #H elim (cpg_inv_bind1 … H) -H *
/3 width=8 by ex4_4_intro, ex4_2_intro, or_introl, or_intror/
U2 = ⓐV2.T2 & c = ((↓cV)∨cT)
| ∃∃cV,cW,cT,p,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ⬈[Rt, cV, h] V2 & ⦃G, L⦄ ⊢ W1 ⬈[Rt, cW, h] W2 & ⦃G, L.ⓛW1⦄ ⊢ T1 ⬈[Rt, cT, h] T2 &
U1 = ⓛ{p}W1.T1 & U2 = ⓓ{p}ⓝW2.V2.T2 & c = ((↓cV)∨(↓cW)∨cT)+𝟙𝟘
- | â\88\83â\88\83cV,cW,cT,p,V,V2,W1,W2,T1,T2. â¦\83G, Lâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V & â¬\86*[1] V â\89¡ V2 & ⦃G, L⦄ ⊢ W1 ⬈[Rt, cW, h] W2 & ⦃G, L.ⓓW1⦄ ⊢ T1 ⬈[Rt, cT, h] T2 &
+ | â\88\83â\88\83cV,cW,cT,p,V,V2,W1,W2,T1,T2. â¦\83G, Lâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V & â¬\86*[1] V â\89\98 V2 & ⦃G, L⦄ ⊢ W1 ⬈[Rt, cW, h] W2 & ⦃G, L.ⓓW1⦄ ⊢ T1 ⬈[Rt, cT, h] T2 &
U1 = ⓓ{p}W1.T1 & U2 = ⓓ{p}W2.ⓐV2.T2 & c = ((↓cV)∨(↓cW)∨cT)+𝟙𝟘.
#Rt #c #h #G #L #U #U2 * -c -G -L -U -U2
[ #I #G #L #W #U1 #H destruct
U2 = ⓐV2.T2 & c = ((↓cV)∨cT)
| ∃∃cV,cW,cT,p,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ⬈[Rt, cV, h] V2 & ⦃G, L⦄ ⊢ W1 ⬈[Rt, cW, h] W2 & ⦃G, L.ⓛW1⦄ ⊢ T1 ⬈[Rt, cT, h] T2 &
U1 = ⓛ{p}W1.T1 & U2 = ⓓ{p}ⓝW2.V2.T2 & c = ((↓cV)∨(↓cW)∨cT)+𝟙𝟘
- | â\88\83â\88\83cV,cW,cT,p,V,V2,W1,W2,T1,T2. â¦\83G, Lâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V & â¬\86*[1] V â\89¡ V2 & ⦃G, L⦄ ⊢ W1 ⬈[Rt, cW, h] W2 & ⦃G, L.ⓓW1⦄ ⊢ T1 ⬈[Rt, cT, h] T2 &
+ | â\88\83â\88\83cV,cW,cT,p,V,V2,W1,W2,T1,T2. â¦\83G, Lâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V & â¬\86*[1] V â\89\98 V2 & ⦃G, L⦄ ⊢ W1 ⬈[Rt, cW, h] W2 & ⦃G, L.ⓓW1⦄ ⊢ T1 ⬈[Rt, cT, h] T2 &
U1 = ⓓ{p}W1.T1 & U2 = ⓓ{p}W2.ⓐV2.T2 & c = ((↓cV)∨(↓cW)∨cT)+𝟙𝟘.
/2 width=3 by cpg_inv_appl1_aux/ qed-.
lemma cpg_inv_zero1_pair: ∀Rt,c,h,I,G,K,V1,T2. ⦃G, K.ⓑ{I}V1⦄ ⊢ #0 ⬈[Rt, c, h] T2 →
∨∨ T2 = #0 ∧ c = 𝟘𝟘
- | â\88\83â\88\83cV,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V2 & â¬\86*[1] V2 â\89¡ T2 &
+ | â\88\83â\88\83cV,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V2 & â¬\86*[1] V2 â\89\98 T2 &
I = Abbr & c = cV
- | â\88\83â\88\83cV,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V2 & â¬\86*[1] V2 â\89¡ T2 &
+ | â\88\83â\88\83cV,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[Rt, cV, h] V2 & â¬\86*[1] V2 â\89\98 T2 &
I = Abst & c = cV+𝟘𝟙.
#Rt #c #h #I #G #K #V1 #T2 #H elim (cpg_inv_zero1 … H) -H /2 width=1 by or3_intro0/
* #z #Y #X1 #X2 #HX12 #HXT2 #H1 #H2 destruct /3 width=5 by or3_intro1, or3_intro2, ex4_2_intro/
lemma cpg_inv_lref1_bind: ∀Rt,c,h,I,G,K,T2,i. ⦃G, K.ⓘ{I}⦄ ⊢ #⫯i ⬈[Rt, c, h] T2 →
∨∨ T2 = #(⫯i) ∧ c = 𝟘𝟘
- | â\88\83â\88\83T. â¦\83G, Kâ¦\84 â\8a¢ #i â¬\88[Rt, c, h] T & â¬\86*[1] T â\89¡ T2.
+ | â\88\83â\88\83T. â¦\83G, Kâ¦\84 â\8a¢ #i â¬\88[Rt, c, h] T & â¬\86*[1] T â\89\98 T2.
#Rt #c #h #I #G #L #T2 #i #H elim (cpg_inv_lref1 … H) -H /2 width=1 by or_introl/
* #Z #Y #T #HT #HT2 #H destruct /3 width=3 by ex2_intro, or_intror/
qed-.
(* Advanced properties ******************************************************)
-lemma cpg_delta_drops: â\88\80Rt,c,h,G,K,V,V2,i,L,T2. â¬\87*[i] L â\89¡ K.ⓓV → ⦃G, K⦄ ⊢ V ⬈[Rt, c, h] V2 →
- â¬\86*[⫯i] V2 â\89¡ T2 → ⦃G, L⦄ ⊢ #i ⬈[Rt, c, h] T2.
+lemma cpg_delta_drops: â\88\80Rt,c,h,G,K,V,V2,i,L,T2. â¬\87*[i] L â\89\98 K.ⓓV → ⦃G, K⦄ ⊢ V ⬈[Rt, c, h] V2 →
+ â¬\86*[⫯i] V2 â\89\98 T2 → ⦃G, L⦄ ⊢ #i ⬈[Rt, c, h] T2.
#Rt #c #h #G #K #V #V2 #i elim i -i
[ #L #T2 #HLK lapply (drops_fwd_isid … HLK ?) // #H destruct /3 width=3 by cpg_delta/
| #i #IH #L0 #T0 #H0 #HV2 #HVT2
]
qed.
-lemma cpg_ell_drops: â\88\80Rt,c,h,G,K,V,V2,i,L,T2. â¬\87*[i] L â\89¡ K.ⓛV → ⦃G, K⦄ ⊢ V ⬈[Rt,c, h] V2 →
- â¬\86*[⫯i] V2 â\89¡ T2 → ⦃G, L⦄ ⊢ #i ⬈[Rt, c+𝟘𝟙, h] T2.
+lemma cpg_ell_drops: â\88\80Rt,c,h,G,K,V,V2,i,L,T2. â¬\87*[i] L â\89\98 K.ⓛV → ⦃G, K⦄ ⊢ V ⬈[Rt,c, h] V2 →
+ â¬\86*[⫯i] V2 â\89\98 T2 → ⦃G, L⦄ ⊢ #i ⬈[Rt, c+𝟘𝟙, h] T2.
#Rt #c #h #G #K #V #V2 #i elim i -i
[ #L #T2 #HLK lapply (drops_fwd_isid … HLK ?) // #H destruct /3 width=3 by cpg_ell/
| #i #IH #L0 #T0 #H0 #HV2 #HVT2
lemma cpg_inv_lref1_drops: ∀Rt,c,h,G,i,L,T2. ⦃G, L⦄ ⊢ #i ⬈[Rt,c, h] T2 →
∨∨ T2 = #i ∧ c = 𝟘𝟘
- | â\88\83â\88\83cV,K,V,V2. â¬\87*[i] L â\89¡ K.ⓓV & ⦃G, K⦄ ⊢ V ⬈[Rt, cV, h] V2 &
- â¬\86*[⫯i] V2 â\89¡ T2 & c = cV
- | â\88\83â\88\83cV,K,V,V2. â¬\87*[i] L â\89¡ K.ⓛV & ⦃G, K⦄ ⊢ V ⬈[Rt, cV, h] V2 &
- â¬\86*[⫯i] V2 â\89¡ T2 & c = cV + 𝟘𝟙.
+ | â\88\83â\88\83cV,K,V,V2. â¬\87*[i] L â\89\98 K.ⓓV & ⦃G, K⦄ ⊢ V ⬈[Rt, cV, h] V2 &
+ â¬\86*[⫯i] V2 â\89\98 T2 & c = cV
+ | â\88\83â\88\83cV,K,V,V2. â¬\87*[i] L â\89\98 K.ⓛV & ⦃G, K⦄ ⊢ V ⬈[Rt, cV, h] V2 &
+ â¬\86*[⫯i] V2 â\89\98 T2 & c = cV + 𝟘𝟙.
#Rt #c #h #G #i elim i -i
[ #L #T2 #H elim (cpg_inv_zero1 … H) -H * /3 width=1 by or3_intro0, conj/
/4 width=8 by drops_refl, ex4_4_intro, or3_intro2, or3_intro1/
lemma cpg_inv_atom1_drops: ∀Rt,c,h,I,G,L,T2. ⦃G, L⦄ ⊢ ⓪{I} ⬈[Rt, c, h] T2 →
∨∨ T2 = ⓪{I} ∧ c = 𝟘𝟘
| ∃∃s. T2 = ⋆(next h s) & I = Sort s & c = 𝟘𝟙
- | â\88\83â\88\83cV,i,K,V,V2. â¬\87*[i] L â\89¡ K.ⓓV & ⦃G, K⦄ ⊢ V ⬈[Rt, cV, h] V2 &
- â¬\86*[⫯i] V2 â\89¡ T2 & I = LRef i & c = cV
- | â\88\83â\88\83cV,i,K,V,V2. â¬\87*[i] L â\89¡ K.ⓛV & ⦃G, K⦄ ⊢ V ⬈[Rt, cV, h] V2 &
- â¬\86*[⫯i] V2 â\89¡ T2 & I = LRef i & c = cV + 𝟘𝟙.
+ | â\88\83â\88\83cV,i,K,V,V2. â¬\87*[i] L â\89\98 K.ⓓV & ⦃G, K⦄ ⊢ V ⬈[Rt, cV, h] V2 &
+ â¬\86*[⫯i] V2 â\89\98 T2 & I = LRef i & c = cV
+ | â\88\83â\88\83cV,i,K,V,V2. â¬\87*[i] L â\89\98 K.ⓛV & ⦃G, K⦄ ⊢ V ⬈[Rt, cV, h] V2 &
+ â¬\86*[⫯i] V2 â\89\98 T2 & I = LRef i & c = cV + 𝟘𝟙.
#Rt #c #h * #n #G #L #T2 #H
[ elim (cpg_inv_sort1 … H) -H *
/3 width=3 by or4_intro0, or4_intro1, ex3_intro, conj/
/2 width=3 by cpg_ess, ex2_intro/ qed.
lemma cpm_delta: ∀n,h,G,K,V1,V2,W2. ⦃G, K⦄ ⊢ V1 ➡[n, h] V2 →
- â¬\86*[1] V2 â\89¡ W2 → ⦃G, K.ⓓV1⦄ ⊢ #0 ➡[n, h] W2.
+ â¬\86*[1] V2 â\89\98 W2 → ⦃G, K.ⓓV1⦄ ⊢ #0 ➡[n, h] W2.
#n #h #G #K #V1 #V2 #W2 *
/3 width=5 by cpg_delta, ex2_intro/
qed.
lemma cpm_ell: ∀n,h,G,K,V1,V2,W2. ⦃G, K⦄ ⊢ V1 ➡[n, h] V2 →
- â¬\86*[1] V2 â\89¡ W2 → ⦃G, K.ⓛV1⦄ ⊢ #0 ➡[⫯n, h] W2.
+ â¬\86*[1] V2 â\89\98 W2 → ⦃G, K.ⓛV1⦄ ⊢ #0 ➡[⫯n, h] W2.
#n #h #G #K #V1 #V2 #W2 *
/3 width=5 by cpg_ell, ex2_intro, isrt_succ/
qed.
lemma cpm_lref: ∀n,h,I,G,K,T,U,i. ⦃G, K⦄ ⊢ #i ➡[n, h] T →
- â¬\86*[1] T â\89¡ U → ⦃G, K.ⓘ{I}⦄ ⊢ #⫯i ➡[n, h] U.
+ â¬\86*[1] T â\89\98 U → ⦃G, K.ⓘ{I}⦄ ⊢ #⫯i ➡[n, h] U.
#n #h #I #G #K #T #U #i *
/3 width=5 by cpg_lref, ex2_intro/
qed.
(* Basic_2A1: includes: cpr_zeta *)
lemma cpm_zeta: ∀n,h,G,L,V,T1,T,T2. ⦃G, L.ⓓV⦄ ⊢ T1 ➡[n, h] T →
- â¬\86*[1] T2 â\89¡ T → ⦃G, L⦄ ⊢ +ⓓV.T1 ➡[n, h] T2.
+ â¬\86*[1] T2 â\89\98 T → ⦃G, L⦄ ⊢ +ⓓV.T1 ➡[n, h] T2.
#n #h #G #L #V #T1 #T #T2 *
/3 width=5 by cpg_zeta, isrt_plus_O2, ex2_intro/
qed.
(* Basic_2A1: includes: cpr_theta *)
lemma cpm_theta: ∀n,h,p,G,L,V1,V,V2,W1,W2,T1,T2.
- â¦\83G, Lâ¦\84 â\8a¢ V1 â\9e¡[h] V â\86\92 â¬\86*[1] V â\89¡ V2 → ⦃G, L⦄ ⊢ W1 ➡[h] W2 →
+ â¦\83G, Lâ¦\84 â\8a¢ V1 â\9e¡[h] V â\86\92 â¬\86*[1] V â\89\98 V2 → ⦃G, L⦄ ⊢ W1 ➡[h] W2 →
⦃G, L.ⓓW1⦄ ⊢ T1 ➡[n, h] T2 →
⦃G, L⦄ ⊢ ⓐV1.ⓓ{p}W1.T1 ➡[n, h] ⓓ{p}W2.ⓐV2.T2.
#n #h #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 * #riV #rhV #HV1 #HV2 * #riW #rhW #HW12 *
lemma cpm_inv_atom1: ∀n,h,J,G,L,T2. ⦃G, L⦄ ⊢ ⓪{J} ➡[n, h] T2 →
∨∨ T2 = ⓪{J} ∧ n = 0
| ∃∃s. T2 = ⋆(next h s) & J = Sort s & n = 1
- | â\88\83â\88\83K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â\9e¡[n, h] V2 & â¬\86*[1] V2 â\89¡ T2 &
+ | â\88\83â\88\83K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â\9e¡[n, h] V2 & â¬\86*[1] V2 â\89\98 T2 &
L = K.ⓓV1 & J = LRef 0
- | â\88\83â\88\83k,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â\9e¡[k, h] V2 & â¬\86*[1] V2 â\89¡ T2 &
+ | â\88\83â\88\83k,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â\9e¡[k, h] V2 & â¬\86*[1] V2 â\89\98 T2 &
L = K.ⓛV1 & J = LRef 0 & n = ⫯k
- | â\88\83â\88\83I,K,T,i. â¦\83G, Kâ¦\84 â\8a¢ #i â\9e¡[n, h] T & â¬\86*[1] T â\89¡ T2 &
+ | â\88\83â\88\83I,K,T,i. â¦\83G, Kâ¦\84 â\8a¢ #i â\9e¡[n, h] T & â¬\86*[1] T â\89\98 T2 &
L = K.ⓘ{I} & J = LRef (⫯i).
#n #h #J #G #L #T2 * #c #Hc #H elim (cpg_inv_atom1 … H) -H *
[ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or5_intro0, conj/
lemma cpm_inv_zero1: ∀n,h,G,L,T2. ⦃G, L⦄ ⊢ #0 ➡[n, h] T2 →
∨∨ T2 = #0 ∧ n = 0
- | â\88\83â\88\83K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â\9e¡[n, h] V2 & â¬\86*[1] V2 â\89¡ T2 &
+ | â\88\83â\88\83K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â\9e¡[n, h] V2 & â¬\86*[1] V2 â\89\98 T2 &
L = K.ⓓV1
- | â\88\83â\88\83k,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â\9e¡[k, h] V2 & â¬\86*[1] V2 â\89¡ T2 &
+ | â\88\83â\88\83k,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â\9e¡[k, h] V2 & â¬\86*[1] V2 â\89\98 T2 &
L = K.ⓛV1 & n = ⫯k.
#n #h #G #L #T2 * #c #Hc #H elim (cpg_inv_zero1 … H) -H *
[ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or3_intro0, conj/
lemma cpm_inv_lref1: ∀n,h,G,L,T2,i. ⦃G, L⦄ ⊢ #⫯i ➡[n, h] T2 →
∨∨ T2 = #(⫯i) ∧ n = 0
- | â\88\83â\88\83I,K,T. â¦\83G, Kâ¦\84 â\8a¢ #i â\9e¡[n, h] T & â¬\86*[1] T â\89¡ T2 & L = K.ⓘ{I}.
+ | â\88\83â\88\83I,K,T. â¦\83G, Kâ¦\84 â\8a¢ #i â\9e¡[n, h] T & â¬\86*[1] T â\89\98 T2 & L = K.ⓘ{I}.
#n #h #G #L #T2 #i * #c #Hc #H elim (cpg_inv_lref1 … H) -H *
[ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or_introl, conj/
| #I #K #V2 #HV2 #HVT2 #H destruct
lemma cpm_inv_bind1: ∀n,h,p,I,G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓑ{p,I}V1.T1 ➡[n, h] U2 →
∨∨ ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡[h] V2 & ⦃G, L.ⓑ{I}V1⦄ ⊢ T1 ➡[n, h] T2 &
U2 = ⓑ{p,I}V2.T2
- | â\88\83â\88\83T. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â\9e¡[n, h] T & â¬\86*[1] U2 â\89¡ T &
+ | â\88\83â\88\83T. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â\9e¡[n, h] T & â¬\86*[1] U2 â\89\98 T &
p = true & I = Abbr.
#n #h #p #I #G #L #V1 #T1 #U2 * #c #Hc #H elim (cpg_inv_bind1 … H) -H *
[ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct
lemma cpm_inv_abbr1: ∀n,h,p,G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓓ{p}V1.T1 ➡[n, h] U2 →
∨∨ ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ➡[h] V2 & ⦃G, L.ⓓV1⦄ ⊢ T1 ➡[n, h] T2 &
U2 = ⓓ{p}V2.T2
- | â\88\83â\88\83T. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â\9e¡[n, h] T & â¬\86*[1] U2 â\89¡ T & p = true.
+ | â\88\83â\88\83T. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â\9e¡[n, h] T & â¬\86*[1] U2 â\89\98 T & p = true.
#n #h #p #G #L #V1 #T1 #U2 * #c #Hc #H elim (cpg_inv_abbr1 … H) -H *
[ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct
elim (isrt_inv_max … Hc) -Hc #nV #nT #HcV #HcT #H destruct
| ∃∃p,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡[h] V2 & ⦃G, L⦄ ⊢ W1 ➡[h] W2 &
⦃G, L.ⓛW1⦄ ⊢ T1 ➡[n, h] T2 &
U1 = ⓛ{p}W1.T1 & U2 = ⓓ{p}ⓝW2.V2.T2
- | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â¦\83G, Lâ¦\84 â\8a¢ V1 â\9e¡[h] V & â¬\86*[1] V â\89¡ V2 &
+ | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â¦\83G, Lâ¦\84 â\8a¢ V1 â\9e¡[h] V & â¬\86*[1] V â\89\98 V2 &
⦃G, L⦄ ⊢ W1 ➡[h] W2 & ⦃G, L.ⓓW1⦄ ⊢ T1 ➡[n, h] T2 &
U1 = ⓓ{p}W1.T1 & U2 = ⓓ{p}W2.ⓐV2.T2.
#n #h #G #L #V1 #U1 #U2 * #c #Hc #H elim (cpg_inv_appl1 … H) -H *
(* Basic_1: includes: pr2_delta1 *)
(* Basic_2A1: includes: cpr_delta *)
lemma cpm_delta_drops: ∀n,h,G,L,K,V,V2,W2,i.
- â¬\87*[i] L â\89¡ K.ⓓV → ⦃G, K⦄ ⊢ V ➡[n, h] V2 →
- â¬\86*[⫯i] V2 â\89¡ W2 → ⦃G, L⦄ ⊢ #i ➡[n, h] W2.
+ â¬\87*[i] L â\89\98 K.ⓓV → ⦃G, K⦄ ⊢ V ➡[n, h] V2 →
+ â¬\86*[⫯i] V2 â\89\98 W2 → ⦃G, L⦄ ⊢ #i ➡[n, h] W2.
#n #h #G #L #K #V #V2 #W2 #i #HLK *
/3 width=8 by cpg_delta_drops, ex2_intro/
qed.
lemma cpm_ell_drops: ∀n,h,G,L,K,V,V2,W2,i.
- â¬\87*[i] L â\89¡ K.ⓛV → ⦃G, K⦄ ⊢ V ➡[n, h] V2 →
- â¬\86*[⫯i] V2 â\89¡ W2 → ⦃G, L⦄ ⊢ #i ➡[⫯n, h] W2.
+ â¬\87*[i] L â\89\98 K.ⓛV → ⦃G, K⦄ ⊢ V ➡[n, h] V2 →
+ â¬\86*[⫯i] V2 â\89\98 W2 → ⦃G, L⦄ ⊢ #i ➡[⫯n, h] W2.
#n #h #G #L #K #V #V2 #W2 #i #HLK *
/3 width=8 by cpg_ell_drops, isrt_succ, ex2_intro/
qed.
lemma cpm_inv_atom1_drops: ∀n,h,I,G,L,T2. ⦃G, L⦄ ⊢ ⓪{I} ➡[n, h] T2 →
∨∨ T2 = ⓪{I} ∧ n = 0
| ∃∃s. T2 = ⋆(next h s) & I = Sort s & n = 1
- | â\88\83â\88\83K,V,V2,i. â¬\87*[i] L â\89¡ K.ⓓV & ⦃G, K⦄ ⊢ V ➡[n, h] V2 &
- â¬\86*[⫯i] V2 â\89¡ T2 & I = LRef i
- | â\88\83â\88\83m,K,V,V2,i. â¬\87*[i] L â\89¡ K.ⓛV & ⦃G, K⦄ ⊢ V ➡[m, h] V2 &
- â¬\86*[⫯i] V2 â\89¡ T2 & I = LRef i & n = ⫯m.
+ | â\88\83â\88\83K,V,V2,i. â¬\87*[i] L â\89\98 K.ⓓV & ⦃G, K⦄ ⊢ V ➡[n, h] V2 &
+ â¬\86*[⫯i] V2 â\89\98 T2 & I = LRef i
+ | â\88\83â\88\83m,K,V,V2,i. â¬\87*[i] L â\89\98 K.ⓛV & ⦃G, K⦄ ⊢ V ➡[m, h] V2 &
+ â¬\86*[⫯i] V2 â\89\98 T2 & I = LRef i & n = ⫯m.
#n #h #I #G #L #T2 * #c #Hc #H elim (cpg_inv_atom1_drops … H) -H *
[ #H1 #H2 destruct lapply (isrt_inv_00 … Hc) -Hc
/3 width=1 by or4_intro0, conj/
lemma cpm_inv_lref1_drops: ∀n,h,G,L,T2,i. ⦃G, L⦄ ⊢ #i ➡[n, h] T2 →
∨∨ T2 = #i ∧ n = 0
- | â\88\83â\88\83K,V,V2. â¬\87*[i] L â\89¡ K.ⓓV & ⦃G, K⦄ ⊢ V ➡[n, h] V2 &
- â¬\86*[⫯i] V2 â\89¡ T2
- | â\88\83â\88\83m,K,V,V2. â¬\87*[i] L â\89¡ K. ⓛV & ⦃G, K⦄ ⊢ V ➡[m, h] V2 &
- â¬\86*[⫯i] V2 â\89¡ T2 & n = ⫯m.
+ | â\88\83â\88\83K,V,V2. â¬\87*[i] L â\89\98 K.ⓓV & ⦃G, K⦄ ⊢ V ➡[n, h] V2 &
+ â¬\86*[⫯i] V2 â\89\98 T2
+ | â\88\83â\88\83m,K,V,V2. â¬\87*[i] L â\89\98 K. ⓛV & ⦃G, K⦄ ⊢ V ➡[m, h] V2 &
+ â¬\86*[⫯i] V2 â\89\98 T2 & n = ⫯m.
#n #h #G #L #T2 #i * #c #Hc #H elim (cpg_inv_lref1_drops … H) -H *
[ #H1 #H2 destruct lapply (isrt_inv_00 … Hc) -Hc
/3 width=1 by or3_intro0, conj/
lemma cpr_inv_atom1: ∀h,J,G,L,T2. ⦃G, L⦄ ⊢ ⓪{J} ➡[h] T2 →
∨∨ T2 = ⓪{J}
- | â\88\83â\88\83K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â\9e¡[h] V2 & â¬\86*[1] V2 â\89¡ T2 &
+ | â\88\83â\88\83K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â\9e¡[h] V2 & â¬\86*[1] V2 â\89\98 T2 &
L = K.ⓓV1 & J = LRef 0
- | â\88\83â\88\83I,K,T,i. â¦\83G, Kâ¦\84 â\8a¢ #i â\9e¡[h] T & â¬\86*[1] T â\89¡ T2 &
+ | â\88\83â\88\83I,K,T,i. â¦\83G, Kâ¦\84 â\8a¢ #i â\9e¡[h] T & â¬\86*[1] T â\89\98 T2 &
L = K.ⓘ{I} & J = LRef (⫯i).
#h #J #G #L #T2 #H elim (cpm_inv_atom1 … H) -H *
/3 width=8 by tri_lt, or3_intro0, or3_intro1, or3_intro2, ex4_4_intro, ex4_3_intro/
lemma cpr_inv_zero1: ∀h,G,L,T2. ⦃G, L⦄ ⊢ #0 ➡[h] T2 →
∨∨ T2 = #0
- | â\88\83â\88\83K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â\9e¡[h] V2 & â¬\86*[1] V2 â\89¡ T2 &
+ | â\88\83â\88\83K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â\9e¡[h] V2 & â¬\86*[1] V2 â\89\98 T2 &
L = K.ⓓV1.
#h #G #L #T2 #H elim (cpm_inv_zero1 … H) -H *
/3 width=6 by ex3_3_intro, or_introl, or_intror/
lemma cpr_inv_lref1: ∀h,G,L,T2,i. ⦃G, L⦄ ⊢ #⫯i ➡[h] T2 →
∨∨ T2 = #(⫯i)
- | â\88\83â\88\83I,K,T. â¦\83G, Kâ¦\84 â\8a¢ #i â\9e¡[h] T & â¬\86*[1] T â\89¡ T2 & L = K.ⓘ{I}.
+ | â\88\83â\88\83I,K,T. â¦\83G, Kâ¦\84 â\8a¢ #i â\9e¡[h] T & â¬\86*[1] T â\89\98 T2 & L = K.ⓘ{I}.
#h #G #L #T2 #i #H elim (cpm_inv_lref1 … H) -H *
/3 width=6 by ex3_3_intro, or_introl, or_intror/
qed-.
| ∃∃p,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ➡[h] V2 & ⦃G, L⦄ ⊢ W1 ➡[h] W2 &
⦃G, L.ⓛW1⦄ ⊢ T1 ➡[h] T2 & U1 = ⓛ{p}W1.T1 &
U2 = ⓓ{p}ⓝW2.V2.T2 & I = Appl
- | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â¦\83G, Lâ¦\84 â\8a¢ V1 â\9e¡[h] V & â¬\86*[1] V â\89¡ V2 &
+ | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â¦\83G, Lâ¦\84 â\8a¢ V1 â\9e¡[h] V & â¬\86*[1] V â\89\98 V2 &
⦃G, L⦄ ⊢ W1 ➡[h] W2 & ⦃G, L.ⓓW1⦄ ⊢ T1 ➡[h] T2 &
U1 = ⓓ{p}W1.T1 &
U2 = ⓓ{p}W2.ⓐV2.T2 & I = Appl.
(* Basic_2A1: includes: cpr_inv_atom1 *)
lemma cpr_inv_atom1_drops: ∀h,I,G,L,T2. ⦃G, L⦄ ⊢ ⓪{I} ➡[h] T2 →
∨∨ T2 = ⓪{I}
- | â\88\83â\88\83K,V,V2,i. â¬\87*[i] L â\89¡ K.ⓓV & ⦃G, K⦄ ⊢ V ➡[h] V2 &
- â¬\86*[⫯i] V2 â\89¡ T2 & I = LRef i.
+ | â\88\83â\88\83K,V,V2,i. â¬\87*[i] L â\89\98 K.ⓓV & ⦃G, K⦄ ⊢ V ➡[h] V2 &
+ â¬\86*[⫯i] V2 â\89\98 T2 & I = LRef i.
#h #I #G #L #T2 #H elim (cpm_inv_atom1_drops … H) -H *
[ /2 width=1 by or_introl/
| #s #_ #_ #H destruct
(* Basic_2A1: includes: cpr_inv_lref1 *)
lemma cpr_inv_lref1_drops: ∀h,G,L,T2,i. ⦃G, L⦄ ⊢ #i ➡[h] T2 →
∨∨ T2 = #i
- | â\88\83â\88\83K,V,V2. â¬\87*[i] L â\89¡ K. ⓓV & ⦃G, K⦄ ⊢ V ➡[h] V2 &
- â¬\86*[⫯i] V2 â\89¡ T2.
+ | â\88\83â\88\83K,V,V2. â¬\87*[i] L â\89\98 K. ⓓV & ⦃G, K⦄ ⊢ V ➡[h] V2 &
+ â¬\86*[⫯i] V2 â\89\98 T2.
#h #G #L #T2 #i #H elim (cpm_inv_lref1_drops … H) -H *
[ /2 width=1 by or_introl/
| /3 width=6 by ex3_3_intro, or_intror/
/2 width=2 by cpg_ess, ex_intro/ qed.
lemma cpx_delta: ∀h,I,G,K,V1,V2,W2. ⦃G, K⦄ ⊢ V1 ⬈[h] V2 →
- â¬\86*[1] V2 â\89¡ W2 → ⦃G, K.ⓑ{I}V1⦄ ⊢ #0 ⬈[h] W2.
+ â¬\86*[1] V2 â\89\98 W2 → ⦃G, K.ⓑ{I}V1⦄ ⊢ #0 ⬈[h] W2.
#h * #G #K #V1 #V2 #W2 *
/3 width=4 by cpg_delta, cpg_ell, ex_intro/
qed.
lemma cpx_lref: ∀h,I,G,K,T,U,i. ⦃G, K⦄ ⊢ #i ⬈[h] T →
- â¬\86*[1] T â\89¡ U → ⦃G, K.ⓘ{I}⦄ ⊢ #⫯i ⬈[h] U.
+ â¬\86*[1] T â\89\98 U → ⦃G, K.ⓘ{I}⦄ ⊢ #⫯i ⬈[h] U.
#h #I #G #K #T #U #i *
/3 width=4 by cpg_lref, ex_intro/
qed.
qed.
lemma cpx_zeta: ∀h,G,L,V,T1,T,T2. ⦃G, L.ⓓV⦄ ⊢ T1 ⬈[h] T →
- â¬\86*[1] T2 â\89¡ T → ⦃G, L⦄ ⊢ +ⓓV.T1 ⬈[h] T2.
+ â¬\86*[1] T2 â\89\98 T → ⦃G, L⦄ ⊢ +ⓓV.T1 ⬈[h] T2.
#h #G #L #V #T1 #T #T2 *
/3 width=4 by cpg_zeta, ex_intro/
qed.
qed.
lemma cpx_theta: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2.
- â¦\83G, Lâ¦\84 â\8a¢ V1 â¬\88[h] V â\86\92 â¬\86*[1] V â\89¡ V2 → ⦃G, L⦄ ⊢ W1 ⬈[h] W2 →
+ â¦\83G, Lâ¦\84 â\8a¢ V1 â¬\88[h] V â\86\92 â¬\86*[1] V â\89\98 V2 → ⦃G, L⦄ ⊢ W1 ⬈[h] W2 →
⦃G, L.ⓓW1⦄ ⊢ T1 ⬈[h] T2 →
⦃G, L⦄ ⊢ ⓐV1.ⓓ{p}W1.T1 ⬈[h] ⓓ{p}W2.ⓐV2.T2.
#h #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 * #cV #HV1 #HV2 * #cW #HW12 *
lemma cpx_inv_atom1: ∀h,J,G,L,T2. ⦃G, L⦄ ⊢ ⓪{J} ⬈[h] T2 →
∨∨ T2 = ⓪{J}
| ∃∃s. T2 = ⋆(next h s) & J = Sort s
- | â\88\83â\88\83I,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â¬\86*[1] V2 â\89¡ T2 &
+ | â\88\83â\88\83I,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â¬\86*[1] V2 â\89\98 T2 &
L = K.ⓑ{I}V1 & J = LRef 0
- | â\88\83â\88\83I,K,T,i. â¦\83G, Kâ¦\84 â\8a¢ #i â¬\88[h] T & â¬\86*[1] T â\89¡ T2 &
+ | â\88\83â\88\83I,K,T,i. â¦\83G, Kâ¦\84 â\8a¢ #i â¬\88[h] T & â¬\86*[1] T â\89\98 T2 &
L = K.ⓘ{I} & J = LRef (⫯i).
#h #J #G #L #T2 * #c #H elim (cpg_inv_atom1 … H) -H *
/4 width=8 by or4_intro0, or4_intro1, or4_intro2, or4_intro3, ex4_4_intro, ex2_intro, ex_intro/
lemma cpx_inv_zero1: ∀h,G,L,T2. ⦃G, L⦄ ⊢ #0 ⬈[h] T2 →
∨∨ T2 = #0
- | â\88\83â\88\83I,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â¬\86*[1] V2 â\89¡ T2 &
+ | â\88\83â\88\83I,K,V1,V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â¬\86*[1] V2 â\89\98 T2 &
L = K.ⓑ{I}V1.
#h #G #L #T2 * #c #H elim (cpg_inv_zero1 … H) -H *
/4 width=7 by ex3_4_intro, ex_intro, or_introl, or_intror/
lemma cpx_inv_lref1: ∀h,G,L,T2,i. ⦃G, L⦄ ⊢ #⫯i ⬈[h] T2 →
∨∨ T2 = #(⫯i)
- | â\88\83â\88\83I,K,T. â¦\83G, Kâ¦\84 â\8a¢ #i â¬\88[h] T & â¬\86*[1] T â\89¡ T2 & L = K.ⓘ{I}.
+ | â\88\83â\88\83I,K,T. â¦\83G, Kâ¦\84 â\8a¢ #i â¬\88[h] T & â¬\86*[1] T â\89\98 T2 & L = K.ⓘ{I}.
#h #G #L #T2 #i * #c #H elim (cpg_inv_lref1 … H) -H *
/4 width=6 by ex3_3_intro, ex_intro, or_introl, or_intror/
qed-.
lemma cpx_inv_bind1: ∀h,p,I,G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓑ{p,I}V1.T1 ⬈[h] U2 →
∨∨ ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ⬈[h] V2 & ⦃G, L.ⓑ{I}V1⦄ ⊢ T1 ⬈[h] T2 &
U2 = ⓑ{p,I}V2.T2
- | â\88\83â\88\83T. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â¬\88[h] T & â¬\86*[1] U2 â\89¡ T &
+ | â\88\83â\88\83T. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â¬\88[h] T & â¬\86*[1] U2 â\89\98 T &
p = true & I = Abbr.
#h #p #I #G #L #V1 #T1 #U2 * #c #H elim (cpg_inv_bind1 … H) -H *
/4 width=5 by ex4_intro, ex3_2_intro, ex_intro, or_introl, or_intror/
lemma cpx_inv_abbr1: ∀h,p,G,L,V1,T1,U2. ⦃G, L⦄ ⊢ ⓓ{p}V1.T1 ⬈[h] U2 →
∨∨ ∃∃V2,T2. ⦃G, L⦄ ⊢ V1 ⬈[h] V2 & ⦃G, L.ⓓV1⦄ ⊢ T1 ⬈[h] T2 &
U2 = ⓓ{p}V2.T2
- | â\88\83â\88\83T. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â¬\88[h] T & â¬\86*[1] U2 â\89¡ T & p = true.
+ | â\88\83â\88\83T. â¦\83G, L.â\93\93V1â¦\84 â\8a¢ T1 â¬\88[h] T & â¬\86*[1] U2 â\89\98 T & p = true.
#h #p #G #L #V1 #T1 #U2 * #c #H elim (cpg_inv_abbr1 … H) -H *
/4 width=5 by ex3_2_intro, ex3_intro, ex_intro, or_introl, or_intror/
qed-.
| ∃∃p,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ⬈[h] V2 & ⦃G, L⦄ ⊢ W1 ⬈[h] W2 &
⦃G, L.ⓛW1⦄ ⊢ T1 ⬈[h] T2 &
U1 = ⓛ{p}W1.T1 & U2 = ⓓ{p}ⓝW2.V2.T2
- | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â¦\83G, Lâ¦\84 â\8a¢ V1 â¬\88[h] V & â¬\86*[1] V â\89¡ V2 &
+ | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â¦\83G, Lâ¦\84 â\8a¢ V1 â¬\88[h] V & â¬\86*[1] V â\89\98 V2 &
⦃G, L⦄ ⊢ W1 ⬈[h] W2 & ⦃G, L.ⓓW1⦄ ⊢ T1 ⬈[h] T2 &
U1 = ⓓ{p}W1.T1 & U2 = ⓓ{p}W2.ⓐV2.T2.
#h #G #L #V1 #U1 #U2 * #c #H elim (cpg_inv_appl1 … H) -H *
lemma cpx_inv_zero1_pair: ∀h,I,G,K,V1,T2. ⦃G, K.ⓑ{I}V1⦄ ⊢ #0 ⬈[h] T2 →
∨∨ T2 = #0
- | â\88\83â\88\83V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â¬\86*[1] V2 â\89¡ T2.
+ | â\88\83â\88\83V2. â¦\83G, Kâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â¬\86*[1] V2 â\89\98 T2.
#h #I #G #L #V1 #T2 * #c #H elim (cpg_inv_zero1_pair … H) -H *
/4 width=3 by ex2_intro, ex_intro, or_intror, or_introl/
qed-.
lemma cpx_inv_lref1_bind: ∀h,I,G,K,T2,i. ⦃G, K.ⓘ{I}⦄ ⊢ #⫯i ⬈[h] T2 →
∨∨ T2 = #(⫯i)
- | â\88\83â\88\83T. â¦\83G, Kâ¦\84 â\8a¢ #i â¬\88[h] T & â¬\86*[1] T â\89¡ T2.
+ | â\88\83â\88\83T. â¦\83G, Kâ¦\84 â\8a¢ #i â¬\88[h] T & â¬\86*[1] T â\89\98 T2.
#h #I #G #L #T2 #i * #c #H elim (cpg_inv_lref1_bind … H) -H *
/4 width=3 by ex2_intro, ex_intro, or_introl, or_intror/
qed-.
⦃G, L.ⓛW1⦄ ⊢ T1 ⬈[h] T2 &
U1 = ⓛ{p}W1.T1 &
U2 = ⓓ{p}ⓝW2.V2.T2 & I = Appl
- | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â¦\83G, Lâ¦\84 â\8a¢ V1 â¬\88[h] V & â¬\86*[1] V â\89¡ V2 &
+ | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â¦\83G, Lâ¦\84 â\8a¢ V1 â¬\88[h] V & â¬\86*[1] V â\89\98 V2 &
⦃G, L⦄ ⊢ W1 ⬈[h] W2 & ⦃G, L.ⓓW1⦄ ⊢ T1 ⬈[h] T2 &
U1 = ⓓ{p}W1.T1 &
U2 = ⓓ{p}W2.ⓐV2.T2 & I = Appl.
(∀I,G,L. R G L (⓪{I}) (⓪{I})) →
(∀G,L,s. R G L (⋆s) (⋆(next h s))) →
(∀I,G,K,V1,V2,W2. ⦃G, K⦄ ⊢ V1 ⬈[h] V2 → R G K V1 V2 →
- â¬\86*[1] V2 â\89¡ W2 → R G (K.ⓑ{I}V1) (#0) W2
+ â¬\86*[1] V2 â\89\98 W2 → R G (K.ⓑ{I}V1) (#0) W2
) → (∀I,G,K,T,U,i. ⦃G, K⦄ ⊢ #i ⬈[h] T → R G K (#i) T →
- â¬\86*[1] T â\89¡ U → R G (K.ⓘ{I}) (#⫯i) (U)
+ â¬\86*[1] T â\89\98 U → R G (K.ⓘ{I}) (#⫯i) (U)
) → (∀p,I,G,L,V1,V2,T1,T2. ⦃G, L⦄ ⊢ V1 ⬈[h] V2 → ⦃G, L.ⓑ{I}V1⦄ ⊢ T1 ⬈[h] T2 →
R G L V1 V2 → R G (L.ⓑ{I}V1) T1 T2 → R G L (ⓑ{p,I}V1.T1) (ⓑ{p,I}V2.T2)
) → (∀I,G,L,V1,V2,T1,T2. ⦃G, L⦄ ⊢ V1 ⬈[h] V2 → ⦃G, L⦄ ⊢ T1 ⬈[h] T2 →
R G L V1 V2 → R G L T1 T2 → R G L (ⓕ{I}V1.T1) (ⓕ{I}V2.T2)
) → (∀G,L,V,T1,T,T2. ⦃G, L.ⓓV⦄ ⊢ T1 ⬈[h] T → R G (L.ⓓV) T1 T →
- â¬\86*[1] T2 â\89¡ T → R G L (+ⓓV.T1) T2
+ â¬\86*[1] T2 â\89\98 T → R G L (+ⓓV.T1) T2
) → (∀G,L,V,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → R G L T1 T2 →
R G L (ⓝV.T1) T2
) → (∀G,L,V1,V2,T. ⦃G, L⦄ ⊢ V1 ⬈[h] V2 → R G L V1 V2 →
R G L (ⓐV1.ⓛ{p}W1.T1) (ⓓ{p}ⓝW2.V2.T2)
) → (∀p,G,L,V1,V,V2,W1,W2,T1,T2. ⦃G, L⦄ ⊢ V1 ⬈[h] V → ⦃G, L⦄ ⊢ W1 ⬈[h] W2 → ⦃G, L.ⓓW1⦄ ⊢ T1 ⬈[h] T2 →
R G L V1 V → R G L W1 W2 → R G (L.ⓓW1) T1 T2 →
- â¬\86*[1] V â\89¡ V2 → R G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2)
+ â¬\86*[1] V â\89\98 V2 → R G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2)
) →
∀G,L,T1,T2. ⦃G, L⦄ ⊢ T1 ⬈[h] T2 → R G L T1 T2.
#h #R #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #IH10 #IH11 #G #L #T1 #T2
(* Basic_2A1: was: cpx_delta *)
lemma cpx_delta_drops: ∀h,I,G,L,K,V,V2,W2,i.
- â¬\87*[i] L â\89¡ K.ⓑ{I}V → ⦃G, K⦄ ⊢ V ⬈[h] V2 →
- â¬\86*[⫯i] V2 â\89¡ W2 → ⦃G, L⦄ ⊢ #i ⬈[h] W2.
+ â¬\87*[i] L â\89\98 K.ⓑ{I}V → ⦃G, K⦄ ⊢ V ⬈[h] V2 →
+ â¬\86*[⫯i] V2 â\89\98 W2 → ⦃G, L⦄ ⊢ #i ⬈[h] W2.
#h * #G #L #K #V #V2 #W2 #i #HLK *
/3 width=7 by cpg_ell_drops, cpg_delta_drops, ex_intro/
qed.
lemma cpx_inv_atom1_drops: ∀h,I,G,L,T2. ⦃G, L⦄ ⊢ ⓪{I} ⬈[h] T2 →
∨∨ T2 = ⓪{I}
| ∃∃s. T2 = ⋆(next h s) & I = Sort s
- | â\88\83â\88\83J,K,V,V2,i. â¬\87*[i] L â\89¡ K.ⓑ{J}V & ⦃G, K⦄ ⊢ V ⬈[h] V2 &
- â¬\86*[⫯i] V2 â\89¡ T2 & I = LRef i.
+ | â\88\83â\88\83J,K,V,V2,i. â¬\87*[i] L â\89\98 K.ⓑ{J}V & ⦃G, K⦄ ⊢ V ⬈[h] V2 &
+ â¬\86*[⫯i] V2 â\89\98 T2 & I = LRef i.
#h #I #G #L #T2 * #c #H elim (cpg_inv_atom1_drops … H) -H *
/4 width=9 by or3_intro0, or3_intro1, or3_intro2, ex4_5_intro, ex2_intro, ex_intro/
qed-.
(* Basic_2A1: was: cpx_inv_lref1 *)
lemma cpx_inv_lref1_drops: ∀h,G,L,T2,i. ⦃G, L⦄ ⊢ #i ⬈[h] T2 →
T2 = #i ∨
- â\88\83â\88\83J,K,V,V2. â¬\87*[i] L â\89¡ K. ⓑ{J}V & ⦃G, K⦄ ⊢ V ⬈[h] V2 &
- â¬\86*[⫯i] V2 â\89¡ T2.
+ â\88\83â\88\83J,K,V,V2. â¬\87*[i] L â\89\98 K. ⓑ{J}V & ⦃G, K⦄ ⊢ V ⬈[h] V2 &
+ â¬\86*[⫯i] V2 â\89\98 T2.
#h #G #L #T1 #i * #c #H elim (cpg_inv_lref1_drops … H) -H *
/4 width=7 by ex3_4_intro, ex_intro, or_introl, or_intror/
qed-.
(*
(* Basic_2A1: was: cpx_lleq_conf *)
lemma cpx_lfeq_conf: ∀h,G,L2,T1,T2. ⦃G, L2⦄ ⊢ T1 ⬈[h] T2 →
- â\88\80L1. L2 â\89¡[T1] L1 → ⦃G, L1⦄ ⊢ T1 ⬈[h] T2.
+ â\88\80L1. L2 â\89\98[T1] L1 → ⦃G, L1⦄ ⊢ T1 ⬈[h] T2.
/3 width=3 by lfeq_cpx_trans, lfeq_sym/ qed-.
*)
(* Basic_2A1: was: cpx_lleq_conf_sn *)
(*
(* Basic_2A1: was: cpx_lleq_conf_dx *)
lemma cpx_lfeq_conf_dx: ∀h,G,L2,T1,T2. ⦃G, L2⦄ ⊢ T1 ⬈[h] T2 →
- â\88\80L1. L1 â\89¡[T1] L2 â\86\92 L1 â\89¡[T2] L2.
+ â\88\80L1. L1 â\89\98[T1] L2 â\86\92 L1 â\89\98[T2] L2.
/4 width=6 by cpx_lfeq_conf_sn, lfeq_sym/ qed-.
*)
\ No newline at end of file
lemma lfpr_drops_trans: ∀h,G. dropable_dx (cpm 0 h G).
/2 width=5 by lfxs_dropable_dx/ qed-.
-lemma lfpr_inv_lref_pair_sn: â\88\80h,G,L1,L2,i. â¦\83G, L1â¦\84 â\8a¢ â\9e¡[h, #i] L2 â\86\92 â\88\80I,K1,V1. â¬\87*[i] L1 â\89¡ K1.ⓑ{I}V1 →
- â\88\83â\88\83K2,V2. â¬\87*[i] L2 â\89¡ K2.ⓑ{I}V2 & ⦃G, K1⦄ ⊢ ➡[h, V1] K2 & ⦃G, K1⦄ ⊢ V1 ➡[h] V2.
+lemma lfpr_inv_lref_pair_sn: â\88\80h,G,L1,L2,i. â¦\83G, L1â¦\84 â\8a¢ â\9e¡[h, #i] L2 â\86\92 â\88\80I,K1,V1. â¬\87*[i] L1 â\89\98 K1.ⓑ{I}V1 →
+ â\88\83â\88\83K2,V2. â¬\87*[i] L2 â\89\98 K2.ⓑ{I}V2 & ⦃G, K1⦄ ⊢ ➡[h, V1] K2 & ⦃G, K1⦄ ⊢ V1 ➡[h] V2.
/2 width=3 by lfxs_inv_lref_pair_sn/ qed-.
-lemma lfpr_inv_lref_pair_dx: â\88\80h,G,L1,L2,i. â¦\83G, L1â¦\84 â\8a¢ â\9e¡[h, #i] L2 â\86\92 â\88\80I,K2,V2. â¬\87*[i] L2 â\89¡ K2.ⓑ{I}V2 →
- â\88\83â\88\83K1,V1. â¬\87*[i] L1 â\89¡ K1.ⓑ{I}V1 & ⦃G, K1⦄ ⊢ ➡[h, V1] K2 & ⦃G, K1⦄ ⊢ V1 ➡[h] V2.
+lemma lfpr_inv_lref_pair_dx: â\88\80h,G,L1,L2,i. â¦\83G, L1â¦\84 â\8a¢ â\9e¡[h, #i] L2 â\86\92 â\88\80I,K2,V2. â¬\87*[i] L2 â\89\98 K2.ⓑ{I}V2 →
+ â\88\83â\88\83K1,V1. â¬\87*[i] L1 â\89\98 K1.ⓑ{I}V1 & ⦃G, K1⦄ ⊢ ➡[h, V1] K2 & ⦃G, K1⦄ ⊢ V1 ➡[h] V2.
/2 width=3 by lfxs_inv_lref_pair_dx/ qed-.
∀L1. ⦃G, L⦄ ⊢ ➡[h, T] L1 → ∀L2. ⦃G, L⦄ ⊢ ➡[h, T] L2 →
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡[h] T0 & ⦃G, L2⦄ ⊢ T2 ➡[h] T0
) →
- â\88\80K0,V0. â¬\87*[i] L0 â\89¡ K0.ⓓV0 →
- â\88\80V2. â¦\83G, K0â¦\84 â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80T2. â¬\86*[⫯i] V2 â\89¡ T2 →
+ â\88\80K0,V0. â¬\87*[i] L0 â\89\98 K0.ⓓV0 →
+ â\88\80V2. â¦\83G, K0â¦\84 â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80T2. â¬\86*[⫯i] V2 â\89\98 T2 →
∀L1. ⦃G, L0⦄ ⊢ ➡[h, #i] L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡[h, #i] L2 →
∃∃T. ⦃G, L1⦄ ⊢ #i ➡[h] T & ⦃G, L2⦄ ⊢ T2 ➡[h] T.
#h #G #L0 #i #IH #K0 #V0 #HLK0 #V2 #HV02 #T2 #HVT2 #L1 #HL01 #L2 #HL02
∀L1. ⦃G, L⦄ ⊢ ➡[h, T] L1 → ∀L2. ⦃G, L⦄ ⊢ ➡[h, T] L2 →
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡[h] T0 & ⦃G, L2⦄ ⊢ T2 ➡[h] T0
) →
- â\88\80K0,V0. â¬\87*[i] L0 â\89¡ K0.ⓓV0 →
- â\88\80V1. â¦\83G, K0â¦\84 â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80T1. â¬\86*[⫯i] V1 â\89¡ T1 →
- â\88\80KX,VX. â¬\87*[i] L0 â\89¡ KX.ⓓVX →
- â\88\80V2. â¦\83G, KXâ¦\84 â\8a¢ VX â\9e¡[h] V2 â\86\92 â\88\80T2. â¬\86*[⫯i] V2 â\89¡ T2 →
+ â\88\80K0,V0. â¬\87*[i] L0 â\89\98 K0.ⓓV0 →
+ â\88\80V1. â¦\83G, K0â¦\84 â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80T1. â¬\86*[⫯i] V1 â\89\98 T1 →
+ â\88\80KX,VX. â¬\87*[i] L0 â\89\98 KX.ⓓVX →
+ â\88\80V2. â¦\83G, KXâ¦\84 â\8a¢ VX â\9e¡[h] V2 â\86\92 â\88\80T2. â¬\86*[⫯i] V2 â\89\98 T2 →
∀L1. ⦃G, L0⦄ ⊢ ➡[h, #i] L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡[h, #i] L2 →
∃∃T. ⦃G, L1⦄ ⊢ T1 ➡[h] T & ⦃G, L2⦄ ⊢ T2 ➡[h] T.
#h #G #L0 #i #IH #K0 #V0 #HLK0 #V1 #HV01 #T1 #HVT1
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡[h] T0 & ⦃G, L2⦄ ⊢ T2 ➡[h] T0
) →
∀V1. ⦃G, L0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⦃G, L0.ⓓV0⦄ ⊢ T0 ➡[h] T1 →
- â\88\80T2. â¦\83G, L0.â\93\93V0â¦\84 â\8a¢ T0 â\9e¡[h] T2 â\86\92 â\88\80X2. â¬\86*[1] X2 â\89¡ T2 →
+ â\88\80T2. â¦\83G, L0.â\93\93V0â¦\84 â\8a¢ T0 â\9e¡[h] T2 â\86\92 â\88\80X2. â¬\86*[1] X2 â\89\98 T2 →
∀L1. ⦃G, L0⦄ ⊢ ➡[h, +ⓓV0.T0] L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡[h, +ⓓV0.T0] L2 →
∃∃T. ⦃G, L1⦄ ⊢ +ⓓV1.T1 ➡[h] T & ⦃G, L2⦄ ⊢ X2 ➡[h] T.
#h #G #L0 #V0 #T0 #IH #V1 #HV01 #T1 #HT01
∀L1. ⦃G, L⦄ ⊢ ➡[h, T] L1 → ∀L2. ⦃G, L⦄ ⊢ ➡[h, T] L2 →
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡[h] T0 & ⦃G, L2⦄ ⊢ T2 ➡[h] T0
) →
- â\88\80T1. â¦\83G, L0.â\93\93V0â¦\84 â\8a¢ T0 â\9e¡[h] T1 â\86\92 â\88\80X1. â¬\86*[1] X1 â\89¡ T1 →
- â\88\80T2. â¦\83G, L0.â\93\93V0â¦\84 â\8a¢ T0 â\9e¡[h] T2 â\86\92 â\88\80X2. â¬\86*[1] X2 â\89¡ T2 →
+ â\88\80T1. â¦\83G, L0.â\93\93V0â¦\84 â\8a¢ T0 â\9e¡[h] T1 â\86\92 â\88\80X1. â¬\86*[1] X1 â\89\98 T1 →
+ â\88\80T2. â¦\83G, L0.â\93\93V0â¦\84 â\8a¢ T0 â\9e¡[h] T2 â\86\92 â\88\80X2. â¬\86*[1] X2 â\89\98 T2 →
∀L1. ⦃G, L0⦄ ⊢ ➡[h, +ⓓV0.T0] L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡[h, +ⓓV0.T0] L2 →
∃∃T. ⦃G, L1⦄ ⊢ X1 ➡[h] T & ⦃G, L2⦄ ⊢ X2 ➡[h] T.
#h #G #L0 #V0 #T0 #IH #T1 #HT01 #X1 #HXT1
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡[h] T0 & ⦃G, L2⦄ ⊢ T2 ➡[h] T0
) →
∀V1. ⦃G, L0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⦃G, L0⦄ ⊢ ⓓ{p}W0.T0 ➡[h] T1 →
- â\88\80V2. â¦\83G, L0â¦\84 â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80U2. â¬\86*[1] V2 â\89¡ U2 →
+ â\88\80V2. â¦\83G, L0â¦\84 â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80U2. â¬\86*[1] V2 â\89\98 U2 →
∀W2. ⦃G, L0⦄ ⊢ W0 ➡[h] W2 → ∀T2. ⦃G, L0.ⓓW0⦄ ⊢ T0 ➡[h] T2 →
∀L1. ⦃G, L0⦄ ⊢ ➡[h, ⓐV0.ⓓ{p}W0.T0] L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡[h, ⓐV0.ⓓ{p}W0.T0] L2 →
∃∃T. ⦃G, L1⦄ ⊢ ⓐV1.T1 ➡[h] T & ⦃G, L2⦄ ⊢ ⓓ{p}W2.ⓐU2.T2 ➡[h] T.
∀L1. ⦃G, L⦄ ⊢ ➡[h, T] L1 → ∀L2. ⦃G, L⦄ ⊢ ➡[h, T] L2 →
∃∃T0. ⦃G, L1⦄ ⊢ T1 ➡[h] T0 & ⦃G, L2⦄ ⊢ T2 ➡[h] T0
) →
- â\88\80V1. â¦\83G, L0â¦\84 â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80U1. â¬\86*[1] V1 â\89¡ U1 →
+ â\88\80V1. â¦\83G, L0â¦\84 â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80U1. â¬\86*[1] V1 â\89\98 U1 →
∀W1. ⦃G, L0⦄ ⊢ W0 ➡[h] W1 → ∀T1. ⦃G, L0.ⓓW0⦄ ⊢ T0 ➡[h] T1 →
- â\88\80V2. â¦\83G, L0â¦\84 â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80U2. â¬\86*[1] V2 â\89¡ U2 →
+ â\88\80V2. â¦\83G, L0â¦\84 â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80U2. â¬\86*[1] V2 â\89\98 U2 →
∀W2. ⦃G, L0⦄ ⊢ W0 ➡[h] W2 → ∀T2. ⦃G, L0.ⓓW0⦄ ⊢ T0 ➡[h] T2 →
∀L1. ⦃G, L0⦄ ⊢ ➡[h, ⓐV0.ⓓ{p}W0.T0] L1 → ∀L2. ⦃G, L0⦄ ⊢ ➡[h, ⓐV0.ⓓ{p}W0.T0] L2 →
∃∃T. ⦃G, L1⦄ ⊢ ⓓ{p}W1.ⓐU1.T1 ➡[h] T & ⦃G, L2⦄ ⊢ ⓓ{p}W2.ⓐU2.T2 ➡[h] T.
lemma lfpx_drops_trans: ∀h,G. dropable_dx (cpx h G).
/2 width=5 by lfxs_dropable_dx/ qed-.
-lemma lfpx_inv_lref_pair_sn: â\88\80h,G,L1,L2,i. â¦\83G, L1â¦\84 â\8a¢ â¬\88[h, #i] L2 â\86\92 â\88\80I,K1,V1. â¬\87*[i] L1 â\89¡ K1.ⓑ{I}V1 →
- â\88\83â\88\83K2,V2. â¬\87*[i] L2 â\89¡ K2.ⓑ{I}V2 & ⦃G, K1⦄ ⊢ ⬈[h, V1] K2 & ⦃G, K1⦄ ⊢ V1 ⬈[h] V2.
+lemma lfpx_inv_lref_pair_sn: â\88\80h,G,L1,L2,i. â¦\83G, L1â¦\84 â\8a¢ â¬\88[h, #i] L2 â\86\92 â\88\80I,K1,V1. â¬\87*[i] L1 â\89\98 K1.ⓑ{I}V1 →
+ â\88\83â\88\83K2,V2. â¬\87*[i] L2 â\89\98 K2.ⓑ{I}V2 & ⦃G, K1⦄ ⊢ ⬈[h, V1] K2 & ⦃G, K1⦄ ⊢ V1 ⬈[h] V2.
/2 width=3 by lfxs_inv_lref_pair_sn/ qed-.
-lemma lfpx_inv_lref_pair_dx: â\88\80h,G,L1,L2,i. â¦\83G, L1â¦\84 â\8a¢ â¬\88[h, #i] L2 â\86\92 â\88\80I,K2,V2. â¬\87*[i] L2 â\89¡ K2.ⓑ{I}V2 →
- â\88\83â\88\83K1,V1. â¬\87*[i] L1 â\89¡ K1.ⓑ{I}V1 & ⦃G, K1⦄ ⊢ ⬈[h, V1] K2 & ⦃G, K1⦄ ⊢ V1 ⬈[h] V2.
+lemma lfpx_inv_lref_pair_dx: â\88\80h,G,L1,L2,i. â¦\83G, L1â¦\84 â\8a¢ â¬\88[h, #i] L2 â\86\92 â\88\80I,K2,V2. â¬\87*[i] L2 â\89\98 K2.ⓑ{I}V2 →
+ â\88\83â\88\83K1,V1. â¬\87*[i] L1 â\89\98 K1.ⓑ{I}V1 & ⦃G, K1⦄ ⊢ ⬈[h, V1] K2 & ⦃G, K1⦄ ⊢ V1 ⬈[h] V2.
/2 width=3 by lfxs_inv_lref_pair_dx/ qed-.
(* Inversion lemmas with uncounted parallel rt-transition for local envs ****)
lemma lfpx_inv_lpx_lfeq: ∀h,G,L1,L2,T. ⦃G, L1⦄ ⊢ ⬈[h, T] L2 →
- â\88\83â\88\83L. â¦\83G, L1â¦\84 â\8a¢ â¬\88[h] L & L â\89\90[T] L2.
+ â\88\83â\88\83L. â¦\83G, L1â¦\84 â\8a¢ â¬\88[h] L & L â\89¡[T] L2.
/3 width=3 by lfpx_fsge_comp, lfxs_inv_lex_lfeq/ qed-.
(* Properties with generic slicing for local environments *******************)
-lemma fqup_drops_succ: â\88\80b,G,K,T,i,L,U. â¬\87*[⫯i] L â\89¡ K â\86\92 â¬\86*[⫯i] T â\89¡ U →
+lemma fqup_drops_succ: â\88\80b,G,K,T,i,L,U. â¬\87*[⫯i] L â\89\98 K â\86\92 â¬\86*[⫯i] T â\89\98 U →
⦃G, L, U⦄ ⊐+[b] ⦃G, K, T⦄.
#b #G #K #T #i elim i -i
[ #L #U #HLK #HTU elim (drops_inv_succ … HLK) -HLK
]
qed.
-lemma fqup_drops_strap1: â\88\80b,G1,G2,L1,K1,K2,T1,T2,U1,i. â¬\87*[i] L1 â\89¡ K1 â\86\92 â¬\86*[i] T1 â\89¡ U1 →
+lemma fqup_drops_strap1: â\88\80b,G1,G2,L1,K1,K2,T1,T2,U1,i. â¬\87*[i] L1 â\89\98 K1 â\86\92 â¬\86*[i] T1 â\89\98 U1 →
⦃G1, K1, T1⦄ ⊐[b] ⦃G2, K2, T2⦄ → ⦃G1, L1, U1⦄ ⊐+[b] ⦃G2, K2, T2⦄.
#b #G1 #G2 #L1 #K1 #K2 #T1 #T2 #U1 *
[ #HLK1 #HTU1 #HT12
]
qed-.
-lemma fqup_lref: â\88\80b,I,G,L,K,V,i. â¬\87*[i] L â\89¡ K.ⓑ{I}V → ⦃G, L, #i⦄ ⊐+[b] ⦃G, K, V⦄.
+lemma fqup_lref: â\88\80b,I,G,L,K,V,i. â¬\87*[i] L â\89\98 K.ⓑ{I}V → ⦃G, L, #i⦄ ⊐+[b] ⦃G, K, V⦄.
/2 width=6 by fqup_drops_strap1/ qed.
| ⦃G1, L1, V1⦄ ⊐*[b] ⦃G2, L2, T2⦄
| ⦃G1, L1.ⓑ{I}V1, T1⦄ ⊐*[b] ⦃G2, L2, T2⦄
| ⦃G1, L1.ⓧ, T1⦄ ⊐*[b] ⦃G2, L2, T2⦄ ∧ b = Ⓕ
- | â\88\83â\88\83J,L,T. â¦\83G1, L, Tâ¦\84 â\8a\90*[b] â¦\83G2, L2, T2â¦\84 & â¬\86*[1] T â\89¡ ⓑ{p,I}V1.T1 & L1 = L.ⓘ{J}.
+ | â\88\83â\88\83J,L,T. â¦\83G1, L, Tâ¦\84 â\8a\90*[b] â¦\83G2, L2, T2â¦\84 & â¬\86*[1] T â\89\98 ⓑ{p,I}V1.T1 & L1 = L.ⓘ{J}.
#b #p #I #G1 #G2 #L1 #L2 #V1 #T1 #T2 #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or5_intro0/
#G #L #T #H elim (fqu_inv_bind1 … H) -H *
[4: #J ] #H1 #H2 #H3 [4: #Hb ] #H destruct
∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓑ{p,I}V1.T1 = T2
| ⦃G1, L1, V1⦄ ⊐* ⦃G2, L2, T2⦄
| ⦃G1, L1.ⓑ{I}V1, T1⦄ ⊐* ⦃G2, L2, T2⦄
- | â\88\83â\88\83J,L,T. â¦\83G1, L, Tâ¦\84 â\8a\90* â¦\83G2, L2, T2â¦\84 & â¬\86*[1] T â\89¡ ⓑ{p,I}V1.T1 & L1 = L.ⓘ{J}.
+ | â\88\83â\88\83J,L,T. â¦\83G1, L, Tâ¦\84 â\8a\90* â¦\83G2, L2, T2â¦\84 & â¬\86*[1] T â\89\98 ⓑ{p,I}V1.T1 & L1 = L.ⓘ{J}.
#p #I #G1 #G2 #L1 #L2 #V1 #T1 #T2 #H elim (fqus_inv_bind1 … H) -H [1,4: * ]
/3 width=1 by and3_intro, or4_intro0, or4_intro1, or4_intro2, or4_intro3, ex3_3_intro/
#_ #H destruct
∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓕ{I}V1.T1 = T2
| ⦃G1, L1, V1⦄ ⊐*[b] ⦃G2, L2, T2⦄
| ⦃G1, L1, T1⦄ ⊐*[b] ⦃G2, L2, T2⦄
- | â\88\83â\88\83J,L,T. â¦\83G1, L, Tâ¦\84 â\8a\90*[b] â¦\83G2, L2, T2â¦\84 & â¬\86*[1] T â\89¡ ⓕ{I}V1.T1 & L1 = L.ⓘ{J}.
+ | â\88\83â\88\83J,L,T. â¦\83G1, L, Tâ¦\84 â\8a\90*[b] â¦\83G2, L2, T2â¦\84 & â¬\86*[1] T â\89\98 ⓕ{I}V1.T1 & L1 = L.ⓘ{J}.
#b #I #G1 #G2 #L1 #L2 #V1 #T1 #T2 #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or4_intro0/
#G #L #T #H elim (fqu_inv_flat1 … H) -H *
[3: #J ] #H1 #H2 #H3 #H destruct
(* Properties with generic slicing for local environments *******************)
-lemma fqus_drops: â\88\80b,G,L,K,T,U,i. â¬\87*[i] L â\89¡ K â\86\92 â¬\86*[i] T â\89¡ U →
+lemma fqus_drops: â\88\80b,G,L,K,T,U,i. â¬\87*[i] L â\89\98 K â\86\92 â¬\86*[i] T â\89\98 U →
⦃G, L, U⦄ ⊐*[b] ⦃G, K, T⦄.
#b #G #L #K #T #U * /3 width=3 by fqup_drops_succ, fqup_fqus/
#HLK #HTU <(lifts_fwd_isid … HTU) -U // <(drops_fwd_isid … HLK) -K //
| fqu_bind_dx: ∀p,I,G,L,V,T. fqu b G L (ⓑ{p,I}V.T) G (L.ⓑ{I}V) T
| fqu_clear : ∀p,I,G,L,V,T. b = Ⓕ → fqu b G L (ⓑ{p,I}V.T) G (L.ⓧ) T
| fqu_flat_dx: ∀I,G,L,V,T. fqu b G L (ⓕ{I}V.T) G L T
-| fqu_drop : â\88\80I,G,L,T,U. â¬\86*[1] T â\89¡ U → fqu b G (L.ⓘ{I}) U G L T
+| fqu_drop : â\88\80I,G,L,T,U. â¬\86*[1] T â\89\98 U → fqu b G (L.ⓘ{I}) U G L T
.
interpretation
∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2
| ∧∧ G1 = G2 & L1.ⓑ{I}V1 = L2 & U1 = T2
| ∧∧ G1 = G2 & L1.ⓧ = L2 & U1 = T2 & b = Ⓕ
- | â\88\83â\88\83J. G1 = G2 & L1 = L2.â\93\98{J} & â¬\86*[1] T2 â\89¡ ⓑ{p,I}V1.U1.
+ | â\88\83â\88\83J. G1 = G2 & L1 = L2.â\93\98{J} & â¬\86*[1] T2 â\89\98 ⓑ{p,I}V1.U1.
#b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2
[ #I #G #L #T #q #J #V0 #U0 #H destruct
| #I #G #L #V #T #q #J #V0 #U0 #H destruct /3 width=1 by and3_intro, or4_intro0/
∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2
| ∧∧ G1 = G2 & L1.ⓑ{I}V1 = L2 & U1 = T2
| ∧∧ G1 = G2 & L1.ⓧ = L2 & U1 = T2 & b = Ⓕ
- | â\88\83â\88\83J. G1 = G2 & L1 = L2.â\93\98{J} & â¬\86*[1] T2 â\89¡ ⓑ{p,I}V1.U1.
+ | â\88\83â\88\83J. G1 = G2 & L1 = L2.â\93\98{J} & â¬\86*[1] T2 â\89\98 ⓑ{p,I}V1.U1.
/2 width=4 by fqu_inv_bind1_aux/ qed-.
lemma fqu_inv_bind1_true: ∀p,I,G1,G2,L1,L2,V1,U1,T2. ⦃G1, L1, ⓑ{p,I}V1.U1⦄ ⊐ ⦃G2, L2, T2⦄ →
∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2
| ∧∧ G1 = G2 & L1.ⓑ{I}V1 = L2 & U1 = T2
- | â\88\83â\88\83J. G1 = G2 & L1 = L2.â\93\98{J} & â¬\86*[1] T2 â\89¡ ⓑ{p,I}V1.U1.
+ | â\88\83â\88\83J. G1 = G2 & L1 = L2.â\93\98{J} & â¬\86*[1] T2 â\89\98 ⓑ{p,I}V1.U1.
#p #I #G1 #G2 #L1 #L2 #V1 #U1 #T2 #H elim (fqu_inv_bind1 … H) -H
/3 width=1 by or3_intro0, or3_intro1, or3_intro2/
* #_ #_ #_ #H destruct
∀I,V1,U1. T1 = ⓕ{I}V1.U1 →
∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2
| ∧∧ G1 = G2 & L1 = L2 & U1 = T2
- | â\88\83â\88\83J. G1 = G2 & L1 = L2.â\93\98{J} & â¬\86*[1] T2 â\89¡ ⓕ{I}V1.U1.
+ | â\88\83â\88\83J. G1 = G2 & L1 = L2.â\93\98{J} & â¬\86*[1] T2 â\89\98 ⓕ{I}V1.U1.
#b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2
[ #I #G #L #T #J #V0 #U0 #H destruct
| #I #G #L #V #T #J #V0 #U0 #H destruct /3 width=1 by and3_intro, or3_intro0/
lemma fqu_inv_flat1: ∀b,I,G1,G2,L1,L2,V1,U1,T2. ⦃G1, L1, ⓕ{I}V1.U1⦄ ⊐[b] ⦃G2, L2, T2⦄ →
∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2
| ∧∧ G1 = G2 & L1 = L2 & U1 = T2
- | â\88\83â\88\83J. G1 = G2 & L1 = L2.â\93\98{J} & â¬\86*[1] T2 â\89¡ ⓕ{I}V1.U1.
+ | â\88\83â\88\83J. G1 = G2 & L1 = L2.â\93\98{J} & â¬\86*[1] T2 â\89\98 ⓕ{I}V1.U1.
/2 width=4 by fqu_inv_flat1_aux/ qed-.
(* Advanced inversion lemmas ************************************************)
(* Advanced properties ******************************************************)
(* Basic_2A1: was: aaa_lref *)
-lemma aaa_lref_drops: â\88\80I,G,K,V,B,i,L. â¬\87*[i] L â\89¡ K.ⓑ{I}V → ⦃G, K⦄ ⊢ V ⁝ B → ⦃G, L⦄ ⊢ #i ⁝ B.
+lemma aaa_lref_drops: â\88\80I,G,K,V,B,i,L. â¬\87*[i] L â\89\98 K.ⓑ{I}V → ⦃G, K⦄ ⊢ V ⁝ B → ⦃G, L⦄ ⊢ #i ⁝ B.
#I #G #K #V #B #i elim i -i
[ #L #H lapply (drops_fwd_isid … H ?) -H //
#H destruct /2 width=1 by aaa_zero/
(* Basic_2A1: was: aaa_inv_lref *)
lemma aaa_inv_lref_drops: ∀G,A,i,L. ⦃G, L⦄ ⊢ #i ⁝ A →
- â\88\83â\88\83I,K,V. â¬\87*[i] L â\89¡ K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ⁝ A.
+ â\88\83â\88\83I,K,V. â¬\87*[i] L â\89\98 K.ⓑ{I}V & ⦃G, K⦄ ⊢ V ⁝ A.
#G #A #i elim i -i
[ #L #H elim (aaa_inv_zero … H) -H /3 width=5 by drops_refl, ex2_3_intro/
| #i #IH #L #H elim (aaa_inv_lref … H) -H
(* Basic_2A1: includes: aaa_lift *)
(* Note: it should use drops_split_trans_pair2 *)
-lemma aaa_lifts: â\88\80G,L1,T1,A. â¦\83G, L1â¦\84 â\8a¢ T1 â\81\9d A â\86\92 â\88\80b,f,L2. â¬\87*[b, f] L2 â\89¡ L1 →
- â\88\80T2. â¬\86*[f] T1 â\89¡ T2 → ⦃G, L2⦄ ⊢ T2 ⁝ A.
+lemma aaa_lifts: â\88\80G,L1,T1,A. â¦\83G, L1â¦\84 â\8a¢ T1 â\81\9d A â\86\92 â\88\80b,f,L2. â¬\87*[b, f] L2 â\89\98 L1 →
+ â\88\80T2. â¬\86*[f] T1 â\89\98 T2 → ⦃G, L2⦄ ⊢ T2 ⁝ A.
@(fqup_wf_ind_eq (Ⓣ)) #G0 #L0 #T0 #IH #G #L1 * *
[ #s #HG #HL #HT #A #H #b #f #L2 #HL21 #X #HX -b -IH
lapply (aaa_inv_sort … H) -H #H destruct
(* Inversion lemmas with generic slicing for local environments *************)
(* Basic_2A1: includes: aaa_inv_lift *)
-lemma aaa_inv_lifts: â\88\80G,L2,T2,A. â¦\83G, L2â¦\84 â\8a¢ T2 â\81\9d A â\86\92 â\88\80b,f,L1. â¬\87*[b, f] L2 â\89¡ L1 →
- â\88\80T1. â¬\86*[f] T1 â\89¡ T2 → ⦃G, L1⦄ ⊢ T1 ⁝ A.
+lemma aaa_inv_lifts: â\88\80G,L2,T2,A. â¦\83G, L2â¦\84 â\8a¢ T2 â\81\9d A â\86\92 â\88\80b,f,L1. â¬\87*[b, f] L2 â\89\98 L1 →
+ â\88\80T1. â¬\86*[f] T1 â\89\98 T2 → ⦃G, L1⦄ ⊢ T1 ⁝ A.
@(fqup_wf_ind_eq (Ⓣ)) #G0 #L0 #T0 #IH #G #L2 * *
[ #s #HG #HL #HT #A #H #b #f #L1 #HL21 #X #HX -b -IH
lapply (aaa_inv_sort … H) -H #H destruct
(* Properties with syntactic equivalence on referred entries ****************)
-lemma lfeq_lfdeq_trans: â\88\80h,o,L1,L,T1. L1 â\89\90[T1] L →
+lemma lfeq_lfdeq_trans: â\88\80h,o,L1,L,T1. L1 â\89¡[T1] L →
∀G1,G2,L2,T2. ⦃G1, L, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄ → ⦃G1, L1, T1⦄ ≛[h, o] ⦃G2, L2, T2⦄.
#h #o #L1 #L #T1 #HL1 #G1 #G2 #L2 #T2 #H
elim (ffdeq_inv_gen_sn … H) -H #H #HL2 #T12 destruct
frees (L.ⓘ{I}) (#⫯i) (↑f)
| frees_gref: ∀f,L,l. 𝐈⦃f⦄ → frees L (§l) f
| frees_bind: ∀f1,f2,f,p,I,L,V,T. frees L V f1 → frees (L.ⓑ{I}V) T f2 →
- f1 â\8b\93 ⫱f2 â\89¡ f → frees L (ⓑ{p,I}V.T) f
+ f1 â\8b\93 ⫱f2 â\89\98 f → frees L (ⓑ{p,I}V.T) f
| frees_flat: ∀f1,f2,f,I,L,V,T. frees L V f1 → frees L T f2 →
- f1 â\8b\93 f2 â\89¡ f → frees L (ⓕ{I}V.T) f
+ f1 â\8b\93 f2 â\89\98 f → frees L (ⓕ{I}V.T) f
.
interpretation
(* Basic inversion lemmas ***************************************************)
-fact frees_inv_sort_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89¡ f → ∀x. X = ⋆x → 𝐈⦃f⦄.
+fact frees_inv_sort_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89\98 f → ∀x. X = ⋆x → 𝐈⦃f⦄.
#L #X #f #H elim H -f -L -X //
[ #f #i #_ #x #H destruct
| #f #_ #L #V #_ #_ #x #H destruct
]
qed-.
-lemma frees_inv_sort: â\88\80f,L,s. L â\8a¢ ð\9d\90\85*â¦\83â\8b\86sâ¦\84 â\89¡ f → 𝐈⦃f⦄.
+lemma frees_inv_sort: â\88\80f,L,s. L â\8a¢ ð\9d\90\85*â¦\83â\8b\86sâ¦\84 â\89\98 f → 𝐈⦃f⦄.
/2 width=5 by frees_inv_sort_aux/ qed-.
-fact frees_inv_atom_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89¡ f → ∀i. L = ⋆ → X = #i →
+fact frees_inv_atom_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89\98 f → ∀i. L = ⋆ → X = #i →
∃∃g. 𝐈⦃g⦄ & f = ↑*[i]⫯g.
#f #L #X #H elim H -f -L -X
[ #f #L #s #_ #j #_ #H destruct
]
qed-.
-lemma frees_inv_atom: â\88\80f,i. â\8b\86 â\8a¢ ð\9d\90\85*â¦\83#iâ¦\84 â\89¡ f → ∃∃g. 𝐈⦃g⦄ & f = ↑*[i]⫯g.
+lemma frees_inv_atom: â\88\80f,i. â\8b\86 â\8a¢ ð\9d\90\85*â¦\83#iâ¦\84 â\89\98 f → ∃∃g. 𝐈⦃g⦄ & f = ↑*[i]⫯g.
/2 width=5 by frees_inv_atom_aux/ qed-.
-fact frees_inv_pair_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89¡ f → ∀I,K,V. L = K.ⓑ{I}V → X = #0 →
- â\88\83â\88\83g. K â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ g & f = ⫯g.
+fact frees_inv_pair_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89\98 f → ∀I,K,V. L = K.ⓑ{I}V → X = #0 →
+ â\88\83â\88\83g. K â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 g & f = ⫯g.
#f #L #X * -f -L -X
[ #f #L #s #_ #Z #Y #X #_ #H destruct
| #f #i #_ #Z #Y #X #H destruct
]
qed-.
-lemma frees_inv_pair: â\88\80f,I,K,V. K.â\93\91{I}V â\8a¢ ð\9d\90\85*â¦\83#0â¦\84 â\89¡ f â\86\92 â\88\83â\88\83g. K â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ g & f = ⫯g.
+lemma frees_inv_pair: â\88\80f,I,K,V. K.â\93\91{I}V â\8a¢ ð\9d\90\85*â¦\83#0â¦\84 â\89\98 f â\86\92 â\88\83â\88\83g. K â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 g & f = ⫯g.
/2 width=6 by frees_inv_pair_aux/ qed-.
-fact frees_inv_unit_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89¡ f → ∀I,K. L = K.ⓤ{I} → X = #0 →
+fact frees_inv_unit_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89\98 f → ∀I,K. L = K.ⓤ{I} → X = #0 →
∃∃g. 𝐈⦃g⦄ & f = ⫯g.
#f #L #X * -f -L -X
[ #f #L #s #_ #Z #Y #_ #H destruct
]
qed-.
-lemma frees_inv_unit: â\88\80f,I,K. K.â\93¤{I} â\8a¢ ð\9d\90\85*â¦\83#0â¦\84 â\89¡ f → ∃∃g. 𝐈⦃g⦄ & f = ⫯g.
+lemma frees_inv_unit: â\88\80f,I,K. K.â\93¤{I} â\8a¢ ð\9d\90\85*â¦\83#0â¦\84 â\89\98 f → ∃∃g. 𝐈⦃g⦄ & f = ⫯g.
/2 width=7 by frees_inv_unit_aux/ qed-.
-fact frees_inv_lref_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89¡ f → ∀I,K,j. L = K.ⓘ{I} → X = #(⫯j) →
- â\88\83â\88\83g. K â\8a¢ ð\9d\90\85*â¦\83#jâ¦\84 â\89¡ g & f = ↑g.
+fact frees_inv_lref_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89\98 f → ∀I,K,j. L = K.ⓘ{I} → X = #(⫯j) →
+ â\88\83â\88\83g. K â\8a¢ ð\9d\90\85*â¦\83#jâ¦\84 â\89\98 g & f = ↑g.
#f #L #X * -f -L -X
[ #f #L #s #_ #Z #Y #j #_ #H destruct
| #f #i #_ #Z #Y #j #H destruct
]
qed-.
-lemma frees_inv_lref: â\88\80f,I,K,i. K.â\93\98{I} â\8a¢ ð\9d\90\85*â¦\83#(⫯i)â¦\84 â\89¡ f →
- â\88\83â\88\83g. K â\8a¢ ð\9d\90\85*â¦\83#iâ¦\84 â\89¡ g & f = ↑g.
+lemma frees_inv_lref: â\88\80f,I,K,i. K.â\93\98{I} â\8a¢ ð\9d\90\85*â¦\83#(⫯i)â¦\84 â\89\98 f →
+ â\88\83â\88\83g. K â\8a¢ ð\9d\90\85*â¦\83#iâ¦\84 â\89\98 g & f = ↑g.
/2 width=6 by frees_inv_lref_aux/ qed-.
-fact frees_inv_gref_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89¡ f → ∀x. X = §x → 𝐈⦃f⦄.
+fact frees_inv_gref_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89\98 f → ∀x. X = §x → 𝐈⦃f⦄.
#f #L #X #H elim H -f -L -X //
[ #f #i #_ #x #H destruct
| #f #_ #L #V #_ #_ #x #H destruct
]
qed-.
-lemma frees_inv_gref: â\88\80f,L,l. L â\8a¢ ð\9d\90\85*â¦\83§lâ¦\84 â\89¡ f → 𝐈⦃f⦄.
+lemma frees_inv_gref: â\88\80f,L,l. L â\8a¢ ð\9d\90\85*â¦\83§lâ¦\84 â\89\98 f → 𝐈⦃f⦄.
/2 width=5 by frees_inv_gref_aux/ qed-.
-fact frees_inv_bind_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89¡ f → ∀p,I,V,T. X = ⓑ{p,I}V.T →
- â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ f1 & L.â\93\91{I}V â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f2 & f1 â\8b\93 ⫱f2 â\89¡ f.
+fact frees_inv_bind_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89\98 f → ∀p,I,V,T. X = ⓑ{p,I}V.T →
+ â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 f1 & L.â\93\91{I}V â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f2 & f1 â\8b\93 ⫱f2 â\89\98 f.
#f #L #X * -f -L -X
[ #f #L #s #_ #q #J #W #U #H destruct
| #f #i #_ #q #J #W #U #H destruct
]
qed-.
-lemma frees_inv_bind: â\88\80f,p,I,L,V,T. L â\8a¢ ð\9d\90\85*â¦\83â\93\91{p,I}V.Tâ¦\84 â\89¡ f →
- â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ f1 & L.â\93\91{I}V â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f2 & f1 â\8b\93 ⫱f2 â\89¡ f.
+lemma frees_inv_bind: â\88\80f,p,I,L,V,T. L â\8a¢ ð\9d\90\85*â¦\83â\93\91{p,I}V.Tâ¦\84 â\89\98 f →
+ â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 f1 & L.â\93\91{I}V â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f2 & f1 â\8b\93 ⫱f2 â\89\98 f.
/2 width=4 by frees_inv_bind_aux/ qed-.
-fact frees_inv_flat_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89¡ f → ∀I,V,T. X = ⓕ{I}V.T →
- â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ f1 & L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f2 & f1 â\8b\93 f2 â\89¡ f.
+fact frees_inv_flat_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89\98 f → ∀I,V,T. X = ⓕ{I}V.T →
+ â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 f1 & L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f2 & f1 â\8b\93 f2 â\89\98 f.
#f #L #X * -f -L -X
[ #f #L #s #_ #J #W #U #H destruct
| #f #i #_ #J #W #U #H destruct
]
qed-.
-lemma frees_inv_flat: â\88\80f,I,L,V,T. L â\8a¢ ð\9d\90\85*â¦\83â\93\95{I}V.Tâ¦\84 â\89¡ f →
- â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ f1 & L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f2 & f1 â\8b\93 f2 â\89¡ f.
+lemma frees_inv_flat: â\88\80f,I,L,V,T. L â\8a¢ ð\9d\90\85*â¦\83â\93\95{I}V.Tâ¦\84 â\89\98 f →
+ â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 f1 & L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f2 & f1 â\8b\93 f2 â\89\98 f.
/2 width=4 by frees_inv_flat_aux/ qed-.
(* Basic properties ********************************************************)
-lemma frees_eq_repl_back: â\88\80L,T. eq_repl_back â\80¦ (λf. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f).
+lemma frees_eq_repl_back: â\88\80L,T. eq_repl_back â\80¦ (λf. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f).
#L #T #f1 #H elim H -f1 -L -T
[ /3 width=3 by frees_sort, isid_eq_repl_back/
| #f1 #i #Hf1 #g2 #H
]
qed-.
-lemma frees_eq_repl_fwd: â\88\80L,T. eq_repl_fwd â\80¦ (λf. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f).
+lemma frees_eq_repl_fwd: â\88\80L,T. eq_repl_fwd â\80¦ (λf. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f).
#L #T @eq_repl_sym /2 width=3 by frees_eq_repl_back/
qed-.
-lemma frees_lref_push: â\88\80f,i. â\8b\86 â\8a¢ ð\9d\90\85*â¦\83#iâ¦\84 â\89¡ f â\86\92 â\8b\86 â\8a¢ ð\9d\90\85*â¦\83#⫯iâ¦\84 â\89¡ ↑f.
+lemma frees_lref_push: â\88\80f,i. â\8b\86 â\8a¢ ð\9d\90\85*â¦\83#iâ¦\84 â\89\98 f â\86\92 â\8b\86 â\8a¢ ð\9d\90\85*â¦\83#⫯iâ¦\84 â\89\98 ↑f.
#f #i #H
elim (frees_inv_atom … H) -H #g #Hg #H destruct
/2 width=1 by frees_atom/
(* Forward lemmas with test for finite colength *****************************)
-lemma frees_fwd_isfin: â\88\80f,L,T. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f → 𝐅⦃f⦄.
+lemma frees_fwd_isfin: â\88\80f,L,T. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f → 𝐅⦃f⦄.
#f #L #T #H elim H -f -L -T
/4 width=5 by sor_isfin, isfin_isid, isfin_tl, isfin_pushs, isfin_push, isfin_next/
qed-.
(* Properties with append for local environments ****************************)
-lemma frees_append_void: â\88\80f,K,T. K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f â\86\92 â\93§.K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f.
+lemma frees_append_void: â\88\80f,K,T. K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f â\86\92 â\93§.K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f.
#f #K #T #H elim H -f -K -T
[ /2 width=1 by frees_sort/
| #f * /3 width=1 by frees_atom, frees_unit, frees_lref/
(* Inversion lemmas with append for local environments **********************)
-fact frees_inv_append_void_aux: â\88\80f,L,T. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f →
- â\88\80K. L = â\93§.K â\86\92 K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f.
+fact frees_inv_append_void_aux: â\88\80f,L,T. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f →
+ â\88\80K. L = â\93§.K â\86\92 K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f.
#f #L #T #H elim H -f -L -T
[ /2 width=1 by frees_sort/
| #f #i #_ #K #H
]
qed-.
-lemma frees_inv_append_void: â\88\80f,K,T. â\93§.K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f â\86\92 K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f.
+lemma frees_inv_append_void: â\88\80f,K,T. â\93§.K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f â\86\92 K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f.
/2 width=3 by frees_inv_append_void_aux/ qed-.
(* Advanced properties ******************************************************)
-lemma frees_atom_drops: â\88\80b,L,i. â¬\87*[b, ð\9d\90\94â\9d´iâ\9dµ] L â\89¡ ⋆ →
- â\88\80f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 L â\8a¢ ð\9d\90\85*â¦\83#iâ¦\84 â\89¡ ↑*[i]⫯f.
+lemma frees_atom_drops: â\88\80b,L,i. â¬\87*[b, ð\9d\90\94â\9d´iâ\9dµ] L â\89\98 ⋆ →
+ â\88\80f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 L â\8a¢ ð\9d\90\85*â¦\83#iâ¦\84 â\89\98 ↑*[i]⫯f.
#b #L elim L -L /2 width=1 by frees_atom/
#L #I #IH *
[ #H lapply (drops_fwd_isid … H ?) -H // #H destruct
]
qed.
-lemma frees_pair_drops: â\88\80f,K,V. K â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ f →
- â\88\80i,I,L. â¬\87*[i] L â\89¡ K.â\93\91{I}V â\86\92 L â\8a¢ ð\9d\90\85*â¦\83#iâ¦\84 â\89¡ ↑*[i] ⫯f.
+lemma frees_pair_drops: â\88\80f,K,V. K â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 f →
+ â\88\80i,I,L. â¬\87*[i] L â\89\98 K.â\93\91{I}V â\86\92 L â\8a¢ ð\9d\90\85*â¦\83#iâ¦\84 â\89\98 ↑*[i] ⫯f.
#f #K #V #Hf #i elim i -i
[ #I #L #H lapply (drops_fwd_isid … H ?) -H /2 width=1 by frees_pair/
| #i #IH #I #L #H elim (drops_inv_succ … H) -H /3 width=2 by frees_lref/
]
qed.
-lemma frees_unit_drops: â\88\80f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 â\88\80I,K,i,L. â¬\87*[i] L â\89¡ K.ⓤ{I} →
- L â\8a¢ ð\9d\90\85*â¦\83#iâ¦\84 â\89¡ ↑*[i] ⫯f.
+lemma frees_unit_drops: â\88\80f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 â\88\80I,K,i,L. â¬\87*[i] L â\89\98 K.ⓤ{I} →
+ L â\8a¢ ð\9d\90\85*â¦\83#iâ¦\84 â\89\98 ↑*[i] ⫯f.
#f #Hf #I #K #i elim i -i
[ #L #H lapply (drops_fwd_isid … H ?) -H /2 width=1 by frees_unit/
| #i #IH #Y #H elim (drops_inv_succ … H) -H
]
qed.
(*
-lemma frees_sort_pushs: â\88\80f,K,s. K â\8a¢ ð\9d\90\85*â¦\83â\8b\86sâ¦\84 â\89¡ f →
- â\88\80i,L. â¬\87*[i] L â\89¡ K â\86\92 L â\8a¢ ð\9d\90\85*â¦\83â\8b\86sâ¦\84 â\89¡ ↑*[i] f.
+lemma frees_sort_pushs: â\88\80f,K,s. K â\8a¢ ð\9d\90\85*â¦\83â\8b\86sâ¦\84 â\89\98 f →
+ â\88\80i,L. â¬\87*[i] L â\89\98 K â\86\92 L â\8a¢ ð\9d\90\85*â¦\83â\8b\86sâ¦\84 â\89\98 ↑*[i] f.
#f #K #s #Hf #i elim i -i
[ #L #H lapply (drops_fwd_isid … H ?) -H //
| #i #IH #L #H elim (drops_inv_succ … H) -H /3 width=1 by frees_sort/
]
qed.
*)
-lemma frees_lref_pushs: â\88\80f,K,j. K â\8a¢ ð\9d\90\85*â¦\83#jâ¦\84 â\89¡ f →
- â\88\80i,L. â¬\87*[i] L â\89¡ K â\86\92 L â\8a¢ ð\9d\90\85*â¦\83#(i+j)â¦\84 â\89¡ ↑*[i] f.
+lemma frees_lref_pushs: â\88\80f,K,j. K â\8a¢ ð\9d\90\85*â¦\83#jâ¦\84 â\89\98 f →
+ â\88\80i,L. â¬\87*[i] L â\89\98 K â\86\92 L â\8a¢ ð\9d\90\85*â¦\83#(i+j)â¦\84 â\89\98 ↑*[i] f.
#f #K #j #Hf #i elim i -i
[ #L #H lapply (drops_fwd_isid … H ?) -H //
| #i #IH #L #H elim (drops_inv_succ … H) -H
]
qed.
(*
-lemma frees_gref_pushs: â\88\80f,K,l. K â\8a¢ ð\9d\90\85*â¦\83§lâ¦\84 â\89¡ f →
- â\88\80i,L. â¬\87*[i] L â\89¡ K â\86\92 L â\8a¢ ð\9d\90\85*â¦\83§lâ¦\84 â\89¡ ↑*[i] f.
+lemma frees_gref_pushs: â\88\80f,K,l. K â\8a¢ ð\9d\90\85*â¦\83§lâ¦\84 â\89\98 f →
+ â\88\80i,L. â¬\87*[i] L â\89\98 K â\86\92 L â\8a¢ ð\9d\90\85*â¦\83§lâ¦\84 â\89\98 ↑*[i] f.
#f #K #l #Hf #i elim i -i
[ #L #H lapply (drops_fwd_isid … H ?) -H //
| #i #IH #L #H elim (drops_inv_succ … H) -H /3 width=1 by frees_gref/
*)
(* Advanced inversion lemmas ************************************************)
-lemma frees_inv_lref_drops: â\88\80L,i,f. L â\8a¢ ð\9d\90\85*â¦\83#iâ¦\84 â\89¡ f →
- â\88¨â\88¨ â\88\83â\88\83g. â¬\87*[â\92», ð\9d\90\94â\9d´iâ\9dµ] L â\89¡ ⋆ & 𝐈⦃g⦄ & f = ↑*[i] ⫯g
- | â\88\83â\88\83g,I,K,V. K â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ g &
- â¬\87*[i] L â\89¡ K.ⓑ{I}V & f = ↑*[i] ⫯g
- | â\88\83â\88\83g,I,K. â¬\87*[i] L â\89¡ K.ⓤ{I} & 𝐈⦃g⦄ & f = ↑*[i] ⫯g.
+lemma frees_inv_lref_drops: â\88\80L,i,f. L â\8a¢ ð\9d\90\85*â¦\83#iâ¦\84 â\89\98 f →
+ â\88¨â\88¨ â\88\83â\88\83g. â¬\87*[â\92», ð\9d\90\94â\9d´iâ\9dµ] L â\89\98 ⋆ & 𝐈⦃g⦄ & f = ↑*[i] ⫯g
+ | â\88\83â\88\83g,I,K,V. K â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 g &
+ â¬\87*[i] L â\89\98 K.ⓑ{I}V & f = ↑*[i] ⫯g
+ | â\88\83â\88\83g,I,K. â¬\87*[i] L â\89\98 K.ⓤ{I} & 𝐈⦃g⦄ & f = ↑*[i] ⫯g.
#L elim L -L
[ #i #g | #L #I #IH * [ #g cases I -I [ #I | #I #V ] -IH | #i #g ] ] #H
[ elim (frees_inv_atom … H) -H #f #Hf #H destruct
(* Properties with generic slicing for local environments *******************)
-lemma frees_lifts: â\88\80b,f1,K,T. K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f1 →
- â\88\80f,L. â¬\87*[b, f] L â\89¡ K â\86\92 â\88\80U. â¬\86*[f] T â\89¡ U →
- â\88\80f2. f ~â\8a\9a f1 â\89¡ f2 â\86\92 L â\8a¢ ð\9d\90\85*â¦\83Uâ¦\84 â\89¡ f2.
+lemma frees_lifts: â\88\80b,f1,K,T. K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f1 →
+ â\88\80f,L. â¬\87*[b, f] L â\89\98 K â\86\92 â\88\80U. â¬\86*[f] T â\89\98 U →
+ â\88\80f2. f ~â\8a\9a f1 â\89\98 f2 â\86\92 L â\8a¢ ð\9d\90\85*â¦\83Uâ¦\84 â\89\98 f2.
#b #f1 #K #T #H lapply (frees_fwd_isfin … H) elim H -f1 -K -T
[ #f1 #K #s #Hf1 #_ #f #L #HLK #U #H2 #f2 #H3
lapply (coafter_isid_inv_dx … H3 … Hf1) -f1 #Hf2
]
qed-.
-lemma frees_lifts_SO: â\88\80b,L,K. â¬\87*[b, ð\9d\90\94â\9d´1â\9dµ] L â\89¡ K â\86\92 â\88\80T,U. â¬\86*[1] T â\89¡ U →
- â\88\80f. K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f â\86\92 L â\8a¢ ð\9d\90\85*â¦\83Uâ¦\84 â\89¡ ↑f.
+lemma frees_lifts_SO: â\88\80b,L,K. â¬\87*[b, ð\9d\90\94â\9d´1â\9dµ] L â\89\98 K â\86\92 â\88\80T,U. â¬\86*[1] T â\89\98 U →
+ â\88\80f. K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f â\86\92 L â\8a¢ ð\9d\90\85*â¦\83Uâ¦\84 â\89\98 ↑f.
#b #L #K #HLK #T #U #HTU #f #Hf
@(frees_lifts b … Hf … HTU) // (**) (* auto fails *)
qed.
(* Forward lemmas with generic slicing for local environments ***************)
-lemma frees_fwd_coafter: â\88\80b,f2,L,U. L â\8a¢ ð\9d\90\85*â¦\83Uâ¦\84 â\89¡ f2 →
- â\88\80f,K. â¬\87*[b, f] L â\89¡ K â\86\92 â\88\80T. â¬\86*[f] T â\89¡ U →
- â\88\80f1. K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f1 â\86\92 f ~â\8a\9a f1 â\89¡ f2.
+lemma frees_fwd_coafter: â\88\80b,f2,L,U. L â\8a¢ ð\9d\90\85*â¦\83Uâ¦\84 â\89\98 f2 →
+ â\88\80f,K. â¬\87*[b, f] L â\89\98 K â\86\92 â\88\80T. â¬\86*[f] T â\89\98 U →
+ â\88\80f1. K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f1 â\86\92 f ~â\8a\9a f1 â\89\98 f2.
/4 width=11 by frees_lifts, frees_mono, coafter_eq_repl_back0/ qed-.
(* Inversion lemmas with generic slicing for local environments *************)
-lemma frees_inv_lifts_ex: â\88\80b,f2,L,U. L â\8a¢ ð\9d\90\85*â¦\83Uâ¦\84 â\89¡ f2 →
- â\88\80f,K. â¬\87*[b, f] L â\89¡ K â\86\92 â\88\80T. â¬\86*[f] T â\89¡ U →
- â\88\83â\88\83f1. f ~â\8a\9a f1 â\89¡ f2 & K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f1.
+lemma frees_inv_lifts_ex: â\88\80b,f2,L,U. L â\8a¢ ð\9d\90\85*â¦\83Uâ¦\84 â\89\98 f2 →
+ â\88\80f,K. â¬\87*[b, f] L â\89\98 K â\86\92 â\88\80T. â¬\86*[f] T â\89\98 U →
+ â\88\83â\88\83f1. f ~â\8a\9a f1 â\89\98 f2 & K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f1.
#b #f2 #L #U #Hf2 #f #K #HLK #T elim (frees_total K T)
/3 width=9 by frees_fwd_coafter, ex2_intro/
qed-.
-lemma frees_inv_lifts_SO: â\88\80b,f,L,U. L â\8a¢ ð\9d\90\85*â¦\83Uâ¦\84 â\89¡ f →
- â\88\80K. â¬\87*[b, ð\9d\90\94â\9d´1â\9dµ] L â\89¡ K â\86\92 â\88\80T. â¬\86*[1] T â\89¡ U →
- K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ ⫱f.
+lemma frees_inv_lifts_SO: â\88\80b,f,L,U. L â\8a¢ ð\9d\90\85*â¦\83Uâ¦\84 â\89\98 f →
+ â\88\80K. â¬\87*[b, ð\9d\90\94â\9d´1â\9dµ] L â\89\98 K â\86\92 â\88\80T. â¬\86*[1] T â\89\98 U →
+ K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 ⫱f.
#b #f #L #U #H #K #HLK #T #HTU elim(frees_inv_lifts_ex … H … HLK … HTU) -b -L -U
#f1 #Hf #Hf1 elim (coafter_inv_nxx … Hf) -Hf
/3 width=5 by frees_eq_repl_back, coafter_isid_inv_sn/
qed-.
-lemma frees_inv_lifts: â\88\80b,f2,L,U. L â\8a¢ ð\9d\90\85*â¦\83Uâ¦\84 â\89¡ f2 →
- â\88\80f,K. â¬\87*[b, f] L â\89¡ K â\86\92 â\88\80T. â¬\86*[f] T â\89¡ U →
- â\88\80f1. f ~â\8a\9a f1 â\89¡ f2 â\86\92 K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f1.
+lemma frees_inv_lifts: â\88\80b,f2,L,U. L â\8a¢ ð\9d\90\85*â¦\83Uâ¦\84 â\89\98 f2 →
+ â\88\80f,K. â¬\87*[b, f] L â\89\98 K â\86\92 â\88\80T. â¬\86*[f] T â\89\98 U →
+ â\88\80f1. f ~â\8a\9a f1 â\89\98 f2 â\86\92 K â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f1.
#b #f2 #L #U #H #f #K #HLK #T #HTU #f1 #Hf2 elim (frees_inv_lifts_ex … H … HLK … HTU) -b -L -U
/3 width=7 by frees_eq_repl_back, coafter_inj/
qed-.
(* Note: this is used by lfxs_conf and might be modified *)
-lemma frees_inv_drops_next: â\88\80f1,L1,T1. L1 â\8a¢ ð\9d\90\85*â¦\83T1â¦\84 â\89¡ f1 →
- â\88\80I2,L2,V2,n. â¬\87*[n] L1 â\89¡ L2.ⓑ{I2}V2 →
+lemma frees_inv_drops_next: â\88\80f1,L1,T1. L1 â\8a¢ ð\9d\90\85*â¦\83T1â¦\84 â\89\98 f1 →
+ â\88\80I2,L2,V2,n. â¬\87*[n] L1 â\89\98 L2.ⓑ{I2}V2 →
∀g1. ⫯g1 = ⫱*[n] f1 →
- â\88\83â\88\83g2. L2 â\8a¢ ð\9d\90\85*â¦\83V2â¦\84 â\89¡ g2 & g2 ⊆ g1.
+ â\88\83â\88\83g2. L2 â\8a¢ ð\9d\90\85*â¦\83V2â¦\84 â\89\98 g2 & g2 ⊆ g1.
#f1 #L1 #T1 #H elim H -f1 -L1 -T1
[ #f1 #L1 #s #Hf1 #I2 #L2 #V2 #n #_ #g1 #H1 -I2 -L1 -s
lapply (isid_tls n … Hf1) -Hf1 <H1 -f1 #Hf1
(* Advanced properties ******************************************************)
(* Note: this replaces lemma 1400 concluding the "big tree" theorem *)
-lemma frees_total: â\88\80L,T. â\88\83f. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f.
+lemma frees_total: â\88\80L,T. â\88\83f. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f.
#L #T @(fqup_wf_ind_eq (Ⓣ) … (⋆) L T) -L -T
#G0 #L0 #T0 #IH #G #L * *
[ /3 width=2 by frees_sort, ex_intro/
(* Advanced main properties *************************************************)
-theorem frees_bind_void: â\88\80f1,L,V. L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ f1 â\86\92 â\88\80f2,T. L.â\93§ â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f2 →
- â\88\80f. f1 â\8b\93 ⫱f2 â\89¡ f â\86\92 â\88\80p,I. L â\8a¢ ð\9d\90\85*â¦\83â\93\91{p,I}V.Tâ¦\84 â\89¡ f.
+theorem frees_bind_void: â\88\80f1,L,V. L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 f1 â\86\92 â\88\80f2,T. L.â\93§ â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f2 →
+ â\88\80f. f1 â\8b\93 ⫱f2 â\89\98 f â\86\92 â\88\80p,I. L â\8a¢ ð\9d\90\85*â¦\83â\93\91{p,I}V.Tâ¦\84 â\89\98 f.
#f1 #L #V #Hf1 #f2 #T #Hf2 #f #Hf #p #I
elim (frees_total (L.ⓑ{I}V) T) #f0 #Hf0
lapply (lsubr_lsubf … Hf2 … Hf0) -Hf2 /2 width=5 by lsubr_unit/ #H02
(* Advanced inversion lemmas ************************************************)
-lemma frees_inv_bind_void: â\88\80f,p,I,L,V,T. L â\8a¢ ð\9d\90\85*â¦\83â\93\91{p,I}V.Tâ¦\84 â\89¡ f →
- â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ f1 & L.â\93§ â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f2 & f1 â\8b\93 ⫱f2 â\89¡ f.
+lemma frees_inv_bind_void: â\88\80f,p,I,L,V,T. L â\8a¢ ð\9d\90\85*â¦\83â\93\91{p,I}V.Tâ¦\84 â\89\98 f →
+ â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 f1 & L.â\93§ â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f2 & f1 â\8b\93 ⫱f2 â\89\98 f.
#f #p #I #L #V #T #H
elim (frees_inv_bind … H) -H #f1 #f2 #Hf1 #Hf2 #Hf
elim (frees_total (L.ⓧ) T) #f0 #Hf0
∀f,i. 𝐈⦃f⦄ → R (⋆) (#i) (↑*[i]⫯f)
) → (
∀f,I,L,V.
- L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ f → R L V f→ R (L.ⓑ{I}V) (#O) (⫯f)
+ L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 f → R L V f→ R (L.ⓑ{I}V) (#O) (⫯f)
) → (
∀f,I,L. 𝐈⦃f⦄ → R (L.ⓤ{I}) (#O) (⫯f)
) → (
∀f,I,L,i.
- L â\8a¢ ð\9d\90\85*â¦\83#iâ¦\84 â\89¡ f → R L (#i) f → R (L.ⓘ{I}) (#(⫯i)) (↑f)
+ L â\8a¢ ð\9d\90\85*â¦\83#iâ¦\84 â\89\98 f → R L (#i) f → R (L.ⓘ{I}) (#(⫯i)) (↑f)
) → (
∀f,L,l. 𝐈⦃f⦄ → R L (§l) f
) → (
∀f1,f2,f,p,I,L,V,T.
- L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ f1 â\86\92 L.â\93§ â\8a¢ð\9d\90\85*â¦\83Tâ¦\84â\89¡ f2 â\86\92 f1 â\8b\93 ⫱f2 â\89¡ f →
+ L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 f1 â\86\92 L.â\93§ â\8a¢ð\9d\90\85*â¦\83Tâ¦\84â\89\98 f2 â\86\92 f1 â\8b\93 ⫱f2 â\89\98 f →
R L V f1 →R (L.ⓧ) T f2 → R L (ⓑ{p,I}V.T) f
) → (
∀f1,f2,f,I,L,V,T.
- L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ f1 â\86\92 L â\8a¢ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f2 â\86\92 f1 â\8b\93 f2 â\89¡ f →
+ L â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 f1 â\86\92 L â\8a¢ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f2 â\86\92 f1 â\8b\93 f2 â\89\98 f →
R L V f1 → R L T f2 → R L (ⓕ{I}V.T) f
) →
- â\88\80L,T,f. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f → R L T f.
+ â\88\80L,T,f. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f → R L T f.
#R #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #L #T
@(fqup_wf_ind_eq (Ⓕ) … (⋆) L T) -L -T #G0 #L0 #T0 #IH #G #L * *
[ #s #HG #HL #HT #f #H destruct -IH
(* Main inversion lemmas ****************************************************)
-theorem frees_mono: â\88\80f1,L,T. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f1 â\86\92 â\88\80f2. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f2 → f1 ≗ f2.
+theorem frees_mono: â\88\80f1,L,T. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f1 â\86\92 â\88\80f2. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f2 → f1 ≗ f2.
#f1 #L #T #H elim H -f1 -L -T
[ /3 width=3 by frees_inv_sort, isid_inv_eq_repl/
| #f1 #i #Hf1 #g2 #H
(* FREE VARIABLES INCLUSION FOR RESTRICTED CLOSURES *************************)
definition fsle: bi_relation lenv term ≝ λL1,T1,L2,T2.
- â\88\83â\88\83n1,n2,f1,f2. L1 â\8a¢ ð\9d\90\85*â¦\83T1â¦\84 â\89¡ f1 & L2 â\8a¢ ð\9d\90\85*â¦\83T2â¦\84 â\89¡ f2 &
+ â\88\83â\88\83n1,n2,f1,f2. L1 â\8a¢ ð\9d\90\85*â¦\83T1â¦\84 â\89\98 f1 & L2 â\8a¢ ð\9d\90\85*â¦\83T2â¦\84 â\89\98 f2 &
L1 ≋ⓧ*[n1, n2] L2 & ⫱*[n1]f1 ⊆ ⫱*[n2]f2.
interpretation "free variables inclusion (restricted closure)"
(* Advanced properties ******************************************************)
-lemma fsle_lifts_sn: â\88\80T1,U1. â¬\86*[1] T1 â\89¡ U1 → ∀L1,L2. |L2| ≤ |L1| →
+lemma fsle_lifts_sn: â\88\80T1,U1. â¬\86*[1] T1 â\89\98 U1 → ∀L1,L2. |L2| ≤ |L1| →
∀T2. ⦃L1, T1⦄ ⊆ ⦃L2, T2⦄ → ⦃L1.ⓧ, U1⦄ ⊆ ⦃L2, T2⦄.
#T1 #U1 #HTU1 #L1 #L2 #H1L #T2
* #n #m #f #g #Hf #Hg #H2L #Hfg
qed-.
lemma fsle_lifts_SO_sn: ∀K1,K2. |K1| = |K2| → ∀V1,V2. ⦃K1, V1⦄ ⊆ ⦃K2, V2⦄ →
- â\88\80W1. â¬\86*[1] V1 â\89¡ W1 → ∀I1,I2. ⦃K1.ⓘ{I1}, W1⦄ ⊆ ⦃K2.ⓑ{I2}V2, #O⦄.
+ â\88\80W1. â¬\86*[1] V1 â\89\98 W1 → ∀I1,I2. ⦃K1.ⓘ{I1}, W1⦄ ⊆ ⦃K2.ⓑ{I2}V2, #O⦄.
#K1 #K2 #HK #V1 #V2
* #n1 #n2 #f1 #f2 #Hf1 #Hf2 #HK12 #Hf12
#W1 #HVW1 #I1 #I2
qed.
lemma fsle_lifts_SO: ∀K1,K2. |K1| = |K2| → ∀T1,T2. ⦃K1, T1⦄ ⊆ ⦃K2, T2⦄ →
- â\88\80U1,U2. â¬\86*[1] T1 â\89¡ U1 â\86\92 â¬\86*[1] T2 â\89¡ U2 →
+ â\88\80U1,U2. â¬\86*[1] T1 â\89\98 U1 â\86\92 â¬\86*[1] T2 â\89\98 U2 →
∀I1,I2. ⦃K1.ⓘ{I1}, U1⦄ ⊆ ⦃K2.ⓘ{I2}, U2⦄.
#K1 #K2 #HK #T1 #T2
* #n1 #n2 #f1 #f2 #Hf1 #Hf2 #HK12 #Hf12
(* Advanced inversion lemmas ************************************************)
-lemma fsle_inv_lifts_sn: â\88\80T1,U1. â¬\86*[1] T1 â\89¡ U1 →
+lemma fsle_inv_lifts_sn: â\88\80T1,U1. â¬\86*[1] T1 â\89\98 U1 →
∀I1,I2,L1,L2,V1,V2,U2. ⦃L1.ⓑ{I1}V1,U1⦄ ⊆ ⦃L2.ⓑ{I2}V2, U2⦄ →
∀p. ⦃L1, T1⦄ ⊆ ⦃L2, ⓑ{p,I2}V2.U2⦄.
#T1 #U1 #HTU1 #I1 #I2 #L1 #L2 #V1 #V2 #U2
(* Advanced inversion lemmas ************************************************)
lemma fsle_frees_trans: ∀L1,L2,T1,T2. ⦃L1, T1⦄ ⊆ ⦃L2, T2⦄ →
- â\88\80f2. L2 â\8a¢ ð\9d\90\85*â¦\83T2â¦\84 â\89¡ f2 →
- â\88\83â\88\83n1,n2,f1. L1 â\8a¢ ð\9d\90\85*â¦\83T1â¦\84 â\89¡ f1 &
+ â\88\80f2. L2 â\8a¢ ð\9d\90\85*â¦\83T2â¦\84 â\89\98 f2 →
+ â\88\83â\88\83n1,n2,f1. L1 â\8a¢ ð\9d\90\85*â¦\83T1â¦\84 â\89\98 f1 &
L1 ≋ⓧ*[n1, n2] L2 & ⫱*[n1]f1 ⊆ ⫱*[n2]f2.
#L1 #L2 #T1 #T2 * #n1 #n2 #f1 #g2 #Hf1 #Hg2 #HL #Hn #f2 #Hf2
lapply (frees_mono … Hg2 … Hf2) -Hg2 -Hf2 #Hgf2
qed-.
lemma fsle_frees_trans_eq: ∀L1,L2. |L1| = |L2| →
- â\88\80T1,T2. â¦\83L1, T1â¦\84 â\8a\86 â¦\83L2, T2â¦\84 â\86\92 â\88\80f2. L2 â\8a¢ ð\9d\90\85*â¦\83T2â¦\84 â\89¡ f2 →
- â\88\83â\88\83f1. L1 â\8a¢ ð\9d\90\85*â¦\83T1â¦\84 â\89¡ f1 & f1 ⊆ f2.
+ â\88\80T1,T2. â¦\83L1, T1â¦\84 â\8a\86 â¦\83L2, T2â¦\84 â\86\92 â\88\80f2. L2 â\8a¢ ð\9d\90\85*â¦\83T2â¦\84 â\89\98 f2 →
+ â\88\83â\88\83f1. L1 â\8a¢ ð\9d\90\85*â¦\83T1â¦\84 â\89\98 f1 & f1 ⊆ f2.
#L1 #L2 #H1L #T1 #T2 #H2L #f2 #Hf2
elim (fsle_frees_trans … H2L … Hf2) -T2 #n1 #n2 #f1 #Hf1 #H2L #Hf12
elim (lveq_inj_length … H2L) // -L2 #H1 #H2 destruct
lemma fsle_inv_frees_eq: ∀L1,L2. |L1| = |L2| →
∀T1,T2. ⦃L1, T1⦄ ⊆ ⦃L2, T2⦄ →
- â\88\80f1. L1 â\8a¢ ð\9d\90\85*â¦\83T1â¦\84 â\89¡ f1 â\86\92 â\88\80f2. L2 â\8a¢ ð\9d\90\85*â¦\83T2â¦\84 â\89¡ f2 →
+ â\88\80f1. L1 â\8a¢ ð\9d\90\85*â¦\83T1â¦\84 â\89\98 f1 â\86\92 â\88\80f2. L2 â\8a¢ ð\9d\90\85*â¦\83T2â¦\84 â\89\98 f2 →
f1 ⊆ f2.
#L1 #L2 #H1L #T1 #T2 #H2L #f1 #Hf1 #f2 #Hf2
elim (fsle_frees_trans_eq … H2L … Hf2) // -L2 -T2
(* Basic_1: was: sc3_arity_csubc *)
theorem acr_aaa_csubc_lifts: ∀RR,RS,RP.
gcp RR RS RP → gcr RR RS RP RP →
- â\88\80G,L1,T,A. â¦\83G, L1â¦\84 â\8a¢ T â\81\9d A â\86\92 â\88\80b,f,L0. â¬\87*[b, f] L0 â\89¡ L1 →
- â\88\80T0. â¬\86*[f] T â\89¡ T0 → ∀L2. G ⊢ L2 ⫃[RP] L0 →
+ â\88\80G,L1,T,A. â¦\83G, L1â¦\84 â\8a¢ T â\81\9d A â\86\92 â\88\80b,f,L0. â¬\87*[b, f] L0 â\89\98 L1 →
+ â\88\80T0. â¬\86*[f] T â\89\98 T0 → ∀L2. G ⊢ L2 ⫃[RP] L0 →
⦃G, L2, T0⦄ ϵ[RP] 〚A〛.
#RR #RS #RP #H1RP #H2RP #G #L1 #T @(fqup_wf_ind_eq (Ⓣ) … G L1 T) -G -L1 -T
#Z #Y #X #IH #G #L1 * [ * | * [ #p ] * ]
∀G,L,Vs. all … (RP G L) Vs → ∀s. C G L (ⒶVs.⋆s).
definition S5 ≝ λC:candidate. ∀I,G,L,K,Vs,V1,V2,i.
- C G L (â\92¶Vs.V2) â\86\92 â¬\86*[⫯i] V1 â\89¡ V2 →
- â¬\87*[i] L â\89¡ K.ⓑ{I}V1 → C G L (ⒶVs.#i).
+ C G L (â\92¶Vs.V2) â\86\92 â¬\86*[⫯i] V1 â\89\98 V2 →
+ â¬\87*[i] L â\89\98 K.ⓑ{I}V1 → C G L (ⒶVs.#i).
definition S6 ≝ λRP,C:candidate.
- â\88\80G,L,V1b,V2b. â¬\86*[1] V1b â\89¡ V2b →
+ â\88\80G,L,V1b,V2b. â¬\86*[1] V1b â\89\98 V2b →
∀a,V,T. C G (L.ⓓV) (ⒶV2b.T) → RP G L V → C G L (ⒶV1b.ⓓ{a}V.T).
definition S7 ≝ λC:candidate.
(* the functional construction for candidates *)
definition cfun: candidate → candidate → candidate ≝
λC1,C2,G,K,T. ∀f,L,W,U.
- â¬\87*[â\92», f] L â\89¡ K â\86\92 â¬\86*[f] T â\89¡ U → C1 G L W → C2 G L (ⓐW.U).
+ â¬\87*[â\92», f] L â\89\98 K â\86\92 â¬\86*[f] T â\89\98 U → C1 G L W → C2 G L (ⓐW.U).
(* the reducibility candidate associated to an atomic arity *)
rec definition acr (RP:candidate) (A:aarity) on A: candidate ≝
lemma acr_abst: ∀RR,RS,RP. gcp RR RS RP → gcr RR RS RP RP →
∀p,G,L,W,T,A,B. ⦃G, L, W⦄ ϵ[RP] 〚B〛 → (
- â\88\80b,f,L0,V0,W0,T0. â¬\87*[b, f] L0 â\89¡ L â\86\92 â¬\86*[f] W â\89¡ W0 â\86\92 â¬\86*[â\86\91f] T â\89¡ T0 →
+ â\88\80b,f,L0,V0,W0,T0. â¬\87*[b, f] L0 â\89\98 L â\86\92 â¬\86*[f] W â\89\98 W0 â\86\92 â¬\86*[â\86\91f] T â\89\98 T0 →
⦃G, L0, V0⦄ ϵ[RP] 〚B〛 → ⦃G, L0, W0⦄ ϵ[RP] 〚B〛 → ⦃G, L0.ⓓⓝW0.V0, T0⦄ ϵ[RP] 〚A〛
) →
⦃G, L, ⓛ{p}W.T⦄ ϵ[RP] 〚②B.A〛.
(* Basic properties ***********************************************************)
-lemma frees_tdeq_conf_lfdeq: â\88\80h,o,f,L1,T1. L1 â\8a¢ ð\9d\90\85*â¦\83T1â¦\84 â\89¡ f → ∀T2. T1 ≛[h, o] T2 →
- â\88\80L2. L1 â\89\9b[h, o, f] L2 â\86\92 L2 â\8a¢ ð\9d\90\85*â¦\83T2â¦\84 â\89¡ f.
+lemma frees_tdeq_conf_lfdeq: â\88\80h,o,f,L1,T1. L1 â\8a¢ ð\9d\90\85*â¦\83T1â¦\84 â\89\98 f → ∀T2. T1 ≛[h, o] T2 →
+ â\88\80L2. L1 â\89\9b[h, o, f] L2 â\86\92 L2 â\8a¢ ð\9d\90\85*â¦\83T2â¦\84 â\89\98 f.
#h #o #f #L1 #T1 #H elim H -f -L1 -T1
[ #f #L1 #s1 #Hf #X #H1 #L2 #_
elim (tdeq_inv_sort1 … H1) -H1 #s2 #d #_ #_ #H destruct
]
qed-.
-lemma frees_tdeq_conf: â\88\80h,o,f,L,T1. L â\8a¢ ð\9d\90\85*â¦\83T1â¦\84 â\89¡ f →
- â\88\80T2. T1 â\89\9b[h, o] T2 â\86\92 L â\8a¢ ð\9d\90\85*â¦\83T2â¦\84 â\89¡ f.
+lemma frees_tdeq_conf: â\88\80h,o,f,L,T1. L â\8a¢ ð\9d\90\85*â¦\83T1â¦\84 â\89\98 f →
+ â\88\80T2. T1 â\89\9b[h, o] T2 â\86\92 L â\8a¢ ð\9d\90\85*â¦\83T2â¦\84 â\89\98 f.
/4 width=7 by frees_tdeq_conf_lfdeq, lexs_refl, ext2_refl/ qed-.
-lemma frees_lfdeq_conf: â\88\80h,o,f,L1,T. L1 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f →
- â\88\80L2. L1 â\89\9b[h, o, f] L2 â\86\92 L2 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f.
+lemma frees_lfdeq_conf: â\88\80h,o,f,L1,T. L1 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f →
+ â\88\80L2. L1 â\89\9b[h, o, f] L2 â\86\92 L2 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f.
/2 width=7 by frees_tdeq_conf_lfdeq, tdeq_refl/ qed-.
lemma tdeq_lfxs_conf: ∀R,h,o. s_r_confluent1 … (cdeq h o) (lfxs R).
(* Basic_2A1: uses: lleq_inv_lift_le lleq_inv_lift_be lleq_inv_lift_ge *)
lemma lfdeq_inv_lifts_bi: ∀h,o,L1,L2,U. L1 ≛[h, o, U] L2 → ∀b,f. 𝐔⦃f⦄ →
- â\88\80K1,K2. â¬\87*[b, f] L1 â\89¡ K1 â\86\92 â¬\87*[b, f] L2 â\89¡ K2 →
- â\88\80T. â¬\86*[f] T â\89¡ U → K1 ≛[h, o, T] K2.
+ â\88\80K1,K2. â¬\87*[b, f] L1 â\89\98 K1 â\86\92 â¬\87*[b, f] L2 â\89\98 K2 →
+ â\88\80T. â¬\86*[f] T â\89\98 U → K1 ≛[h, o, T] K2.
/2 width=10 by lfxs_inv_lifts_bi/ qed-.
-lemma lfdeq_inv_lref_pair_sn: â\88\80h,o,L1,L2,i. L1 â\89\9b[h, o, #i] L2 â\86\92 â\88\80I,K1,V1. â¬\87*[i] L1 â\89¡ K1.ⓑ{I}V1 →
- â\88\83â\88\83K2,V2. â¬\87*[i] L2 â\89¡ K2.ⓑ{I}V2 & K1 ≛[h, o, V1] K2 & V1 ≛[h, o] V2.
+lemma lfdeq_inv_lref_pair_sn: â\88\80h,o,L1,L2,i. L1 â\89\9b[h, o, #i] L2 â\86\92 â\88\80I,K1,V1. â¬\87*[i] L1 â\89\98 K1.ⓑ{I}V1 →
+ â\88\83â\88\83K2,V2. â¬\87*[i] L2 â\89\98 K2.ⓑ{I}V2 & K1 ≛[h, o, V1] K2 & V1 ≛[h, o] V2.
/2 width=3 by lfxs_inv_lref_pair_sn/ qed-.
-lemma lfdeq_inv_lref_pair_dx: â\88\80h,o,L1,L2,i. L1 â\89\9b[h, o, #i] L2 â\86\92 â\88\80I,K2,V2. â¬\87*[i] L2 â\89¡ K2.ⓑ{I}V2 →
- â\88\83â\88\83K1,V1. â¬\87*[i] L1 â\89¡ K1.ⓑ{I}V1 & K1 ≛[h, o, V1] K2 & V1 ≛[h, o] V2.
+lemma lfdeq_inv_lref_pair_dx: â\88\80h,o,L1,L2,i. L1 â\89\9b[h, o, #i] L2 â\86\92 â\88\80I,K2,V2. â¬\87*[i] L2 â\89\98 K2.ⓑ{I}V2 →
+ â\88\83â\88\83K1,V1. â¬\87*[i] L1 â\89\98 K1.ⓑ{I}V1 & K1 ≛[h, o, V1] K2 & V1 ≛[h, o] V2.
/2 width=3 by lfxs_inv_lref_pair_dx/ qed-.
(* Basic_2A1: uses: lleq_lift_le lleq_lift_ge *)
lemma lfdeq_lifts_bi: ∀L1,L2. |L1| = |L2| → ∀h,o,K1,K2,T. K1 ≛[h, o, T] K2 →
- â\88\80b,f. â¬\87*[b, f] L1 â\89¡ K1 â\86\92 â¬\87*[b, f] L2 â\89¡ K2 →
- â\88\80U. â¬\86*[f] T â\89¡ U → L1 ≛[h, o, U] L2.
+ â\88\80b,f. â¬\87*[b, f] L1 â\89\98 K1 â\86\92 â¬\87*[b, f] L2 â\89\98 K2 →
+ â\88\80U. â¬\86*[f] T â\89\98 U → L1 ≛[h, o, U] L2.
/3 width=9 by lfxs_lifts_bi, tdeq_lifts_sn/ qed-.
(* Forward lemmas with length for local environments ************************)
(* Properties with syntactic equivalence on referred entries ****************)
-lemma lfeq_lfdeq: â\88\80h,o,L1,L2. â\88\80T:term. L1 â\89\90[T] L2 → L1 ≛[h, o, T] L2.
+lemma lfeq_lfdeq: â\88\80h,o,L1,L2. â\88\80T:term. L1 â\89¡[T] L2 → L1 ≛[h, o, T] L2.
/2 width=3 by lfxs_co/ qed.
-lemma lfeq_lfdeq_trans: â\88\80h,o,L1,L. â\88\80T:term. L1 â\89\90[T] L →
+lemma lfeq_lfdeq_trans: â\88\80h,o,L1,L. â\88\80T:term. L1 â\89¡[T] L →
∀L2. L ≛[h, o, T] L2 → L1 ≛[h, o, T] L2.
/2 width=3 by lfeq_lfxs_trans/ qed-.
(* *)
(**************************************************************************)
-include "basic_2/notation/relations/doteqsn_3.ma".
+include "basic_2/notation/relations/ideqsn_3.ma".
include "basic_2/static/lfxs.ma".
(* SYNTACTIC EQUIVALENCE FOR LOCAL ENVIRONMENTS ON REFERRED ENTRIES *********)
interpretation
"syntactic equivalence on referred entries (local environment)"
- 'DotEqSn T L1 L2 = (lfeq T L1 L2).
+ 'IdEqSn T L1 L2 = (lfeq T L1 L2).
(* Note: "lfeq_transitive R" is equivalent to "lfxs_transitive ceq R R" *)
(* Basic_2A1: uses: lleq_transitive *)
definition lfeq_transitive: predicate (relation3 lenv term term) ≝
- λR. â\88\80L2,T1,T2. R L2 T1 T2 â\86\92 â\88\80L1. L1 â\89\90[T1] L2 → R L1 T1 T2.
+ λR. â\88\80L2,T1,T2. R L2 T1 T2 â\86\92 â\88\80L1. L1 â\89¡[T1] L2 → R L1 T1 T2.
(* Basic inversion lemmas ***************************************************)
-lemma lfeq_inv_bind: â\88\80p,I,L1,L2,V,T. L1 â\89\90[ⓑ{p,I}V.T] L2 →
- â\88§â\88§ L1 â\89\90[V] L2 & L1.â\93\91{I}V â\89\90[T] L2.ⓑ{I}V.
+lemma lfeq_inv_bind: â\88\80p,I,L1,L2,V,T. L1 â\89¡[ⓑ{p,I}V.T] L2 →
+ â\88§â\88§ L1 â\89¡[V] L2 & L1.â\93\91{I}V â\89¡[T] L2.ⓑ{I}V.
/2 width=2 by lfxs_inv_bind/ qed-.
-lemma lfeq_inv_flat: â\88\80I,L1,L2,V,T. L1 â\89\90[ⓕ{I}V.T] L2 →
- â\88§â\88§ L1 â\89\90[V] L2 & L1 â\89\90[T] L2.
+lemma lfeq_inv_flat: â\88\80I,L1,L2,V,T. L1 â\89¡[ⓕ{I}V.T] L2 →
+ â\88§â\88§ L1 â\89¡[V] L2 & L1 â\89¡[T] L2.
/2 width=2 by lfxs_inv_flat/ qed-.
(* Advanced inversion lemmas ************************************************)
-lemma lfeq_inv_zero_pair_sn: â\88\80I,L2,K1,V. K1.â\93\91{I}V â\89\90[#0] L2 →
- â\88\83â\88\83K2. K1 â\89\90[V] K2 & L2 = K2.ⓑ{I}V.
+lemma lfeq_inv_zero_pair_sn: â\88\80I,L2,K1,V. K1.â\93\91{I}V â\89¡[#0] L2 →
+ â\88\83â\88\83K2. K1 â\89¡[V] K2 & L2 = K2.ⓑ{I}V.
#I #L2 #K1 #V #H
elim (lfxs_inv_zero_pair_sn … H) -H #K2 #X #HK12 #HX #H destruct
/2 width=3 by ex2_intro/
qed-.
-lemma lfeq_inv_zero_pair_dx: â\88\80I,L1,K2,V. L1 â\89\90[#0] K2.ⓑ{I}V →
- â\88\83â\88\83K1. K1 â\89\90[V] K2 & L1 = K1.ⓑ{I}V.
+lemma lfeq_inv_zero_pair_dx: â\88\80I,L1,K2,V. L1 â\89¡[#0] K2.ⓑ{I}V →
+ â\88\83â\88\83K1. K1 â\89¡[V] K2 & L1 = K1.ⓑ{I}V.
#I #L1 #K2 #V #H
elim (lfxs_inv_zero_pair_dx … H) -H #K1 #X #HK12 #HX #H destruct
/2 width=3 by ex2_intro/
qed-.
-lemma lfeq_inv_lref_bind_sn: â\88\80I1,K1,L2,i. K1.â\93\98{I1} â\89\90[#⫯i] L2 →
- â\88\83â\88\83I2,K2. K1 â\89\90[#i] K2 & L2 = K2.ⓘ{I2}.
+lemma lfeq_inv_lref_bind_sn: â\88\80I1,K1,L2,i. K1.â\93\98{I1} â\89¡[#⫯i] L2 →
+ â\88\83â\88\83I2,K2. K1 â\89¡[#i] K2 & L2 = K2.ⓘ{I2}.
/2 width=2 by lfxs_inv_lref_bind_sn/ qed-.
-lemma lfeq_inv_lref_bind_dx: â\88\80I2,K2,L1,i. L1 â\89\90[#⫯i] K2.ⓘ{I2} →
- â\88\83â\88\83I1,K1. K1 â\89\90[#i] K2 & L1 = K1.ⓘ{I1}.
+lemma lfeq_inv_lref_bind_dx: â\88\80I2,K2,L1,i. L1 â\89¡[#⫯i] K2.ⓘ{I2} →
+ â\88\83â\88\83I1,K1. K1 â\89¡[#i] K2 & L1 = K1.ⓘ{I1}.
/2 width=2 by lfxs_inv_lref_bind_dx/ qed-.
(* Basic forward lemmas *****************************************************)
(* Basic_2A1: was: llpx_sn_lrefl *)
(* Note: this should have been lleq_fwd_llpx_sn *)
lemma lfeq_fwd_lfxs: ∀R. c_reflexive … R →
- â\88\80L1,L2,T. L1 â\89\90[T] L2 → L1 ⪤*[R, T] L2.
+ â\88\80L1,L2,T. L1 â\89¡[T] L2 → L1 ⪤*[R, T] L2.
#R #HR #L1 #L2 #T * #f #Hf #HL12
/4 width=7 by lexs_co, cext2_co, ex2_intro/
qed-.
(* Basic_properties *********************************************************)
-lemma frees_lfeq_conf: â\88\80f,L1,T. L1 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f →
- â\88\80L2. L1 â\89\90[T] L2 â\86\92 L2 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f.
+lemma frees_lfeq_conf: â\88\80f,L1,T. L1 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f →
+ â\88\80L2. L1 â\89¡[T] L2 â\86\92 L2 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f.
#f #L1 #T #H elim H -f -L1 -T
[ /2 width=3 by frees_sort/
| #f #i #Hf #L2 #H2
(* Forward lemmas with free variables inclusion for restricted closures *****)
lemma lfeq_lfxs_trans: ∀R. lfeq_transitive R →
- â\88\80L1,L,T. L1 â\89\90[T] L → ∀L2. L ⪤*[R, T] L2 → L1 ⪤*[R, T] L2.
+ â\88\80L1,L,T. L1 â\89¡[T] L → ∀L2. L ⪤*[R, T] L2 → L1 ⪤*[R, T] L2.
/4 width=16 by lfeq_fsle_comp, lfxs_trans_fsle, lfxs_trans_next/ qed-.
(* GENERIC EXTENSION ON REFERRED ENTRIES OF A CONTEXT-SENSITIVE REALTION ****)
definition lfxs (R) (T): relation lenv ≝
- λL1,L2. â\88\83â\88\83f. L1 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f & L1 ⪤*[cext2 R, cfull, f] L2.
+ λL1,L2. â\88\83â\88\83f. L1 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f & L1 ⪤*[cext2 R, cfull, f] L2.
interpretation "generic extension on referred entries (local environment)"
'RelationStar R T L1 L2 = (lfxs R T L1 L2).
qed-.
lemma lfxs_isid: ∀R1,R2,L1,L2,T1,T2.
- (â\88\80f. L1 â\8a¢ ð\9d\90\85*â¦\83T1â¦\84 â\89¡ f → 𝐈⦃f⦄) →
- (â\88\80f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 L1 â\8a¢ ð\9d\90\85*â¦\83T2â¦\84 â\89¡ f) →
+ (â\88\80f. L1 â\8a¢ ð\9d\90\85*â¦\83T1â¦\84 â\89\98 f → 𝐈⦃f⦄) →
+ (â\88\80f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 L1 â\8a¢ ð\9d\90\85*â¦\83T2â¦\84 â\89\98 f) →
L1 ⪤*[R1, T1] L2 → L1 ⪤*[R2, T2] L2.
#R1 #R2 #L1 #L2 #T1 #T2 #H1 #H2 *
/4 width=7 by lexs_co_isid, ex2_intro/
(* GENERIC EXTENSION ON REFERRED ENTRIES OF A CONTEXT-SENSITIVE REALTION ****)
definition dedropable_sn: predicate (relation3 lenv term term) ≝
- λR. â\88\80b,f,L1,K1. â¬\87*[b, f] L1 â\89¡ K1 →
- â\88\80K2,T. K1 ⪤*[R, T] K2 â\86\92 â\88\80U. â¬\86*[f] T â\89¡ U →
- â\88\83â\88\83L2. L1 ⪤*[R, U] L2 & â¬\87*[b, f] L2 â\89¡ K2 & L1 â\89\90[f] L2.
+ λR. â\88\80b,f,L1,K1. â¬\87*[b, f] L1 â\89\98 K1 →
+ â\88\80K2,T. K1 ⪤*[R, T] K2 â\86\92 â\88\80U. â¬\86*[f] T â\89\98 U →
+ â\88\83â\88\83L2. L1 ⪤*[R, U] L2 & â¬\87*[b, f] L2 â\89\98 K2 & L1 â\89¡[f] L2.
definition dropable_sn: predicate (relation3 lenv term term) ≝
- λR. â\88\80b,f,L1,K1. â¬\87*[b, f] L1 â\89¡ K1 → 𝐔⦃f⦄ →
- â\88\80L2,U. L1 ⪤*[R, U] L2 â\86\92 â\88\80T. â¬\86*[f] T â\89¡ U →
- â\88\83â\88\83K2. K1 ⪤*[R, T] K2 & â¬\87*[b, f] L2 â\89¡ K2.
+ λR. â\88\80b,f,L1,K1. â¬\87*[b, f] L1 â\89\98 K1 → 𝐔⦃f⦄ →
+ â\88\80L2,U. L1 ⪤*[R, U] L2 â\86\92 â\88\80T. â¬\86*[f] T â\89\98 U →
+ â\88\83â\88\83K2. K1 ⪤*[R, T] K2 & â¬\87*[b, f] L2 â\89\98 K2.
definition dropable_dx: predicate (relation3 lenv term term) ≝
λR. ∀L1,L2,U. L1 ⪤*[R, U] L2 →
- â\88\80b,f,K2. â¬\87*[b, f] L2 â\89¡ K2 â\86\92 ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\88\80T. â¬\86*[f] T â\89¡ U →
- â\88\83â\88\83K1. â¬\87*[b, f] L1 â\89¡ K1 & K1 ⪤*[R, T] K2.
+ â\88\80b,f,K2. â¬\87*[b, f] L2 â\89\98 K2 â\86\92 ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\88\80T. â¬\86*[f] T â\89\98 U →
+ â\88\83â\88\83K1. â¬\87*[b, f] L1 â\89\98 K1 & K1 ⪤*[R, T] K2.
definition lfxs_transitive_next: relation3 … ≝ λR1,R2,R3.
- â\88\80f,L,T. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f →
- â\88\80g,I,K,n. â¬\87*[n] L â\89¡ K.ⓘ{I} → ⫯g = ⫱*[n] f →
+ â\88\80f,L,T. L â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f →
+ â\88\80g,I,K,n. â¬\87*[n] L â\89\98 K.ⓘ{I} → ⫯g = ⫱*[n] f →
lexs_transitive (cext2 R1) (cext2 R2) (cext2 R3) (cext2 R1) cfull g K I.
(* Properties with generic slicing for local environments *******************)
(* Basic_2A1: uses: llpx_sn_inv_lift_O *)
lemma lfxs_inv_lifts_bi: ∀R,L1,L2,U. L1 ⪤*[R, U] L2 → ∀b,f. 𝐔⦃f⦄ →
- â\88\80K1,K2. â¬\87*[b, f] L1 â\89¡ K1 â\86\92 â¬\87*[b, f] L2 â\89¡ K2 →
- â\88\80T. â¬\86*[f] T â\89¡ U → K1 ⪤*[R, T] K2.
+ â\88\80K1,K2. â¬\87*[b, f] L1 â\89\98 K1 â\86\92 â¬\87*[b, f] L2 â\89\98 K2 →
+ â\88\80T. â¬\86*[f] T â\89\98 U → K1 ⪤*[R, T] K2.
#R #L1 #L2 #U #HL12 #b #f #Hf #K1 #K2 #HLK1 #HLK2 #T #HTU
elim (lfxs_dropable_sn … HLK1 … HL12 … HTU) -L1 -U // #Y #HK12 #HY
lapply (drops_mono … HY … HLK2) -b -f -L2 #H destruct //
qed-.
-lemma lfxs_inv_lref_pair_sn: â\88\80R,L1,L2,i. L1 ⪤*[R, #i] L2 â\86\92 â\88\80I,K1,V1. â¬\87*[i] L1 â\89¡ K1.ⓑ{I}V1 →
- â\88\83â\88\83K2,V2. â¬\87*[i] L2 â\89¡ K2.ⓑ{I}V2 & K1 ⪤*[R, V1] K2 & R K1 V1 V2.
+lemma lfxs_inv_lref_pair_sn: â\88\80R,L1,L2,i. L1 ⪤*[R, #i] L2 â\86\92 â\88\80I,K1,V1. â¬\87*[i] L1 â\89\98 K1.ⓑ{I}V1 →
+ â\88\83â\88\83K2,V2. â¬\87*[i] L2 â\89\98 K2.ⓑ{I}V2 & K1 ⪤*[R, V1] K2 & R K1 V1 V2.
#R #L1 #L2 #i #HL12 #I #K1 #V1 #HLK1 elim (lfxs_dropable_sn … HLK1 … HL12 (#0)) -HLK1 -HL12 //
#Y #HY #HLK2 elim (lfxs_inv_zero_pair_sn … HY) -HY
#K2 #V2 #HK12 #HV12 #H destruct /2 width=5 by ex3_2_intro/
qed-.
-lemma lfxs_inv_lref_pair_dx: â\88\80R,L1,L2,i. L1 ⪤*[R, #i] L2 â\86\92 â\88\80I,K2,V2. â¬\87*[i] L2 â\89¡ K2.ⓑ{I}V2 →
- â\88\83â\88\83K1,V1. â¬\87*[i] L1 â\89¡ K1.ⓑ{I}V1 & K1 ⪤*[R, V1] K2 & R K1 V1 V2.
+lemma lfxs_inv_lref_pair_dx: â\88\80R,L1,L2,i. L1 ⪤*[R, #i] L2 â\86\92 â\88\80I,K2,V2. â¬\87*[i] L2 â\89\98 K2.ⓑ{I}V2 →
+ â\88\83â\88\83K1,V1. â¬\87*[i] L1 â\89\98 K1.ⓑ{I}V1 & K1 ⪤*[R, V1] K2 & R K1 V1 V2.
#R #L1 #L2 #i #HL12 #I #K2 #V2 #HLK2 elim (lfxs_dropable_dx … HL12 … HLK2 … (#0)) -HLK2 -HL12 //
#Y #HLK1 #HY elim (lfxs_inv_zero_pair_dx … HY) -HY
#K1 #V1 #HK12 #HV12 #H destruct /2 width=5 by ex3_2_intro/
qed-.
-lemma lfxs_inv_lref_unit_sn: â\88\80R,L1,L2,i. L1 ⪤*[R, #i] L2 â\86\92 â\88\80I,K1. â¬\87*[i] L1 â\89¡ K1.ⓤ{I} →
- â\88\83â\88\83f,K2. â¬\87*[i] L2 â\89¡ K2.ⓤ{I} & K1 ⪤*[cext2 R, cfull, f] K2 & 𝐈⦃f⦄.
+lemma lfxs_inv_lref_unit_sn: â\88\80R,L1,L2,i. L1 ⪤*[R, #i] L2 â\86\92 â\88\80I,K1. â¬\87*[i] L1 â\89\98 K1.ⓤ{I} →
+ â\88\83â\88\83f,K2. â¬\87*[i] L2 â\89\98 K2.ⓤ{I} & K1 ⪤*[cext2 R, cfull, f] K2 & 𝐈⦃f⦄.
#R #L1 #L2 #i #HL12 #I #K1 #HLK1 elim (lfxs_dropable_sn … HLK1 … HL12 (#0)) -HLK1 -HL12 //
#Y #HY #HLK2 elim (lfxs_inv_zero_unit_sn … HY) -HY
#f #K2 #Hf #HK12 #H destruct /2 width=5 by ex3_2_intro/
qed-.
-lemma lfxs_inv_lref_unit_dx: â\88\80R,L1,L2,i. L1 ⪤*[R, #i] L2 â\86\92 â\88\80I,K2. â¬\87*[i] L2 â\89¡ K2.ⓤ{I} →
- â\88\83â\88\83f,K1. â¬\87*[i] L1 â\89¡ K1.ⓤ{I} & K1 ⪤*[cext2 R, cfull, f] K2 & 𝐈⦃f⦄.
+lemma lfxs_inv_lref_unit_dx: â\88\80R,L1,L2,i. L1 ⪤*[R, #i] L2 â\86\92 â\88\80I,K2. â¬\87*[i] L2 â\89\98 K2.ⓤ{I} →
+ â\88\83â\88\83f,K1. â¬\87*[i] L1 â\89\98 K1.ⓤ{I} & K1 ⪤*[cext2 R, cfull, f] K2 & 𝐈⦃f⦄.
#R #L1 #L2 #i #HL12 #I #K2 #HLK2 elim (lfxs_dropable_dx … HL12 … HLK2 … (#0)) -HLK2 -HL12 //
#Y #HLK1 #HY elim (lfxs_inv_zero_unit_dx … HY) -HY
#f #K2 #Hf #HK12 #H destruct /2 width=5 by ex3_2_intro/
(* Basic inversions with free variables inclusion for restricted closures ***)
lemma frees_lexs_conf: ∀R. lfxs_fsge_compatible R →
- â\88\80L1,T,f1. L1 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f1 →
+ â\88\80L1,T,f1. L1 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f1 →
∀L2. L1 ⪤*[cext2 R, cfull, f1] L2 →
- â\88\83â\88\83f2. L2 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f2 & f2 ⊆ f1.
+ â\88\83â\88\83f2. L2 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f2 & f2 ⊆ f1.
#R #HR #L1 #T #f1 #Hf1 #L2 #H1L
lapply (HR L1 L2 T ?) /2 width=3 by ex2_intro/ #H2L
@(fsle_frees_trans_eq … H2L … Hf1) /3 width=4 by lexs_fwd_length, sym_eq/
(* Basic_2A1: uses: llpx_sn_lift_le llpx_sn_lift_ge *)
lemma lfxs_lifts_bi: ∀R.d_liftable2_sn … lifts R →
∀L1,L2. |L1| = |L2| → ∀K1,K2,T. K1 ⪤*[R, T] K2 →
- â\88\80b,f. â¬\87*[b, f] L1 â\89¡ K1 â\86\92 â¬\87*[b, f] L2 â\89¡ K2 →
- â\88\80U. â¬\86*[f] T â\89¡ U → L1 ⪤*[R, U] L2.
+ â\88\80b,f. â¬\87*[b, f] L1 â\89\98 K1 â\86\92 â¬\87*[b, f] L2 â\89\98 K2 →
+ â\88\80U. â¬\86*[f] T â\89\98 U → L1 ⪤*[R, U] L2.
#R #HR #L1 #L2 #HL12 #K1 #K2 #T * #f1 #Hf1 #HK12 #b #f #HLK1 #HLK2 #U #HTU
elim (frees_total L1 U) #f2 #Hf2
lapply (frees_fwd_coafter … Hf2 … HLK1 … HTU … Hf1) -HTU #Hf
lemma lfxs_inv_lex_lfeq: ∀R. c_reflexive … R →
lfxs_fsge_compatible R →
∀L1,L2,T. L1 ⪤*[R, T] L2 →
- â\88\83â\88\83L. L1 ⪤[R] L & L â\89\90[T] L2.
+ â\88\83â\88\83L. L1 ⪤[R] L & L â\89¡[T] L2.
#R #H1R #H2R #L1 #L2 #T * #f1 #Hf1 #HL
elim (lexs_sdj_split … ceq_ext … HL 𝐈𝐝 ?) -HL
[ #L0 #HL10 #HL02 |*: /2 width=1 by ext2_refl, sdj_isid_dx/ ] -H1R
(* Advanced inversion lemmas ************************************************)
lemma lfxs_inv_frees: ∀R,L1,L2,T. L1 ⪤*[R, T] L2 →
- â\88\80f. L1 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f → L1 ⪤*[cext2 R, cfull, f] L2.
+ â\88\80f. L1 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f → L1 ⪤*[cext2 R, cfull, f] L2.
#R #L1 #L2 #T * /3 width=6 by frees_mono, lexs_eq_repl_back/
qed-.
(* Note: the premise 𝐔⦃f⦄ cannot be removed *)
(* Basic_2A1: includes: lsuba_drop_O1_conf *)
lemma lsuba_drops_conf_isuni: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 →
- â\88\80b,f,K1. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] L1 â\89¡ K1 →
- â\88\83â\88\83K2. G â\8a¢ K1 â«\83â\81\9d K2 & â¬\87*[b, f] L2 â\89¡ K2.
+ â\88\80b,f,K1. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] L1 â\89\98 K1 →
+ â\88\83â\88\83K2. G â\8a¢ K1 â«\83â\81\9d K2 & â¬\87*[b, f] L2 â\89\98 K2.
#G #L1 #L2 #H elim H -L1 -L2
[ /2 width=3 by ex2_intro/
| #I #L1 #L2 #HL12 #IH #b #f #K1 #Hf #H
(* Note: the premise 𝐔⦃f⦄ cannot be removed *)
(* Basic_2A1: includes: lsuba_drop_O1_trans *)
lemma lsuba_drops_trans_isuni: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 →
- â\88\80b,f,K2. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] L2 â\89¡ K2 →
- â\88\83â\88\83K1. G â\8a¢ K1 â«\83â\81\9d K2 & â¬\87*[b, f] L1 â\89¡ K1.
+ â\88\80b,f,K2. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] L2 â\89\98 K2 →
+ â\88\83â\88\83K1. G â\8a¢ K1 â«\83â\81\9d K2 & â¬\87*[b, f] L1 â\89\98 K1.
#G #L1 #L2 #H elim H -L1 -L2
[ /2 width=3 by ex2_intro/
| #I #L1 #L2 #HL12 #IH #b #f #K2 #Hf #H
(* Basic_1: includes: csubc_drop_conf_O *)
(* Basic_2A1: includes: lsubc_drop_O1_trans *)
lemma lsubc_drops_trans_isuni: ∀RP,G,L1,L2. G ⊢ L1 ⫃[RP] L2 →
- â\88\80b,f,K2. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] L2 â\89¡ K2 →
- â\88\83â\88\83K1. â¬\87*[b, f] L1 â\89¡ K1 & G ⊢ K1 ⫃[RP] K2.
+ â\88\80b,f,K2. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] L2 â\89\98 K2 →
+ â\88\83â\88\83K1. â¬\87*[b, f] L1 â\89\98 K1 & G ⊢ K1 ⫃[RP] K2.
#RP #G #L1 #L2 #H elim H -L1 -L2
[ /2 width=3 by ex2_intro/
| #I #L1 #L2 #HL12 #IH #b #f #K2 #Hf #H
(* Basic_1: includes: csubc_drop_conf_rev *)
(* Basic_2A1: includes: drop_lsubc_trans *)
lemma drops_lsubc_trans: ∀RR,RS,RP. gcp RR RS RP →
- â\88\80b,f,G,L1,K1. â¬\87*[b, f] L1 â\89¡ K1 → ∀K2. G ⊢ K1 ⫃[RP] K2 →
- â\88\83â\88\83L2. G â\8a¢ L1 â«\83[RP] L2 & â¬\87*[b, f] L2 â\89¡ K2.
+ â\88\80b,f,G,L1,K1. â¬\87*[b, f] L1 â\89\98 K1 → ∀K2. G ⊢ K1 ⫃[RP] K2 →
+ â\88\83â\88\83L2. G â\8a¢ L1 â«\83[RP] L2 & â¬\87*[b, f] L2 â\89\98 K2.
#RR #RS #RP #HR #b #f #G #L1 #K1 #H elim H -f -L1 -K1
[ #f #Hf #Y #H lapply (lsubc_inv_atom1 … H) -H
#H destruct /4 width=3 by lsubc_atom, drops_atom, ex2_intro/
lsubf (L1.ⓘ{I1}) (↑f1) (L2.ⓘ{I2}) (↑f2)
| lsubf_bind: ∀f1,f2,I,L1,L2. lsubf L1 f1 L2 f2 →
lsubf (L1.ⓘ{I}) (⫯f1) (L2.ⓘ{I}) (⫯f2)
-| lsubf_beta: â\88\80f,f0,f1,f2,L1,L2,W,V. L1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ f â\86\92 f0 â\8b\93 f â\89¡ f1 →
+| lsubf_beta: â\88\80f,f0,f1,f2,L1,L2,W,V. L1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 f â\86\92 f0 â\8b\93 f â\89\98 f1 →
lsubf L1 f0 L2 f2 → lsubf (L1.ⓓⓝW.V) (⫯f1) (L2.ⓛW) (⫯f2)
-| lsubf_unit: â\88\80f,f0,f1,f2,I1,I2,L1,L2,V. L1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ f â\86\92 f0 â\8b\93 f â\89¡ f1 →
+| lsubf_unit: â\88\80f,f0,f1,f2,I1,I2,L1,L2,V. L1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 f â\86\92 f0 â\8b\93 f â\89\98 f1 →
lsubf L1 f0 L2 f2 → lsubf (L1.ⓑ{I1}V) (⫯f1) (L2.ⓤ{I2}) (⫯f2)
.
∀g1,I,K1,X. f1 = ⫯g1 → L1 = K1.ⓑ{I}X →
∨∨ ∃∃g2,K2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ⫯g2 & L2 = K2.ⓑ{I}X
| ∃∃g,g0,g2,K2,W,V. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ &
- K1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ g & g0 â\8b\93 g â\89¡ g1 & f2 = ⫯g2 &
+ K1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f2 = ⫯g2 &
I = Abbr & X = ⓝW.V & L2 = K2.ⓛW
| ∃∃g,g0,g2,J,K2. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ &
- K1 â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89¡ g & g0 â\8b\93 g â\89¡ g1 & f2 = ⫯g2 &
+ K1 â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f2 = ⫯g2 &
L2 = K2.ⓤ{J}.
#f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
[ #f1 #f2 #_ #g1 #J #K1 #X #_ #H destruct
lemma lsubf_inv_pair1: ∀g1,f2,I,K1,L2,X. ⦃K1.ⓑ{I}X, ⫯g1⦄ ⫃𝐅* ⦃L2, f2⦄ →
∨∨ ∃∃g2,K2. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f2 = ⫯g2 & L2 = K2.ⓑ{I}X
| ∃∃g,g0,g2,K2,W,V. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ &
- K1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ g & g0 â\8b\93 g â\89¡ g1 & f2 = ⫯g2 &
+ K1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f2 = ⫯g2 &
I = Abbr & X = ⓝW.V & L2 = K2.ⓛW
| ∃∃g,g0,g2,J,K2. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ &
- K1 â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89¡ g & g0 â\8b\93 g â\89¡ g1 & f2 = ⫯g2 &
+ K1 â\8a¢ ð\9d\90\85*â¦\83Xâ¦\84 â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f2 = ⫯g2 &
L2 = K2.ⓤ{J}.
/2 width=5 by lsubf_inv_pair1_aux/ qed-.
∀g2,I,K2,W. f2 = ⫯g2 → L2 = K2.ⓑ{I}W →
∨∨ ∃∃g1,K1. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f1 = ⫯g1 & L1 = K1.ⓑ{I}W
| ∃∃g,g0,g1,K1,V. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ &
- K1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ g & g0 â\8b\93 g â\89¡ g1 & f1 = ⫯g1 &
+ K1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f1 = ⫯g1 &
I = Abst & L1 = K1.ⓓⓝW.V.
#f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
[ #f1 #f2 #_ #g2 #J #K2 #X #_ #H destruct
lemma lsubf_inv_pair2: ∀f1,g2,I,L1,K2,W. ⦃L1, f1⦄ ⫃𝐅* ⦃K2.ⓑ{I}W, ⫯g2⦄ →
∨∨ ∃∃g1,K1. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f1 = ⫯g1 & L1 = K1.ⓑ{I}W
| ∃∃g,g0,g1,K1,V. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ &
- K1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ g & g0 â\8b\93 g â\89¡ g1 & f1 = ⫯g1 &
+ K1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f1 = ⫯g1 &
I = Abst & L1 = K1.ⓓⓝW.V.
/2 width=5 by lsubf_inv_pair2_aux/ qed-.
∀g2,I,K2. f2 = ⫯g2 → L2 = K2.ⓤ{I} →
∨∨ ∃∃g1,K1. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f1 = ⫯g1 & L1 = K1.ⓤ{I}
| ∃∃g,g0,g1,J,K1,V. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ &
- K1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ g & g0 â\8b\93 g â\89¡ g1 & f1 = ⫯g1 &
+ K1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f1 = ⫯g1 &
L1 = K1.ⓑ{J}V.
#f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
[ #f1 #f2 #_ #g2 #J #K2 #_ #H destruct
lemma lsubf_inv_unit2: ∀f1,g2,I,L1,K2. ⦃L1, f1⦄ ⫃𝐅* ⦃K2.ⓤ{I}, ⫯g2⦄ →
∨∨ ∃∃g1,K1. ⦃K1, g1⦄ ⫃𝐅* ⦃K2, g2⦄ & f1 = ⫯g1 & L1 = K1.ⓤ{I}
| ∃∃g,g0,g1,J,K1,V. ⦃K1, g0⦄ ⫃𝐅* ⦃K2, g2⦄ &
- K1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ g & g0 â\8b\93 g â\89¡ g1 & f1 = ⫯g1 &
+ K1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f1 = ⫯g1 &
L1 = K1.ⓑ{J}V.
/2 width=5 by lsubf_inv_unit2_aux/ qed-.
qed-.
lemma lsubf_inv_beta_sn: ∀g1,f2,K1,K2,V,W. ⦃K1.ⓓⓝW.V, ⫯g1⦄ ⫃𝐅* ⦃K2.ⓛW, f2⦄ →
- â\88\83â\88\83g,g0,g2. â¦\83K1, g0â¦\84 â«\83ð\9d\90\85* â¦\83K2, g2â¦\84 & K1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ g & g0 â\8b\93 g â\89¡ g1 & f2 = ⫯g2.
+ â\88\83â\88\83g,g0,g2. â¦\83K1, g0â¦\84 â«\83ð\9d\90\85* â¦\83K2, g2â¦\84 & K1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f2 = ⫯g2.
#g1 #f2 #K1 #K2 #V #W #H elim (lsubf_inv_pair1 … H) -H *
[ #z2 #Y2 #_ #_ #H destruct
| #z #z0 #z2 #Y2 #X0 #X #H02 #Hz #Hg1 #H #_ #H0 #H1 destruct
qed-.
lemma lsubf_inv_unit_sn: ∀g1,f2,I,J,K1,K2,V. ⦃K1.ⓑ{I}V, ⫯g1⦄ ⫃𝐅* ⦃K2.ⓤ{J}, f2⦄ →
- â\88\83â\88\83g,g0,g2. â¦\83K1, g0â¦\84 â«\83ð\9d\90\85* â¦\83K2, g2â¦\84 & K1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ g & g0 â\8b\93 g â\89¡ g1 & f2 = ⫯g2.
+ â\88\83â\88\83g,g0,g2. â¦\83K1, g0â¦\84 â«\83ð\9d\90\85* â¦\83K2, g2â¦\84 & K1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f2 = ⫯g2.
#g1 #f2 #I #J #K1 #K2 #V #H elim (lsubf_inv_pair1 … H) -H *
[ #z2 #Y2 #_ #_ #H destruct
| #z #z0 #z2 #Y2 #X0 #X #_ #_ #_ #_ #_ #_ #H destruct
@ex2_intro [1,2,4,5: /2 width=2 by lsubf_push, lsubf_bind/ ] // (**) (* constructor needed *)
qed-.
-lemma lsubf_beta_tl_dx: â\88\80f,f0,g1,L1,V. L1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89¡ f â\86\92 f0 â\8b\93 f â\89¡ g1 →
+lemma lsubf_beta_tl_dx: â\88\80f,f0,g1,L1,V. L1 â\8a¢ ð\9d\90\85*â¦\83Vâ¦\84 â\89\98 f â\86\92 f0 â\8b\93 f â\89\98 g1 →
∀f2,L2,W. ⦃L1, f0⦄ ⫃𝐅* ⦃L2, ⫱f2⦄ →
∃∃f1. ⦃L1.ⓓⓝW.V, f1⦄ ⫃𝐅* ⦃L2.ⓛW, f2⦄ & ⫱f1 ⊆ g1.
#f #f0 #g1 #L1 #V #Hf #Hg1 #f2
(* Note: this might be moved *)
lemma lsubf_inv_sor_dx: ∀f1,f2,L1,L2. ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄ →
- â\88\80f2l,f2r. f2lâ\8b\93f2r â\89¡ f2 →
- â\88\83â\88\83f1l,f1r. â¦\83L1, f1lâ¦\84 â«\83ð\9d\90\85* â¦\83L2, f2lâ¦\84 & â¦\83L1, f1râ¦\84 â«\83ð\9d\90\85* â¦\83L2, f2râ¦\84 & f1lâ\8b\93f1r â\89¡ f1.
+ â\88\80f2l,f2r. f2lâ\8b\93f2r â\89\98 f2 →
+ â\88\83â\88\83f1l,f1r. â¦\83L1, f1lâ¦\84 â«\83ð\9d\90\85* â¦\83L2, f2lâ¦\84 & â¦\83L1, f1râ¦\84 â«\83ð\9d\90\85* â¦\83L2, f2râ¦\84 & f1lâ\8b\93f1r â\89\98 f1.
#f1 #f2 #L1 #L2 #H elim H -f1 -f2 -L1 -L2
[ /3 width=7 by sor_eq_repl_fwd3, ex3_2_intro/
| #g1 #g2 #I1 #I2 #L1 #L2 #_ #IH #f2l #f2r #H
(* Properties with context-sensitive free variables *************************)
-lemma lsubf_frees_trans: â\88\80f2,L2,T. L2 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f2 →
- â\88\80f1,L1. â¦\83L1, f1â¦\84 â«\83ð\9d\90\85* â¦\83L2, f2â¦\84 â\86\92 L1 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f1.
+lemma lsubf_frees_trans: â\88\80f2,L2,T. L2 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f2 →
+ â\88\80f1,L1. â¦\83L1, f1â¦\84 â«\83ð\9d\90\85* â¦\83L2, f2â¦\84 â\86\92 L1 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f1.
#f2 #L2 #T #H elim H -f2 -L2 -T
[ /3 width=5 by lsubf_fwd_isid_dx, frees_sort/
| #f2 #i #Hf2 #g1 #Y1 #H
theorem lsubf_sor: ∀K,L,g1,f1. ⦃K, g1⦄ ⫃𝐅* ⦃L, f1⦄ →
∀g2,f2. ⦃K, g2⦄ ⫃𝐅* ⦃L, f2⦄ →
- â\88\80g. g1 â\8b\93 g2 â\89¡ g â\86\92 â\88\80f. f1 â\8b\93 f2 â\89¡ f → ⦃K, g⦄ ⫃𝐅* ⦃L, f⦄.
+ â\88\80g. g1 â\8b\93 g2 â\89\98 g â\86\92 â\88\80f. f1 â\8b\93 f2 â\89\98 f → ⦃K, g⦄ ⫃𝐅* ⦃L, f⦄.
#K elim K -K
[ #L #g1 #f1 #H1 #g2 #f2 #H2 #g #Hg #f #Hf
elim (lsubf_inv_atom1 … H1) -H1 #H1 #H destruct
/3 width=1 by lsubf_push/
qed.
-lemma lsubr_lsubf: â\88\80f2,L2,T. L2 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f2 → ∀L1. L1 ⫃ L2 →
- â\88\80f1. L1 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89¡ f1 → ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄.
+lemma lsubr_lsubf: â\88\80f2,L2,T. L2 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f2 → ∀L1. L1 ⫃ L2 →
+ â\88\80f1. L1 â\8a¢ ð\9d\90\85*â¦\83Tâ¦\84 â\89\98 f1 → ⦃L1, f1⦄ ⫃𝐅* ⦃L2, f2⦄.
#f2 #L2 #T #H elim H -f2 -L2 -T
[ #f2 #L2 #s #Hf2 #L1 #HL12 #f1 #Hf1
lapply (frees_inv_sort … Hf1) -Hf1 /2 width=1 by lsubr_lsubf_isid/
(* Basic_2A1: includes: lsubr_fwd_drop2_pair *)
lemma lsubr_fwd_drops2_bind: ∀L1,L2. L1 ⫃ L2 →
- â\88\80b,f,I,K2. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] L2 â\89¡ K2.ⓘ{I} →
- â\88¨â\88¨ â\88\83â\88\83K1. K1 â«\83 K2 & â¬\87*[b, f] L1 â\89¡ K1.ⓘ{I}
- | â\88\83â\88\83K1,W,V. K1 â«\83 K2 & â¬\87*[b, f] L1 â\89¡ K1.ⓓⓝW.V & I = BPair Abst W
- | â\88\83â\88\83J1,J2,K1,V. K1 â«\83 K2 & â¬\87*[b, f] L1 â\89¡ K1.ⓑ{J1}V & I = BUnit J2.
+ â\88\80b,f,I,K2. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] L2 â\89\98 K2.ⓘ{I} →
+ â\88¨â\88¨ â\88\83â\88\83K1. K1 â«\83 K2 & â¬\87*[b, f] L1 â\89\98 K1.ⓘ{I}
+ | â\88\83â\88\83K1,W,V. K1 â«\83 K2 & â¬\87*[b, f] L1 â\89\98 K1.ⓓⓝW.V & I = BPair Abst W
+ | â\88\83â\88\83J1,J2,K1,V. K1 â«\83 K2 & â¬\87*[b, f] L1 â\89\98 K1.ⓑ{J1}V & I = BUnit J2.
#L1 #L2 #H elim H -L1 -L2
[ #b #f #I #K2 #_ #H
elim (drops_inv_atom1 … H) -H #H destruct
(* Basic_2A1: includes: lsubr_fwd_drop2_abbr *)
lemma lsubr_fwd_drops2_abbr: ∀L1,L2. L1 ⫃ L2 →
- â\88\80b,f,K2,V. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] L2 â\89¡ K2.ⓓV →
- â\88\83â\88\83K1. K1 â«\83 K2 & â¬\87*[b, f] L1 â\89¡ K1.ⓓV.
+ â\88\80b,f,K2,V. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b, f] L2 â\89\98 K2.ⓓV →
+ â\88\83â\88\83K1. K1 â«\83 K2 & â¬\87*[b, f] L1 â\89\98 K1.ⓓV.
#L1 #L2 #HL12 #b #f #K2 #V #Hf #HLK2
elim (lsubr_fwd_drops2_bind … HL12 … Hf HLK2) -L2 -Hf // *
[ #K1 #W #V #_ #_ #H destruct
}
]
[ { "syntactic equivalence" * } {
- [ [ "for lenvs on referred entries" ] "lfeq" + "( ? â\89\90[?] ? )" "lfeq_fqup" + "lfeq_fsle" * ]
+ [ [ "for lenvs on referred entries" ] "lfeq" + "( ? â\89¡[?] ? )" "lfeq_fqup" + "lfeq_fsle" * ]
}
]
[ { "generic extension of a context-sensitive relation" * } {
[ { "context-sensitive free variables" * } {
[ [ "inclusion for restricted closures" ] "fsle" + "( ⦃?,?⦄ ⊆ ⦃?,?⦄ )" "fsle_length" + "fsle_drops" + "fsle_fqup" + "fsle_fsle" * ]
[ [ "restricted refinement for lenvs" ] "lsubf" + "( ⦃?,?⦄ ⫃𝐅* ⦃?,?⦄ )" "lsubf_lsubr" + "lsubf_frees" + "lsubf_lsubf" * ]
- [ [ "for terms" ] "frees" + "( ? â\8a¢ ð\9d\90\85*â¦\83?â¦\84 â\89¡ ? )" "frees_append" + "frees_drops" + "frees_fqup" + "frees_frees" * ]
+ [ [ "for terms" ] "frees" + "( ? â\8a¢ ð\9d\90\85*â¦\83?â¦\84 â\89\98 ? )" "frees_append" + "frees_drops" + "frees_fqup" + "frees_frees" * ]
}
]
[ { "local environments" * } {
class "orange"
[ { "relocation" * } {
[ { "generic slicing" * } {
- [ [ "for lenvs" ] "drops" + "( â¬\87*[?,?] ? â\89¡ ? )" + "( â¬\87*[?] ? â\89¡ ? )" "drops_lstar" + "drops_weight" + "drops_length" + "drops_cext2" + "drops_lexs" + "drops_lreq" + "drops_drops" + "drops_vector" * ]
+ [ [ "for lenvs" ] "drops" + "( â¬\87*[?,?] ? â\89\98 ? )" + "( â¬\87*[?] ? â\89\98 ? )" "drops_lstar" + "drops_weight" + "drops_length" + "drops_cext2" + "drops_lexs" + "drops_lreq" + "drops_drops" + "drops_vector" * ]
}
]
[ { "generic relocation" * } {
- [ [ "for binders" ] "lifts_bind" + "( â¬\86*[?] ? â\89¡ ? )" "lifts_weight_bind" + "lifts_lifts_bind" * ]
- [ [ "for term vectors" ] "lifts_vector" + "( â¬\86*[?] ? â\89¡ ? )" "lifts_lifts_vector" * ]
- [ [ "for terms" ] "lifts" + "( â¬\86*[?] ? â\89¡ ? )" "lifts_simple" + "lifts_weight" + "lifts_tdeq" + "lifts_lifts" * ]
+ [ [ "for binders" ] "lifts_bind" + "( â¬\86*[?] ? â\89\98 ? )" "lifts_weight_bind" + "lifts_lifts_bind" * ]
+ [ [ "for term vectors" ] "lifts_vector" + "( â¬\86*[?] ? â\89\98 ? )" "lifts_lifts_vector" * ]
+ [ [ "for terms" ] "lifts" + "( â¬\86*[?] ? â\89\98 ? )" "lifts_simple" + "lifts_weight" + "lifts_tdeq" + "lifts_lifts" * ]
}
]
[ { "syntactic equivalence" * } {
- [ [ "for lenvs on selected entries" ] "lreq" + "( ? â\89\90[?] ? )" "lreq_length" + "lreq_lreq" * ]
+ [ [ "for lenvs on selected entries" ] "lreq" + "( ? â\89¡[?] ? )" "lreq_length" + "lreq_lreq" * ]
}
]
[ { "generic entrywise extension" * } {
}
]
[ { "global env. slicing" * } {
- [ [ "" ] "gget ( â¬\87[?] ? â\89¡ ? )" "gget_gget" * ]
+ [ [ "" ] "gget ( â¬\87[?] ? â\89\98 ? )" "gget_gget" * ]
}
]
[ { "context-sensitive ordinary rt-substitution" * } {
(* TRANSITIVE CLOSURE *******************************************************)
-definition LTC: ∀A:Type[0]. ∀B. (A→relation B) → (A→relation B) ≝
+definition CTC: ∀A:Type[0]. ∀B. (A→relation B) → (A→relation B) ≝
λA,B,R,a. TC … (R a).
definition s_r_transitive: ∀A,B. relation2 (A→relation B) (B→relation A) ≝ λA,B,R1,R2.
- ∀L2,T1,T2. R1 L2 T1 T2 → ∀L1. R2 T1 L1 L2 → LTC … R1 L1 T1 T2.
+ ∀L2,T1,T2. R1 L2 T1 T2 → ∀L1. R2 T1 L1 L2 → CTC … R1 L1 T1 T2.
definition s_rs_transitive: ∀A,B. relation2 (A→relation B) (B→relation A) ≝ λA,B,R1,R2.
- ∀L2,T1,T2. LTC … R1 L2 T1 T2 → ∀L1. R2 T1 L1 L2 → LTC … R1 L1 T1 T2.
+ ∀L2,T1,T2. CTC … R1 L2 T1 T2 → ∀L1. R2 T1 L1 L2 → CTC … R1 L1 T1 T2.
lemma TC_strip1: ∀A,R1,R2. confluent2 A R1 R2 →
∀a0,a1. TC … R1 a0 a1 → ∀a2. R2 a0 a2 →
]
qed.
-lemma LTC_lsub_trans: ∀A,B,R,S. lsub_trans A B R S → lsub_trans A B (LTC … R) S.
+lemma CTC_lsub_trans: ∀A,B,R,S. lsub_trans A B R S → lsub_trans A B (CTC … R) S.
#A #B #R #S #HRS #L2 #T1 #T2 #H elim H -T2 /3 width=3 by inj/
#T #T2 #_ #HT2 #IHT1 #L1 #HL12
lapply (HRS … HT2 … HL12) -HRS -HT2 /3 width=3 by step/
qed-.
-lemma s_r_conf1_LTC1: ∀A,B,S,R. s_r_confluent1 A B S R → s_r_confluent1 A B (LTC … S) R.
+lemma s_r_conf1_CTC1: ∀A,B,S,R. s_r_confluent1 A B S R → s_r_confluent1 A B (CTC … S) R.
#A #B #S #R #HSR #L1 #T1 #T2 #H @(TC_ind_dx … T1 H) -T1 /3 width=3 by/
qed-.
-lemma s_r_trans_LTC1: ∀A,B,S,R. s_r_confluent1 A B S R →
+lemma s_r_trans_CTC1: ∀A,B,S,R. s_r_confluent1 A B S R →
s_r_transitive A B S R → s_rs_transitive A B S R.
#A #B #S #R #H1SR #H2SR #L2 #T1 #T2 #H @(TC_ind_dx … T1 H) -T1 /2 width=3 by/
#T1 #T #HT1 #_ #IHT2 #L1 #HL12 lapply (H2SR … HT1 … HL12) -H2SR -HT1
-/4 width=5 by s_r_conf1_LTC1, trans_TC/
+/4 width=5 by s_r_conf1_CTC1, trans_TC/
qed-.
-lemma s_r_trans_LTC2: ∀A,B,S,R. s_rs_transitive A B S R → s_r_transitive A B S (LTC … R).
+lemma s_r_trans_CTC2: ∀A,B,S,R. s_rs_transitive A B S R → s_r_transitive A B S (CTC … R).
#A #B #S #R #HSR #L2 #T1 #T2 #HT12 #L1 #H @(TC_ind_dx … L1 H) -L1 /3 width=3 by inj/
qed-.
-lemma s_r_to_s_rs_trans: ∀A,B,S,R. s_r_transitive A B (LTC … S) R →
+lemma s_r_to_s_rs_trans: ∀A,B,S,R. s_r_transitive A B (CTC … S) R →
s_rs_transitive A B S R.
#A #B #S #R #HSR #L2 #T1 #T2 #HL2 #L1 #HT1
elim (TC_idem … (S L1) … T1 T2)
qed-.
lemma s_rs_to_s_r_trans: ∀A,B,S,R. s_rs_transitive A B S R →
- s_r_transitive A B (LTC … S) R.
+ s_r_transitive A B (CTC … S) R.
#A #B #S #R #HSR #L2 #T1 #T2 #HL2 #L1 #HT1
elim (TC_idem … (S L1) … T1 T2)
#H #_ @H @HSR //
qed-.
lemma s_rs_trans_TC1: ∀A,B,S,R. s_rs_transitive A B S R →
- s_rs_transitive A B (LTC … S) R.
+ s_rs_transitive A B (CTC … S) R.
#A #B #S #R #HSR #L2 #T1 #T2 #HL2 #L1 #HT1
elim (TC_idem … (S L1) … T1 T2)
elim (TC_idem … (S L2) … T1 T2)
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( f1 â\8a\9a break term 46 f2 â\89¡ break term 46 f )"
+notation "hvbox( f1 â\8a\9a break term 46 f2 â\89\98 break term 46 f )"
non associative with precedence 45
for @{ 'RAfter $f1 $f2 $f }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( @ â¦\83 term 46 T1 , break term 46 f â¦\84 â\89¡ break term 46 T2 )"
+notation "hvbox( @ â¦\83 term 46 T1 , break term 46 f â¦\84 â\89\98 break term 46 T2 )"
non associative with precedence 45
for @{ 'RAt $T1 $f $T2 }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( f1 ~ â\8a\9a break term 46 f2 â\89¡ break term 46 f )"
+notation "hvbox( f1 ~ â\8a\9a break term 46 f2 â\89\98 break term 46 f )"
non associative with precedence 45
for @{ 'RCoAfter $f1 $f2 $f }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( ð\9d\90\82 â¦\83 term 46 f â¦\84 â\89¡ break term 46 n )"
+notation "hvbox( ð\9d\90\82 â¦\83 term 46 f â¦\84 â\89\98 break term 46 n )"
non associative with precedence 45
for @{ 'RCoLength $f $n }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( L1 â\8b\92 break term 46 L2 â\89¡ break term 46 L )"
+notation "hvbox( L1 â\8b\92 break term 46 L2 â\89\98 break term 46 L )"
non associative with precedence 45
for @{ 'RIntersection $L1 $L2 $L }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( T1 â\96 break term 46 T2 â\89¡ break term 46 T )"
+notation "hvbox( T1 â\96 break term 46 T2 â\89\98 break term 46 T )"
non associative with precedence 45
for @{ 'RMinus $T1 $T2 $T }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( L1 â\8b\93 break term 46 L2 â\89¡ break term 46 L )"
+notation "hvbox( L1 â\8b\93 break term 46 L2 â\89\98 break term 46 L )"
non associative with precedence 45
for @{ 'RUnion $L1 $L2 $L }.
(* Basic inversion lemmas ***************************************************)
-fact at_inv_nil_aux: â\88\80cs,i1,i2. @â¦\83i1, csâ¦\84 â\89¡ i2 → cs = ◊ → i1 = i2.
+fact at_inv_nil_aux: â\88\80cs,i1,i2. @â¦\83i1, csâ¦\84 â\89\98 i2 → cs = ◊ → i1 = i2.
#cs #i1 #i2 * -cs -i1 -i2
[ //
| #cs #l #m #i1 #i2 #_ #_ #H destruct
]
qed-.
-lemma at_inv_nil: â\88\80i1,i2. @â¦\83i1, â\97\8aâ¦\84 â\89¡ i2 → i1 = i2.
+lemma at_inv_nil: â\88\80i1,i2. @â¦\83i1, â\97\8aâ¦\84 â\89\98 i2 → i1 = i2.
/2 width=3 by at_inv_nil_aux/ qed-.
-fact at_inv_cons_aux: â\88\80cs,i1,i2. @â¦\83i1, csâ¦\84 â\89¡ i2 →
+fact at_inv_cons_aux: â\88\80cs,i1,i2. @â¦\83i1, csâ¦\84 â\89\98 i2 →
∀l,m,cs0. cs = {l, m} @ cs0 →
- i1 < l â\88§ @â¦\83i1, cs0â¦\84 â\89¡ i2 ∨
- l â\89¤ i1 â\88§ @â¦\83i1 + m, cs0â¦\84 â\89¡ i2.
+ i1 < l â\88§ @â¦\83i1, cs0â¦\84 â\89\98 i2 ∨
+ l â\89¤ i1 â\88§ @â¦\83i1 + m, cs0â¦\84 â\89\98 i2.
#cs #i1 #i2 * -cs -i1 -i2
[ #i #l #m #cs #H destruct
| #cs1 #l1 #m1 #i1 #i2 #Hil1 #Hi12 #l2 #m2 #cs2 #H destruct /3 width=1 by or_introl, conj/
]
qed-.
-lemma at_inv_cons: â\88\80cs,l,m,i1,i2. @â¦\83i1, {l, m} @ csâ¦\84 â\89¡ i2 →
- i1 < l â\88§ @â¦\83i1, csâ¦\84 â\89¡ i2 ∨
- l â\89¤ i1 â\88§ @â¦\83i1 + m, csâ¦\84 â\89¡ i2.
+lemma at_inv_cons: â\88\80cs,l,m,i1,i2. @â¦\83i1, {l, m} @ csâ¦\84 â\89\98 i2 →
+ i1 < l â\88§ @â¦\83i1, csâ¦\84 â\89\98 i2 ∨
+ l â\89¤ i1 â\88§ @â¦\83i1 + m, csâ¦\84 â\89\98 i2.
/2 width=3 by at_inv_cons_aux/ qed-.
-lemma at_inv_cons_lt: â\88\80cs,l,m,i1,i2. @â¦\83i1, {l, m} @ csâ¦\84 â\89¡ i2 →
- i1 < l â\86\92 @â¦\83i1, csâ¦\84 â\89¡ i2.
+lemma at_inv_cons_lt: â\88\80cs,l,m,i1,i2. @â¦\83i1, {l, m} @ csâ¦\84 â\89\98 i2 →
+ i1 < l â\86\92 @â¦\83i1, csâ¦\84 â\89\98 i2.
#cs #l #m #i1 #m2 #H
elim (at_inv_cons … H) -H * // #Hli1 #_ #Hi1l
elim (lt_le_false … Hi1l Hli1)
qed-.
-lemma at_inv_cons_ge: â\88\80cs,l,m,i1,i2. @â¦\83i1, {l, m} @ csâ¦\84 â\89¡ i2 →
- l â\89¤ i1 â\86\92 @â¦\83i1 + m, csâ¦\84 â\89¡ i2.
+lemma at_inv_cons_ge: â\88\80cs,l,m,i1,i2. @â¦\83i1, {l, m} @ csâ¦\84 â\89\98 i2 →
+ l â\89¤ i1 â\86\92 @â¦\83i1 + m, csâ¦\84 â\89\98 i2.
#cs #l #m #i1 #m2 #H
elim (at_inv_cons … H) -H * // #Hi1l #_ #Hli1
elim (lt_le_false … Hi1l Hli1)
(* Main properties **********************************************************)
-theorem at_mono: â\88\80cs,i,i1. @â¦\83i, csâ¦\84 â\89¡ i1 â\86\92 â\88\80i2. @â¦\83i, csâ¦\84 â\89¡ i2 → i1 = i2.
+theorem at_mono: â\88\80cs,i,i1. @â¦\83i, csâ¦\84 â\89\98 i1 â\86\92 â\88\80i2. @â¦\83i, csâ¦\84 â\89\98 i2 → i1 = i2.
#cs #i #i1 #H elim H -cs -i -i1
[ #i #x #H <(at_inv_nil … H) -x //
| #cs #l #m #i #i1 #Hil #_ #IHi1 #x #H
(* Basic inversion lemmas ***************************************************)
-fact minuss_inv_nil1_aux: â\88\80cs1,cs2,i. cs1 â\96 i â\89¡ cs2 → cs1 = ◊ → cs2 = ◊.
+fact minuss_inv_nil1_aux: â\88\80cs1,cs2,i. cs1 â\96 i â\89\98 cs2 → cs1 = ◊ → cs2 = ◊.
#cs1 #cs2 #i * -cs1 -cs2 -i
[ //
| #cs1 #cs2 #l #m #i #_ #_ #H destruct
]
qed-.
-lemma minuss_inv_nil1: â\88\80cs2,i. â\97\8a â\96 i â\89¡ cs2 → cs2 = ◊.
+lemma minuss_inv_nil1: â\88\80cs2,i. â\97\8a â\96 i â\89\98 cs2 → cs2 = ◊.
/2 width=4 by minuss_inv_nil1_aux/ qed-.
-fact minuss_inv_cons1_aux: â\88\80cs1,cs2,i. cs1 â\96 i â\89¡ cs2 →
+fact minuss_inv_cons1_aux: â\88\80cs1,cs2,i. cs1 â\96 i â\89\98 cs2 →
∀l,m,cs. cs1 = {l, m} @ cs →
- l â\89¤ i â\88§ cs â\96 m + i â\89¡ cs2 ∨
- â\88\83â\88\83cs0. i < l & cs â\96 i â\89¡ cs0 &
+ l â\89¤ i â\88§ cs â\96 m + i â\89\98 cs2 ∨
+ â\88\83â\88\83cs0. i < l & cs â\96 i â\89\98 cs0 &
cs2 = {l - i, m} @ cs0.
#cs1 #cs2 #i * -cs1 -cs2 -i
[ #i #l #m #cs #H destruct
]
qed-.
-lemma minuss_inv_cons1: â\88\80cs1,cs2,l,m,i. {l, m} @ cs1 â\96 i â\89¡ cs2 →
- l â\89¤ i â\88§ cs1 â\96 m + i â\89¡ cs2 ∨
- â\88\83â\88\83cs. i < l & cs1 â\96 i â\89¡ cs &
+lemma minuss_inv_cons1: â\88\80cs1,cs2,l,m,i. {l, m} @ cs1 â\96 i â\89\98 cs2 →
+ l â\89¤ i â\88§ cs1 â\96 m + i â\89\98 cs2 ∨
+ â\88\83â\88\83cs. i < l & cs1 â\96 i â\89\98 cs &
cs2 = {l - i, m} @ cs.
/2 width=3 by minuss_inv_cons1_aux/ qed-.
-lemma minuss_inv_cons1_ge: â\88\80cs1,cs2,l,m,i. {l, m} @ cs1 â\96 i â\89¡ cs2 →
- l â\89¤ i â\86\92 cs1 â\96 m + i â\89¡ cs2.
+lemma minuss_inv_cons1_ge: â\88\80cs1,cs2,l,m,i. {l, m} @ cs1 â\96 i â\89\98 cs2 →
+ l â\89¤ i â\86\92 cs1 â\96 m + i â\89\98 cs2.
#cs1 #cs2 #l #m #i #H
elim (minuss_inv_cons1 … H) -H * // #cs #Hil #_ #_ #Hli
elim (lt_le_false … Hil Hli)
qed-.
-lemma minuss_inv_cons1_lt: â\88\80cs1,cs2,l,m,i. {l, m} @ cs1 â\96 i â\89¡ cs2 →
+lemma minuss_inv_cons1_lt: â\88\80cs1,cs2,l,m,i. {l, m} @ cs1 â\96 i â\89\98 cs2 →
i < l →
- â\88\83â\88\83cs. cs1 â\96 i â\89¡ cs & cs2 = {l - i, m} @ cs.
+ â\88\83â\88\83cs. cs1 â\96 i â\89\98 cs & cs2 = {l - i, m} @ cs.
#cs1 #cs2 #l #m #i #H elim (minuss_inv_cons1 … H) -H * /2 width=3 by ex2_intro/
#Hli #_ #Hil elim (lt_le_false … Hil Hli)
qed-.
(* Specific properties on after *********************************************)
-lemma after_O2: â\88\80f2,f1,f. f2 â\8a\9a f1 â\89¡ f →
- â\88\80n. n@f2 â\8a\9a â\86\91f1 â\89¡ n@f.
+lemma after_O2: â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f →
+ â\88\80n. n@f2 â\8a\9a â\86\91f1 â\89\98 n@f.
#f2 #f1 #f #Hf #n elim n -n /2 width=7 by after_refl, after_next/
qed.
-lemma after_S2: â\88\80f2,f1,f,n1,n. f2 â\8a\9a n1@f1 â\89¡ n@f →
- â\88\80n2. n2@f2 â\8a\9a ⫯n1@f1 â\89¡ ⫯(n2+n)@f.
+lemma after_S2: â\88\80f2,f1,f,n1,n. f2 â\8a\9a n1@f1 â\89\98 n@f →
+ â\88\80n2. n2@f2 â\8a\9a ⫯n1@f1 â\89\98 ⫯(n2+n)@f.
#f2 #f1 #f #n1 #n #Hf #n2 elim n2 -n2 /2 width=7 by after_next, after_push/
qed.
-lemma after_apply: â\88\80n1,f2,f1,f. (â\86\93*[⫯n1] f2) â\8a\9a f1 â\89¡ f â\86\92 f2 â\8a\9a n1@f1 â\89¡ f2@❴n1❵@f.
+lemma after_apply: â\88\80n1,f2,f1,f. (â\86\93*[⫯n1] f2) â\8a\9a f1 â\89\98 f â\86\92 f2 â\8a\9a n1@f1 â\89\98 f2@❴n1❵@f.
#n1 elim n1 -n1
[ * /2 width=1 by after_O2/
| #n1 #IH * /3 width=1 by after_S2/
]
qed-.
-corec lemma after_total_aux: â\88\80f2,f1,f. f2 â\88\98 f1 = f â\86\92 f2 â\8a\9a f1 â\89¡ f.
+corec lemma after_total_aux: â\88\80f2,f1,f. f2 â\88\98 f1 = f â\86\92 f2 â\8a\9a f1 â\89\98 f.
* #n2 #f2 * #n1 #f1 * #n #f cases n2 -n2
[ cases n1 -n1
[ #H cases (compose_inv_O2 … H) -H /3 width=7 by after_refl, eq_f2/
]
qed-.
-theorem after_total: â\88\80f1,f2. f2 â\8a\9a f1 â\89¡ f2 ∘ f1.
+theorem after_total: â\88\80f1,f2. f2 â\8a\9a f1 â\89\98 f2 ∘ f1.
/2 width=1 by after_total_aux/ qed.
(* Specific inversion lemmas on after ***************************************)
-lemma after_inv_xpx: â\88\80f2,g2,f,n2,n. n2@f2 â\8a\9a g2 â\89¡ n@f → ∀f1. ↑f1 = g2 →
- f2 â\8a\9a f1 â\89¡ f ∧ n2 = n.
+lemma after_inv_xpx: â\88\80f2,g2,f,n2,n. n2@f2 â\8a\9a g2 â\89\98 n@f → ∀f1. ↑f1 = g2 →
+ f2 â\8a\9a f1 â\89\98 f ∧ n2 = n.
#f2 #g2 #f #n2 elim n2 -n2
[ #n #Hf #f1 #H2 elim (after_inv_ppx … Hf … H2) -g2 [2,3: // ]
#g #Hf #H elim (push_inv_seq_dx … H) -H destruct /2 width=1 by conj/
]
qed-.
-lemma after_inv_xnx: â\88\80f2,g2,f,n2,n. n2@f2 â\8a\9a g2 â\89¡ n@f → ∀f1. ⫯f1 = g2 →
- â\88\83â\88\83m. f2 â\8a\9a f1 â\89¡ m@f & ⫯(n2+m) = n.
+lemma after_inv_xnx: â\88\80f2,g2,f,n2,n. n2@f2 â\8a\9a g2 â\89\98 n@f → ∀f1. ⫯f1 = g2 →
+ â\88\83â\88\83m. f2 â\8a\9a f1 â\89\98 m@f & ⫯(n2+m) = n.
#f2 #g2 #f #n2 elim n2 -n2
[ #n #Hf #f1 #H2 elim (after_inv_pnx … Hf … H2) -g2 [2,3: // ]
#g #Hf #H elim (next_inv_seq_dx … H) -H
]
qed-.
-lemma after_inv_const: â\88\80f2,f1,f,n1,n. n@f2 â\8a\9a n1@f1 â\89¡ n@f â\86\92 f2 â\8a\9a f1 â\89¡ f ∧ 0 = n1.
+lemma after_inv_const: â\88\80f2,f1,f,n1,n. n@f2 â\8a\9a n1@f1 â\89\98 n@f â\86\92 f2 â\8a\9a f1 â\89\98 f ∧ 0 = n1.
#f2 #f1 #f #n1 #n elim n -n
[ #H elim (after_inv_pxp … H) -H [ |*: // ]
#g2 #Hf #H elim (push_inv_seq_dx … H) -H /2 width=1 by conj/
]
qed-.
-lemma after_inv_total: â\88\80f2,f1,f. f2 â\8a\9a f1 â\89¡ f → f2 ∘ f1 ≗ f.
+lemma after_inv_total: â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f → f2 ∘ f1 ≗ f.
/2 width=4 by after_mono/ qed-.
(* Specific forward lemmas on after *****************************************)
-lemma after_fwd_hd: â\88\80f2,f1,f,n1,n. f2 â\8a\9a n1@f1 â\89¡ n@f → f2@❴n1❵ = n.
+lemma after_fwd_hd: â\88\80f2,f1,f,n1,n. f2 â\8a\9a n1@f1 â\89\98 n@f → f2@❴n1❵ = n.
#f2 #f1 #f #n1 #n #H lapply (after_fwd_at ? n1 0 … H) -H [1,2,3: // ]
/3 width=2 by at_inv_O1, sym_eq/
qed-.
-lemma after_fwd_tls: â\88\80f,f1,n1,f2,n2,n. n2@f2 â\8a\9a n1@f1 â\89¡ n@f →
- (â\86\93*[n1]f2) â\8a\9a f1 â\89¡ f.
+lemma after_fwd_tls: â\88\80f,f1,n1,f2,n2,n. n2@f2 â\8a\9a n1@f1 â\89\98 n@f →
+ (â\86\93*[n1]f2) â\8a\9a f1 â\89\98 f.
#f #f1 #n1 elim n1 -n1
[ #f2 #n2 #n #H elim (after_inv_xpx … H) -H //
| #n1 #IH * #m1 #f2 #n2 #n #H elim (after_inv_xnx … H) -H [2,3: // ]
]
qed-.
-lemma after_inv_apply: â\88\80f2,f1,f,n2,n1,n. n2@f2 â\8a\9a n1@f1 â\89¡ n@f →
- (n2@f2)@â\9d´n1â\9dµ = n â\88§ (â\86\93*[n1]f2) â\8a\9a f1 â\89¡ f.
+lemma after_inv_apply: â\88\80f2,f1,f,n2,n1,n. n2@f2 â\8a\9a n1@f1 â\89\98 n@f →
+ (n2@f2)@â\9d´n1â\9dµ = n â\88§ (â\86\93*[n1]f2) â\8a\9a f1 â\89\98 f.
/3 width=3 by after_fwd_tls, after_fwd_hd, conj/ qed-.
(* Specific properties on coafter *******************************************)
-corec lemma coafter_total_aux: â\88\80f2,f1,f. f2 ~â\88\98 f1 = f â\86\92 f2 ~â\8a\9a f1 â\89¡ f.
+corec lemma coafter_total_aux: â\88\80f2,f1,f. f2 ~â\88\98 f1 = f â\86\92 f2 ~â\8a\9a f1 â\89\98 f.
* #n2 #f2 * #n1 #f1 * #n #f cases n2 -n2
[ cases n1 -n1
[ #H cases (cocompose_inv_ppx … H) -H /3 width=7 by coafter_refl, eq_f2/
]
qed-.
-theorem coafter_total: â\88\80f2,f1. f2 ~â\8a\9a f1 â\89¡ f2 ~∘ f1.
+theorem coafter_total: â\88\80f2,f1. f2 ~â\8a\9a f1 â\89\98 f2 ~∘ f1.
/2 width=1 by coafter_total_aux/ qed.
(* Specific properties on at ************************************************)
-lemma at_O1: â\88\80i2,f. @â¦\830, i2@fâ¦\84 â\89¡ i2.
+lemma at_O1: â\88\80i2,f. @â¦\830, i2@fâ¦\84 â\89\98 i2.
#i2 elim i2 -i2 /2 width=5 by at_refl, at_next/
qed.
-lemma at_S1: â\88\80n,f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 â\86\92 @â¦\83⫯i1, n@fâ¦\84 â\89¡ ⫯(n+i2).
+lemma at_S1: â\88\80n,f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 â\86\92 @â¦\83⫯i1, n@fâ¦\84 â\89\98 ⫯(n+i2).
#n elim n -n /3 width=7 by at_push, at_next/
qed.
-lemma at_total: â\88\80i1,f. @â¦\83i1, fâ¦\84 â\89¡ f@❴i1❵.
+lemma at_total: â\88\80i1,f. @â¦\83i1, fâ¦\84 â\89\98 f@❴i1❵.
#i1 elim i1 -i1
[ * // | #i #IH * /3 width=1 by at_S1/ ]
qed.
lemma at_istot: ∀f. 𝐓⦃f⦄.
/2 width=2 by ex_intro/ qed.
-lemma at_plus2: â\88\80f,i1,i,n,m. @â¦\83i1, n@fâ¦\84 â\89¡ i â\86\92 @â¦\83i1, (m+n)@fâ¦\84 â\89¡ m+i.
+lemma at_plus2: â\88\80f,i1,i,n,m. @â¦\83i1, n@fâ¦\84 â\89\98 i â\86\92 @â¦\83i1, (m+n)@fâ¦\84 â\89\98 m+i.
#f #i1 #i #n #m #H elim m -m //
#m <plus_S1 /2 width=5 by at_next/ (**) (* full auto fails *)
qed.
(* Specific inversion lemmas on at ******************************************)
-lemma at_inv_O1: â\88\80f,n,i2. @â¦\830, n@fâ¦\84 â\89¡ i2 → n = i2.
+lemma at_inv_O1: â\88\80f,n,i2. @â¦\830, n@fâ¦\84 â\89\98 i2 → n = i2.
#f #n elim n -n /2 width=6 by at_inv_ppx/
#n #IH #i2 #H elim (at_inv_xnx … H) -H [2,3: // ]
#j2 #Hj * -i2 /3 width=1 by eq_f/
qed-.
-lemma at_inv_S1: â\88\80f,n,j1,i2. @â¦\83⫯j1, n@fâ¦\84 â\89¡ i2 →
- â\88\83â\88\83j2. @â¦\83j1, fâ¦\84 â\89¡ j2 & ⫯(n+j2) = i2.
+lemma at_inv_S1: â\88\80f,n,j1,i2. @â¦\83⫯j1, n@fâ¦\84 â\89\98 i2 →
+ â\88\83â\88\83j2. @â¦\83j1, fâ¦\84 â\89\98 j2 & ⫯(n+j2) = i2.
#f #n elim n -n /2 width=5 by at_inv_npx/
#n #IH #j1 #i2 #H elim (at_inv_xnx … H) -H [2,3: // ]
#j2 #Hj * -i2 elim (IH … Hj) -IH -Hj
#i2 #Hi * -j2 /2 width=3 by ex2_intro/
qed-.
-lemma at_inv_total: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 → f@❴i1❵ = i2.
+lemma at_inv_total: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 → f@❴i1❵ = i2.
/2 width=6 by at_mono/ qed-.
(* Spercific forward lemmas on at *******************************************)
-lemma at_increasing_plus: â\88\80f,n,i1,i2. @â¦\83i1, n@fâ¦\84 â\89¡ i2 → i1 + n ≤ i2.
+lemma at_increasing_plus: â\88\80f,n,i1,i2. @â¦\83i1, n@fâ¦\84 â\89\98 i2 → i1 + n ≤ i2.
#f #n *
[ #i2 #H <(at_inv_O1 … H) -i2 //
| #i1 #i2 #H elim (at_inv_S1 … H) -H
]
qed-.
-lemma at_fwd_id: â\88\80f,n,i. @â¦\83i, n@fâ¦\84 â\89¡ i → 0 = n.
+lemma at_fwd_id: â\88\80f,n,i. @â¦\83i, n@fâ¦\84 â\89\98 i → 0 = n.
#f #n #i #H elim (at_fwd_id_ex … H) -H
#g #H elim (push_inv_seq_dx … H) -H //
qed-.
(* Specific properties on sor ***********************************************)
-axiom sor_total: â\88\80f1,f2. f1 â\8b\93 f2 â\89¡ f1 ∪ f2.
+axiom sor_total: â\88\80f1,f2. f1 â\8b\93 f2 â\89\98 f1 ∪ f2.
definition H_after_inj: predicate rtmap ≝
λf1. 𝐓⦃f1⦄ →
- â\88\80f,f21,f22. f1 â\8a\9a f21 â\89¡ f â\86\92 f1 â\8a\9a f22 â\89¡ f → f21 ≗ f22.
+ â\88\80f,f21,f22. f1 â\8a\9a f21 â\89\98 f â\86\92 f1 â\8a\9a f22 â\89\98 f → f21 ≗ f22.
(* Basic inversion lemmas ***************************************************)
-lemma after_inv_ppx: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89¡ g → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 →
- â\88\83â\88\83f. f1 â\8a\9a f2 â\89¡ f & ↑f = g.
+lemma after_inv_ppx: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89\98 g → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 →
+ â\88\83â\88\83f. f1 â\8a\9a f2 â\89\98 f & ↑f = g.
#g1 #g2 #g * -g1 -g2 -g #f1 #f2 #f #g1
[ #g2 #g #Hf #H1 #H2 #H #x1 #x2 #Hx1 #Hx2 destruct
>(injective_push … Hx1) >(injective_push … Hx2) -x2 -x1
]
qed-.
-lemma after_inv_pnx: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89¡ g → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 →
- â\88\83â\88\83f. f1 â\8a\9a f2 â\89¡ f & ⫯f = g.
+lemma after_inv_pnx: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89\98 g → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 →
+ â\88\83â\88\83f. f1 â\8a\9a f2 â\89\98 f & ⫯f = g.
#g1 #g2 #g * -g1 -g2 -g #f1 #f2 #f #g1
[ #g2 #g #_ #_ #H2 #_ #x1 #x2 #_ #Hx2 destruct
elim (discr_next_push … Hx2)
]
qed-.
-lemma after_inv_nxx: â\88\80g1,f2,g. g1 â\8a\9a f2 â\89¡ g → ∀f1. ⫯f1 = g1 →
- â\88\83â\88\83f. f1 â\8a\9a f2 â\89¡ f & ⫯f = g.
+lemma after_inv_nxx: â\88\80g1,f2,g. g1 â\8a\9a f2 â\89\98 g → ∀f1. ⫯f1 = g1 →
+ â\88\83â\88\83f. f1 â\8a\9a f2 â\89\98 f & ⫯f = g.
#g1 #f2 #g * -g1 -f2 -g #f1 #f2 #f #g1
[ #g2 #g #_ #H1 #_ #_ #x1 #Hx1 destruct
elim (discr_next_push … Hx1)
(* Advanced inversion lemmas ************************************************)
-lemma after_inv_ppp: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89¡ g →
- â\88\80f1,f2,f. â\86\91f1 = g1 â\86\92 â\86\91f2 = g2 â\86\92 â\86\91f = g â\86\92 f1 â\8a\9a f2 â\89¡ f.
+lemma after_inv_ppp: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89\98 g →
+ â\88\80f1,f2,f. â\86\91f1 = g1 â\86\92 â\86\91f2 = g2 â\86\92 â\86\91f = g â\86\92 f1 â\8a\9a f2 â\89\98 f.
#g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H elim (after_inv_ppx … Hg … H1 H2) -g1 -g2
#x #Hf #Hx destruct <(injective_push … Hx) -f //
qed-.
-lemma after_inv_ppn: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89¡ g →
+lemma after_inv_ppn: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89\98 g →
∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ⫯f = g → ⊥.
#g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H elim (after_inv_ppx … Hg … H1 H2) -g1 -g2
#x #Hf #Hx destruct elim (discr_push_next … Hx)
qed-.
-lemma after_inv_pnn: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89¡ g →
- â\88\80f1,f2,f. â\86\91f1 = g1 â\86\92 ⫯f2 = g2 â\86\92 ⫯f = g â\86\92 f1 â\8a\9a f2 â\89¡ f.
+lemma after_inv_pnn: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89\98 g →
+ â\88\80f1,f2,f. â\86\91f1 = g1 â\86\92 ⫯f2 = g2 â\86\92 ⫯f = g â\86\92 f1 â\8a\9a f2 â\89\98 f.
#g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H elim (after_inv_pnx … Hg … H1 H2) -g1 -g2
#x #Hf #Hx destruct <(injective_next … Hx) -f //
qed-.
-lemma after_inv_pnp: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89¡ g →
+lemma after_inv_pnp: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89\98 g →
∀f1,f2,f. ↑f1 = g1 → ⫯f2 = g2 → ↑f = g → ⊥.
#g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H elim (after_inv_pnx … Hg … H1 H2) -g1 -g2
#x #Hf #Hx destruct elim (discr_next_push … Hx)
qed-.
-lemma after_inv_nxn: â\88\80g1,f2,g. g1 â\8a\9a f2 â\89¡ g →
- â\88\80f1,f. ⫯f1 = g1 â\86\92 ⫯f = g â\86\92 f1 â\8a\9a f2 â\89¡ f.
+lemma after_inv_nxn: â\88\80g1,f2,g. g1 â\8a\9a f2 â\89\98 g →
+ â\88\80f1,f. ⫯f1 = g1 â\86\92 ⫯f = g â\86\92 f1 â\8a\9a f2 â\89\98 f.
#g1 #f2 #g #Hg #f1 #f #H1 #H elim (after_inv_nxx … Hg … H1) -g1
#x #Hf #Hx destruct <(injective_next … Hx) -f //
qed-.
-lemma after_inv_nxp: â\88\80g1,f2,g. g1 â\8a\9a f2 â\89¡ g →
+lemma after_inv_nxp: â\88\80g1,f2,g. g1 â\8a\9a f2 â\89\98 g →
∀f1,f. ⫯f1 = g1 → ↑f = g → ⊥.
#g1 #f2 #g #Hg #f1 #f #H1 #H elim (after_inv_nxx … Hg … H1) -g1
#x #Hf #Hx destruct elim (discr_next_push … Hx)
qed-.
-lemma after_inv_pxp: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89¡ g →
+lemma after_inv_pxp: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89\98 g →
∀f1,f. ↑f1 = g1 → ↑f = g →
- â\88\83â\88\83f2. f1 â\8a\9a f2 â\89¡ f & ↑f2 = g2.
+ â\88\83â\88\83f2. f1 â\8a\9a f2 â\89\98 f & ↑f2 = g2.
#g1 * * [2: #m2] #g2 #g #Hg #f1 #f #H1 #H
[ elim (after_inv_pnp … Hg … H1 … H) -g1 -g -f1 -f //
| lapply (after_inv_ppp … Hg … H1 … H) -g1 -g /2 width=3 by ex2_intro/
]
qed-.
-lemma after_inv_pxn: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89¡ g →
+lemma after_inv_pxn: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89\98 g →
∀f1,f. ↑f1 = g1 → ⫯f = g →
- â\88\83â\88\83f2. f1 â\8a\9a f2 â\89¡ f & ⫯f2 = g2.
+ â\88\83â\88\83f2. f1 â\8a\9a f2 â\89\98 f & ⫯f2 = g2.
#g1 * * [2: #m2] #g2 #g #Hg #f1 #f #H1 #H
[ lapply (after_inv_pnn … Hg … H1 … H) -g1 -g /2 width=3 by ex2_intro/
| elim (after_inv_ppn … Hg … H1 … H) -g1 -g -f1 -f //
]
qed-.
-lemma after_inv_xxp: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89¡ g → ∀f. ↑f = g →
- â\88\83â\88\83f1,f2. f1 â\8a\9a f2 â\89¡ f & ↑f1 = g1 & ↑f2 = g2.
+lemma after_inv_xxp: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89\98 g → ∀f. ↑f = g →
+ â\88\83â\88\83f1,f2. f1 â\8a\9a f2 â\89\98 f & ↑f1 = g1 & ↑f2 = g2.
* * [2: #m1 ] #g1 #g2 #g #Hg #f #H
[ elim (after_inv_nxp … Hg … H) -g2 -g -f //
| elim (after_inv_pxp … Hg … H) -g /2 width=5 by ex3_2_intro/
]
qed-.
-lemma after_inv_xxn: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89¡ g → ∀f. ⫯f = g →
- (â\88\83â\88\83f1,f2. f1 â\8a\9a f2 â\89¡ f & ↑f1 = g1 & ⫯f2 = g2) ∨
- â\88\83â\88\83f1. f1 â\8a\9a g2 â\89¡ f & ⫯f1 = g1.
+lemma after_inv_xxn: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89\98 g → ∀f. ⫯f = g →
+ (â\88\83â\88\83f1,f2. f1 â\8a\9a f2 â\89\98 f & ↑f1 = g1 & ⫯f2 = g2) ∨
+ â\88\83â\88\83f1. f1 â\8a\9a g2 â\89\98 f & ⫯f1 = g1.
* * [2: #m1 ] #g1 #g2 #g #Hg #f #H
[ /4 width=5 by after_inv_nxn, or_intror, ex2_intro/
| elim (after_inv_pxn … Hg … H) -g
]
qed-.
-lemma after_inv_pxx: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89¡ g → ∀f1. ↑f1 = g1 →
- (â\88\83â\88\83f2,f. f1 â\8a\9a f2 â\89¡ f & ↑f2 = g2 & ↑f = g) ∨
- (â\88\83â\88\83f2,f. f1 â\8a\9a f2 â\89¡ f & ⫯f2 = g2 & ⫯f = g).
+lemma after_inv_pxx: â\88\80g1,g2,g. g1 â\8a\9a g2 â\89\98 g → ∀f1. ↑f1 = g1 →
+ (â\88\83â\88\83f2,f. f1 â\8a\9a f2 â\89\98 f & ↑f2 = g2 & ↑f = g) ∨
+ (â\88\83â\88\83f2,f. f1 â\8a\9a f2 â\89\98 f & ⫯f2 = g2 & ⫯f = g).
#g1 * * [2: #m2 ] #g2 #g #Hg #f1 #H
[ elim (after_inv_pnx … Hg … H) -g1
/3 width=5 by or_intror, ex3_2_intro/
(* Basic properties *********************************************************)
-corec lemma after_eq_repl_back2: â\88\80f1,f. eq_repl_back (λf2. f2 â\8a\9a f1 â\89¡ f).
+corec lemma after_eq_repl_back2: â\88\80f1,f. eq_repl_back (λf2. f2 â\8a\9a f1 â\89\98 f).
#f1 #f #f2 * -f2 -f1 -f
#f21 #f1 #f #g21 [1,2: #g1 ] #g #Hf #H21 [1,2: #H1 ] #H #g22 #H0
[ cases (eq_inv_px … H0 … H21) -g21 /3 width=7 by after_refl/
]
qed-.
-lemma after_eq_repl_fwd2: â\88\80f1,f. eq_repl_fwd (λf2. f2 â\8a\9a f1 â\89¡ f).
+lemma after_eq_repl_fwd2: â\88\80f1,f. eq_repl_fwd (λf2. f2 â\8a\9a f1 â\89\98 f).
#f1 #f @eq_repl_sym /2 width=3 by after_eq_repl_back2/
qed-.
-corec lemma after_eq_repl_back1: â\88\80f2,f. eq_repl_back (λf1. f2 â\8a\9a f1 â\89¡ f).
+corec lemma after_eq_repl_back1: â\88\80f2,f. eq_repl_back (λf1. f2 â\8a\9a f1 â\89\98 f).
#f2 #f #f1 * -f2 -f1 -f
#f2 #f11 #f #g2 [1,2: #g11 ] #g #Hf #H2 [1,2: #H11 ] #H #g2 #H0
[ cases (eq_inv_px … H0 … H11) -g11 /3 width=7 by after_refl/
]
qed-.
-lemma after_eq_repl_fwd1: â\88\80f2,f. eq_repl_fwd (λf1. f2 â\8a\9a f1 â\89¡ f).
+lemma after_eq_repl_fwd1: â\88\80f2,f. eq_repl_fwd (λf1. f2 â\8a\9a f1 â\89\98 f).
#f2 #f @eq_repl_sym /2 width=3 by after_eq_repl_back1/
qed-.
-corec lemma after_eq_repl_back0: â\88\80f1,f2. eq_repl_back (λf. f2 â\8a\9a f1 â\89¡ f).
+corec lemma after_eq_repl_back0: â\88\80f1,f2. eq_repl_back (λf. f2 â\8a\9a f1 â\89\98 f).
#f2 #f1 #f * -f2 -f1 -f
#f2 #f1 #f01 #g2 [1,2: #g1 ] #g01 #Hf01 #H2 [1,2: #H1 ] #H01 #g02 #H0
[ cases (eq_inv_px … H0 … H01) -g01 /3 width=7 by after_refl/
]
qed-.
-lemma after_eq_repl_fwd0: â\88\80f2,f1. eq_repl_fwd (λf. f2 â\8a\9a f1 â\89¡ f).
+lemma after_eq_repl_fwd0: â\88\80f2,f1. eq_repl_fwd (λf. f2 â\8a\9a f1 â\89\98 f).
#f2 #f1 @eq_repl_sym /2 width=3 by after_eq_repl_back0/
qed-.
(* Main properties **********************************************************)
-corec theorem after_trans1: â\88\80f0,f3,f4. f0 â\8a\9a f3 â\89¡ f4 →
- â\88\80f1,f2. f1 â\8a\9a f2 â\89¡ f0 →
- â\88\80f. f2 â\8a\9a f3 â\89¡ f â\86\92 f1 â\8a\9a f â\89¡ f4.
+corec theorem after_trans1: â\88\80f0,f3,f4. f0 â\8a\9a f3 â\89\98 f4 →
+ â\88\80f1,f2. f1 â\8a\9a f2 â\89\98 f0 →
+ â\88\80f. f2 â\8a\9a f3 â\89\98 f â\86\92 f1 â\8a\9a f â\89\98 f4.
#f0 #f3 #f4 * -f0 -f3 -f4 #f0 #f3 #f4 #g0 [1,2: #g3 ] #g4
[ #Hf4 #H0 #H3 #H4 #g1 #g2 #Hg0 #g #Hg
cases (after_inv_xxp … Hg0 … H0) -g0
]
qed-.
-corec theorem after_trans2: â\88\80f1,f0,f4. f1 â\8a\9a f0 â\89¡ f4 →
- â\88\80f2, f3. f2 â\8a\9a f3 â\89¡ f0 →
- â\88\80f. f1 â\8a\9a f2 â\89¡ f â\86\92 f â\8a\9a f3 â\89¡ f4.
+corec theorem after_trans2: â\88\80f1,f0,f4. f1 â\8a\9a f0 â\89\98 f4 →
+ â\88\80f2, f3. f2 â\8a\9a f3 â\89\98 f0 →
+ â\88\80f. f1 â\8a\9a f2 â\89\98 f â\86\92 f â\8a\9a f3 â\89\98 f4.
#f1 #f0 #f4 * -f1 -f0 -f4 #f1 #f0 #f4 #g1 [1,2: #g0 ] #g4
[ #Hf4 #H1 #H0 #H4 #g2 #g3 #Hg0 #g #Hg
cases (after_inv_xxp … Hg0 … H0) -g0
(* Main inversion lemmas ****************************************************)
-corec theorem after_mono: â\88\80f1,f2,x,y. f1 â\8a\9a f2 â\89¡ x â\86\92 f1 â\8a\9a f2 â\89¡ y → x ≗ y.
+corec theorem after_mono: â\88\80f1,f2,x,y. f1 â\8a\9a f2 â\89\98 x â\86\92 f1 â\8a\9a f2 â\89\98 y → x ≗ y.
#f1 #f2 #x #y * -f1 -f2 -x
#f1 #f2 #x #g1 [1,2: #g2 ] #g #Hx #H1 [1,2: #H2 ] #H0x #Hy
[ cases (after_inv_ppx … Hy … H1 H2) -g1 -g2 /3 width=8 by eq_push/
]
qed-.
-lemma after_mono_eq: â\88\80f1,f2,f. f1 â\8a\9a f2 â\89¡ f â\86\92 â\88\80g1,g2,g. g1 â\8a\9a g2 â\89¡ g →
+lemma after_mono_eq: â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 â\88\80g1,g2,g. g1 â\8a\9a g2 â\89\98 g →
f1 ≗ g1 → f2 ≗ g2 → f ≗ g.
/4 width=4 by after_mono, after_eq_repl_back1, after_eq_repl_back2/ qed-.
(* Properties on tls ********************************************************)
-lemma after_tls: â\88\80n,f1,f2,f. @â¦\830, f1â¦\84 â\89¡ n →
- f1 â\8a\9a f2 â\89¡ f â\86\92 ⫱*[n]f1 â\8a\9a f2 â\89¡ ⫱*[n]f.
+lemma after_tls: â\88\80n,f1,f2,f. @â¦\830, f1â¦\84 â\89\98 n →
+ f1 â\8a\9a f2 â\89\98 f â\86\92 ⫱*[n]f1 â\8a\9a f2 â\89\98 ⫱*[n]f.
#n elim n -n //
#n #IH #f1 #f2 #f #Hf1 #Hf
cases (at_inv_pxn … Hf1) -Hf1 [ |*: // ] #g1 #Hg1 #H1
(* Properties on isid *******************************************************)
-corec lemma after_isid_sn: â\88\80f1. ð\9d\90\88â¦\83f1â¦\84 â\86\92 â\88\80f2. f1 â\8a\9a f2 â\89¡ f2.
+corec lemma after_isid_sn: â\88\80f1. ð\9d\90\88â¦\83f1â¦\84 â\86\92 â\88\80f2. f1 â\8a\9a f2 â\89\98 f2.
#f1 * -f1 #f1 #g1 #Hf1 #H1 #f2 cases (pn_split f2) * #g2 #H2
/3 width=7 by after_push, after_refl/
qed.
-corec lemma after_isid_dx: â\88\80f2. ð\9d\90\88â¦\83f2â¦\84 â\86\92 â\88\80f1. f1 â\8a\9a f2 â\89¡ f1.
+corec lemma after_isid_dx: â\88\80f2. ð\9d\90\88â¦\83f2â¦\84 â\86\92 â\88\80f1. f1 â\8a\9a f2 â\89\98 f1.
#f2 * -f2 #f2 #g2 #Hf2 #H2 #f1 cases (pn_split f1) * #g1 #H1
[ /3 width=7 by after_refl/
| @(after_next … H1 H1) /3 width=3 by isid_push/
(* Inversion lemmas on isid *************************************************)
-lemma after_isid_inv_sn: â\88\80f1,f2,f. f1 â\8a\9a f2 â\89¡ f → 𝐈⦃f1⦄ → f2 ≗ f.
+lemma after_isid_inv_sn: â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f → 𝐈⦃f1⦄ → f2 ≗ f.
/3 width=6 by after_isid_sn, after_mono/ qed-.
-lemma after_isid_inv_dx: â\88\80f1,f2,f. f1 â\8a\9a f2 â\89¡ f → 𝐈⦃f2⦄ → f1 ≗ f.
+lemma after_isid_inv_dx: â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f → 𝐈⦃f2⦄ → f1 ≗ f.
/3 width=6 by after_isid_dx, after_mono/ qed-.
-corec lemma after_fwd_isid1: â\88\80f1,f2,f. f1 â\8a\9a f2 â\89¡ f → 𝐈⦃f⦄ → 𝐈⦃f1⦄.
+corec lemma after_fwd_isid1: â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f → 𝐈⦃f⦄ → 𝐈⦃f1⦄.
#f1 #f2 #f * -f1 -f2 -f
#f1 #f2 #f #g1 [1,2: #g2 ] #g #Hf #H1 [1,2: #H2 ] #H0 #H
[ /4 width=6 by isid_inv_push, isid_push/ ]
cases (isid_inv_next … H … H0)
qed-.
-corec lemma after_fwd_isid2: â\88\80f1,f2,f. f1 â\8a\9a f2 â\89¡ f → 𝐈⦃f⦄ → 𝐈⦃f2⦄.
+corec lemma after_fwd_isid2: â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f → 𝐈⦃f⦄ → 𝐈⦃f2⦄.
#f1 #f2 #f * -f1 -f2 -f
#f1 #f2 #f #g1 [1,2: #g2 ] #g #Hf #H1 [1,2: #H2 ] #H0 #H
[ /4 width=6 by isid_inv_push, isid_push/ ]
cases (isid_inv_next … H … H0)
qed-.
-lemma after_inv_isid3: â\88\80f1,f2,f. f1 â\8a\9a f2 â\89¡ f → 𝐈⦃f⦄ → 𝐈⦃f1⦄ ∧ 𝐈⦃f2⦄.
+lemma after_inv_isid3: â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f → 𝐈⦃f⦄ → 𝐈⦃f1⦄ ∧ 𝐈⦃f2⦄.
/3 width=4 by after_fwd_isid2, after_fwd_isid1, conj/ qed-.
(* Properties on isuni ******************************************************)
-lemma after_isid_isuni: â\88\80f1,f2. ð\9d\90\88â¦\83f2â¦\84 â\86\92 ð\9d\90\94â¦\83f1â¦\84 â\86\92 f1 â\8a\9a ⫯f2 â\89¡ ⫯f1.
+lemma after_isid_isuni: â\88\80f1,f2. ð\9d\90\88â¦\83f2â¦\84 â\86\92 ð\9d\90\94â¦\83f1â¦\84 â\86\92 f1 â\8a\9a ⫯f2 â\89\98 ⫯f1.
#f1 #f2 #Hf2 #H elim H -H
/5 width=7 by after_isid_dx, after_eq_repl_back2, after_next, after_push, eq_push_inv_isid/
qed.
-lemma after_uni_next2: â\88\80f2. ð\9d\90\94â¦\83f2â¦\84 â\86\92 â\88\80f1,f. ⫯f2 â\8a\9a f1 â\89¡ f â\86\92 f2 â\8a\9a ⫯f1 â\89¡ f.
+lemma after_uni_next2: â\88\80f2. ð\9d\90\94â¦\83f2â¦\84 â\86\92 â\88\80f1,f. ⫯f2 â\8a\9a f1 â\89\98 f â\86\92 f2 â\8a\9a ⫯f1 â\89\98 f.
#f2 #H elim H -f2
[ #f2 #Hf2 #f1 #f #Hf
elim (after_inv_nxx … Hf) -Hf [2,3: // ] #g #Hg #H0 destruct
(* Properties on uni ********************************************************)
-lemma after_uni: â\88\80n1,n2. ð\9d\90\94â\9d´n1â\9dµ â\8a\9a ð\9d\90\94â\9d´n2â\9dµ â\89¡ 𝐔❴n1+n2❵.
+lemma after_uni: â\88\80n1,n2. ð\9d\90\94â\9d´n1â\9dµ â\8a\9a ð\9d\90\94â\9d´n2â\9dµ â\89\98 𝐔❴n1+n2❵.
@nat_elim2 [3: #n #m <plus_n_Sm ] (**) (* full auto fails *)
/4 width=5 by after_uni_next2, after_isid_dx, after_isid_sn, after_next/
qed.
(* Forward lemmas on at *****************************************************)
-lemma after_at_fwd: â\88\80i,i1,f. @â¦\83i1, fâ¦\84 â\89¡ i â\86\92 â\88\80f2,f1. f2 â\8a\9a f1 â\89¡ f →
- â\88\83â\88\83i2. @â¦\83i1, f1â¦\84 â\89¡ i2 & @â¦\83i2, f2â¦\84 â\89¡ i.
+lemma after_at_fwd: â\88\80i,i1,f. @â¦\83i1, fâ¦\84 â\89\98 i â\86\92 â\88\80f2,f1. f2 â\8a\9a f1 â\89\98 f →
+ â\88\83â\88\83i2. @â¦\83i1, f1â¦\84 â\89\98 i2 & @â¦\83i2, f2â¦\84 â\89\98 i.
#i elim i -i [2: #i #IH ] #i1 #f #Hf #f2 #f1 #Hf21
[ elim (at_inv_xxn … Hf) -Hf [1,3:* |*: // ]
[1: #g #j1 #Hg #H0 #H |2,4: #g #Hg #H ]
/3 width=9 by at_refl, at_push, at_next, ex2_intro/
qed-.
-lemma after_fwd_at: â\88\80i,i2,i1,f1,f2. @â¦\83i1, f1â¦\84 â\89¡ i2 â\86\92 @â¦\83i2, f2â¦\84 â\89¡ i →
- â\88\80f. f2 â\8a\9a f1 â\89¡ f â\86\92 @â¦\83i1, fâ¦\84 â\89¡ i.
+lemma after_fwd_at: â\88\80i,i2,i1,f1,f2. @â¦\83i1, f1â¦\84 â\89\98 i2 â\86\92 @â¦\83i2, f2â¦\84 â\89\98 i →
+ â\88\80f. f2 â\8a\9a f1 â\89\98 f â\86\92 @â¦\83i1, fâ¦\84 â\89\98 i.
#i elim i -i [2: #i #IH ] #i2 #i1 #f1 #f2 #Hf1 #Hf2 #f #Hf
[ elim (at_inv_xxn … Hf2) -Hf2 [1,3: * |*: // ]
#g2 [ #j2 ] #Hg2 [ #H22 ] #H20
]
qed-.
-lemma after_fwd_at2: â\88\80f,i1,i. @â¦\83i1, fâ¦\84 â\89¡ i â\86\92 â\88\80f1,i2. @â¦\83i1, f1â¦\84 â\89¡ i2 →
- â\88\80f2. f2 â\8a\9a f1 â\89¡ f â\86\92 @â¦\83i2, f2â¦\84 â\89¡ i.
+lemma after_fwd_at2: â\88\80f,i1,i. @â¦\83i1, fâ¦\84 â\89\98 i â\86\92 â\88\80f1,i2. @â¦\83i1, f1â¦\84 â\89\98 i2 →
+ â\88\80f2. f2 â\8a\9a f1 â\89\98 f â\86\92 @â¦\83i2, f2â¦\84 â\89\98 i.
#f #i1 #i #Hf #f1 #i2 #Hf1 #f2 #H elim (after_at_fwd … Hf … H) -f
#j1 #H #Hf2 <(at_mono … Hf1 … H) -i1 -i2 //
qed-.
-lemma after_fwd_at1: â\88\80i,i2,i1,f,f2. @â¦\83i1, fâ¦\84 â\89¡ i â\86\92 @â¦\83i2, f2â¦\84 â\89¡ i →
- â\88\80f1. f2 â\8a\9a f1 â\89¡ f â\86\92 @â¦\83i1, f1â¦\84 â\89¡ i2.
+lemma after_fwd_at1: â\88\80i,i2,i1,f,f2. @â¦\83i1, fâ¦\84 â\89\98 i â\86\92 @â¦\83i2, f2â¦\84 â\89\98 i →
+ â\88\80f1. f2 â\8a\9a f1 â\89\98 f â\86\92 @â¦\83i1, f1â¦\84 â\89\98 i2.
#i elim i -i [2: #i #IH ] #i2 #i1 #f #f2 #Hf #Hf2 #f1 #Hf1
[ elim (at_inv_xxn … Hf) -Hf [1,3: * |*: // ]
#g [ #j1 ] #Hg [ #H01 ] #H00
(* Properties with at *******************************************************)
-lemma after_uni_dx: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 â\89¡ i2 →
- â\88\80f. f2 â\8a\9a ð\9d\90\94â\9d´i1â\9dµ â\89¡ f â\86\92 ð\9d\90\94â\9d´i2â\9dµ â\8a\9a ⫱*[i2] f2 â\89¡ f.
+lemma after_uni_dx: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 â\89\98 i2 →
+ â\88\80f. f2 â\8a\9a ð\9d\90\94â\9d´i1â\9dµ â\89\98 f â\86\92 ð\9d\90\94â\9d´i2â\9dµ â\8a\9a ⫱*[i2] f2 â\89\98 f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct
]
qed.
-lemma after_uni_sn: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 â\89¡ i2 →
- â\88\80f. ð\9d\90\94â\9d´i2â\9dµ â\8a\9a ⫱*[i2] f2 â\89¡ f â\86\92 f2 â\8a\9a ð\9d\90\94â\9d´i1â\9dµ â\89¡ f.
+lemma after_uni_sn: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 â\89\98 i2 →
+ â\88\80f. ð\9d\90\94â\9d´i2â\9dµ â\8a\9a ⫱*[i2] f2 â\89\98 f â\86\92 f2 â\8a\9a ð\9d\90\94â\9d´i1â\9dµ â\89\98 f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct
]
qed-.
-lemma after_uni_succ_dx: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 â\89¡ i2 →
- â\88\80f. f2 â\8a\9a ð\9d\90\94â\9d´â«¯i1â\9dµ â\89¡ f â\86\92 ð\9d\90\94â\9d´â«¯i2â\9dµ â\8a\9a ⫱*[⫯i2] f2 â\89¡ f.
+lemma after_uni_succ_dx: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 â\89\98 i2 →
+ â\88\80f. f2 â\8a\9a ð\9d\90\94â\9d´â«¯i1â\9dµ â\89\98 f â\86\92 ð\9d\90\94â\9d´â«¯i2â\9dµ â\8a\9a ⫱*[⫯i2] f2 â\89\98 f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct
]
qed.
-lemma after_uni_succ_sn: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 â\89¡ i2 →
- â\88\80f. ð\9d\90\94â\9d´â«¯i2â\9dµ â\8a\9a ⫱*[⫯i2] f2 â\89¡ f â\86\92 f2 â\8a\9a ð\9d\90\94â\9d´â«¯i1â\9dµ â\89¡ f.
+lemma after_uni_succ_sn: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 â\89\98 i2 →
+ â\88\80f. ð\9d\90\94â\9d´â«¯i2â\9dµ â\8a\9a ⫱*[⫯i2] f2 â\89\98 f â\86\92 f2 â\8a\9a ð\9d\90\94â\9d´â«¯i1â\9dµ â\89\98 f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct
]
qed-.
-lemma after_uni_one_dx: â\88\80f2,f. â\86\91f2 â\8a\9a ð\9d\90\94â\9d´â«¯Oâ\9dµ â\89¡ f â\86\92 ð\9d\90\94â\9d´â«¯Oâ\9dµ â\8a\9a f2 â\89¡ f.
+lemma after_uni_one_dx: â\88\80f2,f. â\86\91f2 â\8a\9a ð\9d\90\94â\9d´â«¯Oâ\9dµ â\89\98 f â\86\92 ð\9d\90\94â\9d´â«¯Oâ\9dµ â\8a\9a f2 â\89\98 f.
#f2 #f #H @(after_uni_succ_dx … (↑f2)) /2 width=3 by at_refl/
qed.
-lemma after_uni_one_sn: â\88\80f1,f. ð\9d\90\94â\9d´â«¯Oâ\9dµ â\8a\9a f1 â\89¡ f â\86\92 â\86\91f1 â\8a\9a ð\9d\90\94â\9d´â«¯Oâ\9dµ â\89¡ f.
+lemma after_uni_one_sn: â\88\80f1,f. ð\9d\90\94â\9d´â«¯Oâ\9dµ â\8a\9a f1 â\89\98 f â\86\92 â\86\91f1 â\8a\9a ð\9d\90\94â\9d´â«¯Oâ\9dµ â\89\98 f.
/3 width=3 by after_uni_succ_sn, at_refl/ qed-.
(* Forward lemmas on istot **************************************************)
-lemma after_istot_fwd: â\88\80f2,f1,f. f2 â\8a\9a f1 â\89¡ f → 𝐓⦃f2⦄ → 𝐓⦃f1⦄ → 𝐓⦃f⦄.
+lemma after_istot_fwd: â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f → 𝐓⦃f2⦄ → 𝐓⦃f1⦄ → 𝐓⦃f⦄.
#f2 #f1 #f #Hf #Hf2 #Hf1 #i1 elim (Hf1 i1) -Hf1
#i2 #Hf1 elim (Hf2 i2) -Hf2
/3 width=7 by after_fwd_at, ex_intro/
qed-.
-lemma after_fwd_istot_dx: â\88\80f2,f1,f. f2 â\8a\9a f1 â\89¡ f → 𝐓⦃f⦄ → 𝐓⦃f1⦄.
+lemma after_fwd_istot_dx: â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f → 𝐓⦃f⦄ → 𝐓⦃f1⦄.
#f2 #f1 #f #H #Hf #i1 elim (Hf i1) -Hf
#i2 #Hf elim (after_at_fwd … Hf … H) -f /2 width=2 by ex_intro/
qed-.
-lemma after_fwd_istot_sn: â\88\80f2,f1,f. f2 â\8a\9a f1 â\89¡ f → 𝐓⦃f⦄ → 𝐓⦃f2⦄.
+lemma after_fwd_istot_sn: â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f → 𝐓⦃f⦄ → 𝐓⦃f2⦄.
#f2 #f1 #f #H #Hf #i1 elim (Hf i1) -Hf
#i #Hf elim (after_at_fwd … Hf … H) -f
#i2 #Hf1 #Hf2 lapply (at_increasing … Hf1) -f1
#Hi12 elim (at_le_ex … Hf2 … Hi12) -i2 /2 width=2 by ex_intro/
qed-.
-lemma after_inv_istot: â\88\80f2,f1,f. f2 â\8a\9a f1 â\89¡ f → 𝐓⦃f⦄ → 𝐓⦃f2⦄ ∧ 𝐓⦃f1⦄.
+lemma after_inv_istot: â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f → 𝐓⦃f⦄ → 𝐓⦃f2⦄ ∧ 𝐓⦃f1⦄.
/3 width=4 by after_fwd_istot_sn, after_fwd_istot_dx, conj/ qed-.
-lemma after_at1_fwd: â\88\80f1,i1,i2. @â¦\83i1, f1â¦\84 â\89¡ i2 â\86\92 â\88\80f2. ð\9d\90\93â¦\83f2â¦\84 â\86\92 â\88\80f. f2 â\8a\9a f1 â\89¡ f →
- â\88\83â\88\83i. @â¦\83i2, f2â¦\84 â\89¡ i & @â¦\83i1, fâ¦\84 â\89¡ i.
+lemma after_at1_fwd: â\88\80f1,i1,i2. @â¦\83i1, f1â¦\84 â\89\98 i2 â\86\92 â\88\80f2. ð\9d\90\93â¦\83f2â¦\84 â\86\92 â\88\80f. f2 â\8a\9a f1 â\89\98 f →
+ â\88\83â\88\83i. @â¦\83i2, f2â¦\84 â\89\98 i & @â¦\83i1, fâ¦\84 â\89\98 i.
#f1 #i1 #i2 #Hf1 #f2 #Hf2 #f #Hf elim (Hf2 i2) -Hf2
/3 width=8 by after_fwd_at, ex2_intro/
qed-.
-lemma after_fwd_isid_sn: â\88\80f2,f1,f. ð\9d\90\93â¦\83fâ¦\84 â\86\92 f2 â\8a\9a f1 â\89¡ f → f1 ≗ f → 𝐈⦃f2⦄.
+lemma after_fwd_isid_sn: â\88\80f2,f1,f. ð\9d\90\93â¦\83fâ¦\84 â\86\92 f2 â\8a\9a f1 â\89\98 f → f1 ≗ f → 𝐈⦃f2⦄.
#f2 #f1 #f #H #Hf elim (after_inv_istot … Hf H) -H
#Hf2 #Hf1 #H @isid_at_total // -Hf2
#i2 #i #Hf2 elim (Hf1 i2) -Hf1
/3 width=7 by at_eq_repl_back, at_mono, at_id_le/
qed-.
-lemma after_fwd_isid_dx: â\88\80f2,f1,f. ð\9d\90\93â¦\83fâ¦\84 â\86\92 f2 â\8a\9a f1 â\89¡ f → f2 ≗ f → 𝐈⦃f1⦄.
+lemma after_fwd_isid_dx: â\88\80f2,f1,f. ð\9d\90\93â¦\83fâ¦\84 â\86\92 f2 â\8a\9a f1 â\89\98 f → f2 ≗ f → 𝐈⦃f1⦄.
#f2 #f1 #f #H #Hf elim (after_inv_istot … Hf H) -H
#Hf2 #Hf1 #H2 @isid_at_total // -Hf1
#i1 #i2 #Hi12 elim (after_at1_fwd … Hi12 … Hf) -f1
/3 width=8 by at_inj, at_eq_repl_back/
qed-.
-corec fact after_inj_O_aux: â\88\80f1. @â¦\830, f1â¦\84 â\89¡ 0 → H_after_inj f1.
+corec fact after_inj_O_aux: â\88\80f1. @â¦\830, f1â¦\84 â\89\98 0 → H_after_inj f1.
#f1 #H1f1 #H2f1 #f #f21 #f22 #H1f #H2f
cases (at_inv_pxp … H1f1) -H1f1 [ |*: // ] #g1 #H1
lapply (istot_inv_push … H2f1 … H1) -H2f1 #H2g1
/2 width=1 by after_tls, istot_tls, at_pxx_tls/
qed-.
-fact after_inj_aux: (â\88\80f1. @â¦\830, f1â¦\84 â\89¡ 0 → H_after_inj f1) →
- â\88\80i2,f1. @â¦\830, f1â¦\84 â\89¡ i2 → H_after_inj f1.
+fact after_inj_aux: (â\88\80f1. @â¦\830, f1â¦\84 â\89\98 0 → H_after_inj f1) →
+ â\88\80i2,f1. @â¦\830, f1â¦\84 â\89\98 i2 → H_after_inj f1.
#H0 #i2 elim i2 -i2 /2 width=1 by/ -H0
#i2 #IH #f1 #H1f1 #H2f1 #f #f21 #f22 #H1f #H2f
elim (at_inv_pxn … H1f1) -H1f1 [ |*: // ] #g1 #H1g1 #H1
'RAt i1 f i2 = (at f i1 i2).
definition H_at_div: relation4 rtmap rtmap rtmap rtmap ≝ λf2,g2,f1,g1.
- â\88\80jf,jg,j. @â¦\83jf, f2â¦\84 â\89¡ j â\86\92 @â¦\83jg, g2â¦\84 â\89¡ j →
- â\88\83â\88\83j0. @â¦\83j0, f1â¦\84 â\89¡ jf & @â¦\83j0, g1â¦\84 â\89¡ jg.
+ â\88\80jf,jg,j. @â¦\83jf, f2â¦\84 â\89\98 j â\86\92 @â¦\83jg, g2â¦\84 â\89\98 j →
+ â\88\83â\88\83j0. @â¦\83j0, f1â¦\84 â\89\98 jf & @â¦\83j0, g1â¦\84 â\89\98 jg.
(* Basic inversion lemmas ***************************************************)
-lemma at_inv_ppx: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 → ∀g. 0 = i1 → ↑g = f → 0 = i2.
+lemma at_inv_ppx: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 → ∀g. 0 = i1 → ↑g = f → 0 = i2.
#f #i1 #i2 * -f -i1 -i2 //
[ #f #i1 #i2 #_ #g #j1 #j2 #_ * #_ #x #H destruct
| #f #i1 #i2 #_ #g #j2 * #_ #x #_ #H elim (discr_push_next … H)
]
qed-.
-lemma at_inv_npx: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 → ∀g,j1. ⫯j1 = i1 → ↑g = f →
- â\88\83â\88\83j2. @â¦\83j1, gâ¦\84 â\89¡ j2 & ⫯j2 = i2.
+lemma at_inv_npx: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 → ∀g,j1. ⫯j1 = i1 → ↑g = f →
+ â\88\83â\88\83j2. @â¦\83j1, gâ¦\84 â\89\98 j2 & ⫯j2 = i2.
#f #i1 #i2 * -f -i1 -i2
[ #f #g #j1 #j2 #_ * #_ #x #x1 #H destruct
| #f #i1 #i2 #Hi #g #j1 #j2 * * * #x #x1 #H #Hf >(injective_push … Hf) -g destruct /2 width=3 by ex2_intro/
]
qed-.
-lemma at_inv_xnx: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 → ∀g. ⫯g = f →
- â\88\83â\88\83j2. @â¦\83i1, gâ¦\84 â\89¡ j2 & ⫯j2 = i2.
+lemma at_inv_xnx: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 → ∀g. ⫯g = f →
+ â\88\83â\88\83j2. @â¦\83i1, gâ¦\84 â\89\98 j2 & ⫯j2 = i2.
#f #i1 #i2 * -f -i1 -i2
[ #f #g #j1 #j2 * #_ #_ #x #H elim (discr_next_push … H)
| #f #i1 #i2 #_ #g #j1 #j2 * #_ #_ #x #H elim (discr_next_push … H)
(* Advanced inversion lemmas ************************************************)
-lemma at_inv_ppn: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 →
+lemma at_inv_ppn: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 →
∀g,j2. 0 = i1 → ↑g = f → ⫯j2 = i2 → ⊥.
#f #i1 #i2 #Hf #g #j2 #H1 #H <(at_inv_ppx … Hf … H1 H) -f -g -i1 -i2
#H destruct
qed-.
-lemma at_inv_npp: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 →
+lemma at_inv_npp: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 →
∀g,j1. ⫯j1 = i1 → ↑g = f → 0 = i2 → ⊥.
#f #i1 #i2 #Hf #g #j1 #H1 #H elim (at_inv_npx … Hf … H1 H) -f -i1
#x2 #Hg * -i2 #H destruct
qed-.
-lemma at_inv_npn: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 →
- â\88\80g,j1,j2. ⫯j1 = i1 â\86\92 â\86\91g = f â\86\92 ⫯j2 = i2 â\86\92 @â¦\83j1, gâ¦\84 â\89¡ j2.
+lemma at_inv_npn: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 →
+ â\88\80g,j1,j2. ⫯j1 = i1 â\86\92 â\86\91g = f â\86\92 ⫯j2 = i2 â\86\92 @â¦\83j1, gâ¦\84 â\89\98 j2.
#f #i1 #i2 #Hf #g #j1 #j2 #H1 #H elim (at_inv_npx … Hf … H1 H) -f -i1
#x2 #Hg * -i2 #H destruct //
qed-.
-lemma at_inv_xnp: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 →
+lemma at_inv_xnp: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 →
∀g. ⫯g = f → 0 = i2 → ⊥.
#f #i1 #i2 #Hf #g #H elim (at_inv_xnx … Hf … H) -f
#x2 #Hg * -i2 #H destruct
qed-.
-lemma at_inv_xnn: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 →
- â\88\80g,j2. ⫯g = f â\86\92 ⫯j2 = i2 â\86\92 @â¦\83i1, gâ¦\84 â\89¡ j2.
+lemma at_inv_xnn: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 →
+ â\88\80g,j2. ⫯g = f â\86\92 ⫯j2 = i2 â\86\92 @â¦\83i1, gâ¦\84 â\89\98 j2.
#f #i1 #i2 #Hf #g #j2 #H elim (at_inv_xnx … Hf … H) -f
#x2 #Hg * -i2 #H destruct //
qed-.
-lemma at_inv_pxp: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 → 0 = i1 → 0 = i2 → ∃g. ↑g = f.
+lemma at_inv_pxp: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 → 0 = i1 → 0 = i2 → ∃g. ↑g = f.
#f elim (pn_split … f) * /2 width=2 by ex_intro/
#g #H #i1 #i2 #Hf #H1 #H2 cases (at_inv_xnp … Hf … H H2)
qed-.
-lemma at_inv_pxn: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 → ∀j2. 0 = i1 → ⫯j2 = i2 →
- â\88\83â\88\83g. @â¦\83i1, gâ¦\84 â\89¡ j2 & ⫯g = f.
+lemma at_inv_pxn: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 → ∀j2. 0 = i1 → ⫯j2 = i2 →
+ â\88\83â\88\83g. @â¦\83i1, gâ¦\84 â\89\98 j2 & ⫯g = f.
#f elim (pn_split … f) *
#g #H #i1 #i2 #Hf #j2 #H1 #H2
[ elim (at_inv_ppn … Hf … H1 H H2)
]
qed-.
-lemma at_inv_nxp: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 →
+lemma at_inv_nxp: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 →
∀j1. ⫯j1 = i1 → 0 = i2 → ⊥.
#f elim (pn_split f) *
#g #H #i1 #i2 #Hf #j1 #H1 #H2
]
qed-.
-lemma at_inv_nxn: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 → ∀j1,j2. ⫯j1 = i1 → ⫯j2 = i2 →
- (â\88\83â\88\83g. @â¦\83j1, gâ¦\84 â\89¡ j2 & ↑g = f) ∨
- â\88\83â\88\83g. @â¦\83i1, gâ¦\84 â\89¡ j2 & ⫯g = f.
+lemma at_inv_nxn: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 → ∀j1,j2. ⫯j1 = i1 → ⫯j2 = i2 →
+ (â\88\83â\88\83g. @â¦\83j1, gâ¦\84 â\89\98 j2 & ↑g = f) ∨
+ â\88\83â\88\83g. @â¦\83i1, gâ¦\84 â\89\98 j2 & ⫯g = f.
#f elim (pn_split f) *
/4 width=7 by at_inv_xnn, at_inv_npn, ex2_intro, or_intror, or_introl/
qed-.
(* Note: the following inversion lemmas must be checked *)
-lemma at_inv_xpx: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 → ∀g. ↑g = f →
+lemma at_inv_xpx: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 → ∀g. ↑g = f →
(0 = i1 ∧ 0 = i2) ∨
- â\88\83â\88\83j1,j2. @â¦\83j1, gâ¦\84 â\89¡ j2 & ⫯j1 = i1 & ⫯j2 = i2.
+ â\88\83â\88\83j1,j2. @â¦\83j1, gâ¦\84 â\89\98 j2 & ⫯j1 = i1 & ⫯j2 = i2.
#f * [2: #i1 ] #i2 #Hf #g #H
[ elim (at_inv_npx … Hf … H) -f /3 width=5 by or_intror, ex3_2_intro/
| >(at_inv_ppx … Hf … H) -f /3 width=1 by conj, or_introl/
]
qed-.
-lemma at_inv_xpp: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 → ∀g. ↑g = f → 0 = i2 → 0 = i1.
+lemma at_inv_xpp: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 → ∀g. ↑g = f → 0 = i2 → 0 = i1.
#f #i1 #i2 #Hf #g #H elim (at_inv_xpx … Hf … H) -f * //
#j1 #j2 #_ #_ * -i2 #H destruct
qed-.
-lemma at_inv_xpn: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 → ∀g,j2. ↑g = f → ⫯j2 = i2 →
- â\88\83â\88\83j1. @â¦\83j1, gâ¦\84 â\89¡ j2 & ⫯j1 = i1.
+lemma at_inv_xpn: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 → ∀g,j2. ↑g = f → ⫯j2 = i2 →
+ â\88\83â\88\83j1. @â¦\83j1, gâ¦\84 â\89\98 j2 & ⫯j1 = i1.
#f #i1 #i2 #Hf #g #j2 #H elim (at_inv_xpx … Hf … H) -f *
[ #_ * -i2 #H destruct
| #x1 #x2 #Hg #H1 * -i2 #H destruct /2 width=3 by ex2_intro/
]
qed-.
-lemma at_inv_xxp: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 → 0 = i2 →
+lemma at_inv_xxp: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 → 0 = i2 →
∃∃g. 0 = i1 & ↑g = f.
#f elim (pn_split f) *
#g #H #i1 #i2 #Hf #H2
]
qed-.
-lemma at_inv_xxn: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 → ∀j2. ⫯j2 = i2 →
- (â\88\83â\88\83g,j1. @â¦\83j1, gâ¦\84 â\89¡ j2 & ⫯j1 = i1 & ↑g = f) ∨
- â\88\83â\88\83g. @â¦\83i1, gâ¦\84 â\89¡ j2 & ⫯g = f.
+lemma at_inv_xxn: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 → ∀j2. ⫯j2 = i2 →
+ (â\88\83â\88\83g,j1. @â¦\83j1, gâ¦\84 â\89\98 j2 & ⫯j1 = i1 & ↑g = f) ∨
+ â\88\83â\88\83g. @â¦\83i1, gâ¦\84 â\89\98 j2 & ⫯g = f.
#f elim (pn_split f) *
#g #H #i1 #i2 #Hf #j2 #H2
[ elim (at_inv_xpn … Hf … H H2) -i2 /3 width=5 by or_introl, ex3_2_intro/
(* Basic forward lemmas *****************************************************)
-lemma at_increasing: â\88\80i2,i1,f. @â¦\83i1, fâ¦\84 â\89¡ i2 → i1 ≤ i2.
+lemma at_increasing: â\88\80i2,i1,f. @â¦\83i1, fâ¦\84 â\89\98 i2 → i1 ≤ i2.
#i2 elim i2 -i2
[ #i1 #f #Hf elim (at_inv_xxp … Hf) -Hf //
| #i2 #IH * //
]
qed-.
-lemma at_increasing_strict: â\88\80g,i1,i2. @â¦\83i1, gâ¦\84 â\89¡ i2 → ∀f. ⫯f = g →
- i1 < i2 â\88§ @â¦\83i1, fâ¦\84 â\89¡ ⫰i2.
+lemma at_increasing_strict: â\88\80g,i1,i2. @â¦\83i1, gâ¦\84 â\89\98 i2 → ∀f. ⫯f = g →
+ i1 < i2 â\88§ @â¦\83i1, fâ¦\84 â\89\98 ⫰i2.
#g #i1 #i2 #Hg #f #H elim (at_inv_xnx … Hg … H) -Hg -H
/4 width=2 by conj, at_increasing, le_S_S/
qed-.
-lemma at_fwd_id_ex: â\88\80f,i. @â¦\83i, fâ¦\84 â\89¡ i → ∃g. ↑g = f.
+lemma at_fwd_id_ex: â\88\80f,i. @â¦\83i, fâ¦\84 â\89\98 i → ∃g. ↑g = f.
#f elim (pn_split f) * /2 width=2 by ex_intro/
#g #H #i #Hf elim (at_inv_xnx … Hf … H) -Hf -H
#j2 #Hg #H destruct lapply (at_increasing … Hg) -Hg
(* Basic properties *********************************************************)
-corec lemma at_eq_repl_back: â\88\80i1,i2. eq_repl_back (λf. @â¦\83i1, fâ¦\84 â\89¡ i2).
+corec lemma at_eq_repl_back: â\88\80i1,i2. eq_repl_back (λf. @â¦\83i1, fâ¦\84 â\89\98 i2).
#i1 #i2 #f1 #H1 cases H1 -f1 -i1 -i2
[ #f1 #g1 #j1 #j2 #H #H1 #H2 #f2 #H12 cases (eq_inv_px … H12 … H) -g1 /2 width=2 by at_refl/
| #f1 #i1 #i2 #Hf1 #g1 #j1 #j2 #H #H1 #H2 #f2 #H12 cases (eq_inv_px … H12 … H) -g1 /3 width=7 by at_push/
]
qed-.
-lemma at_eq_repl_fwd: â\88\80i1,i2. eq_repl_fwd (λf. @â¦\83i1, fâ¦\84 â\89¡ i2).
+lemma at_eq_repl_fwd: â\88\80i1,i2. eq_repl_fwd (λf. @â¦\83i1, fâ¦\84 â\89\98 i2).
#i1 #i2 @eq_repl_sym /2 width=3 by at_eq_repl_back/
qed-.
-lemma at_le_ex: â\88\80j2,i2,f. @â¦\83i2, fâ¦\84 â\89¡ j2 → ∀i1. i1 ≤ i2 →
- â\88\83â\88\83j1. @â¦\83i1, fâ¦\84 â\89¡ j1 & j1 ≤ j2.
+lemma at_le_ex: â\88\80j2,i2,f. @â¦\83i2, fâ¦\84 â\89\98 j2 → ∀i1. i1 ≤ i2 →
+ â\88\83â\88\83j1. @â¦\83i1, fâ¦\84 â\89\98 j1 & j1 ≤ j2.
#j2 elim j2 -j2 [2: #j2 #IH ] #i2 #f #Hf
[ elim (at_inv_xxn … Hf) -Hf [1,3: * |*: // ]
#g [ #x2 ] #Hg [ #H2 ] #H0
]
qed-.
-lemma at_id_le: â\88\80i1,i2. i1 â\89¤ i2 â\86\92 â\88\80f. @â¦\83i2, fâ¦\84 â\89¡ i2 â\86\92 @â¦\83i1, fâ¦\84 â\89¡ i1.
+lemma at_id_le: â\88\80i1,i2. i1 â\89¤ i2 â\86\92 â\88\80f. @â¦\83i2, fâ¦\84 â\89\98 i2 â\86\92 @â¦\83i1, fâ¦\84 â\89\98 i1.
#i1 #i2 #H @(le_elim … H) -i1 -i2 [ #i2 | #i1 #i2 #IH ]
#f #Hf elim (at_fwd_id_ex … Hf) /4 width=7 by at_inv_npn, at_push, at_refl/
qed-.
(* Main properties **********************************************************)
-theorem at_monotonic: â\88\80j2,i2,f. @â¦\83i2, fâ¦\84 â\89¡ j2 â\86\92 â\88\80j1,i1. @â¦\83i1, fâ¦\84 â\89¡ j1 →
+theorem at_monotonic: â\88\80j2,i2,f. @â¦\83i2, fâ¦\84 â\89\98 j2 â\86\92 â\88\80j1,i1. @â¦\83i1, fâ¦\84 â\89\98 j1 →
i1 < i2 → j1 < j2.
#j2 elim j2 -j2
[ #i2 #f #H2f elim (at_inv_xxp … H2f) -H2f //
]
qed-.
-theorem at_inv_monotonic: â\88\80j1,i1,f. @â¦\83i1, fâ¦\84 â\89¡ j1 â\86\92 â\88\80j2,i2. @â¦\83i2, fâ¦\84 â\89¡ j2 →
+theorem at_inv_monotonic: â\88\80j1,i1,f. @â¦\83i1, fâ¦\84 â\89\98 j1 â\86\92 â\88\80j2,i2. @â¦\83i2, fâ¦\84 â\89\98 j2 →
j1 < j2 → i1 < i2.
#j1 elim j1 -j1
[ #i1 #f #H1f elim (at_inv_xxp … H1f) -H1f //
]
qed-.
-theorem at_mono: â\88\80f,i,i1. @â¦\83i, fâ¦\84 â\89¡ i1 â\86\92 â\88\80i2. @â¦\83i, fâ¦\84 â\89¡ i2 → i2 = i1.
+theorem at_mono: â\88\80f,i,i1. @â¦\83i, fâ¦\84 â\89\98 i1 â\86\92 â\88\80i2. @â¦\83i, fâ¦\84 â\89\98 i2 → i2 = i1.
#f #i #i1 #H1 #i2 #H2 elim (lt_or_eq_or_gt i2 i1) //
#Hi elim (lt_le_false i i) /3 width=6 by at_inv_monotonic, eq_sym/
qed-.
-theorem at_inj: â\88\80f,i1,i. @â¦\83i1, fâ¦\84 â\89¡ i â\86\92 â\88\80i2. @â¦\83i2, fâ¦\84 â\89¡ i → i1 = i2.
+theorem at_inj: â\88\80f,i1,i. @â¦\83i1, fâ¦\84 â\89\98 i â\86\92 â\88\80i2. @â¦\83i2, fâ¦\84 â\89\98 i → i1 = i2.
#f #i1 #i #H1 #i2 #H2 elim (lt_or_eq_or_gt i2 i1) //
#Hi elim (lt_le_false i i) /3 width=6 by at_monotonic, eq_sym/
qed-.
(* Properties on tls ********************************************************)
-lemma at_pxx_tls: â\88\80n,f. @â¦\830, fâ¦\84 â\89¡ n â\86\92 @â¦\830, ⫱*[n]fâ¦\84 â\89¡ 0.
+lemma at_pxx_tls: â\88\80n,f. @â¦\830, fâ¦\84 â\89\98 n â\86\92 @â¦\830, ⫱*[n]fâ¦\84 â\89\98 0.
#n elim n -n //
#n #IH #f #Hf
cases (at_inv_pxn … Hf) -Hf [ |*: // ] #g #Hg #H0 destruct
<tls_xn /2 width=1 by/
qed.
-lemma at_tls: â\88\80i2,f. â\86\91⫱*[⫯i2]f â\89\97 ⫱*[i2]f â\86\92 â\88\83i1. @â¦\83i1, fâ¦\84 â\89¡ i2.
+lemma at_tls: â\88\80i2,f. â\86\91⫱*[⫯i2]f â\89\97 ⫱*[i2]f â\86\92 â\88\83i1. @â¦\83i1, fâ¦\84 â\89\98 i2.
#i2 elim i2 -i2
[ /4 width=4 by at_eq_repl_back, at_refl, ex_intro/
| #i2 #IH #f <tls_xn <tls_xn in ⊢ (??%→?); #H
(* Inversion lemmas with tls ************************************************)
-lemma at_inv_nxx: â\88\80n,g,i1,j2. @â¦\83⫯i1, gâ¦\84 â\89¡ j2 â\86\92 @â¦\830, gâ¦\84 â\89¡ n →
- â\88\83â\88\83i2. @â¦\83i1, ⫱*[⫯n]gâ¦\84 â\89¡ i2 & ⫯(n+i2) = j2.
+lemma at_inv_nxx: â\88\80n,g,i1,j2. @â¦\83⫯i1, gâ¦\84 â\89\98 j2 â\86\92 @â¦\830, gâ¦\84 â\89\98 n →
+ â\88\83â\88\83i2. @â¦\83i1, ⫱*[⫯n]gâ¦\84 â\89\98 i2 & ⫯(n+i2) = j2.
#n elim n -n
[ #g #i1 #j2 #Hg #H
elim (at_inv_pxp … H) -H [ |*: // ] #f #H0
]
qed-.
-lemma at_inv_tls: â\88\80i2,i1,f. @â¦\83i1, fâ¦\84 â\89¡ i2 → ↑⫱*[⫯i2]f ≗ ⫱*[i2]f.
+lemma at_inv_tls: â\88\80i2,i1,f. @â¦\83i1, fâ¦\84 â\89\98 i2 → ↑⫱*[⫯i2]f ≗ ⫱*[i2]f.
#i2 elim i2 -i2
[ #i1 #f #Hf elim (at_inv_xxp … Hf) -Hf // #g #H1 #H destruct
/2 width=1 by eq_refl/
(* Advanced inversion lemmas on isid ****************************************)
-lemma isid_inv_at: â\88\80i,f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 @â¦\83i, fâ¦\84 â\89¡ i.
+lemma isid_inv_at: â\88\80i,f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 @â¦\83i, fâ¦\84 â\89\98 i.
#i elim i -i
[ #f #H elim (isid_inv_gen … H) -H /2 width=2 by at_refl/
| #i #IH #f #H elim (isid_inv_gen … H) -H /3 width=7 by at_push/
]
qed.
-lemma isid_inv_at_mono: â\88\80f,i1,i2. ð\9d\90\88â¦\83fâ¦\84 â\86\92 @â¦\83i1, fâ¦\84 â\89¡ i2 → i1 = i2.
+lemma isid_inv_at_mono: â\88\80f,i1,i2. ð\9d\90\88â¦\83fâ¦\84 â\86\92 @â¦\83i1, fâ¦\84 â\89\98 i2 → i1 = i2.
/3 width=6 by isid_inv_at, at_mono/ qed-.
(* Advanced properties on isid **********************************************)
-corec lemma isid_at: â\88\80f. (â\88\80i. @â¦\83i, fâ¦\84 â\89¡ i) → 𝐈⦃f⦄.
+corec lemma isid_at: â\88\80f. (â\88\80i. @â¦\83i, fâ¦\84 â\89\98 i) → 𝐈⦃f⦄.
#f #Hf lapply (Hf 0)
#H cases (at_fwd_id_ex … H) -H
#g #H @(isid_push … H) /3 width=7 by at_inv_npn/
(* Advanced properties on id ************************************************)
-lemma id_inv_at: â\88\80f. (â\88\80i. @â¦\83i, fâ¦\84 â\89¡ i) → 𝐈𝐝 ≗ f.
+lemma id_inv_at: â\88\80f. (â\88\80i. @â¦\83i, fâ¦\84 â\89\98 i) → 𝐈𝐝 ≗ f.
/3 width=1 by isid_at, eq_id_inv_isid/ qed-.
-lemma id_at: â\88\80i. @â¦\83i, ð\9d\90\88ð\9d\90\9dâ¦\84 â\89¡ i.
+lemma id_at: â\88\80i. @â¦\83i, ð\9d\90\88ð\9d\90\9dâ¦\84 â\89\98 i.
/2 width=1 by isid_inv_at/ qed.
(* Advanced forward lemmas on id ********************************************)
-lemma at_id_fwd: â\88\80i1,i2. @â¦\83i1, ð\9d\90\88ð\9d\90\9dâ¦\84 â\89¡ i2 → i1 = i2.
+lemma at_id_fwd: â\88\80i1,i2. @â¦\83i1, ð\9d\90\88ð\9d\90\9dâ¦\84 â\89\98 i2 → i1 = i2.
/2 width=4 by at_mono/ qed.
(* Main properties on id ****************************************************)
(* Properties with uniform relocations **************************************)
-lemma at_uni: â\88\80n,i. @â¦\83i,ð\9d\90\94â\9d´nâ\9dµâ¦\84 â\89¡ n+i.
+lemma at_uni: â\88\80n,i. @â¦\83i,ð\9d\90\94â\9d´nâ\9dµâ¦\84 â\89\98 n+i.
#n elim n -n /2 width=5 by at_next/
qed.
(* Inversion lemmas with uniform relocations ********************************)
-lemma at_inv_uni: â\88\80n,i,j. @â¦\83i,ð\9d\90\94â\9d´nâ\9dµâ¦\84 â\89¡ j → j = n+i.
+lemma at_inv_uni: â\88\80n,i,j. @â¦\83i,ð\9d\90\94â\9d´nâ\9dµâ¦\84 â\89\98 j → j = n+i.
/2 width=4 by at_mono/ qed-.
definition H_coafter_inj: predicate rtmap ≝
λf1. 𝐓⦃f1⦄ →
- â\88\80f,f21,f22. f1 ~â\8a\9a f21 â\89¡ f â\86\92 f1 ~â\8a\9a f22 â\89¡ f → f21 ≗ f22.
+ â\88\80f,f21,f22. f1 ~â\8a\9a f21 â\89\98 f â\86\92 f1 ~â\8a\9a f22 â\89\98 f → f21 ≗ f22.
definition H_coafter_fwd_isid2: predicate rtmap ≝
- λf1. â\88\80f2,f. f1 ~â\8a\9a f2 â\89¡ f → 𝐓⦃f1⦄ → 𝐈⦃f⦄ → 𝐈⦃f2⦄.
+ λf1. â\88\80f2,f. f1 ~â\8a\9a f2 â\89\98 f → 𝐓⦃f1⦄ → 𝐈⦃f⦄ → 𝐈⦃f2⦄.
definition H_coafter_isfin2_fwd: predicate rtmap ≝
- λf1. â\88\80f2. ð\9d\90\85â¦\83f2â¦\84 â\86\92 ð\9d\90\93â¦\83f1â¦\84 â\86\92 â\88\80f. f1 ~â\8a\9a f2 â\89¡ f → 𝐅⦃f⦄.
+ λf1. â\88\80f2. ð\9d\90\85â¦\83f2â¦\84 â\86\92 ð\9d\90\93â¦\83f1â¦\84 â\86\92 â\88\80f. f1 ~â\8a\9a f2 â\89\98 f → 𝐅⦃f⦄.
(* Basic inversion lemmas ***************************************************)
-lemma coafter_inv_ppx: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89¡ g → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 →
- â\88\83â\88\83f. f1 ~â\8a\9a f2 â\89¡ f & ↑f = g.
+lemma coafter_inv_ppx: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89\98 g → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 →
+ â\88\83â\88\83f. f1 ~â\8a\9a f2 â\89\98 f & ↑f = g.
#g1 #g2 #g * -g1 -g2 -g #f1 #f2 #f #g1
[ #g2 #g #Hf #H1 #H2 #H #x1 #x2 #Hx1 #Hx2 destruct
>(injective_push … Hx1) >(injective_push … Hx2) -x2 -x1
]
qed-.
-lemma coafter_inv_pnx: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89¡ g → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 →
- â\88\83â\88\83f. f1 ~â\8a\9a f2 â\89¡ f & ⫯f = g.
+lemma coafter_inv_pnx: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89\98 g → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 →
+ â\88\83â\88\83f. f1 ~â\8a\9a f2 â\89\98 f & ⫯f = g.
#g1 #g2 #g * -g1 -g2 -g #f1 #f2 #f #g1
[ #g2 #g #_ #_ #H2 #_ #x1 #x2 #_ #Hx2 destruct
elim (discr_next_push … Hx2)
]
qed-.
-lemma coafter_inv_nxx: â\88\80g1,f2,g. g1 ~â\8a\9a f2 â\89¡ g → ∀f1. ⫯f1 = g1 →
- â\88\83â\88\83f. f1 ~â\8a\9a f2 â\89¡ f & ↑f = g.
+lemma coafter_inv_nxx: â\88\80g1,f2,g. g1 ~â\8a\9a f2 â\89\98 g → ∀f1. ⫯f1 = g1 →
+ â\88\83â\88\83f. f1 ~â\8a\9a f2 â\89\98 f & ↑f = g.
#g1 #f2 #g * -g1 -f2 -g #f1 #f2 #f #g1
[ #g2 #g #_ #H1 #_ #_ #x1 #Hx1 destruct
elim (discr_next_push … Hx1)
(* Advanced inversion lemmas ************************************************)
-lemma coafter_inv_ppp: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89¡ g →
- â\88\80f1,f2,f. â\86\91f1 = g1 â\86\92 â\86\91f2 = g2 â\86\92 â\86\91f = g â\86\92 f1 ~â\8a\9a f2 â\89¡ f.
+lemma coafter_inv_ppp: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89\98 g →
+ â\88\80f1,f2,f. â\86\91f1 = g1 â\86\92 â\86\91f2 = g2 â\86\92 â\86\91f = g â\86\92 f1 ~â\8a\9a f2 â\89\98 f.
#g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H
elim (coafter_inv_ppx … Hg … H1 H2) -g1 -g2 #x #Hf #Hx destruct
<(injective_push … Hx) -f //
qed-.
-lemma coafter_inv_ppn: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89¡ g →
+lemma coafter_inv_ppn: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89\98 g →
∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ⫯f = g → ⊥.
#g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H
elim (coafter_inv_ppx … Hg … H1 H2) -g1 -g2 #x #Hf #Hx destruct
elim (discr_push_next … Hx)
qed-.
-lemma coafter_inv_pnn: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89¡ g →
- â\88\80f1,f2,f. â\86\91f1 = g1 â\86\92 ⫯f2 = g2 â\86\92 ⫯f = g â\86\92 f1 ~â\8a\9a f2 â\89¡ f.
+lemma coafter_inv_pnn: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89\98 g →
+ â\88\80f1,f2,f. â\86\91f1 = g1 â\86\92 ⫯f2 = g2 â\86\92 ⫯f = g â\86\92 f1 ~â\8a\9a f2 â\89\98 f.
#g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H
elim (coafter_inv_pnx … Hg … H1 H2) -g1 -g2 #x #Hf #Hx destruct
<(injective_next … Hx) -f //
qed-.
-lemma coafter_inv_pnp: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89¡ g →
+lemma coafter_inv_pnp: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89\98 g →
∀f1,f2,f. ↑f1 = g1 → ⫯f2 = g2 → ↑f = g → ⊥.
#g1 #g2 #g #Hg #f1 #f2 #f #H1 #H2 #H
elim (coafter_inv_pnx … Hg … H1 H2) -g1 -g2 #x #Hf #Hx destruct
elim (discr_next_push … Hx)
qed-.
-lemma coafter_inv_nxp: â\88\80g1,f2,g. g1 ~â\8a\9a f2 â\89¡ g →
- â\88\80f1,f. ⫯f1 = g1 â\86\92 â\86\91f = g â\86\92 f1 ~â\8a\9a f2 â\89¡ f.
+lemma coafter_inv_nxp: â\88\80g1,f2,g. g1 ~â\8a\9a f2 â\89\98 g →
+ â\88\80f1,f. ⫯f1 = g1 â\86\92 â\86\91f = g â\86\92 f1 ~â\8a\9a f2 â\89\98 f.
#g1 #f2 #g #Hg #f1 #f #H1 #H
elim (coafter_inv_nxx … Hg … H1) -g1 #x #Hf #Hx destruct
<(injective_push … Hx) -f //
qed-.
-lemma coafter_inv_nxn: â\88\80g1,f2,g. g1 ~â\8a\9a f2 â\89¡ g →
+lemma coafter_inv_nxn: â\88\80g1,f2,g. g1 ~â\8a\9a f2 â\89\98 g →
∀f1,f. ⫯f1 = g1 → ⫯f = g → ⊥.
#g1 #f2 #g #Hg #f1 #f #H1 #H
elim (coafter_inv_nxx … Hg … H1) -g1 #x #Hf #Hx destruct
elim (discr_push_next … Hx)
qed-.
-lemma coafter_inv_pxp: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89¡ g →
+lemma coafter_inv_pxp: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89\98 g →
∀f1,f. ↑f1 = g1 → ↑f = g →
- â\88\83â\88\83f2. f1 ~â\8a\9a f2 â\89¡ f & ↑f2 = g2.
+ â\88\83â\88\83f2. f1 ~â\8a\9a f2 â\89\98 f & ↑f2 = g2.
#g1 #g2 #g #Hg #f1 #f #H1 #H elim (pn_split g2) * #f2 #H2
[ lapply (coafter_inv_ppp … Hg … H1 H2 H) -g1 -g /2 width=3 by ex2_intro/
| elim (coafter_inv_pnp … Hg … H1 H2 H)
]
qed-.
-lemma coafter_inv_pxn: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89¡ g →
+lemma coafter_inv_pxn: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89\98 g →
∀f1,f. ↑f1 = g1 → ⫯f = g →
- â\88\83â\88\83f2. f1 ~â\8a\9a f2 â\89¡ f & ⫯f2 = g2.
+ â\88\83â\88\83f2. f1 ~â\8a\9a f2 â\89\98 f & ⫯f2 = g2.
#g1 #g2 #g #Hg #f1 #f #H1 #H elim (pn_split g2) * #f2 #H2
[ elim (coafter_inv_ppn … Hg … H1 H2 H)
| lapply (coafter_inv_pnn … Hg … H1 … H) -g1 -g /2 width=3 by ex2_intro/
]
qed-.
-lemma coafter_inv_xxn: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89¡ g → ∀f. ⫯f = g →
- â\88\83â\88\83f1,f2. f1 ~â\8a\9a f2 â\89¡ f & ↑f1 = g1 & ⫯f2 = g2.
+lemma coafter_inv_xxn: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89\98 g → ∀f. ⫯f = g →
+ â\88\83â\88\83f1,f2. f1 ~â\8a\9a f2 â\89\98 f & ↑f1 = g1 & ⫯f2 = g2.
#g1 #g2 #g #Hg #f #H elim (pn_split g1) * #f1 #H1
[ elim (coafter_inv_pxn … Hg … H1 H) -g /2 width=5 by ex3_2_intro/
| elim (coafter_inv_nxn … Hg … H1 H)
]
qed-.
-lemma coafter_inv_xnn: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89¡ g →
+lemma coafter_inv_xnn: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89\98 g →
∀f2,f. ⫯f2 = g2 → ⫯f = g →
- â\88\83â\88\83f1. f1 ~â\8a\9a f2 â\89¡ f & ↑f1 = g1.
+ â\88\83â\88\83f1. f1 ~â\8a\9a f2 â\89\98 f & ↑f1 = g1.
#g1 #g2 #g #Hg #f2 #f #H2 destruct #H
elim (coafter_inv_xxn … Hg … H) -g
#z1 #z2 #Hf #H1 #H2 destruct /2 width=3 by ex2_intro/
qed-.
-lemma coafter_inv_xxp: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89¡ g → ∀f. ↑f = g →
- (â\88\83â\88\83f1,f2. f1 ~â\8a\9a f2 â\89¡ f & ↑f1 = g1 & ↑f2 = g2) ∨
- â\88\83â\88\83f1. f1 ~â\8a\9a g2 â\89¡ f & ⫯f1 = g1.
+lemma coafter_inv_xxp: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89\98 g → ∀f. ↑f = g →
+ (â\88\83â\88\83f1,f2. f1 ~â\8a\9a f2 â\89\98 f & ↑f1 = g1 & ↑f2 = g2) ∨
+ â\88\83â\88\83f1. f1 ~â\8a\9a g2 â\89\98 f & ⫯f1 = g1.
#g1 #g2 #g #Hg #f #H elim (pn_split g1) * #f1 #H1
[ elim (coafter_inv_pxp … Hg … H1 H) -g
/3 width=5 by or_introl, ex3_2_intro/
]
qed-.
-lemma coafter_inv_pxx: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89¡ g → ∀f1. ↑f1 = g1 →
- (â\88\83â\88\83f2,f. f1 ~â\8a\9a f2 â\89¡ f & ↑f2 = g2 & ↑f = g) ∨
- (â\88\83â\88\83f2,f. f1 ~â\8a\9a f2 â\89¡ f & ⫯f2 = g2 & ⫯f = g).
+lemma coafter_inv_pxx: â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89\98 g → ∀f1. ↑f1 = g1 →
+ (â\88\83â\88\83f2,f. f1 ~â\8a\9a f2 â\89\98 f & ↑f2 = g2 & ↑f = g) ∨
+ (â\88\83â\88\83f2,f. f1 ~â\8a\9a f2 â\89\98 f & ⫯f2 = g2 & ⫯f = g).
#g1 #g2 #g #Hg #f1 #H1 elim (pn_split g2) * #f2 #H2
[ elim (coafter_inv_ppx … Hg … H1 H2) -g1
/3 width=5 by or_introl, ex3_2_intro/
(* Basic properties *********************************************************)
-corec lemma coafter_eq_repl_back2: â\88\80f1,f. eq_repl_back (λf2. f2 ~â\8a\9a f1 â\89¡ f).
+corec lemma coafter_eq_repl_back2: â\88\80f1,f. eq_repl_back (λf2. f2 ~â\8a\9a f1 â\89\98 f).
#f1 #f #f2 * -f2 -f1 -f
#f21 #f1 #f #g21 [1,2: #g1 ] #g #Hf #H21 [1,2: #H1 ] #H #g22 #H0
[ cases (eq_inv_px … H0 … H21) -g21 /3 width=7 by coafter_refl/
]
qed-.
-lemma coafter_eq_repl_fwd2: â\88\80f1,f. eq_repl_fwd (λf2. f2 ~â\8a\9a f1 â\89¡ f).
+lemma coafter_eq_repl_fwd2: â\88\80f1,f. eq_repl_fwd (λf2. f2 ~â\8a\9a f1 â\89\98 f).
#f1 #f @eq_repl_sym /2 width=3 by coafter_eq_repl_back2/
qed-.
-corec lemma coafter_eq_repl_back1: â\88\80f2,f. eq_repl_back (λf1. f2 ~â\8a\9a f1 â\89¡ f).
+corec lemma coafter_eq_repl_back1: â\88\80f2,f. eq_repl_back (λf1. f2 ~â\8a\9a f1 â\89\98 f).
#f2 #f #f1 * -f2 -f1 -f
#f2 #f11 #f #g2 [1,2: #g11 ] #g #Hf #H2 [1,2: #H11 ] #H #g2 #H0
[ cases (eq_inv_px … H0 … H11) -g11 /3 width=7 by coafter_refl/
]
qed-.
-lemma coafter_eq_repl_fwd1: â\88\80f2,f. eq_repl_fwd (λf1. f2 ~â\8a\9a f1 â\89¡ f).
+lemma coafter_eq_repl_fwd1: â\88\80f2,f. eq_repl_fwd (λf1. f2 ~â\8a\9a f1 â\89\98 f).
#f2 #f @eq_repl_sym /2 width=3 by coafter_eq_repl_back1/
qed-.
-corec lemma coafter_eq_repl_back0: â\88\80f1,f2. eq_repl_back (λf. f2 ~â\8a\9a f1 â\89¡ f).
+corec lemma coafter_eq_repl_back0: â\88\80f1,f2. eq_repl_back (λf. f2 ~â\8a\9a f1 â\89\98 f).
#f2 #f1 #f * -f2 -f1 -f
#f2 #f1 #f01 #g2 [1,2: #g1 ] #g01 #Hf01 #H2 [1,2: #H1 ] #H01 #g02 #H0
[ cases (eq_inv_px … H0 … H01) -g01 /3 width=7 by coafter_refl/
]
qed-.
-lemma coafter_eq_repl_fwd0: â\88\80f2,f1. eq_repl_fwd (λf. f2 ~â\8a\9a f1 â\89¡ f).
+lemma coafter_eq_repl_fwd0: â\88\80f2,f1. eq_repl_fwd (λf. f2 ~â\8a\9a f1 â\89\98 f).
#f2 #f1 @eq_repl_sym /2 width=3 by coafter_eq_repl_back0/
qed-.
(* Main inversion lemmas ****************************************************)
-corec theorem coafter_mono: â\88\80f1,f2,x,y. f1 ~â\8a\9a f2 â\89¡ x â\86\92 f1 ~â\8a\9a f2 â\89¡ y → x ≗ y.
+corec theorem coafter_mono: â\88\80f1,f2,x,y. f1 ~â\8a\9a f2 â\89\98 x â\86\92 f1 ~â\8a\9a f2 â\89\98 y → x ≗ y.
#f1 #f2 #x #y * -f1 -f2 -x
#f1 #f2 #x #g1 [1,2: #g2 ] #g #Hx #H1 [1,2: #H2 ] #H0x #Hy
[ cases (coafter_inv_ppx … Hy … H1 H2) -g1 -g2 /3 width=8 by eq_push/
]
qed-.
-lemma coafter_mono_eq: â\88\80f1,f2,f. f1 ~â\8a\9a f2 â\89¡ f â\86\92 â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89¡ g →
+lemma coafter_mono_eq: â\88\80f1,f2,f. f1 ~â\8a\9a f2 â\89\98 f â\86\92 â\88\80g1,g2,g. g1 ~â\8a\9a g2 â\89\98 g →
f1 ≗ g1 → f2 ≗ g2 → f ≗ g.
/4 width=4 by coafter_mono, coafter_eq_repl_back1, coafter_eq_repl_back2/ qed-.
(* Forward lemmas with pushs ************************************************)
-lemma coafter_fwd_pushs: â\88\80j,i,g2,f1,g. g2 ~â\8a\9a â\86\91*[i]f1 â\89¡ g â\86\92 @â¦\83i, g2â¦\84 â\89¡ j →
+lemma coafter_fwd_pushs: â\88\80j,i,g2,f1,g. g2 ~â\8a\9a â\86\91*[i]f1 â\89\98 g â\86\92 @â¦\83i, g2â¦\84 â\89\98 j →
∃f. ↑*[j] f = g.
#j elim j -j
[ #i #g2 #f1 #g #Hg #H
(* Inversion lemmas with tail ***********************************************)
-lemma coafter_inv_tl1: â\88\80g2,g1,g. g2 ~â\8a\9a ⫱g1 â\89¡ g →
- â\88\83â\88\83f. â\86\91g2 ~â\8a\9a g1 â\89¡ f & ⫱f = g.
+lemma coafter_inv_tl1: â\88\80g2,g1,g. g2 ~â\8a\9a ⫱g1 â\89\98 g →
+ â\88\83â\88\83f. â\86\91g2 ~â\8a\9a g1 â\89\98 f & ⫱f = g.
#g2 #g1 #g elim (pn_split g1) * #f1 #H1 #H destruct
[ /3 width=7 by coafter_refl, ex2_intro/
| @(ex2_intro … (⫯g)) /2 width=7 by coafter_push/ (**) (* full auto fails *)
]
qed-.
-lemma coafter_inv_tl0: â\88\80g2,g1,g. g2 ~â\8a\9a g1 â\89¡ ⫱g →
- â\88\83â\88\83f1. â\86\91g2 ~â\8a\9a f1 â\89¡ g & ⫱f1 = g1.
+lemma coafter_inv_tl0: â\88\80g2,g1,g. g2 ~â\8a\9a g1 â\89\98 ⫱g →
+ â\88\83â\88\83f1. â\86\91g2 ~â\8a\9a f1 â\89\98 g & ⫱f1 = g1.
#g2 #g1 #g elim (pn_split g) * #f #H0 #H destruct
[ /3 width=7 by coafter_refl, ex2_intro/
| @(ex2_intro … (⫯g1)) /2 width=7 by coafter_push/ (**) (* full auto fails *)
(* Properties with iterated tail ********************************************)
-lemma coafter_tls: â\88\80j,i,f1,f2,f. @â¦\83i, f1â¦\84 â\89¡ j →
- f1 ~â\8a\9a f2 â\89¡ f â\86\92 ⫱*[j]f1 ~â\8a\9a ⫱*[i]f2 â\89¡ ⫱*[j]f.
+lemma coafter_tls: â\88\80j,i,f1,f2,f. @â¦\83i, f1â¦\84 â\89\98 j →
+ f1 ~â\8a\9a f2 â\89\98 f â\86\92 ⫱*[j]f1 ~â\8a\9a ⫱*[i]f2 â\89\98 ⫱*[j]f.
#j elim j -j [ #i | #j #IH * [| #i ] ] #f1 #f2 #f #Hf1 #Hf
[ elim (at_inv_xxp … Hf1) -Hf1 [ |*: // ] #g1 #Hg1 #H1 destruct //
| elim (at_inv_pxn … Hf1) -Hf1 [ |*: // ] #g1 #Hg1 #H1
]
qed.
-lemma coafter_tls_O: â\88\80n,f1,f2,f. @â¦\830, f1â¦\84 â\89¡ n →
- f1 ~â\8a\9a f2 â\89¡ f â\86\92 ⫱*[n]f1 ~â\8a\9a f2 â\89¡ ⫱*[n]f.
+lemma coafter_tls_O: â\88\80n,f1,f2,f. @â¦\830, f1â¦\84 â\89\98 n →
+ f1 ~â\8a\9a f2 â\89\98 f â\86\92 ⫱*[n]f1 ~â\8a\9a f2 â\89\98 ⫱*[n]f.
/2 width=1 by coafter_tls/ qed.
-lemma coafter_tls_succ: â\88\80g2,g1,g. g2 ~â\8a\9a g1 â\89¡ g →
- â\88\80n. @â¦\830, g2â¦\84 â\89¡ n â\86\92 ⫱*[⫯n]g2 ~â\8a\9a ⫱g1 â\89¡ ⫱*[⫯n]g.
+lemma coafter_tls_succ: â\88\80g2,g1,g. g2 ~â\8a\9a g1 â\89\98 g →
+ â\88\80n. @â¦\830, g2â¦\84 â\89\98 n â\86\92 ⫱*[⫯n]g2 ~â\8a\9a ⫱g1 â\89\98 ⫱*[⫯n]g.
#g2 #g1 #g #Hg #n #Hg2
lapply (coafter_tls … Hg2 … Hg) -Hg #Hg
lapply (at_pxx_tls … Hg2) -Hg2 #H
<tls_S <tls_S <H2 <H0 -g2 -g -n //
qed.
-lemma coafter_fwd_xpx_pushs: â\88\80g2,f1,g,i,j. @â¦\83i, g2â¦\84 â\89¡ j â\86\92 g2 ~â\8a\9a â\86\91*[⫯i]f1 â\89¡ g →
- â\88\83â\88\83f. ⫱*[⫯j]g2 ~â\8a\9a f1 â\89¡ f & ↑*[⫯j]f = g.
+lemma coafter_fwd_xpx_pushs: â\88\80g2,f1,g,i,j. @â¦\83i, g2â¦\84 â\89\98 j â\86\92 g2 ~â\8a\9a â\86\91*[⫯i]f1 â\89\98 g →
+ â\88\83â\88\83f. ⫱*[⫯j]g2 ~â\8a\9a f1 â\89\98 f & ↑*[⫯j]f = g.
#g2 #g1 #g #i #j #Hg2 <pushs_xn #Hg
elim (coafter_fwd_pushs … Hg Hg2) #f #H0 destruct
lapply (coafter_tls … Hg2 Hg) -Hg <tls_pushs <tls_pushs #Hf
/2 width=3 by ex2_intro/
qed-.
-lemma coafter_fwd_xnx_pushs: â\88\80g2,f1,g,i,j. @â¦\83i, g2â¦\84 â\89¡ j â\86\92 g2 ~â\8a\9a â\86\91*[i]⫯f1 â\89¡ g →
- â\88\83â\88\83f. ⫱*[⫯j]g2 ~â\8a\9a f1 â\89¡ f & ↑*[j] ⫯f = g.
+lemma coafter_fwd_xnx_pushs: â\88\80g2,f1,g,i,j. @â¦\83i, g2â¦\84 â\89\98 j â\86\92 g2 ~â\8a\9a â\86\91*[i]⫯f1 â\89\98 g →
+ â\88\83â\88\83f. ⫱*[⫯j]g2 ~â\8a\9a f1 â\89\98 f & ↑*[j] ⫯f = g.
#g2 #g1 #g #i #j #Hg2 #Hg
elim (coafter_fwd_pushs … Hg Hg2) #f #H0 destruct
lapply (coafter_tls … Hg2 Hg) -Hg <tls_pushs <tls_pushs #Hf
(* Properties with test for identity ****************************************)
-corec lemma coafter_isid_sn: â\88\80f1. ð\9d\90\88â¦\83f1â¦\84 â\86\92 â\88\80f2. f1 ~â\8a\9a f2 â\89¡ f2.
+corec lemma coafter_isid_sn: â\88\80f1. ð\9d\90\88â¦\83f1â¦\84 â\86\92 â\88\80f2. f1 ~â\8a\9a f2 â\89\98 f2.
#f1 * -f1 #f1 #g1 #Hf1 #H1 #f2 cases (pn_split f2) * #g2 #H2
/3 width=7 by coafter_push, coafter_refl/
qed.
-corec lemma coafter_isid_dx: â\88\80f2,f. ð\9d\90\88â¦\83f2â¦\84 â\86\92 ð\9d\90\88â¦\83fâ¦\84 â\86\92 â\88\80f1. f1 ~â\8a\9a f2 â\89¡ f.
+corec lemma coafter_isid_dx: â\88\80f2,f. ð\9d\90\88â¦\83f2â¦\84 â\86\92 ð\9d\90\88â¦\83fâ¦\84 â\86\92 â\88\80f1. f1 ~â\8a\9a f2 â\89\98 f.
#f2 #f * -f2 #f2 #g2 #Hf2 #H2 * -f #f #g #Hf #H #f1 cases (pn_split f1) * #g1 #H1
[ /3 width=7 by coafter_refl/
| @(coafter_next … H1 … H) /3 width=3 by isid_push/
(* Inversion lemmas with test for identity **********************************)
-lemma coafter_isid_inv_sn: â\88\80f1,f2,f. f1 ~â\8a\9a f2 â\89¡ f → 𝐈⦃f1⦄ → f2 ≗ f.
+lemma coafter_isid_inv_sn: â\88\80f1,f2,f. f1 ~â\8a\9a f2 â\89\98 f → 𝐈⦃f1⦄ → f2 ≗ f.
/3 width=6 by coafter_isid_sn, coafter_mono/ qed-.
-lemma coafter_isid_inv_dx: â\88\80f1,f2,f. f1 ~â\8a\9a f2 â\89¡ f → 𝐈⦃f2⦄ → 𝐈⦃f⦄.
+lemma coafter_isid_inv_dx: â\88\80f1,f2,f. f1 ~â\8a\9a f2 â\89\98 f → 𝐈⦃f2⦄ → 𝐈⦃f⦄.
/4 width=4 by eq_id_isid, coafter_isid_dx, coafter_mono/ qed-.
(* Properties with test for uniform relocations *****************************)
-lemma coafter_isuni_isid: â\88\80f2. ð\9d\90\88â¦\83f2â¦\84 â\86\92 â\88\80f1. ð\9d\90\94â¦\83f1â¦\84 â\86\92 f1 ~â\8a\9a f2 â\89¡ f2.
+lemma coafter_isuni_isid: â\88\80f2. ð\9d\90\88â¦\83f2â¦\84 â\86\92 â\88\80f1. ð\9d\90\94â¦\83f1â¦\84 â\86\92 f1 ~â\8a\9a f2 â\89\98 f2.
#f #Hf #g #H elim H -g
/3 width=5 by coafter_isid_sn, coafter_eq_repl_back0, coafter_next, eq_push_inv_isid/
qed.
(*
-lemma coafter_isid_isuni: â\88\80f1,f2. ð\9d\90\88â¦\83f2â¦\84 â\86\92 ð\9d\90\94â¦\83f1â¦\84 â\86\92 f1 ~â\8a\9a ⫯f2 â\89¡ ⫯f1.
+lemma coafter_isid_isuni: â\88\80f1,f2. ð\9d\90\88â¦\83f2â¦\84 â\86\92 ð\9d\90\94â¦\83f1â¦\84 â\86\92 f1 ~â\8a\9a ⫯f2 â\89\98 ⫯f1.
#f1 #f2 #Hf2 #H elim H -H
/5 width=7 by coafter_isid_dx, coafter_eq_repl_back2, coafter_next, coafter_push, eq_push_inv_isid/
qed.
-lemma coafter_uni_next2: â\88\80f2. ð\9d\90\94â¦\83f2â¦\84 â\86\92 â\88\80f1,f. ⫯f2 ~â\8a\9a f1 â\89¡ f â\86\92 f2 ~â\8a\9a ⫯f1 â\89¡ f.
+lemma coafter_uni_next2: â\88\80f2. ð\9d\90\94â¦\83f2â¦\84 â\86\92 â\88\80f1,f. ⫯f2 ~â\8a\9a f1 â\89\98 f â\86\92 f2 ~â\8a\9a ⫯f1 â\89\98 f.
#f2 #H elim H -f2
[ #f2 #Hf2 #f1 #f #Hf
elim (coafter_inv_nxx … Hf) -Hf [2,3: // ] #g #Hg #H0 destruct
(* Properties with uniform relocations **************************************)
-lemma coafter_uni_sn: â\88\80i,f. ð\9d\90\94â\9d´iâ\9dµ ~â\8a\9a f â\89¡ ↑*[i] f.
+lemma coafter_uni_sn: â\88\80i,f. ð\9d\90\94â\9d´iâ\9dµ ~â\8a\9a f â\89\98 ↑*[i] f.
#i elim i -i /2 width=5 by coafter_isid_sn, coafter_next/
qed.
(*
-lemma coafter_uni: â\88\80n1,n2. ð\9d\90\94â\9d´n1â\9dµ ~â\8a\9a ð\9d\90\94â\9d´n2â\9dµ â\89¡ 𝐔❴n1+n2❵.
+lemma coafter_uni: â\88\80n1,n2. ð\9d\90\94â\9d´n1â\9dµ ~â\8a\9a ð\9d\90\94â\9d´n2â\9dµ â\89\98 𝐔❴n1+n2❵.
@nat_elim2
/4 width=5 by coafter_uni_next2, coafter_isid_sn, coafter_isid_dx, coafter_next/
qed.
(* Forward lemmas on at *****************************************************)
-lemma coafter_at_fwd: â\88\80i,i1,f. @â¦\83i1, fâ¦\84 â\89¡ i â\86\92 â\88\80f2,f1. f2 ~â\8a\9a f1 â\89¡ f →
- â\88\83â\88\83i2. @â¦\83i1, f1â¦\84 â\89¡ i2 & @â¦\83i2, f2â¦\84 â\89¡ i.
+lemma coafter_at_fwd: â\88\80i,i1,f. @â¦\83i1, fâ¦\84 â\89\98 i â\86\92 â\88\80f2,f1. f2 ~â\8a\9a f1 â\89\98 f →
+ â\88\83â\88\83i2. @â¦\83i1, f1â¦\84 â\89\98 i2 & @â¦\83i2, f2â¦\84 â\89\98 i.
#i elim i -i [2: #i #IH ] #i1 #f #Hf #f2 #f1 #Hf21
[ elim (at_inv_xxn … Hf) -Hf [1,3:* |*: // ]
[1: #g #j1 #Hg #H0 #H |2,4: #g #Hg #H ]
/3 width=9 by at_refl, at_push, at_next, ex2_intro/
qed-.
-lemma coafter_fwd_at: â\88\80i,i2,i1,f1,f2. @â¦\83i1, f1â¦\84 â\89¡ i2 â\86\92 @â¦\83i2, f2â¦\84 â\89¡ i →
- â\88\80f. f2 ~â\8a\9a f1 â\89¡ f â\86\92 @â¦\83i1, fâ¦\84 â\89¡ i.
+lemma coafter_fwd_at: â\88\80i,i2,i1,f1,f2. @â¦\83i1, f1â¦\84 â\89\98 i2 â\86\92 @â¦\83i2, f2â¦\84 â\89\98 i →
+ â\88\80f. f2 ~â\8a\9a f1 â\89\98 f â\86\92 @â¦\83i1, fâ¦\84 â\89\98 i.
#i elim i -i [2: #i #IH ] #i2 #i1 #f1 #f2 #Hf1 #Hf2 #f #Hf
[ elim (at_inv_xxn … Hf2) -Hf2 [1,3: * |*: // ]
#g2 [ #j2 ] #Hg2 [ #H22 ] #H20
]
qed-.
-lemma coafter_fwd_at2: â\88\80f,i1,i. @â¦\83i1, fâ¦\84 â\89¡ i â\86\92 â\88\80f1,i2. @â¦\83i1, f1â¦\84 â\89¡ i2 →
- â\88\80f2. f2 ~â\8a\9a f1 â\89¡ f â\86\92 @â¦\83i2, f2â¦\84 â\89¡ i.
+lemma coafter_fwd_at2: â\88\80f,i1,i. @â¦\83i1, fâ¦\84 â\89\98 i â\86\92 â\88\80f1,i2. @â¦\83i1, f1â¦\84 â\89\98 i2 →
+ â\88\80f2. f2 ~â\8a\9a f1 â\89\98 f â\86\92 @â¦\83i2, f2â¦\84 â\89\98 i.
#f #i1 #i #Hf #f1 #i2 #Hf1 #f2 #H elim (coafter_at_fwd … Hf … H) -f
#j1 #H #Hf2 <(at_mono … Hf1 … H) -i1 -i2 //
qed-.
-lemma coafter_fwd_at1: â\88\80i,i2,i1,f,f2. @â¦\83i1, fâ¦\84 â\89¡ i â\86\92 @â¦\83i2, f2â¦\84 â\89¡ i →
- â\88\80f1. f2 ~â\8a\9a f1 â\89¡ f â\86\92 @â¦\83i1, f1â¦\84 â\89¡ i2.
+lemma coafter_fwd_at1: â\88\80i,i2,i1,f,f2. @â¦\83i1, fâ¦\84 â\89\98 i â\86\92 @â¦\83i2, f2â¦\84 â\89\98 i →
+ â\88\80f1. f2 ~â\8a\9a f1 â\89\98 f â\86\92 @â¦\83i1, f1â¦\84 â\89\98 i2.
#i elim i -i [2: #i #IH ] #i2 #i1 #f #f2 #Hf #Hf2 #f1 #Hf1
[ elim (at_inv_xxn … Hf) -Hf [1,3: * |*: // ]
#g [ #j1 ] #Hg [ #H01 ] #H00
(* Properties with at *******************************************************)
-lemma coafter_uni_dx: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 â\89¡ i2 →
- â\88\80f. f2 ~â\8a\9a ð\9d\90\94â\9d´i1â\9dµ â\89¡ f â\86\92 ð\9d\90\94â\9d´i2â\9dµ ~â\8a\9a ⫱*[i2] f2 â\89¡ f.
+lemma coafter_uni_dx: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 â\89\98 i2 →
+ â\88\80f. f2 ~â\8a\9a ð\9d\90\94â\9d´i1â\9dµ â\89\98 f â\86\92 ð\9d\90\94â\9d´i2â\9dµ ~â\8a\9a ⫱*[i2] f2 â\89\98 f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct
]
qed.
-lemma coafter_uni_sn: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 â\89¡ i2 →
- â\88\80f. ð\9d\90\94â\9d´i2â\9dµ ~â\8a\9a ⫱*[i2] f2 â\89¡ f â\86\92 f2 ~â\8a\9a ð\9d\90\94â\9d´i1â\9dµ â\89¡ f.
+lemma coafter_uni_sn: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 â\89\98 i2 →
+ â\88\80f. ð\9d\90\94â\9d´i2â\9dµ ~â\8a\9a ⫱*[i2] f2 â\89\98 f â\86\92 f2 ~â\8a\9a ð\9d\90\94â\9d´i1â\9dµ â\89\98 f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct
]
qed-.
-lemma coafter_uni_succ_dx: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 â\89¡ i2 →
- â\88\80f. f2 ~â\8a\9a ð\9d\90\94â\9d´â«¯i1â\9dµ â\89¡ f â\86\92 ð\9d\90\94â\9d´â«¯i2â\9dµ ~â\8a\9a ⫱*[⫯i2] f2 â\89¡ f.
+lemma coafter_uni_succ_dx: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 â\89\98 i2 →
+ â\88\80f. f2 ~â\8a\9a ð\9d\90\94â\9d´â«¯i1â\9dµ â\89\98 f â\86\92 ð\9d\90\94â\9d´â«¯i2â\9dµ ~â\8a\9a ⫱*[⫯i2] f2 â\89\98 f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct
]
qed.
-lemma coafter_uni_succ_sn: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 â\89¡ i2 →
- â\88\80f. ð\9d\90\94â\9d´â«¯i2â\9dµ ~â\8a\9a ⫱*[⫯i2] f2 â\89¡ f â\86\92 f2 ~â\8a\9a ð\9d\90\94â\9d´â«¯i1â\9dµ â\89¡ f.
+lemma coafter_uni_succ_sn: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 â\89\98 i2 →
+ â\88\80f. ð\9d\90\94â\9d´â«¯i2â\9dµ ~â\8a\9a ⫱*[⫯i2] f2 â\89\98 f â\86\92 f2 ~â\8a\9a ð\9d\90\94â\9d´â«¯i1â\9dµ â\89\98 f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct
]
qed-.
-lemma coafter_uni_one_dx: â\88\80f2,f. â\86\91f2 ~â\8a\9a ð\9d\90\94â\9d´â«¯Oâ\9dµ â\89¡ f â\86\92 ð\9d\90\94â\9d´â«¯Oâ\9dµ ~â\8a\9a f2 â\89¡ f.
+lemma coafter_uni_one_dx: â\88\80f2,f. â\86\91f2 ~â\8a\9a ð\9d\90\94â\9d´â«¯Oâ\9dµ â\89\98 f â\86\92 ð\9d\90\94â\9d´â«¯Oâ\9dµ ~â\8a\9a f2 â\89\98 f.
#f2 #f #H @(coafter_uni_succ_dx … (↑f2)) /2 width=3 by at_refl/
qed.
-lemma coafter_uni_one_sn: â\88\80f1,f. ð\9d\90\94â\9d´â«¯Oâ\9dµ ~â\8a\9a f1 â\89¡ f â\86\92 â\86\91f1 ~â\8a\9a ð\9d\90\94â\9d´â«¯Oâ\9dµ â\89¡ f.
+lemma coafter_uni_one_sn: â\88\80f1,f. ð\9d\90\94â\9d´â«¯Oâ\9dµ ~â\8a\9a f1 â\89\98 f â\86\92 â\86\91f1 ~â\8a\9a ð\9d\90\94â\9d´â«¯Oâ\9dµ â\89\98 f.
/3 width=3 by coafter_uni_succ_sn, at_refl/ qed-.
*)
(* Forward lemmas with istot ************************************************)
(*
-lemma coafter_istot_fwd: â\88\80f2,f1,f. f2 ~â\8a\9a f1 â\89¡ f → 𝐓⦃f2⦄ → 𝐓⦃f1⦄ → 𝐓⦃f⦄.
+lemma coafter_istot_fwd: â\88\80f2,f1,f. f2 ~â\8a\9a f1 â\89\98 f → 𝐓⦃f2⦄ → 𝐓⦃f1⦄ → 𝐓⦃f⦄.
#f2 #f1 #f #Hf #Hf2 #Hf1 #i1 elim (Hf1 i1) -Hf1
#i2 #Hf1 elim (Hf2 i2) -Hf2
/3 width=7 by coafter_fwd_at, ex_intro/
qed-.
-lemma coafter_fwd_istot_dx: â\88\80f2,f1,f. f2 ~â\8a\9a f1 â\89¡ f → 𝐓⦃f⦄ → 𝐓⦃f1⦄.
+lemma coafter_fwd_istot_dx: â\88\80f2,f1,f. f2 ~â\8a\9a f1 â\89\98 f → 𝐓⦃f⦄ → 𝐓⦃f1⦄.
#f2 #f1 #f #H #Hf #i1 elim (Hf i1) -Hf
#i2 #Hf elim (coafter_at_fwd … Hf … H) -f /2 width=2 by ex_intro/
qed-.
-lemma coafter_fwd_istot_sn: â\88\80f2,f1,f. f2 ~â\8a\9a f1 â\89¡ f → 𝐓⦃f⦄ → 𝐓⦃f2⦄.
+lemma coafter_fwd_istot_sn: â\88\80f2,f1,f. f2 ~â\8a\9a f1 â\89\98 f → 𝐓⦃f⦄ → 𝐓⦃f2⦄.
#f2 #f1 #f #H #Hf #i1 elim (Hf i1) -Hf
#i #Hf elim (coafter_at_fwd … Hf … H) -f
#i2 #Hf1 #Hf2 lapply (at_increasing … Hf1) -f1
#Hi12 elim (at_le_ex … Hf2 … Hi12) -i2 /2 width=2 by ex_intro/
qed-.
-lemma coafter_inv_istot: â\88\80f2,f1,f. f2 ~â\8a\9a f1 â\89¡ f → 𝐓⦃f⦄ → 𝐓⦃f2⦄ ∧ 𝐓⦃f1⦄.
+lemma coafter_inv_istot: â\88\80f2,f1,f. f2 ~â\8a\9a f1 â\89\98 f → 𝐓⦃f⦄ → 𝐓⦃f2⦄ ∧ 𝐓⦃f1⦄.
/3 width=4 by coafter_fwd_istot_sn, coafter_fwd_istot_dx, conj/ qed-.
-lemma coafter_at1_fwd: â\88\80f1,i1,i2. @â¦\83i1, f1â¦\84 â\89¡ i2 â\86\92 â\88\80f2. ð\9d\90\93â¦\83f2â¦\84 â\86\92 â\88\80f. f2 ~â\8a\9a f1 â\89¡ f →
- â\88\83â\88\83i. @â¦\83i2, f2â¦\84 â\89¡ i & @â¦\83i1, fâ¦\84 â\89¡ i.
+lemma coafter_at1_fwd: â\88\80f1,i1,i2. @â¦\83i1, f1â¦\84 â\89\98 i2 â\86\92 â\88\80f2. ð\9d\90\93â¦\83f2â¦\84 â\86\92 â\88\80f. f2 ~â\8a\9a f1 â\89\98 f →
+ â\88\83â\88\83i. @â¦\83i2, f2â¦\84 â\89\98 i & @â¦\83i1, fâ¦\84 â\89\98 i.
#f1 #i1 #i2 #Hf1 #f2 #Hf2 #f #Hf elim (Hf2 i2) -Hf2
/3 width=8 by coafter_fwd_at, ex2_intro/
qed-.
-lemma coafter_fwd_isid_sn: â\88\80f2,f1,f. ð\9d\90\93â¦\83fâ¦\84 â\86\92 f2 ~â\8a\9a f1 â\89¡ f → f1 ≗ f → 𝐈⦃f2⦄.
+lemma coafter_fwd_isid_sn: â\88\80f2,f1,f. ð\9d\90\93â¦\83fâ¦\84 â\86\92 f2 ~â\8a\9a f1 â\89\98 f → f1 ≗ f → 𝐈⦃f2⦄.
#f2 #f1 #f #H #Hf elim (coafter_inv_istot … Hf H) -H
#Hf2 #Hf1 #H @isid_at_total // -Hf2
#i2 #i #Hf2 elim (Hf1 i2) -Hf1
/3 width=7 by at_eq_repl_back, at_mono, at_id_le/
qed-.
-lemma coafter_fwd_isid_dx: â\88\80f2,f1,f. ð\9d\90\93â¦\83fâ¦\84 â\86\92 f2 ~â\8a\9a f1 â\89¡ f → f2 ≗ f → 𝐈⦃f1⦄.
+lemma coafter_fwd_isid_dx: â\88\80f2,f1,f. ð\9d\90\93â¦\83fâ¦\84 â\86\92 f2 ~â\8a\9a f1 â\89\98 f → f2 ≗ f → 𝐈⦃f1⦄.
#f2 #f1 #f #H #Hf elim (coafter_inv_istot … Hf H) -H
#Hf2 #Hf1 #H2 @isid_at_total // -Hf1
#i1 #i2 #Hi12 elim (coafter_at1_fwd … Hi12 … Hf) -f1
/3 width=8 by at_inj, at_eq_repl_back/
qed-.
*)
-corec fact coafter_inj_O_aux: â\88\80f1. @â¦\830, f1â¦\84 â\89¡ 0 → H_coafter_inj f1.
+corec fact coafter_inj_O_aux: â\88\80f1. @â¦\830, f1â¦\84 â\89\98 0 → H_coafter_inj f1.
#f1 #H1f1 #H2f1 #f #f21 #f22 #H1f #H2f
cases (at_inv_pxp … H1f1) -H1f1 [ |*: // ] #g1 #H1
lapply (istot_inv_push … H2f1 … H1) -H2f1 #H2g1
/2 width=1 by coafter_tls, istot_tls, at_pxx_tls/
qed-.
-fact coafter_inj_aux: (â\88\80f1. @â¦\830, f1â¦\84 â\89¡ 0 → H_coafter_inj f1) →
- â\88\80i2,f1. @â¦\830, f1â¦\84 â\89¡ i2 → H_coafter_inj f1.
+fact coafter_inj_aux: (â\88\80f1. @â¦\830, f1â¦\84 â\89\98 0 → H_coafter_inj f1) →
+ â\88\80i2,f1. @â¦\830, f1â¦\84 â\89\98 i2 → H_coafter_inj f1.
#H0 #i2 elim i2 -i2 /2 width=1 by/ -H0
#i2 #IH #f1 #H1f1 #H2f1 #f #f21 #f22 #H1f #H2f
elim (at_inv_pxn … H1f1) -H1f1 [ |*: // ] #g1 #H1g1 #H1
#f1 #H cases (H 0) /3 width=7 by coafter_inj_aux, coafter_inj_O_aux/
qed-.
-corec fact coafter_fwd_isid2_O_aux: â\88\80f1. @â¦\830, f1â¦\84 â\89¡ 0 →
+corec fact coafter_fwd_isid2_O_aux: â\88\80f1. @â¦\830, f1â¦\84 â\89\98 0 →
H_coafter_fwd_isid2 f1.
#f1 #H1f1 #f2 #f #H #H2f1 #Hf
cases (at_inv_pxp … H1f1) -H1f1 [ |*: // ] #g1 #H1
]
qed-.
-fact coafter_fwd_isid2_aux: (â\88\80f1. @â¦\830, f1â¦\84 â\89¡ 0 → H_coafter_fwd_isid2 f1) →
- â\88\80i2,f1. @â¦\830, f1â¦\84 â\89¡ i2 → H_coafter_fwd_isid2 f1.
+fact coafter_fwd_isid2_aux: (â\88\80f1. @â¦\830, f1â¦\84 â\89\98 0 → H_coafter_fwd_isid2 f1) →
+ â\88\80i2,f1. @â¦\830, f1â¦\84 â\89\98 i2 → H_coafter_fwd_isid2 f1.
#H0 #i2 elim i2 -i2 /2 width=1 by/ -H0
#i2 #IH #f1 #H1f1 #f2 #f #H #H2f1 #Hf
elim (at_inv_pxn … H1f1) -H1f1 [ |*: // ] #g1 #Hg1 #H1
/3 width=7 by coafter_fwd_isid2_aux, coafter_fwd_isid2_O_aux/
qed-.
-fact coafter_isfin2_fwd_O_aux: â\88\80f1. @â¦\830, f1â¦\84 â\89¡ 0 →
+fact coafter_isfin2_fwd_O_aux: â\88\80f1. @â¦\830, f1â¦\84 â\89\98 0 →
H_coafter_isfin2_fwd f1.
#f1 #Hf1 #f2 #H
generalize in match Hf1; generalize in match f1; -f1
/5 width=6 by isfin_next, isfin_push, isfin_inv_tls, istot_tls, at_pxx_tls, coafter_tls_O/
qed-.
-fact coafter_isfin2_fwd_aux: (â\88\80f1. @â¦\830, f1â¦\84 â\89¡ 0 → H_coafter_isfin2_fwd f1) →
- â\88\80i2,f1. @â¦\830, f1â¦\84 â\89¡ i2 → H_coafter_isfin2_fwd f1.
+fact coafter_isfin2_fwd_aux: (â\88\80f1. @â¦\830, f1â¦\84 â\89\98 0 → H_coafter_isfin2_fwd f1) →
+ â\88\80i2,f1. @â¦\830, f1â¦\84 â\89\98 i2 → H_coafter_isfin2_fwd f1.
#H0 #i2 elim i2 -i2 /2 width=1 by/ -H0
#i2 #IH #f1 #H1f1 #f2 #Hf2 #H2f1 #f #Hf
elim (at_inv_pxn … H1f1) -H1f1 [ |*: // ] #g1 #Hg1 #H1
/3 width=7 by coafter_isfin2_fwd_aux, coafter_isfin2_fwd_O_aux/
qed-.
-lemma coafter_inv_sor: â\88\80f. ð\9d\90\85â¦\83fâ¦\84 â\86\92 â\88\80f2. ð\9d\90\93â¦\83f2â¦\84 â\86\92 â\88\80f1. f2 ~â\8a\9a f1 â\89¡ f â\86\92 â\88\80fa,fb. fa â\8b\93 fb â\89¡ f →
- â\88\83â\88\83f1a,f1b. f2 ~â\8a\9a f1a â\89¡ fa & f2 ~â\8a\9a f1b â\89¡ fb & f1a â\8b\93 f1b â\89¡ f1.
+lemma coafter_inv_sor: â\88\80f. ð\9d\90\85â¦\83fâ¦\84 â\86\92 â\88\80f2. ð\9d\90\93â¦\83f2â¦\84 â\86\92 â\88\80f1. f2 ~â\8a\9a f1 â\89\98 f â\86\92 â\88\80fa,fb. fa â\8b\93 fb â\89\98 f →
+ â\88\83â\88\83f1a,f1b. f2 ~â\8a\9a f1a â\89\98 fa & f2 ~â\8a\9a f1b â\89\98 fb & f1a â\8b\93 f1b â\89\98 f1.
@isfin_ind
[ #f #Hf #f2 #Hf2 #f1 #H1f #fa #fb #H2f
elim (sor_inv_isid3 … H2f) -H2f //
(* Properties with istot ****************************************************)
-lemma coafter_sor: â\88\80f. ð\9d\90\85â¦\83fâ¦\84 â\86\92 â\88\80f2. ð\9d\90\93â¦\83f2â¦\84 â\86\92 â\88\80f1. f2 ~â\8a\9a f1 â\89¡ f â\86\92 â\88\80f1a,f1b. f1a â\8b\93 f1b â\89¡ f1 →
- â\88\83â\88\83fa,fb. f2 ~â\8a\9a f1a â\89¡ fa & f2 ~â\8a\9a f1b â\89¡ fb & fa â\8b\93 fb â\89¡ f.
+lemma coafter_sor: â\88\80f. ð\9d\90\85â¦\83fâ¦\84 â\86\92 â\88\80f2. ð\9d\90\93â¦\83f2â¦\84 â\86\92 â\88\80f1. f2 ~â\8a\9a f1 â\89\98 f â\86\92 â\88\80f1a,f1b. f1a â\8b\93 f1b â\89\98 f1 →
+ â\88\83â\88\83fa,fb. f2 ~â\8a\9a f1a â\89\98 fa & f2 ~â\8a\9a f1b â\89\98 fb & fa â\8b\93 fb â\89\98 f.
@isfin_ind
[ #f #Hf #f2 #Hf2 #f1 #Hf #f1a #f1b #Hf1
lapply (coafter_fwd_isid2 … Hf ??) -Hf // #H2f1
(* Properties with after ****************************************************)
(*
-corec theorem coafter_trans1: â\88\80f0,f3,f4. f0 ~â\8a\9a f3 â\89¡ f4 →
- â\88\80f1,f2. f1 ~â\8a\9a f2 â\89¡ f0 →
- â\88\80f. f2 ~â\8a\9a f3 â\89¡ f â\86\92 f1 ~â\8a\9a f â\89¡ f4.
+corec theorem coafter_trans1: â\88\80f0,f3,f4. f0 ~â\8a\9a f3 â\89\98 f4 →
+ â\88\80f1,f2. f1 ~â\8a\9a f2 â\89\98 f0 →
+ â\88\80f. f2 ~â\8a\9a f3 â\89\98 f â\86\92 f1 ~â\8a\9a f â\89\98 f4.
#f0 #f3 #f4 * -f0 -f3 -f4 #f0 #f3 #f4 #g0 [1,2: #g3 ] #g4
[ #Hf4 #H0 #H3 #H4 #g1 #g2 #Hg0 #g #Hg
cases (coafter_inv_xxp … Hg0 … H0) -g0
]
qed-.
-corec theorem coafter_trans2: â\88\80f1,f0,f4. f1 ~â\8a\9a f0 â\89¡ f4 →
- â\88\80f2, f3. f2 ~â\8a\9a f3 â\89¡ f0 →
- â\88\80f. f1 ~â\8a\9a f2 â\89¡ f â\86\92 f ~â\8a\9a f3 â\89¡ f4.
+corec theorem coafter_trans2: â\88\80f1,f0,f4. f1 ~â\8a\9a f0 â\89\98 f4 →
+ â\88\80f2, f3. f2 ~â\8a\9a f3 â\89\98 f0 →
+ â\88\80f. f1 ~â\8a\9a f2 â\89\98 f â\86\92 f ~â\8a\9a f3 â\89\98 f4.
#f1 #f0 #f4 * -f1 -f0 -f4 #f1 #f0 #f4 #g1 [1,2: #g0 ] #g4
[ #Hf4 #H1 #H0 #H4 #g2 #g3 #Hg0 #g #Hg
cases (coafter_inv_xxp … Hg0 … H0) -g0
(* Basic inversion lemmas ***************************************************)
-lemma fcla_inv_px: â\88\80g,m. ð\9d\90\82â¦\83gâ¦\84 â\89¡ m â\86\92 â\88\80f. â\86\91f = g â\86\92 ð\9d\90\82â¦\83fâ¦\84 â\89¡ m.
+lemma fcla_inv_px: â\88\80g,m. ð\9d\90\82â¦\83gâ¦\84 â\89\98 m â\86\92 â\88\80f. â\86\91f = g â\86\92 ð\9d\90\82â¦\83fâ¦\84 â\89\98 m.
#g #m * -g -m /3 width=3 by fcla_isid, isid_inv_push/
#g #m #_ #f #H elim (discr_push_next … H)
qed-.
-lemma fcla_inv_nx: â\88\80g,m. ð\9d\90\82â¦\83gâ¦\84 â\89¡ m → ∀f. ⫯f = g →
- â\88\83â\88\83n. ð\9d\90\82â¦\83fâ¦\84 â\89¡ n & ⫯n = m.
+lemma fcla_inv_nx: â\88\80g,m. ð\9d\90\82â¦\83gâ¦\84 â\89\98 m → ∀f. ⫯f = g →
+ â\88\83â\88\83n. ð\9d\90\82â¦\83fâ¦\84 â\89\98 n & ⫯n = m.
#g #m * -g -m /2 width=3 by ex2_intro/
[ #g #Hg #f #H elim (isid_inv_next … H) -H //
| #g #m #_ #f #H elim (discr_next_push … H)
(* Advanced inversion lemmas ************************************************)
-lemma cla_inv_nn: â\88\80g,m. ð\9d\90\82â¦\83gâ¦\84 â\89¡ m â\86\92 â\88\80f,n. ⫯f = g â\86\92 ⫯n = m â\86\92 ð\9d\90\82â¦\83fâ¦\84 â\89¡ n.
+lemma cla_inv_nn: â\88\80g,m. ð\9d\90\82â¦\83gâ¦\84 â\89\98 m â\86\92 â\88\80f,n. ⫯f = g â\86\92 ⫯n = m â\86\92 ð\9d\90\82â¦\83fâ¦\84 â\89\98 n.
#g #m #H #f #n #H1 #H2 elim (fcla_inv_nx … H … H1) -g
#x #Hf #H destruct //
qed-.
-lemma cla_inv_np: â\88\80g,m. ð\9d\90\82â¦\83gâ¦\84 â\89¡ m → ∀f. ⫯f = g → 0 = m → ⊥.
+lemma cla_inv_np: â\88\80g,m. ð\9d\90\82â¦\83gâ¦\84 â\89\98 m → ∀f. ⫯f = g → 0 = m → ⊥.
#g #m #H #f #H1 elim (fcla_inv_nx … H … H1) -g
#x #_ #H1 #H2 destruct
qed-.
-lemma fcla_inv_xp: â\88\80g,m. ð\9d\90\82â¦\83gâ¦\84 â\89¡ m → 0 = m → 𝐈⦃g⦄.
+lemma fcla_inv_xp: â\88\80g,m. ð\9d\90\82â¦\83gâ¦\84 â\89\98 m → 0 = m → 𝐈⦃g⦄.
#g #m #H elim H -g -m /3 width=3 by isid_push/
#g #m #_ #_ #H destruct
qed-.
-lemma fcla_inv_isid: â\88\80f,n. ð\9d\90\82â¦\83fâ¦\84 â\89¡ n → 𝐈⦃f⦄ → 0 = n.
+lemma fcla_inv_isid: â\88\80f,n. ð\9d\90\82â¦\83fâ¦\84 â\89\98 n → 𝐈⦃f⦄ → 0 = n.
#f #n #H elim H -f -n /3 width=3 by isid_inv_push/
#f #n #_ #_ #H elim (isid_inv_next … H) -H //
qed-.
(* Main forward lemmas ******************************************************)
-theorem fcla_mono: â\88\80f,n1. ð\9d\90\82â¦\83fâ¦\84 â\89¡ n1 â\86\92 â\88\80n2. ð\9d\90\82â¦\83fâ¦\84 â\89¡ n2 → n1 = n2.
+theorem fcla_mono: â\88\80f,n1. ð\9d\90\82â¦\83fâ¦\84 â\89\98 n1 â\86\92 â\88\80n2. ð\9d\90\82â¦\83fâ¦\84 â\89\98 n2 → n1 = n2.
#f #n #H elim H -f -n
[ /2 width=3 by fcla_inv_isid/
| /3 width=3 by fcla_inv_px/
(* Basic properties *********************************************************)
-lemma fcla_eq_repl_back: â\88\80n. eq_repl_back â\80¦ (λf. ð\9d\90\82â¦\83fâ¦\84 â\89¡ n).
+lemma fcla_eq_repl_back: â\88\80n. eq_repl_back â\80¦ (λf. ð\9d\90\82â¦\83fâ¦\84 â\89\98 n).
#n #f1 #H elim H -f1 -n /3 width=3 by fcla_isid, isid_eq_repl_back/
#f1 #n #_ #IH #g2 #H [ elim (eq_inv_px … H) | elim (eq_inv_nx … H) ] -H
/3 width=3 by fcla_push, fcla_next/
qed-.
-lemma fcla_eq_repl_fwd: â\88\80n. eq_repl_fwd â\80¦ (λf. ð\9d\90\82â¦\83fâ¦\84 â\89¡ n).
+lemma fcla_eq_repl_fwd: â\88\80n. eq_repl_fwd â\80¦ (λf. ð\9d\90\82â¦\83fâ¦\84 â\89\98 n).
#n @eq_repl_sym /2 width=3 by fcla_eq_repl_back/
qed-.
(* RELOCATION MAP ***********************************************************)
definition isfin: predicate rtmap ≝
- λf. â\88\83n. ð\9d\90\82â¦\83fâ¦\84 â\89¡ n.
+ λf. â\88\83n. ð\9d\90\82â¦\83fâ¦\84 â\89\98 n.
interpretation "test for finite colength (rtmap)"
'IsFinite f = (isfin f).
(* RELOCATION MAP ***********************************************************)
-definition istot: predicate rtmap â\89\9d λf. â\88\80i. â\88\83j. @â¦\83i, fâ¦\84 â\89¡ j.
+definition istot: predicate rtmap â\89\9d λf. â\88\80i. â\88\83j. @â¦\83i, fâ¦\84 â\89\98 j.
interpretation "test for totality (rtmap)"
'IsTotal f = (istot f).
(* Main forward lemmas on at ************************************************)
corec theorem at_ext: ∀f1,f2. 𝐓⦃f1⦄ → 𝐓⦃f2⦄ →
- (â\88\80i,i1,i2. @â¦\83i, f1â¦\84 â\89¡ i1 â\86\92 @â¦\83i, f2â¦\84 â\89¡ i2 → i1 = i2) →
+ (â\88\80i,i1,i2. @â¦\83i, f1â¦\84 â\89\98 i1 â\86\92 @â¦\83i, f2â¦\84 â\89\98 i2 → i1 = i2) →
f1 ≗ f2.
#f1 cases (pn_split f1) * #g1 #H1
#f2 cases (pn_split f2) * #g2 #H2
(* Advanced properties on at ************************************************)
-lemma at_dec: â\88\80f,i1,i2. ð\9d\90\93â¦\83fâ¦\84 â\86\92 Decidable (@â¦\83i1, fâ¦\84 â\89¡ i2).
+lemma at_dec: â\88\80f,i1,i2. ð\9d\90\93â¦\83fâ¦\84 â\86\92 Decidable (@â¦\83i1, fâ¦\84 â\89\98 i2).
#f #i1 #i2 #Hf lapply (Hf i1) -Hf *
#j2 #Hf elim (eq_nat_dec i2 j2)
[ #H destruct /2 width=1 by or_introl/
]
qed-.
-lemma is_at_dec_le: â\88\80f,i2,i. ð\9d\90\93â¦\83fâ¦\84 â\86\92 (â\88\80i1. i1 + i â\89¤ i2 â\86\92 @â¦\83i1, fâ¦\84 â\89¡ i2 → ⊥) →
- Decidable (â\88\83i1. @â¦\83i1, fâ¦\84 â\89¡ i2).
+lemma is_at_dec_le: â\88\80f,i2,i. ð\9d\90\93â¦\83fâ¦\84 â\86\92 (â\88\80i1. i1 + i â\89¤ i2 â\86\92 @â¦\83i1, fâ¦\84 â\89\98 i2 → ⊥) →
+ Decidable (â\88\83i1. @â¦\83i1, fâ¦\84 â\89\98 i2).
#f #i2 #i #Hf elim i -i
[ #Ht @or_intror * /3 width=3 by at_increasing/
| #i #IH #Ht elim (at_dec f (i2-i) i2) /3 width=2 by ex_intro, or_introl/
]
qed-.
-lemma is_at_dec: â\88\80f,i2. ð\9d\90\93â¦\83fâ¦\84 â\86\92 Decidable (â\88\83i1. @â¦\83i1, fâ¦\84 â\89¡ i2).
+lemma is_at_dec: â\88\80f,i2. ð\9d\90\93â¦\83fâ¦\84 â\86\92 Decidable (â\88\83i1. @â¦\83i1, fâ¦\84 â\89\98 i2).
#f #i2 #Hf @(is_at_dec_le ?? (⫯i2)) /2 width=4 by lt_le_false/
qed-.
(* Advanced properties on isid **********************************************)
-lemma isid_at_total: â\88\80f. ð\9d\90\93â¦\83fâ¦\84 â\86\92 (â\88\80i1,i2. @â¦\83i1, fâ¦\84 â\89¡ i2 → i1 = i2) → 𝐈⦃f⦄.
+lemma isid_at_total: â\88\80f. ð\9d\90\93â¦\83fâ¦\84 â\86\92 (â\88\80i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 → i1 = i2) → 𝐈⦃f⦄.
#f #H1f #H2f @isid_at
#i lapply (H1f i) -H1f *
#j #Hf >(H2f … Hf) in ⊢ (???%); -H2f //
(* Basic inversion lemmas ***************************************************)
-lemma sand_inv_ppx: â\88\80g1,g2,g. g1 â\8b\92 g2 â\89¡ g → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 →
- â\88\83â\88\83f. f1 â\8b\92 f2 â\89¡ f & ↑f = g.
+lemma sand_inv_ppx: â\88\80g1,g2,g. g1 â\8b\92 g2 â\89\98 g → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 →
+ â\88\83â\88\83f. f1 â\8b\92 f2 â\89\98 f & ↑f = g.
#g1 #g2 #g * -g1 -g2 -g
#f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x1 #x2 #Hx1 #Hx2 destruct
try (>(injective_push … Hx1) -x1) try (>(injective_next … Hx1) -x1)
/2 width=3 by ex2_intro/
qed-.
-lemma sand_inv_npx: â\88\80g1,g2,g. g1 â\8b\92 g2 â\89¡ g → ∀f1,f2. ⫯f1 = g1 → ↑f2 = g2 →
- â\88\83â\88\83f. f1 â\8b\92 f2 â\89¡ f & ↑f = g.
+lemma sand_inv_npx: â\88\80g1,g2,g. g1 â\8b\92 g2 â\89\98 g → ∀f1,f2. ⫯f1 = g1 → ↑f2 = g2 →
+ â\88\83â\88\83f. f1 â\8b\92 f2 â\89\98 f & ↑f = g.
#g1 #g2 #g * -g1 -g2 -g
#f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x1 #x2 #Hx1 #Hx2 destruct
try (>(injective_push … Hx1) -x1) try (>(injective_next … Hx1) -x1)
/2 width=3 by ex2_intro/
qed-.
-lemma sand_inv_pnx: â\88\80g1,g2,g. g1 â\8b\92 g2 â\89¡ g → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 →
- â\88\83â\88\83f. f1 â\8b\92 f2 â\89¡ f & ↑f = g.
+lemma sand_inv_pnx: â\88\80g1,g2,g. g1 â\8b\92 g2 â\89\98 g → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 →
+ â\88\83â\88\83f. f1 â\8b\92 f2 â\89\98 f & ↑f = g.
#g1 #g2 #g * -g1 -g2 -g
#f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x1 #x2 #Hx1 #Hx2 destruct
try (>(injective_push … Hx1) -x1) try (>(injective_next … Hx1) -x1)
/2 width=3 by ex2_intro/
qed-.
-lemma sand_inv_nnx: â\88\80g1,g2,g. g1 â\8b\92 g2 â\89¡ g → ∀f1,f2. ⫯f1 = g1 → ⫯f2 = g2 →
- â\88\83â\88\83f. f1 â\8b\92 f2 â\89¡ f & ⫯f = g.
+lemma sand_inv_nnx: â\88\80g1,g2,g. g1 â\8b\92 g2 â\89\98 g → ∀f1,f2. ⫯f1 = g1 → ⫯f2 = g2 →
+ â\88\83â\88\83f. f1 â\8b\92 f2 â\89\98 f & ⫯f = g.
#g1 #g2 #g * -g1 -g2 -g
#f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x1 #x2 #Hx1 #Hx2 destruct
try (>(injective_push … Hx1) -x1) try (>(injective_next … Hx1) -x1)
(* Basic properties *********************************************************)
-corec lemma sand_eq_repl_back1: â\88\80f2,f. eq_repl_back â\80¦ (λf1. f1 â\8b\92 f2 â\89¡ f).
+corec lemma sand_eq_repl_back1: â\88\80f2,f. eq_repl_back â\80¦ (λf1. f1 â\8b\92 f2 â\89\98 f).
#f2 #f #f1 * -f1 -f2 -f
#f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x #Hx
try cases (eq_inv_px … Hx … H1) try cases (eq_inv_nx … Hx … H1) -g1
/3 width=7 by sand_pp, sand_np, sand_pn, sand_nn/
qed-.
-lemma sand_eq_repl_fwd1: â\88\80f2,f. eq_repl_fwd â\80¦ (λf1. f1 â\8b\92 f2 â\89¡ f).
+lemma sand_eq_repl_fwd1: â\88\80f2,f. eq_repl_fwd â\80¦ (λf1. f1 â\8b\92 f2 â\89\98 f).
#f2 #f @eq_repl_sym /2 width=3 by sand_eq_repl_back1/
qed-.
-corec lemma sand_eq_repl_back2: â\88\80f1,f. eq_repl_back â\80¦ (λf2. f1 â\8b\92 f2 â\89¡ f).
+corec lemma sand_eq_repl_back2: â\88\80f1,f. eq_repl_back â\80¦ (λf2. f1 â\8b\92 f2 â\89\98 f).
#f1 #f #f2 * -f1 -f2 -f
#f1 #f2 #f #g1 #g2 #g #Hf #H #H2 #H0 #x #Hx
try cases (eq_inv_px … Hx … H2) try cases (eq_inv_nx … Hx … H2) -g2
/3 width=7 by sand_pp, sand_np, sand_pn, sand_nn/
qed-.
-lemma sand_eq_repl_fwd2: â\88\80f1,f. eq_repl_fwd â\80¦ (λf2. f1 â\8b\92 f2 â\89¡ f).
+lemma sand_eq_repl_fwd2: â\88\80f1,f. eq_repl_fwd â\80¦ (λf2. f1 â\8b\92 f2 â\89\98 f).
#f1 #f @eq_repl_sym /2 width=3 by sand_eq_repl_back2/
qed-.
-corec lemma sand_eq_repl_back3: â\88\80f1,f2. eq_repl_back â\80¦ (λf. f1 â\8b\92 f2 â\89¡ f).
+corec lemma sand_eq_repl_back3: â\88\80f1,f2. eq_repl_back â\80¦ (λf. f1 â\8b\92 f2 â\89\98 f).
#f1 #f2 #f * -f1 -f2 -f
#f1 #f2 #f #g1 #g2 #g #Hf #H #H2 #H0 #x #Hx
try cases (eq_inv_px … Hx … H0) try cases (eq_inv_nx … Hx … H0) -g
/3 width=7 by sand_pp, sand_np, sand_pn, sand_nn/
qed-.
-lemma sand_eq_repl_fwd3: â\88\80f1,f2. eq_repl_fwd â\80¦ (λf. f1 â\8b\92 f2 â\89¡ f).
+lemma sand_eq_repl_fwd3: â\88\80f1,f2. eq_repl_fwd â\80¦ (λf. f1 â\8b\92 f2 â\89\98 f).
#f1 #f2 @eq_repl_sym /2 width=3 by sand_eq_repl_back3/
qed-.
-corec lemma sand_refl: â\88\80f. f â\8b\92 f â\89¡ f.
+corec lemma sand_refl: â\88\80f. f â\8b\92 f â\89\98 f.
#f cases (pn_split f) * #g #H
[ @(sand_pp … H H H) | @(sand_nn … H H H) ] -H //
qed.
-corec lemma sand_sym: â\88\80f1,f2,f. f1 â\8b\92 f2 â\89¡ f â\86\92 f2 â\8b\92 f1 â\89¡ f.
+corec lemma sand_sym: â\88\80f1,f2,f. f1 â\8b\92 f2 â\89\98 f â\86\92 f2 â\8b\92 f1 â\89\98 f.
#f1 #f2 #f * -f1 -f2 -f
#f1 #f2 #f #g1 #g2 #g #Hf * * * -g1 -g2 -g
[ @sand_pp | @sand_pn | @sand_np | @sand_nn ] /2 width=7 by/
(* Basic inversion lemmas ***************************************************)
-lemma sor_inv_ppx: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 →
- â\88\83â\88\83f. f1 â\8b\93 f2 â\89¡ f & ↑f = g.
+lemma sor_inv_ppx: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g → ∀f1,f2. ↑f1 = g1 → ↑f2 = g2 →
+ â\88\83â\88\83f. f1 â\8b\93 f2 â\89\98 f & ↑f = g.
#g1 #g2 #g * -g1 -g2 -g
#f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x1 #x2 #Hx1 #Hx2 destruct
try (>(injective_push … Hx1) -x1) try (>(injective_next … Hx1) -x1)
/2 width=3 by ex2_intro/
qed-.
-lemma sor_inv_npx: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g → ∀f1,f2. ⫯f1 = g1 → ↑f2 = g2 →
- â\88\83â\88\83f. f1 â\8b\93 f2 â\89¡ f & ⫯f = g.
+lemma sor_inv_npx: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g → ∀f1,f2. ⫯f1 = g1 → ↑f2 = g2 →
+ â\88\83â\88\83f. f1 â\8b\93 f2 â\89\98 f & ⫯f = g.
#g1 #g2 #g * -g1 -g2 -g
#f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x1 #x2 #Hx1 #Hx2 destruct
try (>(injective_push … Hx1) -x1) try (>(injective_next … Hx1) -x1)
/2 width=3 by ex2_intro/
qed-.
-lemma sor_inv_pnx: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 →
- â\88\83â\88\83f. f1 â\8b\93 f2 â\89¡ f & ⫯f = g.
+lemma sor_inv_pnx: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g → ∀f1,f2. ↑f1 = g1 → ⫯f2 = g2 →
+ â\88\83â\88\83f. f1 â\8b\93 f2 â\89\98 f & ⫯f = g.
#g1 #g2 #g * -g1 -g2 -g
#f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x1 #x2 #Hx1 #Hx2 destruct
try (>(injective_push … Hx1) -x1) try (>(injective_next … Hx1) -x1)
/2 width=3 by ex2_intro/
qed-.
-lemma sor_inv_nnx: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g → ∀f1,f2. ⫯f1 = g1 → ⫯f2 = g2 →
- â\88\83â\88\83f. f1 â\8b\93 f2 â\89¡ f & ⫯f = g.
+lemma sor_inv_nnx: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g → ∀f1,f2. ⫯f1 = g1 → ⫯f2 = g2 →
+ â\88\83â\88\83f. f1 â\8b\93 f2 â\89\98 f & ⫯f = g.
#g1 #g2 #g * -g1 -g2 -g
#f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x1 #x2 #Hx1 #Hx2 destruct
try (>(injective_push … Hx1) -x1) try (>(injective_next … Hx1) -x1)
(* Advanced inversion lemmas ************************************************)
-lemma sor_inv_ppn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g →
+lemma sor_inv_ppn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g →
∀f1,f2,f. ↑f1 = g1 → ↑f2 = g2 → ⫯f = g → ⊥.
#g1 #g2 #g #H #f1 #f2 #f #H1 #H2 #H0
elim (sor_inv_ppx … H … H1 H2) -g1 -g2 #x #_ #H destruct
/2 width=3 by discr_push_next/
qed-.
-lemma sor_inv_nxp: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g →
+lemma sor_inv_nxp: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g →
∀f1,f. ⫯f1 = g1 → ↑f = g → ⊥.
#g1 #g2 #g #H #f1 #f #H1 #H0
elim (pn_split g2) * #f2 #H2
/2 width=3 by discr_next_push/
qed-.
-lemma sor_inv_xnp: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g →
+lemma sor_inv_xnp: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g →
∀f2,f. ⫯f2 = g2 → ↑f = g → ⊥.
#g1 #g2 #g #H #f2 #f #H2 #H0
elim (pn_split g1) * #f1 #H1
/2 width=3 by discr_next_push/
qed-.
-lemma sor_inv_ppp: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g →
- â\88\80f1,f2,f. â\86\91f1 = g1 â\86\92 â\86\91f2 = g2 â\86\92 â\86\91f = g â\86\92 f1 â\8b\93 f2 â\89¡ f.
+lemma sor_inv_ppp: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g →
+ â\88\80f1,f2,f. â\86\91f1 = g1 â\86\92 â\86\91f2 = g2 â\86\92 â\86\91f = g â\86\92 f1 â\8b\93 f2 â\89\98 f.
#g1 #g2 #g #H #f1 #f2 #f #H1 #H2 #H0
elim (sor_inv_ppx … H … H1 H2) -g1 -g2 #x #Hx #H destruct
<(injective_push … H) -f //
qed-.
-lemma sor_inv_npn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g →
- â\88\80f1,f2,f. ⫯f1 = g1 â\86\92 â\86\91f2 = g2 â\86\92 ⫯f = g â\86\92 f1 â\8b\93 f2 â\89¡ f.
+lemma sor_inv_npn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g →
+ â\88\80f1,f2,f. ⫯f1 = g1 â\86\92 â\86\91f2 = g2 â\86\92 ⫯f = g â\86\92 f1 â\8b\93 f2 â\89\98 f.
#g1 #g2 #g #H #f1 #f2 #f #H1 #H2 #H0
elim (sor_inv_npx … H … H1 H2) -g1 -g2 #x #Hx #H destruct
<(injective_next … H) -f //
qed-.
-lemma sor_inv_pnn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g →
- â\88\80f1,f2,f. â\86\91f1 = g1 â\86\92 ⫯f2 = g2 â\86\92 ⫯f = g â\86\92 f1 â\8b\93 f2 â\89¡ f.
+lemma sor_inv_pnn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g →
+ â\88\80f1,f2,f. â\86\91f1 = g1 â\86\92 ⫯f2 = g2 â\86\92 ⫯f = g â\86\92 f1 â\8b\93 f2 â\89\98 f.
#g1 #g2 #g #H #f1 #f2 #f #H1 #H2 #H0
elim (sor_inv_pnx … H … H1 H2) -g1 -g2 #x #Hx #H destruct
<(injective_next … H) -f //
qed-.
-lemma sor_inv_nnn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g →
- â\88\80f1,f2,f. ⫯f1 = g1 â\86\92 ⫯f2 = g2 â\86\92 ⫯f = g â\86\92 f1 â\8b\93 f2 â\89¡ f.
+lemma sor_inv_nnn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g →
+ â\88\80f1,f2,f. ⫯f1 = g1 â\86\92 ⫯f2 = g2 â\86\92 ⫯f = g â\86\92 f1 â\8b\93 f2 â\89\98 f.
#g1 #g2 #g #H #f1 #f2 #f #H1 #H2 #H0
elim (sor_inv_nnx … H … H1 H2) -g1 -g2 #x #Hx #H destruct
<(injective_next … H) -f //
qed-.
-lemma sor_inv_pxp: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g →
+lemma sor_inv_pxp: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g →
∀f1,f. ↑f1 = g1 → ↑f = g →
- â\88\83â\88\83f2. f1 â\8b\93 f2 â\89¡ f & ↑f2 = g2.
+ â\88\83â\88\83f2. f1 â\8b\93 f2 â\89\98 f & ↑f2 = g2.
#g1 #g2 #g #H #f1 #f #H1 #H0
elim (pn_split g2) * #f2 #H2
[ /3 width=7 by sor_inv_ppp, ex2_intro/
]
qed-.
-lemma sor_inv_xpp: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g →
+lemma sor_inv_xpp: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g →
∀f2,f. ↑f2 = g2 → ↑f = g →
- â\88\83â\88\83f1. f1 â\8b\93 f2 â\89¡ f & ↑f1 = g1.
+ â\88\83â\88\83f1. f1 â\8b\93 f2 â\89\98 f & ↑f1 = g1.
#g1 #g2 #g #H #f2 #f #H2 #H0
elim (pn_split g1) * #f1 #H1
[ /3 width=7 by sor_inv_ppp, ex2_intro/
]
qed-.
-lemma sor_inv_pxn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g →
+lemma sor_inv_pxn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g →
∀f1,f. ↑f1 = g1 → ⫯f = g →
- â\88\83â\88\83f2. f1 â\8b\93 f2 â\89¡ f & ⫯f2 = g2.
+ â\88\83â\88\83f2. f1 â\8b\93 f2 â\89\98 f & ⫯f2 = g2.
#g1 #g2 #g #H #f1 #f #H1 #H0
elim (pn_split g2) * #f2 #H2
[ elim (sor_inv_ppn … H … H1 H2 H0)
]
qed-.
-lemma sor_inv_xpn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g →
+lemma sor_inv_xpn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g →
∀f2,f. ↑f2 = g2 → ⫯f = g →
- â\88\83â\88\83f1. f1 â\8b\93 f2 â\89¡ f & ⫯f1 = g1.
+ â\88\83â\88\83f1. f1 â\8b\93 f2 â\89\98 f & ⫯f1 = g1.
#g1 #g2 #g #H #f2 #f #H2 #H0
elim (pn_split g1) * #f1 #H1
[ elim (sor_inv_ppn … H … H1 H2 H0)
]
qed-.
-lemma sor_inv_xxp: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g → ∀f. ↑f = g →
- â\88\83â\88\83f1,f2. f1 â\8b\93 f2 â\89¡ f & ↑f1 = g1 & ↑f2 = g2.
+lemma sor_inv_xxp: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g → ∀f. ↑f = g →
+ â\88\83â\88\83f1,f2. f1 â\8b\93 f2 â\89\98 f & ↑f1 = g1 & ↑f2 = g2.
#g1 #g2 #g #H #f #H0
elim (pn_split g1) * #f1 #H1
[ elim (sor_inv_pxp … H … H1 H0) -g /2 width=5 by ex3_2_intro/
]
qed-.
-lemma sor_inv_nxn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g →
+lemma sor_inv_nxn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g →
∀f1,f. ⫯f1 = g1 → ⫯f = g →
- (â\88\83â\88\83f2. f1 â\8b\93 f2 â\89¡ f & ↑f2 = g2) ∨
- â\88\83â\88\83f2. f1 â\8b\93 f2 â\89¡ f & ⫯f2 = g2.
+ (â\88\83â\88\83f2. f1 â\8b\93 f2 â\89\98 f & ↑f2 = g2) ∨
+ â\88\83â\88\83f2. f1 â\8b\93 f2 â\89\98 f & ⫯f2 = g2.
#g1 #g2 elim (pn_split g2) *
/4 width=7 by sor_inv_npn, sor_inv_nnn, ex2_intro, or_intror, or_introl/
qed-.
-lemma sor_inv_xnn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g →
+lemma sor_inv_xnn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g →
∀f2,f. ⫯f2 = g2 → ⫯f = g →
- (â\88\83â\88\83f1. f1 â\8b\93 f2 â\89¡ f & ↑f1 = g1) ∨
- â\88\83â\88\83f1. f1 â\8b\93 f2 â\89¡ f & ⫯f1 = g1.
+ (â\88\83â\88\83f1. f1 â\8b\93 f2 â\89\98 f & ↑f1 = g1) ∨
+ â\88\83â\88\83f1. f1 â\8b\93 f2 â\89\98 f & ⫯f1 = g1.
#g1 elim (pn_split g1) *
/4 width=7 by sor_inv_pnn, sor_inv_nnn, ex2_intro, or_intror, or_introl/
qed-.
-lemma sor_inv_xxn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g → ∀f. ⫯f = g →
- â\88¨â\88¨ â\88\83â\88\83f1,f2. f1 â\8b\93 f2 â\89¡ f & ⫯f1 = g1 & ↑f2 = g2
- | â\88\83â\88\83f1,f2. f1 â\8b\93 f2 â\89¡ f & ↑f1 = g1 & ⫯f2 = g2
- | â\88\83â\88\83f1,f2. f1 â\8b\93 f2 â\89¡ f & ⫯f1 = g1 & ⫯f2 = g2.
+lemma sor_inv_xxn: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g → ∀f. ⫯f = g →
+ â\88¨â\88¨ â\88\83â\88\83f1,f2. f1 â\8b\93 f2 â\89\98 f & ⫯f1 = g1 & ↑f2 = g2
+ | â\88\83â\88\83f1,f2. f1 â\8b\93 f2 â\89\98 f & ↑f1 = g1 & ⫯f2 = g2
+ | â\88\83â\88\83f1,f2. f1 â\8b\93 f2 â\89\98 f & ⫯f1 = g1 & ⫯f2 = g2.
#g1 #g2 #g #H #f #H0
elim (pn_split g1) * #f1 #H1
[ elim (sor_inv_pxn … H … H1 H0) -g
(* Main inversion lemmas ****************************************************)
-corec theorem sor_mono: â\88\80f1,f2,x,y. f1 â\8b\93 f2 â\89¡ x â\86\92 f1 â\8b\93 f2 â\89¡ y → x ≗ y.
+corec theorem sor_mono: â\88\80f1,f2,x,y. f1 â\8b\93 f2 â\89\98 x â\86\92 f1 â\8b\93 f2 â\89\98 y → x ≗ y.
#f1 #f2 #x #y * -f1 -f2 -x
#f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #H
[ cases (sor_inv_ppx … H … H1 H2)
(* Basic properties *********************************************************)
-corec lemma sor_eq_repl_back1: â\88\80f2,f. eq_repl_back â\80¦ (λf1. f1 â\8b\93 f2 â\89¡ f).
+corec lemma sor_eq_repl_back1: â\88\80f2,f. eq_repl_back â\80¦ (λf1. f1 â\8b\93 f2 â\89\98 f).
#f2 #f #f1 * -f1 -f2 -f
#f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0 #x #Hx
try cases (eq_inv_px … Hx … H1) try cases (eq_inv_nx … Hx … H1) -g1
/3 width=7 by sor_pp, sor_np, sor_pn, sor_nn/
qed-.
-lemma sor_eq_repl_fwd1: â\88\80f2,f. eq_repl_fwd â\80¦ (λf1. f1 â\8b\93 f2 â\89¡ f).
+lemma sor_eq_repl_fwd1: â\88\80f2,f. eq_repl_fwd â\80¦ (λf1. f1 â\8b\93 f2 â\89\98 f).
#f2 #f @eq_repl_sym /2 width=3 by sor_eq_repl_back1/
qed-.
-corec lemma sor_eq_repl_back2: â\88\80f1,f. eq_repl_back â\80¦ (λf2. f1 â\8b\93 f2 â\89¡ f).
+corec lemma sor_eq_repl_back2: â\88\80f1,f. eq_repl_back â\80¦ (λf2. f1 â\8b\93 f2 â\89\98 f).
#f1 #f #f2 * -f1 -f2 -f
#f1 #f2 #f #g1 #g2 #g #Hf #H #H2 #H0 #x #Hx
try cases (eq_inv_px … Hx … H2) try cases (eq_inv_nx … Hx … H2) -g2
/3 width=7 by sor_pp, sor_np, sor_pn, sor_nn/
qed-.
-lemma sor_eq_repl_fwd2: â\88\80f1,f. eq_repl_fwd â\80¦ (λf2. f1 â\8b\93 f2 â\89¡ f).
+lemma sor_eq_repl_fwd2: â\88\80f1,f. eq_repl_fwd â\80¦ (λf2. f1 â\8b\93 f2 â\89\98 f).
#f1 #f @eq_repl_sym /2 width=3 by sor_eq_repl_back2/
qed-.
-corec lemma sor_eq_repl_back3: â\88\80f1,f2. eq_repl_back â\80¦ (λf. f1 â\8b\93 f2 â\89¡ f).
+corec lemma sor_eq_repl_back3: â\88\80f1,f2. eq_repl_back â\80¦ (λf. f1 â\8b\93 f2 â\89\98 f).
#f1 #f2 #f * -f1 -f2 -f
#f1 #f2 #f #g1 #g2 #g #Hf #H #H2 #H0 #x #Hx
try cases (eq_inv_px … Hx … H0) try cases (eq_inv_nx … Hx … H0) -g
/3 width=7 by sor_pp, sor_np, sor_pn, sor_nn/
qed-.
-lemma sor_eq_repl_fwd3: â\88\80f1,f2. eq_repl_fwd â\80¦ (λf. f1 â\8b\93 f2 â\89¡ f).
+lemma sor_eq_repl_fwd3: â\88\80f1,f2. eq_repl_fwd â\80¦ (λf. f1 â\8b\93 f2 â\89\98 f).
#f1 #f2 @eq_repl_sym /2 width=3 by sor_eq_repl_back3/
qed-.
-corec lemma sor_idem: â\88\80f. f â\8b\93 f â\89¡ f.
+corec lemma sor_idem: â\88\80f. f â\8b\93 f â\89\98 f.
#f cases (pn_split f) * #g #H
[ @(sor_pp … H H H) | @(sor_nn … H H H) ] -H //
qed.
-corec lemma sor_comm: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89¡ f â\86\92 f2 â\8b\93 f1 â\89¡ f.
+corec lemma sor_comm: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 f2 â\8b\93 f1 â\89\98 f.
#f1 #f2 #f * -f1 -f2 -f
#f1 #f2 #f #g1 #g2 #g #Hf * * * -g1 -g2 -g
[ @sor_pp | @sor_pn | @sor_np | @sor_nn ] /2 width=7 by/
(* Properties with tail *****************************************************)
-lemma sor_tl: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89¡ f â\86\92 ⫱f1 â\8b\93 ⫱f2 â\89¡ ⫱f.
+lemma sor_tl: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ⫱f1 â\8b\93 ⫱f2 â\89\98 ⫱f.
#f1 cases (pn_split f1) * #g1 #H1
#f2 cases (pn_split f2) * #g2 #H2
#f #Hf
] -Hf #g #Hg #H destruct //
qed.
-lemma sor_xxn_tl: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g → ∀f. ⫯f = g →
- (â\88\83â\88\83f1,f2. f1 â\8b\93 f2 â\89¡ f & ⫯f1 = g1 & ⫱g2 = f2) ∨
- (â\88\83â\88\83f1,f2. f1 â\8b\93 f2 â\89¡ f & ⫱g1 = f1 & ⫯f2 = g2).
+lemma sor_xxn_tl: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g → ∀f. ⫯f = g →
+ (â\88\83â\88\83f1,f2. f1 â\8b\93 f2 â\89\98 f & ⫯f1 = g1 & ⫱g2 = f2) ∨
+ (â\88\83â\88\83f1,f2. f1 â\8b\93 f2 â\89\98 f & ⫱g1 = f1 & ⫯f2 = g2).
#g1 #g2 #g #H #f #H0 elim (sor_inv_xxn … H … H0) -H -H0 *
/3 width=5 by ex3_2_intro, or_introl, or_intror/
qed-.
-lemma sor_xnx_tl: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g → ∀f2. ⫯f2 = g2 →
- â\88\83â\88\83f1,f. f1 â\8b\93 f2 â\89¡ f & ⫱g1 = f1 & ⫯f = g.
+lemma sor_xnx_tl: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g → ∀f2. ⫯f2 = g2 →
+ â\88\83â\88\83f1,f. f1 â\8b\93 f2 â\89\98 f & ⫱g1 = f1 & ⫯f = g.
#g1 elim (pn_split g1) * #f1 #H1 #g2 #g #H #f2 #H2
[ elim (sor_inv_pnx … H … H1 H2) | elim (sor_inv_nnx … H … H1 H2) ] -g2
/3 width=5 by ex3_2_intro/
qed-.
-lemma sor_nxx_tl: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g → ∀f1. ⫯f1 = g1 →
- â\88\83â\88\83f2,f. f1 â\8b\93 f2 â\89¡ f & ⫱g2 = f2 & ⫯f = g.
+lemma sor_nxx_tl: â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g → ∀f1. ⫯f1 = g1 →
+ â\88\83â\88\83f2,f. f1 â\8b\93 f2 â\89\98 f & ⫱g2 = f2 & ⫯f = g.
#g1 #g2 elim (pn_split g2) * #f2 #H2 #g #H #f1 #H1
[ elim (sor_inv_npx … H … H1 H2) | elim (sor_inv_nnx … H … H1 H2) ] -g1
/3 width=5 by ex3_2_intro/
(* Properties with iterated tail ********************************************)
-lemma sor_tls: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89¡ f →
- â\88\80n. ⫱*[n]f1 â\8b\93 ⫱*[n]f2 â\89¡ ⫱*[n]f.
+lemma sor_tls: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f →
+ â\88\80n. ⫱*[n]f1 â\8b\93 ⫱*[n]f2 â\89\98 ⫱*[n]f.
#f1 #f2 #f #Hf #n elim n -n /2 width=1 by sor_tl/
qed.
(* Properies with test for identity *****************************************)
-corec lemma sor_isid_sn: â\88\80f1. ð\9d\90\88â¦\83f1â¦\84 â\86\92 â\88\80f2. f1 â\8b\93 f2 â\89¡ f2.
+corec lemma sor_isid_sn: â\88\80f1. ð\9d\90\88â¦\83f1â¦\84 â\86\92 â\88\80f2. f1 â\8b\93 f2 â\89\98 f2.
#f1 * -f1
#f1 #g1 #Hf1 #H1 #f2 cases (pn_split f2) *
/3 width=7 by sor_pp, sor_pn/
qed.
-corec lemma sor_isid_dx: â\88\80f2. ð\9d\90\88â¦\83f2â¦\84 â\86\92 â\88\80f1. f1 â\8b\93 f2 â\89¡ f1.
+corec lemma sor_isid_dx: â\88\80f2. ð\9d\90\88â¦\83f2â¦\84 â\86\92 â\88\80f1. f1 â\8b\93 f2 â\89\98 f1.
#f2 * -f2
#f2 #g2 #Hf2 #H2 #f1 cases (pn_split f1) *
/3 width=7 by sor_pp, sor_np/
qed.
-lemma sor_isid: â\88\80f1,f2,f. ð\9d\90\88â¦\83f1â¦\84 â\86\92 ð\9d\90\88â¦\83f2â¦\84 â\86\92 ð\9d\90\88â¦\83fâ¦\84 â\86\92 f1 â\8b\93 f2 â\89¡ f.
+lemma sor_isid: â\88\80f1,f2,f. ð\9d\90\88â¦\83f1â¦\84 â\86\92 ð\9d\90\88â¦\83f2â¦\84 â\86\92 ð\9d\90\88â¦\83fâ¦\84 â\86\92 f1 â\8b\93 f2 â\89\98 f.
/4 width=3 by sor_eq_repl_back2, sor_eq_repl_back1, isid_inv_eq_repl/ qed.
(* Inversion lemmas with tail ***********************************************)
-lemma sor_inv_tl_sn: â\88\80f1,f2,f. ⫱f1 â\8b\93 f2 â\89¡ f â\86\92 f1 â\8b\93 ⫯f2 â\89¡ ⫯f.
+lemma sor_inv_tl_sn: â\88\80f1,f2,f. ⫱f1 â\8b\93 f2 â\89\98 f â\86\92 f1 â\8b\93 ⫯f2 â\89\98 ⫯f.
#f1 #f2 #f elim (pn_split f1) *
#g1 #H destruct /2 width=7 by sor_pn, sor_nn/
qed-.
-lemma sor_inv_tl_dx: â\88\80f1,f2,f. f1 â\8b\93 ⫱f2 â\89¡ f â\86\92 ⫯f1 â\8b\93 f2 â\89¡ ⫯f.
+lemma sor_inv_tl_dx: â\88\80f1,f2,f. f1 â\8b\93 ⫱f2 â\89\98 f â\86\92 ⫯f1 â\8b\93 f2 â\89\98 ⫯f.
#f1 #f2 #f elim (pn_split f2) *
#g2 #H destruct /2 width=7 by sor_np, sor_nn/
qed-.
(* Inversion lemmas with test for identity **********************************)
-lemma sor_isid_inv_sn: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89¡ f → 𝐈⦃f1⦄ → f2 ≗ f.
+lemma sor_isid_inv_sn: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f → 𝐈⦃f1⦄ → f2 ≗ f.
/3 width=4 by sor_isid_sn, sor_mono/
qed-.
-lemma sor_isid_inv_dx: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89¡ f → 𝐈⦃f2⦄ → f1 ≗ f.
+lemma sor_isid_inv_dx: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f → 𝐈⦃f2⦄ → f1 ≗ f.
/3 width=4 by sor_isid_dx, sor_mono/
qed-.
-corec lemma sor_fwd_isid1: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89¡ f → 𝐈⦃f⦄ → 𝐈⦃f1⦄.
+corec lemma sor_fwd_isid1: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f → 𝐈⦃f⦄ → 𝐈⦃f1⦄.
#f1 #f2 #f * -f1 -f2 -f
#f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H #Hg
[ /4 width=6 by isid_inv_push, isid_push/ ]
cases (isid_inv_next … Hg … H)
qed-.
-corec lemma sor_fwd_isid2: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89¡ f → 𝐈⦃f⦄ → 𝐈⦃f2⦄.
+corec lemma sor_fwd_isid2: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f → 𝐈⦃f⦄ → 𝐈⦃f2⦄.
#f1 #f2 #f * -f1 -f2 -f
#f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H #Hg
[ /4 width=6 by isid_inv_push, isid_push/ ]
cases (isid_inv_next … Hg … H)
qed-.
-lemma sor_inv_isid3: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89¡ f → 𝐈⦃f⦄ → 𝐈⦃f1⦄ ∧ 𝐈⦃f2⦄.
+lemma sor_inv_isid3: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f → 𝐈⦃f⦄ → 𝐈⦃f1⦄ ∧ 𝐈⦃f2⦄.
/3 width=4 by sor_fwd_isid2, sor_fwd_isid1, conj/ qed-.
(* Properties with finite colength assignment *******************************)
-lemma sor_fcla_ex: â\88\80f1,n1. ð\9d\90\82â¦\83f1â¦\84 â\89¡ n1 â\86\92 â\88\80f2,n2. ð\9d\90\82â¦\83f2â¦\84 â\89¡ n2 →
- â\88\83â\88\83f,n. f1 â\8b\93 f2 â\89¡ f & ð\9d\90\82â¦\83fâ¦\84 â\89¡ n & (n1 ∨ n2) ≤ n & n ≤ n1 + n2.
+lemma sor_fcla_ex: â\88\80f1,n1. ð\9d\90\82â¦\83f1â¦\84 â\89\98 n1 â\86\92 â\88\80f2,n2. ð\9d\90\82â¦\83f2â¦\84 â\89\98 n2 →
+ â\88\83â\88\83f,n. f1 â\8b\93 f2 â\89\98 f & ð\9d\90\82â¦\83fâ¦\84 â\89\98 n & (n1 ∨ n2) ≤ n & n ≤ n1 + n2.
#f1 #n1 #Hf1 elim Hf1 -f1 -n1 /3 width=6 by sor_isid_sn, ex4_2_intro/
#f1 #n1 #Hf1 #IH #f2 #n2 * -f2 -n2 /3 width=6 by fcla_push, fcla_next, ex4_2_intro, sor_isid_dx/
#f2 #n2 #Hf2 elim (IH … Hf2) -IH -Hf2 -Hf1 [2,4: #f #n <plus_n_Sm ] (**) (* full auto fails *)
]
qed-.
-lemma sor_fcla: â\88\80f1,n1. ð\9d\90\82â¦\83f1â¦\84 â\89¡ n1 â\86\92 â\88\80f2,n2. ð\9d\90\82â¦\83f2â¦\84 â\89¡ n2 â\86\92 â\88\80f. f1 â\8b\93 f2 â\89¡ f →
- â\88\83â\88\83n. ð\9d\90\82â¦\83fâ¦\84 â\89¡ n & (n1 ∨ n2) ≤ n & n ≤ n1 + n2.
+lemma sor_fcla: â\88\80f1,n1. ð\9d\90\82â¦\83f1â¦\84 â\89\98 n1 â\86\92 â\88\80f2,n2. ð\9d\90\82â¦\83f2â¦\84 â\89\98 n2 â\86\92 â\88\80f. f1 â\8b\93 f2 â\89\98 f →
+ â\88\83â\88\83n. ð\9d\90\82â¦\83fâ¦\84 â\89\98 n & (n1 ∨ n2) ≤ n & n ≤ n1 + n2.
#f1 #n1 #Hf1 #f2 #n2 #Hf2 #f #Hf elim (sor_fcla_ex … Hf1 … Hf2) -Hf1 -Hf2
/4 width=6 by sor_mono, fcla_eq_repl_back, ex3_intro/
qed-.
(* Forward lemmas with finite colength **************************************)
-lemma sor_fwd_fcla_sn_ex: â\88\80f,n. ð\9d\90\82â¦\83fâ¦\84 â\89¡ n â\86\92 â\88\80f1,f2. f1 â\8b\93 f2 â\89¡ f →
- â\88\83â\88\83n1. ð\9d\90\82â¦\83f1â¦\84 â\89¡ n1 & n1 ≤ n.
+lemma sor_fwd_fcla_sn_ex: â\88\80f,n. ð\9d\90\82â¦\83fâ¦\84 â\89\98 n â\86\92 â\88\80f1,f2. f1 â\8b\93 f2 â\89\98 f →
+ â\88\83â\88\83n1. ð\9d\90\82â¦\83f1â¦\84 â\89\98 n1 & n1 ≤ n.
#f #n #H elim H -f -n
[ /4 width=4 by sor_fwd_isid1, fcla_isid, ex2_intro/
| #f #n #_ #IH #f1 #f2 #H
]
qed-.
-lemma sor_fwd_fcla_dx_ex: â\88\80f,n. ð\9d\90\82â¦\83fâ¦\84 â\89¡ n â\86\92 â\88\80f1,f2. f1 â\8b\93 f2 â\89¡ f →
- â\88\83â\88\83n2. ð\9d\90\82â¦\83f2â¦\84 â\89¡ n2 & n2 ≤ n.
+lemma sor_fwd_fcla_dx_ex: â\88\80f,n. ð\9d\90\82â¦\83fâ¦\84 â\89\98 n â\86\92 â\88\80f1,f2. f1 â\8b\93 f2 â\89\98 f →
+ â\88\83â\88\83n2. ð\9d\90\82â¦\83f2â¦\84 â\89\98 n2 & n2 ≤ n.
/3 width=4 by sor_fwd_fcla_sn_ex, sor_comm/ qed-.
(* Properties with test for finite colength *********************************)
-lemma sor_isfin_ex: â\88\80f1,f2. ð\9d\90\85â¦\83f1â¦\84 â\86\92 ð\9d\90\85â¦\83f2â¦\84 â\86\92 â\88\83â\88\83f. f1 â\8b\93 f2 â\89¡ f & 𝐅⦃f⦄.
+lemma sor_isfin_ex: â\88\80f1,f2. ð\9d\90\85â¦\83f1â¦\84 â\86\92 ð\9d\90\85â¦\83f2â¦\84 â\86\92 â\88\83â\88\83f. f1 â\8b\93 f2 â\89\98 f & 𝐅⦃f⦄.
#f1 #f2 * #n1 #H1 * #n2 #H2 elim (sor_fcla_ex … H1 … H2) -H1 -H2
/3 width=4 by ex2_intro, ex_intro/
qed-.
-lemma sor_isfin: â\88\80f1,f2. ð\9d\90\85â¦\83f1â¦\84 â\86\92 ð\9d\90\85â¦\83f2â¦\84 â\86\92 â\88\80f. f1 â\8b\93 f2 â\89¡ f → 𝐅⦃f⦄.
+lemma sor_isfin: â\88\80f1,f2. ð\9d\90\85â¦\83f1â¦\84 â\86\92 ð\9d\90\85â¦\83f2â¦\84 â\86\92 â\88\80f. f1 â\8b\93 f2 â\89\98 f → 𝐅⦃f⦄.
#f1 #f2 #Hf1 #Hf2 #f #Hf elim (sor_isfin_ex … Hf1 … Hf2) -Hf1 -Hf2
/3 width=6 by sor_mono, isfin_eq_repl_back/
qed-.
(* Forward lemmas with test for finite colength *****************************)
-lemma sor_fwd_isfin_sn: â\88\80f. ð\9d\90\85â¦\83fâ¦\84 â\86\92 â\88\80f1,f2. f1 â\8b\93 f2 â\89¡ f → 𝐅⦃f1⦄.
+lemma sor_fwd_isfin_sn: â\88\80f. ð\9d\90\85â¦\83fâ¦\84 â\86\92 â\88\80f1,f2. f1 â\8b\93 f2 â\89\98 f → 𝐅⦃f1⦄.
#f * #n #Hf #f1 #f2 #H
elim (sor_fwd_fcla_sn_ex … Hf … H) -f -f2 /2 width=2 by ex_intro/
qed-.
-lemma sor_fwd_isfin_dx: â\88\80f. ð\9d\90\85â¦\83fâ¦\84 â\86\92 â\88\80f1,f2. f1 â\8b\93 f2 â\89¡ f → 𝐅⦃f2⦄.
+lemma sor_fwd_isfin_dx: â\88\80f. ð\9d\90\85â¦\83fâ¦\84 â\86\92 â\88\80f1,f2. f1 â\8b\93 f2 â\89\98 f → 𝐅⦃f2⦄.
#f * #n #Hf #f1 #f2 #H
elim (sor_fwd_fcla_dx_ex … Hf … H) -f -f1 /2 width=2 by ex_intro/
qed-.
(* Inversion lemmas with test for finite colength ***************************)
-lemma sor_inv_isfin3: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89¡ f → 𝐅⦃f⦄ → 𝐅⦃f1⦄ ∧ 𝐅⦃f2⦄.
+lemma sor_inv_isfin3: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f → 𝐅⦃f⦄ → 𝐅⦃f1⦄ ∧ 𝐅⦃f2⦄.
/3 width=4 by sor_fwd_isfin_dx, sor_fwd_isfin_sn, conj/ qed-.
(* Inversion lemmas with inclusion ******************************************)
-corec lemma sor_inv_sle_sn: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89¡ f → f1 ⊆ f.
+corec lemma sor_inv_sle_sn: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f → f1 ⊆ f.
#f1 #f2 #f * -f1 -f2 -f
#f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0
/3 width=5 by sle_push, sle_next, sle_weak/
qed-.
-corec lemma sor_inv_sle_dx: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89¡ f → f2 ⊆ f.
+corec lemma sor_inv_sle_dx: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f → f2 ⊆ f.
#f1 #f2 #f * -f1 -f2 -f
#f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H0
/3 width=5 by sle_push, sle_next, sle_weak/
qed-.
-lemma sor_inv_sle_sn_trans: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89¡ f → ∀g. g ⊆ f1 → g ⊆ f.
+lemma sor_inv_sle_sn_trans: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f → ∀g. g ⊆ f1 → g ⊆ f.
/3 width=4 by sor_inv_sle_sn, sle_trans/ qed-.
-lemma sor_inv_sle_dx_trans: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89¡ f → ∀g. g ⊆ f2 → g ⊆ f.
+lemma sor_inv_sle_dx_trans: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f → ∀g. g ⊆ f2 → g ⊆ f.
/3 width=4 by sor_inv_sle_dx, sle_trans/ qed-.
-axiom sor_inv_sle: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89¡ f → ∀g. f1 ⊆ g → f2 ⊆ g → f ⊆ g.
+axiom sor_inv_sle: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f → ∀g. f1 ⊆ g → f2 ⊆ g → f ⊆ g.
(* Properties with inclusion ************************************************)
-corec lemma sor_sle_dx: â\88\80f1,f2. f1 â\8a\86 f2 â\86\92 f1 â\8b\93 f2 â\89¡ f2.
+corec lemma sor_sle_dx: â\88\80f1,f2. f1 â\8a\86 f2 â\86\92 f1 â\8b\93 f2 â\89\98 f2.
#f1 #f2 * -f1 -f2 /3 width=7 by sor_pp, sor_nn, sor_pn/
qed.
-corec lemma sor_sle_sn: â\88\80f1,f2. f1 â\8a\86 f2 â\86\92 f2 â\8b\93 f1 â\89¡ f2.
+corec lemma sor_sle_sn: â\88\80f1,f2. f1 â\8a\86 f2 â\86\92 f2 â\8b\93 f1 â\89\98 f2.
#f1 #f2 * -f1 -f2 /3 width=7 by sor_pp, sor_nn, sor_np/
qed.
(* Main properties **********************************************************)
axiom monotonic_sle_sor: ∀f1,g1. f1 ⊆ g1 → ∀f2,g2. f2 ⊆ g2 →
- â\88\80f. f1 â\8b\93 f2 â\89¡ f â\86\92 â\88\80g. g1 â\8b\93 g2 â\89¡ g → f ⊆ g.
+ â\88\80f. f1 â\8b\93 f2 â\89\98 f â\86\92 â\88\80g. g1 â\8b\93 g2 â\89\98 g → f ⊆ g.
-axiom sor_assoc_dx: â\88\80f0,f3,f4. f0 â\8b\93 f3 â\89¡ f4 →
- â\88\80f1,f2. f1 â\8b\93 f2 â\89¡ f0 →
- â\88\80f. f2 â\8b\93 f3 â\89¡ f â\86\92 f1 â\8b\93 f â\89¡ f4.
+axiom sor_assoc_dx: â\88\80f0,f3,f4. f0 â\8b\93 f3 â\89\98 f4 →
+ â\88\80f1,f2. f1 â\8b\93 f2 â\89\98 f0 →
+ â\88\80f. f2 â\8b\93 f3 â\89\98 f â\86\92 f1 â\8b\93 f â\89\98 f4.
-axiom sor_assoc_sn: â\88\80f1,f0,f4. f1 â\8b\93 f0 â\89¡ f4 →
- â\88\80f2, f3. f2 â\8b\93 f3 â\89¡ f0 →
- â\88\80f. f1 â\8b\93 f2 â\89¡ f â\86\92 f â\8b\93 f3 â\89¡ f4.
+axiom sor_assoc_sn: â\88\80f1,f0,f4. f1 â\8b\93 f0 â\89\98 f4 →
+ â\88\80f2, f3. f2 â\8b\93 f3 â\89\98 f0 →
+ â\88\80f. f1 â\8b\93 f2 â\89\98 f â\86\92 f â\8b\93 f3 â\89\98 f4.
lemma sor_comm_23: ∀f0,f1,f2,f3,f4,f.
- f0â\8b\93f4 â\89¡ f1 â\86\92 f1â\8b\93f2 â\89¡ f â\86\92 f0â\8b\93f2 â\89¡ f3 â\86\92 f3â\8b\93f4 â\89¡ f.
+ f0â\8b\93f4 â\89\98 f1 â\86\92 f1â\8b\93f2 â\89\98 f â\86\92 f0â\8b\93f2 â\89\98 f3 â\86\92 f3â\8b\93f4 â\89\98 f.
/4 width=6 by sor_comm, sor_assoc_dx/ qed-.
-corec theorem sor_comm_23_idem: â\88\80f0,f1,f2. f0 â\8b\93 f1 â\89¡ f2 →
- â\88\80f. f1 â\8b\93 f2 â\89¡ f â\86\92 f1 â\8b\93 f0 â\89¡ f.
+corec theorem sor_comm_23_idem: â\88\80f0,f1,f2. f0 â\8b\93 f1 â\89\98 f2 →
+ â\88\80f. f1 â\8b\93 f2 â\89\98 f â\86\92 f1 â\8b\93 f0 â\89\98 f.
#f0 #f1 #f2 * -f0 -f1 -f2
#f0 #f1 #f2 #g0 #g1 #g2 #Hf2 #H0 #H1 #H2 #g #Hg
[ cases (sor_inv_ppx … Hg … H1 H2)
/3 width=7 by sor_nn, sor_np, sor_pn, sor_pp/
qed-.
-corec theorem sor_coll_dx: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89¡ f â\86\92 â\88\80g1,g2,g. g1 â\8b\93 g2 â\89¡ g →
- â\88\80g0. g1 â\8b\93 g0 â\89¡ f1 â\86\92 g2 â\8b\93 g0 â\89¡ f2 â\86\92 g â\8b\93 g0 â\89¡ f.
+corec theorem sor_coll_dx: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 â\88\80g1,g2,g. g1 â\8b\93 g2 â\89\98 g →
+ â\88\80g0. g1 â\8b\93 g0 â\89\98 f1 â\86\92 g2 â\8b\93 g0 â\89\98 f2 â\86\92 g â\8b\93 g0 â\89\98 f.
#f1 #f2 #f cases (pn_split f) * #x #Hx #Hf #g1 #g2 #g #Hg #g0 #Hf1 #Hf2
[ cases (sor_inv_xxp … Hf … Hx) -Hf #x1 #x2 #Hf #Hx1 #Hx2
cases (sor_inv_xxp … Hf1 … Hx1) -f1 #y1 #y0 #Hf1 #Hy1 #Hy0
]
qed-.
-corec theorem sor_distr_dx: â\88\80g0,g1,g2,g. g1 â\8b\93 g2 â\89¡ g →
- â\88\80f1,f2,f. g1 â\8b\93 g0 â\89¡ f1 â\86\92 g2 â\8b\93 g0 â\89¡ f2 â\86\92 g â\8b\93 g0 â\89¡ f →
- f1 â\8b\93 f2 â\89¡ f.
+corec theorem sor_distr_dx: â\88\80g0,g1,g2,g. g1 â\8b\93 g2 â\89\98 g →
+ â\88\80f1,f2,f. g1 â\8b\93 g0 â\89\98 f1 â\86\92 g2 â\8b\93 g0 â\89\98 f2 â\86\92 g â\8b\93 g0 â\89\98 f →
+ f1 â\8b\93 f2 â\89\98 f.
#g0 cases (pn_split g0) * #y0 #H0 #g1 #g2 #g
[ * -g1 -g2 -g #y1 #y2 #y #g1 #g2 #g #Hy #Hy1 #Hy2 #Hy #f1 #f2 #f #Hf1 #Hf2 #Hf
[ cases (sor_inv_ppx … Hf1 … Hy1 H0) -g1
(* Properties with finite colength assignment ***************************)
-lemma fcla_uni: â\88\80n. ð\9d\90\82â¦\83ð\9d\90\94â\9d´nâ\9dµâ¦\84 â\89¡ n.
+lemma fcla_uni: â\88\80n. ð\9d\90\82â¦\83ð\9d\90\94â\9d´nâ\9dµâ¦\84 â\89\98 n.
#n elim n -n /2 width=1 by fcla_isid, fcla_next/
qed.
[ { "" * } {
[ "rtmap" "rtmap_eq ( ? ≗ ? )" "rtmap_pushs ( ↑*[?]? )" "rtmap_nexts ( ⫯*[?]? )"
"rtmap_tl ( ⫱? )" "rtmap_tls ( ⫱*[?]? )" "rtmap_isid ( 𝐈⦃?⦄ )" "rtmap_id" "rtmap_isdiv ( 𝛀⦃?⦄ )"
- "rtmap_fcla ( ð\9d\90\82â¦\83?â¦\84 â\89¡ ? )" "rtmap_isfin ( 𝐅⦃?⦄ )" "rtmap_isuni ( 𝐔⦃?⦄ )" "rtmap_uni ( 𝐔❴?❵ )"
- "rtmap_sle ( ? â\8a\86 ? )" "rtmap_sdj ( ? â\88¥ ? )" "rtmap_sand ( ? â\8b\92 ? â\89¡ ? )" "rtmap_sor ( ? â\8b\93 ? â\89¡ ? )"
- "rtmap_at ( @â¦\83?,?â¦\84 â\89¡ ? )" "rtmap_istot ( ð\9d\90\93â¦\83?â¦\84 )" "rtmap_after ( ? â\8a\9a ? â\89¡ ? )" "rtmap_coafter ( ? ~â\8a\9a ? â\89¡ ? )"
+ "rtmap_fcla ( ð\9d\90\82â¦\83?â¦\84 â\89\98 ? )" "rtmap_isfin ( 𝐅⦃?⦄ )" "rtmap_isuni ( 𝐔⦃?⦄ )" "rtmap_uni ( 𝐔❴?❵ )"
+ "rtmap_sle ( ? â\8a\86 ? )" "rtmap_sdj ( ? â\88¥ ? )" "rtmap_sand ( ? â\8b\92 ? â\89\98 ? )" "rtmap_sor ( ? â\8b\93 ? â\89\98 ? )"
+ "rtmap_at ( @â¦\83?,?â¦\84 â\89\98 ? )" "rtmap_istot ( ð\9d\90\93â¦\83?â¦\84 )" "rtmap_after ( ? â\8a\9a ? â\89\98 ? )" "rtmap_coafter ( ? ~â\8a\9a ? â\89\98 ? )"
* ]
[ "nstream ( ↑? ) ( ⫯? )" "nstream_eq" "" "" "" "" "nstream_isid" "nstream_id ( 𝐈𝐝 )" ""
"" "" "" "" "" "" "" "nstream_sor" "" "nstream_istot ( ?@❴?❵ )" "nstream_after ( ? ∘ ? )" "nstream_coafter ( ? ~∘ ? )"
* ]
(*
- [ "trace ( â\88¥?â\88¥ )" "trace_at ( @â¦\83?,?â¦\84 â\89¡ ? )" "trace_after ( ? â\8a\9a ? â\89¡ ? )" "trace_isid ( 𝐈⦃?⦄ )" "trace_isun ( 𝐔⦃?⦄ )"
- "trace_sle ( ? â\8a\86 ? )" "trace_sor ( ? â\8b\93 ? â\89¡ ? )" "trace_snot ( ∁ ? )" * ]
+ [ "trace ( â\88¥?â\88¥ )" "trace_at ( @â¦\83?,?â¦\84 â\89\98 ? )" "trace_after ( ? â\8a\9a ? â\89\98 ? )" "trace_isid ( 𝐈⦃?⦄ )" "trace_isun ( 𝐔⦃?⦄ )"
+ "trace_sle ( ? â\8a\86 ? )" "trace_sor ( ? â\8b\93 ? â\89\98 ? )" "trace_snot ( ∁ ? )" * ]
*)
- [ "mr2" "mr2_at ( @â¦\83?,?â¦\84 â\89¡ ? )" "mr2_plus ( ? + ? )" "mr2_minus ( ? â\96 ? â\89¡ ? )" * ]
+ [ "mr2" "mr2_at ( @â¦\83?,?â¦\84 â\89\98 ? )" "mr2_plus ( ? + ? )" "mr2_minus ( ? â\96 ? â\89\98 ? )" * ]
}
]
}