(* Basic properties *********************************************************)
-lemma Delta_lifts (f) (s): â¬\86*[f] (Delta s) ≘ (Delta s).
+lemma Delta_lifts (f) (s): â\87§*[f] (Delta s) ≘ (Delta s).
/4 width=1 by lifts_lref, lifts_bind, lifts_flat/ qed.
(* Basic inversion properties ***********************************************)
(* Basic properties *********************************************************)
lemma ApplDelta_lifts (f:rtmap) (s0) (s):
- â¬\86*[f] (ApplDelta s0 s) ≘ (ApplDelta s0 s).
+ â\87§*[f] (ApplDelta s0 s) ≘ (ApplDelta s0 s).
/5 width=1 by lifts_sort, lifts_lref, lifts_bind, lifts_flat/ qed.
lemma cpr_ApplOmega_12 (h) (G) (L) (s0) (s): ⦃G,L⦄ ⊢ ApplOmega1 s0 s ➡[h] ApplOmega2 s0 s.
(* Main properties **********************************************************)
-theorem flifts_lifts: â\88\80T,f. â¬\86*[f]T ≘ ↑*[f]T.
+theorem flifts_lifts: â\88\80T,f. â\87§*[f]T ≘ ↑*[f]T.
#T elim T -T *
/2 width=1 by lifts_sort, lifts_lref, lifts_gref, lifts_bind, lifts_flat/
qed.
(* Main inversion properties ************************************************)
-theorem flifts_inv_lifts: â\88\80f,T1,T2. â¬\86*[f]T1 ≘ T2 → ↑*[f]T1 = T2.
+theorem flifts_inv_lifts: â\88\80f,T1,T2. â\87§*[f]T1 ≘ T2 → ↑*[f]T1 = T2.
#f #T1 #T2 #H elim H -f -T1 -T2 //
[ #f #i1 #i2 #H <(at_inv_total … H) //
| #f #p #I #V1 #V2 #T1 #T2 #_ #_ #IHV #IHT <IHV <IHT -V2 -T2 //
d2 ≤ d1 → ↑[d2,h2]↑[d1,h1]T = ↑[h2+d1,h1]↑[d2,h2]T.
/3 width=1 by flifts_comp, basic_swap/ qed-.
(*
-lemma flift_join: â\88\80e1,e2,T. â¬\86[e1,e2] ↑[0,e1] T ≡ ↑[0,e1 + e2] T.
+lemma flift_join: â\88\80e1,e2,T. â\87§[e1,e2] ↑[0,e1] T ≡ ↑[0,e1 + e2] T.
#e1 #e2 #T
lapply (flift_lift T 0 (e1+e2)) #H
elim (lift_split … H e1 e1) -H // #U #H
(* Properties with relocation ***********************************************)
lemma mf_delta_drops (h) (G): ∀K,V1,V2. ⦃G,K⦄ ⊢ V1 ➡[h] V2 →
- â\88\80T,L,l. â¬\87*[l] L ≘ K.ⓓV1 →
+ â\88\80T,L,l. â\87©*[l] L ≘ K.ⓓV1 →
∀gv,lv. ⦃G,L⦄ ⊢ ●[gv,⇡[l←#l]lv]T ➡[h] ●[gv,⇡[l←↑[↑l]V2]lv]T.
#h #G #K #V1 #V2 #HV #T elim T -T * //
[ #i #L #l #HKL #gv #lv
(* Forward lemmas with generic relocation ***********************************)
fact lifts_fwd_vpush_aux (M): is_model M → is_extensional M →
- â\88\80f,T1,T2. â¬\86*[f] T1 ≘ T2 → ∀m. 𝐁❴m,1❵ = f →
+ â\88\80f,T1,T2. â\87§*[f] T1 ≘ T2 → ∀m. 𝐁❴m,1❵ = f →
∀gv,lv,d. ⟦T1⟧[gv,lv] ≗{M} ⟦T2⟧[gv,⫯[m←d]lv].
#M #H1M #H2M #f #T1 #T2 #H elim H -f -T1 -T2
[ #f #s #m #Hf #gv #lv #d
qed-.
lemma lifts_SO_fwd_vpush (M) (gv): is_model M → is_extensional M →
- â\88\80T1,T2. â¬\86*[1] T1 ≘ T2 →
+ â\88\80T1,T2. â\87§*[1] T1 ≘ T2 →
∀lv,d. ⟦T1⟧[gv,lv] ≗{M} ⟦T2⟧[gv,⫯[0←d]lv].
/2 width=3 by lifts_fwd_vpush_aux/ qed-.
fact cnv_cpm_conf_lpr_atom_delta_aux (h) (a) (G) (L) (i):
(∀G0,L0,T0. ⦃G,L,#i⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
⦃G,L⦄⊢#i![h,a] →
- â\88\80K,V. â¬\87*[i]L ≘ K.ⓓV →
+ â\88\80K,V. â\87©*[i]L ≘ K.ⓓV →
∀n,XV. ⦃G,K⦄ ⊢ V ➡[n,h] XV →
- â\88\80X. â¬\86*[↑i]XV ≘ X →
+ â\88\80X. â\87§*[↑i]XV ≘ X →
∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 →
∃∃T. ⦃G,L1⦄ ⊢ #i ➡*[n,h] T & ⦃G,L2⦄ ⊢ X ➡*[h] T.
#h #a #G #L #i #IH #HT #K #V #HLK #n #XV #HVX #X #HXV #L1 #HL1 #L2 #HL2
fact cnv_cpm_conf_lpr_atom_ell_aux (h) (a) (G) (L) (i):
(∀G0,L0,T0. ⦃G,L,#i⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
⦃G,L⦄⊢#i![h,a] →
- â\88\80K,W. â¬\87*[i]L ≘ K.ⓛW →
+ â\88\80K,W. â\87©*[i]L ≘ K.ⓛW →
∀n,XW. ⦃G,K⦄ ⊢ W ➡[n,h] XW →
- â\88\80X. â¬\86*[↑i]XW ≘ X →
+ â\88\80X. â\87§*[↑i]XW ≘ X →
∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 →
∃∃T. ⦃G,L1⦄ ⊢ #i ➡*[↑n,h] T & ⦃G,L2⦄ ⊢ X ➡*[h] T.
#h #a #G #L #i #IH #HT #K #W #HLK #n #XW #HWX #X #HXW #L1 #HL1 #L2 #HL2
fact cnv_cpm_conf_lpr_delta_delta_aux (h) (a) (I) (G) (L) (i):
(∀G0,L0,T0. ⦃G,L,#i⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
⦃G,L⦄⊢#i![h,a] →
- â\88\80K1,V1. â¬\87*[i]L â\89\98 K1.â\93\91{I}V1 â\86\92 â\88\80K2,V2. â¬\87*[i]L ≘ K2.ⓑ{I}V2 →
+ â\88\80K1,V1. â\87©*[i]L â\89\98 K1.â\93\91{I}V1 â\86\92 â\88\80K2,V2. â\87©*[i]L ≘ K2.ⓑ{I}V2 →
∀n1,XV1. ⦃G,K1⦄ ⊢ V1 ➡[n1,h] XV1 → ∀n2,XV2. ⦃G,K2⦄ ⊢ V2 ➡[n2,h] XV2 →
- â\88\80X1. â¬\86*[â\86\91i]XV1 â\89\98 X1 â\86\92 â\88\80X2. â¬\86*[↑i]XV2 ≘ X2 →
+ â\88\80X1. â\87§*[â\86\91i]XV1 â\89\98 X1 â\86\92 â\88\80X2. â\87§*[↑i]XV2 ≘ X2 →
∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 →
∃∃T. ⦃G,L1⦄ ⊢ X1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ X2 ➡*[n1-n2,h] T.
#h #a #I #G #L #i #IH #HT
qed-.
fact cnv_cpm_conf_lpr_delta_ell_aux (L) (K1) (K2) (V) (W) (i):
- â¬\87*[i]L â\89\98 K1.â\93\93V â\86\92 â¬\87*[i]L ≘ K2.ⓛW → ⊥.
+ â\87©*[i]L â\89\98 K1.â\93\93V â\86\92 â\87©*[i]L ≘ K2.ⓛW → ⊥.
#L #K1 #K2 #V #W #i #HLK1 #HLK2
lapply (drops_mono … HLK2 … HLK1) -L -i #H destruct
qed-.
(∀G0,L0,T0. ⦃G,L,+ⓓV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
⦃G,L⦄ ⊢ +ⓓV.T ![h,a] →
∀V1. ⦃G,L⦄ ⊢V ➡[h] V1 → ∀n1,T1. ⦃G,L.ⓓV⦄ ⊢ T ➡[n1,h] T1 →
- â\88\80T2. â¬\86*[1]T2 ≘ T → ∀n2,XT2. ⦃G,L⦄ ⊢ T2 ➡[n2,h] XT2 →
+ â\88\80T2. â\87§*[1]T2 ≘ T → ∀n2,XT2. ⦃G,L⦄ ⊢ T2 ➡[n2,h] XT2 →
∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 →
∃∃T. ⦃G,L1⦄ ⊢ +ⓓV1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ XT2 ➡*[n1-n2,h] T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
fact cnv_cpm_conf_lpr_zeta_zeta_aux (h) (a) (G) (L) (V) (T):
(∀G0,L0,T0. ⦃G,L,+ⓓV.T⦄ >[h] ⦃G0,L0,T0⦄ → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
⦃G,L⦄ ⊢ +ⓓV.T ![h,a] →
- â\88\80T1. â¬\86*[1]T1 â\89\98 T â\86\92 â\88\80T2. â¬\86*[1]T2 ≘ T →
+ â\88\80T1. â\87§*[1]T1 â\89\98 T â\86\92 â\88\80T2. â\87§*[1]T2 ≘ T →
∀n1,XT1. ⦃G,L⦄ ⊢ T1 ➡[n1,h] XT1 → ∀n2,XT2. ⦃G,L⦄ ⊢ T2 ➡[n2,h] XT2 →
∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 →
∃∃T. ⦃G,L1⦄ ⊢ XT1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ XT2 ➡*[n1-n2,h] T.
∀V1. ⦃G,L⦄ ⊢ V ➡[h] V1 → ∀V2. ⦃G,L⦄ ⊢ V ➡[h] V2 →
∀W2. ⦃G,L⦄ ⊢ W ➡[h] W2 →
∀n1,T1. ⦃G,L⦄ ⊢ ⓓ{p}W.T ➡[n1,h] T1 → ∀n2,T2. ⦃G,L.ⓓW⦄ ⊢ T ➡[n2,h] T2 →
- â\88\80U2. â¬\86*[1]V2 ≘ U2 →
+ â\88\80U2. â\87§*[1]V2 ≘ U2 →
∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 →
∃∃T. ⦃G,L1⦄ ⊢ ⓐV1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ ⓓ{p}W2.ⓐU2.T2 ➡*[n1-n2,h] T.
#h #a #p #G0 #L0 #V0 #W0 #T0 #IH #H0
∀V1. ⦃G,L⦄ ⊢ V ➡[h] V1 → ∀V2. ⦃G,L⦄ ⊢ V ➡[h] V2 →
∀W1. ⦃G,L⦄ ⊢ W ➡[h] W1 → ∀W2. ⦃G,L⦄ ⊢ W ➡[h] W2 →
∀n1,T1. ⦃G,L.ⓓW⦄ ⊢ T ➡[n1,h] T1 → ∀n2,T2. ⦃G,L.ⓓW⦄ ⊢ T ➡[n2,h] T2 →
- â\88\80U1. â¬\86*[1]V1 â\89\98 U1 â\86\92 â\88\80U2. â¬\86*[1]V2 ≘ U2 →
+ â\88\80U1. â\87§*[1]V1 â\89\98 U1 â\86\92 â\88\80U2. â\87§*[1]V2 ≘ U2 →
∀L1. ⦃G,L⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G,L⦄ ⊢ ➡[h] L2 →
∃∃T. ⦃G,L1⦄ ⊢ ⓓ{p}W1.ⓐU1.T1 ➡*[n2-n1,h] T & ⦃G,L2⦄ ⊢ ⓓ{p}W2.ⓐU2.T2 ➡*[n1-n2,h] T.
#h #a #p #G0 #L0 #V0 #W0 #T0 #IH #H0
(* Basic_2A1: uses: snv_lref *)
lemma cnv_lref_drops (h) (a) (G):
∀I,K,V,i,L. ⦃G,K⦄ ⊢ V ![h,a] →
- â¬\87*[i] L ≘ K.ⓑ{I}V → ⦃G,L⦄ ⊢ #i ![h,a].
+ â\87©*[i] L ≘ K.ⓑ{I}V → ⦃G,L⦄ ⊢ #i ![h,a].
#h #a #G #I #K #V #i elim i -i
[ #L #HV #H
lapply (drops_fwd_isid … H ?) -H // #H destruct
(* Basic_2A1: uses: snv_inv_lref *)
lemma cnv_inv_lref_drops (h) (a) (G):
∀i,L. ⦃G,L⦄ ⊢ #i ![h,a] →
- â\88\83â\88\83I,K,V. â¬\87*[i] L ≘ K.ⓑ{I}V & ⦃G,K⦄ ⊢ V ![h,a].
+ â\88\83â\88\83I,K,V. â\87©*[i] L ≘ K.ⓑ{I}V & ⦃G,K⦄ ⊢ V ![h,a].
#h #a #G #i elim i -i
[ #L #H
elim (cnv_inv_zero … H) -H #I #K #V #HV #H destruct
lemma cnv_inv_lref_pair (h) (a) (G):
∀i,L. ⦃G,L⦄ ⊢ #i ![h,a] →
- â\88\80I,K,V. â¬\87*[i] L ≘ K.ⓑ{I}V → ⦃G,K⦄ ⊢ V ![h,a].
+ â\88\80I,K,V. â\87©*[i] L ≘ K.ⓑ{I}V → ⦃G,K⦄ ⊢ V ![h,a].
#h #a #G #i #L #H #I #K #V #HLK
elim (cnv_inv_lref_drops … H) -H #Z #Y #X #HLY #HX
lapply (drops_mono … HLY … HLK) -L #H destruct //
qed-.
lemma cnv_inv_lref_atom (h) (a) (b) (G):
- â\88\80i,L. â¦\83G,Lâ¦\84 â\8a¢ #i ![h,a] â\86\92 â¬\87*[b,𝐔❴i❵] L ≘ ⋆ → ⊥.
+ â\88\80i,L. â¦\83G,Lâ¦\84 â\8a¢ #i ![h,a] â\86\92 â\87©*[b,𝐔❴i❵] L ≘ ⋆ → ⊥.
#h #a #b #G #i #L #H #Hi
elim (cnv_inv_lref_drops … H) -H #Z #Y #X #HLY #_
lapply (drops_gen b … HLY) -HLY #HLY
lemma cnv_inv_lref_unit (h) (a) (G):
∀i,L. ⦃G,L⦄ ⊢ #i ![h,a] →
- â\88\80I,K. â¬\87*[i] L ≘ K.ⓤ{I} → ⊥.
+ â\88\80I,K. â\87©*[i] L ≘ K.ⓤ{I} → ⊥.
#h #a #G #i #L #H #I #K #HLK
elim (cnv_inv_lref_drops … H) -H #Z #Y #X #HLY #_
lapply (drops_mono … HLY … HLK) -L #H destruct
(* Basic_2A1: includes: lsubsv_drop_O1_conf *)
lemma lsubv_drops_conf_isuni (h) (a) (G):
∀L1,L2. G ⊢ L1 ⫃![h,a] L2 →
- â\88\80b,f,K1. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b,f] L1 ≘ K1 →
- â\88\83â\88\83K2. G â\8a¢ K1 â«\83![h,a] K2 & â¬\87*[b,f] L2 ≘ K2.
+ â\88\80b,f,K1. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\87©*[b,f] L1 ≘ K1 →
+ â\88\83â\88\83K2. G â\8a¢ K1 â«\83![h,a] K2 & â\87©*[b,f] L2 ≘ K2.
#h #a #G #L1 #L2 #H elim H -L1 -L2
[ /2 width=3 by ex2_intro/
| #I #L1 #L2 #HL12 #IH #b #f #K1 #Hf #H
(* Basic_2A1: includes: lsubsv_drop_O1_trans *)
lemma lsubv_drops_trans_isuni (h) (a) (G):
∀L1,L2. G ⊢ L1 ⫃![h,a] L2 →
- â\88\80b,f,K2. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b,f] L2 ≘ K2 →
- â\88\83â\88\83K1. G â\8a¢ K1 â«\83![h,a] K2 & â¬\87*[b,f] L1 ≘ K1.
+ â\88\80b,f,K2. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\87©*[b,f] L2 ≘ K2 →
+ â\88\83â\88\83K1. G â\8a¢ K1 â«\83![h,a] K2 & â\87©*[b,f] L1 ≘ K1.
#h #a #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: uses: ty3_repellent *)
theorem nta_abst_repellent (h) (a) (p) (G) (K):
∀W,T,U1. ⦃G,K⦄ ⊢ ⓛ{p}W.T :[h,a] U1 →
- â\88\80U2. â¦\83G,K.â\93\9bWâ¦\84 â\8a¢ T :[h,a] U2 â\86\92 â¬\86*[1] U1 ≘ U2 → ⊥.
+ â\88\80U2. â¦\83G,K.â\93\9bWâ¦\84 â\8a¢ T :[h,a] U2 â\86\92 â\87§*[1] U1 ≘ U2 → ⊥.
#h #a #p #G #K #W #T #U1 #H1 #U2 #H2 #HU12
elim (nta_fwd_aaa … H2) -H2 #A2 #H2T #H2U2
elim (nta_fwd_aaa … H1) -H1 #X1 #H1 #HU1
lemma nta_inv_ldec_sn_cnv (h) (a) (G) (K) (V):
∀X2. ⦃G,K.ⓛV⦄ ⊢ #0 :[h,a] X2 →
- â\88\83â\88\83U. â¦\83G,Kâ¦\84 â\8a¢ V ![h,a] & â¬\86*[1] V ≘ U & ⦃G,K.ⓛV⦄ ⊢ U ⬌*[h] X2 & ⦃G,K.ⓛV⦄ ⊢ X2 ![h,a].
+ â\88\83â\88\83U. â¦\83G,Kâ¦\84 â\8a¢ V ![h,a] & â\87§*[1] V ≘ U & ⦃G,K.ⓛV⦄ ⊢ U ⬌*[h] X2 & ⦃G,K.ⓛV⦄ ⊢ X2 ![h,a].
#h #a #G #Y #X #X2 #H
elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2
elim (cnv_inv_zero … H1) -H1 #Z #K #V #HV #H destruct
lemma nta_ldef (h) (a) (G) (K):
∀V,W. ⦃G,K⦄ ⊢ V :[h,a] W →
- â\88\80U. â¬\86*[1] W ≘ U → ⦃G,K.ⓓV⦄ ⊢ #0 :[h,a] U.
+ â\88\80U. â\87§*[1] W ≘ U → ⦃G,K.ⓓV⦄ ⊢ #0 :[h,a] U.
#h #a #G #K #V #W #H #U #HWU
elim (cnv_inv_cast … H) -H #X #HW #HV #HWX #HVX
lapply (cnv_lifts … HW (Ⓣ) … (K.ⓓV) … HWU) -HW
lemma nta_ldec_cnv (h) (a) (G) (K):
∀W. ⦃G,K⦄ ⊢ W ![h,a] →
- â\88\80U. â¬\86*[1] W ≘ U → ⦃G,K.ⓛW⦄ ⊢ #0 :[h,a] U.
+ â\88\80U. â\87§*[1] W ≘ U → ⦃G,K.ⓛW⦄ ⊢ #0 :[h,a] U.
#h #a #G #K #W #HW #U #HWU
lapply (cnv_lifts … HW (Ⓣ) … (K.ⓛW) … HWU)
/3 width=5 by cnv_zero, cnv_cast, cpms_ell, drops_refl, drops_drop/
lemma nta_lref (h) (a) (I) (G) (K):
∀T,i. ⦃G,K⦄ ⊢ #i :[h,a] T →
- â\88\80U. â¬\86*[1] T ≘ U → ⦃G,K.ⓘ{I}⦄ ⊢ #(↑i) :[h,a] U.
+ â\88\80U. â\87§*[1] T ≘ U → ⦃G,K.ⓘ{I}⦄ ⊢ #(↑i) :[h,a] U.
#h #a #I #G #K #T #i #H #U #HTU
elim (cnv_inv_cast … H) -H #X #HT #Hi #HTX #H2
lapply (cnv_lifts … HT (Ⓣ) … (K.ⓘ{I}) … HTU) -HT
(* Basic_2A1: was by definition: nta_ldef ntaa_ldef *)
lemma nta_ldef_drops (h) (a) (G) (K) (L) (i):
∀V,W. ⦃G,K⦄ ⊢ V :[h,a] W →
- â\88\80U. â¬\86*[â\86\91i] W â\89\98 U â\86\92 â¬\87*[i] L ≘ K.ⓓV → ⦃G,L⦄ ⊢ #i :[h,a] U.
+ â\88\80U. â\87§*[â\86\91i] W â\89\98 U â\86\92 â\87©*[i] L ≘ K.ⓓV → ⦃G,L⦄ ⊢ #i :[h,a] U.
#h #a #G #K #L #i #V #W #HVW #U #HWU #HLK
elim (lifts_split_trans … HWU (𝐔❴1❵) (𝐔❴i❵)) [| // ] #X #HWX #HXU
/3 width=9 by nta_lifts_bi, nta_ldef/
lemma nta_ldec_drops_cnv (h) (a) (G) (K) (L) (i):
∀W. ⦃G,K⦄ ⊢ W ![h,a] →
- â\88\80U. â¬\86*[â\86\91i] W â\89\98 U â\86\92 â¬\87*[i] L ≘ K.ⓛW → ⦃G,L⦄ ⊢ #i :[h,a] U.
+ â\88\80U. â\87§*[â\86\91i] W â\89\98 U â\86\92 â\87©*[i] L ≘ K.ⓛW → ⦃G,L⦄ ⊢ #i :[h,a] U.
#h #a #G #K #L #i #W #HW #U #HWU #HLK
elim (lifts_split_trans … HWU (𝐔❴1❵) (𝐔❴i❵)) [| // ] #X #HWX #HXU
/3 width=9 by nta_lifts_bi, nta_ldec_cnv/
lemma nta_ind_rest_cnv (h) (Q:relation4 …):
(∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) →
(∀G,K,V,W,U.
- â¦\83G,Kâ¦\84 â\8a¢ V :[h,ð\9d\9f\90] W â\86\92 â¬\86*[1] W ≘ U →
+ â¦\83G,Kâ¦\84 â\8a¢ V :[h,ð\9d\9f\90] W â\86\92 â\87§*[1] W ≘ U →
Q G K V W → Q G (K.ⓓV) (#0) U
) →
- (â\88\80G,K,W,U. â¦\83G,Kâ¦\84 â\8a¢ W ![h,ð\9d\9f\90] â\86\92 â¬\86*[1] W ≘ U → Q G (K.ⓛW) (#0) U) →
+ (â\88\80G,K,W,U. â¦\83G,Kâ¦\84 â\8a¢ W ![h,ð\9d\9f\90] â\86\92 â\87§*[1] W ≘ U → Q G (K.ⓛW) (#0) U) →
(∀I,G,K,W,U,i.
- â¦\83G,Kâ¦\84 â\8a¢ #i :[h,ð\9d\9f\90] W â\86\92 â¬\86*[1] W ≘ U →
+ â¦\83G,Kâ¦\84 â\8a¢ #i :[h,ð\9d\9f\90] W â\86\92 â\87§*[1] W ≘ U →
Q G K (#i) W → Q G (K.ⓘ{I}) (#↑i) U
) →
(∀p,I,G,K,V,T,U.
lemma nta_ind_ext_cnv_mixed (h) (Q:relation4 …):
(∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) →
(∀G,K,V,W,U.
- â¦\83G,Kâ¦\84 â\8a¢ V :[h,ð\9d\9b\9a] W â\86\92 â¬\86*[1] W ≘ U →
+ â¦\83G,Kâ¦\84 â\8a¢ V :[h,ð\9d\9b\9a] W â\86\92 â\87§*[1] W ≘ U →
Q G K V W → Q G (K.ⓓV) (#0) U
) →
- (â\88\80G,K,W,U. â¦\83G,Kâ¦\84 â\8a¢ W ![h,ð\9d\9b\9a] â\86\92 â¬\86*[1] W ≘ U → Q G (K.ⓛW) (#0) U) →
+ (â\88\80G,K,W,U. â¦\83G,Kâ¦\84 â\8a¢ W ![h,ð\9d\9b\9a] â\86\92 â\87§*[1] W ≘ U → Q G (K.ⓛW) (#0) U) →
(∀I,G,K,W,U,i.
- â¦\83G,Kâ¦\84 â\8a¢ #i :[h,ð\9d\9b\9a] W â\86\92 â¬\86*[1] W ≘ U →
+ â¦\83G,Kâ¦\84 â\8a¢ #i :[h,ð\9d\9b\9a] W â\86\92 â\87§*[1] W ≘ U →
Q G K (#i) W → Q G (K.ⓘ{I}) (#↑i) U
) →
(∀p,I,G,K,V,T,U.
lemma nta_ind_ext_cnv (h) (Q:relation4 …):
(∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) →
(∀G,K,V,W,U.
- â¦\83G,Kâ¦\84 â\8a¢ V :[h,ð\9d\9b\9a] W â\86\92 â¬\86*[1] W ≘ U →
+ â¦\83G,Kâ¦\84 â\8a¢ V :[h,ð\9d\9b\9a] W â\86\92 â\87§*[1] W ≘ U →
Q G K V W → Q G (K.ⓓV) (#0) U
) →
- (â\88\80G,K,W,U. â¦\83G,Kâ¦\84 â\8a¢ W ![h,ð\9d\9b\9a] â\86\92 â¬\86*[1] W ≘ U → Q G (K.ⓛW) (#0) U) →
+ (â\88\80G,K,W,U. â¦\83G,Kâ¦\84 â\8a¢ W ![h,ð\9d\9b\9a] â\86\92 â\87§*[1] W ≘ U → Q G (K.ⓛW) (#0) U) →
(∀I,G,K,W,U,i.
- â¦\83G,Kâ¦\84 â\8a¢ #i :[h,ð\9d\9b\9a] W â\86\92 â¬\86*[1] W ≘ U →
+ â¦\83G,Kâ¦\84 â\8a¢ #i :[h,ð\9d\9b\9a] W â\86\92 â\87§*[1] W ≘ U →
Q G K (#i) W → Q G (K.ⓘ{I}) (#↑i) U
) →
(∀p,I,G,K,V,T,U.
lemma nta_inv_ldef_sn (h) (a) (G) (K) (V):
∀X2. ⦃G,K.ⓓV⦄ ⊢ #0 :[h,a] X2 →
- â\88\83â\88\83W,U. â¦\83G,Kâ¦\84 â\8a¢ V :[h,a] W & â¬\86*[1] W ≘ U & ⦃G,K.ⓓV⦄ ⊢ U ⬌*[h] X2 & ⦃G,K.ⓓV⦄ ⊢ X2 ![h,a].
+ â\88\83â\88\83W,U. â¦\83G,Kâ¦\84 â\8a¢ V :[h,a] W & â\87§*[1] W ≘ U & ⦃G,K.ⓓV⦄ ⊢ U ⬌*[h] X2 & ⦃G,K.ⓓV⦄ ⊢ X2 ![h,a].
#h #a #G #Y #X #X2 #H
elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2
elim (cnv_inv_zero … H1) -H1 #Z #K #V #HV #H destruct
lemma nta_inv_lref_sn (h) (a) (G) (L):
∀X2,i. ⦃G,L⦄ ⊢ #↑i :[h,a] X2 →
- â\88\83â\88\83I,K,T2,U2. â¦\83G,Kâ¦\84 â\8a¢ #i :[h,a] T2 & â¬\86*[1] T2 ≘ U2 & ⦃G,K.ⓘ{I}⦄ ⊢ U2 ⬌*[h] X2 & ⦃G,K.ⓘ{I}⦄ ⊢ X2 ![h,a] & L = K.ⓘ{I}.
+ â\88\83â\88\83I,K,T2,U2. â¦\83G,Kâ¦\84 â\8a¢ #i :[h,a] T2 & â\87§*[1] T2 ≘ U2 & ⦃G,K.ⓘ{I}⦄ ⊢ U2 ⬌*[h] X2 & ⦃G,K.ⓘ{I}⦄ ⊢ X2 ![h,a] & L = K.ⓘ{I}.
#h #a #G #L #X2 #i #H
elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2
elim (cnv_inv_lref … H1) -H1 #I #K #Hi #H destruct
lemma nta_inv_lref_sn_drops_cnv (h) (a) (G) (L):
∀X2,i. ⦃G,L⦄ ⊢ #i :[h,a] X2 →
- â\88¨â\88¨ â\88\83â\88\83K,V,W,U. â¬\87*[i] L â\89\98 K.â\93\93V & â¦\83G,Kâ¦\84 â\8a¢ V :[h,a] W & â¬\86*[↑i] W ≘ U & ⦃G,L⦄ ⊢ U ⬌*[h] X2 & ⦃G,L⦄ ⊢ X2 ![h,a]
- | â\88\83â\88\83K,W,U. â¬\87*[i] L â\89\98 K. â\93\9bW & â¦\83G,Kâ¦\84 â\8a¢ W ![h,a] & â¬\86*[↑i] W ≘ U & ⦃G,L⦄ ⊢ U ⬌*[h] X2 & ⦃G,L⦄ ⊢ X2 ![h,a].
+ â\88¨â\88¨ â\88\83â\88\83K,V,W,U. â\87©*[i] L â\89\98 K.â\93\93V & â¦\83G,Kâ¦\84 â\8a¢ V :[h,a] W & â\87§*[↑i] W ≘ U & ⦃G,L⦄ ⊢ U ⬌*[h] X2 & ⦃G,L⦄ ⊢ X2 ![h,a]
+ | â\88\83â\88\83K,W,U. â\87©*[i] L â\89\98 K. â\93\9bW & â¦\83G,Kâ¦\84 â\8a¢ W ![h,a] & â\87§*[↑i] W ≘ U & ⦃G,L⦄ ⊢ U ⬌*[h] X2 & ⦃G,L⦄ ⊢ X2 ![h,a].
#h #a #G #L #X2 #i #H
elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2
elim (cnv_inv_lref_drops … H1) -H1 #I #K #V #HLK #HV
(* Note: "⦃G, L⦄ ⊢ U2 ⬌*[h] X2" can be "⦃G, L⦄ ⊢ X2 ➡*[h] U2" *)
lemma nta_inv_lifts_sn (h) (a) (G):
∀L,T2,X2. ⦃G,L⦄ ⊢ T2 :[h,a] X2 →
- â\88\80b,f,K. â¬\87*[b,f] L â\89\98 K â\86\92 â\88\80T1. â¬\86*[f] T1 ≘ T2 →
- â\88\83â\88\83U1,U2. â¦\83G,Kâ¦\84 â\8a¢ T1 :[h,a] U1 & â¬\86*[f] U1 ≘ U2 & ⦃G,L⦄ ⊢ U2 ⬌*[h] X2 & ⦃G,L⦄ ⊢ X2 ![h,a].
+ â\88\80b,f,K. â\87©*[b,f] L â\89\98 K â\86\92 â\88\80T1. â\87§*[f] T1 ≘ T2 →
+ â\88\83â\88\83U1,U2. â¦\83G,Kâ¦\84 â\8a¢ T1 :[h,a] U1 & â\87§*[f] U1 ≘ U2 & ⦃G,L⦄ ⊢ U2 ⬌*[h] X2 & ⦃G,L⦄ ⊢ X2 ![h,a].
#h #a #G #L #T2 #X2 #H #b #f #K #HLK #T1 #HT12
elim (cnv_inv_cast … H) -H #U2 #HX2 #HT2 #HXU2 #HTU2
lapply (cnv_inv_lifts … HT2 … HLK … HT12) -HT2 #HT1
lemma nta_ind_cnv (h) (a) (Q:relation4 …):
(∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) →
(∀G,K,V,W,U.
- â¦\83G,Kâ¦\84 â\8a¢ V :[h,a] W â\86\92 â¬\86*[1] W ≘ U →
+ â¦\83G,Kâ¦\84 â\8a¢ V :[h,a] W â\86\92 â\87§*[1] W ≘ U →
Q G K V W → Q G (K.ⓓV) (#0) U
) →
- (â\88\80G,K,W,U. â¦\83G,Kâ¦\84 â\8a¢ W ![h,a] â\86\92 â¬\86*[1] W ≘ U → Q G (K.ⓛW) (#0) U) →
+ (â\88\80G,K,W,U. â¦\83G,Kâ¦\84 â\8a¢ W ![h,a] â\86\92 â\87§*[1] W ≘ U → Q G (K.ⓛW) (#0) U) →
(∀I,G,K,W,U,i.
- â¦\83G,Kâ¦\84 â\8a¢ #i :[h,a] W â\86\92 â¬\86*[1] W ≘ U →
+ â¦\83G,Kâ¦\84 â\8a¢ #i :[h,a] W â\86\92 â\87§*[1] W ≘ U →
Q G K (#i) W → Q G (K.ⓘ{I}) (#↑i) U
) →
(∀p,I,G,K,V,T,U.
qed.
lemma cnuw_atom_drops (h) (b) (G) (L):
- â\88\80i. â¬\87*[b,𝐔❴i❵] L ≘ ⋆ → ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] #i.
+ â\88\80i. â\87©*[b,𝐔❴i❵] L ≘ ⋆ → ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] #i.
#h #b #G #L #i #Hi #n #X #H
elim (cpms_inv_lref1_drops … H) -H * [ // || #m ] #K #V1 #V2 #HLK
lapply (drops_gen b … HLK) -HLK #HLK
qed.
lemma cnuw_unit_drops (h) (I) (G) (L):
- â\88\80K,i. â¬\87*[i] L ≘ K.ⓤ{I} → ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] #i.
+ â\88\80K,i. â\87©*[i] L ≘ K.ⓤ{I} → ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] #i.
#h #I #G #L #K #i #HLK #n #X #H
elim (cpms_inv_lref1_drops … H) -H * [ // || #m ] #Y #V1 #V2 #HLY
lapply (drops_mono … HLK … HLY) -L #H destruct
qed.
lemma cpms_zeta (n) (h) (G) (L):
- â\88\80T1,T. â¬\86*[1] T ≘ T1 →
+ â\88\80T1,T. â\87§*[1] T ≘ T1 →
∀V,T2. ⦃G,L⦄ ⊢ T ➡*[n,h] T2 → ⦃G,L⦄ ⊢ +ⓓV.T1 ➡*[n,h] T2.
#n #h #G #L #T1 #T #HT1 #V #T2 #H @(cpms_ind_dx … H) -T2
/3 width=3 by cpms_step_dx, cpm_cpms, cpm_zeta/
(* Basic_2A1: uses: cprs_zeta *)
lemma cpms_zeta_dx (n) (h) (G) (L):
- â\88\80T2,T. â¬\86*[1] T2 ≘ T →
+ â\88\80T2,T. â\87§*[1] T2 ≘ T →
∀V,T1. ⦃G,L.ⓓV⦄ ⊢ T1 ➡*[n,h] T → ⦃G,L⦄ ⊢ +ⓓV.T1 ➡*[n,h] T2.
#n #h #G #L #T2 #T #HT2 #V #T1 #H @(cpms_ind_sn … H) -T1
/3 width=3 by cpms_step_sn, cpm_cpms, cpm_bind, cpm_zeta/
(* Basic_2A1: uses: cprs_theta_dx *)
lemma cpms_theta_dx (n) (h) (G) (L):
∀V1,V. ⦃G,L⦄ ⊢ V1 ➡[h] V →
- â\88\80V2. â¬\86*[1] V ≘ V2 →
+ â\88\80V2. â\87§*[1] V ≘ V2 →
∀W1,W2. ⦃G,L⦄ ⊢ W1 ➡[h] W2 →
∀T1,T2. ⦃G,L.ⓓW1⦄ ⊢ T1 ➡*[n,h] T2 →
∀p. ⦃G,L⦄ ⊢ ⓐV1.ⓓ{p}W1.T1 ➡*[n,h] ⓓ{p}W2.ⓐV2.T2.
(* Basic_2A1: includes: cprs_theta_rc *)
theorem cpms_theta_rc (n) (h) (G) (L):
- â\88\80V1,V. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V â\86\92 â\88\80V2. â¬\86*[1] V ≘ V2 →
+ â\88\80V1,V. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V â\86\92 â\88\80V2. â\87§*[1] V ≘ V2 →
∀W1,T1,T2. ⦃G,L.ⓓW1⦄ ⊢ T1 ➡*[n,h] T2 →
∀W2. ⦃G,L⦄ ⊢ W1 ➡*[h] W2 →
∀p. ⦃G,L⦄ ⊢ ⓐV1.ⓓ{p}W1.T1 ➡*[n,h] ⓓ{p}W2.ⓐV2.T2.
(* Basic_2A1: includes: cprs_theta *)
theorem cpms_theta (n) (h) (G) (L):
- â\88\80V,V2. â¬\86*[1] V ≘ V2 → ∀W1,W2. ⦃G,L⦄ ⊢ W1 ➡*[h] W2 →
+ â\88\80V,V2. â\87§*[1] V ≘ V2 → ∀W1,W2. ⦃G,L⦄ ⊢ W1 ➡*[h] W2 →
∀T1,T2. ⦃G,L.ⓓW1⦄ ⊢ T1 ➡*[n,h] T2 →
∀V1. ⦃G,L⦄ ⊢ V1 ➡*[h] V →
∀p. ⦃G,L⦄ ⊢ ⓐV1.ⓓ{p}W1.T1 ➡*[n,h] ⓓ{p}W2.ⓐV2.T2.
⦃G,L⦄ ⊢ T1 ➡*[n1,h] ⓛ{p}W.T & ⦃G,L⦄ ⊢ ⓓ{p}ⓝW.V1.T ➡*[n2,h] X2 &
n1 + n2 = n
| ∃∃n1,n2,p,V0,V2,V,T.
- â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡*[h] V0 & â¬\86*[1] V0 ≘ V2 &
+ â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡*[h] V0 & â\87§*[1] V0 ≘ V2 &
⦃G,L⦄ ⊢ T1 ➡*[n1,h] ⓓ{p}V.T & ⦃G,L⦄ ⊢ ⓓ{p}V.ⓐV2.T ➡*[n2,h] X2 &
n1 + n2 = n.
#n #h #G #L #V1 #T1 #U2 #H
(* Advanced properties ******************************************************)
lemma cpms_delta (n) (h) (G): ∀K,V1,V2. ⦃G,K⦄ ⊢ V1 ➡*[n,h] V2 →
- â\88\80W2. â¬\86*[1] V2 ≘ W2 → ⦃G,K.ⓓV1⦄ ⊢ #0 ➡*[n,h] W2.
+ â\88\80W2. â\87§*[1] V2 ≘ W2 → ⦃G,K.ⓓV1⦄ ⊢ #0 ➡*[n,h] W2.
#n #h #G #K #V1 #V2 #H @(cpms_ind_dx … H) -V2
[ /3 width=3 by cpm_cpms, cpm_delta/
| #n1 #n2 #V #V2 #_ #IH #HV2 #W2 #HVW2
qed.
lemma cpms_ell (n) (h) (G): ∀K,V1,V2. ⦃G,K⦄ ⊢ V1 ➡*[n,h] V2 →
- â\88\80W2. â¬\86*[1] V2 ≘ W2 → ⦃G,K.ⓛV1⦄ ⊢ #0 ➡*[↑n,h] W2.
+ â\88\80W2. â\87§*[1] V2 ≘ W2 → ⦃G,K.ⓛV1⦄ ⊢ #0 ➡*[↑n,h] W2.
#n #h #G #K #V1 #V2 #H @(cpms_ind_dx … H) -V2
[ /3 width=3 by cpm_cpms, cpm_ell/
| #n1 #n2 #V #V2 #_ #IH #HV2 #W2 #HVW2
qed.
lemma cpms_lref (n) (h) (I) (G): ∀K,T,i. ⦃G,K⦄ ⊢ #i ➡*[n,h] T →
- â\88\80U. â¬\86*[1] T ≘ U → ⦃G,K.ⓘ{I}⦄ ⊢ #↑i ➡*[n,h] U.
+ â\88\80U. â\87§*[1] T ≘ U → ⦃G,K.ⓘ{I}⦄ ⊢ #↑i ➡*[n,h] U.
#n #h #I #G #K #T #i #H @(cpms_ind_dx … H) -T
[ /3 width=3 by cpm_cpms, cpm_lref/
| #n1 #n2 #T #T2 #_ #IH #HT2 #U2 #HTU2
(* Note: apparently this was missing in basic_1 *)
(* Basic_2A1: uses: cprs_delta *)
lemma cpms_delta_drops (n) (h) (G):
- â\88\80L,K,V,i. â¬\87*[i] L ≘ K.ⓓV →
+ â\88\80L,K,V,i. â\87©*[i] L ≘ K.ⓓV →
∀V2. ⦃G,K⦄ ⊢ V ➡*[n,h] V2 →
- â\88\80W2. â¬\86*[↑i] V2 ≘ W2 → ⦃G,L⦄ ⊢ #i ➡*[n,h] W2.
+ â\88\80W2. â\87§*[↑i] V2 ≘ W2 → ⦃G,L⦄ ⊢ #i ➡*[n,h] W2.
#n #h #G #L #K #V #i #HLK #V2 #H @(cpms_ind_dx … H) -V2
[ /3 width=6 by cpm_cpms, cpm_delta_drops/
| #n1 #n2 #V1 #V2 #_ #IH #HV12 #W2 #HVW2
qed.
lemma cpms_ell_drops (n) (h) (G):
- â\88\80L,K,W,i. â¬\87*[i] L ≘ K.ⓛW →
+ â\88\80L,K,W,i. â\87©*[i] L ≘ K.ⓛW →
∀W2. ⦃G,K⦄ ⊢ W ➡*[n,h] W2 →
- â\88\80V2. â¬\86*[↑i] W2 ≘ V2 → ⦃G,L⦄ ⊢ #i ➡*[↑n,h] V2.
+ â\88\80V2. â\87§*[↑i] W2 ≘ V2 → ⦃G,L⦄ ⊢ #i ➡*[↑n,h] V2.
#n #h #G #L #K #W #i #HLK #W2 #H @(cpms_ind_dx … H) -W2
[ /3 width=6 by cpm_cpms, cpm_ell_drops/
| #n1 #n2 #W1 #W2 #_ #IH #HW12 #V2 #HWV2
lemma cpms_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 ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ➡*[n,h] V2 &
- â¬\86*[↑i] V2 ≘ T2
- | â\88\83â\88\83m,K,V,V2. â¬\87*[i] L ≘ K.ⓛV & ⦃G,K⦄ ⊢ V ➡*[m,h] V2 &
- â¬\86*[↑i] V2 ≘ T2 & n = ↑m.
+ | â\88\83â\88\83K,V,V2. â\87©*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ➡*[n,h] V2 &
+ â\87§*[↑i] V2 ≘ T2
+ | â\88\83â\88\83m,K,V,V2. â\87©*[i] L ≘ K.ⓛV & ⦃G,K⦄ ⊢ V ➡*[m,h] V2 &
+ â\87§*[↑i] V2 ≘ T2 & n = ↑m.
#n #h #G #L #T2 #i #H @(cpms_ind_dx … H) -T2
[ /3 width=1 by or3_intro0, conj/
| #n1 #n2 #T #T2 #_ #IH #HT2 cases IH -IH *
lemma cpms_inv_delta_sn (n) (h) (G) (K) (V):
∀T2. ⦃G,K.ⓓV⦄ ⊢ #0 ➡*[n,h] T2 →
∨∨ ∧∧ T2 = #0 & n = 0
- | â\88\83â\88\83V2. â¦\83G,Kâ¦\84 â\8a¢ V â\9e¡*[n,h] V2 & â¬\86*[1] V2 ≘ T2.
+ | â\88\83â\88\83V2. â¦\83G,Kâ¦\84 â\8a¢ V â\9e¡*[n,h] V2 & â\87§*[1] V2 ≘ T2.
#n #h #G #K #V #T2 #H
elim (cpms_inv_lref1_drops … H) -H *
[ /3 width=1 by or_introl, conj/
lemma cpms_inv_ell_sn (n) (h) (G) (K) (V):
∀T2. ⦃G,K.ⓛV⦄ ⊢ #0 ➡*[n,h] T2 →
∨∨ ∧∧ T2 = #0 & n = 0
- | â\88\83â\88\83m,V2. â¦\83G,Kâ¦\84 â\8a¢ V â\9e¡*[m,h] V2 & â¬\86*[1] V2 ≘ T2 & n = ↑m.
+ | â\88\83â\88\83m,V2. â¦\83G,Kâ¦\84 â\8a¢ V â\9e¡*[m,h] V2 & â\87§*[1] V2 ≘ T2 & n = ↑m.
#n #h #G #K #V #T2 #H
elim (cpms_inv_lref1_drops … H) -H *
[ /3 width=1 by or_introl, conj/
lemma cpms_inv_lref_sn (n) (h) (G) (I) (K):
∀U2,i. ⦃G,K.ⓘ{I}⦄ ⊢ #↑i ➡*[n,h] U2 →
∨∨ ∧∧ U2 = #↑i & n = 0
- | â\88\83â\88\83T2. â¦\83G,Kâ¦\84 â\8a¢ #i â\9e¡*[n,h] T2 & â¬\86*[1] T2 ≘ U2.
+ | â\88\83â\88\83T2. â¦\83G,Kâ¦\84 â\8a¢ #i â\9e¡*[n,h] T2 & â\87§*[1] T2 ≘ U2.
#n #h #G #I #K #U2 #i #H
elim (cpms_inv_lref1_drops … H) -H *
[ /3 width=1 by or_introl, conj/
X2 = ⓐV2. T2
| ∃∃p,W,T. ⦃G,L⦄ ⊢ T1 ➡*[h] ⓛ{p}W.T &
⦃G,L⦄ ⊢ ⓓ{p}ⓝW.V1.T ➡*[h] X2
- | â\88\83â\88\83p,V0,V2,V,T. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡*[h] V0 & â¬\86*[1] V0 ≘ V2 &
+ | â\88\83â\88\83p,V0,V2,V,T. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡*[h] V0 & â\87§*[1] V0 ≘ V2 &
⦃G,L⦄ ⊢ T1 ➡*[h] ⓓ{p}V.T &
⦃G,L⦄ ⊢ ⓓ{p}V.ⓐV2.T ➡*[h] X2.
#h #G #L #V1 #T1 #X2 #H elim (cpms_inv_appl_sn … H) -H *
(* Basic_2A1: was: cprs_inv_lref1 *)
lemma cprs_inv_lref1_drops (h) (G): ∀L,T2,i. ⦃G,L⦄ ⊢ #i ➡*[h] T2 →
∨∨ T2 = #i
- | â\88\83â\88\83K,V1,T1. â¬\87*[i] L ≘ K.ⓓV1 & ⦃G,K⦄ ⊢ V1 ➡*[h] T1 &
- â¬\86*[↑i] T1 ≘ T2.
+ | â\88\83â\88\83K,V1,T1. â\87©*[i] L ≘ K.ⓓV1 & ⦃G,K⦄ ⊢ V1 ➡*[h] T1 &
+ â\87§*[↑i] T1 ≘ T2.
#h #G #L #T2 #i #H elim (cpms_inv_lref1_drops … H) -H *
[ /2 width=1 by or_introl/
| /3 width=6 by ex3_3_intro, or_intror/
qed.
lemma cpxs_zeta (h) (G) (L) (V):
- â\88\80T1,T. â¬\86*[1] T ≘ T1 →
+ â\88\80T1,T. â\87§*[1] T ≘ T1 →
∀T2. ⦃G,L⦄ ⊢ T ⬈*[h] T2 → ⦃G,L⦄ ⊢ +ⓓV.T1 ⬈*[h] T2.
#h #G #L #V #T1 #T #HT1 #T2 #H @(cpxs_ind … H) -T2
/3 width=3 by cpxs_strap1, cpx_cpxs, cpx_zeta/
(* Basic_2A1: was: cpxs_zeta *)
lemma cpxs_zeta_dx (h) (G) (L) (V):
- â\88\80T2,T. â¬\86*[1] T2 ≘ T →
+ â\88\80T2,T. â\87§*[1] T2 ≘ T →
∀T1. ⦃G,L.ⓓV⦄ ⊢ T1 ⬈*[h] T → ⦃G,L⦄ ⊢ +ⓓV.T1 ⬈*[h] T2.
#h #G #L #V #T2 #T #HT2 #T1 #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 ≘ V2 → ⦃G,L.ⓓW1⦄ ⊢ T1 ⬈*[h] T2 →
+ â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V â\86\92 â\87§*[1] V ≘ 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 ≘ V2 →
+ â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V â\86\92 â\87§*[1] V ≘ 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 ≘ V2 → ⦃G,L⦄ ⊢ W1 ⬈*[h] W2 →
+ â\87§*[1] V ≘ 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 ≘ V2 &
+ | â\88\83â\88\83p,V0,V2,V,T. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88*[h] V0 & â\87§*[1] V0 ≘ 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 ≘ W2 → ⦃G,K.ⓑ{I}V1⦄ ⊢ #0 ⬈*[h] W2.
+ â\88\80W2. â\87§*[1] V2 ≘ 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 ≘ U → ⦃G,K.ⓘ{I}⦄ ⊢ #↑i ⬈*[h] U.
+ â\88\80U. â\87§*[1] T ≘ 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 ≘ K.ⓑ{I}V1 → ⦃G,K⦄ ⊢ V1 ⬈*[h] V2 →
- â\88\80W2. â¬\86*[↑i] V2 ≘ W2 → ⦃G,L⦄ ⊢ #i ⬈*[h] W2.
+ â\87©*[i] L ≘ K.ⓑ{I}V1 → ⦃G,K⦄ ⊢ V1 ⬈*[h] V2 →
+ â\88\80W2. â\87§*[↑i] V2 ≘ 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 ≘ T2 &
+ â\88\83â\88\83I,K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â¬\88*[h] V2 & â\87§*[1] V2 ≘ 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 ≘ T2 & L = K.ⓘ{I}.
+ â\88\83â\88\83I,K,T. â¦\83G,Kâ¦\84 â\8a¢ #i â¬\88*[h] T & â\87§*[1] T ≘ 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 ≘ K.ⓑ{I}V1 & ⦃G,K⦄ ⊢ V1 ⬈*[h] T1 &
- â¬\86*[↑i] T1 ≘ T2.
+ â\88\83â\88\83I,K,V1,T1. â\87©*[i] L ≘ K.ⓑ{I}V1 & ⦃G,K⦄ ⊢ V1 ⬈*[h] T1 &
+ â\87§*[↑i] T1 ≘ T2.
#h #G #L #T2 #i #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/
#T #T2 #_ #HT2 *
[ #H destruct
(* Note: probably this is an inversion lemma *)
(* Basic_2A1: was: cpxs_fwd_delta *)
lemma cpxs_fwd_delta_drops (h) (I) (G) (L) (K):
- â\88\80V1,i. â¬\87*[i] L ≘ K.ⓑ{I}V1 →
- â\88\80V2. â¬\86*[↑i] V1 ≘ V2 →
+ â\88\80V1,i. â\87©*[i] L ≘ K.ⓑ{I}V1 →
+ â\88\80V2. â\87§*[↑i] V1 ≘ V2 →
∀X2. ⦃G,L⦄ ⊢ #i ⬈*[h] X2 →
∨∨ #i ⩳ X2 | ⦃G,L⦄ ⊢ V2 ⬈*[h] X2.
#h #I #G #L #K #V1 #i #HLK #V2 #HV12 #X2 #H
lemma cpxs_fwd_theta (h) (p) (G) (L):
∀V1,V,T,X2. ⦃G,L⦄ ⊢ ⓐV1.ⓓ{p}V.T ⬈*[h] X2 →
- â\88\80V2. â¬\86*[1] V1 ≘ V2 →
+ â\88\80V2. â\87§*[1] V1 ≘ V2 →
∨∨ ⓐV1.ⓓ{p}V.T ⩳ X2 | ⦃G,L⦄ ⊢ ⓓ{p}V.ⓐV2.T ⬈*[h] X2.
#h #p #G #L #V1 #V #T #X2 #H #V2 #HV12
elim (cpxs_inv_appl1 … H) -H *
(* Basic_2A1: was: cpxs_fwd_delta_vector *)
lemma cpxs_fwd_delta_drops_vector (h) (I) (G) (L) (K):
- â\88\80V1,i. â¬\87*[i] L ≘ K.ⓑ{I}V1 →
- â\88\80V2. â¬\86*[↑i] V1 ≘ V2 →
+ â\88\80V1,i. â\87©*[i] L ≘ K.ⓑ{I}V1 →
+ â\88\80V2. â\87§*[↑i] V1 ≘ V2 →
∀Vs,X2. ⦃G,L⦄ ⊢ ⒶVs.#i ⬈*[h] X2 →
∨∨ ⒶVs.#i ⩳ X2 | ⦃G,L⦄ ⊢ ⒶVs.V2 ⬈*[h] X2.
#h #I #G #L #K #V1 #i #HLK #V2 #HV12 #Vs
(* Basic_1: was just: pr3_iso_appls_abbr *)
lemma cpxs_fwd_theta_vector (h) (G) (L):
- â\88\80V1b,V2b. â¬\86*[1] V1b ≘ V2b →
+ â\88\80V1b,V2b. â\87§*[1] V1b ≘ V2b →
∀p,V,T,X2. ⦃G,L⦄ ⊢ ⒶV1b.ⓓ{p}V.T ⬈*[h] X2 →
∨∨ ⒶV1b.ⓓ{p}V.T ⩳ X2 | ⦃G,L⦄ ⊢ ⓓ{p}V.ⒶV2b.T ⬈*[h] X2.
#h #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_drops (h) (G):
- â\88\80I,L,K,V,i. â¬\87*[i] L ≘ K.ⓑ{I}V →
+ â\88\80I,L,K,V,i. â\87©*[i] L ≘ K.ⓑ{I}V →
⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃#i⦄.
#h #G #I #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_drops (h) (G):
- â\88\80I,L,K,V,i. â¬\87*[i] L ≘ K.ⓑ{I}V →
+ â\88\80I,L,K,V,i. â\87©*[i] L ≘ K.ⓑ{I}V →
⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃#i⦄ → ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄.
#h #G #I #L #K #V #i #HLK #Hi
elim (lifts_total V (𝐔❴↑i❵))
lemma csx_inv_lref_drops (h) (G):
∀L,i. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃#i⦄ →
- â\88¨â\88¨ â¬\87*[Ⓕ,𝐔❴i❵] L ≘ ⋆
- | â\88\83â\88\83I,K. â¬\87*[i] L ≘ K.ⓤ{I}
- | â\88\83â\88\83I,K,V. â¬\87*[i] L ≘ K.ⓑ{I}V & ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄.
+ â\88¨â\88¨ â\87©*[Ⓕ,𝐔❴i❵] L ≘ ⋆
+ | â\88\83â\88\83I,K. â\87©*[i] L ≘ K.ⓤ{I}
+ | â\88\83â\88\83I,K,V. â\87©*[i] L ≘ K.ⓑ{I}V & ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄.
#h #G #L #i #H elim (drops_F_uni L i) /2 width=1 by or3_intro0/
* * /4 width=9 by csx_inv_lref_pair_drops, ex2_3_intro, ex1_2_intro, or3_intro2, or3_intro1/
qed-.
qed.
lemma csx_applv_delta_drops (h) (G):
- â\88\80I,L,K,V1,i. â¬\87*[i] L ≘ K.ⓑ{I}V1 →
- â\88\80V2. â¬\86*[↑i] V1 ≘ V2 →
+ â\88\80I,L,K,V1,i. â\87©*[i] L ≘ K.ⓑ{I}V1 →
+ â\88\80V2. â\87§*[↑i] V1 ≘ V2 →
∀Vs. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.V2⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶVs.#i⦄.
#h #G #I #L #K #V1 #i #HLK #V2 #HV12 #Vs elim Vs -Vs
[ /4 width=11 by csx_inv_lifts, csx_lref_pair_drops, drops_isuni_fwd_drop2/
(* Basic_1: was just: sn3_appls_abbr *)
lemma csx_applv_theta (h) (G):
- â\88\80p,L,V1b,V2b. â¬\86*[1] V1b ≘ V2b →
+ â\88\80p,L,V1b,V2b. â\87§*[1] V1b ≘ V2b →
∀V,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓓ{p}V.ⒶV2b.T⦄ → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⒶV1b.ⓓ{p}V.T⦄.
#h #G #p #L #V1b #V2b * -V1b -V2b /2 width=1 by/
#V1b #V2b #V1 #V2 #HV12 #H
qed.
fact csx_appl_theta_aux (h) (G):
- â\88\80p,L,U. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Uâ¦\84 â\86\92 â\88\80V1,V2. â¬\86*[1] V1 ≘ V2 →
+ â\88\80p,L,U. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Uâ¦\84 â\86\92 â\88\80V1,V2. â\87§*[1] V1 ≘ V2 →
∀V,T. U = ⓓ{p}V.ⓐV2.T → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV1.ⓓ{p}V.T⦄.
#h #G #p #L #X #H
@(csx_ind_cpxs … H) -X #X #HVT #IHVT #V1 #V2 #HV12 #V #T #H destruct
lemma csx_appl_theta (h) (G):
∀p,L,V,V2,T. ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓓ{p}V.ⓐV2.T⦄ →
- â\88\80V1. â¬\86*[1] V1 ≘ V2 → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV1.ⓓ{p}V.T⦄.
+ â\88\80V1. â\87§*[1] V1 ≘ V2 → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV1.ⓓ{p}V.T⦄.
/2 width=5 by csx_appl_theta_aux/ qed.
lemma jsx_fwd_drops_atom_sn (h) (b) (G):
∀L1,L2. G ⊢ L1 ⊒[h] L2 →
- â\88\80f. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b,f]L1 â\89\98 â\8b\86 â\86\92 â¬\87*[b,f]L2 ≘ ⋆.
+ â\88\80f. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\87©*[b,f]L1 â\89\98 â\8b\86 â\86\92 â\87©*[b,f]L2 ≘ ⋆.
#h #b #G #L1 #L2 #H elim H -L1 -L2
[ #f #_ #H //
| #I #K1 #K2 #_ #IH #f #Hf #H
lemma jsx_fwd_drops_unit_sn (h) (b) (G):
∀L1,L2. G ⊢ L1 ⊒[h] L2 →
- â\88\80f. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\88\80I,K1. â¬\87*[b,f]L1 ≘ K1.ⓤ{I} →
- â\88\83â\88\83K2. G â\8a¢ K1 â\8a\92[h] K2 & â¬\87*[b,f]L2 ≘ K2.ⓤ{I}.
+ â\88\80f. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\88\80I,K1. â\87©*[b,f]L1 ≘ K1.ⓤ{I} →
+ â\88\83â\88\83K2. G â\8a¢ K1 â\8a\92[h] K2 & â\87©*[b,f]L2 ≘ K2.ⓤ{I}.
#h #b #G #L1 #L2 #H elim H -L1 -L2
[ #f #_ #J #Y1 #H
lapply (drops_inv_atom1 … H) -H * #H #_ destruct
lemma jsx_fwd_drops_pair_sn (h) (b) (G):
∀L1,L2. G ⊢ L1 ⊒[h] L2 →
- â\88\80f. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\88\80I,K1,V. â¬\87*[b,f]L1 ≘ K1.ⓑ{I}V →
- â\88¨â\88¨ â\88\83â\88\83K2. G â\8a¢ K1 â\8a\92[h] K2 & â¬\87*[b,f]L2 ≘ K2.ⓑ{I}V
- | â\88\83â\88\83K2. G â\8a¢ K1 â\8a\92[h] K2 & â¬\87*[b,f]L2 ≘ K2.ⓧ & G ⊢ ⬈*[h,V] 𝐒⦃K2⦄.
+ â\88\80f. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\88\80I,K1,V. â\87©*[b,f]L1 ≘ K1.ⓑ{I}V →
+ â\88¨â\88¨ â\88\83â\88\83K2. G â\8a¢ K1 â\8a\92[h] K2 & â\87©*[b,f]L2 ≘ K2.ⓑ{I}V
+ | â\88\83â\88\83K2. G â\8a¢ K1 â\8a\92[h] K2 & â\87©*[b,f]L2 ≘ K2.ⓧ & G ⊢ ⬈*[h,V] 𝐒⦃K2⦄.
#h #b #G #L1 #L2 #H elim H -L1 -L2
[ #f #_ #J #Y1 #X1 #H
lapply (drops_inv_atom1 … H) -H * #H #_ destruct
lemma cpms_inv_abbr_sn_dx (n) (h) (G) (L):
∀p,V1,T1,X2. ⦃G,L⦄ ⊢ ⓓ{p}V1.T1 ➡*[n,h] X2 →
∨∨ ∃∃V2,T2. ⦃G,L⦄ ⊢ V1 ➡*[h] V2 & ⦃G,L.ⓓV1⦄ ⊢ T1 ➡*[n,h] T2 & X2 = ⓓ{p}V2.T2
- | â\88\83â\88\83T2. â¦\83G,L.â\93\93V1â¦\84 â\8a¢ T1 â\9e¡*[n ,h] T2 & â¬\86*[1] X2 ≘ T2 & p = Ⓣ.
+ | â\88\83â\88\83T2. â¦\83G,L.â\93\93V1â¦\84 â\8a¢ T1 â\9e¡*[n ,h] T2 & â\87§*[1] X2 ≘ T2 & p = Ⓣ.
#n #h #G #L #p #V1 #T1 #X2 #H
@(cpms_ind_dx … H) -X2 -n /3 width=5 by ex3_2_intro, or_introl/
#n1 #n2 #X #X2 #_ * *
(* Basic_2A1: uses: scpds_inv_abbr_abst *)
lemma cpms_inv_abbr_abst (n) (h) (G) (L):
∀p1,p2,V1,W2,T1,T2. ⦃G,L⦄ ⊢ ⓓ{p1}V1.T1 ➡*[n,h] ⓛ{p2}W2.T2 →
- â\88\83â\88\83T. â¦\83G,L.â\93\93V1â¦\84 â\8a¢ T1 â\9e¡*[n,h] T & â¬\86*[1] ⓛ{p2}W2.T2 ≘ T & p1 = Ⓣ.
+ â\88\83â\88\83T. â¦\83G,L.â\93\93V1â¦\84 â\8a¢ T1 â\9e¡*[n,h] T & â\87§*[1] ⓛ{p2}W2.T2 ≘ T & p1 = Ⓣ.
#n #h #G #L #p1 #p2 #V1 #W2 #T1 #T2 #H
elim (cpms_inv_abbr_sn_dx … H) -H *
[ #V #T #_ #_ #H destruct
∀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\83T2. â¦\83G,L.â\93\93V1â¦\84 â\8a¢ T1 â¬\88*[h] T2 & â¬\86*[1] U2 ≘ T2 & p = Ⓣ.
+ | â\88\83â\88\83T2. â¦\83G,L.â\93\93V1â¦\84 â\8a¢ T1 â¬\88*[h] T2 & â\87§*[1] U2 ≘ T2 & p = Ⓣ.
#h #p #G #L #V1 #T1 #U2 #H
@(cpxs_ind … H) -U2 /3 width=5 by ex3_2_intro, or_introl/
#U0 #U2 #_ #HU02 * *
/2 width=4 by rsx_fwd_lref_pair_csx_aux/ qed-.
lemma rsx_fwd_lref_pair_csx_drops (h) (G):
- â\88\80I,K,V,i,L. â¬\87*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄ → ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄.
+ â\88\80I,K,V,i,L. â\87©*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄ → ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄.
#h #G #I #K #V #i elim i -i
[ #L #H >(drops_fwd_isid … H) -H
/2 width=2 by rsx_fwd_lref_pair_csx/
/3 width=2 by rsx_fwd_lref_pair_csx, rsx_fwd_pair, conj/ qed-.
lemma rsx_inv_lref_pair_drops (h) (G):
- â\88\80I,K,V,i,L. â¬\87*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄ →
+ â\88\80I,K,V,i,L. â\87©*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄ →
∧∧ ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ & G ⊢ ⬈*[h,V] 𝐒⦃K⦄.
/3 width=5 by rsx_fwd_lref_pair_csx_drops, rsx_fwd_lref_pair_drops, conj/ qed-.
lemma rsx_inv_lref_drops (h) (G):
∀L,i. G ⊢ ⬈*[h,#i] 𝐒⦃L⦄ →
- â\88¨â\88¨ â¬\87*[Ⓕ,𝐔❴i❵] L ≘ ⋆
- | â\88\83â\88\83I,K. â¬\87*[i] L ≘ K.ⓤ{I}
- | â\88\83â\88\83I,K,V. â¬\87*[i] L ≘ K.ⓑ{I}V & ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ & G ⊢ ⬈*[h,V] 𝐒⦃K⦄.
+ â\88¨â\88¨ â\87©*[Ⓕ,𝐔❴i❵] L ≘ ⋆
+ | â\88\83â\88\83I,K. â\87©*[i] L ≘ K.ⓤ{I}
+ | â\88\83â\88\83I,K,V. â\87©*[i] L ≘ K.ⓑ{I}V & ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ & G ⊢ ⬈*[h,V] 𝐒⦃K⦄.
#h #G #L #i #H elim (drops_F_uni L i)
[ /2 width=1 by or3_intro0/
| * * /4 width=10 by rsx_fwd_lref_pair_csx_drops, rsx_fwd_lref_pair_drops, ex3_3_intro, ex1_2_intro, or3_intro2, or3_intro1/
(* Basic_2A1: uses: lsx_lref_be *)
lemma rsx_lref_pair_drops (h) (G):
∀K,V. ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ → G ⊢ ⬈*[h,V] 𝐒⦃K⦄ →
- â\88\80I,i,L. â¬\87*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄.
+ â\88\80I,i,L. â\87©*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄.
#h #G #K #V #HV #HK #I #i elim i -i
[ #L #H >(drops_fwd_isid … H) -H /2 width=1 by rsx_lref_pair/
| #i #IH #L #H
(* Advanced properties ******************************************************)
(* Basic_2A1: uses: lsx_lref_free *)
-lemma rsx_lref_atom_drops (h) (G): â\88\80L,i. â¬\87*[Ⓕ,𝐔❴i❵] L ≘ ⋆ → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄.
+lemma rsx_lref_atom_drops (h) (G): â\88\80L,i. â\87©*[Ⓕ,𝐔❴i❵] L ≘ ⋆ → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄.
#h #G #L1 #i #HL1
@(rsx_lifts … (#0) … HL1) -HL1 //
qed.
(* Basic_2A1: uses: lsx_lref_skip *)
-lemma rsx_lref_unit_drops (h) (G): â\88\80I,L,K,i. â¬\87*[i] L ≘ K.ⓤ{I} → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄.
+lemma rsx_lref_unit_drops (h) (G): â\88\80I,L,K,i. â\87©*[i] L ≘ K.ⓤ{I} → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄.
#h #G #I #L1 #K1 #i #HL1
@(rsx_lifts … (#0) … HL1) -HL1 //
qed.
(* Basic_2A1: uses: lsx_fwd_lref_be *)
lemma rsx_fwd_lref_pair_drops (h) (G):
∀L,i. G ⊢ ⬈*[h,#i] 𝐒⦃L⦄ →
- â\88\80I,K,V. â¬\87*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,V] 𝐒⦃K⦄.
+ â\88\80I,K,V. â\87©*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,V] 𝐒⦃K⦄.
#h #G #L #i #HL #I #K #V #HLK
lapply (rsx_inv_lifts … HL … HLK … (#0) ?) -L
/2 width=2 by rsx_fwd_pair/
| cpce_zero: ∀G,K,I. (∀n,p,W,V,U. I = BPair Abst W → ⦃G,K⦄ ⊢ W ➡*[n,h] ⓛ{p}V.U → ⊥) →
cpce h G (K.ⓘ{I}) (#0) (#0)
| cpce_eta : ∀n,p,G,K,W,V1,V2,W2,U. ⦃G,K⦄ ⊢ W ➡*[n,h] ⓛ{p}V1.U →
- cpce h G K V1 V2 â\86\92 â¬\86*[1] V2 ≘ W2 → cpce h G (K.ⓛW) (#0) (+ⓛW2.ⓐ#0.#1)
+ cpce h G K V1 V2 â\86\92 â\87§*[1] V2 ≘ W2 → cpce h G (K.ⓛW) (#0) (+ⓛW2.ⓐ#0.#1)
| cpce_lref: ∀I,G,K,T,U,i. cpce h G K (#i) T →
- â¬\86*[1] T ≘ U → cpce h G (K.ⓘ{I}) (#↑i) U
+ â\87§*[1] T ≘ U → cpce h G (K.ⓘ{I}) (#↑i) U
| cpce_gref: ∀G,L,l. cpce h G L (§l) (§l)
| cpce_bind: ∀p,I,G,K,V1,V2,T1,T2.
cpce h G K V1 V2 → cpce h G (K.ⓑ{I}V1) T1 T2 →
∀I. ⦃G,K.ⓘ{I}⦄ ⊢ #0 ⬌η[h] X2 →
∨∨ ∧∧ ∀n,p,W,V,U. I = BPair Abst W → ⦃G,K⦄ ⊢ W ➡*[n,h] ⓛ{p}V.U → ⊥ & #0 = X2
| ∃∃n,p,W,V1,V2,W2,U. ⦃G,K⦄ ⊢ W ➡*[n,h] ⓛ{p}V1.U & ⦃G,K⦄ ⊢ V1 ⬌η[h] V2
- & â¬\86*[1] V2 ≘ W2 & I = BPair Abst W & +ⓛW2.ⓐ#0.#1 = X2.
+ & â\87§*[1] V2 ≘ W2 & I = BPair Abst W & +ⓛW2.ⓐ#0.#1 = X2.
#h #G #Y0 #X2 #Z
@(insert_eq_0 … (Y0.ⓘ{Z})) #Y
@(insert_eq_0 … (#0)) #X1
lemma cpce_inv_lref_sn (h) (G) (K) (X2):
∀I,i. ⦃G,K.ⓘ{I}⦄ ⊢ #↑i ⬌η[h] X2 →
- â\88\83â\88\83T2. â¦\83G,Kâ¦\84 â\8a¢ #i â¬\8cη[h] T2 & â¬\86*[1] T2 ≘ X2.
+ â\88\83â\88\83T2. â¦\83G,Kâ¦\84 â\8a¢ #i â¬\8cη[h] T2 & â\87§*[1] T2 ≘ X2.
#h #G #Y0 #X2 #Z #j
@(insert_eq_0 … (Y0.ⓘ{Z})) #Y
@(insert_eq_0 … (#↑j)) #X1
lemma cpce_eta_drops (h) (n) (G) (K):
∀p,W,V1,U. ⦃G,K⦄ ⊢ W ➡*[n,h] ⓛ{p}V1.U →
∀V2. ⦃G,K⦄ ⊢ V1 ⬌η[h] V2 →
- â\88\80i,L. â¬\87*[i] L ≘ K.ⓛW →
- â\88\80W2. â¬\86*[↑i] V2 ≘ W2 → ⦃G,L⦄ ⊢ #i ⬌η[h] +ⓛW2.ⓐ#0.#↑i.
+ â\88\80i,L. â\87©*[i] L ≘ K.ⓛW →
+ â\88\80W2. â\87§*[↑i] V2 ≘ W2 → ⦃G,L⦄ ⊢ #i ⬌η[h] +ⓛW2.ⓐ#0.#↑i.
#h #n #G #K #p #W #V1 #U #HWU #V2 #HV12 #i elim i -i
[ #L #HLK #W2 #HVW2
>(drops_fwd_isid … HLK) -L [| // ] /2 width=8 by cpce_eta/
qed.
lemma cpce_zero_drops (h) (G):
- â\88\80i,L. (â\88\80n,p,K,W,V,U. â¬\87*[i] L ≘ K.ⓛW → ⦃G,K⦄ ⊢ W ➡*[n,h] ⓛ{p}V.U → ⊥) →
+ â\88\80i,L. (â\88\80n,p,K,W,V,U. â\87©*[i] L ≘ K.ⓛW → ⦃G,K⦄ ⊢ W ➡*[n,h] ⓛ{p}V.U → ⊥) →
⦃G,L⦄ ⊢ #i ⬌η[h] #i.
#h #G #i elim i -i
[ * [ #_ // ] #L #I #Hi
(* Basic_1: was only: nf2_csort_lref *)
lemma cnr_lref_atom (h) (b) (G) (L):
- â\88\80i. â¬\87*[b,𝐔❴i❵] L ≘ ⋆ → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃#i⦄.
+ â\88\80i. â\87©*[b,𝐔❴i❵] L ≘ ⋆ → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃#i⦄.
#h #b #G #L #i #Hi #X #H
elim (cpr_inv_lref1_drops … H) -H // * #K #V1 #V2 #HLK
lapply (drops_gen b … HLK) -HLK #HLK
(* Basic_1: was: nf2_lref_abst *)
lemma cnr_lref_abst (h) (G) (L):
- â\88\80K,V,i. â¬\87*[i] L ≘ K.ⓛV → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃#i⦄.
+ â\88\80K,V,i. â\87©*[i] L ≘ K.ⓛV → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃#i⦄.
#h #G #L #K #V #i #HLK #X #H
elim (cpr_inv_lref1_drops … H) -H // *
#K0 #V1 #V2 #HLK0 #_ #_
qed.
lemma cnr_lref_unit (h) (I) (G) (L):
- â\88\80K,i. â¬\87*[i] L ≘ K.ⓤ{I} → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃#i⦄.
+ â\88\80K,i. â\87©*[i] L ≘ K.ⓤ{I} → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃#i⦄.
#h #I #G #L #K #i #HLK #X #H
elim (cpr_inv_lref1_drops … H) -H // *
#K0 #V1 #V2 #HLK0 #_ #_
(* Basic_2A1: was: cnr_inv_delta *)
lemma cnr_inv_lref_abbr (h) (G) (L):
- â\88\80K,V,i. â¬\87*[i] L ≘ K.ⓓV → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃#i⦄ → ⊥.
+ â\88\80K,V,i. â\87©*[i] L ≘ K.ⓓV → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃#i⦄ → ⊥.
#h #G #L #K #V #i #HLK #H
elim (lifts_total V 𝐔❴↑i❵) #W #HVW
lapply (H W ?) -H [ /3 width=6 by cpm_delta_drops/ ] -HLK #H destruct
(* Properties with generic slicing ******************************************)
-lemma cnx_lref_atom: â\88\80h,G,L,i. â¬\87*[i] L ≘ ⋆ → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃#i⦄.
+lemma cnx_lref_atom: â\88\80h,G,L,i. â\87©*[i] L ≘ ⋆ → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃#i⦄.
#h #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,I,G,L,K,i. â¬\87*[i] L ≘ K.ⓤ{I} → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃#i⦄.
+lemma cnx_lref_unit: â\88\80h,I,G,L,K,i. â\87©*[i] L ≘ K.ⓤ{I} → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃#i⦄.
#h #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,I,G,L,K,V,i. â¬\87*[i] L ≘ K.ⓑ{I}V → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃#i⦄ → ⊥.
+lemma cnx_inv_lref_pair: â\88\80h,I,G,L,K,V,i. â\87©*[i] L ≘ K.ⓑ{I}V → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃#i⦄ → ⊥.
#h #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) (⋆(⫯[h]s))
| cpg_delta: ∀c,G,L,V1,V2,W2. cpg Rt h c G L V1 V2 →
- â¬\86*[1] V2 ≘ W2 → cpg Rt h c G (L.ⓓV1) (#0) W2
+ â\87§*[1] V2 ≘ 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 ≘ W2 → cpg Rt h (c+𝟘𝟙) G (L.ⓛV1) (#0) W2
+ â\87§*[1] V2 ≘ 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 ≘ U → cpg Rt h c G (L.ⓘ{I}) (#↑i) U
+ â\87§*[1] T ≘ 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_cast : ∀cU,cT,G,L,U1,U2,T1,T2. Rt cU cT →
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 : â\88\80c,G,L,V,T1,T,T2. â¬\86*[1] T ≘ T1 → cpg Rt h c G L T T2 →
+| cpg_zeta : â\88\80c,G,L,V,T1,T,T2. â\87§*[1] T ≘ T1 → cpg Rt h c G L T T2 →
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 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 ≘ V2 → cpg Rt h cW G L W1 W2 →
+ cpg Rt h cV G L V1 V â\86\92 â\87§*[1] V ≘ 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 = ⋆(⫯[h]s) & c = 𝟘𝟙
- | â\88\83â\88\83cV,K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â¬\86*[1] V2 ≘ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\87§*[1] V2 ≘ 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 ≘ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\87§*[1] V2 ≘ 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 ≘ T2 &
+ | â\88\83â\88\83I,K,T,i. â¦\83G,Kâ¦\84 â\8a¢ #i â¬\88[Rt,c,h] T & â\87§*[1] T ≘ 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 = ⋆(⫯[h]s) & c = 𝟘𝟙
- | â\88\83â\88\83cV,K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â¬\86*[1] V2 ≘ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\87§*[1] V2 ≘ 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 ≘ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\87§*[1] V2 ≘ 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 ≘ T2 &
+ | â\88\83â\88\83I,K,T,i. â¦\83G,Kâ¦\84 â\8a¢ #i â¬\88[Rt,c,h] T & â\87§*[1] T ≘ 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 ≘ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\87§*[1] V2 ≘ 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 ≘ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\87§*[1] V2 ≘ 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 ≘ T2 & L = K.ⓘ{I}.
+ | â\88\83â\88\83I,K,T. â¦\83G,Kâ¦\84 â\8a¢ #i â¬\88[Rt,c,h] T & â\87§*[1] T ≘ 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. â¬\86*[1] T ≘ U1 & ⦃G,L⦄ ⊢ T ⬈[Rt,cT,h] U2 &
+ | â\88\83â\88\83cT,T. â\87§*[1] T ≘ U1 & ⦃G,L⦄ ⊢ T ⬈[Rt,cT,h] U2 &
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. â¬\86*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ⬈[Rt,cT,h] U2 &
+ | â\88\83â\88\83cT,T. â\87§*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ⬈[Rt,cT,h] U2 &
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. â¬\86*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ⬈[Rt,cT,h] U2 &
+ | â\88\83â\88\83cT,T. â\87§*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ⬈[Rt,cT,h] U2 &
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 ≘ 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 & â\87§*[1] V ≘ 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 ≘ 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 & â\87§*[1] V ≘ 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 ≘ T2 &
+ | â\88\83â\88\83cV,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\87§*[1] V2 ≘ T2 &
I = Abbr & c = cV
- | â\88\83â\88\83cV,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â¬\86*[1] V2 ≘ T2 &
+ | â\88\83â\88\83cV,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\87§*[1] V2 ≘ 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 ≘ T2.
+ | â\88\83â\88\83T. â¦\83G,Kâ¦\84 â\8a¢ #i â¬\88[Rt,c,h] T & â\87§*[1] T ≘ 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 ≘ K.ⓓV → ⦃G,K⦄ ⊢ V ⬈[Rt,c,h] V2 →
- â¬\86*[↑i] V2 ≘ 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 ≘ K.ⓓV → ⦃G,K⦄ ⊢ V ⬈[Rt,c,h] V2 →
+ â\87§*[↑i] V2 ≘ 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 ≘ K.ⓛV → ⦃G,K⦄ ⊢ V ⬈[Rt,c,h] V2 →
- â¬\86*[↑i] V2 ≘ 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 ≘ K.ⓛV → ⦃G,K⦄ ⊢ V ⬈[Rt,c,h] V2 →
+ â\87§*[↑i] V2 ≘ 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 ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ⬈[Rt,cV,h] V2 &
- â¬\86*[↑i] V2 ≘ T2 & c = cV
- | â\88\83â\88\83cV,K,V,V2. â¬\87*[i] L ≘ K.ⓛV & ⦃G,K⦄ ⊢ V ⬈[Rt,cV,h] V2 &
- â¬\86*[↑i] V2 ≘ T2 & c = cV + 𝟘𝟙.
+ | â\88\83â\88\83cV,K,V,V2. â\87©*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ⬈[Rt,cV,h] V2 &
+ â\87§*[↑i] V2 ≘ T2 & c = cV
+ | â\88\83â\88\83cV,K,V,V2. â\87©*[i] L ≘ K.ⓛV & ⦃G,K⦄ ⊢ V ⬈[Rt,cV,h] V2 &
+ â\87§*[↑i] V2 ≘ 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 = ⋆(⫯[h]s) & I = Sort s & c = 𝟘𝟙
- | â\88\83â\88\83cV,i,K,V,V2. â¬\87*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ⬈[Rt,cV,h] V2 &
- â¬\86*[↑i] V2 ≘ T2 & I = LRef i & c = cV
- | â\88\83â\88\83cV,i,K,V,V2. â¬\87*[i] L ≘ K.ⓛV & ⦃G,K⦄ ⊢ V ⬈[Rt,cV,h] V2 &
- â¬\86*[↑i] V2 ≘ T2 & I = LRef i & c = cV + 𝟘𝟙.
+ | â\88\83â\88\83cV,i,K,V,V2. â\87©*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ⬈[Rt,cV,h] V2 &
+ â\87§*[↑i] V2 ≘ T2 & I = LRef i & c = cV
+ | â\88\83â\88\83cV,i,K,V,V2. â\87©*[i] L ≘ K.ⓛV & ⦃G,K⦄ ⊢ V ⬈[Rt,cV,h] V2 &
+ â\87§*[↑i] V2 ≘ 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 ≘ W2 → ⦃G,K.ⓓV1⦄ ⊢ #0 ➡[n,h] W2.
+ â\87§*[1] V2 ≘ 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 ≘ W2 → ⦃G,K.ⓛV1⦄ ⊢ #0 ➡[↑n,h] W2.
+ â\87§*[1] V2 ≘ 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 ≘ U → ⦃G,K.ⓘ{I}⦄ ⊢ #↑i ➡[n,h] U.
+ â\87§*[1] T ≘ 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):
- â\88\80T1,T. â¬\86*[1] T ≘ T1 → ∀T2. ⦃G,L⦄ ⊢ T ➡[n,h] T2 →
+ â\88\80T1,T. â\87§*[1] T ≘ T1 → ∀T2. ⦃G,L⦄ ⊢ T ➡[n,h] T2 →
∀V. ⦃G,L⦄ ⊢ +ⓓV.T1 ➡[n,h] T2.
#n #h #G #L #T1 #T #HT1 #T2 *
/3 width=5 by cpg_zeta, isrt_plus_O2, ex2_intro/
(* 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 ≘ V2 → ⦃G,L⦄ ⊢ W1 ➡[h] W2 →
+ â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V â\86\92 â\87§*[1] V ≘ 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 = ⋆(⫯[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 ≘ T2 &
+ | â\88\83â\88\83K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â\9e¡[n,h] V2 & â\87§*[1] V2 ≘ T2 &
L = K.ⓓV1 & J = LRef 0
- | â\88\83â\88\83m,K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â\9e¡[m,h] V2 & â¬\86*[1] V2 ≘ T2 &
+ | â\88\83â\88\83m,K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â\9e¡[m,h] V2 & â\87§*[1] V2 ≘ T2 &
L = K.ⓛV1 & J = LRef 0 & n = ↑m
- | â\88\83â\88\83I,K,T,i. â¦\83G,Kâ¦\84 â\8a¢ #i â\9e¡[n,h] T & â¬\86*[1] T ≘ T2 &
+ | â\88\83â\88\83I,K,T,i. â¦\83G,Kâ¦\84 â\8a¢ #i â\9e¡[n,h] T & â\87§*[1] T ≘ 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 ≘ T2 &
+ | â\88\83â\88\83K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â\9e¡[n,h] V2 & â\87§*[1] V2 ≘ T2 &
L = K.ⓓV1
- | â\88\83â\88\83m,K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â\9e¡[m,h] V2 & â¬\86*[1] V2 ≘ T2 &
+ | â\88\83â\88\83m,K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â\9e¡[m,h] V2 & â\87§*[1] V2 ≘ T2 &
L = K.ⓛV1 & n = ↑m.
#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 ≘ T2 & L = K.ⓘ{I}.
+ | â\88\83â\88\83I,K,T. â¦\83G,Kâ¦\84 â\8a¢ #i â\9e¡[n,h] T & â\87§*[1] T ≘ 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. â¬\86*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ➡[n,h] U2 &
+ | â\88\83â\88\83T. â\87§*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ➡[n,h] U2 &
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. â¬\86*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ➡[n,h] U2 & p = true.
+ | â\88\83â\88\83T. â\87§*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ➡[n,h] U2 & p = true.
#n #h #p #G #L #V1 #T1 #U2 #H
elim (cpm_inv_bind1 … H) -H
[ /3 width=1 by or_introl/
| ∃∃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 ≘ V2 &
+ | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V & â\87§*[1] V ≘ 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 *
(∀I,G,L. Q 0 G L (⓪{I}) (⓪{I})) →
(∀G,L,s. Q 1 G L (⋆s) (⋆(⫯[h]s))) →
(∀n,G,K,V1,V2,W2. ⦃G,K⦄ ⊢ V1 ➡[n,h] V2 → Q n G K V1 V2 →
- â¬\86*[1] V2 ≘ W2 → Q n G (K.ⓓV1) (#0) W2
+ â\87§*[1] V2 ≘ W2 → Q n G (K.ⓓV1) (#0) W2
) → (∀n,G,K,V1,V2,W2. ⦃G,K⦄ ⊢ V1 ➡[n,h] V2 → Q n G K V1 V2 →
- â¬\86*[1] V2 ≘ W2 → Q (↑n) G (K.ⓛV1) (#0) W2
+ â\87§*[1] V2 ≘ W2 → Q (↑n) G (K.ⓛV1) (#0) W2
) → (∀n,I,G,K,T,U,i. ⦃G,K⦄ ⊢ #i ➡[n,h] T → Q n G K (#i) T →
- â¬\86*[1] T ≘ U → Q n G (K.ⓘ{I}) (#↑i) (U)
+ â\87§*[1] T ≘ U → Q n G (K.ⓘ{I}) (#↑i) (U)
) → (∀n,p,I,G,L,V1,V2,T1,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 → ⦃G,L.ⓑ{I}V1⦄ ⊢ T1 ➡[n,h] T2 →
Q 0 G L V1 V2 → Q n G (L.ⓑ{I}V1) T1 T2 → Q n G L (ⓑ{p,I}V1.T1) (ⓑ{p,I}V2.T2)
) → (∀n,G,L,V1,V2,T1,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V2 → ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 →
Q 0 G L V1 V2 → Q n G L T1 T2 → Q n G L (ⓐV1.T1) (ⓐV2.T2)
) → (∀n,G,L,V1,V2,T1,T2. ⦃G,L⦄ ⊢ V1 ➡[n,h] V2 → ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 →
Q n G L V1 V2 → Q n G L T1 T2 → Q n G L (ⓝV1.T1) (ⓝV2.T2)
- ) â\86\92 (â\88\80n,G,L,V,T1,T,T2. â¬\86*[1] T ≘ T1 → ⦃G,L⦄ ⊢ T ➡[n,h] T2 →
+ ) â\86\92 (â\88\80n,G,L,V,T1,T,T2. â\87§*[1] T ≘ T1 → ⦃G,L⦄ ⊢ T ➡[n,h] T2 →
Q n G L T T2 → Q n G L (+ⓓV.T1) T2
) → (∀n,G,L,V,T1,T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 →
Q n G L T1 T2 → Q n G L (ⓝV.T1) T2
Q n G L (ⓐV1.ⓛ{p}W1.T1) (ⓓ{p}ⓝW2.V2.T2)
) → (∀n,p,G,L,V1,V,V2,W1,W2,T1,T2. ⦃G,L⦄ ⊢ V1 ➡[h] V → ⦃G,L⦄ ⊢ W1 ➡[h] W2 → ⦃G,L.ⓓW1⦄ ⊢ T1 ➡[n,h] T2 →
Q 0 G L V1 V → Q 0 G L W1 W2 → Q n G (L.ⓓW1) T1 T2 →
- â¬\86*[1] V ≘ V2 → Q n G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2)
+ â\87§*[1] V ≘ V2 → Q n G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2)
) →
∀n,G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ➡[n,h] T2 → Q n G L T1 T2.
#h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #IH10 #IH11 #IH12 #IH13 #n #G #L #T1 #T2
(* 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 ≘ K.ⓓV → ⦃G,K⦄ ⊢ V ➡[n,h] V2 →
- â¬\86*[↑i] V2 ≘ W2 → ⦃G,L⦄ ⊢ #i ➡[n,h] W2.
+ â\87©*[i] L ≘ K.ⓓV → ⦃G,K⦄ ⊢ V ➡[n,h] V2 →
+ â\87§*[↑i] V2 ≘ 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 ≘ K.ⓛV → ⦃G,K⦄ ⊢ V ➡[n,h] V2 →
- â¬\86*[↑i] V2 ≘ W2 → ⦃G,L⦄ ⊢ #i ➡[↑n,h] W2.
+ â\87©*[i] L ≘ K.ⓛV → ⦃G,K⦄ ⊢ V ➡[n,h] V2 →
+ â\87§*[↑i] V2 ≘ 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 = ⋆(⫯[h]s) & I = Sort s & n = 1
- | â\88\83â\88\83K,V,V2,i. â¬\87*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ➡[n,h] V2 &
- â¬\86*[↑i] V2 ≘ T2 & I = LRef i
- | â\88\83â\88\83m,K,V,V2,i. â¬\87*[i] L ≘ K.ⓛV & ⦃G,K⦄ ⊢ V ➡[m,h] V2 &
- â¬\86*[↑i] V2 ≘ T2 & I = LRef i & n = ↑m.
+ | â\88\83â\88\83K,V,V2,i. â\87©*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ➡[n,h] V2 &
+ â\87§*[↑i] V2 ≘ T2 & I = LRef i
+ | â\88\83â\88\83m,K,V,V2,i. â\87©*[i] L ≘ K.ⓛV & ⦃G,K⦄ ⊢ V ➡[m,h] V2 &
+ â\87§*[↑i] V2 ≘ 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 ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ➡[n,h] V2 &
- â¬\86*[↑i] V2 ≘ T2
- | â\88\83â\88\83m,K,V,V2. â¬\87*[i] L ≘ K. ⓛV & ⦃G,K⦄ ⊢ V ➡[m,h] V2 &
- â¬\86*[↑i] V2 ≘ T2 & n = ↑m.
+ | â\88\83â\88\83K,V,V2. â\87©*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ➡[n,h] V2 &
+ â\87§*[↑i] V2 ≘ T2
+ | â\88\83â\88\83m,K,V,V2. â\87©*[i] L ≘ K. ⓛV & ⦃G,K⦄ ⊢ V ➡[m,h] V2 &
+ â\87§*[↑i] V2 ≘ 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 ≘ T2 &
+ | â\88\83â\88\83K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â\9e¡[h] V2 & â\87§*[1] V2 ≘ 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 ≘ T2 &
+ | â\88\83â\88\83I,K,T,i. â¦\83G,Kâ¦\84 â\8a¢ #i â\9e¡[h] T & â\87§*[1] T ≘ T2 &
L = K.ⓘ{I} & J = LRef (↑i).
#h #J #G #L #T2 #H elim (cpm_inv_atom1 … H) -H *
[2,4:|*: /3 width=8 by 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 ≘ T2 &
+ | â\88\83â\88\83K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â\9e¡[h] V2 & â\87§*[1] V2 ≘ 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 ≘ T2 & L = K.ⓘ{I}.
+ | â\88\83â\88\83I,K,T. â¦\83G,Kâ¦\84 â\8a¢ #i â\9e¡[h] T & â\87§*[1] T ≘ 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 ≘ V2 &
+ | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V & â\87§*[1] V ≘ V2 &
⦃G,L⦄ ⊢ W1 ➡[h] W2 & ⦃G,L.ⓓW1⦄ ⊢ T1 ➡[h] T2 &
U1 = ⓓ{p}W1.T1 &
U2 = ⓓ{p}W2.ⓐV2.T2 & I = Appl.
lemma cpr_ind (h): ∀Q:relation4 genv lenv term term.
(∀I,G,L. Q G L (⓪{I}) (⓪{I})) →
(∀G,K,V1,V2,W2. ⦃G,K⦄ ⊢ V1 ➡[h] V2 → Q G K V1 V2 →
- â¬\86*[1] V2 ≘ W2 → Q G (K.ⓓV1) (#0) W2
+ â\87§*[1] V2 ≘ W2 → Q G (K.ⓓV1) (#0) W2
) → (∀I,G,K,T,U,i. ⦃G,K⦄ ⊢ #i ➡[h] T → Q G K (#i) T →
- â¬\86*[1] T ≘ U → Q G (K.ⓘ{I}) (#↑i) (U)
+ â\87§*[1] T ≘ U → Q 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 →
Q G L V1 V2 → Q G (L.ⓑ{I}V1) T1 T2 → Q 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 →
Q G L V1 V2 → Q G L T1 T2 → Q G L (ⓕ{I}V1.T1) (ⓕ{I}V2.T2)
- ) â\86\92 (â\88\80G,L,V,T1,T,T2. â¬\86*[1] T ≘ T1 → ⦃G,L⦄ ⊢ T ➡[h] T2 →
+ ) â\86\92 (â\88\80G,L,V,T1,T,T2. â\87§*[1] T ≘ T1 → ⦃G,L⦄ ⊢ T ➡[h] T2 →
Q G L T T2 → Q G L (+ⓓV.T1) T2
) → (∀G,L,V,T1,T2. ⦃G,L⦄ ⊢ T1 ➡[h] T2 → Q G L T1 T2 →
Q G L (ⓝV.T1) T2
Q 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 →
Q G L V1 V → Q G L W1 W2 → Q G (L.ⓓW1) T1 T2 →
- â¬\86*[1] V ≘ V2 → Q G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2)
+ â\87§*[1] V ≘ V2 → Q G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2)
) →
∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ➡[h] T2 → Q G L T1 T2.
#h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #G #L #T1 #T2
(* 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 ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ➡[h] V2 &
- â¬\86*[↑i] V2 ≘ T2 & I = LRef i.
+ | â\88\83â\88\83K,V,V2,i. â\87©*[i] L ≘ K.ⓓV & ⦃G,K⦄ ⊢ V ➡[h] V2 &
+ â\87§*[↑i] V2 ≘ 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 ≘ K. ⓓV & ⦃G,K⦄ ⊢ V ➡[h] V2 &
- â¬\86*[↑i] V2 ≘ T2.
+ | â\88\83â\88\83K,V,V2. â\87©*[i] L ≘ K. ⓓV & ⦃G,K⦄ ⊢ V ➡[h] V2 &
+ â\87§*[↑i] V2 ≘ 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/
(* Properties with basic relocation *****************************************)
lemma cpr_subst (h) (G) (L) (U1) (i):
- â\88\80K,V. â¬\87*[i] L ≘ K.ⓓV →
- â\88\83â\88\83U2,T2. â¦\83G,Lâ¦\84 â\8a¢ U1 â\9e¡[h] U2 & â¬\86[i,1] T2 ≘ U2.
+ â\88\80K,V. â\87©*[i] L ≘ K.ⓓV →
+ â\88\83â\88\83U2,T2. â¦\83G,Lâ¦\84 â\8a¢ U1 â\9e¡[h] U2 & â\87§[i,1] T2 ≘ U2.
#h #G #L #U1 @(fqup_wf_ind_eq (Ⓣ) … G L U1) -G -L -U1
#G0 #L0 #U0 #IH #G #L * *
[ #s #HG #HL #HT #i #K #V #_ destruct -IH
/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 ≘ W2 → ⦃G,K.ⓑ{I}V1⦄ ⊢ #0 ⬈[h] W2.
+ â\87§*[1] V2 ≘ 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 ≘ U → ⦃G,K.ⓘ{I}⦄ ⊢ #↑i ⬈[h] U.
+ â\87§*[1] T ≘ 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):
- â\88\80T1,T. â¬\86*[1] T ≘ T1 → ∀T2. ⦃G,L⦄ ⊢ T ⬈[h] T2 →
+ â\88\80T1,T. â\87§*[1] T ≘ T1 → ∀T2. ⦃G,L⦄ ⊢ T ⬈[h] T2 →
∀V. ⦃G,L⦄ ⊢ +ⓓV.T1 ⬈[h] T2.
#h #G #L #T1 #T #HT1 #T2 *
/3 width=4 by cpg_zeta, ex_intro/
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 ≘ V2 → ⦃G,L⦄ ⊢ W1 ⬈[h] W2 →
+ â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V â\86\92 â\87§*[1] V ≘ 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 = ⋆(⫯[h]s) & J = Sort s
- | â\88\83â\88\83I,K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â¬\86*[1] V2 ≘ T2 &
+ | â\88\83â\88\83I,K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â\87§*[1] V2 ≘ 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 ≘ T2 &
+ | â\88\83â\88\83I,K,T,i. â¦\83G,Kâ¦\84 â\8a¢ #i â¬\88[h] T & â\87§*[1] T ≘ 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 ≘ T2 &
+ | â\88\83â\88\83I,K,V1,V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â\87§*[1] V2 ≘ 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 ≘ T2 & L = K.ⓘ{I}.
+ | â\88\83â\88\83I,K,T. â¦\83G,Kâ¦\84 â\8a¢ #i â¬\88[h] T & â\87§*[1] T ≘ 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. â¬\86*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ⬈[h] U2 &
+ | â\88\83â\88\83T. â\87§*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ⬈[h] U2 &
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. â¬\86*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ⬈[h] U2 & p = true.
+ | â\88\83â\88\83T. â\87§*[1] T ≘ T1 & ⦃G,L⦄ ⊢ T ⬈[h] U2 & 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 ≘ V2 &
+ | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V & â\87§*[1] V ≘ 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 ≘ T2.
+ | â\88\83â\88\83V2. â¦\83G,Kâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â\87§*[1] V2 ≘ 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 ≘ T2.
+ | â\88\83â\88\83T. â¦\83G,Kâ¦\84 â\8a¢ #i â¬\88[h] T & â\87§*[1] T ≘ 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 ≘ V2 &
+ | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V & â\87§*[1] V ≘ 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. Q G L (⓪{I}) (⓪{I})) →
(∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) →
(∀I,G,K,V1,V2,W2. ⦃G,K⦄ ⊢ V1 ⬈[h] V2 → Q G K V1 V2 →
- â¬\86*[1] V2 ≘ W2 → Q G (K.ⓑ{I}V1) (#0) W2
+ â\87§*[1] V2 ≘ W2 → Q G (K.ⓑ{I}V1) (#0) W2
) → (∀I,G,K,T,U,i. ⦃G,K⦄ ⊢ #i ⬈[h] T → Q G K (#i) T →
- â¬\86*[1] T ≘ U → Q G (K.ⓘ{I}) (#↑i) (U)
+ â\87§*[1] T ≘ U → Q 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 →
Q G L V1 V2 → Q G (L.ⓑ{I}V1) T1 T2 → Q 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 →
Q G L V1 V2 → Q G L T1 T2 → Q G L (ⓕ{I}V1.T1) (ⓕ{I}V2.T2)
- ) â\86\92 (â\88\80G,L,V,T1,T,T2. â¬\86*[1] T ≘ T1 → ⦃G,L⦄ ⊢ T ⬈[h] T2 → Q G L T T2 →
+ ) â\86\92 (â\88\80G,L,V,T1,T,T2. â\87§*[1] T ≘ T1 → ⦃G,L⦄ ⊢ T ⬈[h] T2 → Q G L T T2 →
Q G L (+ⓓV.T1) T2
) → (∀G,L,V,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈[h] T2 → Q G L T1 T2 →
Q G L (ⓝV.T1) T2
Q 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 →
Q G L V1 V → Q G L W1 W2 → Q G (L.ⓓW1) T1 T2 →
- â¬\86*[1] V ≘ V2 → Q G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2)
+ â\87§*[1] V ≘ V2 → Q G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2)
) →
∀G,L,T1,T2. ⦃G,L⦄ ⊢ T1 ⬈[h] T2 → Q G L T1 T2.
#h #Q #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 ≘ K.ⓑ{I}V → ⦃G,K⦄ ⊢ V ⬈[h] V2 →
- â¬\86*[↑i] V2 ≘ W2 → ⦃G,L⦄ ⊢ #i ⬈[h] W2.
+ â\87©*[i] L ≘ K.ⓑ{I}V → ⦃G,K⦄ ⊢ V ⬈[h] V2 →
+ â\87§*[↑i] V2 ≘ 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 = ⋆(⫯[h]s) & I = Sort s
- | â\88\83â\88\83J,K,V,V2,i. â¬\87*[i] L ≘ K.ⓑ{J}V & ⦃G,K⦄ ⊢ V ⬈[h] V2 &
- â¬\86*[↑i] V2 ≘ T2 & I = LRef i.
+ | â\88\83â\88\83J,K,V,V2,i. â\87©*[i] L ≘ K.ⓑ{J}V & ⦃G,K⦄ ⊢ V ⬈[h] V2 &
+ â\87§*[↑i] V2 ≘ 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 ≘ K. ⓑ{J}V & ⦃G,K⦄ ⊢ V ⬈[h] V2 &
- â¬\86*[↑i] V2 ≘ T2.
+ â\88\83â\88\83J,K,V,V2. â\87©*[i] L ≘ K. ⓑ{J}V & ⦃G,K⦄ ⊢ V ⬈[h] V2 &
+ â\87§*[↑i] V2 ≘ 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-.
(* Properties with basic relocation *****************************************)
lemma cpx_subst (h) (G) (L) (U1) (i):
- â\88\80I,K,V. â¬\87*[i] L ≘ K.ⓑ{I}V →
- â\88\83â\88\83U2,T2. â¦\83G,Lâ¦\84 â\8a¢ U1 â¬\88[h] U2 & â¬\86[i,1] T2 ≘ U2.
+ â\88\80I,K,V. â\87©*[i] L ≘ K.ⓑ{I}V →
+ â\88\83â\88\83U2,T2. â¦\83G,Lâ¦\84 â\8a¢ U1 â¬\88[h] U2 & â\87§[i,1] T2 ≘ U2.
#h #G #L #U1 @(fqup_wf_ind_eq (Ⓣ) … G L U1) -G -L -U1
#G0 #L0 #U0 #IH #G #L * *
[ #s #HG #HL #HT #i #I #K #V #_ destruct -IH
∀G0,L0,i. (
∀G,L,T. ⦃G0,L0,#i⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
) →
- â\88\80K0,V0. â¬\87*[i] L0 ≘ K0.ⓓV0 →
- â\88\80V2. â¦\83G0,K0â¦\84 â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80T2. â¬\86*[↑i] V2 ≘ T2 →
+ â\88\80K0,V0. â\87©*[i] L0 ≘ K0.ⓓV0 →
+ â\88\80V2. â¦\83G0,K0â¦\84 â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80T2. â\87§*[↑i] V2 ≘ T2 →
∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 →
∃∃T. ⦃G0,L1⦄ ⊢ #i ➡[h] T & ⦃G0,L2⦄ ⊢ T2 ➡[h] T.
#h #G0 #L0 #i #IH #K0 #V0 #HLK0 #V2 #HV02 #T2 #HVT2 #L1 #HL01 #L2 #HL02
∀G0,L0,i. (
∀G,L,T. ⦃G0,L0,#i⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
) →
- â\88\80K0,V0. â¬\87*[i] L0 ≘ K0.ⓓV0 →
- â\88\80V1. â¦\83G0,K0â¦\84 â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80T1. â¬\86*[↑i] V1 ≘ T1 →
- â\88\80KX,VX. â¬\87*[i] L0 ≘ KX.ⓓVX →
- â\88\80V2. â¦\83G0,KXâ¦\84 â\8a¢ VX â\9e¡[h] V2 â\86\92 â\88\80T2. â¬\86*[↑i] V2 ≘ T2 →
+ â\88\80K0,V0. â\87©*[i] L0 ≘ K0.ⓓV0 →
+ â\88\80V1. â¦\83G0,K0â¦\84 â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80T1. â\87§*[↑i] V1 ≘ T1 →
+ â\88\80KX,VX. â\87©*[i] L0 ≘ KX.ⓓVX →
+ â\88\80V2. â¦\83G0,KXâ¦\84 â\8a¢ VX â\9e¡[h] V2 â\86\92 â\88\80T2. â\87§*[↑i] V2 ≘ T2 →
∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 →
∃∃T. ⦃G0,L1⦄ ⊢ T1 ➡[h] T & ⦃G0,L2⦄ ⊢ T2 ➡[h] T.
#h #G0 #L0 #i #IH #K0 #V0 #HLK0 #V1 #HV01 #T1 #HVT1
∀G,L,T. ⦃G0,L0,+ⓓV0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
) →
∀V1. ⦃G0,L0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⦃G0,L0.ⓓV0⦄ ⊢ T0 ➡[h] T1 →
- â\88\80T2. â¬\86*[1]T2 ≘ T0 → ∀X2. ⦃G0,L0⦄ ⊢ T2 ➡[h] X2 →
+ â\88\80T2. â\87§*[1]T2 ≘ T0 → ∀X2. ⦃G0,L0⦄ ⊢ T2 ➡[h] X2 →
∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 →
∃∃T. ⦃G0,L1⦄ ⊢ +ⓓV1.T1 ➡[h] T & ⦃G0,L2⦄ ⊢ X2 ➡[h] T.
#h #G0 #L0 #V0 #T0 #IH #V1 #HV01 #T1 #HT01
∀G0,L0,V0,T0. (
∀G,L,T. ⦃G0,L0,+ⓓV0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
) →
- â\88\80T1. â¬\86*[1] T1 ≘ T0 → ∀X1. ⦃G0,L0⦄ ⊢ T1 ➡[h] X1 →
- â\88\80T2. â¬\86*[1] T2 ≘ T0 → ∀X2. ⦃G0,L0⦄ ⊢ T2 ➡[h] X2 →
+ â\88\80T1. â\87§*[1] T1 ≘ T0 → ∀X1. ⦃G0,L0⦄ ⊢ T1 ➡[h] X1 →
+ â\88\80T2. â\87§*[1] T2 ≘ T0 → ∀X2. ⦃G0,L0⦄ ⊢ T2 ➡[h] X2 →
∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 →
∃∃T. ⦃G0,L1⦄ ⊢ X1 ➡[h] T & ⦃G0,L2⦄ ⊢ X2 ➡[h] T.
#h #G0 #L0 #V0 #T0 #IH #T1 #HT10 #X1 #HTX1
∀G,L,T. ⦃G0,L0,ⓐV0.ⓓ{p}W0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
) →
∀V1. ⦃G0,L0⦄ ⊢ V0 ➡[h] V1 → ∀T1. ⦃G0,L0⦄ ⊢ ⓓ{p}W0.T0 ➡[h] T1 →
- â\88\80V2. â¦\83G0,L0â¦\84 â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80U2. â¬\86*[1] V2 ≘ U2 →
+ â\88\80V2. â¦\83G0,L0â¦\84 â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80U2. â\87§*[1] V2 ≘ U2 →
∀W2. ⦃G0,L0⦄ ⊢ W0 ➡[h] W2 → ∀T2. ⦃G0,L0.ⓓW0⦄ ⊢ T0 ➡[h] T2 →
∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 →
∃∃T. ⦃G0,L1⦄ ⊢ ⓐV1.T1 ➡[h] T & ⦃G0,L2⦄ ⊢ ⓓ{p}W2.ⓐU2.T2 ➡[h] T.
∀p,G0,L0,V0,W0,T0. (
∀G,L,T. ⦃G0,L0,ⓐV0.ⓓ{p}W0.T0⦄ ⬂+ ⦃G,L,T⦄ → IH_cpr_conf_lpr h G L T
) →
- â\88\80V1. â¦\83G0,L0â¦\84 â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80U1. â¬\86*[1] V1 ≘ U1 →
+ â\88\80V1. â¦\83G0,L0â¦\84 â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80U1. â\87§*[1] V1 ≘ U1 →
∀W1. ⦃G0,L0⦄ ⊢ W0 ➡[h] W1 → ∀T1. ⦃G0,L0.ⓓW0⦄ ⊢ T0 ➡[h] T1 →
- â\88\80V2. â¦\83G0,L0â¦\84 â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80U2. â¬\86*[1] V2 ≘ U2 →
+ â\88\80V2. â¦\83G0,L0â¦\84 â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80U2. â\87§*[1] V2 ≘ U2 →
∀W2. ⦃G0,L0⦄ ⊢ W0 ➡[h] W2 → ∀T2. ⦃G0,L0.ⓓW0⦄ ⊢ T0 ➡[h] T2 →
∀L1. ⦃G0,L0⦄ ⊢ ➡[h] L1 → ∀L2. ⦃G0,L0⦄ ⊢ ➡[h] L2 →
∃∃T. ⦃G0,L1⦄ ⊢ ⓓ{p}W1.ⓐU1.T1 ➡[h] T & ⦃G0,L2⦄ ⊢ ⓓ{p}W2.ⓐU2.T2 ➡[h] T.
lemma rpx_inv_lifts_bi (h) (G):
∀L1,L2,U. ⦃G,L1⦄ ⊢ ⬈[h,U] L2 → ∀b,f. 𝐔⦃f⦄ →
- â\88\80K1,K2. â¬\87*[b,f] L1 â\89\98 K1 â\86\92 â¬\87*[b,f] L2 ≘ K2 →
- â\88\80T. â¬\86*[f]T ≘ U → ⦃G,K1⦄ ⊢ ⬈[h,T] K2.
+ â\88\80K1,K2. â\87©*[b,f] L1 â\89\98 K1 â\86\92 â\87©*[b,f] L2 ≘ K2 →
+ â\88\80T. â\87§*[f]T ≘ U → ⦃G,K1⦄ ⊢ ⬈[h,T] K2.
/2 width=10 by rex_inv_lifts_bi/ qed-.
(* Forward lemmas with free variables inclusion for restricted closures *****)
(* Note: "⦃L2, T1⦄ ⊆ ⦃L2, T0⦄" does not hold *)
-(* Note: Take L0 = K0.â\93\93(â\93\9dW.V), L2 = K0.â\93\93W, T0 = #0, T1 = â¬\86*[1]V *)
+(* Note: Take L0 = K0.â\93\93(â\93\9dW.V), L2 = K0.â\93\93W, T0 = #0, T1 = â\87§*[1]V *)
(* Note: This invalidates rpxs_cpx_conf: "∀h, G. s_r_confluent1 … (cpx h G) (rpxs h G)" *)
lemma rpx_cpx_conf_fsge (h) (G): ∀L0,T0,T1. ⦃G,L0⦄ ⊢ T0 ⬈[h] T1 →
∀L2. ⦃G,L0⦄ ⊢⬈[h,T0] L2 → ⦃L2,T1⦄ ⊆ ⦃L0,T0⦄.
}
]
[ { "global env. slicing" * } {
- [ [ "" ] "gget ( â¬\87[?] ? ≘ ? )" "gget_gget" * ]
+ [ [ "" ] "gget ( â\87©[?] ? ≘ ? )" "gget_gget" * ]
}
]
[ { "context-sensitive ordinary rt-substitution" * } {
(* ITERATED EXTENSION ON REFERRED ENTRIES OF A CONTEXT-SENSITIVE REALTION ***)
definition tc_f_dedropable_sn: predicate (relation3 lenv term term) ≝
- λR. â\88\80b,f,L1,K1. â¬\87*[b,f] L1 ≘ K1 →
- â\88\80K2,T. K1 ⪤*[R,T] K2 â\86\92 â\88\80U. â¬\86*[f] T ≘ U →
- â\88\83â\88\83L2. L1 ⪤*[R,U] L2 & â¬\87*[b,f] L2 ≘ K2 & L1 ≡[f] L2.
+ λR. â\88\80b,f,L1,K1. â\87©*[b,f] L1 ≘ K1 →
+ â\88\80K2,T. K1 ⪤*[R,T] K2 â\86\92 â\88\80U. â\87§*[f] T ≘ U →
+ â\88\83â\88\83L2. L1 ⪤*[R,U] L2 & â\87©*[b,f] L2 ≘ K2 & L1 ≡[f] L2.
definition tc_f_dropable_sn: predicate (relation3 lenv term term) ≝
- λR. â\88\80b,f,L1,K1. â¬\87*[b,f] L1 ≘ K1 → 𝐔⦃f⦄ →
- â\88\80L2,U. L1 ⪤*[R,U] L2 â\86\92 â\88\80T. â¬\86*[f] T ≘ U →
- â\88\83â\88\83K2. K1 ⪤*[R,T] K2 & â¬\87*[b,f] L2 ≘ K2.
+ λR. â\88\80b,f,L1,K1. â\87©*[b,f] L1 ≘ K1 → 𝐔⦃f⦄ →
+ â\88\80L2,U. L1 ⪤*[R,U] L2 â\86\92 â\88\80T. â\87§*[f] T ≘ U →
+ â\88\83â\88\83K2. K1 ⪤*[R,T] K2 & â\87©*[b,f] L2 ≘ K2.
definition tc_f_dropable_dx: predicate (relation3 lenv term term) ≝
λR. ∀L1,L2,U. L1 ⪤*[R,U] L2 →
- â\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 ≘ U →
- â\88\83â\88\83K1. â¬\87*[b,f] L1 ≘ 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. â\87§*[f] T ≘ U →
+ â\88\83â\88\83K1. â\87©*[b,f] L1 ≘ K1 & K1 ⪤*[R,T] K2.
(* Properties with generic slicing for local environments *******************)
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¬\87 * [ term 46 i ] break term 46 L1 ≘ break term 46 L2 )"
+notation "hvbox( â\87© * [ term 46 i ] break term 46 L1 ≘ 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 ≘ break term 46 L2 )"
+notation "hvbox( â\87© * [ term 46 b, break term 46 f ] break term 46 L1 ≘ 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 m, break term 46 n ] break term 46 T1 ≘ break term 46 T2 )"
+notation "hvbox( â\87§[ term 46 m, break term 46 n ] break term 46 T1 ≘ break term 46 T2 )"
non associative with precedence 45
for @{ 'RLift $m $n $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¬\86 * [ term 46 f ] break term 46 T1 ≘ break term 46 T2 )"
+notation "hvbox( â\87§ * [ term 46 f ] break term 46 T1 ≘ 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 ≘ I1 →
+ drops b f L1 L2 â\86\92 â\87§*[f] I2 ≘ 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 ≘ K →
- â\88\80U. â¬\86*[f] T ≘ U → R L U.
+ λR. â\88\80K,T. R K T â\86\92 â\88\80b,f,L. â\87©*[b,f] L ≘ K →
+ â\88\80U. â\87§*[f] T ≘ 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 ≘ K → 𝐔⦃f⦄ →
- â\88\80U. â¬\86*[f] T ≘ U → R L U.
+ λR. â\88\80K,T. R K T â\86\92 â\88\80b,f,L. â\87©*[b,f] L ≘ K → 𝐔⦃f⦄ →
+ â\88\80U. â\87§*[f] T ≘ 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 ≘ K →
- â\88\80T. â¬\86*[f] T ≘ U → R K T.
+ λR. â\88\80L,U. R L U â\86\92 â\88\80b,f,K. â\87©*[b,f] L ≘ K →
+ â\88\80T. â\87§*[f] T ≘ 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 ≘ K → 𝐔⦃f⦄ →
- â\88\80T. â¬\86*[f] T ≘ U → R K T.
+ λR. â\88\80L,U. R L U â\86\92 â\88\80b,f,K. â\87©*[b,f] L ≘ K → 𝐔⦃f⦄ →
+ â\88\80T. â\87§*[f] T ≘ 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 ≘ K →
+ λC,S,R. â\88\80K,T1,T2. R K T1 T2 â\86\92 â\88\80b,f,L. â\87©*[b,f] L ≘ 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 ≘ K →
+ λC,S,R. â\88\80L,U1,U2. R L U1 U2 â\86\92 â\88\80b,f,K. â\87©*[b,f] L ≘ 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 ≘ K →
+ λC,S,R. â\88\80K,T1,T2. R K T1 T2 â\86\92 â\88\80b,f,L. â\87©*[b,f] L ≘ 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 ≘ K →
+ λC,S,R. â\88\80L,U1,U2. R L U1 U2 â\86\92 â\88\80b,f,K. â\87©*[b,f] L ≘ 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 ≘ K1 → 𝐔⦃f⦄ →
+ λR. â\88\80b,f,L1,K1. â\87©*[b,f] L1 ≘ K1 → 𝐔⦃f⦄ →
∀f2,L2. R f2 L1 L2 → ∀f1. f ~⊚ f1 ≘ f2 →
- â\88\83â\88\83K2. R f1 K1 K2 & â¬\87*[b,f] L2 ≘ K2.
+ â\88\83â\88\83K2. R f1 K1 K2 & â\87©*[b,f] L2 ≘ 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 ≘ K2 → 𝐔⦃f⦄ →
+ â\88\80b,f,K2. â\87©*[b,f] L2 ≘ K2 → 𝐔⦃f⦄ →
∀f1. f ~⊚ f1 ≘ f2 →
- â\88\83â\88\83K1. â¬\87*[b,f] L1 ≘ K1 & R f1 K1 K2.
+ â\88\83â\88\83K1. â\87©*[b,f] L1 ≘ K1 & R f1 K1 K2.
definition co_dedropable_sn: predicate (rtmap → relation lenv) ≝
- λR. â\88\80b,f,L1,K1. â¬\87*[b,f] L1 ≘ K1 → ∀f1,K2. R f1 K1 K2 →
+ λR. â\88\80b,f,L1,K1. â\87©*[b,f] L1 ≘ K1 → ∀f1,K2. R f1 K1 K2 →
∀f2. f ~⊚ f1 ≘ f2 →
- â\88\83â\88\83L2. R f2 L1 L2 & â¬\87*[b,f] L2 ≘ K2 & L1 ≡[f] L2.
+ â\88\83â\88\83L2. R f2 L1 L2 & â\87©*[b,f] L2 ≘ K2 & L1 ≡[f] L2.
(* Basic properties *********************************************************)
-lemma drops_atom_F: â\88\80f. â¬\87*[Ⓕ,f] ⋆ ≘ ⋆.
+lemma drops_atom_F: â\88\80f. â\87©*[Ⓕ,f] ⋆ ≘ ⋆.
#f @drops_atom #H destruct
qed.
-lemma drops_eq_repl_back: â\88\80b,L1,L2. eq_repl_back â\80¦ (λf. â¬\87*[b,f] L1 ≘ L2).
+lemma drops_eq_repl_back: â\88\80b,L1,L2. eq_repl_back â\80¦ (λf. â\87©*[b,f] L1 ≘ 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 ≘ L2).
+lemma drops_eq_repl_fwd: â\88\80b,L1,L2. eq_repl_fwd â\80¦ (λf. â\87©*[b,f] L1 ≘ 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\98 L2 â\86\92 â¬\87*[Ⓕ,f] L1 ≘ L2.
+lemma drops_TF: â\88\80f,L1,L2. â\87©*[â\93\89,f] L1 â\89\98 L2 â\86\92 â\87©*[Ⓕ,f] L1 ≘ 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\98 L2 â\86\92 â¬\87*[b,f] L1 ≘ L2.
+lemma drops_gen: â\88\80b,f,L1,L2. â\87©*[â\93\89,f] L1 â\89\98 L2 â\86\92 â\87©*[b,f] L1 ≘ 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\98 L2 â\86\92 â¬\87*[Ⓕ,f] L1 ≘ L2.
+lemma drops_F: â\88\80b,f,L1,L2. â\87©*[b,f] L1 â\89\98 L2 â\86\92 â\87©*[Ⓕ,f] L1 ≘ 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 ≘ Y → X = ⋆ →
+fact drops_inv_atom1_aux: â\88\80b,f,X,Y. â\87©*[b,f] X ≘ 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] ⋆ ≘ Y → Y = ⋆ ∧ (b = Ⓣ → 𝐈⦃f⦄).
+lemma drops_inv_atom1: â\88\80b,f,Y. â\87©*[b,f] ⋆ ≘ 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 ≘ Y → ∀g,I,K. X = K.ⓘ{I} → f = ↑g →
- â¬\87*[b,g] K ≘ Y.
+fact drops_inv_drop1_aux: â\88\80b,f,X,Y. â\87©*[b,f] X ≘ Y → ∀g,I,K. X = K.ⓘ{I} → f = ↑g →
+ â\87©*[b,g] K ≘ 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,â\86\91f] K.â\93\98{I} â\89\98 Y â\86\92 â¬\87*[b,f] K ≘ Y.
+lemma drops_inv_drop1: â\88\80b,f,I,K,Y. â\87©*[b,â\86\91f] K.â\93\98{I} â\89\98 Y â\86\92 â\87©*[b,f] K ≘ Y.
/2 width=6 by drops_inv_drop1_aux/ qed-.
-fact drops_inv_skip1_aux: â\88\80b,f,X,Y. â¬\87*[b,f] X ≘ Y → ∀g,I1,K1. X = K1.ⓘ{I1} → f = ⫯g →
- â\88\83â\88\83I2,K2. â¬\87*[b,g] K1 â\89\98 K2 & â¬\86*[g] I2 ≘ I1 & Y = K2.ⓘ{I2}.
+fact drops_inv_skip1_aux: â\88\80b,f,X,Y. â\87©*[b,f] X ≘ Y → ∀g,I1,K1. X = K1.ⓘ{I1} → f = ⫯g →
+ â\88\83â\88\83I2,K2. â\87©*[b,g] K1 â\89\98 K2 & â\87§*[g] I2 ≘ 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,⫯f] K1.ⓘ{I1} ≘ Y →
- â\88\83â\88\83I2,K2. â¬\87*[b,f] K1 â\89\98 K2 & â¬\86*[f] I2 ≘ I1 & Y = K2.ⓘ{I2}.
+lemma drops_inv_skip1: â\88\80b,f,I1,K1,Y. â\87©*[b,⫯f] K1.ⓘ{I1} ≘ Y →
+ â\88\83â\88\83I2,K2. â\87©*[b,f] K1 â\89\98 K2 & â\87§*[f] I2 ≘ 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 ≘ Y → ∀g,I2,K2. Y = K2.ⓘ{I2} → f = ⫯g →
- â\88\83â\88\83I1,K1. â¬\87*[b,g] K1 â\89\98 K2 & â¬\86*[g] I2 ≘ I1 & X = K1.ⓘ{I1}.
+fact drops_inv_skip2_aux: â\88\80b,f,X,Y. â\87©*[b,f] X ≘ Y → ∀g,I2,K2. Y = K2.ⓘ{I2} → f = ⫯g →
+ â\88\83â\88\83I1,K1. â\87©*[b,g] K1 â\89\98 K2 & â\87§*[g] I2 ≘ 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,⫯f] X ≘ K2.ⓘ{I2} →
- â\88\83â\88\83I1,K1. â¬\87*[b,f] K1 â\89\98 K2 & â¬\86*[f] I2 ≘ I1 & X = K1.ⓘ{I1}.
+lemma drops_inv_skip2: â\88\80b,f,I2,X,K2. â\87©*[b,⫯f] X ≘ K2.ⓘ{I2} →
+ â\88\83â\88\83I1,K1. â\87©*[b,f] K1 â\89\98 K2 & â\87§*[f] I2 ≘ 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 ≘ Y → ∀I,K. Y = K.ⓘ{I} →
- â\88\83â\88\83f1,f. ð\9d\90\88â¦\83f1â¦\84 & f2 â\8a\9a â\86\91f1 â\89\98 f & â¬\87*[b,f] X ≘ K.
+fact drops_fwd_drop2_aux: â\88\80b,f2,X,Y. â\87©*[b,f2] X ≘ Y → ∀I,K. Y = K.ⓘ{I} →
+ â\88\83â\88\83f1,f. ð\9d\90\88â¦\83f1â¦\84 & f2 â\8a\9a â\86\91f1 â\89\98 f & â\87©*[b,f] X ≘ 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 ≘ K.ⓘ{I} →
- â\88\83â\88\83f1,f. ð\9d\90\88â¦\83f1â¦\84 & f2 â\8a\9a â\86\91f1 â\89\98 f & â¬\87*[b,f] X ≘ K.
+lemma drops_fwd_drop2: â\88\80b,f2,I,X,K. â\87©*[b,f2] X ≘ K.ⓘ{I} →
+ â\88\83â\88\83f1,f. ð\9d\90\88â¦\83f1â¦\84 & f2 â\8a\9a â\86\91f1 â\89\98 f & â\87©*[b,f] X ≘ 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 ≘ L.
+lemma drops_refl: â\88\80b,L,f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 â\87©*[b,f] L ≘ 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 ≘ L2 → 𝐈⦃f⦄ → L1 = L2.
+lemma drops_fwd_isid: â\88\80b,f,L1,L2. â\87©*[b,f] L1 ≘ 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 ≘ K.ⓘ{I} →
- â\88\80f1,f. ð\9d\90\88â¦\83f1â¦\84 â\86\92 f2 â\8a\9a â\86\91f1 â\89\98 f â\86\92 â¬\87*[b,f] X ≘ K.
+lemma drops_after_fwd_drop2: â\88\80b,f2,I,X,K. â\87©*[b,f2] X ≘ K.ⓘ{I} →
+ â\88\80f1,f. ð\9d\90\88â¦\83f1â¦\84 â\86\92 f2 â\8a\9a â\86\91f1 â\89\98 f â\86\92 â\87©*[b,f] X ≘ 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*[Ⓣ,f] L1 ≘ L2 → 𝐅⦃f⦄.
+lemma drops_fwd_isfin: â\88\80f,L1,L2. â\87©*[Ⓣ,f] L1 ≘ 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*[Ⓕ,f] L ≘ K.
+lemma drops_isuni_ex: â\88\80f. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\88\80L. â\88\83K. â\87©*[Ⓕ,f] L ≘ 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*[Ⓣ,f] L1 ≘ L2 → 𝐔⦃f⦄ →
+lemma drops_inv_isuni: â\88\80f,L1,L2. â\87©*[Ⓣ,f] L1 ≘ L2 → 𝐔⦃f⦄ →
(𝐈⦃f⦄ ∧ L1 = L2) ∨
- â\88\83â\88\83g,I,K. â¬\87*[Ⓣ,g] K ≘ L2 & 𝐔⦃g⦄ & L1 = K.ⓘ{I} & f = ↑g.
+ â\88\83â\88\83g,I,K. â\87©*[Ⓣ,g] K ≘ 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.ⓘ{I} ≘ L2 →
+lemma drops_inv_bind1_isuni: â\88\80b,f,I,K,L2. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\87©*[b,f] K.ⓘ{I} ≘ L2 →
(𝐈⦃f⦄ ∧ L2 = K.ⓘ{I}) ∨
- â\88\83â\88\83g. ð\9d\90\94â¦\83gâ¦\84 & â¬\87*[b,g] K ≘ L2 & f = ↑g.
+ â\88\83â\88\83g. ð\9d\90\94â¦\83gâ¦\84 & â\87©*[b,g] K ≘ 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 ≘ K.ⓘ{I} →
+lemma drops_inv_bind2_isuni: â\88\80b,f,I,K,L1. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\87©*[b,f] L1 ≘ K.ⓘ{I} →
(𝐈⦃f⦄ ∧ L1 = K.ⓘ{I}) ∨
- â\88\83â\88\83g,I1,K1. ð\9d\90\94â¦\83gâ¦\84 & â¬\87*[b,g] K1 ≘ K.ⓘ{I} & L1 = K1.ⓘ{I1} & f = ↑g.
+ â\88\83â\88\83g,I1,K1. ð\9d\90\94â¦\83gâ¦\84 & â\87©*[b,g] K1 ≘ 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 ≘ K.ⓘ{I} →
- â\88\83â\88\83I1,K1. â¬\87*[b,f] K1 ≘ 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 ≘ K.ⓘ{I} →
+ â\88\83â\88\83I1,K1. â\87©*[b,f] K1 ≘ 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*[Ⓕ,f] L1 ≘ L2 → 𝐔⦃f⦄ →
- â\88\80I,K. L2 = K.â\93\98{I} â\86\92 â¬\87*[Ⓣ,f] L1 ≘ K.ⓘ{I}.
+fact drops_inv_TF_aux: â\88\80f,L1,L2. â\87©*[Ⓕ,f] L1 ≘ L2 → 𝐔⦃f⦄ →
+ â\88\80I,K. L2 = K.â\93\98{I} â\86\92 â\87©*[Ⓣ,f] L1 ≘ 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\98 K.â\93\98{I} â\86\92 ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[Ⓣ,f] L ≘ 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©*[Ⓣ,f] L ≘ 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\98 K.â\93\98{I} â\86\92 ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[Ⓣ,f] L ≘ 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©*[Ⓣ,f] L ≘ 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\98 K.â\93\98{I} â\86\92 ð\9d\90\94â¦\83fâ¦\84 â\86\92 â¬\87*[b,f] L ≘ 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 ≘ 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\98 K.â\93\98{I} â\86\92 â¬\87*[b,↑f] X ≘ 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 ≘ 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 ≘ ⋆ →
- â\88\83â\88\83n,f1. â¬\87*[b,𝐔❴n❵] L ≘ ⋆ & 𝐔❴n❵ ⊚ f1 ≘ f.
+lemma drops_inv_atom2: â\88\80b,L,f. â\87©*[b,f] L ≘ ⋆ →
+ â\88\83â\88\83n,f1. â\87©*[b,𝐔❴n❵] L ≘ ⋆ & 𝐔❴n❵ ⊚ f1 ≘ 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 ≘ L2 →
- â\88\83â\88\83I,K. â¬\87*[i] K ≘ L2 & L1 = K.ⓘ{I}.
+lemma drops_inv_succ: â\88\80L1,L2,i. â\87©*[↑i] L1 ≘ L2 →
+ â\88\83â\88\83I,K. â\87©*[i] K ≘ 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\98 â\8b\86 â\88¨ â\88\83â\88\83I,K. â¬\87*[i] L ≘ 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 ≘ 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 ≘ L2 → ∀f1,f2. f1 ⊚ f2 ≘ f → 𝐔⦃f1⦄ →
- â\88\83â\88\83L. â¬\87*[b,f1] L1 â\89\98 L & â¬\87*[b,f2] L ≘ L2.
+lemma drops_split_trans: â\88\80b,f,L1,L2. â\87©*[b,f] L1 ≘ L2 → ∀f1,f2. f1 ⊚ f2 ≘ f → 𝐔⦃f1⦄ →
+ â\88\83â\88\83L. â\87©*[b,f1] L1 â\89\98 L & â\87©*[b,f2] L ≘ 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 ≘ L → ∀f2,f. f1 ⊚ f2 ≘ f → 𝐔⦃f2⦄ →
- â\88\83â\88\83L2. â¬\87*[â\92»,f2] L â\89\98 L2 & â¬\87*[Ⓕ,f] L1 ≘ L2.
+lemma drops_split_div: â\88\80b,f1,L1,L. â\87©*[b,f1] L1 ≘ L → ∀f2,f. f1 ⊚ f2 ≘ f → 𝐔⦃f2⦄ →
+ â\88\83â\88\83L2. â\87©*[â\92»,f2] L â\89\98 L2 & â\87©*[Ⓕ,f] L1 ≘ 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: ∀f,i1,i2. @⦃i1,f⦄ ≘ i2 →
- â\88\80b,L1,L2. â¬\87*[b,⫱*[i2]f] L1 ≘ L2 →
- â¬\87*[b,⫯⫱*[↑i2]f] L1 ≘ L2.
+ â\88\80b,L1,L2. â\87©*[b,⫱*[i2]f] L1 ≘ L2 →
+ â\87©*[b,⫯⫱*[↑i2]f] L1 ≘ 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 ≘ K0.ⓘ{I} → ∀i. @⦃O,f⦄ ≘ i →
- â\88\83â\88\83J,K. â¬\87*[i]L â\89\98 K.â\93\98{J} & â¬\87*[b,⫱*[â\86\91i]f] K â\89\98 K0 & â¬\86*[⫱*[↑i]f] I ≘ J.
+lemma drops_split_trans_bind2: â\88\80b,f,I,L,K0. â\87©*[b,f] L ≘ K0.ⓘ{I} → ∀i. @⦃O,f⦄ ≘ i →
+ â\88\83â\88\83J,K. â\87©*[i]L â\89\98 K.â\93\98{J} & â\87©*[b,⫱*[â\86\91i]f] K â\89\98 K0 & â\87§*[⫱*[↑i]f] I ≘ 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 ≘ L →
- â\88\80b2,f,L2. â¬\87*[b2,f] L1 ≘ L2 →
- â\88\80f2. f1 â\8a\9a f2 â\89\98 f â\86\92 â¬\87*[b2,f2] L ≘ L2.
+theorem drops_conf: â\88\80b1,f1,L1,L. â\87©*[b1,f1] L1 ≘ L →
+ â\88\80b2,f,L2. â\87©*[b2,f] L1 ≘ L2 →
+ â\88\80f2. f1 â\8a\9a f2 â\89\98 f â\86\92 â\87©*[b2,f2] L ≘ 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 ≘ L →
- â\88\80b2,f2,L2. â¬\87*[b2,f2] L ≘ L2 →
- â\88\80f. f1 â\8a\9a f2 â\89\98 f â\86\92 â¬\87*[b1∧b2,f] L1 ≘ L2.
+theorem drops_trans: â\88\80b1,f1,L1,L. â\87©*[b1,f1] L1 ≘ L →
+ â\88\80b2,f2,L2. â\87©*[b2,f2] L ≘ L2 →
+ â\88\80f. f1 â\8a\9a f2 â\89\98 f â\86\92 â\87©*[b1∧b2,f] L1 ≘ 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\98 K â\86\92 â\88\80f2. â¬\87*[Ⓣ,f2] L ≘ K →
+theorem drops_conf_div: â\88\80f1,L,K. â\87©*[â\93\89,f1] L â\89\98 K â\86\92 â\88\80f2. â\87©*[Ⓣ,f2] L ≘ 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 ≘ L1 →
- â\88\80b2,L2. â¬\87*[b2,f] L ≘ L2 → L1 = L2.
+lemma drops_mono: â\88\80b1,f,L,L1. â\87©*[b1,f] L ≘ L1 →
+ â\88\80b2,L2. â\87©*[b2,f] L ≘ L2 → L1 = L2.
#b1 #f #L #L1 lapply (after_isid_dx 𝐈𝐝 … f)
/3 width=8 by drops_conf, drops_fwd_isid/
qed-.
-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 ≘ 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 ≘ K.ⓘ{I} → ⊥.
#L #i #H1 #I #K #H2
lapply (drops_F … H2) -H2 #H2
lapply (drops_mono … H2 … H1) -L -i #H destruct
qed-.
-lemma drops_ldec_dec: â\88\80L,i. Decidable (â\88\83â\88\83K,W. â¬\87*[i] L ≘ K.ⓛW).
+lemma drops_ldec_dec: â\88\80L,i. Decidable (â\88\83â\88\83K,W. â\87©*[i] L ≘ K.ⓛW).
#L #i elim (drops_F_uni L i) [| * * [ #I #K1 | * #W1 #K1 ] ]
[4: /3 width=3 by ex1_2_intro, or_introl/
|*: #H1L @or_intror * #K2 #W2 #H2L
qed-.
(* Basic_2A1: includes: drop_conf_lt *)
-lemma drops_conf_skip1: â\88\80b2,f,L,L2. â¬\87*[b2,f] L ≘ L2 →
- â\88\80b1,f1,I1,K1. â¬\87*[b1,f1] L ≘ K1.ⓘ{I1} →
+lemma drops_conf_skip1: â\88\80b2,f,L,L2. â\87©*[b2,f] L ≘ L2 →
+ â\88\80b1,f1,I1,K1. â\87©*[b1,f1] L ≘ K1.ⓘ{I1} →
∀f2. f1 ⊚ ⫯f2 ≘ f →
∃∃I2,K2. L2 = K2.ⓘ{I2} &
- â¬\87*[b2,f2] K1 â\89\98 K2 & â¬\86*[f2] I2 ≘ I1.
+ â\87©*[b2,f2] K1 â\89\98 K2 & â\87§*[f2] I2 ≘ 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 ≘ L →
- â\88\80b2,f2,I2,K2. â¬\87*[b2,f2] L ≘ K2.ⓘ{I2} →
+lemma drops_trans_skip2: â\88\80b1,f1,L1,L. â\87©*[b1,f1] L1 ≘ L →
+ â\88\80b2,f2,I2,K2. â\87©*[b2,f2] L ≘ K2.ⓘ{I2} →
∀f. f1 ⊚ f2 ≘ ⫯f →
∃∃I1,K1. L1 = K1.ⓘ{I1} &
- â¬\87*[b1â\88§b2,f] K1 â\89\98 K2 & â¬\86*[f] I2 ≘ I1.
+ â\87©*[b1â\88§b2,f] K1 â\89\98 K2 & â\87§*[f] I2 ≘ 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\98 K.â\93\98{I1} â\86\92 â¬\87*[Ⓣ,f2] L ≘ K.ⓘ{I2} →
+ â\87©*[â\93\89,f1] L â\89\98 K.â\93\98{I1} â\86\92 â\87©*[Ⓣ,f2] L ≘ 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
(* 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 ≘ L2 → |L2| ≤ |L1|.
+lemma drops_fwd_length_le4: â\88\80b,f,L1,L2. â\87©*[b,f] L1 ≘ 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 ≘ K1 →
- â\88\80L2,K2. â¬\87*[b2,f] L2 ≘ K2 →
+theorem drops_fwd_length_eq1: â\88\80b1,b2,f,L1,K1. â\87©*[b1,f] L1 ≘ K1 →
+ â\88\80L2,K2. â\87©*[b2,f] L2 ≘ 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*[Ⓣ,f] L1 ≘ L2 →
+lemma drops_fwd_fcla: â\88\80f,L1,L2. â\87©*[Ⓣ,f] L1 ≘ L2 →
∃∃n. 𝐂⦃f⦄ ≘ n & |L1| = |L2| + n.
#f #L1 #L2 #H elim H -f -L1 -L2
[ /4 width=3 by fcla_isid, ex2_intro/
qed-.
(* Basic_2A1: includes: drop_fwd_length *)
-lemma drops_fcla_fwd: â\88\80f,L1,L2,n. â¬\87*[Ⓣ,f] L1 ≘ L2 → 𝐂⦃f⦄ ≘ n →
+lemma drops_fcla_fwd: â\88\80f,L1,L2,n. â\87©*[Ⓣ,f] L1 ≘ L2 → 𝐂⦃f⦄ ≘ 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*[Ⓣ,f] L1 ≘ L2 →
+lemma drops_fwd_fcla_le2: â\88\80f,L1,L2. â\87©*[Ⓣ,f] L1 ≘ L2 →
∃∃n. 𝐂⦃f⦄ ≘ 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*[Ⓣ,f] L1 ≘ L2 → 𝐂⦃f⦄ ≘ n →
+lemma drops_fcla_fwd_le2: â\88\80f,L1,L2,n. â\87©*[Ⓣ,f] L1 ≘ L2 → 𝐂⦃f⦄ ≘ 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*[Ⓣ,f] L1 ≘ K2.ⓘ{I2} →
+lemma drops_fwd_fcla_lt2: â\88\80f,L1,I2,K2. â\87©*[Ⓣ,f] L1 ≘ K2.ⓘ{I2} →
∃∃n. 𝐂⦃f⦄ ≘ 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/
(* Basic_2A1: includes: drop_fwd_length_lt2 *)
lemma drops_fcla_fwd_lt2: ∀f,L1,I2,K2,n.
- â¬\87*[Ⓣ,f] L1 ≘ K2.ⓘ{I2} → 𝐂⦃f⦄ ≘ n →
+ â\87©*[Ⓣ,f] L1 ≘ K2.ⓘ{I2} → 𝐂⦃f⦄ ≘ 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*[Ⓣ,f] L1 ≘ L2 → 𝐂⦃f⦄ ≘ n → 0 < n →
+lemma drops_fcla_fwd_lt4: â\88\80f,L1,L2,n. â\87©*[Ⓣ,f] L1 ≘ L2 → 𝐂⦃f⦄ ≘ 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*[Ⓣ,f] L1 ≘ L2 → |L1| = |L2| → 𝐈⦃f⦄.
+lemma drops_inv_length_eq: â\88\80f,L1,L2. â\87©*[Ⓣ,f] L1 ≘ 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\98 K1 â\86\92 â¬\87*[Ⓣ,f] L2 ≘ K2 →
+theorem drops_fwd_length_eq2: â\88\80f,L1,L2,K1,K2. â\87©*[â\93\89,f] L1 â\89\98 K1 â\86\92 â\87©*[Ⓣ,f] L2 ≘ 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\98 L2 â\86\92 â¬\87*[Ⓣ,f2] L1 ≘ L2 →
+theorem drops_conf_div: â\88\80f1,f2,L1,L2. â\87©*[â\93\89,f1] L1 â\89\98 L2 â\86\92 â\87©*[Ⓣ,f2] L1 ≘ L2 →
∃∃n. 𝐂⦃f1⦄ ≘ n & 𝐂⦃f2⦄ ≘ n.
#f1 #f2 #L1 #L2 #H1 #H2
elim (drops_fwd_fcla … H1) -H1 #n1 #Hf1 #H1
qed-.
theorem drops_conf_div_fcla: ∀f1,f2,L1,L2,n1,n2.
- â¬\87*[â\93\89,f1] L1 â\89\98 L2 â\86\92 â¬\87*[Ⓣ,f2] L1 ≘ L2 → 𝐂⦃f1⦄ ≘ n1 → 𝐂⦃f2⦄ ≘ n2 →
+ â\87©*[â\93\89,f1] L1 â\89\98 L2 â\86\92 â\87©*[Ⓣ,f2] L1 ≘ L2 → 𝐂⦃f1⦄ ≘ n1 → 𝐂⦃f2⦄ ≘ n2 →
n1 = n2.
#f1 #f2 #L1 #L2 #n1 #n2 #Hf1 #Hf2 #Hn1 #Hn2
lapply (drops_fcla_fwd … Hf1 Hn1) -f1 #H1
(* GENERIC SLICING FOR LOCAL ENVIRONMENTS ***********************************)
definition dedropable_sn: predicate … ≝
- λR. â\88\80b,f,L1,K1. â¬\87*[b,f] L1 ≘ K1 → ∀K2. K1 ⪤[R] K2 →
- â\88\83â\88\83L2. L1 ⪤[R] L2 & â¬\87*[b,f] L2 ≘ K2 & L1 ≡[f] L2.
+ λR. â\88\80b,f,L1,K1. â\87©*[b,f] L1 ≘ K1 → ∀K2. K1 ⪤[R] K2 →
+ â\88\83â\88\83L2. L1 ⪤[R] L2 & â\87©*[b,f] L2 ≘ K2 & L1 ≡[f] L2.
definition dropable_sn: predicate … ≝
- λR. â\88\80b,f,L1,K1. â¬\87*[b,f] L1 ≘ K1 → 𝐔⦃f⦄ → ∀L2. L1 ⪤[R] L2 →
- â\88\83â\88\83K2. K1 ⪤[R] K2 & â¬\87*[b,f] L2 ≘ K2.
+ λR. â\88\80b,f,L1,K1. â\87©*[b,f] L1 ≘ K1 → 𝐔⦃f⦄ → ∀L2. L1 ⪤[R] L2 →
+ â\88\83â\88\83K2. K1 ⪤[R] K2 & â\87©*[b,f] L2 ≘ K2.
definition dropable_dx: predicate … ≝
- λR. â\88\80L1,L2. L1 ⪤[R] L2 â\86\92 â\88\80b,f,K2. â¬\87*[b,f] L2 ≘ K2 → 𝐔⦃f⦄ →
- â\88\83â\88\83K1. â¬\87*[b,f] L1 ≘ K1 & K1 ⪤[R] K2.
+ λR. â\88\80L1,L2. L1 ⪤[R] L2 â\86\92 â\88\80b,f,K2. â\87©*[b,f] L2 ≘ K2 → 𝐔⦃f⦄ →
+ â\88\83â\88\83K1. â\87©*[b,f] L1 ≘ K1 & K1 ⪤[R] K2.
(* Properties with generic extension ****************************************)
(* Basic_2A1: includes: lpx_sn_drop_conf *)
lemma lex_drops_conf_pair (R): ∀L1,L2. L1 ⪤[R] L2 →
- â\88\80b,f,I,K1,V1. â¬\87*[b,f] L1 ≘ K1.ⓑ{I}V1 → 𝐔⦃f⦄ →
- â\88\83â\88\83K2,V2. â¬\87*[b,f] L2 ≘ K2.ⓑ{I}V2 & K1 ⪤[R] K2 & R K1 V1 V2.
+ â\88\80b,f,I,K1,V1. â\87©*[b,f] L1 ≘ K1.ⓑ{I}V1 → 𝐔⦃f⦄ →
+ â\88\83â\88\83K2,V2. â\87©*[b,f] L2 ≘ K2.ⓑ{I}V2 & K1 ⪤[R] K2 & R K1 V1 V2.
#R #L1 #L2 * #f2 #Hf2 #HL12 #b #f #I #K1 #V1 #HLK1 #Hf
elim (sex_drops_conf_push … HL12 … HLK1 Hf f2) -L1 -Hf
[ #Z2 #K2 #HLK2 #HK12 #H
(* Basic_2A1: includes: lpx_sn_drop_trans *)
lemma lex_drops_trans_pair (R): ∀L1,L2. L1 ⪤[R] L2 →
- â\88\80b,f,I,K2,V2. â¬\87*[b,f] L2 ≘ K2.ⓑ{I}V2 → 𝐔⦃f⦄ →
- â\88\83â\88\83K1,V1. â¬\87*[b,f] L1 ≘ K1.ⓑ{I}V1 & K1 ⪤[R] K2 & R K1 V1 V2.
+ â\88\80b,f,I,K2,V2. â\87©*[b,f] L2 ≘ K2.ⓑ{I}V2 → 𝐔⦃f⦄ →
+ â\88\83â\88\83K1,V1. â\87©*[b,f] L1 ≘ K1.ⓑ{I}V1 & K1 ⪤[R] K2 & R K1 V1 V2.
#R #L1 #L2 * #f2 #Hf2 #HL12 #b #f #I #K2 #V2 #HLK2 #Hf
elim (sex_drops_trans_push … HL12 … HLK2 Hf f2) -L2 -Hf
[ #Z1 #K1 #HLK1 #HK12 #H
(* Basic_2A1: includes: lreq_drop_trans_be *)
lemma seq_drops_trans_next: ∀f2,L1,L2. L1 ≡[f2] L2 →
- â\88\80b,f,I,K2. â¬\87*[b,f] L2 ≘ K2.ⓘ{I} → 𝐔⦃f⦄ →
+ â\88\80b,f,I,K2. â\87©*[b,f] L2 ≘ K2.ⓘ{I} → 𝐔⦃f⦄ →
∀f1. f ~⊚ ↑f1 ≘ f2 →
- â\88\83â\88\83K1. â¬\87*[b,f] L1 ≘ K1.ⓘ{I} & K1 ≡[f1] K2.
+ â\88\83â\88\83K1. â\87©*[b,f] L1 ≘ K1.ⓘ{I} & K1 ≡[f1] K2.
#f2 #L1 #L2 #HL12 #b #f #I2 #K2 #HLK2 #Hf #f1 #Hf2
elim (sex_drops_trans_next … HL12 … HLK2 Hf … Hf2) -f2 -L2 -Hf
#I1 #K1 #HLK1 #HK12 #H <(ceq_ext_inv_eq … H) -I2
(* Basic_2A1: includes: lreq_drop_conf_be *)
lemma seq_drops_conf_next: ∀f2,L1,L2. L1 ≡[f2] L2 →
- â\88\80b,f,I,K1. â¬\87*[b,f] L1 ≘ K1.ⓘ{I} → 𝐔⦃f⦄ →
+ â\88\80b,f,I,K1. â\87©*[b,f] L1 ≘ K1.ⓘ{I} → 𝐔⦃f⦄ →
∀f1. f ~⊚ ↑f1 ≘ f2 →
- â\88\83â\88\83K2. â¬\87*[b,f] L2 ≘ K2.ⓘ{I} & K1 ≡[f1] K2.
+ â\88\83â\88\83K2. â\87©*[b,f] L2 ≘ K2.ⓘ{I} & K1 ≡[f1] K2.
#f2 #L1 #L2 #HL12 #b #f #I1 #K1 #HLK1 #Hf #f1 #Hf2
elim (seq_drops_trans_next … (seq_sym … HL12) … HLK1 … Hf2) // -f2 -L1 -Hf
/3 width=3 by seq_sym, ex2_intro/
qed-.
lemma drops_seq_trans_next: ∀f1,K1,K2. K1 ≡[f1] K2 →
- â\88\80b,f,I,L1. â¬\87*[b,f] L1.ⓘ{I} ≘ K1 →
+ â\88\80b,f,I,L1. â\87©*[b,f] L1.ⓘ{I} ≘ K1 →
∀f2. f ~⊚ f1 ≘ ↑f2 →
- â\88\83â\88\83L2. â¬\87*[b,f] L2.ⓘ{I} ≘ K2 & L1 ≡[f2] L2 & L1.ⓘ{I} ≡[f] L2.ⓘ{I}.
+ â\88\83â\88\83L2. â\87©*[b,f] L2.ⓘ{I} ≘ K2 & L1 ≡[f2] L2 & L1.ⓘ{I} ≡[f] L2.ⓘ{I}.
#f1 #K1 #K2 #HK12 #b #f #I1 #L1 #HLK1 #f2 #Hf2
elim (drops_sex_trans_next … HK12 … HLK1 … Hf2) -f1 -K1
/2 width=6 by cfull_lift_sn, ceq_lift_sn/
lemma sex_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\98 K1 â\86\92 â¬\87*[b,f] L2 ≘ K2 →
+ â\88\80b,f. â\87©*[b,f] L1 â\89\98 K1 â\86\92 â\87©*[b,f] L2 ≘ K2 →
f ~⊚ f1 ≘ 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
]
qed-.
-fact sex_dropable_dx_aux: â\88\80RN,RP,b,f,L2,K2. â¬\87*[b,f] L2 ≘ K2 → 𝐔⦃f⦄ →
+fact sex_dropable_dx_aux: â\88\80RN,RP,b,f,L2,K2. â\87©*[b,f] L2 ≘ K2 → 𝐔⦃f⦄ →
∀f2,L1. L1 ⪤[RN,RP,f2] L2 → ∀f1. f ~⊚ f1 ≘ f2 →
- â\88\83â\88\83K1. â¬\87*[b,f] L1 ≘ K1 & K1 ⪤[RN,RP,f1] K2.
+ â\88\83â\88\83K1. â\87©*[b,f] L1 ≘ 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 (sex_inv_atom2 … H) -H
#H destruct /4 width=3 by sex_atom, drops_atom, ex2_intro/
lemma sex_drops_conf_next: ∀RN,RP.
∀f2,L1,L2. L1 ⪤[RN,RP,f2] L2 →
- â\88\80b,f,I1,K1. â¬\87*[b,f] L1 ≘ K1.ⓘ{I1} → 𝐔⦃f⦄ →
+ â\88\80b,f,I1,K1. â\87©*[b,f] L1 ≘ K1.ⓘ{I1} → 𝐔⦃f⦄ →
∀f1. f ~⊚ ↑f1 ≘ f2 →
- â\88\83â\88\83I2,K2. â¬\87*[b,f] L2 ≘ K2.ⓘ{I2} & K1 ⪤[RN,RP,f1] K2 & RN K1 I1 I2.
+ â\88\83â\88\83I2,K2. â\87©*[b,f] L2 ≘ 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 (sex_co_dropable_sn … HLK1 … Hf … HL12 … Hf2) -L1 -f2 -Hf
#X #HX #HLK2 elim (sex_inv_next1 … HX) -HX
lemma sex_drops_conf_push: ∀RN,RP.
∀f2,L1,L2. L1 ⪤[RN,RP,f2] L2 →
- â\88\80b,f,I1,K1. â¬\87*[b,f] L1 ≘ K1.ⓘ{I1} → 𝐔⦃f⦄ →
+ â\88\80b,f,I1,K1. â\87©*[b,f] L1 ≘ K1.ⓘ{I1} → 𝐔⦃f⦄ →
∀f1. f ~⊚ ⫯f1 ≘ f2 →
- â\88\83â\88\83I2,K2. â¬\87*[b,f] L2 ≘ K2.ⓘ{I2} & K1 ⪤[RN,RP,f1] K2 & RP K1 I1 I2.
+ â\88\83â\88\83I2,K2. â\87©*[b,f] L2 ≘ 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 (sex_co_dropable_sn … HLK1 … Hf … HL12 … Hf2) -L1 -f2 -Hf
#X #HX #HLK2 elim (sex_inv_push1 … HX) -HX
qed-.
lemma sex_drops_trans_next: ∀RN,RP,f2,L1,L2. L1 ⪤[RN,RP,f2] L2 →
- â\88\80b,f,I2,K2. â¬\87*[b,f] L2 ≘ K2.ⓘ{I2} → 𝐔⦃f⦄ →
+ â\88\80b,f,I2,K2. â\87©*[b,f] L2 ≘ K2.ⓘ{I2} → 𝐔⦃f⦄ →
∀f1. f ~⊚ ↑f1 ≘ f2 →
- â\88\83â\88\83I1,K1. â¬\87*[b,f] L1 ≘ K1.ⓘ{I1} & K1 ⪤[RN,RP,f1] K2 & RN K1 I1 I2.
+ â\88\83â\88\83I1,K1. â\87©*[b,f] L1 ≘ 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 (sex_co_dropable_dx … HL12 … HLK2 … Hf … Hf2) -L2 -f2 -Hf
#X #HLK1 #HX elim (sex_inv_next2 … HX) -HX
qed-.
lemma sex_drops_trans_push: ∀RN,RP,f2,L1,L2. L1 ⪤[RN,RP,f2] L2 →
- â\88\80b,f,I2,K2. â¬\87*[b,f] L2 ≘ K2.ⓘ{I2} → 𝐔⦃f⦄ →
+ â\88\80b,f,I2,K2. â\87©*[b,f] L2 ≘ K2.ⓘ{I2} → 𝐔⦃f⦄ →
∀f1. f ~⊚ ⫯f1 ≘ f2 →
- â\88\83â\88\83I1,K1. â¬\87*[b,f] L1 ≘ K1.ⓘ{I1} & K1 ⪤[RN,RP,f1] K2 & RP K1 I1 I2.
+ â\88\83â\88\83I1,K1. â\87©*[b,f] L1 ≘ 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 (sex_co_dropable_dx … HL12 … HLK2 … Hf … Hf2) -L2 -f2 -Hf
#X #HLK1 #HX elim (sex_inv_push2 … HX) -HX
lemma drops_sex_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.ⓘ{I1} ≘ K1 →
+ â\88\80b,f,I1,L1. â\87©*[b,f] L1.ⓘ{I1} ≘ K1 →
∀f2. f ~⊚ f1 ≘ ↑f2 →
- â\88\83â\88\83I2,L2. â¬\87*[b,f] L2.ⓘ{I2} ≘ K2 & L1 ⪤[RN,RP,f2] L2 & RN L1 I1 I2 & L1.ⓘ{I1} ≡[f] L2.ⓘ{I2}.
+ â\88\83â\88\83I2,L2. â\87©*[b,f] L2.ⓘ{I2} ≘ K2 & L1 ⪤[RN,RP,f2] L2 & RN L1 I1 I2 & L1.ⓘ{I1} ≡[f] L2.ⓘ{I2}.
#RN #RP #H1RN #H1RP #H2RN #H2RP #f1 #K1 #K2 #HK12 #b #f #I1 #L1 #HLK1 #f2 #Hf2
elim (sex_liftable_co_dedropable_sn … H1RN H1RP H2RN H2RP … HLK1 … HK12 … Hf2) -K1 -f1 -H1RN -H1RP -H2RN -H2RP
#X #HX #HLK2 #H1L12 elim (sex_inv_next1 … HX) -HX
lemma drops_sex_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.ⓘ{I1} ≘ K1 →
+ â\88\80b,f,I1,L1. â\87©*[b,f] L1.ⓘ{I1} ≘ K1 →
∀f2. f ~⊚ f1 ≘ ⫯f2 →
- â\88\83â\88\83I2,L2. â¬\87*[b,f] L2.ⓘ{I2} ≘ K2 & L1 ⪤[RN,RP,f2] L2 & RP L1 I1 I2 & L1.ⓘ{I1} ≡[f] L2.ⓘ{I2}.
+ â\88\83â\88\83I2,L2. â\87©*[b,f] L2.ⓘ{I2} ≘ K2 & L1 ⪤[RN,RP,f2] L2 & RP L1 I1 I2 & L1.ⓘ{I1} ≡[f] L2.ⓘ{I2}.
#RN #RP #H1RN #H1RP #H2RN #H2RP #f1 #K1 #K2 #HK12 #b #f #I1 #L1 #HLK1 #f2 #Hf2
elim (sex_liftable_co_dedropable_sn … H1RN H1RP H2RN H2RP … HLK1 … HK12 … Hf2) -K1 -f1 -H1RN -H1RP -H2RN -H2RP
#X #HX #HLK2 #H1L12 elim (sex_inv_push1 … HX) -HX
#I2 #L2 #H2L12 #HI12 #H destruct /2 width=6 by ex4_2_intro/
qed-.
-lemma drops_atom2_sex_conf: â\88\80RN,RP,b,f1,L1. â¬\87*[b,f1] L1 ≘ ⋆ → 𝐔⦃f1⦄ →
+lemma drops_atom2_sex_conf: â\88\80RN,RP,b,f1,L1. â\87©*[b,f1] L1 ≘ ⋆ → 𝐔⦃f1⦄ →
∀f,L2. L1 ⪤[RN,RP,f] L2 →
- â\88\80f2. f1 ~â\8a\9a f2 â\89\98f â\86\92 â¬\87*[b,f1] L2 ≘ ⋆.
+ â\88\80f2. f1 ~â\8a\9a f2 â\89\98f â\86\92 â\87©*[b,f1] L2 ≘ ⋆.
#RN #RP #b #f1 #L1 #H1 #Hf1 #f #L2 #H2 #f2 #H3
elim (sex_co_dropable_sn … H1 … H2 … H3) // -H1 -H2 -H3 -Hf1
#L #H #HL2 lapply (sex_inv_atom1 … H) -H //
definition d_liftable1_all: predicate (relation2 lenv term) ≝
λR. ∀K,Ts. all … (R K) Ts →
- â\88\80b,f,L. â¬\87*[b,f] L ≘ K →
- â\88\80Us. â¬\86*[f] Ts ≘ Us → all … (R L) Us.
+ â\88\80b,f,L. â\87©*[b,f] L ≘ K →
+ â\88\80Us. â\87§*[f] Ts ≘ 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 ≘ L2 → ♯{L2} ≤ ♯{L1}.
+lemma drops_fwd_lw: â\88\80b,f,L1,L2. â\87©*[b,f] L1 ≘ 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*[Ⓣ,f] L1 ≘ L2 →
+lemma drops_fwd_lw_lt: â\88\80f,L1,L2. â\87©*[Ⓣ,f] L1 ≘ 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 ≘ K.ⓑ{I}V → ∀T. ♯{K,V} < ♯{L,T}.
+lemma drops_bind2_fwd_rfw: â\88\80b,f,I,L,K,V. â\87©*[b,f] L ≘ 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 ≘ L.ⓘ{I} → ⊥.
+lemma drops_inv_x_bind_xy: â\88\80b,f,I,L. â\87©*[b,f] L ≘ 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-.
'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 ≘ U1 →
- â\88\83â\88\83U2. â¬\86*[f] T2 ≘ U2 & R U1 U2.
+ λR. â\88\80T1,T2. R T1 T2 â\86\92 â\88\80f,U1. â\87§*[f] T1 ≘ U1 →
+ â\88\83â\88\83U2. â\87§*[f] T2 ≘ 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 ≘ U1 →
- â\88\83â\88\83T2. â¬\86*[f] T2 ≘ U2 & R T1 T2.
+ λR. â\88\80U1,U2. R U1 U2 â\86\92 â\88\80f,T1. â\87§*[f] T1 ≘ U1 →
+ â\88\83â\88\83T2. â\87§*[f] T2 ≘ 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 ≘ U1 →
- â\88\80U2. â¬\86*[f] T2 ≘ U2 → R U1 U2.
+ λR. â\88\80T1,T2. R T1 T2 â\86\92 â\88\80f,U1. â\87§*[f] T1 ≘ U1 →
+ â\88\80U2. â\87§*[f] T2 ≘ 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 ≘ U1 →
- â\88\80T2. â¬\86*[f] T2 ≘ U2 → R T1 T2.
+ λR. â\88\80U1,U2. R U1 U2 â\86\92 â\88\80f,T1. â\87§*[f] T1 ≘ U1 →
+ â\88\80T2. â\87§*[f] T2 ≘ U2 → R T1 T2.
definition liftable2_dx: predicate (relation term) ≝
- λR. â\88\80T1,T2. R T1 T2 â\86\92 â\88\80f,U2. â¬\86*[f] T2 ≘ U2 →
- â\88\83â\88\83U1. â¬\86*[f] T1 ≘ U1 & R U1 U2.
+ λR. â\88\80T1,T2. R T1 T2 â\86\92 â\88\80f,U2. â\87§*[f] T2 ≘ U2 →
+ â\88\83â\88\83U1. â\87§*[f] T1 ≘ U1 & R U1 U2.
definition deliftable2_dx: predicate (relation term) ≝
- λR. â\88\80U1,U2. R U1 U2 â\86\92 â\88\80f,T2. â¬\86*[f] T2 ≘ U2 →
- â\88\83â\88\83T1. â¬\86*[f] T1 ≘ U1 & R T1 T2.
+ λR. â\88\80U1,U2. R U1 U2 â\86\92 â\88\80f,T2. â\87§*[f] T2 ≘ U2 →
+ â\88\83â\88\83T1. â\87§*[f] T1 ≘ U1 & R T1 T2.
(* Basic inversion lemmas ***************************************************)
-fact lifts_inv_sort1_aux: â\88\80f,X,Y. â¬\86*[f] X ≘ Y → ∀s. X = ⋆s → Y = ⋆s.
+fact lifts_inv_sort1_aux: â\88\80f,X,Y. â\87§*[f] X ≘ 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] ⋆s ≘ Y → Y = ⋆s.
+lemma lifts_inv_sort1: â\88\80f,Y,s. â\87§*[f] ⋆s ≘ Y → Y = ⋆s.
/2 width=4 by lifts_inv_sort1_aux/ qed-.
-fact lifts_inv_lref1_aux: â\88\80f,X,Y. â¬\86*[f] X ≘ Y → ∀i1. X = #i1 →
+fact lifts_inv_lref1_aux: â\88\80f,X,Y. â\87§*[f] X ≘ Y → ∀i1. X = #i1 →
∃∃i2. @⦃i1,f⦄ ≘ i2 & Y = #i2.
#f #X #Y * -f -X -Y
[ #f #s #x #H destruct
(* 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 ≘ Y →
+lemma lifts_inv_lref1: â\88\80f,Y,i1. â\87§*[f] #i1 ≘ Y →
∃∃i2. @⦃i1,f⦄ ≘ i2 & Y = #i2.
/2 width=3 by lifts_inv_lref1_aux/ qed-.
-fact lifts_inv_gref1_aux: â\88\80f,X,Y. â¬\86*[f] X ≘ Y → ∀l. X = §l → Y = §l.
+fact lifts_inv_gref1_aux: â\88\80f,X,Y. â\87§*[f] X ≘ 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 ≘ Y → Y = §l.
+lemma lifts_inv_gref1: â\88\80f,Y,l. â\87§*[f] §l ≘ Y → Y = §l.
/2 width=4 by lifts_inv_gref1_aux/ qed-.
-fact lifts_inv_bind1_aux: â\88\80f,X,Y. â¬\86*[f] X ≘ Y →
+fact lifts_inv_bind1_aux: â\88\80f,X,Y. â\87§*[f] X ≘ Y →
∀p,I,V1,T1. X = ⓑ{p,I}V1.T1 →
- â\88\83â\88\83V2,T2. â¬\86*[f] V1 â\89\98 V2 & â¬\86*[⫯f] T1 ≘ T2 &
+ â\88\83â\88\83V2,T2. â\87§*[f] V1 â\89\98 V2 & â\87§*[⫯f] T1 ≘ 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] ⓑ{p,I}V1.T1 ≘ Y →
- â\88\83â\88\83V2,T2. â¬\86*[f] V1 â\89\98 V2 & â¬\86*[⫯f] T1 ≘ T2 &
+lemma lifts_inv_bind1: â\88\80f,p,I,V1,T1,Y. â\87§*[f] ⓑ{p,I}V1.T1 ≘ Y →
+ â\88\83â\88\83V2,T2. â\87§*[f] V1 â\89\98 V2 & â\87§*[⫯f] T1 ≘ 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 ≘ Y →
+fact lifts_inv_flat1_aux: â\88\80f:rtmap. â\88\80X,Y. â\87§*[f] X ≘ Y →
∀I,V1,T1. X = ⓕ{I}V1.T1 →
- â\88\83â\88\83V2,T2. â¬\86*[f] V1 â\89\98 V2 & â¬\86*[f] T1 ≘ T2 &
+ â\88\83â\88\83V2,T2. â\87§*[f] V1 â\89\98 V2 & â\87§*[f] T1 ≘ 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] ⓕ{I}V1.T1 ≘ Y →
- â\88\83â\88\83V2,T2. â¬\86*[f] V1 â\89\98 V2 & â¬\86*[f] T1 ≘ T2 &
+lemma lifts_inv_flat1: â\88\80f:rtmap. â\88\80I,V1,T1,Y. â\87§*[f] ⓕ{I}V1.T1 ≘ Y →
+ â\88\83â\88\83V2,T2. â\87§*[f] V1 â\89\98 V2 & â\87§*[f] T1 ≘ 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 ≘ Y → ∀s. Y = ⋆s → X = ⋆s.
+fact lifts_inv_sort2_aux: â\88\80f,X,Y. â\87§*[f] X ≘ 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 ≘ ⋆s → X = ⋆s.
+lemma lifts_inv_sort2: â\88\80f,X,s. â\87§*[f] X ≘ ⋆s → X = ⋆s.
/2 width=4 by lifts_inv_sort2_aux/ qed-.
-fact lifts_inv_lref2_aux: â\88\80f,X,Y. â¬\86*[f] X ≘ Y → ∀i2. Y = #i2 →
+fact lifts_inv_lref2_aux: â\88\80f,X,Y. â\87§*[f] X ≘ Y → ∀i2. Y = #i2 →
∃∃i1. @⦃i1,f⦄ ≘ i2 & X = #i1.
#f #X #Y * -f -X -Y
[ #f #s #x #H destruct
(* 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 ≘ #i2 →
+lemma lifts_inv_lref2: â\88\80f,X,i2. â\87§*[f] X ≘ #i2 →
∃∃i1. @⦃i1,f⦄ ≘ i2 & X = #i1.
/2 width=3 by lifts_inv_lref2_aux/ qed-.
-fact lifts_inv_gref2_aux: â\88\80f,X,Y. â¬\86*[f] X ≘ Y → ∀l. Y = §l → X = §l.
+fact lifts_inv_gref2_aux: â\88\80f,X,Y. â\87§*[f] X ≘ 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 ≘ §l → X = §l.
+lemma lifts_inv_gref2: â\88\80f,X,l. â\87§*[f] X ≘ §l → X = §l.
/2 width=4 by lifts_inv_gref2_aux/ qed-.
-fact lifts_inv_bind2_aux: â\88\80f,X,Y. â¬\86*[f] X ≘ Y →
+fact lifts_inv_bind2_aux: â\88\80f,X,Y. â\87§*[f] X ≘ Y →
∀p,I,V2,T2. Y = ⓑ{p,I}V2.T2 →
- â\88\83â\88\83V1,T1. â¬\86*[f] V1 â\89\98 V2 & â¬\86*[⫯f] T1 ≘ T2 &
+ â\88\83â\88\83V1,T1. â\87§*[f] V1 â\89\98 V2 & â\87§*[⫯f] T1 ≘ 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 ≘ ⓑ{p,I}V2.T2 →
- â\88\83â\88\83V1,T1. â¬\86*[f] V1 â\89\98 V2 & â¬\86*[⫯f] T1 ≘ T2 &
+lemma lifts_inv_bind2: â\88\80f,p,I,V2,T2,X. â\87§*[f] X ≘ ⓑ{p,I}V2.T2 →
+ â\88\83â\88\83V1,T1. â\87§*[f] V1 â\89\98 V2 & â\87§*[⫯f] T1 ≘ 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 ≘ Y →
+fact lifts_inv_flat2_aux: â\88\80f:rtmap. â\88\80X,Y. â\87§*[f] X ≘ Y →
∀I,V2,T2. Y = ⓕ{I}V2.T2 →
- â\88\83â\88\83V1,T1. â¬\86*[f] V1 â\89\98 V2 & â¬\86*[f] T1 ≘ T2 &
+ â\88\83â\88\83V1,T1. â\87§*[f] V1 â\89\98 V2 & â\87§*[f] T1 ≘ 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 ≘ ⓕ{I}V2.T2 →
- â\88\83â\88\83V1,T1. â¬\86*[f] V1 â\89\98 V2 & â¬\86*[f] T1 ≘ T2 &
+lemma lifts_inv_flat2: â\88\80f:rtmap. â\88\80I,V2,T2,X. â\87§*[f] X ≘ ⓕ{I}V2.T2 →
+ â\88\83â\88\83V1,T1. â\87§*[f] V1 â\89\98 V2 & â\87§*[f] T1 ≘ 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] ⓪{I} ≘ Y →
+lemma lifts_inv_atom1: â\88\80f,I,Y. â\87§*[f] ⓪{I} ≘ Y →
∨∨ ∃∃s. I = Sort s & Y = ⋆s
| ∃∃i,j. @⦃i,f⦄ ≘ j & I = LRef i & Y = #j
| ∃∃l. I = GRef l & Y = §l.
] -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 ≘ ⓪{I} →
+lemma lifts_inv_atom2: â\88\80f,I,X. â\87§*[f] X ≘ ⓪{I} →
∨∨ ∃∃s. X = ⋆s & I = Sort s
| ∃∃i,j. @⦃i,f⦄ ≘ j & X = #i & I = LRef j
| ∃∃l. X = §l & I = GRef l.
qed-.
(* Basic_2A1: includes: lift_inv_pair_xy_x *)
-lemma lifts_inv_pair_xy_x: â\88\80f,I,V,T. â¬\86*[f] ②{I}V.T ≘ V → ⊥.
+lemma lifts_inv_pair_xy_x: â\88\80f,I,V,T. â\87§*[f] ②{I}V.T ≘ 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] ②{I}V.T ≘ T → ⊥.
+lemma lifts_inv_pair_xy_y: â\88\80I,T,V,f. â\87§*[f] ②{I}V.T ≘ 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 ≘ Y → Y = #(l+i).
+lemma lifts_inv_lref1_uni: â\88\80l,Y,i. â\87§*[l] #i ≘ 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 ≘ #i2 →
+lemma lifts_inv_lref2_uni: â\88\80l,X,i2. â\87§*[l] X ≘ #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 ≘ #(l + i) → X = #i.
+lemma lifts_inv_lref2_uni_ge: â\88\80l,X,i. â\87§*[l] X ≘ #(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 ≘ #i → i < l → ⊥.
+lemma lifts_inv_lref2_uni_lt: â\88\80l,X,i. â\87§*[l] X ≘ #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 ≘ T2 → 𝐈⦃f⦄ → T1 = T2.
+lemma lifts_fwd_isid: â\88\80f,T1,T2. â\87§*[f] T1 ≘ 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] ②{I}V1.T1 ≘ Y →
- â\88\83â\88\83V2,T2. â¬\86*[f] V1 ≘ V2 & Y = ②{I}V2.T2.
+lemma lifts_fwd_pair1: â\88\80f:rtmap. â\88\80I,V1,T1,Y. â\87§*[f] ②{I}V1.T1 ≘ Y →
+ â\88\83â\88\83V2,T2. â\87§*[f] V1 ≘ 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 ≘ ②{I}V2.T2 →
- â\88\83â\88\83V1,T1. â¬\86*[f] V1 ≘ V2 & X = ②{I}V1.T1.
+lemma lifts_fwd_pair2: â\88\80f:rtmap. â\88\80I,V2,T2,X. â\87§*[f] X ≘ ②{I}V2.T2 →
+ â\88\83â\88\83V1,T1. â\87§*[f] V1 ≘ 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/
elim (H1R … U1 … HTU2) -H1R /3 width=3 by ex2_intro/
qed-.
-lemma lifts_eq_repl_back: â\88\80T1,T2. eq_repl_back â\80¦ (λf. â¬\86*[f] T1 ≘ T2).
+lemma lifts_eq_repl_back: â\88\80T1,T2. eq_repl_back â\80¦ (λf. â\87§*[f] T1 ≘ 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 ≘ T2).
+lemma lifts_eq_repl_fwd: â\88\80T1,T2. eq_repl_fwd â\80¦ (λf. â\87§*[f] T1 ≘ 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 ≘ T.
+lemma lifts_refl: â\88\80T,f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 â\87§*[f] T ≘ 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 ≘ T2.
+lemma lifts_total: â\88\80T1,f. â\88\83T2. â\87§*[f] T1 ≘ 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 lifts_push_zero (f): â¬\86*[⫯f]#0 ≘ #0.
+lemma lifts_push_zero (f): â\87§*[⫯f]#0 ≘ #0.
/2 width=1 by lifts_lref/ qed.
-lemma lifts_push_lref (f) (i1) (i2): â¬\86*[f]#i1 â\89\98 #i2 â\86\92 â¬\86*[⫯f]#(↑i1) ≘ #(↑i2).
+lemma lifts_push_lref (f) (i1) (i2): â\87§*[f]#i1 â\89\98 #i2 â\86\92 â\87§*[⫯f]#(↑i1) ≘ #(↑i2).
#f1 #i1 #i2 #H
elim (lifts_inv_lref1 … H) -H #j #Hij #H destruct
/3 width=7 by lifts_lref, at_push/
qed.
-lemma lifts_lref_uni: â\88\80l,i. â¬\86*[l] #i ≘ #(l+i).
+lemma lifts_lref_uni: â\88\80l,i. â\87§*[l] #i ≘ #(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 ≘ T2 →
+lemma lifts_split_trans: â\88\80f,T1,T2. â\87§*[f] T1 ≘ T2 →
∀f1,f2. f2 ⊚ f1 ≘ f →
- â\88\83â\88\83T. â¬\86*[f1] T1 â\89\98 T & â¬\86*[f2] T ≘ T2.
+ â\88\83â\88\83T. â\87§*[f1] T1 â\89\98 T & â\87§*[f2] T ≘ 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 ≘ T2 →
+lemma lifts_split_div: â\88\80f1,T1,T2. â\87§*[f1] T1 ≘ T2 →
∀f2,f. f2 ⊚ f1 ≘ f →
- â\88\83â\88\83T. â¬\86*[f2] T2 â\89\98 T & â¬\86*[f] T1 ≘ T.
+ â\88\83â\88\83T. â\87§*[f2] T2 â\89\98 T & â\87§*[f] T1 ≘ 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 ≘ T2).
+lemma is_lifts_dec: â\88\80T2,f. Decidable (â\88\83T1. â\87§*[f] T1 ≘ 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\98 U â\86\92 â¬\86*[n1+n2] T ≘ U.
+lemma lifts_uni: â\88\80n1,n2,T,U. â\87§*[ð\9d\90\94â\9d´n1â\9dµâ\88\98ð\9d\90\94â\9d´n2â\9dµ] T â\89\98 U â\86\92 â\87§*[n1+n2] T ≘ U.
/3 width=4 by lifts_eq_repl_back, after_inv_total/ qed.
(* Basic_2A1: removed theorems 14:
(* Properties with basic relocation *****************************************)
-lemma lifts_lref_lt (m,n,i): i < m â\86\92 â¬\86[m,n] #i ≘ #i.
+lemma lifts_lref_lt (m,n,i): i < m â\86\92 â\87§[m,n] #i ≘ #i.
/3 width=1 by lifts_lref, at_basic_lt/ qed.
-lemma lifts_lref_ge (m,n,i): m â\89¤ i â\86\92 â¬\86[m,n] #i ≘ #(n+i).
+lemma lifts_lref_ge (m,n,i): m â\89¤ i â\86\92 â\87§[m,n] #i ≘ #(n+i).
/3 width=1 by lifts_lref, at_basic_ge/ qed.
-lemma lifts_lref_ge_minus (m,n,i): n+m â\89¤ i â\86\92 â¬\86[m,n] #(i-n) ≘ #i.
+lemma lifts_lref_ge_minus (m,n,i): n+m â\89¤ i â\86\92 â\87§[m,n] #(i-n) ≘ #i.
#m #n #i #Hi
>(plus_minus_m_m i n) in ⊢ (???%);
/3 width=2 by lifts_lref_ge, le_plus_to_minus_l, le_plus_b/
(* Basic_inversion lemmas **************************************************)
-lemma liftsb_inv_unit_sn: â\88\80f,I,Z2. â¬\86*[f] BUnit I ≘ Z2 → Z2 = BUnit I.
+lemma liftsb_inv_unit_sn: â\88\80f,I,Z2. â\87§*[f] BUnit I ≘ 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 ≘ Z2 →
- â\88\83â\88\83V2. â¬\86*[f] V1 ≘ V2 & Z2 = BPair I V2.
+lemma liftsb_inv_pair_sn: â\88\80f:rtmap. â\88\80Z2,I,V1. â\87§*[f] BPair I V1 ≘ Z2 →
+ â\88\83â\88\83V2. â\87§*[f] V1 ≘ 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 ≘ BUnit I → Z1 = BUnit I.
+lemma liftsb_inv_unit_dx: â\88\80f,I,Z1. â\87§*[f] Z1 ≘ 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 ≘ BPair I V2 →
- â\88\83â\88\83V1. â¬\86*[f] V1 ≘ V2 & Z1 = BPair I V1.
+lemma liftsb_inv_pair_dx: â\88\80f:rtmap. â\88\80Z1,I,V2. â\87§*[f] Z1 ≘ BPair I V2 →
+ â\88\83â\88\83V1. â\87§*[f] V1 ≘ 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 ≘ I2).
+lemma liftsb_eq_repl_back: â\88\80I1,I2. eq_repl_back â\80¦ (λf. â\87§*[f] I1 ≘ 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 ≘ I2.
+lemma liftsb_total: â\88\80I1,f. â\88\83I2. â\87§*[f] I1 ≘ 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 ≘ I2 →
+lemma liftsb_split_trans: â\88\80f,I1,I2. â\87§*[f] I1 ≘ I2 →
∀f1,f2. f2 ⊚ f1 ≘ f →
- â\88\83â\88\83I. â¬\86*[f1] I1 â\89\98 I & â¬\86*[f2] I ≘ I2.
+ â\88\83â\88\83I. â\87§*[f1] I1 â\89\98 I & â\87§*[f2] I ≘ 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 ≘ I2 → 𝐈⦃f⦄ → I1 = I2.
+lemma liftsb_fwd_isid: â\88\80f,I1,I2. â\87§*[f] I1 ≘ 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\98 T â\86\92 â\88\80g2,Tg. â¬\86*[g2] Tg ≘ T →
+theorem lifts_div4: â\88\80f2,Tf,T. â\87§*[f2] Tf â\89\98 T â\86\92 â\88\80g2,Tg. â\87§*[g2] Tg ≘ T →
∀f1,g1. H_at_div f2 g2 f1 g1 →
- â\88\83â\88\83T0. â¬\86*[f1] T0 â\89\98 Tf & â¬\86*[g1] T0 ≘ Tg.
+ â\88\83â\88\83T0. â\87§*[f1] T0 â\89\98 Tf & â\87§*[g1] T0 ≘ 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*[⫯f] Tf ≘ T →
- â\88\80T1. â¬\86*[1] T1 ≘ T →
- â\88\83â\88\83T0. â¬\86*[1] T0 â\89\98 Tf & â¬\86*[f] T0 ≘ T1.
+lemma lifts_div4_one: â\88\80f,Tf,T. â\87§*[⫯f] Tf ≘ T →
+ â\88\80T1. â\87§*[1] T1 ≘ T →
+ â\88\83â\88\83T0. â\87§*[1] T0 â\89\98 Tf & â\87§*[f] T0 ≘ 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\98 T â\86\92 â\88\80f,T1. â¬\86*[f] T1 ≘ T →
- â\88\80f1. f2 â\8a\9a f1 â\89\98 f â\86\92 â¬\86*[f1] T1 ≘ T2.
+theorem lifts_div3: â\88\80f2,T,T2. â\87§*[f2] T2 â\89\98 T â\86\92 â\88\80f,T1. â\87§*[f] T1 ≘ T →
+ â\88\80f1. f2 â\8a\9a f1 â\89\98 f â\86\92 â\87§*[f1] T1 ≘ 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\98 T â\86\92 â\88\80f2,T2. â¬\86*[f2] T ≘ T2 →
- â\88\80f. f2 â\8a\9a f1 â\89\98 f â\86\92 â¬\86*[f] T1 ≘ T2.
+theorem lifts_trans: â\88\80f1,T1,T. â\87§*[f1] T1 â\89\98 T â\86\92 â\88\80f2,T2. â\87§*[f2] T ≘ T2 →
+ â\88\80f. f2 â\8a\9a f1 â\89\98 f â\86\92 â\87§*[f] T1 ≘ 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-.
lemma lifts_trans4_one (f) (T1) (T2):
- â\88\80T. â¬\86*[1]T1 â\89\98 T â\86\92 â¬\86*[⫯f]T ≘ T2 →
- â\88\83â\88\83T0. â¬\86*[f]T1 â\89\98 T0 & â¬\86*[1]T0 ≘ T2.
+ â\88\80T. â\87§*[1]T1 â\89\98 T â\86\92 â\87§*[⫯f]T ≘ T2 →
+ â\88\83â\88\83T0. â\87§*[f]T1 â\89\98 T0 & â\87§*[1]T0 ≘ T2.
/4 width=6 by lifts_trans, lifts_split_trans, after_uni_one_dx/ qed-.
(* Basic_2A1: includes: lift_conf_O1 lift_conf_be *)
-theorem lifts_conf: â\88\80f1,T,T1. â¬\86*[f1] T â\89\98 T1 â\86\92 â\88\80f,T2. â¬\86*[f] T ≘ T2 →
- â\88\80f2. f2 â\8a\9a f1 â\89\98 f â\86\92 â¬\86*[f2] T1 ≘ T2.
+theorem lifts_conf: â\88\80f1,T,T1. â\87§*[f1] T â\89\98 T1 â\86\92 â\88\80f,T2. â\87§*[f] T ≘ T2 →
+ â\88\80f2. f2 â\8a\9a f1 â\89\98 f â\86\92 â\87§*[f2] T1 ≘ 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\98 I â\86\92 â\88\80f,I1. â¬\86*[f] I1 ≘ I →
- â\88\80f1. f2 â\8a\9a f1 â\89\98 f â\86\92 â¬\86*[f1] I1 ≘ I2.
+theorem liftsb_div3: â\88\80f2,I,I2. â\87§*[f2] I2 â\89\98 I â\86\92 â\88\80f,I1. â\87§*[f] I1 ≘ I →
+ â\88\80f1. f2 â\8a\9a f1 â\89\98 f â\86\92 â\87§*[f1] I1 ≘ 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\98 I â\86\92 â\88\80f2,I2. â¬\86*[f2] I ≘ I2 →
- â\88\80f. f2 â\8a\9a f1 â\89\98 f â\86\92 â¬\86*[f] I1 ≘ I2.
+theorem liftsb_trans: â\88\80f1,I1,I. â\87§*[f1] I1 â\89\98 I â\86\92 â\88\80f2,I2. â\87§*[f2] I ≘ I2 →
+ â\88\80f. f2 â\8a\9a f1 â\89\98 f â\86\92 â\87§*[f] I1 ≘ 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\98 I1 â\86\92 â\88\80f,I2. â¬\86*[f] I ≘ I2 →
- â\88\80f2. f2 â\8a\9a f1 â\89\98 f â\86\92 â¬\86*[f2] I1 ≘ I2.
+theorem liftsb_conf: â\88\80f1,I,I1. â\87§*[f1] I â\89\98 I1 â\86\92 â\88\80f,I2. â\87§*[f] I ≘ I2 →
+ â\88\80f2. f2 â\8a\9a f1 â\89\98 f â\86\92 â\87§*[f2] I1 ≘ 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 ≘ Us →
- â\88\80T2s. â¬\86*[f] T2s ≘ Us → T1s = T2s.
+theorem liftsv_inj: â\88\80f,T1s,Us. â\87§*[f] T1s ≘ Us →
+ â\88\80T2s. â\87§*[f] T2s ≘ 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 ≘ U1s →
- â\88\80U2s. â¬\86*[f] Ts ≘ U2s → U1s = U2s.
+theorem liftsv_mono: â\88\80f,Ts,U1s. â\87§*[f] Ts ≘ U1s →
+ â\88\80U2s. â\87§*[f] Ts ≘ 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\98 Ts â\86\92 â\88\80T2s,f2. â¬\86*[f2] Ts ≘ T2s →
- â\88\80f. f2 â\8a\9a f1 â\89\98 f â\86\92 â¬\86*[f] T1s ≘ T2s.
+theorem liftsv_trans: â\88\80f1,T1s,Ts. â\87§*[f1] T1s â\89\98 Ts â\86\92 â\88\80T2s,f2. â\87§*[f2] Ts ≘ T2s →
+ â\88\80f. f2 â\8a\9a f1 â\89\98 f â\86\92 â\87§*[f] T1s ≘ 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 ≘ T2 → 𝐒⦃T1⦄ → 𝐒⦃T2⦄.
+lemma lifts_simple_dx: â\88\80f,T1,T2. â\87§*[f] T1 ≘ 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 ≘ T2 → 𝐒⦃T2⦄ → 𝐒⦃T1⦄.
+lemma lifts_simple_sn: â\88\80f,T1,T2. â\87§*[f] T1 ≘ 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-.
/3 width=6 by tdeq_inv_lifts_sn, deliftable2_sn_bi/ qed-.
lemma tdeq_lifts_inv_pair_sn (I) (f:rtmap):
- â\88\80X,T. â¬\86*[f]X ≘ T → ∀V. ②{I}V.T ≛ X → ⊥.
+ â\88\80X,T. â\87§*[f]X ≘ T → ∀V. ②{I}V.T ≛ X → ⊥.
#I #f #X #T #H elim H -f -X -T
[ #f #s #V #H
elim (tdeq_inv_pair1 … H) -H #X1 #X2 #_ #_ #H destruct
qed-.
lemma tweq_inv_abbr_pos_x_lifts_y_y (T) (f:rtmap):
- â\88\80V,U. +â\93\93V.U â\89\85 T â\86\92 â¬\86*[f]T ≘ U → ⊥.
+ â\88\80V,U. +â\93\93V.U â\89\85 T â\86\92 â\87§*[f]T ≘ U → ⊥.
@(f_ind … tw) #n #IH #T #Hn #f #V #U #H1 #H2 destruct
elim (tweq_inv_abbr_pos_sn … H1) -H1 #X1 #X2 #HX2 #H destruct -V
elim (lifts_inv_bind1 … H2) -H2 #Y1 #Y2 #_ #HXY2 #H destruct
inductive liftsv (f:rtmap): relation (list term) ≝
| liftsv_nil : liftsv f (Ⓔ) (Ⓔ)
| liftsv_cons: ∀T1s,T2s,T1,T2.
- â¬\86*[f] T1 ≘ T2 → liftsv f T1s T2s →
+ â\87§*[f] T1 ≘ 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 ≘ Y → X = Ⓔ → Y = Ⓔ.
+fact liftsv_inv_nil1_aux: â\88\80f,X,Y. â\87§*[f] X ≘ 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] Ⓔ ≘ Y → Y = Ⓔ.
+lemma liftsv_inv_nil1: â\88\80f,Y. â\87§*[f] Ⓔ ≘ 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 ≘ Y →
+fact liftsv_inv_cons1_aux: â\88\80f:rtmap. â\88\80X,Y. â\87§*[f] X ≘ Y →
∀T1,T1s. X = T1 ⨮ T1s →
- â\88\83â\88\83T2,T2s. â¬\86*[f] T1 â\89\98 T2 & â¬\86*[f] T1s ≘ T2s &
+ â\88\83â\88\83T2,T2s. â\87§*[f] T1 â\89\98 T2 & â\87§*[f] T1s ≘ 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 ≘ Y →
- â\88\83â\88\83T2,T2s. â¬\86*[f] T1 â\89\98 T2 & â¬\86*[f] T1s ≘ T2s &
+lemma liftsv_inv_cons1: â\88\80f:rtmap. â\88\80T1,T1s,Y. â\87§*[f] T1 ⨮ T1s ≘ Y →
+ â\88\83â\88\83T2,T2s. â\87§*[f] T1 â\89\98 T2 & â\87§*[f] T1s ≘ 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 ≘ Y → Y = Ⓔ → X = Ⓔ.
+fact liftsv_inv_nil2_aux: â\88\80f,X,Y. â\87§*[f] X ≘ 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 ≘ Ⓔ → X = Ⓔ.
+lemma liftsv_inv_nil2: â\88\80f,X. â\87§*[f] X ≘ Ⓔ → X = Ⓔ.
/2 width=5 by liftsv_inv_nil2_aux/ qed-.
-fact liftsv_inv_cons2_aux: â\88\80f:rtmap. â\88\80X,Y. â¬\86*[f] X ≘ Y →
+fact liftsv_inv_cons2_aux: â\88\80f:rtmap. â\88\80X,Y. â\87§*[f] X ≘ Y →
∀T2,T2s. Y = T2 ⨮ T2s →
- â\88\83â\88\83T1,T1s. â¬\86*[f] T1 â\89\98 T2 & â¬\86*[f] T1s ≘ T2s &
+ â\88\83â\88\83T1,T1s. â\87§*[f] T1 â\89\98 T2 & â\87§*[f] T1s ≘ 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 ≘ T2 ⨮ T2s →
- â\88\83â\88\83T1,T1s. â¬\86*[f] T1 â\89\98 T2 & â¬\86*[f] T1s ≘ T2s &
+lemma liftsv_inv_cons2: â\88\80f:rtmap. â\88\80X,T2,T2s. â\87§*[f] X ≘ T2 ⨮ T2s →
+ â\88\83â\88\83T1,T1s. â\87§*[f] T1 â\89\98 T2 & â\87§*[f] T1s ≘ 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] Ⓐ V1s.U1 ≘ T2 →
- â\88\83â\88\83V2s,U2. â¬\86*[f] V1s â\89\98 V2s & â¬\86*[f] U1 ≘ U2 &
+lemma lifts_inv_applv1: â\88\80f:rtmap. â\88\80V1s,U1,T2. â\87§*[f] Ⓐ V1s.U1 ≘ T2 →
+ â\88\83â\88\83V2s,U2. â\87§*[f] V1s â\89\98 V2s & â\87§*[f] U1 ≘ 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 ≘ Ⓐ V2s.U2 →
- â\88\83â\88\83V1s,U1. â¬\86*[f] V1s â\89\98 V2s & â¬\86*[f] U1 ≘ U2 &
+lemma lifts_inv_applv2: â\88\80f:rtmap. â\88\80V2s,U2,T1. â\87§*[f] T1 ≘ Ⓐ V2s.U2 →
+ â\88\83â\88\83V1s,U1. â\87§*[f] V1s â\89\98 V2s & â\87§*[f] U1 ≘ 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 ≘ T2s.
+lemma liftsv_total: â\88\80f. â\88\80T1s:list term. â\88\83T2s. â\87§*[f] T1s ≘ 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 ≘ V2s →
- â\88\80T1,T2. â¬\86*[f] T1 ≘ T2 →
- â¬\86*[f] Ⓐ V1s.T1 ≘ Ⓐ V2s.T2.
+lemma lifts_applv: â\88\80f:rtmap. â\88\80V1s,V2s. â\87§*[f] V1s ≘ V2s →
+ â\88\80T1,T2. â\87§*[f] T1 ≘ T2 →
+ â\87§*[f] Ⓐ V1s.T1 ≘ Ⓐ 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 ≘ T2s →
+lemma liftsv_split_trans: â\88\80f,T1s,T2s. â\87§*[f] T1s ≘ T2s →
∀f1,f2. f2 ⊚ f1 ≘ f →
- â\88\83â\88\83Ts. â¬\86*[f1] T1s â\89\98 Ts & â¬\86*[f2] Ts ≘ T2s.
+ â\88\83â\88\83Ts. â\87§*[f1] T1s â\89\98 Ts & â\87§*[f2] Ts ≘ 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 ≘ T2 → ♯{T1} = ♯{T2}.
+lemma lifts_fwd_tw: â\88\80f,T1,T2. â\87§*[f] T1 ≘ 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 ≘ I2 → ♯{I1} = ♯{I2}.
+lemma liftsb_fwd_bw: â\88\80f,I1,I2. â\87§*[f] I1 ≘ I2 → ♯{I1} = ♯{I2}.
#f #I1 #I2 * -I1 -I2 /2 width=2 by lifts_fwd_tw/
qed-.
theorem sex_trans_gen (RN1) (RP1) (RN2) (RP2) (RN) (RP):
∀L1,f.
- (â\88\80g,I,K,n. â¬\87*[n] L1 ≘ K.ⓘ{I} → ↑g = ⫱*[n] f → sex_transitive RN1 RN2 RN RN1 RP1 g K I) →
- (â\88\80g,I,K,n. â¬\87*[n] L1 ≘ K.ⓘ{I} → ⫯g = ⫱*[n] f → sex_transitive RP1 RP2 RP RN1 RP1 g K I) →
+ (â\88\80g,I,K,n. â\87©*[n] L1 ≘ K.ⓘ{I} → ↑g = ⫱*[n] f → sex_transitive RN1 RN2 RN RN1 RP1 g K I) →
+ (â\88\80g,I,K,n. â\87©*[n] L1 ≘ K.ⓘ{I} → ⫯g = ⫱*[n] f → sex_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.
theorem sex_conf (RN1) (RP1) (RN2) (RP2):
∀L,f.
- (â\88\80g,I,K,n. â¬\87*[n] L ≘ K.ⓘ{I} → ↑g = ⫱*[n] f → R_pw_confluent2_sex RN1 RN2 RN1 RP1 RN2 RP2 g K I) →
- (â\88\80g,I,K,n. â¬\87*[n] L ≘ K.ⓘ{I} → ⫯g = ⫱*[n] f → R_pw_confluent2_sex RP1 RP2 RN1 RP1 RN2 RP2 g K I) →
+ (â\88\80g,I,K,n. â\87©*[n] L ≘ K.ⓘ{I} → ↑g = ⫱*[n] f → R_pw_confluent2_sex RN1 RN2 RN1 RP1 RN2 RP2 g K I) →
+ (â\88\80g,I,K,n. â\87©*[n] L ≘ K.ⓘ{I} → ⫯g = ⫱*[n] f → R_pw_confluent2_sex RP1 RP2 RN1 RP1 RN2 RP2 g K I) →
pw_confluent2 … (sex RN1 RP1 f) (sex RN2 RP2 f) L.
#RN1 #RP1 #RN2 #RP2 #L elim L -L
[ #f #_ #_ #L1 #H1 #L2 #H2 >(sex_inv_atom1 … H1) >(sex_inv_atom1 … H2) -H2 -H1
(* Advanced properties ******************************************************)
lemma fqup_zeta (b) (p) (I) (G) (K) (V):
- â\88\80T1,T2. â¬\86*[1]T2 ≘ T1 → ⦃G,K,ⓑ{p,I}V.T1⦄ ⬂+[b] ⦃G,K,T2⦄.
+ â\88\80T1,T2. â\87§*[1]T2 ≘ T1 → ⦃G,K,ⓑ{p,I}V.T1⦄ ⬂+[b] ⦃G,K,T2⦄.
* /4 width=5 by fqup_strap2, fqu_fqup, fqu_drop, fqu_clear, fqu_bind_dx/ qed.
(* Basic_2A1: removed theorems 1: fqup_drop *)
(* Properties with generic slicing for local environments *******************)
-lemma fqup_drops_succ: â\88\80b,G,K,T,i,L,U. â¬\87*[â\86\91i] L â\89\98 K â\86\92 â¬\86*[↑i] T ≘ U →
+lemma fqup_drops_succ: â\88\80b,G,K,T,i,L,U. â\87©*[â\86\91i] L â\89\98 K â\86\92 â\87§*[↑i] T ≘ 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\98 K1 â\86\92 â¬\86*[i] T1 ≘ U1 →
+lemma fqup_drops_strap1: â\88\80b,G1,G2,L1,K1,K2,T1,T2,U1,i. â\87©*[i] L1 â\89\98 K1 â\86\92 â\87§*[i] T1 ≘ 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 ≘ K.ⓑ{I}V → ⦃G,L,#i⦄ ⬂+[b] ⦃G,K,V⦄.
+lemma fqup_lref: â\88\80b,I,G,L,K,V,i. â\87©*[i] L ≘ 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⦄ & b = Ⓣ
| ∧∧ ⦃G1,L1.ⓧ,T1⦄ ⬂*[b] ⦃G2,L2,T2⦄ & b = Ⓕ
- | â\88\83â\88\83J,L,T. â¦\83G1,L,Tâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 & â¬\86*[1] T ≘ ⓑ{p,I}V1.T1 & L1 = L.ⓘ{J}.
+ | â\88\83â\88\83J,L,T. â¦\83G1,L,Tâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 & â\87§*[1] T ≘ ⓑ{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 [3,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 â¬\82* â¦\83G2,L2,T2â¦\84 & â¬\86*[1] T ≘ ⓑ{p,I}V1.T1 & L1 = L.ⓘ{J}.
+ | â\88\83â\88\83J,L,T. â¦\83G1,L,Tâ¦\84 â¬\82* â¦\83G2,L2,T2â¦\84 & â\87§*[1] T ≘ ⓑ{p,I}V1.T1 & L1 = L.ⓘ{J}.
#p #I #G1 #G2 #L1 #L2 #V1 #T1 #T2 #H elim (fqus_inv_bind1 … H) -H [1,3,4: * ]
/3 width=1 by and3_intro, or4_intro0, or4_intro1, or4_intro2, or4_intro3/
#_ #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 â¬\82*[b] â¦\83G2,L2,T2â¦\84 & â¬\86*[1] T ≘ ⓕ{I}V1.T1 & L1 = L.ⓘ{J}.
+ | â\88\83â\88\83J,L,T. â¦\83G1,L,Tâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 & â\87§*[1] T ≘ ⓕ{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\98 K â\86\92 â¬\86*[i] T ≘ U →
+lemma fqus_drops: â\88\80b,G,L,K,T,U,i. â\87©*[i] L â\89\98 K â\86\92 â\87§*[i] T ≘ 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. b = Ⓣ → 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 ≘ U → fqu b G (L.ⓘ{I}) U G L T
+| fqu_drop : â\88\80I,G,L,T,U. â\87§*[1] T ≘ 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 & b = Ⓣ
| ∧∧ G1 = G2 & L1.ⓧ = L2 & U1 = T2 & b = Ⓕ
- | â\88\83â\88\83J. G1 = G2 & L1 = L2.â\93\98{J} & â¬\86*[1] T2 ≘ ⓑ{p,I}V1.U1.
+ | â\88\83â\88\83J. G1 = G2 & L1 = L2.â\93\98{J} & â\87§*[1] T2 ≘ ⓑ{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 & b = Ⓣ
| ∧∧ G1 = G2 & L1.ⓧ = L2 & U1 = T2 & b = Ⓕ
- | â\88\83â\88\83J. G1 = G2 & L1 = L2.â\93\98{J} & â¬\86*[1] T2 ≘ ⓑ{p,I}V1.U1.
+ | â\88\83â\88\83J. G1 = G2 & L1 = L2.â\93\98{J} & â\87§*[1] T2 ≘ ⓑ{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 ≘ ⓑ{p,I}V1.U1.
+ | â\88\83â\88\83J. G1 = G2 & L1 = L2.â\93\98{J} & â\87§*[1] T2 ≘ ⓑ{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_intro2/
* #HG #HL #HU #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 ≘ ⓕ{I}V1.U1.
+ | â\88\83â\88\83J. G1 = G2 & L1 = L2.â\93\98{J} & â\87§*[1] T2 ≘ ⓕ{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 ≘ ⓕ{I}V1.U1.
+ | â\88\83â\88\83J. G1 = G2 & L1 = L2.â\93\98{J} & â\87§*[1] T2 ≘ ⓕ{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 ≘ 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 ≘ 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 ≘ K.ⓑ{I}V & ⦃G,K⦄ ⊢ V ⁝ A.
+ â\88\83â\88\83I,K,V. â\87©*[i] L ≘ 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
qed-.
lemma aaa_pair_inv_lref (G) (L) (i):
- â\88\80A. â¦\83G,Lâ¦\84 â\8a¢ #i â\81\9d A â\86\92 â\88\80I,K,V. â¬\87*[i] L ≘ K.ⓑ{I}V → ⦃G,K⦄ ⊢ V ⁝ A.
+ â\88\80A. â¦\83G,Lâ¦\84 â\8a¢ #i â\81\9d A â\86\92 â\88\80I,K,V. â\87©*[i] L ≘ K.ⓑ{I}V → ⦃G,K⦄ ⊢ V ⁝ A.
#G #L #i #A #H #I #K #V #HLK
elim (aaa_inv_lref_drops … H) -H #J #Y #X #HLY #HX
lapply (drops_mono … HLY … HLK) -L -i #H destruct //
(* 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 ≘ L1 →
- â\88\80T2. â¬\86*[f] T1 ≘ 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 ≘ L1 →
+ â\88\80T2. â\87§*[f] T1 ≘ 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 ≘ L1 →
- â\88\80T1. â¬\86*[f] T1 ≘ 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 ≘ L1 →
+ â\88\80T1. â\87§*[f] T1 ≘ 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
(* Advanced properties ******************************************************)
lemma frees_atom_drops:
- â\88\80b,L,i. â¬\87*[b,𝐔❴i❵] L ≘ ⋆ →
+ â\88\80b,L,i. â\87©*[b,𝐔❴i❵] L ≘ ⋆ →
∀f. 𝐈⦃f⦄ → L ⊢ 𝐅+⦃#i⦄ ≘ ⫯*[i]↑f.
#b #L elim L -L /2 width=1 by frees_atom/
#L #I #IH *
lemma frees_pair_drops:
∀f,K,V. K ⊢ 𝐅+⦃V⦄ ≘ f →
- â\88\80i,I,L. â¬\87*[i] L ≘ K.ⓑ{I}V → L ⊢ 𝐅+⦃#i⦄ ≘ ⫯*[i] ↑f.
+ â\88\80i,I,L. â\87©*[i] L ≘ K.ⓑ{I}V → L ⊢ 𝐅+⦃#i⦄ ≘ ⫯*[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 ≘ K.ⓤ{I} →
+ â\88\80f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 â\88\80I,K,i,L. â\87©*[i] L ≘ K.ⓤ{I} →
L ⊢ 𝐅+⦃#i⦄ ≘ ⫯*[i] ↑f.
#f #Hf #I #K #i elim i -i
[ #L #H lapply (drops_fwd_isid … H ?) -H /2 width=1 by frees_unit/
(*
lemma frees_sort_pushs:
∀f,K,s. K ⊢ 𝐅+⦃⋆s⦄ ≘ f →
- â\88\80i,L. â¬\87*[i] L ≘ K → L ⊢ 𝐅+⦃⋆s⦄ ≘ ⫯*[i] f.
+ â\88\80i,L. â\87©*[i] L ≘ K → L ⊢ 𝐅+⦃⋆s⦄ ≘ ⫯*[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/
*)
lemma frees_lref_pushs:
∀f,K,j. K ⊢ 𝐅+⦃#j⦄ ≘ f →
- â\88\80i,L. â¬\87*[i] L ≘ K → L ⊢ 𝐅+⦃#(i+j)⦄ ≘ ⫯*[i] f.
+ â\88\80i,L. â\87©*[i] L ≘ K → L ⊢ 𝐅+⦃#(i+j)⦄ ≘ ⫯*[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
(*
lemma frees_gref_pushs:
∀f,K,l. K ⊢ 𝐅+⦃§l⦄ ≘ f →
- â\88\80i,L. â¬\87*[i] L ≘ K → L ⊢ 𝐅+⦃§l⦄ ≘ ⫯*[i] f.
+ â\88\80i,L. â\87©*[i] L ≘ K → L ⊢ 𝐅+⦃§l⦄ ≘ ⫯*[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/
lemma frees_inv_lref_drops:
∀L,i,f. L ⊢ 𝐅+⦃#i⦄ ≘ f →
- â\88¨â\88¨ â\88\83â\88\83g. â¬\87*[Ⓕ,𝐔❴i❵] L ≘ ⋆ & 𝐈⦃g⦄ & f = ⫯*[i] ↑g
- | â\88\83â\88\83g,I,K,V. K â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 â\89\98 g & â¬\87*[i] L ≘ K.ⓑ{I}V & f = ⫯*[i] ↑g
- | â\88\83â\88\83g,I,K. â¬\87*[i] L ≘ K.ⓤ{I} & 𝐈⦃g⦄ & f = ⫯*[i] ↑g.
+ â\88¨â\88¨ â\88\83â\88\83g. â\87©*[Ⓕ,𝐔❴i❵] L ≘ ⋆ & 𝐈⦃g⦄ & f = ⫯*[i] ↑g
+ | â\88\83â\88\83g,I,K,V. K â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 â\89\98 g & â\87©*[i] L ≘ K.ⓑ{I}V & f = ⫯*[i] ↑g
+ | â\88\83â\88\83g,I,K. â\87©*[i] L ≘ 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
lemma frees_lifts:
∀b,f1,K,T. K ⊢ 𝐅+⦃T⦄ ≘ f1 →
- â\88\80f,L. â¬\87*[b,f] L â\89\98 K â\86\92 â\88\80U. â¬\86*[f] T ≘ U →
+ â\88\80f,L. â\87©*[b,f] L â\89\98 K â\86\92 â\88\80U. â\87§*[f] T ≘ U →
∀f2. f ~⊚ f1 ≘ f2 → L ⊢ 𝐅+⦃U⦄ ≘ 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
qed-.
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 ≘ U →
+ â\88\80b,L,K. â\87©*[b,ð\9d\90\94â\9d´1â\9dµ] L â\89\98 K â\86\92 â\88\80T,U. â\87§*[1] T ≘ U →
∀f. K ⊢ 𝐅+⦃T⦄ ≘ f → L ⊢ 𝐅+⦃U⦄ ≘ ⫯f.
#b #L #K #HLK #T #U #HTU #f #Hf
@(frees_lifts b … Hf … HTU) // (**) (* auto fails *)
lemma frees_fwd_coafter:
∀b,f2,L,U. L ⊢ 𝐅+⦃U⦄ ≘ f2 →
- â\88\80f,K. â¬\87*[b,f] L â\89\98 K â\86\92 â\88\80T. â¬\86*[f] T ≘ U →
+ â\88\80f,K. â\87©*[b,f] L â\89\98 K â\86\92 â\88\80T. â\87§*[f] T ≘ U →
∀f1. K ⊢ 𝐅+⦃T⦄ ≘ f1 → f ~⊚ f1 ≘ f2.
/4 width=11 by frees_lifts, frees_mono, coafter_eq_repl_back0/ qed-.
lemma frees_inv_lifts_ex:
∀b,f2,L,U. L ⊢ 𝐅+⦃U⦄ ≘ f2 →
- â\88\80f,K. â¬\87*[b,f] L â\89\98 K â\86\92 â\88\80T. â¬\86*[f] T ≘ U →
+ â\88\80f,K. â\87©*[b,f] L â\89\98 K â\86\92 â\88\80T. â\87§*[f] T ≘ U →
∃∃f1. f ~⊚ f1 ≘ f2 & K ⊢ 𝐅+⦃T⦄ ≘ f1.
#b #f2 #L #U #Hf2 #f #K #HLK #T elim (frees_total K T)
/3 width=9 by frees_fwd_coafter, ex2_intro/
lemma frees_inv_lifts_SO:
∀b,f,L,U. L ⊢ 𝐅+⦃U⦄ ≘ f →
- â\88\80K. â¬\87*[b,ð\9d\90\94â\9d´1â\9dµ] L â\89\98 K â\86\92 â\88\80T. â¬\86*[1] T ≘ U →
+ â\88\80K. â\87©*[b,ð\9d\90\94â\9d´1â\9dµ] L â\89\98 K â\86\92 â\88\80T. â\87§*[1] T ≘ U →
K ⊢ 𝐅+⦃T⦄ ≘ ⫱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
lemma frees_inv_lifts:
∀b,f2,L,U. L ⊢ 𝐅+⦃U⦄ ≘ f2 →
- â\88\80f,K. â¬\87*[b,f] L â\89\98 K â\86\92 â\88\80T. â¬\86*[f] T ≘ U →
+ â\88\80f,K. â\87©*[b,f] L â\89\98 K â\86\92 â\88\80T. â\87§*[f] T ≘ U →
∀f1. f ~⊚ f1 ≘ f2 → K ⊢ 𝐅+⦃T⦄ ≘ 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/
(* Note: this is used by rex_conf and might be modified *)
lemma frees_inv_drops_next:
∀f1,L1,T1. L1 ⊢ 𝐅+⦃T1⦄ ≘ f1 →
- â\88\80I2,L2,V2,n. â¬\87*[n] L1 ≘ L2.ⓑ{I2}V2 →
+ â\88\80I2,L2,V2,n. â\87©*[n] L1 ≘ L2.ⓑ{I2}V2 →
∀g1. ↑g1 = ⫱*[n] f1 →
∃∃g2. L2 ⊢ 𝐅+⦃V2⦄ ≘ g2 & g2 ⊆ g1.
#f1 #L1 #T1 #H elim H -f1 -L1 -T1
(* Advanced properties ******************************************************)
-lemma fsle_lifts_sn: â\88\80T1,U1. â¬\86*[1] T1 ≘ U1 → ∀L1,L2. |L2| ≤ |L1| →
+lemma fsle_lifts_sn: â\88\80T1,U1. â\87§*[1] T1 ≘ 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_dx (L1) (L2):
- |L1| â\89¤ |L2| â\86\92 â\88\80T2,U2. â¬\86*[1]T2 ≘ U2 →
+ |L1| â\89¤ |L2| â\86\92 â\88\80T2,U2. â\87§*[1]T2 ≘ U2 →
∀T1. ⦃L1,T1⦄ ⊆ ⦃L2,T2⦄ → ⦃L1,T1⦄ ⊆ ⦃L2.ⓧ,U2⦄.
#L1 #L2 #HL21 #T2 #U2 #HTU2 #T1
* #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 ≘ W1 → ∀I1,I2. ⦃K1.ⓘ{I1},W1⦄ ⊆ ⦃K2.ⓑ{I2}V2,#O⦄.
+ â\88\80W1. â\87§*[1] V1 ≘ 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\98 U1 â\86\92 â¬\86*[1] T2 ≘ U2 →
+ â\88\80U1,U2. â\87§*[1] T1 â\89\98 U1 â\86\92 â\87§*[1] T2 ≘ 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 ≘ U1 →
+lemma fsle_inv_lifts_sn: â\88\80T1,U1. â\87§*[1] T1 ≘ 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
(* 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 ≘ L1 →
- â\88\80T0. â¬\86*[f] T ≘ 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 ≘ L1 →
+ â\88\80T0. â\87§*[f] T ≘ 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 ] * ]
C G L (ⒶVs.ⓓ{a}ⓝW.V.T) → C G L (ⒶVs.ⓐV.ⓛ{a}W.T).
definition S5 ≝ λC:candidate. ∀I,G,L,K,Vs,V1,V2,i.
- C G L (â\92¶Vs.V2) â\86\92 â¬\86*[↑i] V1 ≘ V2 →
- â¬\87*[i] L ≘ K.ⓑ{I}V1 → C G L (ⒶVs.#i).
+ C G L (â\92¶Vs.V2) â\86\92 â\87§*[↑i] V1 ≘ V2 →
+ â\87©*[i] L ≘ K.ⓑ{I}V1 → C G L (ⒶVs.#i).
definition S6 ≝ λRP,C:candidate.
- â\88\80G,L,V1b,V2b. â¬\86*[1] V1b ≘ V2b →
+ â\88\80G,L,V1b,V2b. â\87§*[1] V1b ≘ 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\98 K â\86\92 â¬\86*[f] T ≘ U → C1 G L W → C2 G L (ⓐW.U).
+ â\87©*[â\92»,f] L â\89\98 K â\86\92 â\87§*[f] T ≘ 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\98 L â\86\92 â¬\86*[f] W â\89\98 W0 â\86\92 â¬\86*[⫯f] T ≘ T0 →
+ â\88\80b,f,L0,V0,W0,T0. â\87©*[b,f] L0 â\89\98 L â\86\92 â\87§*[f] W â\89\98 W0 â\86\92 â\87§*[⫯f] T ≘ 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〛.
(* 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 ≘ K1 →
- â\88\83â\88\83K2. G â\8a¢ K1 â«\83â\81\9d K2 & â¬\87*[b,f] L2 ≘ K2.
+ â\88\80b,f,K1. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\87©*[b,f] L1 ≘ K1 →
+ â\88\83â\88\83K2. G â\8a¢ K1 â«\83â\81\9d K2 & â\87©*[b,f] L2 ≘ 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 ≘ K2 →
- â\88\83â\88\83K1. G â\8a¢ K1 â«\83â\81\9d K2 & â¬\87*[b,f] L1 ≘ K1.
+ â\88\80b,f,K2. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\87©*[b,f] L2 ≘ K2 →
+ â\88\83â\88\83K1. G â\8a¢ K1 â«\83â\81\9d K2 & â\87©*[b,f] L1 ≘ 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 ≘ K2 →
- â\88\83â\88\83K1. â¬\87*[b,f] L1 ≘ K1 & G ⊢ K1 ⫃[RP] K2.
+ â\88\80b,f,K2. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\87©*[b,f] L2 ≘ K2 →
+ â\88\83â\88\83K1. â\87©*[b,f] L1 ≘ 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 ≘ K1 → ∀K2. G ⊢ K1 ⫃[RP] K2 →
- â\88\83â\88\83L2. G â\8a¢ L1 â«\83[RP] L2 & â¬\87*[b,f] L2 ≘ K2.
+ â\88\80b,f,G,L1,K1. â\87©*[b,f] L1 ≘ K1 → ∀K2. G ⊢ K1 ⫃[RP] K2 →
+ â\88\83â\88\83L2. G â\8a¢ L1 â«\83[RP] L2 & â\87©*[b,f] L2 ≘ 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/
(* 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 ≘ K2.ⓘ{I} →
- â\88¨â\88¨ â\88\83â\88\83K1. K1 â«\83 K2 & â¬\87*[b,f] L1 ≘ K1.ⓘ{I}
- | â\88\83â\88\83K1,W,V. K1 â«\83 K2 & â¬\87*[b,f] L1 ≘ K1.ⓓⓝW.V & I = BPair Abst W
- | â\88\83â\88\83J1,J2,K1,V. K1 â«\83 K2 & â¬\87*[b,f] L1 ≘ K1.ⓑ{J1}V & I = BUnit J2.
+ â\88\80b,f,I,K2. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\87©*[b,f] L2 ≘ K2.ⓘ{I} →
+ â\88¨â\88¨ â\88\83â\88\83K1. K1 â«\83 K2 & â\87©*[b,f] L1 ≘ K1.ⓘ{I}
+ | â\88\83â\88\83K1,W,V. K1 â«\83 K2 & â\87©*[b,f] L1 ≘ K1.ⓓⓝW.V & I = BPair Abst W
+ | â\88\83â\88\83J1,J2,K1,V. K1 â«\83 K2 & â\87©*[b,f] L1 ≘ 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 ≘ K2.ⓓV →
- â\88\83â\88\83K1. K1 â«\83 K2 & â¬\87*[b,f] L1 ≘ K1.ⓓV.
+ â\88\80b,f,K2,V. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\87©*[b,f] L2 ≘ K2.ⓓV →
+ â\88\83â\88\83K1. K1 â«\83 K2 & â\87©*[b,f] L1 ≘ 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
/2 width=5 by rex_dropable_dx/ qed-.
lemma rdeq_inv_lifts_bi: ∀L1,L2,U. L1 ≛[U] L2 → ∀b,f. 𝐔⦃f⦄ →
- â\88\80K1,K2. â¬\87*[b,f] L1 â\89\98 K1 â\86\92 â¬\87*[b,f] L2 ≘ K2 →
- â\88\80T. â¬\86*[f] T ≘ U → K1 ≛[T] K2.
+ â\88\80K1,K2. â\87©*[b,f] L1 â\89\98 K1 â\86\92 â\87©*[b,f] L2 ≘ K2 →
+ â\88\80T. â\87§*[f] T ≘ U → K1 ≛[T] K2.
/2 width=10 by rex_inv_lifts_bi/ qed-.
-lemma rdeq_inv_lref_pair_sn: â\88\80L1,L2,i. L1 â\89\9b[#i] L2 â\86\92 â\88\80I,K1,V1. â¬\87*[i] L1 ≘ K1.ⓑ{I}V1 →
- â\88\83â\88\83K2,V2. â¬\87*[i] L2 ≘ K2.ⓑ{I}V2 & K1 ≛[V1] K2 & V1 ≛ V2.
+lemma rdeq_inv_lref_pair_sn: â\88\80L1,L2,i. L1 â\89\9b[#i] L2 â\86\92 â\88\80I,K1,V1. â\87©*[i] L1 ≘ K1.ⓑ{I}V1 →
+ â\88\83â\88\83K2,V2. â\87©*[i] L2 ≘ K2.ⓑ{I}V2 & K1 ≛[V1] K2 & V1 ≛ V2.
/2 width=3 by rex_inv_lref_pair_sn/ qed-.
-lemma rdeq_inv_lref_pair_dx: â\88\80L1,L2,i. L1 â\89\9b[#i] L2 â\86\92 â\88\80I,K2,V2. â¬\87*[i] L2 ≘ K2.ⓑ{I}V2 →
- â\88\83â\88\83K1,V1. â¬\87*[i] L1 ≘ K1.ⓑ{I}V1 & K1 ≛[V1] K2 & V1 ≛ V2.
+lemma rdeq_inv_lref_pair_dx: â\88\80L1,L2,i. L1 â\89\9b[#i] L2 â\86\92 â\88\80I,K2,V2. â\87©*[i] L2 ≘ K2.ⓑ{I}V2 →
+ â\88\83â\88\83K1,V1. â\87©*[i] L1 ≘ K1.ⓑ{I}V1 & K1 ≛[V1] K2 & V1 ≛ V2.
/2 width=3 by rex_inv_lref_pair_dx/ qed-.
lemma rdeq_inv_lref_pair_bi (L1) (L2) (i):
L1 ≛[#i] L2 →
- â\88\80I1,K1,V1. â¬\87*[i] L1 ≘ K1.ⓑ{I1}V1 →
- â\88\80I2,K2,V2. â¬\87*[i] L2 ≘ K2.ⓑ{I2}V2 →
+ â\88\80I1,K1,V1. â\87©*[i] L1 ≘ K1.ⓑ{I1}V1 →
+ â\88\80I2,K2,V2. â\87©*[i] L2 ≘ K2.ⓑ{I2}V2 →
∧∧ K1 ≛[V1] K2 & V1 ≛ V2 & I1 = I2.
/2 width=6 by rex_inv_lref_pair_bi/ qed-.
(* Basic_2A1: uses: lleq_lift_le lleq_lift_ge *)
lemma rdeq_lifts_bi: ∀L1,L2. |L1| = |L2| → ∀K1,K2,T. K1 ≛[T] K2 →
- â\88\80b,f. â¬\87*[b,f] L1 â\89\98 K1 â\86\92 â¬\87*[b,f] L2 ≘ K2 →
- â\88\80U. â¬\86*[f] T ≘ U → L1 ≛[U] L2.
+ â\88\80b,f. â\87©*[b,f] L1 â\89\98 K1 â\86\92 â\87©*[b,f] L2 ≘ K2 →
+ â\88\80U. â\87§*[f] T ≘ U → L1 ≛[U] L2.
/3 width=9 by rex_lifts_bi, tdeq_lifts_sn/ qed-.
(* Forward lemmas with length for local environments ************************)
(* Basic_2A1: uses: lleq_inv_lift_le lleq_inv_lift_be lleq_inv_lift_ge *)
lemma req_inv_lifts_bi: ∀L1,L2,U. L1 ≡[U] L2 → ∀b,f. 𝐔⦃f⦄ →
- â\88\80K1,K2. â¬\87*[b,f] L1 â\89\98 K1 â\86\92 â¬\87*[b,f] L2 ≘ K2 →
- â\88\80T. â¬\86*[f] T ≘ U → K1 ≡[T] K2.
+ â\88\80K1,K2. â\87©*[b,f] L1 â\89\98 K1 â\86\92 â\87©*[b,f] L2 ≘ K2 →
+ â\88\80T. â\87§*[f] T ≘ U → K1 ≡[T] K2.
/2 width=10 by rex_inv_lifts_bi/ qed-.
(* GENERIC EXTENSION ON REFERRED ENTRIES OF A CONTEXT-SENSITIVE REALTION ****)
definition f_dedropable_sn: predicate (relation3 lenv term term) ≝
- λR. â\88\80b,f,L1,K1. â¬\87*[b,f] L1 ≘ K1 →
- â\88\80K2,T. K1 ⪤[R,T] K2 â\86\92 â\88\80U. â¬\86*[f] T ≘ U →
- â\88\83â\88\83L2. L1 ⪤[R,U] L2 & â¬\87*[b,f] L2 ≘ K2 & L1 ≡[f] L2.
+ λR. â\88\80b,f,L1,K1. â\87©*[b,f] L1 ≘ K1 →
+ â\88\80K2,T. K1 ⪤[R,T] K2 â\86\92 â\88\80U. â\87§*[f] T ≘ U →
+ â\88\83â\88\83L2. L1 ⪤[R,U] L2 & â\87©*[b,f] L2 ≘ K2 & L1 ≡[f] L2.
definition f_dropable_sn: predicate (relation3 lenv term term) ≝
- λR. â\88\80b,f,L1,K1. â¬\87*[b,f] L1 ≘ K1 → 𝐔⦃f⦄ →
- â\88\80L2,U. L1 ⪤[R,U] L2 â\86\92 â\88\80T. â¬\86*[f] T ≘ U →
- â\88\83â\88\83K2. K1 ⪤[R,T] K2 & â¬\87*[b,f] L2 ≘ K2.
+ λR. â\88\80b,f,L1,K1. â\87©*[b,f] L1 ≘ K1 → 𝐔⦃f⦄ →
+ â\88\80L2,U. L1 ⪤[R,U] L2 â\86\92 â\88\80T. â\87§*[f] T ≘ U →
+ â\88\83â\88\83K2. K1 ⪤[R,T] K2 & â\87©*[b,f] L2 ≘ K2.
definition f_dropable_dx: predicate (relation3 lenv term term) ≝
λR. ∀L1,L2,U. L1 ⪤[R,U] L2 →
- â\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 ≘ U →
- â\88\83â\88\83K1. â¬\87*[b,f] L1 ≘ 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. â\87§*[f] T ≘ U →
+ â\88\83â\88\83K1. â\87©*[b,f] L1 ≘ K1 & K1 ⪤[R,T] K2.
definition f_transitive_next: relation3 … ≝ λR1,R2,R3.
∀f,L,T. L ⊢ 𝐅+⦃T⦄ ≘ f →
- â\88\80g,I,K,n. â¬\87*[n] L ≘ K.ⓘ{I} → ↑g = ⫱*[n] f →
+ â\88\80g,I,K,n. â\87©*[n] L ≘ K.ⓘ{I} → ↑g = ⫱*[n] f →
sex_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 rex_inv_lifts_bi (R):
∀L1,L2,U. L1 ⪤[R,U] L2 → ∀b,f. 𝐔⦃f⦄ →
- â\88\80K1,K2. â¬\87*[b,f] L1 â\89\98 K1 â\86\92 â¬\87*[b,f] L2 ≘ K2 →
- â\88\80T. â¬\86*[f] T ≘ U → K1 ⪤[R,T] K2.
+ â\88\80K1,K2. â\87©*[b,f] L1 â\89\98 K1 â\86\92 â\87©*[b,f] L2 ≘ K2 →
+ â\88\80T. â\87§*[f] T ≘ U → K1 ⪤[R,T] K2.
#R #L1 #L2 #U #HL12 #b #f #Hf #K1 #K2 #HLK1 #HLK2 #T #HTU
elim (rex_dropable_sn … HLK1 … HL12 … HTU) -L1 -U // #Y #HK12 #HY
lapply (drops_mono … HY … HLK2) -b -f -L2 #H destruct //
qed-.
lemma rex_inv_lref_pair_sn (R):
- â\88\80L1,L2,i. L1 ⪤[R,#i] L2 â\86\92 â\88\80I,K1,V1. â¬\87*[i] L1 ≘ K1.ⓑ{I}V1 →
- â\88\83â\88\83K2,V2. â¬\87*[i] L2 ≘ K2.ⓑ{I}V2 & K1 ⪤[R,V1] K2 & R K1 V1 V2.
+ â\88\80L1,L2,i. L1 ⪤[R,#i] L2 â\86\92 â\88\80I,K1,V1. â\87©*[i] L1 ≘ K1.ⓑ{I}V1 →
+ â\88\83â\88\83K2,V2. â\87©*[i] L2 ≘ K2.ⓑ{I}V2 & K1 ⪤[R,V1] K2 & R K1 V1 V2.
#R #L1 #L2 #i #HL12 #I #K1 #V1 #HLK1 elim (rex_dropable_sn … HLK1 … HL12 (#0)) -HLK1 -HL12 //
#Y #HY #HLK2 elim (rex_inv_zero_pair_sn … HY) -HY
#K2 #V2 #HK12 #HV12 #H destruct /2 width=5 by ex3_2_intro/
qed-.
lemma rex_inv_lref_pair_dx (R):
- â\88\80L1,L2,i. L1 ⪤[R,#i] L2 â\86\92 â\88\80I,K2,V2. â¬\87*[i] L2 ≘ K2.ⓑ{I}V2 →
- â\88\83â\88\83K1,V1. â¬\87*[i] L1 ≘ K1.ⓑ{I}V1 & K1 ⪤[R,V1] K2 & R K1 V1 V2.
+ â\88\80L1,L2,i. L1 ⪤[R,#i] L2 â\86\92 â\88\80I,K2,V2. â\87©*[i] L2 ≘ K2.ⓑ{I}V2 →
+ â\88\83â\88\83K1,V1. â\87©*[i] L1 ≘ K1.ⓑ{I}V1 & K1 ⪤[R,V1] K2 & R K1 V1 V2.
#R #L1 #L2 #i #HL12 #I #K2 #V2 #HLK2 elim (rex_dropable_dx … HL12 … HLK2 … (#0)) -HLK2 -HL12 //
#Y #HLK1 #HY elim (rex_inv_zero_pair_dx … HY) -HY
#K1 #V1 #HK12 #HV12 #H destruct /2 width=5 by ex3_2_intro/
lemma rex_inv_lref_pair_bi (R) (L1) (L2) (i):
L1 ⪤[R,#i] L2 →
- â\88\80I1,K1,V1. â¬\87*[i] L1 ≘ K1.ⓑ{I1}V1 →
- â\88\80I2,K2,V2. â¬\87*[i] L2 ≘ K2.ⓑ{I2}V2 →
+ â\88\80I1,K1,V1. â\87©*[i] L1 ≘ K1.ⓑ{I1}V1 →
+ â\88\80I2,K2,V2. â\87©*[i] L2 ≘ K2.ⓑ{I2}V2 →
∧∧ K1 ⪤[R,V1] K2 & R K1 V1 V2 & I1 = I2.
#R #L1 #L2 #i #H12 #I1 #K1 #V1 #H1 #I2 #K2 #V2 #H2
elim (rex_inv_lref_pair_sn … H12 … H1) -L1 #Y2 #X2 #HLY2 #HK12 #HV12
qed-.
lemma rex_inv_lref_unit_sn (R):
- â\88\80L1,L2,i. L1 ⪤[R,#i] L2 â\86\92 â\88\80I,K1. â¬\87*[i] L1 ≘ K1.ⓤ{I} →
- â\88\83â\88\83f,K2. â¬\87*[i] L2 ≘ K2.ⓤ{I} & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈⦃f⦄.
+ â\88\80L1,L2,i. L1 ⪤[R,#i] L2 â\86\92 â\88\80I,K1. â\87©*[i] L1 ≘ K1.ⓤ{I} →
+ â\88\83â\88\83f,K2. â\87©*[i] L2 ≘ K2.ⓤ{I} & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈⦃f⦄.
#R #L1 #L2 #i #HL12 #I #K1 #HLK1 elim (rex_dropable_sn … HLK1 … HL12 (#0)) -HLK1 -HL12 //
#Y #HY #HLK2 elim (rex_inv_zero_unit_sn … HY) -HY
#f #K2 #Hf #HK12 #H destruct /2 width=5 by ex3_2_intro/
qed-.
lemma rex_inv_lref_unit_dx (R):
- â\88\80L1,L2,i. L1 ⪤[R,#i] L2 â\86\92 â\88\80I,K2. â¬\87*[i] L2 ≘ K2.ⓤ{I} →
- â\88\83â\88\83f,K1. â¬\87*[i] L1 ≘ K1.ⓤ{I} & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈⦃f⦄.
+ â\88\80L1,L2,i. L1 ⪤[R,#i] L2 â\86\92 â\88\80I,K2. â\87©*[i] L2 ≘ K2.ⓤ{I} →
+ â\88\83â\88\83f,K1. â\87©*[i] L1 ≘ K1.ⓤ{I} & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈⦃f⦄.
#R #L1 #L2 #i #HL12 #I #K2 #HLK2 elim (rex_dropable_dx … HL12 … HLK2 … (#0)) -HLK2 -HL12 //
#Y #HLK1 #HY elim (rex_inv_zero_unit_dx … HY) -HY
#f #K2 #Hf #HK12 #H destruct /2 width=5 by ex3_2_intro/
lemma rex_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\98 K1 â\86\92 â¬\87*[b,f] L2 ≘ K2 →
- â\88\80U. â¬\86*[f] T ≘ U → L1 ⪤[R,U] L2.
+ â\88\80b,f. â\87©*[b,f] L1 â\89\98 K1 â\86\92 â\87©*[b,f] L2 ≘ K2 →
+ â\88\80U. â\87§*[f] T ≘ 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
class "orange"
[ { "relocation" * } {
[ { "generic and uniform slicing" * } {
- [ [ "for lenvs" ] "drops" + "( â¬\87*[?,?] ? â\89\98 ? )" + "( â¬\87*[?] ? ≘ ? )" "drops_ctc" + "drops_ltc" + "drops_weight" + "drops_length" + "drops_cext2" + "drops_sex" + "drops_lex" + "drops_seq" + "drops_drops" + "drops_vector" * ]
+ [ [ "for lenvs" ] "drops" + "( â\87©*[?,?] ? â\89\98 ? )" + "( â\87©*[?] ? ≘ ? )" "drops_ctc" + "drops_ltc" + "drops_weight" + "drops_length" + "drops_cext2" + "drops_sex" + "drops_lex" + "drops_seq" + "drops_drops" + "drops_vector" * ]
}
]
[ { "basic relocation" * } {
- [ [ "for terms" ] "lifts_basic" + "( â¬\86[?,?] ? ≘ ? )" * ]
+ [ [ "for terms" ] "lifts_basic" + "( â\87§[?,?] ? ≘ ? )" * ]
}
]
[ { "generic and uniform relocation" * } {
- [ [ "for binders" ] "lifts_bind" + "( â¬\86*[?] ? ≘ ? )" "lifts_weight_bind" + "lifts_lifts_bind" * ]
- [ [ "for term vectors" ] "lifts_vector" + "( â¬\86*[?] ? ≘ ? )" "lifts_lifts_vector" * ]
- [ [ "for terms" ] "lifts" + "( â¬\86*[?] ? ≘ ? )" "lifts_simple" + "lifts_weight" + "lifts_tdeq" + "lifts_tweq" + "lifts_toeq" + "lifts_lifts" * ]
+ [ [ "for binders" ] "lifts_bind" + "( â\87§*[?] ? ≘ ? )" "lifts_weight_bind" + "lifts_lifts_bind" * ]
+ [ [ "for term vectors" ] "lifts_vector" + "( â\87§*[?] ? ≘ ? )" "lifts_lifts_vector" * ]
+ [ [ "for terms" ] "lifts" + "( â\87§*[?] ? ≘ ? )" "lifts_simple" + "lifts_weight" + "lifts_tdeq" + "lifts_tweq" + "lifts_toeq" + "lifts_lifts" * ]
}
]
[ { "syntactic equivalence" * } {