(* Note: extended validity of a closure, height of cnv_appl > 1 *)
lemma cnv_extended (h) (p) (G) (L):
- â\88\80s. â\9dªG,L.â\93\9bâ\8b\86s.â\93\9bâ\93\9b[p]â\8b\86s.â\8b\86s.â\93\9b#0â\9d« ⊢ ⓐ#2.#0 ![h,𝛚].
+ â\88\80s. â\9d¨G,L.â\93\9bâ\8b\86s.â\93\9bâ\93\9b[p]â\8b\86s.â\8b\86s.â\93\9b#0â\9d© ⊢ ⓐ#2.#0 ![h,𝛚].
#h #p #G #L #s
@(cnv_appl … 2 p … (⋆s) … (⋆s))
[ //
(* Note: restricted validity of the η-expanded closure, height of cnv_appl = 1 **)
lemma cnv_restricted (h) (p) (G) (L):
- â\88\80s. â\9dªG,L.â\93\9bâ\8b\86s.â\93\9bâ\93\9b[p]â\8b\86s.â\8b\86s.â\93\9bâ\93\9b[p]â\8b\86s.â\93\90#0.#1â\9d« ⊢ ⓐ#2.#0 ![h,𝟐].
+ â\88\80s. â\9d¨G,L.â\93\9bâ\8b\86s.â\93\9bâ\93\9b[p]â\8b\86s.â\8b\86s.â\93\9bâ\93\9b[p]â\8b\86s.â\93\90#0.#1â\9d© ⊢ ⓐ#2.#0 ![h,𝟐].
#h #p #G #L #s
@(cnv_appl … 1 p … (⋆s) … (ⓐ#0.#2))
[ //
(* Basic inversion properties ***********************************************)
lemma cpr_inv_Delta1_body_sn (h) (G) (L) (s):
- â\88\80X. â\9dªG,L.â\93\9bâ\8b\86sâ\9d« ⊢ ⓐ#O.#O ➡[h,0] X → ⓐ#O.#O = X.
+ â\88\80X. â\9d¨G,L.â\93\9bâ\8b\86sâ\9d© ⊢ ⓐ#O.#O ➡[h,0] X → ⓐ#O.#O = X.
#h #G #L #s #X #H
lapply (cpm_inv_appl1 … H) -H * *
[ #W2 #T2 #HW2 #HT2 #H destruct
qed-.
lemma cpr_inv_Delta_sn (h) (G) (L) (s):
- â\88\80X. â\9dªG,Lâ\9d« ⊢ Delta s ➡[h,0] X → Delta s = X.
+ â\88\80X. â\9d¨G,Lâ\9d© ⊢ Delta s ➡[h,0] X → Delta s = X.
#h #G #L #s #X #H
elim (cpm_inv_abst1 … H) -H #X1 #X2 #H1 #H2 #H destruct
lapply (cpr_inv_sort1 … H1) -H1 #H destruct
(* Main properties **********************************************************)
-theorem cpr_Omega_12 (h) (G) (L) (s): â\9dªG,Lâ\9d« ⊢ Omega1 s ➡[h,0] Omega2 s.
+theorem cpr_Omega_12 (h) (G) (L) (s): â\9d¨G,Lâ\9d© ⊢ Omega1 s ➡[h,0] Omega2 s.
/2 width=1 by cpm_beta/ qed.
-theorem cpr_Omega_23 (h) (G) (L) (s): â\9dªG,Lâ\9d« ⊢ Omega2 s ➡[h,0] Omega3 s.
+theorem cpr_Omega_23 (h) (G) (L) (s): â\9d¨G,Lâ\9d© ⊢ Omega2 s ➡[h,0] Omega3 s.
/5 width=3 by cpm_eps, cpm_appl, cpm_bind, cpm_delta, Delta_lifts/ qed.
-theorem cpr_Omega_31 (h) (G) (L) (s): â\9dªG,Lâ\9d« ⊢ Omega3 s ➡[h,0] Omega1 s.
+theorem cpr_Omega_31 (h) (G) (L) (s): â\9d¨G,Lâ\9d© ⊢ Omega3 s ➡[h,0] Omega1 s.
/4 width=3 by cpm_zeta, Delta_lifts, lifts_flat/ qed.
(* Main inversion properties ************************************************)
theorem cpr_inv_Omega1_sn (h) (G) (L) (s):
- â\88\80X. â\9dªG,Lâ\9d« ⊢ Omega1 s ➡[h,0] X →
+ â\88\80X. â\9d¨G,Lâ\9d© ⊢ Omega1 s ➡[h,0] X →
∨∨ Omega1 s = X | Omega2 s = X.
#h #G #L #s #X #H elim (cpm_inv_appl1 … H) -H *
[ #W2 #T2 #HW2 #HT2 #H destruct
]
qed-.
-theorem cpr_Omega_21_false (h) (G) (L) (s): â\9dªG,Lâ\9d« ⊢ Omega2 s ➡[h,0] Omega1 s → ⊥.
+theorem cpr_Omega_21_false (h) (G) (L) (s): â\9d¨G,Lâ\9d© ⊢ Omega2 s ➡[h,0] Omega1 s → ⊥.
#h #G #L #s #H elim (cpm_inv_bind1 … H) -H *
[ #W #T #_ #_ whd in ⊢ (??%?→?); #H destruct
| #X #H #_ #_ #_
/5 width=1 by lifts_sort, lifts_lref, lifts_bind, lifts_flat/ qed.
lemma cpr_ApplOmega_12 (G) (L) (s0) (s):
- â\9dªG,Lâ\9d« ⊢ ApplOmega1 s0 s ⬈ ApplOmega2 s0 s.
+ â\9d¨G,Lâ\9d© ⊢ ApplOmega1 s0 s ⬈ ApplOmega2 s0 s.
/2 width=1 by cpx_beta/ qed.
lemma cpr_ApplOmega_23 (G) (L) (s0) (s):
- â\9dªG,Lâ\9d« ⊢ ApplOmega2 s0 s ⬈ ApplOmega3 s0 s.
+ â\9d¨G,Lâ\9d© ⊢ ApplOmega2 s0 s ⬈ ApplOmega3 s0 s.
/6 width=3 by cpx_eps, cpx_flat, cpx_bind, cpx_delta, ApplDelta_lifts/ qed.
lemma cpr_ApplOmega_34 (G) (L) (s0) (s):
- â\9dªG,Lâ\9d« ⊢ ApplOmega3 s0 s ⬈ ApplOmega4 s0 s.
+ â\9d¨G,Lâ\9d© ⊢ ApplOmega3 s0 s ⬈ ApplOmega4 s0 s.
/4 width=3 by cpx_zeta, ApplDelta_lifts, lifts_sort, lifts_flat/ qed.
lemma cpxs_ApplOmega_14 (G) (L) (s0) (s):
- â\9dªG,Lâ\9d« ⊢ ApplOmega1 s0 s ⬈* ApplOmega4 s0 s.
+ â\9d¨G,Lâ\9d© ⊢ ApplOmega1 s0 s ⬈* ApplOmega4 s0 s.
/5 width=5 by cpxs_strap1, cpx_cpxs/ qed.
lemma fqup_ApplOmega_41 (G) (L) (s0) (s):
- â\9dªG,L,ApplOmega4 s0 sâ\9d« â¬\82+ â\9dªG,L,ApplOmega1 s0 sâ\9d«.
+ â\9d¨G,L,ApplOmega4 s0 sâ\9d© â¬\82+ â\9d¨G,L,ApplOmega1 s0 sâ\9d©.
/2 width=1 by/ qed.
(* Main properties **********************************************************)
theorem fpbg_refl (G) (L) (s0) (s):
- â\9dªG,L,ApplOmega1 s0 sâ\9d« > â\9dªG,L,ApplOmega1 s0 sâ\9d«.
+ â\9d¨G,L,ApplOmega1 s0 sâ\9d© > â\9d¨G,L,ApplOmega1 s0 sâ\9d©.
/3 width=5 by fpbs_fpbg_trans, fqup_fpbg, cpxs_fpbs/ qed.
(* Basic properties *********************************************************)
lemma ex_rpx_fwd_1 (G) (K) (s1) (s0):
- â\9dªG,L1 K s1 s0â\9d« ⊢ ⬈ L K s1 s0.
+ â\9d¨G,L1 K s1 s0â\9d© ⊢ ⬈ L K s1 s0.
/3 width=1 by lpx_pair, lpx_bind_refl_dx, cpx_eps/ qed.
lemma ex_rpx_fwd_2 (K) (s1) (s0) (i1) (i0):
/4 width=1 by reqg_refl, reqg_pair, reqg_sort, teqg_sort/ qed.
lemma ex_rpx_fwd_3 (G) (K) (s1) (s0) (i1) (i0):
- â\9dªG,L1 K s1 s0â\9d« ⊢ ⬈[T] L2 K i1 i0 → ⊥.
+ â\9d¨G,L1 K s1 s0â\9d© ⊢ ⬈[T] L2 K i1 i0 → ⊥.
#G #K #s1 #s0 #i1 #i0 #H
elim (rpx_inv_zero_pair_sn … H) -H #Y2 #X2 #H #_ normalize #H0 destruct
elim (rpx_inv_flat … H) -H #H #_
(* Main properties **********************************************************)
theorem ex_rpx_fwd (G) (K) (s1) (s0) (i1) (i0):
- (â\9dªG,L1 K s1 s0â\9d« â\8a¢ â¬\88 L K s1 s0 â\86\92 L K s1 s0 â\89\85[T] L2 K i1 i0 â\86\92 â\9dªG,L1 K s1 s0â\9d« ⊢ ⬈[T] L2 K i1 i0) → ⊥.
+ (â\9d¨G,L1 K s1 s0â\9d© â\8a¢ â¬\88 L K s1 s0 â\86\92 L K s1 s0 â\89\85[T] L2 K i1 i0 â\86\92 â\9d¨G,L1 K s1 s0â\9d© ⊢ ⬈[T] L2 K i1 i0) → ⊥.
/3 width=7 by ex_rpx_fwd_3, ex_rpx_fwd_2, ex_rpx_fwd_1/ qed-.
(* Properties with relocation ***********************************************)
-lemma mf_delta_drops (h) (G): â\88\80K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡[h,0] V2 →
+lemma mf_delta_drops (h) (G): â\88\80K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ➡[h,0] V2 →
∀T,L,i. ⇩[i] L ≘ K.ⓓV1 →
- â\88\80gv,lv. â\9dªG,Lâ\9d« ⊢ ●[gv,⇡[i←#i]lv]T ➡[h,0] ●[gv,⇡[i←↑[↑i]V2]lv]T.
+ â\88\80gv,lv. â\9d¨G,Lâ\9d© ⊢ ●[gv,⇡[i←#i]lv]T ➡[h,0] ●[gv,⇡[i←↑[↑i]V2]lv]T.
#h #G #K #V1 #V2 #HV #T elim T -T * //
[ #i #L #j #HKL #gv #lv
>mf_lref >mf_lref
(* Forward lemmas with context-sensitive parallel reduction for terms *******)
lemma cpr_fwd_deq (h) (M): is_model M → is_extensional M →
- â\88\80G,L,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ≗{M} T2.
+ â\88\80G,L,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ≗{M} T2.
#h #M #H1M #H2M #G #L #T1 #T2 #H @(cpr_ind … H) -G -L -T1 -T2
[ /2 width=2 by deq_refl/
| #G #K #V1 #V2 #W2 #_ #IH #HVW2 #gv #v #H
definition tm_dd ≝ term.
-definition tm_sq (h) (T1) (T2) â\89\9d â\9dªâ\8b\86,â\8b\86â\9d« ⊢ T1 ⬌*[h] T2.
+definition tm_sq (h) (T1) (T2) â\89\9d â\9d¨â\8b\86,â\8b\86â\9d© ⊢ T1 ⬌*[h] T2.
definition tm_sv (s) ≝ ⋆s.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation < "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 ≗ break term 46 T2 )"
+notation < "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 ≗ break term 46 T2 )"
non associative with precedence 45
for @{ 'RingEq $M $G $L $T1 $T2 }.
-notation > "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 ≗ break term 46 T2 )"
+notation > "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 ≗ break term 46 T2 )"
non associative with precedence 45
for @{ 'RingEq ? $G $L $T1 $T2 }.
-notation > "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 ≗{ break term 46 M } break term 46 T2 )"
+notation > "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 ≗{ break term 46 M } break term 46 T2 )"
non associative with precedence 45
for @{ 'RingEq $M $G $L $T1 $T2 }.
| cnv_lref: ∀I,G,K,i. cnv h a G K (#i) → cnv h a G (K.ⓘ[I]) (#↑i)
| cnv_bind: ∀p,I,G,L,V,T. cnv h a G L V → cnv h a G (L.ⓑ[I]V) T → cnv h a G L (ⓑ[p,I]V.T)
| cnv_appl: ∀n,p,G,L,V,W0,T,U0. ad a n → cnv h a G L V → cnv h a G L T →
- â\9dªG,Lâ\9d« â\8a¢ V â\9e¡*[h,1] W0 â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡*[h,n] ⓛ[p]W0.U0 → cnv h a G L (ⓐV.T)
+ â\9d¨G,Lâ\9d© â\8a¢ V â\9e¡*[h,1] W0 â\86\92 â\9d¨G,Lâ\9d© ⊢ T ➡*[h,n] ⓛ[p]W0.U0 → cnv h a G L (ⓐV.T)
| cnv_cast: ∀G,L,U,T,U0. cnv h a G L U → cnv h a G L T →
- â\9dªG,Lâ\9d« â\8a¢ U â\9e¡*[h,0] U0 â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡*[h,1] U0 → cnv h a G L (ⓝU.T)
+ â\9d¨G,Lâ\9d© â\8a¢ U â\9e¡*[h,0] U0 â\86\92 â\9d¨G,Lâ\9d© ⊢ T ➡*[h,1] U0 → cnv h a G L (ⓝU.T)
.
interpretation "context-sensitive native validity (term)"
(* Basic inversion lemmas ***************************************************)
fact cnv_inv_zero_aux (h) (a):
- â\88\80G,L,X. â\9dªG,Lâ\9d« ⊢ X ![h,a] → X = #0 →
- â\88\83â\88\83I,K,V. â\9dªG,Kâ\9d« ⊢ V ![h,a] & L = K.ⓑ[I]V.
+ â\88\80G,L,X. â\9d¨G,Lâ\9d© ⊢ X ![h,a] → X = #0 →
+ â\88\83â\88\83I,K,V. â\9d¨G,Kâ\9d© ⊢ V ![h,a] & L = K.ⓑ[I]V.
#h #a #G #L #X * -G -L -X
[ #G #L #s #H destruct
| #I #G #K #V #HV #_ /2 width=5 by ex2_3_intro/
qed-.
lemma cnv_inv_zero (h) (a):
- â\88\80G,L. â\9dªG,Lâ\9d« ⊢ #0 ![h,a] →
- â\88\83â\88\83I,K,V. â\9dªG,Kâ\9d« ⊢ V ![h,a] & L = K.ⓑ[I]V.
+ â\88\80G,L. â\9d¨G,Lâ\9d© ⊢ #0 ![h,a] →
+ â\88\83â\88\83I,K,V. â\9d¨G,Kâ\9d© ⊢ V ![h,a] & L = K.ⓑ[I]V.
/2 width=3 by cnv_inv_zero_aux/ qed-.
fact cnv_inv_lref_aux (h) (a):
- â\88\80G,L,X. â\9dªG,Lâ\9d« ⊢ X ![h,a] → ∀i. X = #(↑i) →
- â\88\83â\88\83I,K. â\9dªG,Kâ\9d« ⊢ #i ![h,a] & L = K.ⓘ[I].
+ â\88\80G,L,X. â\9d¨G,Lâ\9d© ⊢ X ![h,a] → ∀i. X = #(↑i) →
+ â\88\83â\88\83I,K. â\9d¨G,Kâ\9d© ⊢ #i ![h,a] & L = K.ⓘ[I].
#h #a #G #L #X * -G -L -X
[ #G #L #s #j #H destruct
| #I #G #K #V #_ #j #H destruct
qed-.
lemma cnv_inv_lref (h) (a):
- â\88\80G,L,i. â\9dªG,Lâ\9d« ⊢ #↑i ![h,a] →
- â\88\83â\88\83I,K. â\9dªG,Kâ\9d« ⊢ #i ![h,a] & L = K.ⓘ[I].
+ â\88\80G,L,i. â\9d¨G,Lâ\9d© ⊢ #↑i ![h,a] →
+ â\88\83â\88\83I,K. â\9d¨G,Kâ\9d© ⊢ #i ![h,a] & L = K.ⓘ[I].
/2 width=3 by cnv_inv_lref_aux/ qed-.
-fact cnv_inv_gref_aux (h) (a): â\88\80G,L,X. â\9dªG,Lâ\9d« ⊢ X ![h,a] → ∀l. X = §l → ⊥.
+fact cnv_inv_gref_aux (h) (a): â\88\80G,L,X. â\9d¨G,Lâ\9d© ⊢ X ![h,a] → ∀l. X = §l → ⊥.
#h #a #G #L #X * -G -L -X
[ #G #L #s #l #H destruct
| #I #G #K #V #_ #l #H destruct
qed-.
(* Basic_2A1: uses: snv_inv_gref *)
-lemma cnv_inv_gref (h) (a): â\88\80G,L,l. â\9dªG,Lâ\9d« ⊢ §l ![h,a] → ⊥.
+lemma cnv_inv_gref (h) (a): â\88\80G,L,l. â\9d¨G,Lâ\9d© ⊢ §l ![h,a] → ⊥.
/2 width=8 by cnv_inv_gref_aux/ qed-.
fact cnv_inv_bind_aux (h) (a):
- â\88\80G,L,X. â\9dªG,Lâ\9d« ⊢ X ![h,a] →
+ â\88\80G,L,X. â\9d¨G,Lâ\9d© ⊢ X ![h,a] →
∀p,I,V,T. X = ⓑ[p,I]V.T →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ V ![h,a] & â\9dªG,L.â\93\91[I]Vâ\9d« ⊢ T ![h,a].
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ V ![h,a] & â\9d¨G,L.â\93\91[I]Vâ\9d© ⊢ T ![h,a].
#h #a #G #L #X * -G -L -X
[ #G #L #s #q #Z #X1 #X2 #H destruct
| #I #G #K #V #_ #q #Z #X1 #X2 #H destruct
(* Basic_2A1: uses: snv_inv_bind *)
lemma cnv_inv_bind (h) (a):
- â\88\80p,I,G,L,V,T. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V.T ![h,a] →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ V ![h,a] & â\9dªG,L.â\93\91[I]Vâ\9d« ⊢ T ![h,a].
+ â\88\80p,I,G,L,V,T. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V.T ![h,a] →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ V ![h,a] & â\9d¨G,L.â\93\91[I]Vâ\9d© ⊢ T ![h,a].
/2 width=4 by cnv_inv_bind_aux/ qed-.
fact cnv_inv_appl_aux (h) (a):
- â\88\80G,L,X. â\9dªG,Lâ\9d« ⊢ X ![h,a] → ∀V,T. X = ⓐV.T →
- â\88\83â\88\83n,p,W0,U0. ad a n & â\9dªG,Lâ\9d« â\8a¢ V ![h,a] & â\9dªG,Lâ\9d« ⊢ T ![h,a] &
- â\9dªG,Lâ\9d« â\8a¢ V â\9e¡*[h,1] W0 & â\9dªG,Lâ\9d« ⊢ T ➡*[h,n] ⓛ[p]W0.U0.
+ â\88\80G,L,X. â\9d¨G,Lâ\9d© ⊢ X ![h,a] → ∀V,T. X = ⓐV.T →
+ â\88\83â\88\83n,p,W0,U0. ad a n & â\9d¨G,Lâ\9d© â\8a¢ V ![h,a] & â\9d¨G,Lâ\9d© ⊢ T ![h,a] &
+ â\9d¨G,Lâ\9d© â\8a¢ V â\9e¡*[h,1] W0 & â\9d¨G,Lâ\9d© ⊢ T ➡*[h,n] ⓛ[p]W0.U0.
#h #a #G #L #X * -L -X
[ #G #L #s #X1 #X2 #H destruct
| #I #G #K #V #_ #X1 #X2 #H destruct
(* Basic_2A1: uses: snv_inv_appl *)
lemma cnv_inv_appl (h) (a):
- â\88\80G,L,V,T. â\9dªG,Lâ\9d« ⊢ ⓐV.T ![h,a] →
- â\88\83â\88\83n,p,W0,U0. ad a n & â\9dªG,Lâ\9d« â\8a¢ V ![h,a] & â\9dªG,Lâ\9d« ⊢ T ![h,a] &
- â\9dªG,Lâ\9d« â\8a¢ V â\9e¡*[h,1] W0 & â\9dªG,Lâ\9d« ⊢ T ➡*[h,n] ⓛ[p]W0.U0.
+ â\88\80G,L,V,T. â\9d¨G,Lâ\9d© ⊢ ⓐV.T ![h,a] →
+ â\88\83â\88\83n,p,W0,U0. ad a n & â\9d¨G,Lâ\9d© â\8a¢ V ![h,a] & â\9d¨G,Lâ\9d© ⊢ T ![h,a] &
+ â\9d¨G,Lâ\9d© â\8a¢ V â\9e¡*[h,1] W0 & â\9d¨G,Lâ\9d© ⊢ T ➡*[h,n] ⓛ[p]W0.U0.
/2 width=3 by cnv_inv_appl_aux/ qed-.
fact cnv_inv_cast_aux (h) (a):
- â\88\80G,L,X. â\9dªG,Lâ\9d« ⊢ X ![h,a] → ∀U,T. X = ⓝU.T →
- â\88\83â\88\83U0. â\9dªG,Lâ\9d« â\8a¢ U ![h,a] & â\9dªG,Lâ\9d« ⊢ T ![h,a] &
- â\9dªG,Lâ\9d« â\8a¢ U â\9e¡*[h,0] U0 & â\9dªG,Lâ\9d« ⊢ T ➡*[h,1] U0.
+ â\88\80G,L,X. â\9d¨G,Lâ\9d© ⊢ X ![h,a] → ∀U,T. X = ⓝU.T →
+ â\88\83â\88\83U0. â\9d¨G,Lâ\9d© â\8a¢ U ![h,a] & â\9d¨G,Lâ\9d© ⊢ T ![h,a] &
+ â\9d¨G,Lâ\9d© â\8a¢ U â\9e¡*[h,0] U0 & â\9d¨G,Lâ\9d© ⊢ T ➡*[h,1] U0.
#h #a #G #L #X * -G -L -X
[ #G #L #s #X1 #X2 #H destruct
| #I #G #K #V #_ #X1 #X2 #H destruct
(* Basic_2A1: uses: snv_inv_cast *)
lemma cnv_inv_cast (h) (a):
- â\88\80G,L,U,T. â\9dªG,Lâ\9d« ⊢ ⓝU.T ![h,a] →
- â\88\83â\88\83U0. â\9dªG,Lâ\9d« â\8a¢ U ![h,a] & â\9dªG,Lâ\9d« ⊢ T ![h,a] &
- â\9dªG,Lâ\9d« â\8a¢ U â\9e¡*[h,0] U0 & â\9dªG,Lâ\9d« ⊢ T ➡*[h,1] U0.
+ â\88\80G,L,U,T. â\9d¨G,Lâ\9d© ⊢ ⓝU.T ![h,a] →
+ â\88\83â\88\83U0. â\9d¨G,Lâ\9d© â\8a¢ U ![h,a] & â\9d¨G,Lâ\9d© ⊢ T ![h,a] &
+ â\9d¨G,Lâ\9d© â\8a¢ U â\9e¡*[h,0] U0 & â\9d¨G,Lâ\9d© ⊢ T ➡*[h,1] U0.
/2 width=3 by cnv_inv_cast_aux/ qed-.
(* Basic forward lemmas *****************************************************)
lemma cnv_fwd_flat (h) (a) (I) (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« ⊢ ⓕ[I]V.T ![h,a] →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ V ![h,a] & â\9dªG,Lâ\9d« ⊢ T ![h,a].
+ â\88\80V,T. â\9d¨G,Lâ\9d© ⊢ ⓕ[I]V.T ![h,a] →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ V ![h,a] & â\9d¨G,Lâ\9d© ⊢ T ![h,a].
#h #a * #G #L #V #T #H
[ elim (cnv_inv_appl … H) #n #p #W #U #_ #HV #HT #_ #_
| elim (cnv_inv_cast … H) #U #HV #HT #_ #_
qed-.
lemma cnv_fwd_pair_sn (h) (a) (I) (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« â\8a¢ â\91¡[I]V.T ![h,a] â\86\92 â\9dªG,Lâ\9d« ⊢ V ![h,a].
+ â\88\80V,T. â\9d¨G,Lâ\9d© â\8a¢ â\91¡[I]V.T ![h,a] â\86\92 â\9d¨G,Lâ\9d© ⊢ V ![h,a].
#h #a * [ #p ] #I #G #L #V #T #H
[ elim (cnv_inv_bind … H) -H #HV #_
| elim (cnv_fwd_flat … H) -H #HV #_
(* Basic_2A1: uses: snv_fwd_aaa *)
lemma cnv_fwd_aaa (h) (a):
- â\88\80G,L,T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\88\83A. â\9dªG,Lâ\9d« ⊢ T ⁝ A.
+ â\88\80G,L,T. â\9d¨G,Lâ\9d© â\8a¢ T ![h,a] â\86\92 â\88\83A. â\9d¨G,Lâ\9d© ⊢ T ⁝ A.
#h #a #G #L #T #H elim H -G -L -T
[ /2 width=2 by aaa_sort, ex_intro/
| #I #G #L #V #_ * /3 width=2 by aaa_zero, ex_intro/
(* Forward lemmas with t_bound rt_transition for terms **********************)
lemma cnv_fwd_cpm_SO (h) (a) (G) (L):
- â\88\80T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\88\83U. â\9dªG,Lâ\9d« ⊢ T ➡[h,1] U.
+ â\88\80T. â\9d¨G,Lâ\9d© â\8a¢ T ![h,a] â\86\92 â\88\83U. â\9d¨G,Lâ\9d© ⊢ T ➡[h,1] U.
#h #a #G #L #T #H
elim (cnv_fwd_aaa … H) -H #A #HA
/2 width=2 by aaa_cpm_SO/
(* Forward lemmas with t_bound rt_computation for terms *********************)
lemma cnv_fwd_cpms_total (h) (a) (n) (G) (L):
- â\88\80T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\88\83U. â\9dªG,Lâ\9d« ⊢ T ➡*[h,n] U.
+ â\88\80T. â\9d¨G,Lâ\9d© â\8a¢ T ![h,a] â\86\92 â\88\83U. â\9d¨G,Lâ\9d© ⊢ T ➡*[h,n] U.
#h #a #n #G #L #T #H
elim (cnv_fwd_aaa … H) -H #A #HA
/2 width=2 by cpms_total_aaa/
qed-.
lemma cnv_fwd_cpms_abst_dx_le (h) (a) (G) (L) (W) (p):
- â\88\80T. â\9dªG,Lâ\9d« ⊢ T ![h,a] →
- â\88\80n1,U1. â\9dªG,Lâ\9d« ⊢ T ➡*[h,n1] ⓛ[p]W.U1 → ∀n2. n1 ≤ n2 →
- â\88\83â\88\83U2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n2] â\93\9b[p]W.U2 & â\9dªG,L.â\93\9bWâ\9d« ⊢ U1 ➡*[h,n2-n1] U2.
+ â\88\80T. â\9d¨G,Lâ\9d© ⊢ T ![h,a] →
+ â\88\80n1,U1. â\9d¨G,Lâ\9d© ⊢ T ➡*[h,n1] ⓛ[p]W.U1 → ∀n2. n1 ≤ n2 →
+ â\88\83â\88\83U2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,n2] â\93\9b[p]W.U2 & â\9d¨G,L.â\93\9bWâ\9d© ⊢ U1 ➡*[h,n2-n1] U2.
#h #a #G #L #W #p #T #H
elim (cnv_fwd_aaa … H) -H #A #HA
/2 width=2 by cpms_abst_dx_le_aaa/
lemma cnv_appl_ge (h) (a) (n1) (p) (G) (L):
∀n2. n1 ≤ n2 → ad a n2 →
- â\88\80V. â\9dªG,Lâ\9d« â\8a¢ V ![h,a] â\86\92 â\88\80T. â\9dªG,Lâ\9d« ⊢ T ![h,a] →
- â\88\80X. â\9dªG,Lâ\9d« â\8a¢ V â\9e¡*[h,1] X â\86\92 â\88\80W. â\9dªG,Lâ\9d« ⊢ W ➡*[h,0] X →
- â\88\80U. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n1] â\93\9b[p]W.U â\86\92 â\9dªG,Lâ\9d« ⊢ ⓐV.T ![h,a].
+ â\88\80V. â\9d¨G,Lâ\9d© â\8a¢ V ![h,a] â\86\92 â\88\80T. â\9d¨G,Lâ\9d© ⊢ T ![h,a] →
+ â\88\80X. â\9d¨G,Lâ\9d© â\8a¢ V â\9e¡*[h,1] X â\86\92 â\88\80W. â\9d¨G,Lâ\9d© ⊢ W ➡*[h,0] X →
+ â\88\80U. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,n1] â\93\9b[p]W.U â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓐV.T ![h,a].
#h #a #n1 #p #G #L #n2 #Hn12 #Ha #V #HV #T #HT #X #HVX #W #HW #X #HTX
elim (cnv_fwd_cpms_abst_dx_le … HT … HTX … Hn12) #U #HTU #_ -n1
/4 width=11 by cnv_appl, cpms_bind, cpms_cprs_trans/
(* Properties with preorder for applicability domains ***********************)
lemma cnv_acle_trans (h) (a1) (a2):
- a1 â\8a\86 a2 â\86\92 â\88\80G,L,T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a1] â\86\92 â\9dªG,Lâ\9d« ⊢ T ![h,a2].
+ a1 â\8a\86 a2 â\86\92 â\88\80G,L,T. â\9d¨G,Lâ\9d© â\8a¢ T ![h,a1] â\86\92 â\9d¨G,Lâ\9d© ⊢ T ![h,a2].
#h #a1 #a2 #Ha12 #G #L #T #H elim H -G -L -T
[ /1 width=1 by cnv_sort/
| /3 width=1 by cnv_zero/
qed-.
lemma cnv_acle_omega (h) (a):
- â\88\80G,L,T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\9dªG,Lâ\9d« ⊢ T ![h,𝛚].
+ â\88\80G,L,T. â\9d¨G,Lâ\9d© â\8a¢ T ![h,a] â\86\92 â\9d¨G,Lâ\9d© ⊢ T ![h,𝛚].
/3 width=3 by cnv_acle_trans, acle_omega/ qed-.
lemma cnv_acle_one (h) (a) (n):
- â\88\80G,L,T. â\9dªG,Lâ\9d« â\8a¢ T ![h,ð\9d\9f\8f] â\86\92 ad a n â\86\92 â\9dªG,Lâ\9d« ⊢ T ![h,a].
+ â\88\80G,L,T. â\9d¨G,Lâ\9d© â\8a¢ T ![h,ð\9d\9f\8f] â\86\92 ad a n â\86\92 â\9d¨G,Lâ\9d© ⊢ T ![h,a].
/3 width=3 by cnv_acle_trans, acle_one/ qed-.
(* Properties with r-equivalence ********************************************)
lemma cnv_cpcs_dec (h) (a) (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T2 ![h,a] →
- Decidable â\80¦ (â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2).
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T2 ![h,a] →
+ Decidable â\80¦ (â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2).
#h #a #G #L #T1 #HT1 #T2 #HT2
elim (cnv_fwd_aaa … HT1) -HT1 #A1 #HA1
elim (cnv_fwd_aaa … HT2) -HT2 #A2 #HA2
lemma cnv_appl_cpes (h) (a) (G) (L):
∀n. ad a n →
- â\88\80V. â\9dªG,Lâ\9d« â\8a¢ V ![h,a] â\86\92 â\88\80T. â\9dªG,Lâ\9d« ⊢ T ![h,a] →
- â\88\80W. â\9dªG,Lâ\9d« ⊢ V ⬌*[h,1,0] W →
- â\88\80p,U. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n] â\93\9b[p]W.U â\86\92 â\9dªG,Lâ\9d« ⊢ ⓐV.T ![h,a].
+ â\88\80V. â\9d¨G,Lâ\9d© â\8a¢ V ![h,a] â\86\92 â\88\80T. â\9d¨G,Lâ\9d© ⊢ T ![h,a] →
+ â\88\80W. â\9d¨G,Lâ\9d© ⊢ V ⬌*[h,1,0] W →
+ â\88\80p,U. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,n] â\93\9b[p]W.U â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓐV.T ![h,a].
#h #a #G #L #n #Hn #V #HV #T #HT #W *
/4 width=11 by cnv_appl, cpms_cprs_trans, cpms_bind/
qed.
lemma cnv_cast_cpes (h) (a) (G) (L):
- â\88\80U. â\9dªG,Lâ\9d« ⊢ U ![h,a] →
- â\88\80T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\9dªG,Lâ\9d« â\8a¢ U â¬\8c*[h,0,1] T â\86\92 â\9dªG,Lâ\9d« ⊢ ⓝU.T ![h,a].
+ â\88\80U. â\9d¨G,Lâ\9d© ⊢ U ![h,a] →
+ â\88\80T. â\9d¨G,Lâ\9d© â\8a¢ T ![h,a] â\86\92 â\9d¨G,Lâ\9d© â\8a¢ U â¬\8c*[h,0,1] T â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓝU.T ![h,a].
#h #a #G #L #U #HU #T #HT * /2 width=3 by cnv_cast/
qed.
(* Inversion lemmas with t-bound rt-equivalence for terms *******************)
lemma cnv_inv_appl_cpes (h) (a) (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« ⊢ ⓐV.T ![h,a] →
- â\88\83â\88\83n,p,W,U. ad a n & â\9dªG,Lâ\9d« â\8a¢ V ![h,a] & â\9dªG,Lâ\9d« ⊢ T ![h,a] &
- â\9dªG,Lâ\9d« â\8a¢ V â¬\8c*[h,1,0] W & â\9dªG,Lâ\9d« ⊢ T ➡*[h,n] ⓛ[p]W.U.
+ â\88\80V,T. â\9d¨G,Lâ\9d© ⊢ ⓐV.T ![h,a] →
+ â\88\83â\88\83n,p,W,U. ad a n & â\9d¨G,Lâ\9d© â\8a¢ V ![h,a] & â\9d¨G,Lâ\9d© ⊢ T ![h,a] &
+ â\9d¨G,Lâ\9d© â\8a¢ V â¬\8c*[h,1,0] W & â\9d¨G,Lâ\9d© ⊢ T ➡*[h,n] ⓛ[p]W.U.
#h #a #G #L #V #T #H
elim (cnv_inv_appl … H) -H #n #p #W #U #Hn #HV #HT #HVW #HTU
/3 width=7 by cpms_div, ex5_4_intro/
qed-.
lemma cnv_inv_cast_cpes (h) (a) (G) (L):
- â\88\80U,T. â\9dªG,Lâ\9d« ⊢ ⓝU.T ![h,a] →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ U ![h,a] & â\9dªG,Lâ\9d« â\8a¢ T ![h,a] & â\9dªG,Lâ\9d« ⊢ U ⬌*[h,0,1] T.
+ â\88\80U,T. â\9d¨G,Lâ\9d© ⊢ ⓝU.T ![h,a] →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ U ![h,a] & â\9d¨G,Lâ\9d© â\8a¢ T ![h,a] & â\9d¨G,Lâ\9d© ⊢ U ⬌*[h,0,1] T.
#h #a #G #L #U #T #H
elim (cnv_inv_cast … H) -H
/3 width=3 by cpms_div, and3_intro/
lemma cnv_ind_cpes (h) (a) (Q:relation3 genv lenv term):
(∀G,L,s. Q G L (⋆s)) →
- (â\88\80I,G,K,V. â\9dªG,Kâ\9d« ⊢ V![h,a] → Q G K V → Q G (K.ⓑ[I]V) (#O)) →
- (â\88\80I,G,K,i. â\9dªG,Kâ\9d« ⊢ #i![h,a] → Q G K (#i) → Q G (K.ⓘ[I]) (#(↑i))) →
- (â\88\80p,I,G,L,V,T. â\9dªG,Lâ\9d« â\8a¢ V![h,a] â\86\92 â\9dªG,L.â\93\91[I]Vâ\9d«⊢T![h,a] →
+ (â\88\80I,G,K,V. â\9d¨G,Kâ\9d© ⊢ V![h,a] → Q G K V → Q G (K.ⓑ[I]V) (#O)) →
+ (â\88\80I,G,K,i. â\9d¨G,Kâ\9d© ⊢ #i![h,a] → Q G K (#i) → Q G (K.ⓘ[I]) (#(↑i))) →
+ (â\88\80p,I,G,L,V,T. â\9d¨G,Lâ\9d© â\8a¢ V![h,a] â\86\92 â\9d¨G,L.â\93\91[I]Vâ\9d©⊢T![h,a] →
Q G L V →Q G (L.ⓑ[I]V) T →Q G L (ⓑ[p,I]V.T)
) →
- (â\88\80n,p,G,L,V,W,T,U. ad a n â\86\92 â\9dªG,Lâ\9d« â\8a¢ V![h,a] â\86\92 â\9dªG,Lâ\9d« ⊢ T![h,a] →
- â\9dªG,Lâ\9d« â\8a¢ V â¬\8c*[h,1,0]W â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡*[h,n] ⓛ[p]W.U →
+ (â\88\80n,p,G,L,V,W,T,U. ad a n â\86\92 â\9d¨G,Lâ\9d© â\8a¢ V![h,a] â\86\92 â\9d¨G,Lâ\9d© ⊢ T![h,a] →
+ â\9d¨G,Lâ\9d© â\8a¢ V â¬\8c*[h,1,0]W â\86\92 â\9d¨G,Lâ\9d© ⊢ T ➡*[h,n] ⓛ[p]W.U →
Q G L V → Q G L T → Q G L (ⓐV.T)
) →
- (â\88\80G,L,U,T. â\9dªG,Lâ\9d«â\8a¢ U![h,a] â\86\92 â\9dªG,Lâ\9d« â\8a¢ T![h,a] â\86\92 â\9dªG,Lâ\9d« ⊢ U ⬌*[h,0,1] T →
+ (â\88\80G,L,U,T. â\9d¨G,Lâ\9d©â\8a¢ U![h,a] â\86\92 â\9d¨G,Lâ\9d© â\8a¢ T![h,a] â\86\92 â\9d¨G,Lâ\9d© ⊢ U ⬌*[h,0,1] T →
Q G L U → Q G L T → Q G L (ⓝU.T)
) →
- â\88\80G,L,T. â\9dªG,Lâ\9d«⊢ T![h,a] → Q G L T.
+ â\88\80G,L,T. â\9d¨G,Lâ\9d©⊢ T![h,a] → Q G L T.
#h #a #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #G #L #T #H
elim H -G -L -T [5,6: /3 width=7 by cpms_div/ |*: /2 width=1 by/ ]
qed-.
(* Sub diamond propery with t-bound rt-transition for terms *****************)
fact cnv_cpm_conf_lpr_atom_atom_aux (h) (G) (L1) (L2) (I):
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93ª[I] â\9e¡*[h,0] T & â\9dªG,L2â\9d« ⊢ ⓪[I] ➡*[h,0] T.
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ â\93ª[I] â\9e¡*[h,0] T & â\9d¨G,L2â\9d© ⊢ ⓪[I] ➡*[h,0] T.
/2 width=3 by ex2_intro/ qed-.
fact cnv_cpm_conf_lpr_atom_ess_aux (h) (G) (L1) (L2) (s):
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\8b\86s â\9e¡*[h,1] T & â\9dªG,L2â\9d« ⊢ ⋆(⫯[h]s) ➡*[h,0] T.
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ â\8b\86s â\9e¡*[h,1] T & â\9d¨G,L2â\9d© ⊢ ⋆(⫯[h]s) ➡*[h,0] T.
/3 width=3 by cpm_cpms, ex2_intro/ qed-.
fact cnv_cpm_conf_lpr_atom_delta_aux (h) (a) (G) (L) (i):
- (â\88\80G0,L0,T0. â\9dªG,L,#iâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â\9dªG,Lâ\9d«⊢#i![h,a] →
+ (â\88\80G0,L0,T0. â\9d¨G,L,#iâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9d¨G,Lâ\9d©⊢#i![h,a] →
∀K,V. ⇩[i]L ≘ K.ⓓV →
- â\88\80n,XV. â\9dªG,Kâ\9d« ⊢ V ➡[h,n] XV →
+ â\88\80n,XV. â\9d¨G,Kâ\9d© ⊢ V ➡[h,n] XV →
∀X. ⇧[↑i]XV ≘ X →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ #i â\9e¡*[h,n] T & â\9dªG,L2â\9d« ⊢ X ➡*[h,0] T.
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ #i â\9e¡*[h,n] T & â\9d¨G,L2â\9d© ⊢ X ➡*[h,0] T.
#h #a #G #L #i #IH #HT #K #V #HLK #n #XV #HVX #X #HXV #L1 #HL1 #L2 #HL2
lapply (cnv_inv_lref_pair … HT … HLK) -HT #HV
elim (lpr_drops_conf … HLK … HL1) -HL1 // #Y1 #H1 #HLK1
qed-.
fact cnv_cpm_conf_lpr_atom_ell_aux (h) (a) (G) (L) (i):
- (â\88\80G0,L0,T0. â\9dªG,L,#iâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â\9dªG,Lâ\9d«⊢#i![h,a] →
+ (â\88\80G0,L0,T0. â\9d¨G,L,#iâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9d¨G,Lâ\9d©⊢#i![h,a] →
∀K,W. ⇩[i]L ≘ K.ⓛW →
- â\88\80n,XW. â\9dªG,Kâ\9d« ⊢ W ➡[h,n] XW →
+ â\88\80n,XW. â\9d¨G,Kâ\9d© ⊢ W ➡[h,n] XW →
∀X. ⇧[↑i]XW ≘ X →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ #i â\9e¡*[h,â\86\91n] T & â\9dªG,L2â\9d« ⊢ X ➡*[h,0] T.
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ #i â\9e¡*[h,â\86\91n] T & â\9d¨G,L2â\9d© ⊢ X ➡*[h,0] T.
#h #a #G #L #i #IH #HT #K #W #HLK #n #XW #HWX #X #HXW #L1 #HL1 #L2 #HL2
lapply (cnv_inv_lref_pair … HT … HLK) -HT #HW
elim (lpr_drops_conf … HLK … HL1) -HL1 // #Y1 #H1 #HLK1
qed-.
fact cnv_cpm_conf_lpr_delta_delta_aux (h) (a) (I) (G) (L) (i):
- (â\88\80G0,L0,T0. â\9dªG,L,#iâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â\9dªG,Lâ\9d«⊢#i![h,a] →
+ (â\88\80G0,L0,T0. â\9d¨G,L,#iâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9d¨G,Lâ\9d©⊢#i![h,a] →
∀K1,V1. ⇩[i]L ≘ K1.ⓑ[I]V1 → ∀K2,V2. ⇩[i]L ≘ K2.ⓑ[I]V2 →
- â\88\80n1,XV1. â\9dªG,K1â\9d« â\8a¢ V1 â\9e¡[h,n1] XV1 â\86\92 â\88\80n2,XV2. â\9dªG,K2â\9d« ⊢ V2 ➡[h,n2] XV2 →
+ â\88\80n1,XV1. â\9d¨G,K1â\9d© â\8a¢ V1 â\9e¡[h,n1] XV1 â\86\92 â\88\80n2,XV2. â\9d¨G,K2â\9d© ⊢ V2 ➡[h,n2] XV2 →
∀X1. ⇧[↑i]XV1 ≘ X1 → ∀X2. ⇧[↑i]XV2 ≘ X2 →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ X1 â\9e¡*[h,n2-n1] T & â\9dªG,L2â\9d« ⊢ X2 ➡*[h,n1-n2] T.
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ X1 â\9e¡*[h,n2-n1] T & â\9d¨G,L2â\9d© ⊢ X2 ➡*[h,n1-n2] T.
#h #a #I #G #L #i #IH #HT
#K #V #HLK #Y #X #HLY #n1 #XV1 #HVX1 #n2 #XV2 #HVX2 #X1 #HXV1 #X2 #HXV2
#L1 #HL1 #L2 #HL2
qed-.
fact cnv_cpm_conf_lpr_bind_bind_aux (h) (a) (p) (I) (G) (L) (V) (T):
- (â\88\80G0,L0,T0. â\9dªG,L,â\93\91[p,I]V.Tâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V.T ![h,a] →
- â\88\80V1. â\9dªG,Lâ\9d« â\8a¢ V â\9e¡[h,0] V1 â\86\92 â\88\80V2. â\9dªG,Lâ\9d« ⊢ V ➡[h,0] V2 →
- â\88\80n1,T1. â\9dªG,L.â\93\91[I]Vâ\9d« â\8a¢ T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9dªG,L.â\93\91[I]Vâ\9d« ⊢ T ➡[h,n2] T2 →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\91[p,I]V1.T1 â\9e¡*[h,n2-n1] T & â\9dªG,L2â\9d« ⊢ ⓑ[p,I]V2.T2 ➡*[h,n1-n2] T.
+ (â\88\80G0,L0,T0. â\9d¨G,L,â\93\91[p,I]V.Tâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V.T ![h,a] →
+ â\88\80V1. â\9d¨G,Lâ\9d© â\8a¢ V â\9e¡[h,0] V1 â\86\92 â\88\80V2. â\9d¨G,Lâ\9d© ⊢ V ➡[h,0] V2 →
+ â\88\80n1,T1. â\9d¨G,L.â\93\91[I]Vâ\9d© â\8a¢ T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9d¨G,L.â\93\91[I]Vâ\9d© ⊢ T ➡[h,n2] T2 →
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ â\93\91[p,I]V1.T1 â\9e¡*[h,n2-n1] T & â\9d¨G,L2â\9d© ⊢ ⓑ[p,I]V2.T2 ➡*[h,n1-n2] T.
#h #a #p #I #G0 #L0 #V0 #T0 #IH #H0
#V1 #HV01 #V2 #HV02 #n1 #T1 #HT01 #n2 #T2 #HT02
#L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpm_conf_lpr_bind_zeta_aux (h) (a) (G) (L) (V) (T):
- (â\88\80G0,L0,T0. â\9dªG,L,+â\93\93V.Tâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â\9dªG,Lâ\9d« ⊢ +ⓓV.T ![h,a] →
- â\88\80V1. â\9dªG,Lâ\9d« â\8a¢V â\9e¡[h,0] V1 â\86\92 â\88\80n1,T1. â\9dªG,L.â\93\93Vâ\9d« ⊢ T ➡[h,n1] T1 →
- â\88\80T2. â\87§[1]T2 â\89\98 T â\86\92 â\88\80n2,XT2. â\9dªG,Lâ\9d« ⊢ T2 ➡[h,n2] XT2 →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ +â\93\93V1.T1 â\9e¡*[h,n2-n1] T & â\9dªG,L2â\9d« ⊢ XT2 ➡*[h,n1-n2] T.
+ (â\88\80G0,L0,T0. â\9d¨G,L,+â\93\93V.Tâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9d¨G,Lâ\9d© ⊢ +ⓓV.T ![h,a] →
+ â\88\80V1. â\9d¨G,Lâ\9d© â\8a¢V â\9e¡[h,0] V1 â\86\92 â\88\80n1,T1. â\9d¨G,L.â\93\93Vâ\9d© ⊢ T ➡[h,n1] T1 →
+ â\88\80T2. â\87§[1]T2 â\89\98 T â\86\92 â\88\80n2,XT2. â\9d¨G,Lâ\9d© ⊢ T2 ➡[h,n2] XT2 →
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ +â\93\93V1.T1 â\9e¡*[h,n2-n1] T & â\9d¨G,L2â\9d© ⊢ XT2 ➡*[h,n1-n2] T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#V1 #HV01 #n1 #T1 #HT01 #T2 #HT20 #n2 #XT2 #HXT2
#L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpm_conf_lpr_zeta_zeta_aux (h) (a) (G) (L) (V) (T):
- (â\88\80G0,L0,T0. â\9dªG,L,+â\93\93V.Tâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â\9dªG,Lâ\9d« ⊢ +ⓓV.T ![h,a] →
+ (â\88\80G0,L0,T0. â\9d¨G,L,+â\93\93V.Tâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9d¨G,Lâ\9d© ⊢ +ⓓV.T ![h,a] →
∀T1. ⇧[1]T1 ≘ T → ∀T2. ⇧[1]T2 ≘ T →
- â\88\80n1,XT1. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,n1] XT1 â\86\92 â\88\80n2,XT2. â\9dªG,Lâ\9d« ⊢ T2 ➡[h,n2] XT2 →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ XT1 â\9e¡*[h,n2-n1] T & â\9dªG,L2â\9d« ⊢ XT2 ➡*[h,n1-n2] T.
+ â\88\80n1,XT1. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,n1] XT1 â\86\92 â\88\80n2,XT2. â\9d¨G,Lâ\9d© ⊢ T2 ➡[h,n2] XT2 →
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ XT1 â\9e¡*[h,n2-n1] T & â\9d¨G,L2â\9d© ⊢ XT2 ➡*[h,n1-n2] T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#T1 #HT10 #T2 #HT20 #n1 #XT1 #HXT1 #n2 #XT2 #HXT2
#L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpm_conf_lpr_appl_appl_aux (h) (a) (G) (L) (V) (T):
- (â\88\80G0,L0,T0. â\9dªG,L,â\93\90V.Tâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â\9dªG,Lâ\9d« ⊢ ⓐV.T ![h,a] →
- â\88\80V1. â\9dªG,Lâ\9d« â\8a¢ V â\9e¡[h,0] V1 â\86\92 â\88\80V2. â\9dªG,Lâ\9d« ⊢ V ➡[h,0] V2 →
- â\88\80n1,T1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9dªG,Lâ\9d« ⊢ T ➡[h,n2] T2 →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\90V1.T1 â\9e¡*[h,n2-n1] T & â\9dªG,L2â\9d« ⊢ ⓐV2.T2 ➡*[h,n1-n2] T.
+ (â\88\80G0,L0,T0. â\9d¨G,L,â\93\90V.Tâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9d¨G,Lâ\9d© ⊢ ⓐV.T ![h,a] →
+ â\88\80V1. â\9d¨G,Lâ\9d© â\8a¢ V â\9e¡[h,0] V1 â\86\92 â\88\80V2. â\9d¨G,Lâ\9d© ⊢ V ➡[h,0] V2 →
+ â\88\80n1,T1. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9d¨G,Lâ\9d© ⊢ T ➡[h,n2] T2 →
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ â\93\90V1.T1 â\9e¡*[h,n2-n1] T & â\9d¨G,L2â\9d© ⊢ ⓐV2.T2 ➡*[h,n1-n2] T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#V1 #HV01 #V2 #HV02 #n1 #T1 #HT01 #n2 #T2 #HT02
#L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpm_conf_lpr_appl_beta_aux (h) (a) (p) (G) (L) (V) (W) (T):
- (â\88\80G0,L0,T0. â\9dªG,L,â\93\90V.â\93\9b[p]W.Tâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â\9dªG,Lâ\9d« ⊢ ⓐV.ⓛ[p]W.T ![h,a] →
- â\88\80V1. â\9dªG,Lâ\9d« â\8a¢ V â\9e¡[h,0] V1 â\86\92 â\88\80V2. â\9dªG,Lâ\9d« ⊢ V ➡[h,0] V2 →
- â\88\80W2. â\9dªG,Lâ\9d« ⊢ W ➡[h,0] W2 →
- â\88\80n1,T1. â\9dªG,Lâ\9d« â\8a¢ â\93\9b[p]W.T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9dªG,L.â\93\9bWâ\9d« ⊢ T ➡[h,n2] T2 →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\90V1.T1 â\9e¡*[h,n2-n1] T & â\9dªG,L2â\9d« ⊢ ⓓ[p]ⓝW2.V2.T2 ➡*[h,n1-n2] T.
+ (â\88\80G0,L0,T0. â\9d¨G,L,â\93\90V.â\93\9b[p]W.Tâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9d¨G,Lâ\9d© ⊢ ⓐV.ⓛ[p]W.T ![h,a] →
+ â\88\80V1. â\9d¨G,Lâ\9d© â\8a¢ V â\9e¡[h,0] V1 â\86\92 â\88\80V2. â\9d¨G,Lâ\9d© ⊢ V ➡[h,0] V2 →
+ â\88\80W2. â\9d¨G,Lâ\9d© ⊢ W ➡[h,0] W2 →
+ â\88\80n1,T1. â\9d¨G,Lâ\9d© â\8a¢ â\93\9b[p]W.T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9d¨G,L.â\93\9bWâ\9d© ⊢ T ➡[h,n2] T2 →
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ â\93\90V1.T1 â\9e¡*[h,n2-n1] T & â\9d¨G,L2â\9d© ⊢ ⓓ[p]ⓝW2.V2.T2 ➡*[h,n1-n2] T.
#h #a #p #G0 #L0 #V0 #W0 #T0 #IH #H0
#V1 #HV01 #V2 #HV02 #W2 #HW02 #n1 #X #HX #n2 #T2 #HT02
#L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpm_conf_lpr_appl_theta_aux (h) (a) (p) (G) (L) (V) (W) (T):
- (â\88\80G0,L0,T0. â\9dªG,L,â\93\90V.â\93\93[p]W.Tâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â\9dªG,Lâ\9d« ⊢ ⓐV.ⓓ[p]W.T ![h,a] →
- â\88\80V1. â\9dªG,Lâ\9d« â\8a¢ V â\9e¡[h,0] V1 â\86\92 â\88\80V2. â\9dªG,Lâ\9d« ⊢ V ➡[h,0] V2 →
- â\88\80W2. â\9dªG,Lâ\9d« ⊢ W ➡[h,0] W2 →
- â\88\80n1,T1. â\9dªG,Lâ\9d« â\8a¢ â\93\93[p]W.T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9dªG,L.â\93\93Wâ\9d« ⊢ T ➡[h,n2] T2 →
+ (â\88\80G0,L0,T0. â\9d¨G,L,â\93\90V.â\93\93[p]W.Tâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9d¨G,Lâ\9d© ⊢ ⓐV.ⓓ[p]W.T ![h,a] →
+ â\88\80V1. â\9d¨G,Lâ\9d© â\8a¢ V â\9e¡[h,0] V1 â\86\92 â\88\80V2. â\9d¨G,Lâ\9d© ⊢ V ➡[h,0] V2 →
+ â\88\80W2. â\9d¨G,Lâ\9d© ⊢ W ➡[h,0] W2 →
+ â\88\80n1,T1. â\9d¨G,Lâ\9d© â\8a¢ â\93\93[p]W.T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9d¨G,L.â\93\93Wâ\9d© ⊢ T ➡[h,n2] T2 →
∀U2. ⇧[1]V2 ≘ U2 →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\90V1.T1 â\9e¡*[h,n2-n1] T & â\9dªG,L2â\9d« ⊢ ⓓ[p]W2.ⓐU2.T2 ➡*[h,n1-n2] T.
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ â\93\90V1.T1 â\9e¡*[h,n2-n1] T & â\9d¨G,L2â\9d© ⊢ ⓓ[p]W2.ⓐU2.T2 ➡*[h,n1-n2] T.
#h #a #p #G0 #L0 #V0 #W0 #T0 #IH #H0
#V1 #HV01 #V2 #HV02 #W2 #HW02 #n1 #X #HX #n2 #T2 #HT02 #U2 #HVU2
#L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpm_conf_lpr_beta_beta_aux (h) (a) (p) (G) (L) (V) (W) (T):
- (â\88\80G0,L0,T0. â\9dªG,L,â\93\90V.â\93\9b[p]W.Tâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â\9dªG,Lâ\9d« ⊢ ⓐV.ⓛ[p]W.T ![h,a] →
- â\88\80V1. â\9dªG,Lâ\9d« â\8a¢ V â\9e¡[h,0] V1 â\86\92 â\88\80V2. â\9dªG,Lâ\9d« ⊢ V ➡[h,0] V2 →
- â\88\80W1. â\9dªG,Lâ\9d« â\8a¢ W â\9e¡[h,0] W1 â\86\92 â\88\80W2. â\9dªG,Lâ\9d« ⊢ W ➡[h,0] W2 →
- â\88\80n1,T1. â\9dªG,L.â\93\9bWâ\9d« â\8a¢ T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9dªG,L.â\93\9bWâ\9d« ⊢ T ➡[h,n2] T2 →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\93[p]â\93\9dW1.V1.T1 â\9e¡*[h,n2-n1] T & â\9dªG,L2â\9d« ⊢ ⓓ[p]ⓝW2.V2.T2 ➡*[h,n1-n2] T.
+ (â\88\80G0,L0,T0. â\9d¨G,L,â\93\90V.â\93\9b[p]W.Tâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9d¨G,Lâ\9d© ⊢ ⓐV.ⓛ[p]W.T ![h,a] →
+ â\88\80V1. â\9d¨G,Lâ\9d© â\8a¢ V â\9e¡[h,0] V1 â\86\92 â\88\80V2. â\9d¨G,Lâ\9d© ⊢ V ➡[h,0] V2 →
+ â\88\80W1. â\9d¨G,Lâ\9d© â\8a¢ W â\9e¡[h,0] W1 â\86\92 â\88\80W2. â\9d¨G,Lâ\9d© ⊢ W ➡[h,0] W2 →
+ â\88\80n1,T1. â\9d¨G,L.â\93\9bWâ\9d© â\8a¢ T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9d¨G,L.â\93\9bWâ\9d© ⊢ T ➡[h,n2] T2 →
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ â\93\93[p]â\93\9dW1.V1.T1 â\9e¡*[h,n2-n1] T & â\9d¨G,L2â\9d© ⊢ ⓓ[p]ⓝW2.V2.T2 ➡*[h,n1-n2] T.
#h #a #p #G0 #L0 #V0 #W0 #T0 #IH #H0
#V1 #HV01 #V2 #HV02 #W1 #HW01 #W2 #HW02 #n1 #T1 #HT01 #n2 #T2 #HT02
#L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpm_conf_lpr_theta_theta_aux (h) (a) (p) (G) (L) (V) (W) (T):
- (â\88\80G0,L0,T0. â\9dªG,L,â\93\90V.â\93\93[p]W.Tâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â\9dªG,Lâ\9d« ⊢ ⓐV.ⓓ[p]W.T ![h,a] →
- â\88\80V1. â\9dªG,Lâ\9d« â\8a¢ V â\9e¡[h,0] V1 â\86\92 â\88\80V2. â\9dªG,Lâ\9d« ⊢ V ➡[h,0] V2 →
- â\88\80W1. â\9dªG,Lâ\9d« â\8a¢ W â\9e¡[h,0] W1 â\86\92 â\88\80W2. â\9dªG,Lâ\9d« ⊢ W ➡[h,0] W2 →
- â\88\80n1,T1. â\9dªG,L.â\93\93Wâ\9d« â\8a¢ T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9dªG,L.â\93\93Wâ\9d« ⊢ T ➡[h,n2] T2 →
+ (â\88\80G0,L0,T0. â\9d¨G,L,â\93\90V.â\93\93[p]W.Tâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9d¨G,Lâ\9d© ⊢ ⓐV.ⓓ[p]W.T ![h,a] →
+ â\88\80V1. â\9d¨G,Lâ\9d© â\8a¢ V â\9e¡[h,0] V1 â\86\92 â\88\80V2. â\9d¨G,Lâ\9d© ⊢ V ➡[h,0] V2 →
+ â\88\80W1. â\9d¨G,Lâ\9d© â\8a¢ W â\9e¡[h,0] W1 â\86\92 â\88\80W2. â\9d¨G,Lâ\9d© ⊢ W ➡[h,0] W2 →
+ â\88\80n1,T1. â\9d¨G,L.â\93\93Wâ\9d© â\8a¢ T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9d¨G,L.â\93\93Wâ\9d© ⊢ T ➡[h,n2] T2 →
∀U1. ⇧[1]V1 ≘ U1 → ∀U2. ⇧[1]V2 ≘ U2 →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\93[p]W1.â\93\90U1.T1 â\9e¡*[h,n2-n1] T & â\9dªG,L2â\9d« ⊢ ⓓ[p]W2.ⓐU2.T2 ➡*[h,n1-n2] T.
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ â\93\93[p]W1.â\93\90U1.T1 â\9e¡*[h,n2-n1] T & â\9d¨G,L2â\9d© ⊢ ⓓ[p]W2.ⓐU2.T2 ➡*[h,n1-n2] T.
#h #a #p #G0 #L0 #V0 #W0 #T0 #IH #H0
#V1 #HV01 #V2 #HV02 #W1 #HW01 #W2 #HW02 #n1 #T1 #HT01 #n2 #T2 #HT02 #U1 #HVU1 #U2 #HVU2
#L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpm_conf_lpr_cast_cast_aux (h) (a) (G) (L) (V) (T):
- (â\88\80G0,L0,T0. â\9dªG,L,â\93\9dV.Tâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â\9dªG,Lâ\9d« ⊢ ⓝV.T ![h,a] →
- â\88\80n1,V1. â\9dªG,Lâ\9d« â\8a¢ V â\9e¡[h,n1] V1 â\86\92 â\88\80n2,V2. â\9dªG,Lâ\9d« ⊢ V ➡[h,n2] V2 →
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[h,n1] T1 â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T ➡[h,n2] T2 →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\9dV1.T1 â\9e¡*[h,n2-n1] T & â\9dªG,L2â\9d« ⊢ ⓝV2.T2 ➡*[h,n1-n2] T.
+ (â\88\80G0,L0,T0. â\9d¨G,L,â\93\9dV.Tâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9d¨G,Lâ\9d© ⊢ ⓝV.T ![h,a] →
+ â\88\80n1,V1. â\9d¨G,Lâ\9d© â\8a¢ V â\9e¡[h,n1] V1 â\86\92 â\88\80n2,V2. â\9d¨G,Lâ\9d© ⊢ V ➡[h,n2] V2 →
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡[h,n1] T1 â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T ➡[h,n2] T2 →
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ â\93\9dV1.T1 â\9e¡*[h,n2-n1] T & â\9d¨G,L2â\9d© ⊢ ⓝV2.T2 ➡*[h,n1-n2] T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#n1 #V1 #HV01 #n2 #V2 #HV02 #T1 #HT01 #T2 #HT02
#L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpm_conf_lpr_cast_epsilon_aux (h) (a) (G) (L) (V) (T):
- (â\88\80G0,L0,T0. â\9dªG,L,â\93\9dV.Tâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â\9dªG,Lâ\9d« ⊢ ⓝV.T ![h,a] →
- â\88\80n1,V1. â\9dªG,Lâ\9d« ⊢ V ➡[h,n1] V1 →
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9dªG,Lâ\9d« ⊢ T ➡[h,n2] T2 →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\9dV1.T1 â\9e¡*[h,n2-n1] T & â\9dªG,L2â\9d« ⊢ T2 ➡*[h,n1-n2] T.
+ (â\88\80G0,L0,T0. â\9d¨G,L,â\93\9dV.Tâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9d¨G,Lâ\9d© ⊢ ⓝV.T ![h,a] →
+ â\88\80n1,V1. â\9d¨G,Lâ\9d© ⊢ V ➡[h,n1] V1 →
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9d¨G,Lâ\9d© ⊢ T ➡[h,n2] T2 →
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ â\93\9dV1.T1 â\9e¡*[h,n2-n1] T & â\9d¨G,L2â\9d© ⊢ T2 ➡*[h,n1-n2] T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#n1 #V1 #HV01 #T1 #HT01 #n2 #T2 #HT02
#L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpm_conf_lpr_cast_ee_aux (h) (a) (G) (L) (V) (T):
- (â\88\80G0,L0,T0. â\9dªG,L,â\93\9dV.Tâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpm_trans_lpr h a G0 L0 T0) →
- (â\88\80G0,L0,T0. â\9dªG,L,â\93\9dV.Tâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â\9dªG,Lâ\9d« ⊢ ⓝV.T ![h,a] →
- â\88\80n1,V1. â\9dªG,Lâ\9d« â\8a¢ V â\9e¡[h,n1] V1 â\86\92 â\88\80n2,V2. â\9dªG,Lâ\9d« ⊢ V ➡[h,n2] V2 →
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ T ➡[h,n1] T1 →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\9dV1.T1 â\9e¡*[h,â\86\91n2-n1] T & â\9dªG,L2â\9d« ⊢ V2 ➡*[h,n1-↑n2] T.
+ (â\88\80G0,L0,T0. â\9d¨G,L,â\93\9dV.Tâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpm_trans_lpr h a G0 L0 T0) →
+ (â\88\80G0,L0,T0. â\9d¨G,L,â\93\9dV.Tâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9d¨G,Lâ\9d© ⊢ ⓝV.T ![h,a] →
+ â\88\80n1,V1. â\9d¨G,Lâ\9d© â\8a¢ V â\9e¡[h,n1] V1 â\86\92 â\88\80n2,V2. â\9d¨G,Lâ\9d© ⊢ V ➡[h,n2] V2 →
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T ➡[h,n1] T1 →
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ â\93\9dV1.T1 â\9e¡*[h,â\86\91n2-n1] T & â\9d¨G,L2â\9d© ⊢ V2 ➡*[h,n1-↑n2] T.
#h #a #G0 #L0 #V0 #T0 #IH2 #IH1 #H0
#n1 #V1 #HV01 #n2 #V2 #HV02 #T1 #HT01
#L1 #HL01 #L2 #HL02 -HV01
qed-.
fact cnv_cpm_conf_lpr_epsilon_epsilon_aux (h) (a) (G) (L) (V) (T):
- (â\88\80G0,L0,T0. â\9dªG,L,â\93\9dV.Tâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â\9dªG,Lâ\9d« ⊢ ⓝV.T ![h,a] →
- â\88\80n1,T1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9dªG,Lâ\9d« ⊢ T ➡[h,n2] T2 →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[h,n2-n1] T & â\9dªG,L2â\9d« ⊢ T2 ➡*[h,n1-n2] T.
+ (â\88\80G0,L0,T0. â\9d¨G,L,â\93\9dV.Tâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9d¨G,Lâ\9d© ⊢ ⓝV.T ![h,a] →
+ â\88\80n1,T1. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9d¨G,Lâ\9d© ⊢ T ➡[h,n2] T2 →
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ T1 â\9e¡*[h,n2-n1] T & â\9d¨G,L2â\9d© ⊢ T2 ➡*[h,n1-n2] T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#n1 #T1 #HT01 #n2 #T2 #HT02
#L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpm_conf_lpr_epsilon_ee_aux (h) (a) (G) (L) (V) (T):
- (â\88\80G0,L0,T0. â\9dªG,L,â\93\9dV.Tâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpm_trans_lpr h a G0 L0 T0) →
- (â\88\80G0,L0,T0. â\9dªG,L,â\93\9dV.Tâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â\9dªG,Lâ\9d« ⊢ ⓝV.T ![h,a] →
- â\88\80n1,T1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,V2. â\9dªG,Lâ\9d« ⊢ V ➡[h,n2] V2 →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[h,â\86\91n2-n1] T & â\9dªG,L2â\9d« ⊢ V2 ➡*[h,n1-↑n2] T.
+ (â\88\80G0,L0,T0. â\9d¨G,L,â\93\9dV.Tâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpm_trans_lpr h a G0 L0 T0) →
+ (â\88\80G0,L0,T0. â\9d¨G,L,â\93\9dV.Tâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9d¨G,Lâ\9d© ⊢ ⓝV.T ![h,a] →
+ â\88\80n1,T1. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡[h,n1] T1 â\86\92 â\88\80n2,V2. â\9d¨G,Lâ\9d© ⊢ V ➡[h,n2] V2 →
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ T1 â\9e¡*[h,â\86\91n2-n1] T & â\9d¨G,L2â\9d© ⊢ V2 ➡*[h,n1-↑n2] T.
#h #a #G0 #L0 #V0 #T0 #IH2 #IH1 #H0
#n1 #T1 #HT01 #n2 #V2 #HV02
#L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpm_conf_lpr_ee_ee_aux (h) (a) (G) (L) (V) (T):
- (â\88\80G0,L0,T0. â\9dªG,L,â\93\9dV.Tâ\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â\9dªG,Lâ\9d« ⊢ ⓝV.T ![h,a] →
- â\88\80n1,V1. â\9dªG,Lâ\9d« â\8a¢ V â\9e¡[h,n1] V1 â\86\92 â\88\80n2,V2. â\9dªG,Lâ\9d« ⊢ V ➡[h,n2] V2 →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ V1 â\9e¡*[h,n2-n1] T & â\9dªG,L2â\9d« ⊢ V2 ➡*[h,n1-n2] T.
+ (â\88\80G0,L0,T0. â\9d¨G,L,â\93\9dV.Tâ\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9d¨G,Lâ\9d© ⊢ ⓝV.T ![h,a] →
+ â\88\80n1,V1. â\9d¨G,Lâ\9d© â\8a¢ V â\9e¡[h,n1] V1 â\86\92 â\88\80n2,V2. â\9d¨G,Lâ\9d© ⊢ V ➡[h,n2] V2 →
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ V1 â\9e¡*[h,n2-n1] T & â\9d¨G,L2â\9d© ⊢ V2 ➡*[h,n1-n2] T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#n1 #V1 #HV01 #n2 #V2 #HV02
#L1 #HL01 #L2 #HL02
fact cnv_cpm_conf_lpr_aux (h) (a):
∀G0,L0,T0.
- (â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« > â\9dªG1,L1,T1â\9d« → IH_cnv_cpm_trans_lpr h a G1 L1 T1) →
- (â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« > â\9dªG1,L1,T1â\9d« → IH_cnv_cpms_conf_lpr h a G1 L1 T1) →
+ (â\88\80G1,L1,T1. â\9d¨G0,L0,T0â\9d© > â\9d¨G1,L1,T1â\9d© → IH_cnv_cpm_trans_lpr h a G1 L1 T1) →
+ (â\88\80G1,L1,T1. â\9d¨G0,L0,T0â\9d© > â\9d¨G1,L1,T1â\9d© → IH_cnv_cpms_conf_lpr h a G1 L1 T1) →
∀G1,L1,T1. G0 = G1 → L0 = L1 → T0 = T1 → IH_cnv_cpm_conf_lpr h a G1 L1 T1.
#h #a #G0 #L0 #T0 #IH2 #IH1 #G #L * [| * [| * ]]
[ #I #HG0 #HL0 #HT0 #HT #n1 #X1 #HX1 #n2 #X2 #HX2 #L1 #HL1 #L2 #HL2 destruct
(* Inversion lemmas with restricted rt-transition for terms *****************)
lemma cnv_cpr_teqx_fwd_refl (h) (a) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,0] T2 â\86\92 T1 â\89\85 T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ![h,a] → T1 = T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,0] T2 â\86\92 T1 â\89\85 T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ![h,a] → T1 = T2.
#h #a #G #L #T1 #T2 #H @(cpr_ind … H) -G -L -T1 -T2
[ //
| #G #K #V1 #V2 #X2 #_ #_ #_ #H1 #_ -a -G -K -V1 -V2
qed-.
lemma cpm_teqx_inv_bind_sn (h) (a) (n) (p) (I) (G) (L):
- â\88\80V,T1. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V.T1 ![h,a] →
- â\88\80X. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V.T1 ➡[h,n] X → ⓑ[p,I]V.T1 ≅ X →
- â\88\83â\88\83T2. â\9dªG,Lâ\9d« â\8a¢ V ![h,a] & â\9dªG,L.â\93\91[I]Vâ\9d« â\8a¢ T1 ![h,a] & â\9dªG,L.â\93\91[I]Vâ\9d« ⊢ T1 ➡[h,n] T2 & T1 ≅ T2 & X = ⓑ[p,I]V.T2.
+ â\88\80V,T1. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V.T1 ![h,a] →
+ â\88\80X. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V.T1 ➡[h,n] X → ⓑ[p,I]V.T1 ≅ X →
+ â\88\83â\88\83T2. â\9d¨G,Lâ\9d© â\8a¢ V ![h,a] & â\9d¨G,L.â\93\91[I]Vâ\9d© â\8a¢ T1 ![h,a] & â\9d¨G,L.â\93\91[I]Vâ\9d© ⊢ T1 ➡[h,n] T2 & T1 ≅ T2 & X = ⓑ[p,I]V.T2.
#h #a #n #p #I #G #L #V #T1 #H0 #X #H1 #H2
elim (cpm_inv_bind1 … H1) -H1 *
[ #XV #T2 #HXV #HT12 #H destruct
qed-.
lemma cpm_teqx_inv_appl_sn (h) (a) (n) (G) (L):
- â\88\80V,T1. â\9dªG,Lâ\9d« ⊢ ⓐV.T1 ![h,a] →
- â\88\80X. â\9dªG,Lâ\9d« ⊢ ⓐV.T1 ➡[h,n] X → ⓐV.T1 ≅ X →
- â\88\83â\88\83m,q,W,U1,T2. ad a m & â\9dªG,Lâ\9d« â\8a¢ V ![h,a] & â\9dªG,Lâ\9d« â\8a¢ V â\9e¡*[h,1] W & â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,m] ⓛ[q]W.U1
- & â\9dªG,Lâ\9d«â\8a¢ T1 ![h,a] & â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n] T2 & T1 ≅ T2 & X = ⓐV.T2.
+ â\88\80V,T1. â\9d¨G,Lâ\9d© ⊢ ⓐV.T1 ![h,a] →
+ â\88\80X. â\9d¨G,Lâ\9d© ⊢ ⓐV.T1 ➡[h,n] X → ⓐV.T1 ≅ X →
+ â\88\83â\88\83m,q,W,U1,T2. ad a m & â\9d¨G,Lâ\9d© â\8a¢ V ![h,a] & â\9d¨G,Lâ\9d© â\8a¢ V â\9e¡*[h,1] W & â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,m] ⓛ[q]W.U1
+ & â\9d¨G,Lâ\9d©â\8a¢ T1 ![h,a] & â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n] T2 & T1 ≅ T2 & X = ⓐV.T2.
#h #a #n #G #L #V #T1 #H0 #X #H1 #H2
elim (cpm_inv_appl1 … H1) -H1 *
[ #XV #T2 #HXV #HT12 #H destruct
qed-.
lemma cpm_teqx_inv_cast_sn (h) (a) (n) (G) (L):
- â\88\80U1,T1. â\9dªG,Lâ\9d« ⊢ ⓝU1.T1 ![h,a] →
- â\88\80X. â\9dªG,Lâ\9d« ⊢ ⓝU1.T1 ➡[h,n] X → ⓝU1.T1 ≅ X →
- â\88\83â\88\83U0,U2,T2. â\9dªG,Lâ\9d« â\8a¢ U1 â\9e¡*[h,0] U0 & â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,1] U0
- & â\9dªG,Lâ\9d« â\8a¢ U1 ![h,a] & â\9dªG,Lâ\9d« ⊢ U1 ➡[h,n] U2 & U1 ≅ U2
- & â\9dªG,Lâ\9d« â\8a¢ T1 ![h,a] & â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n] T2 & T1 ≅ T2 & X = ⓝU2.T2.
+ â\88\80U1,T1. â\9d¨G,Lâ\9d© ⊢ ⓝU1.T1 ![h,a] →
+ â\88\80X. â\9d¨G,Lâ\9d© ⊢ ⓝU1.T1 ➡[h,n] X → ⓝU1.T1 ≅ X →
+ â\88\83â\88\83U0,U2,T2. â\9d¨G,Lâ\9d© â\8a¢ U1 â\9e¡*[h,0] U0 & â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,1] U0
+ & â\9d¨G,Lâ\9d© â\8a¢ U1 ![h,a] & â\9d¨G,Lâ\9d© ⊢ U1 ➡[h,n] U2 & U1 ≅ U2
+ & â\9d¨G,Lâ\9d© â\8a¢ T1 ![h,a] & â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n] T2 & T1 ≅ T2 & X = ⓝU2.T2.
#h #a #n #G #L #U1 #T1 #H0 #X #H1 #H2
elim (cpm_inv_cast1 … H1) -H1 [ * || * ]
[ #U2 #T2 #HU12 #HT12 #H destruct
qed-.
lemma cpm_teqx_inv_bind_dx (h) (a) (n) (p) (I) (G) (L):
- â\88\80X. â\9dªG,Lâ\9d« ⊢ X ![h,a] →
- â\88\80V,T2. â\9dªG,Lâ\9d« ⊢ X ➡[h,n] ⓑ[p,I]V.T2 → X ≅ ⓑ[p,I]V.T2 →
- â\88\83â\88\83T1. â\9dªG,Lâ\9d« â\8a¢ V ![h,a] & â\9dªG,L.â\93\91[I]Vâ\9d« â\8a¢ T1 ![h,a] & â\9dªG,L.â\93\91[I]Vâ\9d« ⊢ T1 ➡[h,n] T2 & T1 ≅ T2 & X = ⓑ[p,I]V.T1.
+ â\88\80X. â\9d¨G,Lâ\9d© ⊢ X ![h,a] →
+ â\88\80V,T2. â\9d¨G,Lâ\9d© ⊢ X ➡[h,n] ⓑ[p,I]V.T2 → X ≅ ⓑ[p,I]V.T2 →
+ â\88\83â\88\83T1. â\9d¨G,Lâ\9d© â\8a¢ V ![h,a] & â\9d¨G,L.â\93\91[I]Vâ\9d© â\8a¢ T1 ![h,a] & â\9d¨G,L.â\93\91[I]Vâ\9d© ⊢ T1 ➡[h,n] T2 & T1 ≅ T2 & X = ⓑ[p,I]V.T1.
#h #a #n #p #I #G #L #X #H0 #V #T2 #H1 #H2
elim (teqx_inv_pair2 … H2) #V0 #T1 #_ #_ #H destruct
elim (cpm_teqx_inv_bind_sn … H0 … H1 H2) -H0 -H1 -H2 #T0 #HV #HT1 #H1T12 #H2T12 #H destruct
lemma cpm_teqx_ind (h) (a) (n) (G) (Q:relation3 …):
(∀I,L. n = 0 → Q L (⓪[I]) (⓪[I])) →
(∀L,s. n = 1 → Q L (⋆s) (⋆(⫯[h]s))) →
- (â\88\80p,I,L,V,T1. â\9dªG,Lâ\9d«â\8a¢ V![h,a] â\86\92 â\9dªG,L.â\93\91[I]Vâ\9d«⊢T1![h,a] →
- â\88\80T2. â\9dªG,L.â\93\91[I]Vâ\9d« ⊢ T1 ➡[h,n] T2 → T1 ≅ T2 →
+ (â\88\80p,I,L,V,T1. â\9d¨G,Lâ\9d©â\8a¢ V![h,a] â\86\92 â\9d¨G,L.â\93\91[I]Vâ\9d©⊢T1![h,a] →
+ â\88\80T2. â\9d¨G,L.â\93\91[I]Vâ\9d© ⊢ T1 ➡[h,n] T2 → T1 ≅ T2 →
Q (L.ⓑ[I]V) T1 T2 → Q L (ⓑ[p,I]V.T1) (ⓑ[p,I]V.T2)
) →
(∀m. ad a m →
- â\88\80L,V. â\9dªG,Lâ\9d« â\8a¢ V ![h,a] â\86\92 â\88\80W. â\9dªG,Lâ\9d« ⊢ V ➡*[h,1] W →
- â\88\80p,T1,U1. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,m] â\93\9b[p]W.U1 â\86\92 â\9dªG,Lâ\9d«⊢ T1 ![h,a] →
- â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n] T2 → T1 ≅ T2 →
+ â\88\80L,V. â\9d¨G,Lâ\9d© â\8a¢ V ![h,a] â\86\92 â\88\80W. â\9d¨G,Lâ\9d© ⊢ V ➡*[h,1] W →
+ â\88\80p,T1,U1. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,m] â\93\9b[p]W.U1 â\86\92 â\9d¨G,Lâ\9d©⊢ T1 ![h,a] →
+ â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n] T2 → T1 ≅ T2 →
Q L T1 T2 → Q L (ⓐV.T1) (ⓐV.T2)
) →
- (â\88\80L,U0,U1,T1. â\9dªG,Lâ\9d« â\8a¢ U1 â\9e¡*[h,0] U0 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,1] U0 →
- â\88\80U2. â\9dªG,Lâ\9d« â\8a¢ U1 ![h,a] â\86\92 â\9dªG,Lâ\9d« ⊢ U1 ➡[h,n] U2 → U1 ≅ U2 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 ![h,a] â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n] T2 → T1 ≅ T2 →
+ (â\88\80L,U0,U1,T1. â\9d¨G,Lâ\9d© â\8a¢ U1 â\9e¡*[h,0] U0 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,1] U0 →
+ â\88\80U2. â\9d¨G,Lâ\9d© â\8a¢ U1 ![h,a] â\86\92 â\9d¨G,Lâ\9d© ⊢ U1 ➡[h,n] U2 → U1 ≅ U2 →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T1 ![h,a] â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n] T2 → T1 ≅ T2 →
Q L U1 U2 → Q L T1 T2 → Q L (ⓝU1.T1) (ⓝU2.T2)
) →
- â\88\80L,T1. â\9dªG,Lâ\9d« ⊢ T1 ![h,a] →
- â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n] T2 → T1 ≅ T2 → Q L T1 T2.
+ â\88\80L,T1. â\9d¨G,Lâ\9d© ⊢ T1 ![h,a] →
+ â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n] T2 → T1 ≅ T2 → Q L T1 T2.
#h #a #n #G #Q #IH1 #IH2 #IH3 #IH4 #IH5 #L #T1
@(insert_eq_0 … G) #F
@(fqup_wf_ind_eq (Ⓣ) … F L T1) -L -T1 -F
(* Advanced properties with restricted rt-transition for terms **************)
lemma cpm_teqx_free (h) (a) (n) (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ![h,a] →
- â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n] T2 → T1 ≅ T2 →
- â\88\80F,K. â\9dªF,Kâ\9d« ⊢ T1 ➡[h,n] T2.
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T1 ![h,a] →
+ â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n] T2 → T1 ≅ T2 →
+ â\88\80F,K. â\9d¨F,Kâ\9d© ⊢ T1 ➡[h,n] T2.
#h #a #n #G #L #T1 #H0 #T2 #H1 #H2
@(cpm_teqx_ind … H0 … H1 H2) -L -T1 -T2
[ #I #L #H #F #K destruct //
(* Advanced inversion lemmas with restricted rt-transition for terms ********)
lemma cpm_teqx_inv_bind_sn_void (h) (a) (n) (p) (I) (G) (L):
- â\88\80V,T1. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V.T1 ![h,a] →
- â\88\80X. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V.T1 ➡[h,n] X → ⓑ[p,I]V.T1 ≅ X →
- â\88\83â\88\83T2. â\9dªG,Lâ\9d« â\8a¢ V ![h,a] & â\9dªG,L.â\93\91[I]Vâ\9d« â\8a¢ T1 ![h,a] & â\9dªG,L.â\93§â\9d« ⊢ T1 ➡[h,n] T2 & T1 ≅ T2 & X = ⓑ[p,I]V.T2.
+ â\88\80V,T1. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V.T1 ![h,a] →
+ â\88\80X. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V.T1 ➡[h,n] X → ⓑ[p,I]V.T1 ≅ X →
+ â\88\83â\88\83T2. â\9d¨G,Lâ\9d© â\8a¢ V ![h,a] & â\9d¨G,L.â\93\91[I]Vâ\9d© â\8a¢ T1 ![h,a] & â\9d¨G,L.â\93§â\9d© ⊢ T1 ➡[h,n] T2 & T1 ≅ T2 & X = ⓑ[p,I]V.T2.
#h #a #n #p #I #G #L #V #T1 #H0 #X #H1 #H2
elim (cpm_teqx_inv_bind_sn … H0 … H1 H2) -H0 -H1 -H2 #T2 #HV #HT1 #H1T12 #H2T12 #H
/3 width=5 by ex5_intro, cpm_teqx_free/
(* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************)
definition IH_cnv_cpm_teqx_conf_lpr (h) (a): relation3 genv lenv term ≝
- λG,L0,T0. â\9dªG,L0â\9d« ⊢ T0 ![h,a] →
- â\88\80n1,T1. â\9dªG,L0â\9d« ⊢ T0 ➡[h,n1] T1 → T0 ≅ T1 →
- â\88\80n2,T2. â\9dªG,L0â\9d« ⊢ T0 ➡[h,n2] T2 → T0 ≅ T2 →
- â\88\80L1. â\9dªG,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡[h,n2-n1] T & T1 â\89\85 T & â\9dªG,L2â\9d« ⊢ T2 ➡[h,n1-n2] T & T2 ≅ T.
+ λG,L0,T0. â\9d¨G,L0â\9d© ⊢ T0 ![h,a] →
+ â\88\80n1,T1. â\9d¨G,L0â\9d© ⊢ T0 ➡[h,n1] T1 → T0 ≅ T1 →
+ â\88\80n2,T2. â\9d¨G,L0â\9d© ⊢ T0 ➡[h,n2] T2 → T0 ≅ T2 →
+ â\88\80L1. â\9d¨G,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ T1 â\9e¡[h,n2-n1] T & T1 â\89\85 T & â\9d¨G,L2â\9d© ⊢ T2 ➡[h,n1-n2] T & T2 ≅ T.
(* Diamond propery with restricted rt-transition for terms ******************)
fact cnv_cpm_teqx_conf_lpr_atom_atom_aux (h) (G0) (L1) (L2) (I):
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93ª[I] â\9e¡[h,0] T & â\93ª[I] â\89\85 T & â\9dªG0,L2â\9d« ⊢ ⓪[I] ➡[h,0] T & ⓪[I] ≅ T.
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ â\93ª[I] â\9e¡[h,0] T & â\93ª[I] â\89\85 T & â\9d¨G0,L2â\9d© ⊢ ⓪[I] ➡[h,0] T & ⓪[I] ≅ T.
#h #G0 #L1 #L2 #I
/2 width=5 by ex4_intro/
qed-.
fact cnv_cpm_teqx_conf_lpr_atom_ess_aux (h) (G0) (L1) (L2) (s):
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\8b\86s â\9e¡[h,1] T & â\8b\86s â\89\85 T & â\9dªG0,L2â\9d« ⊢ ⋆(⫯[h]s) ➡[h,0] T & ⋆(⫯[h]s) ≅ T.
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ â\8b\86s â\9e¡[h,1] T & â\8b\86s â\89\85 T & â\9d¨G0,L2â\9d© ⊢ ⋆(⫯[h]s) ➡[h,0] T & ⋆(⫯[h]s) ≅ T.
#h #G0 #L1 #L2 #s
/3 width=5 by teqg_sort, ex4_intro/
qed-.
fact cnv_cpm_teqx_conf_lpr_bind_bind_aux (h) (a) (p) (I) (G0) (L0) (V0) (T0):
- (â\88\80G,L,T. â\9dªG0,L0,â\93\91[p,I]V0.T0â\9d« â¬\82+ â\9dªG,L,Tâ\9d« → IH_cnv_cpm_teqx_conf_lpr h a G L T) →
- â\9dªG0,L0â\9d« ⊢ ⓑ[p,I]V0.T0 ![h,a] →
- â\88\80n1,T1. â\9dªG0,L0.â\93\91[I]V0â\9d« ⊢ T0 ➡[h,n1] T1 → T0 ≅ T1 →
- â\88\80n2,T2. â\9dªG0,L0.â\93\91[I]V0â\9d« ⊢ T0 ➡[h,n2] T2 → T0 ≅ T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\91[p,I]V0.T1 â\9e¡[h,n2-n1] T & â\93\91[p,I]V0.T1 â\89\85 T & â\9dªG0,L2â\9d« ⊢ ⓑ[p,I]V0.T2 ➡[h,n1-n2] T & ⓑ[p,I]V0.T2 ≅ T.
+ (â\88\80G,L,T. â\9d¨G0,L0,â\93\91[p,I]V0.T0â\9d© â¬\82+ â\9d¨G,L,Tâ\9d© → IH_cnv_cpm_teqx_conf_lpr h a G L T) →
+ â\9d¨G0,L0â\9d© ⊢ ⓑ[p,I]V0.T0 ![h,a] →
+ â\88\80n1,T1. â\9d¨G0,L0.â\93\91[I]V0â\9d© ⊢ T0 ➡[h,n1] T1 → T0 ≅ T1 →
+ â\88\80n2,T2. â\9d¨G0,L0.â\93\91[I]V0â\9d© ⊢ T0 ➡[h,n2] T2 → T0 ≅ T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ â\93\91[p,I]V0.T1 â\9e¡[h,n2-n1] T & â\93\91[p,I]V0.T1 â\89\85 T & â\9d¨G0,L2â\9d© ⊢ ⓑ[p,I]V0.T2 ➡[h,n1-n2] T & ⓑ[p,I]V0.T2 ≅ T.
#h #a #p #I #G0 #L0 #V0 #T0 #IH #H0
#n1 #T1 #H1T01 #H2T01 #n2 #T2 #H1T02 #H2T02
#L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpm_teqx_conf_lpr_appl_appl_aux (h) (a) (G0) (L0) (V0) (T0):
- (â\88\80G,L,T. â\9dªG0,L0,â\93\90V0.T0â\9d« â¬\82+ â\9dªG,L,Tâ\9d« → IH_cnv_cpm_teqx_conf_lpr h a G L T) →
- â\9dªG0,L0â\9d« ⊢ ⓐV0.T0 ![h,a] →
- â\88\80n1,T1. â\9dªG0,L0â\9d« ⊢ T0 ➡[h,n1] T1 → T0 ≅ T1 →
- â\88\80n2,T2. â\9dªG0,L0â\9d« ⊢ T0 ➡[h,n2] T2 → T0 ≅ T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\90V0.T1 â\9e¡[h,n2-n1] T & â\93\90V0.T1 â\89\85 T & â\9dªG0,L2â\9d« ⊢ ⓐV0.T2 ➡[h,n1-n2] T & ⓐV0.T2 ≅ T.
+ (â\88\80G,L,T. â\9d¨G0,L0,â\93\90V0.T0â\9d© â¬\82+ â\9d¨G,L,Tâ\9d© → IH_cnv_cpm_teqx_conf_lpr h a G L T) →
+ â\9d¨G0,L0â\9d© ⊢ ⓐV0.T0 ![h,a] →
+ â\88\80n1,T1. â\9d¨G0,L0â\9d© ⊢ T0 ➡[h,n1] T1 → T0 ≅ T1 →
+ â\88\80n2,T2. â\9d¨G0,L0â\9d© ⊢ T0 ➡[h,n2] T2 → T0 ≅ T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ â\93\90V0.T1 â\9e¡[h,n2-n1] T & â\93\90V0.T1 â\89\85 T & â\9d¨G0,L2â\9d© ⊢ ⓐV0.T2 ➡[h,n1-n2] T & ⓐV0.T2 ≅ T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#n1 #T1 #H1T01 #H2T01 #n2 #T2 #H1T02 #H2T02
#L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpm_teqx_conf_lpr_cast_cast_aux (h) (a) (G0) (L0) (V0) (T0):
- (â\88\80G,L,T. â\9dªG0,L0,â\93\9dV0.T0â\9d« â¬\82+ â\9dªG,L,Tâ\9d« → IH_cnv_cpm_teqx_conf_lpr h a G L T) →
- â\9dªG0,L0â\9d« ⊢ ⓝV0.T0 ![h,a] →
- â\88\80n1,V1. â\9dªG0,L0â\9d« ⊢ V0 ➡[h,n1] V1 → V0 ≅ V1 →
- â\88\80n2,V2. â\9dªG0,L0â\9d« ⊢ V0 ➡[h,n2] V2 → V0 ≅ V2 →
- â\88\80T1. â\9dªG0,L0â\9d« ⊢ T0 ➡[h,n1] T1 → T0 ≅ T1 →
- â\88\80T2. â\9dªG0,L0â\9d« ⊢ T0 ➡[h,n2] T2 → T0 ≅ T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\9dV1.T1 â\9e¡[h,n2-n1] T & â\93\9dV1.T1 â\89\85 T & â\9dªG0,L2â\9d« ⊢ ⓝV2.T2 ➡[h,n1-n2] T & ⓝV2.T2 ≅ T.
+ (â\88\80G,L,T. â\9d¨G0,L0,â\93\9dV0.T0â\9d© â¬\82+ â\9d¨G,L,Tâ\9d© → IH_cnv_cpm_teqx_conf_lpr h a G L T) →
+ â\9d¨G0,L0â\9d© ⊢ ⓝV0.T0 ![h,a] →
+ â\88\80n1,V1. â\9d¨G0,L0â\9d© ⊢ V0 ➡[h,n1] V1 → V0 ≅ V1 →
+ â\88\80n2,V2. â\9d¨G0,L0â\9d© ⊢ V0 ➡[h,n2] V2 → V0 ≅ V2 →
+ â\88\80T1. â\9d¨G0,L0â\9d© ⊢ T0 ➡[h,n1] T1 → T0 ≅ T1 →
+ â\88\80T2. â\9d¨G0,L0â\9d© ⊢ T0 ➡[h,n2] T2 → T0 ≅ T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ â\93\9dV1.T1 â\9e¡[h,n2-n1] T & â\93\9dV1.T1 â\89\85 T & â\9d¨G0,L2â\9d© ⊢ ⓝV2.T2 ➡[h,n1-n2] T & ⓝV2.T2 ≅ T.
#h #a #G0 #L0 #V0 #T0 #IH #H0
#n1 #V1 #H1V01 #H2V01 #n2 #V2 #H1V02 #H2V02 #T1 #H1T01 #H2T01 #T2 #H1T02 #H2T02
#L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpm_teqx_conf_lpr_aux (h) (a) (G0) (L0) (T0):
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« â¬\82+ â\9dªG,L,Tâ\9d« → IH_cnv_cpm_teqx_conf_lpr h a G L T) →
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© â¬\82+ â\9d¨G,L,Tâ\9d© → IH_cnv_cpm_teqx_conf_lpr h a G L T) →
∀G,L,T. G0 = G → L0 = L → T0 = T → IH_cnv_cpm_teqx_conf_lpr h a G L T.
#h #a #G0 #L0 #T0 #IH1 #G #L * [| * [| * ]]
[ #I #HG0 #HL0 #HT0 #HT #n1 #X1 #H1X1 #H2X1 #n2 #X2 #H1X2 #H2X2 #L1 #HL1 #L2 #HL2 destruct
(* CONTEXT-SENSITIVE NATIVE VALIDITY FOR TERMS ******************************)
definition IH_cnv_cpm_teqx_cpm_trans (h) (a): relation3 genv lenv term ≝
- λG,L,T1. â\9dªG,Lâ\9d« ⊢ T1 ![h,a] →
- â\88\80n1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n1] T → T1 ≅ T →
- â\88\80n2,T2. â\9dªG,Lâ\9d« ⊢ T ➡[h,n2] T2 →
- â\88\83â\88\83T0. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,n2] T0 & â\9dªG,Lâ\9d« ⊢ T0 ➡[h,n1] T2 & T0 ≅ T2.
+ λG,L,T1. â\9d¨G,Lâ\9d© ⊢ T1 ![h,a] →
+ â\88\80n1,T. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n1] T → T1 ≅ T →
+ â\88\80n2,T2. â\9d¨G,Lâ\9d© ⊢ T ➡[h,n2] T2 →
+ â\88\83â\88\83T0. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,n2] T0 & â\9d¨G,Lâ\9d© ⊢ T0 ➡[h,n1] T2 & T0 ≅ T2.
(* Transitive properties restricted rt-transition for terms *****************)
fact cnv_cpm_teqx_cpm_trans_sub (h) (a) (G0) (L0) (T0):
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« â¬\82+ â\9dªG,L,Tâ\9d« → IH_cnv_cpm_teqx_cpm_trans h a G L T) →
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© â¬\82+ â\9d¨G,L,Tâ\9d© → IH_cnv_cpm_teqx_cpm_trans h a G L T) →
∀G,L,T1. G0 = G → L0 = L → T0 = T1 → IH_cnv_cpm_teqx_cpm_trans h a G L T1.
#h #a #G0 #L0 #T0 #IH2 #IH1 #G #L * [| * [| * ]]
[ #I #_ #_ #_ #_ #n1 #X1 #H1X #H2X #n2 #X2 #HX2 destruct -G0 -L0 -T0
qed-.
fact cnv_cpm_teqx_cpm_trans_aux (h) (a) (G0) (L0) (T0):
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpm_trans_lpr h a G L T) →
IH_cnv_cpm_teqx_cpm_trans h a G0 L0 T0.
#h #a #G0 #L0 #T0
@(fqup_wf_ind (Ⓣ) … G0 L0 T0) -G0 -L0 -T0 #G0 #L0 #T0 #IH #IH0
fact cnv_cpm_trans_lpr_aux (h) (a):
∀G0,L0,T0.
- (â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« > â\9dªG1,L1,T1â\9d« → IH_cnv_cpms_conf_lpr h a G1 L1 T1) →
- (â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« > â\9dªG1,L1,T1â\9d« → IH_cnv_cpm_trans_lpr h a G1 L1 T1) →
+ (â\88\80G1,L1,T1. â\9d¨G0,L0,T0â\9d© > â\9d¨G1,L1,T1â\9d© → IH_cnv_cpms_conf_lpr h a G1 L1 T1) →
+ (â\88\80G1,L1,T1. â\9d¨G0,L0,T0â\9d© > â\9d¨G1,L1,T1â\9d© → IH_cnv_cpm_trans_lpr h a G1 L1 T1) →
∀G1,L1,T1. G0 = G1 → L0 = L1 → T0 = T1 → IH_cnv_cpm_trans_lpr h a G1 L1 T1.
#h #a #G0 #L0 #T0 #IH2 #IH1 #G1 #L1 * * [|||| * ]
[ #s #HG0 #HL0 #HT0 #H1 #x #X #H2 #L2 #_ destruct -IH2 -IH1 -H1
(* Properties with t-bound evaluation on terms ******************************)
lemma cnv_cpmre_trans (h) (a) (n) (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ![h,a] →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*ð\9d\90\8d[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T2 ![h,a].
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T1 ![h,a] →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*ð\9d\90\8d[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T2 ![h,a].
#h #a #n #G #L #T1 #HT1 #T2 * #HT12 #_
/2 width=4 by cnv_cpms_trans/
qed-.
lemma cnv_cpmre_cpms_conf (h) (a) (n) (G) (L):
- â\88\80T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\88\80T1. â\9dªG,Lâ\9d« ⊢ T ➡*[h,n] T1 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*ð\9d\90\8d[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*𝐍[h,0] T2.
+ â\88\80T. â\9d¨G,Lâ\9d© â\8a¢ T ![h,a] â\86\92 â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T ➡*[h,n] T1 →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*ð\9d\90\8d[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡*𝐍[h,0] T2.
#h #a #n #G #L #T0 #HT0 #T1 #HT01 #T2 * #HT02 #HT2
elim (cnv_cpms_conf … HT0 … HT01 … HT02) -T0 <minus_n_n #T0 #HT10 #HT20
lapply (cprs_inv_cnr_sn … HT20 HT2) -HT20 #H destruct
(* Main properties with evaluation for t-bound rt-transition on terms *****)
theorem cnv_cpmre_mono (h) (a) (n) (G) (L):
- â\88\80T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\88\80T1. â\9dªG,Lâ\9d« ⊢ T ➡*𝐍[h,n] T1 →
- â\88\80T2. â\9dªG,Lâ\9d« ⊢ T ➡*𝐍[h,n] T2 → T1 = T2.
+ â\88\80T. â\9d¨G,Lâ\9d© â\8a¢ T ![h,a] â\86\92 â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T ➡*𝐍[h,n] T1 →
+ â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T ➡*𝐍[h,n] T2 → T1 = T2.
#h #a #n #G #L #T0 #HT0 #T1 * #HT01 #HT1 #T2 * #HT02 #HT2
elim (cnv_cpms_conf … HT0 … HT01 … HT02) -T0 <minus_n_n #T0 #HT10 #HT20
/3 width=7 by cprs_inv_cnr_sn, canc_dx_eq/
(* Sub confluence propery with t-bound rt-computation for terms *************)
fact cnv_cpms_conf_lpr_teqx_teqx_aux (h) (a) (G0) (L0) (T0):
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpms_conf_lpr h a G L T) →
- â\9dªG0,L0â\9d« ⊢ T0 ![h,a] →
- â\88\80n1,T1. â\9dªG0,L0â\9d« ⊢ T0 ➡*[h,n1] T1 → T0 ≅ T1 →
- â\88\80n2,T2. â\9dªG0,L0â\9d« ⊢ T0 ➡*[h,n2] T2 → T0 ≅ T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡*[h,n2-n1] T & â\9dªG0,L2â\9d« ⊢ T2 ➡*[h,n1-n2] T.
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpms_conf_lpr h a G L T) →
+ â\9d¨G0,L0â\9d© ⊢ T0 ![h,a] →
+ â\88\80n1,T1. â\9d¨G0,L0â\9d© ⊢ T0 ➡*[h,n1] T1 → T0 ≅ T1 →
+ â\88\80n2,T2. â\9d¨G0,L0â\9d© ⊢ T0 ➡*[h,n2] T2 → T0 ≅ T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ T1 â\9e¡*[h,n2-n1] T & â\9d¨G0,L2â\9d© ⊢ T2 ➡*[h,n1-n2] T.
#h #a #G #L0 #T0 #IH2 #IH1 #HT0
#n1 #T1 #H1T01 #H2T01 #n2 #T2 #H1T02 #H2T02
#L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpms_conf_lpr_refl_tneqx_sub (h) (a) (G0) (L0) (T0) (m21) (m22):
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpms_conf_lpr h a G L T) →
- â\9dªG0,L0â\9d« ⊢ T0 ![h,a] →
- â\88\80X2. â\9dªG0,L0â\9d« â\8a¢ T0 â\9e¡[h,m21] X2 â\86\92 (T0 â\89\85 X2 â\86\92 â\8a¥) â\86\92 â\88\80T2. â\9dªG0,L0â\9d« ⊢ X2 ➡*[h,m22] T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T0 â\9e¡*[h,m21+m22] T& â\9dªG0,L2â\9d« ⊢ T2 ➡*[h,0] T.
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpms_conf_lpr h a G L T) →
+ â\9d¨G0,L0â\9d© ⊢ T0 ![h,a] →
+ â\88\80X2. â\9d¨G0,L0â\9d© â\8a¢ T0 â\9e¡[h,m21] X2 â\86\92 (T0 â\89\85 X2 â\86\92 â\8a¥) â\86\92 â\88\80T2. â\9d¨G0,L0â\9d© ⊢ X2 ➡*[h,m22] T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ T0 â\9e¡*[h,m21+m22] T& â\9d¨G0,L2â\9d© ⊢ T2 ➡*[h,0] T.
#h #a #G0 #L0 #T0 #m21 #m22 #IH2 #IH1 #H0
#X2 #HX02 #HnX02 #T2 #HXT2
#L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpms_conf_lpr_step_tneqx_sub (h) (a) (G0) (L0) (T0) (m11) (m12) (m21) (m22):
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpms_conf_lpr h a G L T) →
- â\9dªG0,L0â\9d« ⊢ T0 ![h,a] →
- â\88\80X1. â\9dªG0,L0â\9d« â\8a¢ T0 â\9e¡[h,m11] X1 â\86\92 T0 â\89\85 X1 â\86\92 â\88\80T1. â\9dªG0,L0â\9d« ⊢ X1 ➡*[h,m12] T1 → X1 ≅ T1 →
- â\88\80X2. â\9dªG0,L0â\9d« â\8a¢ T0 â\9e¡[h,m21] X2 â\86\92 (T0 â\89\85 X2 â\86\92 â\8a¥) â\86\92 â\88\80T2. â\9dªG0,L0â\9d« ⊢ X2 ➡*[h,m22] T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- ((â\88\80G,L,T. â\9dªG0,L0,X1â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â\9dªG0,L0,X1â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpms_conf_lpr h a G L T) →
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpms_conf_lpr h a G L T) →
+ â\9d¨G0,L0â\9d© ⊢ T0 ![h,a] →
+ â\88\80X1. â\9d¨G0,L0â\9d© â\8a¢ T0 â\9e¡[h,m11] X1 â\86\92 T0 â\89\85 X1 â\86\92 â\88\80T1. â\9d¨G0,L0â\9d© ⊢ X1 ➡*[h,m12] T1 → X1 ≅ T1 →
+ â\88\80X2. â\9d¨G0,L0â\9d© â\8a¢ T0 â\9e¡[h,m21] X2 â\86\92 (T0 â\89\85 X2 â\86\92 â\8a¥) â\86\92 â\88\80T2. â\9d¨G0,L0â\9d© ⊢ X2 ➡*[h,m22] T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ ((â\88\80G,L,T. â\9d¨G0,L0,X1â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9d¨G0,L0,X1â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpms_conf_lpr h a G L T) →
∀m21,m22.
- â\88\80X2. â\9dªG0,L0â\9d« ⊢ X1 ➡[h,m21] X2 → (X1 ≅ X2 → ⊥) →
- â\88\80T2. â\9dªG0,L0â\9d« ⊢ X2 ➡*[h,m22] T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡*[h,m21+m22-m12] T & â\9dªG0,L2â\9d« ⊢ T2 ➡*[h,m12-(m21+m22)]T
+ â\88\80X2. â\9d¨G0,L0â\9d© ⊢ X1 ➡[h,m21] X2 → (X1 ≅ X2 → ⊥) →
+ â\88\80T2. â\9d¨G0,L0â\9d© ⊢ X2 ➡*[h,m22] T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ T1 â\9e¡*[h,m21+m22-m12] T & â\9d¨G0,L2â\9d© ⊢ T2 ➡*[h,m12-(m21+m22)]T
) →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡*[h,m21+m22-(m11+m12)] T & â\9dªG0,L2â\9d« ⊢ T2 ➡*[h,m11+m12-(m21+m22)] T.
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ T1 â\9e¡*[h,m21+m22-(m11+m12)] T & â\9d¨G0,L2â\9d© ⊢ T2 ➡*[h,m11+m12-(m21+m22)] T.
#h #a #G0 #L0 #T0 #m11 #m12 #m21 #m22 #IH2 #IH1 #HT0
#X1 #H1X01 #H2X01 #T1 #H1XT1 #H2XT1 #X2 #H1X02 #H2X02 #T2 #HXT2
#L1 #HL01 #L2 #HL02 #IH
lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … H1X01 … L0 ?) // #HX1
lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … H1X02 … L0 ?) // #HX2
elim (cnv_cpm_conf_lpr_aux … IH2 IH1 … H1X01 … H1X02 … L0 … L0) // #Z0 #HXZ10 #HXZ20
-cut (â\9dªG0, L0, T0â\9d« > â\9dªG0, L0, X2â\9d«) [ /4 width=5 by cpms_fwd_fpbs, cpm_fwd_fpbc, fpbc_fpbs_fpbg/ ] #H1fpbg (**) (* cut *)
+cut (â\9d¨G0, L0, T0â\9d© > â\9d¨G0, L0, X2â\9d©) [ /4 width=5 by cpms_fwd_fpbs, cpm_fwd_fpbc, fpbc_fpbs_fpbg/ ] #H1fpbg (**) (* cut *)
lapply (fpbg_fpbs_trans … H1fpbg G0 L0 Z0 ?) [ /2 width=3 by cpms_fwd_fpbs/ ] #H2fpbg
lapply (cnv_cpms_trans_lpr_sub … IH2 … HXZ20 … L0 ?) // #HZ0
elim (IH1 … HXT2 … HXZ20 … L2 … L0) [|*: /4 width=2 by fpbc_fpbg, cpm_fwd_fpbc/ ] -HXT2 -HXZ20 #Z2 #HTZ2 #HZ02
qed-.
fact cnv_cpms_conf_lpr_teqx_tneqx_aux (h) (a) (G0) (L0) (T0) (n1) (m21) (m22):
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpms_conf_lpr h a G L T) →
- â\9dªG0,L0â\9d« ⊢ T0 ![h,a] →
- â\88\80T1. â\9dªG0,L0â\9d« ⊢ T0 ➡*[h,n1] T1 → T0 ≅ T1 →
- â\88\80X2. â\9dªG0,L0â\9d« â\8a¢ T0 â\9e¡[h,m21] X2 â\86\92 (T0 â\89\85 X2 â\86\92 â\8a¥) â\86\92 â\88\80T2. â\9dªG0,L0â\9d« ⊢ X2 ➡*[h,m22] T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡*[h,m21+m22-n1] T & â\9dªG0,L2â\9d« ⊢ T2 ➡*[h,n1-(m21+m22)] T.
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpms_conf_lpr h a G L T) →
+ â\9d¨G0,L0â\9d© ⊢ T0 ![h,a] →
+ â\88\80T1. â\9d¨G0,L0â\9d© ⊢ T0 ➡*[h,n1] T1 → T0 ≅ T1 →
+ â\88\80X2. â\9d¨G0,L0â\9d© â\8a¢ T0 â\9e¡[h,m21] X2 â\86\92 (T0 â\89\85 X2 â\86\92 â\8a¥) â\86\92 â\88\80T2. â\9d¨G0,L0â\9d© ⊢ X2 ➡*[h,m22] T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ T1 â\9e¡*[h,m21+m22-n1] T & â\9d¨G0,L2â\9d© ⊢ T2 ➡*[h,n1-(m21+m22)] T.
#h #a #G0 #L0 #T0 #n1 #m21 #m22 #IH2 #IH1 #HT0
#T1 #H1T01 #H2T01
generalize in match m22; generalize in match m21; -m21 -m22
qed-.
fact cnv_cpms_conf_lpr_tneqx_tneqx_aux (h) (a) (G0) (L0) (T0) (m11) (m12) (m21) (m22):
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpms_conf_lpr h a G L T) →
- â\9dªG0,L0â\9d« ⊢ T0 ![h,a] →
- â\88\80X1. â\9dªG0,L0â\9d« â\8a¢ T0 â\9e¡[h,m11] X1 â\86\92 (T0 â\89\85 X1 â\86\92 â\8a¥) â\86\92 â\88\80T1. â\9dªG0,L0â\9d« ⊢ X1 ➡*[h,m12] T1 →
- â\88\80X2. â\9dªG0,L0â\9d« â\8a¢ T0 â\9e¡[h,m21] X2 â\86\92 (T0 â\89\85 X2 â\86\92 â\8a¥) â\86\92 â\88\80T2. â\9dªG0,L0â\9d« ⊢ X2 ➡*[h,m22] T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡*[h,m21+m22-(m11+m12)] T & â\9dªG0,L2â\9d« ⊢ T2 ➡*[h,m11+m12-(m21+m22)] T.
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpms_conf_lpr h a G L T) →
+ â\9d¨G0,L0â\9d© ⊢ T0 ![h,a] →
+ â\88\80X1. â\9d¨G0,L0â\9d© â\8a¢ T0 â\9e¡[h,m11] X1 â\86\92 (T0 â\89\85 X1 â\86\92 â\8a¥) â\86\92 â\88\80T1. â\9d¨G0,L0â\9d© ⊢ X1 ➡*[h,m12] T1 →
+ â\88\80X2. â\9d¨G0,L0â\9d© â\8a¢ T0 â\9e¡[h,m21] X2 â\86\92 (T0 â\89\85 X2 â\86\92 â\8a¥) â\86\92 â\88\80T2. â\9d¨G0,L0â\9d© ⊢ X2 ➡*[h,m22] T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ T1 â\9e¡*[h,m21+m22-(m11+m12)] T & â\9d¨G0,L2â\9d© ⊢ T2 ➡*[h,m11+m12-(m21+m22)] T.
#h #a #G0 #L0 #T0 #m11 #m12 #m21 #m22 #IH2 #IH1 #H0
#X1 #HX01 #HnX01 #T1 #HXT1 #X2 #HX02 #HnX02 #T2 #HXT2
#L1 #HL01 #L2 #HL02
lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … HX01 … L0 ?) // #HX1
lapply (cnv_cpm_trans_lpr_aux … IH1 IH2 … HX02 … L0 ?) // #HX2
elim (cnv_cpm_conf_lpr_aux … IH2 IH1 … HX01 … HX02 … L0 … L0) // #Z0 #HXZ10 #HXZ20
-cut (â\9dªG0, L0, T0â\9d« > â\9dªG0, L0, X1â\9d«) [ /4 width=5 by cpms_fwd_fpbs, cpm_fwd_fpbc, fpbc_fpbs_fpbg/ ] #H1fpbg (**) (* cut *)
+cut (â\9d¨G0, L0, T0â\9d© > â\9d¨G0, L0, X1â\9d©) [ /4 width=5 by cpms_fwd_fpbs, cpm_fwd_fpbc, fpbc_fpbs_fpbg/ ] #H1fpbg (**) (* cut *)
lapply (fpbg_fpbs_trans … H1fpbg G0 L0 Z0 ?) [ /2 width=3 by cpms_fwd_fpbs/ ] #H2fpbg
lapply (cnv_cpms_trans_lpr_sub … IH2 … HXZ10 … L0 ?) // #HZ0
elim (IH1 … HXT1 … HXZ10 … L1 … L0) [|*: /4 width=2 by fpbc_fpbg, cpm_fwd_fpbc/ ] -HXT1 -HXZ10 #Z1 #HTZ1 #HZ01
qed-.
fact cnv_cpms_conf_lpr_aux (h) (a) (G0) (L0) (T0):
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpms_conf_lpr h a G L T) →
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpms_conf_lpr h a G L T) →
∀G,L,T. G0 = G → L0 = L → T0 = T → IH_cnv_cpms_conf_lpr h a G L T.
#h #a #G #L #T #IH2 #IH1 #G0 #L0 #T0 #HG #HL #HT
#HT0 #n1 #T1 #HT01 #n2 #T2 #HT02 #L1 #HL01 #L2 #HL02 destruct
(* Properties with restricted rt-computation for terms **********************)
fact cpms_tneqx_fwd_step_sn_aux (h) (a) (n) (G) (L) (T1):
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ![h,a] → (T1 ≅ T2 → ⊥) →
- (â\88\80G0,L0,T0. â\9dªG,L,T1â\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- (â\88\80G0,L0,T0. â\9dªG,L,T1â\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpm_trans_lpr h a G0 L0 T0) →
- â\88\83â\88\83n1,n2,T0. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,n1] T0 & T1 â\89\85 T0 â\86\92 â\8a¥ & â\9dªG,Lâ\9d« ⊢ T0 ➡*[h,n2] T2 & n1+n2 = n.
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ![h,a] → (T1 ≅ T2 → ⊥) →
+ (â\88\80G0,L0,T0. â\9d¨G,L,T1â\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ (â\88\80G0,L0,T0. â\9d¨G,L,T1â\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpm_trans_lpr h a G0 L0 T0) →
+ â\88\83â\88\83n1,n2,T0. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,n1] T0 & T1 â\89\85 T0 â\86\92 â\8a¥ & â\9d¨G,Lâ\9d© ⊢ T0 ➡*[h,n2] T2 & n1+n2 = n.
#h #a #n #G #L #T1 #T2 #H
@(cpms_ind_sn … H) -n -T1
[ #_ #H2T2 elim H2T2 -H2T2 //
qed-.
fact cpms_teqx_ind_sn (h) (a) (G) (L) (T2) (Q:relation2 …):
- (â\9dªG,Lâ\9d« ⊢ T2 ![h,a] → Q 0 T2) →
- (â\88\80n1,n2,T1,T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,n1] T â\86\92 â\9dªG,Lâ\9d« â\8a¢ T1 ![h,a] â\86\92 T1 â\89\85 T â\86\92 â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n2] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T ![h,a] → T ≅ T2 → Q n2 T → Q (n1+n2) T1) →
- â\88\80n,T1. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ![h,a] → T1 ≅ T2 →
- (â\88\80G0,L0,T0. â\9dªG,L,T1â\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- (â\88\80G0,L0,T0. â\9dªG,L,T1â\9d« > â\9dªG0,L0,T0â\9d« → IH_cnv_cpm_trans_lpr h a G0 L0 T0) →
+ (â\9d¨G,Lâ\9d© ⊢ T2 ![h,a] → Q 0 T2) →
+ (â\88\80n1,n2,T1,T. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,n1] T â\86\92 â\9d¨G,Lâ\9d© â\8a¢ T1 ![h,a] â\86\92 T1 â\89\85 T â\86\92 â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,n2] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T ![h,a] → T ≅ T2 → Q n2 T → Q (n1+n2) T1) →
+ â\88\80n,T1. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ![h,a] → T1 ≅ T2 →
+ (â\88\80G0,L0,T0. â\9d¨G,L,T1â\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ (â\88\80G0,L0,T0. â\9d¨G,L,T1â\9d© > â\9d¨G0,L0,T0â\9d© → IH_cnv_cpm_trans_lpr h a G0 L0 T0) →
Q n T1.
#h #a #G #L #T2 #Q #IB1 #IB2 #n #T1 #H
@(cpms_ind_sn … H) -n -T1
(* Sub confluence propery with restricted rt-transition for terms ***********)
fact cnv_cpms_teqx_strip_lpr_aux (h) (a) (G0) (L0) (T0):
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpms_conf_lpr h a G L T) →
- â\88\80n1,T1. â\9dªG0,L0â\9d« â\8a¢ T0 â\9e¡*[h,n1] T1 â\86\92 â\9dªG0,L0â\9d« ⊢ T0 ![h,a] → T0 ≅ T1 →
- â\88\80n2,T2. â\9dªG0,L0â\9d« ⊢ T0 ➡[h,n2] T2 → T0 ≅ T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡[h,n2-n1] T & T1 â\89\85 T & â\9dªG0,L2â\9d« ⊢ T2 ➡*[h,n1-n2] T & T2 ≅ T.
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpms_conf_lpr h a G L T) →
+ â\88\80n1,T1. â\9d¨G0,L0â\9d© â\8a¢ T0 â\9e¡*[h,n1] T1 â\86\92 â\9d¨G0,L0â\9d© ⊢ T0 ![h,a] → T0 ≅ T1 →
+ â\88\80n2,T2. â\9d¨G0,L0â\9d© ⊢ T0 ➡[h,n2] T2 → T0 ≅ T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ T1 â\9e¡[h,n2-n1] T & T1 â\89\85 T & â\9d¨G0,L2â\9d© ⊢ T2 ➡*[h,n1-n2] T & T2 ≅ T.
#h #a #G #L0 #T0 #IH2 #IH1 #n1 #T1 #H1T01 #H0T0 #H2T01
@(cpms_teqx_ind_sn … H1T01 H0T0 H2T01 IH1 IH2) -n1 -T0
[ #H0T1 #n2 #T2 #H1T12 #H2T12 #L1 #HL01 #L2 #HL02
qed-.
fact cnv_cpms_teqx_conf_lpr_aux (h) (a) (G0) (L0) (T0):
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« > â\9dªG,L,Tâ\9d« → IH_cnv_cpms_conf_lpr h a G L T) →
- â\88\80n1,T1. â\9dªG0,L0â\9d« â\8a¢ T0 â\9e¡*[h,n1] T1 â\86\92 â\9dªG0,L0â\9d« ⊢ T0 ![h,a] → T0 ≅ T1 →
- â\88\80n2,T2. â\9dªG0,L0â\9d« ⊢ T0 ➡*[h,n2] T2 → T0 ≅ T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡*[h,n2-n1] T & T1 â\89\85 T & â\9dªG0,L2â\9d« ⊢ T2 ➡*[h,n1-n2] T & T2 ≅ T.
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9d¨G0,L0,T0â\9d© > â\9d¨G,L,Tâ\9d© → IH_cnv_cpms_conf_lpr h a G L T) →
+ â\88\80n1,T1. â\9d¨G0,L0â\9d© â\8a¢ T0 â\9e¡*[h,n1] T1 â\86\92 â\9d¨G0,L0â\9d© ⊢ T0 ![h,a] → T0 ≅ T1 →
+ â\88\80n2,T2. â\9d¨G0,L0â\9d© ⊢ T0 ➡*[h,n2] T2 → T0 ≅ T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ T1 â\9e¡*[h,n2-n1] T & T1 â\89\85 T & â\9d¨G0,L2â\9d© ⊢ T2 ➡*[h,n1-n2] T & T2 ≅ T.
#h #a #G #L0 #T0 #IH2 #IH1 #n1 #T1 #H1T01 #H0T0 #H2T01
generalize in match IH1; generalize in match IH2;
@(cpms_teqx_ind_sn … H1T01 H0T0 H2T01 IH1 IH2) -n1 -T0
(* Properties with t-unbound whd evaluation on terms ************************)
lemma cnv_cpmuwe_trans (h) (a) (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ![h,a] →
- â\88\80n,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*ð\9d\90\8dð\9d\90\96*[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T2 ![h,a].
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T1 ![h,a] →
+ â\88\80n,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*ð\9d\90\8dð\9d\90\96*[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T2 ![h,a].
/3 width=4 by cpmuwe_fwd_cpms, cnv_cpms_trans/ qed-.
lemma cnv_R_cpmuwe_total (h) (a) (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ![h,a] → ∃n. R_cpmuwe h G L T1 n.
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T1 ![h,a] → ∃n. R_cpmuwe h G L T1 n.
/4 width=3 by cnv_fwd_fsb, fsb_inv_csx, R_cpmuwe_total_csx/ qed-.
(* Main inversions with head evaluation for t-bound rt-transition on terms **)
theorem cnv_cpmuwe_mono (h) (a) (G) (L):
- â\88\80T0. â\9dªG,Lâ\9d« ⊢ T0 ![h,a] →
- â\88\80n1,T1. â\9dªG,Lâ\9d« ⊢ T0 ➡*𝐍𝐖*[h,n1] T1 →
- â\88\80n2,T2. â\9dªG,Lâ\9d« ⊢ T0 ➡*𝐍𝐖*[h,n2] T2 →
- â\88§â\88§ â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h,n2-n1,n1-n2] T2 & T1 ≃ T2.
+ â\88\80T0. â\9d¨G,Lâ\9d© ⊢ T0 ![h,a] →
+ â\88\80n1,T1. â\9d¨G,Lâ\9d© ⊢ T0 ➡*𝐍𝐖*[h,n1] T1 →
+ â\88\80n2,T2. â\9d¨G,Lâ\9d© ⊢ T0 ➡*𝐍𝐖*[h,n2] T2 →
+ â\88§â\88§ â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h,n2-n1,n1-n2] T2 & T1 ≃ T2.
#h #a #G #L #T0 #HT0 #n1 #T1 * #HT01 #HT1 #n2 #T2 * #HT02 #HT2
elim (cnv_cpms_conf … HT0 … HT01 … HT02) -T0 #T0 #HT10 #HT20
/4 width=4 by cpms_div, teqw_canc_dx, conj/
(* Advanced Properties with t-unbound whd evaluation on terms ***************)
lemma cnv_R_cpmuwe_dec (h) (a) (G) (L):
- â\88\80T. â\9dªG,Lâ\9d« ⊢ T ![h,a] → ∀n. Decidable (R_cpmuwe h G L T n).
+ â\88\80T. â\9d¨G,Lâ\9d© ⊢ T ![h,a] → ∀n. Decidable (R_cpmuwe h G L T n).
#h #a #G #L #T1 #HT1 #n
elim (cnv_fwd_aaa … HT1) #A #HA
elim (cpmre_total_aaa h n … HA) -HA #T2 #HT12
(* Forward lemmas with t-bound t-computarion for terms **********************)
lemma cpts_cpms_conf_eq (h) (n) (a) (G) (L):
- â\88\80T0. â\9dªG,Lâ\9d« â\8a¢ T0 ![h,a] â\86\92 â\88\80T1. â\9dªG,Lâ\9d« ⊢ T0 ⬆*[h,n] T1 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T0 â\9e¡*[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+ â\88\80T0. â\9d¨G,Lâ\9d© â\8a¢ T0 ![h,a] â\86\92 â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T0 ⬆*[h,n] T1 →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T0 â\9e¡*[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
#h #a #n #G #L #T0 #HT0 #T1 #HT01 #T2 #HT02
/3 width=6 by cpts_fwd_cpms, cnv_cpms_conf_eq/
qed-.
(* Inversion lemmas with t-bound t-computarion for terms ********************)
lemma cnv_inv_cast_cpts (h) (a) (nu) (nt) (G) (L):
- â\88\80U1. â\9dªG,Lâ\9d« â\8a¢ U1 ![h,a] â\86\92 â\88\80U2. â\9dªG,Lâ\9d« ⊢ U1 ⬆*[h,nu] U2 →
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬆*[h,nt] T2 →
- â\9dªG,Lâ\9d« â\8a¢ U1 â¬\8c*[h,nu,nt] T1 â\86\92 â\9dªG,Lâ\9d« ⊢ U2 ⬌*[h] T2.
+ â\88\80U1. â\9d¨G,Lâ\9d© â\8a¢ U1 ![h,a] â\86\92 â\88\80U2. â\9d¨G,Lâ\9d© ⊢ U1 ⬆*[h,nu] U2 →
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬆*[h,nt] T2 →
+ â\9d¨G,Lâ\9d© â\8a¢ U1 â¬\8c*[h,nu,nt] T1 â\86\92 â\9d¨G,Lâ\9d© ⊢ U2 ⬌*[h] T2.
#h #a #nu #nt #G #L #U1 #HU1 #U2 #HU12 #T1 #HT1 #T2 #HT12 * #X1 #HUX1 #HTX1
/3 width=8 by cpts_cpms_conf_eq, cpcs_canc_dx/
qed-.
lemma cnv_inv_appl_cpts (h) (a) (nv) (nt) (p) (G) (L):
- â\88\80V1. â\9dªG,Lâ\9d« â\8a¢ V1 ![h,a] â\86\92 â\88\80V2. â\9dªG,Lâ\9d« ⊢ V1 ⬆*[h,nv] V2 →
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬆*[h,nt] T2 →
- â\88\80V0. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡*[h,nv] V0 â\86\92 â\88\80T0. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,nt] ⓛ[p]V0.T0 →
- â\88\83â\88\83W0,U0. â\9dªG,Lâ\9d« â\8a¢ V2 â\9e¡*[h,0] W0 & â\9dªG,Lâ\9d« ⊢ T2 ➡*[h,0] ⓛ[p]W0.U0.
+ â\88\80V1. â\9d¨G,Lâ\9d© â\8a¢ V1 ![h,a] â\86\92 â\88\80V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬆*[h,nv] V2 →
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬆*[h,nt] T2 →
+ â\88\80V0. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡*[h,nv] V0 â\86\92 â\88\80T0. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,nt] ⓛ[p]V0.T0 →
+ â\88\83â\88\83W0,U0. â\9d¨G,Lâ\9d© â\8a¢ V2 â\9e¡*[h,0] W0 & â\9d¨G,Lâ\9d© ⊢ T2 ➡*[h,0] ⓛ[p]W0.U0.
#h #a #nv #nt #p #G #L #V1 #HV1 #V2 #HV12 #T1 #HT1 #T2 #HT12 #V0 #HV20 #T0 #HT20
lapply (cpts_cpms_conf_eq … HV1 … HV12 … HV20) -nv -V1 #HV20
lapply (cpts_cpms_conf_eq … HT1 … HT12 … HT20) -nt -T1 #HT20
(* Properties with t-bound t-computarion for terms **************************)
lemma cnv_cast_cpts (h) (a) (nu) (nt) (G) (L):
- â\88\80U1. â\9dªG,Lâ\9d« â\8a¢ U1 ![h,a] â\86\92 â\88\80U2. â\9dªG,Lâ\9d« ⊢ U1 ⬆*[h,nu] U2 →
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬆*[h,nt] T2 →
- â\9dªG,Lâ\9d« â\8a¢ U2 â¬\8c*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ U1 ⬌*[h,nu,nt] T1.
+ â\88\80U1. â\9d¨G,Lâ\9d© â\8a¢ U1 ![h,a] â\86\92 â\88\80U2. â\9d¨G,Lâ\9d© ⊢ U1 ⬆*[h,nu] U2 →
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬆*[h,nt] T2 →
+ â\9d¨G,Lâ\9d© â\8a¢ U2 â¬\8c*[h] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ U1 ⬌*[h,nu,nt] T1.
#h #a #nu #nt #G #L #U1 #HU1 #U2 #HU12 #T1 #HT1 #T2 #HT12 #HUT2
elim (cpcs_inv_cprs … HUT2) -HUT2 #X2 #HUX2 #HTX2
/3 width=5 by cpts_cprs_trans, cpms_div/
qed-.
lemma cnv_appl_cpts (h) (a) (nv) (nt) (p) (G) (L):
- â\88\80V1. â\9dªG,Lâ\9d« â\8a¢ V1 ![h,a] â\86\92 â\88\80V2. â\9dªG,Lâ\9d« ⊢ V1 ⬆*[h,nv] V2 →
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬆*[h,nt] T2 →
- â\88\80V0. â\9dªG,Lâ\9d« â\8a¢ V2 â\9e¡*[h,0] V0 â\86\92 â\88\80T0. â\9dªG,Lâ\9d« ⊢ T2 ➡*[h,0] ⓛ[p]V0.T0 →
- â\88\83â\88\83W0,U0. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡*[h,nv] W0 & â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,nt] ⓛ[p]W0.U0.
+ â\88\80V1. â\9d¨G,Lâ\9d© â\8a¢ V1 ![h,a] â\86\92 â\88\80V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬆*[h,nv] V2 →
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬆*[h,nt] T2 →
+ â\88\80V0. â\9d¨G,Lâ\9d© â\8a¢ V2 â\9e¡*[h,0] V0 â\86\92 â\88\80T0. â\9d¨G,Lâ\9d© ⊢ T2 ➡*[h,0] ⓛ[p]V0.T0 →
+ â\88\83â\88\83W0,U0. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡*[h,nv] W0 & â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,nt] ⓛ[p]W0.U0.
#h #a #nv #nt #p #G #L #V1 #HV1 #V2 #HV12 #T1 #HT1 #T2 #HT12 #V0 #HV20 #T0 #HT20
/3 width=6 by cpts_cprs_trans, ex2_2_intro/
qed-.
(* Basic_2A1: uses: snv_lref *)
lemma cnv_lref_drops (h) (a) (G):
- â\88\80I,K,V,i,L. â\9dªG,Kâ\9d« ⊢ V ![h,a] →
- â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 â\9dªG,Lâ\9d« ⊢ #i ![h,a].
+ â\88\80I,K,V,i,L. â\9d¨G,Kâ\9d© ⊢ V ![h,a] →
+ â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 â\9d¨G,Lâ\9d© ⊢ #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):
- â\88\80i,L. â\9dªG,Lâ\9d« ⊢ #i ![h,a] →
- â\88\83â\88\83I,K,V. â\87©[i] L â\89\98 K.â\93\91[I]V & â\9dªG,Kâ\9d« ⊢ V ![h,a].
+ â\88\80i,L. â\9d¨G,Lâ\9d© ⊢ #i ![h,a] →
+ â\88\83â\88\83I,K,V. â\87©[i] L â\89\98 K.â\93\91[I]V & â\9d¨G,Kâ\9d© ⊢ V ![h,a].
#h #a #G #i elim i -i
[ #L #H
elim (cnv_inv_zero … H) -H #I #K #V #HV #H destruct
qed-.
lemma cnv_inv_lref_pair (h) (a) (G):
- â\88\80i,L. â\9dªG,Lâ\9d« ⊢ #i ![h,a] →
- â\88\80I,K,V. â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 â\9dªG,Kâ\9d« ⊢ V ![h,a].
+ â\88\80i,L. â\9d¨G,Lâ\9d© ⊢ #i ![h,a] →
+ â\88\80I,K,V. â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 â\9d¨G,Kâ\9d© ⊢ 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. â\9dªG,Lâ\9d« ⊢ #i ![h,a] → ⇩*[b,𝐔❨i❩] L ≘ ⋆ → ⊥.
+ â\88\80i,L. â\9d¨G,Lâ\9d© ⊢ #i ![h,a] → ⇩*[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
qed-.
lemma cnv_inv_lref_unit (h) (a) (G):
- â\88\80i,L. â\9dªG,Lâ\9d« ⊢ #i ![h,a] →
+ â\88\80i,L. â\9d¨G,Lâ\9d© ⊢ #i ![h,a] →
∀I,K. ⇩[i] L ≘ K.ⓤ[I] → ⊥.
#h #a #G #i #L #H #I #K #HLK
elim (cnv_inv_lref_drops … H) -H #Z #Y #X #HLY #_
(* main properties with evaluations for rt-transition on terms **************)
theorem cnv_dec (h) (a) (G) (L) (T): ac_props a →
- Decidable (â\9dªG,Lâ\9d« ⊢ T ![h,a]).
+ Decidable (â\9d¨G,Lâ\9d© ⊢ T ![h,a]).
#h #a #G #L #T #Ha
@(fqup_wf_ind_eq (Ⓣ) … G L T) -G -L -T #G0 #L0 #T0 #IH #G #L * * [|||| * ]
[ #s #HG #HL #HT destruct -Ha -IH
(* Basic_2A1: uses: snv_fqu_conf *)
lemma cnv_fqu_conf (h) (a):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82 â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1â\9d« â\8a¢ T1 ![h,a] â\86\92 â\9dªG2,L2â\9d« ⊢ T2 ![h,a].
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82 â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1â\9d© â\8a¢ T1 ![h,a] â\86\92 â\9d¨G2,L2â\9d© ⊢ T2 ![h,a].
#h #a #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ #I1 #G1 #L1 #V1 #H
elim (cnv_inv_zero … H) -H #I2 #L2 #V2 #HV2 #H destruct //
(* Basic_2A1: uses: snv_fquq_conf *)
lemma cnv_fquq_conf (h) (a):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82⸮ â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1â\9d« â\8a¢ T1 ![h,a] â\86\92 â\9dªG2,L2â\9d« ⊢ T2 ![h,a].
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82⸮ â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1â\9d© â\8a¢ T1 ![h,a] â\86\92 â\9d¨G2,L2â\9d© ⊢ T2 ![h,a].
#h #a #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H [|*]
/2 width=5 by cnv_fqu_conf/
qed-.
(* Basic_2A1: uses: snv_fqup_conf *)
lemma cnv_fqup_conf (h) (a):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82+ â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1â\9d« â\8a¢ T1 ![h,a] â\86\92 â\9dªG2,L2â\9d« ⊢ T2 ![h,a].
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82+ â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1â\9d© â\8a¢ T1 ![h,a] â\86\92 â\9d¨G2,L2â\9d© ⊢ T2 ![h,a].
#h #a #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
/3 width=5 by fqup_strap1, cnv_fqu_conf/
qed-.
(* Basic_2A1: uses: snv_fqus_conf *)
lemma cnv_fqus_conf (h) (a):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82* â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1â\9d« â\8a¢ T1 ![h,a] â\86\92 â\9dªG2,L2â\9d« ⊢ T2 ![h,a].
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82* â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1â\9d© â\8a¢ T1 ![h,a] â\86\92 â\9d¨G2,L2â\9d© ⊢ T2 ![h,a].
#h #a #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fqus_inv_fqup … H) -H [|*]
/2 width=5 by cnv_fqup_conf/
qed-.
(* Note: this is the "big tree" theorem *)
(* Basic_2A1: uses: snv_fwd_fsb *)
lemma cnv_fwd_fsb (h) (a):
- â\88\80G,L,T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\89¥ð\9d\90\92 â\9dªG,L,Tâ\9d«.
+ â\88\80G,L,T. â\9d¨G,Lâ\9d© â\8a¢ T ![h,a] â\86\92 â\89¥ð\9d\90\92 â\9d¨G,L,Tâ\9d©.
#h #a #G #L #T #H elim (cnv_fwd_aaa … H) -H /2 width=2 by aaa_fsb/
qed-.
(* Forward lemmas with strongly rt-normalizing terms ************************)
lemma cnv_fwd_csx (h) (a):
- â\88\80G,L,T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T.
+ â\88\80G,L,T. â\9d¨G,Lâ\9d© â\8a¢ T ![h,a] â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T.
#h #a #G #L #T #H
/3 width=3 by cnv_fwd_fsb, fsb_inv_csx/
qed-.
(* Inversion lemmas with proper parallel rst-computation for closures *******)
lemma cnv_fpbg_refl_false (h) (a):
- â\88\80G,L,T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\9dªG,L,Tâ\9d« > â\9dªG,L,Tâ\9d« → ⊥.
+ â\88\80G,L,T. â\9d¨G,Lâ\9d© â\8a¢ T ![h,a] â\86\92 â\9d¨G,L,Tâ\9d© > â\9d¨G,L,Tâ\9d© → ⊥.
/3 width=7 by cnv_fwd_fsb, fsb_fpbg_refl_false/ qed-.
(* Main preservation properties *********************************************)
(* Basic_2A1: uses: snv_preserve *)
-lemma cnv_preserve (h) (a): â\88\80G,L,T. â\9dªG,Lâ\9d« ⊢ T ![h,a] →
+lemma cnv_preserve (h) (a): â\88\80G,L,T. â\9d¨G,Lâ\9d© ⊢ T ![h,a] →
∧∧ IH_cnv_cpms_conf_lpr h a G L T
& IH_cnv_cpm_trans_lpr h a G L T.
#h #a #G #L #T #HT
(* Advanced preservation properties *****************************************)
lemma cnv_cpms_conf (h) (a) (G) (L):
- â\88\80T0. â\9dªG,Lâ\9d« ⊢ T0 ![h,a] →
- â\88\80n1,T1. â\9dªG,Lâ\9d« â\8a¢ T0 â\9e¡*[h,n1] T1 â\86\92 â\88\80n2,T2. â\9dªG,Lâ\9d« ⊢ T0 ➡*[h,n2] T2 →
- â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n2-n1] T & â\9dªG,Lâ\9d« ⊢ T2 ➡*[h,n1-n2] T.
+ â\88\80T0. â\9d¨G,Lâ\9d© ⊢ T0 ![h,a] →
+ â\88\80n1,T1. â\9d¨G,Lâ\9d© â\8a¢ T0 â\9e¡*[h,n1] T1 â\86\92 â\88\80n2,T2. â\9d¨G,Lâ\9d© ⊢ T0 ➡*[h,n2] T2 →
+ â\88\83â\88\83T. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n2-n1] T & â\9d¨G,Lâ\9d© ⊢ T2 ➡*[h,n1-n2] T.
/2 width=8 by cnv_cpms_conf_lpr/ qed-.
(* Basic_2A1: uses: snv_cprs_lpr *)
qed-.
lemma cnv_cpm_trans (h) (a) (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ![h,a] →
- â\88\80n,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T2 ![h,a].
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T1 ![h,a] →
+ â\88\80n,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T2 ![h,a].
/2 width=6 by cnv_cpm_trans_lpr/ qed-.
(* Note: this is the preservation property *)
lemma cnv_cpms_trans (h) (a) (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ![h,a] →
- â\88\80n,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T2 ![h,a].
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T1 ![h,a] →
+ â\88\80n,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T2 ![h,a].
/2 width=6 by cnv_cpms_trans_lpr/ qed-.
lemma cnv_lpr_trans (h) (a) (G):
- â\88\80L1,T. â\9dªG,L1â\9d« â\8a¢ T ![h,a] â\86\92 â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9dªG,L2â\9d« ⊢ T ![h,a].
+ â\88\80L1,T. â\9d¨G,L1â\9d© â\8a¢ T ![h,a] â\86\92 â\88\80L2. â\9d¨G,L1â\9d© â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9d¨G,L2â\9d© ⊢ T ![h,a].
/2 width=6 by cnv_cpm_trans_lpr/ qed-.
lemma cnv_lprs_trans (h) (a) (G):
- â\88\80L1,T. â\9dªG,L1â\9d« â\8a¢ T ![h,a] â\86\92 â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡*[h,0] L2 â\86\92 â\9dªG,L2â\9d« ⊢ T ![h,a].
+ â\88\80L1,T. â\9d¨G,L1â\9d© â\8a¢ T ![h,a] â\86\92 â\88\80L2. â\9d¨G,L1â\9d© â\8a¢ â\9e¡*[h,0] L2 â\86\92 â\9d¨G,L2â\9d© ⊢ T ![h,a].
#h #a #G #L1 #T #HT #L2 #H
@(lprs_ind_dx … H) -L2 /2 width=3 by cnv_lpr_trans/
qed-.
(* Forward lemmas with r-equivalence ****************************************)
lemma cnv_cpms_conf_eq (h) (a) (n) (G) (L):
- â\88\80T. â\9dªG,Lâ\9d« ⊢ T ![h,a] →
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n] T1 â\86\92 â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+ â\88\80T. â\9d¨G,Lâ\9d© ⊢ T ![h,a] →
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,n] T1 â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
#h #a #n #G #L #T #HT #T1 #HT1 #T2 #HT2
elim (cnv_cpms_conf … HT … HT1 … HT2) -T <minus_n_n #T #HT1 #HT2
/2 width=3 by cprs_div/
qed-.
lemma cnv_cpms_fwd_appl_sn_decompose (h) (a) (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« â\8a¢ â\93\90V.T ![h,a] â\86\92 â\88\80n,X. â\9dªG,Lâ\9d« ⊢ ⓐV.T ➡*[h,n] X →
- â\88\83â\88\83U. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] & â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n] U & â\9dªG,Lâ\9d« ⊢ ⓐV.U ⬌*[h] X.
+ â\88\80V,T. â\9d¨G,Lâ\9d© â\8a¢ â\93\90V.T ![h,a] â\86\92 â\88\80n,X. â\9d¨G,Lâ\9d© ⊢ ⓐV.T ➡*[h,n] X →
+ â\88\83â\88\83U. â\9d¨G,Lâ\9d© â\8a¢ T ![h,a] & â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,n] U & â\9d¨G,Lâ\9d© ⊢ ⓐV.U ⬌*[h] X.
#h #a #G #L #V #T #H0 #n #X #HX
elim (cnv_inv_appl … H0) #m #p #W #U #_ #_ #HT #_ #_ -m -p -W -U
elim (cnv_fwd_cpms_total h … n … HT) #U #HTU
(* Properties with t-bound rt-equivalence for terms *************************)
lemma cnv_cpes_dec (h) (a) (n1) (n2) (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T2 ![h,a] →
- Decidable â\80¦ (â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h,n1,n2] T2).
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T2 ![h,a] →
+ Decidable â\80¦ (â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h,n1,n2] T2).
#h #a #n1 #n2 #G #L #T1 #HT1 #T2 #HT2
elim (cnv_fwd_aaa … HT1) #A1 #HA1
elim (cnv_fwd_aaa … HT2) #A2 #HA2
(* Inductive premises for the preservation results **************************)
definition IH_cnv_cpm_trans_lpr (h) (a): relation3 genv lenv term ≝
- λG,L1,T1. â\9dªG,L1â\9d« ⊢ T1 ![h,a] →
- â\88\80n,T2. â\9dªG,L1â\9d« ⊢ T1 ➡[h,n] T2 →
- â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9dªG,L2â\9d« ⊢ T2 ![h,a].
+ λG,L1,T1. â\9d¨G,L1â\9d© ⊢ T1 ![h,a] →
+ â\88\80n,T2. â\9d¨G,L1â\9d© ⊢ T1 ➡[h,n] T2 →
+ â\88\80L2. â\9d¨G,L1â\9d© â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9d¨G,L2â\9d© ⊢ T2 ![h,a].
definition IH_cnv_cpms_trans_lpr (h) (a): relation3 genv lenv term ≝
- λG,L1,T1. â\9dªG,L1â\9d« ⊢ T1 ![h,a] →
- â\88\80n,T2. â\9dªG,L1â\9d« ⊢ T1 ➡*[h,n] T2 →
- â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9dªG,L2â\9d« ⊢ T2 ![h,a].
+ λG,L1,T1. â\9d¨G,L1â\9d© ⊢ T1 ![h,a] →
+ â\88\80n,T2. â\9d¨G,L1â\9d© ⊢ T1 ➡*[h,n] T2 →
+ â\88\80L2. â\9d¨G,L1â\9d© â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9d¨G,L2â\9d© ⊢ T2 ![h,a].
definition IH_cnv_cpm_conf_lpr (h) (a): relation3 genv lenv term ≝
- λG,L0,T0. â\9dªG,L0â\9d« ⊢ T0 ![h,a] →
- â\88\80n1,T1. â\9dªG,L0â\9d« â\8a¢ T0 â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9dªG,L0â\9d« ⊢ T0 ➡[h,n2] T2 →
- â\88\80L1. â\9dªG,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[h,n2-n1] T & â\9dªG,L2â\9d« ⊢ T2 ➡*[h,n1-n2] T.
+ λG,L0,T0. â\9d¨G,L0â\9d© ⊢ T0 ![h,a] →
+ â\88\80n1,T1. â\9d¨G,L0â\9d© â\8a¢ T0 â\9e¡[h,n1] T1 â\86\92 â\88\80n2,T2. â\9d¨G,L0â\9d© ⊢ T0 ➡[h,n2] T2 →
+ â\88\80L1. â\9d¨G,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ T1 â\9e¡*[h,n2-n1] T & â\9d¨G,L2â\9d© ⊢ T2 ➡*[h,n1-n2] T.
definition IH_cnv_cpms_strip_lpr (h) (a): relation3 genv lenv term ≝
- λG,L0,T0. â\9dªG,L0â\9d« ⊢ T0 ![h,a] →
- â\88\80n1,T1. â\9dªG,L0â\9d« â\8a¢ T0 â\9e¡*[h,n1] T1 â\86\92 â\88\80n2,T2. â\9dªG,L0â\9d« ⊢ T0 ➡[h,n2] T2 →
- â\88\80L1. â\9dªG,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[h,n2-n1] T & â\9dªG,L2â\9d« ⊢ T2 ➡*[h,n1-n2] T.
+ λG,L0,T0. â\9d¨G,L0â\9d© ⊢ T0 ![h,a] →
+ â\88\80n1,T1. â\9d¨G,L0â\9d© â\8a¢ T0 â\9e¡*[h,n1] T1 â\86\92 â\88\80n2,T2. â\9d¨G,L0â\9d© ⊢ T0 ➡[h,n2] T2 →
+ â\88\80L1. â\9d¨G,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ T1 â\9e¡*[h,n2-n1] T & â\9d¨G,L2â\9d© ⊢ T2 ➡*[h,n1-n2] T.
definition IH_cnv_cpms_conf_lpr (h) (a): relation3 genv lenv term ≝
- λG,L0,T0. â\9dªG,L0â\9d« ⊢ T0 ![h,a] →
- â\88\80n1,T1. â\9dªG,L0â\9d« â\8a¢ T0 â\9e¡*[h,n1] T1 â\86\92 â\88\80n2,T2. â\9dªG,L0â\9d« ⊢ T0 ➡*[h,n2] T2 →
- â\88\80L1. â\9dªG,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[h,n2-n1] T & â\9dªG,L2â\9d« ⊢ T2 ➡*[h,n1-n2] T.
+ λG,L0,T0. â\9d¨G,L0â\9d© ⊢ T0 ![h,a] →
+ â\88\80n1,T1. â\9d¨G,L0â\9d© â\8a¢ T0 â\9e¡*[h,n1] T1 â\86\92 â\88\80n2,T2. â\9d¨G,L0â\9d© ⊢ T0 ➡*[h,n2] T2 →
+ â\88\80L1. â\9d¨G,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ T1 â\9e¡*[h,n2-n1] T & â\9d¨G,L2â\9d© ⊢ T2 ➡*[h,n1-n2] T.
(* Auxiliary properties for preservation ************************************)
fact cnv_cpms_trans_lpr_sub (h) (a):
∀G0,L0,T0.
- (â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« > â\9dªG1,L1,T1â\9d« → IH_cnv_cpm_trans_lpr h a G1 L1 T1) →
- â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« > â\9dªG1,L1,T1â\9d« → IH_cnv_cpms_trans_lpr h a G1 L1 T1.
+ (â\88\80G1,L1,T1. â\9d¨G0,L0,T0â\9d© > â\9d¨G1,L1,T1â\9d© → IH_cnv_cpm_trans_lpr h a G1 L1 T1) →
+ â\88\80G1,L1,T1. â\9d¨G0,L0,T0â\9d© > â\9d¨G1,L1,T1â\9d© → IH_cnv_cpms_trans_lpr h a G1 L1 T1.
#h #a #G0 #L0 #T0 #IH #G1 #L1 #T1 #H01 #HT1 #n #T2 #H
@(cpms_ind_dx … H) -n -T2
/3 width=7 by fpbg_cpms_trans/
fact cnv_cpm_conf_lpr_sub (h) (a):
∀G0,L0,T0.
- (â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« > â\9dªG1,L1,T1â\9d« → IH_cnv_cpms_conf_lpr h a G1 L1 T1) →
- â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« > â\9dªG1,L1,T1â\9d« → IH_cnv_cpm_conf_lpr h a G1 L1 T1.
+ (â\88\80G1,L1,T1. â\9d¨G0,L0,T0â\9d© > â\9d¨G1,L1,T1â\9d© → IH_cnv_cpms_conf_lpr h a G1 L1 T1) →
+ â\88\80G1,L1,T1. â\9d¨G0,L0,T0â\9d© > â\9d¨G1,L1,T1â\9d© → IH_cnv_cpm_conf_lpr h a G1 L1 T1.
/3 width=8 by cpm_cpms/ qed-.
fact cnv_cpms_strip_lpr_sub (h) (a):
∀G0,L0,T0.
- (â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« > â\9dªG1,L1,T1â\9d« → IH_cnv_cpms_conf_lpr h a G1 L1 T1) →
- â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« > â\9dªG1,L1,T1â\9d« → IH_cnv_cpms_strip_lpr h a G1 L1 T1.
+ (â\88\80G1,L1,T1. â\9d¨G0,L0,T0â\9d© > â\9d¨G1,L1,T1â\9d© → IH_cnv_cpms_conf_lpr h a G1 L1 T1) →
+ â\88\80G1,L1,T1. â\9d¨G0,L0,T0â\9d© > â\9d¨G1,L1,T1â\9d© → IH_cnv_cpms_strip_lpr h a G1 L1 T1.
/3 width=8 by cpm_cpms/ qed-.
inductive lsubv (h) (a) (G): relation lenv ≝
| lsubv_atom: lsubv h a G (⋆) (⋆)
| lsubv_bind: ∀I,L1,L2. lsubv h a G L1 L2 → lsubv h a G (L1.ⓘ[I]) (L2.ⓘ[I])
-| lsubv_beta: â\88\80L1,L2,W,V. â\9dªG,L1â\9d« ⊢ ⓝW.V ![h,a] →
+| lsubv_beta: â\88\80L1,L2,W,V. â\9d¨G,L1â\9d© ⊢ ⓝW.V ![h,a] →
lsubv h a G L1 L2 → lsubv h a G (L1.ⓓⓝW.V) (L2.ⓛW)
.
fact lsubv_inv_bind_sn_aux (h) (a) (G): ∀L1,L2. G ⊢ L1 ⫃![h,a] L2 →
∀I,K1. L1 = K1.ⓘ[I] →
∨∨ ∃∃K2. G ⊢ K1 ⫃![h,a] K2 & L2 = K2.ⓘ[I]
- | â\88\83â\88\83K2,W,V. â\9dªG,K1â\9d« ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2
+ | â\88\83â\88\83K2,W,V. â\9d¨G,K1â\9d© ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2
& I = BPair Abbr (ⓝW.V) & L2 = K2.ⓛW.
#h #a #G #L1 #L2 * -L1 -L2
[ #J #K1 #H destruct
lemma lsubv_inv_bind_sn (h) (a) (G):
∀I,K1,L2. G ⊢ K1.ⓘ[I] ⫃![h,a] L2 →
∨∨ ∃∃K2. G ⊢ K1 ⫃![h,a] K2 & L2 = K2.ⓘ[I]
- | â\88\83â\88\83K2,W,V. â\9dªG,K1â\9d« ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2
+ | â\88\83â\88\83K2,W,V. â\9d¨G,K1â\9d© ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2
& I = BPair Abbr (ⓝW.V) & L2 = K2.ⓛW.
/2 width=3 by lsubv_inv_bind_sn_aux/ qed-.
∀L1,L2. G ⊢ L1 ⫃![h,a] L2 →
∀I,K2. L2 = K2.ⓘ[I] →
∨∨ ∃∃K1. G ⊢ K1 ⫃![h,a] K2 & L1 = K1.ⓘ[I]
- | â\88\83â\88\83K1,W,V. â\9dªG,K1â\9d« ⊢ ⓝW.V ![h,a] &
+ | â\88\83â\88\83K1,W,V. â\9d¨G,K1â\9d© ⊢ ⓝW.V ![h,a] &
G ⊢ K1 ⫃![h,a] K2 & I = BPair Abst W & L1 = K1.ⓓⓝW.V.
#h #a #G #L1 #L2 * -L1 -L2
[ #J #K2 #H destruct
lemma lsubv_inv_bind_dx (h) (a) (G):
∀I,L1,K2. G ⊢ L1 ⫃![h,a] K2.ⓘ[I] →
∨∨ ∃∃K1. G ⊢ K1 ⫃![h,a] K2 & L1 = K1.ⓘ[I]
- | â\88\83â\88\83K1,W,V. â\9dªG,K1â\9d« ⊢ ⓝW.V ![h,a] &
+ | â\88\83â\88\83K1,W,V. â\9d¨G,K1â\9d© ⊢ ⓝW.V ![h,a] &
G ⊢ K1 ⫃![h,a] K2 & I = BPair Abst W & L1 = K1.ⓓⓝW.V.
/2 width=3 by lsubv_inv_bind_dx_aux/ qed-.
(* Basic_2A1: uses: lsubsv_snv_trans *)
lemma lsubv_cnv_trans (h) (a) (G):
- â\88\80L2,T. â\9dªG,L2â\9d« ⊢ T ![h,a] →
- â\88\80L1. G â\8a¢ L1 â«\83![h,a] L2 â\86\92 â\9dªG,L1â\9d« ⊢ T ![h,a].
+ â\88\80L2,T. â\9d¨G,L2â\9d© ⊢ T ![h,a] →
+ â\88\80L1. G â\8a¢ L1 â«\83![h,a] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ T ![h,a].
#h #a #G #L2 #T #H elim H -G -L2 -T //
[ #I #G #K2 #V #HV #IH #L1 #H
elim (lsubv_inv_bind_dx … H) -H * /3 width=1 by cnv_zero/
(* Properties with generic slicing for local environments *******************)
-(* Note: the premise ð\9d\90\94â\9dªfâ\9d« cannot be removed *)
+(* Note: the premise ð\9d\90\94â\9d¨fâ\9d© cannot be removed *)
(* 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â\9dªfâ\9d« → ⇩*[b,f] L1 ≘ K1 →
+ â\88\80b,f,K1. ð\9d\90\94â\9d¨fâ\9d© → ⇩*[b,f] L1 ≘ K1 →
∃∃K2. G ⊢ K1 ⫃![h,a] K2 & ⇩*[b,f] L2 ≘ K2.
#h #a #G #L1 #L2 #H elim H -L1 -L2
[ /2 width=3 by ex2_intro/
]
qed-.
-(* Note: the premise ð\9d\90\94â\9dªfâ\9d« cannot be removed *)
+(* Note: the premise ð\9d\90\94â\9d¨fâ\9d© cannot be removed *)
(* 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â\9dªfâ\9d« → ⇩*[b,f] L2 ≘ K2 →
+ â\88\80b,f,K2. ð\9d\90\94â\9d¨fâ\9d© → ⇩*[b,f] L2 ≘ K2 →
∃∃K1. G ⊢ K1 ⫃![h,a] K2 & ⇩*[b,f] L1 ≘ K1.
#h #a #G #L1 #L2 #H elim H -L1 -L2
[ /2 width=3 by ex2_intro/
(* NATIVE TYPE ASSIGNMENT FOR TERMS *****************************************)
definition nta (h) (a): relation4 genv lenv term term ≝
- λG,L,T,U. â\9dªG,Lâ\9d« ⊢ ⓝU.T ![h,a].
+ λG,L,T,U. â\9d¨G,Lâ\9d© ⊢ ⓝU.T ![h,a].
interpretation "native type assignment (term)"
'Colon h a G L T U = (nta h a G L T U).
(* Basic_1: was by definition: ty3_sort *)
(* Basic_2A1: was by definition: nta_sort ntaa_sort *)
-lemma nta_sort (h) (a) (G) (L): â\88\80s. â\9dªG,Lâ\9d« ⊢ ⋆s :[h,a] ⋆(⫯[h]s).
+lemma nta_sort (h) (a) (G) (L): â\88\80s. â\9d¨G,Lâ\9d© ⊢ ⋆s :[h,a] ⋆(⫯[h]s).
#h #a #G #L #s /2 width=3 by cnv_sort, cnv_cast, cpms_sort/
qed.
lemma nta_bind_cnv (h) (a) (G) (K):
- â\88\80V. â\9dªG,Kâ\9d« ⊢ V ![h,a] →
- â\88\80I,T,U. â\9dªG,K.â\93\91[I]Vâ\9d« ⊢ T :[h,a] U →
- â\88\80p. â\9dªG,Kâ\9d« ⊢ ⓑ[p,I]V.T :[h,a] ⓑ[p,I]V.U.
+ â\88\80V. â\9d¨G,Kâ\9d© ⊢ V ![h,a] →
+ â\88\80I,T,U. â\9d¨G,K.â\93\91[I]Vâ\9d© ⊢ T :[h,a] U →
+ â\88\80p. â\9d¨G,Kâ\9d© ⊢ ⓑ[p,I]V.T :[h,a] ⓑ[p,I]V.U.
#h #a #G #K #V #HV #I #T #U #H #p
elim (cnv_inv_cast … H) -H #X #HU #HT #HUX #HTX
/3 width=5 by cnv_bind, cnv_cast, cpms_bind_dx/
(* Basic_2A1: was by definition: nta_cast *)
lemma nta_cast (h) (a) (G) (L):
- â\88\80T,U. â\9dªG,Lâ\9d« â\8a¢ T :[h,a] U â\86\92 â\9dªG,Lâ\9d« ⊢ ⓝU.T :[h,a] U.
+ â\88\80T,U. â\9d¨G,Lâ\9d© â\8a¢ T :[h,a] U â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓝU.T :[h,a] U.
#h #a #G #L #T #U #H
elim (cnv_inv_cast … H) #X #HU #HT #HUX #HTX
/3 width=3 by cnv_cast, cpms_eps/
(* Basic_1: was by definition: ty3_cast *)
lemma nta_cast_old (h) (a) (G) (L):
- â\88\80T0,T1. â\9dªG,Lâ\9d« ⊢ T0 :[h,a] T1 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 :[h,a] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⓝT1.T0 :[h,a] ⓝT2.T1.
+ â\88\80T0,T1. â\9d¨G,Lâ\9d© ⊢ T0 :[h,a] T1 →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T1 :[h,a] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓝT1.T0 :[h,a] ⓝT2.T1.
#h #a #G #L #T0 #T1 #H1 #T2 #H2
elim (cnv_inv_cast … H1) #X1 #_ #_ #HTX1 #HTX01
elim (cnv_inv_cast … H2) #X2 #_ #_ #HTX2 #HTX12
(* Basic inversion lemmas ***************************************************)
lemma nta_inv_gref_sn (h) (a) (G) (L):
- â\88\80X2,l. â\9dªG,Lâ\9d« ⊢ §l :[h,a] X2 → ⊥.
+ â\88\80X2,l. â\9d¨G,Lâ\9d© ⊢ §l :[h,a] X2 → ⊥.
#h #a #G #L #X2 #l #H
elim (cnv_inv_cast … H) -H #X #_ #H #_ #_
elim (cnv_inv_gref … H)
(* Basic_forward lemmas *****************************************************)
lemma nta_fwd_cnv_sn (h) (a) (G) (L):
- â\88\80T,U. â\9dªG,Lâ\9d« â\8a¢ T :[h,a] U â\86\92 â\9dªG,Lâ\9d« ⊢ T ![h,a].
+ â\88\80T,U. â\9d¨G,Lâ\9d© â\8a¢ T :[h,a] U â\86\92 â\9d¨G,Lâ\9d© ⊢ T ![h,a].
#h #a #G #L #T #U #H
elim (cnv_inv_cast … H) -H #X #_ #HT #_ #_ //
qed-.
(* Note: this is nta_fwd_correct_cnv *)
lemma nta_fwd_cnv_dx (h) (a) (G) (L):
- â\88\80T,U. â\9dªG,Lâ\9d« â\8a¢ T :[h,a] U â\86\92 â\9dªG,Lâ\9d« ⊢ U ![h,a].
+ â\88\80T,U. â\9d¨G,Lâ\9d© â\8a¢ T :[h,a] U â\86\92 â\9d¨G,Lâ\9d© ⊢ U ![h,a].
#h #a #G #L #T #U #H
elim (cnv_inv_cast … H) -H #X #HU #_ #_ #_ //
qed-.
(* Note: this means that no type is a universe *)
lemma nta_fwd_aaa (h) (a) (G) (L):
- â\88\80T,U. â\9dªG,Lâ\9d« â\8a¢ T :[h,a] U â\86\92 â\88\83â\88\83A. â\9dªG,Lâ\9d« â\8a¢ T â\81\9d A & â\9dªG,Lâ\9d« ⊢ U ⁝ A.
+ â\88\80T,U. â\9d¨G,Lâ\9d© â\8a¢ T :[h,a] U â\86\92 â\88\83â\88\83A. â\9d¨G,Lâ\9d© â\8a¢ T â\81\9d A & â\9d¨G,Lâ\9d© ⊢ U ⁝ A.
#h #a #G #L #T #U #H
elim (cnv_fwd_aaa … H) -H #A #H
elim (aaa_inv_cast … H) -H #HU #HT
(* Basic_1: uses: ty3_predicative *)
lemma nta_abst_predicative (h) (a) (p) (G) (L):
- â\88\80W,T. â\9dªG,Lâ\9d« ⊢ ⓛ[p]W.T :[h,a] W → ⊥.
+ â\88\80W,T. â\9d¨G,Lâ\9d© ⊢ ⓛ[p]W.T :[h,a] W → ⊥.
#h #a #p #G #L #W #T #H
elim (nta_fwd_aaa … H) -a -h #X #H #H1W
elim (aaa_inv_abst … H) -p #B #A #H2W #_ #H destruct -T
(* Basic_1: uses: ty3_repellent *)
theorem nta_abst_repellent (h) (a) (p) (G) (K):
- â\88\80W,T,U1. â\9dªG,Kâ\9d« ⊢ ⓛ[p]W.T :[h,a] U1 →
- â\88\80U2. â\9dªG,K.â\93\9bWâ\9d« ⊢ T :[h,a] U2 → ⇧[1] U1 ≘ U2 → ⊥.
+ â\88\80W,T,U1. â\9d¨G,Kâ\9d© ⊢ ⓛ[p]W.T :[h,a] U1 →
+ â\88\80U2. â\9d¨G,K.â\93\9bWâ\9d© ⊢ T :[h,a] U2 → ⇧[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
(* Properties with r-equivalence for terms **********************************)
lemma nta_conv_cnv (h) (a) (G) (L) (T):
- â\88\80U1. â\9dªG,Lâ\9d« ⊢ T :[h,a] U1 →
- â\88\80U2. â\9dªG,Lâ\9d« â\8a¢ U1 â¬\8c*[h] U2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ U2 ![h,a] â\86\92 â\9dªG,Lâ\9d« ⊢ T :[h,a] U2.
+ â\88\80U1. â\9d¨G,Lâ\9d© ⊢ T :[h,a] U1 →
+ â\88\80U2. â\9d¨G,Lâ\9d© â\8a¢ U1 â¬\8c*[h] U2 â\86\92 â\9d¨G,Lâ\9d© â\8a¢ U2 ![h,a] â\86\92 â\9d¨G,Lâ\9d© ⊢ T :[h,a] U2.
#h #a #G #L #T #U1 #H1 #U2 #HU12 #HU2
elim (cnv_inv_cast … H1) -H1 #X1 #HU1 #HT #HUX1 #HTX1
lapply (cpcs_cprs_conf … HUX1 … HU12) -U1 #H
(* Basic_1: was by definition: ty3_conv *)
(* Basic_2A1: was by definition: nta_conv ntaa_conv *)
lemma nta_conv (h) (a) (G) (L) (T):
- â\88\80U1. â\9dªG,Lâ\9d« ⊢ T :[h,a] U1 →
- â\88\80U2. â\9dªG,Lâ\9d« ⊢ U1 ⬌*[h] U2 →
- â\88\80W2. â\9dªG,Lâ\9d« â\8a¢ U2 :[h,a] W2 â\86\92 â\9dªG,Lâ\9d« ⊢ T :[h,a] U2.
+ â\88\80U1. â\9d¨G,Lâ\9d© ⊢ T :[h,a] U1 →
+ â\88\80U2. â\9d¨G,Lâ\9d© ⊢ U1 ⬌*[h] U2 →
+ â\88\80W2. â\9d¨G,Lâ\9d© â\8a¢ U2 :[h,a] W2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T :[h,a] U2.
#h #a #G #L #T #U1 #H1 #U2 #HU12 #W2 #H2
/3 width=3 by nta_conv_cnv, nta_fwd_cnv_sn/
qed-.
(* Basic_1: was: ty3_gen_sort *)
(* Basic_2A1: was: nta_inv_sort1 *)
lemma nta_inv_sort_sn (h) (a) (G) (L) (X2):
- â\88\80s. â\9dªG,Lâ\9d« ⊢ ⋆s :[h,a] X2 →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ â\8b\86(⫯[h]s) â¬\8c*[h] X2 & â\9dªG,Lâ\9d« ⊢ X2 ![h,a].
+ â\88\80s. â\9d¨G,Lâ\9d© ⊢ ⋆s :[h,a] X2 →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ â\8b\86(⫯[h]s) â¬\8c*[h] X2 & â\9d¨G,Lâ\9d© ⊢ X2 ![h,a].
#h #a #G #L #X2 #s #H
elim (cnv_inv_cast … H) -H #X1 #HX2 #_ #HX21 #H
lapply (cpms_inv_sort1 … H) -H #H destruct
qed-.
lemma nta_inv_ldec_sn_cnv (h) (a) (G) (K) (V):
- â\88\80X2. â\9dªG,K.â\93\9bVâ\9d« ⊢ #0 :[h,a] X2 →
- â\88\83â\88\83U. â\9dªG,Kâ\9d« â\8a¢ V ![h,a] & â\87§[1] V â\89\98 U & â\9dªG,K.â\93\9bVâ\9d« â\8a¢ U â¬\8c*[h] X2 & â\9dªG,K.â\93\9bVâ\9d« ⊢ X2 ![h,a].
+ â\88\80X2. â\9d¨G,K.â\93\9bVâ\9d© ⊢ #0 :[h,a] X2 →
+ â\88\83â\88\83U. â\9d¨G,Kâ\9d© â\8a¢ V ![h,a] & â\87§[1] V â\89\98 U & â\9d¨G,K.â\93\9bVâ\9d© â\8a¢ U â¬\8c*[h] X2 & â\9d¨G,K.â\93\9bVâ\9d© ⊢ 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
(* Basic_2A1: uses by definition nta_appl ntaa_appl *)
lemma nta_appl_abst (h) (a) (p) (G) (L):
∀n. ad a n →
- â\88\80V,W. â\9dªG,Lâ\9d« ⊢ V :[h,a] W →
- â\88\80T,U. â\9dªG,L.â\93\9bWâ\9d« â\8a¢ T :[h,a] U â\86\92 â\9dªG,Lâ\9d« ⊢ ⓐV.ⓛ[p]W.T :[h,a] ⓐV.ⓛ[p]W.U.
+ â\88\80V,W. â\9d¨G,Lâ\9d© ⊢ V :[h,a] W →
+ â\88\80T,U. â\9d¨G,L.â\93\9bWâ\9d© â\8a¢ T :[h,a] U â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓐV.ⓛ[p]W.T :[h,a] ⓐV.ⓛ[p]W.U.
#h #a #p #G #L #n #Ha #V #W #H1 #T #U #H2
elim (cnv_inv_cast … H1) -H1 #X1 #HW #HV #HWX1 #HVX1
elim (cnv_inv_cast … H2) -H2 #X2 #HU #HT #HUX2 #HTX2
(* Basic_2A1: was nta_appl_old *)
lemma nta_appl (h) (a) (p) (G) (L):
∀n. 1 ≤ n → ad a n →
- â\88\80V,W. â\9dªG,Lâ\9d« ⊢ V :[h,a] W →
- â\88\80T,U. â\9dªG,Lâ\9d« â\8a¢ T :[h,a] â\93\9b[p]W.U â\86\92 â\9dªG,Lâ\9d« ⊢ ⓐV.T :[h,a] ⓐV.ⓛ[p]W.U.
+ â\88\80V,W. â\9d¨G,Lâ\9d© ⊢ V :[h,a] W →
+ â\88\80T,U. â\9d¨G,Lâ\9d© â\8a¢ T :[h,a] â\93\9b[p]W.U â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓐV.T :[h,a] ⓐV.ⓛ[p]W.U.
#h #a #p #G #L #n #Hn #Ha #V #W #H1 #T #U #H2
elim (cnv_inv_cast … H1) -H1 #X1 #HW #HV #HWX1 #HVX1
elim (cnv_inv_cast … H2) -H2 #X2 #HU #HT #HUX2 #HTX2
(* Inversion lemmas with advanced rt_computation for terms ******************)
lemma nta_inv_abst_bi_cnv (h) (a) (p) (G) (K) (W):
- â\88\80T,U. â\9dªG,Kâ\9d« ⊢ ⓛ[p]W.T :[h,a] ⓛ[p]W.U →
- â\88§â\88§ â\9dªG,Kâ\9d« â\8a¢ W ![h,a] & â\9dªG,K.â\93\9bWâ\9d« ⊢ T :[h,a] U.
+ â\88\80T,U. â\9d¨G,Kâ\9d© ⊢ ⓛ[p]W.T :[h,a] ⓛ[p]W.U →
+ â\88§â\88§ â\9d¨G,Kâ\9d© â\8a¢ W ![h,a] & â\9d¨G,K.â\93\9bWâ\9d© ⊢ T :[h,a] U.
#h #a #p #G #K #W #T #U #H
elim (cnv_inv_cast … H) -H #X #HWU #HWT #HUX #HTX
elim (cnv_inv_bind … HWU) -HWU #HW #HU
(* Advanced properties ******************************************************)
lemma nta_ldef (h) (a) (G) (K):
- â\88\80V,W. â\9dªG,Kâ\9d« ⊢ V :[h,a] W →
- â\88\80U. â\87§[1] W â\89\98 U â\86\92 â\9dªG,K.â\93\93Vâ\9d« ⊢ #0 :[h,a] U.
+ â\88\80V,W. â\9d¨G,Kâ\9d© ⊢ V :[h,a] W →
+ â\88\80U. â\87§[1] W â\89\98 U â\86\92 â\9d¨G,K.â\93\93Vâ\9d© ⊢ #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
qed.
lemma nta_ldec_cnv (h) (a) (G) (K):
- â\88\80W. â\9dªG,Kâ\9d« ⊢ W ![h,a] →
- â\88\80U. â\87§[1] W â\89\98 U â\86\92 â\9dªG,K.â\93\9bWâ\9d« ⊢ #0 :[h,a] U.
+ â\88\80W. â\9d¨G,Kâ\9d© ⊢ W ![h,a] →
+ â\88\80U. â\87§[1] W â\89\98 U â\86\92 â\9d¨G,K.â\93\9bWâ\9d© ⊢ #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/
qed.
lemma nta_lref (h) (a) (I) (G) (K):
- â\88\80T,i. â\9dªG,Kâ\9d« ⊢ #i :[h,a] T →
- â\88\80U. â\87§[1] T â\89\98 U â\86\92 â\9dªG,K.â\93\98[I]â\9d« ⊢ #(↑i) :[h,a] U.
+ â\88\80T,i. â\9d¨G,Kâ\9d© ⊢ #i :[h,a] T →
+ â\88\80U. â\87§[1] T â\89\98 U â\86\92 â\9d¨G,K.â\93\98[I]â\9d© ⊢ #(↑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_1: was by definition: ty3_abbr *)
(* Basic_2A1: was by definition: nta_ldef ntaa_ldef *)
lemma nta_ldef_drops (h) (a) (G) (K) (L) (i):
- â\88\80V,W. â\9dªG,Kâ\9d« ⊢ V :[h,a] W →
- â\88\80U. â\87§[â\86\91i] W â\89\98 U â\86\92 â\87©[i] L â\89\98 K.â\93\93V â\86\92 â\9dªG,Lâ\9d« ⊢ #i :[h,a] U.
+ â\88\80V,W. â\9d¨G,Kâ\9d© ⊢ V :[h,a] W →
+ â\88\80U. â\87§[â\86\91i] W â\89\98 U â\86\92 â\87©[i] L â\89\98 K.â\93\93V â\86\92 â\9d¨G,Lâ\9d© ⊢ #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/
qed.
lemma nta_ldec_drops_cnv (h) (a) (G) (K) (L) (i):
- â\88\80W. â\9dªG,Kâ\9d« ⊢ W ![h,a] →
- â\88\80U. â\87§[â\86\91i] W â\89\98 U â\86\92 â\87©[i] L â\89\98 K.â\93\9bW â\86\92 â\9dªG,Lâ\9d« ⊢ #i :[h,a] U.
+ â\88\80W. â\9d¨G,Kâ\9d© ⊢ W ![h,a] →
+ â\88\80U. â\87§[â\86\91i] W â\89\98 U â\86\92 â\87©[i] L â\89\98 K.â\93\9bW â\86\92 â\9d¨G,Lâ\9d© ⊢ #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/
(* Properties with evaluations for rt-transition on terms *******************)
lemma nta_typecheck_dec (h) (a) (G) (L): ac_props a →
- â\88\80T,U. Decidable â\80¦ (â\9dªG,Lâ\9d« ⊢ T :[h,a] U).
+ â\88\80T,U. Decidable â\80¦ (â\9d¨G,Lâ\9d© ⊢ T :[h,a] U).
/2 width=1 by cnv_dec/ qed-.
(* Basic_1: uses: ty3_inference *)
lemma nta_inference_dec (h) (a) (G) (L) (T): ac_props a →
- Decidable (â\88\83U. â\9dªG,Lâ\9d« ⊢ T :[h,a] U).
+ Decidable (â\88\83U. â\9d¨G,Lâ\9d© ⊢ T :[h,a] U).
#h #a #G #L #T #Ha
elim (cnv_dec h … G L T Ha) -Ha #HT
[ /3 width=1 by cnv_nta_sn, or_introl/
(* Basic_1: uses: ty3_sn3 *)
(* Basic_2A1: uses: nta_fwd_csn *)
theorem nta_fwd_fsb (h) (a) (G) (L):
- â\88\80T,U. â\9dªG,Lâ\9d« ⊢ T :[h,a] U →
- â\88§â\88§ â\89¥ð\9d\90\92 â\9dªG,L,Tâ\9d« & â\89¥ð\9d\90\92 â\9dªG,L,Uâ\9d«.
+ â\88\80T,U. â\9d¨G,Lâ\9d© ⊢ T :[h,a] U →
+ â\88§â\88§ â\89¥ð\9d\90\92 â\9d¨G,L,Tâ\9d© & â\89¥ð\9d\90\92 â\9d¨G,L,Uâ\9d©.
#h #a #G #L #T #U #H
elim (cnv_inv_cast … H) #X #HU #HT #_ #_ -X
/3 width=3 by cnv_fwd_fsb, conj/
lemma nta_ind_rest_cnv (h) (Q:relation4 …):
(∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) →
(∀G,K,V,W,U.
- â\9dªG,Kâ\9d« ⊢ V :[h,𝟐] W → ⇧[1] W ≘ U →
+ â\9d¨G,Kâ\9d© ⊢ V :[h,𝟐] W → ⇧[1] W ≘ U →
Q G K V W → Q G (K.ⓓV) (#0) U
) →
- (â\88\80G,K,W,U. â\9dªG,Kâ\9d« ⊢ W ![h,𝟐] → ⇧[1] W ≘ U → Q G (K.ⓛW) (#0) U) →
+ (â\88\80G,K,W,U. â\9d¨G,Kâ\9d© ⊢ W ![h,𝟐] → ⇧[1] W ≘ U → Q G (K.ⓛW) (#0) U) →
(∀I,G,K,W,U,i.
- â\9dªG,Kâ\9d« ⊢ #i :[h,𝟐] W → ⇧[1] W ≘ U →
+ â\9d¨G,Kâ\9d© ⊢ #i :[h,𝟐] W → ⇧[1] W ≘ U →
Q G K (#i) W → Q G (K.ⓘ[I]) (#↑i) U
) →
(∀p,I,G,K,V,T,U.
- â\9dªG,Kâ\9d« â\8a¢ V ![h,ð\9d\9f\90] â\86\92 â\9dªG,K.â\93\91[I]Vâ\9d« ⊢ T :[h,𝟐] U →
+ â\9d¨G,Kâ\9d© â\8a¢ V ![h,ð\9d\9f\90] â\86\92 â\9d¨G,K.â\93\91[I]Vâ\9d© ⊢ T :[h,𝟐] U →
Q G (K.ⓑ[I]V) T U → Q G K (ⓑ[p,I]V.T) (ⓑ[p,I]V.U)
) →
(∀p,G,L,V,W,T,U.
- â\9dªG,Lâ\9d« â\8a¢ V :[h,ð\9d\9f\90] W â\86\92 â\9dªG,Lâ\9d« ⊢ T :[h,𝟐] ⓛ[p]W.U →
+ â\9d¨G,Lâ\9d© â\8a¢ V :[h,ð\9d\9f\90] W â\86\92 â\9d¨G,Lâ\9d© ⊢ T :[h,𝟐] ⓛ[p]W.U →
Q G L V W → Q G L T (ⓛ[p]W.U) → Q G L (ⓐV.T) (ⓐV.ⓛ[p]W.U)
) →
- (â\88\80G,L,T,U. â\9dªG,Lâ\9d« ⊢ T :[h,𝟐] U → Q G L T U → Q G L (ⓝU.T) U
+ (â\88\80G,L,T,U. â\9d¨G,Lâ\9d© ⊢ T :[h,𝟐] U → Q G L T U → Q G L (ⓝU.T) U
) →
(∀G,L,T,U1,U2.
- â\9dªG,Lâ\9d« â\8a¢ T :[h,ð\9d\9f\90] U1 â\86\92 â\9dªG,Lâ\9d« â\8a¢ U1 â¬\8c*[h] U2 â\86\92 â\9dªG,Lâ\9d« ⊢ U2 ![h,𝟐] →
+ â\9d¨G,Lâ\9d© â\8a¢ T :[h,ð\9d\9f\90] U1 â\86\92 â\9d¨G,Lâ\9d© â\8a¢ U1 â¬\8c*[h] U2 â\86\92 â\9d¨G,Lâ\9d© ⊢ U2 ![h,𝟐] →
Q G L T U1 → Q G L T U2
) →
- â\88\80G,L,T,U. â\9dªG,Lâ\9d« ⊢ T :[h,𝟐] U → Q G L T U.
+ â\88\80G,L,T,U. â\9d¨G,Lâ\9d© ⊢ T :[h,𝟐] U → Q G L T U.
#h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #G #L #T
@(fqup_wf_ind_eq (Ⓣ) … G L T) -G -L -T #G0 #L0 #T0 #IH #G #L * * [|||| * ]
[ #s #HG #HL #HT #X #H destruct -IH
lemma nta_ind_ext_cnv_mixed (h) (Q:relation4 …):
(∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) →
(∀G,K,V,W,U.
- â\9dªG,Kâ\9d« ⊢ V :[h,𝛚] W → ⇧[1] W ≘ U →
+ â\9d¨G,Kâ\9d© ⊢ V :[h,𝛚] W → ⇧[1] W ≘ U →
Q G K V W → Q G (K.ⓓV) (#0) U
) →
- (â\88\80G,K,W,U. â\9dªG,Kâ\9d« ⊢ W ![h,𝛚] → ⇧[1] W ≘ U → Q G (K.ⓛW) (#0) U) →
+ (â\88\80G,K,W,U. â\9d¨G,Kâ\9d© ⊢ W ![h,𝛚] → ⇧[1] W ≘ U → Q G (K.ⓛW) (#0) U) →
(∀I,G,K,W,U,i.
- â\9dªG,Kâ\9d« ⊢ #i :[h,𝛚] W → ⇧[1] W ≘ U →
+ â\9d¨G,Kâ\9d© ⊢ #i :[h,𝛚] W → ⇧[1] W ≘ U →
Q G K (#i) W → Q G (K.ⓘ[I]) (#↑i) U
) →
(∀p,I,G,K,V,T,U.
- â\9dªG,Kâ\9d« â\8a¢ V ![h,ð\9d\9b\9a] â\86\92 â\9dªG,K.â\93\91[I]Vâ\9d« ⊢ T :[h,𝛚] U →
+ â\9d¨G,Kâ\9d© â\8a¢ V ![h,ð\9d\9b\9a] â\86\92 â\9d¨G,K.â\93\91[I]Vâ\9d© ⊢ T :[h,𝛚] U →
Q G (K.ⓑ[I]V) T U → Q G K (ⓑ[p,I]V.T) (ⓑ[p,I]V.U)
) →
(∀p,G,L,V,W,T,U.
- â\9dªG,Lâ\9d« â\8a¢ V :[h,ð\9d\9b\9a] W â\86\92 â\9dªG,Lâ\9d« ⊢ T :[h,𝛚] ⓛ[p]W.U →
+ â\9d¨G,Lâ\9d© â\8a¢ V :[h,ð\9d\9b\9a] W â\86\92 â\9d¨G,Lâ\9d© ⊢ T :[h,𝛚] ⓛ[p]W.U →
Q G L V W → Q G L T (ⓛ[p]W.U) → Q G L (ⓐV.T) (ⓐV.ⓛ[p]W.U)
) →
(∀G,L,V,T,U.
- â\9dªG,Lâ\9d« â\8a¢ T :[h,ð\9d\9b\9a] U â\86\92 â\9dªG,Lâ\9d« ⊢ ⓐV.U ![h,𝛚] →
+ â\9d¨G,Lâ\9d© â\8a¢ T :[h,ð\9d\9b\9a] U â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓐV.U ![h,𝛚] →
Q G L T U → Q G L (ⓐV.T) (ⓐV.U)
) →
- (â\88\80G,L,T,U. â\9dªG,Lâ\9d« ⊢ T :[h,𝛚] U → Q G L T U → Q G L (ⓝU.T) U
+ (â\88\80G,L,T,U. â\9d¨G,Lâ\9d© ⊢ T :[h,𝛚] U → Q G L T U → Q G L (ⓝU.T) U
) →
(∀G,L,T,U1,U2.
- â\9dªG,Lâ\9d« â\8a¢ T :[h,ð\9d\9b\9a] U1 â\86\92 â\9dªG,Lâ\9d« â\8a¢ U1 â¬\8c*[h] U2 â\86\92 â\9dªG,Lâ\9d« ⊢ U2 ![h,𝛚] →
+ â\9d¨G,Lâ\9d© â\8a¢ T :[h,ð\9d\9b\9a] U1 â\86\92 â\9d¨G,Lâ\9d© â\8a¢ U1 â¬\8c*[h] U2 â\86\92 â\9d¨G,Lâ\9d© ⊢ U2 ![h,𝛚] →
Q G L T U1 → Q G L T U2
) →
- â\88\80G,L,T,U. â\9dªG,Lâ\9d« ⊢ T :[h,𝛚] U → Q G L T U.
+ â\88\80G,L,T,U. â\9d¨G,Lâ\9d© ⊢ T :[h,𝛚] U → Q G L T U.
#h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #G #L #T
@(fqup_wf_ind_eq (Ⓣ) … G L T) -G -L -T #G0 #L0 #T0 #IH #G #L * * [|||| * ]
[ #s #HG #HL #HT #X #H destruct -IH
lemma nta_ind_ext_cnv (h) (Q:relation4 …):
(∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) →
(∀G,K,V,W,U.
- â\9dªG,Kâ\9d« ⊢ V :[h,𝛚] W → ⇧[1] W ≘ U →
+ â\9d¨G,Kâ\9d© ⊢ V :[h,𝛚] W → ⇧[1] W ≘ U →
Q G K V W → Q G (K.ⓓV) (#0) U
) →
- (â\88\80G,K,W,U. â\9dªG,Kâ\9d« ⊢ W ![h,𝛚] → ⇧[1] W ≘ U → Q G (K.ⓛW) (#0) U) →
+ (â\88\80G,K,W,U. â\9d¨G,Kâ\9d© ⊢ W ![h,𝛚] → ⇧[1] W ≘ U → Q G (K.ⓛW) (#0) U) →
(∀I,G,K,W,U,i.
- â\9dªG,Kâ\9d« ⊢ #i :[h,𝛚] W → ⇧[1] W ≘ U →
+ â\9d¨G,Kâ\9d© ⊢ #i :[h,𝛚] W → ⇧[1] W ≘ U →
Q G K (#i) W → Q G (K.ⓘ[I]) (#↑i) U
) →
(∀p,I,G,K,V,T,U.
- â\9dªG,Kâ\9d« â\8a¢ V ![h,ð\9d\9b\9a] â\86\92 â\9dªG,K.â\93\91[I]Vâ\9d« ⊢ T :[h,𝛚] U →
+ â\9d¨G,Kâ\9d© â\8a¢ V ![h,ð\9d\9b\9a] â\86\92 â\9d¨G,K.â\93\91[I]Vâ\9d© ⊢ T :[h,𝛚] U →
Q G (K.ⓑ[I]V) T U → Q G K (ⓑ[p,I]V.T) (ⓑ[p,I]V.U)
) →
(∀p,G,K,V,W,T,U.
- â\9dªG,Kâ\9d« â\8a¢ V :[h,ð\9d\9b\9a] W â\86\92 â\9dªG,K.â\93\9bWâ\9d« ⊢ T :[h,𝛚] U →
+ â\9d¨G,Kâ\9d© â\8a¢ V :[h,ð\9d\9b\9a] W â\86\92 â\9d¨G,K.â\93\9bWâ\9d© ⊢ T :[h,𝛚] U →
Q G K V W → Q G (K.ⓛW) T U → Q G K (ⓐV.ⓛ[p]W.T) (ⓐV.ⓛ[p]W.U)
) →
(∀G,L,V,T,U.
- â\9dªG,Lâ\9d« â\8a¢ T :[h,ð\9d\9b\9a] U â\86\92 â\9dªG,Lâ\9d« ⊢ ⓐV.U ![h,𝛚] →
+ â\9d¨G,Lâ\9d© â\8a¢ T :[h,ð\9d\9b\9a] U â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓐV.U ![h,𝛚] →
Q G L T U → Q G L (ⓐV.T) (ⓐV.U)
) →
- (â\88\80G,L,T,U. â\9dªG,Lâ\9d« ⊢ T :[h,𝛚] U → Q G L T U → Q G L (ⓝU.T) U
+ (â\88\80G,L,T,U. â\9d¨G,Lâ\9d© ⊢ T :[h,𝛚] U → Q G L T U → Q G L (ⓝU.T) U
) →
(∀G,L,T,U1,U2.
- â\9dªG,Lâ\9d« â\8a¢ T :[h,ð\9d\9b\9a] U1 â\86\92 â\9dªG,Lâ\9d« â\8a¢ U1 â¬\8c*[h] U2 â\86\92 â\9dªG,Lâ\9d« ⊢ U2 ![h,𝛚] →
+ â\9d¨G,Lâ\9d© â\8a¢ T :[h,ð\9d\9b\9a] U1 â\86\92 â\9d¨G,Lâ\9d© â\8a¢ U1 â¬\8c*[h] U2 â\86\92 â\9d¨G,Lâ\9d© ⊢ U2 ![h,𝛚] →
Q G L T U1 → Q G L T U2
) →
- â\88\80G,L,T,U. â\9dªG,Lâ\9d« ⊢ T :[h,𝛚] U → Q G L T U.
+ â\88\80G,L,T,U. â\9d¨G,Lâ\9d© ⊢ T :[h,𝛚] U → Q G L T U.
#h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #G #L #T #U #H
@(nta_ind_ext_cnv_mixed … IH1 IH2 IH3 IH4 IH5 … IH7 IH8 IH9 … H) -G -L -T -U -IH1 -IH2 -IH3 -IH4 -IH5 -IH6 -IH8 -IH9
#p #G #L #V #W #T #U #HVW #HTU #_ #IHTU
(* Properties based on preservation *****************************************)
lemma cnv_cpms_nta (h) (a) (G) (L):
- â\88\80T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\88\80U.â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,1] U â\86\92 â\9dªG,Lâ\9d« ⊢ T :[h,a] U.
+ â\88\80T. â\9d¨G,Lâ\9d© â\8a¢ T ![h,a] â\86\92 â\88\80U.â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,1] U â\86\92 â\9d¨G,Lâ\9d© ⊢ T :[h,a] U.
/3 width=4 by cnv_cast, cnv_cpms_trans/ qed.
lemma cnv_nta_sn (h) (a) (G) (L):
- â\88\80T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\88\83U. â\9dªG,Lâ\9d« ⊢ T :[h,a] U.
+ â\88\80T. â\9d¨G,Lâ\9d© â\8a¢ T ![h,a] â\86\92 â\88\83U. â\9d¨G,Lâ\9d© ⊢ T :[h,a] U.
#h #a #G #L #T #HT
elim (cnv_fwd_cpm_SO … HT) #U #HTU
/4 width=2 by cnv_cpms_nta, cpm_cpms, ex_intro/
(* Basic_1: was: ty3_typecheck *)
lemma nta_typecheck (h) (a) (G) (L):
- â\88\80T,U. â\9dªG,Lâ\9d« â\8a¢ T :[h,a] U â\86\92 â\88\83T0. â\9dªG,Lâ\9d« ⊢ ⓝU.T :[h,a] T0.
+ â\88\80T,U. â\9d¨G,Lâ\9d© â\8a¢ T :[h,a] U â\86\92 â\88\83T0. â\9d¨G,Lâ\9d© ⊢ ⓝU.T :[h,a] T0.
/3 width=1 by cnv_cast, cnv_nta_sn/ qed-.
(* Basic_1: was: ty3_correct *)
(* Basic_2A1: was: ntaa_fwd_correct *)
lemma nta_fwd_correct (h) (a) (G) (L):
- â\88\80T,U. â\9dªG,Lâ\9d« â\8a¢ T :[h,a] U â\86\92 â\88\83T0. â\9dªG,Lâ\9d« ⊢ U :[h,a] T0.
+ â\88\80T,U. â\9d¨G,Lâ\9d© â\8a¢ T :[h,a] U â\86\92 â\88\83T0. â\9d¨G,Lâ\9d© ⊢ U :[h,a] T0.
/3 width=2 by nta_fwd_cnv_dx, cnv_nta_sn/ qed-.
lemma nta_pure_cnv (h) (G) (L):
- â\88\80T,U. â\9dªG,Lâ\9d« ⊢ T :[h,𝛚] U →
- â\88\80V. â\9dªG,Lâ\9d« â\8a¢ â\93\90V.U ![h,ð\9d\9b\9a] â\86\92 â\9dªG,Lâ\9d« ⊢ ⓐV.T :[h,𝛚] ⓐV.U.
+ â\88\80T,U. â\9d¨G,Lâ\9d© ⊢ T :[h,𝛚] U →
+ â\88\80V. â\9d¨G,Lâ\9d© â\8a¢ â\93\90V.U ![h,ð\9d\9b\9a] â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓐV.T :[h,𝛚] ⓐV.U.
#h #G #L #T #U #H1 #V #H2
elim (cnv_inv_cast … H1) -H1 #X0 #HU #HT #HUX0 #HTX0
elim (cnv_inv_appl … H2) #n #p #X1 #X2 #_ #HV #_ #HVX1 #HUX2
(* Basic_1: uses: ty3_sred_wcpr0_pr0 *)
lemma nta_cpr_conf_lpr (h) (a) (G):
- â\88\80L1,T1,U. â\9dªG,L1â\9d« â\8a¢ T1 :[h,a] U â\86\92 â\88\80T2. â\9dªG,L1â\9d« ⊢ T1 ➡[h,0] T2 →
- â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9dªG,L2â\9d« ⊢ T2 :[h,a] U.
+ â\88\80L1,T1,U. â\9d¨G,L1â\9d© â\8a¢ T1 :[h,a] U â\86\92 â\88\80T2. â\9d¨G,L1â\9d© ⊢ T1 ➡[h,0] T2 →
+ â\88\80L2. â\9d¨G,L1â\9d© â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9d¨G,L2â\9d© ⊢ T2 :[h,a] U.
#h #a #G #L1 #T1 #U #H #T2 #HT12 #L2 #HL12
/3 width=6 by cnv_cpm_trans_lpr, cpm_cast/
qed-.
(* Basic_1: uses: ty3_sred_pr2 ty3_sred_pr0 *)
lemma nta_cpr_conf (h) (a) (G) (L):
- â\88\80T1,U. â\9dªG,Lâ\9d« ⊢ T1 :[h,a] U →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T2 :[h,a] U.
+ â\88\80T1,U. â\9d¨G,Lâ\9d© ⊢ T1 :[h,a] U →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T2 :[h,a] U.
#h #a #G #L #T1 #U #H #T2 #HT12
/3 width=6 by cnv_cpm_trans, cpm_cast/
qed-.
(* Note: this is the preservation property *)
(* Basic_1: uses: ty3_sred_pr3 ty3_sred_pr1 *)
lemma nta_cprs_conf (h) (a) (G) (L):
- â\88\80T1,U. â\9dªG,Lâ\9d« ⊢ T1 :[h,a] U →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T2 :[h,a] U.
+ â\88\80T1,U. â\9d¨G,Lâ\9d© ⊢ T1 :[h,a] U →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T2 :[h,a] U.
#h #a #G #L #T1 #U #H #T2 #HT12
/3 width=6 by cnv_cpms_trans, cpms_cast/
qed-.
(* Basic_1: uses: ty3_cred_pr2 *)
lemma nta_lpr_conf (h) (a) (G):
- â\88\80L1,T,U. â\9dªG,L1â\9d« ⊢ T :[h,a] U →
- â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9dªG,L2â\9d« ⊢ T :[h,a] U.
+ â\88\80L1,T,U. â\9d¨G,L1â\9d© ⊢ T :[h,a] U →
+ â\88\80L2. â\9d¨G,L1â\9d© â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9d¨G,L2â\9d© ⊢ T :[h,a] U.
#h #a #G #L1 #T #U #HTU #L2 #HL12
/2 width=3 by cnv_lpr_trans/
qed-.
(* Basic_1: uses: ty3_cred_pr3 *)
lemma nta_lprs_conf (h) (a) (G):
- â\88\80L1,T,U. â\9dªG,L1â\9d« ⊢ T :[h,a] U →
- â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡*[h,0] L2 â\86\92 â\9dªG,L2â\9d« ⊢ T :[h,a] U.
+ â\88\80L1,T,U. â\9d¨G,L1â\9d© ⊢ T :[h,a] U →
+ â\88\80L2. â\9d¨G,L1â\9d© â\8a¢ â\9e¡*[h,0] L2 â\86\92 â\9d¨G,L2â\9d© ⊢ T :[h,a] U.
#h #a #G #L1 #T #U #HTU #L2 #HL12
/2 width=3 by cnv_lprs_trans/
qed-.
(* Inversion lemmas based on preservation ***********************************)
lemma nta_inv_ldef_sn (h) (a) (G) (K) (V):
- â\88\80X2. â\9dªG,K.â\93\93Vâ\9d« ⊢ #0 :[h,a] X2 →
- â\88\83â\88\83W,U. â\9dªG,Kâ\9d« â\8a¢ V :[h,a] W & â\87§[1] W â\89\98 U & â\9dªG,K.â\93\93Vâ\9d« â\8a¢ U â¬\8c*[h] X2 & â\9dªG,K.â\93\93Vâ\9d« ⊢ X2 ![h,a].
+ â\88\80X2. â\9d¨G,K.â\93\93Vâ\9d© ⊢ #0 :[h,a] X2 →
+ â\88\83â\88\83W,U. â\9d¨G,Kâ\9d© â\8a¢ V :[h,a] W & â\87§[1] W â\89\98 U & â\9d¨G,K.â\93\93Vâ\9d© â\8a¢ U â¬\8c*[h] X2 & â\9d¨G,K.â\93\93Vâ\9d© ⊢ 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
qed-.
lemma nta_inv_lref_sn (h) (a) (G) (L):
- â\88\80X2,i. â\9dªG,Lâ\9d« ⊢ #↑i :[h,a] X2 →
- â\88\83â\88\83I,K,T2,U2. â\9dªG,Kâ\9d« â\8a¢ #i :[h,a] T2 & â\87§[1] T2 â\89\98 U2 & â\9dªG,K.â\93\98[I]â\9d« â\8a¢ U2 â¬\8c*[h] X2 & â\9dªG,K.â\93\98[I]â\9d« ⊢ X2 ![h,a] & L = K.ⓘ[I].
+ â\88\80X2,i. â\9d¨G,Lâ\9d© ⊢ #↑i :[h,a] X2 →
+ â\88\83â\88\83I,K,T2,U2. â\9d¨G,Kâ\9d© â\8a¢ #i :[h,a] T2 & â\87§[1] T2 â\89\98 U2 & â\9d¨G,K.â\93\98[I]â\9d© â\8a¢ U2 â¬\8c*[h] X2 & â\9d¨G,K.â\93\98[I]â\9d© ⊢ 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
qed-.
lemma nta_inv_lref_sn_drops_cnv (h) (a) (G) (L):
- â\88\80X2,i. â\9dªG,Lâ\9d« ⊢ #i :[h,a] X2 →
- â\88¨â\88¨ â\88\83â\88\83K,V,W,U. â\87©[i] L â\89\98 K.â\93\93V & â\9dªG,Kâ\9d« â\8a¢ V :[h,a] W & â\87§[â\86\91i] W â\89\98 U & â\9dªG,Lâ\9d« â\8a¢ U â¬\8c*[h] X2 & â\9dªG,Lâ\9d« ⊢ X2 ![h,a]
- | â\88\83â\88\83K,W,U. â\87©[i] L â\89\98 K. â\93\9bW & â\9dªG,Kâ\9d« â\8a¢ W ![h,a] & â\87§[â\86\91i] W â\89\98 U & â\9dªG,Lâ\9d« â\8a¢ U â¬\8c*[h] X2 & â\9dªG,Lâ\9d« ⊢ X2 ![h,a].
+ â\88\80X2,i. â\9d¨G,Lâ\9d© ⊢ #i :[h,a] X2 →
+ â\88¨â\88¨ â\88\83â\88\83K,V,W,U. â\87©[i] L â\89\98 K.â\93\93V & â\9d¨G,Kâ\9d© â\8a¢ V :[h,a] W & â\87§[â\86\91i] W â\89\98 U & â\9d¨G,Lâ\9d© â\8a¢ U â¬\8c*[h] X2 & â\9d¨G,Lâ\9d© ⊢ X2 ![h,a]
+ | â\88\83â\88\83K,W,U. â\87©[i] L â\89\98 K. â\93\9bW & â\9d¨G,Kâ\9d© â\8a¢ W ![h,a] & â\87§[â\86\91i] W â\89\98 U & â\9d¨G,Lâ\9d© â\8a¢ U â¬\8c*[h] X2 & â\9d¨G,Lâ\9d© ⊢ 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
qed-.
lemma nta_inv_bind_sn_cnv (h) (a) (p) (I) (G) (K) (X2):
- â\88\80V,T. â\9dªG,Kâ\9d« ⊢ ⓑ[p,I]V.T :[h,a] X2 →
- â\88\83â\88\83U. â\9dªG,Kâ\9d« â\8a¢ V ![h,a] & â\9dªG,K.â\93\91[I]Vâ\9d« â\8a¢ T :[h,a] U & â\9dªG,Kâ\9d« â\8a¢ â\93\91[p,I]V.U â¬\8c*[h] X2 & â\9dªG,Kâ\9d« ⊢ X2 ![h,a].
+ â\88\80V,T. â\9d¨G,Kâ\9d© ⊢ ⓑ[p,I]V.T :[h,a] X2 →
+ â\88\83â\88\83U. â\9d¨G,Kâ\9d© â\8a¢ V ![h,a] & â\9d¨G,K.â\93\91[I]Vâ\9d© â\8a¢ T :[h,a] U & â\9d¨G,Kâ\9d© â\8a¢ â\93\91[p,I]V.U â¬\8c*[h] X2 & â\9d¨G,Kâ\9d© ⊢ X2 ![h,a].
#h #a #p * #G #K #X2 #V #T #H
elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H2
elim (cnv_inv_bind … H1) -H1 #HV #HT
(* Basic_1: uses: ty3_gen_appl *)
lemma nta_inv_appl_sn (h) (G) (L) (X2):
- â\88\80V,T. â\9dªG,Lâ\9d« ⊢ ⓐV.T :[h,𝟐] X2 →
- â\88\83â\88\83p,W,U. â\9dªG,Lâ\9d« â\8a¢ V :[h,ð\9d\9f\90] W & â\9dªG,Lâ\9d« â\8a¢ T :[h,ð\9d\9f\90] â\93\9b[p]W.U & â\9dªG,Lâ\9d« â\8a¢ â\93\90V.â\93\9b[p]W.U â¬\8c*[h] X2 & â\9dªG,Lâ\9d« ⊢ X2 ![h,𝟐].
+ â\88\80V,T. â\9d¨G,Lâ\9d© ⊢ ⓐV.T :[h,𝟐] X2 →
+ â\88\83â\88\83p,W,U. â\9d¨G,Lâ\9d© â\8a¢ V :[h,ð\9d\9f\90] W & â\9d¨G,Lâ\9d© â\8a¢ T :[h,ð\9d\9f\90] â\93\9b[p]W.U & â\9d¨G,Lâ\9d© â\8a¢ â\93\90V.â\93\9b[p]W.U â¬\8c*[h] X2 & â\9d¨G,Lâ\9d© ⊢ X2 ![h,𝟐].
#h #G #L #X2 #V #T #H
elim (cnv_inv_cast … H) -H #X #HX2 #H1 #HX2 #H2
elim (cnv_inv_appl … H1) #n #p #W #U #H <H -n #HV #HT #HVW #HTU
(* Basic_2A1: uses: nta_fwd_pure1 *)
lemma nta_inv_pure_sn_cnv (h) (G) (L) (X2):
- â\88\80V,T. â\9dªG,Lâ\9d« ⊢ ⓐV.T :[h,𝛚] X2 →
- â\88¨â\88¨ â\88\83â\88\83p,W,U. â\9dªG,Lâ\9d« â\8a¢ V :[h,ð\9d\9b\9a] W & â\9dªG,Lâ\9d« â\8a¢ T :[h,ð\9d\9b\9a] â\93\9b[p]W.U & â\9dªG,Lâ\9d« â\8a¢ â\93\90V.â\93\9b[p]W.U â¬\8c*[h] X2 & â\9dªG,Lâ\9d« ⊢ X2 ![h,𝛚]
- | â\88\83â\88\83U. â\9dªG,Lâ\9d« â\8a¢ T :[h,ð\9d\9b\9a] U & â\9dªG,Lâ\9d« â\8a¢ â\93\90V.U ![h,ð\9d\9b\9a] & â\9dªG,Lâ\9d« â\8a¢ â\93\90V.U â¬\8c*[h] X2 & â\9dªG,Lâ\9d« ⊢ X2 ![h,𝛚].
+ â\88\80V,T. â\9d¨G,Lâ\9d© ⊢ ⓐV.T :[h,𝛚] X2 →
+ â\88¨â\88¨ â\88\83â\88\83p,W,U. â\9d¨G,Lâ\9d© â\8a¢ V :[h,ð\9d\9b\9a] W & â\9d¨G,Lâ\9d© â\8a¢ T :[h,ð\9d\9b\9a] â\93\9b[p]W.U & â\9d¨G,Lâ\9d© â\8a¢ â\93\90V.â\93\9b[p]W.U â¬\8c*[h] X2 & â\9d¨G,Lâ\9d© ⊢ X2 ![h,𝛚]
+ | â\88\83â\88\83U. â\9d¨G,Lâ\9d© â\8a¢ T :[h,ð\9d\9b\9a] U & â\9d¨G,Lâ\9d© â\8a¢ â\93\90V.U ![h,ð\9d\9b\9a] & â\9d¨G,Lâ\9d© â\8a¢ â\93\90V.U â¬\8c*[h] X2 & â\9d¨G,Lâ\9d© ⊢ X2 ![h,𝛚].
#h #G #L #X2 #V #T #H
elim (cnv_inv_cast … H) -H #X1 #HX2 #H1 #HX21 #H
elim (cnv_inv_appl … H1) * [| #n ] #p #W0 #T0 #Hn #HV #HT #HW0 #HT0
(* Basic_2A1: uses: nta_inv_cast1 *)
lemma nta_inv_cast_sn (h) (a) (G) (L) (X2):
- â\88\80U,T. â\9dªG,Lâ\9d« ⊢ ⓝU.T :[h,a] X2 →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ T :[h,a] U & â\9dªG,Lâ\9d« â\8a¢ U â¬\8c*[h] X2 & â\9dªG,Lâ\9d« ⊢ X2 ![h,a].
+ â\88\80U,T. â\9d¨G,Lâ\9d© ⊢ ⓝU.T :[h,a] X2 →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ T :[h,a] U & â\9d¨G,Lâ\9d© â\8a¢ U â¬\8c*[h] X2 & â\9d¨G,Lâ\9d© ⊢ X2 ![h,a].
#h #a #G #L #X2 #U #T #H
elim (cnv_inv_cast … H) -H #X0 #HX2 #H1 #HX20 #H2
elim (cnv_inv_cast … H1) #X #HU #HT #HUX #HTX
(* Basic_1: uses: ty3_gen_cast *)
lemma nta_inv_cast_sn_old (h) (a) (G) (L) (X2):
- â\88\80T0,T1. â\9dªG,Lâ\9d« ⊢ ⓝT1.T0 :[h,a] X2 →
- â\88\83â\88\83T2. â\9dªG,Lâ\9d« â\8a¢ T0 :[h,a] T1 & â\9dªG,Lâ\9d« â\8a¢ T1 :[h,a] T2 & â\9dªG,Lâ\9d« â\8a¢ â\93\9dT2.T1 â¬\8c*[h] X2 & â\9dªG,Lâ\9d« ⊢ X2 ![h,a].
+ â\88\80T0,T1. â\9d¨G,Lâ\9d© ⊢ ⓝT1.T0 :[h,a] X2 →
+ â\88\83â\88\83T2. â\9d¨G,Lâ\9d© â\8a¢ T0 :[h,a] T1 & â\9d¨G,Lâ\9d© â\8a¢ T1 :[h,a] T2 & â\9d¨G,Lâ\9d© â\8a¢ â\93\9dT2.T1 â¬\8c*[h] X2 & â\9d¨G,Lâ\9d© ⊢ X2 ![h,a].
#h #a #G #L #X2 #T0 #T1 #H
elim (cnv_inv_cast … H) -H #X0 #HX2 #H1 #HX20 #H2
elim (cnv_inv_cast … H1) #X #HT1 #HT0 #HT1X #HT0X
qed-.
(* Basic_1: uses: ty3_gen_lift *)
-(* Note: "â\9dªG, Lâ\9d« â\8a¢ U2 â¬\8c*[h] X2" can be "â\9dªG, Lâ\9d« ⊢ X2 ➡*[h,0] U2" *)
+(* Note: "â\9d¨G, Lâ\9d© â\8a¢ U2 â¬\8c*[h] X2" can be "â\9d¨G, Lâ\9d© ⊢ X2 ➡*[h,0] U2" *)
lemma nta_inv_lifts_sn (h) (a) (G):
- â\88\80L,T2,X2. â\9dªG,Lâ\9d« ⊢ T2 :[h,a] X2 →
+ â\88\80L,T2,X2. â\9d¨G,Lâ\9d© ⊢ T2 :[h,a] X2 →
∀b,f,K. ⇩*[b,f] L ≘ K → ∀T1. ⇧*[f] T1 ≘ T2 →
- â\88\83â\88\83U1,U2. â\9dªG,Kâ\9d« â\8a¢ T1 :[h,a] U1 & â\87§*[f] U1 â\89\98 U2 & â\9dªG,Lâ\9d« â\8a¢ U2 â¬\8c*[h] X2 & â\9dªG,Lâ\9d« ⊢ X2 ![h,a].
+ â\88\83â\88\83U1,U2. â\9d¨G,Kâ\9d© â\8a¢ T1 :[h,a] U1 & â\87§*[f] U1 â\89\98 U2 & â\9d¨G,Lâ\9d© â\8a¢ U2 â¬\8c*[h] X2 & â\9d¨G,Lâ\9d© ⊢ 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
(* Basic_1: was: ty3_unique *)
theorem nta_mono (h) (a) (G) (L) (T):
- â\88\80U1. â\9dªG,Lâ\9d« â\8a¢ T :[h,a] U1 â\86\92 â\88\80U2. â\9dªG,Lâ\9d« â\8a¢ T :[h,a] U2 â\86\92 â\9dªG,Lâ\9d« ⊢ U1 ⬌*[h] U2.
+ â\88\80U1. â\9d¨G,Lâ\9d© â\8a¢ T :[h,a] U1 â\86\92 â\88\80U2. â\9d¨G,Lâ\9d© â\8a¢ T :[h,a] U2 â\86\92 â\9d¨G,Lâ\9d© ⊢ U1 ⬌*[h] U2.
#h #a #G #L #T #U1 #H1 #U2 #H2
elim (cnv_inv_cast … H1) -H1 #X1 #_ #_ #HUX1 #HTX1
elim (cnv_inv_cast … H2) -H2 #X2 #_ #HT #HUX2 #HTX2
(* Basic_1: uses: ty3_sconv_pc3 *)
lemma nta_cpcs_bi (h) (a) (G) (L):
- â\88\80T1,U1. â\9dªG,Lâ\9d« â\8a¢ T1 :[h,a] U1 â\86\92 â\88\80T2,U2. â\9dªG,Lâ\9d« ⊢ T2 :[h,a] U2 →
- â\9dªG,Lâ\9d« â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ U1 ⬌*[h] U2.
+ â\88\80T1,U1. â\9d¨G,Lâ\9d© â\8a¢ T1 :[h,a] U1 â\86\92 â\88\80T2,U2. â\9d¨G,Lâ\9d© ⊢ T2 :[h,a] U2 →
+ â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ U1 ⬌*[h] U2.
#h #a #G #L #T1 #U1 #HTU1 #T2 #U2 #HTU2 #HT12
elim (cpcs_inv_cprs … HT12) -HT12 #T0 #HT10 #HT02
/3 width=6 by nta_mono, nta_cprs_conf/
(* Basic_1: uses: ty3_tred *)
lemma nta_cprs_trans (h) (a) (G) (L):
- â\88\80T,U1. â\9dªG,Lâ\9d« â\8a¢ T :[h,a] U1 â\86\92 â\88\80U2. â\9dªG,Lâ\9d« â\8a¢ U1 â\9e¡*[h,0] U2 â\86\92 â\9dªG,Lâ\9d« ⊢ T :[h,a] U2.
+ â\88\80T,U1. â\9d¨G,Lâ\9d© â\8a¢ T :[h,a] U1 â\86\92 â\88\80U2. â\9d¨G,Lâ\9d© â\8a¢ U1 â\9e¡*[h,0] U2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T :[h,a] U2.
#h #a #G #L #T #U1 #H #U2 #HU12
/4 width=4 by nta_conv_cnv, nta_fwd_cnv_dx, cnv_cpms_trans, cpcs_cprs_dx/
qed-.
(* Basic_1: uses: ty3_sred_back *)
lemma cprs_nta_trans (h) (a) (G) (L):
- â\88\80T1,U0. â\9dªG,Lâ\9d« â\8a¢ T1 :[h,a] U0 â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,0] T2 →
- â\88\80U. â\9dªG,Lâ\9d« â\8a¢ T2 :[h,a] U â\86\92 â\9dªG,Lâ\9d« ⊢ T1 :[h,a] U.
+ â\88\80T1,U0. â\9d¨G,Lâ\9d© â\8a¢ T1 :[h,a] U0 â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,0] T2 →
+ â\88\80U. â\9d¨G,Lâ\9d© â\8a¢ T2 :[h,a] U â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 :[h,a] U.
#h #a #G #L #T1 #U0 #HT1 #T2 #HT12 #U #H
lapply (nta_cprs_conf … HT1 … HT12) -HT12 #HT2
/4 width=6 by nta_mono, nta_conv_cnv, nta_fwd_cnv_dx/
qed-.
lemma cprs_nta_trans_cnv (h) (a) (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,0] T2 →
- â\88\80U. â\9dªG,Lâ\9d« â\8a¢ T2 :[h,a] U â\86\92 â\9dªG,Lâ\9d« ⊢ T1 :[h,a] U.
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,0] T2 →
+ â\88\80U. â\9d¨G,Lâ\9d© â\8a¢ T2 :[h,a] U â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 :[h,a] U.
#h #a #G #L #T1 #HT1 #T2 #HT12 #U #H
elim (cnv_nta_sn … HT1) -HT1 #U0 #HT1
/2 width=3 by cprs_nta_trans/
(* Basic_1: uses: ty3_sconv *)
lemma nta_cpcs_conf (h) (a) (G) (L):
- â\88\80T1,U. â\9dªG,Lâ\9d« â\8a¢ T1 :[h,a] U â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2 →
- â\88\80U0. â\9dªG,Lâ\9d« â\8a¢ T2 :[h,a] U0 â\86\92 â\9dªG,Lâ\9d« ⊢ T2 :[h,a] U.
+ â\88\80T1,U. â\9d¨G,Lâ\9d© â\8a¢ T1 :[h,a] U â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2 →
+ â\88\80U0. â\9d¨G,Lâ\9d© â\8a¢ T2 :[h,a] U0 â\86\92 â\9d¨G,Lâ\9d© ⊢ T2 :[h,a] U.
#h #a #G #L #T1 #U #HT1 #T2 #HT12 #U0 #HT2
elim (cpcs_inv_cprs … HT12) -HT12 #T0 #HT10 #HT02
/3 width=5 by cprs_nta_trans, nta_cprs_conf/
(* Note: type preservation by valid r-equivalence *)
lemma nta_cpcs_conf_cnv (h) (a) (G) (L):
- â\88\80T1,U. â\9dªG,Lâ\9d« ⊢ T1 :[h,a] U →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ T2 ![h,a] â\86\92 â\9dªG,Lâ\9d« ⊢ T2 :[h,a] U.
+ â\88\80T1,U. â\9d¨G,Lâ\9d© ⊢ T1 :[h,a] U →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â\9d¨G,Lâ\9d© â\8a¢ T2 ![h,a] â\86\92 â\9d¨G,Lâ\9d© ⊢ T2 :[h,a] U.
#h #a #G #L #T1 #U #HT1 #T2 #HT12 #HT2
elim (cnv_nta_sn … HT2) -HT2 #U0 #HT2
/2 width=3 by nta_cpcs_conf/
(* ITERATED NATIVE TYPE ASSIGNMENT FOR TERMS ********************************)
definition ntas (h) (a) (n) (G) (L): relation term ≝ λT,U.
- â\88\83â\88\83U0. â\9dªG,Lâ\9d« â\8a¢ U ![h,a] & â\9dªG,Lâ\9d« â\8a¢ T ![h,a] & â\9dªG,Lâ\9d« â\8a¢ U â\9e¡*[h,0] U0 & â\9dªG,Lâ\9d« ⊢ T ➡*[h,n] U0.
+ â\88\83â\88\83U0. â\9d¨G,Lâ\9d© â\8a¢ U ![h,a] & â\9d¨G,Lâ\9d© â\8a¢ T ![h,a] & â\9d¨G,Lâ\9d© â\8a¢ U â\9e¡*[h,0] U0 & â\9d¨G,Lâ\9d© ⊢ T ➡*[h,n] U0.
interpretation "iterated native type assignment (term)"
'ColonStar h a n G L T U = (ntas h a n G L T U).
(* Basic properties *********************************************************)
lemma ntas_intro (h) (a) (n) (G) (L):
- â\88\80U. â\9dªG,Lâ\9d« â\8a¢ U ![h,a] â\86\92 â\88\80T. â\9dªG,Lâ\9d« ⊢ T ![h,a] →
- â\88\80U0. â\9dªG,Lâ\9d« â\8a¢ U â\9e¡*[h,0] U0 â\86\92 â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n] U0 â\86\92 â\9dªG,Lâ\9d« ⊢ T :*[h,a,n] U.
+ â\88\80U. â\9d¨G,Lâ\9d© â\8a¢ U ![h,a] â\86\92 â\88\80T. â\9d¨G,Lâ\9d© ⊢ T ![h,a] →
+ â\88\80U0. â\9d¨G,Lâ\9d© â\8a¢ U â\9e¡*[h,0] U0 â\86\92 â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,n] U0 â\86\92 â\9d¨G,Lâ\9d© ⊢ T :*[h,a,n] U.
/2 width=3 by ex4_intro/ qed.
lemma ntas_refl (h) (a) (G) (L):
- â\88\80T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\9dªG,Lâ\9d« ⊢ T :*[h,a,0] T.
+ â\88\80T. â\9d¨G,Lâ\9d© â\8a¢ T ![h,a] â\86\92 â\9d¨G,Lâ\9d© ⊢ T :*[h,a,0] T.
/2 width=3 by ntas_intro/ qed.
lemma ntas_sort (h) (a) (n) (G) (L):
- â\88\80s. â\9dªG,Lâ\9d« ⊢ ⋆s :*[h,a,n] ⋆((next h)^n s).
+ â\88\80s. â\9d¨G,Lâ\9d© ⊢ ⋆s :*[h,a,n] ⋆((next h)^n s).
#h #a #n #G #L #s
/2 width=3 by ntas_intro, cnv_sort, cpms_sort/
qed.
lemma ntas_bind_cnv (h) (a) (n) (G) (K):
- â\88\80V. â\9dªG,Kâ\9d« ⊢ V ![h,a] →
- â\88\80I,T,U. â\9dªG,K.â\93\91[I]Vâ\9d« ⊢ T :*[h,a,n] U →
- â\88\80p. â\9dªG,Kâ\9d« ⊢ ⓑ[p,I]V.T :*[h,a,n] ⓑ[p,I]V.U.
+ â\88\80V. â\9d¨G,Kâ\9d© ⊢ V ![h,a] →
+ â\88\80I,T,U. â\9d¨G,K.â\93\91[I]Vâ\9d© ⊢ T :*[h,a,n] U →
+ â\88\80p. â\9d¨G,Kâ\9d© ⊢ ⓑ[p,I]V.T :*[h,a,n] ⓑ[p,I]V.U.
#h #a #n #G #K #V #HV #I #T #U
* #X #HU #HT #HUX #HTX #p
/3 width=5 by ntas_intro, cnv_bind, cpms_bind_dx/
(* Basic_forward lemmas *****************************************************)
lemma ntas_fwd_cnv_sn (h) (a) (n) (G) (L):
- â\88\80T,U. â\9dªG,Lâ\9d« â\8a¢ T :*[h,a,n] U â\86\92 â\9dªG,Lâ\9d« ⊢ T ![h,a].
+ â\88\80T,U. â\9d¨G,Lâ\9d© â\8a¢ T :*[h,a,n] U â\86\92 â\9d¨G,Lâ\9d© ⊢ T ![h,a].
#h #a #n #G #L #T #U
* #X #_ #HT #_ #_ //
qed-.
(* Note: this is ntas_fwd_correct_cnv *)
lemma ntas_fwd_cnv_dx (h) (a) (n) (G) (L):
- â\88\80T,U. â\9dªG,Lâ\9d« â\8a¢ T :*[h,a,n] U â\86\92 â\9dªG,Lâ\9d« ⊢ U ![h,a].
+ â\88\80T,U. â\9d¨G,Lâ\9d© â\8a¢ T :*[h,a,n] U â\86\92 â\9d¨G,Lâ\9d© ⊢ U ![h,a].
#h #a #n #G #L #T #U
* #X #HU #_ #_ #_ //
qed-.
(* Properties with r-equivalence for terms **********************************)
lemma ntas_zero (h) (a) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 ![h,a] â\86\92 â\9dªG,Lâ\9d« â\8a¢ T2 ![h,a] â\86\92 â\9dªG,Lâ\9d« â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 :*[h,a,0] T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 ![h,a] â\86\92 â\9d¨G,Lâ\9d© â\8a¢ T2 ![h,a] â\86\92 â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 :*[h,a,0] T2.
#h #a #G #L #T1 #T2 #HT1 #HT2 #H
elim (cpcs_inv_cprs … H) -H #T0 #HT10 #HT20
/2 width=3 by ntas_intro/
(* Inversion lemmas with r-equivalence for terms ****************************)
lemma ntas_inv_zero (h) (a) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 :*[h,a,0] T2 →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ T1 ![h,a] & â\9dªG,Lâ\9d« â\8a¢ T2 ![h,a] & â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 :*[h,a,0] T2 →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ T1 ![h,a] & â\9d¨G,Lâ\9d© â\8a¢ T2 ![h,a] & â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
#h #a #G #L #T1 #T2 * #T0 #HT1 #HT2 #HT20 #HT10
/3 width=3 by cprs_div, and3_intro/
qed-.
(* Advanced properties of native validity for terms *************************)
lemma cnv_appl_ntas_ge (h) (a) (G) (L):
- â\88\80m,n. m â\89¤ n â\86\92 ad a n â\86\92 â\88\80V,W. â\9dªG,Lâ\9d« ⊢ V :[h,a] W →
- â\88\80p,T,U. â\9dªG,Lâ\9d« â\8a¢ T :*[h,a,m] â\93\9b[p]W.U â\86\92 â\9dªG,Lâ\9d« ⊢ ⓐV.T ![h,a].
+ â\88\80m,n. m â\89¤ n â\86\92 ad a n â\86\92 â\88\80V,W. â\9d¨G,Lâ\9d© ⊢ V :[h,a] W →
+ â\88\80p,T,U. â\9d¨G,Lâ\9d© â\8a¢ T :*[h,a,m] â\93\9b[p]W.U â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓐV.T ![h,a].
#h #a #G #L #m #n #Hmn #Hn #V #W #HVW #p #T #U #HTU
elim (cnv_inv_cast … HVW) -HVW #W0 #HW #HV #HW0 #HVW0
elim HTU -HTU #U0 #H #HT #HU0 #HTU0
(* Advanced inversion lemmas of native validity for terms *******************)
lemma cnv_inv_appl_ntas (h) (a) (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« ⊢ ⓐV.T ![h,a] →
- â\88\83â\88\83n,p,W,T,U. ad a n & â\9dªG,Lâ\9d« â\8a¢ V :[h,a] W & â\9dªG,Lâ\9d« ⊢ T :*[h,a,n] ⓛ[p]W.U.
+ â\88\80V,T. â\9d¨G,Lâ\9d© ⊢ ⓐV.T ![h,a] →
+ â\88\83â\88\83n,p,W,T,U. ad a n & â\9d¨G,Lâ\9d© â\8a¢ V :[h,a] W & â\9d¨G,Lâ\9d© ⊢ T :*[h,a,n] ⓛ[p]W.U.
#h #a #G #L #V #T #H
elim (cnv_inv_appl … H) -H #n #p #W #U #Hn #HV #HT #HVW #HTU
/3 width=9 by cnv_cpms_nta, cnv_cpms_ntas, ex3_5_intro/
(* Properties with native type assignment for terms *************************)
lemma nta_ntas (h) (a) (G) (L):
- â\88\80T,U. â\9dªG,Lâ\9d« â\8a¢ T :[h,a] U â\86\92 â\9dªG,Lâ\9d« ⊢ T :*[h,a,1] U.
+ â\88\80T,U. â\9d¨G,Lâ\9d© â\8a¢ T :[h,a] U â\86\92 â\9d¨G,Lâ\9d© ⊢ T :*[h,a,1] U.
#h #a #G #L #T #U #H
elim (cnv_inv_cast … H) -H /2 width=3 by ntas_intro/
qed-.
lemma ntas_step_sn (h) (a) (G) (L):
- â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 :[h,a] T →
- â\88\80n,T2. â\9dªG,Lâ\9d« â\8a¢ T :*[h,a,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 :*[h,a,↑n] T2.
+ â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T1 :[h,a] T →
+ â\88\80n,T2. â\9d¨G,Lâ\9d© â\8a¢ T :*[h,a,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 :*[h,a,↑n] T2.
#h #a #G #L #T1 #T #H #n #T2 * #X2 #HT2 #HT #H1TX2 #H2TX2
elim (cnv_inv_cast … H) -H #X1 #_ #HT1 #H1TX1 #H2TX1
elim (cnv_cpms_conf … HT … H1TX1 … H2TX2) -T <minus_n_O <minus_O_n <plus_SO_sn #X #HX1 #HX2
qed-.
lemma ntas_step_dx (h) (a) (G) (L):
- â\88\80n,T1,T. â\9dªG,Lâ\9d« ⊢ T1 :*[h,a,n] T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T :[h,a] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 :*[h,a,↑n] T2.
+ â\88\80n,T1,T. â\9d¨G,Lâ\9d© ⊢ T1 :*[h,a,n] T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T :[h,a] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 :*[h,a,↑n] T2.
#h #a #G #L #n #T1 #T * #X1 #HT #HT1 #H1TX1 #H2TX1 #T2 #H
elim (cnv_inv_cast … H) -H #X2 #HT2 #_ #H1TX2 #H2TX2
elim (cnv_cpms_conf … HT … H1TX1 … H2TX2) -T <minus_n_O <minus_O_n <plus_SO_dx #X #HX1 #HX2
qed-.
lemma nta_appl_ntas_zero (h) (a) (G) (L): ad a 0 →
- â\88\80V,W. â\9dªG,Lâ\9d« â\8a¢ V :[h,a] W â\86\92 â\88\80p,T,U0. â\9dªG,Lâ\9d« ⊢ T :*[h,a,0] ⓛ[p]W.U0 →
- â\88\80U. â\9dªG,L.â\93\9bWâ\9d« â\8a¢ U0 :[h,a] U â\86\92 â\9dªG,Lâ\9d« ⊢ ⓐV.T :[h,a] ⓐV.ⓛ[p]W.U.
+ â\88\80V,W. â\9d¨G,Lâ\9d© â\8a¢ V :[h,a] W â\86\92 â\88\80p,T,U0. â\9d¨G,Lâ\9d© ⊢ T :*[h,a,0] ⓛ[p]W.U0 →
+ â\88\80U. â\9d¨G,L.â\93\9bWâ\9d© â\8a¢ U0 :[h,a] U â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓐV.T :[h,a] ⓐV.ⓛ[p]W.U.
#h #a #G #L #Ha #V #W #HVW #p #T #U0 #HTU0 #U #HU0
lapply (nta_fwd_cnv_dx … HVW) #HW
lapply (nta_bind_cnv … HW … HU0 p) -HW -HU0 #HU0
qed.
lemma nta_appl_ntas_pos (h) (a) (n) (G) (L): ad a (↑n) →
- â\88\80V,W. â\9dªG,Lâ\9d« â\8a¢ V :[h,a] W â\86\92 â\88\80T,U. â\9dªG,Lâ\9d« ⊢ T :[h,a] U →
- â\88\80p,U0. â\9dªG,Lâ\9d« â\8a¢ U :*[h,a,n] â\93\9b[p]W.U0 â\86\92 â\9dªG,Lâ\9d« ⊢ ⓐV.T :[h,a] ⓐV.U.
+ â\88\80V,W. â\9d¨G,Lâ\9d© â\8a¢ V :[h,a] W â\86\92 â\88\80T,U. â\9d¨G,Lâ\9d© ⊢ T :[h,a] U →
+ â\88\80p,U0. â\9d¨G,Lâ\9d© â\8a¢ U :*[h,a,n] â\93\9b[p]W.U0 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓐV.T :[h,a] ⓐV.U.
#h #a #n #G #L #Ha #V #W #HVW #T #U #HTU #p #U0 #HU0
elim (cnv_inv_cast … HTU) #X #_ #_ #HUX #HTX
/4 width=11 by ntas_step_sn, cnv_appl_ntas_ge, cnv_cast, cpms_appl_dx/
(* Inversion lemmas with native type assignment for terms *******************)
lemma ntas_inv_nta (h) (a) (G) (L):
- â\88\80T,U. â\9dªG,Lâ\9d« â\8a¢ T :*[h,a,1] U â\86\92 â\9dªG,Lâ\9d« ⊢ T :[h,a] U.
+ â\88\80T,U. â\9d¨G,Lâ\9d© â\8a¢ T :*[h,a,1] U â\86\92 â\9d¨G,Lâ\9d© ⊢ T :[h,a] U.
#h #a #G #L #T #U
* /2 width=3 by cnv_cast/
qed-.
(* Note: this follows from ntas_inv_appl_sn *)
lemma nta_inv_appl_sn_ntas (h) (a) (G) (L) (V) (T):
- â\88\80X. â\9dªG,Lâ\9d« ⊢ ⓐV.T :[h,a] X →
- â\88¨â\88¨ â\88\83â\88\83p,W,U,U0. ad a 0 & â\9dªG,Lâ\9d« â\8a¢ V :[h,a] W & â\9dªG,Lâ\9d« â\8a¢ T :*[h,a,0] â\93\9b[p]W.U0 & â\9dªG,L.â\93\9bWâ\9d« â\8a¢ U0 :[h,a] U & â\9dªG,Lâ\9d« â\8a¢ â\93\90V.â\93\9b[p]W.U â¬\8c*[h] X & â\9dªG,Lâ\9d« ⊢ X ![h,a]
- | â\88\83â\88\83n,p,W,U,U0. ad a (â\86\91n) & â\9dªG,Lâ\9d« â\8a¢ V :[h,a] W & â\9dªG,Lâ\9d« â\8a¢ T :[h,a] U & â\9dªG,Lâ\9d« â\8a¢ U :*[h,a,n] â\93\9b[p]W.U0 & â\9dªG,Lâ\9d« â\8a¢ â\93\90V.U â¬\8c*[h] X & â\9dªG,Lâ\9d« ⊢ X ![h,a].
+ â\88\80X. â\9d¨G,Lâ\9d© ⊢ ⓐV.T :[h,a] X →
+ â\88¨â\88¨ â\88\83â\88\83p,W,U,U0. ad a 0 & â\9d¨G,Lâ\9d© â\8a¢ V :[h,a] W & â\9d¨G,Lâ\9d© â\8a¢ T :*[h,a,0] â\93\9b[p]W.U0 & â\9d¨G,L.â\93\9bWâ\9d© â\8a¢ U0 :[h,a] U & â\9d¨G,Lâ\9d© â\8a¢ â\93\90V.â\93\9b[p]W.U â¬\8c*[h] X & â\9d¨G,Lâ\9d© ⊢ X ![h,a]
+ | â\88\83â\88\83n,p,W,U,U0. ad a (â\86\91n) & â\9d¨G,Lâ\9d© â\8a¢ V :[h,a] W & â\9d¨G,Lâ\9d© â\8a¢ T :[h,a] U & â\9d¨G,Lâ\9d© â\8a¢ U :*[h,a,n] â\93\9b[p]W.U0 & â\9d¨G,Lâ\9d© â\8a¢ â\93\90V.U â¬\8c*[h] X & â\9d¨G,Lâ\9d© ⊢ X ![h,a].
#h #a #G #L #V #T #X #H
(* Note: insert here: alternate proof in ntas_nta.etc *)
elim (cnv_inv_cast … H) -H #X0 #HX #HVT #HX0 #HTX0
(* Advanced eliminators for native type assignment **************************)
lemma ntas_ind_bi_nta (h) (a) (G) (L) (Q:relation3 …):
- (â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 ![h,a] â\86\92 â\9dªG,Lâ\9d« â\8a¢ T2 ![h,a] â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2 →
+ (â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 ![h,a] â\86\92 â\9d¨G,Lâ\9d© â\8a¢ T2 ![h,a] â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2 →
Q 0 T1 T2
) →
- (â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 :[h,a] T2 → Q 1 T1 T2
+ (â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 :[h,a] T2 → Q 1 T1 T2
) →
- (â\88\80n1,n2,T1,T2,T0. â\9dªG,Lâ\9d« â\8a¢ T1 :*[h,a,n1] T0 â\86\92 â\9dªG,Lâ\9d« ⊢ T0 :*[h,a,n2] T2 →
+ (â\88\80n1,n2,T1,T2,T0. â\9d¨G,Lâ\9d© â\8a¢ T1 :*[h,a,n1] T0 â\86\92 â\9d¨G,Lâ\9d© ⊢ T0 :*[h,a,n2] T2 →
Q n1 T1 T0 → Q n2 T0 T2 → Q (n1+n2) T1 T2
) →
- â\88\80n,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 :*[h,a,n] T2 → Q n T1 T2.
+ â\88\80n,T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 :*[h,a,n] T2 → Q n T1 T2.
#h #a #G #L #Q #IH1 #IH2 #IH3 #n
@(nat_elim1 n) -n * [| * ]
[ #_ #T1 #T2 #H
lemma nta_ind_cnv (h) (a) (Q:relation4 …):
(∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) →
(∀G,K,V,W,U.
- â\9dªG,Kâ\9d« ⊢ V :[h,a] W → ⇧[1] W ≘ U →
+ â\9d¨G,Kâ\9d© ⊢ V :[h,a] W → ⇧[1] W ≘ U →
Q G K V W → Q G (K.ⓓV) (#0) U
) →
- (â\88\80G,K,W,U. â\9dªG,Kâ\9d« ⊢ W ![h,a] → ⇧[1] W ≘ U → Q G (K.ⓛW) (#0) U) →
+ (â\88\80G,K,W,U. â\9d¨G,Kâ\9d© ⊢ W ![h,a] → ⇧[1] W ≘ U → Q G (K.ⓛW) (#0) U) →
(∀I,G,K,W,U,i.
- â\9dªG,Kâ\9d« ⊢ #i :[h,a] W → ⇧[1] W ≘ U →
+ â\9d¨G,Kâ\9d© ⊢ #i :[h,a] W → ⇧[1] W ≘ U →
Q G K (#i) W → Q G (K.ⓘ[I]) (#↑i) U
) →
(∀p,I,G,K,V,T,U.
- â\9dªG,Kâ\9d« â\8a¢ V ![h,a] â\86\92 â\9dªG,K.â\93\91[I]Vâ\9d« ⊢ T :[h,a] U →
+ â\9d¨G,Kâ\9d© â\8a¢ V ![h,a] â\86\92 â\9d¨G,K.â\93\91[I]Vâ\9d© ⊢ T :[h,a] U →
Q G (K.ⓑ[I]V) T U → Q G K (ⓑ[p,I]V.T) (ⓑ[p,I]V.U)
) →
(∀p,G,L,V,W,T,U0,U. (**) (* one IH is missing *)
- ad a 0 â\86\92 â\9dªG,Lâ\9d« â\8a¢ V :[h,a] W â\86\92 â\9dªG,Lâ\9d« â\8a¢ T :*[h,a,0] â\93\9b[p]W.U0 â\86\92 â\9dªG,L.â\93\9bWâ\9d« ⊢ U0 :[h,a] U →
+ ad a 0 â\86\92 â\9d¨G,Lâ\9d© â\8a¢ V :[h,a] W â\86\92 â\9d¨G,Lâ\9d© â\8a¢ T :*[h,a,0] â\93\9b[p]W.U0 â\86\92 â\9d¨G,L.â\93\9bWâ\9d© ⊢ U0 :[h,a] U →
Q G L V W (* → Q G (L.ⓛW) U0 U *) → Q G L (ⓐV.T) (ⓐV.ⓛ[p]W.U)
) →
(∀n,p,G,L,V,W,T,U,U0.
- ad a (â\86\91n) â\86\92 â\9dªG,Lâ\9d« â\8a¢ V :[h,a] W â\86\92 â\9dªG,Lâ\9d« â\8a¢ T :[h,a] U â\86\92 â\9dªG,Lâ\9d« ⊢ U :*[h,a,n] ⓛ[p]W.U0 →
+ ad a (â\86\91n) â\86\92 â\9d¨G,Lâ\9d© â\8a¢ V :[h,a] W â\86\92 â\9d¨G,Lâ\9d© â\8a¢ T :[h,a] U â\86\92 â\9d¨G,Lâ\9d© ⊢ U :*[h,a,n] ⓛ[p]W.U0 →
Q G L V W → Q G L T U → Q G L (ⓐV.T) (ⓐV.U)
) →
- (â\88\80G,L,T,U. â\9dªG,Lâ\9d« ⊢ T :[h,a] U → Q G L T U → Q G L (ⓝU.T) U
+ (â\88\80G,L,T,U. â\9d¨G,Lâ\9d© ⊢ T :[h,a] U → Q G L T U → Q G L (ⓝU.T) U
) →
(∀G,L,T,U1,U2.
- â\9dªG,Lâ\9d« â\8a¢ T :[h,a] U1 â\86\92 â\9dªG,Lâ\9d« â\8a¢ U1 â¬\8c*[h] U2 â\86\92 â\9dªG,Lâ\9d« ⊢ U2 ![h,a] →
+ â\9d¨G,Lâ\9d© â\8a¢ T :[h,a] U1 â\86\92 â\9d¨G,Lâ\9d© â\8a¢ U1 â¬\8c*[h] U2 â\86\92 â\9d¨G,Lâ\9d© ⊢ U2 ![h,a] →
Q G L T U1 → Q G L T U2
) →
- â\88\80G,L,T,U. â\9dªG,Lâ\9d« ⊢ T :[h,a] U → Q G L T U.
+ â\88\80G,L,T,U. â\9d¨G,Lâ\9d© ⊢ T :[h,a] U → Q G L T U.
#h #a #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #H9 #G #L #T
@(fqup_wf_ind_eq (Ⓣ) … G L T) -G -L -T #G0 #L0 #T0 #IH #G #L * * [|||| * ]
[ #s #HG #HL #HT #X #H destruct -IH
(* Main properties **********************************************************)
theorem ntas_trans (h) (a) (G) (L) (T0):
- â\88\80n1,T1. â\9dªG,Lâ\9d« ⊢ T1 :*[h,a,n1] T0 →
- â\88\80n2,T2. â\9dªG,Lâ\9d« â\8a¢ T0 :*[h,a,n2] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 :*[h,a,n1+n2] T2.
+ â\88\80n1,T1. â\9d¨G,Lâ\9d© ⊢ T1 :*[h,a,n1] T0 →
+ â\88\80n2,T2. â\9d¨G,Lâ\9d© â\8a¢ T0 :*[h,a,n2] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 :*[h,a,n1+n2] T2.
#h #a #G #L #T0 #n1 #T1 * #X1 #HT0 #HT1 #H01 #H11 #n2 #T2 * #X2 #HT2 #_ #H22 #H02
elim (cnv_cpms_conf … HT0 … H01 … H02) -T0 <minus_O_n <minus_n_O #X0 #H10 #H20
/3 width=5 by ntas_intro, cpms_trans/
(* Properties based on preservation *****************************************)
lemma cnv_cpms_ntas (h) (a) (G) (L):
- â\88\80T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\88\80n,U.â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n] U â\86\92 â\9dªG,Lâ\9d« ⊢ T :*[h,a,n] U.
+ â\88\80T. â\9d¨G,Lâ\9d© â\8a¢ T ![h,a] â\86\92 â\88\80n,U.â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,n] U â\86\92 â\9d¨G,Lâ\9d© ⊢ T :*[h,a,n] U.
/3 width=4 by ntas_intro, cnv_cpms_trans/ qed.
(* Inversion lemmas based on preservation ***********************************)
lemma ntas_inv_plus (h) (a) (n1) (n2) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 :*[h,a,n1+n2] T2 →
- â\88\83â\88\83T0. â\9dªG,Lâ\9d« â\8a¢ T1 :*[h,a,n1] T0 & â\9dªG,Lâ\9d« ⊢ T0 :*[h,a,n2] T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 :*[h,a,n1+n2] T2 →
+ â\88\83â\88\83T0. â\9d¨G,Lâ\9d© â\8a¢ T1 :*[h,a,n1] T0 & â\9d¨G,Lâ\9d© ⊢ T0 :*[h,a,n2] T2.
#h #a #n1 #n2 #G #L #T1 #T2 * #X0 #HT2 #HT1 #H20 #H10
elim (cpms_inv_plus … H10) -H10 #T0 #H10 #H00
lapply (cnv_cpms_trans … HT1 … H10) #HT0
qed-.
lemma ntas_inv_appl_sn (h) (a) (m) (G) (L) (V) (T):
- â\88\80X. â\9dªG,Lâ\9d« ⊢ ⓐV.T :*[h,a,m] X →
- â\88¨â\88¨ â\88\83â\88\83n,p,W,U,U0. n â\89¤ m & ad a n & â\9dªG,Lâ\9d« â\8a¢ V :*[h,a,1] W & â\9dªG,Lâ\9d« â\8a¢ T :*[h,a,n] â\93\9b[p]W.U0 & â\9dªG,L.â\93\9bWâ\9d« â\8a¢ U0 :*[h,a,m-n] U & â\9dªG,Lâ\9d« â\8a¢ â\93\90V.â\93\9b[p]W.U â¬\8c*[h] X & â\9dªG,Lâ\9d« ⊢ X ![h,a]
- | â\88\83â\88\83n,p,W,U,U0. m â\89¤ n & ad a n & â\9dªG,Lâ\9d« â\8a¢ V :*[h,a,1] W & â\9dªG,Lâ\9d« â\8a¢ T :*[h,a,m] U & â\9dªG,Lâ\9d« â\8a¢ U :*[h,a,n-m] â\93\9b[p]W.U0 & â\9dªG,Lâ\9d« â\8a¢ â\93\90V.U â¬\8c*[h] X & â\9dªG,Lâ\9d« ⊢ X ![h,a].
+ â\88\80X. â\9d¨G,Lâ\9d© ⊢ ⓐV.T :*[h,a,m] X →
+ â\88¨â\88¨ â\88\83â\88\83n,p,W,U,U0. n â\89¤ m & ad a n & â\9d¨G,Lâ\9d© â\8a¢ V :*[h,a,1] W & â\9d¨G,Lâ\9d© â\8a¢ T :*[h,a,n] â\93\9b[p]W.U0 & â\9d¨G,L.â\93\9bWâ\9d© â\8a¢ U0 :*[h,a,m-n] U & â\9d¨G,Lâ\9d© â\8a¢ â\93\90V.â\93\9b[p]W.U â¬\8c*[h] X & â\9d¨G,Lâ\9d© ⊢ X ![h,a]
+ | â\88\83â\88\83n,p,W,U,U0. m â\89¤ n & ad a n & â\9d¨G,Lâ\9d© â\8a¢ V :*[h,a,1] W & â\9d¨G,Lâ\9d© â\8a¢ T :*[h,a,m] U & â\9d¨G,Lâ\9d© â\8a¢ U :*[h,a,n-m] â\93\9b[p]W.U0 & â\9d¨G,Lâ\9d© â\8a¢ â\93\90V.U â¬\8c*[h] X & â\9d¨G,Lâ\9d© ⊢ X ![h,a].
#h #a #m #G #L #V #T #X
* #X0 #HX #HVT #HX0 #HTX0
elim (cnv_inv_appl … HVT) #n #p #W #U0 #Ha #HV #HT #HVW #HTU0
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 :[ break term 46 h, break term 46 a ] break term 46 T2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 :[ break term 46 h, break term 46 a ] break term 46 T2 )"
non associative with precedence 45
for @{ 'Colon $h $a $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 :*[ break term 46 h, break term 46 a, break term 46 n ] break term 46 T2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 :*[ break term 46 h, break term 46 a, break term 46 n ] break term 46 T2 )"
non associative with precedence 45
for @{ 'ColonStar $h $a $n $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T ![ break term 46 h, break term 46 a ] )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T ![ break term 46 h, break term 46 a ] )"
non associative with precedence 45
for @{ 'Exclaim $h $a $G $L $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 ⬌[ break term 46 h ] break term 46 T2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 ⬌[ break term 46 h ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PConv $h $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L1 â\9d« ⊢ ⬌η[ break term 46 h ] break term 46 L2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L1 â\9d© ⊢ ⬌η[ break term 46 h ] break term 46 L2 )"
non associative with precedence 45
for @{ 'PConvEta $h $G $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 ⬌η[ break term 46 h ] break term 46 T2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 ⬌η[ break term 46 h ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PConvEta $h $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 ⬌*[ break term 46 h ] break term 46 T2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 ⬌*[ break term 46 h ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PConvStar $h $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 ⬌*[ break term 46 h, break term 46 n1, break term 46 n2 ] break term 46 T2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 ⬌*[ break term 46 h, break term 46 n1, break term 46 n2 ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PConvStar $h $n1 $n2 $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 ➡[ break term 46 h, break term 46 n ] break term 46 T2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 ➡[ break term 46 h, break term 46 n ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PRed $h $n $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 ➡*𝐍[ break term 46 h, break term 46 n ] break term 46 T2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 ➡*𝐍[ break term 46 h, break term 46 n ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PRedEval $h $n $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 ➡*𝐍𝐖*[ break term 46 h, break term 46 n ] break term 46 T2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 ➡*𝐍𝐖*[ break term 46 h, break term 46 n ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PRedEvalWStar $h $n $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ ➡𝐍𝐖*[ break term 46 h ] break term 46 T )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ ➡𝐍𝐖*[ break term 46 h ] break term 46 T )"
non associative with precedence 45
for @{ 'PRedITNormal $h $G $L $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ ➡𝐍[ break term 46 h, break term 46 n ] break term 46 T )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ ➡𝐍[ break term 46 h, break term 46 n ] break term 46 T )"
non associative with precedence 45
for @{ 'PRedNormal $h $n $G $L $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L1 â\9d« ⊢ ➡[ break term 46 h, break term 46 n ] break term 46 L2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L1 â\9d© ⊢ ➡[ break term 46 h, break term 46 n ] break term 46 L2 )"
non associative with precedence 45
for @{ 'PRedSn $h $n $G $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L1 â\9d« ⊢ ➡*[ break term 46 h, break term 46 n ] break term 46 L2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L1 â\9d© ⊢ ➡*[ break term 46 h, break term 46 n ] break term 46 L2 )"
non associative with precedence 45
for @{ 'PRedSnStar $h $n $G $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 ➡*[ break term 46 h, break term 46 n ] break term 46 T2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 ➡*[ break term 46 h, break term 46 n ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PRedStar $h $n $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« â\89½ â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
+notation "hvbox( â\9d¨ term 46 G1, break term 46 L1, break term 46 T1 â\9d© â\89½ â\9d¨ break term 46 G2, break term 46 L2, break term 46 T2 â\9d© )"
non associative with precedence 45
for @{ 'PRedSubTy $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« â\89» â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
+notation "hvbox( â\9d¨ term 46 G1, break term 46 L1, break term 46 T1 â\9d© â\89» â\9d¨ break term 46 G2, break term 46 L2, break term 46 T2 â\9d© )"
non associative with precedence 45
for @{ 'PRedSubTyProper $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« â\89¥ â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
+notation "hvbox( â\9d¨ term 46 G1, break term 46 L1, break term 46 T1 â\9d© â\89¥ â\9d¨ break term 46 G2, break term 46 L2, break term 46 T2 â\9d© )"
non associative with precedence 45
for @{ 'PRedSubTyStar $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« > â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
+notation "hvbox( â\9d¨ term 46 G1, break term 46 L1, break term 46 T1 â\9d© > â\9d¨ break term 46 G2, break term 46 L2, break term 46 T2 â\9d© )"
non associative with precedence 45
for @{ 'PRedSubTyStarProper $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\89¥ð\9d\90\92â\9dª break term 46 G, break term 46 L, break term 46 T â\9d« )"
+notation "hvbox( â\89¥ð\9d\90\92â\9d¨ break term 46 G, break term 46 L, break term 46 T â\9d© )"
non associative with precedence 45
for @{ 'PRedSubTyStrong $G $L $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 ⬈ break term 46 T2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 ⬈ break term 46 T2 )"
non associative with precedence 45
for @{ 'PRedTy $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 ⬈[ break term 46 Rs, break term 46 Rk, break term 46 c ] break term 46 T2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 ⬈[ break term 46 Rs, break term 46 Rk, break term 46 c ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PRedTy $Rs $Rk $c $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ ⬈𝐍 break term 46 T )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ ⬈𝐍 break term 46 T )"
non associative with precedence 45
for @{ 'PRedTyNormal $G $L $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L1 â\9d« ⊢ ⬈ break term 46 L2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L1 â\9d© ⊢ ⬈ break term 46 L2 )"
non associative with precedence 45
for @{ 'PRedTySn $G $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L1 â\9d« ⊢ ⬈[ break term 46 T ] break term 46 L2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L1 â\9d© ⊢ ⬈[ break term 46 T ] break term 46 L2 )"
non associative with precedence 45
for @{ 'PRedTySn $T $G $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L1 â\9d« ⊢ ⬈* break term 46 L2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L1 â\9d© ⊢ ⬈* break term 46 L2 )"
non associative with precedence 45
for @{ 'PRedTySnStar $G $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 ⬈* break term 46 T2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 ⬈* break term 46 T2 )"
non associative with precedence 45
for @{ 'PRedTyStar $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ ⬈*𝐒break term 46 T )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ ⬈*𝐒break term 46 T )"
non associative with precedence 45
for @{ 'PRedTyStrong $G $L $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 ⬆[ break term 46 h, break term 46 n ] break term 46 T2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 ⬆[ break term 46 h, break term 46 n ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PTy $h $n $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« ⊢ break term 46 T1 ⬆*[ break term 46 h, break term 46 n ] break term 46 T2 )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L â\9d© ⊢ break term 46 T1 ⬆*[ break term 46 h, break term 46 n ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PTyStar $h $n $G $L $T1 $T2 }.
(* NORMAL TERMS FOR T-UNUNBOUND WHD RT-TRANSITION ***************************)
definition cnuw (h) (G) (L): predicate term ≝
- λT1. â\88\80n,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T2 → T1 ≃ T2.
+ λT1. â\88\80n,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T2 → T1 ≃ T2.
interpretation
"normality for t-unbound weak head context-sensitive parallel rt-transition (term)"
(* Basic properties *********************************************************)
-lemma cnuw_sort (h) (G) (L): â\88\80s. â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] ⋆s.
+lemma cnuw_sort (h) (G) (L): â\88\80s. â\9d¨G,Lâ\9d© ⊢ ➡𝐍𝐖*[h] ⋆s.
#h #G #L #s1 #n #X #H
lapply (cpms_inv_sort1 … H) -H #H destruct //
qed.
-lemma cnuw_ctop (h) (G): â\88\80i. â\9dªG,â\8b\86â\9d« ⊢ ➡𝐍𝐖*[h] #i.
+lemma cnuw_ctop (h) (G): â\88\80i. â\9d¨G,â\8b\86â\9d© ⊢ ➡𝐍𝐖*[h] #i.
#h #G #i #n #X #H
elim (cpms_inv_lref1_ctop … H) -H #H #_ destruct //
qed.
-lemma cnuw_zero_unit (h) (G) (L): â\88\80I. â\9dªG,L.â\93¤[I]â\9d« ⊢ ➡𝐍𝐖*[h] #0.
+lemma cnuw_zero_unit (h) (G) (L): â\88\80I. â\9d¨G,L.â\93¤[I]â\9d© ⊢ ➡𝐍𝐖*[h] #0.
#h #G #L #I #n #X #H
elim (cpms_inv_zero1_unit … H) -H #H #_ destruct //
qed.
-lemma cnuw_gref (h) (G) (L): â\88\80l. â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] §l.
+lemma cnuw_gref (h) (G) (L): â\88\80l. â\9d¨G,Lâ\9d© ⊢ ➡𝐍𝐖*[h] §l.
#h #G #L #l1 #n #X #H
elim (cpms_inv_gref1 … H) -H #H #_ destruct //
qed.
(* Basic_inversion lemmas ***************************************************)
-lemma cnuw_inv_zero_pair (h) (I) (G) (L): â\88\80V. â\9dªG,L.â\93\91[I]Vâ\9d« ⊢ ➡𝐍𝐖*[h] #0 → ⊥.
+lemma cnuw_inv_zero_pair (h) (I) (G) (L): â\88\80V. â\9d¨G,L.â\93\91[I]Vâ\9d© ⊢ ➡𝐍𝐖*[h] #0 → ⊥.
#h * #G #L #V #H
elim (lifts_total V (𝐔❨1❩)) #W #HVW
[ lapply (H 0 W ?) [ /3 width=3 by cpm_cpms, cpm_delta/ ]
qed-.
lemma cnuw_inv_cast (h) (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] ⓝV.T → ⊥.
+ â\88\80V,T. â\9d¨G,Lâ\9d© ⊢ ➡𝐍𝐖*[h] ⓝV.T → ⊥.
#h #G #L #V #T #H
lapply (H 0 T ?) [ /3 width=1 by cpm_cpms, cpm_eps/ ] -H #H
/2 width=3 by teqw_inv_cast_xy_y/
(* Basic forward lemmas *****************************************************)
lemma cnuw_fwd_appl (h) (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« â\8a¢ â\9e¡ð\9d\90\8dð\9d\90\96*[h] â\93\90V.T â\86\92 â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] T.
+ â\88\80V,T. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡ð\9d\90\8dð\9d\90\96*[h] â\93\90V.T â\86\92 â\9d¨G,Lâ\9d© ⊢ ➡𝐍𝐖*[h] T.
#h #G #L #V #T1 #HT1 #n #T2 #HT12
lapply (HT1 n (ⓐV.T2) ?) -HT1
/2 width=3 by cpms_appl_dx, teqw_inv_appl_bi/
(* Advanced inversion lemmas ************************************************)
lemma cnuw_inv_abbr_pos (h) (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] +ⓓV.T → ⊥.
+ â\88\80V,T. â\9d¨G,Lâ\9d© ⊢ ➡𝐍𝐖*[h] +ⓓV.T → ⊥.
#h #G #L #V #T1 #H
elim (cprs_abbr_pos_tneqw h G L V T1) #T2 #HT12 #HnT12
/3 width=2 by/
(* Advanced properties ******************************************************)
-lemma cnuw_abbr_neg (h) (G) (L): â\88\80V,T. â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] -ⓓV.T.
+lemma cnuw_abbr_neg (h) (G) (L): â\88\80V,T. â\9d¨G,Lâ\9d© ⊢ ➡𝐍𝐖*[h] -ⓓV.T.
#h #G #L #V1 #T1 #n #X #H
elim (cpms_inv_abbr_sn_dx … H) -H *
[ #V2 #T2 #_ #_ #H destruct /1 width=1 by teqw_abbr_neg/
]
qed.
-lemma cnuw_abst (h) (p) (G) (L): â\88\80W,T. â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] ⓛ[p]W.T.
+lemma cnuw_abst (h) (p) (G) (L): â\88\80W,T. â\9d¨G,Lâ\9d© ⊢ ➡𝐍𝐖*[h] ⓛ[p]W.T.
#h #p #G #L #W1 #T1 #n #X #H
elim (cpms_inv_abst_sn … H) -H #W2 #T2 #_ #_ #H destruct
/1 width=1 by teqw_abst/
qed.
lemma cnuw_cpms_trans (h) (n) (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] T1 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] T2.
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ ➡𝐍𝐖*[h] T1 →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ➡𝐍𝐖*[h] T2.
#h #n1 #G #L #T1 #HT1 #T2 #HT12 #n2 #T3 #HT23
/4 width=5 by cpms_trans, teqw_canc_sn/
qed-.
lemma cnuw_dec_ex (h) (G) (L):
- â\88\80T1. â\88¨â\88¨ â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] T1
- | â\88\83â\88\83n,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T2 & (T1 ≃ T2 → ⊥).
+ â\88\80T1. â\88¨â\88¨ â\9d¨G,Lâ\9d© ⊢ ➡𝐍𝐖*[h] T1
+ | â\88\83â\88\83n,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T2 & (T1 ≃ T2 → ⊥).
#h #G #L #T1 elim T1 -T1 *
[ #s /3 width=5 by cnuw_sort, or_introl/
| #i elim (drops_F_uni L i)
]
qed-.
-lemma cnuw_dec (h) (G) (L): â\88\80T. Decidable (â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] T).
+lemma cnuw_dec (h) (G) (L): â\88\80T. Decidable (â\9d¨G,Lâ\9d© ⊢ ➡𝐍𝐖*[h] T).
#h #G #L #T1
elim (cnuw_dec_ex h G L T1)
[ /2 width=1 by or_introl/
(* Advanced properties ******************************************************)
lemma cnuw_lref (h) (I) (G) (L):
- â\88\80i. â\9dªG,Lâ\9d« â\8a¢ â\9e¡ð\9d\90\8dð\9d\90\96*[h] #i â\86\92 â\9dªG,L.â\93\98[I]â\9d« ⊢ ➡𝐍𝐖*[h] #↑i.
+ â\88\80i. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡ð\9d\90\8dð\9d\90\96*[h] #i â\86\92 â\9d¨G,L.â\93\98[I]â\9d© ⊢ ➡𝐍𝐖*[h] #↑i.
#h #I #G #L #i #Hi #n #X2 #H
elim (cpms_inv_lref_sn … H) -H *
[ #H #_ destruct //
qed.
lemma cnuw_atom_drops (h) (b) (G) (L):
- â\88\80i. â\87©*[b,ð\9d\90\94â\9d¨iâ\9d©] L â\89\98 â\8b\86 â\86\92 â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] #i.
+ â\88\80i. â\87©*[b,ð\9d\90\94â\9d¨iâ\9d©] L â\89\98 â\8b\86 â\86\92 â\9d¨G,Lâ\9d© ⊢ ➡𝐍𝐖*[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 â\89\98 K.â\93¤[I] â\86\92 â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] #i.
+ â\88\80K,i. â\87©[i] L â\89\98 K.â\93¤[I] â\86\92 â\9d¨G,Lâ\9d© ⊢ ➡𝐍𝐖*[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
(* Advanced properties with simple terms ************************************)
lemma cnuw_appl_simple (h) (G) (L):
- â\88\80V,T. ð\9d\90\92â\9dªTâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â\9e¡ð\9d\90\8dð\9d\90\96*[h] T â\86\92 â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] ⓐV.T.
+ â\88\80V,T. ð\9d\90\92â\9d¨Tâ\9d© â\86\92 â\9d¨G,Lâ\9d© â\8a¢ â\9e¡ð\9d\90\8dð\9d\90\96*[h] T â\86\92 â\9d¨G,Lâ\9d© ⊢ ➡𝐍𝐖*[h] ⓐV.T.
#h #G #L #V1 #T1 #H1T1 #H2T1 #n #X #H
elim (cpms_inv_appl_sn … H) -H *
[ #V2 #T2 #_ #HT12 #H destruct -H1T1
(* Basic_2A1: uses: cpre *)
definition cpmre (h) (n) (G) (L): relation2 term term ≝
- λT1,T2. â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n] T2 & â\9dªG,Lâ\9d« ⊢ ➡𝐍[h,0] T2.
+ λT1,T2. â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n] T2 & â\9d¨G,Lâ\9d© ⊢ ➡𝐍[h,0] T2.
interpretation "evaluation for t-bound context-sensitive parallel rt-transition (term)"
'PRedEval h n G L T1 T2 = (cpmre h n G L T1 T2).
(* Basic properties *********************************************************)
lemma cpmre_intro (h) (n) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ â\9e¡ð\9d\90\8d[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*𝐍[h,n] T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© â\8a¢ â\9e¡ð\9d\90\8d[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡*𝐍[h,n] T2.
/2 width=1 by conj/ qed.
(* Basic forward lemmas *****************************************************)
lemma cpmre_fwd_cpms (h) (n) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*ð\9d\90\8d[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*ð\9d\90\8d[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T2.
#h #n #G #L #T1 #T2 * //
qed-.
(* Properties with atomic atomic arity assignment on terms ******************)
lemma cpmre_total_aaa (h) (n) (A) (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T1 â\81\9d A â\86\92 â\88\83T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*𝐍[h,n] T2.
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T1 â\81\9d A â\86\92 â\88\83T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡*𝐍[h,n] T2.
#h #n #A #G #L #T1 #HT1
elim (cpms_total_aaa h … n … HT1) #T0 #HT10
elim (cprre_total_csx h G L T0)
lemma cpms_ind_sn (h) (G) (L) (T2) (Q:relation2 …):
Q 0 T2 →
- (â\88\80n1,n2,T1,T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,n1] T â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡*[h,n2] T2 → Q n2 T → Q (n1+n2) T1) →
- â\88\80n,T1. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T2 → Q n T1.
+ (â\88\80n1,n2,T1,T. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,n1] T â\86\92 â\9d¨G,Lâ\9d© ⊢ T ➡*[h,n2] T2 → Q n2 T → Q (n1+n2) T1) →
+ â\88\80n,T1. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T2 → Q n T1.
#h #G #L #T2 #Q @ltc_ind_sn_refl //
qed-.
lemma cpms_ind_dx (h) (G) (L) (T1) (Q:relation2 …):
Q 0 T1 →
- (â\88\80n1,n2,T,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n1] T â\86\92 Q n1 T â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡[h,n2] T2 → Q (n1+n2) T2) →
- â\88\80n,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T2 → Q n T2.
+ (â\88\80n1,n2,T,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n1] T â\86\92 Q n1 T â\86\92 â\9d¨G,Lâ\9d© ⊢ T ➡[h,n2] T2 → Q (n1+n2) T2) →
+ â\88\80n,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T2 → Q n T2.
#h #G #L #T1 #Q @ltc_ind_dx_refl //
qed-.
(* Basic_1: uses: pr3_pr2 *)
(* Basic_2A1: includes: cpr_cprs *)
lemma cpm_cpms (h) (G) (L):
- â\88\80n,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T2.
+ â\88\80n,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T2.
/2 width=1 by ltc_rc/ qed.
lemma cpms_step_sn (h) (G) (L):
- â\88\80n1,T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n1] T →
- â\88\80n2,T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n2] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n1+n2] T2.
+ â\88\80n1,T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n1] T →
+ â\88\80n2,T2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,n2] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n1+n2] T2.
/2 width=3 by ltc_sn/ qed-.
lemma cpms_step_dx (h) (G) (L):
- â\88\80n1,T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n1] T →
- â\88\80n2,T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[h,n2] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n1+n2] T2.
+ â\88\80n1,T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n1] T →
+ â\88\80n2,T2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡[h,n2] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n1+n2] T2.
/2 width=3 by ltc_dx/ qed-.
(* Basic_2A1: uses: cprs_bind_dx *)
lemma cpms_bind_dx (h) (n) (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h,0] V2 →
- â\88\80I,T1,T2. â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ➡*[h,n] T2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ➡*[h,n] ⓑ[p,I]V2.T2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ➡[h,0] V2 →
+ â\88\80I,T1,T2. â\9d¨G,L.â\93\91[I]V1â\9d© ⊢ T1 ➡*[h,n] T2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ➡*[h,n] ⓑ[p,I]V2.T2.
#h #n #G #L #V1 #V2 #HV12 #I #T1 #T2 #H #a @(cpms_ind_sn … H) -T1
/3 width=3 by cpms_step_sn, cpm_cpms, cpm_bind/ qed.
lemma cpms_appl_dx (h) (n) (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h,0] V2 →
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T2 →
- â\9dªG,Lâ\9d« ⊢ ⓐV1.T1 ➡*[h,n] ⓐV2.T2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ➡[h,0] V2 →
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓐV1.T1 ➡*[h,n] ⓐV2.T2.
#h #n #G #L #V1 #V2 #HV12 #T1 #T2 #H @(cpms_ind_sn … H) -T1
/3 width=3 by cpms_step_sn, cpm_cpms, cpm_appl/
qed.
lemma cpms_zeta (h) (n) (G) (L):
∀T1,T. ⇧[1] T ≘ T1 →
- â\88\80V,T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ +ⓓV.T1 ➡*[h,n] T2.
+ â\88\80V,T2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ +ⓓV.T1 ➡*[h,n] T2.
#h #n #G #L #T1 #T #HT1 #V #T2 #H @(cpms_ind_dx … H) -T2
/3 width=3 by cpms_step_dx, cpm_cpms, cpm_zeta/
qed.
(* Basic_2A1: uses: cprs_zeta *)
lemma cpms_zeta_dx (h) (n) (G) (L):
∀T2,T. ⇧[1] T2 ≘ T →
- â\88\80V,T1. â\9dªG,L.â\93\93Vâ\9d« â\8a¢ T1 â\9e¡*[h,n] T â\86\92 â\9dªG,Lâ\9d« ⊢ +ⓓV.T1 ➡*[h,n] T2.
+ â\88\80V,T1. â\9d¨G,L.â\93\93Vâ\9d© â\8a¢ T1 â\9e¡*[h,n] T â\86\92 â\9d¨G,Lâ\9d© ⊢ +ⓓV.T1 ➡*[h,n] T2.
#h #n #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/
qed.
(* Basic_2A1: uses: cprs_eps *)
lemma cpms_eps (h) (n) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T2 →
- â\88\80V. â\9dªG,Lâ\9d« ⊢ ⓝV.T1 ➡*[h,n] T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T2 →
+ â\88\80V. â\9d¨G,Lâ\9d© ⊢ ⓝV.T1 ➡*[h,n] T2.
#h #n #G #L #T1 #T2 #H @(cpms_ind_sn … H) -T1
/3 width=3 by cpms_step_sn, cpm_cpms, cpm_eps/
qed.
lemma cpms_ee (h) (n) (G) (L):
- â\88\80U1,U2. â\9dªG,Lâ\9d« ⊢ U1 ➡*[h,n] U2 →
- â\88\80T. â\9dªG,Lâ\9d« ⊢ ⓝU1.T ➡*[h,↑n] U2.
+ â\88\80U1,U2. â\9d¨G,Lâ\9d© ⊢ U1 ➡*[h,n] U2 →
+ â\88\80T. â\9d¨G,Lâ\9d© ⊢ ⓝU1.T ➡*[h,↑n] U2.
#h #n #G #L #U1 #U2 #H @(cpms_ind_sn … H) -U1 -n
[ /3 width=1 by cpm_cpms, cpm_ee/
| #n1 #n2 #U1 #U #HU1 #HU2 #_ #T >plus_S1
(* Basic_2A1: uses: cprs_beta_dx *)
lemma cpms_beta_dx (h) (n) (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h,0] V2 →
- â\88\80W1,W2. â\9dªG,Lâ\9d« ⊢ W1 ➡[h,0] W2 →
- â\88\80T1,T2. â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ➡*[h,n] T2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓐV1.ⓛ[p]W1.T1 ➡*[h,n] ⓓ[p]ⓝW2.V2.T2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ➡[h,0] V2 →
+ â\88\80W1,W2. â\9d¨G,Lâ\9d© ⊢ W1 ➡[h,0] W2 →
+ â\88\80T1,T2. â\9d¨G,L.â\93\9bW1â\9d© ⊢ T1 ➡*[h,n] T2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓐV1.ⓛ[p]W1.T1 ➡*[h,n] ⓓ[p]ⓝW2.V2.T2.
#h #n #G #L #V1 #V2 #HV12 #W1 #W2 #HW12 #T1 #T2 #H @(cpms_ind_dx … H) -T2
/4 width=7 by cpms_step_dx, cpm_cpms, cpms_bind_dx, cpms_appl_dx, cpm_beta/
qed.
(* Basic_2A1: uses: cprs_theta_dx *)
lemma cpms_theta_dx (h) (n) (G) (L):
- â\88\80V1,V. â\9dªG,Lâ\9d« ⊢ V1 ➡[h,0] V →
+ â\88\80V1,V. â\9d¨G,Lâ\9d© ⊢ V1 ➡[h,0] V →
∀V2. ⇧[1] V ≘ V2 →
- â\88\80W1,W2. â\9dªG,Lâ\9d« ⊢ W1 ➡[h,0] W2 →
- â\88\80T1,T2. â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ➡*[h,n] T2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓐV1.ⓓ[p]W1.T1 ➡*[h,n] ⓓ[p]W2.ⓐV2.T2.
+ â\88\80W1,W2. â\9d¨G,Lâ\9d© ⊢ W1 ➡[h,0] W2 →
+ â\88\80T1,T2. â\9d¨G,L.â\93\93W1â\9d© ⊢ T1 ➡*[h,n] T2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓐV1.ⓓ[p]W1.T1 ➡*[h,n] ⓓ[p]W2.ⓐV2.T2.
#h #n #G #L #V1 #V #HV1 #V2 #HV2 #W1 #W2 #HW12 #T1 #T2 #H @(cpms_ind_dx … H) -T2
/4 width=9 by cpms_step_dx, cpm_cpms, cpms_bind_dx, cpms_appl_dx, cpm_theta/
qed.
(* Advanced properties ******************************************************)
lemma cpms_sort (h) (G) (L):
- â\88\80n,s. â\9dªG,Lâ\9d« ⊢ ⋆s ➡*[h,n] ⋆((next h)^n s).
+ â\88\80n,s. â\9d¨G,Lâ\9d© ⊢ ⋆s ➡*[h,n] ⋆((next h)^n s).
#h #G #L #n elim n -n [ // ]
#n #IH #s <plus_SO_dx
/3 width=3 by cpms_step_dx, cpm_sort/
(* Basic inversion lemmas ***************************************************)
lemma cpms_inv_sort1 (h) (n) (G) (L):
- â\88\80X2,s. â\9dªG,Lâ\9d« ⊢ ⋆s ➡*[h,n] X2 → X2 = ⋆(((next h)^n) s).
+ â\88\80X2,s. â\9d¨G,Lâ\9d© ⊢ ⋆s ➡*[h,n] X2 → X2 = ⋆(((next h)^n) s).
#h #n #G #L #X2 #s #H @(cpms_ind_dx … H) -X2 //
#n1 #n2 #X #X2 #_ #IH #HX2 destruct
elim (cpm_inv_sort1 … HX2) -HX2 #H #_ destruct //
qed-.
lemma cpms_inv_lref1_ctop (h) (n) (G):
- â\88\80X2,i. â\9dªG,â\8b\86â\9d« ⊢ #i ➡*[h,n] X2 → ∧∧ X2 = #i & n = 0.
+ â\88\80X2,i. â\9d¨G,â\8b\86â\9d© ⊢ #i ➡*[h,n] X2 → ∧∧ X2 = #i & n = 0.
#h #n #G #X2 #i #H @(cpms_ind_dx … H) -X2
[ /2 width=1 by conj/
| #n1 #n2 #X #X2 #_ * #HX #Hn1 #HX2 destruct
qed-.
lemma cpms_inv_zero1_unit (h) (n) (I) (K) (G):
- â\88\80X2. â\9dªG,K.â\93¤[I]â\9d« ⊢ #0 ➡*[h,n] X2 → ∧∧ X2 = #0 & n = 0.
+ â\88\80X2. â\9d¨G,K.â\93¤[I]â\9d© ⊢ #0 ➡*[h,n] X2 → ∧∧ X2 = #0 & n = 0.
#h #n #I #G #K #X2 #H @(cpms_ind_dx … H) -X2
[ /2 width=1 by conj/
| #n1 #n2 #X #X2 #_ * #HX #Hn1 #HX2 destruct
qed-.
lemma cpms_inv_gref1 (h) (n) (G) (L):
- â\88\80X2,l. â\9dªG,Lâ\9d« ⊢ §l ➡*[h,n] X2 → ∧∧ X2 = §l & n = 0.
+ â\88\80X2,l. â\9d¨G,Lâ\9d© ⊢ §l ➡*[h,n] X2 → ∧∧ X2 = §l & n = 0.
#h #n #G #L #X2 #l #H @(cpms_ind_dx … H) -X2
[ /2 width=1 by conj/
| #n1 #n2 #X #X2 #_ * #HX #Hn1 #HX2 destruct
qed-.
lemma cpms_inv_cast1 (h) (n) (G) (L):
- â\88\80W1,T1,X2. â\9dªG,Lâ\9d« ⊢ ⓝW1.T1 ➡*[h,n] X2 →
- â\88¨â\88¨ â\88\83â\88\83W2,T2. â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡*[h,n] W2 & â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T2 & X2 = ⓝW2.T2
- | â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] X2
- | â\88\83â\88\83m. â\9dªG,Lâ\9d« ⊢ W1 ➡*[h,m] X2 & n = ↑m.
+ â\88\80W1,T1,X2. â\9d¨G,Lâ\9d© ⊢ ⓝW1.T1 ➡*[h,n] X2 →
+ â\88¨â\88¨ â\88\83â\88\83W2,T2. â\9d¨G,Lâ\9d© â\8a¢ W1 â\9e¡*[h,n] W2 & â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T2 & X2 = ⓝW2.T2
+ | â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] X2
+ | â\88\83â\88\83m. â\9d¨G,Lâ\9d© ⊢ W1 ➡*[h,m] X2 & n = ↑m.
#h #n #G #L #W1 #T1 #X2 #H @(cpms_ind_dx … H) -n -X2
[ /3 width=5 by or3_intro0, ex3_2_intro/
| #n1 #n2 #X #X2 #_ * [ * || * ]
/3 width=5 by cpms_fwd_cpxs, cpxs_aaa_conf/ qed-.
lemma cpms_total_aaa (h) (G) (L) (n) (A):
- â\88\80T. â\9dªG,Lâ\9d« â\8a¢ T â\81\9d A â\86\92 â\88\83U. â\9dªG,Lâ\9d« ⊢ T ➡*[h,n] U.
+ â\88\80T. â\9d¨G,Lâ\9d© â\8a¢ T â\81\9d A â\86\92 â\88\83U. â\9d¨G,Lâ\9d© ⊢ T ➡*[h,n] U.
#h #G #L #n elim n -n
[ /2 width=3 by ex_intro/
| #n #IH #A #T1 #HT1 <plus_SO_dx
qed-.
lemma cpms_abst_dx_le_aaa (h) (G) (L) (T) (W) (p):
- â\88\80A. â\9dªG,Lâ\9d« ⊢ T ⁝ A →
- â\88\80n1,U1. â\9dªG,Lâ\9d« ⊢ T ➡*[h,n1] ⓛ[p]W.U1 → ∀n2. n1 ≤ n2 →
- â\88\83â\88\83U2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n2] â\93\9b[p]W.U2 & â\9dªG,L.â\93\9bWâ\9d« ⊢ U1 ➡*[h,n2-n1] U2.
+ â\88\80A. â\9d¨G,Lâ\9d© ⊢ T ⁝ A →
+ â\88\80n1,U1. â\9d¨G,Lâ\9d© ⊢ T ➡*[h,n1] ⓛ[p]W.U1 → ∀n2. n1 ≤ n2 →
+ â\88\83â\88\83U2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,n2] â\93\9b[p]W.U2 & â\9d¨G,L.â\93\9bWâ\9d© ⊢ U1 ➡*[h,n2-n1] U2.
#h #G #L #T #W #p #A #HA #n1 #U1 #HTU1 #n2 #Hn12
lapply (cpms_aaa_conf … HA … HTU1) -HA #HA
elim (cpms_total_aaa h … (n2-n1) … HA) -HA #X #H
(* Basic_2A1: includes: cprs_bind *)
theorem cpms_bind (h) (n) (G) (L):
- â\88\80I,V1,T1,T2. â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ➡*[h,n] T2 →
- â\88\80V2. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h,0] V2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ➡*[h,n] ⓑ[p,I]V2.T2.
+ â\88\80I,V1,T1,T2. â\9d¨G,L.â\93\91[I]V1â\9d© ⊢ T1 ➡*[h,n] T2 →
+ â\88\80V2. â\9d¨G,Lâ\9d© ⊢ V1 ➡*[h,0] V2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ➡*[h,n] ⓑ[p,I]V2.T2.
#h #n #G #L #I #V1 #T1 #T2 #HT12 #V2 #H @(cprs_ind_dx … H) -V2
[ /2 width=1 by cpms_bind_dx/
| #V #V2 #_ #HV2 #IH #p >(plus_n_O … n) -HT12
qed.
theorem cpms_appl (h) (n) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T2 →
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h,0] V2 →
- â\9dªG,Lâ\9d« ⊢ ⓐV1.T1 ➡*[h,n] ⓐV2.T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T2 →
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ➡*[h,0] V2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓐV1.T1 ➡*[h,n] ⓐV2.T2.
#h #n #G #L #T1 #T2 #HT12 #V1 #V2 #H @(cprs_ind_dx … H) -V2
[ /2 width=1 by cpms_appl_dx/
| #V #V2 #_ #HV2 #IH >(plus_n_O … n) -HT12
(* Basic_2A1: includes: cprs_beta_rc *)
theorem cpms_beta_rc (h) (n) (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h,0] V2 →
- â\88\80W1,T1,T2. â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ➡*[h,n] T2 →
- â\88\80W2. â\9dªG,Lâ\9d« ⊢ W1 ➡*[h,0] W2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓐV1.ⓛ[p]W1.T1 ➡*[h,n] ⓓ[p]ⓝW2.V2.T2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ➡[h,0] V2 →
+ â\88\80W1,T1,T2. â\9d¨G,L.â\93\9bW1â\9d© ⊢ T1 ➡*[h,n] T2 →
+ â\88\80W2. â\9d¨G,Lâ\9d© ⊢ W1 ➡*[h,0] W2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓐV1.ⓛ[p]W1.T1 ➡*[h,n] ⓓ[p]ⓝW2.V2.T2.
#h #n #G #L #V1 #V2 #HV12 #W1 #T1 #T2 #HT12 #W2 #H @(cprs_ind_dx … H) -W2
[ /2 width=1 by cpms_beta_dx/
| #W #W2 #_ #HW2 #IH #p >(plus_n_O … n) -HT12
(* Basic_2A1: includes: cprs_beta *)
theorem cpms_beta (h) (n) (G) (L):
- â\88\80W1,T1,T2. â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ➡*[h,n] T2 →
- â\88\80W2. â\9dªG,Lâ\9d« ⊢ W1 ➡*[h,0] W2 →
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h,0] V2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓐV1.ⓛ[p]W1.T1 ➡*[h,n] ⓓ[p]ⓝW2.V2.T2.
+ â\88\80W1,T1,T2. â\9d¨G,L.â\93\9bW1â\9d© ⊢ T1 ➡*[h,n] T2 →
+ â\88\80W2. â\9d¨G,Lâ\9d© ⊢ W1 ➡*[h,0] W2 →
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ➡*[h,0] V2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓐV1.ⓛ[p]W1.T1 ➡*[h,n] ⓓ[p]ⓝW2.V2.T2.
#h #n #G #L #W1 #T1 #T2 #HT12 #W2 #HW12 #V1 #V2 #H @(cprs_ind_dx … H) -V2
[ /2 width=1 by cpms_beta_rc/
| #V #V2 #_ #HV2 #IH #p >(plus_n_O … n) -HT12
(* Basic_2A1: includes: cprs_theta_rc *)
theorem cpms_theta_rc (h) (n) (G) (L):
- â\88\80V1,V. â\9dªG,Lâ\9d« ⊢ V1 ➡[h,0] V → ∀V2. ⇧[1] V ≘ V2 →
- â\88\80W1,T1,T2. â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ➡*[h,n] T2 →
- â\88\80W2. â\9dªG,Lâ\9d« ⊢ W1 ➡*[h,0] W2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓐV1.ⓓ[p]W1.T1 ➡*[h,n] ⓓ[p]W2.ⓐV2.T2.
+ â\88\80V1,V. â\9d¨G,Lâ\9d© ⊢ V1 ➡[h,0] V → ∀V2. ⇧[1] V ≘ V2 →
+ â\88\80W1,T1,T2. â\9d¨G,L.â\93\93W1â\9d© ⊢ T1 ➡*[h,n] T2 →
+ â\88\80W2. â\9d¨G,Lâ\9d© ⊢ W1 ➡*[h,0] W2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓐV1.ⓓ[p]W1.T1 ➡*[h,n] ⓓ[p]W2.ⓐV2.T2.
#h #n #G #L #V1 #V #HV1 #V2 #HV2 #W1 #T1 #T2 #HT12 #W2 #H @(cprs_ind_dx … H) -W2
[ /2 width=3 by cpms_theta_dx/
| #W #W2 #_ #HW2 #IH #p >(plus_n_O … n) -HT12
(* Basic_2A1: includes: cprs_theta *)
theorem cpms_theta (h) (n) (G) (L):
- â\88\80V,V2. â\87§[1] V â\89\98 V2 â\86\92 â\88\80W1,W2. â\9dªG,Lâ\9d« ⊢ W1 ➡*[h,0] W2 →
- â\88\80T1,T2. â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ➡*[h,n] T2 →
- â\88\80V1. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h,0] V →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓐV1.ⓓ[p]W1.T1 ➡*[h,n] ⓓ[p]W2.ⓐV2.T2.
+ â\88\80V,V2. â\87§[1] V â\89\98 V2 â\86\92 â\88\80W1,W2. â\9d¨G,Lâ\9d© ⊢ W1 ➡*[h,0] W2 →
+ â\88\80T1,T2. â\9d¨G,L.â\93\93W1â\9d© ⊢ T1 ➡*[h,n] T2 →
+ â\88\80V1. â\9d¨G,Lâ\9d© ⊢ V1 ➡*[h,0] V →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓐV1.ⓓ[p]W1.T1 ➡*[h,n] ⓓ[p]W2.ⓐV2.T2.
#h #n #G #L #V #V2 #HV2 #W1 #W2 #HW12 #T1 #T2 #HT12 #V1 #H @(cprs_ind_sn … H) -V1
[ /2 width=3 by cpms_theta_rc/
| #V1 #V0 #HV10 #_ #IH #p >(plus_O_n … n) -HT12
(* Basic_2A1: uses: lstas_scpds_trans scpds_strap2 *)
theorem cpms_trans (h) (G) (L):
- â\88\80n1,T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n1] T →
- â\88\80n2,T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n2] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n1+n2] T2.
+ â\88\80n1,T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n1] T →
+ â\88\80n2,T2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,n2] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n1+n2] T2.
/2 width=3 by ltc_trans/ qed-.
(* Basic_2A1: uses: scpds_cprs_trans *)
theorem cpms_cprs_trans (h) (n) (G) (L):
- â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T2.
+ â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T2.
#h #n #G #L #T1 #T #HT1 #T2 #HT2 >(plus_n_O … n)
/2 width=3 by cpms_trans/ qed-.
(* Advanced inversion lemmas ************************************************)
lemma cpms_inv_appl_sn (h) (n) (G) (L):
- â\88\80V1,T1,X2. â\9dªG,Lâ\9d« ⊢ ⓐV1.T1 ➡*[h,n] X2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡*[h,0] V2 & â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T2 & X2 = ⓐV2.T2
- | â\88\83â\88\83n1,n2,p,W,T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n1] â\93\9b[p]W.T & â\9dªG,Lâ\9d« ⊢ ⓓ[p]ⓝW.V1.T ➡*[h,n2] X2 & n1 + n2 = n
- | â\88\83â\88\83n1,n2,p,V0,V2,V,T. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡*[h,0] V0 & â\87§[1] V0 â\89\98 V2 & â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n1] â\93\93[p]V.T & â\9dªG,Lâ\9d« ⊢ ⓓ[p]V.ⓐV2.T ➡*[h,n2] X2 & n1 + n2 = n.
+ â\88\80V1,T1,X2. â\9d¨G,Lâ\9d© ⊢ ⓐV1.T1 ➡*[h,n] X2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡*[h,0] V2 & â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T2 & X2 = ⓐV2.T2
+ | â\88\83â\88\83n1,n2,p,W,T. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n1] â\93\9b[p]W.T & â\9d¨G,Lâ\9d© ⊢ ⓓ[p]ⓝW.V1.T ➡*[h,n2] X2 & n1 + n2 = n
+ | â\88\83â\88\83n1,n2,p,V0,V2,V,T. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡*[h,0] V0 & â\87§[1] V0 â\89\98 V2 & â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n1] â\93\93[p]V.T & â\9d¨G,Lâ\9d© ⊢ ⓓ[p]V.ⓐV2.T ➡*[h,n2] X2 & n1 + n2 = n.
#h #n #G #L #V1 #T1 #U2 #H
@(cpms_ind_dx … H) -U2 /3 width=5 by or3_intro0, ex3_2_intro/
#n1 #n2 #U #U2 #_ * *
qed-.
lemma cpms_inv_plus (h) (G) (L):
- â\88\80n1,n2,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n1+n2] T2 →
- â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n1] T & â\9dªG,Lâ\9d« ⊢ T ➡*[h,n2] T2.
+ â\88\80n1,n2,T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n1+n2] T2 →
+ â\88\83â\88\83T. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n1] T & â\9d¨G,Lâ\9d© ⊢ T ➡*[h,n2] T2.
#h #G #L #n1 elim n1 -n1 /2 width=3 by ex2_intro/
#n1 #IH #n2 #T1 #T2 <plus_S1 #H
elim (cpms_inv_succ_sn … H) -H #T0 #HT10 #HT02
(* Advanced main properties *************************************************)
theorem cpms_cast (h) (n) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T2 →
- â\88\80U1,U2. â\9dªG,Lâ\9d« ⊢ U1 ➡*[h,n] U2 →
- â\9dªG,Lâ\9d« ⊢ ⓝU1.T1 ➡*[h,n] ⓝU2.T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T2 →
+ â\88\80U1,U2. â\9d¨G,Lâ\9d© ⊢ U1 ➡*[h,n] U2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓝU1.T1 ➡*[h,n] ⓝU2.T2.
#h #n #G #L #T1 #T2 #H @(cpms_ind_sn … H) -T1 -n
[ /3 width=3 by cpms_cast_sn/
| #n1 #n2 #T1 #T #HT1 #_ #IH #U1 #U2 #H
qed.
theorem cpms_trans_swap (h) (G) (L) (T1):
- â\88\80n1,T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n1] T â\86\92 â\88\80n2,T2. â\9dªG,Lâ\9d« ⊢ T ➡*[h,n2] T2 →
- â\88\83â\88\83T0. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n2] T0 & â\9dªG,Lâ\9d« ⊢ T0 ➡*[h,n1] T2.
+ â\88\80n1,T. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n1] T â\86\92 â\88\80n2,T2. â\9d¨G,Lâ\9d© ⊢ T ➡*[h,n2] T2 →
+ â\88\83â\88\83T0. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n2] T0 & â\9d¨G,Lâ\9d© ⊢ T0 ➡*[h,n1] T2.
#h #G #L #T1 #n1 #T #HT1 #n2 #T2 #HT2
lapply (cpms_trans … HT1 … HT2) -T <commutative_plus #HT12
/2 width=1 by cpms_inv_plus/
(* Basic_2A1: includes: scpds_fwd_cpxs cprs_cpxs *)
lemma cpms_fwd_cpxs (h) (n) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2.
#h #n #G #L #T1 #T2 #H @(cpms_ind_dx … H) -T2
/3 width=5 by cpxs_strap1, cpm_fwd_cpx/
qed-.
(* Advanced properties ******************************************************)
-lemma cpms_delta (h) (n) (G): â\88\80K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡*[h,n] V2 →
- â\88\80W2. â\87§[1] V2 â\89\98 W2 â\86\92 â\9dªG,K.â\93\93V1â\9d« ⊢ #0 ➡*[h,n] W2.
+lemma cpms_delta (h) (n) (G): â\88\80K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ➡*[h,n] V2 →
+ â\88\80W2. â\87§[1] V2 â\89\98 W2 â\86\92 â\9d¨G,K.â\93\93V1â\9d© ⊢ #0 ➡*[h,n] W2.
#h #n #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 (h) (n) (G): â\88\80K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡*[h,n] V2 →
- â\88\80W2. â\87§[1] V2 â\89\98 W2 â\86\92 â\9dªG,K.â\93\9bV1â\9d« ⊢ #0 ➡*[h,↑n] W2.
+lemma cpms_ell (h) (n) (G): â\88\80K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ➡*[h,n] V2 →
+ â\88\80W2. â\87§[1] V2 â\89\98 W2 â\86\92 â\9d¨G,K.â\93\9bV1â\9d© ⊢ #0 ➡*[h,↑n] W2.
#h #n #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 (h) (n) (I) (G): â\88\80K,T,i. â\9dªG,Kâ\9d« ⊢ #i ➡*[h,n] T →
- â\88\80U. â\87§[1] T â\89\98 U â\86\92 â\9dªG,K.â\93\98[I]â\9d« ⊢ #↑i ➡*[h,n] U.
+lemma cpms_lref (h) (n) (I) (G): â\88\80K,T,i. â\9d¨G,Kâ\9d© ⊢ #i ➡*[h,n] T →
+ â\88\80U. â\87§[1] T â\89\98 U â\86\92 â\9d¨G,K.â\93\98[I]â\9d© ⊢ #↑i ➡*[h,n] U.
#h #n #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
qed.
lemma cpms_cast_sn (h) (n) (G) (L):
- â\88\80U1,U2. â\9dªG,Lâ\9d« ⊢ U1 ➡*[h,n] U2 →
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n] T2 →
- â\9dªG,Lâ\9d« ⊢ ⓝU1.T1 ➡*[h,n] ⓝU2.T2.
+ â\88\80U1,U2. â\9d¨G,Lâ\9d© ⊢ U1 ➡*[h,n] U2 →
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n] T2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓝU1.T1 ➡*[h,n] ⓝU2.T2.
#h #n #G #L #U1 #U2 #H @(cpms_ind_sn … H) -U1 -n
[ /3 width=3 by cpm_cpms, cpm_cast/
| #n1 #n2 #U1 #U #HU1 #_ #IH #T1 #T2 #H
(* Basic_2A1: uses: cprs_delta *)
lemma cpms_delta_drops (h) (n) (G):
∀L,K,V,i. ⇩[i] L ≘ K.ⓓV →
- â\88\80V2. â\9dªG,Kâ\9d« ⊢ V ➡*[h,n] V2 →
- â\88\80W2. â\87§[â\86\91i] V2 â\89\98 W2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ➡*[h,n] W2.
+ â\88\80V2. â\9d¨G,Kâ\9d© ⊢ V ➡*[h,n] V2 →
+ â\88\80W2. â\87§[â\86\91i] V2 â\89\98 W2 â\86\92 â\9d¨G,Lâ\9d© ⊢ #i ➡*[h,n] W2.
#h #n #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
lemma cpms_ell_drops (h) (n) (G):
∀L,K,W,i. ⇩[i] L ≘ K.ⓛW →
- â\88\80W2. â\9dªG,Kâ\9d« ⊢ W ➡*[h,n] W2 →
- â\88\80V2. â\87§[â\86\91i] W2 â\89\98 V2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ➡*[h,↑n] V2.
+ â\88\80W2. â\9d¨G,Kâ\9d© ⊢ W ➡*[h,n] W2 →
+ â\88\80V2. â\87§[â\86\91i] W2 â\89\98 V2 â\86\92 â\9d¨G,Lâ\9d© ⊢ #i ➡*[h,↑n] V2.
#h #n #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
(* Advanced inversion lemmas ************************************************)
lemma cpms_inv_lref1_drops (h) (n) (G):
- â\88\80L,T2,i. â\9dªG,Lâ\9d« ⊢ #i ➡*[h,n] T2 →
+ â\88\80L,T2,i. â\9d¨G,Lâ\9d© ⊢ #i ➡*[h,n] T2 →
∨∨ ∧∧ T2 = #i & n = 0
- | â\88\83â\88\83K,V,V2. â\87©[i] L â\89\98 K.â\93\93V & â\9dªG,Kâ\9d« ⊢ V ➡*[h,n] V2 &
+ | â\88\83â\88\83K,V,V2. â\87©[i] L â\89\98 K.â\93\93V & â\9d¨G,Kâ\9d© ⊢ V ➡*[h,n] V2 &
⇧[↑i] V2 ≘ T2
- | â\88\83â\88\83m,K,V,V2. â\87©[i] L â\89\98 K.â\93\9bV & â\9dªG,Kâ\9d« ⊢ V ➡*[h,m] V2 &
+ | â\88\83â\88\83m,K,V,V2. â\87©[i] L â\89\98 K.â\93\9bV & â\9d¨G,Kâ\9d© ⊢ V ➡*[h,m] V2 &
⇧[↑i] V2 ≘ T2 & n = ↑m.
#h #n #G #L #T2 #i #H @(cpms_ind_dx … H) -T2
[ /3 width=1 by or3_intro0, conj/
qed-.
lemma cpms_inv_delta_sn (h) (n) (G) (K) (V):
- â\88\80T2. â\9dªG,K.â\93\93Vâ\9d« ⊢ #0 ➡*[h,n] T2 →
+ â\88\80T2. â\9d¨G,K.â\93\93Vâ\9d© ⊢ #0 ➡*[h,n] T2 →
∨∨ ∧∧ T2 = #0 & n = 0
- | â\88\83â\88\83V2. â\9dªG,Kâ\9d« ⊢ V ➡*[h,n] V2 & ⇧[1] V2 ≘ T2.
+ | â\88\83â\88\83V2. â\9d¨G,Kâ\9d© ⊢ V ➡*[h,n] V2 & ⇧[1] V2 ≘ T2.
#h #n #G #K #V #T2 #H
elim (cpms_inv_lref1_drops … H) -H *
[ /3 width=1 by or_introl, conj/
qed-.
lemma cpms_inv_ell_sn (h) (n) (G) (K) (V):
- â\88\80T2. â\9dªG,K.â\93\9bVâ\9d« ⊢ #0 ➡*[h,n] T2 →
+ â\88\80T2. â\9d¨G,K.â\93\9bVâ\9d© ⊢ #0 ➡*[h,n] T2 →
∨∨ ∧∧ T2 = #0 & n = 0
- | â\88\83â\88\83m,V2. â\9dªG,Kâ\9d« ⊢ V ➡*[h,m] V2 & ⇧[1] V2 ≘ T2 & n = ↑m.
+ | â\88\83â\88\83m,V2. â\9d¨G,Kâ\9d© ⊢ V ➡*[h,m] V2 & ⇧[1] V2 ≘ T2 & n = ↑m.
#h #n #G #K #V #T2 #H
elim (cpms_inv_lref1_drops … H) -H *
[ /3 width=1 by or_introl, conj/
qed-.
lemma cpms_inv_lref_sn (h) (n) (G) (I) (K):
- â\88\80U2,i. â\9dªG,K.â\93\98[I]â\9d« ⊢ #↑i ➡*[h,n] U2 →
+ â\88\80U2,i. â\9d¨G,K.â\93\98[I]â\9d© ⊢ #↑i ➡*[h,n] U2 →
∨∨ ∧∧ U2 = #↑i & n = 0
- | â\88\83â\88\83T2. â\9dªG,Kâ\9d« ⊢ #i ➡*[h,n] T2 & ⇧[1] T2 ≘ U2.
+ | â\88\83â\88\83T2. â\9d¨G,Kâ\9d© ⊢ #i ➡*[h,n] T2 & ⇧[1] T2 ≘ U2.
#h #n #G #I #K #U2 #i #H
elim (cpms_inv_lref1_drops … H) -H *
[ /3 width=1 by or_introl, conj/
qed-.
fact cpms_inv_succ_sn (h) (n) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,↑n] T2 →
- â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,1] T & â\9dªG,Lâ\9d« ⊢ T ➡*[h,n] T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,↑n] T2 →
+ â\88\83â\88\83T. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,1] T & â\9d¨G,Lâ\9d© ⊢ T ➡*[h,n] T2.
#h #n #G #L #T1 #T2
@(insert_eq_0 … (↑n)) #m #H
@(cpms_ind_sn … H) -T1 -m
(* Forward lemmas with proper parallel rst-computation for closures *********)
lemma cpms_tneqx_fwd_fpbg (h) (n):
- â\88\80G,L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T2 →
- (T1 â\89\85 T2 â\86\92 â\8a¥) â\86\92 â\9dªG,L,T1â\9d« > â\9dªG,L,T2â\9d«.
+ â\88\80G,L,T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T2 →
+ (T1 â\89\85 T2 â\86\92 â\8a¥) â\86\92 â\9d¨G,L,T1â\9d© > â\9d¨G,L,T2â\9d©.
/3 width=3 by cpms_fwd_cpxs, cpxs_tneqx_fpbg/ qed-.
lemma fpbg_cpms_trans (h) (n):
- â\88\80G1,G2,L1,L2,T1,T. â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,Tâ\9d« →
- â\88\80T2. â\9dªG2,L2â\9d« â\8a¢ T â\9e¡*[h,n] T2 â\86\92 â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T. â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,Tâ\9d© →
+ â\88\80T2. â\9d¨G2,L2â\9d© â\8a¢ T â\9e¡*[h,n] T2 â\86\92 â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d©.
/3 width=5 by fpbg_fpbs_trans, cpms_fwd_fpbs/ qed-.
lemma cpms_fpbg_trans (h) (n):
- â\88\80G1,L1,T1,T. â\9dªG1,L1â\9d« ⊢ T1 ➡*[h,n] T →
- â\88\80G2,L2,T2. â\9dªG1,L1,Tâ\9d« > â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1,T. â\9d¨G1,L1â\9d© ⊢ T1 ➡*[h,n] T →
+ â\88\80G2,L2,T2. â\9d¨G1,L1,Tâ\9d© > â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d©.
/3 width=5 by fpbs_fpbg_trans, cpms_fwd_fpbs/ qed-.
lemma fqup_cpms_fwd_fpbg (h):
- â\88\80G1,G2,L1,L2,T1,T. â\9dªG1,L1,T1â\9d« â¬\82+ â\9dªG2,L2,Tâ\9d« →
- â\88\80n,T2. â\9dªG2,L2â\9d« â\8a¢ T â\9e¡*[h,n] T2 â\86\92 â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T. â\9d¨G1,L1,T1â\9d© â¬\82+ â\9d¨G2,L2,Tâ\9d© →
+ â\88\80n,T2. â\9d¨G2,L2â\9d© â\8a¢ T â\9e¡*[h,n] T2 â\86\92 â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d©.
/3 width=5 by cpms_fwd_fpbs, fqup_fpbg, fpbg_fpbs_trans/ qed-.
lemma cpm_tneqx_cpm_cpms_teqx_sym_fwd_fpbg (h) (G) (L) (T1):
- â\88\80n1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n1] T → (T1 ≅ T → ⊥) →
- â\88\80n2,T2. â\9dªG,Lâ\9d«â\8a¢ T â\9e¡*[h,n2] T2 â\86\92 T1 â\89\85 T2 â\86\92 â\9dªG,L,T1â\9d« > â\9dªG,L,T1â\9d«.
+ â\88\80n1,T. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n1] T → (T1 ≅ T → ⊥) →
+ â\88\80n2,T2. â\9d¨G,Lâ\9d©â\8a¢ T â\9e¡*[h,n2] T2 â\86\92 T1 â\89\85 T2 â\86\92 â\9d¨G,L,T1â\9d© > â\9d¨G,L,T1â\9d©.
#h #G #L #T1 #n1 #T #H1T1 #H2T1 #n2 #T2 #H1T2 #H2T12
/4 width=10 by fpbc_fpbs_fpbg, cpms_fwd_fpbs, fpbs_teqg_trans, cpm_fwd_fpbc, teqx_sym/
qed-.
(* Basic_2A1: uses: cprs_fpbs *)
lemma cpms_fwd_fpbs (h) (n):
- â\88\80G,L,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9dªG,L,T1â\9d« â\89¥ â\9dªG,L,T2â\9d«.
+ â\88\80G,L,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9d¨G,L,T1â\9d© â\89¥ â\9d¨G,L,T2â\9d©.
/3 width=3 by cpms_fwd_cpxs, cpxs_fpbs/ qed-.
(* Properties with parallel rt-transition for full local environments *******)
lemma lpr_cpm_trans (h) (n) (G):
- â\88\80L2,T1,T2. â\9dªG,L2â\9d« ⊢ T1 ➡[h,n] T2 →
- â\88\80L1. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9dªG,L1â\9d« ⊢ T1 ➡*[h,n] T2.
+ â\88\80L2,T1,T2. â\9d¨G,L2â\9d© ⊢ T1 ➡[h,n] T2 →
+ â\88\80L1. â\9d¨G,L1â\9d© â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ T1 ➡*[h,n] T2.
#h #n #G #L2 #T1 #T2 #H @(cpm_ind … H) -n -G -L2 -T1 -T2
[ /2 width=3 by/
| /3 width=2 by cpm_cpms/
qed-.
lemma lpr_cpms_trans (h) (n) (G):
- â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡[h,0] L2 →
- â\88\80T1,T2. â\9dªG,L2â\9d« â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9dªG,L1â\9d« ⊢ T1 ➡*[h,n] T2.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ➡[h,0] L2 →
+ â\88\80T1,T2. â\9d¨G,L2â\9d© â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9d¨G,L1â\9d© ⊢ T1 ➡*[h,n] T2.
#h #n #G #L1 #L2 #HL12 #T1 #T2 #H @(cpms_ind_sn … H) -n -T1
/3 width=3 by lpr_cpm_trans, cpms_trans/
qed-.
(* Basic_2A1: includes cpr_bind2 *)
lemma cpm_bind2 (h) (n) (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h,0] V2 →
- â\88\80I,T1,T2. â\9dªG,L.â\93\91[I]V2â\9d« ⊢ T1 ➡[h,n] T2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ➡*[h,n] ⓑ[p,I]V2.T2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ➡[h,0] V2 →
+ â\88\80I,T1,T2. â\9d¨G,L.â\93\91[I]V2â\9d© ⊢ T1 ➡[h,n] T2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ➡*[h,n] ⓑ[p,I]V2.T2.
/4 width=5 by lpr_cpm_trans, cpms_bind_dx, lpr_pair/ qed.
(* Basic_2A1: includes cprs_bind2_dx *)
lemma cpms_bind2_dx (h) (n) (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h,0] V2 →
- â\88\80I,T1,T2. â\9dªG,L.â\93\91[I]V2â\9d« ⊢ T1 ➡*[h,n] T2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ➡*[h,n] ⓑ[p,I]V2.T2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ➡[h,0] V2 →
+ â\88\80I,T1,T2. â\9d¨G,L.â\93\91[I]V2â\9d© ⊢ T1 ➡*[h,n] T2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ➡*[h,n] ⓑ[p,I]V2.T2.
/4 width=5 by lpr_cpms_trans, cpms_bind_dx, lpr_pair/ qed.
(* Properties with generic equivalence for local environments ***************)
lemma cpms_reqg_conf_sn (S) (h) (n) (G) (L1) (L2):
- â\88\80T1,T2. â\9dªG,L1â\9d« ⊢ T1 ➡*[h,n] T2 →
+ â\88\80T1,T2. â\9d¨G,L1â\9d© ⊢ T1 ➡*[h,n] T2 →
L1 ≛[S,T1] L2 → L1 ≛[S,T2] L2.
/3 width=5 by cpms_fwd_cpxs, cpxs_reqg_conf_sn/ qed-.
lemma cpms_reqg_conf_dx (S) (h) (n) (G) (L1) (L2):
reflexive … S → symmetric … S →
- â\88\80T1,T2. â\9dªG,L2â\9d« ⊢ T1 ➡*[h,n] T2 →
+ â\88\80T1,T2. â\9d¨G,L2â\9d© ⊢ T1 ➡*[h,n] T2 →
L1 ≛[S,T1] L2 → L1 ≛[S,T2] L2.
/3 width=5 by cpms_fwd_cpxs, cpxs_reqg_conf_dx/ qed-.
(* T-UNBOUND WHD EVALUATION FOR T-BOUND RT-TRANSITION ON TERMS **************)
definition cpmuwe (h) (n) (G) (L): relation2 term term ≝
- λT1,T2. â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n] T2 & â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] T2.
+ λT1,T2. â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n] T2 & â\9d¨G,Lâ\9d© ⊢ ➡𝐍𝐖*[h] T2.
interpretation "t-unbound whd evaluation for t-bound context-sensitive parallel rt-transition (term)"
'PRedEvalWStar h n G L T1 T2 = (cpmuwe h n G L T1 T2).
definition R_cpmuwe (h) (G) (L) (T): predicate nat ≝
- λn. â\88\83U. â\9dªG,Lâ\9d« ⊢ T ➡*𝐍𝐖*[h,n] U.
+ λn. â\88\83U. â\9d¨G,Lâ\9d© ⊢ T ➡*𝐍𝐖*[h,n] U.
(* Basic properties *********************************************************)
lemma cpmuwe_intro (h) (n) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ â\9e¡ð\9d\90\8dð\9d\90\96*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*𝐍𝐖*[h,n] T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© â\8a¢ â\9e¡ð\9d\90\8dð\9d\90\96*[h] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡*𝐍𝐖*[h,n] T2.
/2 width=1 by conj/ qed.
(* Advanced properties ******************************************************)
lemma cpmuwe_sort (h) (n) (G) (L) (T):
- â\88\80s. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n] â\8b\86s â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡*𝐍𝐖*[h,n] ⋆s.
+ â\88\80s. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,n] â\8b\86s â\86\92 â\9d¨G,Lâ\9d© ⊢ T ➡*𝐍𝐖*[h,n] ⋆s.
/3 width=5 by cnuw_sort, cpmuwe_intro/ qed.
lemma cpmuwe_ctop (h) (n) (G) (T):
- â\88\80i. â\9dªG,â\8b\86â\9d« â\8a¢ T â\9e¡*[h,n] #i â\86\92 â\9dªG,â\8b\86â\9d« ⊢ T ➡*𝐍𝐖*[h,n] #i.
+ â\88\80i. â\9d¨G,â\8b\86â\9d© â\8a¢ T â\9e¡*[h,n] #i â\86\92 â\9d¨G,â\8b\86â\9d© ⊢ T ➡*𝐍𝐖*[h,n] #i.
/3 width=5 by cnuw_ctop, cpmuwe_intro/ qed.
lemma cpmuwe_zero_unit (h) (n) (G) (L) (T):
- â\88\80I. â\9dªG,L.â\93¤[I]â\9d« â\8a¢ T â\9e¡*[h,n] #0 â\86\92 â\9dªG,L.â\93¤[I]â\9d« ⊢ T ➡*𝐍𝐖*[h,n] #0.
+ â\88\80I. â\9d¨G,L.â\93¤[I]â\9d© â\8a¢ T â\9e¡*[h,n] #0 â\86\92 â\9d¨G,L.â\93¤[I]â\9d© ⊢ T ➡*𝐍𝐖*[h,n] #0.
/3 width=6 by cnuw_zero_unit, cpmuwe_intro/ qed.
lemma cpmuwe_gref (h) (n) (G) (L) (T):
- â\88\80l. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n] §l â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡*𝐍𝐖*[h,n] §l.
+ â\88\80l. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,n] §l â\86\92 â\9d¨G,Lâ\9d© ⊢ T ➡*𝐍𝐖*[h,n] §l.
/3 width=5 by cnuw_gref, cpmuwe_intro/ qed.
(* Basic forward lemmas *****************************************************)
lemma cpmuwe_fwd_cpms (h) (n) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*ð\9d\90\8dð\9d\90\96*[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*ð\9d\90\8dð\9d\90\96*[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T2.
#h #n #G #L #T1 #T2 * #HT12 #_ //
qed-.
(* Advanced properties ******************************************************)
lemma cpmuwe_abbr_neg (h) (n) (G) (L) (T):
- â\88\80V,U. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n] -â\93\93V.U â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡*𝐍𝐖*[h,n] -ⓓV.U.
+ â\88\80V,U. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,n] -â\93\93V.U â\86\92 â\9d¨G,Lâ\9d© ⊢ T ➡*𝐍𝐖*[h,n] -ⓓV.U.
/3 width=5 by cnuw_abbr_neg, cpmuwe_intro/ qed.
lemma cpmuwe_abst (h) (n) (p) (G) (L) (T):
- â\88\80W,U. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n] â\93\9b[p]W.U â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡*𝐍𝐖*[h,n] ⓛ[p]W.U.
+ â\88\80W,U. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,n] â\93\9b[p]W.U â\86\92 â\9d¨G,Lâ\9d© ⊢ T ➡*𝐍𝐖*[h,n] ⓛ[p]W.U.
/3 width=5 by cnuw_abst, cpmuwe_intro/ qed.
(* Properties with strongly normalizing terms for extended rt-transition ****)
lemma cpmuwe_total_csx (h) (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 T1 â\86\92 â\88\83â\88\83T2,n. â\9dªG,Lâ\9d« ⊢ T1 ➡*𝐍𝐖*[h,n] T2.
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 T1 â\86\92 â\88\83â\88\83T2,n. â\9d¨G,Lâ\9d© ⊢ T1 ➡*𝐍𝐖*[h,n] T2.
#h #G #L #T1 #H
@(csx_ind_cpxs … H) -T1 #T1 #_ #IHT1
elim (cnuw_dec_ex h G L T1)
qed-.
lemma R_cpmuwe_total_csx (h) (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T1 → ∃n. R_cpmuwe h G L T1 n.
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T1 → ∃n. R_cpmuwe h G L T1 n.
#h #G #L #T1 #H
elim (cpmuwe_total_csx h … H) -H #T2 #n #HT12
/3 width=3 by ex_intro (* 2x *)/
(* Properties with t-bound rt-computarion on terms **************************)
lemma cpms_cprre_trans (h) (n) (G) (L):
- â\88\80T1,T0. â\9dªG,Lâ\9d« ⊢T1 ➡*[h,n] T0 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T0 â\9e¡*ð\9d\90\8d[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*𝐍[h,n] T2.
+ â\88\80T1,T0. â\9d¨G,Lâ\9d© ⊢T1 ➡*[h,n] T0 →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T0 â\9e¡*ð\9d\90\8d[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡*𝐍[h,n] T2.
#h #n #G #L #T1 #T0 #HT10 #T2 * #HT02 #HT2
/3 width=3 by cpms_cprs_trans, cpmre_intro/
qed-.
(* Properties with context-sensitive parallel r-computation for terms ******)
lemma cprre_cprs_conf (h) (G) (L) (T):
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ T ➡*[h,0] T1 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*ð\9d\90\8d[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*𝐍[h,0] T2.
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T ➡*[h,0] T1 →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*ð\9d\90\8d[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡*𝐍[h,0] T2.
#h #G #L #T0 #T1 #HT01 #T2 * #HT02 #HT2
elim (cprs_conf … HT01 … HT02) -T0 #T0 #HT10 #HT20
lapply (cprs_inv_cnr_sn … HT20 HT2) -HT20 #H destruct
(* Basic_1: was: nf2_pr3_confluence *)
(* Basic_2A1: was: cpre_mono *)
theorem cprre_mono (h) (G) (L) (T):
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*ð\9d\90\8d[h,0] T1 â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T ➡*𝐍[h,0] T2 → T1 = T2.
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*ð\9d\90\8d[h,0] T1 â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T ➡*𝐍[h,0] T2 → T1 = T2.
#h #G #L #T0 #T1 * #HT01 #HT1 #T2 * #HT02 #HT2
elim (cprs_conf … HT01 … HT02) -T0 #T0 #HT10 #HT20
>(cprs_inv_cnr_sn … HT10 HT1) -T1
(* Basic_1: was just: nf2_sn3 *)
(* Basic_2A1: was: csx_cpre *)
lemma cprre_total_csx (h) (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 T1 â\86\92 â\88\83T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*𝐍[h,0] T2.
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 T1 â\86\92 â\88\83T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡*𝐍[h,0] T2.
#h #G #L #T1 #H
@(csx_ind … H) -T1 #T1 #_ #IHT1
elim (cnr_dec_teqx h G L T1) [ /3 width=3 by ex_intro, cpmre_intro/ ] *
(* Basic_2A1: was: cprs_ind_dx *)
lemma cprs_ind_sn (h) (G) (L) (T2) (Q:predicate …):
Q T2 →
- (â\88\80T1,T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,0] T â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡*[h,0] T2 → Q T → Q T1) →
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,0] T2 → Q T1.
+ (â\88\80T1,T. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,0] T â\86\92 â\9d¨G,Lâ\9d© ⊢ T ➡*[h,0] T2 → Q T → Q T1) →
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,0] T2 → Q T1.
#h #G #L #T2 #Q #IH1 #IH2 #T1
@(insert_eq_0 … 0) #n #H
@(cpms_ind_sn … H) -n -T1 //
(* Basic_2A1: was: cprs_ind *)
lemma cprs_ind_dx (h) (G) (L) (T1) (Q:predicate …):
Q T1 →
- (â\88\80T,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,0] T â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡[h,0] T2 → Q T → Q T2) →
- â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,0] T2 → Q T2.
+ (â\88\80T,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,0] T â\86\92 â\9d¨G,Lâ\9d© ⊢ T ➡[h,0] T2 → Q T → Q T2) →
+ â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,0] T2 → Q T2.
#h #G #L #T1 #Q #IH1 #IH2 #T2
@(insert_eq_0 … 0) #n #H
@(cpms_ind_dx … H) -n -T2 //
(* Basic_1: was: pr3_step *)
(* Basic_2A1: was: cprs_strap2 *)
lemma cprs_step_sn (h) (G) (L):
- â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,0] T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,0] T2.
+ â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,0] T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,0] T2.
/2 width=3 by cpms_step_sn/ qed-.
(* Basic_2A1: was: cprs_strap1 *)
lemma cprs_step_dx (h) (G) (L):
- â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,0] T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,0] T2.
+ â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,0] T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,0] T2.
/2 width=3 by cpms_step_dx/ qed-.
(* Basic_1: was only: pr3_thin_dx *)
lemma cprs_flat_dx (h) (I) (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h,0] V2 →
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,0] T2 →
- â\9dªG,Lâ\9d« ⊢ ⓕ[I]V1.T1 ➡*[h,0] ⓕ[I]V2.T2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ➡[h,0] V2 →
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,0] T2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓕ[I]V1.T1 ➡*[h,0] ⓕ[I]V2.T2.
#h #I #G #L #V1 #V2 #HV12 #T1 #T2 #H @(cprs_ind_sn … H) -T1
/3 width=3 by cprs_step_sn, cpm_cpms, cpr_flat/
qed.
lemma cprs_flat_sn (h) (I) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,0] T2 â\86\92 â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h,0] V2 →
- â\9dªG,Lâ\9d« ⊢ ⓕ[I] V1. T1 ➡*[h,0] ⓕ[I] V2. T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,0] T2 â\86\92 â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ➡*[h,0] V2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓕ[I] V1. T1 ➡*[h,0] ⓕ[I] V2. T2.
#h #I #G #L #T1 #T2 #HT12 #V1 #V2 #H @(cprs_ind_sn … H) -V1
/3 width=3 by cprs_step_sn, cpm_cpms, cpr_flat/
qed.
(* Basic inversion lemmas ***************************************************)
(* Basic_1: was: pr3_gen_sort *)
-lemma cprs_inv_sort1 (h) (G) (L): â\88\80X2,s. â\9dªG,Lâ\9d« ⊢ ⋆s ➡*[h,0] X2 → X2 = ⋆s.
+lemma cprs_inv_sort1 (h) (G) (L): â\88\80X2,s. â\9d¨G,Lâ\9d© ⊢ ⋆s ➡*[h,0] X2 → X2 = ⋆s.
/2 width=4 by cpms_inv_sort1/ qed-.
(* Basic_1: was: pr3_gen_cast *)
-lemma cprs_inv_cast1 (h) (G) (L): â\88\80W1,T1,X2. â\9dªG,Lâ\9d« ⊢ ⓝW1.T1 ➡*[h,0] X2 →
- â\88¨â\88¨ â\88\83â\88\83W2,T2. â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡*[h,0] W2 & â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,0] T2 & X2 = ⓝW2.T2
- | â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,0] X2.
+lemma cprs_inv_cast1 (h) (G) (L): â\88\80W1,T1,X2. â\9d¨G,Lâ\9d© ⊢ ⓝW1.T1 ➡*[h,0] X2 →
+ â\88¨â\88¨ â\88\83â\88\83W2,T2. â\9d¨G,Lâ\9d© â\8a¢ W1 â\9e¡*[h,0] W2 & â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,0] T2 & X2 = ⓝW2.T2
+ | â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,0] X2.
#h #G #L #W1 #T1 #X2 #H
elim (cpms_inv_cast1 … H) -H
[ /2 width=1 by or_introl/
(* Basic_1: was: nf2_pr3_unfold *)
(* Basic_2A1: was: cprs_inv_cnr1 *)
lemma cprs_inv_cnr_sn (h) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ ➡𝐍[h,0] T1 → T1 = T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ➡𝐍[h,0] T1 → T1 = T2.
#h #G #L #T1 #T2 #H @(cprs_ind_sn … H) -T1 //
#T1 #T0 #HT10 #_ #IH #HT1
lapply (HT1 … HT10) -HT10 #H destruct /2 width=1 by/
(* Basic_1: was: pr3_flat *)
theorem cprs_flat (h) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,0] T2 →
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h,0] V2 →
- â\88\80I. â\9dªG,Lâ\9d« ⊢ ⓕ[I]V1.T1 ➡*[h,0] ⓕ[I]V2.T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,0] T2 →
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ➡*[h,0] V2 →
+ â\88\80I. â\9d¨G,Lâ\9d© ⊢ ⓕ[I]V1.T1 ➡*[h,0] ⓕ[I]V2.T2.
#h #G #L #T1 #T2 #HT12 #V1 #V2 #H @(cprs_ind_dx … H) -V2
[ /2 width=3 by cprs_flat_dx/
| /3 width=3 by cpr_pair_sn, cprs_step_dx/
(* Basic_1: was pr3_gen_appl *)
(* Basic_2A1: was: cprs_inv_appl1 *)
lemma cprs_inv_appl_sn (h) (G) (L):
- â\88\80V1,T1,X2. â\9dªG,Lâ\9d« ⊢ ⓐV1.T1 ➡*[h,0] X2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h,0] V2 &
- â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,0] T2 &
+ â\88\80V1,T1,X2. â\9d¨G,Lâ\9d© ⊢ ⓐV1.T1 ➡*[h,0] X2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© ⊢ V1 ➡*[h,0] V2 &
+ â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,0] T2 &
X2 = ⓐV2. T2
- | â\88\83â\88\83p,W,T. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,0] ⓛ[p]W.T &
- â\9dªG,Lâ\9d« ⊢ ⓓ[p]ⓝW.V1.T ➡*[h,0] X2
- | â\88\83â\88\83p,V0,V2,V,T. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h,0] V0 & ⇧[1] V0 ≘ V2 &
- â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,0] ⓓ[p]V.T &
- â\9dªG,Lâ\9d« ⊢ ⓓ[p]V.ⓐV2.T ➡*[h,0] X2.
+ | â\88\83â\88\83p,W,T. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,0] ⓛ[p]W.T &
+ â\9d¨G,Lâ\9d© ⊢ ⓓ[p]ⓝW.V1.T ➡*[h,0] X2
+ | â\88\83â\88\83p,V0,V2,V,T. â\9d¨G,Lâ\9d© ⊢ V1 ➡*[h,0] V0 & ⇧[1] V0 ≘ V2 &
+ â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,0] ⓓ[p]V.T &
+ â\9d¨G,Lâ\9d© ⊢ ⓓ[p]V.ⓐV2.T ➡*[h,0] X2.
#h #G #L #V1 #T1 #X2 #H elim (cpms_inv_appl_sn … H) -H *
[ /3 width=5 by or3_intro0, ex3_2_intro/
| #n1 #n2 #p #V2 #T2 #HT12 #HTX2 #H
(* Basic_1: was: pr3_gen_lref *)
(* Basic_2A1: was: cprs_inv_lref1 *)
-lemma cprs_inv_lref1_drops (h) (G): â\88\80L,T2,i. â\9dªG,Lâ\9d« ⊢ #i ➡*[h,0] T2 →
+lemma cprs_inv_lref1_drops (h) (G): â\88\80L,T2,i. â\9d¨G,Lâ\9d© ⊢ #i ➡*[h,0] T2 →
∨∨ T2 = #i
- | â\88\83â\88\83K,V1,T1. â\87©[i] L â\89\98 K.â\93\93V1 & â\9dªG,Kâ\9d« ⊢ V1 ➡*[h,0] T1 &
+ | â\88\83â\88\83K,V1,T1. â\87©[i] L â\89\98 K.â\93\93V1 & â\9d¨G,Kâ\9d© ⊢ V1 ➡*[h,0] T1 &
⇧[↑i] T1 ≘ T2.
#h #G #L #T2 #i #H elim (cpms_inv_lref1_drops … H) -H *
[ /2 width=1 by or_introl/
qed-.
lemma cprs_lpr_conf_dx (h) (G):
- â\88\80L0,T0,T1. â\9dªG,L0â\9d« â\8a¢ T0 â\9e¡*[h,0] T1 â\86\92 â\88\80L1. â\9dªG,L0â\9d« ⊢ ➡[h,0] L1 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[h,0] T & â\9dªG,L1â\9d« ⊢ T0 ➡*[h,0] T.
+ â\88\80L0,T0,T1. â\9d¨G,L0â\9d© â\8a¢ T0 â\9e¡*[h,0] T1 â\86\92 â\88\80L1. â\9d¨G,L0â\9d© ⊢ ➡[h,0] L1 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ T1 â\9e¡*[h,0] T & â\9d¨G,L1â\9d© ⊢ T0 ➡*[h,0] T.
#h #G #L0 #T0 #T1 #H
@(cprs_ind_dx … H) -T1 /2 width=3 by ex2_intro/
#T #T1 #_ #HT1 #IHT0 #L1 #HL01
qed-.
lemma cprs_lpr_conf_sn (h) (G):
- â\88\80L0,T0,T1. â\9dªG,L0â\9d« ⊢ T0 ➡*[h,0] T1 →
- â\88\80L1. â\9dªG,L0â\9d« ⊢ ➡[h,0] L1 →
- â\88\83â\88\83T. â\9dªG,L0â\9d« â\8a¢ T1 â\9e¡*[h,0] T & â\9dªG,L1â\9d« ⊢ T0 ➡*[h,0] T.
+ â\88\80L0,T0,T1. â\9d¨G,L0â\9d© ⊢ T0 ➡*[h,0] T1 →
+ â\88\80L1. â\9d¨G,L0â\9d© ⊢ ➡[h,0] L1 →
+ â\88\83â\88\83T. â\9d¨G,L0â\9d© â\8a¢ T1 â\9e¡*[h,0] T & â\9d¨G,L1â\9d© ⊢ T0 ➡*[h,0] T.
#h #G #L0 #T0 #T1 #HT01 #L1 #HL01
elim (cprs_lpr_conf_dx … HT01 … HL01) -HT01 #T #HT1 #HT0
/3 width=3 by lpr_cpms_trans, ex2_intro/
(* Properties with sort-irrelevant whd equivalence on terms *****************)
lemma cprs_abbr_pos_tneqw (h) (G) (L) (V) (T1):
- â\88\83â\88\83T2. â\9dªG,Lâ\9d« ⊢ +ⓓV.T1 ➡*[h,0] T2 & (+ⓓV.T1 ≃ T2 → ⊥).
+ â\88\83â\88\83T2. â\9d¨G,Lâ\9d© ⊢ +ⓓV.T1 ➡*[h,0] T2 & (+ⓓV.T1 ≃ T2 → ⊥).
#h #G #L #V #U1
elim (cpr_subst h G (L.ⓓV) U1 … 0) [|*: /2 width=4 by drops_refl/ ] #U2 #T2 #HU12 #HTU2
elim (teqw_dec U1 U2) [ #HpU12 | -HTU2 #HnU12 ]
lemma cpts_ind_sn (h) (G) (L) (T2) (Q:relation2 …):
Q 0 T2 →
- (â\88\80n1,n2,T1,T. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\86[h,n1] T â\86\92 â\9dªG,Lâ\9d« ⊢ T ⬆*[h,n2] T2 → Q n2 T → Q (n1+n2) T1) →
- â\88\80n,T1. â\9dªG,Lâ\9d« ⊢ T1 ⬆*[h,n] T2 → Q n T1.
+ (â\88\80n1,n2,T1,T. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\86[h,n1] T â\86\92 â\9d¨G,Lâ\9d© ⊢ T ⬆*[h,n2] T2 → Q n2 T → Q (n1+n2) T1) →
+ â\88\80n,T1. â\9d¨G,Lâ\9d© ⊢ T1 ⬆*[h,n] T2 → Q n T1.
#h #G #L #T2 #Q @ltc_ind_sn_refl //
qed-.
lemma cpts_ind_dx (h) (G) (L) (T1) (Q:relation2 …):
Q 0 T1 →
- (â\88\80n1,n2,T,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\86*[h,n1] T â\86\92 Q n1 T â\86\92 â\9dªG,Lâ\9d« ⊢ T ⬆[h,n2] T2 → Q (n1+n2) T2) →
- â\88\80n,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬆*[h,n] T2 → Q n T2.
+ (â\88\80n1,n2,T,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\86*[h,n1] T â\86\92 Q n1 T â\86\92 â\9d¨G,Lâ\9d© ⊢ T ⬆[h,n2] T2 → Q (n1+n2) T2) →
+ â\88\80n,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬆*[h,n] T2 → Q n T2.
#h #G #L #T1 #Q @ltc_ind_dx_refl //
qed-.
(* Basic properties *********************************************************)
lemma cpt_cpts (h) (G) (L):
- â\88\80n,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\86[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬆*[h,n] T2.
+ â\88\80n,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\86[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬆*[h,n] T2.
/2 width=1 by ltc_rc/ qed.
lemma cpts_step_sn (h) (G) (L):
- â\88\80n1,T1,T. â\9dªG,Lâ\9d« ⊢ T1 ⬆[h,n1] T →
- â\88\80n2,T2. â\9dªG,Lâ\9d« â\8a¢ T â¬\86*[h,n2] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬆*[h,n1+n2] T2.
+ â\88\80n1,T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ⬆[h,n1] T →
+ â\88\80n2,T2. â\9d¨G,Lâ\9d© â\8a¢ T â¬\86*[h,n2] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬆*[h,n1+n2] T2.
/2 width=3 by ltc_sn/ qed-.
lemma cpts_step_dx (h) (G) (L):
- â\88\80n1,T1,T. â\9dªG,Lâ\9d« ⊢ T1 ⬆*[h,n1] T →
- â\88\80n2,T2. â\9dªG,Lâ\9d« â\8a¢ T â¬\86[h,n2] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬆*[h,n1+n2] T2.
+ â\88\80n1,T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ⬆*[h,n1] T →
+ â\88\80n2,T2. â\9d¨G,Lâ\9d© â\8a¢ T â¬\86[h,n2] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬆*[h,n1+n2] T2.
/2 width=3 by ltc_dx/ qed-.
lemma cpts_bind_dx (h) (n) (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬆[h,0] V2 →
- â\88\80I,T1,T2. â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ⬆*[h,n] T2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ⬆*[h,n] ⓑ[p,I]V2.T2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬆[h,0] V2 →
+ â\88\80I,T1,T2. â\9d¨G,L.â\93\91[I]V1â\9d© ⊢ T1 ⬆*[h,n] T2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ⬆*[h,n] ⓑ[p,I]V2.T2.
#h #n #G #L #V1 #V2 #HV12 #I #T1 #T2 #H #a @(cpts_ind_sn … H) -T1
/3 width=3 by cpts_step_sn, cpt_cpts, cpt_bind/ qed.
lemma cpts_appl_dx (h) (n) (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬆[h,0] V2 →
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\86*[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⓐV1.T1 ⬆*[h,n] ⓐV2.T2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬆[h,0] V2 →
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\86*[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓐV1.T1 ⬆*[h,n] ⓐV2.T2.
#h #n #G #L #V1 #V2 #HV12 #T1 #T2 #H @(cpts_ind_sn … H) -T1
/3 width=3 by cpts_step_sn, cpt_cpts, cpt_appl/
qed.
lemma cpts_ee (h) (n) (G) (L):
- â\88\80U1,U2. â\9dªG,Lâ\9d« ⊢ U1 ⬆*[h,n] U2 →
- â\88\80T. â\9dªG,Lâ\9d« ⊢ ⓝU1.T ⬆*[h,↑n] U2.
+ â\88\80U1,U2. â\9d¨G,Lâ\9d© ⊢ U1 ⬆*[h,n] U2 →
+ â\88\80T. â\9d¨G,Lâ\9d© ⊢ ⓝU1.T ⬆*[h,↑n] U2.
#h #n #G #L #U1 #U2 #H @(cpts_ind_sn … H) -U1 -n
[ /3 width=1 by cpt_cpts, cpt_ee/
| #n1 #n2 #U1 #U #HU1 #HU2 #_ #T >plus_S1
(* Advanced properties ******************************************************)
lemma cpts_sort (h) (G) (L) (n):
- â\88\80s. â\9dªG,Lâ\9d« ⊢ ⋆s ⬆*[h,n] ⋆((next h)^n s).
+ â\88\80s. â\9d¨G,Lâ\9d© ⊢ ⋆s ⬆*[h,n] ⋆((next h)^n s).
#h #G #L #n elim n -n [ // ]
#n #IH #s <plus_SO_dx
/3 width=3 by cpts_step_dx, cpt_sort/
(* Basic inversion lemmas ***************************************************)
lemma cpts_inv_sort_sn (h) (n) (G) (L) (s):
- â\88\80X2. â\9dªG,Lâ\9d« ⊢ ⋆s ⬆*[h,n] X2 → X2 = ⋆(((next h)^n) s).
+ â\88\80X2. â\9d¨G,Lâ\9d© ⊢ ⋆s ⬆*[h,n] X2 → X2 = ⋆(((next h)^n) s).
#h #n #G #L #s #X2 #H @(cpts_ind_dx … H) -X2 //
#n1 #n2 #X #X2 #_ #IH #HX2 destruct
elim (cpt_inv_sort_sn … HX2) -HX2 #H #_ destruct //
qed-.
lemma cpts_inv_lref_sn_ctop (h) (n) (G) (i):
- â\88\80X2. â\9dªG,â\8b\86â\9d« ⊢ #i ⬆*[h,n] X2 → ∧∧ X2 = #i & n = 0.
+ â\88\80X2. â\9d¨G,â\8b\86â\9d© ⊢ #i ⬆*[h,n] X2 → ∧∧ X2 = #i & n = 0.
#h #n #G #i #X2 #H @(cpts_ind_dx … H) -X2
[ /2 width=1 by conj/
| #n1 #n2 #X #X2 #_ * #HX #Hn1 #HX2 destruct
qed-.
lemma cpts_inv_zero_sn_unit (h) (n) (I) (K) (G):
- â\88\80X2. â\9dªG,K.â\93¤[I]â\9d« ⊢ #0 ⬆*[h,n] X2 → ∧∧ X2 = #0 & n = 0.
+ â\88\80X2. â\9d¨G,K.â\93¤[I]â\9d© ⊢ #0 ⬆*[h,n] X2 → ∧∧ X2 = #0 & n = 0.
#h #n #I #G #K #X2 #H @(cpts_ind_dx … H) -X2
[ /2 width=1 by conj/
| #n1 #n2 #X #X2 #_ * #HX #Hn1 #HX2 destruct
qed-.
lemma cpts_inv_gref_sn (h) (n) (G) (L) (l):
- â\88\80X2. â\9dªG,Lâ\9d« ⊢ §l ⬆*[h,n] X2 → ∧∧ X2 = §l & n = 0.
+ â\88\80X2. â\9d¨G,Lâ\9d© ⊢ §l ⬆*[h,n] X2 → ∧∧ X2 = §l & n = 0.
#h #n #G #L #l #X2 #H @(cpts_ind_dx … H) -X2
[ /2 width=1 by conj/
| #n1 #n2 #X #X2 #_ * #HX #Hn1 #HX2 destruct
qed-.
lemma cpts_inv_cast_sn (h) (n) (G) (L) (U1) (T1):
- â\88\80X2. â\9dªG,Lâ\9d« ⊢ ⓝU1.T1 ⬆*[h,n] X2 →
- â\88¨â\88¨ â\88\83â\88\83U2,T2. â\9dªG,Lâ\9d« â\8a¢ U1 â¬\86*[h,n] U2 & â\9dªG,Lâ\9d« ⊢ T1 ⬆*[h,n] T2 & X2 = ⓝU2.T2
- | â\88\83â\88\83m. â\9dªG,Lâ\9d« ⊢ U1 ⬆*[h,m] X2 & n = ↑m.
+ â\88\80X2. â\9d¨G,Lâ\9d© ⊢ ⓝU1.T1 ⬆*[h,n] X2 →
+ â\88¨â\88¨ â\88\83â\88\83U2,T2. â\9d¨G,Lâ\9d© â\8a¢ U1 â¬\86*[h,n] U2 & â\9d¨G,Lâ\9d© ⊢ T1 ⬆*[h,n] T2 & X2 = ⓝU2.T2
+ | â\88\83â\88\83m. â\9d¨G,Lâ\9d© ⊢ U1 ⬆*[h,m] X2 & n = ↑m.
#h #n #G #L #U1 #T1 #X2 #H @(cpts_ind_dx … H) -n -X2
[ /3 width=5 by or_introl, ex3_2_intro/
| #n1 #n2 #X #X2 #_ * *
(* Properties with atomic arity assignment for terms ************************)
lemma cpts_total_aaa (h) (G) (L) (T1):
- â\88\80A. â\9dªG,Lâ\9d« â\8a¢ T1 â\81\9d A â\86\92 â\88\80n. â\88\83T2. â\9dªG,Lâ\9d« ⊢ T1 ⬆*[h,n] T2.
+ â\88\80A. â\9d¨G,Lâ\9d© â\8a¢ T1 â\81\9d A â\86\92 â\88\80n. â\88\83T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬆*[h,n] T2.
#h #G #L #T1 #A #H elim H -G -L -T1 -A
[ #G #L #s #n /3 width=2 by ex_intro/
| #I #G #K #V1 #B #_ #IH #n -B
(* Forward lemmas with t-bound rt-computation for terms *********************)
lemma cpts_fwd_cpms (h) (n) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\86*[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\86*[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T2.
#h #n #G #L #T1 #T2 #H
@(cpts_ind_dx … H) -n -T2 [ // ]
#n1 #n2 #T #T2 #_ #IH #HT2
qed-.
lemma cpts_cprs_trans (h) (n) (G) (L) (T):
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ⬆*[h,n] T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n] T2.
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T1 ⬆*[h,n] T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n] T2.
#h #n #G #L #T #T1 #HT1 #T2 #HT2
/3 width=3 by cpts_fwd_cpms, cpms_cprs_trans/ qed-.
(* Advanced properties ******************************************************)
lemma cpts_delta (h) (n) (G):
- â\88\80K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬆*[h,n] V2 →
- â\88\80W2. â\87§[1] V2 â\89\98 W2 â\86\92 â\9dªG,K.â\93\93V1â\9d« ⊢ #0 ⬆*[h,n] W2.
+ â\88\80K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬆*[h,n] V2 →
+ â\88\80W2. â\87§[1] V2 â\89\98 W2 â\86\92 â\9d¨G,K.â\93\93V1â\9d© ⊢ #0 ⬆*[h,n] W2.
#h #n #G #K #V1 #V2 #H @(cpts_ind_dx … H) -V2
[ /3 width=3 by cpt_cpts, cpt_delta/
| #n1 #n2 #V #V2 #_ #IH #HV2 #W2 #HVW2
qed.
lemma cpts_ell (h) (n) (G):
- â\88\80K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬆*[h,n] V2 →
- â\88\80W2. â\87§[1] V2 â\89\98 W2 â\86\92 â\9dªG,K.â\93\9bV1â\9d« ⊢ #0 ⬆*[h,↑n] W2.
+ â\88\80K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬆*[h,n] V2 →
+ â\88\80W2. â\87§[1] V2 â\89\98 W2 â\86\92 â\9d¨G,K.â\93\9bV1â\9d© ⊢ #0 ⬆*[h,↑n] W2.
#h #n #G #K #V1 #V2 #H @(cpts_ind_dx … H) -V2
[ /3 width=3 by cpt_cpts, cpt_ell/
| #n1 #n2 #V #V2 #_ #IH #HV2 #W2 #HVW2
qed.
lemma cpts_lref (h) (n) (I) (G):
- â\88\80K,T,i. â\9dªG,Kâ\9d« ⊢ #i ⬆*[h,n] T →
- â\88\80U. â\87§[1] T â\89\98 U â\86\92 â\9dªG,K.â\93\98[I]â\9d« ⊢ #↑i ⬆*[h,n] U.
+ â\88\80K,T,i. â\9d¨G,Kâ\9d© ⊢ #i ⬆*[h,n] T →
+ â\88\80U. â\87§[1] T â\89\98 U â\86\92 â\9d¨G,K.â\93\98[I]â\9d© ⊢ #↑i ⬆*[h,n] U.
#h #n #I #G #K #T #i #H @(cpts_ind_dx … H) -T
[ /3 width=3 by cpt_cpts, cpt_lref/
| #n1 #n2 #T #T2 #_ #IH #HT2 #U2 #HTU2
qed.
lemma cpts_cast_sn (h) (n) (G) (L):
- â\88\80U1,U2. â\9dªG,Lâ\9d« ⊢ U1 ⬆*[h,n] U2 →
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\86[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⓝU1.T1 ⬆*[h,n] ⓝU2.T2.
+ â\88\80U1,U2. â\9d¨G,Lâ\9d© ⊢ U1 ⬆*[h,n] U2 →
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\86[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓝU1.T1 ⬆*[h,n] ⓝU2.T2.
#h #n #G #L #U1 #U2 #H @(cpts_ind_sn … H) -U1 -n
[ /3 width=3 by cpt_cpts, cpt_cast/
| #n1 #n2 #U1 #U #HU1 #_ #IH #T1 #T2 #H
lemma cpts_delta_drops (h) (n) (G):
∀L,K,V,i. ⇩[i] L ≘ K.ⓓV →
- â\88\80V2. â\9dªG,Kâ\9d« ⊢ V ⬆*[h,n] V2 →
- â\88\80W2. â\87§[â\86\91i] V2 â\89\98 W2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ⬆*[h,n] W2.
+ â\88\80V2. â\9d¨G,Kâ\9d© ⊢ V ⬆*[h,n] V2 →
+ â\88\80W2. â\87§[â\86\91i] V2 â\89\98 W2 â\86\92 â\9d¨G,Lâ\9d© ⊢ #i ⬆*[h,n] W2.
#h #n #G #L #K #V #i #HLK #V2 #H @(cpts_ind_dx … H) -V2
[ /3 width=6 by cpt_cpts, cpt_delta_drops/
| #n1 #n2 #V1 #V2 #_ #IH #HV12 #W2 #HVW2
lemma cpts_ell_drops (h) (n) (G):
∀L,K,W,i. ⇩[i] L ≘ K.ⓛW →
- â\88\80W2. â\9dªG,Kâ\9d« ⊢ W ⬆*[h,n] W2 →
- â\88\80V2. â\87§[â\86\91i] W2 â\89\98 V2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ⬆*[h,↑n] V2.
+ â\88\80W2. â\9d¨G,Kâ\9d© ⊢ W ⬆*[h,n] W2 →
+ â\88\80V2. â\87§[â\86\91i] W2 â\89\98 V2 â\86\92 â\9d¨G,Lâ\9d© ⊢ #i ⬆*[h,↑n] V2.
#h #n #G #L #K #W #i #HLK #W2 #H @(cpts_ind_dx … H) -W2
[ /3 width=6 by cpt_cpts, cpt_ell_drops/
| #n1 #n2 #W1 #W2 #_ #IH #HW12 #V2 #HWV2
(* Advanced inversion lemmas ************************************************)
lemma cpts_inv_lref_sn_drops (h) (n) (G) (L) (i):
- â\88\80X2. â\9dªG,Lâ\9d« ⊢ #i ⬆*[h,n] X2 →
+ â\88\80X2. â\9d¨G,Lâ\9d© ⊢ #i ⬆*[h,n] X2 →
∨∨ ∧∧ X2 = #i & n = 0
- | â\88\83â\88\83K,V,V2. â\87©[i] L â\89\98 K.â\93\93V & â\9dªG,Kâ\9d« ⊢ V ⬆*[h,n] V2 & ⇧[↑i] V2 ≘ X2
- | â\88\83â\88\83m,K,V,V2. â\87©[i] L â\89\98 K.â\93\9bV & â\9dªG,Kâ\9d« ⊢ V ⬆*[h,m] V2 & ⇧[↑i] V2 ≘ X2 & n = ↑m.
+ | â\88\83â\88\83K,V,V2. â\87©[i] L â\89\98 K.â\93\93V & â\9d¨G,Kâ\9d© ⊢ V ⬆*[h,n] V2 & ⇧[↑i] V2 ≘ X2
+ | â\88\83â\88\83m,K,V,V2. â\87©[i] L â\89\98 K.â\93\9bV & â\9d¨G,Kâ\9d© ⊢ V ⬆*[h,m] V2 & ⇧[↑i] V2 ≘ X2 & n = ↑m.
#h #n #G #L #i #X2 #H @(cpts_ind_dx … H) -X2
[ /3 width=1 by or3_intro0, conj/
| #n1 #n2 #T #T2 #_ #IH #HT2 cases IH -IH *
qed-.
lemma cpts_inv_delta_sn (h) (n) (G) (K) (V):
- â\88\80X2. â\9dªG,K.â\93\93Vâ\9d« ⊢ #0 ⬆*[h,n] X2 →
+ â\88\80X2. â\9d¨G,K.â\93\93Vâ\9d© ⊢ #0 ⬆*[h,n] X2 →
∨∨ ∧∧ X2 = #0 & n = 0
- | â\88\83â\88\83V2. â\9dªG,Kâ\9d« ⊢ V ⬆*[h,n] V2 & ⇧[1] V2 ≘ X2.
+ | â\88\83â\88\83V2. â\9d¨G,Kâ\9d© ⊢ V ⬆*[h,n] V2 & ⇧[1] V2 ≘ X2.
#h #n #G #K #V #X2 #H
elim (cpts_inv_lref_sn_drops … H) -H *
[ /3 width=1 by or_introl, conj/
qed-.
lemma cpts_inv_ell_sn (h) (n) (G) (K) (V):
- â\88\80X2. â\9dªG,K.â\93\9bVâ\9d« ⊢ #0 ⬆*[h,n] X2 →
+ â\88\80X2. â\9d¨G,K.â\93\9bVâ\9d© ⊢ #0 ⬆*[h,n] X2 →
∨∨ ∧∧ X2 = #0 & n = 0
- | â\88\83â\88\83m,V2. â\9dªG,Kâ\9d« ⊢ V ⬆*[h,m] V2 & ⇧[1] V2 ≘ X2 & n = ↑m.
+ | â\88\83â\88\83m,V2. â\9d¨G,Kâ\9d© ⊢ V ⬆*[h,m] V2 & ⇧[1] V2 ≘ X2 & n = ↑m.
#h #n #G #K #V #X2 #H
elim (cpts_inv_lref_sn_drops … H) -H *
[ /3 width=1 by or_introl, conj/
qed-.
lemma cpts_inv_lref_sn (h) (n) (I) (G) (K) (i):
- â\88\80X2. â\9dªG,K.â\93\98[I]â\9d« ⊢ #↑i ⬆*[h,n] X2 →
+ â\88\80X2. â\9d¨G,K.â\93\98[I]â\9d© ⊢ #↑i ⬆*[h,n] X2 →
∨∨ ∧∧ X2 = #↑i & n = 0
- | â\88\83â\88\83T2. â\9dªG,Kâ\9d« ⊢ #i ⬆*[h,n] T2 & ⇧[1] T2 ≘ X2.
+ | â\88\83â\88\83T2. â\9d¨G,Kâ\9d© ⊢ #i ⬆*[h,n] T2 & ⇧[1] T2 ≘ X2.
#h #n #I #G #K #i #X2 #H
elim (cpts_inv_lref_sn_drops … H) -H *
[ /3 width=1 by or_introl, conj/
qed-.
lemma cpts_inv_succ_sn (h) (n) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬆*[h,↑n] T2 →
- â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\86*[h,1] T & â\9dªG,Lâ\9d« ⊢ T ⬆*[h,n] T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬆*[h,↑n] T2 →
+ â\88\83â\88\83T. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\86*[h,1] T & â\9d¨G,Lâ\9d© ⊢ T ⬆*[h,n] T2.
#h #n #G #L #T1 #T2
@(insert_eq_0 … (↑n)) #m #H
@(cpts_ind_sn … H) -T1 -m
lemma cpxs_ind (G) (L) (T1) (Q:predicate …):
Q T1 →
- (â\88\80T,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88* T â\86\92 â\9dªG,Lâ\9d« ⊢ T ⬈ T2 → Q T → Q T2) →
- â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2 → Q T2.
+ (â\88\80T,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88* T â\86\92 â\9d¨G,Lâ\9d© ⊢ T ⬈ T2 → Q T → Q T2) →
+ â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2 → Q T2.
#L #G #T1 #Q #HT1 #IHT1 #T2 #HT12
@(TC_star_ind … HT1 IHT1 … HT12) //
qed-.
lemma cpxs_ind_dx (G) (L) (T2) (Q:predicate …):
Q T2 →
- (â\88\80T1,T. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88 T â\86\92 â\9dªG,Lâ\9d« ⊢ T ⬈* T2 → Q T → Q T1) →
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2 → Q T1.
+ (â\88\80T1,T. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88 T â\86\92 â\9d¨G,Lâ\9d© ⊢ T ⬈* T2 → Q T → Q T1) →
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2 → Q T1.
#G #L #T2 #Q #HT2 #IHT2 #T1 #HT12
@(TC_star_ind_dx … HT2 IHT2 … HT12) //
qed-.
(* Basic properties *********************************************************)
lemma cpxs_refl (G) (L):
- â\88\80T. â\9dªG,Lâ\9d« ⊢ T ⬈* T.
+ â\88\80T. â\9d¨G,Lâ\9d© ⊢ T ⬈* T.
/2 width=1 by inj/ qed.
-lemma cpx_cpxs (G) (L): â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88 T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2.
+lemma cpx_cpxs (G) (L): â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88 T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2.
/2 width=1 by inj/ qed.
lemma cpxs_strap1 (G) (L):
- â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ⬈* T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â¬\88 T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2.
+ â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â¬\88 T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2.
normalize /2 width=3 by step/ qed-.
lemma cpxs_strap2 (G) (L):
- â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ⬈ T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â¬\88* T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2.
+ â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ⬈ T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â¬\88* T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2.
normalize /2 width=3 by TC_strap/ qed-.
(* Basic_2A1: was just: cpxs_sort *)
lemma cpxs_qu (G) (L):
- â\88\80s1,s2. â\9dªG,Lâ\9d« ⊢ ⋆s1 ⬈* ⋆s2.
+ â\88\80s1,s2. â\9d¨G,Lâ\9d© ⊢ ⋆s1 ⬈* ⋆s2.
/2 width=1 by cpx_cpxs/ qed.
lemma cpxs_bind_dx (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈ V2 →
- â\88\80I,T1,T2. â\9dªG,L. â\93\91[I]V1â\9d« ⊢ T1 ⬈* T2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ⬈* ⓑ[p,I]V2.T2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬈ V2 →
+ â\88\80I,T1,T2. â\9d¨G,L. â\93\91[I]V1â\9d© ⊢ T1 ⬈* T2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ⬈* ⓑ[p,I]V2.T2.
#G #L #V1 #V2 #HV12 #I #T1 #T2 #HT12 #a @(cpxs_ind_dx … HT12) -T1
/3 width=3 by cpxs_strap2, cpx_cpxs, cpx_pair_sn, cpx_bind/
qed.
lemma cpxs_flat_dx (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈ V2 →
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2 →
- â\88\80I. â\9dªG,Lâ\9d« ⊢ ⓕ[I]V1.T1 ⬈* ⓕ[I]V2.T2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬈ V2 →
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2 →
+ â\88\80I. â\9d¨G,Lâ\9d© ⊢ ⓕ[I]V1.T1 ⬈* ⓕ[I]V2.T2.
#G #L #V1 #V2 #HV12 #T1 #T2 #HT12 @(cpxs_ind … HT12) -T2
/3 width=5 by cpxs_strap1, cpx_cpxs, cpx_pair_sn, cpx_flat/
qed.
lemma cpxs_flat_sn (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈ T2 →
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈* V2 →
- â\88\80I. â\9dªG,Lâ\9d« ⊢ ⓕ[I]V1.T1 ⬈* ⓕ[I]V2.T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈ T2 →
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬈* V2 →
+ â\88\80I. â\9d¨G,Lâ\9d© ⊢ ⓕ[I]V1.T1 ⬈* ⓕ[I]V2.T2.
#G #L #T1 #T2 #HT12 #V1 #V2 #H @(cpxs_ind … H) -V2
/3 width=5 by cpxs_strap1, cpx_cpxs, cpx_pair_sn, cpx_flat/
qed.
lemma cpxs_pair_sn (G) (L):
- â\88\80I,V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈* V2 →
- â\88\80T. â\9dªG,Lâ\9d« ⊢ ②[I]V1.T ⬈* ②[I]V2.T.
+ â\88\80I,V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬈* V2 →
+ â\88\80T. â\9d¨G,Lâ\9d© ⊢ ②[I]V1.T ⬈* ②[I]V2.T.
#G #L #I #V1 #V2 #H @(cpxs_ind … H) -V2
/3 width=3 by cpxs_strap1, cpx_pair_sn/
qed.
lemma cpxs_zeta (G) (L) (V):
∀T1,T. ⇧[1] T ≘ T1 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â¬\88* T2 â\86\92 â\9dªG,Lâ\9d« ⊢ +ⓓV.T1 ⬈* T2.
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â¬\88* T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ +ⓓV.T1 ⬈* T2.
#G #L #V #T1 #T #HT1 #T2 #H @(cpxs_ind … H) -T2
/3 width=3 by cpxs_strap1, cpx_cpxs, cpx_zeta/
qed.
(* Basic_2A1: was: cpxs_zeta *)
lemma cpxs_zeta_dx (G) (L) (V):
∀T2,T. ⇧[1] T2 ≘ T →
- â\88\80T1. â\9dªG,L.â\93\93Vâ\9d« â\8a¢ T1 â¬\88* T â\86\92 â\9dªG,Lâ\9d« ⊢ +ⓓV.T1 ⬈* T2.
+ â\88\80T1. â\9d¨G,L.â\93\93Vâ\9d© â\8a¢ T1 â¬\88* T â\86\92 â\9d¨G,Lâ\9d© ⊢ +ⓓV.T1 ⬈* T2.
#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_eps (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2 →
- â\88\80V. â\9dªG,Lâ\9d« ⊢ ⓝV.T1 ⬈* T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2 →
+ â\88\80V. â\9d¨G,Lâ\9d© ⊢ ⓝV.T1 ⬈* T2.
#G #L #T1 #T2 #H @(cpxs_ind … H) -T2
/3 width=3 by cpxs_strap1, cpx_cpxs, cpx_eps/
qed.
(* Basic_2A1: was: cpxs_ct *)
lemma cpxs_ee (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈* V2 →
- â\88\80T. â\9dªG,Lâ\9d« ⊢ ⓝV1.T ⬈* V2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬈* V2 →
+ â\88\80T. â\9d¨G,Lâ\9d© ⊢ ⓝV1.T ⬈* V2.
#G #L #V1 #V2 #H @(cpxs_ind … H) -V2
/3 width=3 by cpxs_strap1, cpx_cpxs, cpx_ee/
qed.
lemma cpxs_beta_dx (G) (L):
∀p,V1,V2,W1,W2,T1,T2.
- â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 â\86\92 â\9dªG,L.â\93\9bW1â\9d« â\8a¢ T1 â¬\88* T2 â\86\92 â\9dªG,Lâ\9d« ⊢ W1 ⬈ W2 →
- â\9dªG,Lâ\9d« ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈* ⓓ[p]ⓝW2.V2.T2.
+ â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 â\86\92 â\9d¨G,L.â\93\9bW1â\9d© â\8a¢ T1 â¬\88* T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ W1 ⬈ W2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈* ⓓ[p]ⓝW2.V2.T2.
#G #L #p #V1 #V2 #W1 #W2 #T1 #T2 #HV12 * -T2
/4 width=7 by cpx_cpxs, cpxs_strap1, cpxs_bind_dx, cpxs_flat_dx, cpx_beta/
qed.
lemma cpxs_theta_dx (G) (L):
∀p,V1,V,V2,W1,W2,T1,T2.
- â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V â\86\92 â\87§[1] V â\89\98 V2 â\86\92 â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ⬈* T2 →
- â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88 W2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈* ⓓ[p]W2.ⓐV2.T2.
+ â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V â\86\92 â\87§[1] V â\89\98 V2 â\86\92 â\9d¨G,L.â\93\93W1â\9d© ⊢ T1 ⬈* T2 →
+ â\9d¨G,Lâ\9d© â\8a¢ W1 â¬\88 W2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈* ⓓ[p]W2.ⓐV2.T2.
#G #L #p #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.
(* Basic_2A1: wa just: cpxs_inv_sort1 *)
lemma cpxs_inv_sort1 (G) (L):
- â\88\80X2,s1. â\9dªG,Lâ\9d« ⊢ ⋆s1 ⬈* X2 →
+ â\88\80X2,s1. â\9d¨G,Lâ\9d© ⊢ ⋆s1 ⬈* X2 →
∃s2. X2 = ⋆s2.
#G #L #X2 #s1 #H @(cpxs_ind … H) -X2 /2 width=2 by ex_intro/
#X #X2 #_ #HX2 * #s #H destruct
qed-.
lemma cpxs_inv_cast1 (G) (L):
- â\88\80W1,T1,U2. â\9dªG,Lâ\9d« ⊢ ⓝW1.T1 ⬈* U2 →
- â\88¨â\88¨ â\88\83â\88\83W2,T2. â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88* W2 & â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2 & U2 = ⓝW2.T2
- | â\9dªG,Lâ\9d« ⊢ T1 ⬈* U2
- | â\9dªG,Lâ\9d« ⊢ W1 ⬈* U2.
+ â\88\80W1,T1,U2. â\9d¨G,Lâ\9d© ⊢ ⓝW1.T1 ⬈* U2 →
+ â\88¨â\88¨ â\88\83â\88\83W2,T2. â\9d¨G,Lâ\9d© â\8a¢ W1 â¬\88* W2 & â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2 & U2 = ⓝW2.T2
+ | â\9d¨G,Lâ\9d© ⊢ T1 ⬈* U2
+ | â\9d¨G,Lâ\9d© ⊢ W1 ⬈* U2.
#G #L #W1 #T1 #U2 #H @(cpxs_ind … H) -U2 /3 width=5 by or3_intro0, ex3_2_intro/
#U2 #U #_ #HU2 * /3 width=3 by cpxs_strap1, or3_intro1, or3_intro2/ *
#W #T #HW1 #HT1 #H destruct
(* Properties with normal forms *********************************************)
lemma cpxs_cnx (G) (L) (T1):
- (â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88* T2 â\86\92 T1 â\89\85 T2) â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈𝐍 T1.
+ (â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88* T2 â\86\92 T1 â\89\85 T2) â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈𝐍 T1.
/3 width=1 by cpx_cpxs/ qed.
(* Inversion lemmas with normal terms ***************************************)
lemma cpxs_inv_cnx1 (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88* T2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈𝐍 T1 → T1 ≅ T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88* T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈𝐍 T1 → T1 ≅ T2.
#G #L #T1 #T2 #H @(cpxs_ind_dx … H) -T1
/5 width=9 by cnx_teqx_trans, teqx_trans/
qed-.
normalize /2 width=3 by trans_TC/ qed-.
theorem cpxs_bind (G) (L):
- â\88\80p,I,V1,V2,T1,T2. â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ⬈* T2 →
- â\9dªG,Lâ\9d« ⊢ V1 ⬈* V2 →
- â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ⬈* ⓑ[p,I]V2.T2.
+ â\88\80p,I,V1,V2,T1,T2. â\9d¨G,L.â\93\91[I]V1â\9d© ⊢ T1 ⬈* T2 →
+ â\9d¨G,Lâ\9d© ⊢ V1 ⬈* V2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ⬈* ⓑ[p,I]V2.T2.
#G #L #p #I #V1 #V2 #T1 #T2 #HT12 #H @(cpxs_ind … H) -V2
/3 width=5 by cpxs_trans, cpxs_bind_dx/
qed.
theorem cpxs_flat (G) (L):
- â\88\80I,V1,V2,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2 →
- â\9dªG,Lâ\9d« ⊢ V1 ⬈* V2 →
- â\9dªG,Lâ\9d« ⊢ ⓕ[I]V1.T1 ⬈* ⓕ[I]V2.T2.
+ â\88\80I,V1,V2,T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2 →
+ â\9d¨G,Lâ\9d© ⊢ V1 ⬈* V2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓕ[I]V1.T1 ⬈* ⓕ[I]V2.T2.
#G #L #I #V1 #V2 #T1 #T2 #HT12 #H @(cpxs_ind … H) -V2
/3 width=5 by cpxs_trans, cpxs_flat_dx/
qed.
theorem cpxs_beta_rc (G) (L):
∀p,V1,V2,W1,W2,T1,T2.
- â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 â\86\92 â\9dªG,L.â\93\9bW1â\9d« â\8a¢ T1 â¬\88* T2 â\86\92 â\9dªG,Lâ\9d« ⊢ W1 ⬈* W2 →
- â\9dªG,Lâ\9d« ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈* ⓓ[p]ⓝW2.V2.T2.
+ â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 â\86\92 â\9d¨G,L.â\93\9bW1â\9d© â\8a¢ T1 â¬\88* T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ W1 ⬈* W2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈* ⓓ[p]ⓝW2.V2.T2.
#G #L #p #V1 #V2 #W1 #W2 #T1 #T2 #HV12 #HT12 #H @(cpxs_ind … H) -W2
/4 width=5 by cpxs_trans, cpxs_beta_dx, cpxs_bind_dx, cpx_pair_sn/
qed.
theorem cpxs_beta (G) (L):
∀p,V1,V2,W1,W2,T1,T2.
- â\9dªG,L.â\93\9bW1â\9d« â\8a¢ T1 â¬\88* T2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88* W2 â\86\92 â\9dªG,Lâ\9d« ⊢ V1 ⬈* V2 →
- â\9dªG,Lâ\9d« ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈* ⓓ[p]ⓝW2.V2.T2.
+ â\9d¨G,L.â\93\9bW1â\9d© â\8a¢ T1 â¬\88* T2 â\86\92 â\9d¨G,Lâ\9d© â\8a¢ W1 â¬\88* W2 â\86\92 â\9d¨G,Lâ\9d© ⊢ V1 ⬈* V2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈* ⓓ[p]ⓝW2.V2.T2.
#G #L #p #V1 #V2 #W1 #W2 #T1 #T2 #HT12 #HW12 #H @(cpxs_ind … H) -V2
/4 width=5 by cpxs_trans, cpxs_beta_rc, cpxs_bind_dx, cpx_flat/
qed.
theorem cpxs_theta_rc (G) (L):
∀p,V1,V,V2,W1,W2,T1,T2.
- â\9dªG,Lâ\9d« ⊢ V1 ⬈ V → ⇧[1] V ≘ V2 →
- â\9dªG,L.â\93\93W1â\9d« â\8a¢ T1 â¬\88* T2 â\86\92 â\9dªG,Lâ\9d« ⊢ W1 ⬈* W2 →
- â\9dªG,Lâ\9d« ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈* ⓓ[p]W2.ⓐV2.T2.
+ â\9d¨G,Lâ\9d© ⊢ V1 ⬈ V → ⇧[1] V ≘ V2 →
+ â\9d¨G,L.â\93\93W1â\9d© â\8a¢ T1 â¬\88* T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ W1 ⬈* W2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈* ⓓ[p]W2.ⓐV2.T2.
#G #L #p #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 #HT12 #H @(cpxs_ind … H) -W2
/3 width=5 by cpxs_trans, cpxs_theta_dx, cpxs_bind_dx/
qed.
theorem cpxs_theta (G) (L):
∀p,V1,V,V2,W1,W2,T1,T2.
- â\87§[1] V â\89\98 V2 â\86\92 â\9dªG,Lâ\9d« ⊢ W1 ⬈* W2 →
- â\9dªG,L.â\93\93W1â\9d« â\8a¢ T1 â¬\88* T2 â\86\92 â\9dªG,Lâ\9d« ⊢ V1 ⬈* V →
- â\9dªG,Lâ\9d« ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈* ⓓ[p]W2.ⓐV2.T2.
+ â\87§[1] V â\89\98 V2 â\86\92 â\9d¨G,Lâ\9d© ⊢ W1 ⬈* W2 →
+ â\9d¨G,L.â\93\93W1â\9d© â\8a¢ T1 â¬\88* T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ V1 ⬈* V →
+ â\9d¨G,Lâ\9d© ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈* ⓓ[p]W2.ⓐV2.T2.
#p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV2 #HW12 #HT12 #H @(TC_ind_dx … V1 H) -V1
/3 width=5 by cpxs_trans, cpxs_theta_rc, cpxs_flat_dx/
qed.
(* Advanced inversion lemmas ************************************************)
lemma cpxs_inv_appl1 (G) (L):
- â\88\80V1,T1,U2. â\9dªG,Lâ\9d« ⊢ ⓐV1.T1 ⬈* U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88* V2 & â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2 & U2 = ⓐV2.T2
- | â\88\83â\88\83p,W,T. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88* â\93\9b[p]W.T & â\9dªG,Lâ\9d« ⊢ ⓓ[p]ⓝW.V1.T ⬈* U2
- | â\88\83â\88\83p,V0,V2,V,T. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88* V0 & â\87§[1] V0 â\89\98 V2 & â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88* â\93\93[p]V.T & â\9dªG,Lâ\9d« ⊢ ⓓ[p]V.ⓐV2.T ⬈* U2.
+ â\88\80V1,T1,U2. â\9d¨G,Lâ\9d© ⊢ ⓐV1.T1 ⬈* U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88* V2 & â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2 & U2 = ⓐV2.T2
+ | â\88\83â\88\83p,W,T. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88* â\93\9b[p]W.T & â\9d¨G,Lâ\9d© ⊢ ⓓ[p]ⓝW.V1.T ⬈* U2
+ | â\88\83â\88\83p,V0,V2,V,T. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88* V0 & â\87§[1] V0 â\89\98 V2 & â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88* â\93\93[p]V.T & â\9d¨G,Lâ\9d© ⊢ ⓓ[p]V.ⓐV2.T ⬈* U2.
#G #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 [ /3 width=5 by or3_intro0, ex3_2_intro/ ]
#U #U2 #_ #HU2 * *
[ #V0 #T0 #HV10 #HT10 #H destruct
(* Advanced properties ******************************************************)
lemma cpxs_delta (G) (K):
- â\88\80I,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈* V2 →
- â\88\80W2. â\87§[1] V2 â\89\98 W2 â\86\92 â\9dªG,K.â\93\91[I]V1â\9d« ⊢ #0 ⬈* W2.
+ â\88\80I,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬈* V2 →
+ â\88\80W2. â\87§[1] V2 â\89\98 W2 â\86\92 â\9d¨G,K.â\93\91[I]V1â\9d© ⊢ #0 ⬈* W2.
#G #K #I #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 (G) (K):
- â\88\80I,T,i. â\9dªG,Kâ\9d« ⊢ #i ⬈* T →
- â\88\80U. â\87§[1] T â\89\98 U â\86\92 â\9dªG,K.â\93\98[I]â\9d« ⊢ #↑i ⬈* U.
+ â\88\80I,T,i. â\9d¨G,Kâ\9d© ⊢ #i ⬈* T →
+ â\88\80U. â\87§[1] T â\89\98 U â\86\92 â\9d¨G,K.â\93\98[I]â\9d© ⊢ #↑i ⬈* U.
#G #K #I #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 (G) (L):
- â\88\80I,K,V1,V2,i. â\87©[i] L â\89\98 K.â\93\91[I]V1 â\86\92 â\9dªG,Kâ\9d« ⊢ V1 ⬈* V2 →
- â\88\80W2. â\87§[â\86\91i] V2 â\89\98 W2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ⬈* W2.
+ â\88\80I,K,V1,V2,i. â\87©[i] L â\89\98 K.â\93\91[I]V1 â\86\92 â\9d¨G,Kâ\9d© ⊢ V1 ⬈* V2 →
+ â\88\80W2. â\87§[â\86\91i] V2 â\89\98 W2 â\86\92 â\9d¨G,Lâ\9d© ⊢ #i ⬈* W2.
#G #L #I #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
(* Advanced inversion lemmas ************************************************)
lemma cpxs_inv_zero1 (G) (L):
- â\88\80T2. â\9dªG,Lâ\9d« ⊢ #0 ⬈* T2 →
+ â\88\80T2. â\9d¨G,Lâ\9d© ⊢ #0 ⬈* T2 →
∨∨ T2 = #0
- | â\88\83â\88\83I,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈* V2 & ⇧[1] V2 ≘ T2 & L = K.ⓑ[I]V1.
+ | â\88\83â\88\83I,K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬈* V2 & ⇧[1] V2 ≘ T2 & L = K.ⓑ[I]V1.
#G #L #T2 #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/
#T #T2 #_ #HT2 *
[ #H destruct
qed-.
lemma cpxs_inv_lref1 (G) (L):
- â\88\80T2,i. â\9dªG,Lâ\9d« ⊢ #↑i ⬈* T2 →
+ â\88\80T2,i. â\9d¨G,Lâ\9d© ⊢ #↑i ⬈* T2 →
∨∨ T2 = #(↑i)
- | â\88\83â\88\83I,K,T. â\9dªG,Kâ\9d« ⊢ #i ⬈* T & ⇧[1] T ≘ T2 & L = K.ⓘ[I].
+ | â\88\83â\88\83I,K,T. â\9d¨G,Kâ\9d© ⊢ #i ⬈* T & ⇧[1] T ≘ T2 & L = K.ⓘ[I].
#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 (G) (L):
- â\88\80T2,i. â\9dªG,Lâ\9d« ⊢ #i ⬈* T2 →
+ â\88\80T2,i. â\9d¨G,Lâ\9d© ⊢ #i ⬈* T2 →
∨∨ T2 = #i
- | â\88\83â\88\83I,K,V1,T1. â\87©[i] L â\89\98 K.â\93\91[I]V1 & â\9dªG,Kâ\9d« ⊢ V1 ⬈* T1 & ⇧[↑i] T1 ≘ T2.
+ | â\88\83â\88\83I,K,V1,T1. â\87©[i] L â\89\98 K.â\93\91[I]V1 & â\9d¨G,Kâ\9d© ⊢ V1 ⬈* T1 & ⇧[↑i] T1 ≘ T2.
#G #L #T2 #i #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/
#T #T2 #_ #HT2 *
[ #H destruct
(* to update *)
lemma feqg_cpxs_trans (S):
reflexive … S → symmetric … S →
- â\88\80G1,G2,L1,L2,T1,T. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,Tâ\9d« →
- â\88\80T2. â\9dªG2,L2â\9d« ⊢ T ⬈* T2 →
- â\88\83â\88\83T0. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88* T0 & â\9dªG1,L1,T0â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,Tâ\9d© →
+ â\88\80T2. â\9d¨G2,L2â\9d© ⊢ T ⬈* T2 →
+ â\88\83â\88\83T0. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88* T0 & â\9d¨G1,L1,T0â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d©.
#S #H1S #H2S #G1 #G2 #L1 #L2 #T1 #T #H #T2 #H2T2
elim (feqg_inv_gen_dx … H) -H // #H #HL12 #HT1 destruct
lapply (reqg_cpxs_trans … H2T2 … HL12) // #H1T2
(* Properties on supclosure *************************************************)
lemma fqu_cpxs_trans (b):
- â\88\80G1,G2,L1,L2,T2,U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈* U2 →
- â\88\80T1. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
- â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88* U1 & â\9dªG1,L1,U1â\9d« â¬\82[b] â\9dªG2,L2,U2â\9d«.
+ â\88\80G1,G2,L1,L2,T2,U2. â\9d¨G2,L2â\9d© ⊢ T2 ⬈* U2 →
+ â\88\80T1. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\83â\88\83U1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88* U1 & â\9d¨G1,L1,U1â\9d© â¬\82[b] â\9d¨G2,L2,U2â\9d©.
#b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/
#T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fqu_cpx_trans … HT1 … HT2) -T
#T #HT1 #HT2 elim (IHTU2 … HT2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/
qed-.
lemma fquq_cpxs_trans (b):
- â\88\80G1,G2,L1,L2,T2,U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈* U2 →
- â\88\80T1. â\9dªG1,L1,T1â\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d« →
- â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88* U1 & â\9dªG1,L1,U1â\9d« â¬\82⸮[b] â\9dªG2,L2,U2â\9d«.
+ â\88\80G1,G2,L1,L2,T2,U2. â\9d¨G2,L2â\9d© ⊢ T2 ⬈* U2 →
+ â\88\80T1. â\9d¨G1,L1,T1â\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\83â\88\83U1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88* U1 & â\9d¨G1,L1,U1â\9d© â¬\82⸮[b] â\9d¨G2,L2,U2â\9d©.
#b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/
#T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fquq_cpx_trans … HT1 … HT2) -T
#T #HT1 #HT2 elim (IHTU2 … HT2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/
qed-.
lemma fqup_cpxs_trans (b):
- â\88\80G1,G2,L1,L2,T2,U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈* U2 →
- â\88\80T1. â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« →
- â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88* U1 & â\9dªG1,L1,U1â\9d« â¬\82+[b] â\9dªG2,L2,U2â\9d«.
+ â\88\80G1,G2,L1,L2,T2,U2. â\9d¨G2,L2â\9d© ⊢ T2 ⬈* U2 →
+ â\88\80T1. â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\83â\88\83U1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88* U1 & â\9d¨G1,L1,U1â\9d© â¬\82+[b] â\9d¨G2,L2,U2â\9d©.
#b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/
#T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fqup_cpx_trans … HT1 … HT2) -T
#U1 #HTU1 #H2 elim (IHTU2 … H2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/
qed-.
lemma fqus_cpxs_trans (b):
- â\88\80G1,G2,L1,L2,T2,U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈* U2 →
- â\88\80T1. â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
- â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88* U1 & â\9dªG1,L1,U1â\9d« â¬\82*[b] â\9dªG2,L2,U2â\9d«.
+ â\88\80G1,G2,L1,L2,T2,U2. â\9d¨G2,L2â\9d© ⊢ T2 ⬈* U2 →
+ â\88\80T1. â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\83â\88\83U1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88* U1 & â\9d¨G1,L1,U1â\9d© â¬\82*[b] â\9d¨G2,L2,U2â\9d©.
#b #G1 #G2 #L1 #L2 #T2 #U2 #H @(cpxs_ind_dx … H) -T2 /2 width=3 by ex2_intro/
#T #T2 #HT2 #_ #IHTU2 #T1 #HT1 elim (fqus_cpx_trans … HT1 … HT2) -T
#U1 #HTU1 #H2 elim (IHTU2 … H2) -T2 /3 width=3 by cpxs_strap2, ex2_intro/
(* Note: a proof based on fqu_cpx_trans_tneqx might exist *)
(* Basic_2A1: uses: fqu_cpxs_trans_neq *)
lemma fqu_cpxs_trans_tneqg (S) (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
- â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈* U2 → (T2 ≛[S] U2 → ⊥) →
- â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88* U1 & T1 â\89\9b[S] U1 â\86\92 â\8a¥ & â\9dªG1,L1,U1â\9d« â¬\82[b] â\9dªG2,L2,U2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80U2. â\9d¨G2,L2â\9d© ⊢ T2 ⬈* U2 → (T2 ≛[S] U2 → ⊥) →
+ â\88\83â\88\83U1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88* U1 & T1 â\89\9b[S] U1 â\86\92 â\8a¥ & â\9d¨G1,L1,U1â\9d© â¬\82[b] â\9d¨G2,L2,U2â\9d©.
#S #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ #I #G #L #V1 #V2 #HV12 #_ elim (lifts_total V2 𝐔❨1❩)
#U2 #HVU2 @(ex3_intro … U2)
(* Basic_2A1: uses: fquq_cpxs_trans_neq *)
lemma fquq_cpxs_trans_tneqg (S) (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d« →
- â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈* U2 → (T2 ≛[S] U2 → ⊥) →
- â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88* U1 & T1 â\89\9b[S] U1 â\86\92 â\8a¥ & â\9dªG1,L1,U1â\9d« â¬\82⸮[b] â\9dªG2,L2,U2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80U2. â\9d¨G2,L2â\9d© ⊢ T2 ⬈* U2 → (T2 ≛[S] U2 → ⊥) →
+ â\88\83â\88\83U1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88* U1 & T1 â\89\9b[S] U1 â\86\92 â\8a¥ & â\9d¨G1,L1,U1â\9d© â¬\82⸮[b] â\9d¨G2,L2,U2â\9d©.
#S #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 elim H12 -H12
[ #H12 #U2 #HTU2 #H elim (fqu_cpxs_trans_tneqg … H12 … HTU2 H) -T2
/3 width=4 by fqu_fquq, ex3_intro/
(* Basic_2A1: uses: fqup_cpxs_trans_neq *)
lemma fqup_cpxs_trans_tneqg (S) (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« →
- â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈* U2 → (T2 ≛[S] U2 → ⊥) →
- â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88* U1 & T1 â\89\9b[S] U1 â\86\92 â\8a¥ & â\9dªG1,L1,U1â\9d« â¬\82+[b] â\9dªG2,L2,U2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80U2. â\9d¨G2,L2â\9d© ⊢ T2 ⬈* U2 → (T2 ≛[S] U2 → ⊥) →
+ â\88\83â\88\83U1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88* U1 & T1 â\89\9b[S] U1 â\86\92 â\8a¥ & â\9d¨G1,L1,U1â\9d© â¬\82+[b] â\9d¨G2,L2,U2â\9d©.
#S #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1
[ #G1 #L1 #T1 #H12 #U2 #HTU2 #H elim (fqu_cpxs_trans_tneqg … H12 … HTU2 H) -T2
/3 width=4 by fqu_fqup, ex3_intro/
(* Basic_2A1: uses: fqus_cpxs_trans_neq *)
lemma fqus_cpxs_trans_tneqg (S) (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
- â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈* U2 → (T2 ≛[S] U2 → ⊥) →
- â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88* U1 & T1 â\89\9b[S] U1 â\86\92 â\8a¥ & â\9dªG1,L1,U1â\9d« â¬\82*[b] â\9dªG2,L2,U2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80U2. â\9d¨G2,L2â\9d© ⊢ T2 ⬈* U2 → (T2 ≛[S] U2 → ⊥) →
+ â\88\83â\88\83U1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88* U1 & T1 â\89\9b[S] U1 â\86\92 â\8a¥ & â\9d¨G1,L1,U1â\9d© â¬\82*[b] â\9d¨G2,L2,U2â\9d©.
#S #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_fqup … H12) -H12
[ #H12 elim (fqup_cpxs_trans_tneqg … H12 … HTU2 H) -T2
/3 width=4 by fqup_fqus, ex3_intro/
(* Advanced properties ******************************************************)
lemma cpx_bind2 (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈ V2 →
- â\88\80I,T1,T2. â\9dªG,L.â\93\91[I]V2â\9d« ⊢ T1 ⬈ T2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ⬈* ⓑ[p,I]V2.T2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬈ V2 →
+ â\88\80I,T1,T2. â\9d¨G,L.â\93\91[I]V2â\9d© ⊢ T1 ⬈ T2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ⬈* ⓑ[p,I]V2.T2.
/4 width=5 by lpx_cpx_trans, cpxs_bind_dx, lpx_pair/ qed.
lemma cpxs_bind2_dx (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈ V2 →
- â\88\80I,T1,T2. â\9dªG,L.â\93\91[I]V2â\9d« ⊢ T1 ⬈* T2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ⬈* ⓑ[p,I]V2.T2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬈ V2 →
+ â\88\80I,T1,T2. â\9d¨G,L.â\93\91[I]V2â\9d© ⊢ T1 ⬈* T2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ⬈* ⓑ[p,I]V2.T2.
/4 width=5 by lpx_cpxs_trans, cpxs_bind_dx, lpx_pair/ qed.
(* Properties with plus-iterated structural successor for closures **********)
(* Basic_2A1: uses: lpx_fqup_trans *)
lemma lpx_fqup_trans (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« →
- â\88\80K1. â\9dªG1,K1â\9d« ⊢ ⬈ L1 →
- â\88\83â\88\83K2,T. â\9dªG1,K1â\9d« â\8a¢ T1 â¬\88* T & â\9dªG1,K1,Tâ\9d« â¬\82+[b] â\9dªG2,K2,T2â\9d« & â\9dªG2,K2â\9d« ⊢ ⬈ L2.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80K1. â\9d¨G1,K1â\9d© ⊢ ⬈ L1 →
+ â\88\83â\88\83K2,T. â\9d¨G1,K1â\9d© â\8a¢ T1 â¬\88* T & â\9d¨G1,K1,Tâ\9d© â¬\82+[b] â\9d¨G2,K2,T2â\9d© & â\9d¨G2,K2â\9d© ⊢ ⬈ L2.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
[ #G2 #L2 #T2 #H12 #K1 #HKL1 elim (lpx_fqu_trans … H12 … HKL1) -L1
/3 width=5 by cpx_cpxs, fqu_fqup, ex3_2_intro/
(* Basic_2A1: uses: lpx_fqus_trans *)
lemma lpx_fqus_trans (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
- â\88\80K1. â\9dªG1,K1â\9d« ⊢ ⬈ L1 →
- â\88\83â\88\83K2,T. â\9dªG1,K1â\9d« â\8a¢ T1 â¬\88* T & â\9dªG1,K1,Tâ\9d« â¬\82*[b] â\9dªG2,K2,T2â\9d« & â\9dªG2,K2â\9d« ⊢ ⬈ L2.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80K1. â\9d¨G1,K1â\9d© ⊢ ⬈ L1 →
+ â\88\83â\88\83K2,T. â\9d¨G1,K1â\9d© â\8a¢ T1 â¬\88* T & â\9d¨G1,K1,Tâ\9d© â¬\82*[b] â\9d¨G2,K2,T2â\9d© & â\9d¨G2,K2â\9d© ⊢ ⬈ L2.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #HKL1 elim (fqus_inv_fqup … H) -H
[ #H12 elim (lpx_fqup_trans … H12 … HKL1) -L1 /3 width=5 by fqup_fqus, ex3_2_intro/
| * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
(* Basic_2A1: was just: lleq_cpxs_trans *)
lemma reqg_cpxs_trans (S) (G):
reflexive … S → symmetric … S →
- â\88\80L0,T0,T1. â\9dªG,L0â\9d« â\8a¢ T0 â¬\88* T1 â\86\92 â\88\80L2. L2 â\89\9b[S,T0] L0 â\86\92 â\9dªG,L2â\9d« ⊢ T0 ⬈* T1.
+ â\88\80L0,T0,T1. â\9d¨G,L0â\9d© â\8a¢ T0 â¬\88* T1 â\86\92 â\88\80L2. L2 â\89\9b[S,T0] L0 â\86\92 â\9d¨G,L2â\9d© ⊢ T0 ⬈* T1.
#S #G #H1S #H2S #L0 #T0 #T1 #H @(cpxs_ind_dx … H) -T0 //
#T0 #T #H0T0 #_ #IH #L2 #HL2
lapply (reqg_cpx_trans … HL2 … H0T0) // #H2T0
(* Basic_2A1: was just: cpxs_lleq_conf *)
lemma cpxs_reqg_conf (S) (G):
reflexive … S → symmetric … S →
- â\88\80L0,T0,T1. â\9dªG,L0â\9d« â\8a¢ T0 â¬\88* T1 â\86\92 â\88\80L2. L0 â\89\9b[S,T0] L2 â\86\92 â\9dªG,L2â\9d« ⊢ T0 ⬈* T1.
+ â\88\80L0,T0,T1. â\9d¨G,L0â\9d© â\8a¢ T0 â¬\88* T1 â\86\92 â\88\80L2. L0 â\89\9b[S,T0] L2 â\86\92 â\9d¨G,L2â\9d© ⊢ T0 ⬈* T1.
/3 width=8 by reqg_cpxs_trans, reqg_sym/ qed-.
(* Basic_2A1: was just: lleq_conf_sn *)
lemma cpxs_reqg_conf_sn (S) (G):
- â\88\80L1,T1,T2. â\9dªG,L1â\9d« ⊢ T1 ⬈* T2 →
+ â\88\80L1,T1,T2. â\9d¨G,L1â\9d© ⊢ T1 ⬈* T2 →
∀L2. L1 ≛[S,T1] L2 → L1 ≛[S,T2] L2.
#S #G #L1 #T1 #T2 #H @(cpxs_ind … H) -T2
/3 width=6 by cpx_reqg_conf_sn/
(* Basic_2A1: was just: cpxs_lleq_conf_dx *)
lemma cpxs_reqg_conf_dx (S) (G):
reflexive … S → symmetric … S →
- â\88\80L2,T1,T2. â\9dªG,L2â\9d« ⊢ T1 ⬈* T2 →
+ â\88\80L2,T1,T2. â\9d¨G,L2â\9d© ⊢ T1 ⬈* T2 →
∀L1. L1 ≛[S,T1] L2 → L1 ≛[S,T2] L2.
/4 width=4 by cpxs_reqg_conf_sn, reqg_sym/ qed-.
lemma teqg_cpxs_trans (S) (G) (L) (T):
reflexive … S → symmetric … S →
- â\88\80T1. T1 â\89\9b[S] T â\86\92 â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â¬\88* T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2.
+ â\88\80T1. T1 â\89\9b[S] T â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â¬\88* T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2.
#S #H1S #H2S #G #L #T #T1 #HT1 #T2 #HT2 @(cpxs_ind … HT2) -T2
[ /3 width=4 by teqg_cpx, cpx_cpxs/
| /2 width=3 by cpxs_strap1/
lemma cpxs_tneqg_fwd_step_sn (S) (G) (L):
reflexive … S → symmetric … S → Transitive … S →
(∀s1,s2. Decidable (S s1 s2)) →
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2 → (T1 ≛[S] T2 → ⊥) →
- â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88 T & T1 â\89\9b[S] T â\86\92 â\8a¥ & â\9dªG,Lâ\9d« ⊢ T ⬈* T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2 → (T1 ≛[S] T2 → ⊥) →
+ â\88\83â\88\83T. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88 T & T1 â\89\9b[S] T â\86\92 â\8a¥ & â\9d¨G,Lâ\9d© ⊢ T ⬈* T2.
#S #G #L #H1S #H2S #H3S #H4S #T1 #T2 #H @(cpxs_ind_dx … H) -T1
[ #H elim H -H /2 width=1 by teqg_refl/
| #T1 #T0 #HT10 #HT02 #IH #HnT12
(* Forward lemmas with sort-irrelevant outer equivalence for terms **********)
lemma cpxs_fwd_sort (G) (L):
- â\88\80X2,s1. â\9dªG,Lâ\9d« ⊢ ⋆s1 ⬈* X2 → ⋆s1 ~ X2.
+ â\88\80X2,s1. â\9d¨G,Lâ\9d© ⊢ ⋆s1 ⬈* X2 → ⋆s1 ~ X2.
#G #L #X2 #s1 #H
elim (cpxs_inv_sort1 … H) -H #s2 #H destruct //
qed-.
lemma cpxs_fwd_delta_drops (I) (G) (L) (K):
∀V1,i. ⇩[i] L ≘ K.ⓑ[I]V1 →
∀V2. ⇧[↑i] V1 ≘ V2 →
- â\88\80X2. â\9dªG,Lâ\9d« ⊢ #i ⬈* X2 →
- â\88¨â\88¨ #i ~ X2 | â\9dªG,Lâ\9d« ⊢ V2 ⬈* X2.
+ â\88\80X2. â\9d¨G,Lâ\9d© ⊢ #i ⬈* X2 →
+ â\88¨â\88¨ #i ~ X2 | â\9d¨G,Lâ\9d© ⊢ V2 ⬈* X2.
#I #G #L #K #V1 #i #HLK #V2 #HV12 #X2 #H
elim (cpxs_inv_lref1_drops … H) -H /2 width=1 by or_introl/
* #I0 #K0 #V0 #U0 #HLK0 #HVU0 #HU0
(* Basic_1: was just: pr3_iso_beta *)
lemma cpxs_fwd_beta (p) (G) (L):
- â\88\80V,W,T,X2. â\9dªG,Lâ\9d« ⊢ ⓐV.ⓛ[p]W.T ⬈* X2 →
- â\88¨â\88¨ â\93\90V.â\93\9b[p]W.T ~ X2 | â\9dªG,Lâ\9d« ⊢ ⓓ[p]ⓝW.V.T ⬈* X2.
+ â\88\80V,W,T,X2. â\9d¨G,Lâ\9d© ⊢ ⓐV.ⓛ[p]W.T ⬈* X2 →
+ â\88¨â\88¨ â\93\90V.â\93\9b[p]W.T ~ X2 | â\9d¨G,Lâ\9d© ⊢ ⓓ[p]ⓝW.V.T ⬈* X2.
#p #G #L #V #W #T #X2 #H elim (cpxs_inv_appl1 … H) -H *
[ #V0 #T0 #_ #_ #H destruct /2 width=1 by teqo_pair, or_introl/
| #b #W0 #T0 #HT0 #HU
qed-.
lemma cpxs_fwd_theta (p) (G) (L):
- â\88\80V1,V,T,X2. â\9dªG,Lâ\9d« ⊢ ⓐV1.ⓓ[p]V.T ⬈* X2 →
+ â\88\80V1,V,T,X2. â\9d¨G,Lâ\9d© ⊢ ⓐV1.ⓓ[p]V.T ⬈* X2 →
∀V2. ⇧[1] V1 ≘ V2 →
- â\88¨â\88¨ â\93\90V1.â\93\93[p]V.T ~ X2 | â\9dªG,Lâ\9d« ⊢ ⓓ[p]V.ⓐV2.T ⬈* X2.
+ â\88¨â\88¨ â\93\90V1.â\93\93[p]V.T ~ X2 | â\9d¨G,Lâ\9d© ⊢ ⓓ[p]V.ⓐV2.T ⬈* X2.
#p #G #L #V1 #V #T #X2 #H #V2 #HV12
elim (cpxs_inv_appl1 … H) -H *
[ -HV12 #V0 #T0 #_ #_ #H destruct /2 width=1 by teqo_pair, or_introl/
qed-.
lemma cpxs_fwd_cast (G) (L):
- â\88\80W,T,X2. â\9dªG,Lâ\9d« ⊢ ⓝW.T ⬈* X2 →
- â\88¨â\88¨ â\93\9dW. T ~ X2 | â\9dªG,Lâ\9d« â\8a¢ T â¬\88* X2 | â\9dªG,Lâ\9d« ⊢ W ⬈* X2.
+ â\88\80W,T,X2. â\9d¨G,Lâ\9d© ⊢ ⓝW.T ⬈* X2 →
+ â\88¨â\88¨ â\93\9dW. T ~ X2 | â\9d¨G,Lâ\9d© â\8a¢ T â¬\88* X2 | â\9d¨G,Lâ\9d© ⊢ W ⬈* X2.
#G #L #W #T #X2 #H
elim (cpxs_inv_cast1 … H) -H /2 width=1 by or3_intro1, or3_intro2/ *
#W0 #T0 #_ #_ #H destruct /2 width=1 by teqo_pair, or3_intro0/
qed-.
lemma cpxs_fwd_cnx (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ ⬈𝐍 T1 →
- â\88\80X2. â\9dªG,Lâ\9d« ⊢ T1 ⬈* X2 → T1 ~ X2.
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ ⬈𝐍 T1 →
+ â\88\80X2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈* X2 → T1 ~ X2.
/3 width=5 by cpxs_inv_cnx1, teqg_teqo/ qed-.
(* Vector form of forward lemmas with outer equivalence for terms ***********)
lemma cpxs_fwd_sort_vector (G) (L):
- â\88\80s,Vs,X2. â\9dªG,Lâ\9d« ⊢ ⒶVs.⋆s ⬈* X2 → ⒶVs.⋆s ~ X2.
+ â\88\80s,Vs,X2. â\9d¨G,Lâ\9d© ⊢ ⒶVs.⋆s ⬈* X2 → ⒶVs.⋆s ~ X2.
#G #L #s #Vs elim Vs -Vs /2 width=4 by cpxs_fwd_sort/
#V #Vs #IHVs #X2 #H
elim (cpxs_inv_appl1 … H) -H *
lemma cpxs_fwd_delta_drops_vector (I) (G) (L) (K):
∀V1,i. ⇩[i] L ≘ K.ⓑ[I]V1 →
∀V2. ⇧[↑i] V1 ≘ V2 →
- â\88\80Vs,X2. â\9dªG,Lâ\9d« ⊢ ⒶVs.#i ⬈* X2 →
- â\88¨â\88¨ â\92¶Vs.#i ~ X2 | â\9dªG,Lâ\9d« ⊢ ⒶVs.V2 ⬈* X2.
+ â\88\80Vs,X2. â\9d¨G,Lâ\9d© ⊢ ⒶVs.#i ⬈* X2 →
+ â\88¨â\88¨ â\92¶Vs.#i ~ X2 | â\9d¨G,Lâ\9d© ⊢ ⒶVs.V2 ⬈* X2.
#I #G #L #K #V1 #i #HLK #V2 #HV12 #Vs
elim Vs -Vs /2 width=5 by cpxs_fwd_delta_drops/
#V #Vs #IHVs #X2 #H -K -V1
(* Basic_1: was just: pr3_iso_appls_beta *)
lemma cpxs_fwd_beta_vector (p) (G) (L):
- â\88\80Vs,V,W,T,X2. â\9dªG,Lâ\9d« ⊢ ⒶVs.ⓐV.ⓛ[p]W.T ⬈* X2 →
- â\88¨â\88¨ â\92¶Vs.â\93\90V.â\93\9b[p]W. T ~ X2 | â\9dªG,Lâ\9d« ⊢ ⒶVs.ⓓ[p]ⓝW.V.T ⬈* X2.
+ â\88\80Vs,V,W,T,X2. â\9d¨G,Lâ\9d© ⊢ ⒶVs.ⓐV.ⓛ[p]W.T ⬈* X2 →
+ â\88¨â\88¨ â\92¶Vs.â\93\90V.â\93\9b[p]W. T ~ X2 | â\9d¨G,Lâ\9d© ⊢ ⒶVs.ⓓ[p]ⓝW.V.T ⬈* X2.
#p #G #L #Vs elim Vs -Vs /2 width=1 by cpxs_fwd_beta/
#V0 #Vs #IHVs #V #W #T #X2 #H
elim (cpxs_inv_appl1 … H) -H *
(* Basic_1: was just: pr3_iso_appls_abbr *)
lemma cpxs_fwd_theta_vector (G) (L):
∀V1b,V2b. ⇧[1] V1b ≘ V2b →
- â\88\80p,V,T,X2. â\9dªG,Lâ\9d« ⊢ ⒶV1b.ⓓ[p]V.T ⬈* X2 →
- â\88¨â\88¨ â\92¶V1b.â\93\93[p]V.T ~ X2 | â\9dªG,Lâ\9d« ⊢ ⓓ[p]V.ⒶV2b.T ⬈* X2.
+ â\88\80p,V,T,X2. â\9d¨G,Lâ\9d© ⊢ ⒶV1b.ⓓ[p]V.T ⬈* X2 →
+ â\88¨â\88¨ â\92¶V1b.â\93\93[p]V.T ~ X2 | â\9d¨G,Lâ\9d© ⊢ ⓓ[p]V.ⒶV2b.T ⬈* X2.
#G #L #V1b #V2b * -V1b -V2b /3 width=1 by or_intror/
#V1b #V2b #V1a #V2a #HV12a #HV12b #p
generalize in match HV12a; -HV12a
(* Basic_1: was just: pr3_iso_appls_cast *)
lemma cpxs_fwd_cast_vector (G) (L):
- â\88\80Vs,W,T,X2. â\9dªG,Lâ\9d« ⊢ ⒶVs.ⓝW.T ⬈* X2 →
+ â\88\80Vs,W,T,X2. â\9d¨G,Lâ\9d© ⊢ ⒶVs.ⓝW.T ⬈* X2 →
∨∨ ⒶVs. ⓝW. T ~ X2
- | â\9dªG,Lâ\9d« ⊢ ⒶVs.T ⬈* X2
- | â\9dªG,Lâ\9d« ⊢ ⒶVs.W ⬈* X2.
+ | â\9d¨G,Lâ\9d© ⊢ ⒶVs.T ⬈* X2
+ | â\9d¨G,Lâ\9d© ⊢ ⒶVs.W ⬈* X2.
#G #L #Vs elim Vs -Vs /2 width=1 by cpxs_fwd_cast/
#V #Vs #IHVs #W #T #X2 #H
elim (cpxs_inv_appl1 … H) -H *
(* Basic_1: was just: nf2_iso_appls_lref *)
lemma cpxs_fwd_cnx_vector (G) (L):
- â\88\80T. ð\9d\90\92â\9dªTâ\9d« â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈𝐍 T →
- â\88\80Vs,X2. â\9dªG,Lâ\9d« ⊢ ⒶVs.T ⬈* X2 → ⒶVs.T ~ X2.
+ â\88\80T. ð\9d\90\92â\9d¨Tâ\9d© â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈𝐍 T →
+ â\88\80Vs,X2. â\9d¨G,Lâ\9d© ⊢ ⒶVs.T ⬈* X2 → ⒶVs.T ~ X2.
#G #L #T #H1T #H2T #Vs elim Vs -Vs [ @(cpxs_fwd_cnx … H2T) ] (**) (* /2 width=3 by cpxs_fwd_cnx/ does not work *)
#V #Vs #IHVs #X2 #H
elim (cpxs_inv_appl1 … H) -H *
(* Basic eliminators ********************************************************)
lemma csx_ind (G) (L) (Q:predicate …):
- (â\88\80T1. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T1 →
- (â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈ T2 → (T1 ≅ T2 → ⊥) → Q T2) →
+ (â\88\80T1. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T1 →
+ (â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈ T2 → (T1 ≅ T2 → ⊥) → Q T2) →
Q T1
) →
- â\88\80T. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T → Q T.
+ â\88\80T. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T → Q T.
#G #L #Q #H0 #T1 #H elim H -T1
/5 width=1 by SN_intro/
qed-.
(* Basic_1: was just: sn3_pr2_intro *)
lemma csx_intro (G) (L):
- â\88\80T1. (â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88 T2 â\86\92 (T1 â\89\85 T2 â\86\92 â\8a¥) â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T2) →
- â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T1.
+ â\88\80T1. (â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88 T2 â\86\92 (T1 â\89\85 T2 â\86\92 â\8a¥) â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T2) →
+ â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T1.
/4 width=1 by SN_intro/ qed.
(* Basic forward lemmas *****************************************************)
fact csx_fwd_pair_sn_aux (G) (L):
- â\88\80U. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 U →
- â\88\80I,V,T. U = â\91¡[I]V.T â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 V.
+ â\88\80U. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 U →
+ â\88\80I,V,T. U = â\91¡[I]V.T â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 V.
#G #L #U #H elim H -H #U0 #_ #IH #I #V #T #H destruct
@csx_intro #V2 #HLV2 #HV2
@(IH (②[I]V2.T)) -IH /2 width=3 by cpx_pair_sn/ -HLV2 #H
(* Basic_1: was just: sn3_gen_head *)
lemma csx_fwd_pair_sn (G) (L):
- â\88\80I,V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 â\91¡[I]V.T â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 V.
+ â\88\80I,V,T. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 â\91¡[I]V.T â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 V.
/2 width=5 by csx_fwd_pair_sn_aux/ qed-.
fact csx_fwd_bind_dx_aux (G) (L):
- â\88\80U. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 U →
- â\88\80p,I,V,T. U = â\93\91[p,I]V.T â\86\92 â\9dªG,L.â\93\91[I]Vâ\9d« ⊢ ⬈*𝐒 T.
+ â\88\80U. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 U →
+ â\88\80p,I,V,T. U = â\93\91[p,I]V.T â\86\92 â\9d¨G,L.â\93\91[I]Vâ\9d© ⊢ ⬈*𝐒 T.
#G #L #U #H elim H -H #U0 #_ #IH #p #I #V #T #H destruct
@csx_intro #T2 #HLT2 #HT2
@(IH (ⓑ[p, I]V.T2)) -IH /2 width=3 by cpx_bind/ -HLT2 #H
(* Basic_1: was just: sn3_gen_bind *)
lemma csx_fwd_bind_dx (G) (L):
- â\88\80p,I,V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 â\93\91[p,I]V.T â\86\92 â\9dªG,L.â\93\91[I]Vâ\9d« ⊢ ⬈*𝐒 T.
+ â\88\80p,I,V,T. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 â\93\91[p,I]V.T â\86\92 â\9d¨G,L.â\93\91[I]Vâ\9d© ⊢ ⬈*𝐒 T.
/2 width=4 by csx_fwd_bind_dx_aux/ qed-.
fact csx_fwd_flat_dx_aux (G) (L):
- â\88\80U. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 U →
- â\88\80I,V,T. U = â\93\95[I]V.T â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T.
+ â\88\80U. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 U →
+ â\88\80I,V,T. U = â\93\95[I]V.T â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T.
#G #L #U #H elim H -H #U0 #_ #IH #I #V #T #H destruct
@csx_intro #T2 #HLT2 #HT2
@(IH (ⓕ[I]V.T2)) -IH /2 width=3 by cpx_flat/ -HLT2 #H
(* Basic_1: was just: sn3_gen_flat *)
lemma csx_fwd_flat_dx (G) (L):
- â\88\80I,V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 â\93\95[I]V.T â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T.
+ â\88\80I,V,T. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 â\93\95[I]V.T â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T.
/2 width=5 by csx_fwd_flat_dx_aux/ qed-.
lemma csx_fwd_bind (G) (L):
- â\88\80p,I,V,T. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⓑ[p,I]V.T →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 V & â\9dªG,L.â\93\91[I]Vâ\9d« ⊢ ⬈*𝐒 T.
+ â\88\80p,I,V,T. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⓑ[p,I]V.T →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 V & â\9d¨G,L.â\93\91[I]Vâ\9d© ⊢ ⬈*𝐒 T.
/3 width=3 by csx_fwd_pair_sn, csx_fwd_bind_dx, conj/ qed-.
lemma csx_fwd_flat (G) (L):
- â\88\80I,V,T. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⓕ[I]V.T →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 V & â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T.
+ â\88\80I,V,T. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⓕ[I]V.T →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 V & â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T.
/3 width=3 by csx_fwd_pair_sn, csx_fwd_flat_dx, conj/ qed-.
(* Basic_1: removed theorems 14:
(* Main properties with atomic arity assignment *****************************)
theorem aaa_csx (G) (L):
- â\88\80T,A. â\9dªG,Lâ\9d« â\8a¢ T â\81\9d A â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T.
+ â\88\80T,A. â\9d¨G,Lâ\9d© â\8a¢ T â\81\9d A â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T.
#G #L #T #A #H
@(gcr_aaa … csx_gcp csx_gcr … H)
qed.
fact aaa_ind_csx_aux (G) (L):
∀A. ∀Q:predicate ….
- (â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ⁝ A →
- (â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈ T2 → (T1 ≅ T2 → ⊥) → Q T2) → Q T1
+ (â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T1 ⁝ A →
+ (â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈ T2 → (T1 ≅ T2 → ⊥) → Q T2) → Q T1
) →
- â\88\80T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9dªG,Lâ\9d« ⊢ T ⁝ A → Q T.
+ â\88\80T. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9d¨G,Lâ\9d© ⊢ T ⁝ A → Q T.
#G #L #A #Q #IH #T #H @(csx_ind … H) -T /4 width=5 by cpx_aaa_conf/
qed-.
lemma aaa_ind_csx (G) (L):
∀A. ∀Q:predicate ….
- (â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ⁝ A →
- (â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈ T2 → (T1 ≅ T2 → ⊥) → Q T2) → Q T1
+ (â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T1 ⁝ A →
+ (â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈ T2 → (T1 ≅ T2 → ⊥) → Q T2) → Q T1
) →
- â\88\80T. â\9dªG,Lâ\9d« ⊢ T ⁝ A → Q T.
+ â\88\80T. â\9d¨G,Lâ\9d© ⊢ T ⁝ A → Q T.
/5 width=9 by aaa_ind_csx_aux, aaa_csx/ qed-.
fact aaa_ind_csx_cpxs_aux (G) (L):
∀A. ∀Q:predicate ….
- (â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ⁝ A →
- (â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2 → (T1 ≅ T2 → ⊥) → Q T2) → Q T1
+ (â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T1 ⁝ A →
+ (â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2 → (T1 ≅ T2 → ⊥) → Q T2) → Q T1
) →
- â\88\80T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9dªG,Lâ\9d« ⊢ T ⁝ A → Q T.
+ â\88\80T. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9d¨G,Lâ\9d© ⊢ T ⁝ A → Q T.
#G #L #A #Q #IH #T #H @(csx_ind_cpxs … H) -T /4 width=5 by cpxs_aaa_conf/
qed-.
(* Basic_2A1: was: aaa_ind_csx_alt *)
lemma aaa_ind_csx_cpxs (G) (L):
∀A. ∀Q:predicate ….
- (â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ⁝ A →
- (â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2 → (T1 ≅ T2 → ⊥) → Q T2) → Q T1
+ (â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T1 ⁝ A →
+ (â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2 → (T1 ≅ T2 → ⊥) → Q T2) → Q T1
) →
- â\88\80T. â\9dªG,Lâ\9d« ⊢ T ⁝ A → Q T.
+ â\88\80T. â\9d¨G,Lâ\9d© ⊢ T ⁝ A → Q T.
/5 width=9 by aaa_ind_csx_cpxs_aux, aaa_csx/ qed-.
(* Basic_1: was just: sn3_nf2 *)
lemma cnx_csx (G) (L):
- â\88\80T. â\9dªG,Lâ\9d« â\8a¢ â¬\88ð\9d\90\8d T â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T.
+ â\88\80T. â\9d¨G,Lâ\9d© â\8a¢ â¬\88ð\9d\90\8d T â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T.
/2 width=1 by NF_to_SN/ qed.
(* Advanced properties ******************************************************)
lemma csx_sort (G) (L):
- â\88\80s. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⋆s.
+ â\88\80s. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⋆s.
/3 width=4 by cnx_csx, cnx_sort/ qed.
(* Basic_1: was just: sn3_appls_lref *)
lemma csx_applv_cnx (G) (L):
- â\88\80T. ð\9d\90\92â\9dªTâ\9d« â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈𝐍 T →
- â\88\80Vs. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 Vs â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⒶVs.T.
+ â\88\80T. ð\9d\90\92â\9d¨Tâ\9d© â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈𝐍 T →
+ â\88\80Vs. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 Vs â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⒶVs.T.
#G #L #T #H1T #H2T #Vs elim Vs -Vs
[ #_ normalize in ⊢ (???%); /2 width=1 by cnx_csx/
| #V #Vs #IHV #H
(* Note: strong normalization does not depend on this any more *)
lemma csx_applv_sort (G) (L):
- â\88\80s,Vs. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 Vs â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⒶVs.⋆s.
+ â\88\80s,Vs. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 Vs â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⒶVs.⋆s.
/3 width=6 by csx_applv_cnx, cnx_sort, simple_atom/ qed.
(* Basic_1: was just: sn3_intro *)
lemma csx_intro_cpxs (G) (L):
- â\88\80T1. (â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88* T2 â\86\92 (T1 â\89\85 T2 â\86\92 â\8a¥) â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T2) →
- â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T1.
+ â\88\80T1. (â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88* T2 â\86\92 (T1 â\89\85 T2 â\86\92 â\8a¥) â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T2) →
+ â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T1.
/4 width=1 by cpx_cpxs, csx_intro/ qed-.
(* Basic_1: was just: sn3_pr3_trans *)
lemma csx_cpxs_trans (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T1 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88* T2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T2.
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T1 →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88* T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T2.
#G #L #T1 #HT1 #T2 #H @(cpxs_ind … H) -T2
/2 width=3 by csx_cpx_trans/
qed-.
fact csx_ind_cpxs_aux (G) (L):
∀Q:predicate term.
- (â\88\80T1. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T1 →
- (â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2 → (T1 ≅ T2 → ⊥) → Q T2) → Q T1
+ (â\88\80T1. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T1 →
+ (â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2 → (T1 ≅ T2 → ⊥) → Q T2) → Q T1
) →
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T1 →
- â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2 → Q T2.
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T1 →
+ â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2 → Q T2.
#G #L #Q #IH #T1 #H @(csx_ind … H) -T1
#T1 #HT1 #IH1 #T2 #HT12
@IH -IH /2 width=3 by csx_cpxs_trans/ -HT1 #V2 #HTV2 #HnTV2
(* Basic_2A1: was: csx_ind_alt *)
lemma csx_ind_cpxs (G) (L) (Q:predicate …):
- (â\88\80T1. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T1 →
- (â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2 → (T1 ≅ T2 → ⊥) → Q T2) → Q T1
+ (â\88\80T1. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T1 →
+ (â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2 → (T1 ≅ T2 → ⊥) → Q T2) → Q T1
) →
- â\88\80T. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T → Q T.
+ â\88\80T. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T → Q T.
#G #L #Q #IH #T #HT
@(csx_ind_cpxs_aux … IH … HT) -IH -HT // (**) (* full auto fails *)
qed-.
lemma csx_teqg_trans (S) (G) (L):
reflexive … S → symmetric … S →
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T1 →
- â\88\80T2. T1 â\89\9b[S] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T2.
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T1 →
+ â\88\80T2. T1 â\89\9b[S] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T2.
#S #G #L #H1S #H2S #T1 #H @(csx_ind … H) -T1 #T #_ #IH #T2 #HT2
@csx_intro #T1 #HT21 #HnT21
lapply (teqg_cpx_trans … HT2 … HT21) // -HT21 #HT1
qed-.
lemma csx_cpx_trans (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T1 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88 T2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T2.
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T1 →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88 T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T2.
#G #L #T1 #H @(csx_ind … H) -T1 #T1 #HT1 #IHT1 #T2 #HLT12
elim (teqx_dec T1 T2) /3 width=6 by csx_teqg_trans/
qed-.
(* Basic_1: was just: sn3_cast *)
lemma csx_cast (G) (L):
- â\88\80W. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 W →
- â\88\80T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⓝW.T.
+ â\88\80W. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 W →
+ â\88\80T. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⓝW.T.
#G #L #W #HW @(csx_ind … HW) -W
#W #HW #IHW #T #HT @(csx_ind … HT) -T
#T #HT #IHT @csx_intro
(* Basic_2A1: was: csx_lref_bind *)
lemma csx_lref_pair_drops (G) (L):
∀I,K,V,i. ⇩[i] L ≘ K.ⓑ[I]V →
- â\9dªG,Kâ\9d« â\8a¢ â¬\88*ð\9d\90\92 V â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 #i.
+ â\9d¨G,Kâ\9d© â\8a¢ â¬\88*ð\9d\90\92 V â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 #i.
#G #L #I #K #V #i #HLK #HV
@csx_intro #X #H #Hi elim (cpx_inv_lref1_drops … H) -H
[ #H destruct elim Hi //
(* Basic_2A1: was: csx_inv_lref_bind *)
lemma csx_inv_lref_pair_drops (G) (L):
∀I,K,V,i. ⇩[i] L ≘ K.ⓑ[I]V →
- â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 #i â\86\92 â\9dªG,Kâ\9d« ⊢ ⬈*𝐒 V.
+ â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 #i â\86\92 â\9d¨G,Kâ\9d© ⊢ ⬈*𝐒 V.
#G #L #I #K #V #i #HLK #Hi
elim (lifts_total V (𝐔❨↑i❩))
/4 width=9 by csx_inv_lifts, csx_cpx_trans, cpx_delta_drops, drops_isuni_fwd_drop2/
qed-.
lemma csx_inv_lref_drops (G) (L):
- â\88\80i. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 #i →
+ â\88\80i. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 #i →
∨∨ ⇩*[Ⓕ,𝐔❨i❩] L ≘ ⋆
| ∃∃I,K. ⇩[i] L ≘ K.ⓤ[I]
- | â\88\83â\88\83I,K,V. â\87©[i] L â\89\98 K.â\93\91[I]V & â\9dªG,Kâ\9d« ⊢ ⬈*𝐒 V.
+ | â\88\83â\88\83I,K,V. â\87©[i] L â\89\98 K.â\93\91[I]V & â\9d¨G,Kâ\9d© ⊢ ⬈*𝐒 V.
#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-.
(* Basic_1: was just: sn3_appls_beta *)
lemma csx_applv_beta (G) (L):
- â\88\80p,Vs,V,W,T. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⒶVs.ⓓ[p]ⓝW.V.T →
- â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⒶVs.ⓐV.ⓛ[p]W.T.
+ â\88\80p,Vs,V,W,T. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⒶVs.ⓓ[p]ⓝW.V.T →
+ â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⒶVs.ⓐV.ⓛ[p]W.T.
#G #L #p #Vs elim Vs -Vs /2 width=1 by csx_appl_beta/
#V0 #Vs #IHV #V #W #T #H1T
lapply (csx_fwd_pair_sn … H1T) #HV0
lemma csx_applv_delta_drops (G) (L):
∀I,K,V1,i. ⇩[i] L ≘ K.ⓑ[I]V1 →
∀V2. ⇧[↑i] V1 ≘ V2 →
- â\88\80Vs. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 â\92¶Vs.V2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⒶVs.#i.
+ â\88\80Vs. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 â\92¶Vs.V2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⒶVs.#i.
#G #L #I #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/
| #V #Vs #IHV #H1T
(* Basic_1: was just: sn3_appls_abbr *)
lemma csx_applv_theta (G) (L):
∀p,V1b,V2b. ⇧[1] V1b ≘ V2b →
- â\88\80V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 â\93\93[p]V.â\92¶V2b.T â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⒶV1b.ⓓ[p]V.T.
+ â\88\80V,T. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 â\93\93[p]V.â\92¶V2b.T â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⒶV1b.ⓓ[p]V.T.
#G #L #p #V1b #V2b * -V1b -V2b /2 width=1 by/
#V1b #V2b #V1 #V2 #HV12 #H
generalize in match HV12; -HV12 generalize in match V2; -V2 generalize in match V1; -V1
(* Basic_1: was just: sn3_appls_cast *)
lemma csx_applv_cast (G) (L):
- â\88\80Vs,U. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⒶVs.U →
- â\88\80T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 â\92¶Vs.T â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⒶVs.ⓝU.T.
+ â\88\80Vs,U. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⒶVs.U →
+ â\88\80T. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 â\92¶Vs.T â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⒶVs.ⓝU.T.
#G #L #Vs elim Vs -Vs /2 width=1 by csx_cast/
#V #Vs #IHV #U #H1U #T #H1T
lapply (csx_fwd_pair_sn … H1U) #HV
lemma csx_feqg_conf (S):
reflexive … S → symmetric … S →
- â\88\80G1,L1,T1. â\9dªG1,L1â\9d« ⊢ ⬈*𝐒 T1 →
- â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG2,L2â\9d« ⊢ ⬈*𝐒 T2.
+ â\88\80G1,L1,T1. â\9d¨G1,L1â\9d© ⊢ ⬈*𝐒 T1 →
+ â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G2,L2â\9d© ⊢ ⬈*𝐒 T2.
#S #H1S #H2S #G1 #L1 #T1 #HT1 #G2 #L2 #T2 * -G2 -L2 -T2
/3 width=6 by csx_reqg_conf, csx_teqg_trans/
qed-.
(* Basic_2A1: was: csx_fpb_conf *)
lemma csx_fpb_conf:
- â\88\80G1,L1,T1. â\9dªG1,L1â\9d« ⊢ ⬈*𝐒 T1 →
- â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG2,L2â\9d« ⊢ ⬈*𝐒 T2.
+ â\88\80G1,L1,T1. â\9d¨G1,L1â\9d© ⊢ ⬈*𝐒 T1 →
+ â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G2,L2â\9d© ⊢ ⬈*𝐒 T2.
#G1 #L1 #T1 #HT1 #G2 #L2 #T2 #H
elim (fpb_inv_req … H) -H #L0 #L #T #H1 #HT2 #HL0 #HL02
lapply (cpx_reqg_conf … HL0 … HT2) -HT2 // #HT2
(* Properties with extended supclosure **************************************)
lemma csx_fqu_conf (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1â\9d« â\8a¢ â¬\88*ð\9d\90\92 T1 â\86\92 â\9dªG2,L2â\9d« ⊢ ⬈*𝐒 T2.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1â\9d© â\8a¢ â¬\88*ð\9d\90\92 T1 â\86\92 â\9d¨G2,L2â\9d© ⊢ ⬈*𝐒 T2.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ /3 width=5 by csx_inv_lref_pair_drops, drops_refl/
| /2 width=3 by csx_fwd_pair_sn/
qed-.
lemma csx_fquq_conf (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1â\9d« â\8a¢ â¬\88*ð\9d\90\92 T1 â\86\92 â\9dªG2,L2â\9d« ⊢ ⬈*𝐒 T2.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1â\9d© â\8a¢ â¬\88*ð\9d\90\92 T1 â\86\92 â\9d¨G2,L2â\9d© ⊢ ⬈*𝐒 T2.
#b #G1 #G2 #L1 #L2 #T1 #T2 * /2 width=6 by csx_fqu_conf/
* #HG #HL #HT destruct //
qed-.
lemma csx_fqup_conf (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1â\9d« â\8a¢ â¬\88*ð\9d\90\92 T1 â\86\92 â\9dªG2,L2â\9d« ⊢ ⬈*𝐒 T2.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1â\9d© â\8a¢ â¬\88*ð\9d\90\92 T1 â\86\92 â\9d¨G2,L2â\9d© ⊢ ⬈*𝐒 T2.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
/3 width=6 by csx_fqu_conf/
qed-.
lemma csx_fqus_conf (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1â\9d« â\8a¢ â¬\88*ð\9d\90\92 T1 â\86\92 â\9dªG2,L2â\9d« ⊢ ⬈*𝐒 T2.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1â\9d© â\8a¢ â¬\88*ð\9d\90\92 T1 â\86\92 â\9d¨G2,L2â\9d© ⊢ ⬈*𝐒 T2.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -H
/3 width=6 by csx_fquq_conf/
qed-.
(* Properties with extended parallel rt-transition on all entries ***********)
lemma csx_lpx_conf (G) (L1):
- â\88\80T. â\9dªG,L1â\9d« ⊢ ⬈*𝐒 T →
- â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â¬\88 L2 â\86\92 â\9dªG,L2â\9d« ⊢ ⬈*𝐒 T.
+ â\88\80T. â\9d¨G,L1â\9d© ⊢ ⬈*𝐒 T →
+ â\88\80L2. â\9d¨G,L1â\9d© â\8a¢ â¬\88 L2 â\86\92 â\9d¨G,L2â\9d© ⊢ ⬈*𝐒 T.
#G #L1 #T #H @(csx_ind_cpxs … H) -T
/4 width=3 by csx_intro, lpx_cpx_trans/
qed-.
(* Advanced properties ******************************************************)
lemma csx_abst (G) (L):
- â\88\80p,W. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 W →
- â\88\80T. â\9dªG,L.â\93\9bWâ\9d« â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⓛ[p]W.T.
+ â\88\80p,W. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 W →
+ â\88\80T. â\9d¨G,L.â\93\9bWâ\9d© â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⓛ[p]W.T.
#G #L #p #W #HW
@(csx_ind … HW) -W #W #_ #IHW #T #HT
@(csx_ind … HT) -T #T #HT #IHT
qed.
lemma csx_abbr (G) (L):
- â\88\80p,V. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 V →
- â\88\80T. â\9dªG,L.â\93\93Vâ\9d« â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⓓ[p]V.T.
+ â\88\80p,V. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 V →
+ â\88\80T. â\9d¨G,L.â\93\93Vâ\9d© â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⓓ[p]V.T.
#G #L #p #V #HV
@(csx_ind … HV) -V #V #_ #IHV #T #HT
@(csx_ind_cpxs … HT) -T #T #HT #IHT
qed.
lemma csx_bind (G) (L):
- â\88\80p,I,V. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 V →
- â\88\80T. â\9dªG,L.â\93\91[I]Vâ\9d« â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⓑ[p,I]V.T.
+ â\88\80p,I,V. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 V →
+ â\88\80T. â\9d¨G,L.â\93\91[I]Vâ\9d© â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⓑ[p,I]V.T.
#G #L #p * #V #HV #T #HT
/2 width=1 by csx_abbr, csx_abst/
qed.
fact csx_appl_theta_aux (G) (L):
- â\88\80p,U. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 U → ∀V1,V2. ⇧[1] V1 ≘ V2 →
- â\88\80V,T. U = â\93\93[p]V.â\93\90V2.T â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⓐV1.ⓓ[p]V.T.
+ â\88\80p,U. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 U → ∀V1,V2. ⇧[1] V1 ≘ V2 →
+ â\88\80V,T. U = â\93\93[p]V.â\93\90V2.T â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⓐV1.ⓓ[p]V.T.
#G #L #p #X #H
@(csx_ind_cpxs … H) -X #X #HVT #IHVT #V1 #V2 #HV12 #V #T #H destruct
lapply (csx_fwd_pair_sn … HVT) #HV
qed-.
lemma csx_appl_theta (G) (L):
- â\88\80p,V,V2,T. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⓓ[p]V.ⓐV2.T →
- â\88\80V1. â\87§[1] V1 â\89\98 V2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⓐV1.ⓓ[p]V.T.
+ â\88\80p,V,V2,T. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⓓ[p]V.ⓐV2.T →
+ â\88\80V1. â\87§[1] V1 â\89\98 V2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⓐV1.ⓓ[p]V.T.
/2 width=5 by csx_appl_theta_aux/ qed.
(* Properties with extended parallel rt-computation on all entries **********)
lemma csx_lpxs_conf (G) (L1):
- â\88\80L2,T. â\9dªG,L1â\9d« â\8a¢ â¬\88* L2 â\86\92 â\9dªG,L1â\9d« â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9dªG,L2â\9d« ⊢ ⬈*𝐒 T.
+ â\88\80L2,T. â\9d¨G,L1â\9d© â\8a¢ â¬\88* L2 â\86\92 â\9d¨G,L1â\9d© â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9d¨G,L2â\9d© ⊢ ⬈*𝐒 T.
#G #L1 #L2 #T #H @(lpxs_ind_dx … H) -L2
/3 by lpxs_step_dx, csx_lpx_conf/
qed-.
(* Advanced properties ******************************************************)
fact csx_appl_beta_aux (G) (L):
- â\88\80p,U1. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 U1 →
- â\88\80V,W,T1. U1 = â\93\93[p]â\93\9dW.V.T1 â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⓐV.ⓛ[p]W.T1.
+ â\88\80p,U1. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 U1 →
+ â\88\80V,W,T1. U1 = â\93\93[p]â\93\9dW.V.T1 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⓐV.ⓛ[p]W.T1.
#G #L #p #X #H @(csx_ind … H) -X
#X #HT1 #IHT1 #V #W #T1 #H1 destruct
@csx_intro #X #H1 #H2
(* Basic_1: was just: sn3_beta *)
lemma csx_appl_beta (G) (L):
- â\88\80p,V,W,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 â\93\93[p]â\93\9dW.V.T â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⓐV.ⓛ[p]W.T.
+ â\88\80p,V,W,T. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 â\93\93[p]â\93\9dW.V.T â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⓐV.ⓛ[p]W.T.
/2 width=3 by csx_appl_beta_aux/ qed.
(* Advanced forward lemmas **************************************************)
fact csx_fwd_bind_dx_unit_aux (G) (L):
- â\88\80U. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 U →
- â\88\80p,I,J,V,T. U = â\93\91[p,I]V.T â\86\92 â\9dªG,L.â\93¤[J]â\9d« ⊢ ⬈*𝐒 T.
+ â\88\80U. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 U →
+ â\88\80p,I,J,V,T. U = â\93\91[p,I]V.T â\86\92 â\9d¨G,L.â\93¤[J]â\9d© ⊢ ⬈*𝐒 T.
#G #L #U #H elim H -H #U0 #_ #IH #p #I #J #V #T #H destruct
@csx_intro #T2 #HLT2 #HT2
@(IH (ⓑ[p, I]V.T2)) -IH /2 width=4 by cpx_bind_unit/ -HLT2 #H
qed-.
lemma csx_fwd_bind_dx_unit (G) (L):
- â\88\80p,I,V,T. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⓑ[p,I]V.T →
- â\88\80J. â\9dªG,L.â\93¤[J]â\9d« ⊢ ⬈*𝐒 T.
+ â\88\80p,I,V,T. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⓑ[p,I]V.T →
+ â\88\80J. â\9d¨G,L.â\93¤[J]â\9d© ⊢ ⬈*𝐒 T.
/2 width=6 by csx_fwd_bind_dx_unit_aux/ qed-.
lemma csx_fwd_bind_unit (G) (L):
- â\88\80p,I,V,T. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⓑ[p,I]V.T →
- â\88\80J. â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 V & â\9dªG,L.â\93¤[J]â\9d« ⊢ ⬈*𝐒 T.
+ â\88\80p,I,V,T. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⓑ[p,I]V.T →
+ â\88\80J. â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 V & â\9d¨G,L.â\93¤[J]â\9d© ⊢ ⬈*𝐒 T.
/3 width=4 by csx_fwd_pair_sn, csx_fwd_bind_dx_unit, conj/ qed-.
(* Properties with restricted refinement for local environments *************)
lemma csx_lsubr_conf (G) (L1):
- â\88\80T. â\9dªG,L1â\9d« â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\88\80L2. L1 â«\83 L2 â\86\92 â\9dªG,L2â\9d« ⊢ ⬈*𝐒 T.
+ â\88\80T. â\9d¨G,L1â\9d© â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\88\80L2. L1 â«\83 L2 â\86\92 â\9d¨G,L2â\9d© ⊢ ⬈*𝐒 T.
#G #L1 #T #H
@(csx_ind … H) -T #T1 #_ #IH #L2 #HL12
@csx_intro #T2 #HT12 #HnT12
(* Basic_2A1: uses: csx_lleq_conf *)
lemma csx_reqg_conf (S) (G) (T):
reflexive … S → symmetric … S →
- â\88\80L1. â\9dªG,L1â\9d« ⊢ ⬈*𝐒 T →
- â\88\80L2. L1 â\89\9b[S,T] L2 â\86\92 â\9dªG,L2â\9d« ⊢ ⬈*𝐒 T.
+ â\88\80L1. â\9d¨G,L1â\9d© ⊢ ⬈*𝐒 T →
+ â\88\80L2. L1 â\89\9b[S,T] L2 â\86\92 â\9d¨G,L2â\9d© ⊢ ⬈*𝐒 T.
#S #G #T #H1S #H2S #L1 #H
@(csx_ind … H) -T #T1 #_ #IH #L2 #HL12
@csx_intro #T2 #HT12 #HnT12
(* Basic_2A1: uses: csx_lleq_trans *)
lemma csx_reqg_trans (S) (G) (T):
reflexive … S → symmetric … S →
- â\88\80L1,L2. L1 â\89\9b[S,T] L2 â\86\92 â\9dªG,L2â\9d« â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9dªG,L1â\9d« ⊢ ⬈*𝐒 T.
+ â\88\80L1,L2. L1 â\89\9b[S,T] L2 â\86\92 â\9d¨G,L2â\9d© â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈*𝐒 T.
/3 width=8 by csx_reqg_conf, reqg_sym/ qed-.
(* Properties with simple terms *********************************************)
lemma csx_appl_simple (G) (L):
- â\88\80V. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 V → ∀T1.
- (â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88 T2 â\86\92 (T1 â\89\85 T2 â\86\92 â\8a¥) â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⓐV.T2) →
- ð\9d\90\92â\9dªT1â\9d« â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⓐV.T1.
+ â\88\80V. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 V → ∀T1.
+ (â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88 T2 â\86\92 (T1 â\89\85 T2 â\86\92 â\8a¥) â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⓐV.T2) →
+ ð\9d\90\92â\9d¨T1â\9d© â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⓐV.T1.
#G #L #V #H @(csx_ind … H) -V
#V #_ #IHV #T1 #IHT1 #HT1
@csx_intro #X #H1 #H2
(* Basic_1: was just: sn3_appl_appl *)
(* Basic_2A1: was: csx_appl_simple_tsts *)
lemma csx_appl_simple_teqo (G) (L):
- â\88\80V. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 V â\86\92 â\88\80T1. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T1 →
- (â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88* T2 â\86\92 (T1 ~ T2 â\86\92 â\8a¥) â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⓐV.T2) →
- ð\9d\90\92â\9dªT1â\9d« â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⓐV.T1.
+ â\88\80V. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 V â\86\92 â\88\80T1. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T1 →
+ (â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88* T2 â\86\92 (T1 ~ T2 â\86\92 â\8a¥) â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⓐV.T2) →
+ ð\9d\90\92â\9d¨T1â\9d© â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⓐV.T1.
#G #L #V #H @(csx_ind … H) -V
#V #_ #IHV #T1 #H @(csx_ind … H) -T1
#T1 #H1T1 #IHT1 #H2T1 #H3T1
(* Basic inversion lemmas ***************************************************)
lemma csxv_inv_cons (G) (L):
- â\88\80T,Ts. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T⨮Ts →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 T & â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 Ts.
+ â\88\80T,Ts. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T⨮Ts →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 T & â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 Ts.
normalize // qed-.
(* Basic forward lemmas *****************************************************)
lemma csx_fwd_applv (G) (L):
- â\88\80T,Vs. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 ⒶVs.T →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 Vs & â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T.
+ â\88\80T,Vs. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 ⒶVs.T →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 Vs & â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T.
#G #L #T #Vs elim Vs -Vs /2 width=1 by conj/
#V #Vs #IHVs #HVs
lapply (csx_fwd_pair_sn … HVs) #HV
definition fpbg: tri_relation genv lenv term ≝
λG1,L1,T1,G2,L2,T2.
- â\88\83â\88\83G3,L3,T3,G4,L4,T4. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG3,L3,T3â\9d« & â\9dªG3,L3,T3â\9d« â\89» â\9dªG4,L4,T4â\9d« & â\9dªG4,L4,T4â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\83â\88\83G3,L3,T3,G4,L4,T4. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G3,L3,T3â\9d© & â\9d¨G3,L3,T3â\9d© â\89» â\9d¨G4,L4,T4â\9d© & â\9d¨G4,L4,T4â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
interpretation
"proper parallel rst-computation (closure)"
(* Basic inversion lemmas ***************************************************)
lemma fpbg_inv_gen (G1) (G2) (L1) (L2) (T1) (T2):
- â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d« →
- â\88\83â\88\83G3,L3,T3,G4,L4,T4. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG3,L3,T3â\9d« & â\9dªG3,L3,T3â\9d« â\89» â\9dªG4,L4,T4â\9d« & â\9dªG4,L4,T4â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d© →
+ â\88\83â\88\83G3,L3,T3,G4,L4,T4. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G3,L3,T3â\9d© & â\9d¨G3,L3,T3â\9d© â\89» â\9d¨G4,L4,T4â\9d© & â\9d¨G4,L4,T4â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
// qed-.
(* Basic properties *********************************************************)
lemma fpbg_intro (G3) (G4) (L3) (L4) (T3) (T4):
∀G1,L1,T1,G2,L2,T2.
- â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG3,L3,T3â\9d« â\86\92 â\9dªG3,L3,T3â\9d« â\89» â\9dªG4,L4,T4â\9d« →
- â\9dªG4,L4,T4â\9d« â\89¥ â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d«.
+ â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G3,L3,T3â\9d© â\86\92 â\9d¨G3,L3,T3â\9d© â\89» â\9d¨G4,L4,T4â\9d© →
+ â\9d¨G4,L4,T4â\9d© â\89¥ â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d©.
/2 width=9 by ex3_6_intro/ qed.
(* Basic_2A1: was: fpbg_fpbq_trans *)
lemma fpbg_fpb_trans:
∀G1,G,G2,L1,L,L2,T1,T,T2.
- â\9dªG1,L1,T1â\9d« > â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« â\89½ â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d«.
+ â\9d¨G1,L1,T1â\9d© > â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G,L,Tâ\9d© â\89½ â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d©.
#G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2
elim (fpbg_inv_gen … H1) -H1
/3 width=13 by fpbs_strap1, fpbg_intro/
(* Basic_2A1: was: fpbq_fpbg_trans *)
lemma fpb_fpbg_trans:
∀G1,G,G2,L1,L,L2,T1,T,T2.
- â\9dªG1,L1,T1â\9d« â\89½ â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« > â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d«.
+ â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G,L,Tâ\9d© > â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d©.
#G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2
elim (fpbg_inv_gen … H2) -H2
/3 width=13 by fpbs_strap2, fpbg_intro/
(* Properties with t-bound rt-transition for terms **************************)
lemma cpm_tneqx_cpm_fpbg (h) (G) (L):
- â\88\80n1,T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n1] T → (T1 ≅ T → ⊥) →
- â\88\80n2,T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[h,n2] T2 â\86\92 â\9dªG,L,T1â\9d« > â\9dªG,L,T2â\9d«.
+ â\88\80n1,T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n1] T → (T1 ≅ T → ⊥) →
+ â\88\80n2,T2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡[h,n2] T2 â\86\92 â\9d¨G,L,T1â\9d© > â\9d¨G,L,T2â\9d©.
/4 width=5 by fpbc_fpbs_fpbg, fpb_fpbs, cpm_fwd_fpbc, cpm_fwd_fpb/
qed.
(* Basic_2A1: was: cpxs_fpbg *)
lemma cpxs_tneqx_fpbg:
- â\88\80G,L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2 →
- (T1 â\89\85 T2 â\86\92 â\8a¥) â\86\92 â\9dªG,L,T1â\9d« > â\9dªG,L,T2â\9d«.
+ â\88\80G,L,T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2 →
+ (T1 â\89\85 T2 â\86\92 â\8a¥) â\86\92 â\9d¨G,L,T1â\9d© > â\9d¨G,L,T2â\9d©.
#G #L #T1 #T2 #H #H0
elim (cpxs_tneqg_fwd_step_sn … H … H0) -H -H0
/4 width=5 by fpbc_fpbs_fpbg, cpxs_fpbs, cpx_fpbc, sfull_dec/
qed.
lemma cpxs_fpbg_trans:
- â\88\80G1,L1,T1,T. â\9dªG1,L1â\9d« ⊢ T1 ⬈* T →
- â\88\80G2,L2,T2. â\9dªG1,L1,Tâ\9d« > â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1,T. â\9d¨G1,L1â\9d© ⊢ T1 ⬈* T →
+ â\88\80G2,L2,T2. â\9d¨G1,L1,Tâ\9d© > â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d©.
/3 width=5 by fpbs_fpbg_trans, cpxs_fpbs/ qed-.
(* Basic_2A1: uses: fpbg_fleq_trans *)
lemma fpbg_feqg_trans (S) (G) (L) (T):
reflexive … S → symmetric … S →
- â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« > â\9dªG,L,Tâ\9d« →
- â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1. â\9d¨G1,L1,T1â\9d© > â\9d¨G,L,Tâ\9d© →
+ â\88\80G2,L2,T2. â\9d¨G,L,Tâ\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d©.
/3 width=8 by fpbg_fpb_trans, feqg_fpb/ qed-.
(* Basic_2A1: uses: fleq_fpbg_trans *)
lemma feqg_fpbg_trans (S) (G) (L) (T):
reflexive … S → symmetric … S →
- â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG,L,Tâ\9d« →
- â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« > â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G,L,Tâ\9d© →
+ â\88\80G2,L2,T2. â\9d¨G,L,Tâ\9d© > â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d©.
/3 width=8 by fpb_fpbg_trans, feqg_fpb/ qed-.
(* Properties with generic equivalence for terms ****************************)
lemma fpbg_teqg_div (S):
reflexive … S → symmetric … S →
- â\88\80G1,G2,L1,L2,T1,T. â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,Tâ\9d« →
- â\88\80T2. T2 â\89\9b[S] T â\86\92 â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T. â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,Tâ\9d© →
+ â\88\80T2. T2 â\89\9b[S] T â\86\92 â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d©.
/4 width=8 by fpbg_feqg_trans, teqg_feqg, teqg_sym/ qed-.
(* Advanced inversion lemmas of parallel rst-computation on closures ********)
(* Basic_2A1: was: fpbs_fpbg *)
lemma fpbs_inv_fpbg:
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d« →
- â\88¨â\88¨ â\9dªG1,L1,T1â\9d« â\89\85 â\9dªG2,L2,T2â\9d«
- | â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d© →
+ â\88¨â\88¨ â\9d¨G1,L1,T1â\9d© â\89\85 â\9d¨G2,L2,T2â\9d©
+ | â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d©.
#G1 #G2 #L1 #L2 #T1 #T2 #H
elim (fpbs_inv_fpbc_sn … H) -H
[ /2 width=1 by or_introl/
(* Basic_2A1: this was the definition of fpbg *)
lemma fpbg_inv_fpbc_fpbs (G1) (G2) (L1) (L2) (T1) (T2):
- â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d« →
- â\88\83â\88\83G,L,T. â\9dªG1,L1,T1â\9d« â\89» â\9dªG,L,Tâ\9d« & â\9dªG,L,Tâ\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d© →
+ â\88\83â\88\83G,L,T. â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G,L,Tâ\9d© & â\9d¨G,L,Tâ\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
#G1 #G2 #L1 #L2 #T1 #T2 #H
elim (fpbg_inv_gen … H) -H #G3 #L3 #T3 #G4 #L4 #T4 #H13 #H34 #H42
elim (fpbs_inv_fpbc_sn … H13) -H13
(* Advanced properties of parallel rst-computation on closures **************)
lemma fpbs_fpb_trans:
- â\88\80F1,F2,K1,K2,T1,T2. â\9dªF1,K1,T1â\9d« â\89¥ â\9dªF2,K2,T2â\9d« →
- â\88\80G2,L2,U2. â\9dªF2,K2,T2â\9d« â\89» â\9dªG2,L2,U2â\9d« →
- â\88\83â\88\83G1,L1,U1. â\9dªF1,K1,T1â\9d« â\89» â\9dªG1,L1,U1â\9d« & â\9dªG1,L1,U1â\9d« â\89¥ â\9dªG2,L2,U2â\9d«.
+ â\88\80F1,F2,K1,K2,T1,T2. â\9d¨F1,K1,T1â\9d© â\89¥ â\9d¨F2,K2,T2â\9d© →
+ â\88\80G2,L2,U2. â\9d¨F2,K2,T2â\9d© â\89» â\9d¨G2,L2,U2â\9d© →
+ â\88\83â\88\83G1,L1,U1. â\9d¨F1,K1,T1â\9d© â\89» â\9d¨G1,L1,U1â\9d© & â\9d¨G1,L1,U1â\9d© â\89¥ â\9d¨G2,L2,U2â\9d©.
#F1 #F2 #K1 #K2 #T1 #T2 #H elim (fpbs_inv_fpbg … H) -H
[ #H12 #G2 #L2 #U2 #H22
lapply (feqg_fpbc_trans … H12 … H22) -F2 -K2 -T2
(* Advanced forward lemmas **************************************************)
lemma fpbg_fwd_fpbs (G1) (G2) (L1) (L2) (T1) (T2):
- â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
#G1 #G2 #L1 #L2 #T1 #T2 #H
elim (fpbg_inv_gen … H) -H
/4 width=9 by fpbs_trans, fpbs_strap2, fpbc_fwd_fpb/
(* Advanced properties ******************************************************)
lemma fpbs_fpbg_trans (G) (L) (T):
- â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG,L,Tâ\9d« →
- â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« > â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G,L,Tâ\9d© →
+ â\88\80G2,L2,T2. â\9d¨G,L,Tâ\9d© > â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d©.
#G #L #T #G1 #L1 #T1 #H1 #G2 #L2 #T2 #H2
elim (fpbg_inv_gen … H2) -H2
/3 width=13 by fpbg_intro, fpbs_trans/
(* Note: this is used in the closure proof *)
lemma fpbg_fpbs_trans (G) (L) (T):
- â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« > â\9dªG,L,Tâ\9d« →
- â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« â\89¥ â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1. â\9d¨G1,L1,T1â\9d© > â\9d¨G,L,Tâ\9d© →
+ â\88\80G2,L2,T2. â\9d¨G,L,Tâ\9d© â\89¥ â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d©.
#G #L #T #G1 #L1 #T1 #H1 #G2 #L2 #T2 #H2
elim (fpbg_inv_gen … H1) -H1
/3 width=13 by fpbg_intro, fpbs_trans/
(* Advanced properties ******************************************************)
lemma fpbc_fpbg (G1) (G2) (L1) (L2) (T1) (T2):
- â\9dªG1,L1,T1â\9d« â\89» â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d«.
+ â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d©.
/3 width=13 by fpbg_intro, fpb_fpbs/ qed.
lemma fpbc_fpbs_fpbg (G) (L) (T):
- â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â\89» â\9dªG,L,Tâ\9d« →
- â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« â\89¥ â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1. â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G,L,Tâ\9d© →
+ â\88\80G2,L2,T2. â\9d¨G,L,Tâ\9d© â\89¥ â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d©.
/2 width=9 by fpbg_intro/ qed.
(* Note: this is used in the closure proof *)
lemma fqup_fpbg:
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82+ â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82+ â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d©.
#G1 #G2 #L1 #L2 #T1 #T2 #H elim (fqup_inv_step_sn … H) -H
/3 width=5 by fpbc_fpbs_fpbg, fqus_fpbs, fqu_fpbc/
qed.
(* Note: this is used in the closure proof *)
lemma fqup_fpbg_trans (G) (L) (T):
- â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â¬\82+ â\9dªG,L,Tâ\9d« →
- â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« > â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1. â\9d¨G1,L1,T1â\9d© â¬\82+ â\9d¨G,L,Tâ\9d© →
+ â\88\80G2,L2,T2. â\9d¨G,L,Tâ\9d© > â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d©.
/3 width=5 by fpbs_fpbg_trans, fqup_fpbs/ qed-.
(* Basic_2A1: uses: lpxs_fpbg *)
lemma lpxs_rneqx_fpbg:
- â\88\80G,L1,L2,T. â\9dªG,L1â\9d« ⊢ ⬈* L2 →
- (L1 â\89\85[T] L2 â\86\92 â\8a¥) â\86\92 â\9dªG,L1,Tâ\9d« > â\9dªG,L2,Tâ\9d«.
+ â\88\80G,L1,L2,T. â\9d¨G,L1â\9d© ⊢ ⬈* L2 →
+ (L1 â\89\85[T] L2 â\86\92 â\8a¥) â\86\92 â\9d¨G,L1,Tâ\9d© > â\9d¨G,L2,Tâ\9d©.
#G #L1 #L2 #T #H #H0
elim (lpxs_rneqg_inv_step_sn … H … H0) -H -H0
/4 width=10 by fpbc_fpbs_fpbg, lpxs_feqg_fpbs, lpx_fpbc, feqg_intro_sn, sfull_dec/
(* Basic_2A1: uses: fpbq_fpbs *)
lemma fpb_fpbs:
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
/2 width=1 by tri_inj/ qed.
lemma fpbs_strap1:
- â\88\80G1,G,G2,L1,L,L2,T1,T,T2. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG,L,Tâ\9d« →
- â\9dªG,L,Tâ\9d« â\89½ â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G,G2,L1,L,L2,T1,T,T2. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G,L,Tâ\9d© →
+ â\9d¨G,L,Tâ\9d© â\89½ â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
/2 width=5 by tri_step/ qed-.
lemma fpbs_strap2:
- â\88\80G1,G,G2,L1,L,L2,T1,T,T2. â\9dªG1,L1,T1â\9d« â\89½ â\9dªG,L,Tâ\9d« →
- â\9dªG,L,Tâ\9d« â\89¥ â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G,G2,L1,L,L2,T1,T,T2. â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G,L,Tâ\9d© →
+ â\9d¨G,L,Tâ\9d© â\89¥ â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
/2 width=5 by tri_TC_strap/ qed-.
(* Basic_2A1: removed theorems 3:
(* Properties with atomic arity assignment for terms ************************)
lemma fpbs_aaa_conf:
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d« →
- â\88\80A1. â\9dªG1,L1â\9d« â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â\9dªG2,L2â\9d« ⊢ T2 ⁝ A2.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d© →
+ â\88\80A1. â\9d¨G1,L1â\9d© â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â\9d¨G2,L2â\9d© ⊢ T2 ⁝ A2.
#G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2
[ /2 width=2 by ex_intro/
| #G #G2 #L #L2 #T #T2 #_ #H2 #IH1 #A #HA elim (IH1 … HA) -IH1 -A
lemma fpbs_cpx_tneqg_trans (S):
reflexive … S → symmetric … S → Transitive … S →
(∀s1,s2. Decidable (S s1 s2)) →
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d« →
- â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈ U2 → (T2 ≛[S] U2 → ⊥) →
- â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88 U1 & T1 â\89\9b[S] U1 â\86\92 â\8a¥ & â\9dªG1,L1,U1â\9d« â\89¥ â\9dªG2,L2,U2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d© →
+ â\88\80U2. â\9d¨G2,L2â\9d© ⊢ T2 ⬈ U2 → (T2 ≛[S] U2 → ⊥) →
+ â\88\83â\88\83U1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88 U1 & T1 â\89\9b[S] U1 â\86\92 â\8a¥ & â\9d¨G1,L1,U1â\9d© â\89¥ â\9d¨G2,L2,U2â\9d©.
#S #H1S #H2S #H3S #H4S #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 #HnTU2
elim (fpbs_inv_star S … H) -H // #G0 #L0 #L3 #T0 #T3 #HT10 #H10 #HL03 #H32
lapply (feqg_cpx_trans_cpx … H32 … HTU2) // #HTU32
(* Properties with extended context-sensitive parallel rt-computation *******)
lemma cpxs_fpbs:
- â\88\80G,L,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88* T2 â\86\92 â\9dªG,L,T1â\9d« â\89¥ â\9dªG,L,T2â\9d«.
+ â\88\80G,L,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88* T2 â\86\92 â\9d¨G,L,T1â\9d© â\89¥ â\9d¨G,L,T2â\9d©.
#G #L #T1 #T2 #H @(cpxs_ind … H) -T2
/3 width=5 by cpx_fpb, fpbs_strap1/
qed.
lemma fpbs_cpxs_trans:
- â\88\80G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG,L,Tâ\9d« →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â¬\88* T2 â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG,L,T2â\9d«.
+ â\88\80G1,G,L1,L,T1,T. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G,L,Tâ\9d© →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â¬\88* T2 â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G,L,T2â\9d©.
#G1 #G #L1 #L #T1 #T #H1 #T2 #H @(cpxs_ind … H) -T2
/3 width=5 by fpbs_strap1, cpx_fpb/
qed-.
lemma cpxs_fpbs_trans:
- â\88\80G1,G2,L1,L2,T,T2. â\9dªG1,L1,Tâ\9d« â\89¥ â\9dªG2,L2,T2â\9d« →
- â\88\80T1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88* T â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T,T2. â\9d¨G1,L1,Tâ\9d© â\89¥ â\9d¨G2,L2,T2â\9d© →
+ â\88\80T1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88* T â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
#G1 #G2 #L1 #L2 #T #T2 #H1 #T1 #H @(cpxs_ind_dx … H) -T1
/3 width=5 by fpbs_strap2, cpx_fpb/
qed-.
lemma cpxs_teqg_fpbs_trans (S):
reflexive … S → symmetric … S →
- â\88\80G1,L1,T1,T. â\9dªG1,L1â\9d« ⊢ T1 ⬈* T → ∀T0. T ≛[S] T0 →
- â\88\80G2,L2,T2. â\9dªG1,L1,T0â\9d« â\89¥ â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1,T. â\9d¨G1,L1â\9d© ⊢ T1 ⬈* T → ∀T0. T ≛[S] T0 →
+ â\88\80G2,L2,T2. â\9d¨G1,L1,T0â\9d© â\89¥ â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
/3 width=6 by cpxs_fpbs_trans, teqg_fpbs_trans/ qed-.
lemma cpxs_teqg_fpbs (S):
reflexive … S → symmetric … S →
- â\88\80G,L,T1,T. â\9dªG,Lâ\9d« ⊢ T1 ⬈* T →
- â\88\80T2. T â\89\9b[S] T2 â\86\92 â\9dªG,L,T1â\9d« â\89¥ â\9dªG,L,T2â\9d«.
+ â\88\80G,L,T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T →
+ â\88\80T2. T â\89\9b[S] T2 â\86\92 â\9d¨G,L,T1â\9d© â\89¥ â\9d¨G,L,T2â\9d©.
/4 width=5 by cpxs_fpbs_trans, feqg_fpbs, teqg_feqg/ qed.
(* Properties with plus-iterated structural successor for closures **********)
lemma cpxs_fqup_fpbs:
- â\88\80G1,L1,T1,T. â\9dªG1,L1â\9d« ⊢ T1 ⬈* T →
- â\88\80G2,L2,T2. â\9dªG1,L1,Tâ\9d« â¬\82+ â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1,T. â\9d¨G1,L1â\9d© ⊢ T1 ⬈* T →
+ â\88\80G2,L2,T2. â\9d¨G1,L1,Tâ\9d© â¬\82+ â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
/3 width=5 by fpbs_fqup_trans, cpxs_fpbs/ qed.
(* Properties with star-iterated structural successor for closures **********)
lemma cpxs_fqus_fpbs:
- â\88\80G1,L1,T1,T. â\9dªG1,L1â\9d« ⊢ T1 ⬈* T →
- â\88\80G2,L2,T2. â\9dªG1,L1,Tâ\9d« â¬\82* â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1,T. â\9d¨G1,L1â\9d© ⊢ T1 ⬈* T →
+ â\88\80G2,L2,T2. â\9d¨G1,L1,Tâ\9d© â¬\82* â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
/3 width=5 by fpbs_fqus_trans, cpxs_fpbs/ qed.
(* Basic_2A1: was: csx_fpbs_conf *)
lemma fpbs_csx_conf:
- â\88\80G1,L1,T1. â\9dªG1,L1â\9d« ⊢ ⬈*𝐒 T1 →
- â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG2,L2â\9d« ⊢ ⬈*𝐒 T2.
+ â\88\80G1,L1,T1. â\9d¨G1,L1â\9d© ⊢ ⬈*𝐒 T1 →
+ â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G2,L2â\9d© ⊢ ⬈*𝐒 T2.
#G1 #L1 #T1 #HT1 #G2 #L2 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2
/2 width=5 by csx_fpb_conf/
qed-.
(* Basic_2A1: uses: lleq_fpbs fleq_fpbs *)
lemma feqg_fpbs (S) (G1) (G2) (L1) (L2) (T1) (T2):
reflexive … S → symmetric … S →
- â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
/3 width=5 by fpb_fpbs, feqg_fpb/ qed.
(* Basic_2A1: uses: fpbs_lleq_trans *)
lemma fpbs_feqg_trans (S) (G) (L) (T):
reflexive … S → symmetric … S →
- â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG,L,Tâ\9d« →
- â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G,L,Tâ\9d© →
+ â\88\80G2,L2,T2. â\9d¨G,L,Tâ\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
/3 width=9 by fpbs_strap1, feqg_fpb/ qed-.
(* Basic_2A1: uses: lleq_fpbs_trans *)
lemma feqg_fpbs_trans (S) (G) (L) (T):
reflexive … S → symmetric … S →
- â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« â\89¥ â\9dªG2,L2,T2â\9d« →
- â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G2,L2,T2. â\9d¨G,L,Tâ\9d© â\89¥ â\9d¨G2,L2,T2â\9d© →
+ â\88\80G1,L1,T1. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
/3 width=5 by fpbs_strap2, feqg_fpb/ qed-.
lemma teqg_fpbs_trans (S) (T):
reflexive … S → symmetric … S →
∀T1. T1 ≛[S] T →
- â\88\80G1,G2,L1,L2,T2. â\9dªG1,L1,Tâ\9d« â\89¥ â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T2. â\9d¨G1,L1,Tâ\9d© â\89¥ â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
/3 width=8 by feqg_fpbs_trans, teqg_feqg/ qed-.
lemma fpbs_teqg_trans (S) (T):
reflexive … S → symmetric … S →
- â\88\80G1,G2,L1,L2,T1. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,Tâ\9d« →
- â\88\80T2. T â\89\9b[S] T2 â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,Tâ\9d© →
+ â\88\80T2. T â\89\9b[S] T2 â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
/3 width=8 by fpbs_feqg_trans, teqg_feqg/ qed-.
(* Properties with proper parallel rst-reduction on closures ****************)
lemma fpbc_fpbs:
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89» â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
/3 width=1 by fpb_fpbs, fpbc_fwd_fpb/ qed.
(* Inversion lemmas with proper parallel rst-reduction on closures **********)
lemma fpbs_inv_fpbc_sn:
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d« →
- â\88¨â\88¨ â\9dªG1,L1,T1â\9d« â\89\85 â\9dªG2,L2,T2â\9d«
- | â\88\83â\88\83G,L,T. â\9dªG1,L1,T1â\9d« â\89» â\9dªG,L,Tâ\9d« & â\9dªG,L,Tâ\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d© →
+ â\88¨â\88¨ â\9d¨G1,L1,T1â\9d© â\89\85 â\9d¨G2,L2,T2â\9d©
+ | â\88\83â\88\83G,L,T. â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G,L,Tâ\9d© & â\9d¨G,L,Tâ\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
#G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2
[ /3 width=1 by feqg_refl, or_introl/
| #G #G2 #L #L2 #T #T2 #_ #H2 * [ #H1 | * #G0 #L0 #T0 #H10 #H0 ]
lemma fpbs_ind:
∀G1,L1,T1. ∀Q:relation3 genv lenv term. Q G1 L1 T1 →
- (â\88\80G,G2,L,L2,T,T2. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« â\89½ â\9dªG2,L2,T2â\9d« → Q G L T → Q G2 L2 T2) →
- â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d« → Q G2 L2 T2.
+ (â\88\80G,G2,L,L2,T,T2. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G,L,Tâ\9d© â\89½ â\9d¨G2,L2,T2â\9d© → Q G L T → Q G2 L2 T2) →
+ â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d© → Q G2 L2 T2.
/3 width=8 by tri_TC_star_ind/ qed-.
lemma fpbs_ind_dx:
∀G2,L2,T2. ∀Q:relation3 genv lenv term. Q G2 L2 T2 →
- (â\88\80G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â\89½ â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« â\89¥ â\9dªG2,L2,T2â\9d« → Q G L T → Q G1 L1 T1) →
- â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d« → Q G1 L1 T1.
+ (â\88\80G1,G,L1,L,T1,T. â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G,L,Tâ\9d© â\89¥ â\9d¨G2,L2,T2â\9d© → Q G L T → Q G1 L1 T1) →
+ â\88\80G1,L1,T1. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d© → Q G1 L1 T1.
/3 width=8 by tri_TC_star_ind_dx/ qed-.
(* Advanced properties ******************************************************)
(* Properties with plus-iterated structural successor for closures **********)
lemma fqup_fpbs:
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82+ â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82+ â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
#G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
/4 width=5 by fqu_fquq, fquq_fpb, tri_step/
qed.
lemma fpbs_fqup_trans:
- â\88\80G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG,L,Tâ\9d« →
- â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« â¬\82+ â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G,L1,L,T1,T. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G,L,Tâ\9d© →
+ â\88\80G2,L2,T2. â\9d¨G,L,Tâ\9d© â¬\82+ â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
#G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
/3 width=5 by fpbs_strap1, fqu_fpb/
qed-.
lemma fqup_fpbs_trans:
- â\88\80G,G2,L,L2,T,T2. â\9dªG,L,Tâ\9d« â\89¥ â\9dªG2,L2,T2â\9d« →
- â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â¬\82+ â\9dªG,L,Tâ\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G,G2,L,L2,T,T2. â\9d¨G,L,Tâ\9d© â\89¥ â\9d¨G2,L2,T2â\9d© →
+ â\88\80G1,L1,T1. â\9d¨G1,L1,T1â\9d© â¬\82+ â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
#G #G2 #L #L2 #T #T2 #H1 #G1 #L1 #T1 #H @(fqup_ind_dx … H) -G1 -L1 -T1
/3 width=9 by fpbs_strap2, fqu_fpb/
qed-.
\ No newline at end of file
(* Properties with star-iterated structural successor for closures **********)
lemma fqus_fpbs:
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82* â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82* â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
#G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -G2 -L2 -T2
/3 width=5 by fquq_fpb, fpbs_strap1/
qed.
lemma fpbs_fqus_trans:
- â\88\80G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG,L,Tâ\9d« →
- â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« â¬\82* â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G,L1,L,T1,T. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G,L,Tâ\9d© →
+ â\88\80G2,L2,T2. â\9d¨G,L,Tâ\9d© â¬\82* â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
#G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H @(fqus_ind … H) -G2 -L2 -T2
/3 width=5 by fpbs_strap1, fquq_fpb/
qed-.
lemma fqus_fpbs_trans:
- â\88\80G,G2,L,L2,T,T2. â\9dªG,L,Tâ\9d« â\89¥ â\9dªG2,L2,T2â\9d« →
- â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â¬\82* â\9dªG,L,Tâ\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G,G2,L,L2,T,T2. â\9d¨G,L,Tâ\9d© â\89¥ â\9d¨G2,L2,T2â\9d© →
+ â\88\80G1,L1,T1. â\9d¨G1,L1,T1â\9d© â¬\82* â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
#G #G2 #L #L2 #T #T2 #H1 #G1 #L1 #T1 #H @(fqus_ind_dx … H) -G1 -L1 -T1
/3 width=5 by fpbs_strap2, fquq_fpb/
qed-.
(* Properties with extended rt-transition on full local environments *******)
lemma fpbs_lpx_trans (L):
- â\88\80G1,G2,L1,T1,T2. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L,T2â\9d« →
- â\88\80L2. â\9dªG2,Lâ\9d« â\8a¢ â¬\88 L2 â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,T1,T2. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L,T2â\9d© →
+ â\88\80L2. â\9d¨G2,Lâ\9d© â\8a¢ â¬\88 L2 â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
/3 width=5 by fpbs_strap1, lpx_fpb/ qed-.
lemma teqg_reqg_lpx_fpbs (S):
reflexive … S → symmetric … S →
∀T1,T2. T1 ≛[S] T2 → ∀L1,L0. L1 ≛[S,T2] L0 →
- â\88\80G,L2. â\9dªG,L0â\9d« â\8a¢ â¬\88 L2 â\86\92 â\9dªG,L1,T1â\9d« â\89¥ â\9dªG,L2,T2â\9d«.
+ â\88\80G,L2. â\9d¨G,L0â\9d© â\8a¢ â¬\88 L2 â\86\92 â\9d¨G,L1,T1â\9d© â\89¥ â\9d¨G,L2,T2â\9d©.
/4 width=7 by feqg_fpbs, fpbs_strap1, lpx_fpb, feqg_intro_dx/ qed.
(* Properties with extended rt-computation on full local environments ******)
lemma lpxs_fpbs:
- â\88\80G,L1,L2,T. â\9dªG,L1â\9d« â\8a¢ â¬\88* L2 â\86\92 â\9dªG,L1,Tâ\9d« â\89¥ â\9dªG,L2,Tâ\9d«.
+ â\88\80G,L1,L2,T. â\9d¨G,L1â\9d© â\8a¢ â¬\88* L2 â\86\92 â\9d¨G,L1,Tâ\9d© â\89¥ â\9d¨G,L2,Tâ\9d©.
#G #L1 #L2 #T #H @(lpxs_ind_dx … H) -L2
/3 width=5 by lpx_fpb, fpbs_strap1/
qed.
lemma fpbs_lpxs_trans:
- â\88\80G1,G2,L1,L,T1,T2. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L,T2â\9d« →
- â\88\80L2. â\9dªG2,Lâ\9d« â\8a¢ â¬\88* L2 â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L,T1,T2. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L,T2â\9d© →
+ â\88\80L2. â\9d¨G2,Lâ\9d© â\8a¢ â¬\88* L2 â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
#G1 #G2 #L1 #L #T1 #T2 #H1 #L2 #H @(lpxs_ind_dx … H) -L2
/3 width=5 by fpbs_strap1, lpx_fpb/
qed-.
lemma lpxs_fpbs_trans:
- â\88\80G1,G2,L,L2,T1,T2. â\9dªG1,L,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d« →
- â\88\80L1. â\9dªG1,L1â\9d« â\8a¢ â¬\88* L â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L,L2,T1,T2. â\9d¨G1,L,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d© →
+ â\88\80L1. â\9d¨G1,L1â\9d© â\8a¢ â¬\88* L â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
#G1 #G2 #L #L2 #T1 #T2 #H1 #L1 #H @(lpxs_ind_sn … H) -L1
/3 width=5 by fpbs_strap2, lpx_fpb/
qed-.
(* Basic_2A1: uses: lpxs_lleq_fpbs *)
lemma lpxs_feqg_fpbs (S) (L):
reflexive … S → symmetric … S →
- â\88\80G1,L1,T1. â\9dªG1,L1â\9d« ⊢ ⬈* L →
- â\88\80G2,L2,T2. â\9dªG1,L,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1. â\9d¨G1,L1â\9d© ⊢ ⬈* L →
+ â\88\80G2,L2,T2. â\9d¨G1,L,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
/3 width=4 by lpxs_fpbs_trans, feqg_fpbs/ qed.
(* Properties with star-iterated structural successor for closures **********)
lemma fqus_lpxs_fpbs:
- â\88\80G1,G2,L1,L,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82* â\9dªG2,L,T2â\9d« →
- â\88\80L2. â\9dªG2,Lâ\9d« â\8a¢ â¬\88* L2 â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82* â\9d¨G2,L,T2â\9d© →
+ â\88\80L2. â\9d¨G2,Lâ\9d© â\8a¢ â¬\88* L2 â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
/3 width=3 by fpbs_lpxs_trans, fqus_fpbs/ qed.
(* Properties with extended context-sensitive parallel rt-computation *******)
lemma cpxs_fqus_lpxs_fpbs:
- â\88\80G1,L1,T1,T. â\9dªG1,L1â\9d« ⊢ T1 ⬈* T →
- â\88\80G2,L,T2. â\9dªG1,L1,Tâ\9d« â¬\82* â\9dªG2,L,T2â\9d« →
- â\88\80L2.â\9dªG2,Lâ\9d« â\8a¢ â¬\88* L2 â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1,T. â\9d¨G1,L1â\9d© ⊢ T1 ⬈* T →
+ â\88\80G2,L,T2. â\9d¨G1,L1,Tâ\9d© â¬\82* â\9d¨G2,L,T2â\9d© →
+ â\88\80L2.â\9d¨G2,Lâ\9d© â\8a¢ â¬\88* L2 â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
/3 width=5 by cpxs_fqus_fpbs, fpbs_lpxs_trans/ qed.
lemma fpbs_cpxs_teqg_fqup_lpx_trans (S):
reflexive … S → symmetric … S →
- â\88\80G1,G3,L1,L3,T1,T3. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG3,L3,T3â\9d« →
- â\88\80T4. â\9dªG3,L3â\9d« ⊢ T3 ⬈* T4 → ∀T5. T4 ≛[S] T5 →
- â\88\80G2,L4,T2. â\9dªG3,L3,T5â\9d« â¬\82+ â\9dªG2,L4,T2â\9d« →
- â\88\80L2. â\9dªG2,L4â\9d« â\8a¢ â¬\88 L2 â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G3,L1,L3,T1,T3. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G3,L3,T3â\9d© →
+ â\88\80T4. â\9d¨G3,L3â\9d© ⊢ T3 ⬈* T4 → ∀T5. T4 ≛[S] T5 →
+ â\88\80G2,L4,T2. â\9d¨G3,L3,T5â\9d© â¬\82+ â\9d¨G2,L4,T2â\9d© →
+ â\88\80L2. â\9d¨G2,L4â\9d© â\8a¢ â¬\88 L2 â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
#S #H1S #H2S #G1 #G3 #L1 #L3 #T1 #T3 #H13 #T4 #HT34 #T5 #HT45 #G2 #L4 #T2 #H34 #L2 #HL42
@(fpbs_lpx_trans … HL42) -L2 (**) (* full auto too slow *)
@(fpbs_fqup_trans … H34) -G2 -L4 -T2
(* Basic_2A1: uses: fpbs_intro_alt *)
lemma fpbs_intro_star (S) (G) (T) (T0) (L) (L0):
reflexive … S → symmetric … S →
- â\88\80G1,L1,T1. â\9dªG1,L1â\9d« ⊢ T1 ⬈* T →
- â\9dªG1,L1,Tâ\9d« â¬\82* â\9dªG,L,T0â\9d« â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈* L0 →
- â\88\80G2,L2,T2. â\9dªG,L0,T0â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1. â\9d¨G1,L1â\9d© ⊢ T1 ⬈* T →
+ â\9d¨G1,L1,Tâ\9d© â¬\82* â\9d¨G,L,T0â\9d© â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈* L0 →
+ â\88\80G2,L2,T2. â\9d¨G,L0,T0â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d©.
/3 width=8 by cpxs_fqus_lpxs_fpbs, fpbs_strap1, feqg_fpb/ qed.
(* Advanced inversion lemmas *************************************************)
(* Basic_2A1: uses: fpbs_inv_alt *)
lemma fpbs_inv_star (S):
reflexive … S → symmetric … S → Transitive … S →
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d« →
- â\88\83â\88\83G,L,L0,T,T0. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88* T & â\9dªG1,L1,Tâ\9d« â¬\82* â\9dªG,L,T0â\9d« & â\9dªG,Lâ\9d« â\8a¢ â¬\88* L0 & â\9dªG,L0,T0â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d© →
+ â\88\83â\88\83G,L,L0,T,T0. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88* T & â\9d¨G1,L1,Tâ\9d© â¬\82* â\9d¨G,L,T0â\9d© & â\9d¨G,Lâ\9d© â\8a¢ â¬\88* L0 & â\9d¨G,L0,T0â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d©.
#S #H1S #H2S #H3S #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind_dx … H) -G1 -L1 -T1
[ /3 width=9 by feqg_refl, ex4_5_intro/
| #G1 #G0 #L1 #L0 #T1 #T0 *
(* Basic properties *********************************************************)
lemma fsb_intro (G1) (L1) (T1):
- (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89» â\9dªG2,L2,T2â\9d« â\86\92 â\89¥ð\9d\90\92 â\9dªG2,L2,T2â\9d«) â\86\92 â\89¥ð\9d\90\92 â\9dªG1,L1,T1â\9d«.
+ (â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G2,L2,T2â\9d© â\86\92 â\89¥ð\9d\90\92 â\9d¨G2,L2,T2â\9d©) â\86\92 â\89¥ð\9d\90\92 â\9d¨G1,L1,T1â\9d©.
/5 width=1 by fpbc_intro, SN3_intro/ qed.
(* Basic eliminators ********************************************************)
(* Note: eliminator with shorter ground hypothesis *)
lemma fsb_ind (Q:relation3 …):
- (â\88\80G1,L1,T1. â\89¥ð\9d\90\92 â\9dªG1,L1,T1â\9d« →
- (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89» â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
+ (â\88\80G1,L1,T1. â\89¥ð\9d\90\92 â\9d¨G1,L1,T1â\9d© →
+ (â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G2,L2,T2â\9d© → Q G2 L2 T2) →
Q G1 L1 T1
) →
- â\88\80G,L,T. â\89¥ð\9d\90\92 â\9dªG,L,Tâ\9d« → Q G L T.
+ â\88\80G,L,T. â\89¥ð\9d\90\92 â\9d¨G,L,Tâ\9d© → Q G L T.
#Q #IH #G #L #T #H elim H -G -L -T
#G1 #L1 #T1 #H1 #IH1
@IH -IH [ /4 width=1 by SN3_intro/ ] -H1 #G2 #L2 #T2 #H
(* Main properties with atomic arity assignment for terms *******************)
theorem aaa_fsb (G) (L) (T) (A):
- â\9dªG,Lâ\9d« â\8a¢ T â\81\9d A â\86\92 â\89¥ð\9d\90\92 â\9dªG,L,Tâ\9d«.
+ â\9d¨G,Lâ\9d© â\8a¢ T â\81\9d A â\86\92 â\89¥ð\9d\90\92 â\9d¨G,L,Tâ\9d©.
/3 width=2 by aaa_csx, csx_fsb/ qed.
(* Advanced eliminators with atomic arity assignment for terms **************)
fact aaa_ind_fpbc_aux (Q:relation3 …):
(∀G1,L1,T1,A.
- â\9dªG1,L1â\9d« ⊢ T1 ⁝ A →
- (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89» â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
+ â\9d¨G1,L1â\9d© ⊢ T1 ⁝ A →
+ (â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G2,L2,T2â\9d© → Q G2 L2 T2) →
Q G1 L1 T1
) →
- â\88\80G,L,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\88\80A. â\9dªG,Lâ\9d« ⊢ T ⁝ A → Q G L T.
+ â\88\80G,L,T. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\88\80A. â\9d¨G,Lâ\9d© ⊢ T ⁝ A → Q G L T.
#R #IH #G #L #T #H @(csx_ind_fpbc … H) -G -L -T
#G1 #L1 #T1 #H1 #IH1 #A1 #HTA1 @IH -IH //
#G2 #L2 #T2 #H12 elim (fpbs_aaa_conf … G2 … L2 … T2 … HTA1) -A1
lemma aaa_ind_fpbc (Q:relation3 …):
(∀G1,L1,T1,A.
- â\9dªG1,L1â\9d« ⊢ T1 ⁝ A →
- (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89» â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
+ â\9d¨G1,L1â\9d© ⊢ T1 ⁝ A →
+ (â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G2,L2,T2â\9d© → Q G2 L2 T2) →
Q G1 L1 T1
) →
- â\88\80G,L,T,A. â\9dªG,Lâ\9d« ⊢ T ⁝ A → Q G L T.
+ â\88\80G,L,T,A. â\9d¨G,Lâ\9d© ⊢ T ⁝ A → Q G L T.
/4 width=4 by aaa_ind_fpbc_aux, aaa_csx/ qed-.
fact aaa_ind_fpbg_aux (Q:relation3 …):
(∀G1,L1,T1,A.
- â\9dªG1,L1â\9d« ⊢ T1 ⁝ A →
- (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
+ â\9d¨G1,L1â\9d© ⊢ T1 ⁝ A →
+ (â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d© → Q G2 L2 T2) →
Q G1 L1 T1
) →
- â\88\80G,L,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\88\80A. â\9dªG,Lâ\9d« ⊢ T ⁝ A → Q G L T.
+ â\88\80G,L,T. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\88\80A. â\9d¨G,Lâ\9d© ⊢ T ⁝ A → Q G L T.
#Q #IH #G #L #T #H @(csx_ind_fpbg … H) -G -L -T
#G1 #L1 #T1 #H1 #IH1 #A1 #HTA1 @IH -IH //
#G2 #L2 #T2 #H12 elim (fpbs_aaa_conf … G2 … L2 … T2 … HTA1) -A1
lemma aaa_ind_fpbg (Q:relation3 …):
(∀G1,L1,T1,A.
- â\9dªG1,L1â\9d« ⊢ T1 ⁝ A →
- (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
+ â\9d¨G1,L1â\9d© ⊢ T1 ⁝ A →
+ (â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d© → Q G2 L2 T2) →
Q G1 L1 T1
) →
- â\88\80G,L,T,A. â\9dªG,Lâ\9d« ⊢ T ⁝ A → Q G L T.
+ â\88\80G,L,T,A. â\9d¨G,Lâ\9d© ⊢ T ⁝ A → Q G L T.
/4 width=4 by aaa_ind_fpbg_aux, aaa_csx/ qed-.
(* Inversion lemmas with context-sensitive stringly rt-normalizing terms ****)
lemma fsb_inv_csx:
- â\88\80G,L,T. â\89¥ð\9d\90\92 â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T.
+ â\88\80G,L,T. â\89¥ð\9d\90\92 â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T.
#G #L #T #H @(fsb_ind … H) -G -L -T
/5 width=1 by csx_intro, cpx_fpbc/
qed-.
(* Propreties with context-sensitive stringly rt-normalizing terms **********)
lemma csx_fsb_fpbs:
- â\88\80G1,L1,T1. â\9dªG1,L1â\9d« ⊢ ⬈*𝐒 T1 →
- â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d« â\86\92 â\89¥ð\9d\90\92 â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1. â\9d¨G1,L1â\9d© ⊢ ⬈*𝐒 T1 →
+ â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d© â\86\92 â\89¥ð\9d\90\92 â\9d¨G2,L2,T2â\9d©.
#G1 #L1 #T1 #H @(csx_ind … H) -T1
#T1 #HT1 #IHc #G2 #L2 #T2 @(fqup_wf_ind (Ⓣ) … G2 L2 T2) -G2 -L2 -T2
#G0 #L0 #T0 #IHu #H10
qed.
lemma csx_fsb (G) (L) (T):
- â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\89¥ð\9d\90\92 â\9dªG,L,Tâ\9d«.
+ â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\89¥ð\9d\90\92 â\9d¨G,L,Tâ\9d©.
/2 width=5 by csx_fsb_fpbs/ qed.
(* Advanced eliminators *****************************************************)
lemma csx_ind_fpbc (Q:relation3 …):
(∀G1,L1,T1.
- â\9dªG1,L1â\9d« ⊢ ⬈*𝐒 T1 →
- (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89» â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
+ â\9d¨G1,L1â\9d© ⊢ ⬈*𝐒 T1 →
+ (â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G2,L2,T2â\9d© → Q G2 L2 T2) →
Q G1 L1 T1
) →
- â\88\80G,L,T. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T → Q G L T.
+ â\88\80G,L,T. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T → Q G L T.
/4 width=4 by fsb_inv_csx, csx_fsb, fsb_ind/ qed-.
lemma csx_ind_fpbg (Q:relation3 …):
(∀G1,L1,T1.
- â\9dªG1,L1â\9d« ⊢ ⬈*𝐒 T1 →
- (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
+ â\9d¨G1,L1â\9d© ⊢ ⬈*𝐒 T1 →
+ (â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d© → Q G2 L2 T2) →
Q G1 L1 T1
) →
- â\88\80G,L,T. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T → Q G L T.
+ â\88\80G,L,T. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T → Q G L T.
/4 width=4 by fsb_inv_csx, csx_fsb, fsb_ind_fpbg/ qed-.
lemma fsb_feqg_trans (S):
reflexive … S → symmetric … S → Transitive … S →
- â\88\80G1,L1,T1. â\89¥ð\9d\90\92 â\9dªG1,L1,T1â\9d« →
- â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« â\86\92 â\89¥ð\9d\90\92 â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1. â\89¥ð\9d\90\92 â\9d¨G1,L1,T1â\9d© →
+ â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© â\86\92 â\89¥ð\9d\90\92 â\9d¨G2,L2,T2â\9d©.
#S #H1S #H2S #H3S #G1 #L1 #T1 #H @(fsb_ind … H) -G1 -L1 -T1
#G1 #L1 #T1 #_ #IH #G2 #L2 #T2 #H12
@fsb_intro #G #L #T #H2
(* Properties with parallel rst-computation for closures ********************)
lemma fsb_fpbs_trans:
- â\88\80G1,L1,T1. â\89¥ð\9d\90\92 â\9dªG1,L1,T1â\9d« →
- â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d« â\86\92 â\89¥ð\9d\90\92 â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1. â\89¥ð\9d\90\92 â\9d¨G1,L1,T1â\9d© →
+ â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d© â\86\92 â\89¥ð\9d\90\92 â\9d¨G2,L2,T2â\9d©.
#G1 #L1 #T1 #H @(fsb_ind … H) -G1 -L1 -T1
#G1 #L1 #T1 #H1 #IH #G2 #L2 #T2 #H12
elim (fpbs_inv_fpbg … H12) -H12
(* Properties with parallel rst-transition for closures *********************)
lemma fsb_fpb_trans:
- â\88\80G1,L1,T1. â\89¥ð\9d\90\92 â\9dªG1,L1,T1â\9d« →
- â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d« â\86\92 â\89¥ð\9d\90\92 â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1. â\89¥ð\9d\90\92 â\9d¨G1,L1,T1â\9d© →
+ â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d© â\86\92 â\89¥ð\9d\90\92 â\9d¨G2,L2,T2â\9d©.
/3 width=5 by fsb_fpbs_trans, fpb_fpbs/ qed-.
(* Properties with proper parallel rst-computation for closures *************)
lemma fsb_intro_fpbg:
∀G1,L1,T1.
- (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d« â\86\92 â\89¥ð\9d\90\92 â\9dªG2,L2,T2â\9d«) →
- â\89¥ð\9d\90\92 â\9dªG1,L1,T1â\9d«.
+ (â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d© â\86\92 â\89¥ð\9d\90\92 â\9d¨G2,L2,T2â\9d©) →
+ â\89¥ð\9d\90\92 â\9d¨G1,L1,T1â\9d©.
/4 width=1 by fsb_intro, fpbc_fpbg/ qed.
(* Eliminators with proper parallel rst-computation for closures ************)
lemma fsb_ind_fpbg_fpbs (Q:relation3 …):
- (â\88\80G1,L1,T1. â\89¥ð\9d\90\92 â\9dªG1,L1,T1â\9d« →
- (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
+ (â\88\80G1,L1,T1. â\89¥ð\9d\90\92 â\9d¨G1,L1,T1â\9d© →
+ (â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d© → Q G2 L2 T2) →
Q G1 L1 T1
) →
- â\88\80G1,L1,T1. â\89¥ð\9d\90\92 â\9dªG1,L1,T1â\9d« →
- â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89¥ â\9dªG2,L2,T2â\9d« → Q G2 L2 T2.
+ â\88\80G1,L1,T1. â\89¥ð\9d\90\92 â\9d¨G1,L1,T1â\9d© →
+ â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â\89¥ â\9d¨G2,L2,T2â\9d© → Q G2 L2 T2.
#Q #IH1 #G1 #L1 #T1 #H @(fsb_ind … H) -G1 -L1 -T1
#G1 #L1 #T1 #H1 #IH #G2 #L2 #T2 #H12
@IH1 -IH1
qed-.
lemma fsb_ind_fpbg (Q:relation3 …):
- (â\88\80G1,L1,T1. â\89¥ð\9d\90\92 â\9dªG1,L1,T1â\9d« →
- (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« > â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
+ (â\88\80G1,L1,T1. â\89¥ð\9d\90\92 â\9d¨G1,L1,T1â\9d© →
+ (â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© > â\9d¨G2,L2,T2â\9d© → Q G2 L2 T2) →
Q G1 L1 T1
) →
- â\88\80G1,L1,T1. â\89¥ð\9d\90\92 â\9dªG1,L1,T1â\9d« → Q G1 L1 T1.
+ â\88\80G1,L1,T1. â\89¥ð\9d\90\92 â\9d¨G1,L1,T1â\9d© → Q G1 L1 T1.
#Q #IH #G1 #L1 #T1 #H @(fsb_ind_fpbg_fpbs … H) -H
/3 width=1 by/
qed-.
(* Inversion lemmas with proper parallel rst-computation for closures *******)
lemma fsb_fpbg_refl_false (G) (L) (T):
- â\89¥ð\9d\90\92 â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« > â\9dªG,L,Tâ\9d« → ⊥.
+ â\89¥ð\9d\90\92 â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G,L,Tâ\9d© > â\9d¨G,L,Tâ\9d© → ⊥.
#G #L #T #H
@(fsb_ind_fpbg … H) -G -L -T #G1 #L1 #T1 #_ #IH #H
/2 width=5 by/
lemma jsx_csx_conf (G):
∀L1,L2. G ⊢ L1 ⊒ L2 →
- â\88\80T. â\9dªG,L1â\9d« â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9dªG,L2â\9d« ⊢ ⬈*𝐒 T.
+ â\88\80T. â\9d¨G,L1â\9d© â\8a¢ â¬\88*ð\9d\90\92 T â\86\92 â\9d¨G,L2â\9d© ⊢ ⬈*𝐒 T.
/3 width=5 by jsx_fwd_lsubr, csx_lsubr_conf/ qed-.
(* Properties with strongly rt-normalizing referred local environments ******)
lemma jsx_fwd_drops_atom_sn (b) (G):
∀L1,L2. G ⊢ L1 ⊒ L2 →
- â\88\80f. ð\9d\90\94â\9dªfâ\9d« → ⇩*[b,f]L1 ≘ ⋆ → ⇩*[b,f]L2 ≘ ⋆.
+ â\88\80f. ð\9d\90\94â\9d¨fâ\9d© → ⇩*[b,f]L1 ≘ ⋆ → ⇩*[b,f]L2 ≘ ⋆.
#b #G #L1 #L2 #H elim H -L1 -L2
[ #f #_ #H //
| #I #K1 #K2 #_ #IH #f #Hf #H
lemma jsx_fwd_drops_unit_sn (b) (G):
∀L1,L2. G ⊢ L1 ⊒ L2 →
- â\88\80f. ð\9d\90\94â\9dªfâ\9d« → ∀I,K1. ⇩*[b,f]L1 ≘ K1.ⓤ[I] →
+ â\88\80f. ð\9d\90\94â\9d¨fâ\9d© → ∀I,K1. ⇩*[b,f]L1 ≘ K1.ⓤ[I] →
∃∃K2. G ⊢ K1 ⊒ K2 & ⇩*[b,f]L2 ≘ K2.ⓤ[I].
#b #G #L1 #L2 #H elim H -L1 -L2
[ #f #_ #J #Y1 #H
lemma jsx_fwd_drops_pair_sn (b) (G):
∀L1,L2. G ⊢ L1 ⊒ L2 →
- â\88\80f. ð\9d\90\94â\9dªfâ\9d« → ∀I,K1,V. ⇩*[b,f]L1 ≘ K1.ⓑ[I]V →
+ â\88\80f. ð\9d\90\94â\9d¨fâ\9d© → ∀I,K1,V. ⇩*[b,f]L1 ≘ K1.ⓑ[I]V →
∨∨ ∃∃K2. G ⊢ K1 ⊒ K2 & ⇩*[b,f]L2 ≘ K2.ⓑ[I]V
| ∃∃K2. G ⊢ K1 ⊒ K2 & ⇩*[b,f]L2 ≘ K2.ⓧ & G ⊢ ⬈*𝐒[V] K2.
#b #G #L1 #L2 #H elim H -L1 -L2
(* Basic_2A1: uses: lsx_cpx_trans_lcosx *)
lemma rsx_cpx_trans_jsx (G):
- â\88\80L0,T1,T2. â\9dªG,L0â\9d« ⊢ T1 ⬈ T2 →
+ â\88\80L0,T1,T2. â\9d¨G,L0â\9d© ⊢ T1 ⬈ T2 →
∀L. G ⊢ L0 ⊒ L → G ⊢ ⬈*𝐒[T1] L → G ⊢ ⬈*𝐒[T2] L.
#G #L0 #T1 #T2 #H @(cpx_ind … H) -G -L0 -T1 -T2
[ //
(* Basic_2A1: uses: lsx_cpx_trans_O *)
lemma rsx_cpx_trans (G):
- â\88\80L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈ T2 →
+ â\88\80L,T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈ T2 →
G ⊢ ⬈*𝐒[T1] L → G ⊢ ⬈*𝐒[T2] L.
/3 width=6 by rsx_cpx_trans_jsx, jsx_refl/ qed-.
lemma rsx_cpxs_trans (G):
- â\88\80L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈* T2 →
+ â\88\80L,T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈* T2 →
G ⊢ ⬈*𝐒[T1] L → G ⊢ ⬈*𝐒[T2] L.
#G #L #T1 #T2 #H
@(cpxs_ind_dx ??????? H) -T1 //
(* Basic properties *********************************************************)
(* Basic_2A1: uses: lprs_pair_refl *)
-lemma lprs_bind_refl_dx (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡*[h,0] L2 →
- â\88\80I. â\9dªG,L1.â\93\98[I]â\9d« ⊢ ➡*[h,0] L2.ⓘ[I].
+lemma lprs_bind_refl_dx (h) (G): â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ➡*[h,0] L2 →
+ â\88\80I. â\9d¨G,L1.â\93\98[I]â\9d© ⊢ ➡*[h,0] L2.ⓘ[I].
/2 width=1 by lex_bind_refl_dx/ qed.
-lemma lprs_pair (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡*[h,0] L2 →
- â\88\80V1,V2. â\9dªG,L1â\9d« ⊢ V1 ➡*[h,0] V2 →
- â\88\80I. â\9dªG,L1.â\93\91[I]V1â\9d« ⊢ ➡*[h,0] L2.ⓑ[I]V2.
+lemma lprs_pair (h) (G): â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ➡*[h,0] L2 →
+ â\88\80V1,V2. â\9d¨G,L1â\9d© ⊢ V1 ➡*[h,0] V2 →
+ â\88\80I. â\9d¨G,L1.â\93\91[I]V1â\9d© ⊢ ➡*[h,0] L2.ⓑ[I]V2.
/2 width=1 by lex_pair/ qed.
-lemma lprs_refl (h) (G): â\88\80L. â\9dªG,Lâ\9d« ⊢ ➡*[h,0] L.
+lemma lprs_refl (h) (G): â\88\80L. â\9d¨G,Lâ\9d© ⊢ ➡*[h,0] L.
/2 width=1 by lex_refl/ qed.
(* Basic inversion lemmas ***************************************************)
(* Basic_2A1: uses: lprs_inv_atom1 *)
-lemma lprs_inv_atom_sn (h) (G): â\88\80L2. â\9dªG,â\8b\86â\9d« ⊢ ➡*[h,0] L2 → L2 = ⋆.
+lemma lprs_inv_atom_sn (h) (G): â\88\80L2. â\9d¨G,â\8b\86â\9d© ⊢ ➡*[h,0] L2 → L2 = ⋆.
/2 width=2 by lex_inv_atom_sn/ qed-.
(* Basic_2A1: was: lprs_inv_pair1 *)
lemma lprs_inv_pair_sn (h) (G):
- â\88\80I,K1,L2,V1. â\9dªG,K1.â\93\91[I]V1â\9d« ⊢ ➡*[h,0] L2 →
- â\88\83â\88\83K2,V2. â\9dªG,K1â\9d« â\8a¢ â\9e¡*[h,0] K2 & â\9dªG,K1â\9d« ⊢ V1 ➡*[h,0] V2 & L2 = K2.ⓑ[I]V2.
+ â\88\80I,K1,L2,V1. â\9d¨G,K1.â\93\91[I]V1â\9d© ⊢ ➡*[h,0] L2 →
+ â\88\83â\88\83K2,V2. â\9d¨G,K1â\9d© â\8a¢ â\9e¡*[h,0] K2 & â\9d¨G,K1â\9d© ⊢ V1 ➡*[h,0] V2 & L2 = K2.ⓑ[I]V2.
/2 width=1 by lex_inv_pair_sn/ qed-.
(* Basic_2A1: uses: lprs_inv_atom2 *)
-lemma lprs_inv_atom_dx (h) (G): â\88\80L1. â\9dªG,L1â\9d« ⊢ ➡*[h,0] ⋆ → L1 = ⋆.
+lemma lprs_inv_atom_dx (h) (G): â\88\80L1. â\9d¨G,L1â\9d© ⊢ ➡*[h,0] ⋆ → L1 = ⋆.
/2 width=2 by lex_inv_atom_dx/ qed-.
(* Basic_2A1: was: lprs_inv_pair2 *)
lemma lprs_inv_pair_dx (h) (G):
- â\88\80I,L1,K2,V2. â\9dªG,L1â\9d« ⊢ ➡*[h,0] K2.ⓑ[I]V2 →
- â\88\83â\88\83K1,V1. â\9dªG,K1â\9d« â\8a¢ â\9e¡*[h,0] K2 & â\9dªG,K1â\9d« ⊢ V1 ➡*[h,0] V2 & L1 = K1.ⓑ[I]V1.
+ â\88\80I,L1,K2,V2. â\9d¨G,L1â\9d© ⊢ ➡*[h,0] K2.ⓑ[I]V2 →
+ â\88\83â\88\83K1,V1. â\9d¨G,K1â\9d© â\8a¢ â\9e¡*[h,0] K2 & â\9d¨G,K1â\9d© ⊢ V1 ➡*[h,0] V2 & L1 = K1.ⓑ[I]V1.
/2 width=1 by lex_inv_pair_dx/ qed-.
(* Basic eliminators ********************************************************)
lemma lprs_ind (h) (G): ∀Q:relation lenv.
Q (⋆) (⋆) → (
∀I,K1,K2.
- â\9dªG,K1â\9d« ⊢ ➡*[h,0] K2 →
+ â\9d¨G,K1â\9d© ⊢ ➡*[h,0] K2 →
Q K1 K2 → Q (K1.ⓘ[I]) (K2.ⓘ[I])
) → (
∀I,K1,K2,V1,V2.
- â\9dªG,K1â\9d« â\8a¢ â\9e¡*[h,0] K2 â\86\92 â\9dªG,K1â\9d« ⊢ V1 ➡*[h,0] V2 →
+ â\9d¨G,K1â\9d© â\8a¢ â\9e¡*[h,0] K2 â\86\92 â\9d¨G,K1â\9d© ⊢ V1 ➡*[h,0] V2 →
Q K1 K2 → Q (K1.ⓑ[I]V1) (K2.ⓑ[I]V2)
) →
- â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡*[h,0] L2 → Q L1 L2.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ➡*[h,0] L2 → Q L1 L2.
/3 width=4 by lex_ind/ qed-.
(* Properties with t-bound context-sensitive rt-computarion for terms *******)
lemma lprs_cpms_trans (h) (n) (G) (T1:term) (T2:term):
- â\88\80L2. â\9dªG,L2â\9d« ⊢ T1 ➡*[h,n] T2 →
- â\88\80L1. â\9dªG,L1â\9d« â\8a¢ â\9e¡*[h,0] L2 â\86\92 â\9dªG,L1â\9d« ⊢ T1 ➡*[h,n] T2.
+ â\88\80L2. â\9d¨G,L2â\9d© ⊢ T1 ➡*[h,n] T2 →
+ â\88\80L1. â\9d¨G,L1â\9d© â\8a¢ â\9e¡*[h,0] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ T1 ➡*[h,n] T2.
#h #n #G #T1 #T2 #L2 #HT12 #L1 #H
@(lprs_ind_sn … H) -L1
/2 width=3 by lpr_cpms_trans/
qed-.
lemma lprs_cpm_trans (h) (n) (G) (T1:term) (T2:term):
- â\88\80L2. â\9dªG,L2â\9d« ⊢ T1 ➡[h,n] T2 →
- â\88\80L1. â\9dªG,L1â\9d« â\8a¢ â\9e¡*[h,0] L2 â\86\92 â\9dªG,L1â\9d« ⊢ T1 ➡*[h,n] T2.
+ â\88\80L2. â\9d¨G,L2â\9d© ⊢ T1 ➡[h,n] T2 →
+ â\88\80L1. â\9d¨G,L1â\9d© â\8a¢ â\9e¡*[h,0] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ T1 ➡*[h,n] T2.
/3 width=3 by lprs_cpms_trans, cpm_cpms/ qed-.
(* Basic_2A1: includes cprs_bind2 *)
lemma cpms_bind_alt (h) (n) (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h,0] V2 →
- â\88\80I,T1,T2. â\9dªG,L.â\93\91[I]V2â\9d« ⊢ T1 ➡*[h,n] T2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ➡*[h,n] ⓑ[p,I]V2.T2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ➡*[h,0] V2 →
+ â\88\80I,T1,T2. â\9d¨G,L.â\93\91[I]V2â\9d© ⊢ T1 ➡*[h,n] T2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ➡*[h,n] ⓑ[p,I]V2.T2.
/4 width=5 by lprs_cpms_trans, lprs_pair, cpms_bind/ qed.
(* Inversion lemmas with t-bound context-sensitive rt-computarion for terms *)
(* Basic_2A1: includes: cprs_inv_abst1 *)
(* Basic_2A1: uses: scpds_inv_abst1 *)
lemma cpms_inv_abst_sn (h) (n) (G) (L):
- â\88\80p,V1,T1,X2. â\9dªG,Lâ\9d« ⊢ ⓛ[p]V1.T1 ➡*[h,n] X2 →
- â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡*[h,0] V2 & â\9dªG,L.â\93\9bV1â\9d« ⊢ T1 ➡*[h,n] T2 & X2 = ⓛ[p]V2.T2.
+ â\88\80p,V1,T1,X2. â\9d¨G,Lâ\9d© ⊢ ⓛ[p]V1.T1 ➡*[h,n] X2 →
+ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡*[h,0] V2 & â\9d¨G,L.â\93\9bV1â\9d© ⊢ T1 ➡*[h,n] T2 & X2 = ⓛ[p]V2.T2.
#h #n #G #L #p #V1 #T1 #X2 #H
@(cpms_ind_dx … H) -X2 /2 width=5 by ex3_2_intro/
#n1 #n2 #X #X2 #_ * #V #T #HV1 #HT1 #H1 #H2 destruct
qed-.
lemma cpms_inv_abst_sn_cprs (h) (n) (p) (G) (L) (W):
- â\88\80T,X. â\9dªG,Lâ\9d« ⊢ ⓛ[p]W.T ➡*[h,n] X →
- â\88\83â\88\83U. â\9dªG,L.â\93\9bWâ\9d«â\8a¢ T â\9e¡*[h,n] U & â\9dªG,Lâ\9d« ⊢ ⓛ[p]W.U ➡*[h,0] X.
+ â\88\80T,X. â\9d¨G,Lâ\9d© ⊢ ⓛ[p]W.T ➡*[h,n] X →
+ â\88\83â\88\83U. â\9d¨G,L.â\93\9bWâ\9d©â\8a¢ T â\9e¡*[h,n] U & â\9d¨G,Lâ\9d© ⊢ ⓛ[p]W.U ➡*[h,0] X.
#h #n #p #G #L #W #T #X #H
elim (cpms_inv_abst_sn … H) -H #W0 #U #HW0 #HTU #H destruct
@(ex2_intro … HTU) /2 width=1 by cpms_bind/
(* Basic_2A1: includes: cprs_inv_abst *)
lemma cpms_inv_abst_bi (h) (n) (p1) (p2) (G) (L):
- â\88\80W1,W2,T1,T2. â\9dªG,Lâ\9d« ⊢ ⓛ[p1]W1.T1 ➡*[h,n] ⓛ[p2]W2.T2 →
- â\88§â\88§ p1 = p2 & â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡*[h,0] W2 & â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ➡*[h,n] T2.
+ â\88\80W1,W2,T1,T2. â\9d¨G,Lâ\9d© ⊢ ⓛ[p1]W1.T1 ➡*[h,n] ⓛ[p2]W2.T2 →
+ â\88§â\88§ p1 = p2 & â\9d¨G,Lâ\9d© â\8a¢ W1 â\9e¡*[h,0] W2 & â\9d¨G,L.â\93\9bW1â\9d© ⊢ T1 ➡*[h,n] T2.
#h #n #p1 #p2 #G #L #W1 #W2 #T1 #T2 #H
elim (cpms_inv_abst_sn … H) -H #W #T #HW1 #HT1 #H destruct
/2 width=1 by and3_intro/
(* Basic_1: was pr3_gen_abbr *)
(* Basic_2A1: includes: cprs_inv_abbr1 *)
lemma cpms_inv_abbr_sn_dx (h) (n) (G) (L):
- â\88\80p,V1,T1,X2. â\9dªG,Lâ\9d« ⊢ ⓓ[p]V1.T1 ➡*[h,n] X2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡*[h,0] V2 & â\9dªG,L.â\93\93V1â\9d« ⊢ T1 ➡*[h,n] T2 & X2 = ⓓ[p]V2.T2
- | â\88\83â\88\83T2. â\9dªG,L.â\93\93V1â\9d« ⊢ T1 ➡*[h,n] T2 & ⇧[1] X2 ≘ T2 & p = Ⓣ.
+ â\88\80p,V1,T1,X2. â\9d¨G,Lâ\9d© ⊢ ⓓ[p]V1.T1 ➡*[h,n] X2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡*[h,0] V2 & â\9d¨G,L.â\93\93V1â\9d© ⊢ T1 ➡*[h,n] T2 & X2 = ⓓ[p]V2.T2
+ | â\88\83â\88\83T2. â\9d¨G,L.â\93\93V1â\9d© ⊢ T1 ➡*[h,n] T2 & ⇧[1] X2 ≘ T2 & p = Ⓣ.
#h #n #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 (h) (n) (G) (L):
- â\88\80p1,p2,V1,W2,T1,T2. â\9dªG,Lâ\9d« ⊢ ⓓ[p1]V1.T1 ➡*[h,n] ⓛ[p2]W2.T2 →
- â\88\83â\88\83T. â\9dªG,L.â\93\93V1â\9d« ⊢ T1 ➡*[h,n] T & ⇧[1] ⓛ[p2]W2.T2 ≘ T & p1 = Ⓣ.
+ â\88\80p1,p2,V1,W2,T1,T2. â\9d¨G,Lâ\9d© ⊢ ⓓ[p1]V1.T1 ➡*[h,n] ⓛ[p2]W2.T2 →
+ â\88\83â\88\83T. â\9d¨G,L.â\93\93V1â\9d© ⊢ T1 ➡*[h,n] T & ⇧[1] ⓛ[p2]W2.T2 ≘ T & p1 = Ⓣ.
#h #n #G #L #p1 #p2 #V1 #W2 #T1 #T2 #H
elim (cpms_inv_abbr_sn_dx … H) -H *
[ #V #T #_ #_ #H destruct
(* Advanced properties ******************************************************)
(* Basic_2A1: was: lprs_pair2 *)
-lemma lprs_pair_dx (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡*[h,0] L2 →
- â\88\80V1,V2. â\9dªG,L2â\9d« ⊢ V1 ➡*[h,0] V2 →
- â\88\80I. â\9dªG,L1.â\93\91[I]V1â\9d« ⊢ ➡*[h,0] L2.ⓑ[I]V2.
+lemma lprs_pair_dx (h) (G): â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ➡*[h,0] L2 →
+ â\88\80V1,V2. â\9d¨G,L2â\9d© ⊢ V1 ➡*[h,0] V2 →
+ â\88\80I. â\9d¨G,L1.â\93\91[I]V1â\9d© ⊢ ➡*[h,0] L2.ⓑ[I]V2.
/3 width=3 by lprs_pair, lprs_cpms_trans/ qed.
(* Properties on context-sensitive parallel r-computation for terms *********)
-lemma lprs_cprs_conf_dx (h) (G): â\88\80L0.â\88\80T0,T1:term. â\9dªG,L0â\9d« ⊢ T0 ➡*[h,0] T1 →
- â\88\80L1. â\9dªG,L0â\9d« ⊢ ➡*[h,0] L1 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[h,0] T & â\9dªG,L1â\9d« ⊢ T0 ➡*[h,0] T.
+lemma lprs_cprs_conf_dx (h) (G): â\88\80L0.â\88\80T0,T1:term. â\9d¨G,L0â\9d© ⊢ T0 ➡*[h,0] T1 →
+ â\88\80L1. â\9d¨G,L0â\9d© ⊢ ➡*[h,0] L1 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ T1 â\9e¡*[h,0] T & â\9d¨G,L1â\9d© ⊢ T0 ➡*[h,0] T.
#h #G #L0 #T0 #T1 #HT01 #L1 #H
@(lprs_ind_dx … H) -L1 /2 width=3 by ex2_intro/
#L #L1 #_ #HL1 * #T #HT1 #HT0 -L0
/3 width=5 by cprs_trans, ex2_intro/
qed-.
-lemma lprs_cpr_conf_dx (h) (G): â\88\80L0. â\88\80T0,T1:term. â\9dªG,L0â\9d« ⊢ T0 ➡[h,0] T1 →
- â\88\80L1. â\9dªG,L0â\9d« ⊢ ➡*[h,0] L1 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[h,0] T & â\9dªG,L1â\9d« ⊢ T0 ➡*[h,0] T.
+lemma lprs_cpr_conf_dx (h) (G): â\88\80L0. â\88\80T0,T1:term. â\9d¨G,L0â\9d© ⊢ T0 ➡[h,0] T1 →
+ â\88\80L1. â\9d¨G,L0â\9d© ⊢ ➡*[h,0] L1 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ T1 â\9e¡*[h,0] T & â\9d¨G,L1â\9d© ⊢ T0 ➡*[h,0] T.
/3 width=3 by lprs_cprs_conf_dx, cpm_cpms/ qed-.
(* Note: this can be proved on its own using lprs_ind_sn *)
-lemma lprs_cprs_conf_sn (h) (G): â\88\80L0. â\88\80T0,T1:term. â\9dªG,L0â\9d« ⊢ T0 ➡*[h,0] T1 →
- â\88\80L1. â\9dªG,L0â\9d« ⊢ ➡*[h,0] L1 →
- â\88\83â\88\83T. â\9dªG,L0â\9d« â\8a¢ T1 â\9e¡*[h,0] T & â\9dªG,L1â\9d« ⊢ T0 ➡*[h,0] T.
+lemma lprs_cprs_conf_sn (h) (G): â\88\80L0. â\88\80T0,T1:term. â\9d¨G,L0â\9d© ⊢ T0 ➡*[h,0] T1 →
+ â\88\80L1. â\9d¨G,L0â\9d© ⊢ ➡*[h,0] L1 →
+ â\88\83â\88\83T. â\9d¨G,L0â\9d© â\8a¢ T1 â\9e¡*[h,0] T & â\9d¨G,L1â\9d© ⊢ T0 ➡*[h,0] T.
#h #G #L0 #T0 #T1 #HT01 #L1 #HL01
elim (lprs_cprs_conf_dx … HT01 … HL01) -HT01
/3 width=3 by lprs_cpms_trans, ex2_intro/
qed-.
-lemma lprs_cpr_conf_sn (h) (G): â\88\80L0. â\88\80T0,T1:term. â\9dªG,L0â\9d« ⊢ T0 ➡[h,0] T1 →
- â\88\80L1. â\9dªG,L0â\9d« ⊢ ➡*[h,0] L1 →
- â\88\83â\88\83T. â\9dªG,L0â\9d« â\8a¢ T1 â\9e¡*[h,0] T & â\9dªG,L1â\9d« ⊢ T0 ➡*[h,0] T.
+lemma lprs_cpr_conf_sn (h) (G): â\88\80L0. â\88\80T0,T1:term. â\9d¨G,L0â\9d© ⊢ T0 ➡[h,0] T1 →
+ â\88\80L1. â\9d¨G,L0â\9d© ⊢ ➡*[h,0] L1 →
+ â\88\83â\88\83T. â\9d¨G,L0â\9d© â\8a¢ T1 â\9e¡*[h,0] T & â\9d¨G,L1â\9d© ⊢ T0 ➡*[h,0] T.
/3 width=3 by lprs_cprs_conf_sn, cpm_cpms/ qed-.
(* Properties with contextual transitive closure ****************************)
lemma lprs_CTC (h) (G):
- â\88\80L1,L2. L1⪤[CTC â\80¦ (λL. cpm h G L 0)] L2 â\86\92 â\9dªG,L1â\9d«⊢ ➡*[h,0] L2.
+ â\88\80L1,L2. L1⪤[CTC â\80¦ (λL. cpm h G L 0)] L2 â\86\92 â\9d¨G,L1â\9d©⊢ ➡*[h,0] L2.
/3 width=3 by cprs_CTC, lex_co/ qed.
(* Inversion lemmas with contextual transitive closure **********************)
lemma lprs_inv_CTC (h) (G):
- â\88\80L1,L2. â\9dªG,L1â\9d«⊢ ➡*[h,0] L2 → L1⪤[CTC … (λL. cpm h G L 0)] L2.
+ â\88\80L1,L2. â\9d¨G,L1â\9d©⊢ ➡*[h,0] L2 → L1⪤[CTC … (λL. cpm h G L 0)] L2.
/3 width=3 by cprs_inv_CTC, lex_co/ qed-.
(* Forward lemmas with length for local environments ************************)
-lemma lprs_fwd_length (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡*[h,0] L2 → |L1| = |L2|.
+lemma lprs_fwd_length (h) (G): â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ➡*[h,0] L2 → |L1| = |L2|.
/2 width=2 by lex_fwd_length/ qed-.
(* Basic_2A1: was: lprs_ind_dx *)
lemma lprs_ind_sn (h) (G) (L2):
∀Q:predicate lenv. Q L2 →
- (â\88\80L1,L. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h,0] L â\86\92 â\9dªG,Lâ\9d« ⊢ ➡*[h,0] L2 → Q L → Q L1) →
- â\88\80L1. â\9dªG,L1â\9d« ⊢ ➡*[h,0] L2 → Q L1.
+ (â\88\80L1,L. â\9d¨G,L1â\9d© â\8a¢ â\9e¡[h,0] L â\86\92 â\9d¨G,Lâ\9d© ⊢ ➡*[h,0] L2 → Q L → Q L1) →
+ â\88\80L1. â\9d¨G,L1â\9d© ⊢ ➡*[h,0] L2 → Q L1.
/4 width=8 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, cpr_refl, lex_CTC_ind_sn/ qed-.
(* Basic_2A1: was: lprs_ind *)
lemma lprs_ind_dx (h) (G) (L1):
∀Q:predicate lenv. Q L1 →
- (â\88\80L,L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡*[h,0] L â\86\92 â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 → Q L → Q L2) →
- â\88\80L2. â\9dªG,L1â\9d« ⊢ ➡*[h,0] L2 → Q L2.
+ (â\88\80L,L2. â\9d¨G,L1â\9d© â\8a¢ â\9e¡*[h,0] L â\86\92 â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 → Q L → Q L2) →
+ â\88\80L2. â\9d¨G,L1â\9d© ⊢ ➡*[h,0] L2 → Q L2.
/4 width=8 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, cpr_refl, lex_CTC_ind_dx/ qed-.
(* Properties with extended rt-transition for full local environments *******)
lemma lpr_lprs (h) (G):
- â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ➡*[h,0] L2.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ➡*[h,0] L2.
/4 width=3 by lprs_CTC, lpr_cprs_trans, lex_CTC_inj/ qed.
(* Basic_2A1: was: lprs_strap2 *)
lemma lprs_step_sn (h) (G):
- â\88\80L1,L. â\9dªG,L1â\9d« ⊢ ➡[h,0] L →
- â\88\80L2.â\9dªG,Lâ\9d« â\8a¢ â\9e¡*[h,0] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ➡*[h,0] L2.
+ â\88\80L1,L. â\9d¨G,L1â\9d© ⊢ ➡[h,0] L →
+ â\88\80L2.â\9d¨G,Lâ\9d© â\8a¢ â\9e¡*[h,0] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ➡*[h,0] L2.
/4 width=3 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, lex_CTC_step_sn/ qed-.
(* Basic_2A1: was: lpxs_strap1 *)
lemma lprs_step_dx (h) (G):
- â\88\80L1,L. â\9dªG,L1â\9d« ⊢ ➡*[h,0] L →
- â\88\80L2. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ➡*[h,0] L2.
+ â\88\80L1,L. â\9d¨G,L1â\9d© ⊢ ➡*[h,0] L →
+ â\88\80L2. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ➡*[h,0] L2.
/4 width=3 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, lex_CTC_step_dx/ qed-.
lemma lprs_strip (h) (G):
(* Basic_2A1: was: lprs_lpxs *)
(* Note: original proof uses lpr_fwd_lpx and monotonic_TC *)
lemma lprs_fwd_lpxs (h) (G):
- â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡*[h,0] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈* L2.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© â\8a¢ â\9e¡*[h,0] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈* L2.
/3 width=3 by cpms_fwd_cpxs, lex_co/ qed-.
(* Properties with transitive closure ***************************************)
lemma lprs_TC (h) (G):
- â\88\80L1,L2. TC â\80¦ (lex (λL.cpm h G L 0)) L1 L2 â\86\92 â\9dªG,L1â\9d«⊢ ➡*[h,0] L2.
+ â\88\80L1,L2. TC â\80¦ (lex (λL.cpm h G L 0)) L1 L2 â\86\92 â\9d¨G,L1â\9d©⊢ ➡*[h,0] L2.
/4 width=3 by lprs_CTC, lex_CTC, lpr_cprs_trans/ qed.
(* Inversion lemmas with transitive closure *********************************)
lemma lprs_inv_TC (h) (G):
- â\88\80L1,L2. â\9dªG,L1â\9d«⊢ ➡*[h,0] L2 → TC … (lex (λL.cpm h G L 0)) L1 L2.
+ â\88\80L1,L2. â\9d¨G,L1â\9d©⊢ ➡*[h,0] L2 → TC … (lex (λL.cpm h G L 0)) L1 L2.
/3 width=3 by lprs_inv_CTC, lex_inv_CTC/ qed-.
(* Basic_2A1: uses: lpxs_pair_refl *)
lemma lpxs_bind_refl_dx (G):
- â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈* L2 →
- â\88\80I. â\9dªG,L1.â\93\98[I]â\9d« ⊢ ⬈* L2.ⓘ[I].
+ â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ⬈* L2 →
+ â\88\80I. â\9d¨G,L1.â\93\98[I]â\9d© ⊢ ⬈* L2.ⓘ[I].
/2 width=1 by lex_bind_refl_dx/ qed.
lemma lpxs_pair (G):
- â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈* L2 →
- â\88\80V1,V2. â\9dªG,L1â\9d« ⊢ V1 ⬈* V2 →
- â\88\80I. â\9dªG,L1.â\93\91[I]V1â\9d« ⊢ ⬈* L2.ⓑ[I]V2.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ⬈* L2 →
+ â\88\80V1,V2. â\9d¨G,L1â\9d© ⊢ V1 ⬈* V2 →
+ â\88\80I. â\9d¨G,L1.â\93\91[I]V1â\9d© ⊢ ⬈* L2.ⓑ[I]V2.
/2 width=1 by lex_pair/ qed.
lemma lpxs_refl (G):
(* Basic_2A1: was: lpxs_inv_atom1 *)
lemma lpxs_inv_atom_sn (G):
- â\88\80L2. â\9dªG,â\8b\86â\9d« ⊢ ⬈* L2 → L2 = ⋆.
+ â\88\80L2. â\9d¨G,â\8b\86â\9d© ⊢ ⬈* L2 → L2 = ⋆.
/2 width=2 by lex_inv_atom_sn/ qed-.
lemma lpxs_inv_bind_sn (G):
- â\88\80I1,L2,K1. â\9dªG,K1.â\93\98[I1]â\9d« ⊢ ⬈* L2 →
- â\88\83â\88\83I2,K2. â\9dªG,K1â\9d« â\8a¢ â¬\88* K2 & â\9dªG,K1â\9d« ⊢ I1 ⬈* I2 & L2 = K2.ⓘ[I2].
+ â\88\80I1,L2,K1. â\9d¨G,K1.â\93\98[I1]â\9d© ⊢ ⬈* L2 →
+ â\88\83â\88\83I2,K2. â\9d¨G,K1â\9d© â\8a¢ â¬\88* K2 & â\9d¨G,K1â\9d© ⊢ I1 ⬈* I2 & L2 = K2.ⓘ[I2].
/2 width=1 by lex_inv_bind_sn/ qed-.
(* Basic_2A1: was: lpxs_inv_pair1 *)
lemma lpxs_inv_pair_sn (G):
- â\88\80I,L2,K1,V1. â\9dªG,K1.â\93\91[I]V1â\9d« ⊢ ⬈* L2 →
- â\88\83â\88\83K2,V2. â\9dªG,K1â\9d« â\8a¢ â¬\88* K2 & â\9dªG,K1â\9d« ⊢ V1 ⬈* V2 & L2 = K2.ⓑ[I]V2.
+ â\88\80I,L2,K1,V1. â\9d¨G,K1.â\93\91[I]V1â\9d© ⊢ ⬈* L2 →
+ â\88\83â\88\83K2,V2. â\9d¨G,K1â\9d© â\8a¢ â¬\88* K2 & â\9d¨G,K1â\9d© ⊢ V1 ⬈* V2 & L2 = K2.ⓑ[I]V2.
/2 width=1 by lex_inv_pair_sn/ qed-.
(* Basic_2A1: was: lpxs_inv_atom2 *)
lemma lpxs_inv_atom_dx (G):
- â\88\80L1. â\9dªG,L1â\9d« ⊢ ⬈* ⋆ → L1 = ⋆.
+ â\88\80L1. â\9d¨G,L1â\9d© ⊢ ⬈* ⋆ → L1 = ⋆.
/2 width=2 by lex_inv_atom_dx/ qed-.
(* Basic_2A1: was: lpxs_inv_pair2 *)
lemma lpxs_inv_pair_dx (G):
- â\88\80I,L1,K2,V2. â\9dªG,L1â\9d« ⊢ ⬈* K2.ⓑ[I]V2 →
- â\88\83â\88\83K1,V1. â\9dªG,K1â\9d« â\8a¢ â¬\88* K2 & â\9dªG,K1â\9d« ⊢ V1 ⬈* V2 & L1 = K1.ⓑ[I]V1.
+ â\88\80I,L1,K2,V2. â\9d¨G,L1â\9d© ⊢ ⬈* K2.ⓑ[I]V2 →
+ â\88\83â\88\83K1,V1. â\9d¨G,K1â\9d© â\8a¢ â¬\88* K2 & â\9d¨G,K1â\9d© ⊢ V1 ⬈* V2 & L1 = K1.ⓑ[I]V1.
/2 width=1 by lex_inv_pair_dx/ qed-.
(* Basic eliminators ********************************************************)
lemma lpxs_ind (G) (Q:relation …):
Q (⋆) (⋆) → (
∀I,K1,K2.
- â\9dªG,K1â\9d« ⊢ ⬈* K2 →
+ â\9d¨G,K1â\9d© ⊢ ⬈* K2 →
Q K1 K2 → Q (K1.ⓘ[I]) (K2.ⓘ[I])
) → (
∀I,K1,K2,V1,V2.
- â\9dªG,K1â\9d« â\8a¢ â¬\88* K2 â\86\92 â\9dªG,K1â\9d« ⊢ V1 ⬈* V2 →
+ â\9d¨G,K1â\9d© â\8a¢ â¬\88* K2 â\86\92 â\9d¨G,K1â\9d© ⊢ V1 ⬈* V2 →
Q K1 K2 → Q (K1.ⓑ[I]V1) (K2.ⓑ[I]V2)
) →
- â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈* L2 → Q L1 L2.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ⬈* L2 → Q L1 L2.
/3 width=4 by lex_ind/ qed-.
(* Basic_2A1: was: cpxs_bind2 *)
lemma cpxs_bind_alt (G):
- â\88\80L,V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈* V2 →
- â\88\80I,T1,T2. â\9dªG,L.â\93\91[I]V2â\9d« ⊢ T1 ⬈* T2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ⬈* ⓑ[p,I]V2.T2.
+ â\88\80L,V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬈* V2 →
+ â\88\80I,T1,T2. â\9d¨G,L.â\93\91[I]V2â\9d© ⊢ T1 ⬈* T2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ⬈* ⓑ[p,I]V2.T2.
/4 width=5 by lpxs_cpxs_trans, lpxs_pair, cpxs_bind/ qed.
(* Inversion lemmas with context-sensitive ext rt-computation for terms *****)
lemma cpxs_inv_abst1 (G):
- â\88\80p,L,V1,T1,U2. â\9dªG,Lâ\9d« ⊢ ⓛ[p]V1.T1 ⬈* U2 →
- â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88* V2 & â\9dªG,L.â\93\9bV1â\9d« ⊢ T1 ⬈* T2 & U2 = ⓛ[p]V2.T2.
+ â\88\80p,L,V1,T1,U2. â\9d¨G,Lâ\9d© ⊢ ⓛ[p]V1.T1 ⬈* U2 →
+ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88* V2 & â\9d¨G,L.â\93\9bV1â\9d© ⊢ T1 ⬈* T2 & U2 = ⓛ[p]V2.T2.
#G #p #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 /2 width=5 by ex3_2_intro/
#U0 #U2 #_ #HU02 * #V0 #T0 #HV10 #HT10 #H destruct
elim (cpx_inv_abst1 … HU02) -HU02 #V2 #T2 #HV02 #HT02 #H destruct
(* Basic_2A1: was: cpxs_inv_abbr1 *)
lemma cpxs_inv_abbr1_dx (p) (G) (L):
- â\88\80V1,T1,U2. â\9dªG,Lâ\9d« ⊢ ⓓ[p]V1.T1 ⬈* U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88* V2 & â\9dªG,L.â\93\93V1â\9d« ⊢ T1 ⬈* T2 & U2 = ⓓ[p]V2.T2
- | â\88\83â\88\83T2. â\9dªG,L.â\93\93V1â\9d« ⊢ T1 ⬈* T2 & ⇧[1] U2 ≘ T2 & p = Ⓣ.
+ â\88\80V1,T1,U2. â\9d¨G,Lâ\9d© ⊢ ⓓ[p]V1.T1 ⬈* U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88* V2 & â\9d¨G,L.â\93\93V1â\9d© ⊢ T1 ⬈* T2 & U2 = ⓓ[p]V2.T2
+ | â\88\83â\88\83T2. â\9d¨G,L.â\93\93V1â\9d© ⊢ T1 ⬈* T2 & ⇧[1] U2 ≘ T2 & p = Ⓣ.
#p #G #L #V1 #T1 #U2 #H
@(cpxs_ind … H) -U2 /3 width=5 by ex3_2_intro, or_introl/
#U0 #U2 #_ #HU02 * *
lemma feqg_lpxs_trans (S):
reflexive … S → symmetric … S →
- â\88\80G1,G2,L1,L0,T1,T2. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L0,T2â\9d« →
- â\88\80L2. â\9dªG2,L0â\9d« ⊢⬈* L2 →
- â\88\83â\88\83L. â\9dªG1,L1â\9d« â\8a¢â¬\88* L & â\9dªG1,L,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L0,T1,T2. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L0,T2â\9d© →
+ â\88\80L2. â\9d¨G2,L0â\9d© ⊢⬈* L2 →
+ â\88\83â\88\83L. â\9d¨G1,L1â\9d© â\8a¢â¬\88* L & â\9d¨G1,L,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d©.
#S #H1S #H2S #G1 #G2 #L1 #L0 #T1 #T2 #H1 #L2 #HL02
elim (feqg_inv_gen_dx … H1) -H1 // #HG #HL10 #HT12 destruct
elim (reqg_lpxs_trans … HL02 … HL10) -L0 // #L0 #HL10 #HL02
(* Forward lemmas with length for local environments ************************)
lemma lpxs_fwd_length (G):
- â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈* L2 → |L1| = |L2|.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ⬈* L2 → |L1| = |L2|.
/2 width=2 by lex_fwd_length/ qed-.
(* Properties with extended rt-transition for full local environments *******)
lemma lpx_lpxs (G):
- â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â¬\88 L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈* L2.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© â\8a¢ â¬\88 L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈* L2.
/3 width=3 by lpx_cpxs_trans, lex_CTC_inj/ qed.
(* Basic_2A1: was: lpxs_strap2 *)
lemma lpxs_step_sn (G):
- â\88\80L1,L. â\9dªG,L1â\9d« ⊢ ⬈ L →
- â\88\80L2. â\9dªG,Lâ\9d« â\8a¢ â¬\88* L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈* L2.
+ â\88\80L1,L. â\9d¨G,L1â\9d© ⊢ ⬈ L →
+ â\88\80L2. â\9d¨G,Lâ\9d© â\8a¢ â¬\88* L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈* L2.
/3 width=3 by lpx_cpxs_trans, lex_CTC_step_sn/ qed-.
(* Basic_2A1: was: lpxs_strap1 *)
lemma lpxs_step_dx (G):
- â\88\80L1,L. â\9dªG,L1â\9d« ⊢ ⬈* L →
- â\88\80L2. â\9dªG,Lâ\9d« â\8a¢ â¬\88 L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈* L2.
+ â\88\80L1,L. â\9d¨G,L1â\9d© ⊢ ⬈* L →
+ â\88\80L2. â\9d¨G,Lâ\9d© â\8a¢ â¬\88 L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈* L2.
/3 width=3 by lpx_cpxs_trans, lex_CTC_step_dx/ qed-.
(* Eliminators with extended rt-transition for full local environments ******)
(* Basic_2A1: was: lpxs_ind_dx *)
lemma lpxs_ind_sn (G) (L2) (Q:predicate …):
Q L2 →
- (â\88\80L1,L. â\9dªG,L1â\9d« â\8a¢ â¬\88 L â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈* L2 → Q L → Q L1) →
- â\88\80L1. â\9dªG,L1â\9d« ⊢ ⬈* L2 → Q L1.
+ (â\88\80L1,L. â\9d¨G,L1â\9d© â\8a¢ â¬\88 L â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈* L2 → Q L → Q L1) →
+ â\88\80L1. â\9d¨G,L1â\9d© ⊢ ⬈* L2 → Q L1.
/3 width=7 by lpx_cpxs_trans, cpx_refl, lex_CTC_ind_sn/ qed-.
(* Basic_2A1: was: lpxs_ind *)
lemma lpxs_ind_dx (G) (L1) (Q:predicate …):
Q L1 →
- (â\88\80L,L2. â\9dªG,L1â\9d« â\8a¢ â¬\88* L â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈ L2 → Q L → Q L2) →
- â\88\80L2. â\9dªG,L1â\9d« ⊢ ⬈* L2 → Q L2.
+ (â\88\80L,L2. â\9d¨G,L1â\9d© â\8a¢ â¬\88* L â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈ L2 → Q L → Q L2) →
+ â\88\80L2. â\9d¨G,L1â\9d© ⊢ ⬈* L2 → Q L2.
/3 width=7 by lpx_cpxs_trans, cpx_refl, lex_CTC_ind_dx/ qed-.
(* Properties with context-sensitive extended rt-transition for terms *******)
(* Basic_2A1: was: lpxs_pair2 *)
lemma lpxs_pair_dx (G):
- â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈* L2 →
- â\88\80V1,V2. â\9dªG,L2â\9d« ⊢ V1 ⬈* V2 →
- â\88\80I. â\9dªG,L1.â\93\91[I]V1â\9d« ⊢ ⬈* L2.ⓑ[I]V2.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ⬈* L2 →
+ â\88\80V1,V2. â\9d¨G,L2â\9d© ⊢ V1 ⬈* V2 →
+ â\88\80I. â\9d¨G,L1.â\93\91[I]V1â\9d© ⊢ ⬈* L2.ⓑ[I]V2.
/3 width=3 by lpxs_pair, lpxs_cpxs_trans/ qed.
(* Basic_2A1: uses: lleq_lpxs_trans *)
lemma reqg_lpxs_trans (S) (G) (T:term):
reflexive … S → symmetric … S →
- â\88\80L2,K2. â\9dªG,L2â\9d« ⊢ ⬈* K2 → ∀L1. L1 ≛[S,T] L2 →
- â\88\83â\88\83K1. â\9dªG,L1â\9d« ⊢ ⬈* K1 & K1 ≛[S,T] K2.
+ â\88\80L2,K2. â\9d¨G,L2â\9d© ⊢ ⬈* K2 → ∀L1. L1 ≛[S,T] L2 →
+ â\88\83â\88\83K1. â\9d¨G,L1â\9d© ⊢ ⬈* K1 & K1 ≛[S,T] K2.
#S #G #T #H1S #H2S #L2 #K2 #H @(lpxs_ind_sn … H) -L2 /2 width=3 by ex2_intro/
#L #L2 #HL2 #_ #IH #L1 #HT
elim (reqg_lpx_trans … HL2 … HT) // -L #L #HL1 #HT
lemma lpxs_rneqg_inv_step_sn (S) (G) (T:term):
reflexive … S → symmetric … S → Transitive … S →
(∀s1,s2. Decidable (S s1 s2)) →
- â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈* L2 → (L1 ≛[S,T] L2 → ⊥) →
- â\88\83â\88\83L,L0. â\9dªG,L1â\9d« â\8a¢ â¬\88 L & L1 â\89\9b[S,T] L â\86\92 â\8a¥ & â\9dªG,Lâ\9d« ⊢ ⬈* L0 & L0 ≛[S,T] L2.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ⬈* L2 → (L1 ≛[S,T] L2 → ⊥) →
+ â\88\83â\88\83L,L0. â\9d¨G,L1â\9d© â\8a¢ â¬\88 L & L1 â\89\9b[S,T] L â\86\92 â\8a¥ & â\9d¨G,Lâ\9d© ⊢ ⬈* L0 & L0 ≛[S,T] L2.
#S #G #T #H1S #H2S #H3S #H4S #L1 #L2 #H @(lpxs_ind_sn … H) -L1
[ #H elim H -H /2 width=1 by reqg_refl/
| #L1 #L #H1 #H2 #IH2 #H12 elim (reqg_dec S … L1 L T) // #H
(* Basic_2A1: uses: lsx_ind *)
lemma rsx_ind (G) (T) (Q:predicate …):
(∀L1. G ⊢ ⬈*𝐒[T] L1 →
- (â\88\80L2. â\9dªG,L1â\9d« ⊢ ⬈ L2 → (L1 ≅[T] L2 → ⊥) → Q L2) →
+ (â\88\80L2. â\9d¨G,L1â\9d© ⊢ ⬈ L2 → (L1 ≅[T] L2 → ⊥) → Q L2) →
Q L1
) →
∀L. G ⊢ ⬈*𝐒[T] L → Q L.
(* Basic_2A1: uses: lsx_intro *)
lemma rsx_intro (G) (T):
∀L1.
- (â\88\80L2. â\9dªG,L1â\9d« ⊢ ⬈ L2 → (L1 ≅[T] L2 → ⊥) → G ⊢ ⬈*𝐒[T] L2) →
+ (â\88\80L2. â\9d¨G,L1â\9d© ⊢ ⬈ L2 → (L1 ≅[T] L2 → ⊥) → G ⊢ ⬈*𝐒[T] L2) →
G ⊢ ⬈*𝐒[T] L1.
/5 width=1 by SN_intro/ qed.
fact rsx_fwd_lref_pair_csx_aux (G):
∀L. G ⊢ ⬈*𝐒[#0] L →
- â\88\80I,K,V. L = K.â\93\91[I]V â\86\92 â\9dªG,Kâ\9d« ⊢ ⬈*𝐒 V.
+ â\88\80I,K,V. L = K.â\93\91[I]V â\86\92 â\9d¨G,Kâ\9d© ⊢ ⬈*𝐒 V.
#G #L #H
@(rsx_ind … H) -L #L #_ #IH #I #K #V1 #H destruct
@csx_intro #V2 #HV12 #HnV12
qed-.
lemma rsx_fwd_lref_pair_csx (G):
- â\88\80I,K,V. G â\8a¢ â¬\88*ð\9d\90\92[#0] K.â\93\91[I]V â\86\92 â\9dªG,Kâ\9d« ⊢ ⬈*𝐒 V.
+ â\88\80I,K,V. G â\8a¢ â¬\88*ð\9d\90\92[#0] K.â\93\91[I]V â\86\92 â\9d¨G,Kâ\9d© ⊢ ⬈*𝐒 V.
/2 width=4 by rsx_fwd_lref_pair_csx_aux/ qed-.
lemma rsx_fwd_lref_pair_csx_drops (G):
- â\88\80I,K,V,i,L. â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 G â\8a¢ â¬\88*ð\9d\90\92[#i] L â\86\92 â\9dªG,Kâ\9d« ⊢ ⬈*𝐒 V.
+ â\88\80I,K,V,i,L. â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 G â\8a¢ â¬\88*ð\9d\90\92[#i] L â\86\92 â\9d¨G,Kâ\9d© ⊢ ⬈*𝐒 V.
#G #I #K #V #i elim i -i
[ #L #H >(drops_fwd_isid … H) -H
/2 width=2 by rsx_fwd_lref_pair_csx/
lemma rsx_inv_lref_pair (G):
∀I,K,V. G ⊢ ⬈*𝐒[#0] K.ⓑ[I]V →
- â\88§â\88§ â\9dªG,Kâ\9d« ⊢ ⬈*𝐒 V & G ⊢ ⬈*𝐒[V] K.
+ â\88§â\88§ â\9d¨G,Kâ\9d© ⊢ ⬈*𝐒 V & G ⊢ ⬈*𝐒[V] K.
/3 width=2 by rsx_fwd_lref_pair_csx, rsx_fwd_pair, conj/ qed-.
lemma rsx_inv_lref_pair_drops (G):
∀I,K,V,i,L. ⇩[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*𝐒[#i] L →
- â\88§â\88§ â\9dªG,Kâ\9d« ⊢ ⬈*𝐒 V & G ⊢ ⬈*𝐒[V] K.
+ â\88§â\88§ â\9d¨G,Kâ\9d© ⊢ ⬈*𝐒 V & G ⊢ ⬈*𝐒[V] K.
/3 width=5 by rsx_fwd_lref_pair_csx_drops, rsx_fwd_lref_pair_drops, conj/ qed-.
lemma rsx_inv_lref_drops (G):
∀L,i. G ⊢ ⬈*𝐒[#i] L →
∨∨ ⇩*[Ⓕ,𝐔❨i❩] L ≘ ⋆
| ∃∃I,K. ⇩[i] L ≘ K.ⓤ[I]
- | â\88\83â\88\83I,K,V. â\87©[i] L â\89\98 K.â\93\91[I]V & â\9dªG,Kâ\9d« ⊢ ⬈*𝐒 V & G ⊢ ⬈*𝐒[V] K.
+ | â\88\83â\88\83I,K,V. â\87©[i] L â\89\98 K.â\93\91[I]V & â\9d¨G,Kâ\9d© ⊢ ⬈*𝐒 V & G ⊢ ⬈*𝐒[V] K.
#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/
(* Note: swapping the eliminations to avoid rsx_cpx_trans: no solution found *)
(* Basic_2A1: uses: lsx_lref_be_lpxs *)
lemma rsx_lref_pair_lpxs (G):
- â\88\80K1,V. â\9dªG,K1â\9d« ⊢ ⬈*𝐒 V →
- â\88\80K2. G â\8a¢ â¬\88*ð\9d\90\92[V] K2 â\86\92 â\9dªG,K1â\9d« ⊢ ⬈* K2 →
+ â\88\80K1,V. â\9d¨G,K1â\9d© ⊢ ⬈*𝐒 V →
+ â\88\80K2. G â\8a¢ â¬\88*ð\9d\90\92[V] K2 â\86\92 â\9d¨G,K1â\9d© ⊢ ⬈* K2 →
∀I. G ⊢ ⬈*𝐒[#0] K2.ⓑ[I]V.
#G #K1 #V #H
@(csx_ind_cpxs … H) -V #V0 #_ #IHV0 #K2 #H
qed.
lemma rsx_lref_pair (G):
- â\88\80K,V. â\9dªG,Kâ\9d« ⊢ ⬈*𝐒 V → G ⊢ ⬈*𝐒[V] K → ∀I. G ⊢ ⬈*𝐒[#0] K.ⓑ[I]V.
+ â\88\80K,V. â\9d¨G,Kâ\9d© ⊢ ⬈*𝐒 V → G ⊢ ⬈*𝐒[V] K → ∀I. G ⊢ ⬈*𝐒[#0] K.ⓑ[I]V.
/2 width=3 by rsx_lref_pair_lpxs/ qed.
(* Basic_2A1: uses: lsx_lref_be *)
lemma rsx_lref_pair_drops (G):
- â\88\80K,V. â\9dªG,Kâ\9d« ⊢ ⬈*𝐒 V → G ⊢ ⬈*𝐒[V] K →
+ â\88\80K,V. â\9d¨G,Kâ\9d© ⊢ ⬈*𝐒 V → G ⊢ ⬈*𝐒[V] K →
∀I,i,L. ⇩[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*𝐒[#i] L.
#G #K #V #HV #HK #I #i elim i -i
[ #L #H >(drops_fwd_isid … H) -H /2 width=1 by rsx_lref_pair/
(* Basic_2A1: uses: csx_lsx *)
theorem csx_rsx (G):
- â\88\80L,T. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T → G ⊢ ⬈*𝐒[T] L.
+ â\88\80L,T. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T → G ⊢ ⬈*𝐒[T] L.
#G #L #T @(fqup_wf_ind_eq (Ⓣ) … G L T) -G -L -T
#Z #Y #X #IH #G #L * *
[ //
(* Basic_2A1: uses: lsx_intro_alt *)
lemma rsx_intro_lpxs (G):
- â\88\80L1,T. (â\88\80L2. â\9dªG,L1â\9d« ⊢ ⬈* L2 → (L1 ≅[T] L2 → ⊥) → G ⊢ ⬈*𝐒[T] L2) →
+ â\88\80L1,T. (â\88\80L2. â\9d¨G,L1â\9d© ⊢ ⬈* L2 → (L1 ≅[T] L2 → ⊥) → G ⊢ ⬈*𝐒[T] L2) →
G ⊢ ⬈*𝐒[T] L1.
/4 width=1 by lpx_lpxs, rsx_intro/ qed-.
(* Basic_2A1: uses: lsx_lpxs_trans *)
lemma rsx_lpxs_trans (G):
∀L1,T. G ⊢ ⬈*𝐒[T] L1 →
- â\88\80L2. â\9dªG,L1â\9d« ⊢ ⬈* L2 → G ⊢ ⬈*𝐒[T] L2.
+ â\88\80L2. â\9d¨G,L1â\9d© ⊢ ⬈* L2 → G ⊢ ⬈*𝐒[T] L2.
#G #L1 #T #HL1 #L2 #H @(lpxs_ind_dx … H) -L2
/2 width=3 by rsx_lpx_trans/
qed-.
lemma rsx_ind_lpxs_reqx (G) (T) (Q:predicate lenv):
(∀L1. G ⊢ ⬈*𝐒[T] L1 →
- (â\88\80L2. â\9dªG,L1â\9d« ⊢ ⬈* L2 → (L1 ≅[T] L2 → ⊥) → Q L2) →
+ (â\88\80L2. â\9d¨G,L1â\9d© ⊢ ⬈* L2 → (L1 ≅[T] L2 → ⊥) → Q L2) →
Q L1
) →
∀L1. G ⊢ ⬈*𝐒[T] L1 →
- â\88\80L0. â\9dªG,L1â\9d« ⊢ ⬈* L0 → ∀L2. L0 ≅[T] L2 → Q L2.
+ â\88\80L0. â\9d¨G,L1â\9d© ⊢ ⬈* L0 → ∀L2. L0 ≅[T] L2 → Q L2.
#G #T #Q #IH #L1 #H @(rsx_ind … H) -L1
#L1 #HL1 #IH1 #L0 #HL10 #L2 #HL02
@IH -IH /3 width=3 by rsx_lpxs_trans, rsx_reqx_trans/ -HL1 #K2 #HLK2 #HnLK2
(* Basic_2A1: uses: lsx_ind_alt *)
lemma rsx_ind_lpxs (G) (T) (Q:predicate lenv):
(∀L1. G ⊢ ⬈*𝐒[T] L1 →
- (â\88\80L2. â\9dªG,L1â\9d« ⊢ ⬈* L2 → (L1 ≅[T] L2 → ⊥) → Q L2) →
+ (â\88\80L2. â\9d¨G,L1â\9d© ⊢ ⬈* L2 → (L1 ≅[T] L2 → ⊥) → Q L2) →
Q L1
) →
∀L. G ⊢ ⬈*𝐒[T] L → Q L.
fact rsx_bind_lpxs_aux (G):
∀p,I,L1,V. G ⊢ ⬈*𝐒[V] L1 →
∀Y,T. G ⊢ ⬈*𝐒[T] Y →
- â\88\80L2. Y = L2.â\93\91[I]V â\86\92 â\9dªG,L1â\9d« ⊢ ⬈* L2 →
+ â\88\80L2. Y = L2.â\93\91[I]V â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈* L2 →
G ⊢ ⬈*𝐒[ⓑ[p,I]V.T] L2.
#G #p #I #L1 #V #H @(rsx_ind_lpxs … H) -L1
#L1 #_ #IHL1 #Y #T #H @(rsx_ind_lpxs … H) -Y
(* Basic_2A1: uses: lsx_flat_lpxs *)
lemma rsx_flat_lpxs (G):
∀I,L1,V. G ⊢ ⬈*𝐒[V] L1 →
- â\88\80L2,T. G â\8a¢ â¬\88*ð\9d\90\92[T] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈* L2 →
+ â\88\80L2,T. G â\8a¢ â¬\88*ð\9d\90\92[T] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈* L2 →
G ⊢ ⬈*𝐒[ⓕ[I]V.T] L2.
#G #I #L1 #V #H @(rsx_ind_lpxs … H) -L1
#L1 #HL1 #IHL1 #L2 #T #H @(rsx_ind_lpxs … H) -L2
fact rsx_bind_lpxs_void_aux (G):
∀p,I,L1,V. G ⊢ ⬈*𝐒[V] L1 →
∀Y,T. G ⊢ ⬈*𝐒[T] Y →
- â\88\80L2. Y = L2.â\93§ â\86\92 â\9dªG,L1â\9d« ⊢ ⬈* L2 →
+ â\88\80L2. Y = L2.â\93§ â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈* L2 →
G ⊢ ⬈*𝐒[ⓑ[p,I]V.T] L2.
#G #p #I #L1 #V #H @(rsx_ind_lpxs … H) -L1
#L1 #_ #IHL1 #Y #T #H @(rsx_ind_lpxs … H) -Y
(* Basic_2A1: uses: lsx_lpx_trans *)
lemma rsx_lpx_trans (G):
∀L1,T. G ⊢ ⬈*𝐒[T] L1 →
- â\88\80L2. â\9dªG,L1â\9d« ⊢ ⬈ L2 → G ⊢ ⬈*𝐒[T] L2.
+ â\88\80L2. â\9d¨G,L1â\9d© ⊢ ⬈ L2 → G ⊢ ⬈*𝐒[T] L2.
#G #L1 #T #H @(rsx_ind … H) -L1 #L1 #HL1 #IHL1 #L2 #HL12
elim (reqx_dec … L1 L2 T) /3 width=4 by rsx_reqx_trans/
qed-.
(* CONTEXT-SENSITIVE PARALLEL R-CONVERSION FOR TERMS ************************)
definition cpc: sh → relation4 genv lenv term term ≝
- λh,G,L,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,0] T2 â\88¨ â\9dªG,Lâ\9d« ⊢ T2 ➡[h,0] T1.
+ λh,G,L,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,0] T2 â\88¨ â\9d¨G,Lâ\9d© ⊢ T2 ➡[h,0] T1.
interpretation
"context-sensitive parallel r-conversion (term)"
(* Basic forward lemmas *****************************************************)
-lemma cpc_fwd_cpr: â\88\80h,G,L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬌[h] T2 →
- â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,0] T & â\9dªG,Lâ\9d« ⊢ T2 ➡[h,0] T.
+lemma cpc_fwd_cpr: â\88\80h,G,L,T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬌[h] T2 →
+ â\88\83â\88\83T. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,0] T & â\9d¨G,Lâ\9d© ⊢ T2 ➡[h,0] T.
#h #G #L #T1 #T2 * /2 width=3 by ex2_intro/
qed-.
(* Main properties **********************************************************)
-theorem cpc_conf: â\88\80h,G,L,T0,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T0 â¬\8c[h] T1 â\86\92 â\9dªG,Lâ\9d« ⊢ T0 ⬌[h] T2 →
- â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\8c[h] T & â\9dªG,Lâ\9d« ⊢ T2 ⬌[h] T.
+theorem cpc_conf: â\88\80h,G,L,T0,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T0 â¬\8c[h] T1 â\86\92 â\9d¨G,Lâ\9d© ⊢ T0 ⬌[h] T2 →
+ â\88\83â\88\83T. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\8c[h] T & â\9d¨G,Lâ\9d© ⊢ T2 ⬌[h] T.
/3 width=3 by cpc_sym, ex2_intro/ qed-.
(* Basic_2A1: was: cpcs_ind_dx *)
lemma cpcs_ind_sn (h) (G) (L) (T2):
∀Q:predicate term. Q T2 →
- (â\88\80T1,T. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\8c[h] T â\86\92 â\9dªG,Lâ\9d« ⊢ T ⬌*[h] T2 → Q T → Q T1) →
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2 → Q T1.
+ (â\88\80T1,T. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\8c[h] T â\86\92 â\9d¨G,Lâ\9d© ⊢ T ⬌*[h] T2 → Q T → Q T1) →
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2 → Q T1.
normalize /3 width=6 by TC_star_ind_dx/
qed-.
(* Basic_2A1: was: cpcs_ind *)
lemma cpcs_ind_dx (h) (G) (L) (T1):
∀Q:predicate term. Q T1 →
- (â\88\80T,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\8c*[h] T â\86\92 â\9dªG,Lâ\9d« ⊢ T ⬌[h] T2 → Q T → Q T2) →
- â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2 → Q T2.
+ (â\88\80T,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\8c*[h] T â\86\92 â\9d¨G,Lâ\9d© ⊢ T ⬌[h] T2 → Q T → Q T2) →
+ â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2 → Q T2.
normalize /3 width=6 by TC_star_ind/
qed-.
/2 width=1 by cpc_sym/
qed-.
-lemma cpc_cpcs (h) (G) (L): â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\8c[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpc_cpcs (h) (G) (L): â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\8c[h] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
/2 width=1 by inj/ qed.
(* Basic_2A1: was: cpcs_strap2 *)
-lemma cpcs_step_sn (h) (G) (L): â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ⬌[h] T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â¬\8c*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpcs_step_sn (h) (G) (L): â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ⬌[h] T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â¬\8c*[h] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
normalize /2 width=3 by TC_strap/
qed-.
(* Basic_2A1: was: cpcs_strap1 *)
-lemma cpcs_step_dx (h) (G) (L): â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â¬\8c[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpcs_step_dx (h) (G) (L): â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â¬\8c[h] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
normalize /2 width=3 by step/
qed-.
(* Basic_1: was: pc3_pr2_r *)
-lemma cpr_cpcs_dx (h) (G) (L): â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpr_cpcs_dx (h) (G) (L): â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
/3 width=1 by cpc_cpcs, or_introl/ qed.
(* Basic_1: was: pc3_pr2_x *)
-lemma cpr_cpcs_sn (h) (G) (L): â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T2 â\9e¡[h,0] T1 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpr_cpcs_sn (h) (G) (L): â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T2 â\9e¡[h,0] T1 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
/3 width=1 by cpc_cpcs, or_intror/ qed.
(* Basic_1: was: pc3_pr2_u *)
(* Basic_2A1: was: cpcs_cpr_strap2 *)
-lemma cpcs_cpr_step_sn (h) (G) (L): â\88\80T1,T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,0] T â\86\92 â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â¬\8c*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cpr_step_sn (h) (G) (L): â\88\80T1,T. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,0] T â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â¬\8c*[h] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
/3 width=3 by cpcs_step_sn, or_introl/ qed-.
(* Basic_2A1: was: cpcs_cpr_strap1 *)
-lemma cpcs_cpr_step_dx (h) (G) (L): â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cpr_step_dx (h) (G) (L): â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
/3 width=3 by cpcs_step_dx, or_introl/ qed-.
-lemma cpcs_cpr_div (h) (G) (L): â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T2 â\9e¡[h,0] T â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cpr_div (h) (G) (L): â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T2 â\9e¡[h,0] T â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
/3 width=3 by cpcs_step_dx, or_intror/ qed-.
-lemma cpr_div (h) (G) (L): â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,0] T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T2 â\9e¡[h,0] T â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpr_div (h) (G) (L): â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,0] T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T2 â\9e¡[h,0] T â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
/3 width=3 by cpr_cpcs_dx, cpcs_step_dx, or_intror/ qed-.
(* Basic_1: was: pc3_pr2_u2 *)
-lemma cpcs_cpr_conf (h) (G) (L): â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T ➡[h,0] T1 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â¬\8c*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cpr_conf (h) (G) (L): â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T ➡[h,0] T1 →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â¬\8c*[h] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
/3 width=3 by cpcs_step_sn, or_intror/ qed-.
(* Basic_1: removed theorems 9:
(* Main inversion lemmas with atomic arity assignment on terms **************)
(* Note: lemma 1500 *)
-theorem cpcs_aaa_mono (h) (G) (L): â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2 →
- â\88\80A1. â\9dªG,Lâ\9d« â\8a¢ T1 â\81\9d A1 â\86\92 â\88\80A2. â\9dªG,Lâ\9d« ⊢ T2 ⁝ A2 →
+theorem cpcs_aaa_mono (h) (G) (L): â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2 →
+ â\88\80A1. â\9d¨G,Lâ\9d© â\8a¢ T1 â\81\9d A1 â\86\92 â\88\80A2. â\9d¨G,Lâ\9d© ⊢ T2 ⁝ A2 →
A1 = A2.
#h #G #L #T1 #T2 #HT12 #A1 #HA1 #A2 #HA2
elim (cpcs_inv_cprs … HT12) -HT12 #T #HT1 #HT2
(* Advanced properties ******************************************************)
-lemma cpcs_bind1 (h) (G) (L): â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬌*[h] V2 →
- â\88\80I,T1,T2. â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ⬌*[h] T2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ⬌*[h] ⓑ[p,I]V2.T2.
+lemma cpcs_bind1 (h) (G) (L): â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬌*[h] V2 →
+ â\88\80I,T1,T2. â\9d¨G,L.â\93\91[I]V1â\9d© ⊢ T1 ⬌*[h] T2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ⬌*[h] ⓑ[p,I]V2.T2.
/3 width=3 by cpcs_trans, cpcs_bind_sn, cpcs_bind_dx/ qed.
-lemma cpcs_bind2 (h) (G) (L): â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬌*[h] V2 →
- â\88\80I,T1,T2. â\9dªG,L.â\93\91[I]V2â\9d« ⊢ T1 ⬌*[h] T2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ⬌*[h] ⓑ[p,I]V2.T2.
+lemma cpcs_bind2 (h) (G) (L): â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬌*[h] V2 →
+ â\88\80I,T1,T2. â\9d¨G,L.â\93\91[I]V2â\9d© ⊢ T1 ⬌*[h] T2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ⬌*[h] ⓑ[p,I]V2.T2.
/3 width=3 by cpcs_trans, cpcs_bind_sn, cpcs_bind_dx/ qed.
(* Advanced properties with r-transition for full local environments ********)
(* Basic_1: was: pc3_wcpr0 *)
-lemma lpr_cpcs_conf (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡[h,0] L2 →
- â\88\80T1,T2. â\9dªG,L1â\9d« â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â\9dªG,L2â\9d« ⊢ T1 ⬌*[h] T2.
+lemma lpr_cpcs_conf (h) (G): â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ➡[h,0] L2 →
+ â\88\80T1,T2. â\9d¨G,L1â\9d© â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â\9d¨G,L2â\9d© ⊢ T1 ⬌*[h] T2.
#h #G #L1 #L2 #HL12 #T1 #T2 #H elim (cpcs_inv_cprs … H) -H
/3 width=5 by cpcs_canc_dx, lpr_cprs_conf/
qed-.
(* Inversion lemmas with context sensitive r-computation on terms ***********)
-lemma cpcs_inv_cprs (h) (G) (L): â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2 →
- â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,0] T & â\9dªG,Lâ\9d« ⊢ T2 ➡*[h,0] T.
+lemma cpcs_inv_cprs (h) (G) (L): â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2 →
+ â\88\83â\88\83T. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,0] T & â\9d¨G,Lâ\9d© ⊢ T2 ➡*[h,0] T.
#h #G #L #T1 #T2 #H @(cpcs_ind_dx … H) -T2
[ /3 width=3 by ex2_intro/
| #T #T2 #_ #HT2 * #T0 #HT10 elim HT2 -HT2 #HT2 #HT0
(* Basic_1: was: pc3_gen_sort *)
(* Basic_2A1: was: cpcs_inv_sort *)
-lemma cpcs_inv_sort_bi (h) (G) (L): â\88\80s1,s2. â\9dªG,Lâ\9d« ⊢ ⋆s1 ⬌*[h] ⋆s2 → s1 = s2.
+lemma cpcs_inv_sort_bi (h) (G) (L): â\88\80s1,s2. â\9d¨G,Lâ\9d© ⊢ ⋆s1 ⬌*[h] ⋆s2 → s1 = s2.
#h #G #L #s1 #s2 #H elim (cpcs_inv_cprs … H) -H
#T #H1 >(cprs_inv_sort1 … H1) -T #H2
lapply (cprs_inv_sort1 … H2) -L #H destruct //
(* Basic_2A1: was: cpcs_inv_abst1 *)
lemma cpcs_inv_abst_sn (h) (G) (L):
- â\88\80p,W1,T1,X. â\9dªG,Lâ\9d« ⊢ ⓛ[p]W1.T1 ⬌*[h] X →
- â\88\83â\88\83W2,T2. â\9dªG,Lâ\9d« â\8a¢ X â\9e¡*[h,0] â\93\9b[p]W2.T2 & â\9dªG,Lâ\9d« ⊢ ⓛ[p]W1.T1 ➡*[h,0] ⓛ[p]W2.T2.
+ â\88\80p,W1,T1,X. â\9d¨G,Lâ\9d© ⊢ ⓛ[p]W1.T1 ⬌*[h] X →
+ â\88\83â\88\83W2,T2. â\9d¨G,Lâ\9d© â\8a¢ X â\9e¡*[h,0] â\93\9b[p]W2.T2 & â\9d¨G,Lâ\9d© ⊢ ⓛ[p]W1.T1 ➡*[h,0] ⓛ[p]W2.T2.
#h #G #L #p #W1 #T1 #T #H
elim (cpcs_inv_cprs … H) -H #X #H1 #H2
elim (cpms_inv_abst_sn … H1) -H1 #W2 #T2 #HW12 #HT12 #H destruct
(* Basic_2A1: was: cpcs_inv_abst2 *)
lemma cpcs_inv_abst_dx (h) (G) (L):
- â\88\80p,W1,T1,X. â\9dªG,Lâ\9d« ⊢ X ⬌*[h] ⓛ[p]W1.T1 →
- â\88\83â\88\83W2,T2. â\9dªG,Lâ\9d« â\8a¢ X â\9e¡*[h,0] â\93\9b[p]W2.T2 & â\9dªG,Lâ\9d« ⊢ ⓛ[p]W1.T1 ➡*[h,0] ⓛ[p]W2.T2.
+ â\88\80p,W1,T1,X. â\9d¨G,Lâ\9d© ⊢ X ⬌*[h] ⓛ[p]W1.T1 →
+ â\88\83â\88\83W2,T2. â\9d¨G,Lâ\9d© â\8a¢ X â\9e¡*[h,0] â\93\9b[p]W2.T2 & â\9d¨G,Lâ\9d© ⊢ ⓛ[p]W1.T1 ➡*[h,0] ⓛ[p]W2.T2.
/3 width=1 by cpcs_inv_abst_sn, cpcs_sym/ qed-.
(* Basic_1: was: pc3_gen_sort_abst *)
lemma cpcs_inv_sort_abst (h) (G) (L):
- â\88\80p,W,T,s. â\9dªG,Lâ\9d« ⊢ ⋆s ⬌*[h] ⓛ[p]W.T → ⊥.
+ â\88\80p,W,T,s. â\9d¨G,Lâ\9d© ⊢ ⋆s ⬌*[h] ⓛ[p]W.T → ⊥.
#h #G #L #p #W #T #s #H
elim (cpcs_inv_cprs … H) -H #X #H1
>(cprs_inv_sort1 … H1) -X #H2
(* Properties with context sensitive r-computation on terms *****************)
(* Basic_1: was: pc3_pr3_r *)
-lemma cpcs_cprs_dx (h) (G) (L): â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cprs_dx (h) (G) (L): â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
#h #G #L #T1 #T2 #H @(cprs_ind_dx … H) -T2
/3 width=3 by cpcs_cpr_step_dx, cpcs_step_dx, cpc_cpcs/
qed.
(* Basic_1: was: pc3_pr3_x *)
-lemma cpcs_cprs_sn (h) (G) (L): â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T2 â\9e¡*[h,0] T1 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cprs_sn (h) (G) (L): â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T2 â\9e¡*[h,0] T1 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
#h #G #L #T1 #T2 #H @(cprs_ind_sn … H) -T2
/3 width=3 by cpcs_cpr_div, cpcs_step_sn, cpcs_cprs_dx/
qed.
(* Basic_2A1: was: cpcs_cprs_strap1 *)
-lemma cpcs_cprs_step_dx (h) (G) (L): â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cprs_step_dx (h) (G) (L): â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
#h #G #L #T1 #T #HT1 #T2 #H @(cprs_ind_dx … H) -T2 /2 width=3 by cpcs_cpr_step_dx/
qed-.
(* Basic_2A1: was: cpcs_cprs_strap2 *)
-lemma cpcs_cprs_step_sn (h) (G) (L): â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,0] T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â¬\8c*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cprs_step_sn (h) (G) (L): â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,0] T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â¬\8c*[h] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
#h #G #L #T1 #T #H #T2 #HT2 @(cprs_ind_sn … H) -T1 /2 width=3 by cpcs_cpr_step_sn/
qed-.
-lemma cpcs_cprs_div (h) (G) (L): â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T2 â\9e¡*[h,0] T â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cprs_div (h) (G) (L): â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T2 â\9e¡*[h,0] T â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
#h #G #L #T1 #T #HT1 #T2 #H @(cprs_ind_sn … H) -T2 /2 width=3 by cpcs_cpr_div/
qed-.
(* Basic_1: was: pc3_pr3_conf *)
-lemma cpcs_cprs_conf (h) (G) (L): â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T ➡*[h,0] T1 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â¬\8c*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cprs_conf (h) (G) (L): â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T ➡*[h,0] T1 →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â¬\8c*[h] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
#h #G #L #T1 #T #H #T2 #HT2 @(cprs_ind_dx … H) -T1 /2 width=3 by cpcs_cpr_conf/
qed-.
(* Basic_1: was: pc3_pr3_t *)
(* Basic_1: note: pc3_pr3_t should be renamed *)
-lemma cprs_div (h) (G) (L): â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,0] T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T2 â\9e¡*[h,0] T â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cprs_div (h) (G) (L): â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,0] T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T2 â\9e¡*[h,0] T â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
#h #G #L #T1 #T #HT1 #T2 #H @(cprs_ind_sn … H) -T2
/2 width=3 by cpcs_cpr_div, cpcs_cprs_dx/
qed.
-lemma cprs_cpr_div (h) (G) (L): â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,0] T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T2 â\9e¡[h,0] T â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cprs_cpr_div (h) (G) (L): â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,0] T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T2 â\9e¡[h,0] T â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
/3 width=5 by cpm_cpms, cprs_div/ qed-.
-lemma cpr_cprs_div (h) (G) (L): â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,0] T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T2 â\9e¡*[h,0] T â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpr_cprs_div (h) (G) (L): â\88\80T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,0] T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T2 â\9e¡*[h,0] T â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
/3 width=3 by cpm_cpms, cprs_div/ qed-.
-lemma cpr_cprs_conf_cpcs (h) (G) (L): â\88\80T,T1. â\9dªG,Lâ\9d« ⊢ T ➡*[h,0] T1 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cpr_cprs_conf_cpcs (h) (G) (L): â\88\80T,T1. â\9d¨G,Lâ\9d© ⊢ T ➡*[h,0] T1 →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
#h #G #L #T #T1 #HT1 #T2 #HT2 elim (cprs_strip … HT1 … HT2) -HT1 -HT2
/2 width=3 by cpr_cprs_div/
qed-.
-lemma cprs_cpr_conf_cpcs (h) (G) (L): â\88\80T,T1. â\9dªG,Lâ\9d« ⊢ T ➡*[h,0] T1 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T2 ⬌*[h] T1.
+lemma cprs_cpr_conf_cpcs (h) (G) (L): â\88\80T,T1. â\9d¨G,Lâ\9d© ⊢ T ➡*[h,0] T1 →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T2 ⬌*[h] T1.
#h #G #L #T #T1 #HT1 #T2 #HT2 elim (cprs_strip … HT1 … HT2) -HT1 -HT2
/2 width=3 by cprs_cpr_div/
qed-.
-lemma cprs_conf_cpcs (h) (G) (L): â\88\80T,T1. â\9dªG,Lâ\9d« ⊢ T ➡*[h,0] T1 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2.
+lemma cprs_conf_cpcs (h) (G) (L): â\88\80T,T1. â\9d¨G,Lâ\9d© ⊢ T ➡*[h,0] T1 →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡*[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2.
#h #G #L #T #T1 #HT1 #T2 #HT2 elim (cprs_conf … HT1 … HT2) -HT1 -HT2
/2 width=3 by cprs_div/
qed-.
(* Basic_1: was only: pc3_thin_dx *)
-lemma cpcs_flat (h) (G) (L): â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬌*[h] V2 →
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2 →
- â\88\80I. â\9dªG,Lâ\9d« ⊢ ⓕ[I]V1.T1 ⬌*[h] ⓕ[I]V2.T2.
+lemma cpcs_flat (h) (G) (L): â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬌*[h] V2 →
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2 →
+ â\88\80I. â\9d¨G,Lâ\9d© ⊢ ⓕ[I]V1.T1 ⬌*[h] ⓕ[I]V2.T2.
#h #G #L #V1 #V2 #HV12 #T1 #T2 #HT12
elim (cpcs_inv_cprs … HV12) -HV12
elim (cpcs_inv_cprs … HT12) -HT12
/3 width=5 by cprs_flat, cprs_div/
qed.
-lemma cpcs_flat_dx_cpr_rev (h) (G) (L): â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V2 ➡[h,0] V1 →
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2 →
- â\88\80I. â\9dªG,Lâ\9d« ⊢ ⓕ[I]V1.T1 ⬌*[h] ⓕ[I]V2.T2.
+lemma cpcs_flat_dx_cpr_rev (h) (G) (L): â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V2 ➡[h,0] V1 →
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2 →
+ â\88\80I. â\9d¨G,Lâ\9d© ⊢ ⓕ[I]V1.T1 ⬌*[h] ⓕ[I]V2.T2.
/3 width=1 by cpr_cpcs_sn, cpcs_flat/ qed.
-lemma cpcs_bind_dx (h) (G) (L): â\88\80I,V,T1,T2. â\9dªG,L.â\93\91[I]Vâ\9d« ⊢ T1 ⬌*[h] T2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V.T1 ⬌*[h] ⓑ[p,I]V.T2.
+lemma cpcs_bind_dx (h) (G) (L): â\88\80I,V,T1,T2. â\9d¨G,L.â\93\91[I]Vâ\9d© ⊢ T1 ⬌*[h] T2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V.T1 ⬌*[h] ⓑ[p,I]V.T2.
#h #G #L #I #V #T1 #T2 #HT12 elim (cpcs_inv_cprs … HT12) -HT12
/3 width=5 by cprs_div, cpms_bind/
qed.
-lemma cpcs_bind_sn (h) (G) (L): â\88\80I,V1,V2,T. â\9dªG,Lâ\9d« ⊢ V1 ⬌*[h] V2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T ⬌*[h] ⓑ[p,I]V2.T.
+lemma cpcs_bind_sn (h) (G) (L): â\88\80I,V1,V2,T. â\9d¨G,Lâ\9d© ⊢ V1 ⬌*[h] V2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T ⬌*[h] ⓑ[p,I]V2.T.
#h #G #L #I #V1 #V2 #T #HV12 elim (cpcs_inv_cprs … HV12) -HV12
/3 width=5 by cprs_div, cpms_bind/
qed.
(* Basic_1: was: cpcs_dec *)
lemma csx_cpcs_dec (h) (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88*ð\9d\90\92 T1 â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ ⬈*𝐒 T2 →
- Decidable â\80¦ (â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2).
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ â¬\88*ð\9d\90\92 T1 â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© ⊢ ⬈*𝐒 T2 →
+ Decidable â\80¦ (â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h] T2).
#h #G #L #T1 #HT1 #T2 #HT2
elim (cprre_total_csx h … HT1) -HT1 #U1 #HTU1
elim (cprre_total_csx h … HT2) -HT2 #U2 #HTU2
(* Properties with parallel r-computation for full local environments *******)
-lemma lpr_cpcs_trans (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡[h,0] L2 →
- â\88\80T1,T2. â\9dªG,L2â\9d« â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â\9dªG,L1â\9d« ⊢ T1 ⬌*[h] T2.
+lemma lpr_cpcs_trans (h) (G): â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ➡[h,0] L2 →
+ â\88\80T1,T2. â\9d¨G,L2â\9d© â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â\9d¨G,L1â\9d© ⊢ T1 ⬌*[h] T2.
#h #G #L1 #L2 #HL12 #T1 #T2 #H elim (cpcs_inv_cprs … H) -H
/4 width=5 by cprs_div, lpr_cpms_trans/
qed-.
-lemma lprs_cpcs_trans (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡*[h,0] L2 →
- â\88\80T1,T2. â\9dªG,L2â\9d« â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â\9dªG,L1â\9d« ⊢ T1 ⬌*[h] T2.
+lemma lprs_cpcs_trans (h) (G): â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ➡*[h,0] L2 →
+ â\88\80T1,T2. â\9d¨G,L2â\9d© â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â\9d¨G,L1â\9d© ⊢ T1 ⬌*[h] T2.
#h #G #L1 #L2 #HL12 #T1 #T2 #H elim (cpcs_inv_cprs … H) -H
/4 width=5 by cprs_div, lprs_cpms_trans/
qed-.
-lemma lprs_cprs_conf (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡*[h,0] L2 →
- â\88\80T1,T2. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[h,0] T2 â\86\92 â\9dªG,L2â\9d« ⊢ T1 ⬌*[h] T2.
+lemma lprs_cprs_conf (h) (G): â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ➡*[h,0] L2 →
+ â\88\80T1,T2. â\9d¨G,L1â\9d© â\8a¢ T1 â\9e¡*[h,0] T2 â\86\92 â\9d¨G,L2â\9d© ⊢ T1 ⬌*[h] T2.
#h #G #L1 #L2 #HL12 #T1 #T2 #HT12 elim (lprs_cprs_conf_dx … HT12 … HL12) -L1
/2 width=3 by cprs_div/
qed-.
(* Basic_1: was: pc3_wcpr0_t *)
(* Basic_1: note: pc3_wcpr0_t should be renamed *)
(* Note: alternative proof /3 width=5 by lprs_cprs_conf, lpr_lprs/ *)
-lemma lpr_cprs_conf (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡[h,0] L2 →
- â\88\80T1,T2. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[h,0] T2 â\86\92 â\9dªG,L2â\9d« ⊢ T1 ⬌*[h] T2.
+lemma lpr_cprs_conf (h) (G): â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ➡[h,0] L2 →
+ â\88\80T1,T2. â\9d¨G,L1â\9d© â\8a¢ T1 â\9e¡*[h,0] T2 â\86\92 â\9d¨G,L2â\9d© ⊢ T1 ⬌*[h] T2.
#h #G #L1 #L2 #HL12 #T1 #T2 #HT12 elim (cprs_lpr_conf_dx … HT12 … HL12) -L1
/2 width=3 by cprs_div/
qed-.
(* Basic_1: was only: pc3_pr0_pr2_t *)
(* Basic_1: note: pc3_pr0_pr2_t should be renamed *)
-lemma lpr_cpr_conf (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡[h,0] L2 →
- â\88\80T1,T2. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡[h,0] T2 â\86\92 â\9dªG,L2â\9d« ⊢ T1 ⬌*[h] T2.
+lemma lpr_cpr_conf (h) (G): â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ➡[h,0] L2 →
+ â\88\80T1,T2. â\9d¨G,L1â\9d© â\8a¢ T1 â\9e¡[h,0] T2 â\86\92 â\9d¨G,L2â\9d© ⊢ T1 ⬌*[h] T2.
/3 width=5 by lpr_cprs_conf, cpm_cpms/ qed-.
(* Advanced inversion lemmas ************************************************)
(* Note: there must be a proof suitable for lfpr *)
lemma cpcs_inv_abst_bi_sn (h) (G) (L):
- â\88\80p1,p2,W1,W2,T1,T2. â\9dªG,Lâ\9d« ⊢ ⓛ[p1]W1.T1 ⬌*[h] ⓛ[p2]W2.T2 →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ W1 â¬\8c*[h] W2 & â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ⬌*[h] T2 & p1 = p2.
+ â\88\80p1,p2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© ⊢ ⓛ[p1]W1.T1 ⬌*[h] ⓛ[p2]W2.T2 →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ W1 â¬\8c*[h] W2 & â\9d¨G,L.â\93\9bW1â\9d© ⊢ T1 ⬌*[h] T2 & p1 = p2.
#h #G #L #p1 #p2 #W1 #W2 #T1 #T2 #H
elim (cpcs_inv_cprs … H) -H #T #H1 #H2
elim (cpms_inv_abst_sn … H1) -H1 #W0 #T0 #HW10 #HT10 #H destruct
qed-.
lemma cpcs_inv_abst_bi_dx (h) (G) (L):
- â\88\80p1,p2,W1,W2,T1,T2. â\9dªG,Lâ\9d« ⊢ ⓛ[p1]W1.T1 ⬌*[h] ⓛ[p2]W2.T2 →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ W1 â¬\8c*[h] W2 & â\9dªG,L.â\93\9bW2â\9d« ⊢ T1 ⬌*[h] T2 & p1 = p2.
+ â\88\80p1,p2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© ⊢ ⓛ[p1]W1.T1 ⬌*[h] ⓛ[p2]W2.T2 →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ W1 â¬\8c*[h] W2 & â\9d¨G,L.â\93\9bW2â\9d© ⊢ T1 ⬌*[h] T2 & p1 = p2.
#h #G #L #p1 #p2 #W1 #W2 #T1 #T2 #HT12 lapply (cpcs_sym … HT12) -HT12
#HT12 elim (cpcs_inv_abst_bi_sn … HT12) -HT12 /3 width=1 by cpcs_sym, and3_intro/
qed-.
(* Basic_2A1: uses: scpes *)
definition cpes (h) (n1) (n2): relation4 genv lenv term term ≝
λG,L,T1,T2.
- â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n1] T & â\9dªG,Lâ\9d« ⊢ T2 ➡*[h,n2] T.
+ â\88\83â\88\83T. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡*[h,n1] T & â\9d¨G,Lâ\9d© ⊢ T2 ➡*[h,n2] T.
interpretation "t-bound context-sensitive parallel rt-equivalence (term)"
'PConvStar h n1 n2 G L T1 T2 = (cpes h n1 n2 G L T1 T2).
(* Basic_2A1: uses: scpds_div *)
lemma cpms_div (h) (n1) (n2):
- â\88\80G,L,T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h,n1] T →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T2 â\9e¡*[h,n2] T â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h,n1,n2] T2.
+ â\88\80G,L,T1,T. â\9d¨G,Lâ\9d© ⊢ T1 ➡*[h,n1] T →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T2 â\9e¡*[h,n2] T â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h,n1,n2] T2.
/2 width=3 by ex2_intro/ qed.
lemma cpes_refl (h): ∀G,L. reflexive … (cpes h 0 0 G L).
(* Basic_2A1: uses: scpes_sym *)
lemma cpes_sym (h) (n1) (n2):
- â\88\80G,L,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\8c*[h,n1,n2] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T2 ⬌*[h,n2,n1] T1.
+ â\88\80G,L,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\8c*[h,n1,n2] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T2 ⬌*[h,n2,n1] T1.
#h #n1 #n2 #G #L #T1 #T2 * /2 width=3 by cpms_div/
qed-.
(* Basic_2A1: uses: scpes_refl *)
lemma cpes_refl_aaa (h) (n):
- â\88\80G,L,T,A. â\9dªG,Lâ\9d« â\8a¢ T â\81\9d A â\86\92 â\9dªG,Lâ\9d« ⊢ T ⬌*[h,n,n] T.
+ â\88\80G,L,T,A. â\9d¨G,Lâ\9d© â\8a¢ T â\81\9d A â\86\92 â\9d¨G,Lâ\9d© ⊢ T ⬌*[h,n,n] T.
#h #n #G #L #T #A #HA
elim (cpms_total_aaa h … n … HA) #U #HTU
/2 width=3 by cpms_div/
(* Basic_2A1: uses: scpes_aaa_mono *)
theorem cpes_aaa_mono (h) (n1) (n2):
- â\88\80G,L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h,n1,n2] T2 →
- â\88\80A1. â\9dªG,Lâ\9d« â\8a¢ T1 â\81\9d A1 â\86\92 â\88\80A2. â\9dªG,Lâ\9d« ⊢ T2 ⁝ A2 → A1 = A2.
+ â\88\80G,L,T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h,n1,n2] T2 →
+ â\88\80A1. â\9d¨G,Lâ\9d© â\8a¢ T1 â\81\9d A1 â\86\92 â\88\80A2. â\9d¨G,Lâ\9d© ⊢ T2 ⁝ A2 → A1 = A2.
#h #n1 #n2 #G #L #T1 #T2 * #T #HT1 #HT2 #A1 #HA1 #A2 #HA2
lapply (cpms_aaa_conf … HA1 … HT1) -T1 #HA1
lapply (cpms_aaa_conf … HA2 … HT2) -T2 #HA2
(* Advanced forward lemmas **************************************************)
lemma cpes_fwd_abst_bi (h) (n1) (n2) (p1) (p2) (G) (L):
- â\88\80W1,W2,T1,T2. â\9dªG,Lâ\9d« ⊢ ⓛ[p1]W1.T1 ⬌*[h,n1,n2] ⓛ[p2]W2.T2 →
- â\88§â\88§ p1 = p2 & â\9dªG,Lâ\9d« ⊢ W1 ⬌*[h,0,O] W2.
+ â\88\80W1,W2,T1,T2. â\9d¨G,Lâ\9d© ⊢ ⓛ[p1]W1.T1 ⬌*[h,n1,n2] ⓛ[p2]W2.T2 →
+ â\88§â\88§ p1 = p2 & â\9d¨G,Lâ\9d© ⊢ W1 ⬌*[h,0,O] W2.
#h #n1 #n2 #p1 #p2 #G #L #W1 #W2 #T1 #T2 * #X #H1 #H2
elim (cpms_inv_abst_sn … H1) #W0 #X0 #HW10 #_ #H destruct
elim (cpms_inv_abst_bi … H2) #H #HW20 #_ destruct
(* Main properties **********************************************************)
theorem cpes_cpes_trans (h) (n1) (n2) (G) (L) (T):
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ T ⬌*[h,n1,0] T1 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\8c*[h,0,n2] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T ⬌*[h,n1,n2] T2.
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T ⬌*[h,n1,0] T1 →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\8c*[h,0,n2] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T ⬌*[h,n1,n2] T2.
#h #n1 #n2 #G #L #T #T1 #HT1 #T2 * #X #HX1 #HX2
lapply (cpes_cprs_trans … HT1 … HX1) -T1 #HTX
lapply (cpes_cpms_div … HTX … HX2) -X //
(* Properties with t-bound rt-computation on terms **************************)
lemma cpes_cprs_trans (h) (n) (G) (L) (T0):
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h,n,0] T0 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T0 â\9e¡*[h,0] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h,n,0] T2.
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h,n,0] T0 →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T0 â\9e¡*[h,0] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h,n,0] T2.
#h #n #G #L #T0 #T1 * #T #HT1 #HT0 #T2 #HT02
elim (cprs_conf … HT0 … HT02) -T0 #T0 #HT0 #HT20
/3 width=3 by cpms_div, cpms_cprs_trans/
qed-.
lemma cpes_cpms_div (h) (n) (n1) (n2) (G) (L) (T0):
- â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h,n,n1] T0 →
- â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T2 â\9e¡*[h,n2] T0 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h,n,n2+n1] T2.
+ â\88\80T1. â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h,n,n1] T0 →
+ â\88\80T2. â\9d¨G,Lâ\9d© â\8a¢ T2 â\9e¡*[h,n2] T0 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬌*[h,n,n2+n1] T2.
#h #n #n1 #n2 #G #L #T0 #T1 * #T #HT1 #HT0 #T2 #HT20
lapply (cpms_trans … HT20 … HT0) -T0 #HT2
/2 width=3 by cpms_div/
(* Basic inversion lemmas ***************************************************)
lemma cnr_inv_abst (h) (p) (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« ⊢ ➡𝐍[h,0] ⓛ[p]V.T →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ â\9e¡ð\9d\90\8d[h,0] V & â\9dªG,L.â\93\9bVâ\9d« ⊢ ➡𝐍[h,0] T.
+ â\88\80V,T. â\9d¨G,Lâ\9d© ⊢ ➡𝐍[h,0] ⓛ[p]V.T →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ â\9e¡ð\9d\90\8d[h,0] V & â\9d¨G,L.â\93\9bVâ\9d© ⊢ ➡𝐍[h,0] T.
#h #p #G #L #V1 #T1 #HVT1 @conj
[ #V2 #HV2 lapply (HVT1 (ⓛ[p]V2.T1) ?) -HVT1 /2 width=2 by cpr_pair_sn/ -HV2 #H destruct //
| #T2 #HT2 lapply (HVT1 (ⓛ[p]V1.T2) ?) -HVT1 /2 width=2 by cpm_bind/ -HT2 #H destruct //
(* Basic_2A1: was: cnr_inv_abbr *)
lemma cnr_inv_abbr_neg (h) (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« ⊢ ➡𝐍[h,0] -ⓓV.T →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ â\9e¡ð\9d\90\8d[h,0] V & â\9dªG,L.â\93\93Vâ\9d« ⊢ ➡𝐍[h,0] T.
+ â\88\80V,T. â\9d¨G,Lâ\9d© ⊢ ➡𝐍[h,0] -ⓓV.T →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ â\9e¡ð\9d\90\8d[h,0] V & â\9d¨G,L.â\93\93Vâ\9d© ⊢ ➡𝐍[h,0] T.
#h #G #L #V1 #T1 #HVT1 @conj
[ #V2 #HV2 lapply (HVT1 (-ⓓV2.T1) ?) -HVT1 /2 width=2 by cpr_pair_sn/ -HV2 #H destruct //
| #T2 #HT2 lapply (HVT1 (-ⓓV1.T2) ?) -HVT1 /2 width=2 by cpm_bind/ -HT2 #H destruct //
(* Basic_2A1: was: cnr_inv_eps *)
lemma cnr_inv_cast (h) (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« ⊢ ➡𝐍[h,0] ⓝV.T → ⊥.
+ â\88\80V,T. â\9d¨G,Lâ\9d© ⊢ ➡𝐍[h,0] ⓝV.T → ⊥.
#h #G #L #V #T #H lapply (H T ?) -H
/2 width=4 by cpm_eps, discr_tpair_xy_y/
qed-.
(* Basic_1: was: nf2_sort *)
lemma cnr_sort (h) (G) (L):
- â\88\80s. â\9dªG,Lâ\9d« ⊢ ➡𝐍[h,0] ⋆s.
+ â\88\80s. â\9d¨G,Lâ\9d© ⊢ ➡𝐍[h,0] ⋆s.
#h #G #L #s #X #H
>(cpr_inv_sort1 … H) //
qed.
lemma cnr_gref (h) (G) (L):
- â\88\80l. â\9dªG,Lâ\9d« ⊢ ➡𝐍[h,0] §l.
+ â\88\80l. â\9d¨G,Lâ\9d© ⊢ ➡𝐍[h,0] §l.
#h #G #L #l #X #H
>(cpr_inv_gref1 … H) //
qed.
(* Basic_1: was: nf2_abst *)
lemma cnr_abst (h) (p) (G) (L):
- â\88\80W,T. â\9dªG,Lâ\9d« â\8a¢ â\9e¡ð\9d\90\8d[h,0] W â\86\92 â\9dªG,L.â\93\9bWâ\9d« â\8a¢ â\9e¡ð\9d\90\8d[h,0] T â\86\92 â\9dªG,Lâ\9d« ⊢ ➡𝐍[h,0] ⓛ[p]W.T.
+ â\88\80W,T. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡ð\9d\90\8d[h,0] W â\86\92 â\9d¨G,L.â\93\9bWâ\9d© â\8a¢ â\9e¡ð\9d\90\8d[h,0] T â\86\92 â\9d¨G,Lâ\9d© ⊢ ➡𝐍[h,0] ⓛ[p]W.T.
#h #p #G #L #W #T #HW #HT #X #H
elim (cpm_inv_abst1 … H) -H #W0 #T0 #HW0 #HT0 #H destruct
<(HW … HW0) -W0 <(HT … HT0) -T0 //
qed.
lemma cnr_abbr_neg (h) (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« â\8a¢ â\9e¡ð\9d\90\8d[h,0] V â\86\92 â\9dªG,L.â\93\93Vâ\9d« â\8a¢ â\9e¡ð\9d\90\8d[h,0] T â\86\92 â\9dªG,Lâ\9d« ⊢ ➡𝐍[h,0] -ⓓV.T.
+ â\88\80V,T. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡ð\9d\90\8d[h,0] V â\86\92 â\9d¨G,L.â\93\93Vâ\9d© â\8a¢ â\9e¡ð\9d\90\8d[h,0] T â\86\92 â\9d¨G,Lâ\9d© ⊢ ➡𝐍[h,0] -ⓓV.T.
#h #G #L #V #T #HV #HT #X #H
elim (cpm_inv_abbr1 … H) -H *
[ #V0 #T0 #HV0 #HT0 #H destruct
(* Basic_1: was only: nf2_csort_lref *)
lemma cnr_lref_atom (h) (b) (G) (L):
- â\88\80i. â\87©*[b,ð\9d\90\94â\9d¨iâ\9d©] L â\89\98 â\8b\86 â\86\92 â\9dªG,Lâ\9d« ⊢ ➡𝐍[h,0] #i.
+ â\88\80i. â\87©*[b,ð\9d\90\94â\9d¨iâ\9d©] L â\89\98 â\8b\86 â\86\92 â\9d¨G,Lâ\9d© ⊢ ➡𝐍[h,0] #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 â\89\98 K.â\93\9bV â\86\92 â\9dªG,Lâ\9d« ⊢ ➡𝐍[h,0] #i.
+ â\88\80K,V,i. â\87©[i] L â\89\98 K.â\93\9bV â\86\92 â\9d¨G,Lâ\9d© ⊢ ➡𝐍[h,0] #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 â\89\98 K.â\93¤[I] â\86\92 â\9dªG,Lâ\9d« ⊢ ➡𝐍[h,0] #i.
+ â\88\80K,i. â\87©[i] L â\89\98 K.â\93¤[I] â\86\92 â\9d¨G,Lâ\9d© ⊢ ➡𝐍[h,0] #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 â\89\98 K.â\93\93V â\86\92 â\9dªG,Lâ\9d« ⊢ ➡𝐍[h,0] #i → ⊥.
+ â\88\80K,V,i. â\87©[i] L â\89\98 K.â\93\93V â\86\92 â\9d¨G,Lâ\9d© ⊢ ➡𝐍[h,0] #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
(* Inversion lemmas with simple terms ***************************************)
lemma cnr_inv_appl (h) (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« ⊢ ➡𝐍[h,0] ⓐV.T →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ â\9e¡ð\9d\90\8d[h,0] V & â\9dªG,Lâ\9d« â\8a¢ â\9e¡ð\9d\90\8d[h,0] T & ð\9d\90\92â\9dªTâ\9d«.
+ â\88\80V,T. â\9d¨G,Lâ\9d© ⊢ ➡𝐍[h,0] ⓐV.T →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ â\9e¡ð\9d\90\8d[h,0] V & â\9d¨G,Lâ\9d© â\8a¢ â\9e¡ð\9d\90\8d[h,0] T & ð\9d\90\92â\9d¨Tâ\9d©.
#h #G #L #V1 #T1 #HVT1 @and3_intro
[ #V2 #HV2 lapply (HVT1 (ⓐV2.T1) ?) -HVT1 /2 width=1 by cpr_pair_sn/ -HV2 #H destruct //
| #T2 #HT2 lapply (HVT1 (ⓐV1.T2) ?) -HVT1 /2 width=1 by cpr_flat/ -HT2 #H destruct //
(* Basic_1: was only: nf2_appl_lref *)
lemma cnr_appl_simple (h) (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« â\8a¢ â\9e¡ð\9d\90\8d[h,0] V â\86\92 â\9dªG,Lâ\9d« â\8a¢ â\9e¡ð\9d\90\8d[h,0] T â\86\92 ð\9d\90\92â\9dªTâ\9d« â\86\92 â\9dªG,Lâ\9d« ⊢ ➡𝐍[h,0] ⓐV.T.
+ â\88\80V,T. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡ð\9d\90\8d[h,0] V â\86\92 â\9d¨G,Lâ\9d© â\8a¢ â\9e¡ð\9d\90\8d[h,0] T â\86\92 ð\9d\90\92â\9d¨Tâ\9d© â\86\92 â\9d¨G,Lâ\9d© ⊢ ➡𝐍[h,0] ⓐV.T.
#h #G #L #V #T #HV #HT #HS #X #H
elim (cpm_inv_appl1_simple … H) -H // #V0 #T0 #HV0 #HT0 #H destruct
<(HV … HV0) -V0 <(HT … HT0) -T0 //
(* Basic_1: was: nf2_dec *)
(* Basic_2A1: uses: cnr_dec *)
lemma cnr_dec_teqg (S) (h) (G) (L):
- â\88\80T1. â\88¨â\88¨ â\9dªG,Lâ\9d« ⊢ ➡𝐍[h,0] T1
- | â\88\83â\88\83T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,0] T2 & (T1 ≛[S] T2 → ⊥).
+ â\88\80T1. â\88¨â\88¨ â\9d¨G,Lâ\9d© ⊢ ➡𝐍[h,0] T1
+ | â\88\83â\88\83T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,0] T2 & (T1 ≛[S] T2 → ⊥).
#S #h #G #L #T1
@(fqup_wf_ind_eq (Ⓣ) … G L T1) -G -L -T1 #G0 #L0 #T0 #IH #G #L * *
[ #s #HG #HL #HT destruct -IH
(* Basic_1: was: nf2_dec *)
(* Basic_2A1: uses: cnr_dec *)
lemma cnr_dec_teqx (h) (G) (L):
- â\88\80T1. â\88¨â\88¨ â\9dªG,Lâ\9d« ⊢ ➡𝐍[h,0] T1
- | â\88\83â\88\83T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,0] T2 & (T1 ≅ T2 → ⊥).
+ â\88\80T1. â\88¨â\88¨ â\9d¨G,Lâ\9d© ⊢ ➡𝐍[h,0] T1
+ | â\88\83â\88\83T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,0] T2 & (T1 ≅ T2 → ⊥).
/2 width=1 by cnr_dec_teqg/ qed-.
(* Basic inversion lemmas ***************************************************)
lemma cnx_inv_abst (G) (L):
- â\88\80p,V,T. â\9dªG,Lâ\9d« ⊢ ⬈𝐍 ⓛ[p]V.T →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ â¬\88ð\9d\90\8d V & â\9dªG,L.â\93\9bVâ\9d« ⊢ ⬈𝐍 T.
+ â\88\80p,V,T. â\9d¨G,Lâ\9d© ⊢ ⬈𝐍 ⓛ[p]V.T →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ â¬\88ð\9d\90\8d V & â\9d¨G,L.â\93\9bVâ\9d© ⊢ ⬈𝐍 T.
#G #L #p #V1 #T1 #HVT1 @conj
[ #V2 #HV2 lapply (HVT1 (ⓛ[p]V2.T1) ?) -HVT1 /2 width=2 by cpx_pair_sn/ -HV2
| #T2 #HT2 lapply (HVT1 (ⓛ[p]V1.T2) ?) -HVT1 /2 width=2 by cpx_bind/ -HT2
(* Basic_2A1: was: cnx_inv_abbr *)
lemma cnx_inv_abbr_neg (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« ⊢ ⬈𝐍 -ⓓV.T →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ â¬\88ð\9d\90\8d V & â\9dªG,L.â\93\93Vâ\9d« ⊢ ⬈𝐍 T.
+ â\88\80V,T. â\9d¨G,Lâ\9d© ⊢ ⬈𝐍 -ⓓV.T →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ â¬\88ð\9d\90\8d V & â\9d¨G,L.â\93\93Vâ\9d© ⊢ ⬈𝐍 T.
#G #L #V1 #T1 #HVT1 @conj
[ #V2 #HV2 lapply (HVT1 (-ⓓV2.T1) ?) -HVT1 /2 width=2 by cpx_pair_sn/ -HV2
| #T2 #HT2 lapply (HVT1 (-ⓓV1.T2) ?) -HVT1 /2 width=2 by cpx_bind/ -HT2
(* Basic_2A1: was: cnx_inv_eps *)
lemma cnx_inv_cast (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« ⊢ ⬈𝐍 ⓝV.T → ⊥.
+ â\88\80V,T. â\9d¨G,Lâ\9d© ⊢ ⬈𝐍 ⓝV.T → ⊥.
#G #L #V #T #H lapply (H T ?) -H
/2 width=6 by cpx_eps, teqg_inv_pair_xy_y/
qed-.
(* Basic properties *********************************************************)
lemma cnx_sort (G) (L):
- â\88\80s. â\9dªG,Lâ\9d« ⊢ ⬈𝐍 ⋆s.
+ â\88\80s. â\9d¨G,Lâ\9d© ⊢ ⬈𝐍 ⋆s.
#G #L #s #X #H elim (cpx_inv_sort1 … H) -H
/2 width=1 by teqg_sort/
qed.
lemma cnx_abst (G) (L):
- â\88\80p,W,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88ð\9d\90\8d W â\86\92 â\9dªG,L.â\93\9bWâ\9d« â\8a¢ â¬\88ð\9d\90\8d T â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈𝐍 ⓛ[p]W.T.
+ â\88\80p,W,T. â\9d¨G,Lâ\9d© â\8a¢ â¬\88ð\9d\90\8d W â\86\92 â\9d¨G,L.â\93\9bWâ\9d© â\8a¢ â¬\88ð\9d\90\8d T â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈𝐍 ⓛ[p]W.T.
#G #L #p #W #T #HW #HT #X #H
elim (cpx_inv_abst1 … H) -H #W0 #T0 #HW0 #HT0 #H destruct
@teqx_pair [ @HW | @HT ] // (**) (* auto fails because δ-expansion gets in the way *)
(* Advanced inversion lemmas ************************************************)
lemma cnx_inv_abbr_pos (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« ⊢ ⬈𝐍 +ⓓV.T → ⊥.
+ â\88\80V,T. â\9d¨G,Lâ\9d© ⊢ ⬈𝐍 +ⓓV.T → ⊥.
#G #L #V #U1 #H
elim (cpx_subst G (L.ⓓV) U1 … 0) [|*: /2 width=4 by drops_refl/ ] #U2 #T2 #HU12 #HTU2
elim (teqx_dec U1 U2) #HnU12 [ -HU12 | -HTU2 ]
(* Advanced properties ******************************************************)
lemma cnx_teqx_trans (G) (L):
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88ð\9d\90\8d T1 â\86\92 â\88\80T2. T1 â\89\85 T2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈𝐍 T2.
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ â¬\88ð\9d\90\8d T1 â\86\92 â\88\80T2. T1 â\89\85 T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈𝐍 T2.
#G #L #T1 #HT1 #T2 #HT12 #T #HT2
lapply (teqx_cpx_trans … HT12 … HT2) -HT2 #H
lapply (HT1 … H) -HT1 -H /2 width=5 by teqx_canc_sn/ (**) (* full auto fails *)
(* Properties with generic slicing ******************************************)
lemma cnx_lref_atom (G) (L):
- â\88\80i. â\87©[i] L â\89\98 â\8b\86 â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈𝐍 #i.
+ â\88\80i. â\87©[i] L â\89\98 â\8b\86 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈𝐍 #i.
#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 (G) (L):
- â\88\80I,K,i. â\87©[i] L â\89\98 K.â\93¤[I] â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈𝐍 #i.
+ â\88\80I,K,i. â\87©[i] L â\89\98 K.â\93¤[I] â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈𝐍 #i.
#G #L #I #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.
(* Basic_2A1: was: cnx_inv_delta *)
lemma cnx_inv_lref_pair (G) (L):
- â\88\80I,K,V,i. â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈𝐍 #i → ⊥.
+ â\88\80I,K,V,i. â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈𝐍 #i → ⊥.
#G #L #I #K #V #i #HLK #H
elim (lifts_total V (𝐔❨↑i❩)) #W #HVW
lapply (H W ?) -H /2 width=7 by cpx_delta_drops/ -HLK
(* Inversion lemmas with simple terms ***************************************)
lemma cnx_inv_appl (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« ⊢ ⬈𝐍 ⓐV.T →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ â¬\88ð\9d\90\8d V & â\9dªG,Lâ\9d« â\8a¢ â¬\88ð\9d\90\8d T & ð\9d\90\92â\9dªTâ\9d«.
+ â\88\80V,T. â\9d¨G,Lâ\9d© ⊢ ⬈𝐍 ⓐV.T →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ â¬\88ð\9d\90\8d V & â\9d¨G,Lâ\9d© â\8a¢ â¬\88ð\9d\90\8d T & ð\9d\90\92â\9d¨Tâ\9d©.
#G #L #V1 #T1 #HVT1 @and3_intro
[ #V2 #HV2 lapply (HVT1 (ⓐV2.T1) ?) -HVT1 /2 width=1 by cpx_pair_sn/ -HV2
#H elim (teqx_inv_pair … H) -H //
(* Properties with simple terms *********************************************)
lemma cnx_appl_simple (G) (L):
- â\88\80V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88ð\9d\90\8d V â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88ð\9d\90\8d T â\86\92 ð\9d\90\92â\9dªTâ\9d« â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈𝐍 ⓐV.T.
+ â\88\80V,T. â\9d¨G,Lâ\9d© â\8a¢ â¬\88ð\9d\90\8d V â\86\92 â\9d¨G,Lâ\9d© â\8a¢ â¬\88ð\9d\90\8d T â\86\92 ð\9d\90\92â\9d¨Tâ\9d© â\86\92 â\9d¨G,Lâ\9d© ⊢ ⬈𝐍 ⓐV.T.
#G #L #V #T #HV #HT #HS #X #H elim (cpx_inv_appl1_simple … H) -H //
#V0 #T0 #HV0 #HT0 #H destruct
@teqx_pair [ @HV | @HT ] // (**) (* auto fails because δ-expansion gets in the way *)
(* Note: this is "∀Rs,Rk. reflexive … Rk → ∀G,L. reflexive … (cpg Rs Rk (𝟘𝟘) G L)" *)
lemma cpg_refl (Rs) (Rk):
- reflexive â\80¦ Rk â\86\92 â\88\80G,T,L. â\9dªG,Lâ\9d« ⊢ T ⬈[Rs,Rk,𝟘𝟘] T.
+ reflexive â\80¦ Rk â\86\92 â\88\80G,T,L. â\9d¨G,Lâ\9d© ⊢ T ⬈[Rs,Rk,𝟘𝟘] T.
#Rk #HRk #h #G #T elim T -T // * /2 width=1 by cpg_bind/
* /2 width=1 by cpg_appl, cpg_cast/
qed.
(* Basic inversion lemmas ***************************************************)
fact cpg_inv_atom1_aux (Rs) (Rk) (c) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈[Rs,Rk,c] T2 → ∀J. T1 = ⓪[J] →
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈[Rs,Rk,c] T2 → ∀J. T1 = ⓪[J] →
∨∨ ∧∧ T2 = ⓪[J] & c = 𝟘𝟘
| ∃∃s1,s2. Rs s1 s2 & J = Sort s1 & T2 = ⋆s2 & c = 𝟘𝟙
- | â\88\83â\88\83cV,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0 & c = cV
- | â\88\83â\88\83cV,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙
- | â\88\83â\88\83I,K,T,i. â\9dªG,Kâ\9d« ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i).
+ | â\88\83â\88\83cV,K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0 & c = cV
+ | â\88\83â\88\83cV,K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙
+ | â\88\83â\88\83I,K,T,i. â\9d¨G,Kâ\9d© ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i).
#Rs #Rk #c #G #L #T1 #T2 * -c -G -L -T1 -T2
[ #I #G #L #J #H destruct /3 width=1 by or5_intro0, conj/
| #G #L #s1 #s2 #HRs #J #H destruct /3 width=5 by or5_intro1, ex4_2_intro/
qed-.
lemma cpg_inv_atom1 (Rs) (Rk) (c) (G) (L):
- â\88\80J,T2. â\9dªG,Lâ\9d« ⊢ ⓪[J] ⬈[Rs,Rk,c] T2 →
+ â\88\80J,T2. â\9d¨G,Lâ\9d© ⊢ ⓪[J] ⬈[Rs,Rk,c] T2 →
∨∨ ∧∧ T2 = ⓪[J] & c = 𝟘𝟘
| ∃∃s1,s2. Rs s1 s2 & J = Sort s1 & T2 = ⋆s2 & c = 𝟘𝟙
- | â\88\83â\88\83cV,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0 & c = cV
- | â\88\83â\88\83cV,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙
- | â\88\83â\88\83I,K,T,i. â\9dªG,Kâ\9d« ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i).
+ | â\88\83â\88\83cV,K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0 & c = cV
+ | â\88\83â\88\83cV,K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙
+ | â\88\83â\88\83I,K,T,i. â\9d¨G,Kâ\9d© ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i).
/2 width=3 by cpg_inv_atom1_aux/ qed-.
lemma cpg_inv_sort1 (Rs) (Rk) (c) (G) (L):
- â\88\80T2,s1. â\9dªG,Lâ\9d« ⊢ ⋆s1 ⬈[Rs,Rk,c] T2 →
+ â\88\80T2,s1. â\9d¨G,Lâ\9d© ⊢ ⋆s1 ⬈[Rs,Rk,c] T2 →
∨∨ ∧∧ T2 = ⋆s1 & c = 𝟘𝟘
| ∃∃s2. Rs s1 s2 & T2 = ⋆s2 & c = 𝟘𝟙.
#Rs #Rk #c #G #L #T2 #s #H
qed-.
lemma cpg_inv_zero1 (Rs) (Rk) (c) (G) (L):
- â\88\80T2. â\9dªG,Lâ\9d« ⊢ #0 ⬈[Rs,Rk,c] T2 →
+ â\88\80T2. â\9d¨G,Lâ\9d© ⊢ #0 ⬈[Rs,Rk,c] T2 →
∨∨ ∧∧ T2 = #0 & c = 𝟘𝟘
- | â\88\83â\88\83cV,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & c = cV
- | â\88\83â\88\83cV,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & c = cV+𝟘𝟙.
+ | â\88\83â\88\83cV,K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & c = cV
+ | â\88\83â\88\83cV,K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & c = cV+𝟘𝟙.
#Rs #Rk #c #G #L #T2 #H
elim (cpg_inv_atom1 … H) -H * /3 width=1 by or3_intro0, conj/
[ #s1 #s2 #_ #H destruct
qed-.
lemma cpg_inv_lref1 (Rs) (Rk) (c) (G) (L):
- â\88\80T2,i. â\9dªG,Lâ\9d« ⊢ #↑i ⬈[Rs,Rk,c] T2 →
+ â\88\80T2,i. â\9d¨G,Lâ\9d© ⊢ #↑i ⬈[Rs,Rk,c] T2 →
∨∨ ∧∧ T2 = #(↑i) & c = 𝟘𝟘
- | â\88\83â\88\83I,K,T. â\9dªG,Kâ\9d« ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I].
+ | â\88\83â\88\83I,K,T. â\9d¨G,Kâ\9d© ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I].
#Rs #Rk #c #G #L #T2 #i #H
elim (cpg_inv_atom1 … H) -H * /3 width=1 by or_introl, conj/
[ #s1 #s2 #_ #H destruct
qed-.
lemma cpg_inv_gref1 (Rs) (Rk) (c) (G) (L):
- â\88\80T2,l. â\9dªG,Lâ\9d« ⊢ §l ⬈[Rs,Rk,c] T2 → ∧∧ T2 = §l & c = 𝟘𝟘.
+ â\88\80T2,l. â\9d¨G,Lâ\9d© ⊢ §l ⬈[Rs,Rk,c] T2 → ∧∧ T2 = §l & c = 𝟘𝟘.
#Rs #Rk #c #G #L #T2 #l #H
elim (cpg_inv_atom1 … H) -H * /2 width=1 by conj/
[ #s1 #s2 #_ #H destruct
qed-.
fact cpg_inv_bind1_aux (Rs) (Rk) (c) (G) (L):
- â\88\80U,U2. â\9dªG,Lâ\9d« ⊢ U ⬈[Rs,Rk,c] U2 →
+ â\88\80U,U2. â\9d¨G,Lâ\9d© ⊢ U ⬈[Rs,Rk,c] U2 →
∀p,J,V1,U1. U = ⓑ[p,J]V1.U1 →
- â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9dªG,L.â\93\91[J]V1â\9d« ⊢ U1 ⬈[Rs,Rk,cT] T2 & U2 = ⓑ[p,J]V2.T2 & c = ((↕*cV)∨cT)
- | â\88\83â\88\83cT,T. â\87§[1] T â\89\98 U1 & â\9dªG,Lâ\9d« ⊢ T ⬈[Rs,Rk,cT] U2 & p = true & J = Abbr & c = cT+𝟙𝟘.
+ â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9d¨G,L.â\93\91[J]V1â\9d© ⊢ U1 ⬈[Rs,Rk,cT] T2 & U2 = ⓑ[p,J]V2.T2 & c = ((↕*cV)∨cT)
+ | â\88\83â\88\83cT,T. â\87§[1] T â\89\98 U1 & â\9d¨G,Lâ\9d© ⊢ T ⬈[Rs,Rk,cT] U2 & p = true & J = Abbr & c = cT+𝟙𝟘.
#Rs #Rk #c #G #L #U #U2 * -c -G -L -U -U2
[ #I #G #L #q #J #W #U1 #H destruct
| #G #L #s1 #s2 #_ #q #J #W #U1 #H destruct
qed-.
lemma cpg_inv_bind1 (Rs) (Rk) (c) (G) (L):
- â\88\80p,I,V1,T1,U2. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ⬈[Rs,Rk,c] U2 →
- â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ⬈[Rs,Rk,cT] T2 & U2 = ⓑ[p,I]V2.T2 & c = ((↕*cV)∨cT)
- | â\88\83â\88\83cT,T. â\87§[1] T â\89\98 T1 & â\9dªG,Lâ\9d« ⊢ T ⬈[Rs,Rk,cT] U2 & p = true & I = Abbr & c = cT+𝟙𝟘.
+ â\88\80p,I,V1,T1,U2. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ⬈[Rs,Rk,c] U2 →
+ â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9d¨G,L.â\93\91[I]V1â\9d© ⊢ T1 ⬈[Rs,Rk,cT] T2 & U2 = ⓑ[p,I]V2.T2 & c = ((↕*cV)∨cT)
+ | â\88\83â\88\83cT,T. â\87§[1] T â\89\98 T1 & â\9d¨G,Lâ\9d© ⊢ T ⬈[Rs,Rk,cT] U2 & p = true & I = Abbr & c = cT+𝟙𝟘.
/2 width=3 by cpg_inv_bind1_aux/ qed-.
lemma cpg_inv_abbr1 (Rs) (Rk) (c) (G) (L):
- â\88\80p,V1,T1,U2. â\9dªG,Lâ\9d« ⊢ ⓓ[p]V1.T1 ⬈[Rs,Rk,c] U2 →
- â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9dªG,L.â\93\93V1â\9d« ⊢ T1 ⬈[Rs,Rk,cT] T2 & U2 = ⓓ[p]V2.T2 & c = ((↕*cV)∨cT)
- | â\88\83â\88\83cT,T. â\87§[1] T â\89\98 T1 & â\9dªG,Lâ\9d« ⊢ T ⬈[Rs,Rk,cT] U2 & p = true & c = cT+𝟙𝟘.
+ â\88\80p,V1,T1,U2. â\9d¨G,Lâ\9d© ⊢ ⓓ[p]V1.T1 ⬈[Rs,Rk,c] U2 →
+ â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9d¨G,L.â\93\93V1â\9d© ⊢ T1 ⬈[Rs,Rk,cT] T2 & U2 = ⓓ[p]V2.T2 & c = ((↕*cV)∨cT)
+ | â\88\83â\88\83cT,T. â\87§[1] T â\89\98 T1 & â\9d¨G,Lâ\9d© ⊢ T ⬈[Rs,Rk,cT] U2 & p = true & c = cT+𝟙𝟘.
#Rs #Rk #c #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/
qed-.
lemma cpg_inv_abst1 (Rs) (Rk) (c) (G) (L):
- â\88\80p,V1,T1,U2. â\9dªG,Lâ\9d« ⊢ ⓛ[p]V1.T1 ⬈[Rs,Rk,c] U2 →
- â\88\83â\88\83cV,cT,V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9dªG,L.â\93\9bV1â\9d« ⊢ T1 ⬈[Rs,Rk,cT] T2 & U2 = ⓛ[p]V2.T2 & c = ((↕*cV)∨cT).
+ â\88\80p,V1,T1,U2. â\9d¨G,Lâ\9d© ⊢ ⓛ[p]V1.T1 ⬈[Rs,Rk,c] U2 →
+ â\88\83â\88\83cV,cT,V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9d¨G,L.â\93\9bV1â\9d© ⊢ T1 ⬈[Rs,Rk,cT] T2 & U2 = ⓛ[p]V2.T2 & c = ((↕*cV)∨cT).
#Rs #Rk #c #p #G #L #V1 #T1 #U2 #H elim (cpg_inv_bind1 … H) -H *
[ /3 width=8 by ex4_4_intro/
| #c #T #_ #_ #_ #H destruct
qed-.
fact cpg_inv_appl1_aux (Rs) (Rk) (c) (G) (L):
- â\88\80U,U2. â\9dªG,Lâ\9d« ⊢ U ⬈[Rs,Rk,c] U2 →
+ â\88\80U,U2. â\9d¨G,Lâ\9d© ⊢ U ⬈[Rs,Rk,c] U2 →
∀V1,U1. U = ⓐV1.U1 →
- â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9dªG,Lâ\9d« ⊢ U1 ⬈[Rs,Rk,cT] T2 & U2 = ⓐV2.T2 & c = ((↕*cV)∨cT)
- | â\88\83â\88\83cV,cW,cT,p,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88[Rs,Rk,cW] W2 & â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ⬈[Rs,Rk,cT] 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. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rs,Rk,cV] V & â\87§[1] V â\89\98 V2 & â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88[Rs,Rk,cW] W2 & â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ⬈[Rs,Rk,cT] T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘.
+ â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9d¨G,Lâ\9d© ⊢ U1 ⬈[Rs,Rk,cT] T2 & U2 = ⓐV2.T2 & c = ((↕*cV)∨cT)
+ | â\88\83â\88\83cV,cW,cT,p,V2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9d¨G,Lâ\9d© â\8a¢ W1 â¬\88[Rs,Rk,cW] W2 & â\9d¨G,L.â\93\9bW1â\9d© ⊢ T1 ⬈[Rs,Rk,cT] 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. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88[Rs,Rk,cV] V & â\87§[1] V â\89\98 V2 & â\9d¨G,Lâ\9d© â\8a¢ W1 â¬\88[Rs,Rk,cW] W2 & â\9d¨G,L.â\93\93W1â\9d© ⊢ T1 ⬈[Rs,Rk,cT] T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘.
#Rs #Rk #c #G #L #U #U2 * -c -G -L -U -U2
[ #I #G #L #W #U1 #H destruct
| #G #L #s1 #s2 #_ #W #U1 #H destruct
qed-.
lemma cpg_inv_appl1 (Rs) (Rk) (c) (G) (L):
- â\88\80V1,U1,U2. â\9dªG,Lâ\9d« ⊢ ⓐV1.U1 ⬈[Rs,Rk,c] U2 →
- â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9dªG,Lâ\9d« ⊢ U1 ⬈[Rs,Rk,cT] T2 & U2 = ⓐV2.T2 & c = ((↕*cV)∨cT)
- | â\88\83â\88\83cV,cW,cT,p,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88[Rs,Rk,cW] W2 & â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ⬈[Rs,Rk,cT] 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. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rs,Rk,cV] V & â\87§[1] V â\89\98 V2 & â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88[Rs,Rk,cW] W2 & â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ⬈[Rs,Rk,cT] T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘.
+ â\88\80V1,U1,U2. â\9d¨G,Lâ\9d© ⊢ ⓐV1.U1 ⬈[Rs,Rk,c] U2 →
+ â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9d¨G,Lâ\9d© ⊢ U1 ⬈[Rs,Rk,cT] T2 & U2 = ⓐV2.T2 & c = ((↕*cV)∨cT)
+ | â\88\83â\88\83cV,cW,cT,p,V2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9d¨G,Lâ\9d© â\8a¢ W1 â¬\88[Rs,Rk,cW] W2 & â\9d¨G,L.â\93\9bW1â\9d© ⊢ T1 ⬈[Rs,Rk,cT] 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. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88[Rs,Rk,cV] V & â\87§[1] V â\89\98 V2 & â\9d¨G,Lâ\9d© â\8a¢ W1 â¬\88[Rs,Rk,cW] W2 & â\9d¨G,L.â\93\93W1â\9d© ⊢ T1 ⬈[Rs,Rk,cT] T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘.
/2 width=3 by cpg_inv_appl1_aux/ qed-.
fact cpg_inv_cast1_aux (Rs) (Rk) (c) (G) (L):
- â\88\80U,U2. â\9dªG,Lâ\9d« ⊢ U ⬈[Rs,Rk,c] U2 →
+ â\88\80U,U2. â\9d¨G,Lâ\9d© ⊢ U ⬈[Rs,Rk,c] U2 →
∀V1,U1. U = ⓝV1.U1 →
- â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9dªG,Lâ\9d« ⊢ U1 ⬈[Rs,Rk,cT] T2 & Rk cV cT & U2 = ⓝV2.T2 & c = (cV∨cT)
- | â\88\83â\88\83cT. â\9dªG,Lâ\9d« ⊢ U1 ⬈[Rs,Rk,cT] U2 & c = cT+𝟙𝟘
- | â\88\83â\88\83cV. â\9dªG,Lâ\9d« ⊢ V1 ⬈[Rs,Rk,cV] U2 & c = cV+𝟘𝟙.
+ â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9d¨G,Lâ\9d© ⊢ U1 ⬈[Rs,Rk,cT] T2 & Rk cV cT & U2 = ⓝV2.T2 & c = (cV∨cT)
+ | â\88\83â\88\83cT. â\9d¨G,Lâ\9d© ⊢ U1 ⬈[Rs,Rk,cT] U2 & c = cT+𝟙𝟘
+ | â\88\83â\88\83cV. â\9d¨G,Lâ\9d© ⊢ V1 ⬈[Rs,Rk,cV] U2 & c = cV+𝟘𝟙.
#Rs #Rk #c #G #L #U #U2 * -c -G -L -U -U2
[ #I #G #L #W #U1 #H destruct
| #G #L #s1 #s2 #_ #W #U1 #H destruct
qed-.
lemma cpg_inv_cast1 (Rs) (Rk) (c) (G) (L):
- â\88\80V1,U1,U2. â\9dªG,Lâ\9d« ⊢ ⓝV1.U1 ⬈[Rs,Rk,c] U2 →
- â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9dªG,Lâ\9d« ⊢ U1 ⬈[Rs,Rk,cT] T2 & Rk cV cT & U2 = ⓝV2.T2 & c = (cV∨cT)
- | â\88\83â\88\83cT. â\9dªG,Lâ\9d« ⊢ U1 ⬈[Rs,Rk,cT] U2 & c = cT+𝟙𝟘
- | â\88\83â\88\83cV. â\9dªG,Lâ\9d« ⊢ V1 ⬈[Rs,Rk,cV] U2 & c = cV+𝟘𝟙.
+ â\88\80V1,U1,U2. â\9d¨G,Lâ\9d© ⊢ ⓝV1.U1 ⬈[Rs,Rk,c] U2 →
+ â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9d¨G,Lâ\9d© ⊢ U1 ⬈[Rs,Rk,cT] T2 & Rk cV cT & U2 = ⓝV2.T2 & c = (cV∨cT)
+ | â\88\83â\88\83cT. â\9d¨G,Lâ\9d© ⊢ U1 ⬈[Rs,Rk,cT] U2 & c = cT+𝟙𝟘
+ | â\88\83â\88\83cV. â\9d¨G,Lâ\9d© ⊢ V1 ⬈[Rs,Rk,cV] U2 & c = cV+𝟘𝟙.
/2 width=3 by cpg_inv_cast1_aux/ qed-.
(* Advanced inversion lemmas ************************************************)
lemma cpg_inv_zero1_pair (Rs) (Rk) (c) (G) (K):
- â\88\80I,V1,T2. â\9dªG,K.â\93\91[I]V1â\9d« ⊢ #0 ⬈[Rs,Rk,c] T2 →
+ â\88\80I,V1,T2. â\9d¨G,K.â\93\91[I]V1â\9d© ⊢ #0 ⬈[Rs,Rk,c] T2 →
∨∨ ∧∧ T2 = #0 & c = 𝟘𝟘
- | â\88\83â\88\83cV,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & I = Abbr & c = cV
- | â\88\83â\88\83cV,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & I = Abst & c = cV+𝟘𝟙.
+ | â\88\83â\88\83cV,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & I = Abbr & c = cV
+ | â\88\83â\88\83cV,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬈[Rs,Rk,cV] V2 & ⇧[1] V2 ≘ T2 & I = Abst & c = cV+𝟘𝟙.
#Rs #Rk #c #G #K #I #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/
qed-.
lemma cpg_inv_lref1_bind (Rs) (Rk) (c) (G) (K):
- â\88\80I,T2,i. â\9dªG,K.â\93\98[I]â\9d« ⊢ #↑i ⬈[Rs,Rk,c] T2 →
+ â\88\80I,T2,i. â\9d¨G,K.â\93\98[I]â\9d© ⊢ #↑i ⬈[Rs,Rk,c] T2 →
∨∨ ∧∧ T2 = #(↑i) & c = 𝟘𝟘
- | â\88\83â\88\83T. â\9dªG,Kâ\9d« ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2.
+ | â\88\83â\88\83T. â\9d¨G,Kâ\9d© ⊢ #i ⬈[Rs,Rk,c] T & ⇧[1] T ≘ T2.
#Rs #Rk #c #G #K #I #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-.
(* Basic forward lemmas *****************************************************)
lemma cpg_fwd_bind1_minus (Rs) (Rk) (c) (G) (L):
- â\88\80I,V1,T1,T. â\9dªG,Lâ\9d« ⊢ -ⓑ[I]V1.T1 ⬈[Rs,Rk,c] T → ∀p.
- â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ⬈[Rs,Rk,c] ⓑ[p,I]V2.T2 & T = -ⓑ[I]V2.T2.
+ â\88\80I,V1,T1,T. â\9d¨G,Lâ\9d© ⊢ -ⓑ[I]V1.T1 ⬈[Rs,Rk,c] T → ∀p.
+ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ⬈[Rs,Rk,c] ⓑ[p,I]V2.T2 & T = -ⓑ[I]V2.T2.
#Rs #Rk #c #G #L #I #V1 #T1 #T #H #p elim (cpg_inv_bind1 … H) -H *
[ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct /3 width=4 by cpg_bind, ex2_2_intro/
| #c #T2 #_ #_ #H destruct
(* Advanced properties ******************************************************)
lemma cpg_delta_drops (Rs) (Rk) (c) (G) (K):
- â\88\80V,V2,i,L,T2. â\87©[i] L â\89\98 K.â\93\93V â\86\92 â\9dªG,Kâ\9d« ⊢ V ⬈[Rs,Rk,c] V2 →
- â\87§[â\86\91i] V2 â\89\98 T2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ⬈[Rs,Rk,c] T2.
+ â\88\80V,V2,i,L,T2. â\87©[i] L â\89\98 K.â\93\93V â\86\92 â\9d¨G,Kâ\9d© ⊢ V ⬈[Rs,Rk,c] V2 →
+ â\87§[â\86\91i] V2 â\89\98 T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ #i ⬈[Rs,Rk,c] T2.
#Rs #Rk #c #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 (Rs) (Rk) (c) (G) (K):
- â\88\80V,V2,i,L,T2. â\87©[i] L â\89\98 K.â\93\9bV â\86\92 â\9dªG,Kâ\9d« ⊢ V ⬈[Rs,Rk,c] V2 →
- â\87§[â\86\91i] V2 â\89\98 T2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ⬈[Rs,Rk,c+𝟘𝟙] T2.
+ â\88\80V,V2,i,L,T2. â\87©[i] L â\89\98 K.â\93\9bV â\86\92 â\9d¨G,Kâ\9d© ⊢ V ⬈[Rs,Rk,c] V2 →
+ â\87§[â\86\91i] V2 â\89\98 T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ #i ⬈[Rs,Rk,c+𝟘𝟙] T2.
#Rs #Rk #c #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
(* Advanced inversion lemmas ************************************************)
lemma cpg_inv_lref1_drops (Rs) (Rk) (c) (G):
- â\88\80i,L,T2. â\9dªG,Lâ\9d« ⊢ #i ⬈[Rs,Rk,c] T2 →
+ â\88\80i,L,T2. â\9d¨G,Lâ\9d© ⊢ #i ⬈[Rs,Rk,c] T2 →
∨∨ ∧∧ T2 = #i & c = 𝟘𝟘
- | â\88\83â\88\83cV,K,V,V2. â\87©[i] L â\89\98 K.â\93\93V & â\9dªG,Kâ\9d« ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & c = cV
- | â\88\83â\88\83cV,K,V,V2. â\87©[i] L â\89\98 K.â\93\9bV & â\9dªG,Kâ\9d« ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & c = cV + 𝟘𝟙.
+ | â\88\83â\88\83cV,K,V,V2. â\87©[i] L â\89\98 K.â\93\93V & â\9d¨G,Kâ\9d© ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & c = cV
+ | â\88\83â\88\83cV,K,V,V2. â\87©[i] L â\89\98 K.â\93\9bV & â\9d¨G,Kâ\9d© ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & c = cV + 𝟘𝟙.
#Rs #Rk #c #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/
qed-.
lemma cpg_inv_atom1_drops (Rs) (Rk) (c) (G) (L):
- â\88\80I,T2. â\9dªG,Lâ\9d« ⊢ ⓪[I] ⬈[Rs,Rk,c] T2 →
+ â\88\80I,T2. â\9d¨G,Lâ\9d© ⊢ ⓪[I] ⬈[Rs,Rk,c] T2 →
∨∨ ∧∧ T2 = ⓪[I] & c = 𝟘𝟘
| ∃∃s1,s2. Rs s1 s2 & T2 = ⋆s2 & I = Sort s1 & c = 𝟘𝟙
- | â\88\83â\88\83cV,i,K,V,V2. â\87©[i] L â\89\98 K.â\93\93V & â\9dªG,Kâ\9d« ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i & c = cV
- | â\88\83â\88\83cV,i,K,V,V2. â\87©[i] L â\89\98 K.â\93\9bV & â\9dªG,Kâ\9d« ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i & c = cV + 𝟘𝟙.
+ | â\88\83â\88\83cV,i,K,V,V2. â\87©[i] L â\89\98 K.â\93\93V & â\9d¨G,Kâ\9d© ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i & c = cV
+ | â\88\83â\88\83cV,i,K,V,V2. â\87©[i] L â\89\98 K.â\93\9bV & â\9d¨G,Kâ\9d© ⊢ V ⬈[Rs,Rk,cV] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i & c = cV + 𝟘𝟙.
#Rs #Rk #c #G #L * #x #T2 #H
[ elim (cpg_inv_sort1 … H) -H *
/3 width=5 by or4_intro0, or4_intro1, ex4_2_intro, conj/
(* Note: the main property of simple terms *)
lemma cpg_inv_appl1_simple (Rs) (Rk) (c) (G) (L):
- â\88\80V1,T1,U. â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.T1 â¬\88[Rs,Rk,c] U â\86\92 ð\9d\90\92â\9dªT1â\9d« →
- â\88\83â\88\83cV,cT,V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9dªG,Lâ\9d« ⊢ T1 ⬈[Rs,Rk,cT] T2 & U = ⓐV2.T2 & c = ((↕*cV)∨cT).
+ â\88\80V1,T1,U. â\9d¨G,Lâ\9d© â\8a¢ â\93\90V1.T1 â¬\88[Rs,Rk,c] U â\86\92 ð\9d\90\92â\9d¨T1â\9d© →
+ â\88\83â\88\83cV,cT,V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88[Rs,Rk,cV] V2 & â\9d¨G,Lâ\9d© ⊢ T1 ⬈[Rs,Rk,cT] T2 & U = ⓐV2.T2 & c = ((↕*cV)∨cT).
#Rs #Rk #c #G #L #V1 #T1 #U #H #HT1 elim (cpg_inv_appl1 … H) -H *
[ /2 width=8 by ex4_4_intro/
| #cV #cW #cT #p #V2 #W1 #W2 #U1 #U2 #_ #_ #_ #H destruct
(* Basic_2A1: includes: cpr *)
definition cpm (h) (G) (L) (n): relation2 term term ≝
- λT1,T2. â\88\83â\88\83c. ð\9d\90\91ð\9d\90\93â\9dªn,câ\9d« & â\9dªG,Lâ\9d« ⊢ T1 ⬈[sh_is_next h,rtc_eq_t,c] T2.
+ λT1,T2. â\88\83â\88\83c. ð\9d\90\91ð\9d\90\93â\9d¨n,câ\9d© & â\9d¨G,Lâ\9d© ⊢ T1 ⬈[sh_is_next h,rtc_eq_t,c] T2.
interpretation
"t-bound context-sensitive parallel rt-transition (term)"
(* Basic properties *********************************************************)
lemma cpm_ess (h) (G) (L):
- â\88\80s. â\9dªG,Lâ\9d« ⊢ ⋆s ➡[h,1] ⋆(⫯[h]s).
+ â\88\80s. â\9d¨G,Lâ\9d© ⊢ ⋆s ➡[h,1] ⋆(⫯[h]s).
/3 width=3 by cpg_ess, ex2_intro/ qed.
lemma cpm_delta (h) (n) (G) (K):
- â\88\80V1,V2,W2. â\9dªG,Kâ\9d« ⊢ V1 ➡[h,n] V2 →
- â\87§[1] V2 â\89\98 W2 â\86\92 â\9dªG,K.â\93\93V1â\9d« ⊢ #0 ➡[h,n] W2.
+ â\88\80V1,V2,W2. â\9d¨G,Kâ\9d© ⊢ V1 ➡[h,n] V2 →
+ â\87§[1] V2 â\89\98 W2 â\86\92 â\9d¨G,K.â\93\93V1â\9d© ⊢ #0 ➡[h,n] W2.
#h #n #G #K #V1 #V2 #W2 *
/3 width=5 by cpg_delta, ex2_intro/
qed.
lemma cpm_ell (h) (n) (G) (K):
- â\88\80V1,V2,W2. â\9dªG,Kâ\9d« ⊢ V1 ➡[h,n] V2 →
- â\87§[1] V2 â\89\98 W2 â\86\92 â\9dªG,K.â\93\9bV1â\9d« ⊢ #0 ➡[h,↑n] W2.
+ â\88\80V1,V2,W2. â\9d¨G,Kâ\9d© ⊢ V1 ➡[h,n] V2 →
+ â\87§[1] V2 â\89\98 W2 â\86\92 â\9d¨G,K.â\93\9bV1â\9d© ⊢ #0 ➡[h,↑n] W2.
#h #n #G #K #V1 #V2 #W2 *
/3 width=5 by cpg_ell, ex2_intro, isrt_succ/
qed.
lemma cpm_lref (h) (n) (G) (K):
- â\88\80I,T,U,i. â\9dªG,Kâ\9d« ⊢ #i ➡[h,n] T →
- â\87§[1] T â\89\98 U â\86\92 â\9dªG,K.â\93\98[I]â\9d« ⊢ #↑i ➡[h,n] U.
+ â\88\80I,T,U,i. â\9d¨G,Kâ\9d© ⊢ #i ➡[h,n] T →
+ â\87§[1] T â\89\98 U â\86\92 â\9d¨G,K.â\93\98[I]â\9d© ⊢ #↑i ➡[h,n] U.
#h #n #G #K #I #T #U #i *
/3 width=5 by cpg_lref, ex2_intro/
qed.
(* Basic_2A1: includes: cpr_bind *)
lemma cpm_bind (h) (n) (G) (L):
∀p,I,V1,V2,T1,T2.
- â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ➡[h,n] T2 →
- â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ➡[h,n] ⓑ[p,I]V2.T2.
+ â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9d¨G,L.â\93\91[I]V1â\9d© ⊢ T1 ➡[h,n] T2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ➡[h,n] ⓑ[p,I]V2.T2.
#h #n #G #L #p #I #V1 #V2 #T1 #T2 * #cV #HcV #HV12 *
/5 width=5 by cpg_bind, isrt_max_O1, isr_shift, ex2_intro/
qed.
lemma cpm_appl (h) (n) (G) (L):
∀V1,V2,T1,T2.
- â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n] T2 →
- â\9dªG,Lâ\9d« ⊢ ⓐV1.T1 ➡[h,n] ⓐV2.T2.
+ â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n] T2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓐV1.T1 ➡[h,n] ⓐV2.T2.
#h #n #G #L #V1 #V2 #T1 #T2 * #cV #HcV #HV12 *
/5 width=5 by isrt_max_O1, isr_shift, cpg_appl, ex2_intro/
qed.
lemma cpm_cast (h) (n) (G) (L):
∀U1,U2,T1,T2.
- â\9dªG,Lâ\9d« â\8a¢ U1 â\9e¡[h,n] U2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n] T2 →
- â\9dªG,Lâ\9d« ⊢ ⓝU1.T1 ➡[h,n] ⓝU2.T2.
+ â\9d¨G,Lâ\9d© â\8a¢ U1 â\9e¡[h,n] U2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n] T2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓝU1.T1 ➡[h,n] ⓝU2.T2.
#h #n #G #L #U1 #U2 #T1 #T2 * #cU #HcU #HU12 *
/4 width=6 by cpg_cast, isrt_max_idem1, isrt_mono, ex2_intro/
qed.
(* Basic_2A1: includes: cpr_zeta *)
lemma cpm_zeta (h) (n) (G) (L):
- â\88\80T1,T. â\87§[1] T â\89\98 T1 â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T ➡[h,n] T2 →
- â\88\80V. â\9dªG,Lâ\9d« ⊢ +ⓓV.T1 ➡[h,n] T2.
+ â\88\80T1,T. â\87§[1] T â\89\98 T1 â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T ➡[h,n] T2 →
+ â\88\80V. â\9d¨G,Lâ\9d© ⊢ +ⓓV.T1 ➡[h,n] T2.
#h #n #G #L #T1 #T #HT1 #T2 *
/3 width=5 by cpg_zeta, isrt_plus_O2, ex2_intro/
qed.
(* Basic_2A1: includes: cpr_eps *)
lemma cpm_eps (h) (n) (G) (L):
- â\88\80V,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⓝV.T1 ➡[h,n] T2.
+ â\88\80V,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓝV.T1 ➡[h,n] T2.
#h #n #G #L #V #T1 #T2 *
/3 width=3 by cpg_eps, isrt_plus_O2, ex2_intro/
qed.
lemma cpm_ee (h) (n) (G) (L):
- â\88\80V1,V2,T. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,n] V2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⓝV1.T ➡[h,↑n] V2.
+ â\88\80V1,V2,T. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,n] V2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓝV1.T ➡[h,↑n] V2.
#h #n #G #L #V1 #V2 #T *
/3 width=3 by cpg_ee, isrt_succ, ex2_intro/
qed.
(* Basic_2A1: includes: cpr_beta *)
lemma cpm_beta (h) (n) (G) (L):
∀p,V1,V2,W1,W2,T1,T2.
- â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡[h,0] W2 â\86\92 â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ➡[h,n] T2 →
- â\9dªG,Lâ\9d« ⊢ ⓐV1.ⓛ[p]W1.T1 ➡[h,n] ⓓ[p]ⓝW2.V2.T2.
+ â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9d¨G,Lâ\9d© â\8a¢ W1 â\9e¡[h,0] W2 â\86\92 â\9d¨G,L.â\93\9bW1â\9d© ⊢ T1 ➡[h,n] T2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓐV1.ⓛ[p]W1.T1 ➡[h,n] ⓓ[p]ⓝW2.V2.T2.
#h #n #G #L #p #V1 #V2 #W1 #W2 #T1 #T2 * #riV #rhV #HV12 * #riW #rhW #HW12 *
/6 width=7 by cpg_beta, isrt_plus_O2, isrt_max, isr_shift, ex2_intro/
qed.
(* Basic_2A1: includes: cpr_theta *)
lemma cpm_theta (h) (n) (G) (L):
∀p,V1,V,V2,W1,W2,T1,T2.
- â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V â\86\92 â\87§[1] V â\89\98 V2 â\86\92 â\9dªG,Lâ\9d« ⊢ W1 ➡[h,0] W2 →
- â\9dªG,L.â\93\93W1â\9d« â\8a¢ T1 â\9e¡[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⓐV1.ⓓ[p]W1.T1 ➡[h,n] ⓓ[p]W2.ⓐV2.T2.
+ â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V â\86\92 â\87§[1] V â\89\98 V2 â\86\92 â\9d¨G,Lâ\9d© ⊢ W1 ➡[h,0] W2 →
+ â\9d¨G,L.â\93\93W1â\9d© â\8a¢ T1 â\9e¡[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓐV1.ⓓ[p]W1.T1 ➡[h,n] ⓓ[p]W2.ⓐV2.T2.
#h #n #G #L #p #V1 #V #V2 #W1 #W2 #T1 #T2 * #riV #rhV #HV1 #HV2 * #riW #rhW #HW12 *
/6 width=9 by cpg_theta, isrt_plus_O2, isrt_max, isr_shift, ex2_intro/
qed.
(* Advanced properties ******************************************************)
lemma cpm_sort (h) (n) (G) (L): n ≤ 1 →
- â\88\80s. â\9dªG,Lâ\9d« ⊢ ⋆s ➡[h,n] ⋆((next h)^n s).
+ â\88\80s. â\9d¨G,Lâ\9d© ⊢ ⋆s ➡[h,n] ⋆((next h)^n s).
#h * //
#n #G #L #H #s <(le_n_O_to_eq n) /2 width=1 by le_S_S_to_le/
qed.
(* Basic inversion lemmas ***************************************************)
lemma cpm_inv_atom1 (h) (n) (G) (L):
- â\88\80J,T2. â\9dªG,Lâ\9d« ⊢ ⓪[J] ➡[h,n] T2 →
+ â\88\80J,T2. â\9d¨G,Lâ\9d© ⊢ ⓪[J] ➡[h,n] T2 →
∨∨ ∧∧ T2 = ⓪[J] & n = 0
| ∃∃s. T2 = ⋆(⫯[h]s) & J = Sort s & n = 1
- | â\88\83â\88\83K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡[h,n] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0
- | â\88\83â\88\83m,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡[h,m] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & n = ↑m
- | â\88\83â\88\83I,K,T,i. â\9dªG,Kâ\9d« ⊢ #i ➡[h,n] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i).
+ | â\88\83â\88\83K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ➡[h,n] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1 & J = LRef 0
+ | â\88\83â\88\83m,K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ➡[h,m] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & J = LRef 0 & n = ↑m
+ | â\88\83â\88\83I,K,T,i. â\9d¨G,Kâ\9d© ⊢ #i ➡[h,n] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i).
#h #n #G #L #J #T2 * #c #Hc #H elim (cpg_inv_atom1 … H) -H *
[ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or5_intro0, conj/
| #s1 #s2 #H1 #H2 #H3 #H4 destruct /4 width=3 by isrt_inv_01, or5_intro1, ex3_intro/
qed-.
lemma cpm_inv_sort1 (h) (n) (G) (L):
- â\88\80T2,s1. â\9dªG,Lâ\9d« ⊢ ⋆s1 ➡[h,n] T2 →
+ â\88\80T2,s1. â\9d¨G,Lâ\9d© ⊢ ⋆s1 ➡[h,n] T2 →
∧∧ T2 = ⋆(((next h)^n) s1) & n ≤ 1.
#h #n #G #L #T2 #s1 * #c #Hc #H
elim (cpg_inv_sort1 … H) -H *
qed-.
lemma cpm_inv_zero1 (h) (n) (G) (L):
- â\88\80T2. â\9dªG,Lâ\9d« ⊢ #0 ➡[h,n] T2 →
+ â\88\80T2. â\9d¨G,Lâ\9d© ⊢ #0 ➡[h,n] T2 →
∨∨ ∧∧ T2 = #0 & n = 0
- | â\88\83â\88\83K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡[h,n] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1
- | â\88\83â\88\83m,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡[h,m] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & n = ↑m.
+ | â\88\83â\88\83K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ➡[h,n] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓓV1
+ | â\88\83â\88\83m,K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ➡[h,m] V2 & ⇧[1] V2 ≘ T2 & L = K.ⓛV1 & n = ↑m.
#h #n #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/
| #cV #K #V1 #V2 #HV12 #HVT2 #H1 #H2 destruct
qed-.
lemma cpm_inv_zero1_unit (h) (n) (I) (K) (G):
- â\88\80X2. â\9dªG,K.â\93¤[I]â\9d« ⊢ #0 ➡[h,n] X2 → ∧∧ X2 = #0 & n = 0.
+ â\88\80X2. â\9d¨G,K.â\93¤[I]â\9d© ⊢ #0 ➡[h,n] X2 → ∧∧ X2 = #0 & n = 0.
#h #n #I #G #K #X2 #H
elim (cpm_inv_zero1 … H) -H *
[ #H1 #H2 destruct /2 width=1 by conj/
qed.
lemma cpm_inv_lref1 (h) (n) (G) (L):
- â\88\80T2,i. â\9dªG,Lâ\9d« ⊢ #↑i ➡[h,n] T2 →
+ â\88\80T2,i. â\9d¨G,Lâ\9d© ⊢ #↑i ➡[h,n] T2 →
∨∨ ∧∧ T2 = #(↑i) & n = 0
- | â\88\83â\88\83I,K,T. â\9dªG,Kâ\9d« ⊢ #i ➡[h,n] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I].
+ | â\88\83â\88\83I,K,T. â\9d¨G,Kâ\9d© ⊢ #i ➡[h,n] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I].
#h #n #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
qed-.
lemma cpm_inv_lref1_ctop (h) (n) (G):
- â\88\80X2,i. â\9dªG,â\8b\86â\9d« ⊢ #i ➡[h,n] X2 → ∧∧ X2 = #i & n = 0.
+ â\88\80X2,i. â\9d¨G,â\8b\86â\9d© ⊢ #i ➡[h,n] X2 → ∧∧ X2 = #i & n = 0.
#h #n #G #X2 * [| #i ] #H
[ elim (cpm_inv_zero1 … H) -H *
[ #H1 #H2 destruct /2 width=1 by conj/
qed.
lemma cpm_inv_gref1 (h) (n) (G) (L):
- â\88\80T2,l. â\9dªG,Lâ\9d« ⊢ §l ➡[h,n] T2 → ∧∧ T2 = §l & n = 0.
+ â\88\80T2,l. â\9d¨G,Lâ\9d© ⊢ §l ➡[h,n] T2 → ∧∧ T2 = §l & n = 0.
#h #n #G #L #T2 #l * #c #Hc #H elim (cpg_inv_gref1 … H) -H
#H1 #H2 destruct /3 width=1 by isrt_inv_00, conj/
qed-.
(* Basic_2A1: includes: cpr_inv_bind1 *)
lemma cpm_inv_bind1 (h) (n) (G) (L):
- â\88\80p,I,V1,T1,U2. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ➡[h,n] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 & â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ➡[h,n] T2 & U2 = ⓑ[p,I]V2.T2
- | â\88\83â\88\83T. â\87§[1] T â\89\98 T1 & â\9dªG,Lâ\9d« ⊢ T ➡[h,n] U2 & p = true & I = Abbr.
+ â\88\80p,I,V1,T1,U2. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ➡[h,n] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 & â\9d¨G,L.â\93\91[I]V1â\9d© ⊢ T1 ➡[h,n] T2 & U2 = ⓑ[p,I]V2.T2
+ | â\88\83â\88\83T. â\87§[1] T â\89\98 T1 & â\9d¨G,Lâ\9d© ⊢ T ➡[h,n] U2 & p = true & I = Abbr.
#h #n #G #L #p #I #V1 #T1 #U2 * #c #Hc #H elim (cpg_inv_bind1 … H) -H *
[ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct
elim (isrt_inv_max … Hc) -Hc #nV #nT #HcV #HcT #H destruct
(* Basic_1: includes: pr0_gen_abbr pr2_gen_abbr *)
(* Basic_2A1: includes: cpr_inv_abbr1 *)
lemma cpm_inv_abbr1 (h) (n) (G) (L):
- â\88\80p,V1,T1,U2. â\9dªG,Lâ\9d« ⊢ ⓓ[p]V1.T1 ➡[h,n] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 & â\9dªG,L.â\93\93V1â\9d« ⊢ T1 ➡[h,n] T2 & U2 = ⓓ[p]V2.T2
- | â\88\83â\88\83T. â\87§[1] T â\89\98 T1 & â\9dªG,Lâ\9d« ⊢ T ➡[h,n] U2 & p = true.
+ â\88\80p,V1,T1,U2. â\9d¨G,Lâ\9d© ⊢ ⓓ[p]V1.T1 ➡[h,n] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 & â\9d¨G,L.â\93\93V1â\9d© ⊢ T1 ➡[h,n] T2 & U2 = ⓓ[p]V2.T2
+ | â\88\83â\88\83T. â\87§[1] T â\89\98 T1 & â\9d¨G,Lâ\9d© ⊢ T ➡[h,n] U2 & p = true.
#h #n #G #L #p #V1 #T1 #U2 #H
elim (cpm_inv_bind1 … H) -H
[ /3 width=1 by or_introl/
(* Basic_1: includes: pr0_gen_abst pr2_gen_abst *)
(* Basic_2A1: includes: cpr_inv_abst1 *)
lemma cpm_inv_abst1 (h) (n) (G) (L):
- â\88\80p,V1,T1,U2. â\9dªG,Lâ\9d« ⊢ ⓛ[p]V1.T1 ➡[h,n] U2 →
- â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 & â\9dªG,L.â\93\9bV1â\9d« ⊢ T1 ➡[h,n] T2 & U2 = ⓛ[p]V2.T2.
+ â\88\80p,V1,T1,U2. â\9d¨G,Lâ\9d© ⊢ ⓛ[p]V1.T1 ➡[h,n] U2 →
+ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 & â\9d¨G,L.â\93\9bV1â\9d© ⊢ T1 ➡[h,n] T2 & U2 = ⓛ[p]V2.T2.
#h #n #G #L #p #V1 #T1 #U2 #H
elim (cpm_inv_bind1 … H) -H
[ /3 width=1 by or_introl/
qed-.
lemma cpm_inv_abst_bi (h) (n) (G) (L):
- â\88\80p1,p2,V1,V2,T1,T2. â\9dªG,Lâ\9d« ⊢ ⓛ[p1]V1.T1 ➡[h,n] ⓛ[p2]V2.T2 →
- â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 & â\9dªG,L.â\93\9bV1â\9d« ⊢ T1 ➡[h,n] T2 & p1 = p2.
+ â\88\80p1,p2,V1,V2,T1,T2. â\9d¨G,Lâ\9d© ⊢ ⓛ[p1]V1.T1 ➡[h,n] ⓛ[p2]V2.T2 →
+ â\88§â\88§ â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 & â\9d¨G,L.â\93\9bV1â\9d© ⊢ T1 ➡[h,n] T2 & p1 = p2.
#h #n #G #L #p1 #p2 #V1 #V2 #T1 #T2 #H
elim (cpm_inv_abst1 … H) -H #XV #XT #HV #HT #H destruct
/2 width=1 by and3_intro/
(* Basic_1: includes: pr0_gen_appl pr2_gen_appl *)
(* Basic_2A1: includes: cpr_inv_appl1 *)
lemma cpm_inv_appl1 (h) (n) (G) (L):
- â\88\80V1,U1,U2. â\9dªG,Lâ\9d« ⊢ ⓐ V1.U1 ➡[h,n] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 & â\9dªG,Lâ\9d« ⊢ U1 ➡[h,n] T2 & U2 = ⓐV2.T2
- | â\88\83â\88\83p,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 & â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡[h,0] W2 & â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ➡[h,n] T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2
- | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V & â\87§[1] V â\89\98 V2 & â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡[h,0] W2 & â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ➡[h,n] T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2.
+ â\88\80V1,U1,U2. â\9d¨G,Lâ\9d© ⊢ ⓐ V1.U1 ➡[h,n] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 & â\9d¨G,Lâ\9d© ⊢ U1 ➡[h,n] T2 & U2 = ⓐV2.T2
+ | â\88\83â\88\83p,V2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 & â\9d¨G,Lâ\9d© â\8a¢ W1 â\9e¡[h,0] W2 & â\9d¨G,L.â\93\9bW1â\9d© ⊢ T1 ➡[h,n] T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2
+ | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V & â\87§[1] V â\89\98 V2 & â\9d¨G,Lâ\9d© â\8a¢ W1 â\9e¡[h,0] W2 & â\9d¨G,L.â\93\93W1â\9d© ⊢ T1 ➡[h,n] T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2.
#h #n #G #L #V1 #U1 #U2 * #c #Hc #H elim (cpg_inv_appl1 … H) -H *
[ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct
elim (isrt_inv_max … Hc) -Hc #nV #nT #HcV #HcT #H destruct
qed-.
lemma cpm_inv_cast1 (h) (n) (G) (L):
- â\88\80V1,U1,U2. â\9dªG,Lâ\9d« ⊢ ⓝV1.U1 ➡[h,n] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,n] V2 & â\9dªG,Lâ\9d« ⊢ U1 ➡[h,n] T2 & U2 = ⓝV2.T2
- | â\9dªG,Lâ\9d« ⊢ U1 ➡[h,n] U2
- | â\88\83â\88\83m. â\9dªG,Lâ\9d« ⊢ V1 ➡[h,m] U2 & n = ↑m.
+ â\88\80V1,U1,U2. â\9d¨G,Lâ\9d© ⊢ ⓝV1.U1 ➡[h,n] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,n] V2 & â\9d¨G,Lâ\9d© ⊢ U1 ➡[h,n] T2 & U2 = ⓝV2.T2
+ | â\9d¨G,Lâ\9d© ⊢ U1 ➡[h,n] U2
+ | â\88\83â\88\83m. â\9d¨G,Lâ\9d© ⊢ V1 ➡[h,m] U2 & n = ↑m.
#h #n #G #L #V1 #U1 #U2 * #c #Hc #H elim (cpg_inv_cast1 … H) -H *
[ #cV #cT #V2 #T2 #HV12 #HT12 #HcVT #H1 #H2 destruct
elim (isrt_inv_max … Hc) -Hc #nV #nT #HcV #HcT #H destruct
(* Basic_2A1: includes: cpr_fwd_bind1_minus *)
lemma cpm_fwd_bind1_minus (h) (n) (G) (L):
- â\88\80I,V1,T1,T. â\9dªG,Lâ\9d« ⊢ -ⓑ[I]V1.T1 ➡[h,n] T → ∀p.
- â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ➡[h,n] ⓑ[p,I]V2.T2 & T = -ⓑ[I]V2.T2.
+ â\88\80I,V1,T1,T. â\9d¨G,Lâ\9d© ⊢ -ⓑ[I]V1.T1 ➡[h,n] T → ∀p.
+ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ➡[h,n] ⓑ[p,I]V2.T2 & T = -ⓑ[I]V2.T2.
#h #n #G #L #I #V1 #T1 #T * #c #Hc #H #p elim (cpg_fwd_bind1_minus … H p) -H
/3 width=4 by ex2_2_intro, ex2_intro/
qed-.
lemma cpm_ind (h) (Q:relation5 …):
(∀I,G,L. Q 0 G L (⓪[I]) (⓪[I])) →
(∀G,L,s. Q 1 G L (⋆s) (⋆(⫯[h]s))) →
- (â\88\80n,G,K,V1,V2,W2. â\9dªG,Kâ\9d« ⊢ V1 ➡[h,n] V2 → Q n G K V1 V2 →
+ (â\88\80n,G,K,V1,V2,W2. â\9d¨G,Kâ\9d© ⊢ V1 ➡[h,n] V2 → Q n G K V1 V2 →
⇧[1] V2 ≘ W2 → Q n G (K.ⓓV1) (#0) W2
- ) â\86\92 (â\88\80n,G,K,V1,V2,W2. â\9dªG,Kâ\9d« ⊢ V1 ➡[h,n] V2 → Q n G K V1 V2 →
+ ) â\86\92 (â\88\80n,G,K,V1,V2,W2. â\9d¨G,Kâ\9d© ⊢ V1 ➡[h,n] V2 → Q n G K V1 V2 →
⇧[1] V2 ≘ W2 → Q (↑n) G (K.ⓛV1) (#0) W2
- ) â\86\92 (â\88\80n,I,G,K,T,U,i. â\9dªG,Kâ\9d« ⊢ #i ➡[h,n] T → Q n G K (#i) T →
+ ) â\86\92 (â\88\80n,I,G,K,T,U,i. â\9d¨G,Kâ\9d© ⊢ #i ➡[h,n] T → Q n G K (#i) T →
⇧[1] T ≘ U → Q n G (K.ⓘ[I]) (#↑i) (U)
- ) â\86\92 (â\88\80n,p,I,G,L,V1,V2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ➡[h,n] T2 →
+ ) â\86\92 (â\88\80n,p,I,G,L,V1,V2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9d¨G,L.â\93\91[I]V1â\9d© ⊢ T1 ➡[h,n] 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)
- ) â\86\92 (â\88\80n,G,L,V1,V2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n] T2 →
+ ) â\86\92 (â\88\80n,G,L,V1,V2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n] T2 →
Q 0 G L V1 V2 → Q n G L T1 T2 → Q n G L (ⓐV1.T1) (ⓐV2.T2)
- ) â\86\92 (â\88\80n,G,L,V1,V2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,n] V2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n] T2 →
+ ) â\86\92 (â\88\80n,G,L,V1,V2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,n] V2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n] 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. â\87§[1] T â\89\98 T1 â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡[h,n] T2 →
+ ) â\86\92 (â\88\80n,G,L,V,T1,T,T2. â\87§[1] T â\89\98 T1 â\86\92 â\9d¨G,Lâ\9d© ⊢ T ➡[h,n] T2 →
Q n G L T T2 → Q n G L (+ⓓV.T1) T2
- ) â\86\92 (â\88\80n,G,L,V,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n] T2 →
+ ) â\86\92 (â\88\80n,G,L,V,T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n] T2 →
Q n G L T1 T2 → Q n G L (ⓝV.T1) T2
- ) â\86\92 (â\88\80n,G,L,V1,V2,T. â\9dªG,Lâ\9d« ⊢ V1 ➡[h,n] V2 →
+ ) â\86\92 (â\88\80n,G,L,V1,V2,T. â\9d¨G,Lâ\9d© ⊢ V1 ➡[h,n] V2 →
Q n G L V1 V2 → Q (↑n) G L (ⓝV1.T) V2
- ) â\86\92 (â\88\80n,p,G,L,V1,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡[h,0] W2 â\86\92 â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ➡[h,n] T2 →
+ ) â\86\92 (â\88\80n,p,G,L,V1,V2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9d¨G,Lâ\9d© â\8a¢ W1 â\9e¡[h,0] W2 â\86\92 â\9d¨G,L.â\93\9bW1â\9d© ⊢ T1 ➡[h,n] T2 →
Q 0 G L V1 V2 → Q 0 G L W1 W2 → Q n G (L.ⓛW1) T1 T2 →
Q n G L (ⓐV1.ⓛ[p]W1.T1) (ⓓ[p]ⓝW2.V2.T2)
- ) â\86\92 (â\88\80n,p,G,L,V1,V,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡[h,0] W2 â\86\92 â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ➡[h,n] T2 →
+ ) â\86\92 (â\88\80n,p,G,L,V1,V,V2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V â\86\92 â\9d¨G,Lâ\9d© â\8a¢ W1 â\9e¡[h,0] W2 â\86\92 â\9d¨G,L.â\93\93W1â\9d© ⊢ T1 ➡[h,n] T2 →
Q 0 G L V1 V → Q 0 G L W1 W2 → Q n G (L.ⓓW1) T1 T2 →
⇧[1] V ≘ V2 → Q n G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2)
) →
- â\88\80n,G,L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n] T2 → Q n G L T1 T2.
+ â\88\80n,G,L,T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n] 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
* #c #HC #H generalize in match HC; -HC generalize in match n; -n
elim H -c -G -L -T1 -T2
(* Note: one of these U is the inferred type of T *)
lemma aaa_cpm_SO (h) (G) (L) (A):
- â\88\80T. â\9dªG,Lâ\9d« â\8a¢ T â\81\9d A â\86\92 â\88\83U. â\9dªG,Lâ\9d« ⊢ T ➡[h,1] U.
+ â\88\80T. â\9d¨G,Lâ\9d© â\8a¢ T â\81\9d A â\86\92 â\88\83U. â\9d¨G,Lâ\9d© ⊢ T ➡[h,1] U.
#h #G #L #A #T #H elim H -G -L -T -A
[ /3 width=2 by ex_intro/
| * #G #L #V #B #_ * #V0 #HV0
(* Basic_2A1: includes: cpr_cpx *)
lemma cpm_fwd_cpx (h) (n) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈ T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬈ T2.
#h #n #G #L #T1 #T2 * #c #_ #HT12
/2 width=4 by cpg_cpx/
qed-.
(* Basic_2A1: includes: cpr_delta *)
lemma cpm_delta_drops (h) (n) (G) (L):
∀K,V,V2,W2,i.
- â\87©[i] L â\89\98 K.â\93\93V â\86\92 â\9dªG,Kâ\9d« ⊢ V ➡[h,n] V2 →
- â\87§[â\86\91i] V2 â\89\98 W2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ➡[h,n] W2.
+ â\87©[i] L â\89\98 K.â\93\93V â\86\92 â\9d¨G,Kâ\9d© ⊢ V ➡[h,n] V2 →
+ â\87§[â\86\91i] V2 â\89\98 W2 â\86\92 â\9d¨G,Lâ\9d© ⊢ #i ➡[h,n] W2.
#h #n #G #L #K #V #V2 #W2 #i #HLK *
/3 width=8 by cpg_delta_drops, ex2_intro/
qed.
lemma cpm_ell_drops (h) (n) (G) (L):
∀K,V,V2,W2,i.
- â\87©[i] L â\89\98 K.â\93\9bV â\86\92 â\9dªG,Kâ\9d« ⊢ V ➡[h,n] V2 →
- â\87§[â\86\91i] V2 â\89\98 W2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ➡[h,↑n] W2.
+ â\87©[i] L â\89\98 K.â\93\9bV â\86\92 â\9d¨G,Kâ\9d© ⊢ V ➡[h,n] V2 →
+ â\87§[â\86\91i] V2 â\89\98 W2 â\86\92 â\9d¨G,Lâ\9d© ⊢ #i ➡[h,↑n] W2.
#h #n #G #L #K #V #V2 #W2 #i #HLK *
/3 width=8 by cpg_ell_drops, isrt_succ, ex2_intro/
qed.
(* Advanced inversion lemmas ************************************************)
lemma cpm_inv_atom1_drops (h) (n) (G) (L):
- â\88\80I,T2. â\9dªG,Lâ\9d« ⊢ ⓪[I] ➡[h,n] T2 →
+ â\88\80I,T2. â\9d¨G,Lâ\9d© ⊢ ⓪[I] ➡[h,n] T2 →
∨∨ ∧∧ T2 = ⓪[I] & n = 0
| ∃∃s. T2 = ⋆(⫯[h]s) & I = Sort s & n = 1
- | â\88\83â\88\83K,V,V2,i. â\87©[i] L â\89\98 K.â\93\93V & â\9dªG,Kâ\9d« ⊢ V ➡[h,n] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i
- | â\88\83â\88\83m,K,V,V2,i. â\87©[i] L â\89\98 K.â\93\9bV & â\9dªG,Kâ\9d« ⊢ V ➡[h,m] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i & n = ↑m.
+ | â\88\83â\88\83K,V,V2,i. â\87©[i] L â\89\98 K.â\93\93V & â\9d¨G,Kâ\9d© ⊢ V ➡[h,n] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i
+ | â\88\83â\88\83m,K,V,V2,i. â\87©[i] L â\89\98 K.â\93\9bV & â\9d¨G,Kâ\9d© ⊢ V ➡[h,m] V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i & n = ↑m.
#h #n #G #L #I #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/
qed-.
lemma cpm_inv_lref1_drops (h) (n) (G) (L):
- â\88\80T2,i. â\9dªG,Lâ\9d« ⊢ #i ➡[h,n] T2 →
+ â\88\80T2,i. â\9d¨G,Lâ\9d© ⊢ #i ➡[h,n] T2 →
∨∨ ∧∧ T2 = #i & n = 0
- | â\88\83â\88\83K,V,V2. â\87©[i] L â\89\98 K.â\93\93V & â\9dªG,Kâ\9d« ⊢ V ➡[h,n] V2 & ⇧[↑i] V2 ≘ T2
- | â\88\83â\88\83m,K,V,V2. â\87©[i] L â\89\98 K. â\93\9bV & â\9dªG,Kâ\9d« ⊢ V ➡[h,m] V2 & ⇧[↑i] V2 ≘ T2 & n = ↑m.
+ | â\88\83â\88\83K,V,V2. â\87©[i] L â\89\98 K.â\93\93V & â\9d¨G,Kâ\9d© ⊢ V ➡[h,n] V2 & ⇧[↑i] V2 ≘ T2
+ | â\88\83â\88\83m,K,V,V2. â\87©[i] L â\89\98 K. â\93\9bV & â\9d¨G,Kâ\9d© ⊢ V ➡[h,m] V2 & ⇧[↑i] V2 ≘ T2 & n = ↑m.
#h #n #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/
(* Advanced forward lemmas **************************************************)
fact cpm_fwd_plus_aux (h) (n) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n] T2 →
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n] T2 →
∀n1,n2. n1+n2 = n →
- â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,n1] T & â\9dªG,Lâ\9d« ⊢ T ➡[h,n2] T2.
+ â\88\83â\88\83T. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,n1] T & â\9d¨G,Lâ\9d© ⊢ T ➡[h,n2] T2.
#h #n #G #L #T1 #T2 #H @(cpm_ind … H) -G -L -T1 -T2 -n
[ #I #G #L #n1 #n2 #H
elim (plus_inv_O3 … H) -H #H1 #H2 destruct
qed-.
lemma cpm_fwd_plus (h) (G) (L):
- â\88\80n1,n2,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n1+n2] T2 →
- â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,n1] T & â\9dªG,Lâ\9d« ⊢ T ➡[h,n2] T2.
+ â\88\80n1,n2,T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n1+n2] T2 →
+ â\88\83â\88\83T. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,n1] T & â\9d¨G,Lâ\9d© ⊢ T ➡[h,n2] T2.
/2 width=3 by cpm_fwd_plus_aux/ qed-.
(* Basic_2A1: includes: cpr_fpbq *)
(* Basic_2A1: uses: cpm_fpbq *)
lemma cpm_fwd_fpb (h) (n) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,n] T2 â\86\92 â\9dªG,L,T1â\9d« â\89½ â\9dªG,L,T2â\9d«.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,n] T2 â\86\92 â\9d¨G,L,T1â\9d© â\89½ â\9d¨G,L,T2â\9d©.
/3 width=3 by cpx_fpb, cpm_fwd_cpx/ qed-.
(* Basic_2A1: includes: cpr_fpb *)
(* Basic_2A1: uses: cpm_fpb *)
lemma cpm_fwd_fpbc (h) (n) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h,n] T2 â\86\92 (T1 â\89\85 T2 â\86\92 â\8a¥) â\86\92 â\9dªG,L,T1â\9d« â\89» â\9dªG,L,T2â\9d«.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â\9e¡[h,n] T2 â\86\92 (T1 â\89\85 T2 â\86\92 â\8a¥) â\86\92 â\9d¨G,L,T1â\9d© â\89» â\9d¨G,L,T2â\9d©.
/3 width=3 by cpx_fpbc, cpm_fwd_cpx/ qed-.
#h #n #G #L1 #T1 #T2 * /3 width=5 by lsubr_cpg_trans, ex2_intro/
qed-.
-lemma cpm_bind_unit (h) (n) (G): â\88\80L,V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h,0] V2 →
- â\88\80J,T1,T2. â\9dªG,L.â\93¤[J]â\9d« ⊢ T1 ➡[h,n] T2 →
- â\88\80p,I. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ➡[h,n] ⓑ[p,I]V2.T2.
+lemma cpm_bind_unit (h) (n) (G): â\88\80L,V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ➡[h,0] V2 →
+ â\88\80J,T1,T2. â\9d¨G,L.â\93¤[J]â\9d© ⊢ T1 ➡[h,n] T2 →
+ â\88\80p,I. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ➡[h,n] ⓑ[p,I]V2.T2.
/4 width=4 by lsubr_cpm_trans, cpm_bind, lsubr_unit/ qed.
(* Properties with simple terms *********************************************)
(* Basic_2A1: includes: cpr_inv_appl1_simple *)
-lemma cpm_inv_appl1_simple: â\88\80h,n,G,L,V1,T1,U. â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.T1 â\9e¡[h,n] U â\86\92 ð\9d\90\92â\9dªT1â\9d« →
- â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 & â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n] T2 &
+lemma cpm_inv_appl1_simple: â\88\80h,n,G,L,V1,T1,U. â\9d¨G,Lâ\9d© â\8a¢ â\93\90V1.T1 â\9e¡[h,n] U â\86\92 ð\9d\90\92â\9d¨T1â\9d© →
+ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 & â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n] T2 &
U = ⓐV2.T2.
#h #n #G #L #V1 #T1 #U * #c #Hc #H #HT1 elim (cpg_inv_appl1_simple … H HT1) -H -HT1
#cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct elim (isrt_inv_max … Hc) -Hc
(* Inversion lemmas with sort-irrelevant equivalence for terms **************)
lemma cpm_teqx_inv_lref_sn (h) (n) (G) (L) (i):
- â\88\80X. â\9dªG,Lâ\9d« ⊢ #i ➡[h,n] X → #i ≅ X →
+ â\88\80X. â\9d¨G,Lâ\9d© ⊢ #i ➡[h,n] X → #i ≅ X →
∧∧ X = #i & n = 0.
#h #n #G #L #i #X #H1 #H2
lapply (teqg_inv_lref1 … H2) -H2 #H destruct
qed-.
lemma cpm_teqx_inv_atom_sn (h) (n) (I) (G) (L):
- â\88\80X. â\9dªG,Lâ\9d« ⊢ ⓪[I] ➡[h,n] X → ⓪[I] ≅ X →
+ â\88\80X. â\9d¨G,Lâ\9d© ⊢ ⓪[I] ➡[h,n] X → ⓪[I] ≅ X →
∨∨ ∧∧ X = ⓪[I] & n = 0
| ∃∃s. X = ⋆(⫯[h]s) & I = Sort s & n = 1.
#h #n * #s #G #L #X #H1 #H2
(* Note: cpr_flat: does not hold in basic_1 *)
(* Basic_1: includes: pr2_thin_dx *)
lemma cpr_flat: ∀h,I,G,L,V1,V2,T1,T2.
- â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡[h,0] T2 →
- â\9dªG,Lâ\9d« ⊢ ⓕ[I]V1.T1 ➡[h,0] ⓕ[I]V2.T2.
+ â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,0] T2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓕ[I]V1.T1 ➡[h,0] ⓕ[I]V2.T2.
#h * /2 width=1 by cpm_cast, cpm_appl/
qed.
(* Basic_1: was: pr2_head_1 *)
-lemma cpr_pair_sn: â\88\80h,I,G,L,V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h,0] V2 →
- â\88\80T. â\9dªG,Lâ\9d« ⊢ ②[I]V1.T ➡[h,0] ②[I]V2.T.
+lemma cpr_pair_sn: â\88\80h,I,G,L,V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ➡[h,0] V2 →
+ â\88\80T. â\9d¨G,Lâ\9d© ⊢ ②[I]V1.T ➡[h,0] ②[I]V2.T.
#h * /2 width=1 by cpm_bind, cpr_flat/
qed.
(* Basic inversion properties ***********************************************)
-lemma cpr_inv_atom1: â\88\80h,J,G,L,T2. â\9dªG,Lâ\9d« ⊢ ⓪[J] ➡[h,0] T2 →
+lemma cpr_inv_atom1: â\88\80h,J,G,L,T2. â\9d¨G,Lâ\9d© ⊢ ⓪[J] ➡[h,0] T2 →
∨∨ T2 = ⓪[J]
- | â\88\83â\88\83K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡[h,0] V2 & ⇧[1] V2 ≘ T2 &
+ | â\88\83â\88\83K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ➡[h,0] V2 & ⇧[1] V2 ≘ T2 &
L = K.ⓓV1 & J = LRef 0
- | â\88\83â\88\83I,K,T,i. â\9dªG,Kâ\9d« ⊢ #i ➡[h,0] T & ⇧[1] T ≘ T2 &
+ | â\88\83â\88\83I,K,T,i. â\9d¨G,Kâ\9d© ⊢ #i ➡[h,0] T & ⇧[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/ ]
qed-.
(* Basic_1: includes: pr0_gen_sort pr2_gen_sort *)
-lemma cpr_inv_sort1: â\88\80h,G,L,T2,s. â\9dªG,Lâ\9d« ⊢ ⋆s ➡[h,0] T2 → T2 = ⋆s.
+lemma cpr_inv_sort1: â\88\80h,G,L,T2,s. â\9d¨G,Lâ\9d© ⊢ ⋆s ➡[h,0] T2 → T2 = ⋆s.
#h #G #L #T2 #s #H elim (cpm_inv_sort1 … H) -H //
qed-.
-lemma cpr_inv_zero1: â\88\80h,G,L,T2. â\9dªG,Lâ\9d« ⊢ #0 ➡[h,0] T2 →
+lemma cpr_inv_zero1: â\88\80h,G,L,T2. â\9d¨G,Lâ\9d© ⊢ #0 ➡[h,0] T2 →
∨∨ T2 = #0
- | â\88\83â\88\83K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡[h,0] V2 & ⇧[1] V2 ≘ T2 &
+ | â\88\83â\88\83K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ➡[h,0] V2 & ⇧[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/
#n #K #V1 #V2 #_ #_ #_ #H destruct
qed-.
-lemma cpr_inv_lref1: â\88\80h,G,L,T2,i. â\9dªG,Lâ\9d« ⊢ #↑i ➡[h,0] T2 →
+lemma cpr_inv_lref1: â\88\80h,G,L,T2,i. â\9d¨G,Lâ\9d© ⊢ #↑i ➡[h,0] T2 →
∨∨ T2 = #(↑i)
- | â\88\83â\88\83I,K,T. â\9dªG,Kâ\9d« ⊢ #i ➡[h,0] T & ⇧[1] T ≘ T2 & L = K.ⓘ[I].
+ | â\88\83â\88\83I,K,T. â\9d¨G,Kâ\9d© ⊢ #i ➡[h,0] T & ⇧[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-.
-lemma cpr_inv_gref1: â\88\80h,G,L,T2,l. â\9dªG,Lâ\9d« ⊢ §l ➡[h,0] T2 → T2 = §l.
+lemma cpr_inv_gref1: â\88\80h,G,L,T2,l. â\9d¨G,Lâ\9d© ⊢ §l ➡[h,0] T2 → T2 = §l.
#h #G #L #T2 #l #H elim (cpm_inv_gref1 … H) -H //
qed-.
(* Basic_1: includes: pr0_gen_cast pr2_gen_cast *)
-lemma cpr_inv_cast1: â\88\80h,G,L,V1,U1,U2. â\9dªG,Lâ\9d« ⊢ ⓝ V1.U1 ➡[h,0] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 & â\9dªG,Lâ\9d« ⊢ U1 ➡[h,0] T2 &
+lemma cpr_inv_cast1: â\88\80h,G,L,V1,U1,U2. â\9d¨G,Lâ\9d© ⊢ ⓝ V1.U1 ➡[h,0] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 & â\9d¨G,Lâ\9d© ⊢ U1 ➡[h,0] T2 &
U2 = ⓝV2.T2
- | â\9dªG,Lâ\9d« ⊢ U1 ➡[h,0] U2.
+ | â\9d¨G,Lâ\9d© ⊢ U1 ➡[h,0] U2.
#h #G #L #V1 #U1 #U2 #H elim (cpm_inv_cast1 … H) -H
/2 width=1 by or_introl, or_intror/ * #n #_ #H destruct
qed-.
-lemma cpr_inv_flat1: â\88\80h,I,G,L,V1,U1,U2. â\9dªG,Lâ\9d« ⊢ ⓕ[I]V1.U1 ➡[h,0] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 & â\9dªG,Lâ\9d« ⊢ U1 ➡[h,0] T2 &
+lemma cpr_inv_flat1: â\88\80h,I,G,L,V1,U1,U2. â\9d¨G,Lâ\9d© ⊢ ⓕ[I]V1.U1 ➡[h,0] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 & â\9d¨G,Lâ\9d© ⊢ U1 ➡[h,0] T2 &
U2 = ⓕ[I]V2.T2
- | (â\9dªG,Lâ\9d« ⊢ U1 ➡[h,0] U2 ∧ I = Cast)
- | â\88\83â\88\83p,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 & â\9dªG,Lâ\9d« ⊢ W1 ➡[h,0] W2 &
- â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ➡[h,0] T2 & U1 = ⓛ[p]W1.T1 &
+ | (â\9d¨G,Lâ\9d© ⊢ U1 ➡[h,0] U2 ∧ I = Cast)
+ | â\88\83â\88\83p,V2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 & â\9d¨G,Lâ\9d© ⊢ W1 ➡[h,0] W2 &
+ â\9d¨G,L.â\93\9bW1â\9d© ⊢ T1 ➡[h,0] T2 & U1 = ⓛ[p]W1.T1 &
U2 = ⓓ[p]ⓝW2.V2.T2 & I = Appl
- | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h,0] V & ⇧[1] V ≘ V2 &
- â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡[h,0] W2 & â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ➡[h,0] T2 &
+ | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© ⊢ V1 ➡[h,0] V & ⇧[1] V ≘ V2 &
+ â\9d¨G,Lâ\9d© â\8a¢ W1 â\9e¡[h,0] W2 & â\9d¨G,L.â\93\93W1â\9d© ⊢ T1 ➡[h,0] T2 &
U1 = ⓓ[p]W1.T1 &
U2 = ⓓ[p]W2.ⓐV2.T2 & I = Appl.
#h * #G #L #V1 #U1 #U2 #H
lemma cpr_ind (h): ∀Q:relation4 genv lenv term term.
(∀I,G,L. Q G L (⓪[I]) (⓪[I])) →
- (â\88\80G,K,V1,V2,W2. â\9dªG,Kâ\9d« ⊢ V1 ➡[h,0] V2 → Q G K V1 V2 →
+ (â\88\80G,K,V1,V2,W2. â\9d¨G,Kâ\9d© ⊢ V1 ➡[h,0] V2 → Q G K V1 V2 →
⇧[1] V2 ≘ W2 → Q G (K.ⓓV1) (#0) W2
- ) â\86\92 (â\88\80I,G,K,T,U,i. â\9dªG,Kâ\9d« ⊢ #i ➡[h,0] T → Q G K (#i) T →
+ ) â\86\92 (â\88\80I,G,K,T,U,i. â\9d¨G,Kâ\9d© ⊢ #i ➡[h,0] T → Q G K (#i) T →
⇧[1] T ≘ U → Q G (K.ⓘ[I]) (#↑i) (U)
- ) â\86\92 (â\88\80p,I,G,L,V1,V2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ➡[h,0] T2 →
+ ) â\86\92 (â\88\80p,I,G,L,V1,V2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9d¨G,L.â\93\91[I]V1â\9d© ⊢ T1 ➡[h,0] T2 →
Q G L V1 V2 → Q G (L.ⓑ[I]V1) T1 T2 → Q G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2)
- ) â\86\92 (â\88\80I,G,L,V1,V2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡[h,0] T2 →
+ ) â\86\92 (â\88\80I,G,L,V1,V2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,0] 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. â\87§[1] T â\89\98 T1 â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡[h,0] T2 →
+ ) â\86\92 (â\88\80G,L,V,T1,T,T2. â\87§[1] T â\89\98 T1 â\86\92 â\9d¨G,Lâ\9d© ⊢ T ➡[h,0] T2 →
Q G L T T2 → Q G L (+ⓓV.T1) T2
- ) â\86\92 (â\88\80G,L,V,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,0] T2 → Q G L T1 T2 →
+ ) â\86\92 (â\88\80G,L,V,T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,0] T2 → Q G L T1 T2 →
Q G L (ⓝV.T1) T2
- ) â\86\92 (â\88\80p,G,L,V1,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡[h,0] W2 â\86\92 â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ➡[h,0] T2 →
+ ) â\86\92 (â\88\80p,G,L,V1,V2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V2 â\86\92 â\9d¨G,Lâ\9d© â\8a¢ W1 â\9e¡[h,0] W2 â\86\92 â\9d¨G,L.â\93\9bW1â\9d© ⊢ T1 ➡[h,0] T2 →
Q G L V1 V2 → Q G L W1 W2 → Q G (L.ⓛW1) T1 T2 →
Q G L (ⓐV1.ⓛ[p]W1.T1) (ⓓ[p]ⓝW2.V2.T2)
- ) â\86\92 (â\88\80p,G,L,V1,V,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h,0] V â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡[h,0] W2 â\86\92 â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ➡[h,0] T2 →
+ ) â\86\92 (â\88\80p,G,L,V1,V,V2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â\9e¡[h,0] V â\86\92 â\9d¨G,Lâ\9d© â\8a¢ W1 â\9e¡[h,0] W2 â\86\92 â\9d¨G,L.â\93\93W1â\9d© ⊢ T1 ➡[h,0] T2 →
Q G L V1 V → Q G L W1 W2 → Q G (L.ⓓW1) T1 T2 →
⇧[1] V ≘ V2 → Q G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2)
) →
- â\88\80G,L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[h,0] T2 → Q G L T1 T2.
+ â\88\80G,L,T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,0] T2 → Q G L T1 T2.
#h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #G #L #T1 #T2
@(insert_eq_0 … 0) #n #H
@(cpm_ind … H) -G -L -T1 -T2 -n [2,4,11:|*: /3 width=4 by/ ]
(* Advanced inversion lemmas ************************************************)
(* Basic_2A1: includes: cpr_inv_atom1 *)
-lemma cpr_inv_atom1_drops: â\88\80h,I,G,L,T2. â\9dªG,Lâ\9d« ⊢ ⓪[I] ➡[h,0] T2 →
+lemma cpr_inv_atom1_drops: â\88\80h,I,G,L,T2. â\9d¨G,Lâ\9d© ⊢ ⓪[I] ➡[h,0] T2 →
∨∨ T2 = ⓪[I]
- | â\88\83â\88\83K,V,V2,i. â\87©[i] L â\89\98 K.â\93\93V & â\9dªG,Kâ\9d« ⊢ V ➡[h,0] V2 &
+ | â\88\83â\88\83K,V,V2,i. â\87©[i] L â\89\98 K.â\93\93V & â\9d¨G,Kâ\9d© ⊢ V ➡[h,0] V2 &
⇧[↑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/
(* Basic_1: includes: pr0_gen_lref pr2_gen_lref *)
(* Basic_2A1: includes: cpr_inv_lref1 *)
-lemma cpr_inv_lref1_drops: â\88\80h,G,L,T2,i. â\9dªG,Lâ\9d« ⊢ #i ➡[h,0] T2 →
+lemma cpr_inv_lref1_drops: â\88\80h,G,L,T2,i. â\9d¨G,Lâ\9d© ⊢ #i ➡[h,0] T2 →
∨∨ T2 = #i
- | â\88\83â\88\83K,V,V2. â\87©[i] L â\89\98 K. â\93\93V & â\9dªG,Kâ\9d« ⊢ V ➡[h,0] V2 &
+ | â\88\83â\88\83K,V,V2. â\87©[i] L â\89\98 K. â\93\93V & â\9d¨G,Kâ\9d© ⊢ V ➡[h,0] V2 &
⇧[↑i] V2 ≘ T2.
#h #G #L #T2 #i #H elim (cpm_inv_lref1_drops … H) -H *
[ /2 width=1 by or_introl/
lemma cpr_subst (h) (G) (L) (U1) (i):
∀K,V. ⇩[i] L ≘ K.ⓓV →
- â\88\83â\88\83U2,T2. â\9dªG,Lâ\9d« ⊢ U1 ➡[h,0] U2 & ⇧[i,1] T2 ≘ U2.
+ â\88\83â\88\83U2,T2. â\9d¨G,Lâ\9d© ⊢ U1 ➡[h,0] U2 & ⇧[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
lemma cpr_abbr_pos_tneqx (S) (h) (G) (L) (V) (T1):
symmetric … S → (∀s1,s2. Decidable (S s1 s2)) →
- â\88\83â\88\83T2. â\9dªG,Lâ\9d« ⊢ +ⓓV.T1 ➡[h,0] T2 & (+ⓓV.T1 ≛[S] T2 → ⊥).
+ â\88\83â\88\83T2. â\9d¨G,Lâ\9d© ⊢ +ⓓV.T1 ➡[h,0] T2 & (+ⓓV.T1 ≛[S] T2 → ⊥).
#S #h #G #L #V #U1 #H1S #H2S
elim (cpr_subst h G (L.ⓓV) U1 … 0) [|*: /2 width=4 by drops_refl/ ] #U2 #T2 #HU12 #HTU2
elim (teqg_dec … H2S U1 U2) [ -HU12 #HU12 | -HTU2 #HnU12 ]
(* T-BOUND CONTEXT-SENSITIVE PARALLEL T-TRANSITION FOR TERMS ****************)
definition cpt (h) (G) (L) (n): relation2 term term ≝
- λT1,T2. â\88\83â\88\83c. ð\9d\90\93â\9dªn,câ\9d« & â\9dªG,Lâ\9d« ⊢ T1 ⬈[sh_is_next h,eq …,c] T2.
+ λT1,T2. â\88\83â\88\83c. ð\9d\90\93â\9d¨n,câ\9d© & â\9d¨G,Lâ\9d© ⊢ T1 ⬈[sh_is_next h,eq …,c] T2.
interpretation
"t-bound context-sensitive parallel t-transition (term)"
(* Basic properties *********************************************************)
lemma cpt_ess (h) (G) (L):
- â\88\80s. â\9dªG,Lâ\9d« ⊢ ⋆s ⬆[h,1] ⋆(⫯[h]s).
+ â\88\80s. â\9d¨G,Lâ\9d© ⊢ ⋆s ⬆[h,1] ⋆(⫯[h]s).
/3 width=3 by cpg_ess, ex2_intro/ qed.
lemma cpt_delta (h) (n) (G) (K):
- â\88\80V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬆[h,n] V2 →
- â\88\80W2. â\87§[1] V2 â\89\98 W2 â\86\92 â\9dªG,K.â\93\93V1â\9d« ⊢ #0 ⬆[h,n] W2.
+ â\88\80V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬆[h,n] V2 →
+ â\88\80W2. â\87§[1] V2 â\89\98 W2 â\86\92 â\9d¨G,K.â\93\93V1â\9d© ⊢ #0 ⬆[h,n] W2.
#h #n #G #K #V1 #V2 *
/3 width=5 by cpg_delta, ex2_intro/
qed.
lemma cpt_ell (h) (n) (G) (K):
- â\88\80V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬆[h,n] V2 →
- â\88\80W2. â\87§[1] V2 â\89\98 W2 â\86\92 â\9dªG,K.â\93\9bV1â\9d« ⊢ #0 ⬆[h,↑n] W2.
+ â\88\80V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬆[h,n] V2 →
+ â\88\80W2. â\87§[1] V2 â\89\98 W2 â\86\92 â\9d¨G,K.â\93\9bV1â\9d© ⊢ #0 ⬆[h,↑n] W2.
#h #n #G #K #V1 #V2 *
/3 width=5 by cpg_ell, ex2_intro, ist_succ/
qed.
lemma cpt_lref (h) (n) (G) (K):
- â\88\80T,i. â\9dªG,Kâ\9d« ⊢ #i ⬆[h,n] T → ∀U. ⇧[1] T ≘ U →
- â\88\80I. â\9dªG,K.â\93\98[I]â\9d« ⊢ #↑i ⬆[h,n] U.
+ â\88\80T,i. â\9d¨G,Kâ\9d© ⊢ #i ⬆[h,n] T → ∀U. ⇧[1] T ≘ U →
+ â\88\80I. â\9d¨G,K.â\93\98[I]â\9d© ⊢ #↑i ⬆[h,n] U.
#h #n #G #K #T #i *
/3 width=5 by cpg_lref, ex2_intro/
qed.
lemma cpt_bind (h) (n) (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\86[h,0] V2 â\86\92 â\88\80I,T1,T2. â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ⬆[h,n] T2 →
- â\88\80p. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ⬆[h,n] ⓑ[p,I]V2.T2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\86[h,0] V2 â\86\92 â\88\80I,T1,T2. â\9d¨G,L.â\93\91[I]V1â\9d© ⊢ T1 ⬆[h,n] T2 →
+ â\88\80p. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ⬆[h,n] ⓑ[p,I]V2.T2.
#h #n #G #L #V1 #V2 * #cV #HcV #HV12 #I #T1 #T2 *
/3 width=5 by cpg_bind, ist_max_O1, ex2_intro/
qed.
lemma cpt_appl (h) (n) (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬆[h,0] V2 →
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\86[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⓐV1.T1 ⬆[h,n] ⓐV2.T2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬆[h,0] V2 →
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\86[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓐV1.T1 ⬆[h,n] ⓐV2.T2.
#h #n #G #L #V1 #V2 * #cV #HcV #HV12 #T1 #T2 *
/3 width=5 by ist_max_O1, cpg_appl, ex2_intro/
qed.
lemma cpt_cast (h) (n) (G) (L):
- â\88\80U1,U2. â\9dªG,Lâ\9d« ⊢ U1 ⬆[h,n] U2 →
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\86[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⓝU1.T1 ⬆[h,n] ⓝU2.T2.
+ â\88\80U1,U2. â\9d¨G,Lâ\9d© ⊢ U1 ⬆[h,n] U2 →
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\86[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓝU1.T1 ⬆[h,n] ⓝU2.T2.
#h #n #G #L #U1 #U2 * #cU #HcU #HU12 #T1 #T2 *
/3 width=6 by cpg_cast, ex2_intro/
qed.
lemma cpt_ee (h) (n) (G) (L):
- â\88\80U1,U2. â\9dªG,Lâ\9d« â\8a¢ U1 â¬\86[h,n] U2 â\86\92 â\88\80T. â\9dªG,Lâ\9d« ⊢ ⓝU1.T ⬆[h,↑n] U2.
+ â\88\80U1,U2. â\9d¨G,Lâ\9d© â\8a¢ U1 â¬\86[h,n] U2 â\86\92 â\88\80T. â\9d¨G,Lâ\9d© ⊢ ⓝU1.T ⬆[h,↑n] U2.
#h #n #G #L #V1 #V2 *
/3 width=3 by cpg_ee, ist_succ, ex2_intro/
qed.
(* Advanced properties ******************************************************)
lemma cpt_sort (h) (G) (L):
- â\88\80n. n â\89¤ 1 â\86\92 â\88\80s. â\9dªG,Lâ\9d« ⊢ ⋆s ⬆[h,n] ⋆((next h)^n s).
+ â\88\80n. n â\89¤ 1 â\86\92 â\88\80s. â\9d¨G,Lâ\9d© ⊢ ⋆s ⬆[h,n] ⋆((next h)^n s).
#h #G #L * //
#n #H #s <(le_n_O_to_eq n) /2 width=1 by le_S_S_to_le/
qed.
(* Basic inversion lemmas ***************************************************)
lemma cpt_inv_atom_sn (h) (n) (J) (G) (L):
- â\88\80X2. â\9dªG,Lâ\9d« ⊢ ⓪[J] ⬆[h,n] X2 →
+ â\88\80X2. â\9d¨G,Lâ\9d© ⊢ ⓪[J] ⬆[h,n] X2 →
∨∨ ∧∧ X2 = ⓪[J] & n = 0
| ∃∃s. X2 = ⋆(⫯[h]s) & J = Sort s & n =1
- | â\88\83â\88\83K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬆[h,n] V2 & ⇧[1] V2 ≘ X2 & L = K.ⓓV1 & J = LRef 0
- | â\88\83â\88\83m,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬆[h,m] V2 & ⇧[1] V2 ≘ X2 & L = K.ⓛV1 & J = LRef 0 & n = ↑m
- | â\88\83â\88\83I,K,T,i. â\9dªG,Kâ\9d« ⊢ #i ⬆[h,n] T & ⇧[1] T ≘ X2 & L = K.ⓘ[I] & J = LRef (↑i).
+ | â\88\83â\88\83K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬆[h,n] V2 & ⇧[1] V2 ≘ X2 & L = K.ⓓV1 & J = LRef 0
+ | â\88\83â\88\83m,K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬆[h,m] V2 & ⇧[1] V2 ≘ X2 & L = K.ⓛV1 & J = LRef 0 & n = ↑m
+ | â\88\83â\88\83I,K,T,i. â\9d¨G,Kâ\9d© ⊢ #i ⬆[h,n] T & ⇧[1] T ≘ X2 & L = K.ⓘ[I] & J = LRef (↑i).
#h #n #J #G #L #X2 * #c #Hc #H
elim (cpg_inv_atom1 … H) -H *
[ #H1 #H2 destruct /3 width=1 by or5_intro0, conj/
qed-.
lemma cpt_inv_sort_sn (h) (n) (G) (L) (s):
- â\88\80X2. â\9dªG,Lâ\9d« ⊢ ⋆s ⬆[h,n] X2 →
+ â\88\80X2. â\9d¨G,Lâ\9d© ⊢ ⋆s ⬆[h,n] X2 →
∧∧ X2 = ⋆(((next h)^n) s) & n ≤ 1.
#h #n #G #L #s #X2 * #c #Hc #H
elim (cpg_inv_sort1 … H) -H * #H1 #H2 destruct
qed-.
lemma cpt_inv_zero_sn (h) (n) (G) (L):
- â\88\80X2. â\9dªG,Lâ\9d« ⊢ #0 ⬆[h,n] X2 →
+ â\88\80X2. â\9d¨G,Lâ\9d© ⊢ #0 ⬆[h,n] X2 →
∨∨ ∧∧ X2 = #0 & n = 0
- | â\88\83â\88\83K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬆[h,n] V2 & ⇧[1] V2 ≘ X2 & L = K.ⓓV1
- | â\88\83â\88\83m,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬆[h,m] V2 & ⇧[1] V2 ≘ X2 & L = K.ⓛV1 & n = ↑m.
+ | â\88\83â\88\83K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬆[h,n] V2 & ⇧[1] V2 ≘ X2 & L = K.ⓓV1
+ | â\88\83â\88\83m,K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬆[h,m] V2 & ⇧[1] V2 ≘ X2 & L = K.ⓛV1 & n = ↑m.
#h #n #G #L #X2 * #c #Hc #H elim (cpg_inv_zero1 … H) -H *
[ #H1 #H2 destruct /4 width=1 by ist_inv_00, or3_intro0, conj/
| #cV #K #V1 #V2 #HV12 #HVT2 #H1 #H2 destruct
qed-.
lemma cpt_inv_zero_sn_unit (h) (n) (I) (K) (G):
- â\88\80X2. â\9dªG,K.â\93¤[I]â\9d« ⊢ #0 ⬆[h,n] X2 → ∧∧ X2 = #0 & n = 0.
+ â\88\80X2. â\9d¨G,K.â\93¤[I]â\9d© ⊢ #0 ⬆[h,n] X2 → ∧∧ X2 = #0 & n = 0.
#h #n #I #G #K #X2 #H
elim (cpt_inv_zero_sn … H) -H *
[ #H1 #H2 destruct /2 width=1 by conj/
qed.
lemma cpt_inv_lref_sn (h) (n) (G) (L) (i):
- â\88\80X2. â\9dªG,Lâ\9d« ⊢ #↑i ⬆[h,n] X2 →
+ â\88\80X2. â\9d¨G,Lâ\9d© ⊢ #↑i ⬆[h,n] X2 →
∨∨ ∧∧ X2 = #(↑i) & n = 0
- | â\88\83â\88\83I,K,T. â\9dªG,Kâ\9d« ⊢ #i ⬆[h,n] T & ⇧[1] T ≘ X2 & L = K.ⓘ[I].
+ | â\88\83â\88\83I,K,T. â\9d¨G,Kâ\9d© ⊢ #i ⬆[h,n] T & ⇧[1] T ≘ X2 & L = K.ⓘ[I].
#h #n #G #L #i #X2 * #c #Hc #H elim (cpg_inv_lref1 … H) -H *
[ #H1 #H2 destruct /4 width=1 by ist_inv_00, or_introl, conj/
| #I #K #V2 #HV2 #HVT2 #H destruct
qed-.
lemma cpt_inv_lref_sn_ctop (h) (n) (G) (i):
- â\88\80X2. â\9dªG,â\8b\86â\9d« ⊢ #i ⬆[h,n] X2 → ∧∧ X2 = #i & n = 0.
+ â\88\80X2. â\9d¨G,â\8b\86â\9d© ⊢ #i ⬆[h,n] X2 → ∧∧ X2 = #i & n = 0.
#h #n #G * [| #i ] #X2 #H
[ elim (cpt_inv_zero_sn … H) -H *
[ #H1 #H2 destruct /2 width=1 by conj/
qed.
lemma cpt_inv_gref_sn (h) (n) (G) (L) (l):
- â\88\80X2. â\9dªG,Lâ\9d« ⊢ §l ⬆[h,n] X2 → ∧∧ X2 = §l & n = 0.
+ â\88\80X2. â\9d¨G,Lâ\9d© ⊢ §l ⬆[h,n] X2 → ∧∧ X2 = §l & n = 0.
#h #n #G #L #l #X2 * #c #Hc #H elim (cpg_inv_gref1 … H) -H
#H1 #H2 destruct /2 width=1 by conj/
qed-.
lemma cpt_inv_bind_sn (h) (n) (p) (I) (G) (L) (V1) (T1):
- â\88\80X2. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ⬆[h,n] X2 →
- â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\86[h,0] V2 & â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ⬆[h,n] T2
+ â\88\80X2. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ⬆[h,n] X2 →
+ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\86[h,0] V2 & â\9d¨G,L.â\93\91[I]V1â\9d© ⊢ T1 ⬆[h,n] T2
& X2 = ⓑ[p,I]V2.T2.
#h #n #p #I #G #L #V1 #T1 #X2 * #c #Hc #H
elim (cpg_inv_bind1 … H) -H *
qed-.
lemma cpt_inv_appl_sn (h) (n) (G) (L) (V1) (T1):
- â\88\80X2. â\9dªG,Lâ\9d« ⊢ ⓐV1.T1 ⬆[h,n] X2 →
- â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\86[h,0] V2 & â\9dªG,Lâ\9d« ⊢ T1 ⬆[h,n] T2 & X2 = ⓐV2.T2.
+ â\88\80X2. â\9d¨G,Lâ\9d© ⊢ ⓐV1.T1 ⬆[h,n] X2 →
+ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\86[h,0] V2 & â\9d¨G,Lâ\9d© ⊢ T1 ⬆[h,n] T2 & X2 = ⓐV2.T2.
#h #n #G #L #V1 #T1 #X2 * #c #Hc #H elim (cpg_inv_appl1 … H) -H *
[ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct
elim (ist_inv_max … H2) -H2 #nV #nT #HcV #HcT #H destruct
qed-.
lemma cpt_inv_cast_sn (h) (n) (G) (L) (V1) (T1):
- â\88\80X2. â\9dªG,Lâ\9d« ⊢ ⓝV1.T1 ⬆[h,n] X2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\86[h,n] V2 & â\9dªG,Lâ\9d« ⊢ T1 ⬆[h,n] T2 & X2 = ⓝV2.T2
- | â\88\83â\88\83m. â\9dªG,Lâ\9d« ⊢ V1 ⬆[h,m] X2 & n = ↑m.
+ â\88\80X2. â\9d¨G,Lâ\9d© ⊢ ⓝV1.T1 ⬆[h,n] X2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\86[h,n] V2 & â\9d¨G,Lâ\9d© ⊢ T1 ⬆[h,n] T2 & X2 = ⓝV2.T2
+ | â\88\83â\88\83m. â\9d¨G,Lâ\9d© ⊢ V1 ⬆[h,m] X2 & n = ↑m.
#h #n #G #L #V1 #T1 #X2 * #c #Hc #H elim (cpg_inv_cast1 … H) -H *
[ #cV #cT #V2 #T2 #HV12 #HT12 #HcVT #H1 #H2 destruct
elim (ist_inv_max … H2) -H2 #nV #nT #HcV #HcT #H destruct
(* Forward lemmas with t-bound rt-transition for terms **********************)
lemma cpt_fwd_cpm (h) (n) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\86[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡[h,n] T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\86[h,n] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ➡[h,n] T2.
#h #n #G #L #T1 #T2 #H
@(cpt_ind … H) -n -G -L -T1 -T2
/3 width=3 by cpm_ee, cpm_cast, cpm_appl, cpm_bind, cpm_lref, cpm_ell, cpm_delta/
(* Advanced properties ******************************************************)
lemma cpt_delta_drops (h) (n) (G):
- â\88\80L,K,V,i. â\87©[i] L â\89\98 K.â\93\93V â\86\92 â\88\80V2. â\9dªG,Kâ\9d« ⊢ V ⬆[h,n] V2 →
- â\88\80W2. â\87§[â\86\91i] V2 â\89\98 W2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ⬆[h,n] W2.
+ â\88\80L,K,V,i. â\87©[i] L â\89\98 K.â\93\93V â\86\92 â\88\80V2. â\9d¨G,Kâ\9d© ⊢ V ⬆[h,n] V2 →
+ â\88\80W2. â\87§[â\86\91i] V2 â\89\98 W2 â\86\92 â\9d¨G,Lâ\9d© ⊢ #i ⬆[h,n] W2.
#h #n #G #L #K #V #i #HLK #V2 *
/3 width=8 by cpg_delta_drops, ex2_intro/
qed.
lemma cpt_ell_drops (h) (n) (G):
- â\88\80L,K,V,i. â\87©[i] L â\89\98 K.â\93\9bV â\86\92 â\88\80V2. â\9dªG,Kâ\9d« ⊢ V ⬆[h,n] V2 →
- â\88\80W2. â\87§[â\86\91i] V2 â\89\98 W2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ⬆[h,↑n] W2.
+ â\88\80L,K,V,i. â\87©[i] L â\89\98 K.â\93\9bV â\86\92 â\88\80V2. â\9d¨G,Kâ\9d© ⊢ V ⬆[h,n] V2 →
+ â\88\80W2. â\87§[â\86\91i] V2 â\89\98 W2 â\86\92 â\9d¨G,Lâ\9d© ⊢ #i ⬆[h,↑n] W2.
#h #n #G #L #K #V #i #HLK #V2 *
/3 width=8 by cpg_ell_drops, ist_succ, ex2_intro/
qed.
(* Advanced inversion lemmas ************************************************)
lemma cpt_inv_atom_sn_drops (h) (n) (I) (G) (L):
- â\88\80X2. â\9dªG,Lâ\9d« ⊢ ⓪[I] ⬆[h,n] X2 →
+ â\88\80X2. â\9d¨G,Lâ\9d© ⊢ ⓪[I] ⬆[h,n] X2 →
∨∨ ∧∧ X2 = ⓪[I] & n = 0
| ∃∃s. X2 = ⋆(⫯[h]s) & I = Sort s & n = 1
- | â\88\83â\88\83K,V,V2,i. â\87©[i] L â\89\98 K.â\93\93V & â\9dªG,Kâ\9d« ⊢ V ⬆[h,n] V2 & ⇧[↑i] V2 ≘ X2 & I = LRef i
- | â\88\83â\88\83m,K,V,V2,i. â\87©[i] L â\89\98 K.â\93\9bV & â\9dªG,Kâ\9d« ⊢ V ⬆[h,m] V2 & ⇧[↑i] V2 ≘ X2 & I = LRef i & n = ↑m.
+ | â\88\83â\88\83K,V,V2,i. â\87©[i] L â\89\98 K.â\93\93V & â\9d¨G,Kâ\9d© ⊢ V ⬆[h,n] V2 & ⇧[↑i] V2 ≘ X2 & I = LRef i
+ | â\88\83â\88\83m,K,V,V2,i. â\87©[i] L â\89\98 K.â\93\9bV & â\9d¨G,Kâ\9d© ⊢ V ⬆[h,m] V2 & ⇧[↑i] V2 ≘ X2 & I = LRef i & n = ↑m.
#h #n #I #G #L #X2 * #c #Hc #H elim (cpg_inv_atom1_drops … H) -H *
[ #H1 #H2 destruct
/3 width=1 by or4_intro0, conj/
qed-.
lemma cpt_inv_lref_sn_drops (h) (n) (G) (L) (i):
- â\88\80X2. â\9dªG,Lâ\9d« ⊢ #i ⬆[h,n] X2 →
+ â\88\80X2. â\9d¨G,Lâ\9d© ⊢ #i ⬆[h,n] X2 →
∨∨ ∧∧ X2 = #i & n = 0
- | â\88\83â\88\83K,V,V2. â\87©[i] L â\89\98 K.â\93\93V & â\9dªG,Kâ\9d« ⊢ V ⬆[h,n] V2 & ⇧[↑i] V2 ≘ X2
- | â\88\83â\88\83m,K,V,V2. â\87©[i] L â\89\98 K. â\93\9bV & â\9dªG,Kâ\9d« ⊢ V ⬆[h,m] V2 & ⇧[↑i] V2 ≘ X2 & n = ↑m.
+ | â\88\83â\88\83K,V,V2. â\87©[i] L â\89\98 K.â\93\93V & â\9d¨G,Kâ\9d© ⊢ V ⬆[h,n] V2 & ⇧[↑i] V2 ≘ X2
+ | â\88\83â\88\83m,K,V,V2. â\87©[i] L â\89\98 K. â\93\9bV & â\9d¨G,Kâ\9d© ⊢ V ⬆[h,m] V2 & ⇧[↑i] V2 ≘ X2 & n = ↑m.
#h #n #G #L #i #X2 * #c #Hc #H elim (cpg_inv_lref1_drops … H) -H *
[ #H1 #H2 destruct
/3 width=1 by or3_intro0, conj/
(* Advanced forward lemmas **************************************************)
fact cpt_fwd_plus_aux (h) (n) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬆[h,n] T2 → ∀n1,n2. n1+n2 = n →
- â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\86[h,n1] T & â\9dªG,Lâ\9d« ⊢ T ⬆[h,n2] T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬆[h,n] T2 → ∀n1,n2. n1+n2 = n →
+ â\88\83â\88\83T. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\86[h,n1] T & â\9d¨G,Lâ\9d© ⊢ T ⬆[h,n2] T2.
#h #n #G #L #T1 #T2 #H @(cpt_ind … H) -G -L -T1 -T2 -n
[ #I #G #L #n1 #n2 #H
elim (plus_inv_O3 … H) -H #H1 #H2 destruct
qed-.
lemma cpt_fwd_plus (h) (n1) (n2) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬆[h,n1+n2] T2 →
- â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\86[h,n1] T & â\9dªG,Lâ\9d« ⊢ T ⬆[h,n2] T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬆[h,n1+n2] T2 →
+ â\88\83â\88\83T. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\86[h,n1] T & â\9d¨G,Lâ\9d© ⊢ T ⬆[h,n2] T2.
/2 width=3 by cpt_fwd_plus_aux/ qed-.
lemma cpt_ind (h) (Q:relation5 …):
(∀I,G,L. Q 0 G L (⓪[I]) (⓪[I])) →
(∀G,L,s. Q 1 G L (⋆s) (⋆(⫯[h]s))) →
- (â\88\80n,G,K,V1,V2,W2. â\9dªG,Kâ\9d« ⊢ V1 ⬆[h,n] V2 → Q n G K V1 V2 →
+ (â\88\80n,G,K,V1,V2,W2. â\9d¨G,Kâ\9d© ⊢ V1 ⬆[h,n] V2 → Q n G K V1 V2 →
⇧[1] V2 ≘ W2 → Q n G (K.ⓓV1) (#0) W2
- ) â\86\92 (â\88\80n,G,K,V1,V2,W2. â\9dªG,Kâ\9d« ⊢ V1 ⬆[h,n] V2 → Q n G K V1 V2 →
+ ) â\86\92 (â\88\80n,G,K,V1,V2,W2. â\9d¨G,Kâ\9d© ⊢ V1 ⬆[h,n] V2 → Q n G K V1 V2 →
⇧[1] V2 ≘ W2 → Q (↑n) G (K.ⓛV1) (#0) W2
- ) â\86\92 (â\88\80n,I,G,K,T,U,i. â\9dªG,Kâ\9d« ⊢ #i ⬆[h,n] T → Q n G K (#i) T →
+ ) â\86\92 (â\88\80n,I,G,K,T,U,i. â\9d¨G,Kâ\9d© ⊢ #i ⬆[h,n] T → Q n G K (#i) T →
⇧[1] T ≘ U → Q n G (K.ⓘ[I]) (#↑i) (U)
- ) â\86\92 (â\88\80n,p,I,G,L,V1,V2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\86[h,0] V2 â\86\92 â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ⬆[h,n] T2 →
+ ) â\86\92 (â\88\80n,p,I,G,L,V1,V2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\86[h,0] V2 â\86\92 â\9d¨G,L.â\93\91[I]V1â\9d© ⊢ T1 ⬆[h,n] 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)
- ) â\86\92 (â\88\80n,G,L,V1,V2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\86[h,0] V2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬆[h,n] T2 →
+ ) â\86\92 (â\88\80n,G,L,V1,V2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\86[h,0] V2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬆[h,n] T2 →
Q 0 G L V1 V2 → Q n G L T1 T2 → Q n G L (ⓐV1.T1) (ⓐV2.T2)
- ) â\86\92 (â\88\80n,G,L,V1,V2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\86[h,n] V2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬆[h,n] T2 →
+ ) â\86\92 (â\88\80n,G,L,V1,V2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\86[h,n] V2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬆[h,n] 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,V1,V2,T. â\9dªG,Lâ\9d« ⊢ V1 ⬆[h,n] V2 →
+ ) â\86\92 (â\88\80n,G,L,V1,V2,T. â\9d¨G,Lâ\9d© ⊢ V1 ⬆[h,n] V2 →
Q n G L V1 V2 → Q (↑n) G L (ⓝV1.T) V2
) →
- â\88\80n,G,L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬆[h,n] T2 → Q n G L T1 T2.
+ â\88\80n,G,L,T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬆[h,n] T2 → Q n G L T1 T2.
#h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #n #G #L #T1
generalize in match n; -n
@(fqu_wf_ind (Ⓣ) … G L T1) -G -L -T1 #G0 #L0 * [| * [| * ]]
(* EXTENDED CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS **************)
definition cpx (G) (L): relation2 term term ≝
- λT1,T2. â\88\83c. â\9dªG,Lâ\9d« ⊢ T1 ⬈[sfull,rtc_eq_f,c] T2.
+ λT1,T2. â\88\83c. â\9d¨G,Lâ\9d© ⊢ T1 ⬈[sfull,rtc_eq_f,c] T2.
interpretation
"extended context-sensitive parallel rt-transition (term)"
(* Basic properties *********************************************************)
(* Basic_2A1: uses: cpx_st *)
-lemma cpx_qu (G) (L): â\88\80s1,s2. â\9dªG,Lâ\9d« ⊢ ⋆s1 ⬈ ⋆s2.
+lemma cpx_qu (G) (L): â\88\80s1,s2. â\9d¨G,Lâ\9d© ⊢ ⋆s1 ⬈ ⋆s2.
/3 width=2 by cpg_ess, ex_intro/ qed.
lemma cpx_delta (G) (K):
- â\88\80I,V1,V2,W2. â\9dªG,Kâ\9d« ⊢ V1 ⬈ V2 →
- â\87§[1] V2 â\89\98 W2 â\86\92 â\9dªG,K.â\93\91[I]V1â\9d« ⊢ #0 ⬈ W2.
+ â\88\80I,V1,V2,W2. â\9d¨G,Kâ\9d© ⊢ V1 ⬈ V2 →
+ â\87§[1] V2 â\89\98 W2 â\86\92 â\9d¨G,K.â\93\91[I]V1â\9d© ⊢ #0 ⬈ W2.
#G #K * #V1 #V2 #W2 *
/3 width=4 by cpg_delta, cpg_ell, ex_intro/
qed.
lemma cpx_lref (G) (K):
- â\88\80I,T,U,i. â\9dªG,Kâ\9d« ⊢ #i ⬈ T →
- â\87§[1] T â\89\98 U â\86\92 â\9dªG,K.â\93\98[I]â\9d« ⊢ #↑i ⬈ U.
+ â\88\80I,T,U,i. â\9d¨G,Kâ\9d© ⊢ #i ⬈ T →
+ â\87§[1] T â\89\98 U â\86\92 â\9d¨G,K.â\93\98[I]â\9d© ⊢ #↑i ⬈ U.
#G #K #I #T #U #i *
/3 width=4 by cpg_lref, ex_intro/
qed.
lemma cpx_bind (G) (L):
∀p,I,V1,V2,T1,T2.
- â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 â\86\92 â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ⬈ T2 →
- â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ⬈ ⓑ[p,I]V2.T2.
+ â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 â\86\92 â\9d¨G,L.â\93\91[I]V1â\9d© ⊢ T1 ⬈ T2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ⬈ ⓑ[p,I]V2.T2.
#G #L #p #I #V1 #V2 #T1 #T2 * #cV #HV12 *
/3 width=2 by cpg_bind, ex_intro/
qed.
lemma cpx_flat (G) (L):
∀I,V1,V2,T1,T2.
- â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈ T2 →
- â\9dªG,Lâ\9d« ⊢ ⓕ[I]V1.T1 ⬈ ⓕ[I]V2.T2.
+ â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬈ T2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓕ[I]V1.T1 ⬈ ⓕ[I]V2.T2.
#G #L * #V1 #V2 #T1 #T2 * #cV #HV12 *
/3 width=5 by cpg_appl, cpg_cast, ex_intro/
qed.
lemma cpx_zeta (G) (L):
- â\88\80T1,T. â\87§[1] T â\89\98 T1 â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T ⬈ T2 →
- â\88\80V. â\9dªG,Lâ\9d« ⊢ +ⓓV.T1 ⬈ T2.
+ â\88\80T1,T. â\87§[1] T â\89\98 T1 â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T ⬈ T2 →
+ â\88\80V. â\9d¨G,Lâ\9d© ⊢ +ⓓV.T1 ⬈ T2.
#G #L #T1 #T #HT1 #T2 *
/3 width=4 by cpg_zeta, ex_intro/
qed.
lemma cpx_eps (G) (L):
- â\88\80V,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88 T2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⓝV.T1 ⬈ T2.
+ â\88\80V,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88 T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓝV.T1 ⬈ T2.
#G #L #V #T1 #T2 *
/3 width=2 by cpg_eps, ex_intro/
qed.
(* Basic_2A1: was: cpx_ct *)
lemma cpx_ee (G) (L):
- â\88\80V1,V2,T. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⓝV1.T ⬈ V2.
+ â\88\80V1,V2,T. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 â\86\92 â\9d¨G,Lâ\9d© ⊢ ⓝV1.T ⬈ V2.
#G #L #V1 #V2 #T *
/3 width=2 by cpg_ee, ex_intro/
qed.
lemma cpx_beta (G) (L):
∀p,V1,V2,W1,W2,T1,T2.
- â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88 W2 â\86\92 â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ⬈ T2 →
- â\9dªG,Lâ\9d« ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈ ⓓ[p]ⓝW2.V2.T2.
+ â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 â\86\92 â\9d¨G,Lâ\9d© â\8a¢ W1 â¬\88 W2 â\86\92 â\9d¨G,L.â\93\9bW1â\9d© ⊢ T1 ⬈ T2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓐV1.ⓛ[p]W1.T1 ⬈ ⓓ[p]ⓝW2.V2.T2.
#G #L #p #V1 #V2 #W1 #W2 #T1 #T2 * #cV #HV12 * #cW #HW12 *
/3 width=2 by cpg_beta, ex_intro/
qed.
lemma cpx_theta (G) (L):
∀p,V1,V,V2,W1,W2,T1,T2.
- â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V â\86\92 â\87§[1] V â\89\98 V2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88 W2 â\86\92 â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ⬈ T2 →
- â\9dªG,Lâ\9d« ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈ ⓓ[p]W2.ⓐV2.T2.
+ â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V â\86\92 â\87§[1] V â\89\98 V2 â\86\92 â\9d¨G,Lâ\9d© â\8a¢ W1 â¬\88 W2 â\86\92 â\9d¨G,L.â\93\93W1â\9d© ⊢ T1 ⬈ T2 →
+ â\9d¨G,Lâ\9d© ⊢ ⓐV1.ⓓ[p]W1.T1 ⬈ ⓓ[p]W2.ⓐV2.T2.
#G #L #p #V1 #V #V2 #W1 #W2 #T1 #T2 * #cV #HV1 #HV2 * #cW #HW12 *
/3 width=4 by cpg_theta, ex_intro/
qed.
(* Advanced properties ******************************************************)
lemma cpx_pair_sn (G) (L):
- â\88\80I,V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈ V2 →
- â\88\80T. â\9dªG,Lâ\9d« ⊢ ②[I]V1.T ⬈ ②[I]V2.T.
+ â\88\80I,V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬈ V2 →
+ â\88\80T. â\9d¨G,Lâ\9d© ⊢ ②[I]V1.T ⬈ ②[I]V2.T.
#G #L * /2 width=2 by cpx_flat, cpx_bind/
qed.
lemma cpg_cpx (Rs) (Rk) (c) (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88[Rs,Rk,c] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈ T2.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88[Rs,Rk,c] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬈ T2.
#Rs #Rk #c #G #L #T1 #T2 #H elim H -c -G -L -T1 -T2
/2 width=3 by cpx_theta, cpx_beta, cpx_ee, cpx_eps, cpx_zeta, cpx_flat, cpx_bind, cpx_lref, cpx_delta/
qed.
(* Basic inversion lemmas ***************************************************)
lemma cpx_inv_atom1 (G) (L):
- â\88\80J,T2. â\9dªG,Lâ\9d« ⊢ ⓪[J] ⬈ T2 →
+ â\88\80J,T2. â\9d¨G,Lâ\9d© ⊢ ⓪[J] ⬈ T2 →
∨∨ T2 = ⓪[J]
| ∃∃s1,s2. T2 = ⋆s2 & J = Sort s1
- | â\88\83â\88\83I,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈ V2 & ⇧[1] V2 ≘ T2 & L = K.ⓑ[I]V1 & J = LRef 0
- | â\88\83â\88\83I,K,T,i. â\9dªG,Kâ\9d« ⊢ #i ⬈ T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i).
+ | â\88\83â\88\83I,K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬈ V2 & ⇧[1] V2 ≘ T2 & L = K.ⓑ[I]V1 & J = LRef 0
+ | â\88\83â\88\83I,K,T,i. â\9d¨G,Kâ\9d© ⊢ #i ⬈ T & ⇧[1] T ≘ T2 & L = K.ⓘ[I] & J = LRef (↑i).
#G #L #J #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_2_intro, ex_intro/
qed-.
lemma cpx_inv_sort1 (G) (L):
- â\88\80T2,s1. â\9dªG,Lâ\9d« ⊢ ⋆s1 ⬈ T2 →
+ â\88\80T2,s1. â\9d¨G,Lâ\9d© ⊢ ⋆s1 ⬈ T2 →
∃s2. T2 = ⋆s2.
#G #L #T2 #s1 * #c #H elim (cpg_inv_sort1 … H) -H *
/2 width=2 by ex_intro/
qed-.
lemma cpx_inv_zero1 (G) (L):
- â\88\80T2. â\9dªG,Lâ\9d« ⊢ #0 ⬈ T2 →
+ â\88\80T2. â\9d¨G,Lâ\9d© ⊢ #0 ⬈ T2 →
∨∨ T2 = #0
- | â\88\83â\88\83I,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈ V2 & ⇧[1] V2 ≘ T2 & L = K.ⓑ[I]V1.
+ | â\88\83â\88\83I,K,V1,V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬈ V2 & ⇧[1] V2 ≘ T2 & L = K.ⓑ[I]V1.
#G #L #T2 * #c #H elim (cpg_inv_zero1 … H) -H *
/4 width=7 by ex3_4_intro, ex_intro, or_introl, or_intror/
qed-.
lemma cpx_inv_lref1 (G) (L):
- â\88\80T2,i. â\9dªG,Lâ\9d« ⊢ #↑i ⬈ T2 →
+ â\88\80T2,i. â\9d¨G,Lâ\9d© ⊢ #↑i ⬈ T2 →
∨∨ T2 = #(↑i)
- | â\88\83â\88\83I,K,T. â\9dªG,Kâ\9d« ⊢ #i ⬈ T & ⇧[1] T ≘ T2 & L = K.ⓘ[I].
+ | â\88\83â\88\83I,K,T. â\9d¨G,Kâ\9d© ⊢ #i ⬈ T & ⇧[1] T ≘ T2 & L = K.ⓘ[I].
#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_gref1 (G) (L):
- â\88\80T2,l. â\9dªG,Lâ\9d« ⊢ §l ⬈ T2 → T2 = §l.
+ â\88\80T2,l. â\9d¨G,Lâ\9d© ⊢ §l ⬈ T2 → T2 = §l.
#G #L #T2 #l * #c #H elim (cpg_inv_gref1 … H) -H //
qed-.
lemma cpx_inv_bind1 (G) (L):
- â\88\80p,I,V1,T1,U2. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ⬈ U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 & â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ⬈ T2 & U2 = ⓑ[p,I]V2.T2
- | â\88\83â\88\83T. â\87§[1] T â\89\98 T1 & â\9dªG,Lâ\9d« ⊢ T ⬈ U2 & p = true & I = Abbr.
+ â\88\80p,I,V1,T1,U2. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ⬈ U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 & â\9d¨G,L.â\93\91[I]V1â\9d© ⊢ T1 ⬈ T2 & U2 = ⓑ[p,I]V2.T2
+ | â\88\83â\88\83T. â\87§[1] T â\89\98 T1 & â\9d¨G,Lâ\9d© ⊢ T ⬈ U2 & p = true & I = Abbr.
#G #L #p #I #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/
qed-.
lemma cpx_inv_abbr1 (G) (L):
- â\88\80p,V1,T1,U2. â\9dªG,Lâ\9d« ⊢ ⓓ[p]V1.T1 ⬈ U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 & â\9dªG,L.â\93\93V1â\9d« ⊢ T1 ⬈ T2 & U2 = ⓓ[p]V2.T2
- | â\88\83â\88\83T. â\87§[1] T â\89\98 T1 & â\9dªG,Lâ\9d« ⊢ T ⬈ U2 & p = true.
+ â\88\80p,V1,T1,U2. â\9d¨G,Lâ\9d© ⊢ ⓓ[p]V1.T1 ⬈ U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 & â\9d¨G,L.â\93\93V1â\9d© ⊢ T1 ⬈ T2 & U2 = ⓓ[p]V2.T2
+ | â\88\83â\88\83T. â\87§[1] T â\89\98 T1 & â\9d¨G,Lâ\9d© ⊢ T ⬈ U2 & p = true.
#G #L #p #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-.
lemma cpx_inv_abst1 (G) (L):
- â\88\80p,V1,T1,U2. â\9dªG,Lâ\9d« ⊢ ⓛ[p]V1.T1 ⬈ U2 →
- â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 & â\9dªG,L.â\93\9bV1â\9d« ⊢ T1 ⬈ T2 & U2 = ⓛ[p]V2.T2.
+ â\88\80p,V1,T1,U2. â\9d¨G,Lâ\9d© ⊢ ⓛ[p]V1.T1 ⬈ U2 →
+ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 & â\9d¨G,L.â\93\9bV1â\9d© ⊢ T1 ⬈ T2 & U2 = ⓛ[p]V2.T2.
#G #L #p #V1 #T1 #U2 * #c #H elim (cpg_inv_abst1 … H) -H
/3 width=5 by ex3_2_intro, ex_intro/
qed-.
lemma cpx_inv_appl1 (G) (L):
- â\88\80V1,U1,U2. â\9dªG,Lâ\9d« ⊢ ⓐ V1.U1 ⬈ U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 & â\9dªG,Lâ\9d« ⊢ U1 ⬈ T2 & U2 = ⓐV2.T2
- | â\88\83â\88\83p,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 & â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88 W2 & â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ⬈ T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2
- | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V & â\87§[1] V â\89\98 V2 & â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88 W2 & â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ⬈ T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2.
+ â\88\80V1,U1,U2. â\9d¨G,Lâ\9d© ⊢ ⓐ V1.U1 ⬈ U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 & â\9d¨G,Lâ\9d© ⊢ U1 ⬈ T2 & U2 = ⓐV2.T2
+ | â\88\83â\88\83p,V2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 & â\9d¨G,Lâ\9d© â\8a¢ W1 â¬\88 W2 & â\9d¨G,L.â\93\9bW1â\9d© ⊢ T1 ⬈ T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2
+ | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V & â\87§[1] V â\89\98 V2 & â\9d¨G,Lâ\9d© â\8a¢ W1 â¬\88 W2 & â\9d¨G,L.â\93\93W1â\9d© ⊢ T1 ⬈ T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2.
#G #L #V1 #U1 #U2 * #c #H elim (cpg_inv_appl1 … H) -H *
/4 width=13 by or3_intro0, or3_intro1, or3_intro2, ex6_7_intro, ex5_6_intro, ex3_2_intro, ex_intro/
qed-.
lemma cpx_inv_cast1 (G) (L):
- â\88\80V1,U1,U2. â\9dªG,Lâ\9d« ⊢ ⓝV1.U1 ⬈ U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 & â\9dªG,Lâ\9d« ⊢ U1 ⬈ T2 & U2 = ⓝV2.T2
- | â\9dªG,Lâ\9d« ⊢ U1 ⬈ U2
- | â\9dªG,Lâ\9d« ⊢ V1 ⬈ U2.
+ â\88\80V1,U1,U2. â\9d¨G,Lâ\9d© ⊢ ⓝV1.U1 ⬈ U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 & â\9d¨G,Lâ\9d© ⊢ U1 ⬈ T2 & U2 = ⓝV2.T2
+ | â\9d¨G,Lâ\9d© ⊢ U1 ⬈ U2
+ | â\9d¨G,Lâ\9d© ⊢ V1 ⬈ U2.
#G #L #V1 #U1 #U2 * #c #H elim (cpg_inv_cast1 … H) -H *
/4 width=5 by or3_intro0, or3_intro1, or3_intro2, ex3_2_intro, ex_intro/
qed-.
(* Advanced inversion lemmas ************************************************)
lemma cpx_inv_zero1_pair (G) (K):
- â\88\80I,V1,T2. â\9dªG,K.â\93\91[I]V1â\9d« ⊢ #0 ⬈ T2 →
+ â\88\80I,V1,T2. â\9d¨G,K.â\93\91[I]V1â\9d© ⊢ #0 ⬈ T2 →
∨∨ T2 = #0
- | â\88\83â\88\83V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈ V2 & ⇧[1] V2 ≘ T2.
+ | â\88\83â\88\83V2. â\9d¨G,Kâ\9d© ⊢ V1 ⬈ V2 & ⇧[1] V2 ≘ T2.
#G #K #I #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 (G) (K):
- â\88\80I,T2,i. â\9dªG,K.â\93\98[I]â\9d« ⊢ #↑i ⬈ T2 →
+ â\88\80I,T2,i. â\9d¨G,K.â\93\98[I]â\9d© ⊢ #↑i ⬈ T2 →
∨∨ T2 = #(↑i)
- | â\88\83â\88\83T. â\9dªG,Kâ\9d« ⊢ #i ⬈ T & ⇧[1] T ≘ T2.
+ | â\88\83â\88\83T. â\9d¨G,Kâ\9d© ⊢ #i ⬈ T & ⇧[1] T ≘ T2.
#G #K #I #T2 #i * #c #H elim (cpg_inv_lref1_bind … H) -H *
/4 width=3 by ex2_intro, ex_intro, or_introl, or_intror/
qed-.
lemma cpx_inv_flat1 (G) (L):
- â\88\80I,V1,U1,U2. â\9dªG,Lâ\9d« ⊢ ⓕ[I]V1.U1 ⬈ U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 & â\9dªG,Lâ\9d« ⊢ U1 ⬈ T2 & U2 = ⓕ[I]V2.T2
- | (â\9dªG,Lâ\9d« ⊢ U1 ⬈ U2 ∧ I = Cast)
- | (â\9dªG,Lâ\9d« ⊢ V1 ⬈ U2 ∧ I = Cast)
- | â\88\83â\88\83p,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 & â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88 W2 & â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ⬈ T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 & I = Appl
- | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V & â\87§[1] V â\89\98 V2 & â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88 W2 & â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ⬈ T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & I = Appl.
+ â\88\80I,V1,U1,U2. â\9d¨G,Lâ\9d© ⊢ ⓕ[I]V1.U1 ⬈ U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 & â\9d¨G,Lâ\9d© ⊢ U1 ⬈ T2 & U2 = ⓕ[I]V2.T2
+ | (â\9d¨G,Lâ\9d© ⊢ U1 ⬈ U2 ∧ I = Cast)
+ | (â\9d¨G,Lâ\9d© ⊢ V1 ⬈ U2 ∧ I = Cast)
+ | â\88\83â\88\83p,V2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 & â\9d¨G,Lâ\9d© â\8a¢ W1 â¬\88 W2 & â\9d¨G,L.â\93\9bW1â\9d© ⊢ T1 ⬈ T2 & U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 & I = Appl
+ | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V & â\87§[1] V â\89\98 V2 & â\9d¨G,Lâ\9d© â\8a¢ W1 â¬\88 W2 & â\9d¨G,L.â\93\93W1â\9d© ⊢ T1 ⬈ T2 & U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & I = Appl.
#G #L * #V1 #U1 #U2 #H
[ elim (cpx_inv_appl1 … H) -H *
/3 width=14 by or5_intro0, or5_intro3, or5_intro4, ex7_7_intro, ex6_6_intro, ex3_2_intro/
(* Basic forward lemmas *****************************************************)
lemma cpx_fwd_bind1_minus (G) (L):
- â\88\80I,V1,T1,T. â\9dªG,Lâ\9d« ⊢ -ⓑ[I]V1.T1 ⬈ T → ∀p.
- â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ⬈ ⓑ[p,I]V2.T2 & T = -ⓑ[I]V2.T2.
+ â\88\80I,V1,T1,T. â\9d¨G,Lâ\9d© ⊢ -ⓑ[I]V1.T1 ⬈ T → ∀p.
+ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ⬈ ⓑ[p,I]V2.T2 & T = -ⓑ[I]V2.T2.
#G #L #I #V1 #T1 #T * #c #H #p elim (cpg_fwd_bind1_minus … H p) -H
/3 width=4 by ex2_2_intro, ex_intro/
qed-.
lemma cpx_ind (Q:relation4 …):
(∀I,G,L. Q G L (⓪[I]) (⓪[I])) →
(∀G,L,s1,s2. Q G L (⋆s1) (⋆s2)) →
- (â\88\80I,G,K,V1,V2,W2. â\9dªG,Kâ\9d« ⊢ V1 ⬈ V2 → Q G K V1 V2 →
+ (â\88\80I,G,K,V1,V2,W2. â\9d¨G,Kâ\9d© ⊢ V1 ⬈ V2 → Q G K V1 V2 →
⇧[1] V2 ≘ W2 → Q G (K.ⓑ[I]V1) (#0) W2
- ) â\86\92 (â\88\80I,G,K,T,U,i. â\9dªG,Kâ\9d« ⊢ #i ⬈ T → Q G K (#i) T →
+ ) â\86\92 (â\88\80I,G,K,T,U,i. â\9d¨G,Kâ\9d© ⊢ #i ⬈ T → Q G K (#i) T →
⇧[1] T ≘ U → Q G (K.ⓘ[I]) (#↑i) (U)
- ) â\86\92 (â\88\80p,I,G,L,V1,V2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 â\86\92 â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ⬈ T2 →
+ ) â\86\92 (â\88\80p,I,G,L,V1,V2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 â\86\92 â\9d¨G,L.â\93\91[I]V1â\9d© ⊢ T1 ⬈ T2 →
Q G L V1 V2 → Q G (L.ⓑ[I]V1) T1 T2 → Q G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2)
- ) â\86\92 (â\88\80I,G,L,V1,V2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈ T2 →
+ ) â\86\92 (â\88\80I,G,L,V1,V2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬈ 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. â\87§[1] T â\89\98 T1 â\86\92 â\9dªG,Lâ\9d« ⊢ T ⬈ T2 → Q G L T T2 →
+ ) â\86\92 (â\88\80G,L,V,T1,T,T2. â\87§[1] T â\89\98 T1 â\86\92 â\9d¨G,Lâ\9d© ⊢ T ⬈ T2 → Q G L T T2 →
Q G L (+ⓓV.T1) T2
- ) â\86\92 (â\88\80G,L,V,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈ T2 → Q G L T1 T2 →
+ ) â\86\92 (â\88\80G,L,V,T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈ T2 → Q G L T1 T2 →
Q G L (ⓝV.T1) T2
- ) â\86\92 (â\88\80G,L,V1,V2,T. â\9dªG,Lâ\9d« ⊢ V1 ⬈ V2 → Q G L V1 V2 →
+ ) â\86\92 (â\88\80G,L,V1,V2,T. â\9d¨G,Lâ\9d© ⊢ V1 ⬈ V2 → Q G L V1 V2 →
Q G L (ⓝV1.T) V2
- ) â\86\92 (â\88\80p,G,L,V1,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88 W2 â\86\92 â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ⬈ T2 →
+ ) â\86\92 (â\88\80p,G,L,V1,V2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 â\86\92 â\9d¨G,Lâ\9d© â\8a¢ W1 â¬\88 W2 â\86\92 â\9d¨G,L.â\93\9bW1â\9d© ⊢ T1 ⬈ T2 →
Q G L V1 V2 → Q G L W1 W2 → Q G (L.ⓛW1) T1 T2 →
Q G L (ⓐV1.ⓛ[p]W1.T1) (ⓓ[p]ⓝW2.V2.T2)
- ) â\86\92 (â\88\80p,G,L,V1,V,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88 W2 â\86\92 â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ⬈ T2 →
+ ) â\86\92 (â\88\80p,G,L,V1,V,V2,W1,W2,T1,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V â\86\92 â\9d¨G,Lâ\9d© â\8a¢ W1 â¬\88 W2 â\86\92 â\9d¨G,L.â\93\93W1â\9d© ⊢ T1 ⬈ T2 →
Q G L V1 V → Q G L W1 W2 → Q G (L.ⓓW1) T1 T2 →
⇧[1] V ≘ V2 → Q G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2)
) →
- â\88\80G,L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈ T2 → Q G L T1 T2.
+ â\88\80G,L,T1,T2. â\9d¨G,Lâ\9d© ⊢ T1 ⬈ T2 → Q G L T1 T2.
#Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #IH10 #IH11 #G #L #T1 #T2
* #c #H elim H -c -G -L -T1 -T2 /3 width=4 by ex_intro/
qed-.
(* Basic_2A1: was: cpx_delta *)
lemma cpx_delta_drops (G) (L):
∀I,K,V,V2,W2,i.
- â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 â\9dªG,Kâ\9d« ⊢ V ⬈ V2 →
- â\87§[â\86\91i] V2 â\89\98 W2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ⬈ W2.
+ â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 â\9d¨G,Kâ\9d© ⊢ V ⬈ V2 →
+ â\87§[â\86\91i] V2 â\89\98 W2 â\86\92 â\9d¨G,Lâ\9d© ⊢ #i ⬈ W2.
#G #L * #K #V #V2 #W2 #i #HLK *
/3 width=7 by cpg_ell_drops, cpg_delta_drops, ex_intro/
qed.
(* Basic_2A1: was: cpx_inv_atom1 *)
lemma cpx_inv_atom1_drops (G) (L):
- â\88\80I,T2. â\9dªG,Lâ\9d« ⊢ ⓪[I] ⬈ T2 →
+ â\88\80I,T2. â\9d¨G,Lâ\9d© ⊢ ⓪[I] ⬈ T2 →
∨∨ T2 = ⓪[I]
| ∃∃s1,s2. T2 = ⋆s2 & I = Sort s1
- | â\88\83â\88\83J,K,V,V2,i. â\87©[i] L â\89\98 K.â\93\91[J]V & â\9dªG,Kâ\9d« ⊢ V ⬈ V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i.
+ | â\88\83â\88\83J,K,V,V2,i. â\87©[i] L â\89\98 K.â\93\91[J]V & â\9d¨G,Kâ\9d© ⊢ V ⬈ V2 & ⇧[↑i] V2 ≘ T2 & I = LRef i.
#G #L #I #T2 * #c #H elim (cpg_inv_atom1_drops … H) -H *
/4 width=9 by or3_intro0, or3_intro1, or3_intro2, ex4_5_intro, ex2_2_intro, ex_intro/
qed-.
(* Basic_2A1: was: cpx_inv_lref1 *)
lemma cpx_inv_lref1_drops (G) (L):
- â\88\80T2,i. â\9dªG,Lâ\9d« ⊢ #i ⬈ T2 →
+ â\88\80T2,i. â\9d¨G,Lâ\9d© ⊢ #i ⬈ T2 →
∨∨ T2 = #i
- | â\88\83â\88\83J,K,V,V2. â\87©[i] L â\89\98 K. â\93\91[J]V & â\9dªG,Kâ\9d« ⊢ V ⬈ V2 & ⇧[↑i] V2 ≘ T2.
+ | â\88\83â\88\83J,K,V,V2. â\87©[i] L â\89\98 K. â\93\91[J]V & â\9d¨G,Kâ\9d© ⊢ V ⬈ V2 & ⇧[↑i] V2 ≘ T2.
#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-.
lemma cpx_subst (G) (L) (U1) (i):
∀I,K,V. ⇩[i] L ≘ K.ⓑ[I]V →
- â\88\83â\88\83U2,T2. â\9dªG,Lâ\9d« ⊢ U1 ⬈ U2 & ⇧[i,1] T2 ≘ U2.
+ â\88\83â\88\83U2,T2. â\9d¨G,Lâ\9d© ⊢ U1 ⬈ U2 & ⇧[i,1] T2 ≘ U2.
#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
lemma feqg_cpx_trans_cpx (S):
reflexive … S → symmetric … S →
- â\88\80G1,G2,L1,L2,T1,T. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,Tâ\9d« →
- â\88\80T2. â\9dªG2,L2â\9d« â\8a¢ T â¬\88 T2 â\86\92 â\9dªG1,L1â\9d« ⊢ T1 ⬈ T2.
+ â\88\80G1,G2,L1,L2,T1,T. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,Tâ\9d© →
+ â\88\80T2. â\9d¨G2,L2â\9d© â\8a¢ T â¬\88 T2 â\86\92 â\9d¨G1,L1â\9d© ⊢ T1 ⬈ T2.
#S #H1S #H2S #G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2
elim (feqg_inv_gen_dx … H) -H // #H #HL12 #HT1 destruct
@(cpx_teqg_repl_reqg … HT2)
lemma feqg_cpx_trans_feqg (S):
reflexive … S → symmetric … S →
- â\88\80G1,G2,L1,L2,T1,T. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,Tâ\9d« →
- â\88\80T2. â\9dªG2,L2â\9d« â\8a¢ T â¬\88 T2 â\86\92 â\9dªG1,L1,T2â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,Tâ\9d© →
+ â\88\80T2. â\9d¨G2,L2â\9d© â\8a¢ T â¬\88 T2 â\86\92 â\9d¨G1,L1,T2â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d©.
#S #H1S #H2S #G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2
elim (feqg_inv_gen_dx … H) -H // #H #HL12 #_ destruct
lapply (cpx_reqg_conf_dx … HT2 … HL12) -HT2 -HL12 // #HL12
(* Properties on supclosure *************************************************)
lemma fqu_cpx_trans (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
- â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈ U2 →
- â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88 U1 & â\9dªG1,L1,U1â\9d« â¬\82[b] â\9dªG2,L2,U2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80U2. â\9d¨G2,L2â\9d© ⊢ T2 ⬈ U2 →
+ â\88\83â\88\83U1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88 U1 & â\9d¨G1,L1,U1â\9d© â¬\82[b] â\9d¨G2,L2,U2â\9d©.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
/3 width=3 by cpx_pair_sn, cpx_bind, cpx_flat, fqu_pair_sn, fqu_bind_dx, fqu_flat_dx, ex2_intro/
[ #I #G #L2 #V2 #X2 #HVX2
qed-.
lemma fquq_cpx_trans (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d« →
- â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈ U2 →
- â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88 U1 & â\9dªG1,L1,U1â\9d« â¬\82⸮[b] â\9dªG2,L2,U2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80U2. â\9d¨G2,L2â\9d© ⊢ T2 ⬈ U2 →
+ â\88\83â\88\83U1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88 U1 & â\9d¨G1,L1,U1â\9d© â¬\82⸮[b] â\9d¨G2,L2,U2â\9d©.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H
[ #HT12 #U2 #HTU2 elim (fqu_cpx_trans … HT12 … HTU2) /3 width=3 by fqu_fquq, ex2_intro/
| * #H1 #H2 #H3 destruct /2 width=3 by ex2_intro/
qed-.
lemma fqup_cpx_trans (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« →
- â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈ U2 →
- â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88 U1 & â\9dªG1,L1,U1â\9d« â¬\82+[b] â\9dªG2,L2,U2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80U2. â\9d¨G2,L2â\9d© ⊢ T2 ⬈ U2 →
+ â\88\83â\88\83U1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88 U1 & â\9d¨G1,L1,U1â\9d© â¬\82+[b] â\9d¨G2,L2,U2â\9d©.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
[ #G2 #L2 #T2 #H12 #U2 #HTU2 elim (fqu_cpx_trans … H12 … HTU2) -T2
/3 width=3 by fqu_fqup, ex2_intro/
qed-.
lemma fqus_cpx_trans (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
- â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈ U2 →
- â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88 U1 & â\9dªG1,L1,U1â\9d« â¬\82*[b] â\9dªG2,L2,U2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80U2. â\9d¨G2,L2â\9d© ⊢ T2 ⬈ U2 →
+ â\88\83â\88\83U1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88 U1 & â\9d¨G1,L1,U1â\9d© â¬\82*[b] â\9d¨G2,L2,U2â\9d©.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fqus_inv_fqup … H) -H
[ #HT12 #U2 #HTU2 elim (fqup_cpx_trans … HT12 … HTU2) /3 width=3 by fqup_fqus, ex2_intro/
| * #H1 #H2 #H3 destruct /2 width=3 by ex2_intro/
qed-.
lemma fqu_cpx_trans_tneqx (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
- â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈ U2 → (T2 ≅ U2 → ⊥) →
- â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88 U1 & T1 â\89\85 U1 â\86\92 â\8a¥ & â\9dªG1,L1,U1â\9d« â¬\82[b] â\9dªG2,L2,U2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80U2. â\9d¨G2,L2â\9d© ⊢ T2 ⬈ U2 → (T2 ≅ U2 → ⊥) →
+ â\88\83â\88\83U1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88 U1 & T1 â\89\85 U1 â\86\92 â\8a¥ & â\9d¨G1,L1,U1â\9d© â¬\82[b] â\9d¨G2,L2,U2â\9d©.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ #I #G #L #V1 #V2 #HV12 #_ elim (lifts_total V2 𝐔❨1❩)
#U2 #HVU2 @(ex3_intro … U2)
qed-.
lemma fquq_cpx_trans_tneqx (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d« →
- â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈ U2 → (T2 ≅ U2 → ⊥) →
- â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88 U1 & T1 â\89\85 U1 â\86\92 â\8a¥ & â\9dªG1,L1,U1â\9d« â¬\82⸮[b] â\9dªG2,L2,U2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80U2. â\9d¨G2,L2â\9d© ⊢ T2 ⬈ U2 → (T2 ≅ U2 → ⊥) →
+ â\88\83â\88\83U1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88 U1 & T1 â\89\85 U1 â\86\92 â\8a¥ & â\9d¨G1,L1,U1â\9d© â¬\82⸮[b] â\9d¨G2,L2,U2â\9d©.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H12 elim H12 -H12
[ #H12 #U2 #HTU2 #H elim (fqu_cpx_trans_tneqx … H12 … HTU2 H) -T2
/3 width=4 by fqu_fquq, ex3_intro/
qed-.
lemma fqup_cpx_trans_tneqx (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« →
- â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈ U2 → (T2 ≅ U2 → ⊥) →
- â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88 U1 & T1 â\89\85 U1 â\86\92 â\8a¥ & â\9dªG1,L1,U1â\9d« â¬\82+[b] â\9dªG2,L2,U2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80U2. â\9d¨G2,L2â\9d© ⊢ T2 ⬈ U2 → (T2 ≅ U2 → ⊥) →
+ â\88\83â\88\83U1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88 U1 & T1 â\89\85 U1 â\86\92 â\8a¥ & â\9d¨G1,L1,U1â\9d© â¬\82+[b] â\9d¨G2,L2,U2â\9d©.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1
[ #G1 #L1 #T1 #H12 #U2 #HTU2 #H elim (fqu_cpx_trans_tneqx … H12 … HTU2 H) -T2
/3 width=4 by fqu_fqup, ex3_intro/
qed-.
lemma fqus_cpx_trans_tneqx (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
- â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈ U2 → (T2 ≅ U2 → ⊥) →
- â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88 U1 & T1 â\89\85 U1 â\86\92 â\8a¥ & â\9dªG1,L1,U1â\9d« â¬\82*[b] â\9dªG2,L2,U2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80U2. â\9d¨G2,L2â\9d© ⊢ T2 ⬈ U2 → (T2 ≅ U2 → ⊥) →
+ â\88\83â\88\83U1. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88 U1 & T1 â\89\85 U1 â\86\92 â\8a¥ & â\9d¨G1,L1,U1â\9d© â¬\82*[b] â\9d¨G2,L2,U2â\9d©.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_fqup … H12) -H12
[ #H12 elim (fqup_cpx_trans_tneqx … H12 … HTU2 H) -T2
/3 width=4 by fqup_fqus, ex3_intro/
qed-.
lemma cpx_bind_unit (G) (L):
- â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈ V2 →
- â\88\80J,T1,T2. â\9dªG,L.â\93¤[J]â\9d« ⊢ T1 ⬈ T2 →
- â\88\80p,I. â\9dªG,Lâ\9d« ⊢ ⓑ[p,I]V1.T1 ⬈ ⓑ[p,I]V2.T2.
+ â\88\80V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬈ V2 →
+ â\88\80J,T1,T2. â\9d¨G,L.â\93¤[J]â\9d© ⊢ T1 ⬈ T2 →
+ â\88\80p,I. â\9d¨G,Lâ\9d© ⊢ ⓑ[p,I]V1.T1 ⬈ ⓑ[p,I]V2.T2.
/4 width=4 by lsubr_cpx_trans, cpx_bind, lsubr_unit/ qed.
(* Basic_2A1: was just: cpx_lleq_conf_dx *)
lemma cpx_reqg_conf_dx (S) (G) (L2):
reflexive … S → symmetric … S →
- â\88\80T1,T2. â\9dªG,L2â\9d« ⊢ T1 ⬈ T2 →
+ â\88\80T1,T2. â\9d¨G,L2â\9d© ⊢ T1 ⬈ T2 →
∀L1. L1 ≛[S,T1] L2 → L1 ≛[S,T2] L2.
/4 width=4 by cpx_reqg_conf_sn, reqg_sym/ qed-.
(* Inversion lemmas with simple terms ***************************************)
lemma cpx_inv_appl1_simple (G) (L):
- â\88\80V1,T1,U. â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.T1 â¬\88 U â\86\92 ð\9d\90\92â\9dªT1â\9d« →
- â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88 V2 & â\9dªG,Lâ\9d« ⊢ T1 ⬈ T2 & U = ⓐV2.T2.
+ â\88\80V1,T1,U. â\9d¨G,Lâ\9d© â\8a¢ â\93\90V1.T1 â¬\88 U â\86\92 ð\9d\90\92â\9d¨T1â\9d© →
+ â\88\83â\88\83V2,T2. â\9d¨G,Lâ\9d© â\8a¢ V1 â¬\88 V2 & â\9d¨G,Lâ\9d© ⊢ T1 ⬈ T2 & U = ⓐV2.T2.
#G #L #V1 #T1 #U * #c #H #HT1 elim (cpg_inv_appl1_simple … H) -H
/3 width=5 by ex3_2_intro, ex_intro/
qed-.
(* Basic_2A1: uses: fpbq *)
definition fpb (G1) (L1) (T1) (G2) (L2) (T2): Prop ≝
- â\88\83â\88\83L,T. â\9dªG1,L1,T1â\9d« â¬\82⸮ â\9dªG2,L,Tâ\9d« & â\9dªG2,Lâ\9d« â\8a¢ T â¬\88 T2 & â\9dªG2,Lâ\9d« ⊢ ⬈[T] L2.
+ â\88\83â\88\83L,T. â\9d¨G1,L1,T1â\9d© â¬\82⸮ â\9d¨G2,L,Tâ\9d© & â\9d¨G2,Lâ\9d© â\8a¢ T â¬\88 T2 & â\9d¨G2,Lâ\9d© ⊢ ⬈[T] L2.
interpretation
"parallel rst-transition (closure)"
(* Basic properties *********************************************************)
lemma fpb_intro (G1) (L1) (T1) (G2) (L2) (T2):
- â\88\80L,T. â\9dªG1,L1,T1â\9d« â¬\82⸮ â\9dªG2,L,Tâ\9d« â\86\92 â\9dªG2,Lâ\9d« ⊢ T ⬈ T2 →
- â\9dªG2,Lâ\9d« â\8a¢ â¬\88[T] L2 â\86\92 â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d«.
+ â\88\80L,T. â\9d¨G1,L1,T1â\9d© â¬\82⸮ â\9d¨G2,L,Tâ\9d© â\86\92 â\9d¨G2,Lâ\9d© ⊢ T ⬈ T2 →
+ â\9d¨G2,Lâ\9d© â\8a¢ â¬\88[T] L2 â\86\92 â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d©.
/2 width=5 by ex3_2_intro/ qed.
lemma rpx_fpb (G) (T):
- â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â¬\88[T] L2 â\86\92 â\9dªG,L1,Tâ\9d« â\89½ â\9dªG,L2,Tâ\9d«.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© â\8a¢ â¬\88[T] L2 â\86\92 â\9d¨G,L1,Tâ\9d© â\89½ â\9d¨G,L2,Tâ\9d©.
/2 width=5 by fpb_intro/ qed.
(* Basic inversion lemmas ***************************************************)
lemma fpb_inv_gen (G1) (L1) (T1) (G2) (L2) (T2):
- â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d« →
- â\88\83â\88\83L,T. â\9dªG1,L1,T1â\9d« â¬\82⸮ â\9dªG2,L,Tâ\9d« & â\9dªG2,Lâ\9d« â\8a¢ T â¬\88 T2 & â\9dªG2,Lâ\9d« ⊢ ⬈[T] L2.
+ â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d© →
+ â\88\83â\88\83L,T. â\9d¨G1,L1,T1â\9d© â¬\82⸮ â\9d¨G2,L,Tâ\9d© & â\9d¨G2,Lâ\9d© â\8a¢ T â¬\88 T2 & â\9d¨G2,Lâ\9d© ⊢ ⬈[T] L2.
// qed-.
(* Basic_2A1: removed theorems 2:
(* Basic_2A1: uses: fpbq_aaa_conf *)
lemma fpb_aaa_conf:
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d« →
- â\88\80A1. â\9dªG1,L1â\9d« â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â\9dªG2,L2â\9d« ⊢ T2 ⁝ A2.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d© →
+ â\88\80A1. â\9d¨G1,L1â\9d© â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â\9d¨G2,L2â\9d© ⊢ T2 ⁝ A2.
#G1 #G2 #L1 #L2 #T1 #T2 #H #A1 #HA1
elim (fpb_inv_req … H) -H #L0 #L #T #H1 #HT2 #HL0 #HL02
elim (aaa_fquq_conf … H1 … HA1) -G1 -L1 -T1 -A1 #A2 #HA2
(* Basic_2A1: uses: fpbq_feqx *)
lemma feqg_fpb (S) (G1) (G2) (L1) (L2) (T1) (T2):
reflexive … S → symmetric … S →
- â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d«.
+ â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d©.
#S #G1 #G2 #L1 #L2 #T1 #T2 #HS1 #HS2 #H
elim (feqg_inv_gen_sn … H) -H #H #HL12 #HT12 destruct
/4 width=8 by reqg_rpx, teqg_cpx, fpb_intro/
lemma feqg_fpb_trans (S) (G) (L) (T):
reflexive … S → symmetric … S → Transitive … S →
- â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG,L,Tâ\9d« →
- â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« â\89½ â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G,L,Tâ\9d© →
+ â\88\80G2,L2,T2. â\9d¨G,L,Tâ\9d© â\89½ â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d©.
#S #G #L #T #H1S #H2S #H3S #G1 #L1 #T1 #H1 #G2 #L2 #T2 #H2
elim (fpb_inv_gen … H2) -H2 #L0 #T0 #H0 #HT02 #H
elim (rpx_inv_reqg_lpx S … H) -H // #L3 #HL03 #HL32
(* Basic_2A1: uses: fpbq_cpx *)
lemma cpx_fpb (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88 T2 â\86\92 â\9dªG,L,T1â\9d« â\89½ â\9dªG,L,T2â\9d«.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88 T2 â\86\92 â\9d¨G,L,T1â\9d© â\89½ â\9d¨G,L,T2â\9d©.
/2 width=5 by fpb_intro/ qed.
(* Basic_2A1: uses: fpbq_fquq *)
lemma fquq_fpb (G1) (G2) (L1) (L2) (T1) (T2):
- â\9dªG1,L1,T1â\9d« â¬\82⸮ â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d«.
+ â\9d¨G1,L1,T1â\9d© â¬\82⸮ â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d©.
/2 width=5 by fpb_intro/ qed.
lemma fqu_fpb (G1) (G2) (L1) (L2) (T1) (T2):
- â\9dªG1,L1,T1â\9d« â¬\82 â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d«.
+ â\9d¨G1,L1,T1â\9d© â¬\82 â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d©.
/3 width=5 by fquq_fpb, fqu_fquq/ qed.
(* Basic_2A1: uses: fpbq_lpx *)
lemma lpx_fpb (G) (T):
- â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â¬\88 L2 â\86\92 â\9dªG,L1,Tâ\9d« â\89½ â\9dªG,L2,Tâ\9d«.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© â\8a¢ â¬\88 L2 â\86\92 â\9d¨G,L1,Tâ\9d© â\89½ â\9d¨G,L2,Tâ\9d©.
/3 width=1 by rpx_fpb, lpx_rpx/ qed.
lemma fpb_intro_req (G1) (G2) (L1) (L2) (T1) (T2):
- â\88\80L0,L,T. â\9dªG1,L1,T1â\9d« â¬\82⸮ â\9dªG2,L,Tâ\9d« â\86\92 â\9dªG2,Lâ\9d« ⊢ T ⬈ T2 →
- L â\89¡[T] L0 â\86\92 â\9dªG2,L0â\9d« â\8a¢ â¬\88 L2 â\86\92 â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d«.
+ â\88\80L0,L,T. â\9d¨G1,L1,T1â\9d© â¬\82⸮ â\9d¨G2,L,Tâ\9d© â\86\92 â\9d¨G2,Lâ\9d© ⊢ T ⬈ T2 →
+ L â\89¡[T] L0 â\86\92 â\9d¨G2,L0â\9d© â\8a¢ â¬\88 L2 â\86\92 â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d©.
/4 width=10 by fpb_intro, lpx_rpx, reqg_rpx_trans/ qed.
(* Inversion lemmas with extended rt-transition for full local envs *********)
lemma fpb_inv_req (G1) (G2) (L1) (L2) (T1) (T2):
- â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d« →
- â\88\83â\88\83L0,L,T. â\9dªG1,L1,T1â\9d« â¬\82⸮ â\9dªG2,L,Tâ\9d« & â\9dªG2,Lâ\9d« â\8a¢ T â¬\88 T2 & L â\89¡[T] L0 & â\9dªG2,L0â\9d« ⊢ ⬈ L2.
+ â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d© →
+ â\88\83â\88\83L0,L,T. â\9d¨G1,L1,T1â\9d© â¬\82⸮ â\9d¨G2,L,Tâ\9d© & â\9d¨G2,Lâ\9d© â\8a¢ T â¬\88 T2 & L â\89¡[T] L0 & â\9d¨G2,L0â\9d© ⊢ ⬈ L2.
#G1 #G2 #L1 #L2 #T1 #T2 * #L #T #H1 #HT2 #HL2
elim (rpx_inv_req_lpx … HL2) -HL2 #L0 #HL0 #HL02
/2 width=7 by ex4_3_intro/
(* Forward lemmas with extended rt-transition for full local envs ***********)
lemma fpb_fwd_req (G1) (G2) (L1) (L2) (T1) (T2):
- â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d« →
- â\88\83â\88\83L0,L,T. â\9dªG1,L1,T1â\9d« â¬\82⸮ â\9dªG2,L,Tâ\9d« & â\9dªG2,Lâ\9d« â\8a¢ T â¬\88 T2 & â\9dªG2,Lâ\9d« ⊢ ⬈ L0 & L0 ≡[T] L2.
+ â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d© →
+ â\88\83â\88\83L0,L,T. â\9d¨G1,L1,T1â\9d© â¬\82⸮ â\9d¨G2,L,Tâ\9d© & â\9d¨G2,Lâ\9d© â\8a¢ T â¬\88 T2 & â\9d¨G2,Lâ\9d© ⊢ ⬈ L0 & L0 ≡[T] L2.
#G1 #G2 #L1 #L2 #T1 #T2 * #L #T #H1 #HT2 #HL2
elim (rpx_fwd_lpx_req … HL2) -HL2 #L0 #HL0 #HL02
/2 width=7 by ex4_3_intro/
(* Basic_2A1: uses: fpb *)
definition fpbc (G1) (L1) (T1) (G2) (L2) (T2): Prop ≝
- â\88§â\88§ â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d«
- & (â\9dªG1,L1,T1â\9d« â\89\85 â\9dªG2,L2,T2â\9d« → ⊥).
+ â\88§â\88§ â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d©
+ & (â\9d¨G1,L1,T1â\9d© â\89\85 â\9d¨G2,L2,T2â\9d© → ⊥).
interpretation
"proper parallel rst-transition (closure)"
(* Basic_2A1: fpbq_inv_fpb_alt *)
lemma fpbc_intro (G1) (L1) (T1) (G2) (L2) (T2):
- â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d« â\86\92 (â\9dªG1,L1,T1â\9d« â\89\85 â\9dªG2,L2,T2â\9d« → ⊥) →
- â\9dªG1,L1,T1â\9d« â\89» â\9dªG2,L2,T2â\9d«.
+ â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d© â\86\92 (â\9d¨G1,L1,T1â\9d© â\89\85 â\9d¨G2,L2,T2â\9d© → ⊥) →
+ â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G2,L2,T2â\9d©.
/3 width=1 by conj/ qed.
lemma rpx_fpbc (G) (T):
- â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â¬\88[T] L2 â\86\92 (L1 â\89\85[T] L2 â\86\92 â\8a¥) â\86\92 â\9dªG,L1,Tâ\9d« â\89» â\9dªG,L2,Tâ\9d«.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© â\8a¢ â¬\88[T] L2 â\86\92 (L1 â\89\85[T] L2 â\86\92 â\8a¥) â\86\92 â\9d¨G,L1,Tâ\9d© â\89» â\9d¨G,L2,Tâ\9d©.
/4 width=4 by fpbc_intro, rpx_fpb, feqg_fwd_reqg_sn/ qed.
(* Basic inversion lemmas ***************************************************)
(* Basic_2A1: uses: fpb_fpbq_alt *)
lemma fpbc_inv_gen (S):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89» â\9dªG2,L2,T2â\9d« →
- â\88§â\88§ â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d« & (â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« → ⊥).
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G2,L2,T2â\9d© →
+ â\88§â\88§ â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d© & (â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© → ⊥).
#S #G1 #G2 #L1 #L2 #T1 #T2 *
/4 width=2 by feqg_feqx, conj/
qed-.
(* Basic_2A1: uses: fpb_fpbq *)
lemma fpbc_fwd_fpb:
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89» â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d©.
#G1 #G2 #L1 #L2 #T1 #T2 * //
qed-.
(* Basic_2A1: uses: teqg_fpb_trans lleq_fpb_trans fleq_fpb_trans *)
lemma feqg_fpbc_trans (S) (G) (L) (T):
reflexive … S → symmetric … S → Transitive … S →
- â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG,L,Tâ\9d« →
- â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« â\89» â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89» â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G,L,Tâ\9d© →
+ â\88\80G2,L2,T2. â\9d¨G,L,Tâ\9d© â\89» â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G2,L2,T2â\9d©.
#S #G #L #T #H1S #H2S #H3S #G1 #L1 #T1 #H1 #G2 #L2 #T2 #H2
elim (fpbc_inv_gen sfull … H2) -H2 #H2 #Hn2
/6 width=9 by fpbc_intro, feqg_fpb_trans, feqg_canc_sn, feqg_feqx/
(* Basic_2A1: uses: fpb_inv_fleq *)
lemma fpbc_inv_feqg (S):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89» â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« → ⊥.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© → ⊥.
#S #G1 #G2 #L1 #L2 #T1 #T2 #H #H12
elim (fpbc_inv_gen S … H) -H #_ #Hn2
/2 width=1 by/
(* Basic_2A1: uses: fpbq_ind_alt *)
lemma fpb_inv_fpbc:
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d« →
- â\88¨â\88¨ â\9dªG1,L1,T1â\9d« â\89\85 â\9dªG2,L2,T2â\9d«
- | â\9dªG1,L1,T1â\9d« â\89» â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d© →
+ â\88¨â\88¨ â\9d¨G1,L1,T1â\9d© â\89\85 â\9d¨G2,L2,T2â\9d©
+ | â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G2,L2,T2â\9d©.
#G1 #G2 #L1 #L2 #T1 #T2 #H
elim (feqx_dec G1 G2 L1 L2 T1 T2)
/4 width=1 by fpbc_intro, or_intror, or_introl/
(* Basic_2A1: uses: fpb_cpx *)
lemma cpx_fpbc (G) (L):
- â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88 T2 â\86\92 (T1 â\89\85 T2 â\86\92 â\8a¥) â\86\92 â\9dªG,L,T1â\9d« â\89» â\9dªG,L,T2â\9d«.
+ â\88\80T1,T2. â\9d¨G,Lâ\9d© â\8a¢ T1 â¬\88 T2 â\86\92 (T1 â\89\85 T2 â\86\92 â\8a¥) â\86\92 â\9d¨G,L,T1â\9d© â\89» â\9d¨G,L,T2â\9d©.
/4 width=5 by fpbc_intro, cpx_fpb, feqg_fwd_teqg/ qed.
(* Basic_2A1: uses: fpb_fqu *)
lemma fqu_fpbc (G1) (G2) (L1) (L2) (T1) (T2):
- â\9dªG1,L1,T1â\9d« â¬\82 â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89» â\9dªG2,L2,T2â\9d«.
+ â\9d¨G1,L1,T1â\9d© â¬\82 â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G2,L2,T2â\9d©.
/4 width=10 by fpbc_intro, fquq_fpb, fqu_fquq, fqu_fneqg/ qed.
(* Basic_2A1: uses: fpb_lpx *)
lemma lpx_fpbc (G) (T):
- â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â¬\88 L2 â\86\92 (L1 â\89\85[T] L2 â\86\92 â\8a¥) â\86\92 â\9dªG,L1,Tâ\9d« â\89» â\9dªG,L2,Tâ\9d«.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© â\8a¢ â¬\88 L2 â\86\92 (L1 â\89\85[T] L2 â\86\92 â\8a¥) â\86\92 â\9d¨G,L1,Tâ\9d© â\89» â\9d¨G,L2,Tâ\9d©.
/3 width=1 by rpx_fpbc, lpx_rpx/ qed.
(* Forward lemmas with extended rt-transition for full local envs ***********)
lemma fpbc_fwd_lpx (G1) (G2) (L1) (L2) (T1) (T2):
- â\9dªG1,L1,T1â\9d« â\89» â\9dªG2,L2,T2â\9d« →
- â\88¨â\88¨ â\88\83â\88\83G,L,T. â\9dªG1,L1,T1â\9d« â¬\82 â\9dªG,L,Tâ\9d« & â\9dªG,L,Tâ\9d« â\89½ â\9dªG2,L2,T2â\9d«
- | â\88\83â\88\83T. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88 T & T1 â\89\85 T â\86\92 â\8a¥ & â\9dªG1,L1,Tâ\9d« â\89½ â\9dªG2,L2,T2â\9d«
- | â\88\83â\88\83L. â\9dªG1,L1â\9d« â\8a¢ â¬\88 L & (L1 â\89\85[T1] L â\86\92 â\8a¥) & â\9dªG1,L,T1â\9d« â\89½ â\9dªG2,L2,T2â\9d«.
+ â\9d¨G1,L1,T1â\9d© â\89» â\9d¨G2,L2,T2â\9d© →
+ â\88¨â\88¨ â\88\83â\88\83G,L,T. â\9d¨G1,L1,T1â\9d© â¬\82 â\9d¨G,L,Tâ\9d© & â\9d¨G,L,Tâ\9d© â\89½ â\9d¨G2,L2,T2â\9d©
+ | â\88\83â\88\83T. â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88 T & T1 â\89\85 T â\86\92 â\8a¥ & â\9d¨G1,L1,Tâ\9d© â\89½ â\9d¨G2,L2,T2â\9d©
+ | â\88\83â\88\83L. â\9d¨G1,L1â\9d© â\8a¢ â¬\88 L & (L1 â\89\85[T1] L â\86\92 â\8a¥) & â\9d¨G1,L,T1â\9d© â\89½ â\9d¨G2,L2,T2â\9d©.
#G1 #G2 #L1 #L2 #T1 #T2 #H
elim (fpbc_inv_gen sfull … H) -H #H12 #Hn12
elim (fpb_inv_gen … H12) -H12 #L #T #H1 #HT2 #HL2
(* Basic properties *********************************************************)
-lemma lpr_bind (h) (G): â\88\80K1,K2. â\9dªG,K1â\9d« ⊢ ➡[h,0] K2 →
- â\88\80I1,I2. â\9dªG,K1â\9d« â\8a¢ I1 â\9e¡[h,0] I2 â\86\92 â\9dªG,K1.â\93\98[I1]â\9d« ⊢ ➡[h,0] K2.ⓘ[I2].
+lemma lpr_bind (h) (G): â\88\80K1,K2. â\9d¨G,K1â\9d© ⊢ ➡[h,0] K2 →
+ â\88\80I1,I2. â\9d¨G,K1â\9d© â\8a¢ I1 â\9e¡[h,0] I2 â\86\92 â\9d¨G,K1.â\93\98[I1]â\9d© ⊢ ➡[h,0] K2.ⓘ[I2].
/2 width=1 by lex_bind/ qed.
(* Note: lemma 250 *)
(* Advanced properties ******************************************************)
-lemma lpr_bind_refl_dx (h) (G): â\88\80K1,K2. â\9dªG,K1â\9d« ⊢ ➡[h,0] K2 →
- â\88\80I. â\9dªG,K1.â\93\98[I]â\9d« ⊢ ➡[h,0] K2.ⓘ[I].
+lemma lpr_bind_refl_dx (h) (G): â\88\80K1,K2. â\9d¨G,K1â\9d© ⊢ ➡[h,0] K2 →
+ â\88\80I. â\9d¨G,K1.â\93\98[I]â\9d© ⊢ ➡[h,0] K2.ⓘ[I].
/2 width=1 by lex_bind_refl_dx/ qed.
-lemma lpr_pair (h) (G): â\88\80K1,K2,V1,V2. â\9dªG,K1â\9d« â\8a¢ â\9e¡[h,0] K2 â\86\92 â\9dªG,K1â\9d« ⊢ V1 ➡[h,0] V2 →
- â\88\80I. â\9dªG,K1.â\93\91[I]V1â\9d« ⊢ ➡[h,0] K2.ⓑ[I]V2.
+lemma lpr_pair (h) (G): â\88\80K1,K2,V1,V2. â\9d¨G,K1â\9d© â\8a¢ â\9e¡[h,0] K2 â\86\92 â\9d¨G,K1â\9d© ⊢ V1 ➡[h,0] V2 →
+ â\88\80I. â\9d¨G,K1.â\93\91[I]V1â\9d© ⊢ ➡[h,0] K2.ⓑ[I]V2.
/2 width=1 by lex_pair/ qed.
(* Basic inversion lemmas ***************************************************)
(* Basic_2A1: was: lpr_inv_atom1 *)
(* Basic_1: includes: wcpr0_gen_sort *)
-lemma lpr_inv_atom_sn (h) (G): â\88\80L2. â\9dªG,â\8b\86â\9d« ⊢ ➡[h,0] L2 → L2 = ⋆.
+lemma lpr_inv_atom_sn (h) (G): â\88\80L2. â\9d¨G,â\8b\86â\9d© ⊢ ➡[h,0] L2 → L2 = ⋆.
/2 width=2 by lex_inv_atom_sn/ qed-.
-lemma lpr_inv_bind_sn (h) (G): â\88\80I1,L2,K1. â\9dªG,K1.â\93\98[I1]â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83I2,K2. â\9dªG,K1â\9d« â\8a¢ â\9e¡[h,0] K2 & â\9dªG,K1â\9d« ⊢ I1 ➡[h,0] I2 &
+lemma lpr_inv_bind_sn (h) (G): â\88\80I1,L2,K1. â\9d¨G,K1.â\93\98[I1]â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83I2,K2. â\9d¨G,K1â\9d© â\8a¢ â\9e¡[h,0] K2 & â\9d¨G,K1â\9d© ⊢ I1 ➡[h,0] I2 &
L2 = K2.ⓘ[I2].
/2 width=1 by lex_inv_bind_sn/ qed-.
(* Basic_2A1: was: lpr_inv_atom2 *)
-lemma lpr_inv_atom_dx (h) (G): â\88\80L1. â\9dªG,L1â\9d« ⊢ ➡[h,0] ⋆ → L1 = ⋆.
+lemma lpr_inv_atom_dx (h) (G): â\88\80L1. â\9d¨G,L1â\9d© ⊢ ➡[h,0] ⋆ → L1 = ⋆.
/2 width=2 by lex_inv_atom_dx/ qed-.
-lemma lpr_inv_bind_dx (h) (G): â\88\80I2,L1,K2. â\9dªG,L1â\9d« ⊢ ➡[h,0] K2.ⓘ[I2] →
- â\88\83â\88\83I1,K1. â\9dªG,K1â\9d« â\8a¢ â\9e¡[h,0] K2 & â\9dªG,K1â\9d« ⊢ I1 ➡[h,0] I2 &
+lemma lpr_inv_bind_dx (h) (G): â\88\80I2,L1,K2. â\9d¨G,L1â\9d© ⊢ ➡[h,0] K2.ⓘ[I2] →
+ â\88\83â\88\83I1,K1. â\9d¨G,K1â\9d© â\8a¢ â\9e¡[h,0] K2 & â\9d¨G,K1â\9d© ⊢ I1 ➡[h,0] I2 &
L1 = K1.ⓘ[I1].
/2 width=1 by lex_inv_bind_dx/ qed-.
(* Advanced inversion lemmas ************************************************)
-lemma lpr_inv_unit_sn (h) (G): â\88\80I,L2,K1. â\9dªG,K1.â\93¤[I]â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83K2. â\9dªG,K1â\9d« ⊢ ➡[h,0] K2 & L2 = K2.ⓤ[I].
+lemma lpr_inv_unit_sn (h) (G): â\88\80I,L2,K1. â\9d¨G,K1.â\93¤[I]â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83K2. â\9d¨G,K1â\9d© ⊢ ➡[h,0] K2 & L2 = K2.ⓤ[I].
/2 width=1 by lex_inv_unit_sn/ qed-.
(* Basic_2A1: was: lpr_inv_pair1 *)
(* Basic_1: includes: wcpr0_gen_head *)
-lemma lpr_inv_pair_sn (h) (G): â\88\80I,L2,K1,V1. â\9dªG,K1.â\93\91[I]V1â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83K2,V2. â\9dªG,K1â\9d« â\8a¢ â\9e¡[h,0] K2 & â\9dªG,K1â\9d« ⊢ V1 ➡[h,0] V2 &
+lemma lpr_inv_pair_sn (h) (G): â\88\80I,L2,K1,V1. â\9d¨G,K1.â\93\91[I]V1â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83K2,V2. â\9d¨G,K1â\9d© â\8a¢ â\9e¡[h,0] K2 & â\9d¨G,K1â\9d© ⊢ V1 ➡[h,0] V2 &
L2 = K2.ⓑ[I]V2.
/2 width=1 by lex_inv_pair_sn/ qed-.
-lemma lpr_inv_unit_dx (h) (G): â\88\80I,L1,K2. â\9dªG,L1â\9d« ⊢ ➡[h,0] K2.ⓤ[I] →
- â\88\83â\88\83K1. â\9dªG,K1â\9d« ⊢ ➡[h,0] K2 & L1 = K1.ⓤ[I].
+lemma lpr_inv_unit_dx (h) (G): â\88\80I,L1,K2. â\9d¨G,L1â\9d© ⊢ ➡[h,0] K2.ⓤ[I] →
+ â\88\83â\88\83K1. â\9d¨G,K1â\9d© ⊢ ➡[h,0] K2 & L1 = K1.ⓤ[I].
/2 width=1 by lex_inv_unit_dx/ qed-.
(* Basic_2A1: was: lpr_inv_pair2 *)
-lemma lpr_inv_pair_dx (h) (G): â\88\80I,L1,K2,V2. â\9dªG,L1â\9d« ⊢ ➡[h,0] K2.ⓑ[I]V2 →
- â\88\83â\88\83K1,V1. â\9dªG,K1â\9d« â\8a¢ â\9e¡[h,0] K2 & â\9dªG,K1â\9d« ⊢ V1 ➡[h,0] V2 &
+lemma lpr_inv_pair_dx (h) (G): â\88\80I,L1,K2,V2. â\9d¨G,L1â\9d© ⊢ ➡[h,0] K2.ⓑ[I]V2 →
+ â\88\83â\88\83K1,V1. â\9d¨G,K1â\9d© â\8a¢ â\9e¡[h,0] K2 & â\9d¨G,K1â\9d© ⊢ V1 ➡[h,0] V2 &
L1 = K1.ⓑ[I]V1.
/2 width=1 by lex_inv_pair_dx/ qed-.
-lemma lpr_inv_pair (h) (G): â\88\80I1,I2,L1,L2,V1,V2. â\9dªG,L1.â\93\91[I1]V1â\9d« ⊢ ➡[h,0] L2.ⓑ[I2]V2 →
- â\88§â\88§ â\9dªG,L1â\9d« â\8a¢ â\9e¡[h,0] L2 & â\9dªG,L1â\9d« ⊢ V1 ➡[h,0] V2 & I1 = I2.
+lemma lpr_inv_pair (h) (G): â\88\80I1,I2,L1,L2,V1,V2. â\9d¨G,L1.â\93\91[I1]V1â\9d© ⊢ ➡[h,0] L2.ⓑ[I2]V2 →
+ â\88§â\88§ â\9d¨G,L1â\9d© â\8a¢ â\9e¡[h,0] L2 & â\9d¨G,L1â\9d© ⊢ V1 ➡[h,0] V2 & I1 = I2.
/2 width=1 by lex_inv_pair/ qed-.
(* Basic_1: removed theorems 3: wcpr0_getl wcpr0_getl_back
(* Basic_2A1: uses: lpr_fpbq *)
lemma lpr_fwd_fpb (h) (G) (T):
- â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9dªG,L1,Tâ\9d« â\89½ â\9dªG,L2,Tâ\9d«.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9d¨G,L1,Tâ\9d© â\89½ â\9d¨G,L2,Tâ\9d©.
/3 width=2 by lpx_fpb, lpr_fwd_lpx/ qed-.
(* Basic_2A1: uses: lpr_fpb *)
lemma lpr_fwd_fpbc (h) (G) (T):
- â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h,0] L2 â\86\92 (L1 â\89\85[T] L2 â\86\92 â\8a¥) â\86\92 â\9dªG,L1,Tâ\9d« â\89» â\9dªG,L2,Tâ\9d«.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© â\8a¢ â\9e¡[h,0] L2 â\86\92 (L1 â\89\85[T] L2 â\86\92 â\8a¥) â\86\92 â\9d¨G,L1,Tâ\9d© â\89» â\9d¨G,L2,Tâ\9d©.
/3 width=2 by lpx_fpbc, lpr_fwd_lpx/ qed-.
(* Properties with extended structural successor for closures ***************)
-lemma fqu_cpr_trans_sn (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
- â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ➡[h,0] U2 →
- â\88\83â\88\83L,U1. â\9dªG1,L1â\9d« â\8a¢ â\9e¡[h,0] L & â\9dªG1,L1â\9d« â\8a¢ T1 â\9e¡[h,0] U1 & â\9dªG1,L,U1â\9d« â¬\82[b] â\9dªG2,L2,U2â\9d«.
+lemma fqu_cpr_trans_sn (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80U2. â\9d¨G2,L2â\9d© ⊢ T2 ➡[h,0] U2 →
+ â\88\83â\88\83L,U1. â\9d¨G1,L1â\9d© â\8a¢ â\9e¡[h,0] L & â\9d¨G1,L1â\9d© â\8a¢ T1 â\9e¡[h,0] U1 & â\9d¨G1,L,U1â\9d© â¬\82[b] â\9d¨G2,L2,U2â\9d©.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ /3 width=5 by lpr_pair, fqu_lref_O, ex3_2_intro/
| /3 width=5 by cpr_pair_sn, fqu_pair_sn, ex3_2_intro/
]
qed-.
-lemma fqu_cpr_trans_dx (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
- â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ➡[h,0] U2 →
- â\88\83â\88\83L,U1. â\9dªG1,L1â\9d« â\8a¢ â\9e¡[h,0] L & â\9dªG1,Lâ\9d« â\8a¢ T1 â\9e¡[h,0] U1 & â\9dªG1,L,U1â\9d« â¬\82[b] â\9dªG2,L2,U2â\9d«.
+lemma fqu_cpr_trans_dx (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80U2. â\9d¨G2,L2â\9d© ⊢ T2 ➡[h,0] U2 →
+ â\88\83â\88\83L,U1. â\9d¨G1,L1â\9d© â\8a¢ â\9e¡[h,0] L & â\9d¨G1,Lâ\9d© â\8a¢ T1 â\9e¡[h,0] U1 & â\9d¨G1,L,U1â\9d© â¬\82[b] â\9d¨G2,L2,U2â\9d©.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ /3 width=5 by lpr_pair, fqu_lref_O, ex3_2_intro/
| /3 width=5 by cpr_pair_sn, fqu_pair_sn, ex3_2_intro/
]
qed-.
-lemma fqu_lpr_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
- â\88\80K2. â\9dªG2,L2â\9d« ⊢ ➡[h,0] K2 →
- â\88\83â\88\83K1,T. â\9dªG1,L1â\9d« â\8a¢ â\9e¡[h,0] K1 & â\9dªG1,L1â\9d« â\8a¢ T1 â\9e¡[h,0] T & â\9dªG1,K1,Tâ\9d« â¬\82[b] â\9dªG2,K2,T2â\9d«.
+lemma fqu_lpr_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80K2. â\9d¨G2,L2â\9d© ⊢ ➡[h,0] K2 →
+ â\88\83â\88\83K1,T. â\9d¨G1,L1â\9d© â\8a¢ â\9e¡[h,0] K1 & â\9d¨G1,L1â\9d© â\8a¢ T1 â\9e¡[h,0] T & â\9d¨G1,K1,Tâ\9d© â¬\82[b] â\9d¨G2,K2,T2â\9d©.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ /3 width=5 by lpr_bind_refl_dx, fqu_lref_O, ex3_2_intro/
| /3 width=5 by cpr_pair_sn, fqu_pair_sn, ex3_2_intro/
(* Note: does not hold in Basic_2A1 because it requires cpm *)
(* Note: L1 = K0.ⓛV0 and T1 = #0 require n = 1 *)
-lemma lpr_fqu_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
- â\88\80K1. â\9dªG1,K1â\9d« ⊢ ➡[h,0] L1 →
- â\88\83â\88\83n,K2,T. â\9dªG1,K1â\9d« â\8a¢ T1 â\9e¡[h,n] T & â\9dªG1,K1,Tâ\9d« â¬\82[b] â\9dªG2,K2,T2â\9d« & â\9dªG2,K2â\9d« ⊢ ➡[h,0] L2 & n ≤ 1.
+lemma lpr_fqu_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80K1. â\9d¨G1,K1â\9d© ⊢ ➡[h,0] L1 →
+ â\88\83â\88\83n,K2,T. â\9d¨G1,K1â\9d© â\8a¢ T1 â\9e¡[h,n] T & â\9d¨G1,K1,Tâ\9d© â¬\82[b] â\9d¨G2,K2,T2â\9d© & â\9d¨G2,K2â\9d© ⊢ ➡[h,0] L2 & n ≤ 1.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ * #G #K #V #K1 #H
elim (lpr_inv_pair_dx … H) -H #K0 #V0 #HK0 #HV0 #H destruct
(* Properties with extended optional structural successor for closures ******)
-lemma fquq_cpr_trans_sn (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d« →
- â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ➡[h,0] U2 →
- â\88\83â\88\83L,U1. â\9dªG1,L1â\9d« â\8a¢ â\9e¡[h,0] L & â\9dªG1,L1â\9d« â\8a¢ T1 â\9e¡[h,0] U1 & â\9dªG1,L,U1â\9d« â¬\82⸮[b] â\9dªG2,L2,U2â\9d«.
+lemma fquq_cpr_trans_sn (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80U2. â\9d¨G2,L2â\9d© ⊢ T2 ➡[h,0] U2 →
+ â\88\83â\88\83L,U1. â\9d¨G1,L1â\9d© â\8a¢ â\9e¡[h,0] L & â\9d¨G1,L1â\9d© â\8a¢ T1 â\9e¡[h,0] U1 & â\9d¨G1,L,U1â\9d© â¬\82⸮[b] â\9d¨G2,L2,U2â\9d©.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 cases H -H
[ #HT12 elim (fqu_cpr_trans_sn … HT12 … HTU2) /3 width=5 by fqu_fquq, ex3_2_intro/
| * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
]
qed-.
-lemma fquq_cpr_trans_dx (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d« →
- â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ➡[h,0] U2 →
- â\88\83â\88\83L,U1. â\9dªG1,L1â\9d« â\8a¢ â\9e¡[h,0] L & â\9dªG1,Lâ\9d« â\8a¢ T1 â\9e¡[h,0] U1 & â\9dªG1,L,U1â\9d« â¬\82⸮[b] â\9dªG2,L2,U2â\9d«.
+lemma fquq_cpr_trans_dx (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80U2. â\9d¨G2,L2â\9d© ⊢ T2 ➡[h,0] U2 →
+ â\88\83â\88\83L,U1. â\9d¨G1,L1â\9d© â\8a¢ â\9e¡[h,0] L & â\9d¨G1,Lâ\9d© â\8a¢ T1 â\9e¡[h,0] U1 & â\9d¨G1,L,U1â\9d© â¬\82⸮[b] â\9d¨G2,L2,U2â\9d©.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 cases H -H
[ #HT12 elim (fqu_cpr_trans_dx … HT12 … HTU2) /3 width=5 by fqu_fquq, ex3_2_intro/
| * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
]
qed-.
-lemma fquq_lpr_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d« →
- â\88\80K2. â\9dªG2,L2â\9d« ⊢ ➡[h,0] K2 →
- â\88\83â\88\83K1,T. â\9dªG1,L1â\9d« â\8a¢ â\9e¡[h,0] K1 & â\9dªG1,L1â\9d« â\8a¢ T1 â\9e¡[h,0] T & â\9dªG1,K1,Tâ\9d« â¬\82⸮[b] â\9dªG2,K2,T2â\9d«.
+lemma fquq_lpr_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80K2. â\9d¨G2,L2â\9d© ⊢ ➡[h,0] K2 →
+ â\88\83â\88\83K1,T. â\9d¨G1,L1â\9d© â\8a¢ â\9e¡[h,0] K1 & â\9d¨G1,L1â\9d© â\8a¢ T1 â\9e¡[h,0] T & â\9d¨G1,K1,Tâ\9d© â¬\82⸮[b] â\9d¨G2,K2,T2â\9d©.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K2 #HLK2 cases H -H
[ #H12 elim (fqu_lpr_trans … H12 … HLK2) /3 width=5 by fqu_fquq, ex3_2_intro/
| * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
]
qed-.
-lemma lpr_fquq_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d« →
- â\88\80K1. â\9dªG1,K1â\9d« ⊢ ➡[h,0] L1 →
- â\88\83â\88\83n,K2,T. â\9dªG1,K1â\9d« â\8a¢ T1 â\9e¡[h,n] T & â\9dªG1,K1,Tâ\9d« â¬\82⸮[b] â\9dªG2,K2,T2â\9d« & â\9dªG2,K2â\9d« ⊢ ➡[h,0] L2 & n ≤ 1.
+lemma lpr_fquq_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80K1. â\9d¨G1,K1â\9d© ⊢ ➡[h,0] L1 →
+ â\88\83â\88\83n,K2,T. â\9d¨G1,K1â\9d© â\8a¢ T1 â\9e¡[h,n] T & â\9d¨G1,K1,Tâ\9d© â¬\82⸮[b] â\9d¨G2,K2,T2â\9d© & â\9d¨G2,K2â\9d© ⊢ ➡[h,0] L2 & n ≤ 1.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #HKL1 cases H -H
[ #H12 elim (lpr_fqu_trans … H12 … HKL1) -L1 /3 width=7 by fqu_fquq, ex4_3_intro/
| * #H1 #H2 #H3 destruct /2 width=7 by ex4_3_intro/
(* PARALLEL R-TRANSITION FOR FULL LOCAL ENVIRONMENTS ************************)
-lemma lpr_fwd_length (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡[h,0] L2 → |L1| = |L2|.
+lemma lpr_fwd_length (h) (G): â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ➡[h,0] L2 → |L1| = |L2|.
/2 width=2 by lex_fwd_length/ qed-.
(* PARALLEL R-TRANSITION FOR FULL LOCAL ENVIRONMENTS ************************)
definition IH_cpr_conf_lpr (h): relation3 genv lenv term ≝ λG,L,T.
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[h,0] T1 â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T ➡[h,0] T2 →
- â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T0. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡[h,0] T0 & â\9dªG,L2â\9d« ⊢ T2 ➡[h,0] T0.
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T â\9e¡[h,0] T1 â\86\92 â\88\80T2. â\9d¨G,Lâ\9d© ⊢ T ➡[h,0] T2 →
+ â\88\80L1. â\9d¨G,Lâ\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T0. â\9d¨G,L1â\9d© â\8a¢ T1 â\9e¡[h,0] T0 & â\9d¨G,L2â\9d© ⊢ T2 ➡[h,0] T0.
(* Main properties with context-sensitive parallel reduction for terms ******)
fact cpr_conf_lpr_atom_atom (h):
- â\88\80I,G,L1,L2. â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93ª[I] â\9e¡[h,0] T & â\9dªG,L2â\9d« ⊢ ⓪[I] ➡[h,0] T.
+ â\88\80I,G,L1,L2. â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ â\93ª[I] â\9e¡[h,0] T & â\9d¨G,L2â\9d© ⊢ ⓪[I] ➡[h,0] T.
/2 width=3 by cpr_refl, ex2_intro/ qed-.
fact cpr_conf_lpr_atom_delta (h):
∀G0,L0,i. (
- â\88\80G,L,T. â\9dªG0,L0,#iâ\9d« â¬\82+ â\9dªG,L,Tâ\9d« → IH_cpr_conf_lpr h G L T
+ â\88\80G,L,T. â\9d¨G0,L0,#iâ\9d© â¬\82+ â\9d¨G,L,Tâ\9d© → IH_cpr_conf_lpr h G L T
) →
∀K0,V0. ⇩[i] L0 ≘ K0.ⓓV0 →
- â\88\80V2. â\9dªG0,K0â\9d« ⊢ V0 ➡[h,0] V2 → ∀T2. ⇧[↑i] V2 ≘ T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ #i â\9e¡[h,0] T & â\9dªG0,L2â\9d« ⊢ T2 ➡[h,0] T.
+ â\88\80V2. â\9d¨G0,K0â\9d© ⊢ V0 ➡[h,0] V2 → ∀T2. ⇧[↑i] V2 ≘ T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ #i â\9e¡[h,0] T & â\9d¨G0,L2â\9d© ⊢ T2 ➡[h,0] T.
#h #G0 #L0 #i #IH #K0 #V0 #HLK0 #V2 #HV02 #T2 #HVT2 #L1 #HL01 #L2 #HL02
elim (lpr_drops_conf … HLK0 … HL01) -HL01 // #X1 #H1 #HLK1
elim (lpr_inv_pair_sn … H1) -H1 #K1 #V1 #HK01 #HV01 #H destruct
(* Basic_1: includes: pr0_delta_delta pr2_delta_delta *)
fact cpr_conf_lpr_delta_delta (h):
∀G0,L0,i. (
- â\88\80G,L,T. â\9dªG0,L0,#iâ\9d« â¬\82+ â\9dªG,L,Tâ\9d« → IH_cpr_conf_lpr h G L T
+ â\88\80G,L,T. â\9d¨G0,L0,#iâ\9d© â¬\82+ â\9d¨G,L,Tâ\9d© → IH_cpr_conf_lpr h G L T
) →
∀K0,V0. ⇩[i] L0 ≘ K0.ⓓV0 →
- â\88\80V1. â\9dªG0,K0â\9d« ⊢ V0 ➡[h,0] V1 → ∀T1. ⇧[↑i] V1 ≘ T1 →
+ â\88\80V1. â\9d¨G0,K0â\9d© ⊢ V0 ➡[h,0] V1 → ∀T1. ⇧[↑i] V1 ≘ T1 →
∀KX,VX. ⇩[i] L0 ≘ KX.ⓓVX →
- â\88\80V2. â\9dªG0,KXâ\9d« ⊢ VX ➡[h,0] V2 → ∀T2. ⇧[↑i] V2 ≘ T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡[h,0] T & â\9dªG0,L2â\9d« ⊢ T2 ➡[h,0] T.
+ â\88\80V2. â\9d¨G0,KXâ\9d© ⊢ VX ➡[h,0] V2 → ∀T2. ⇧[↑i] V2 ≘ T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ T1 â\9e¡[h,0] T & â\9d¨G0,L2â\9d© ⊢ T2 ➡[h,0] T.
#h #G0 #L0 #i #IH #K0 #V0 #HLK0 #V1 #HV01 #T1 #HVT1
#KX #VX #H #V2 #HV02 #T2 #HVT2 #L1 #HL01 #L2 #HL02
lapply (drops_mono … H … HLK0) -H #H destruct
fact cpr_conf_lpr_bind_bind (h):
∀p,I,G0,L0,V0,T0. (
- â\88\80G,L,T. â\9dªG0,L0,â\93\91[p,I]V0.T0â\9d« â¬\82+ â\9dªG,L,Tâ\9d« → IH_cpr_conf_lpr h G L T
+ â\88\80G,L,T. â\9d¨G0,L0,â\93\91[p,I]V0.T0â\9d© â¬\82+ â\9d¨G,L,Tâ\9d© → IH_cpr_conf_lpr h G L T
) →
- â\88\80V1. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h,0] V1 â\86\92 â\88\80T1. â\9dªG0,L0.â\93\91[I]V0â\9d« ⊢ T0 ➡[h,0] T1 →
- â\88\80V2. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h,0] V2 â\86\92 â\88\80T2. â\9dªG0,L0.â\93\91[I]V0â\9d« ⊢ T0 ➡[h,0] T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\91[p,I]V1.T1 â\9e¡[h,0] T & â\9dªG0,L2â\9d« ⊢ ⓑ[p,I]V2.T2 ➡[h,0] T.
+ â\88\80V1. â\9d¨G0,L0â\9d© â\8a¢ V0 â\9e¡[h,0] V1 â\86\92 â\88\80T1. â\9d¨G0,L0.â\93\91[I]V0â\9d© ⊢ T0 ➡[h,0] T1 →
+ â\88\80V2. â\9d¨G0,L0â\9d© â\8a¢ V0 â\9e¡[h,0] V2 â\86\92 â\88\80T2. â\9d¨G0,L0.â\93\91[I]V0â\9d© ⊢ T0 ➡[h,0] T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ â\93\91[p,I]V1.T1 â\9e¡[h,0] T & â\9d¨G0,L2â\9d© ⊢ ⓑ[p,I]V2.T2 ➡[h,0] T.
#h #p #I #G0 #L0 #V0 #T0 #IH #V1 #HV01 #T1 #HT01
#V2 #HV02 #T2 #HT02 #L1 #HL01 #L2 #HL02
elim (IH … HV01 … HV02 … HL01 … HL02) //
fact cpr_conf_lpr_bind_zeta (h):
∀G0,L0,V0,T0. (
- â\88\80G,L,T. â\9dªG0,L0,+â\93\93V0.T0â\9d« â¬\82+ â\9dªG,L,Tâ\9d« → IH_cpr_conf_lpr h G L T
+ â\88\80G,L,T. â\9d¨G0,L0,+â\93\93V0.T0â\9d© â¬\82+ â\9d¨G,L,Tâ\9d© → IH_cpr_conf_lpr h G L T
) →
- â\88\80V1. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h,0] V1 â\86\92 â\88\80T1. â\9dªG0,L0.â\93\93V0â\9d« ⊢ T0 ➡[h,0] T1 →
- â\88\80T2. â\87§[1]T2 â\89\98 T0 â\86\92 â\88\80X2. â\9dªG0,L0â\9d« ⊢ T2 ➡[h,0] X2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ +â\93\93V1.T1 â\9e¡[h,0] T & â\9dªG0,L2â\9d« ⊢ X2 ➡[h,0] T.
+ â\88\80V1. â\9d¨G0,L0â\9d© â\8a¢ V0 â\9e¡[h,0] V1 â\86\92 â\88\80T1. â\9d¨G0,L0.â\93\93V0â\9d© ⊢ T0 ➡[h,0] T1 →
+ â\88\80T2. â\87§[1]T2 â\89\98 T0 â\86\92 â\88\80X2. â\9d¨G0,L0â\9d© ⊢ T2 ➡[h,0] X2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ +â\93\93V1.T1 â\9e¡[h,0] T & â\9d¨G0,L2â\9d© ⊢ X2 ➡[h,0] T.
#h #G0 #L0 #V0 #T0 #IH #V1 #HV01 #T1 #HT01
#T2 #HT20 #X2 #HTX2 #L1 #HL01 #L2 #HL02
elim (cpm_inv_lifts_sn … HT01 (Ⓣ) … L0 … HT20) -HT01 [| /3 width=1 by drops_refl, drops_drop/ ] #T #HT1 #HT2
fact cpr_conf_lpr_zeta_zeta (h):
∀G0,L0,V0,T0. (
- â\88\80G,L,T. â\9dªG0,L0,+â\93\93V0.T0â\9d« â¬\82+ â\9dªG,L,Tâ\9d« → IH_cpr_conf_lpr h G L T
+ â\88\80G,L,T. â\9d¨G0,L0,+â\93\93V0.T0â\9d© â¬\82+ â\9d¨G,L,Tâ\9d© → IH_cpr_conf_lpr h G L T
) →
- â\88\80T1. â\87§[1] T1 â\89\98 T0 â\86\92 â\88\80X1. â\9dªG0,L0â\9d« ⊢ T1 ➡[h,0] X1 →
- â\88\80T2. â\87§[1] T2 â\89\98 T0 â\86\92 â\88\80X2. â\9dªG0,L0â\9d« ⊢ T2 ➡[h,0] X2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ X1 â\9e¡[h,0] T & â\9dªG0,L2â\9d« ⊢ X2 ➡[h,0] T.
+ â\88\80T1. â\87§[1] T1 â\89\98 T0 â\86\92 â\88\80X1. â\9d¨G0,L0â\9d© ⊢ T1 ➡[h,0] X1 →
+ â\88\80T2. â\87§[1] T2 â\89\98 T0 â\86\92 â\88\80X2. â\9d¨G0,L0â\9d© ⊢ T2 ➡[h,0] X2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ X1 â\9e¡[h,0] T & â\9d¨G0,L2â\9d© ⊢ X2 ➡[h,0] T.
#h #G0 #L0 #V0 #T0 #IH #T1 #HT10 #X1 #HTX1
#T2 #HT20 #X2 #HTX2 #L1 #HL01 #L2 #HL02
lapply (lifts_inj … HT20 … HT10) -HT20 #H destruct
fact cpr_conf_lpr_flat_flat (h):
∀I,G0,L0,V0,T0. (
- â\88\80G,L,T. â\9dªG0,L0,â\93\95[I]V0.T0â\9d« â¬\82+ â\9dªG,L,Tâ\9d« → IH_cpr_conf_lpr h G L T
+ â\88\80G,L,T. â\9d¨G0,L0,â\93\95[I]V0.T0â\9d© â¬\82+ â\9d¨G,L,Tâ\9d© → IH_cpr_conf_lpr h G L T
) →
- â\88\80V1. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h,0] V1 â\86\92 â\88\80T1. â\9dªG0,L0â\9d« ⊢ T0 ➡[h,0] T1 →
- â\88\80V2. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h,0] V2 â\86\92 â\88\80T2. â\9dªG0,L0â\9d« ⊢ T0 ➡[h,0] T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\95[I]V1.T1 â\9e¡[h,0] T & â\9dªG0,L2â\9d« ⊢ ⓕ[I]V2.T2 ➡[h,0] T.
+ â\88\80V1. â\9d¨G0,L0â\9d© â\8a¢ V0 â\9e¡[h,0] V1 â\86\92 â\88\80T1. â\9d¨G0,L0â\9d© ⊢ T0 ➡[h,0] T1 →
+ â\88\80V2. â\9d¨G0,L0â\9d© â\8a¢ V0 â\9e¡[h,0] V2 â\86\92 â\88\80T2. â\9d¨G0,L0â\9d© ⊢ T0 ➡[h,0] T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ â\93\95[I]V1.T1 â\9e¡[h,0] T & â\9d¨G0,L2â\9d© ⊢ ⓕ[I]V2.T2 ➡[h,0] T.
#h #I #G0 #L0 #V0 #T0 #IH #V1 #HV01 #T1 #HT01
#V2 #HV02 #T2 #HT02 #L1 #HL01 #L2 #HL02
elim (IH … HV01 … HV02 … HL01 … HL02) //
fact cpr_conf_lpr_flat_eps (h):
∀G0,L0,V0,T0. (
- â\88\80G,L,T. â\9dªG0,L0,â\93\9dV0.T0â\9d« â¬\82+ â\9dªG,L,Tâ\9d« → IH_cpr_conf_lpr h G L T
+ â\88\80G,L,T. â\9d¨G0,L0,â\93\9dV0.T0â\9d© â¬\82+ â\9d¨G,L,Tâ\9d© → IH_cpr_conf_lpr h G L T
) →
- â\88\80V1,T1. â\9dªG0,L0â\9d« â\8a¢ T0 â\9e¡[h,0] T1 â\86\92 â\88\80T2. â\9dªG0,L0â\9d« ⊢ T0 ➡[h,0] T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\9dV1.T1 â\9e¡[h,0] T & â\9dªG0,L2â\9d« ⊢ T2 ➡[h,0] T.
+ â\88\80V1,T1. â\9d¨G0,L0â\9d© â\8a¢ T0 â\9e¡[h,0] T1 â\86\92 â\88\80T2. â\9d¨G0,L0â\9d© ⊢ T0 ➡[h,0] T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ â\93\9dV1.T1 â\9e¡[h,0] T & â\9d¨G0,L2â\9d© ⊢ T2 ➡[h,0] T.
#h #G0 #L0 #V0 #T0 #IH #V1 #T1 #HT01
#T2 #HT02 #L1 #HL01 #L2 #HL02
elim (IH … HT01 … HT02 … HL01 … HL02) // -L0 -V0 -T0
fact cpr_conf_lpr_eps_eps (h):
∀G0,L0,V0,T0. (
- â\88\80G,L,T. â\9dªG0,L0,â\93\9dV0.T0â\9d« â¬\82+ â\9dªG,L,Tâ\9d« → IH_cpr_conf_lpr h G L T
+ â\88\80G,L,T. â\9d¨G0,L0,â\93\9dV0.T0â\9d© â¬\82+ â\9d¨G,L,Tâ\9d© → IH_cpr_conf_lpr h G L T
) →
- â\88\80T1. â\9dªG0,L0â\9d« â\8a¢ T0 â\9e¡[h,0] T1 â\86\92 â\88\80T2. â\9dªG0,L0â\9d« ⊢ T0 ➡[h,0] T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡[h,0] T & â\9dªG0,L2â\9d« ⊢ T2 ➡[h,0] T.
+ â\88\80T1. â\9d¨G0,L0â\9d© â\8a¢ T0 â\9e¡[h,0] T1 â\86\92 â\88\80T2. â\9d¨G0,L0â\9d© ⊢ T0 ➡[h,0] T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ T1 â\9e¡[h,0] T & â\9d¨G0,L2â\9d© ⊢ T2 ➡[h,0] T.
#h #G0 #L0 #V0 #T0 #IH #T1 #HT01
#T2 #HT02 #L1 #HL01 #L2 #HL02
elim (IH … HT01 … HT02 … HL01 … HL02) // -L0 -V0 -T0
fact cpr_conf_lpr_flat_beta (h):
∀p,G0,L0,V0,W0,T0. (
- â\88\80G,L,T. â\9dªG0,L0,â\93\90V0.â\93\9b[p]W0.T0â\9d« â¬\82+ â\9dªG,L,Tâ\9d« → IH_cpr_conf_lpr h G L T
+ â\88\80G,L,T. â\9d¨G0,L0,â\93\90V0.â\93\9b[p]W0.T0â\9d© â¬\82+ â\9d¨G,L,Tâ\9d© → IH_cpr_conf_lpr h G L T
) →
- â\88\80V1. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h,0] V1 â\86\92 â\88\80T1. â\9dªG0,L0â\9d« ⊢ ⓛ[p]W0.T0 ➡[h,0] T1 →
- â\88\80V2. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h,0] V2 â\86\92 â\88\80W2. â\9dªG0,L0â\9d« â\8a¢ W0 â\9e¡[h,0] W2 â\86\92 â\88\80T2. â\9dªG0,L0.â\93\9bW0â\9d« ⊢ T0 ➡[h,0] T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\90V1.T1 â\9e¡[h,0] T & â\9dªG0,L2â\9d« ⊢ ⓓ[p]ⓝW2.V2.T2 ➡[h,0] T.
+ â\88\80V1. â\9d¨G0,L0â\9d© â\8a¢ V0 â\9e¡[h,0] V1 â\86\92 â\88\80T1. â\9d¨G0,L0â\9d© ⊢ ⓛ[p]W0.T0 ➡[h,0] T1 →
+ â\88\80V2. â\9d¨G0,L0â\9d© â\8a¢ V0 â\9e¡[h,0] V2 â\86\92 â\88\80W2. â\9d¨G0,L0â\9d© â\8a¢ W0 â\9e¡[h,0] W2 â\86\92 â\88\80T2. â\9d¨G0,L0.â\93\9bW0â\9d© ⊢ T0 ➡[h,0] T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ â\93\90V1.T1 â\9e¡[h,0] T & â\9d¨G0,L2â\9d© ⊢ ⓓ[p]ⓝW2.V2.T2 ➡[h,0] T.
#h #p #G0 #L0 #V0 #W0 #T0 #IH #V1 #HV01 #X #H
#V2 #HV02 #W2 #HW02 #T2 #HT02 #L1 #HL01 #L2 #HL02
elim (cpm_inv_abst1 … H) -H #W1 #T1 #HW01 #HT01 #H destruct
*)
fact cpr_conf_lpr_flat_theta (h):
∀p,G0,L0,V0,W0,T0. (
- â\88\80G,L,T. â\9dªG0,L0,â\93\90V0.â\93\93[p]W0.T0â\9d« â¬\82+ â\9dªG,L,Tâ\9d« → IH_cpr_conf_lpr h G L T
+ â\88\80G,L,T. â\9d¨G0,L0,â\93\90V0.â\93\93[p]W0.T0â\9d© â¬\82+ â\9d¨G,L,Tâ\9d© → IH_cpr_conf_lpr h G L T
) →
- â\88\80V1. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h,0] V1 â\86\92 â\88\80T1. â\9dªG0,L0â\9d« ⊢ ⓓ[p]W0.T0 ➡[h,0] T1 →
- â\88\80V2. â\9dªG0,L0â\9d« ⊢ V0 ➡[h,0] V2 → ∀U2. ⇧[1] V2 ≘ U2 →
- â\88\80W2. â\9dªG0,L0â\9d« â\8a¢ W0 â\9e¡[h,0] W2 â\86\92 â\88\80T2. â\9dªG0,L0.â\93\93W0â\9d« ⊢ T0 ➡[h,0] T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\90V1.T1 â\9e¡[h,0] T & â\9dªG0,L2â\9d« ⊢ ⓓ[p]W2.ⓐU2.T2 ➡[h,0] T.
+ â\88\80V1. â\9d¨G0,L0â\9d© â\8a¢ V0 â\9e¡[h,0] V1 â\86\92 â\88\80T1. â\9d¨G0,L0â\9d© ⊢ ⓓ[p]W0.T0 ➡[h,0] T1 →
+ â\88\80V2. â\9d¨G0,L0â\9d© ⊢ V0 ➡[h,0] V2 → ∀U2. ⇧[1] V2 ≘ U2 →
+ â\88\80W2. â\9d¨G0,L0â\9d© â\8a¢ W0 â\9e¡[h,0] W2 â\86\92 â\88\80T2. â\9d¨G0,L0.â\93\93W0â\9d© ⊢ T0 ➡[h,0] T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ â\93\90V1.T1 â\9e¡[h,0] T & â\9d¨G0,L2â\9d© ⊢ ⓓ[p]W2.ⓐU2.T2 ➡[h,0] T.
#h #p #G0 #L0 #V0 #W0 #T0 #IH #V1 #HV01 #X #H
#V2 #HV02 #U2 #HVU2 #W2 #HW02 #T2 #HT02 #L1 #HL01 #L2 #HL02
elim (IH … HV01 … HV02 … HL01 … HL02) -HV01 -HV02 /2 width=1 by/ #V #HV1 #HV2
fact cpr_conf_lpr_beta_beta (h):
∀p,G0,L0,V0,W0,T0. (
- â\88\80G,L,T. â\9dªG0,L0,â\93\90V0.â\93\9b[p]W0.T0â\9d« â¬\82+ â\9dªG,L,Tâ\9d« → IH_cpr_conf_lpr h G L T
+ â\88\80G,L,T. â\9d¨G0,L0,â\93\90V0.â\93\9b[p]W0.T0â\9d© â¬\82+ â\9d¨G,L,Tâ\9d© → IH_cpr_conf_lpr h G L T
) →
- â\88\80V1. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h,0] V1 â\86\92 â\88\80W1. â\9dªG0,L0â\9d« â\8a¢ W0 â\9e¡[h,0] W1 â\86\92 â\88\80T1. â\9dªG0,L0.â\93\9bW0â\9d« ⊢ T0 ➡[h,0] T1 →
- â\88\80V2. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h,0] V2 â\86\92 â\88\80W2. â\9dªG0,L0â\9d« â\8a¢ W0 â\9e¡[h,0] W2 â\86\92 â\88\80T2. â\9dªG0,L0.â\93\9bW0â\9d« ⊢ T0 ➡[h,0] T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\93[p]â\93\9dW1.V1.T1 â\9e¡[h,0] T & â\9dªG0,L2â\9d« ⊢ ⓓ[p]ⓝW2.V2.T2 ➡[h,0] T.
+ â\88\80V1. â\9d¨G0,L0â\9d© â\8a¢ V0 â\9e¡[h,0] V1 â\86\92 â\88\80W1. â\9d¨G0,L0â\9d© â\8a¢ W0 â\9e¡[h,0] W1 â\86\92 â\88\80T1. â\9d¨G0,L0.â\93\9bW0â\9d© ⊢ T0 ➡[h,0] T1 →
+ â\88\80V2. â\9d¨G0,L0â\9d© â\8a¢ V0 â\9e¡[h,0] V2 â\86\92 â\88\80W2. â\9d¨G0,L0â\9d© â\8a¢ W0 â\9e¡[h,0] W2 â\86\92 â\88\80T2. â\9d¨G0,L0.â\93\9bW0â\9d© ⊢ T0 ➡[h,0] T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ â\93\93[p]â\93\9dW1.V1.T1 â\9e¡[h,0] T & â\9d¨G0,L2â\9d© ⊢ ⓓ[p]ⓝW2.V2.T2 ➡[h,0] T.
#h #p #G0 #L0 #V0 #W0 #T0 #IH #V1 #HV01 #W1 #HW01 #T1 #HT01
#V2 #HV02 #W2 #HW02 #T2 #HT02 #L1 #HL01 #L2 #HL02
elim (IH … HV01 … HV02 … HL01 … HL02) -HV01 -HV02 /2 width=1 by/ #V #HV1 #HV2
(* Basic_1: was: pr0_upsilon_upsilon *)
fact cpr_conf_lpr_theta_theta (h):
∀p,G0,L0,V0,W0,T0. (
- â\88\80G,L,T. â\9dªG0,L0,â\93\90V0.â\93\93[p]W0.T0â\9d« â¬\82+ â\9dªG,L,Tâ\9d« → IH_cpr_conf_lpr h G L T
+ â\88\80G,L,T. â\9d¨G0,L0,â\93\90V0.â\93\93[p]W0.T0â\9d© â¬\82+ â\9d¨G,L,Tâ\9d© → IH_cpr_conf_lpr h G L T
) →
- â\88\80V1. â\9dªG0,L0â\9d« ⊢ V0 ➡[h,0] V1 → ∀U1. ⇧[1] V1 ≘ U1 →
- â\88\80W1. â\9dªG0,L0â\9d« â\8a¢ W0 â\9e¡[h,0] W1 â\86\92 â\88\80T1. â\9dªG0,L0.â\93\93W0â\9d« ⊢ T0 ➡[h,0] T1 →
- â\88\80V2. â\9dªG0,L0â\9d« ⊢ V0 ➡[h,0] V2 → ∀U2. ⇧[1] V2 ≘ U2 →
- â\88\80W2. â\9dªG0,L0â\9d« â\8a¢ W0 â\9e¡[h,0] W2 â\86\92 â\88\80T2. â\9dªG0,L0.â\93\93W0â\9d« ⊢ T0 ➡[h,0] T2 →
- â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h,0] L2 →
- â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\93[p]W1.â\93\90U1.T1 â\9e¡[h,0] T & â\9dªG0,L2â\9d« ⊢ ⓓ[p]W2.ⓐU2.T2 ➡[h,0] T.
+ â\88\80V1. â\9d¨G0,L0â\9d© ⊢ V0 ➡[h,0] V1 → ∀U1. ⇧[1] V1 ≘ U1 →
+ â\88\80W1. â\9d¨G0,L0â\9d© â\8a¢ W0 â\9e¡[h,0] W1 â\86\92 â\88\80T1. â\9d¨G0,L0.â\93\93W0â\9d© ⊢ T0 ➡[h,0] T1 →
+ â\88\80V2. â\9d¨G0,L0â\9d© ⊢ V0 ➡[h,0] V2 → ∀U2. ⇧[1] V2 ≘ U2 →
+ â\88\80W2. â\9d¨G0,L0â\9d© â\8a¢ W0 â\9e¡[h,0] W2 â\86\92 â\88\80T2. â\9d¨G0,L0.â\93\93W0â\9d© ⊢ T0 ➡[h,0] T2 →
+ â\88\80L1. â\9d¨G0,L0â\9d© â\8a¢ â\9e¡[h,0] L1 â\86\92 â\88\80L2. â\9d¨G0,L0â\9d© ⊢ ➡[h,0] L2 →
+ â\88\83â\88\83T. â\9d¨G0,L1â\9d© â\8a¢ â\93\93[p]W1.â\93\90U1.T1 â\9e¡[h,0] T & â\9d¨G0,L2â\9d© ⊢ ⓓ[p]W2.ⓐU2.T2 ➡[h,0] T.
#h #p #G0 #L0 #V0 #W0 #T0 #IH #V1 #HV01 #U1 #HVU1 #W1 #HW01 #T1 #HT01
#V2 #HV02 #U2 #HVU2 #W2 #HW02 #T2 #HT02 #L1 #HL01 #L2 #HL02
elim (IH … HV01 … HV02 … HL01 … HL02) -HV01 -HV02 /2 width=1 by/ #V #HV1 #HV2
(* Properties with context-sensitive parallel reduction for terms ***********)
-lemma lpr_cpr_conf_dx (h) (G): â\88\80L0. â\88\80T0,T1:term. â\9dªG,L0â\9d« â\8a¢ T0 â\9e¡[h,0] T1 â\86\92 â\88\80L1. â\9dªG,L0â\9d« ⊢ ➡[h,0] L1 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T0 â\9e¡[h,0] T & â\9dªG,L1â\9d« ⊢ T1 ➡[h,0] T.
+lemma lpr_cpr_conf_dx (h) (G): â\88\80L0. â\88\80T0,T1:term. â\9d¨G,L0â\9d© â\8a¢ T0 â\9e¡[h,0] T1 â\86\92 â\88\80L1. â\9d¨G,L0â\9d© ⊢ ➡[h,0] L1 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ T0 â\9e¡[h,0] T & â\9d¨G,L1â\9d© ⊢ T1 ➡[h,0] T.
#h #G #L0 #T0 #T1 #HT01 #L1 #HL01
elim (cpr_conf_lpr … HT01 T0 … HL01 … HL01) -HT01 -HL01
/2 width=3 by ex2_intro/
qed-.
-lemma lpr_cpr_conf_sn (h) (G): â\88\80L0. â\88\80T0,T1:term. â\9dªG,L0â\9d« â\8a¢ T0 â\9e¡[h,0] T1 â\86\92 â\88\80L1. â\9dªG,L0â\9d« ⊢ ➡[h,0] L1 →
- â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T0 â\9e¡[h,0] T & â\9dªG,L0â\9d« ⊢ T1 ➡[h,0] T.
+lemma lpr_cpr_conf_sn (h) (G): â\88\80L0. â\88\80T0,T1:term. â\9d¨G,L0â\9d© â\8a¢ T0 â\9e¡[h,0] T1 â\86\92 â\88\80L1. â\9d¨G,L0â\9d© ⊢ ➡[h,0] L1 →
+ â\88\83â\88\83T. â\9d¨G,L1â\9d© â\8a¢ T0 â\9e¡[h,0] T & â\9d¨G,L0â\9d© ⊢ T1 ➡[h,0] T.
#h #G #L0 #T0 #T1 #HT01 #L1 #HL01
elim (cpr_conf_lpr … HT01 T0 … L0 … HL01) -HT01 -HL01
/2 width=3 by ex2_intro/
(* Basic_2A1: was: lpr_lpx *)
lemma lpr_fwd_lpx (h) (G):
- â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈ L2.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© â\8a¢ â\9e¡[h,0] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈ L2.
/3 width=3 by cpm_fwd_cpx, lex_co/ qed-.
(* Basic properties *********************************************************)
lemma lpx_bind (G):
- â\88\80K1,K2. â\9dªG,K1â\9d« â\8a¢ â¬\88 K2 â\86\92 â\88\80I1,I2. â\9dªG,K1â\9d« ⊢ I1 ⬈ I2 →
- â\9dªG,K1.â\93\98[I1]â\9d« ⊢ ⬈ K2.ⓘ[I2].
+ â\88\80K1,K2. â\9d¨G,K1â\9d© â\8a¢ â¬\88 K2 â\86\92 â\88\80I1,I2. â\9d¨G,K1â\9d© ⊢ I1 ⬈ I2 →
+ â\9d¨G,K1.â\93\98[I1]â\9d© ⊢ ⬈ K2.ⓘ[I2].
/2 width=1 by lex_bind/ qed.
lemma lpx_refl (G): reflexive … (lpx G).
(* Advanced properties ******************************************************)
lemma lpx_bind_refl_dx (G):
- â\88\80K1,K2. â\9dªG,K1â\9d« ⊢ ⬈ K2 →
- â\88\80I. â\9dªG,K1.â\93\98[I]â\9d« ⊢ ⬈ K2.ⓘ[I].
+ â\88\80K1,K2. â\9d¨G,K1â\9d© ⊢ ⬈ K2 →
+ â\88\80I. â\9d¨G,K1.â\93\98[I]â\9d© ⊢ ⬈ K2.ⓘ[I].
/2 width=1 by lex_bind_refl_dx/ qed.
lemma lpx_pair (G):
- â\88\80K1,K2. â\9dªG,K1â\9d« â\8a¢ â¬\88 K2 â\86\92 â\88\80V1,V2. â\9dªG,K1â\9d« ⊢ V1 ⬈ V2 →
- â\88\80I.â\9dªG,K1.â\93\91[I]V1â\9d« ⊢ ⬈ K2.ⓑ[I]V2.
+ â\88\80K1,K2. â\9d¨G,K1â\9d© â\8a¢ â¬\88 K2 â\86\92 â\88\80V1,V2. â\9d¨G,K1â\9d© ⊢ V1 ⬈ V2 →
+ â\88\80I.â\9d¨G,K1.â\93\91[I]V1â\9d© ⊢ ⬈ K2.ⓑ[I]V2.
/2 width=1 by lex_pair/ qed.
(* Basic inversion lemmas ***************************************************)
(* Basic_2A1: was: lpx_inv_atom1 *)
lemma lpx_inv_atom_sn (G):
- â\88\80L2. â\9dªG,â\8b\86â\9d« ⊢ ⬈ L2 → L2 = ⋆.
+ â\88\80L2. â\9d¨G,â\8b\86â\9d© ⊢ ⬈ L2 → L2 = ⋆.
/2 width=2 by lex_inv_atom_sn/ qed-.
lemma lpx_inv_bind_sn (G):
- â\88\80I1,L2,K1. â\9dªG,K1.â\93\98[I1]â\9d« ⊢ ⬈ L2 →
- â\88\83â\88\83I2,K2. â\9dªG,K1â\9d« â\8a¢ â¬\88 K2 & â\9dªG,K1â\9d« ⊢ I1 ⬈ I2 & L2 = K2.ⓘ[I2].
+ â\88\80I1,L2,K1. â\9d¨G,K1.â\93\98[I1]â\9d© ⊢ ⬈ L2 →
+ â\88\83â\88\83I2,K2. â\9d¨G,K1â\9d© â\8a¢ â¬\88 K2 & â\9d¨G,K1â\9d© ⊢ I1 ⬈ I2 & L2 = K2.ⓘ[I2].
/2 width=1 by lex_inv_bind_sn/ qed-.
(* Basic_2A1: was: lpx_inv_atom2 *)
lemma lpx_inv_atom_dx (G):
- â\88\80L1. â\9dªG,L1â\9d« ⊢ ⬈ ⋆ → L1 = ⋆.
+ â\88\80L1. â\9d¨G,L1â\9d© ⊢ ⬈ ⋆ → L1 = ⋆.
/2 width=2 by lex_inv_atom_dx/ qed-.
lemma lpx_inv_bind_dx (G):
- â\88\80I2,L1,K2. â\9dªG,L1â\9d« ⊢ ⬈ K2.ⓘ[I2] →
- â\88\83â\88\83I1,K1. â\9dªG,K1â\9d« â\8a¢ â¬\88 K2 & â\9dªG,K1â\9d« ⊢ I1 ⬈ I2 & L1 = K1.ⓘ[I1].
+ â\88\80I2,L1,K2. â\9d¨G,L1â\9d© ⊢ ⬈ K2.ⓘ[I2] →
+ â\88\83â\88\83I1,K1. â\9d¨G,K1â\9d© â\8a¢ â¬\88 K2 & â\9d¨G,K1â\9d© ⊢ I1 ⬈ I2 & L1 = K1.ⓘ[I1].
/2 width=1 by lex_inv_bind_dx/ qed-.
(* Advanced inversion lemmas ************************************************)
lemma lpx_inv_unit_sn (G):
- â\88\80I,L2,K1. â\9dªG,K1.â\93¤[I]â\9d« ⊢ ⬈ L2 →
- â\88\83â\88\83K2. â\9dªG,K1â\9d« ⊢ ⬈ K2 & L2 = K2.ⓤ[I].
+ â\88\80I,L2,K1. â\9d¨G,K1.â\93¤[I]â\9d© ⊢ ⬈ L2 →
+ â\88\83â\88\83K2. â\9d¨G,K1â\9d© ⊢ ⬈ K2 & L2 = K2.ⓤ[I].
/2 width=1 by lex_inv_unit_sn/ qed-.
(* Basic_2A1: was: lpx_inv_pair1 *)
lemma lpx_inv_pair_sn (G):
- â\88\80I,L2,K1,V1. â\9dªG,K1.â\93\91[I]V1â\9d« ⊢ ⬈ L2 →
- â\88\83â\88\83K2,V2. â\9dªG,K1â\9d« â\8a¢ â¬\88 K2 & â\9dªG,K1â\9d« ⊢ V1 ⬈ V2 & L2 = K2.ⓑ[I]V2.
+ â\88\80I,L2,K1,V1. â\9d¨G,K1.â\93\91[I]V1â\9d© ⊢ ⬈ L2 →
+ â\88\83â\88\83K2,V2. â\9d¨G,K1â\9d© â\8a¢ â¬\88 K2 & â\9d¨G,K1â\9d© ⊢ V1 ⬈ V2 & L2 = K2.ⓑ[I]V2.
/2 width=1 by lex_inv_pair_sn/ qed-.
lemma lpx_inv_unit_dx (G):
- â\88\80I,L1,K2. â\9dªG,L1â\9d« ⊢ ⬈ K2.ⓤ[I] →
- â\88\83â\88\83K1. â\9dªG,K1â\9d« ⊢ ⬈ K2 & L1 = K1.ⓤ[I].
+ â\88\80I,L1,K2. â\9d¨G,L1â\9d© ⊢ ⬈ K2.ⓤ[I] →
+ â\88\83â\88\83K1. â\9d¨G,K1â\9d© ⊢ ⬈ K2 & L1 = K1.ⓤ[I].
/2 width=1 by lex_inv_unit_dx/ qed-.
(* Basic_2A1: was: lpx_inv_pair2 *)
lemma lpx_inv_pair_dx (G):
- â\88\80I,L1,K2,V2. â\9dªG,L1â\9d« ⊢ ⬈ K2.ⓑ[I]V2 →
- â\88\83â\88\83K1,V1. â\9dªG,K1â\9d« â\8a¢ â¬\88 K2 & â\9dªG,K1â\9d« ⊢ V1 ⬈ V2 & L1 = K1.ⓑ[I]V1.
+ â\88\80I,L1,K2,V2. â\9d¨G,L1â\9d© ⊢ ⬈ K2.ⓑ[I]V2 →
+ â\88\83â\88\83K1,V1. â\9d¨G,K1â\9d© â\8a¢ â¬\88 K2 & â\9d¨G,K1â\9d© ⊢ V1 ⬈ V2 & L1 = K1.ⓑ[I]V1.
/2 width=1 by lex_inv_pair_dx/ qed-.
lemma lpx_inv_pair (G):
- â\88\80I1,I2,L1,L2,V1,V2. â\9dªG,L1.â\93\91[I1]V1â\9d« ⊢ ⬈ L2.ⓑ[I2]V2 →
- â\88§â\88§ â\9dªG,L1â\9d« â\8a¢ â¬\88 L2 & â\9dªG,L1â\9d« ⊢ V1 ⬈ V2 & I1 = I2.
+ â\88\80I1,I2,L1,L2,V1,V2. â\9d¨G,L1.â\93\91[I1]V1â\9d© ⊢ ⬈ L2.ⓑ[I2]V2 →
+ â\88§â\88§ â\9d¨G,L1â\9d© â\8a¢ â¬\88 L2 & â\9d¨G,L1â\9d© ⊢ V1 ⬈ V2 & I1 = I2.
/2 width=1 by lex_inv_pair/ qed-.
(* Note: lemma 500 *)
(* Basic_2A1: was: cpx_lpx_aaa_conf *)
lemma cpx_aaa_conf_lpx (G) (L1):
- â\88\80T1,A. â\9dªG,L1â\9d« ⊢ T1 ⁝ A →
- â\88\80T2. â\9dªG,L1â\9d« ⊢ T1 ⬈ T2 →
- â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â¬\88 L2 â\86\92 â\9dªG,L2â\9d« ⊢ T2 ⁝ A.
+ â\88\80T1,A. â\9d¨G,L1â\9d© ⊢ T1 ⁝ A →
+ â\88\80T2. â\9d¨G,L1â\9d© ⊢ T1 ⬈ T2 →
+ â\88\80L2. â\9d¨G,L1â\9d© â\8a¢ â¬\88 L2 â\86\92 â\9d¨G,L2â\9d© ⊢ T2 ⁝ A.
#G #L1 #T1 #A #H elim H -G -L1 -T1 -A
[ #G #L1 #s1 #X #H
elim (cpx_inv_sort1 … H) -H #s2 #H destruct //
(* Properties with extended structural successor for closures ***************)
lemma lpx_fqu_trans (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
- â\88\80K1. â\9dªG1,K1â\9d« ⊢ ⬈ L1 →
- â\88\83â\88\83K2,T. â\9dªG1,K1â\9d« â\8a¢ T1 â¬\88 T & â\9dªG1,K1,Tâ\9d« â¬\82[b] â\9dªG2,K2,T2â\9d« & â\9dªG2,K2â\9d« ⊢ ⬈ L2.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80K1. â\9d¨G1,K1â\9d© ⊢ ⬈ L1 →
+ â\88\83â\88\83K2,T. â\9d¨G1,K1â\9d© â\8a¢ T1 â¬\88 T & â\9d¨G1,K1,Tâ\9d© â¬\82[b] â\9d¨G2,K2,T2â\9d© & â\9d¨G2,K2â\9d© ⊢ ⬈ L2.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ #I #G #K #V #K1 #H
elim (lpx_inv_pair_dx … H) -H #K0 #V0 #HK0 #HV0 #H destruct
qed-.
lemma fqu_lpx_trans (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
- â\88\80K2. â\9dªG2,L2â\9d« ⊢ ⬈ K2 →
- â\88\83â\88\83K1,T. â\9dªG1,L1â\9d« â\8a¢ â¬\88 K1 & â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88 T & â\9dªG1,K1,Tâ\9d« â¬\82[b] â\9dªG2,K2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80K2. â\9d¨G2,L2â\9d© ⊢ ⬈ K2 →
+ â\88\83â\88\83K1,T. â\9d¨G1,L1â\9d© â\8a¢ â¬\88 K1 & â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88 T & â\9d¨G1,K1,Tâ\9d© â¬\82[b] â\9d¨G2,K2,T2â\9d©.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ /3 width=5 by lpx_bind_refl_dx, fqu_lref_O, ex3_2_intro/
| /3 width=5 by cpx_pair_sn, fqu_pair_sn, ex3_2_intro/
(* Properties with extended optional structural successor for closures ******)
lemma lpx_fquq_trans (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d« →
- â\88\80K1. â\9dªG1,K1â\9d« ⊢ ⬈ L1 →
- â\88\83â\88\83K2,T. â\9dªG1,K1â\9d« â\8a¢ T1 â¬\88 T & â\9dªG1,K1,Tâ\9d« â¬\82⸮[b] â\9dªG2,K2,T2â\9d« & â\9dªG2,K2â\9d« ⊢ ⬈ L2.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80K1. â\9d¨G1,K1â\9d© ⊢ ⬈ L1 →
+ â\88\83â\88\83K2,T. â\9d¨G1,K1â\9d© â\8a¢ T1 â¬\88 T & â\9d¨G1,K1,Tâ\9d© â¬\82⸮[b] â\9d¨G2,K2,T2â\9d© & â\9d¨G2,K2â\9d© ⊢ ⬈ L2.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H #K1 #HKL1 cases H -H
[ #H12 elim (lpx_fqu_trans … H12 … HKL1) -L1 /3 width=5 by fqu_fquq, ex3_2_intro/
| * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
qed-.
lemma fquq_lpx_trans (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d« →
- â\88\80K2. â\9dªG2,L2â\9d« ⊢ ⬈ K2 →
- â\88\83â\88\83K1,T. â\9dªG1,L1â\9d« â\8a¢ â¬\88 K1 & â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88 T & â\9dªG1,K1,Tâ\9d« â¬\82⸮[b] â\9dªG2,K2,T2â\9d«.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\80K2. â\9d¨G2,L2â\9d© ⊢ ⬈ K2 →
+ â\88\83â\88\83K1,T. â\9d¨G1,L1â\9d© â\8a¢ â¬\88 K1 & â\9d¨G1,L1â\9d© â\8a¢ T1 â¬\88 T & â\9d¨G1,K1,Tâ\9d© â¬\82⸮[b] â\9d¨G2,K2,T2â\9d©.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H #K2 #HLK2 cases H -H
[ #H12 elim (fqu_lpx_trans … H12 … HLK2) /3 width=5 by fqu_fquq, ex3_2_intro/
| * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
(* Basic_2A1: uses: lpx_cpx_frees_trans *)
lemma lpx_cpx_conf_fsge (G):
- â\88\80L0,T0,T1. â\9dªG,L0â\9d« ⊢ T0 ⬈ T1 →
- â\88\80L2. â\9dªG,L0â\9d« â\8a¢ â¬\88 L2 â\86\92 â\9dªL2,T1â\9d« â\8a\86 â\9dªL0,T0â\9d«.
+ â\88\80L0,T0,T1. â\9d¨G,L0â\9d© ⊢ T0 ⬈ T1 →
+ â\88\80L2. â\9d¨G,L0â\9d© â\8a¢ â¬\88 L2 â\86\92 â\9d¨L2,T1â\9d© â\8a\86 â\9d¨L0,T0â\9d©.
/3 width=4 by rpx_cpx_conf_fsge, lpx_rpx/ qed-.
(* Basic_2A1: uses: lpx_frees_trans *)
lemma lpx_fsge_comp (G):
- â\88\80L0,L2,T0. â\9dªG,L0â\9d« â\8a¢ â¬\88 L2 â\86\92 â\9dªL2,T0â\9d« â\8a\86 â\9dªL0,T0â\9d«.
+ â\88\80L0,L2,T0. â\9d¨G,L0â\9d© â\8a¢ â¬\88 L2 â\86\92 â\9d¨L2,T0â\9d© â\8a\86 â\9d¨L0,T0â\9d©.
/2 width=4 by lpx_cpx_conf_fsge/ qed-.
(* Forward lemmas with length for local environments ************************)
lemma lpx_fwd_length (G):
- â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈ L2 → |L1| = |L2|.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ⬈ L2 → |L1| = |L2|.
/2 width=2 by lex_fwd_length/ qed-.
lemma reqg_lpx_trans_rpx (S) (G) (L) (T:term):
reflexive … S → symmetric … S →
- â\88\80L1. L1 â\89\9b[S,T] L â\86\92 â\88\80L2. â\9dªG,Lâ\9d« â\8a¢ â¬\88 L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[T] L2.
+ â\88\80L1. L1 â\89\9b[S,T] L â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© â\8a¢ â¬\88 L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈[T] L2.
/3 width=6 by lpx_rpx, reqg_rpx_trans/ qed.
(* Basic_2A1: uses: lleq_lpx_trans *)
lemma reqg_lpx_trans (S) (G) (T:term):
reflexive … S → symmetric … S →
- â\88\80L2,K2. â\9dªG,L2â\9d« ⊢ ⬈ K2 → ∀L1. L1 ≛[S,T] L2 →
- â\88\83â\88\83K1. â\9dªG,L1â\9d« ⊢ ⬈ K1 & K1 ≛[S,T] K2.
+ â\88\80L2,K2. â\9d¨G,L2â\9d© ⊢ ⬈ K2 → ∀L1. L1 ≛[S,T] L2 →
+ â\88\83â\88\83K1. â\9d¨G,L1â\9d© ⊢ ⬈ K1 & K1 ≛[S,T] K2.
#S #G #T #H1S #H2S #L2 #K2 #HLK2 #L1 #HL12
lapply (lpx_rpx … T … HLK2) -HLK2 #HLK2
lapply (reqg_rpx_trans … HL12 … HLK2) -L2 // #H
lemma rpx_inv_reqg_lpx (S) (G) (T):
reflexive … S →
- â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈[T] L2 →
- â\88\83â\88\83L. L1 â\89\9b[S,T] L & â\9dªG,Lâ\9d« ⊢ ⬈ L2.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ⬈[T] L2 →
+ â\88\83â\88\83L. L1 â\89\9b[S,T] L & â\9d¨G,Lâ\9d© ⊢ ⬈ L2.
#S #G #T #HS #L1 #L2 #H
elim (rpx_inv_req_lpx … H) -H #L #HL1 #HL2
/3 width=3 by req_fwd_reqg, ex2_intro/
lemma rpx_fwd_lpx_reqg (S) (G) (T):
reflexive … S →
- â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈[T] L2 →
- â\88\83â\88\83L. â\9dªG,L1â\9d« ⊢ ⬈ L & L ≛[S,T] L2.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ⬈[T] L2 →
+ â\88\83â\88\83L. â\9d¨G,L1â\9d© ⊢ ⬈ L & L ≛[S,T] L2.
#S #G #T #HS #L1 #L2 #H
elim (rpx_fwd_lpx_req … H) -H #L #HL1 #HL2
/3 width=3 by req_fwd_reqg, ex2_intro/
(* Basic properties ***********************************************************)
lemma rpx_atom (G):
- â\88\80I. â\9dªG,â\8b\86â\9d« ⊢ ⬈[⓪[I]] ⋆.
+ â\88\80I. â\9d¨G,â\8b\86â\9d© ⊢ ⬈[⓪[I]] ⋆.
/2 width=1 by rex_atom/ qed.
lemma rpx_sort (G):
∀I1,I2,L1,L2,s.
- â\9dªG,L1â\9d« â\8a¢ â¬\88[â\8b\86s] L2 â\86\92 â\9dªG,L1.â\93\98[I1]â\9d« ⊢ ⬈[⋆s] L2.ⓘ[I2].
+ â\9d¨G,L1â\9d© â\8a¢ â¬\88[â\8b\86s] L2 â\86\92 â\9d¨G,L1.â\93\98[I1]â\9d© ⊢ ⬈[⋆s] L2.ⓘ[I2].
/2 width=1 by rex_sort/ qed.
lemma rpx_pair (G):
∀I,L1,L2,V1,V2.
- â\9dªG,L1â\9d« â\8a¢ â¬\88[V1] L2 â\86\92 â\9dªG,L1â\9d« â\8a¢ V1 â¬\88 V2 â\86\92 â\9dªG,L1.â\93\91[I]V1â\9d« ⊢ ⬈[#0] L2.ⓑ[I]V2.
+ â\9d¨G,L1â\9d© â\8a¢ â¬\88[V1] L2 â\86\92 â\9d¨G,L1â\9d© â\8a¢ V1 â¬\88 V2 â\86\92 â\9d¨G,L1.â\93\91[I]V1â\9d© ⊢ ⬈[#0] L2.ⓑ[I]V2.
/2 width=1 by rex_pair/ qed.
lemma rpx_lref (G):
∀I1,I2,L1,L2,i.
- â\9dªG,L1â\9d« â\8a¢ â¬\88[#i] L2 â\86\92 â\9dªG,L1.â\93\98[I1]â\9d« ⊢ ⬈[#↑i] L2.ⓘ[I2].
+ â\9d¨G,L1â\9d© â\8a¢ â¬\88[#i] L2 â\86\92 â\9d¨G,L1.â\93\98[I1]â\9d© ⊢ ⬈[#↑i] L2.ⓘ[I2].
/2 width=1 by rex_lref/ qed.
lemma rpx_gref (G):
∀I1,I2,L1,L2,l.
- â\9dªG,L1â\9d« â\8a¢ â¬\88[§l] L2 â\86\92 â\9dªG,L1.â\93\98[I1]â\9d« ⊢ ⬈[§l] L2.ⓘ[I2].
+ â\9d¨G,L1â\9d© â\8a¢ â¬\88[§l] L2 â\86\92 â\9d¨G,L1.â\93\98[I1]â\9d© ⊢ ⬈[§l] L2.ⓘ[I2].
/2 width=1 by rex_gref/ qed.
lemma rpx_bind_repl_dx (G):
- â\88\80I,I1,L1,L2,T. â\9dªG,L1.â\93\98[I]â\9d« ⊢ ⬈[T] L2.ⓘ[I1] →
- â\88\80I2. â\9dªG,L1â\9d« â\8a¢ I â¬\88 I2 â\86\92 â\9dªG,L1.â\93\98[I]â\9d« ⊢ ⬈[T] L2.ⓘ[I2].
+ â\88\80I,I1,L1,L2,T. â\9d¨G,L1.â\93\98[I]â\9d© ⊢ ⬈[T] L2.ⓘ[I1] →
+ â\88\80I2. â\9d¨G,L1â\9d© â\8a¢ I â¬\88 I2 â\86\92 â\9d¨G,L1.â\93\98[I]â\9d© ⊢ ⬈[T] L2.ⓘ[I2].
/2 width=2 by rex_bind_repl_dx/ qed-.
(* Basic inversion lemmas ***************************************************)
lemma rpx_inv_atom_sn (G):
- â\88\80Y2,T. â\9dªG,â\8b\86â\9d« ⊢ ⬈[T] Y2 → Y2 = ⋆.
+ â\88\80Y2,T. â\9d¨G,â\8b\86â\9d© ⊢ ⬈[T] Y2 → Y2 = ⋆.
/2 width=3 by rex_inv_atom_sn/ qed-.
lemma rpx_inv_atom_dx (G):
- â\88\80Y1,T. â\9dªG,Y1â\9d« ⊢ ⬈[T] ⋆ → Y1 = ⋆.
+ â\88\80Y1,T. â\9d¨G,Y1â\9d© ⊢ ⬈[T] ⋆ → Y1 = ⋆.
/2 width=3 by rex_inv_atom_dx/ qed-.
lemma rpx_inv_sort (G):
- â\88\80Y1,Y2,s. â\9dªG,Y1â\9d« ⊢ ⬈[⋆s] Y2 →
+ â\88\80Y1,Y2,s. â\9d¨G,Y1â\9d© ⊢ ⬈[⋆s] Y2 →
∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
- | â\88\83â\88\83I1,I2,L1,L2. â\9dªG,L1â\9d« ⊢ ⬈[⋆s] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2].
+ | â\88\83â\88\83I1,I2,L1,L2. â\9d¨G,L1â\9d© ⊢ ⬈[⋆s] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2].
/2 width=1 by rex_inv_sort/ qed-.
lemma rpx_inv_lref (G):
- â\88\80Y1,Y2,i. â\9dªG,Y1â\9d« ⊢ ⬈[#↑i] Y2 →
+ â\88\80Y1,Y2,i. â\9d¨G,Y1â\9d© ⊢ ⬈[#↑i] Y2 →
∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
- | â\88\83â\88\83I1,I2,L1,L2. â\9dªG,L1â\9d« ⊢ ⬈[#i] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2].
+ | â\88\83â\88\83I1,I2,L1,L2. â\9d¨G,L1â\9d© ⊢ ⬈[#i] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2].
/2 width=1 by rex_inv_lref/ qed-.
lemma rpx_inv_gref (G):
- â\88\80Y1,Y2,l. â\9dªG,Y1â\9d« ⊢ ⬈[§l] Y2 →
+ â\88\80Y1,Y2,l. â\9d¨G,Y1â\9d© ⊢ ⬈[§l] Y2 →
∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
- | â\88\83â\88\83I1,I2,L1,L2. â\9dªG,L1â\9d« ⊢ ⬈[§l] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2].
+ | â\88\83â\88\83I1,I2,L1,L2. â\9d¨G,L1â\9d© ⊢ ⬈[§l] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2].
/2 width=1 by rex_inv_gref/ qed-.
lemma rpx_inv_bind (G):
- â\88\80p,I,L1,L2,V,T. â\9dªG,L1â\9d« ⊢ ⬈[ⓑ[p,I]V.T] L2 →
- â\88§â\88§ â\9dªG,L1â\9d« â\8a¢ â¬\88[V] L2 & â\9dªG,L1.â\93\91[I]Vâ\9d« ⊢ ⬈[T] L2.ⓑ[I]V.
+ â\88\80p,I,L1,L2,V,T. â\9d¨G,L1â\9d© ⊢ ⬈[ⓑ[p,I]V.T] L2 →
+ â\88§â\88§ â\9d¨G,L1â\9d© â\8a¢ â¬\88[V] L2 & â\9d¨G,L1.â\93\91[I]Vâ\9d© ⊢ ⬈[T] L2.ⓑ[I]V.
/2 width=2 by rex_inv_bind/ qed-.
lemma rpx_inv_flat (G):
- â\88\80I,L1,L2,V,T. â\9dªG,L1â\9d« ⊢ ⬈[ⓕ[I]V.T] L2 →
- â\88§â\88§ â\9dªG,L1â\9d« â\8a¢ â¬\88[V] L2 & â\9dªG,L1â\9d« ⊢ ⬈[T] L2.
+ â\88\80I,L1,L2,V,T. â\9d¨G,L1â\9d© ⊢ ⬈[ⓕ[I]V.T] L2 →
+ â\88§â\88§ â\9d¨G,L1â\9d© â\8a¢ â¬\88[V] L2 & â\9d¨G,L1â\9d© ⊢ ⬈[T] L2.
/2 width=2 by rex_inv_flat/ qed-.
(* Advanced inversion lemmas ************************************************)
lemma rpx_inv_sort_bind_sn (G):
- â\88\80I1,Y2,L1,s. â\9dªG,L1.â\93\98[I1]â\9d« ⊢ ⬈[⋆s] Y2 →
- â\88\83â\88\83I2,L2. â\9dªG,L1â\9d« ⊢ ⬈[⋆s] L2 & Y2 = L2.ⓘ[I2].
+ â\88\80I1,Y2,L1,s. â\9d¨G,L1.â\93\98[I1]â\9d© ⊢ ⬈[⋆s] Y2 →
+ â\88\83â\88\83I2,L2. â\9d¨G,L1â\9d© ⊢ ⬈[⋆s] L2 & Y2 = L2.ⓘ[I2].
/2 width=2 by rex_inv_sort_bind_sn/ qed-.
lemma rpx_inv_sort_bind_dx (G):
- â\88\80I2,Y1,L2,s. â\9dªG,Y1â\9d« ⊢ ⬈[⋆s] L2.ⓘ[I2] →
- â\88\83â\88\83I1,L1. â\9dªG,L1â\9d« ⊢ ⬈[⋆s] L2 & Y1 = L1.ⓘ[I1].
+ â\88\80I2,Y1,L2,s. â\9d¨G,Y1â\9d© ⊢ ⬈[⋆s] L2.ⓘ[I2] →
+ â\88\83â\88\83I1,L1. â\9d¨G,L1â\9d© ⊢ ⬈[⋆s] L2 & Y1 = L1.ⓘ[I1].
/2 width=2 by rex_inv_sort_bind_dx/ qed-.
lemma rpx_inv_zero_pair_sn (G):
- â\88\80I,Y2,L1,V1. â\9dªG,L1.â\93\91[I]V1â\9d« ⊢ ⬈[#0] Y2 →
- â\88\83â\88\83L2,V2. â\9dªG,L1â\9d« â\8a¢ â¬\88[V1] L2 & â\9dªG,L1â\9d« ⊢ V1 ⬈ V2 & Y2 = L2.ⓑ[I]V2.
+ â\88\80I,Y2,L1,V1. â\9d¨G,L1.â\93\91[I]V1â\9d© ⊢ ⬈[#0] Y2 →
+ â\88\83â\88\83L2,V2. â\9d¨G,L1â\9d© â\8a¢ â¬\88[V1] L2 & â\9d¨G,L1â\9d© ⊢ V1 ⬈ V2 & Y2 = L2.ⓑ[I]V2.
/2 width=1 by rex_inv_zero_pair_sn/ qed-.
lemma rpx_inv_zero_pair_dx (G):
- â\88\80I,Y1,L2,V2. â\9dªG,Y1â\9d« ⊢ ⬈[#0] L2.ⓑ[I]V2 →
- â\88\83â\88\83L1,V1. â\9dªG,L1â\9d« â\8a¢ â¬\88[V1] L2 & â\9dªG,L1â\9d« ⊢ V1 ⬈ V2 & Y1 = L1.ⓑ[I]V1.
+ â\88\80I,Y1,L2,V2. â\9d¨G,Y1â\9d© ⊢ ⬈[#0] L2.ⓑ[I]V2 →
+ â\88\83â\88\83L1,V1. â\9d¨G,L1â\9d© â\8a¢ â¬\88[V1] L2 & â\9d¨G,L1â\9d© ⊢ V1 ⬈ V2 & Y1 = L1.ⓑ[I]V1.
/2 width=1 by rex_inv_zero_pair_dx/ qed-.
lemma rpx_inv_lref_bind_sn (G):
- â\88\80I1,Y2,L1,i. â\9dªG,L1.â\93\98[I1]â\9d« ⊢ ⬈[#↑i] Y2 →
- â\88\83â\88\83I2,L2. â\9dªG,L1â\9d« ⊢ ⬈[#i] L2 & Y2 = L2.ⓘ[I2].
+ â\88\80I1,Y2,L1,i. â\9d¨G,L1.â\93\98[I1]â\9d© ⊢ ⬈[#↑i] Y2 →
+ â\88\83â\88\83I2,L2. â\9d¨G,L1â\9d© ⊢ ⬈[#i] L2 & Y2 = L2.ⓘ[I2].
/2 width=2 by rex_inv_lref_bind_sn/ qed-.
lemma rpx_inv_lref_bind_dx (G):
- â\88\80I2,Y1,L2,i. â\9dªG,Y1â\9d« ⊢ ⬈[#↑i] L2.ⓘ[I2] →
- â\88\83â\88\83I1,L1. â\9dªG,L1â\9d« ⊢ ⬈[#i] L2 & Y1 = L1.ⓘ[I1].
+ â\88\80I2,Y1,L2,i. â\9d¨G,Y1â\9d© ⊢ ⬈[#↑i] L2.ⓘ[I2] →
+ â\88\83â\88\83I1,L1. â\9d¨G,L1â\9d© ⊢ ⬈[#i] L2 & Y1 = L1.ⓘ[I1].
/2 width=2 by rex_inv_lref_bind_dx/ qed-.
lemma rpx_inv_gref_bind_sn (G):
- â\88\80I1,Y2,L1,l. â\9dªG,L1.â\93\98[I1]â\9d« ⊢ ⬈[§l] Y2 →
- â\88\83â\88\83I2,L2. â\9dªG,L1â\9d« ⊢ ⬈[§l] L2 & Y2 = L2.ⓘ[I2].
+ â\88\80I1,Y2,L1,l. â\9d¨G,L1.â\93\98[I1]â\9d© ⊢ ⬈[§l] Y2 →
+ â\88\83â\88\83I2,L2. â\9d¨G,L1â\9d© ⊢ ⬈[§l] L2 & Y2 = L2.ⓘ[I2].
/2 width=2 by rex_inv_gref_bind_sn/ qed-.
lemma rpx_inv_gref_bind_dx (G):
- â\88\80I2,Y1,L2,l. â\9dªG,Y1â\9d« ⊢ ⬈[§l] L2.ⓘ[I2] →
- â\88\83â\88\83I1,L1. â\9dªG,L1â\9d« ⊢ ⬈[§l] L2 & Y1 = L1.ⓘ[I1].
+ â\88\80I2,Y1,L2,l. â\9d¨G,Y1â\9d© ⊢ ⬈[§l] L2.ⓘ[I2] →
+ â\88\83â\88\83I1,L1. â\9d¨G,L1â\9d© ⊢ ⬈[§l] L2 & Y1 = L1.ⓘ[I1].
/2 width=2 by rex_inv_gref_bind_dx/ qed-.
(* Basic forward lemmas *****************************************************)
lemma rpx_fwd_pair_sn (G):
- â\88\80I,L1,L2,V,T. â\9dªG,L1â\9d« â\8a¢ â¬\88[â\91¡[I]V.T] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[V] L2.
+ â\88\80I,L1,L2,V,T. â\9d¨G,L1â\9d© â\8a¢ â¬\88[â\91¡[I]V.T] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈[V] L2.
/2 width=3 by rex_fwd_pair_sn/ qed-.
lemma rpx_fwd_bind_dx (G):
- â\88\80p,I,L1,L2,V,T. â\9dªG,L1â\9d« â\8a¢ â¬\88[â\93\91[p,I]V.T] L2 â\86\92 â\9dªG,L1.â\93\91[I]Vâ\9d« ⊢ ⬈[T] L2.ⓑ[I]V.
+ â\88\80p,I,L1,L2,V,T. â\9d¨G,L1â\9d© â\8a¢ â¬\88[â\93\91[p,I]V.T] L2 â\86\92 â\9d¨G,L1.â\93\91[I]Vâ\9d© ⊢ ⬈[T] L2.ⓑ[I]V.
/2 width=2 by rex_fwd_bind_dx/ qed-.
lemma rpx_fwd_flat_dx (G):
- â\88\80I,L1,L2,V,T. â\9dªG,L1â\9d« â\8a¢ â¬\88[â\93\95[I]V.T] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[T] L2.
+ â\88\80I,L1,L2,V,T. â\9d¨G,L1â\9d© â\8a¢ â¬\88[â\93\95[I]V.T] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈[T] L2.
/2 width=3 by rex_fwd_flat_dx/ qed-.
/2 width=5 by rex_dropable_dx/ qed-.
lemma rpx_inv_lifts_bi (G):
- â\88\80L1,L2,U. â\9dªG,L1â\9d« â\8a¢ â¬\88[U] L2 â\86\92 â\88\80b,f. ð\9d\90\94â\9dªfâ\9d« →
+ â\88\80L1,L2,U. â\9d¨G,L1â\9d© â\8a¢ â¬\88[U] L2 â\86\92 â\88\80b,f. ð\9d\90\94â\9d¨fâ\9d© →
∀K1,K2. ⇩*[b,f] L1 ≘ K1 → ⇩*[b,f] L2 ≘ K2 →
- â\88\80T. â\87§*[f]T â\89\98 U â\86\92 â\9dªG,K1â\9d« ⊢ ⬈[T] K2.
+ â\88\80T. â\87§*[f]T â\89\98 U â\86\92 â\9d¨G,K1â\9d© ⊢ ⬈[T] K2.
/2 width=10 by rex_inv_lifts_bi/ qed-.
/2 width=1 by rex_refl/ qed.
lemma rpx_pair_refl (G):
- â\88\80L,V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈ V2 →
- â\88\80I,T. â\9dªG,L.â\93\91[I]V1â\9d« ⊢ ⬈[T] L.ⓑ[I]V2.
+ â\88\80L,V1,V2. â\9d¨G,Lâ\9d© ⊢ V1 ⬈ V2 →
+ â\88\80I,T. â\9d¨G,L.â\93\91[I]V1â\9d© ⊢ ⬈[T] L.ⓑ[I]V2.
/2 width=1 by rex_pair_refl/ qed.
(* Advanced inversion lemmas ************************************************)
lemma rpx_inv_bind_void (G):
- â\88\80p,I,L1,L2,V,T. â\9dªG,L1â\9d« ⊢ ⬈[ⓑ[p,I]V.T] L2 →
- â\88§â\88§ â\9dªG,L1â\9d« â\8a¢ â¬\88[V] L2 & â\9dªG,L1.â\93§â\9d« ⊢ ⬈[T] L2.ⓧ.
+ â\88\80p,I,L1,L2,V,T. â\9d¨G,L1â\9d© ⊢ ⬈[ⓑ[p,I]V.T] L2 →
+ â\88§â\88§ â\9d¨G,L1â\9d© â\8a¢ â¬\88[V] L2 & â\9d¨G,L1.â\93§â\9d© ⊢ ⬈[T] L2.ⓧ.
/2 width=3 by rex_inv_bind_void/ qed-.
(* Advanced forward lemmas **************************************************)
lemma rpx_fwd_bind_dx_void (G):
- â\88\80p,I,L1,L2,V,T. â\9dªG,L1â\9d« â\8a¢ â¬\88[â\93\91[p,I]V.T] L2 â\86\92 â\9dªG,L1.â\93§â\9d« ⊢ ⬈[T] L2.ⓧ.
+ â\88\80p,I,L1,L2,V,T. â\9d¨G,L1â\9d© â\8a¢ â¬\88[â\93\91[p,I]V.T] L2 â\86\92 â\9d¨G,L1.â\93§â\9d© ⊢ ⬈[T] L2.ⓧ.
/2 width=4 by rex_fwd_bind_dx_void/ qed-.
(* Forward lemmas with free variables inclusion for restricted closures *****)
-(* Note: "â\9dªL2, T1â\9d« â\8a\86 â\9dªL2, T0â\9d«" does not hold *)
+(* Note: "â\9d¨L2, T1â\9d© â\8a\86 â\9d¨L2, T0â\9d©" does not hold *)
(* Note: Take L0 = K0.ⓓ(ⓝW.V), L2 = K0.ⓓW, T0 = #0, T1 = ⇧[1]V *)
(* Note: This invalidates rpxs_cpx_conf: "∀G. s_r_confluent1 … (cpx G) (rpxs G)" *)
lemma rpx_cpx_conf_fsge (G):
- â\88\80L0,T0,T1. â\9dªG,L0â\9d« ⊢ T0 ⬈ T1 →
- â\88\80L2. â\9dªG,L0â\9d« â\8a¢â¬\88[T0] L2 â\86\92 â\9dªL2,T1â\9d« â\8a\86 â\9dªL0,T0â\9d«.
+ â\88\80L0,T0,T1. â\9d¨G,L0â\9d© ⊢ T0 ⬈ T1 →
+ â\88\80L2. â\9d¨G,L0â\9d© â\8a¢â¬\88[T0] L2 â\86\92 â\9d¨L2,T1â\9d© â\8a\86 â\9d¨L0,T0â\9d©.
#G0 #L0 #T0 @(fqup_wf_ind_eq (Ⓣ) … G0 L0 T0) -G0 -L0 -T0
#G #L #T #IH #G0 #L0 * *
[ #s0 #HG #HL #HT #X #HX #Y #HY destruct -IH
/2 width=5 by cpx_rex_conf_sn/ qed-.
lemma rpx_cpx_conf_fsge_dx (G):
- â\88\80L0,T0,T1. â\9dªG,L0â\9d« ⊢ T0 ⬈ T1 →
- â\88\80L2. â\9dªG,L0â\9d« â\8a¢â¬\88[T0] L2 â\86\92 â\9dªL2,T1â\9d« â\8a\86 â\9dªL0,T1â\9d«.
+ â\88\80L0,T0,T1. â\9d¨G,L0â\9d© ⊢ T0 ⬈ T1 →
+ â\88\80L2. â\9d¨G,L0â\9d© â\8a¢â¬\88[T0] L2 â\86\92 â\9d¨L2,T1â\9d© â\8a\86 â\9d¨L0,T1â\9d©.
/3 width=5 by rpx_cpx_conf_sn, rpx_fsge_comp/ qed-.
(* Forward lemmas with length for local environments ************************)
lemma rpx_fwd_length (G):
- â\88\80L1,L2,T. â\9dªG,L1â\9d« ⊢ ⬈[T] L2 → |L1| = |L2|.
+ â\88\80L1,L2,T. â\9d¨G,L1â\9d© ⊢ ⬈[T] L2 → |L1| = |L2|.
/2 width=3 by rex_fwd_length/ qed-.
(* Inversion lemmas with length for local environments **********************)
lemma rpx_inv_zero_length (G):
- â\88\80Y1,Y2. â\9dªG,Y1â\9d« ⊢ ⬈[#0] Y2 →
+ â\88\80Y1,Y2. â\9d¨G,Y1â\9d© ⊢ ⬈[#0] Y2 →
∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
- | â\88\83â\88\83I,L1,L2,V1,V2. â\9dªG,L1â\9d« â\8a¢ â¬\88[V1] L2 & â\9dªG,L1â\9d« ⊢ V1 ⬈ V2 & Y1 = L1.ⓑ[I]V1 & Y2 = L2.ⓑ[I]V2
+ | â\88\83â\88\83I,L1,L2,V1,V2. â\9d¨G,L1â\9d© â\8a¢ â¬\88[V1] L2 & â\9d¨G,L1â\9d© ⊢ V1 ⬈ V2 & Y1 = L1.ⓑ[I]V1 & Y2 = L2.ⓑ[I]V2
| ∃∃I,L1,L2. |L1| = |L2| & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I].
/2 width=1 by rex_inv_zero_length/ qed-.
(* Properties with syntactic equivalence for referred local environments ****)
lemma req_rpx (G) (T):
- â\88\80L1,L2. L1 â\89¡[T] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[T] L2.
+ â\88\80L1,L2. L1 â\89¡[T] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈[T] L2.
/2 width=1 by req_fwd_rex/ qed.
(* Properties with extended rt-transition for full local envs ***************)
lemma lpx_rpx (G) (T):
- â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â¬\88 L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[T] L2.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© â\8a¢ â¬\88 L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈[T] L2.
/2 width=1 by rex_lex/ qed.
(* Inversion lemmas with extended rt-transition for full local envs *********)
lemma rpx_inv_req_lpx (G) (T):
- â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈[T] L2 →
- â\88\83â\88\83L. L1 â\89¡[T] L & â\9dªG,Lâ\9d« ⊢ ⬈ L2.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ⬈[T] L2 →
+ â\88\83â\88\83L. L1 â\89¡[T] L & â\9d¨G,Lâ\9d© ⊢ ⬈ L2.
/4 width=13 by cpx_reqg_conf, rex_inv_req_lex, rex_conf1_next/ qed-.
(* Forward lemmas with extended rt-transition for full local envs ***********)
lemma rpx_fwd_lpx_req (G) (T):
- â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈[T] L2 →
- â\88\83â\88\83L. â\9dªG,L1â\9d« ⊢ ⬈ L & L ≡[T] L2.
+ â\88\80L1,L2. â\9d¨G,L1â\9d© ⊢ ⬈[T] L2 →
+ â\88\83â\88\83L. â\9d¨G,L1â\9d© ⊢ ⬈ L & L ≡[T] L2.
/3 width=3 by rpx_fsge_comp, rex_fwd_lex_req/ qed-.
lemma rpx_pair_sn_split (S) (G):
reflexive … S →
- â\88\80L1,L2,V. â\9dªG,L1â\9d« ⊢ ⬈[V] L2 → ∀I,T.
- â\88\83â\88\83L. â\9dªG,L1â\9d« ⊢ ⬈[②[I]V.T] L & L ≛[S,V] L2.
+ â\88\80L1,L2,V. â\9d¨G,L1â\9d© ⊢ ⬈[V] L2 → ∀I,T.
+ â\88\83â\88\83L. â\9d¨G,L1â\9d© ⊢ ⬈[②[I]V.T] L & L ≛[S,V] L2.
/3 width=5 by rpx_fsge_comp, rex_pair_sn_split, teqg_refl/ qed-.
lemma rpx_flat_dx_split (S) (G):
reflexive … S →
- â\88\80L1,L2,T. â\9dªG,L1â\9d« ⊢ ⬈[T] L2 → ∀I,V.
- â\88\83â\88\83L. â\9dªG,L1â\9d« ⊢ ⬈[ⓕ[I]V.T] L & L ≛[S,T] L2.
+ â\88\80L1,L2,T. â\9d¨G,L1â\9d© ⊢ ⬈[T] L2 → ∀I,V.
+ â\88\83â\88\83L. â\9d¨G,L1â\9d© ⊢ ⬈[ⓕ[I]V.T] L & L ≛[S,T] L2.
/3 width=5 by rpx_fsge_comp, rex_flat_dx_split, teqg_refl/ qed-.
lemma rpx_bind_dx_split (S) (G):
reflexive … S →
- â\88\80I,L1,L2,V1,T. â\9dªG,L1.â\93\91[I]V1â\9d« ⊢ ⬈[T] L2 → ∀p.
- â\88\83â\88\83L,V. â\9dªG,L1â\9d« â\8a¢ â¬\88[â\93\91[p,I]V1.T] L & L.â\93\91[I]V â\89\9b[S,T] L2 & â\9dªG,L1â\9d« ⊢ V1 ⬈ V.
+ â\88\80I,L1,L2,V1,T. â\9d¨G,L1.â\93\91[I]V1â\9d© ⊢ ⬈[T] L2 → ∀p.
+ â\88\83â\88\83L,V. â\9d¨G,L1â\9d© â\8a¢ â¬\88[â\93\91[p,I]V1.T] L & L.â\93\91[I]V â\89\9b[S,T] L2 & â\9d¨G,L1â\9d© ⊢ V1 ⬈ V.
/3 width=5 by rpx_fsge_comp, rex_bind_dx_split, teqg_refl/ qed-.
lemma rpx_bind_dx_split_void (S) (G):
reflexive … S →
- â\88\80K1,L2,T. â\9dªG,K1.â\93§â\9d« ⊢ ⬈[T] L2 → ∀p,I,V.
- â\88\83â\88\83K2. â\9dªG,K1â\9d« ⊢ ⬈[ⓑ[p,I]V.T] K2 & K2.ⓧ ≛[S,T] L2.
+ â\88\80K1,L2,T. â\9d¨G,K1.â\93§â\9d© ⊢ ⬈[T] L2 → ∀p,I,V.
+ â\88\83â\88\83K2. â\9d¨G,K1â\9d© ⊢ ⬈[ⓑ[p,I]V.T] K2 & K2.ⓧ ≛[S,T] L2.
/3 width=5 by rpx_fsge_comp, rex_bind_dx_split_void, teqg_refl/ qed-.
lemma rpx_teqg_conf_sn (S) (G):
lemma rpx_teqg_div (S) (G):
reflexive … S → symmetric … S →
- â\88\80T1,T2. T1 â\89\9b[S] T2 â\86\92 â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â¬\88[T2] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[T1] L2.
+ â\88\80T1,T2. T1 â\89\9b[S] T2 â\86\92 â\88\80L1,L2. â\9d¨G,L1â\9d© â\8a¢ â¬\88[T2] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈[T1] L2.
/2 width=6 by teqg_rex_div/ qed-.
lemma cpx_teqg_repl_reqg (S) (G) (L0) (T0):
reflexive … S →
- â\88\80T1. â\9dªG,L0â\9d« ⊢ T0 ⬈ T1 → ∀T2. T0 ≛[S] T2 → ∀T3. T1 ≛[S] T3 →
- â\88\80L2. L0 â\89\9b[S,T0] L2 â\86\92 â\9dªG,L2â\9d« ⊢ T2 ⬈ T3.
+ â\88\80T1. â\9d¨G,L0â\9d© ⊢ T0 ⬈ T1 → ∀T2. T0 ≛[S] T2 → ∀T3. T1 ≛[S] T3 →
+ â\88\80L2. L0 â\89\9b[S,T0] L2 â\86\92 â\9d¨G,L2â\9d© ⊢ T2 ⬈ T3.
#S #G #L0 #T0 #HS #T1 #H @(cpx_ind … H) -G -L0 -T0 -T1
[ * #x0 #G #L0 #X2 #HX2 #X3 #HX3 #L2 #_
[ elim (teqg_inv_sort1 … HX2) -HX2 #x2 #Hx02 #H destruct
lemma cpx_teqg_conf (S) (G) (L):
reflexive … S →
- â\88\80T0:term. â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T0 â¬\88 T1 â\86\92 â\88\80T2. T0 â\89\9b[S] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T2 ⬈ T1.
+ â\88\80T0:term. â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T0 â¬\88 T1 â\86\92 â\88\80T2. T0 â\89\9b[S] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T2 ⬈ T1.
/3 width=9 by cpx_teqg_repl_reqg, reqg_refl, teqg_refl/ qed-.
lemma teqg_cpx_trans (S) (G) (L):
reflexive … S → symmetric … S →
- â\88\80T2. â\88\80T0:term. T2 â\89\9b[S] T0 â\86\92 â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T0 â¬\88 T1 â\86\92 â\9dªG,Lâ\9d« ⊢ T2 ⬈ T1.
+ â\88\80T2. â\88\80T0:term. T2 â\89\9b[S] T0 â\86\92 â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T0 â¬\88 T1 â\86\92 â\9d¨G,Lâ\9d© ⊢ T2 ⬈ T1.
/3 width=6 by cpx_teqg_conf, teqg_sym/
qed-.
lemma teqg_cpx (S) (G) (L):
reflexive … S → symmetric … S →
- â\88\80T1,T2:term. T1 â\89\9b[S] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈ T2.
+ â\88\80T1,T2:term. T1 â\89\9b[S] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬈ T2.
/2 width=6 by teqg_cpx_trans/ qed.
(* Basic_2A1: uses: cpx_lleq_conf *)
(* Basic_2A1: uses: lleq_cpx_trans *)
lemma reqg_cpx_trans (S) (G):
reflexive … S → symmetric … S →
- â\88\80L2,L0,T0. L2 â\89\9b[S,T0] L0 â\86\92 â\88\80T1. â\9dªG,L0â\9d« â\8a¢ T0 â¬\88 T1 â\86\92 â\9dªG,L2â\9d« ⊢ T0 ⬈ T1.
+ â\88\80L2,L0,T0. L2 â\89\9b[S,T0] L0 â\86\92 â\88\80T1. â\9d¨G,L0â\9d© â\8a¢ T0 â¬\88 T1 â\86\92 â\9d¨G,L2â\9d© ⊢ T0 ⬈ T1.
/3 width=7 by cpx_reqg_conf, reqg_sym/
qed-.
lemma reqg_rpx_trans (S) (G) (T) (L):
reflexive … S → symmetric … S →
- â\88\80L1. L1 â\89\9b[S,T] L â\86\92 â\88\80L2. â\9dªG,Lâ\9d« â\8a¢ â¬\88[T] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[T] L2.
+ â\88\80L1. L1 â\89\9b[S,T] L â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© â\8a¢ â¬\88[T] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈[T] L2.
/3 width=7 by rpx_reqg_conf, reqg_sym/ qed-.
lemma reqg_rpx (S) (G) (T):
reflexive … S → symmetric … S →
- â\88\80L1,L2. L1 â\89\9b[S,T] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[T] L2.
+ â\88\80L1,L2. L1 â\89\9b[S,T] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈[T] L2.
/2 width=6 by reqg_rpx_trans/ qed.
(* Properties with sort-irrelevant equivalence for local environments *******)
lemma rpx_pair_sn_split (G):
- â\88\80L1,L2,V. â\9dªG,L1â\9d« ⊢ ⬈[V] L2 → ∀I,T.
- â\88\83â\88\83L. â\9dªG,L1â\9d« ⊢ ⬈[②[I]V.T] L & L ≛[V] L2.
+ â\88\80L1,L2,V. â\9d¨G,L1â\9d© ⊢ ⬈[V] L2 → ∀I,T.
+ â\88\83â\88\83L. â\9d¨G,L1â\9d© ⊢ ⬈[②[I]V.T] L & L ≛[V] L2.
/3 width=5 by rpx_fsge_comp, rex_pair_sn_split/ qed-.
lemma rpx_flat_dx_split (G):
- â\88\80L1,L2,T. â\9dªG,L1â\9d« ⊢ ⬈[T] L2 → ∀I,V.
- â\88\83â\88\83L. â\9dªG,L1â\9d« ⊢ ⬈[ⓕ[I]V.T] L & L ≛[T] L2.
+ â\88\80L1,L2,T. â\9d¨G,L1â\9d© ⊢ ⬈[T] L2 → ∀I,V.
+ â\88\83â\88\83L. â\9d¨G,L1â\9d© ⊢ ⬈[ⓕ[I]V.T] L & L ≛[T] L2.
/3 width=5 by rpx_fsge_comp, rex_flat_dx_split/ qed-.
lemma rpx_bind_dx_split (G):
- â\88\80I,L1,L2,V1,T. â\9dªG,L1.â\93\91[I]V1â\9d« ⊢ ⬈[T] L2 → ∀p.
- â\88\83â\88\83L,V. â\9dªG,L1â\9d« â\8a¢ â¬\88[â\93\91[p,I]V1.T] L & L.â\93\91[I]V â\89\9b[T] L2 & â\9dªG,L1â\9d« ⊢ V1 ⬈ V.
+ â\88\80I,L1,L2,V1,T. â\9d¨G,L1.â\93\91[I]V1â\9d© ⊢ ⬈[T] L2 → ∀p.
+ â\88\83â\88\83L,V. â\9d¨G,L1â\9d© â\8a¢ â¬\88[â\93\91[p,I]V1.T] L & L.â\93\91[I]V â\89\9b[T] L2 & â\9d¨G,L1â\9d© ⊢ V1 ⬈ V.
/3 width=5 by rpx_fsge_comp, rex_bind_dx_split/ qed-.
lemma rpx_bind_dx_split_void (G):
- â\88\80K1,L2,T. â\9dªG,K1.â\93§â\9d« ⊢ ⬈[T] L2 → ∀p,I,V.
- â\88\83â\88\83K2. â\9dªG,K1â\9d« ⊢ ⬈[ⓑ[p,I]V.T] K2 & K2.ⓧ ≛[T] L2.
+ â\88\80K1,L2,T. â\9d¨G,K1.â\93§â\9d© ⊢ ⬈[T] L2 → ∀p,I,V.
+ â\88\83â\88\83K2. â\9d¨G,K1â\9d© ⊢ ⬈[ⓑ[p,I]V.T] K2 & K2.ⓧ ≛[T] L2.
/3 width=5 by rpx_fsge_comp, rex_bind_dx_split_void/ qed-.
lemma rpx_teqx_conf_sn (G): s_r_confluent1 … cdeq (rpx G).
/2 width=5 by teqx_rex_conf_sn/ qed-.
lemma rpx_teqx_div (G):
- â\88\80T1,T2. T1 â\89\9b T2 â\86\92 â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â¬\88[T2] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[T1] L2.
+ â\88\80T1,T2. T1 â\89\9b T2 â\86\92 â\88\80L1,L2. â\9d¨G,L1â\9d© â\8a¢ â¬\88[T2] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈[T1] L2.
/2 width=5 by teqx_rex_div/ qed-.
lemma cpx_teqx_repl_reqx (G) (L0) (T0):
- â\88\80T1. â\9dªG,L0â\9d« ⊢ T0 ⬈ T1 → ∀T2. T0 ≛ T2 → ∀T3. T1 ≛ T3 →
- â\88\80L2. L0 â\89\9b[T0] L2 â\86\92 â\9dªG,L2â\9d« ⊢ T2 ⬈ T3.
+ â\88\80T1. â\9d¨G,L0â\9d© ⊢ T0 ⬈ T1 → ∀T2. T0 ≛ T2 → ∀T3. T1 ≛ T3 →
+ â\88\80L2. L0 â\89\9b[T0] L2 â\86\92 â\9d¨G,L2â\9d© ⊢ T2 ⬈ T3.
#G #L0 #T0 #T1 #H @(cpx_ind … H) -G -L0 -T0 -T1
[ * #x0 #G #L0 #X2 #HX2 #X3 #HX3 #L2 #_
[ elim (teqx_inv_sort1 … HX2) -HX2 #x2 #H destruct
qed-.
lemma cpx_teqx_conf (G) (L):
- â\88\80T0:term. â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T0 â¬\88 T1 â\86\92 â\88\80T2. T0 â\89\9b T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T2 ⬈ T1.
+ â\88\80T0:term. â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T0 â¬\88 T1 â\86\92 â\88\80T2. T0 â\89\9b T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T2 ⬈ T1.
/2 width=7 by cpx_teqx_repl_reqx/ qed-.
*)
lemma teqx_cpx_trans (G) (L):
- â\88\80T2. â\88\80T0:term. T2 â\89\85 T0 â\86\92 â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T0 â¬\88 T1 â\86\92 â\9dªG,Lâ\9d« ⊢ T2 ⬈ T1.
+ â\88\80T2. â\88\80T0:term. T2 â\89\85 T0 â\86\92 â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T0 â¬\88 T1 â\86\92 â\9d¨G,Lâ\9d© ⊢ T2 ⬈ T1.
/2 width=6 by teqg_cpx_trans/ qed-.
(*
lemma teqx_cpx (G) (L):
- â\88\80T1,T2:term. T1 â\89\9b T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈ T2.
+ â\88\80T1,T2:term. T1 â\89\9b T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T1 ⬈ T2.
/2 width=3 by teqx_cpx_trans/ qed.
(* Basic_2A1: uses: cpx_lleq_conf *)
lemma cpx_reqx_conf (G):
- â\88\80L0,T0,T1. â\9dªG,L0â\9d« â\8a¢ T0 â¬\88 T1 â\86\92 â\88\80L2. L0 â\89\9b[T0] L2 â\86\92 â\9dªG,L2â\9d« ⊢ T0 ⬈ T1.
+ â\88\80L0,T0,T1. â\9d¨G,L0â\9d© â\8a¢ T0 â¬\88 T1 â\86\92 â\88\80L2. L0 â\89\9b[T0] L2 â\86\92 â\9d¨G,L2â\9d© ⊢ T0 ⬈ T1.
/2 width=7 by cpx_teqx_repl_reqx/ qed-.
(* Basic_2A1: uses: lleq_cpx_trans *)
lemma reqx_cpx_trans (G):
- â\88\80L2,L0,T0. L2 â\89\9b[T0] L0 â\86\92 â\88\80T1. â\9dªG,L0â\9d« â\8a¢ T0 â¬\88 T1 â\86\92 â\9dªG,L2â\9d« ⊢ T0 ⬈ T1.
+ â\88\80L2,L0,T0. L2 â\89\9b[T0] L0 â\86\92 â\88\80T1. â\9d¨G,L0â\9d© â\8a¢ T0 â¬\88 T1 â\86\92 â\9d¨G,L2â\9d© ⊢ T0 ⬈ T1.
/3 width=3 by cpx_reqx_conf, reqx_sym/
qed-.
/3 width=7 by reqx_fsge_comp, cpx_teqx_repl_reqx, rex_conf1/ qed-.
lemma reqx_rpx_trans (G) (T) (L):
- â\88\80L1. L1 â\89\9b[T] L â\86\92 â\88\80L2. â\9dªG,Lâ\9d« â\8a¢ â¬\88[T] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[T] L2.
+ â\88\80L1. L1 â\89\9b[T] L â\86\92 â\88\80L2. â\9d¨G,Lâ\9d© â\8a¢ â¬\88[T] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈[T] L2.
/3 width=3 by rpx_reqx_conf, reqx_sym/ qed-.
lemma reqx_rpx (G) (T):
- â\88\80L1,L2. L1 â\89\9b[T] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[T] L2.
+ â\88\80L1,L2. L1 â\89\9b[T] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈[T] L2.
/2 width=3 by reqx_rpx_trans/ qed.
*)
(* Main properties **********************************************************)
theorem rpx_bind (G):
- â\88\80L1,L2,V1. â\9dªG,L1â\9d« ⊢ ⬈[V1] L2 →
- â\88\80I,V2,T. â\9dªG,L1.â\93\91[I]V1â\9d« ⊢ ⬈[T] L2.ⓑ[I]V2 →
- â\88\80p. â\9dªG,L1â\9d« ⊢ ⬈[ⓑ[p,I]V1.T] L2.
+ â\88\80L1,L2,V1. â\9d¨G,L1â\9d© ⊢ ⬈[V1] L2 →
+ â\88\80I,V2,T. â\9d¨G,L1.â\93\91[I]V1â\9d© ⊢ ⬈[T] L2.ⓑ[I]V2 →
+ â\88\80p. â\9d¨G,L1â\9d© ⊢ ⬈[ⓑ[p,I]V1.T] L2.
/2 width=2 by rex_bind/ qed.
theorem rpx_flat (G):
- â\88\80L1,L2,V. â\9dªG,L1â\9d« ⊢ ⬈[V] L2 →
- â\88\80I,T. â\9dªG,L1â\9d« â\8a¢ â¬\88[T] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[ⓕ[I]V.T] L2.
+ â\88\80L1,L2,V. â\9d¨G,L1â\9d© ⊢ ⬈[V] L2 →
+ â\88\80I,T. â\9d¨G,L1â\9d© â\8a¢ â¬\88[T] L2 â\86\92 â\9d¨G,L1â\9d© ⊢ ⬈[ⓕ[I]V.T] L2.
/2 width=1 by rex_flat/ qed.
theorem rpx_bind_void (G):
- â\88\80L1,L2,V. â\9dªG,L1â\9d« ⊢ ⬈[V] L2 →
- â\88\80T. â\9dªG,L1.â\93§â\9d« ⊢ ⬈[T] L2.ⓧ →
- â\88\80p,I. â\9dªG,L1â\9d« ⊢ ⬈[ⓑ[p,I]V.T] L2.
+ â\88\80L1,L2,V. â\9d¨G,L1â\9d© ⊢ ⬈[V] L2 →
+ â\88\80T. â\9d¨G,L1.â\93§â\9d© ⊢ ⬈[T] L2.ⓧ →
+ â\88\80p,I. â\9d¨G,L1â\9d© ⊢ ⬈[ⓑ[p,I]V.T] L2.
/2 width=1 by rex_bind_void/ qed.
class "wine"
[ { "iterated dynamic typing" * } {
[ { "context-sensitive iterated native type assignment" * } {
- [ [ "for terms" ] "ntas" + "( â\9dª?,?â\9d« ⊢ ? :*[?,?,?] ? )" "ntas_cpcs" + "ntas_nta" + "ntas_nta_ind" + " ntas_ntas" + "ntas_preserve" * ]
+ [ [ "for terms" ] "ntas" + "( â\9d¨?,?â\9d© ⊢ ? :*[?,?,?] ? )" "ntas_cpcs" + "ntas_nta" + "ntas_nta_ind" + " ntas_ntas" + "ntas_preserve" * ]
}
]
}
class "magenta"
[ { "dynamic typing" * } {
[ { "context-sensitive native type assignment" * } {
- [ [ "for terms" ] "nta" + "( â\9dª?,?â\9d« ⊢ ? :[?,?] ? )" "nta_drops" + "nta_aaa" + "nta_fsb" + "nta_cpms" + "nta_cpcs" + "nta_preserve" + "nta_preserve_cpcs" + "nta_ind" + "nta_eval" * ]
+ [ [ "for terms" ] "nta" + "( â\9d¨?,?â\9d© ⊢ ? :[?,?] ? )" "nta_drops" + "nta_aaa" + "nta_fsb" + "nta_cpms" + "nta_cpcs" + "nta_preserve" + "nta_preserve_cpcs" + "nta_ind" + "nta_eval" * ]
}
]
[ { "context-sensitive native validity" * } {
[ [ "restricted refinement for lenvs" ] "lsubv ( ? ⊢ ? ⫃![?,?] ? )" "lsubv_drops" + "lsubv_lsubr" + "lsubv_lsuba" + "lsubv_cpms" + "lsubv_cpcs" + "lsubv_cnv" + "lsubv_lsubv" * ]
- [ [ "for terms" ] "cnv" + "( â\9dª?,?â\9d« ⊢ ? ![?,?] )" "cnv_acle" + "cnv_drops" + "cnv_fqus" + "cnv_aaa" + "cnv_fsb" + "cnv_cpm_trans" + "cnv_cpm_conf" + "cnv_cpm_teqx" + "cnv_cpm_teqx_trans" + "cnv_cpm_teqx_conf" + "cnv_cpms_teqx" + "cnv_cpms_conf" + "cnv_cpms_teqx_conf" + "cnv_cpmre" + "cnv_cpmuwe" + "cnv_cpmuwe_cpmre" + "cnv_cpts" + "cnv_cpes" + "cnv_cpcs" + "cnv_preserve_sub" + "cnv_preserve" + "cnv_preserve_cpes" + "cnv_preserve_cpcs" + "cnv_eval" * ]
+ [ [ "for terms" ] "cnv" + "( â\9d¨?,?â\9d© ⊢ ? ![?,?] )" "cnv_acle" + "cnv_drops" + "cnv_fqus" + "cnv_aaa" + "cnv_fsb" + "cnv_cpm_trans" + "cnv_cpm_conf" + "cnv_cpm_teqx" + "cnv_cpm_teqx_trans" + "cnv_cpm_teqx_conf" + "cnv_cpms_teqx" + "cnv_cpms_conf" + "cnv_cpms_teqx_conf" + "cnv_cpmre" + "cnv_cpmuwe" + "cnv_cpmuwe_cpmre" + "cnv_cpts" + "cnv_cpes" + "cnv_cpcs" + "cnv_preserve_sub" + "cnv_preserve" + "cnv_preserve_cpes" + "cnv_preserve_cpcs" + "cnv_eval" * ]
}
]
}
class "prune"
[ { "rt-equivalence" * } {
[ { "context-sensitive parallel r-equivalence" * } {
- [ [ "for terms" ] "cpcs ( â\9dª?,?â\9d« ⊢ ? ⬌*[?] ? )" "cpcs_drops" + "cpcs_lsubr" + "cpcs_aaa" + "cpcs_csx" + "cpcs_cprs" + "cpcs_lprs" + "cpcs_cpc" + "cpcs_cpcs" * ]
+ [ [ "for terms" ] "cpcs ( â\9d¨?,?â\9d© ⊢ ? ⬌*[?] ? )" "cpcs_drops" + "cpcs_lsubr" + "cpcs_aaa" + "cpcs_csx" + "cpcs_cprs" + "cpcs_lprs" + "cpcs_cpc" + "cpcs_cpcs" * ]
}
]
[ { "t-bound context-sensitive parallel rt-equivalence" * } {
- [ [ "for terms" ] "cpes ( â\9dª?,?â\9d« ⊢ ? ⬌*[?,?,?] ? )" "cpes_aaa" + "cpes_cpms" + "cpes_cpes" * ]
+ [ [ "for terms" ] "cpes ( â\9d¨?,?â\9d© ⊢ ? ⬌*[?,?,?] ? )" "cpes_aaa" + "cpes_cpms" + "cpes_cpes" * ]
}
]
}
[ { "rt-conversion" * } {
(*
[ { "context-sensitive parallel eta-conversion" * } {
- [ [ "for lenvs on all entries" ] "lpce ( â\9dª?,?â\9d« ⊢ ⬌η[?] ? )" "lpce_drops" * ]
- [ [ "for binders" ] "cpce_ext" + "( â\9dª?,?â\9d« ⊢ ? ⬌η[?] ? )" * ]
- [ [ "for terms" ] "cpce" + "( â\9dª?,?â\9d« ⊢ ? ⬌η[?] ? )" "cpce_drops" * ]
+ [ [ "for lenvs on all entries" ] "lpce ( â\9d¨?,?â\9d© ⊢ ⬌η[?] ? )" "lpce_drops" * ]
+ [ [ "for binders" ] "cpce_ext" + "( â\9d¨?,?â\9d© ⊢ ? ⬌η[?] ? )" * ]
+ [ [ "for terms" ] "cpce" + "( â\9d¨?,?â\9d© ⊢ ? ⬌η[?] ? )" "cpce_drops" * ]
}
]
*)
[ { "context-sensitive parallel r-conversion" * } {
- [ [ "for terms" ] "cpc" + "( â\9dª?,?â\9d« ⊢ ? ⬌[?] ? )" "cpc_cpc" * ]
+ [ [ "for terms" ] "cpc" + "( â\9d¨?,?â\9d© ⊢ ? ⬌[?] ? )" "cpc_cpc" * ]
}
]
}
class "sky"
[ { "rt-computation" * } {
[ { "context-sensitive parallel t-computation" * } {
- [ [ "for terms" ] "cpts" + "( â\9dª?,?â\9d« ⊢ ? ⬆*[?,?] ? )" "cpts_drops" + "cpts_aaa" + "cpts_cpms" * ]
+ [ [ "for terms" ] "cpts" + "( â\9d¨?,?â\9d© ⊢ ? ⬆*[?,?] ? )" "cpts_drops" + "cpts_aaa" + "cpts_cpms" * ]
}
]
[ { "context-sensitive parallel r-computation" * } {
[ [ "evaluation for terms" ] "cprre" "cprre_csx" + "cprre_cpms" + "cprre_cprre" * ]
- [ [ "for lenvs on all entries" ] "lprs ( â\9dª?,?â\9d« ⊢ ➡*[?,?] ? )" "lprs_tc" + "lprs_ctc" + "lprs_length" + "lprs_drops" + "lprs_aaa" + "lprs_lpr" + "lprs_lpxs" + "lprs_cpms" + "lprs_cprs" + "lprs_lprs" * ]
- [ [ "for binders" ] "cprs_ext" + "( â\9dª?,?â\9d« ⊢ ? ➡*[?,?] ?)" * ]
+ [ [ "for lenvs on all entries" ] "lprs ( â\9d¨?,?â\9d© ⊢ ➡*[?,?] ? )" "lprs_tc" + "lprs_ctc" + "lprs_length" + "lprs_drops" + "lprs_aaa" + "lprs_lpr" + "lprs_lpxs" + "lprs_cpms" + "lprs_cprs" + "lprs_lprs" * ]
+ [ [ "for binders" ] "cprs_ext" + "( â\9d¨?,?â\9d© ⊢ ? ➡*[?,?] ?)" * ]
[ [ "for terms" ] "cprs" "cprs_ctc" + "cprs_teqw" + "cprs_drops" + "cprs_cpr" + "cprs_lpr" + "cprs_cnr" + "cprs_cprs" * ]
}
]
[ { "t-bound context-sensitive parallel rt-computation" * } {
- [ [ "t-unbound whd evaluation for terms" ] "cpmuwe ( â\9dª?,?â\9d« ⊢ ? ➡*𝐍𝐖*[?,?] ? )" "cpmuwe_csx" + "cpmuwe_cpmuwe" * ]
- [ [ "t-unbound whd normal form for terms" ] "cnuw ( â\9dª?,?â\9d« ⊢ ➡𝐍𝐖*[?] ? )" "cnuw_drops" + "cnuw_simple" + "cnuw_cnuw" * ]
- [ [ "t-bpund evaluation for terms" ] "cpmre ( â\9dª?,?â\9d« ⊢ ? ➡*𝐍[?,?] ? )" "cpmre_aaa" * ]
- [ [ "for terms" ] "cpms" + "( â\9dª?,?â\9d« ⊢ ? ➡*[?,?] ? )" "cpms_drops" + "cpms_lsubr" + "cpms_reqg" + "cpms_aaa" + "cpms_lpr" + "cpms_cpxs" + "cpms_fpbs" + "cpms_fpbg" + "cpms_cpms" * ]
+ [ [ "t-unbound whd evaluation for terms" ] "cpmuwe ( â\9d¨?,?â\9d© ⊢ ? ➡*𝐍𝐖*[?,?] ? )" "cpmuwe_csx" + "cpmuwe_cpmuwe" * ]
+ [ [ "t-unbound whd normal form for terms" ] "cnuw ( â\9d¨?,?â\9d© ⊢ ➡𝐍𝐖*[?] ? )" "cnuw_drops" + "cnuw_simple" + "cnuw_cnuw" * ]
+ [ [ "t-bpund evaluation for terms" ] "cpmre ( â\9d¨?,?â\9d© ⊢ ? ➡*𝐍[?,?] ? )" "cpmre_aaa" * ]
+ [ [ "for terms" ] "cpms" + "( â\9d¨?,?â\9d© ⊢ ? ➡*[?,?] ? )" "cpms_drops" + "cpms_lsubr" + "cpms_reqg" + "cpms_aaa" + "cpms_lpr" + "cpms_cpxs" + "cpms_fpbs" + "cpms_fpbg" + "cpms_cpms" * ]
}
]
[ { "extended context-sensitive parallel rst-computation" * } {
- [ [ "strongly normalizing for closures" ] "fsb" + "( â\89¥ð\9d\90\92 â\9dª?,?,?â\9d« )" "fsb_feqg" + "fsb_aaa" + "fsb_csx" + "fsb_fpbg" * ]
- [ [ "proper for closures" ] "fpbg" + "( â\9dª?,?,?â\9d« > â\9dª?,?,?â\9d« )" "fpbg_fqup" + "fpbg_fqus" + "fpbg_feqg" + "fpbg_cpm" + "fpbg_cpxs" + "fpbg_lpxs" + "fpbg_fpbs" + "fpbg_fpbg" * ]
- [ [ "for closures" ] "fpbs" + "( â\9dª?,?,?â\9d« â\89¥ â\9dª?,?,?â\9d« )" "fpbs_fqup" + "fpbs_fqus" + "fpbs_feqg" + "fpbs_aaa" + "fpbs_cpx" + "fpbs_fpbc" + "fpbs_cpxs" + "fpbs_lpxs" + "fpbs_csx" + "fpbs_fpbs" * ]
+ [ [ "strongly normalizing for closures" ] "fsb" + "( â\89¥ð\9d\90\92 â\9d¨?,?,?â\9d© )" "fsb_feqg" + "fsb_aaa" + "fsb_csx" + "fsb_fpbg" * ]
+ [ [ "proper for closures" ] "fpbg" + "( â\9d¨?,?,?â\9d© > â\9d¨?,?,?â\9d© )" "fpbg_fqup" + "fpbg_fqus" + "fpbg_feqg" + "fpbg_cpm" + "fpbg_cpxs" + "fpbg_lpxs" + "fpbg_fpbs" + "fpbg_fpbg" * ]
+ [ [ "for closures" ] "fpbs" + "( â\9d¨?,?,?â\9d© â\89¥ â\9d¨?,?,?â\9d© )" "fpbs_fqup" + "fpbs_fqus" + "fpbs_feqg" + "fpbs_aaa" + "fpbs_cpx" + "fpbs_fpbc" + "fpbs_cpxs" + "fpbs_lpxs" + "fpbs_csx" + "fpbs_fpbs" * ]
}
]
[ { "extended context-sensitive parallel rt-computation" * } {
[ [ "compatibility for lenvs" ] "jsx" + "( ? ⊢ ? ⊒ ? )" "jsx_drops" + "jsx_lsubr" + "jsx_csx" + "jsx_rsx" + "jsx_jsx" * ]
[ [ "strongly normalizing for lenvs on referred entries" ] "rsx" + "( ? ⊢ ⬈*𝐒[?] ? )" "rsx_length" + "rsx_drops" + "rsx_fqup" + "rsx_cpxs" + "rsx_csx" + "rsx_rsx" * ]
- [ [ "strongly normalizing for term vectors" ] "csx_vector" + "( â\9dª?,?â\9d« ⊢ ⬈*𝐒 ? )" "csx_cnx_vector" + "csx_csx_vector" * ]
- [ [ "strongly normalizing for terms" ] "csx" + "( â\9dª?,?â\9d« ⊢ ⬈*𝐒 ? )" "csx_simple" + "csx_simple_teqo" + "csx_drops" + "csx_fqus" + "csx_lsubr" + "csx_reqg" + "csx_feqg" + "csx_aaa" + "csx_gcp" + "csx_gcr" + "csx_lpx" + "csx_cnx" + "csx_fpb" + "csx_cpxs" + "csx_lpxs" + "csx_csx" * ]
- [ [ "for lenvs on all entries" ] "lpxs" + "( â\9dª?,?â\9d« ⊢ ⬈* ? )" "lpxs_length" + "lpxs_drops" + "lpxs_reqg" + "lpxs_feqg" + "lpxs_aaa" + "lpxs_lpx" + "lpxs_cpxs" + "lpxs_lpxs" * ]
- [ [ "for binders" ] "cpxs_ext" + "( â\9dª?,?â\9d« ⊢ ? ⬈* ? )" * ]
- [ [ "for terms" ] "cpxs" + "( â\9dª?,?â\9d« ⊢ ? ⬈* ? )" "cpxs_teqg" + "cpxs_teqo" + "cpxs_teqo_vector" + "cpxs_drops" + "cpxs_fqus" + "cpxs_lsubr" + "cpxs_reqg" + "cpxs_feqg" + "cpxs_aaa" + "cpxs_lpx" + "cpxs_cnx" + "cpxs_cpxs" * ]
+ [ [ "strongly normalizing for term vectors" ] "csx_vector" + "( â\9d¨?,?â\9d© ⊢ ⬈*𝐒 ? )" "csx_cnx_vector" + "csx_csx_vector" * ]
+ [ [ "strongly normalizing for terms" ] "csx" + "( â\9d¨?,?â\9d© ⊢ ⬈*𝐒 ? )" "csx_simple" + "csx_simple_teqo" + "csx_drops" + "csx_fqus" + "csx_lsubr" + "csx_reqg" + "csx_feqg" + "csx_aaa" + "csx_gcp" + "csx_gcr" + "csx_lpx" + "csx_cnx" + "csx_fpb" + "csx_cpxs" + "csx_lpxs" + "csx_csx" * ]
+ [ [ "for lenvs on all entries" ] "lpxs" + "( â\9d¨?,?â\9d© ⊢ ⬈* ? )" "lpxs_length" + "lpxs_drops" + "lpxs_reqg" + "lpxs_feqg" + "lpxs_aaa" + "lpxs_lpx" + "lpxs_cpxs" + "lpxs_lpxs" * ]
+ [ [ "for binders" ] "cpxs_ext" + "( â\9d¨?,?â\9d© ⊢ ? ⬈* ? )" * ]
+ [ [ "for terms" ] "cpxs" + "( â\9d¨?,?â\9d© ⊢ ? ⬈* ? )" "cpxs_teqg" + "cpxs_teqo" + "cpxs_teqo_vector" + "cpxs_drops" + "cpxs_fqus" + "cpxs_lsubr" + "cpxs_reqg" + "cpxs_feqg" + "cpxs_aaa" + "cpxs_lpx" + "cpxs_cnx" + "cpxs_cpxs" * ]
}
]
}
class "cyan"
[ { "rt-transition" * } {
[ { "context-sensitive parallel t-transition" * } {
- [ [ "for terms" ] "cpt" + "( â\9dª?,?â\9d« ⊢ ? ⬆[?,?] ? )" "cpt_drops" + "cpt_fqu" + "cpt_cpm" * ]
+ [ [ "for terms" ] "cpt" + "( â\9d¨?,?â\9d© ⊢ ? ⬆[?,?] ? )" "cpt_drops" + "cpt_fqu" + "cpt_cpm" * ]
}
]
[ { "context-sensitive parallel r-transition" * } {
- [ [ "normal form for terms" ] "cnr ( â\9dª?,?â\9d« ⊢ ➡𝐍[?,?] ? )" "cnr_simple" + "cnr_teqg" + "cnr_teqx" + "cnr_drops" * ]
- [ [ "for lenvs on all entries" ] "lpr" + "( â\9dª?,?â\9d« ⊢ ➡[?,?] ? )" "lpr_length" + "lpr_drops" + "lpr_fquq" + "lpr_aaa" + "lpr_lpx" + "lpr_fpb" + "lpr_fpbc" + "lpr_lpr" * ]
+ [ [ "normal form for terms" ] "cnr ( â\9d¨?,?â\9d© ⊢ ➡𝐍[?,?] ? )" "cnr_simple" + "cnr_teqg" + "cnr_teqx" + "cnr_drops" * ]
+ [ [ "for lenvs on all entries" ] "lpr" + "( â\9d¨?,?â\9d© ⊢ ➡[?,?] ? )" "lpr_length" + "lpr_drops" + "lpr_fquq" + "lpr_aaa" + "lpr_lpx" + "lpr_fpb" + "lpr_fpbc" + "lpr_lpr" * ]
[ [ "for binders" ] "cpr_ext" * ]
[ [ "for terms" ] "cpr" "cpr_drops" + "cpr_drops_basic" + "cpr_teqg" + "cpr_cpr" * ]
}
]
[ { "t-bound context-sensitive parallel rt-transition" * } {
- [ [ "for terms" ] "cpm" + "( â\9dª?,?â\9d« ⊢ ? ➡[?,?] ? )" "cpm_simple" + "cpm_teqx" + "cpm_drops" + "cpm_lsubr" + "cpm_fsle" + "cpm_aaa" + "cpm_cpx" + "cpm_fpb" + "cpm_fpbc" * ]
+ [ [ "for terms" ] "cpm" + "( â\9d¨?,?â\9d© ⊢ ? ➡[?,?] ? )" "cpm_simple" + "cpm_teqx" + "cpm_drops" + "cpm_lsubr" + "cpm_fsle" + "cpm_aaa" + "cpm_cpx" + "cpm_fpb" + "cpm_fpbc" * ]
}
]
[ { "extended parallel rst-transition" * } {
- [ [ "proper for closures" ] "fpbc" + "( â\9dª?,?,?â\9d« â\89» â\9dª?,?,?â\9d« )" "fpbc_fqup" + "fpbc_feqg" + "fpbc_lpx" + "fpbc_fpb" * ]
- [ [ "for closures" ] "fpb" + "( â\9dª?,?,?â\9d« â\89½ â\9dª?,?,?â\9d« )" "fpb_fqup" + "fpb_feqg" + "fpb_aaa" + "fpb_lpx" * ]
+ [ [ "proper for closures" ] "fpbc" + "( â\9d¨?,?,?â\9d© â\89» â\9d¨?,?,?â\9d© )" "fpbc_fqup" + "fpbc_feqg" + "fpbc_lpx" + "fpbc_fpb" * ]
+ [ [ "for closures" ] "fpb" + "( â\9d¨?,?,?â\9d© â\89½ â\9d¨?,?,?â\9d© )" "fpb_fqup" + "fpb_feqg" + "fpb_aaa" + "fpb_lpx" * ]
}
]
[ { "extended context-sensitive parallel rt-transition" * } {
- [ [ "normal form for terms" ] "cnx" + "( â\9dª?,?â\9d« ⊢ ⬈𝐍 ? )" "cnx_simple" + "cnx_drops" + "cnx_basic" + "cnx_cnx" * ]
- [ [ "for lenvs on referred entries" ] "rpx" + "( â\9dª?,?â\9d« ⊢ ⬈[?] ? )" "rpx_length" + "rpx_drops" + "rpx_fqup" + "rpx_fsle" + "rpx_reqg" + "rpx_reqx" + "rpx_lpx" + "rpx_rpx" * ]
- [ [ "for lenvs on all entries" ] "lpx" + "( â\9dª?,?â\9d« ⊢ ⬈ ? )" "lpx_length" + "lpx_drops" + "lpx_fquq" + "lpx_fsle" + "lpx_reqg" + "lpx_aaa" * ]
- [ [ "for binders" ] "cpx_ext" + "( â\9dª?,?â\9d« ⊢ ? ⬈ ? )" * ]
- [ [ "for terms" ] "cpx" + "( â\9dª?,?â\9d« ⊢ ? ⬈ ? )" "cpx_simple" + "cpx_drops" + "cpx_drops_basic" + "cpx_fqus" + "cpx_lsubr" + "cpx_req" + "cpx_reqg" + "cpx_feqg" * ]
+ [ [ "normal form for terms" ] "cnx" + "( â\9d¨?,?â\9d© ⊢ ⬈𝐍 ? )" "cnx_simple" + "cnx_drops" + "cnx_basic" + "cnx_cnx" * ]
+ [ [ "for lenvs on referred entries" ] "rpx" + "( â\9d¨?,?â\9d© ⊢ ⬈[?] ? )" "rpx_length" + "rpx_drops" + "rpx_fqup" + "rpx_fsle" + "rpx_reqg" + "rpx_reqx" + "rpx_lpx" + "rpx_rpx" * ]
+ [ [ "for lenvs on all entries" ] "lpx" + "( â\9d¨?,?â\9d© ⊢ ⬈ ? )" "lpx_length" + "lpx_drops" + "lpx_fquq" + "lpx_fsle" + "lpx_reqg" + "lpx_aaa" * ]
+ [ [ "for binders" ] "cpx_ext" + "( â\9d¨?,?â\9d© ⊢ ? ⬈ ? )" * ]
+ [ [ "for terms" ] "cpx" + "( â\9d¨?,?â\9d© ⊢ ? ⬈ ? )" "cpx_simple" + "cpx_drops" + "cpx_drops_basic" + "cpx_fqus" + "cpx_lsubr" + "cpx_req" + "cpx_reqg" + "cpx_feqg" * ]
}
]
[ { "bound context-sensitive parallel rt-transition" * } {
- [ [ "for terms" ] "cpg" + "( â\9dª?,?â\9d« ⊢ ? ⬈[?,?,?] ? )" "cpg_simple" + "cpg_drops" + "cpg_lsubr" * ]
+ [ [ "for terms" ] "cpg" + "( â\9d¨?,?â\9d© ⊢ ? ⬈[?,?,?] ? )" "cpg_simple" + "cpg_drops" + "cpg_lsubr" * ]
}
]
}
[ [ "" ] "lsubn ( ? ⊢ ? :⫃ ? )" "lsubn_drop" "lsubn_cpcs" "lsubn_nta" * ]
}
]
- [ [ "" ] "shnv ( â\9dª?,?â\9d« ⊢ ? ¡[?,?,?] )" * ]
+ [ [ "" ] "shnv ( â\9d¨?,?â\9d© ⊢ ? ¡[?,?,?] )" * ]
[ { "decomposed rt-equivalence" * } {
"scpes_cpcs" + "scpes_scpes"
}
]
- [ [ "for lenvs on referred entries" ] "rpxs" + "( â\9dª?,?â\9d« ⊢ ⬈*[?,?] ? )" "rpxs_length" + "rpxs_drops" + "rpxs_fqup" + "rpxs_reqx" + "rpxs_feqx" + "rpxs_aaa" + "rpxs_cpxs" + "rpxs_lpxs" + "rpxs_rpxs" * ]
+ [ [ "for lenvs on referred entries" ] "rpxs" + "( â\9d¨?,?â\9d© ⊢ ⬈*[?,?] ? )" "rpxs_length" + "rpxs_drops" + "rpxs_fqup" + "rpxs_reqx" + "rpxs_feqx" + "rpxs_aaa" + "rpxs_cpxs" + "rpxs_lpxs" + "rpxs_rpxs" * ]
[ [ "for lenvs on referred entries" ]
- "lfpr" + "( â\9dª?,?â\9d« ⊢ ➡[?,?] ? )" "lfpr_length" + "lfpr_drops" + "lfpr_fquq" + "lfpr_fqup" + "lfpr_aaa" + "lfpr_rpx" + "lfpr_lfpr" * ]
+ "lfpr" + "( â\9d¨?,?â\9d© ⊢ ➡[?,?] ? )" "lfpr_length" + "lfpr_drops" + "lfpr_fquq" + "lfpr_fqup" + "lfpr_aaa" + "lfpr_rpx" + "lfpr_lfpr" * ]
[ { "evaluation for context-sensitive rt-reduction" * } {
- [ [ "" ] "cpxe ( â\9dª?,?â\9d« â\8a¢ â\9e¡*[?,?] ð\9d\90\8dâ\9dª?â\9d« )" * ]
+ [ [ "" ] "cpxe ( â\9d¨?,?â\9d© â\8a¢ â\9e¡*[?,?] ð\9d\90\8dâ\9d¨?â\9d© )" * ]
}
]
[ { "normal forms for context-sensitive rt-reduction" * } {
}
]
[ { "irreducible forms for context-sensitive rt-reduction" * } {
- [ [ "" ] "cix ( â\9dª?,?â\9d« â\8a¢ â\9e¡[?,?] ð\9d\90\88â\9dª?â\9d« )" "cix_lift" * ]
+ [ [ "" ] "cix ( â\9d¨?,?â\9d© â\8a¢ â\9e¡[?,?] ð\9d\90\88â\9d¨?â\9d© )" "cix_lift" * ]
}
]
[ { "reducible forms for context-sensitive rt-reduction" * } {
- [ [ "" ] "crx ( â\9dª?,?â\9d« â\8a¢ â\9e¡[?,?] ð\9d\90\91â\9dª?â\9d« )" "crx_lift" * ]
+ [ [ "" ] "crx ( â\9d¨?,?â\9d© â\8a¢ â\9e¡[?,?] ð\9d\90\91â\9d¨?â\9d© )" "crx_lift" * ]
}
]
[ { "normal forms for context-sensitive reduction" * } {
}
]
[ { "irreducible forms for context-sensitive reduction" * } {
- [ [ "" ] "cir ( â\9dª?,?â\9d« â\8a¢ â\9e¡ ð\9d\90\88â\9dª?â\9d« )" "cir_lift" * ]
+ [ [ "" ] "cir ( â\9d¨?,?â\9d© â\8a¢ â\9e¡ ð\9d\90\88â\9d¨?â\9d© )" "cir_lift" * ]
}
]
[ { "reducible forms for context-sensitive reduction" * } {
- [ [ "" ] "crr ( â\9dª?,?â\9d« â\8a¢ â\9e¡ ð\9d\90\91â\9dª?â\9d« )" "crr_lift" * ]
+ [ [ "" ] "crr ( â\9d¨?,?â\9d© â\8a¢ â\9e¡ ð\9d\90\91â\9d¨?â\9d© )" "crr_lift" * ]
}
]
[ { "unfold" * } {
- [ [ "" ] "unfold ( â\9dª?,?â\9d« ⊢ ? ⧫* ? )" * ]
+ [ [ "" ] "unfold ( â\9d¨?,?â\9d© ⊢ ? ⧫* ? )" * ]
}
]
[ { "iterated static type assignment" * } {
- [ [ "" ] "lstas ( â\9dª?,?â\9d« ⊢ ? •*[?,?] ? )" "lstas_lift" + "lstas_llpx_sn.ma" + "lstas_aaa" + "lstas_da" + "lstas_lstas" * ]
+ [ [ "" ] "lstas ( â\9d¨?,?â\9d© ⊢ ? •*[?,?] ? )" "lstas_lift" + "lstas_llpx_sn.ma" + "lstas_aaa" + "lstas_da" + "lstas_lstas" * ]
}
]
[ { "local env. ref. for degree assignment" * } {
}
]
[ { "degree assignment" * } {
- [ [ "" ] "da ( â\9dª?,?â\9d« ⊢ ? ▪[?,?] ? )" "da_lift" + "da_aaa" + "da_da" * ]
+ [ [ "" ] "da ( â\9d¨?,?â\9d© ⊢ ? ▪[?,?] ? )" "da_lift" + "da_aaa" + "da_da" * ]
}
]
[ { "context-sensitive multiple rt-substitution" * } {
- [ [ "" ] "cpys ( â\9dª?,?â\9d« â\8a¢ ? â\96¶*[?,?] ? )" "cpys_alt ( â\9dª?,?â\9d« ⊢ ? ▶▶*[?,?] ? )" "cpys_lift" + "cpys_cpys" * ]
+ [ [ "" ] "cpys ( â\9d¨?,?â\9d© â\8a¢ ? â\96¶*[?,?] ? )" "cpys_alt ( â\9d¨?,?â\9d© ⊢ ? ▶▶*[?,?] ? )" "cpys_lift" + "cpys_cpys" * ]
}
]
[ { "global env. slicing" * } {
}
]
[ { "context-sensitive ordinary rt-substitution" * } {
- [ [ "" ] "cpy ( â\9dª?,?â\9d« ⊢ ? ▶[?,?] ? )" "cpy_lift" + "cpy_nlift" + "cpy_cpy" * ]
+ [ [ "" ] "cpy ( â\9d¨?,?â\9d© ⊢ ? ▶[?,?] ? )" "cpy_lift" + "cpy_nlift" + "cpy_cpy" * ]
}
]
[ { "local env. ref. for rt-substitution" * } {
(* Basic constructions ******************************************************)
-lemma rtc_ism_zz: ð\9d\90\8câ\9dªð\9d\9f\8e,ð\9d\9f\98ð\9d\9f\98â\9d«.
+lemma rtc_ism_zz: ð\9d\90\8câ\9d¨ð\9d\9f\8e,ð\9d\9f\98ð\9d\9f\98â\9d©.
/2 width=3 by ex1_2_intro/ qed.
-lemma rtc_ism_zu: ð\9d\90\8câ\9dªð\9d\9f\8e,ð\9d\9f\99ð\9d\9f\98â\9d«.
+lemma rtc_ism_zu: ð\9d\90\8câ\9d¨ð\9d\9f\8e,ð\9d\9f\99ð\9d\9f\98â\9d©.
/2 width=3 by ex1_2_intro/ qed.
-lemma rtc_ism_uz: ð\9d\90\8câ\9dªð\9d\9f\8f,ð\9d\9f\98ð\9d\9f\99â\9d«.
+lemma rtc_ism_uz: ð\9d\90\8câ\9d¨ð\9d\9f\8f,ð\9d\9f\98ð\9d\9f\99â\9d©.
/2 width=3 by ex1_2_intro/ qed.
-lemma rtc_ism_eq_t_trans (n) (c1) (c2): ð\9d\90\8câ\9dªn,c1â\9d« â\86\92 rtc_eq_t c1 c2 â\86\92 ð\9d\90\8câ\9dªn,c2â\9d«.
+lemma rtc_ism_eq_t_trans (n) (c1) (c2): ð\9d\90\8câ\9d¨n,c1â\9d© â\86\92 rtc_eq_t c1 c2 â\86\92 ð\9d\90\8câ\9d¨n,c2â\9d©.
#n #c1 #c2 * #ri1 #rs1 #H destruct
#H elim (rtc_eq_t_inv_dx … H) -H /2 width=3 by ex1_2_intro/
qed-.
(* Basic destructions *******************************************************)
-lemma rtc_ism_des_zz (n): ð\9d\90\8câ\9dªn,ð\9d\9f\98ð\9d\9f\98â\9d« → 𝟎 = n.
+lemma rtc_ism_des_zz (n): ð\9d\90\8câ\9d¨n,ð\9d\9f\98ð\9d\9f\98â\9d© → 𝟎 = n.
#n * #ri #rs #H destruct //
qed-.
-lemma rtc_ism_des_uz (n): ð\9d\90\8câ\9dªn,ð\9d\9f\99ð\9d\9f\98â\9d« → 𝟎 = n.
+lemma rtc_ism_des_uz (n): ð\9d\90\8câ\9d¨n,ð\9d\9f\99ð\9d\9f\98â\9d© → 𝟎 = n.
#n * #ri #rs #H destruct //
qed-.
-lemma rtc_ism_des_01 (n): ð\9d\90\8câ\9dªn,ð\9d\9f\98ð\9d\9f\99â\9d« → ninj (𝟏) = n.
+lemma rtc_ism_des_01 (n): ð\9d\90\8câ\9d¨n,ð\9d\9f\98ð\9d\9f\99â\9d© → ninj (𝟏) = n.
#n * #ri #rs #H destruct //
qed-.
(* Main inversions **********************************************************)
-theorem rtc_ism_inj (n1) (n2) (c): ð\9d\90\8câ\9dªn1,câ\9d« â\86\92 ð\9d\90\8câ\9dªn2,câ\9d« → n1 = n2.
+theorem rtc_ism_inj (n1) (n2) (c): ð\9d\90\8câ\9d¨n1,câ\9d© â\86\92 ð\9d\90\8câ\9d¨n2,câ\9d© → n1 = n2.
#n1 #n2 #c * #ri1 #rs1 #H1 * #ri2 #rs2 #H2 destruct //
qed-.
-theorem rtc_ism_mono (n) (c1) (c2): ð\9d\90\8câ\9dªn,c1â\9d« â\86\92 ð\9d\90\8câ\9dªn,c2â\9d« → rtc_eq_t c1 c2.
+theorem rtc_ism_mono (n) (c1) (c2): ð\9d\90\8câ\9d¨n,c1â\9d© â\86\92 ð\9d\90\8câ\9d¨n,c2â\9d© → rtc_eq_t c1 c2.
#n #c1 #c2 * #ri1 #rs1 #H1 * #ri2 #rs2 #H2 destruct //
qed-.
(* Constructions with rtc_max ***********************************************)
-lemma rtc_ism_max (n1) (n2) (c1) (c2): ð\9d\90\8câ\9dªn1,c1â\9d« â\86\92 ð\9d\90\8câ\9dªn2,c2â\9d« â\86\92 ð\9d\90\8câ\9dªn1â\88¨n2,c1â\88¨c2â\9d«.
+lemma rtc_ism_max (n1) (n2) (c1) (c2): ð\9d\90\8câ\9d¨n1,c1â\9d© â\86\92 ð\9d\90\8câ\9d¨n2,c2â\9d© â\86\92 ð\9d\90\8câ\9d¨n1â\88¨n2,c1â\88¨c2â\9d©.
#n1 #n2 #c1 #c2 * #ri1 #rs1 #H1 * #ri2 #rs2 #H2 destruct
/2 width=3 by ex1_2_intro/
qed.
-lemma rtc_ism_max_zero_sn (n) (c1) (c2): ð\9d\90\8câ\9dªð\9d\9f\8e,c1â\9d« â\86\92 ð\9d\90\8câ\9dªn,c2â\9d« â\86\92 ð\9d\90\8câ\9dªn,c1â\88¨c2â\9d«.
+lemma rtc_ism_max_zero_sn (n) (c1) (c2): ð\9d\90\8câ\9d¨ð\9d\9f\8e,c1â\9d© â\86\92 ð\9d\90\8câ\9d¨n,c2â\9d© â\86\92 ð\9d\90\8câ\9d¨n,c1â\88¨c2â\9d©.
/2 width=1 by rtc_ism_max/ qed.
-lemma rtc_ism_max_zero_dx (n) (c1) (c2): ð\9d\90\8câ\9dªn,c1â\9d« â\86\92 ð\9d\90\8câ\9dªð\9d\9f\8e,c2â\9d« â\86\92 ð\9d\90\8câ\9dªn,c1â\88¨c2â\9d«.
+lemma rtc_ism_max_zero_dx (n) (c1) (c2): ð\9d\90\8câ\9d¨n,c1â\9d© â\86\92 ð\9d\90\8câ\9d¨ð\9d\9f\8e,c2â\9d© â\86\92 ð\9d\90\8câ\9d¨n,c1â\88¨c2â\9d©.
#n #c1 #c2 #H1 #H2 >(nmax_zero_dx n) /2 width=1 by rtc_ism_max/
qed.
-lemma rtc_ism_max_idem_sn (n) (c1) (c2): ð\9d\90\8câ\9dªn,c1â\9d« â\86\92 ð\9d\90\8câ\9dªn,c2â\9d« â\86\92 ð\9d\90\8câ\9dªn,c1â\88¨c2â\9d«.
+lemma rtc_ism_max_idem_sn (n) (c1) (c2): ð\9d\90\8câ\9d¨n,c1â\9d© â\86\92 ð\9d\90\8câ\9d¨n,c2â\9d© â\86\92 ð\9d\90\8câ\9d¨n,c1â\88¨c2â\9d©.
#n #c1 #c2 #H1 #H2 >(nmax_idem n) /2 width=1 by rtc_ism_max/
qed.
(* Inversions with rtc_max **************************************************)
-lemma rtc_ism_inv_max (n) (c1) (c2): ð\9d\90\8câ\9dªn,c1 â\88¨ c2â\9d« →
- â\88\83â\88\83n1,n2. ð\9d\90\8câ\9dªn1,c1â\9d« & ð\9d\90\8câ\9dªn2,c2â\9d« & (n1 ∨ n2) = n.
+lemma rtc_ism_inv_max (n) (c1) (c2): ð\9d\90\8câ\9d¨n,c1 â\88¨ c2â\9d© →
+ â\88\83â\88\83n1,n2. ð\9d\90\8câ\9d¨n1,c1â\9d© & ð\9d\90\8câ\9d¨n2,c2â\9d© & (n1 ∨ n2) = n.
#n #c1 #c2 * #ri #rs #H
elim (rtc_max_inv_dx … H) -H #ri1 #rs1 #ti1 #ts1 #ri2 #rs2 #ti2 #ts2 #_ #_ #H1 #H2 #H3 #H4
elim (eq_inv_nmax_zero … H1) -H1 /3 width=5 by ex3_2_intro, ex1_2_intro/
qed-.
-lemma rtc_isr_inv_max (c1) (c2): ð\9d\90\8câ\9dªð\9d\9f\8e,c1 â\88¨ c2â\9d« â\86\92 â\88§â\88§ ð\9d\90\8câ\9dªð\9d\9f\8e,c1â\9d« & ð\9d\90\8câ\9dªð\9d\9f\8e,c2â\9d«.
+lemma rtc_isr_inv_max (c1) (c2): ð\9d\90\8câ\9d¨ð\9d\9f\8e,c1 â\88¨ c2â\9d© â\86\92 â\88§â\88§ ð\9d\90\8câ\9d¨ð\9d\9f\8e,c1â\9d© & ð\9d\90\8câ\9d¨ð\9d\9f\8e,c2â\9d©.
#c1 #c2 #H
elim (rtc_ism_inv_max … H) -H #n1 #n2 #Hn1 #Hn2 #H
elim (eq_inv_nmax_zero … H) -H #H1 #H2 destruct
/2 width=1 by conj/
qed-.
-lemma rtc_ism_inv_max_zero_dx (n) (c1) (c2): ð\9d\90\8câ\9dªn,c1 â\88¨ c2â\9d« â\86\92 ð\9d\90\8câ\9dªð\9d\9f\8e,c2â\9d« â\86\92 ð\9d\90\8câ\9dªn,c1â\9d«.
+lemma rtc_ism_inv_max_zero_dx (n) (c1) (c2): ð\9d\90\8câ\9d¨n,c1 â\88¨ c2â\9d© â\86\92 ð\9d\90\8câ\9d¨ð\9d\9f\8e,c2â\9d© â\86\92 ð\9d\90\8câ\9d¨n,c1â\9d©.
#n #c1 #c2 #H #H2
elim (rtc_ism_inv_max … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct
lapply (rtc_ism_inj … Hn2 H2) -c2 #H destruct //
qed-.
-lemma rtc_ism_inv_max_eq_t (n) (c1) (c2): ð\9d\90\8câ\9dªn,c1 â\88¨ c2â\9d« → rtc_eq_t c1 c2 →
- â\88§â\88§ ð\9d\90\8câ\9dªn,c1â\9d« & ð\9d\90\8câ\9dªn,c2â\9d«.
+lemma rtc_ism_inv_max_eq_t (n) (c1) (c2): ð\9d\90\8câ\9d¨n,c1 â\88¨ c2â\9d© → rtc_eq_t c1 c2 →
+ â\88§â\88§ ð\9d\90\8câ\9d¨n,c1â\9d© & ð\9d\90\8câ\9d¨n,c2â\9d©.
#n #c1 #c2 #H #Hc12
elim (rtc_ism_inv_max … H) -H #n1 #n2 #Hc1 #Hc2 #H destruct
lapply (rtc_ism_eq_t_trans … Hc1 … Hc12) -Hc12 #H
(* Inversions with rtc_max and rtc_shift ************************************)
-lemma rtc_ism_inv_max_shift_sn (n) (c1) (c2): ð\9d\90\8câ\9dªn,â\86\95*c1 â\88¨ c2â\9d« →
- â\88§â\88§ ð\9d\90\8câ\9dªð\9d\9f\8e,c1â\9d« & ð\9d\90\8câ\9dªn,c2â\9d«.
+lemma rtc_ism_inv_max_shift_sn (n) (c1) (c2): ð\9d\90\8câ\9d¨n,â\86\95*c1 â\88¨ c2â\9d© →
+ â\88§â\88§ ð\9d\90\8câ\9d¨ð\9d\9f\8e,c1â\9d© & ð\9d\90\8câ\9d¨n,c2â\9d©.
#n #c1 #c2 #H
elim (rtc_ism_inv_max … H) -H #n1 #n2 #Hc1 #Hc2 #H destruct
elim (rtc_ism_inv_shift … Hc1) -Hc1 #Hc1 * -n1 <nmax_zero_sn
(* Constructions with rtc_plus **********************************************)
-lemma rtc_ism_plus (n1) (n2) (c1) (c2): ð\9d\90\8câ\9dªn1,c1â\9d« â\86\92 ð\9d\90\8câ\9dªn2,c2â\9d« â\86\92 ð\9d\90\8câ\9dªn1+n2,c1+c2â\9d«.
+lemma rtc_ism_plus (n1) (n2) (c1) (c2): ð\9d\90\8câ\9d¨n1,c1â\9d© â\86\92 ð\9d\90\8câ\9d¨n2,c2â\9d© â\86\92 ð\9d\90\8câ\9d¨n1+n2,c1+c2â\9d©.
#n1 #n2 #c1 #c2 * #ri1 #rs1 #H1 * #ri2 #rs2 #H2 destruct
/2 width=3 by ex1_2_intro/
qed.
-lemma rtc_ism_plus_zero_sn (n) (c1) (c2): ð\9d\90\8câ\9dªð\9d\9f\8e,c1â\9d« â\86\92 ð\9d\90\8câ\9dªn,c2â\9d« â\86\92 ð\9d\90\8câ\9dªn,c1+c2â\9d«.
+lemma rtc_ism_plus_zero_sn (n) (c1) (c2): ð\9d\90\8câ\9d¨ð\9d\9f\8e,c1â\9d© â\86\92 ð\9d\90\8câ\9d¨n,c2â\9d© â\86\92 ð\9d\90\8câ\9d¨n,c1+c2â\9d©.
#n #c1 #c2 #H1 #H2 >(nplus_zero_sn n) /2 width=1 by rtc_ism_plus/
qed.
-lemma rtc_ism_plus_zero_dx (n) (c1) (c2): ð\9d\90\8câ\9dªn,c1â\9d« â\86\92 ð\9d\90\8câ\9dªð\9d\9f\8e,c2â\9d« â\86\92 ð\9d\90\8câ\9dªn,c1+c2â\9d«.
+lemma rtc_ism_plus_zero_dx (n) (c1) (c2): ð\9d\90\8câ\9d¨n,c1â\9d© â\86\92 ð\9d\90\8câ\9d¨ð\9d\9f\8e,c2â\9d© â\86\92 ð\9d\90\8câ\9d¨n,c1+c2â\9d©.
/2 width=1 by rtc_ism_plus/ qed.
-lemma rtc_ism_succ (n) (c): ð\9d\90\8câ\9dªn,câ\9d« â\86\92 ð\9d\90\8câ\9dªâ\86\91n,c+ð\9d\9f\98ð\9d\9f\99â\9d«.
+lemma rtc_ism_succ (n) (c): ð\9d\90\8câ\9d¨n,câ\9d© â\86\92 ð\9d\90\8câ\9d¨â\86\91n,c+ð\9d\9f\98ð\9d\9f\99â\9d©.
#n #c #H >nplus_unit_dx
/2 width=1 by rtc_ism_plus/
qed.
(* Inversions with rtc_plus *************************************************)
-lemma rtc_ism_inv_plus (n) (c1) (c2): ð\9d\90\8câ\9dªn,c1 + c2â\9d« →
- â\88\83â\88\83n1,n2. ð\9d\90\8câ\9dªn1,c1â\9d« & ð\9d\90\8câ\9dªn2,c2â\9d« & n1 + n2 = n.
+lemma rtc_ism_inv_plus (n) (c1) (c2): ð\9d\90\8câ\9d¨n,c1 + c2â\9d© →
+ â\88\83â\88\83n1,n2. ð\9d\90\8câ\9d¨n1,c1â\9d© & ð\9d\90\8câ\9d¨n2,c2â\9d© & n1 + n2 = n.
#n #c1 #c2 * #ri #rs #H
elim (rtc_plus_inv_dx … H) -H #ri1 #rs1 #ti1 #ts1 #ri2 #rs2 #ti2 #ts2 #_ #_ #H1 #H2 #H3 #H4
elim (eq_inv_nplus_zero … H1) -H1 /3 width=5 by ex3_2_intro, ex1_2_intro/
qed-.
-lemma rtc_ism_inv_plus_zero_dx (n) (c1) (c2): ð\9d\90\8câ\9dªn,c1 + c2â\9d« â\86\92 ð\9d\90\8câ\9dªð\9d\9f\8e,c2â\9d« â\86\92 ð\9d\90\8câ\9dªn,c1â\9d«.
+lemma rtc_ism_inv_plus_zero_dx (n) (c1) (c2): ð\9d\90\8câ\9d¨n,c1 + c2â\9d© â\86\92 ð\9d\90\8câ\9d¨ð\9d\9f\8e,c2â\9d© â\86\92 ð\9d\90\8câ\9d¨n,c1â\9d©.
#n #c1 #c2 #H #H2
elim (rtc_ism_inv_plus … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct
lapply (rtc_ism_inj … Hn2 H2) -c2 #H destruct //
qed-.
-lemma rtc_ism_inv_plus_unit_dx (n) (c1) (c2): ð\9d\90\8câ\9dªn,c1 + c2â\9d« â\86\92 ð\9d\90\8câ\9dªð\9d\9f\8f,c2â\9d« →
- â\88\83â\88\83m. ð\9d\90\8câ\9dªm,c1â\9d« & n = ↑m.
+lemma rtc_ism_inv_plus_unit_dx (n) (c1) (c2): ð\9d\90\8câ\9d¨n,c1 + c2â\9d© â\86\92 ð\9d\90\8câ\9d¨ð\9d\9f\8f,c2â\9d© →
+ â\88\83â\88\83m. ð\9d\90\8câ\9d¨m,c1â\9d© & n = ↑m.
#n #c1 #c2 #H #H2
elim (rtc_ism_inv_plus … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct
lapply (rtc_ism_inj … Hn2 H2) -c2 #H destruct
(* Constructions with rtc_shift *********************************************)
-lemma rtc_isr_shift (c): ð\9d\90\8câ\9dªð\9d\9f\8e,câ\9d« â\86\92 ð\9d\90\8câ\9dªð\9d\9f\8e,â\86\95*câ\9d«.
+lemma rtc_isr_shift (c): ð\9d\90\8câ\9d¨ð\9d\9f\8e,câ\9d© â\86\92 ð\9d\90\8câ\9d¨ð\9d\9f\8e,â\86\95*câ\9d©.
#c * #ri #rs #H destruct /2 width=3 by ex1_2_intro/
qed.
(* Inversions with rtc_shift ************************************************)
-lemma rtc_ism_inv_shift (n) (c): ð\9d\90\8câ\9dªn,â\86\95*câ\9d« â\86\92 â\88§â\88§ ð\9d\90\8câ\9dªð\9d\9f\8e,câ\9d« & 𝟎 = n.
+lemma rtc_ism_inv_shift (n) (c): ð\9d\90\8câ\9d¨n,â\86\95*câ\9d© â\86\92 â\88§â\88§ ð\9d\90\8câ\9d¨ð\9d\9f\8e,câ\9d© & 𝟎 = n.
#n #c * #ri #rs #H
elim (rtc_shift_inv_dx … H) -H #rt0 #rs0 #ti0 #ts0 #_ #_ #H1 #H2 #H3
elim (eq_inv_nmax_zero … H1) -H1 /3 width=3 by ex1_2_intro, conj/
qed-.
-lemma rtc_isr_inv_shift (c): ð\9d\90\8câ\9dªð\9d\9f\8e,â\86\95*câ\9d« â\86\92 ð\9d\90\8câ\9dªð\9d\9f\8e,câ\9d«.
+lemma rtc_isr_inv_shift (c): ð\9d\90\8câ\9d¨ð\9d\9f\8e,â\86\95*câ\9d© â\86\92 ð\9d\90\8câ\9d¨ð\9d\9f\8e,câ\9d©.
#c #H elim (rtc_ism_inv_shift … H) -H //
qed-.
(* Basic constructions ******************************************************)
-lemma rtc_ist_zz: ð\9d\90\93â\9dªð\9d\9f\8e,ð\9d\9f\98ð\9d\9f\98â\9d«.
+lemma rtc_ist_zz: ð\9d\90\93â\9d¨ð\9d\9f\8e,ð\9d\9f\98ð\9d\9f\98â\9d©.
// qed.
-lemma rtc_ist_zu: ð\9d\90\93â\9dªð\9d\9f\8f,ð\9d\9f\98ð\9d\9f\99â\9d«.
+lemma rtc_ist_zu: ð\9d\90\93â\9d¨ð\9d\9f\8f,ð\9d\9f\98ð\9d\9f\99â\9d©.
// qed.
(* Basic inversions *********************************************************)
-lemma rtc_ist_inv_zz (n): ð\9d\90\93â\9dªn,ð\9d\9f\98ð\9d\9f\98â\9d« → 𝟎 = n.
+lemma rtc_ist_inv_zz (n): ð\9d\90\93â\9d¨n,ð\9d\9f\98ð\9d\9f\98â\9d© → 𝟎 = n.
#n #H destruct //
qed-.
-lemma rtc_ist_inv_zu (n): ð\9d\90\93â\9dªn,ð\9d\9f\98ð\9d\9f\99â\9d« → ninj (𝟏) = n.
+lemma rtc_ist_inv_zu (n): ð\9d\90\93â\9d¨n,ð\9d\9f\98ð\9d\9f\99â\9d© → ninj (𝟏) = n.
#n #H destruct //
qed-.
-lemma rtc_ist_inv_uz (n): ð\9d\90\93â\9dªn,ð\9d\9f\99ð\9d\9f\98â\9d« → ⊥.
+lemma rtc_ist_inv_uz (n): ð\9d\90\93â\9d¨n,ð\9d\9f\99ð\9d\9f\98â\9d© → ⊥.
#h #H destruct
qed-.
(* Main inversions **********************************************************)
-theorem rtc_ist_inj (n1) (n2) (c): ð\9d\90\93â\9dªn1,câ\9d« â\86\92 ð\9d\90\93â\9dªn2,câ\9d« → n1 = n2.
+theorem rtc_ist_inj (n1) (n2) (c): ð\9d\90\93â\9d¨n1,câ\9d© â\86\92 ð\9d\90\93â\9d¨n2,câ\9d© → n1 = n2.
#n1 #n2 #c #H1 #H2 destruct //
qed-.
-theorem rtc_ist_mono (n) (c1) (c2): ð\9d\90\93â\9dªn,c1â\9d« â\86\92 ð\9d\90\93â\9dªn,c2â\9d« → c1 = c2.
+theorem rtc_ist_mono (n) (c1) (c2): ð\9d\90\93â\9d¨n,c1â\9d© â\86\92 ð\9d\90\93â\9d¨n,c2â\9d© → c1 = c2.
#n #c1 #c2 #H1 #H2 destruct //
qed-.
(* Constructions with rtc_max ***********************************************)
-lemma rtc_ist_max (n1) (n2) (c1) (c2): ð\9d\90\93â\9dªn1,c1â\9d« â\86\92 ð\9d\90\93â\9dªn2,c2â\9d« â\86\92 ð\9d\90\93â\9dªn1â\88¨n2,c1â\88¨c2â\9d«.
+lemma rtc_ist_max (n1) (n2) (c1) (c2): ð\9d\90\93â\9d¨n1,c1â\9d© â\86\92 ð\9d\90\93â\9d¨n2,c2â\9d© â\86\92 ð\9d\90\93â\9d¨n1â\88¨n2,c1â\88¨c2â\9d©.
#n1 #n2 #c1 #c2 #H1 #H2 destruct //
qed.
-lemma rtc_ist_max_zero_sn (n) (c1) (c2): ð\9d\90\93â\9dªð\9d\9f\8e,c1â\9d« â\86\92 ð\9d\90\93â\9dªn,c2â\9d« â\86\92 ð\9d\90\93â\9dªn,c1â\88¨c2â\9d«.
+lemma rtc_ist_max_zero_sn (n) (c1) (c2): ð\9d\90\93â\9d¨ð\9d\9f\8e,c1â\9d© â\86\92 ð\9d\90\93â\9d¨n,c2â\9d© â\86\92 ð\9d\90\93â\9d¨n,c1â\88¨c2â\9d©.
/2 width=1 by rtc_ist_max/ qed.
-lemma rtc_ist_max_zero_dx (n) (c1) (c2): ð\9d\90\93â\9dªn,c1â\9d« â\86\92 ð\9d\90\93â\9dªð\9d\9f\8e,c2â\9d« â\86\92 ð\9d\90\93â\9dªn,c1â\88¨c2â\9d«.
+lemma rtc_ist_max_zero_dx (n) (c1) (c2): ð\9d\90\93â\9d¨n,c1â\9d© â\86\92 ð\9d\90\93â\9d¨ð\9d\9f\8e,c2â\9d© â\86\92 ð\9d\90\93â\9d¨n,c1â\88¨c2â\9d©.
// qed.
-lemma rtc_ist_max_idem_sn (n) (c1) (c2): ð\9d\90\93â\9dªn,c1â\9d« â\86\92 ð\9d\90\93â\9dªn,c2â\9d« â\86\92 ð\9d\90\93â\9dªn,c1â\88¨c2â\9d«.
+lemma rtc_ist_max_idem_sn (n) (c1) (c2): ð\9d\90\93â\9d¨n,c1â\9d© â\86\92 ð\9d\90\93â\9d¨n,c2â\9d© â\86\92 ð\9d\90\93â\9d¨n,c1â\88¨c2â\9d©.
#n #c1 #c2 #H1 #H2 >(nmax_idem n) /2 width=1 by rtc_ist_max/
qed.
(* Inversions with rtc_max **************************************************)
-lemma rtc_ist_inv_max (n) (c1) (c2): ð\9d\90\93â\9dªn,c1 â\88¨ c2â\9d« →
- â\88\83â\88\83n1,n2. ð\9d\90\93â\9dªn1,c1â\9d« & ð\9d\90\93â\9dªn2,c2â\9d« & (n1 ∨ n2) = n.
+lemma rtc_ist_inv_max (n) (c1) (c2): ð\9d\90\93â\9d¨n,c1 â\88¨ c2â\9d© →
+ â\88\83â\88\83n1,n2. ð\9d\90\93â\9d¨n1,c1â\9d© & ð\9d\90\93â\9d¨n2,c2â\9d© & (n1 ∨ n2) = n.
#n #c1 #c2 #H
elim (rtc_max_inv_dx … H) -H #ri1 #rs1 #ti1 #ts1 #ri2 #rs2 #ti2 #ts2 #H1 #H2 #H3 #H4 #H5 #H6 destruct
elim (eq_inv_nmax_zero … H1) -H1 #H11 #H12 destruct
/2 width=5 by ex3_2_intro/
qed-.
-lemma rtc_ist_inv_zero_max (c1) (c2): ð\9d\90\93â\9dªð\9d\9f\8e,c1 â\88¨ c2â\9d« â\86\92 â\88§â\88§ ð\9d\90\93â\9dªð\9d\9f\8e,c1â\9d« & ð\9d\90\93â\9dªð\9d\9f\8e,c2â\9d«.
+lemma rtc_ist_inv_zero_max (c1) (c2): ð\9d\90\93â\9d¨ð\9d\9f\8e,c1 â\88¨ c2â\9d© â\86\92 â\88§â\88§ ð\9d\90\93â\9d¨ð\9d\9f\8e,c1â\9d© & ð\9d\90\93â\9d¨ð\9d\9f\8e,c2â\9d©.
#c1 #c2 #H
elim (rtc_ist_inv_max … H) -H #n1 #n2 #Hn1 #Hn2 #H
elim (eq_inv_nmax_zero … H) -H #H1 #H2 destruct
/2 width=1 by conj/
qed-.
-lemma rtc_ist_inv_max_zero_dx (n) (c1) (c2): ð\9d\90\93â\9dªn,c1 â\88¨ c2â\9d« â\86\92 ð\9d\90\93â\9dªð\9d\9f\8e,c2â\9d« â\86\92 ð\9d\90\93â\9dªn,c1â\9d«.
+lemma rtc_ist_inv_max_zero_dx (n) (c1) (c2): ð\9d\90\93â\9d¨n,c1 â\88¨ c2â\9d© â\86\92 ð\9d\90\93â\9d¨ð\9d\9f\8e,c2â\9d© â\86\92 ð\9d\90\93â\9d¨n,c1â\9d©.
#n #c1 #c2 #H #H2
elim (rtc_ist_inv_max … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct //
qed-.
(* Constructions with rtc_plus **********************************************)
-lemma rtc_ist_plus (n1) (n2) (c1) (c2): ð\9d\90\93â\9dªn1,c1â\9d« â\86\92 ð\9d\90\93â\9dªn2,c2â\9d« â\86\92 ð\9d\90\93â\9dªn1+n2,c1+c2â\9d«.
+lemma rtc_ist_plus (n1) (n2) (c1) (c2): ð\9d\90\93â\9d¨n1,c1â\9d© â\86\92 ð\9d\90\93â\9d¨n2,c2â\9d© â\86\92 ð\9d\90\93â\9d¨n1+n2,c1+c2â\9d©.
#n1 #n2 #c1 #c2 #H1 #H2 destruct //
qed.
-lemma rtc_ist_plus_zero_sn (n) (c1) (c2): ð\9d\90\93â\9dªð\9d\9f\8e,c1â\9d« â\86\92 ð\9d\90\93â\9dªn,c2â\9d« â\86\92 ð\9d\90\93â\9dªn,c1+c2â\9d«.
+lemma rtc_ist_plus_zero_sn (n) (c1) (c2): ð\9d\90\93â\9d¨ð\9d\9f\8e,c1â\9d© â\86\92 ð\9d\90\93â\9d¨n,c2â\9d© â\86\92 ð\9d\90\93â\9d¨n,c1+c2â\9d©.
#n #c1 #c2 #H1 #H2 >(nplus_zero_sn n)
/2 width=1 by rtc_ist_plus/
qed.
-lemma rtc_ist_plus_zero_dx (n) (c1) (c2): ð\9d\90\93â\9dªn,c1â\9d« â\86\92 ð\9d\90\93â\9dªð\9d\9f\8e,c2â\9d« â\86\92 ð\9d\90\93â\9dªn,c1+c2â\9d«.
+lemma rtc_ist_plus_zero_dx (n) (c1) (c2): ð\9d\90\93â\9d¨n,c1â\9d© â\86\92 ð\9d\90\93â\9d¨ð\9d\9f\8e,c2â\9d© â\86\92 ð\9d\90\93â\9d¨n,c1+c2â\9d©.
/2 width=1 by rtc_ist_plus/ qed.
-lemma rtc_ist_succ (n) (c): ð\9d\90\93â\9dªn,câ\9d« â\86\92 ð\9d\90\93â\9dªâ\86\91n,c+ð\9d\9f\98ð\9d\9f\99â\9d«.
+lemma rtc_ist_succ (n) (c): ð\9d\90\93â\9d¨n,câ\9d© â\86\92 ð\9d\90\93â\9d¨â\86\91n,c+ð\9d\9f\98ð\9d\9f\99â\9d©.
#n #c #H >nplus_unit_dx
/2 width=1 by rtc_ist_plus/
qed.
(* Inversions with rtc_plus *************************************************)
-lemma rtc_ist_inv_plus (n) (c1) (c2): ð\9d\90\93â\9dªn,c1 + c2â\9d« →
- â\88\83â\88\83n1,n2. ð\9d\90\93â\9dªn1,c1â\9d« & ð\9d\90\93â\9dªn2,c2â\9d« & n1 + n2 = n.
+lemma rtc_ist_inv_plus (n) (c1) (c2): ð\9d\90\93â\9d¨n,c1 + c2â\9d© →
+ â\88\83â\88\83n1,n2. ð\9d\90\93â\9d¨n1,c1â\9d© & ð\9d\90\93â\9d¨n2,c2â\9d© & n1 + n2 = n.
#n #c1 #c2 #H
elim (rtc_plus_inv_dx … H) -H #ri1 #rs1 #ti1 #ts1 #ri2 #rs2 #ti2 #ts2 #H1 #H2 #H3 #H4 #H5 #H6 destruct
elim (eq_inv_nplus_zero … H1) -H1 #H11 #H12 destruct
/3 width=5 by ex3_2_intro/
qed-.
-lemma rtc_ist_inv_plus_zero_dx (n) (c1) (c2): ð\9d\90\93â\9dªn,c1 + c2â\9d« â\86\92 ð\9d\90\93â\9dªð\9d\9f\8e,c2â\9d« â\86\92 ð\9d\90\93â\9dªn,c1â\9d«.
+lemma rtc_ist_inv_plus_zero_dx (n) (c1) (c2): ð\9d\90\93â\9d¨n,c1 + c2â\9d© â\86\92 ð\9d\90\93â\9d¨ð\9d\9f\8e,c2â\9d© â\86\92 ð\9d\90\93â\9d¨n,c1â\9d©.
#n #c1 #c2 #H #H2
elim (rtc_ist_inv_plus … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct //
qed-.
lemma rtc_ist_inv_plus_unit_dx:
- â\88\80n,c1,c2. ð\9d\90\93â\9dªn,c1 + c2â\9d« â\86\92 ð\9d\90\93â\9dªð\9d\9f\8f,c2â\9d« →
- â\88\83â\88\83m. ð\9d\90\93â\9dªm,c1â\9d« & n = ↑m.
+ â\88\80n,c1,c2. ð\9d\90\93â\9d¨n,c1 + c2â\9d© â\86\92 ð\9d\90\93â\9d¨ð\9d\9f\8f,c2â\9d© →
+ â\88\83â\88\83m. ð\9d\90\93â\9d¨m,c1â\9d© & n = ↑m.
#n #c1 #c2 #H #H2 destruct
elim (rtc_ist_inv_plus … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct
/2 width=3 by ex2_intro/
qed-.
-lemma rtc_ist_inv_plus_zu_dx (n) (c): ð\9d\90\93â\9dªn,c+ð\9d\9f\99ð\9d\9f\98â\9d« → ⊥.
+lemma rtc_ist_inv_plus_zu_dx (n) (c): ð\9d\90\93â\9d¨n,c+ð\9d\9f\99ð\9d\9f\98â\9d© → ⊥.
#n #c #H
elim (rtc_ist_inv_plus … H) -H #n1 #n2 #_ #H #_
/2 width=2 by rtc_ist_inv_uz/
(* Constructions with rtc_shift *********************************************)
-lemma rtc_ist_zero_shift (c): ð\9d\90\93â\9dªð\9d\9f\8e,câ\9d« â\86\92 ð\9d\90\93â\9dªð\9d\9f\8e,â\86\95*câ\9d«.
+lemma rtc_ist_zero_shift (c): ð\9d\90\93â\9d¨ð\9d\9f\8e,câ\9d© â\86\92 ð\9d\90\93â\9d¨ð\9d\9f\8e,â\86\95*câ\9d©.
#c #H destruct //
qed.
(* Inversions with rtc_shift ************************************************)
-lemma rtc_ist_inv_shift (n) (c): ð\9d\90\93â\9dªn,â\86\95*câ\9d« â\86\92 â\88§â\88§ ð\9d\90\93â\9dªð\9d\9f\8e,câ\9d« & 𝟎 = n.
+lemma rtc_ist_inv_shift (n) (c): ð\9d\90\93â\9d¨n,â\86\95*câ\9d© â\86\92 â\88§â\88§ ð\9d\90\93â\9d¨ð\9d\9f\8e,câ\9d© & 𝟎 = n.
#n #c #H
elim (rtc_shift_inv_dx … H) -H #rt0 #rs0 #ti0 #ts0 #H1 #_ #H2 #H3 #H4 destruct
elim (eq_inv_nmax_zero … H1) -H1 #H11 #H12 destruct
/2 width=1 by conj/
qed-.
-lemma rtc_ist_inv_zero_shift (c): ð\9d\90\93â\9dªð\9d\9f\8e,â\86\95*câ\9d« â\86\92 ð\9d\90\93â\9dªð\9d\9f\8e,câ\9d«.
+lemma rtc_ist_inv_zero_shift (c): ð\9d\90\93â\9d¨ð\9d\9f\8e,â\86\95*câ\9d© â\86\92 ð\9d\90\93â\9d¨ð\9d\9f\8e,câ\9d©.
#c #H elim (rtc_ist_inv_shift … H) -H //
qed-.
(* GROUND NOTATION **********************************************************)
-notation "hvbox( ð\9d\90\85â\9dª term 46 f â\9d« )"
+notation "hvbox( ð\9d\90\85â\9d¨ term 46 f â\9d© )"
non associative with precedence 45
for @{ 'PredicateF $f }.
(* GROUND NOTATION **********************************************************)
-notation "hvbox( ð\9d\90\88â\9dª term 46 f â\9d« )"
+notation "hvbox( ð\9d\90\88â\9d¨ term 46 f â\9d© )"
non associative with precedence 45
for @{ 'PredicateI $f }.
(* GROUND NOTATION **********************************************************)
-notation "hvbox( ð\9d\90\8câ\9dª term 46 n, break term 46 c â\9d« )"
+notation "hvbox( ð\9d\90\8câ\9d¨ term 46 n, break term 46 c â\9d© )"
non associative with precedence 45
for @{ 'PredicateM $n $c }.
(* GROUND NOTATION **********************************************************)
-notation "hvbox( ð\9d\9b\80â\9dª term 46 f â\9d« )"
+notation "hvbox( ð\9d\9b\80â\9d¨ term 46 f â\9d© )"
non associative with precedence 45
for @{ 'PredicateOmega $f }.
(* GROUND NOTATION **********************************************************)
-notation "hvbox( ð\9d\90\93â\9dª term 46 f â\9d« )"
+notation "hvbox( ð\9d\90\93â\9d¨ term 46 f â\9d© )"
non associative with precedence 45
for @{ 'PredicateT $f }.
(* GROUND NOTATION **********************************************************)
-notation "hvbox( ð\9d\90\93â\9dª term 46 n, break term 46 c â\9d« )"
+notation "hvbox( ð\9d\90\93â\9d¨ term 46 n, break term 46 c â\9d© )"
non associative with precedence 45
for @{ 'PredicateT $n $c }.
(* GROUND NOTATION **********************************************************)
-notation "hvbox( ð\9d\90\94â\9dª term 46 f â\9d« )"
+notation "hvbox( ð\9d\90\94â\9d¨ term 46 f â\9d© )"
non associative with precedence 45
for @{ 'PredicateU $f }.
(* GROUND NOTATION **********************************************************)
-notation "hvbox( @â\9dª term 46 T1 , break term 46 f â\9d« ≘ break term 46 T2 )"
+notation "hvbox( @â\9d¨ term 46 T1 , break term 46 f â\9d© ≘ break term 46 T2 )"
non associative with precedence 45
for @{ 'RAt $T1 $f $T2 }.
(* GROUND NOTATION **********************************************************)
-notation "hvbox( @â\86\91â\9dª term 46 T1 , break term 46 f â\9d« ≘ break term 46 T2 )"
+notation "hvbox( @â\86\91â\9d¨ term 46 T1 , break term 46 f â\9d© ≘ break term 46 T2 )"
non associative with precedence 45
for @{ 'RAtSucc $T1 $f $T2 }.
(* GROUND NOTATION **********************************************************)
-notation "hvbox( ð\9d\90\82â\9dª term 46 f â\9d« ≘ break term 46 n )"
+notation "hvbox( ð\9d\90\82â\9d¨ term 46 f â\9d© ≘ break term 46 n )"
non associative with precedence 45
for @{ 'RFunC $f $n }.
(*** at_inv_nil *)
lemma fr2_nat_inv_nil (l1) (l2):
- @â\9dªl1, â\97\8aâ\9d« ≘ l2 → l1 = l2.
+ @â\9d¨l1, â\97\8aâ\9d© ≘ l2 → l1 = l2.
#l1 #l2 @(insert_eq_1 … (◊))
#f * -f -l1 -l2
[ //
(*** at_inv_cons *)
lemma fr2_nat_inv_cons (f) (d) (h) (l1) (l2):
- @â\9dªl1, â\9d¨d,hâ\9d©;fâ\9d« ≘ l2 →
- â\88¨â\88¨ â\88§â\88§ l1 < d & @â\9dªl1, fâ\9d« ≘ l2
- | â\88§â\88§ d â\89¤ l1 & @â\9dªl1+h, fâ\9d« ≘ l2.
+ @â\9d¨l1, â\9d¨d,hâ\9d©;fâ\9d© ≘ l2 →
+ â\88¨â\88¨ â\88§â\88§ l1 < d & @â\9d¨l1, fâ\9d© ≘ l2
+ | â\88§â\88§ d â\89¤ l1 & @â\9d¨l1+h, fâ\9d© ≘ l2.
#g #d #h #l1 #l2 @(insert_eq_1 … (❨d, h❩;g))
#f * -f -l1 -l2
[ #l #H destruct
(*** at_inv_cons *)
lemma fr2_nat_inv_cons_lt (f) (d) (h) (l1) (l2):
- @â\9dªl1, â\9d¨d,hâ\9d©;fâ\9d« â\89\98 l2 â\86\92 l1 < d â\86\92 @â\9dªl1, fâ\9d« ≘ l2.
+ @â\9d¨l1, â\9d¨d,hâ\9d©;fâ\9d© â\89\98 l2 â\86\92 l1 < d â\86\92 @â\9d¨l1, fâ\9d© ≘ l2.
#f #d #h #l1 #h2 #H
elim (fr2_nat_inv_cons … H) -H * // #Hdl1 #_ #Hl1d
elim (nlt_ge_false … Hl1d Hdl1)
(*** at_inv_cons *)
lemma fr2_nat_inv_cons_ge (f) (d) (h) (l1) (l2):
- @â\9dªl1, â\9d¨d,hâ\9d©;fâ\9d« â\89\98 l2 â\86\92 d â\89¤ l1 â\86\92 @â\9dªl1+h, fâ\9d« ≘ l2.
+ @â\9d¨l1, â\9d¨d,hâ\9d©;fâ\9d© â\89\98 l2 â\86\92 d â\89¤ l1 â\86\92 @â\9d¨l1+h, fâ\9d© ≘ l2.
#f #d #h #l1 #h2 #H
elim (fr2_nat_inv_cons … H) -H * // #Hl1d #_ #Hdl1
elim (nlt_ge_false … Hl1d Hdl1)
(*** at_mono *)
theorem fr2_nat_mono (f) (l):
- â\88\80l1. @â\9dªl, fâ\9d« â\89\98 l1 â\86\92 â\88\80l2. @â\9dªl, fâ\9d« ≘ l2 → l1 = l2.
+ â\88\80l1. @â\9d¨l, fâ\9d© â\89\98 l1 â\86\92 â\88\80l2. @â\9d¨l, fâ\9d© ≘ l2 → l1 = l2.
#f #l #l1 #H elim H -f -l -l1
[ #l #x #H <(fr2_nat_inv_nil … H) -x //
| #f #d #h #l #l1 #Hld #_ #IH #x #H
(*** H_after_inj *)
definition H_pr_after_inj: predicate pr_map ≝
- λf1. ð\9d\90\93â\9dªf1â\9d« →
+ λf1. ð\9d\90\93â\9d¨f1â\9d© →
∀f,f21,f22. f1 ⊚ f21 ≘ f → f1 ⊚ f22 ≘ f → f21 ≡ f22.
(* Main destructions with pr_ist ********************************************)
(*** after_inj_O_aux *)
corec fact pr_after_inj_unit_aux:
- â\88\80f1. @â\9dªð\9d\9f\8f, f1â\9d« ≘ 𝟏 → H_pr_after_inj f1.
+ â\88\80f1. @â\9d¨ð\9d\9f\8f, f1â\9d© ≘ 𝟏 → H_pr_after_inj f1.
#f1 #H1f1 #H2f1 #f #f21 #f22 #H1f #H2f
cases (pr_pat_inv_unit_bi … H1f1) -H1f1 [|*: // ] #g1 #H1
lapply (pr_ist_inv_push … H2f1 … H1) -H2f1 #H2g1
(*** after_inj_aux *)
fact pr_after_inj_aux:
- (â\88\80f1. @â\9dªð\9d\9f\8f, f1â\9d« ≘ 𝟏 → H_pr_after_inj f1) →
- â\88\80i2,f1. @â\9dªð\9d\9f\8f, f1â\9d« ≘ i2 → H_pr_after_inj f1.
+ (â\88\80f1. @â\9d¨ð\9d\9f\8f, f1â\9d© ≘ 𝟏 → H_pr_after_inj f1) →
+ â\88\80i2,f1. @â\9d¨ð\9d\9f\8f, f1â\9d© ≘ i2 → H_pr_after_inj f1.
#H0 #i2 elim i2 -i2 /2 width=1 by/ -H0
#i2 #IH #f1 #H1f1 #H2f1 #f #f21 #f22 #H1f #H2f
elim (pr_pat_inv_unit_succ … H1f1) -H1f1 [|*: // ] #g1 #H1g1 #H1
(*** after_isid_sn *)
corec lemma pr_after_isi_sn:
- â\88\80f1. ð\9d\90\88â\9dªf1â\9d« → ∀f2. f1 ⊚ f2 ≘ f2.
+ â\88\80f1. ð\9d\90\88â\9d¨f1â\9d© → ∀f2. f1 ⊚ f2 ≘ f2.
#f1 * -f1
#f1 #g1 #Hf1 #H1 #f2 cases (pr_map_split_tl f2) #H2
/3 width=7 by pr_after_push, pr_after_refl/
(*** after_isid_dx *)
corec lemma pr_after_isi_dx:
- â\88\80f2. ð\9d\90\88â\9dªf2â\9d« → ∀f1. f1 ⊚ f2 ≘ f1.
+ â\88\80f2. ð\9d\90\88â\9d¨f2â\9d© → ∀f1. f1 ⊚ f2 ≘ f1.
#f2 * -f2
#f2 #g2 #Hf2 #H2 #f1 cases (pr_map_split_tl f1) #H1
[ /3 width=7 by pr_after_refl/
(*** after_isid_inv_sn *)
lemma pr_after_isi_inv_sn:
- â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â\9dªf1â\9d« → f2 ≡ f.
+ â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â\9d¨f1â\9d© → f2 ≡ f.
/3 width=6 by pr_after_isi_sn, pr_after_mono/ qed-.
(*** after_isid_inv_dx *)
lemma pr_after_isi_inv_dx:
- â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â\9dªf2â\9d« → f1 ≡ f.
+ â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â\9d¨f2â\9d© → f1 ≡ f.
/3 width=6 by pr_after_isi_dx, pr_after_mono/ qed-.
(*** after_fwd_isid1 *)
corec lemma pr_after_des_isi_sn:
- â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â\9dªfâ\9d« â\86\92 ð\9d\90\88â\9dªf1â\9d«.
+ â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â\9d¨fâ\9d© â\86\92 ð\9d\90\88â\9d¨f1â\9d©.
#f1 #f2 #f * -f1 -f2 -f
#f1 #f2 #f #g1 [1,2: #g2 ] #g #Hf #H1 [1,2: #H2 ] #H0 #H
[ /4 width=6 by pr_isi_inv_push, pr_isi_push/ ]
(*** after_fwd_isid2 *)
corec lemma pr_after_des_isi_dx:
- â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â\9dªfâ\9d« â\86\92 ð\9d\90\88â\9dªf2â\9d«.
+ â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â\9d¨fâ\9d© â\86\92 ð\9d\90\88â\9d¨f2â\9d©.
#f1 #f2 #f * -f1 -f2 -f
#f1 #f2 #f #g1 [1,2: #g2 ] #g #Hf #H1 [1,2: #H2 ] #H0 #H
[ /4 width=6 by pr_isi_inv_push, pr_isi_push/ ]
(*** after_inv_isid3 *)
lemma pr_after_inv_isi:
- â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â\9dªfâ\9d« â\86\92 ð\9d\90\88â\9dªf1â\9d« â\88§ ð\9d\90\88â\9dªf2â\9d«.
+ â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â\9d¨fâ\9d© â\86\92 ð\9d\90\88â\9d¨f1â\9d© â\88§ ð\9d\90\88â\9d¨f2â\9d©.
/3 width=4 by pr_after_des_isi_dx, pr_after_des_isi_sn, conj/ qed-.
(*** after_istot_fwd *)
lemma pr_after_ist_des:
- â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f â\86\92 ð\9d\90\93â\9dªf2â\9d« â\86\92 ð\9d\90\93â\9dªf1â\9d« â\86\92 ð\9d\90\93â\9dªfâ\9d«.
+ â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f â\86\92 ð\9d\90\93â\9d¨f2â\9d© â\86\92 ð\9d\90\93â\9d¨f1â\9d© â\86\92 ð\9d\90\93â\9d¨fâ\9d©.
#f2 #f1 #f #Hf #Hf2 #Hf1 #i1 elim (Hf1 i1) -Hf1
#i2 #Hf1 elim (Hf2 i2) -Hf2
/3 width=7 by pr_after_des_pat, ex_intro/
(*** after_fwd_istot_dx *)
lemma pr_after_des_ist_dx:
- â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f â\86\92 ð\9d\90\93â\9dªfâ\9d« â\86\92 ð\9d\90\93â\9dªf1â\9d«.
+ â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f â\86\92 ð\9d\90\93â\9d¨fâ\9d© â\86\92 ð\9d\90\93â\9d¨f1â\9d©.
#f2 #f1 #f #H #Hf #i1 elim (Hf i1) -Hf
#i2 #Hf elim (pr_after_pat_des … Hf … H) -f /2 width=2 by ex_intro/
qed-.
(*** after_fwd_istot_sn *)
lemma pr_after_des_ist_sn:
- â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f â\86\92 ð\9d\90\93â\9dªfâ\9d« â\86\92 ð\9d\90\93â\9dªf2â\9d«.
+ â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f â\86\92 ð\9d\90\93â\9d¨fâ\9d© â\86\92 ð\9d\90\93â\9d¨f2â\9d©.
#f2 #f1 #f #H #Hf #i1 elim (Hf i1) -Hf
#i #Hf elim (pr_after_pat_des … Hf … H) -f
#i2 #Hf1 #Hf2 lapply (pr_pat_increasing … Hf1) -f1
(*** after_at1_fwd *)
lemma pr_after_des_ist_pat:
- â\88\80f1,i1,i2. @â\9dªi1, f1â\9d« â\89\98 i2 â\86\92 â\88\80f2. ð\9d\90\93â\9dªf2â\9d« → ∀f. f2 ⊚ f1 ≘ f →
- â\88\83â\88\83i. @â\9dªi2, f2â\9d« â\89\98 i & @â\9dªi1, fâ\9d« ≘ i.
+ â\88\80f1,i1,i2. @â\9d¨i1, f1â\9d© â\89\98 i2 â\86\92 â\88\80f2. ð\9d\90\93â\9d¨f2â\9d© → ∀f. f2 ⊚ f1 ≘ f →
+ â\88\83â\88\83i. @â\9d¨i2, f2â\9d© â\89\98 i & @â\9d¨i1, fâ\9d© ≘ i.
#f1 #i1 #i2 #Hf1 #f2 #Hf2 #f #Hf elim (Hf2 i2) -Hf2
/3 width=8 by pr_after_des_pat, ex2_intro/
qed-.
lemma pr_after_des_ist_nat:
- â\88\80f1,l1,l2. @â\86\91â\9dªl1, f1â\9d« â\89\98 l2 â\86\92 â\88\80f2. ð\9d\90\93â\9dªf2â\9d« → ∀f. f2 ⊚ f1 ≘ f →
- â\88\83â\88\83l. @â\86\91â\9dªl2, f2â\9d« â\89\98 l & @â\86\91â\9dªl1, fâ\9d« ≘ l.
+ â\88\80f1,l1,l2. @â\86\91â\9d¨l1, f1â\9d© â\89\98 l2 â\86\92 â\88\80f2. ð\9d\90\93â\9d¨f2â\9d© → ∀f. f2 ⊚ f1 ≘ f →
+ â\88\83â\88\83l. @â\86\91â\9d¨l2, f2â\9d© â\89\98 l & @â\86\91â\9d¨l1, fâ\9d© ≘ l.
#f1 #l1 #l2 #H1 #f2 #H2 #f #Hf
elim (pr_after_des_ist_pat … H1 … H2 … Hf) -f1 -H2
/2 width=3 by ex2_intro/
(*** after_inv_istot *)
lemma pr_after_inv_ist:
- â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f â\86\92 ð\9d\90\93â\9dªfâ\9d« â\86\92 â\88§â\88§ ð\9d\90\93â\9dªf2â\9d« & ð\9d\90\93â\9dªf1â\9d«.
+ â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f â\86\92 ð\9d\90\93â\9d¨fâ\9d© â\86\92 â\88§â\88§ ð\9d\90\93â\9d¨f2â\9d© & ð\9d\90\93â\9d¨f1â\9d©.
/3 width=4 by pr_after_des_ist_sn, pr_after_des_ist_dx, conj/ qed-.
(*** after_fwd_isid_sn *)
lemma pr_after_des_ist_eq_sn:
- â\88\80f2,f1,f. ð\9d\90\93â\9dªfâ\9d« â\86\92 f2 â\8a\9a f1 â\89\98 f â\86\92 f1 â\89¡ f â\86\92 ð\9d\90\88â\9dªf2â\9d«.
+ â\88\80f2,f1,f. ð\9d\90\93â\9d¨fâ\9d© â\86\92 f2 â\8a\9a f1 â\89\98 f â\86\92 f1 â\89¡ f â\86\92 ð\9d\90\88â\9d¨f2â\9d©.
#f2 #f1 #f #H #Hf elim (pr_after_inv_ist … Hf H) -H
#Hf2 #Hf1 #H @pr_isi_pat_total // -Hf2
#i2 #i #Hf2 elim (Hf1 i2) -Hf1
(*** after_fwd_isid_dx *)
lemma pr_after_des_ist_eq_dx:
- â\88\80f2,f1,f. ð\9d\90\93â\9dªfâ\9d« â\86\92 f2 â\8a\9a f1 â\89\98 f â\86\92 f2 â\89¡ f â\86\92 ð\9d\90\88â\9dªf1â\9d«.
+ â\88\80f2,f1,f. ð\9d\90\93â\9d¨fâ\9d© â\86\92 f2 â\8a\9a f1 â\89\98 f â\86\92 f2 â\89¡ f â\86\92 ð\9d\90\88â\9d¨f1â\9d©.
#f2 #f1 #f #H #Hf elim (pr_after_inv_ist … Hf H) -H
#Hf2 #Hf1 #H2 @pr_isi_pat_total // -Hf1
#i1 #i2 #Hi12 elim (pr_after_des_ist_pat … Hi12 … Hf) -f1
(*** after_isid_isuni *)
lemma pr_after_isu_isi_next:
- â\88\80f1,f2. ð\9d\90\88â\9dªf2â\9d« â\86\92 ð\9d\90\94â\9dªf1â\9d« → f1 ⊚ ↑f2 ≘ ↑f1.
+ â\88\80f1,f2. ð\9d\90\88â\9d¨f2â\9d© â\86\92 ð\9d\90\94â\9d¨f1â\9d© → f1 ⊚ ↑f2 ≘ ↑f1.
#f1 #f2 #Hf2 #H
elim (pr_isu_inv_uni … H) -H #h #H
/5 width=7 by pr_after_uni_isi_next, pr_after_eq_repl_back, pr_after_eq_repl_back_sn, pr_eq_next/
(*** after_uni_next2 *)
lemma pr_after_isu_next_sn:
- â\88\80f2. ð\9d\90\94â\9dªf2â\9d« → ∀f1,f. ↑f2 ⊚ f1 ≘ f → f2 ⊚ ↑f1 ≘ f.
+ â\88\80f2. ð\9d\90\94â\9d¨f2â\9d© → ∀f1,f. ↑f2 ⊚ f1 ≘ f → f2 ⊚ ↑f1 ≘ f.
#f2 #H #f1 #f #Hf
elim (pr_isu_inv_uni … H) -H #h #H
/5 width=7 by pr_after_uni_next_sn, pr_after_eq_repl_fwd_sn, pr_after_eq_repl_back_sn, pr_eq_next/
(* Destructions with pr_nat *************************************************)
lemma pr_after_nat_des (l) (l1):
- â\88\80f. @â\86\91â\9dªl1, fâ\9d« ≘ l → ∀f2,f1. f2 ⊚ f1 ≘ f →
- â\88\83â\88\83l2. @â\86\91â\9dªl1, f1â\9d« â\89\98 l2 & @â\86\91â\9dªl2, f2â\9d« ≘ l.
+ â\88\80f. @â\86\91â\9d¨l1, fâ\9d© ≘ l → ∀f2,f1. f2 ⊚ f1 ≘ f →
+ â\88\83â\88\83l2. @â\86\91â\9d¨l1, f1â\9d© â\89\98 l2 & @â\86\91â\9d¨l2, f2â\9d© ≘ l.
#l #l1 #f #H1 #f2 #f1 #Hf
elim (pr_after_pat_des … H1 … Hf) -f #i2 #H1 #H2
/2 width=3 by ex2_intro/
qed-.
lemma pr_after_des_nat (l) (l2) (l1):
- â\88\80f1,f2. @â\86\91â\9dªl1, f1â\9d« â\89\98 l2 â\86\92 @â\86\91â\9dªl2, f2â\9d« ≘ l →
- â\88\80f. f2 â\8a\9a f1 â\89\98 f â\86\92 @â\86\91â\9dªl1, fâ\9d« ≘ l.
+ â\88\80f1,f2. @â\86\91â\9d¨l1, f1â\9d© â\89\98 l2 â\86\92 @â\86\91â\9d¨l2, f2â\9d© ≘ l →
+ â\88\80f. f2 â\8a\9a f1 â\89\98 f â\86\92 @â\86\91â\9d¨l1, fâ\9d© ≘ l.
/2 width=6 by pr_after_des_pat/ qed-.
lemma pr_after_des_nat_sn (l1) (l):
- â\88\80f. @â\86\91â\9dªl1, fâ\9d« â\89\98 l â\86\92 â\88\80f1,l2. @â\86\91â\9dªl1, f1â\9d« ≘ l2 →
- â\88\80f2. f2 â\8a\9a f1 â\89\98 f â\86\92 @â\86\91â\9dªl2, f2â\9d« ≘ l.
+ â\88\80f. @â\86\91â\9d¨l1, fâ\9d© â\89\98 l â\86\92 â\88\80f1,l2. @â\86\91â\9d¨l1, f1â\9d© ≘ l2 →
+ â\88\80f2. f2 â\8a\9a f1 â\89\98 f â\86\92 @â\86\91â\9d¨l2, f2â\9d© ≘ l.
/2 width=6 by pr_after_des_pat_sn/ qed-.
lemma pr_after_des_nat_dx (l) (l2) (l1):
- â\88\80f,f2. @â\86\91â\9dªl1, fâ\9d« â\89\98 l â\86\92 @â\86\91â\9dªl2, f2â\9d« ≘ l →
- â\88\80f1. f2 â\8a\9a f1 â\89\98 f â\86\92 @â\86\91â\9dªl1, f1â\9d« ≘ l2.
+ â\88\80f,f2. @â\86\91â\9d¨l1, fâ\9d© â\89\98 l â\86\92 @â\86\91â\9d¨l2, f2â\9d© ≘ l →
+ â\88\80f1. f2 â\8a\9a f1 â\89\98 f â\86\92 @â\86\91â\9d¨l1, f1â\9d© ≘ l2.
/2 width=6 by pr_after_des_pat_dx/ qed-.
(*** after_uni_dx *)
lemma pr_after_nat_uni (l2) (l1):
- â\88\80f2. @â\86\91â\9dªl1, f2â\9d« ≘ l2 →
+ â\88\80f2. @â\86\91â\9d¨l1, f2â\9d© ≘ l2 →
∀f. f2 ⊚ 𝐮❨l1❩ ≘ f → 𝐮❨l2❩ ⊚ ⫰*[l2] f2 ≘ f.
#l2 @(nat_ind_succ … l2) -l2
[ #l1 #f2 #Hf2 #f #Hf
(*** after_uni_sn *)
lemma pr_nat_after_uni_tls (l2) (l1):
- â\88\80f2. @â\86\91â\9dªl1, f2â\9d« ≘ l2 →
+ â\88\80f2. @â\86\91â\9d¨l1, f2â\9d© ≘ l2 →
∀f. 𝐮❨l2❩ ⊚ ⫰*[l2] f2 ≘ f → f2 ⊚ 𝐮❨l1❩ ≘ f.
#l2 @(nat_ind_succ … l2) -l2
[ #l1 #f2 #Hf2 #f #Hf
(*** after_at_fwd *)
lemma pr_after_pat_des (i) (i1):
- â\88\80f. @â\9dªi1, fâ\9d« ≘ i → ∀f2,f1. f2 ⊚ f1 ≘ f →
- â\88\83â\88\83i2. @â\9dªi1, f1â\9d« â\89\98 i2 & @â\9dªi2, f2â\9d« ≘ i.
+ â\88\80f. @â\9d¨i1, fâ\9d© ≘ i → ∀f2,f1. f2 ⊚ f1 ≘ f →
+ â\88\83â\88\83i2. @â\9d¨i1, f1â\9d© â\89\98 i2 & @â\9d¨i2, f2â\9d© ≘ i.
#i elim i -i [2: #i #IH ] #i1 #f #Hf #f2 #f1 #Hf21
[ elim (pr_pat_inv_succ_dx … Hf) -Hf [1,3:* |*: // ]
[1: #g #j1 #Hg #H0 #H |2,4: #g #Hg #H ]
(*** after_fwd_at *)
lemma pr_after_des_pat (i) (i2) (i1):
- â\88\80f1,f2. @â\9dªi1, f1â\9d« â\89\98 i2 â\86\92 @â\9dªi2, f2â\9d« ≘ i →
- â\88\80f. f2 â\8a\9a f1 â\89\98 f â\86\92 @â\9dªi1, fâ\9d« ≘ i.
+ â\88\80f1,f2. @â\9d¨i1, f1â\9d© â\89\98 i2 â\86\92 @â\9d¨i2, f2â\9d© ≘ i →
+ â\88\80f. f2 â\8a\9a f1 â\89\98 f â\86\92 @â\9d¨i1, fâ\9d© ≘ i.
#i elim i -i [2: #i #IH ] #i2 #i1 #f1 #f2 #Hf1 #Hf2 #f #Hf
[ elim (pr_pat_inv_succ_dx … Hf2) -Hf2 [1,3: * |*: // ]
#g2 [ #j2 ] #Hg2 [ #H22 ] #H20
(*** after_fwd_at2 *)
lemma pr_after_des_pat_sn (i1) (i):
- â\88\80f. @â\9dªi1, fâ\9d« â\89\98 i â\86\92 â\88\80f1,i2. @â\9dªi1, f1â\9d« ≘ i2 →
- â\88\80f2. f2 â\8a\9a f1 â\89\98 f â\86\92 @â\9dªi2, f2â\9d« ≘ i.
+ â\88\80f. @â\9d¨i1, fâ\9d© â\89\98 i â\86\92 â\88\80f1,i2. @â\9d¨i1, f1â\9d© ≘ i2 →
+ â\88\80f2. f2 â\8a\9a f1 â\89\98 f â\86\92 @â\9d¨i2, f2â\9d© ≘ i.
#i1 #i #f #Hf #f1 #i2 #Hf1 #f2 #H elim (pr_after_pat_des … Hf … H) -f
#j1 #H #Hf2 <(pr_pat_mono … Hf1 … H) -i1 -i2 //
qed-.
(*** after_fwd_at1 *)
lemma pr_after_des_pat_dx (i) (i2) (i1):
- â\88\80f,f2. @â\9dªi1, fâ\9d« â\89\98 i â\86\92 @â\9dªi2, f2â\9d« ≘ i →
- â\88\80f1. f2 â\8a\9a f1 â\89\98 f â\86\92 @â\9dªi1, f1â\9d« ≘ i2.
+ â\88\80f,f2. @â\9d¨i1, fâ\9d© â\89\98 i â\86\92 @â\9d¨i2, f2â\9d© ≘ i →
+ â\88\80f1. f2 â\8a\9a f1 â\89\98 f â\86\92 @â\9d¨i1, f1â\9d© ≘ i2.
#i elim i -i [2: #i #IH ] #i2 #i1 #f #f2 #Hf #Hf2 #f1 #Hf1
[ elim (pr_pat_inv_succ_dx … Hf) -Hf [1,3: * |*: // ]
#g [ #j1 ] #Hg [ #H01 ] #H00
(* Note: this requires ↑ on first n *)
(*** after_tls *)
lemma pr_after_tls_sn_tls (n):
- â\88\80f1,f2,f. @â\9dªð\9d\9f\8f, f1â\9d« ≘ ↑n →
+ â\88\80f1,f2,f. @â\9d¨ð\9d\9f\8f, f1â\9d© ≘ ↑n →
f1 ⊚ f2 ≘ f → ⫰*[n]f1 ⊚ f2 ≘ ⫰*[n]f.
#n @(nat_ind_succ … n) -n //
#n #IH #f1 #f2 #f #Hf1 #Hf
(*** after_uni_succ_dx *)
lemma pr_after_pat_uni (i2) (i1):
- â\88\80f2. @â\9dªi1, f2â\9d« ≘ i2 →
+ â\88\80f2. @â\9d¨i1, f2â\9d© ≘ i2 →
∀f. f2 ⊚ 𝐮❨i1❩ ≘ f → 𝐮❨i2❩ ⊚ ⫰*[i2] f2 ≘ f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
(*** after_uni_succ_sn *)
lemma pr_pat_after_uni_tls (i2) (i1):
- â\88\80f2. @â\9dªi1, f2â\9d« ≘ i2 →
+ â\88\80f2. @â\9d¨i1, f2â\9d© ≘ i2 →
∀f. 𝐮❨i2❩ ⊚ ⫰*[i2] f2 ≘ f → f2 ⊚ 𝐮❨i1❩ ≘ f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
qed.
lemma pr_after_uni_isi_next (h1):
- â\88\80f2. ð\9d\90\88â\9dªf2â\9d« → 𝐮❨h1❩ ⊚ ↑f2 ≘ ↑𝐮❨h1❩.
+ â\88\80f2. ð\9d\90\88â\9d¨f2â\9d© → 𝐮❨h1❩ ⊚ ↑f2 ≘ ↑𝐮❨h1❩.
#h1 @(nat_ind_succ … h1) -h1
/5 width=7 by pr_after_isi_dx, pr_after_eq_repl_back_sn, pr_after_next, pr_after_push, pr_isi_inv_eq_push/
qed.
(*** H_coafter_inj *)
definition H_pr_coafter_inj: predicate pr_map ≝
- λf1. ð\9d\90\93â\9dªf1â\9d« →
+ λf1. ð\9d\90\93â\9d¨f1â\9d© →
∀f,f21,f22. f1 ~⊚ f21 ≘ f → f1 ~⊚ f22 ≘ f → f21 ≡ f22.
(* Main destructions with pr_ist ********************************************)
(*** coafter_inj_O_aux *)
corec fact pr_coafter_inj_unit_aux:
- â\88\80f1. @â\9dªð\9d\9f\8f, f1â\9d« ≘ 𝟏 → H_pr_coafter_inj f1.
+ â\88\80f1. @â\9d¨ð\9d\9f\8f, f1â\9d© ≘ 𝟏 → H_pr_coafter_inj f1.
#f1 #H1f1 #H2f1 #f #f21 #f22 #H1f #H2f
cases (pr_pat_inv_unit_bi … H1f1) -H1f1 [ |*: // ] #g1 #H1
lapply (pr_ist_inv_push … H2f1 … H1) -H2f1 #H2g1
(*** coafter_inj_aux *)
fact pr_coafter_inj_aux:
- (â\88\80f1. @â\9dªð\9d\9f\8f, f1â\9d« ≘ 𝟏 → H_pr_coafter_inj f1) →
- â\88\80i2,f1. @â\9dªð\9d\9f\8f, f1â\9d« ≘ i2 → H_pr_coafter_inj f1.
+ (â\88\80f1. @â\9d¨ð\9d\9f\8f, f1â\9d© ≘ 𝟏 → H_pr_coafter_inj f1) →
+ â\88\80i2,f1. @â\9d¨ð\9d\9f\8f, f1â\9d© ≘ i2 → H_pr_coafter_inj f1.
#H0 #i2 elim i2 -i2 /2 width=1 by/ -H0
#i2 #IH #f1 #H1f1 #H2f1 #f #f21 #f22 #H1f #H2f
elim (pr_pat_inv_unit_succ … H1f1) -H1f1 [ |*: // ] #g1 #H1g1 #H1
(*** coafter_isid_sn *)
corec lemma pr_coafter_isi_sn:
- â\88\80f1. ð\9d\90\88â\9dªf1â\9d« → ∀f2. f1 ~⊚ f2 ≘ f2.
+ â\88\80f1. ð\9d\90\88â\9d¨f1â\9d© → ∀f2. f1 ~⊚ f2 ≘ f2.
#f1 * -f1 #f1 #g1 #Hf1 #H1 #f2
cases (pr_map_split_tl f2) #H2
/3 width=7 by pr_coafter_push, pr_coafter_refl/
(*** coafter_isid_dx *)
corec lemma pr_coafter_isi_dx:
- â\88\80f2,f. ð\9d\90\88â\9dªf2â\9d« â\86\92 ð\9d\90\88â\9dªfâ\9d« → ∀f1. f1 ~⊚ f2 ≘ f.
+ â\88\80f2,f. ð\9d\90\88â\9d¨f2â\9d© â\86\92 ð\9d\90\88â\9d¨fâ\9d© → ∀f1. f1 ~⊚ f2 ≘ f.
#f2 #f * -f2 #f2 #g2 #Hf2 #H2 * -f #f #g #Hf #H #f1
cases (pr_map_split_tl f1) #H1
[ /3 width=7 by pr_coafter_refl/
(*** coafter_isid_inv_sn *)
lemma pr_coafter_isi_inv_sn:
- â\88\80f1,f2,f. f1 ~â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â\9dªf1â\9d« → f2 ≡ f.
+ â\88\80f1,f2,f. f1 ~â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â\9d¨f1â\9d© → f2 ≡ f.
/3 width=6 by pr_coafter_isi_sn, pr_coafter_mono/ qed-.
(*** coafter_isid_inv_dx *)
lemma pr_coafter_isi_inv_dx:
- â\88\80f1,f2,f. f1 ~â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â\9dªf2â\9d« â\86\92 ð\9d\90\88â\9dªfâ\9d«.
+ â\88\80f1,f2,f. f1 ~â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â\9d¨f2â\9d© â\86\92 ð\9d\90\88â\9d¨fâ\9d©.
/4 width=4 by pr_eq_id_isi, pr_coafter_isi_dx, pr_coafter_mono/ qed-.
(*** H_coafter_isfin2_fwd *)
definition H_pr_coafter_des_ist_isf: predicate pr_map ≝
- λf1. â\88\80f2. ð\9d\90\85â\9dªf2â\9d« â\86\92 ð\9d\90\93â\9dªf1â\9d« â\86\92 â\88\80f. f1 ~â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\85â\9dªfâ\9d«.
+ λf1. â\88\80f2. ð\9d\90\85â\9d¨f2â\9d© â\86\92 ð\9d\90\93â\9d¨f1â\9d© â\86\92 â\88\80f. f1 ~â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\85â\9d¨fâ\9d©.
(* Destructions with pr_ist and pr_isf **************************************)
(*** coafter_isfin2_fwd_O_aux *)
fact pr_coafter_des_ist_isf_unit_aux:
- â\88\80f1. @â\9dªð\9d\9f\8f, f1â\9d« ≘ 𝟏 → H_pr_coafter_des_ist_isf f1.
+ â\88\80f1. @â\9d¨ð\9d\9f\8f, f1â\9d© ≘ 𝟏 → H_pr_coafter_des_ist_isf f1.
#f1 #Hf1 #f2 #H
generalize in match Hf1; generalize in match f1; -f1
@(pr_isf_ind … H) -f2
(*** coafter_isfin2_fwd_aux *)
fact pr_coafter_des_ist_isf_aux:
- (â\88\80f1. @â\9dªð\9d\9f\8f, f1â\9d« ≘ 𝟏 → H_pr_coafter_des_ist_isf f1) →
- â\88\80i2,f1. @â\9dªð\9d\9f\8f, f1â\9d« ≘ i2 → H_pr_coafter_des_ist_isf f1.
+ (â\88\80f1. @â\9d¨ð\9d\9f\8f, f1â\9d© ≘ 𝟏 → H_pr_coafter_des_ist_isf f1) →
+ â\88\80i2,f1. @â\9d¨ð\9d\9f\8f, f1â\9d© ≘ i2 → H_pr_coafter_des_ist_isf f1.
#H0 #i2 elim i2 -i2 /2 width=1 by/ -H0
#i2 #IH #f1 #H1f1 #f2 #Hf2 #H2f1 #f #Hf
elim (pr_pat_inv_unit_succ … H1f1) -H1f1 [ |*: // ] #g1 #Hg1 #H1
(*** H_coafter_fwd_isid2 *)
definition H_pr_coafter_des_ist_sn_isi: predicate pr_map ≝
- λf1. â\88\80f2,f. f1 ~â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\93â\9dªf1â\9d« â\86\92 ð\9d\90\88â\9dªfâ\9d« â\86\92 ð\9d\90\88â\9dªf2â\9d«.
+ λf1. â\88\80f2,f. f1 ~â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\93â\9d¨f1â\9d© â\86\92 ð\9d\90\88â\9d¨fâ\9d© â\86\92 ð\9d\90\88â\9d¨f2â\9d©.
(* Destructions with pr_ist and pr_isi **************************************)
(*** coafter_fwd_isid2_O_aux *)
corec fact pr_coafter_des_ist_sn_isi_unit_aux:
- â\88\80f1. @â\9dªð\9d\9f\8f, f1â\9d« ≘ 𝟏 → H_pr_coafter_des_ist_sn_isi f1.
+ â\88\80f1. @â\9d¨ð\9d\9f\8f, f1â\9d© ≘ 𝟏 → H_pr_coafter_des_ist_sn_isi f1.
#f1 #H1f1 #f2 #f #H #H2f1 #Hf
cases (pr_pat_inv_unit_bi … H1f1) -H1f1 [ |*: // ] #g1 #H1
lapply (pr_ist_inv_push … H2f1 … H1) -H2f1 #H2g1
(*** coafter_fwd_isid2_aux *)
fact pr_coafter_des_ist_sn_isi_aux:
- (â\88\80f1. @â\9dªð\9d\9f\8f, f1â\9d« ≘ 𝟏 → H_pr_coafter_des_ist_sn_isi f1) →
- â\88\80i2,f1. @â\9dªð\9d\9f\8f, f1â\9d« ≘ i2 → H_pr_coafter_des_ist_sn_isi f1.
+ (â\88\80f1. @â\9d¨ð\9d\9f\8f, f1â\9d© ≘ 𝟏 → H_pr_coafter_des_ist_sn_isi f1) →
+ â\88\80i2,f1. @â\9d¨ð\9d\9f\8f, f1â\9d© ≘ i2 → H_pr_coafter_des_ist_sn_isi f1.
#H0 #i2 elim i2 -i2 /2 width=1 by/ -H0
#i2 #IH #f1 #H1f1 #f2 #f #H #H2f1 #Hf
elim (pr_pat_inv_unit_succ … H1f1) -H1f1 [ |*: // ] #g1 #Hg1 #H1
(*** coafter_isuni_isid *)
lemma pr_coafter_isu_isi:
- â\88\80f2. ð\9d\90\88â\9dªf2â\9d« â\86\92 â\88\80f1. ð\9d\90\94â\9dªf1â\9d« → f1 ~⊚ f2 ≘ f2.
+ â\88\80f2. ð\9d\90\88â\9d¨f2â\9d© â\86\92 â\88\80f1. ð\9d\90\94â\9d¨f1â\9d© → f1 ~⊚ f2 ≘ f2.
#f #Hf #g #H
elim (pr_isu_inv_uni … H) -H #n #H
/5 width=4 by pr_isi_pushs, pr_isi_inv_eq_repl, pr_coafter_eq_repl_back, pr_coafter_eq_repl_back_sn/
(*** coafter_tls *)
lemma pr_coafter_tls_bi_tls (n2) (n1):
- â\88\80f1,f2,f. @â\86\91â\9dªn1, f1â\9d« ≘ n2 →
+ â\88\80f1,f2,f. @â\86\91â\9d¨n1, f1â\9d© ≘ n2 →
f1 ~⊚ f2 ≘ f → ⫰*[n2]f1 ~⊚ ⫰*[n1]f2 ≘ ⫰*[n2]f.
#n2 @(nat_ind_succ … n2) -n2 [ #n1 | #n2 #IH * [| #n1 ] ] #f1 #f2 #f #Hf1 #Hf
[ elim (pr_nat_inv_zero_dx … Hf1) -Hf1 [ |*: // ] #g1 #Hg1 #H1 destruct //
(*** coafter_tls_O *)
lemma pr_coafter_tls_sn_tls:
- â\88\80n,f1,f2,f. @â\86\91â\9dªð\9d\9f\8e, f1â\9d« ≘ n →
+ â\88\80n,f1,f2,f. @â\86\91â\9d¨ð\9d\9f\8e, f1â\9d© ≘ n →
f1 ~⊚ f2 ≘ f → ⫰*[n]f1 ~⊚ f2 ≘ ⫰*[n]f.
/2 width=1 by pr_coafter_tls_bi_tls/ qed.
(*** coafter_fwd_pushs *)
lemma pr_coafter_des_pushs_dx (n) (m):
- â\88\80g2,f1,g. g2 ~â\8a\9a ⫯*[m]f1 â\89\98 g â\86\92 @â\86\91â\9dªm, g2â\9d« ≘ n →
+ â\88\80g2,f1,g. g2 ~â\8a\9a ⫯*[m]f1 â\89\98 g â\86\92 @â\86\91â\9d¨m, g2â\9d© ≘ n →
∃∃f. ⫰*[n]g2 ~⊚ f1 ≘ f & ⫯*[n] f = g.
#n @(nat_ind_succ … n) -n
[ #m #g2 #f1 #g #Hg #H
(*** coafter_tls_succ *)
lemma pr_coafter_tls_tl_tls:
∀g2,g1,g. g2 ~⊚ g1 ≘ g →
- â\88\80j. @â\9dªð\9d\9f\8f, g2â\9d« ≘ j → ⫰*[j]g2 ~⊚ ⫰g1 ≘ ⫰*[j]g.
+ â\88\80j. @â\9d¨ð\9d\9f\8f, g2â\9d© ≘ j → ⫰*[j]g2 ~⊚ ⫰g1 ≘ ⫰*[j]g.
#g2 #g1 #g #Hg #j #Hg2
lapply (pr_nat_pred_bi … Hg2) -Hg2 #Hg2
lapply (pr_coafter_tls_bi_tls … Hg2 … Hg) -Hg #Hg
(* Note: parked for now
lemma coafter_fwd_xpx_pushs:
- â\88\80g2,f1,g,i,j. @â\9dªi, g2â\9d« ≘ j → g2 ~⊚ ⫯*[i]⫯f1 ≘ g →
+ â\88\80g2,f1,g,i,j. @â\9d¨i, g2â\9d© ≘ j → g2 ~⊚ ⫯*[i]⫯f1 ≘ g →
∃∃f. ⫰*[↑j]g2 ~⊚ f1 ≘ f & ⫯*[j]⫯f = g.
#g2 #g1 #g #i #j #Hg2 <pushs_xn #Hg(coafter_fwd_pushs … Hg Hg2) #f #H0 destruct
lapply (coafter_tls … Hg2 Hg) -Hg <tls_pushs <tls_pushs #Hf
qed-.
lemma coafter_fwd_xnx_pushs:
- â\88\80g2,f1,g,i,j. @â\9dªi, g2â\9d« ≘ j → g2 ~⊚ ⫯*[i]↑f1 ≘ g →
+ â\88\80g2,f1,g,i,j. @â\9d¨i, g2â\9d© ≘ j → g2 ~⊚ ⫯*[i]↑f1 ≘ g →
∃∃f. ⫰*[↑j]g2 ~⊚ f1 ≘ f & ⫯*[j] ↑f = g.
#g2 #g1 #g #i #j #Hg2 #Hg
elim (coafter_fwd_pushs … Hg Hg2) #f #H0 destruct
(*** fcla *)
inductive pr_fcla: relation2 pr_map nat ≝
(*** fcla_isid *)
-| pr_fcla_isi (f): ð\9d\90\88â\9dªfâ\9d« → pr_fcla f (𝟎)
+| pr_fcla_isi (f): ð\9d\90\88â\9d¨fâ\9d© → pr_fcla f (𝟎)
(*** fcla_push *)
| pr_fcla_push (f) (n): pr_fcla f n → pr_fcla (⫯f) n
(*** fcla_next *)
(* Basic inversions *********************************************************)
(*** fcla_inv_px *)
-lemma pr_fcla_inv_push (g) (m): ð\9d\90\82â\9dªgâ\9d« â\89\98 m â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\82â\9dªfâ\9d« ≘ m.
+lemma pr_fcla_inv_push (g) (m): ð\9d\90\82â\9d¨gâ\9d© â\89\98 m â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\82â\9d¨fâ\9d© ≘ m.
#g #m * -g -m
[ /3 width=3 by pr_fcla_isi, pr_isi_inv_push/
| #g #m #Hg #f #H >(eq_inv_pr_push_bi … H) -f //
qed-.
(*** fcla_inv_nx *)
-lemma pr_fcla_inv_next (g) (m): ð\9d\90\82â\9dªgâ\9d« â\89\98 m â\86\92 â\88\80f. â\86\91f = g â\86\92 â\88\83â\88\83n. ð\9d\90\82â\9dªfâ\9d« ≘ n & ↑n = m.
+lemma pr_fcla_inv_next (g) (m): ð\9d\90\82â\9d¨gâ\9d© â\89\98 m â\86\92 â\88\80f. â\86\91f = g â\86\92 â\88\83â\88\83n. ð\9d\90\82â\9d¨fâ\9d© ≘ n & ↑n = m.
#g #m * -g -m
[ #g #Hg #f #H destruct
elim (pr_isi_inv_next … Hg) -Hg //
(* Advanced inversions ******************************************************)
(*** cla_inv_nn *)
-lemma pr_cla_inv_next_succ (g) (m): ð\9d\90\82â\9dªgâ\9d« â\89\98 m â\86\92 â\88\80f,n. â\86\91f = g â\86\92 â\86\91n = m â\86\92 ð\9d\90\82â\9dªfâ\9d« ≘ n.
+lemma pr_cla_inv_next_succ (g) (m): ð\9d\90\82â\9d¨gâ\9d© â\89\98 m â\86\92 â\88\80f,n. â\86\91f = g â\86\92 â\86\91n = m â\86\92 ð\9d\90\82â\9d¨fâ\9d© ≘ n.
#g #m #H #f #n #H1 #H2 elim (pr_fcla_inv_next … H … H1) -g
#x #Hf #H destruct <(eq_inv_nsucc_bi … H) -n //
qed-.
(*** cla_inv_np *)
-lemma pr_cla_inv_next_zero (g) (m): ð\9d\90\82â\9dªgâ\9d« ≘ m → ∀f. ↑f = g → 𝟎 = m → ⊥.
+lemma pr_cla_inv_next_zero (g) (m): ð\9d\90\82â\9d¨gâ\9d© ≘ m → ∀f. ↑f = g → 𝟎 = m → ⊥.
#g #m #H #f #H1 elim (pr_fcla_inv_next … H … H1) -g
#x #_ #H1 #H2 destruct /2 width=2 by eq_inv_zero_nsucc/
qed-.
(*** fcla_inv_xp *)
-lemma pr_fcla_inv_zero (g) (m): ð\9d\90\82â\9dªgâ\9d« â\89\98 m â\86\92 ð\9d\9f\8e = m â\86\92 ð\9d\90\88â\9dªgâ\9d«.
+lemma pr_fcla_inv_zero (g) (m): ð\9d\90\82â\9d¨gâ\9d© â\89\98 m â\86\92 ð\9d\9f\8e = m â\86\92 ð\9d\90\88â\9d¨gâ\9d©.
#g #m #H elim H -g -m /3 width=3 by pr_isi_push/
#g #m #_ #_ #H destruct elim (eq_inv_zero_nsucc … H)
qed-.
(*** fcla_inv_isid *)
-lemma pr_fcla_inv_isi (g) (m): ð\9d\90\82â\9dªgâ\9d« â\89\98 m â\86\92 ð\9d\90\88â\9dªgâ\9d« → 𝟎 = m.
+lemma pr_fcla_inv_isi (g) (m): ð\9d\90\82â\9d¨gâ\9d© â\89\98 m â\86\92 ð\9d\90\88â\9d¨gâ\9d© → 𝟎 = m.
#f #n #H elim H -f -n /3 width=3 by pr_isi_inv_push/
#f #n #_ #_ #H elim (pr_isi_inv_next … H) -H //
qed-.
(*** fcla_eq_repl_back *)
lemma pr_fcla_eq_repl_back (n):
- pr_eq_repl_back â\80¦ (λf. ð\9d\90\82â\9dªfâ\9d« ≘ n).
+ pr_eq_repl_back â\80¦ (λf. ð\9d\90\82â\9d¨fâ\9d© ≘ n).
#n #f1 #H elim H -f1 -n /3 width=3 by pr_fcla_isi, pr_isi_eq_repl_back/
#f1 #n #_ #IH #g2 #H [ elim (pr_eq_inv_push_sn … H) | elim (pr_eq_inv_next_sn … H) ] -H
/3 width=3 by pr_fcla_push, pr_fcla_next/
(*** fcla_eq_repl_fwd *)
lemma fcla_eq_repl_fwd (n):
- pr_eq_repl_fwd â\80¦ (λf. ð\9d\90\82â\9dªfâ\9d« ≘ n).
+ pr_eq_repl_fwd â\80¦ (λf. ð\9d\90\82â\9d¨fâ\9d© ≘ n).
#n @pr_eq_repl_sym /2 width=3 by pr_fcla_eq_repl_back/
qed-.
(*** fcla_mono *)
theorem pr_fcla_mono (f):
- â\88\80n1. ð\9d\90\82â\9dªfâ\9d« â\89\98 n1 â\86\92 â\88\80n2. ð\9d\90\82â\9dªfâ\9d« ≘ n2 → n1 = n2.
+ â\88\80n1. ð\9d\90\82â\9d¨fâ\9d© â\89\98 n1 â\86\92 â\88\80n2. ð\9d\90\82â\9d¨fâ\9d© ≘ n2 → n1 = n2.
#f #n #H elim H -f -n
[ /2 width=3 by pr_fcla_inv_isi/
| /3 width=3 by pr_fcla_inv_push/
(* Constructions with pr_uni ************************************************)
(*** fcla_uni *)
-lemma pr_fcla_uni (n): ð\9d\90\82â\9dªð\9d\90®â\9d¨nâ\9d©â\9d« ≘ n.
+lemma pr_fcla_uni (n): ð\9d\90\82â\9d¨ð\9d\90®â\9d¨nâ\9d©â\9d© ≘ n.
#n @(nat_ind_succ … n) -n
/2 width=1 by pr_fcla_isi, pr_fcla_next/
qed.
(* Basic inversions *********************************************************)
(*** isdiv_inv_gen *)
-lemma pr_isd_inv_gen (g): ð\9d\9b\80â\9dªgâ\9d« â\86\92 â\88\83â\88\83f. ð\9d\9b\80â\9dªfâ\9d« & ↑f = g.
+lemma pr_isd_inv_gen (g): ð\9d\9b\80â\9d¨gâ\9d© â\86\92 â\88\83â\88\83f. ð\9d\9b\80â\9d¨fâ\9d© & ↑f = g.
#g * -g
#f #g #Hf * /2 width=3 by ex2_intro/
qed-.
(* Advanced inversions ******************************************************)
(*** isdiv_inv_next *)
-lemma pr_isd_inv_next (g): ð\9d\9b\80â\9dªgâ\9d« â\86\92 â\88\80f. â\86\91f = g â\86\92 ð\9d\9b\80â\9dªfâ\9d«.
+lemma pr_isd_inv_next (g): ð\9d\9b\80â\9d¨gâ\9d© â\86\92 â\88\80f. â\86\91f = g â\86\92 ð\9d\9b\80â\9d¨fâ\9d©.
#g #H elim (pr_isd_inv_gen … H) -H
#f #Hf * -g #g #H >(eq_inv_pr_next_bi … H) -H //
qed-.
(*** isdiv_inv_push *)
-lemma pr_isd_inv_push (g): ð\9d\9b\80â\9dªgâ\9d« → ∀f. ⫯f = g → ⊥.
+lemma pr_isd_inv_push (g): ð\9d\9b\80â\9d¨gâ\9d© → ∀f. ⫯f = g → ⊥.
#g #H elim (pr_isd_inv_gen … H) -H
#f #Hf * -g #g #H elim (eq_inv_pr_push_next … H)
qed-.
(* Main inversions with pr_eq ***********************************************)
(*** isdiv_inv_eq_repl *)
-corec theorem pr_isd_inv_eq_repl (g1) (g2): ð\9d\9b\80â\9dªg1â\9d« â\86\92 ð\9d\9b\80â\9dªg2â\9d« → g1 ≡ g2.
+corec theorem pr_isd_inv_eq_repl (g1) (g2): ð\9d\9b\80â\9d¨g1â\9d© â\86\92 ð\9d\9b\80â\9d¨g2â\9d© → g1 ≡ g2.
#H1 #H2
cases (pr_isd_inv_gen … H1) -H1
cases (pr_isd_inv_gen … H2) -H2
(* Alternative definition with pr_eq ****************************************)
(*** eq_next_isdiv *)
-corec lemma pr_eq_next_isd (f): â\86\91f â\89¡ f â\86\92 ð\9d\9b\80â\9dªfâ\9d«.
+corec lemma pr_eq_next_isd (f): â\86\91f â\89¡ f â\86\92 ð\9d\9b\80â\9d¨fâ\9d©.
#H cases (pr_eq_inv_next_sn … H) -H
/4 width=3 by pr_isd_next, pr_eq_trans/
qed.
(*** eq_next_inv_isdiv *)
-corec lemma pr_eq_next_inv_isd (g): ð\9d\9b\80â\9dªgâ\9d« → ↑g ≡ g.
+corec lemma pr_eq_next_inv_isd (g): ð\9d\9b\80â\9d¨gâ\9d© → ↑g ≡ g.
* -g #f #g #Hf *
/3 width=5 by pr_eq_next/
qed-.
(* Constructions with pr_nexts **********************************************)
(*** isdiv_nexts *)
-lemma pr_isd_nexts (n) (f): ð\9d\9b\80â\9dªfâ\9d« â\86\92 ð\9d\9b\80â\9dªâ\86\91*[n]fâ\9d«.
+lemma pr_isd_nexts (n) (f): ð\9d\9b\80â\9d¨fâ\9d© â\86\92 ð\9d\9b\80â\9d¨â\86\91*[n]fâ\9d©.
#n @(nat_ind_succ … n) -n /3 width=3 by pr_isd_next/
qed.
(* Inversions with pr_nexts *************************************************)
(*** isdiv_inv_nexts *)
-lemma pr_isd_inv_nexts (n) (g): ð\9d\9b\80â\9dªâ\86\91*[n]gâ\9d« â\86\92 ð\9d\9b\80â\9dªgâ\9d«.
+lemma pr_isd_inv_nexts (n) (g): ð\9d\9b\80â\9d¨â\86\91*[n]gâ\9d© â\86\92 ð\9d\9b\80â\9d¨gâ\9d©.
#n @(nat_ind_succ … n) -n /3 width=3 by pr_isd_inv_next/
qed-.
(* Constructions with pr_tl *************************************************)
(*** isdiv_tl *)
-lemma pr_isd_tl (f): ð\9d\9b\80â\9dªfâ\9d« â\86\92 ð\9d\9b\80â\9dªâ«°fâ\9d«.
+lemma pr_isd_tl (f): ð\9d\9b\80â\9d¨fâ\9d© â\86\92 ð\9d\9b\80â\9d¨â«°fâ\9d©.
#f cases (pr_map_split_tl f) * #H
[ elim (pr_isd_inv_push … H) -H //
| /2 width=3 by pr_isd_inv_next/
(* Constructions with pr_tls ************************************************)
(*** isdiv_tls *)
-lemma pr_isd_tls (n) (g): ð\9d\9b\80â\9dªgâ\9d« â\86\92 ð\9d\9b\80â\9dªâ«°*[n]gâ\9d«.
+lemma pr_isd_tls (n) (g): ð\9d\9b\80â\9d¨gâ\9d© â\86\92 ð\9d\9b\80â\9d¨â«°*[n]gâ\9d©.
#n @(nat_ind_succ … n) -n /3 width=1 by pr_isd_tl/
qed.
(*** isfin *)
definition pr_isf: predicate pr_map ≝
- λf. â\88\83n. ð\9d\90\82â\9dªfâ\9d« ≘ n.
+ λf. â\88\83n. ð\9d\90\82â\9d¨fâ\9d© ≘ n.
interpretation
"finite colength condition (partial relocation maps)"
(*** isfin_ind *)
lemma pr_isf_ind (Q:predicate …):
- (â\88\80f. ð\9d\90\88â\9dªfâ\9d« → Q f) →
- (â\88\80f. ð\9d\90\85â\9dªfâ\9d« → Q f → Q (⫯f)) →
- (â\88\80f. ð\9d\90\85â\9dªfâ\9d« → Q f → Q (↑f)) →
- â\88\80f. ð\9d\90\85â\9dªfâ\9d« → Q f.
+ (â\88\80f. ð\9d\90\88â\9d¨fâ\9d© → Q f) →
+ (â\88\80f. ð\9d\90\85â\9d¨fâ\9d© → Q f → Q (⫯f)) →
+ (â\88\80f. ð\9d\90\85â\9d¨fâ\9d© → Q f → Q (↑f)) →
+ â\88\80f. ð\9d\90\85â\9d¨fâ\9d© → Q f.
#Q #IH1 #IH2 #IH3 #f #H elim H -H
#n #H elim H -f -n /3 width=2 by ex_intro/
qed-.
(* Basic inversions *********************************************************)
(*** isfin_inv_push *)
-lemma pr_isf_inv_push (g): ð\9d\90\85â\9dªgâ\9d« â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\85â\9dªfâ\9d«.
+lemma pr_isf_inv_push (g): ð\9d\90\85â\9d¨gâ\9d© â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\85â\9d¨fâ\9d©.
#g * /3 width=4 by pr_fcla_inv_push, ex_intro/
qed-.
(*** isfin_inv_next *)
-lemma pr_isf_inv_next (g): ð\9d\90\85â\9dªgâ\9d« â\86\92 â\88\80f. â\86\91f = g â\86\92 ð\9d\90\85â\9dªfâ\9d«.
+lemma pr_isf_inv_next (g): ð\9d\90\85â\9d¨gâ\9d© â\86\92 â\88\80f. â\86\91f = g â\86\92 ð\9d\90\85â\9d¨fâ\9d©.
#g * #n #H #f #H0 elim (pr_fcla_inv_next … H … H0) -g
/2 width=2 by ex_intro/
qed-.
(* Basic constructions ******************************************************)
(*** isfin_isid *)
-lemma pr_isf_isi (f): ð\9d\90\88â\9dªfâ\9d« â\86\92 ð\9d\90\85â\9dªfâ\9d«.
+lemma pr_isf_isi (f): ð\9d\90\88â\9d¨fâ\9d© â\86\92 ð\9d\90\85â\9d¨fâ\9d©.
/3 width=2 by pr_fcla_isi, ex_intro/ qed.
(*** isfin_push *)
-lemma pr_isf_push (f): ð\9d\90\85â\9dªfâ\9d« â\86\92 ð\9d\90\85â\9dªâ«¯fâ\9d«.
+lemma pr_isf_push (f): ð\9d\90\85â\9d¨fâ\9d© â\86\92 ð\9d\90\85â\9d¨â«¯fâ\9d©.
#f * /3 width=2 by pr_fcla_push, ex_intro/
qed.
(*** isfin_next *)
-lemma pr_isf_next (f): ð\9d\90\85â\9dªfâ\9d« â\86\92 ð\9d\90\85â\9dªâ\86\91fâ\9d«.
+lemma pr_isf_next (f): ð\9d\90\85â\9d¨fâ\9d© â\86\92 ð\9d\90\85â\9d¨â\86\91fâ\9d©.
#f * /3 width=2 by pr_fcla_next, ex_intro/
qed.
(* Constructions with pr_isu ************************************************)
(*** isuni_fwd_isfin *)
-lemma pr_isf_isu (f): ð\9d\90\94â\9dªfâ\9d« â\86\92 ð\9d\90\85â\9dªfâ\9d«.
+lemma pr_isf_isu (f): ð\9d\90\94â\9d¨fâ\9d© â\86\92 ð\9d\90\85â\9d¨fâ\9d©.
#f #H elim H -f
/3 width=1 by pr_isf_next, pr_isf_isi/
qed.
(* Constructions with pr_pushs **********************************************)
(*** isfin_pushs *)
-lemma pr_isf_pushs (n) (f): ð\9d\90\85â\9dªfâ\9d« â\86\92 ð\9d\90\85â\9dªâ«¯*[n]fâ\9d«.
+lemma pr_isf_pushs (n) (f): ð\9d\90\85â\9d¨fâ\9d© â\86\92 ð\9d\90\85â\9d¨â«¯*[n]fâ\9d©.
#n @(nat_ind_succ … n) -n /3 width=3 by pr_isf_push/
qed.
(* Inversions with pr_pushs *************************************************)
(*** isfin_inv_pushs *)
-lemma pr_isf_inv_pushs (n) (g): ð\9d\90\85â\9dªâ«¯*[n]gâ\9d« â\86\92 ð\9d\90\85â\9dªgâ\9d«.
+lemma pr_isf_inv_pushs (n) (g): ð\9d\90\85â\9d¨â«¯*[n]gâ\9d© â\86\92 ð\9d\90\85â\9d¨gâ\9d©.
#n @(nat_ind_succ … n) -n /3 width=3 by pr_isf_inv_push/
qed-.
(* Constructions with pr_tl *************************************************)
(*** isfin_tl *)
-lemma pr_isf_tl (f): ð\9d\90\85â\9dªfâ\9d« â\86\92 ð\9d\90\85â\9dªâ«°fâ\9d«.
+lemma pr_isf_tl (f): ð\9d\90\85â\9d¨fâ\9d© â\86\92 ð\9d\90\85â\9d¨â«°fâ\9d©.
#f elim (pr_map_split_tl f) * #Hf
/3 width=3 by pr_isf_inv_push, pr_isf_inv_next/
qed.
(* Inversions with pr_tl ****************************************************)
(*** isfin_inv_tl *)
-lemma pr_isf_inv_tl (g): ð\9d\90\85â\9dªâ«°gâ\9d« â\86\92 ð\9d\90\85â\9dªgâ\9d«.
+lemma pr_isf_inv_tl (g): ð\9d\90\85â\9d¨â«°gâ\9d© â\86\92 ð\9d\90\85â\9d¨gâ\9d©.
#f elim (pr_map_split_tl f) * #Hf
/2 width=1 by pr_isf_next, pr_isf_push/
qed-.
(* Constructions with pr_tls ************************************************)
-lemma pr_isf_tls (n) (f): ð\9d\90\85â\9dªfâ\9d« â\86\92 ð\9d\90\85â\9dªâ«°*[n]fâ\9d«.
+lemma pr_isf_tls (n) (f): ð\9d\90\85â\9d¨fâ\9d© â\86\92 ð\9d\90\85â\9d¨â«°*[n]fâ\9d©.
#n @(nat_ind_succ … n) -n /3 width=1 by pr_isf_tl/
qed.
(* Inversions with pr_tls ***************************************************)
(*** isfin_inv_tls *)
-lemma pr_isf_inv_tls (n) (g): ð\9d\90\85â\9dªâ«°*[n]gâ\9d« â\86\92 ð\9d\90\85â\9dªgâ\9d«.
+lemma pr_isf_inv_tls (n) (g): ð\9d\90\85â\9d¨â«°*[n]gâ\9d© â\86\92 ð\9d\90\85â\9d¨gâ\9d©.
#n @(nat_ind_succ … n) -n /3 width=1 by pr_isf_inv_tl/
qed-.
(* Constructions with pr_uni ************************************************)
(*** isfin_uni *)
-lemma pr_isf_uni (n): ð\9d\90\85â\9dªð\9d\90®â\9d¨nâ\9d©â\9d«.
+lemma pr_isf_uni (n): ð\9d\90\85â\9d¨ð\9d\90®â\9d¨nâ\9d©â\9d©.
/3 width=2 by ex_intro/ qed.
(* Basic inversions *********************************************************)
(*** isid_inv_gen *)
-lemma pr_isi_inv_gen (g): ð\9d\90\88â\9dªgâ\9d« â\86\92 â\88\83â\88\83f. ð\9d\90\88â\9dªfâ\9d« & ⫯f = g.
+lemma pr_isi_inv_gen (g): ð\9d\90\88â\9d¨gâ\9d© â\86\92 â\88\83â\88\83f. ð\9d\90\88â\9d¨fâ\9d© & ⫯f = g.
#g * -g
#f #g #Hf /2 width=3 by ex2_intro/
qed-.
(* Advanced inversions ******************************************************)
(*** isid_inv_push *)
-lemma pr_isi_inv_push (g): ð\9d\90\88â\9dªgâ\9d« â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\88â\9dªfâ\9d«.
+lemma pr_isi_inv_push (g): ð\9d\90\88â\9d¨gâ\9d© â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\88â\9d¨fâ\9d©.
#g #H
elim (pr_isi_inv_gen … H) -H #f #Hf
* -g #g #H
qed-.
(*** isid_inv_next *)
-lemma pr_isi_inv_next (g): ð\9d\90\88â\9dªgâ\9d« → ∀f. ↑f = g → ⊥.
+lemma pr_isi_inv_next (g): ð\9d\90\88â\9d¨gâ\9d© → ∀f. ↑f = g → ⊥.
#g #H
elim (pr_isi_inv_gen … H) -H #f #Hf
* -g #g #H elim (eq_inv_pr_next_push … H)
(* Main inversions with pr_eq ***********************************************)
(*** isid_inv_eq_repl *)
-corec theorem pr_isi_inv_eq_repl (g1) (g2): ð\9d\90\88â\9dªg1â\9d« â\86\92 ð\9d\90\88â\9dªg2â\9d« → g1 ≡ g2.
+corec theorem pr_isi_inv_eq_repl (g1) (g2): ð\9d\90\88â\9d¨g1â\9d© â\86\92 ð\9d\90\88â\9d¨g2â\9d© → g1 ≡ g2.
#H1 #H2
cases (pr_isi_inv_gen … H1) -H1
cases (pr_isi_inv_gen … H2) -H2
(* Alternative definition with pr_eq ****************************************)
(*** eq_push_isid *)
-corec lemma pr_eq_push_isi (f): ⫯f â\89¡ f â\86\92 ð\9d\90\88â\9dªfâ\9d«.
+corec lemma pr_eq_push_isi (f): ⫯f â\89¡ f â\86\92 ð\9d\90\88â\9d¨fâ\9d©.
#H cases (pr_eq_inv_push_sn … H) -H
/4 width=3 by pr_isi_push, pr_eq_trans/
qed.
(*** eq_push_inv_isid *)
-corec lemma pr_isi_inv_eq_push (g): ð\9d\90\88â\9dªgâ\9d« → ⫯g ≡ g.
+corec lemma pr_isi_inv_eq_push (g): ð\9d\90\88â\9d¨gâ\9d© → ⫯g ≡ g.
* -g #f #g #Hf *
/3 width=5 by pr_eq_push/
qed-.
(* Constructions with pr_id *************************************************)
(*** id_isid *)
-lemma pr_isi_id: ð\9d\90\88â\9dªð\9d\90¢â\9d«.
+lemma pr_isi_id: ð\9d\90\88â\9d¨ð\9d\90¢â\9d©.
/2 width=1 by pr_eq_push_isi/ qed.
(* Alternative definition with pr_id and pr_eq ******************************)
(*** eq_id_isid *)
-lemma pr_eq_id_isi (f): ð\9d\90¢ â\89¡ f â\86\92 ð\9d\90\88â\9dªfâ\9d«.
+lemma pr_eq_id_isi (f): ð\9d\90¢ â\89¡ f â\86\92 ð\9d\90\88â\9d¨fâ\9d©.
/2 width=3 by pr_isi_eq_repl_back/ qed.
(*** eq_id_inv_isid *)
-lemma pr_isi_inv_eq_id (f): ð\9d\90\88â\9dªfâ\9d« → 𝐢 ≡ f.
+lemma pr_isi_inv_eq_id (f): ð\9d\90\88â\9d¨fâ\9d© → 𝐢 ≡ f.
/2 width=1 by pr_isi_inv_eq_repl/ qed-.
(* Advanced constructions with pr_isi and pr_nat ****************************)
-lemma pr_isi_nat (f): (â\88\80l. @â\86\91â\9dªl,fâ\9d« â\89\98 l) â\86\92 ð\9d\90\88â\9dªfâ\9d«.
+lemma pr_isi_nat (f): (â\88\80l. @â\86\91â\9d¨l,fâ\9d© â\89\98 l) â\86\92 ð\9d\90\88â\9d¨fâ\9d©.
/2 width=1 by pr_isi_pat/ qed.
(* Inversions with pr_nat ***************************************************)
-lemma pr_isi_inv_nat (f) (l): ð\9d\90\88â\9dªfâ\9d« â\86\92 @â\86\91â\9dªl,fâ\9d« ≘ l.
+lemma pr_isi_inv_nat (f) (l): ð\9d\90\88â\9d¨fâ\9d© â\86\92 @â\86\91â\9d¨l,fâ\9d© ≘ l.
/2 width=1 by pr_isi_inv_pat/ qed-.
(* Destructions with pr_nat *************************************************)
-lemma pr_isi_nat_des (f) (l1) (l2): ð\9d\90\88â\9dªfâ\9d« â\86\92 @â\86\91â\9dªl1,fâ\9d« ≘ l2 → l1 = l2.
+lemma pr_isi_nat_des (f) (l1) (l2): ð\9d\90\88â\9d¨fâ\9d© â\86\92 @â\86\91â\9d¨l1,fâ\9d© ≘ l2 → l1 = l2.
/3 width=3 by pr_isi_pat_des, eq_inv_npsucc_bi/ qed-.
(* Advanced constructions with pr_isi and pr_pat ****************************)
(*** isid_at *)
-lemma pr_isi_pat (f): (â\88\80i. @â\9dªi,fâ\9d« â\89\98 i) â\86\92 ð\9d\90\88â\9dªfâ\9d«.
+lemma pr_isi_pat (f): (â\88\80i. @â\9d¨i,fâ\9d© â\89\98 i) â\86\92 ð\9d\90\88â\9d¨fâ\9d©.
/3 width=1 by pr_eq_id_isi, pr_pat_inv_id/
qed.
(* Inversions with pr_pat ***************************************************)
(*** isid_inv_at *)
-lemma pr_isi_inv_pat (f) (i): ð\9d\90\88â\9dªfâ\9d« â\86\92 @â\9dªi,fâ\9d« ≘ i.
+lemma pr_isi_inv_pat (f) (i): ð\9d\90\88â\9d¨fâ\9d© â\86\92 @â\9d¨i,fâ\9d© ≘ i.
/3 width=3 by pr_isi_inv_eq_id, pr_pat_id, pr_pat_eq_repl_back/
qed-.
(* Destructions with pr_pat *************************************************)
(*** isid_inv_at_mono *)
-lemma pr_isi_pat_des (f) (i1) (i2): ð\9d\90\88â\9dªfâ\9d« â\86\92 @â\9dªi1,fâ\9d« ≘ i2 → i1 = i2.
+lemma pr_isi_pat_des (f) (i1) (i2): ð\9d\90\88â\9d¨fâ\9d© â\86\92 @â\9d¨i1,fâ\9d© ≘ i2 → i1 = i2.
/4 width=3 by pr_isi_inv_eq_id, pr_pat_id_des, pr_pat_eq_repl_fwd/
qed-.
(* Constructions with pr_pushs **********************************************)
(*** isid_pushs *)
-lemma pr_isi_pushs (n) (f): ð\9d\90\88â\9dªfâ\9d« â\86\92 ð\9d\90\88â\9dªâ«¯*[n]fâ\9d«.
+lemma pr_isi_pushs (n) (f): ð\9d\90\88â\9d¨fâ\9d© â\86\92 ð\9d\90\88â\9d¨â«¯*[n]fâ\9d©.
#n @(nat_ind_succ … n) -n /3 width=3 by pr_isi_push/
qed.
(* Inversions with pr_pushs *************************************************)
(*** isid_inv_pushs *)
-lemma pr_isi_inv_pushs (n) (g): ð\9d\90\88â\9dªâ«¯*[n]gâ\9d« â\86\92 ð\9d\90\88â\9dªgâ\9d«.
+lemma pr_isi_inv_pushs (n) (g): ð\9d\90\88â\9d¨â«¯*[n]gâ\9d© â\86\92 ð\9d\90\88â\9d¨gâ\9d©.
#n @(nat_ind_succ … n) -n /3 width=3 by pr_isi_inv_push/
qed-.
(* Constructions with pr_tl *************************************************)
(*** isid_tl *)
-lemma pr_isi_tl (f): ð\9d\90\88â\9dªfâ\9d« â\86\92 ð\9d\90\88â\9dªâ«°fâ\9d«.
+lemma pr_isi_tl (f): ð\9d\90\88â\9d¨fâ\9d© â\86\92 ð\9d\90\88â\9d¨â«°fâ\9d©.
#f cases (pr_map_split_tl f) * #H
[ /2 width=3 by pr_isi_inv_push/
| elim (pr_isi_inv_next … H) -H //
(* Constructions with pr_tls ************************************************)
(*** isid_tls *)
-lemma pr_isi_tls (n) (f): ð\9d\90\88â\9dªfâ\9d« â\86\92 ð\9d\90\88â\9dªâ«°*[n]fâ\9d«.
+lemma pr_isi_tls (n) (f): ð\9d\90\88â\9d¨fâ\9d© â\86\92 ð\9d\90\88â\9d¨â«°*[n]fâ\9d©.
#n @(nat_ind_succ … n) -n /3 width=1 by pr_isi_tl/
qed.
(* Constructions with pr_isi ************************************************)
(*** uni_inv_isid uni_isi *)
-lemma pr_uni_isi (f): ð\9d\90®â\9d¨ð\9d\9f\8eâ\9d© â\89¡ f â\86\92 ð\9d\90\88â\9dªfâ\9d«.
+lemma pr_uni_isi (f): ð\9d\90®â\9d¨ð\9d\9f\8eâ\9d© â\89¡ f â\86\92 ð\9d\90\88â\9d¨fâ\9d©.
/2 width=1 by pr_eq_id_isi/ qed.
(* Inversions with pr_isi ***************************************************)
(*** uni_isid isi_inv_uni *)
-lemma pr_isi_inv_uni (f): ð\9d\90\88â\9dªfâ\9d« → 𝐮❨𝟎❩ ≡ f.
+lemma pr_isi_inv_uni (f): ð\9d\90\88â\9d¨fâ\9d© → 𝐮❨𝟎❩ ≡ f.
/2 width=1 by pr_isi_inv_eq_id/ qed-.
(*** istot *)
definition pr_ist: predicate pr_map ≝
- λf. â\88\80i. â\88\83j. @â\9dªi,fâ\9d« ≘ j.
+ λf. â\88\80i. â\88\83j. @â\9d¨i,fâ\9d© ≘ j.
interpretation
"totality condition (partial relocation maps)"
(* Basic inversions *********************************************************)
(*** istot_inv_push *)
-lemma pr_ist_inv_push (g): ð\9d\90\93â\9dªgâ\9d« â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\93â\9dªfâ\9d«.
+lemma pr_ist_inv_push (g): ð\9d\90\93â\9d¨gâ\9d© â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\93â\9d¨fâ\9d©.
#g #Hg #f #H #i elim (Hg (↑i)) -Hg
#j #Hg elim (pr_pat_inv_succ_push … Hg … H) -Hg -H /2 width=3 by ex_intro/
qed-.
(*** istot_inv_next *)
-lemma pr_ist_inv_next (g): ð\9d\90\93â\9dªgâ\9d« â\86\92 â\88\80f. â\86\91f = g â\86\92 ð\9d\90\93â\9dªfâ\9d«.
+lemma pr_ist_inv_next (g): ð\9d\90\93â\9d¨gâ\9d© â\86\92 â\88\80f. â\86\91f = g â\86\92 ð\9d\90\93â\9d¨fâ\9d©.
#g #Hg #f #H #i elim (Hg i) -Hg
#j #Hg elim (pr_pat_inv_next … Hg … H) -Hg -H /2 width=2 by ex_intro/
qed-.
(* Basic constructions ******************************************************)
-lemma pr_ist_push (f): ð\9d\90\93â\9dªfâ\9d« â\86\92 ð\9d\90\93â\9dªâ«¯fâ\9d«.
+lemma pr_ist_push (f): ð\9d\90\93â\9d¨fâ\9d© â\86\92 ð\9d\90\93â\9d¨â«¯fâ\9d©.
#f #Hf *
[ /3 width=2 by pr_pat_refl, ex_intro/
| #i elim (Hf i) -Hf /3 width=8 by pr_pat_push, ex_intro/
]
qed.
-lemma pr_ist_next (f): ð\9d\90\93â\9dªfâ\9d« â\86\92 ð\9d\90\93â\9dªâ\86\91fâ\9d«.
+lemma pr_ist_next (f): ð\9d\90\93â\9d¨fâ\9d© â\86\92 ð\9d\90\93â\9d¨â\86\91fâ\9d©.
#f #Hf #i elim (Hf i) -Hf
/3 width=6 by pr_pat_next, ex_intro/
qed.
(* Constructions with pr_tl *************************************************)
(*** istot_tl *)
-lemma pr_ist_tl (f): ð\9d\90\93â\9dªfâ\9d« â\86\92 ð\9d\90\93â\9dªâ«°fâ\9d«.
+lemma pr_ist_tl (f): ð\9d\90\93â\9d¨fâ\9d© â\86\92 ð\9d\90\93â\9d¨â«°fâ\9d©.
#f cases (pr_map_split_tl f) *
/2 width=3 by pr_ist_inv_next, pr_ist_inv_push/
qed.
(* Advanced constructions with pr_isi ***************************************)
(*** isid_at_total *)
-lemma pr_isi_pat_total: â\88\80f. ð\9d\90\93â\9dªfâ\9d« â\86\92 (â\88\80i1,i2. @â\9dªi1,fâ\9d« â\89\98 i2 â\86\92 i1 = i2) â\86\92 ð\9d\90\88â\9dªfâ\9d«.
+lemma pr_isi_pat_total: â\88\80f. ð\9d\90\93â\9d¨fâ\9d© â\86\92 (â\88\80i1,i2. @â\9d¨i1,fâ\9d© â\89\98 i2 â\86\92 i1 = i2) â\86\92 ð\9d\90\88â\9d¨fâ\9d©.
#f #H1f #H2f @pr_isi_pat
#i lapply (H1f i) -H1f *
#j #Hf >(H2f … Hf) in ⊢ (???%); -H2f //
(* Advanced constructions with pr_pat ***************************************)
(*** at_dec *)
-lemma pr_pat_dec (f) (i1) (i2): ð\9d\90\93â\9dªfâ\9d« â\86\92 Decidable (@â\9dªi1,fâ\9d« ≘ i2).
+lemma pr_pat_dec (f) (i1) (i2): ð\9d\90\93â\9d¨fâ\9d© â\86\92 Decidable (@â\9d¨i1,fâ\9d© ≘ i2).
#f #i1 #i2 #Hf lapply (Hf i1) -Hf *
#j2 #Hf elim (eq_pnat_dec i2 j2)
[ #H destruct /2 width=1 by or_introl/
qed-.
(*** is_at_dec *)
-lemma is_pr_pat_dec (f) (i2): ð\9d\90\93â\9dªfâ\9d« â\86\92 Decidable (â\88\83i1. @â\9dªi1,fâ\9d« ≘ i2).
+lemma is_pr_pat_dec (f) (i2): ð\9d\90\93â\9d¨fâ\9d© â\86\92 Decidable (â\88\83i1. @â\9d¨i1,fâ\9d© ≘ i2).
#f #i2 #Hf
-lapply (dec_plt (λi1.@â\9dªi1,fâ\9d« ≘ i2) … (↑i2)) [| * ]
+lapply (dec_plt (λi1.@â\9d¨i1,fâ\9d© ≘ i2) … (↑i2)) [| * ]
[ /2 width=1 by pr_pat_dec/
| * /3 width=2 by ex_intro, or_introl/
| #H @or_intror * #i1 #Hi12
(* Main destructions with pr_pat ********************************************)
(*** at_ext *)
-corec theorem pr_eq_ext_pat (f1) (f2): ð\9d\90\93â\9dªf1â\9d« â\86\92 ð\9d\90\93â\9dªf2â\9d« →
- (â\88\80i,i1,i2. @â\9dªi,f1â\9d« â\89\98 i1 â\86\92 @â\9dªi,f2â\9d« ≘ i2 → i1 = i2) →
+corec theorem pr_eq_ext_pat (f1) (f2): ð\9d\90\93â\9d¨f1â\9d© â\86\92 ð\9d\90\93â\9d¨f2â\9d© →
+ (â\88\80i,i1,i2. @â\9d¨i,f1â\9d© â\89\98 i1 â\86\92 @â\9d¨i,f2â\9d© ≘ i2 → i1 = i2) →
f1 ≡ f2.
cases (pr_map_split_tl f1) #H1
cases (pr_map_split_tl f2) #H2
(* Advanced constructions with pr_nat ***************************************)
-lemma is_pr_nat_dec (f) (l2): ð\9d\90\93â\9dªfâ\9d« â\86\92 Decidable (â\88\83l1. @â\86\91â\9dªl1,fâ\9d« ≘ l2).
+lemma is_pr_nat_dec (f) (l2): ð\9d\90\93â\9d¨fâ\9d© â\86\92 Decidable (â\88\83l1. @â\86\91â\9d¨l1,fâ\9d© ≘ l2).
#f #l2 #Hf elim (is_pr_pat_dec … (↑l2) Hf)
[ * /3 width=2 by ex_intro, or_introl/
| #H @or_intror * /3 width=2 by ex_intro/
(* Constructions with pr_tls ************************************************)
(*** istot_tls *)
-lemma pr_ist_tls (n) (f): ð\9d\90\93â\9dªfâ\9d« â\86\92 ð\9d\90\93â\9dªâ«°*[n]fâ\9d«.
+lemma pr_ist_tls (n) (f): ð\9d\90\93â\9d¨fâ\9d© â\86\92 ð\9d\90\93â\9d¨â«°*[n]fâ\9d©.
#n @(nat_ind_succ … n) -n //
#n #IH #f #Hf <pr_tls_succ
/3 width=1 by pr_ist_tl/
(*** isuni *)
inductive pr_isu: predicate pr_map ≝
(*** isuni_isid *)
-| pr_isu_isi (f): ð\9d\90\88â\9dªfâ\9d« → pr_isu f
+| pr_isu_isi (f): ð\9d\90\88â\9d¨fâ\9d© → pr_isu f
(*** isuni_next *)
| pr_isu_next (f): pr_isu f → ∀g. ↑f = g → pr_isu g
.
(* Basic inversions *********************************************************)
(*** isuni_inv_push *)
-lemma pr_isu_inv_push (g): ð\9d\90\94â\9dªgâ\9d« â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\88â\9dªfâ\9d«.
+lemma pr_isu_inv_push (g): ð\9d\90\94â\9d¨gâ\9d© â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\88â\9d¨fâ\9d©.
#g * -g
[ /2 width=3 by pr_isi_inv_push/
| #f #_ #g #H #x #Hx destruct
qed-.
(*** isuni_inv_next *)
-lemma pr_isu_inv_next (g): ð\9d\90\94â\9dªgâ\9d« â\86\92 â\88\80f. â\86\91f = g â\86\92 ð\9d\90\94â\9dªfâ\9d«.
+lemma pr_isu_inv_next (g): ð\9d\90\94â\9d¨gâ\9d© â\86\92 â\88\80f. â\86\91f = g â\86\92 ð\9d\90\94â\9d¨fâ\9d©.
#g * -g #f #Hf
[ #x #Hx elim (pr_isi_inv_next … Hf … Hx)
| #g #H #x #Hx destruct
(* Basic destructions *******************************************************)
(*** isuni_fwd_push *)
-lemma pr_isu_fwd_push (g): ð\9d\90\94â\9dªgâ\9d« â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\94â\9dªfâ\9d«.
+lemma pr_isu_fwd_push (g): ð\9d\90\94â\9d¨gâ\9d© â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\94â\9d¨fâ\9d©.
/3 width=3 by pr_isu_inv_push, pr_isu_isi/ qed-.
(* Constructions with pr_tl *************************************************)
-lemma pr_isu_tl (f): ð\9d\90\94â\9dªfâ\9d« â\86\92 ð\9d\90\94â\9dªâ«°fâ\9d«.
+lemma pr_isu_tl (f): ð\9d\90\94â\9d¨fâ\9d© â\86\92 ð\9d\90\94â\9d¨â«°fâ\9d©.
#f cases (pr_map_split_tl f) * #H
[ /3 width=3 by pr_isu_inv_push, pr_isu_isi/
| /2 width=3 by pr_isu_inv_next/
(* Advanced inversions ******************************************************)
(*** isuni_split *)
-lemma pr_isu_split (g): ð\9d\90\94â\9dªgâ\9d« â\86\92 â\88¨â\88¨ (â\88\83â\88\83f. ð\9d\90\88â\9dªfâ\9d« & ⫯f = g) | (â\88\83â\88\83f.ð\9d\90\94â\9dªfâ\9d« & ↑f = g).
+lemma pr_isu_split (g): ð\9d\90\94â\9d¨gâ\9d© â\86\92 â\88¨â\88¨ (â\88\83â\88\83f. ð\9d\90\88â\9d¨fâ\9d© & ⫯f = g) | (â\88\83â\88\83f.ð\9d\90\94â\9d¨fâ\9d© & ↑f = g).
#g elim (pr_map_split_tl g) * #H
/4 width=3 by pr_isu_inv_next, pr_isu_inv_push, or_introl, or_intror, ex2_intro/
qed-.
(* Constructions with pr_uni ************************************************)
(*** isuni_uni *)
-lemma pr_isu_uni (n): ð\9d\90\94â\9dªð\9d\90®â\9d¨nâ\9d©â\9d«.
+lemma pr_isu_uni (n): ð\9d\90\94â\9d¨ð\9d\90®â\9d¨nâ\9d©â\9d©.
#n @(nat_ind_succ … n) -n
/3 width=3 by pr_isu_isi, pr_isu_next/
qed.
(* Inversions with pr_uni ***************************************************)
(*** uni_isuni *)
-lemma pr_isu_inv_uni (f): ð\9d\90\94â\9dªfâ\9d« → ∃n. 𝐮❨n❩ ≡ f.
+lemma pr_isu_inv_uni (f): ð\9d\90\94â\9d¨fâ\9d© → ∃n. 𝐮❨n❩ ≡ f.
#f #H elim H -f
[ /3 width=2 by pr_isi_inv_uni, ex_intro/
| #f #_ #g #H * /3 width=6 by pr_eq_next, ex_intro/
(* NON-NEGATIVE APPLICATION FOR PARTIAL RELOCATION MAPS *********************)
definition pr_nat: relation3 pr_map nat nat ≝
- λf,l1,l2. @â\9dªâ\86\91l1,fâ\9d« ≘ ↑l2.
+ λf,l1,l2. @â\9d¨â\86\91l1,fâ\9d© ≘ ↑l2.
interpretation
"relational non-negative application (partial relocation maps)"
(* Basic constructions ******************************************************)
lemma pr_nat_refl (f) (g) (k1) (k2):
- (⫯f) = g â\86\92 ð\9d\9f\8e = k1 â\86\92 ð\9d\9f\8e = k2 â\86\92 @â\86\91â\9dªk1,gâ\9d« ≘ k2.
+ (⫯f) = g â\86\92 ð\9d\9f\8e = k1 â\86\92 ð\9d\9f\8e = k2 â\86\92 @â\86\91â\9d¨k1,gâ\9d© ≘ k2.
#f #g #k1 #k2 #H1 #H2 #H3 destruct
/2 width=2 by pr_pat_refl/
qed.
lemma pr_nat_push (f) (l1) (l2) (g) (k1) (k2):
- @â\86\91â\9dªl1,fâ\9d« â\89\98 l2 â\86\92 ⫯f = g â\86\92 â\86\91l1 = k1 â\86\92 â\86\91l2 = k2 â\86\92 @â\86\91â\9dªk1,gâ\9d« ≘ k2.
+ @â\86\91â\9d¨l1,fâ\9d© â\89\98 l2 â\86\92 ⫯f = g â\86\92 â\86\91l1 = k1 â\86\92 â\86\91l2 = k2 â\86\92 @â\86\91â\9d¨k1,gâ\9d© ≘ k2.
#f #l1 #l2 #g #k1 #k2 #Hf #H1 #H2 #H3 destruct
/2 width=7 by pr_pat_push/
qed.
lemma pr_nat_next (f) (l1) (l2) (g) (k2):
- @â\86\91â\9dªl1,fâ\9d« â\89\98 l2 â\86\92 â\86\91f = g â\86\92 â\86\91l2 = k2 â\86\92 @â\86\91â\9dªl1,gâ\9d« ≘ k2.
+ @â\86\91â\9d¨l1,fâ\9d© â\89\98 l2 â\86\92 â\86\91f = g â\86\92 â\86\91l2 = k2 â\86\92 @â\86\91â\9d¨l1,gâ\9d© ≘ k2.
#f #l1 #l2 #g #k2 #Hf #H1 #H2 destruct
/2 width=5 by pr_pat_next/
qed.
lemma pr_nat_pred_bi (f) (i1) (i2):
- @â\9dªi1,fâ\9d« â\89\98 i2 â\86\92 @â\86\91â\9dªâ\86\93i1,fâ\9d« ≘ ↓i2.
+ @â\9d¨i1,fâ\9d© â\89\98 i2 â\86\92 @â\86\91â\9d¨â\86\93i1,fâ\9d© ≘ ↓i2.
#f #i1 #i2
>(npsucc_pred i1) in ⊢ (%→?); >(npsucc_pred i2) in ⊢ (%→?);
//
(*** pr_nat_inv_ppx *)
lemma pr_nat_inv_zero_push (f) (l1) (l2):
- @â\86\91â\9dªl1,fâ\9d« ≘ l2 → ∀g. 𝟎 = l1 → ⫯g = f → 𝟎 = l2.
+ @â\86\91â\9d¨l1,fâ\9d© ≘ l2 → ∀g. 𝟎 = l1 → ⫯g = f → 𝟎 = l2.
#f #l1 #l2 #H #g #H1 #H2 destruct
lapply (pr_pat_inv_unit_push … H ???) -H
/2 width=2 by eq_inv_npsucc_bi/
(*** pr_nat_inv_npx *)
lemma pr_nat_inv_succ_push (f) (l1) (l2):
- @â\86\91â\9dªl1,fâ\9d« ≘ l2 → ∀g,k1. ↑k1 = l1 → ⫯g = f →
- â\88\83â\88\83k2. @â\86\91â\9dªk1,gâ\9d« ≘ k2 & ↑k2 = l2.
+ @â\86\91â\9d¨l1,fâ\9d© ≘ l2 → ∀g,k1. ↑k1 = l1 → ⫯g = f →
+ â\88\83â\88\83k2. @â\86\91â\9d¨k1,gâ\9d© ≘ k2 & ↑k2 = l2.
#f #l1 #l2 #H #g #k1 #H1 #H2 destruct
elim (pr_pat_inv_succ_push … H) -H [|*: // ] #k2 #Hg
>(npsucc_pred (↑l2)) #H
(*** pr_nat_inv_xnx *)
lemma pr_nat_inv_next (f) (l1) (l2):
- @â\86\91â\9dªl1,fâ\9d« ≘ l2 → ∀g. ↑g = f →
- â\88\83â\88\83k2. @â\86\91â\9dªl1,gâ\9d« ≘ k2 & ↑k2 = l2.
+ @â\86\91â\9d¨l1,fâ\9d© ≘ l2 → ∀g. ↑g = f →
+ â\88\83â\88\83k2. @â\86\91â\9d¨l1,gâ\9d© ≘ k2 & ↑k2 = l2.
#f #l1 #l2 #H #g #H1 destruct
elim (pr_pat_inv_next … H) -H [|*: // ] #k2
>(npsucc_pred (k2)) in ⊢ (%→?→?); #Hg #H
(*** pr_nat_inv_ppn *)
lemma pr_nat_inv_zero_push_succ (f) (l1) (l2):
- @â\86\91â\9dªl1,fâ\9d« ≘ l2 → ∀g,k2. 𝟎 = l1 → ⫯g = f → ↑k2 = l2 → ⊥.
+ @â\86\91â\9d¨l1,fâ\9d© ≘ l2 → ∀g,k2. 𝟎 = l1 → ⫯g = f → ↑k2 = l2 → ⊥.
#f #l1 #l2 #Hf #g #k2 #H1 #H <(pr_nat_inv_zero_push … Hf … H1 H) -f -g -l1 -l2
/2 width=3 by eq_inv_nsucc_zero/
qed-.
(*** pr_nat_inv_npp *)
lemma pr_nat_inv_succ_push_zero (f) (l1) (l2):
- @â\86\91â\9dªl1,fâ\9d« ≘ l2 → ∀g,k1. ↑k1 = l1 → ⫯g = f → 𝟎 = l2 → ⊥.
+ @â\86\91â\9d¨l1,fâ\9d© ≘ l2 → ∀g,k1. ↑k1 = l1 → ⫯g = f → 𝟎 = l2 → ⊥.
#f #l1 #l2 #Hf #g #k1 #H1 #H elim (pr_nat_inv_succ_push … Hf … H1 H) -f -l1
#x2 #Hg * -l2 /2 width=3 by eq_inv_zero_nsucc/
qed-.
(*** pr_nat_inv_npn *)
lemma pr_nat_inv_succ_push_succ (f) (l1) (l2):
- @â\86\91â\9dªl1,fâ\9d« â\89\98 l2 â\86\92 â\88\80g,k1,k2. â\86\91k1 = l1 â\86\92 ⫯g = f â\86\92 â\86\91k2 = l2 â\86\92 @â\86\91â\9dªk1,gâ\9d« ≘ k2.
+ @â\86\91â\9d¨l1,fâ\9d© â\89\98 l2 â\86\92 â\88\80g,k1,k2. â\86\91k1 = l1 â\86\92 ⫯g = f â\86\92 â\86\91k2 = l2 â\86\92 @â\86\91â\9d¨k1,gâ\9d© ≘ k2.
#f #l1 #l2 #Hf #g #k1 #k2 #H1 #H elim (pr_nat_inv_succ_push … Hf … H1 H) -f -l1
#x2 #Hg * -l2 #H >(eq_inv_nsucc_bi … H) -k2 //
qed-.
(*** pr_nat_inv_xnp *)
lemma pr_nat_inv_next_zero (f) (l1) (l2):
- @â\86\91â\9dªl1,fâ\9d« ≘ l2 → ∀g. ↑g = f → 𝟎 = l2 → ⊥.
+ @â\86\91â\9d¨l1,fâ\9d© ≘ l2 → ∀g. ↑g = f → 𝟎 = l2 → ⊥.
#f #l1 #l2 #Hf #g #H elim (pr_nat_inv_next … Hf … H) -f
#x2 #Hg * -l2 /2 width=3 by eq_inv_zero_nsucc/
qed-.
(*** pr_nat_inv_xnn *)
lemma pr_nat_inv_next_succ (f) (l1) (l2):
- @â\86\91â\9dªl1,fâ\9d« â\89\98 l2 â\86\92 â\88\80g,k2. â\86\91g = f â\86\92 â\86\91k2 = l2 â\86\92 @â\86\91â\9dªl1,gâ\9d« ≘ k2.
+ @â\86\91â\9d¨l1,fâ\9d© â\89\98 l2 â\86\92 â\88\80g,k2. â\86\91g = f â\86\92 â\86\91k2 = l2 â\86\92 @â\86\91â\9d¨l1,gâ\9d© ≘ k2.
#f #l1 #l2 #Hf #g #k2 #H elim (pr_nat_inv_next … Hf … H) -f
#x2 #Hg * -l2 #H >(eq_inv_nsucc_bi … H) -k2 //
qed-.
(*** pr_nat_inv_pxp *)
lemma pr_nat_inv_zero_bi (f) (l1) (l2):
- @â\86\91â\9dªl1,fâ\9d« ≘ l2 → 𝟎 = l1 → 𝟎 = l2 → ∃g. ⫯g = f.
+ @â\86\91â\9d¨l1,fâ\9d© ≘ l2 → 𝟎 = l1 → 𝟎 = l2 → ∃g. ⫯g = f.
#f elim (pr_map_split_tl … f) /2 width=2 by ex_intro/
#H #l1 #l2 #Hf #H1 #H2 cases (pr_nat_inv_next_zero … Hf … H H2)
qed-.
(*** pr_nat_inv_pxn *)
lemma pr_nat_inv_zero_succ (f) (l1) (l2):
- @â\86\91â\9dªl1,fâ\9d« ≘ l2 → ∀k2. 𝟎 = l1 → ↑k2 = l2 →
- â\88\83â\88\83g. @â\86\91â\9dªl1,gâ\9d« ≘ k2 & ↑g = f.
+ @â\86\91â\9d¨l1,fâ\9d© ≘ l2 → ∀k2. 𝟎 = l1 → ↑k2 = l2 →
+ â\88\83â\88\83g. @â\86\91â\9d¨l1,gâ\9d© ≘ k2 & ↑g = f.
#f elim (pr_map_split_tl … f)
#H #l1 #l2 #Hf #k2 #H1 #H2
[ elim (pr_nat_inv_zero_push_succ … Hf … H1 H H2)
(*** pr_nat_inv_nxp *)
lemma pr_nat_inv_succ_zero (f) (l1) (l2):
- @â\86\91â\9dªl1,fâ\9d« ≘ l2 → ∀k1. ↑k1 = l1 → 𝟎 = l2 → ⊥.
+ @â\86\91â\9d¨l1,fâ\9d© ≘ l2 → ∀k1. ↑k1 = l1 → 𝟎 = l2 → ⊥.
#f elim (pr_map_split_tl f)
#H #l1 #l2 #Hf #k1 #H1 #H2
[ elim (pr_nat_inv_succ_push_zero … Hf … H1 H H2)
(*** pr_nat_inv_nxn *)
lemma pr_nat_inv_succ_bi (f) (l1) (l2):
- @â\86\91â\9dªl1,fâ\9d« ≘ l2 → ∀k1,k2. ↑k1 = l1 → ↑k2 = l2 →
- â\88¨â\88¨ â\88\83â\88\83g. @â\86\91â\9dªk1,gâ\9d« ≘ k2 & ⫯g = f
- | â\88\83â\88\83g. @â\86\91â\9dªl1,gâ\9d« ≘ k2 & ↑g = f.
+ @â\86\91â\9d¨l1,fâ\9d© ≘ l2 → ∀k1,k2. ↑k1 = l1 → ↑k2 = l2 →
+ â\88¨â\88¨ â\88\83â\88\83g. @â\86\91â\9d¨k1,gâ\9d© ≘ k2 & ⫯g = f
+ | â\88\83â\88\83g. @â\86\91â\9d¨l1,gâ\9d© ≘ k2 & ↑g = f.
#f elim (pr_map_split_tl f) *
/4 width=7 by pr_nat_inv_next_succ, pr_nat_inv_succ_push_succ, ex2_intro, or_intror, or_introl/
qed-.
(* Note: the following inversion lemmas must be checked *)
(*** pr_nat_inv_xpx *)
lemma pr_nat_inv_push (f) (l1) (l2):
- @â\86\91â\9dªl1,fâ\9d« ≘ l2 → ∀g. ⫯g = f →
+ @â\86\91â\9d¨l1,fâ\9d© ≘ l2 → ∀g. ⫯g = f →
∨∨ ∧∧ 𝟎 = l1 & 𝟎 = l2
- | â\88\83â\88\83k1,k2. @â\86\91â\9dªk1,gâ\9d« ≘ k2 & ↑k1 = l1 & ↑k2 = l2.
+ | â\88\83â\88\83k1,k2. @â\86\91â\9d¨k1,gâ\9d© ≘ k2 & ↑k1 = l1 & ↑k2 = l2.
#f * [2: #l1 ] #l2 #Hf #g #H
[ elim (pr_nat_inv_succ_push … Hf … H) -f /3 width=5 by or_intror, ex3_2_intro/
| >(pr_nat_inv_zero_push … Hf … H) -f /3 width=1 by conj, or_introl/
(*** pr_nat_inv_xpp *)
lemma pr_nat_inv_push_zero (f) (l1) (l2):
- @â\86\91â\9dªl1,fâ\9d« ≘ l2 → ∀g. ⫯g = f → 𝟎 = l2 → 𝟎 = l1.
+ @â\86\91â\9d¨l1,fâ\9d© ≘ l2 → ∀g. ⫯g = f → 𝟎 = l2 → 𝟎 = l1.
#f #l1 #l2 #Hf #g #H elim (pr_nat_inv_push … Hf … H) -f * //
#k1 #k2 #_ #_ * -l2 #H elim (eq_inv_zero_nsucc … H)
qed-.
(*** pr_nat_inv_xpn *)
lemma pr_nat_inv_push_succ (f) (l1) (l2):
- @â\86\91â\9dªl1,fâ\9d« ≘ l2 → ∀g,k2. ⫯g = f → ↑k2 = l2 →
- â\88\83â\88\83k1. @â\86\91â\9dªk1,gâ\9d« ≘ k2 & ↑k1 = l1.
+ @â\86\91â\9d¨l1,fâ\9d© ≘ l2 → ∀g,k2. ⫯g = f → ↑k2 = l2 →
+ â\88\83â\88\83k1. @â\86\91â\9d¨k1,gâ\9d© ≘ k2 & ↑k1 = l1.
#f #l1 #l2 #Hf #g #k2 #H elim (pr_nat_inv_push … Hf … H) -f *
[ #_ * -l2 #H elim (eq_inv_nsucc_zero … H)
| #x1 #x2 #Hg #H1 * -l2 #H
(*** pr_nat_inv_xxp *)
lemma pr_nat_inv_zero_dx (f) (l1) (l2):
- @â\86\91â\9dªl1,fâ\9d« ≘ l2 → 𝟎 = l2 → ∃∃g. 𝟎 = l1 & ⫯g = f.
+ @â\86\91â\9d¨l1,fâ\9d© ≘ l2 → 𝟎 = l2 → ∃∃g. 𝟎 = l1 & ⫯g = f.
#f elim (pr_map_split_tl f)
#H #l1 #l2 #Hf #H2
[ /3 width=6 by pr_nat_inv_push_zero, ex2_intro/
qed-.
(*** pr_nat_inv_xxn *)
-lemma pr_nat_inv_succ_dx (f) (l1) (l2): @â\86\91â\9dªl1,fâ\9d« ≘ l2 → ∀k2. ↑k2 = l2 →
- â\88¨â\88¨ â\88\83â\88\83g,k1. @â\86\91â\9dªk1,gâ\9d« ≘ k2 & ↑k1 = l1 & ⫯g = f
- | â\88\83â\88\83g. @â\86\91â\9dªl1,gâ\9d« ≘ k2 & ↑g = f.
+lemma pr_nat_inv_succ_dx (f) (l1) (l2): @â\86\91â\9d¨l1,fâ\9d© ≘ l2 → ∀k2. ↑k2 = l2 →
+ â\88¨â\88¨ â\88\83â\88\83g,k1. @â\86\91â\9d¨k1,gâ\9d© ≘ k2 & ↑k1 = l1 & ⫯g = f
+ | â\88\83â\88\83g. @â\86\91â\9d¨l1,gâ\9d© ≘ k2 & ↑g = f.
#f elim (pr_map_split_tl f)
#H #l1 #l2 #Hf #k2 #H2
[ elim (pr_nat_inv_push_succ … Hf … H H2) -l2 /3 width=5 by or_introl, ex3_2_intro/
(* Constructions with pr_basic **********************************************)
lemma pr_nat_basic_lt (m) (n) (l):
- l < m â\86\92 @â\86\91â\9dªl, ð\9d\90\9bâ\9d¨m,nâ\9d©â\9d« ≘ l.
+ l < m â\86\92 @â\86\91â\9d¨l, ð\9d\90\9bâ\9d¨m,nâ\9d©â\9d© ≘ l.
#m @(nat_ind_succ … m) -m
[ #n #i #H elim (nlt_inv_zero_dx … H)
| #m #IH #n #l @(nat_ind_succ … l) -l
qed.
lemma pr_nat_basic_ge (m) (n) (l):
- m â\89¤ l â\86\92 @â\86\91â\9dªl, ð\9d\90\9bâ\9d¨m,nâ\9d©â\9d« ≘ l+n.
+ m â\89¤ l â\86\92 @â\86\91â\9d¨l, ð\9d\90\9bâ\9d¨m,nâ\9d©â\9d© ≘ l+n.
#m @(nat_ind_succ … m) -m //
#m #IH #n #l #H
elim (nle_inv_succ_sn … H) -H #Hml #H >H -H
(* Inversions with pr_basic *************************************************)
lemma pr_nat_basic_inv_lt (m) (n) (l) (k):
- l < m â\86\92 @â\86\91â\9dªl, ð\9d\90\9bâ\9d¨m,nâ\9d©â\9d« ≘ k → l = k.
+ l < m â\86\92 @â\86\91â\9d¨l, ð\9d\90\9bâ\9d¨m,nâ\9d©â\9d© ≘ k → l = k.
/3 width=4 by pr_nat_basic_lt, pr_nat_mono/ qed-.
lemma pr_nat_basic_inv_ge (m) (n) (l) (k):
- m â\89¤ l â\86\92 @â\86\91â\9dªl, ð\9d\90\9bâ\9d¨m,nâ\9d©â\9d« ≘ k → l+n = k.
+ m â\89¤ l â\86\92 @â\86\91â\9d¨l, ð\9d\90\9bâ\9d¨m,nâ\9d©â\9d© ≘ k → l+n = k.
/3 width=4 by pr_nat_basic_ge, pr_nat_mono/ qed-.
(* Main destructions ********************************************************)
theorem pr_nat_monotonic (k2) (l2) (f):
- @â\86\91â\9dªl2,fâ\9d« â\89\98 k2 â\86\92 â\88\80k1,l1. @â\86\91â\9dªl1,fâ\9d« ≘ k1 → l1 < l2 → k1 < k2.
+ @â\86\91â\9d¨l2,fâ\9d© â\89\98 k2 â\86\92 â\88\80k1,l1. @â\86\91â\9d¨l1,fâ\9d© ≘ k1 → l1 < l2 → k1 < k2.
#k2 @(nat_ind_succ … k2) -k2
[ #l2 #f #H2f elim (pr_nat_inv_zero_dx … H2f) -H2f //
#g #H21 #_ #k1 #l1 #_ #Hi destruct
qed-.
theorem pr_nat_inv_monotonic (k1) (l1) (f):
- @â\86\91â\9dªl1,fâ\9d« â\89\98 k1 â\86\92 â\88\80k2,l2. @â\86\91â\9dªl2,fâ\9d« ≘ k2 → k1 < k2 → l1 < l2.
+ @â\86\91â\9d¨l1,fâ\9d© â\89\98 k1 â\86\92 â\88\80k2,l2. @â\86\91â\9d¨l2,fâ\9d© ≘ k2 → k1 < k2 → l1 < l2.
#k1 @(nat_ind_succ … k1) -k1
[ #l1 #f #H1f elim (pr_nat_inv_zero_dx … H1f) -H1f //
#g * -l1 #H #k2 #l2 #H2f #Hk
qed-.
theorem pr_nat_mono (f) (l) (l1) (l2):
- @â\86\91â\9dªl,fâ\9d« â\89\98 l1 â\86\92 @â\86\91â\9dªl,fâ\9d« ≘ l2 → l2 = l1.
+ @â\86\91â\9d¨l,fâ\9d© â\89\98 l1 â\86\92 @â\86\91â\9d¨l,fâ\9d© ≘ l2 → l2 = l1.
#f #l #l1 #l2 #H1 #H2 elim (nat_split_lt_eq_gt l2 l1) //
#Hi elim (nlt_ge_false l l)
/2 width=6 by pr_nat_inv_monotonic/
qed-.
theorem pr_nat_inj (f) (l1) (l2) (l):
- @â\86\91â\9dªl1,fâ\9d« â\89\98 l â\86\92 @â\86\91â\9dªl2,fâ\9d« ≘ l → l1 = l2.
+ @â\86\91â\9d¨l1,fâ\9d© â\89\98 l â\86\92 @â\86\91â\9d¨l2,fâ\9d© ≘ l → l1 = l2.
#f #l1 #l2 #l #H1 #H2 elim (nat_split_lt_eq_gt l2 l1) //
#Hi elim (nlt_ge_false l l)
/2 width=6 by pr_nat_monotonic/
(* Constructions with pr_uni ************************************************)
lemma pr_nat_uni (n) (l):
- @â\86\91â\9dªl,ð\9d\90®â\9d¨nâ\9d©â\9d« ≘ l+n.
+ @â\86\91â\9d¨l,ð\9d\90®â\9d¨nâ\9d©â\9d© ≘ l+n.
/2 width=1 by pr_nat_pred_bi/
qed.
(* Inversions with pr_uni ***************************************************)
lemma pr_nat_inv_uni (n) (l) (k):
- @â\86\91â\9dªl,ð\9d\90®â\9d¨nâ\9d©â\9d« ≘ k → k = l+n.
+ @â\86\91â\9d¨l,ð\9d\90®â\9d¨nâ\9d©â\9d© ≘ k → k = l+n.
/2 width=4 by pr_nat_mono/ qed-.
(*** H_at_div *)
definition H_pr_pat_div: relation4 pr_map pr_map pr_map pr_map ≝
λf2,g2,f1,g1.
- â\88\80jf,jg,j. @â\9dªjf,f2â\9d« â\89\98 j â\86\92 @â\9dªjg,g2â\9d« ≘ j →
- â\88\83â\88\83j0. @â\9dªj0,f1â\9d« â\89\98 jf & @â\9dªj0,g1â\9d« ≘ jg.
+ â\88\80jf,jg,j. @â\9d¨jf,f2â\9d© â\89\98 j â\86\92 @â\9d¨jg,g2â\9d© ≘ j →
+ â\88\83â\88\83j0. @â\9d¨j0,f1â\9d© â\89\98 jf & @â\9d¨j0,g1â\9d© ≘ jg.
(* Basic inversions *********************************************************)
(*** at_inv_ppx *)
lemma pr_pat_inv_unit_push (f) (i1) (i2):
- @â\9dªi1,fâ\9d« ≘ i2 → ∀g. 𝟏 = i1 → ⫯g = f → 𝟏 = i2.
+ @â\9d¨i1,fâ\9d© ≘ i2 → ∀g. 𝟏 = i1 → ⫯g = f → 𝟏 = i2.
#f #i1 #i2 * -f -i1 -i2 //
[ #f #i1 #i2 #_ #g #j1 #j2 #_ * #_ #x #H destruct
| #f #i1 #i2 #_ #g #j2 * #_ #x #_ #H elim (eq_inv_pr_push_next … H)
(*** at_inv_npx *)
lemma pr_pat_inv_succ_push (f) (i1) (i2):
- @â\9dªi1,fâ\9d« ≘ i2 → ∀g,j1. ↑j1 = i1 → ⫯g = f →
- â\88\83â\88\83j2. @â\9dªj1,gâ\9d« ≘ j2 & ↑j2 = i2.
+ @â\9d¨i1,fâ\9d© ≘ i2 → ∀g,j1. ↑j1 = i1 → ⫯g = f →
+ â\88\83â\88\83j2. @â\9d¨j1,gâ\9d© ≘ j2 & ↑j2 = i2.
#f #i1 #i2 * -f -i1 -i2
[ #f #g #j1 #j2 #_ * #_ #x #x1 #H destruct
| #f #i1 #i2 #Hi #g #j1 #j2 * * * #x #x1 #H #Hf >(eq_inv_pr_push_bi … Hf) -g destruct /2 width=3 by ex2_intro/
(*** at_inv_xnx *)
lemma pr_pat_inv_next (f) (i1) (i2):
- @â\9dªi1,fâ\9d« ≘ i2 → ∀g. ↑g = f →
- â\88\83â\88\83j2. @â\9dªi1,gâ\9d« ≘ j2 & ↑j2 = i2.
+ @â\9d¨i1,fâ\9d© ≘ i2 → ∀g. ↑g = f →
+ â\88\83â\88\83j2. @â\9d¨i1,gâ\9d© ≘ j2 & ↑j2 = i2.
#f #i1 #i2 * -f -i1 -i2
[ #f #g #j1 #j2 * #_ #_ #x #H elim (eq_inv_pr_next_push … H)
| #f #i1 #i2 #_ #g #j1 #j2 * #_ #_ #x #H elim (eq_inv_pr_next_push … H)
(*** at_inv_ppn *)
lemma pr_pat_inv_unit_push_succ (f) (i1) (i2):
- @â\9dªi1,fâ\9d« ≘ i2 → ∀g,j2. 𝟏 = i1 → ⫯g = f → ↑j2 = i2 → ⊥.
+ @â\9d¨i1,fâ\9d© ≘ i2 → ∀g,j2. 𝟏 = i1 → ⫯g = f → ↑j2 = i2 → ⊥.
#f #i1 #i2 #Hf #g #j2 #H1 #H <(pr_pat_inv_unit_push … Hf … H1 H) -f -g -i1 -i2
#H destruct
qed-.
(*** at_inv_npp *)
lemma pr_pat_inv_succ_push_unit (f) (i1) (i2):
- @â\9dªi1,fâ\9d« ≘ i2 → ∀g,j1. ↑j1 = i1 → ⫯g = f → 𝟏 = i2 → ⊥.
+ @â\9d¨i1,fâ\9d© ≘ i2 → ∀g,j1. ↑j1 = i1 → ⫯g = f → 𝟏 = i2 → ⊥.
#f #i1 #i2 #Hf #g #j1 #H1 #H elim (pr_pat_inv_succ_push … Hf … H1 H) -f -i1
#x2 #Hg * -i2 #H destruct
qed-.
(*** at_inv_npn *)
lemma pr_pat_inv_succ_push_succ (f) (i1) (i2):
- @â\9dªi1,fâ\9d« â\89\98 i2 â\86\92 â\88\80g,j1,j2. â\86\91j1 = i1 â\86\92 ⫯g = f â\86\92 â\86\91j2 = i2 â\86\92 @â\9dªj1,gâ\9d« ≘ j2.
+ @â\9d¨i1,fâ\9d© â\89\98 i2 â\86\92 â\88\80g,j1,j2. â\86\91j1 = i1 â\86\92 ⫯g = f â\86\92 â\86\91j2 = i2 â\86\92 @â\9d¨j1,gâ\9d© ≘ j2.
#f #i1 #i2 #Hf #g #j1 #j2 #H1 #H elim (pr_pat_inv_succ_push … Hf … H1 H) -f -i1
#x2 #Hg * -i2 #H destruct //
qed-.
(*** at_inv_xnp *)
lemma pr_pat_inv_next_unit (f) (i1) (i2):
- @â\9dªi1,fâ\9d« ≘ i2 → ∀g. ↑g = f → 𝟏 = i2 → ⊥.
+ @â\9d¨i1,fâ\9d© ≘ i2 → ∀g. ↑g = f → 𝟏 = i2 → ⊥.
#f #i1 #i2 #Hf #g #H elim (pr_pat_inv_next … Hf … H) -f
#x2 #Hg * -i2 #H destruct
qed-.
(*** at_inv_xnn *)
lemma pr_pat_inv_next_succ (f) (i1) (i2):
- @â\9dªi1,fâ\9d« â\89\98 i2 â\86\92 â\88\80g,j2. â\86\91g = f â\86\92 â\86\91j2 = i2 â\86\92 @â\9dªi1,gâ\9d« ≘ j2.
+ @â\9d¨i1,fâ\9d© â\89\98 i2 â\86\92 â\88\80g,j2. â\86\91g = f â\86\92 â\86\91j2 = i2 â\86\92 @â\9d¨i1,gâ\9d© ≘ j2.
#f #i1 #i2 #Hf #g #j2 #H elim (pr_pat_inv_next … Hf … H) -f
#x2 #Hg * -i2 #H destruct //
qed-.
(*** at_inv_pxp *)
lemma pr_pat_inv_unit_bi (f) (i1) (i2):
- @â\9dªi1,fâ\9d« ≘ i2 → 𝟏 = i1 → 𝟏 = i2 → ∃g. ⫯g = f.
+ @â\9d¨i1,fâ\9d© ≘ i2 → 𝟏 = i1 → 𝟏 = i2 → ∃g. ⫯g = f.
#f elim (pr_map_split_tl … f) /2 width=2 by ex_intro/
#H #i1 #i2 #Hf #H1 #H2 cases (pr_pat_inv_next_unit … Hf … H H2)
qed-.
(*** at_inv_pxn *)
lemma pr_pat_inv_unit_succ (f) (i1) (i2):
- @â\9dªi1,fâ\9d« ≘ i2 → ∀j2. 𝟏 = i1 → ↑j2 = i2 →
- â\88\83â\88\83g. @â\9dªi1,gâ\9d« ≘ j2 & ↑g = f.
+ @â\9d¨i1,fâ\9d© ≘ i2 → ∀j2. 𝟏 = i1 → ↑j2 = i2 →
+ â\88\83â\88\83g. @â\9d¨i1,gâ\9d© ≘ j2 & ↑g = f.
#f elim (pr_map_split_tl … f)
#H #i1 #i2 #Hf #j2 #H1 #H2
[ elim (pr_pat_inv_unit_push_succ … Hf … H1 H H2)
(*** at_inv_nxp *)
lemma pr_pat_inv_succ_unit (f) (i1) (i2):
- @â\9dªi1,fâ\9d« ≘ i2 → ∀j1. ↑j1 = i1 → 𝟏 = i2 → ⊥.
+ @â\9d¨i1,fâ\9d© ≘ i2 → ∀j1. ↑j1 = i1 → 𝟏 = i2 → ⊥.
#f elim (pr_map_split_tl f)
#H #i1 #i2 #Hf #j1 #H1 #H2
[ elim (pr_pat_inv_succ_push_unit … Hf … H1 H H2)
(*** at_inv_nxn *)
lemma pr_pat_inv_succ_bi (f) (i1) (i2):
- @â\9dªi1,fâ\9d« ≘ i2 → ∀j1,j2. ↑j1 = i1 → ↑j2 = i2 →
- â\88¨â\88¨ â\88\83â\88\83g. @â\9dªj1,gâ\9d« ≘ j2 & ⫯g = f
- | â\88\83â\88\83g. @â\9dªi1,gâ\9d« ≘ j2 & ↑g = f.
+ @â\9d¨i1,fâ\9d© ≘ i2 → ∀j1,j2. ↑j1 = i1 → ↑j2 = i2 →
+ â\88¨â\88¨ â\88\83â\88\83g. @â\9d¨j1,gâ\9d© ≘ j2 & ⫯g = f
+ | â\88\83â\88\83g. @â\9d¨i1,gâ\9d© ≘ j2 & ↑g = f.
#f elim (pr_map_split_tl f) *
/4 width=7 by pr_pat_inv_next_succ, pr_pat_inv_succ_push_succ, ex2_intro, or_intror, or_introl/
qed-.
(* Note: the following inversion lemmas must be checked *)
(*** at_inv_xpx *)
lemma pr_pat_inv_push (f) (i1) (i2):
- @â\9dªi1,fâ\9d« ≘ i2 → ∀g. ⫯g = f →
+ @â\9d¨i1,fâ\9d© ≘ i2 → ∀g. ⫯g = f →
∨∨ ∧∧ 𝟏 = i1 & 𝟏 = i2
- | â\88\83â\88\83j1,j2. @â\9dªj1,gâ\9d« ≘ j2 & ↑j1 = i1 & ↑j2 = i2.
+ | â\88\83â\88\83j1,j2. @â\9d¨j1,gâ\9d© ≘ j2 & ↑j1 = i1 & ↑j2 = i2.
#f * [2: #i1 ] #i2 #Hf #g #H
[ elim (pr_pat_inv_succ_push … Hf … H) -f /3 width=5 by or_intror, ex3_2_intro/
| >(pr_pat_inv_unit_push … Hf … H) -f /3 width=1 by conj, or_introl/
(*** at_inv_xpp *)
lemma pr_pat_inv_push_unit (f) (i1) (i2):
- @â\9dªi1,fâ\9d« ≘ i2 → ∀g. ⫯g = f → 𝟏 = i2 → 𝟏 = i1.
+ @â\9d¨i1,fâ\9d© ≘ i2 → ∀g. ⫯g = f → 𝟏 = i2 → 𝟏 = i1.
#f #i1 #i2 #Hf #g #H elim (pr_pat_inv_push … Hf … H) -f * //
#j1 #j2 #_ #_ * -i2 #H destruct
qed-.
(*** at_inv_xpn *)
lemma pr_pat_inv_push_succ (f) (i1) (i2):
- @â\9dªi1,fâ\9d« ≘ i2 → ∀g,j2. ⫯g = f → ↑j2 = i2 →
- â\88\83â\88\83j1. @â\9dªj1,gâ\9d« ≘ j2 & ↑j1 = i1.
+ @â\9d¨i1,fâ\9d© ≘ i2 → ∀g,j2. ⫯g = f → ↑j2 = i2 →
+ â\88\83â\88\83j1. @â\9d¨j1,gâ\9d© ≘ j2 & ↑j1 = i1.
#f #i1 #i2 #Hf #g #j2 #H elim (pr_pat_inv_push … Hf … H) -f *
[ #_ * -i2 #H destruct
| #x1 #x2 #Hg #H1 * -i2 #H destruct /2 width=3 by ex2_intro/
(*** at_inv_xxp *)
lemma pr_pat_inv_unit_dx (f) (i1) (i2):
- @â\9dªi1,fâ\9d« ≘ i2 → 𝟏 = i2 →
+ @â\9d¨i1,fâ\9d© ≘ i2 → 𝟏 = i2 →
∃∃g. 𝟏 = i1 & ⫯g = f.
#f elim (pr_map_split_tl f)
#H #i1 #i2 #Hf #H2
(*** at_inv_xxn *)
lemma pr_pat_inv_succ_dx (f) (i1) (i2):
- @â\9dªi1,fâ\9d« ≘ i2 → ∀j2. ↑j2 = i2 →
- â\88¨â\88¨ â\88\83â\88\83g,j1. @â\9dªj1,gâ\9d« ≘ j2 & ↑j1 = i1 & ⫯g = f
- | â\88\83â\88\83g. @â\9dªi1,gâ\9d« ≘ j2 & ↑g = f.
+ @â\9d¨i1,fâ\9d© ≘ i2 → ∀j2. ↑j2 = i2 →
+ â\88¨â\88¨ â\88\83â\88\83g,j1. @â\9d¨j1,gâ\9d© ≘ j2 & ↑j1 = i1 & ⫯g = f
+ | â\88\83â\88\83g. @â\9d¨i1,gâ\9d© ≘ j2 & ↑g = f.
#f elim (pr_map_split_tl f)
#H #i1 #i2 #Hf #j2 #H2
[ elim (pr_pat_inv_push_succ … Hf … H H2) -i2 /3 width=5 by or_introl, ex3_2_intro/
(*** at_basic_lt *)
lemma pr_pat_basic_lt (m) (n) (i):
- ninj i â\89¤ m â\86\92 @â\9dªi, ð\9d\90\9bâ\9d¨m,nâ\9d©â\9d« ≘ i.
+ ninj i â\89¤ m â\86\92 @â\9d¨i, ð\9d\90\9bâ\9d¨m,nâ\9d©â\9d© ≘ i.
#m #n #i >(npsucc_pred i) #Hmi
/2 width=1 by pr_nat_basic_lt/
qed.
(*** at_basic_ge *)
lemma pr_pat_basic_ge (m) (n) (i):
- m < ninj i â\86\92 @â\9dªi, ð\9d\90\9bâ\9d¨m,nâ\9d©â\9d« ≘ i+n.
+ m < ninj i â\86\92 @â\9d¨i, ð\9d\90\9bâ\9d¨m,nâ\9d©â\9d© ≘ i+n.
#m #n #i >(npsucc_pred i) #Hmi <nrplus_npsucc_sn
/3 width=1 by pr_nat_basic_ge, nlt_inv_succ_dx/
qed.
(*** at_basic_inv_lt *)
lemma pr_pat_basic_inv_lt (m) (n) (i) (j):
- ninj i â\89¤ m â\86\92 @â\9dªi, ð\9d\90\9bâ\9d¨m,nâ\9d©â\9d« ≘ j → i = j.
+ ninj i â\89¤ m â\86\92 @â\9d¨i, ð\9d\90\9bâ\9d¨m,nâ\9d©â\9d© ≘ j → i = j.
/3 width=4 by pr_pat_basic_lt, pr_pat_mono/ qed-.
(*** at_basic_inv_ge *)
lemma pr_pat_basic_inv_ge (m) (n) (i) (j):
- m < ninj i â\86\92 @â\9dªi, ð\9d\90\9bâ\9d¨m,nâ\9d©â\9d« ≘ j → i+n = j.
+ m < ninj i â\86\92 @â\9d¨i, ð\9d\90\9bâ\9d¨m,nâ\9d©â\9d© ≘ j → i+n = j.
/3 width=4 by pr_pat_basic_ge, pr_pat_mono/ qed-.
(*** at_eq_repl_back *)
corec lemma pr_pat_eq_repl_back (i1) (i2):
- pr_eq_repl_back (λf. @â\9dªi1,fâ\9d« ≘ i2).
+ pr_eq_repl_back (λf. @â\9d¨i1,fâ\9d© ≘ i2).
#f1 * -f1 -i1 -i2
[ #f1 #g1 #j1 #j2 #H #H1 #H2 #f2 #H12
cases (pr_eq_inv_push_sn … H12 … H) -g1 /2 width=2 by pr_pat_refl/
(*** at_eq_repl_fwd *)
lemma pr_pat_eq_repl_fwd (i1) (i2):
- pr_eq_repl_fwd (λf. @â\9dªi1,fâ\9d« ≘ i2).
+ pr_eq_repl_fwd (λf. @â\9d¨i1,fâ\9d© ≘ i2).
#i1 #i2 @pr_eq_repl_sym /2 width=3 by pr_pat_eq_repl_back/
qed-.
-lemma pr_pat_eq (f): ⫯f â\89¡ f â\86\92 â\88\80i. @â\9dªi,fâ\9d« ≘ i.
+lemma pr_pat_eq (f): ⫯f â\89¡ f â\86\92 â\88\80i. @â\9d¨i,fâ\9d© ≘ i.
#f #Hf #i elim i -i
[ /3 width=3 by pr_pat_eq_repl_back, pr_pat_refl/
| /3 width=7 by pr_pat_eq_repl_back, pr_pat_push/
(* Inversions with pr_eq ****************************************************)
corec lemma pr_pat_inv_eq (f):
- (â\88\80i. @â\9dªi,fâ\9d« ≘ i) → ⫯f ≡ f.
+ (â\88\80i. @â\9d¨i,fâ\9d© ≘ i) → ⫯f ≡ f.
#Hf
lapply (Hf (𝟏)) #H
lapply (pr_pat_des_id … H) -H #H
(* Constructions with pr_id *************************************************)
(*** id_at *)
-lemma pr_pat_id (i): @â\9dªi,ð\9d\90¢â\9d« ≘ i.
+lemma pr_pat_id (i): @â\9d¨i,ð\9d\90¢â\9d© ≘ i.
/2 width=1 by pr_pat_eq, pr_eq_refl/ qed.
(* Inversions with pr_id ****************************************************)
(*** id_inv_at *)
lemma pr_pat_inv_id (f):
- (â\88\80i. @â\9dªi,fâ\9d« ≘ i) → 𝐢 ≡ f.
+ (â\88\80i. @â\9d¨i,fâ\9d© ≘ i) → 𝐢 ≡ f.
/3 width=1 by pr_pat_inv_eq, pr_id_eq/
qed-.
(*** at_increasing *)
lemma pr_pat_increasing (i2) (i1) (f):
- @â\9dªi1,fâ\9d« ≘ i2 → i1 ≤ i2.
+ @â\9d¨i1,fâ\9d© ≘ i2 → i1 ≤ i2.
#i2 elim i2 -i2
[ #i1 #f #Hf elim (pr_pat_inv_unit_dx … Hf) -Hf //
| #i2 #IH * //
(*** at_increasing_strict *)
lemma pr_pat_increasing_strict (g) (i1) (i2):
- @â\9dªi1,gâ\9d« ≘ i2 → ∀f. ↑f = g →
- â\88§â\88§ i1 < i2 & @â\9dªi1,fâ\9d« ≘ ↓i2.
+ @â\9d¨i1,gâ\9d© ≘ i2 → ∀f. ↑f = g →
+ â\88§â\88§ i1 < i2 & @â\9d¨i1,fâ\9d© ≘ ↓i2.
#g #i1 #i2 #Hg #f #H elim (pr_pat_inv_next … Hg … H) -Hg -H
/4 width=2 by conj, pr_pat_increasing, ple_succ_bi/
qed-.
(*** at_fwd_id_ex *)
-lemma pr_pat_des_id (f) (i): @â\9dªi,fâ\9d« ≘ i → ⫯⫰f = f.
+lemma pr_pat_des_id (f) (i): @â\9d¨i,fâ\9d© ≘ i → ⫯⫰f = f.
#f elim (pr_map_split_tl f) //
#H #i #Hf elim (pr_pat_inv_next … Hf … H) -Hf -H
#j2 #Hg #H destruct lapply (pr_pat_increasing … Hg) -Hg
(*** at_le_ex *)
lemma pr_pat_le_ex (j2) (i2) (f):
- @â\9dªi2,fâ\9d« ≘ j2 → ∀i1. i1 ≤ i2 →
- â\88\83â\88\83j1. @â\9dªi1,fâ\9d« ≘ j1 & j1 ≤ j2.
+ @â\9d¨i2,fâ\9d© ≘ j2 → ∀i1. i1 ≤ i2 →
+ â\88\83â\88\83j1. @â\9d¨i1,fâ\9d© ≘ j1 & j1 ≤ j2.
#j2 elim j2 -j2 [2: #j2 #IH ] #i2 #f #Hf
[ elim (pr_pat_inv_succ_dx … Hf) -Hf [1,3: * |*: // ]
#g [ #x2 ] #Hg [ #H2 ] #H0
(*** at_id_le *)
lemma pr_pat_id_le (i1) (i2):
- i1 â\89¤ i2 â\86\92 â\88\80f. @â\9dªi2,fâ\9d« â\89\98 i2 â\86\92 @â\9dªi1,fâ\9d« ≘ i1.
+ i1 â\89¤ i2 â\86\92 â\88\80f. @â\9d¨i2,fâ\9d© â\89\98 i2 â\86\92 @â\9d¨i1,fâ\9d© ≘ i1.
#i1 #i2 #H
@(ple_ind_alt … H) -i1 -i2 [ #i2 | #i1 #i2 #_ #IH ] #f #Hf
lapply (pr_pat_des_id … Hf) #H <H in Hf; -H
(*** at_monotonic *)
theorem pr_pat_monotonic:
- â\88\80j2,i2,f. @â\9dªi2,fâ\9d« â\89\98 j2 â\86\92 â\88\80j1,i1. @â\9dªi1,fâ\9d« ≘ j1 →
+ â\88\80j2,i2,f. @â\9d¨i2,fâ\9d© â\89\98 j2 â\86\92 â\88\80j1,i1. @â\9d¨i1,fâ\9d© ≘ j1 →
i1 < i2 → j1 < j2.
#j2 elim j2 -j2
[ #i2 #f #H2f elim (pr_pat_inv_unit_dx … H2f) -H2f //
(*** at_inv_monotonic *)
theorem pr_pat_inv_monotonic:
- â\88\80j1,i1,f. @â\9dªi1,fâ\9d« â\89\98 j1 â\86\92 â\88\80j2,i2. @â\9dªi2,fâ\9d« ≘ j2 →
+ â\88\80j1,i1,f. @â\9d¨i1,fâ\9d© â\89\98 j1 â\86\92 â\88\80j2,i2. @â\9d¨i2,fâ\9d© ≘ j2 →
j1 < j2 → i1 < i2.
#j1 elim j1 -j1
[ #i1 #f #H1f elim (pr_pat_inv_unit_dx … H1f) -H1f //
(*** at_mono *)
theorem pr_pat_mono (f) (i):
- â\88\80i1. @â\9dªi,fâ\9d« â\89\98 i1 â\86\92 â\88\80i2. @â\9dªi,fâ\9d« ≘ i2 → i2 = i1.
+ â\88\80i1. @â\9d¨i,fâ\9d© â\89\98 i1 â\86\92 â\88\80i2. @â\9d¨i,fâ\9d© ≘ i2 → i2 = i1.
#f #i #i1 #H1 #i2 #H2 elim (pnat_split_lt_eq_gt i2 i1) //
#Hi elim (plt_ge_false i i)
/2 width=6 by pr_pat_inv_monotonic/
(*** at_inj *)
theorem pr_pat_inj (f) (i):
- â\88\80i1. @â\9dªi1,fâ\9d« â\89\98 i â\86\92 â\88\80i2. @â\9dªi2,fâ\9d« ≘ i → i1 = i2.
+ â\88\80i1. @â\9d¨i1,fâ\9d© â\89\98 i â\86\92 â\88\80i2. @â\9d¨i2,fâ\9d© ≘ i → i1 = i2.
#f #i #i1 #H1 #i2 #H2 elim (pnat_split_lt_eq_gt i2 i1) //
#Hi elim (plt_ge_false i i)
/2 width=6 by pr_pat_monotonic/
(*** at_id_fwd *)
lemma pr_pat_id_des (i1) (i2):
- @â\9dªi1,ð\9d\90¢â\9d« ≘ i2 → i1 = i2.
+ @â\9d¨i1,ð\9d\90¢â\9d© ≘ i2 → i1 = i2.
/2 width=4 by pr_pat_mono/ qed-.
(* Main constructions with pr_id ********************************************)
(* Note: this requires ↑ on first n *)
(*** at_pxx_tls *)
lemma pr_pat_unit_succ_tls (n) (f):
- @â\9dªð\9d\9f\8f,fâ\9d« â\89\98 â\86\91n â\86\92 @â\9dªð\9d\9f\8f,â«°*[n]fâ\9d« ≘ 𝟏.
+ @â\9d¨ð\9d\9f\8f,fâ\9d© â\89\98 â\86\91n â\86\92 @â\9d¨ð\9d\9f\8f,â«°*[n]fâ\9d© ≘ 𝟏.
#n @(nat_ind_succ … n) -n //
#n #IH #f #Hf
elim (pr_pat_inv_unit_succ … Hf) -Hf [|*: // ] #g #Hg #H0 destruct
(* Note: this requires ↑ on third n2 *)
(*** at_tls *)
-lemma pr_pat_tls (n2) (f): ⫯⫰*[â\86\91n2]f â\89¡ â«°*[n2]f â\86\92 â\88\83i1. @â\9dªi1,fâ\9d« ≘ ↑n2.
+lemma pr_pat_tls (n2) (f): ⫯⫰*[â\86\91n2]f â\89¡ â«°*[n2]f â\86\92 â\88\83i1. @â\9d¨i1,fâ\9d© ≘ ↑n2.
#n2 @(nat_ind_succ … n2) -n2
[ /4 width=4 by pr_pat_eq_repl_back, pr_pat_refl, ex_intro/
| #n2 #IH #f <pr_tls_swap <pr_tls_swap in ⊢ (??%→?); #H
(* Note: this does not require ↑ on second and third p *)
(*** at_inv_nxx *)
lemma pr_pat_inv_succ_sn (p) (g) (i1) (j2):
- @â\9dªâ\86\91i1,gâ\9d« â\89\98 j2 â\86\92 @â\9dªð\9d\9f\8f,gâ\9d« ≘ p →
- â\88\83â\88\83i2. @â\9dªi1,â«°*[p]gâ\9d« ≘ i2 & p+i2 = j2.
+ @â\9d¨â\86\91i1,gâ\9d© â\89\98 j2 â\86\92 @â\9d¨ð\9d\9f\8f,gâ\9d© ≘ p →
+ â\88\83â\88\83i2. @â\9d¨i1,â«°*[p]gâ\9d© ≘ i2 & p+i2 = j2.
#p elim p -p
[ #g #i1 #j2 #Hg #H
elim (pr_pat_inv_unit_bi … H) -H [|*: // ] #f #H0
(* Note: this requires ↑ on first n2 *)
(*** at_inv_tls *)
lemma pr_pat_inv_succ_dx_tls (n2) (i1) (f):
- @â\9dªi1,fâ\9d« ≘ ↑n2 → ⫯⫰*[↑n2]f ≡ ⫰*[n2]f.
+ @â\9d¨i1,fâ\9d© ≘ ↑n2 → ⫯⫰*[↑n2]f ≡ ⫰*[n2]f.
#n2 @(nat_ind_succ … n2) -n2
[ #i1 #f #Hf elim (pr_pat_inv_unit_dx … Hf) -Hf // #g #H1 #H destruct
/2 width=1 by pr_eq_refl/
(*** at_uni *)
lemma pr_pat_uni (n) (i):
- @â\9dªi,ð\9d\90®â\9d¨nâ\9d©â\9d« ≘ i+n.
+ @â\9d¨i,ð\9d\90®â\9d¨nâ\9d©â\9d© ≘ i+n.
#n @(nat_ind_succ … n) -n
/2 width=5 by pr_pat_next/
qed.
(*** at_inv_uni *)
lemma pr_pat_inv_uni (n) (i) (j):
- @â\9dªi,ð\9d\90®â\9d¨nâ\9d©â\9d« ≘ j → j = i+n.
+ @â\9d¨i,ð\9d\90®â\9d¨nâ\9d©â\9d© ≘ j → j = i+n.
/2 width=4 by pr_pat_mono/ qed-.
(*** sdj_isid_dx *)
corec lemma pr_sdj_isi_dx:
- â\88\80f2. ð\9d\90\88â\9dªf2â\9d« → ∀f1. f1 ∥ f2.
+ â\88\80f2. ð\9d\90\88â\9d¨f2â\9d© → ∀f1. f1 ∥ f2.
#f2 * -f2
#f2 #g2 #Hf2 #H2 #f1 cases (pr_map_split_tl f1) *
/3 width=5 by pr_sdj_next_push, pr_sdj_push_bi/
(*** sdj_isid_sn *)
corec lemma pr_sdj_isi_sn:
- â\88\80f1. ð\9d\90\88â\9dªf1â\9d« → ∀f2. f1 ∥ f2.
+ â\88\80f1. ð\9d\90\88â\9d¨f1â\9d© → ∀f2. f1 ∥ f2.
#f1 * -f1
#f1 #g1 #Hf1 #H1 #f2 cases (pr_map_split_tl f2) *
/3 width=5 by pr_sdj_push_next, pr_sdj_push_bi/
(*** sdj_inv_refl *)
corec lemma pr_sdj_inv_refl:
- â\88\80f. f â\88¥ f â\86\92 ð\9d\90\88â\9dªfâ\9d«.
+ â\88\80f. f â\88¥ f â\86\92 ð\9d\90\88â\9d¨fâ\9d©.
#f cases (pr_map_split_tl f) #Hf #H
[ lapply (pr_sdj_inv_push_bi … H … Hf Hf) -H /3 width=3 by pr_isi_push/
| elim (pr_sdj_inv_next_bi … H … Hf Hf)
(*** sle_isdiv_dx *)
corec lemma pr_sle_isd_dx:
- â\88\80f2. ð\9d\9b\80â\9dªf2â\9d« → ∀f1. f1 ⊆ f2.
+ â\88\80f2. ð\9d\9b\80â\9d¨f2â\9d© → ∀f1. f1 ⊆ f2.
#f2 * -f2
#f2 #g2 #Hf2 #H2 #f1 cases (pr_map_split_tl f1) *
/3 width=5 by pr_sle_weak, pr_sle_next/
(*** sle_inv_isdiv_sn *)
corec lemma pr_sle_inv_isd_sn:
- â\88\80f1,f2. f1 â\8a\86 f2 â\86\92 ð\9d\9b\80â\9dªf1â\9d« â\86\92 ð\9d\9b\80â\9dªf2â\9d«.
+ â\88\80f1,f2. f1 â\8a\86 f2 â\86\92 ð\9d\9b\80â\9d¨f1â\9d© â\86\92 ð\9d\9b\80â\9d¨f2â\9d©.
#f1 #f2 * -f1 -f2
#f1 #f2 #g1 #g2 #Hf * * #H
[1,3: elim (pr_isd_inv_push … H) // ]
(*** sle_isid_sn *)
corec lemma pr_sle_isi_sn:
- â\88\80f1. ð\9d\90\88â\9dªf1â\9d« → ∀f2. f1 ⊆ f2.
+ â\88\80f1. ð\9d\90\88â\9d¨f1â\9d© → ∀f2. f1 ⊆ f2.
#f1 * -f1
#f1 #g1 #Hf1 #H1 #f2 cases (pr_map_split_tl f2) *
/3 width=5 by pr_sle_weak, pr_sle_push/
(*** sle_inv_isid_dx *)
corec lemma pr_sle_inv_isi_dx:
- â\88\80f1,f2. f1 â\8a\86 f2 â\86\92 ð\9d\90\88â\9dªf2â\9d« â\86\92 ð\9d\90\88â\9dªf1â\9d«.
+ â\88\80f1,f2. f1 â\8a\86 f2 â\86\92 ð\9d\90\88â\9d¨f2â\9d© â\86\92 ð\9d\90\88â\9d¨f1â\9d©.
#f1 #f2 * -f1 -f2
#f1 #f2 #g1 #g2 #Hf * * #H
[2,3: elim (pr_isi_inv_next … H) // ]
(*** coafter_sor *)
lemma pr_sor_coafter_dx_tans:
- â\88\80f. ð\9d\90\85â\9dªfâ\9d« â\86\92 â\88\80f2. ð\9d\90\93â\9dªf2â\9d« → ∀f1. f2 ~⊚ f1 ≘ f → ∀f1a,f1b. f1a ⋓ f1b ≘ f1 →
+ â\88\80f. ð\9d\90\85â\9d¨fâ\9d© â\86\92 â\88\80f2. ð\9d\90\93â\9d¨f2â\9d© → ∀f1. f2 ~⊚ f1 ≘ f → ∀f1a,f1b. f1a ⋓ f1b ≘ f1 →
∃∃fa,fb. f2 ~⊚ f1a ≘ fa & f2 ~⊚ f1b ≘ fb & fa ⋓ fb ≘ f.
@pr_isf_ind
[ #f #Hf #f2 #Hf2 #f1 #Hf #f1a #f1b #Hf1
(*** coafter_inv_sor *)
lemma pr_sor_coafter_div:
- â\88\80f. ð\9d\90\85â\9dªfâ\9d« â\86\92 â\88\80f2. ð\9d\90\93â\9dªf2â\9d« → ∀f1. f2 ~⊚ f1 ≘ f → ∀fa,fb. fa ⋓ fb ≘ f →
+ â\88\80f. ð\9d\90\85â\9d¨fâ\9d© â\86\92 â\88\80f2. ð\9d\90\93â\9d¨f2â\9d© → ∀f1. f2 ~⊚ f1 ≘ f → ∀fa,fb. fa ⋓ fb ≘ f →
∃∃f1a,f1b. f2 ~⊚ f1a ≘ fa & f2 ~⊚ f1b ≘ fb & f1a ⋓ f1b ≘ f1.
@pr_isf_ind
[ #f #Hf #f2 #Hf2 #f1 #H1f #fa #fb #H2f
(*** sor_fcla_ex *)
lemma pr_sor_fcla_bi:
- â\88\80f1,n1. ð\9d\90\82â\9dªf1â\9d« â\89\98 n1 â\86\92 â\88\80f2,n2. ð\9d\90\82â\9dªf2â\9d« ≘ n2 →
- â\88\83â\88\83f,n. f1 â\8b\93 f2 â\89\98 f & ð\9d\90\82â\9dªfâ\9d« ≘ n & (n1 ∨ n2) ≤ n & n ≤ n1 + n2.
+ â\88\80f1,n1. ð\9d\90\82â\9d¨f1â\9d© â\89\98 n1 â\86\92 â\88\80f2,n2. ð\9d\90\82â\9d¨f2â\9d© ≘ n2 →
+ â\88\83â\88\83f,n. f1 â\8b\93 f2 â\89\98 f & ð\9d\90\82â\9d¨fâ\9d© ≘ n & (n1 ∨ n2) ≤ n & n ≤ n1 + n2.
#f1 #n1 #Hf1 elim Hf1 -f1 -n1 /3 width=6 by pr_sor_isi_sn, ex4_2_intro/
#f1 #n1 #Hf1 #IH #f2 #n2 * -f2 -n2 /3 width=6 by pr_fcla_push, pr_fcla_next, ex4_2_intro, pr_sor_isi_dx/
#f2 #n2 #Hf2 elim (IH … Hf2) -IH -Hf2 -Hf1 [2,4: #f #n <nplus_succ_dx ] (* * full auto fails *)
(*** sor_fcla *)
lemma pr_sor_inv_fcla_bi:
- â\88\80f1,n1. ð\9d\90\82â\9dªf1â\9d« â\89\98 n1 â\86\92 â\88\80f2,n2. ð\9d\90\82â\9dªf2â\9d« ≘ n2 → ∀f. f1 ⋓ f2 ≘ f →
- â\88\83â\88\83n. ð\9d\90\82â\9dªfâ\9d« ≘ n & (n1 ∨ n2) ≤ n & n ≤ n1 + n2.
+ â\88\80f1,n1. ð\9d\90\82â\9d¨f1â\9d© â\89\98 n1 â\86\92 â\88\80f2,n2. ð\9d\90\82â\9d¨f2â\9d© ≘ n2 → ∀f. f1 ⋓ f2 ≘ f →
+ â\88\83â\88\83n. ð\9d\90\82â\9d¨fâ\9d© ≘ n & (n1 ∨ n2) ≤ n & n ≤ n1 + n2.
#f1 #n1 #Hf1 #f2 #n2 #Hf2 #f #Hf elim (pr_sor_fcla_bi … Hf1 … Hf2) -Hf1 -Hf2
/4 width=6 by pr_sor_mono, pr_fcla_eq_repl_back, ex3_intro/
qed-.
(*** sor_fwd_fcla_sn_ex *)
lemma pr_sor_des_fcla_sn:
- â\88\80f,n. ð\9d\90\82â\9dªfâ\9d« ≘ n → ∀f1,f2. f1 ⋓ f2 ≘ f →
- â\88\83â\88\83n1. ð\9d\90\82â\9dªf1â\9d« ≘ n1 & n1 ≤ n.
+ â\88\80f,n. ð\9d\90\82â\9d¨fâ\9d© ≘ n → ∀f1,f2. f1 ⋓ f2 ≘ f →
+ â\88\83â\88\83n1. ð\9d\90\82â\9d¨f1â\9d© ≘ n1 & n1 ≤ n.
#f #n #H elim H -f -n
[ /4 width=4 by pr_sor_des_isi_sn, pr_fcla_isi, ex2_intro/
| #f #n #_ #IH #f1 #f2 #H
(*** sor_fwd_fcla_dx_ex *)
lemma pr_sor_des_fcla_dx:
- â\88\80f,n. ð\9d\90\82â\9dªfâ\9d« ≘ n → ∀f1,f2. f1 ⋓ f2 ≘ f →
- â\88\83â\88\83n2. ð\9d\90\82â\9dªf2â\9d« ≘ n2 & n2 ≤ n.
+ â\88\80f,n. ð\9d\90\82â\9d¨fâ\9d© ≘ n → ∀f1,f2. f1 ⋓ f2 ≘ f →
+ â\88\83â\88\83n2. ð\9d\90\82â\9d¨f2â\9d© ≘ n2 & n2 ≤ n.
/3 width=4 by pr_sor_des_fcla_sn, pr_sor_comm/ qed-.
(*** sor_isfin_ex *)
lemma pr_sor_isf_bi:
- â\88\80f1,f2. ð\9d\90\85â\9dªf1â\9d« â\86\92 ð\9d\90\85â\9dªf2â\9d« â\86\92 â\88\83â\88\83f. f1 â\8b\93 f2 â\89\98 f & ð\9d\90\85â\9dªfâ\9d«.
+ â\88\80f1,f2. ð\9d\90\85â\9d¨f1â\9d© â\86\92 ð\9d\90\85â\9d¨f2â\9d© â\86\92 â\88\83â\88\83f. f1 â\8b\93 f2 â\89\98 f & ð\9d\90\85â\9d¨fâ\9d©.
#f1 #f2 * #n1 #H1 * #n2 #H2 elim (pr_sor_fcla_bi … H1 … H2) -H1 -H2
/3 width=4 by ex2_intro, ex_intro/
qed-.
(*** sor_fwd_isfin_sn *)
lemma pr_sor_des_isf_sn:
- â\88\80f. ð\9d\90\85â\9dªfâ\9d« â\86\92 â\88\80f1,f2. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\85â\9dªf1â\9d«.
+ â\88\80f. ð\9d\90\85â\9d¨fâ\9d© â\86\92 â\88\80f1,f2. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\85â\9d¨f1â\9d©.
#f * #n #Hf #f1 #f2 #H
elim (pr_sor_des_fcla_sn … Hf … H) -f -f2 /2 width=2 by ex_intro/
qed-.
(*** sor_fwd_isfin_dx *)
lemma pr_sor_des_isf_dx:
- â\88\80f. ð\9d\90\85â\9dªfâ\9d« â\86\92 â\88\80f1,f2. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\85â\9dªf2â\9d«.
+ â\88\80f. ð\9d\90\85â\9d¨fâ\9d© â\86\92 â\88\80f1,f2. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\85â\9d¨f2â\9d©.
#f * #n #Hf #f1 #f2 #H
elim (pr_sor_des_fcla_dx … Hf … H) -f -f1 /2 width=2 by ex_intro/
qed-.
(*** sor_isfin *)
lemma pr_sor_inv_isf_bi:
- â\88\80f1,f2. ð\9d\90\85â\9dªf1â\9d« â\86\92 ð\9d\90\85â\9dªf2â\9d« â\86\92 â\88\80f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\85â\9dªfâ\9d«.
+ â\88\80f1,f2. ð\9d\90\85â\9d¨f1â\9d© â\86\92 ð\9d\90\85â\9d¨f2â\9d© â\86\92 â\88\80f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\85â\9d¨fâ\9d©.
#f1 #f2 #Hf1 #Hf2 #f #Hf elim (pr_sor_isf_bi … Hf1 … Hf2) -Hf1 -Hf2
/3 width=6 by pr_sor_mono, pr_isf_eq_repl_back/
qed-.
(*** sor_inv_isfin3 *)
lemma pr_sor_inv_isf:
- â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\85â\9dªfâ\9d« →
- â\88§â\88§ ð\9d\90\85â\9dªf1â\9d« & ð\9d\90\85â\9dªf2â\9d«.
+ â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\85â\9d¨fâ\9d© →
+ â\88§â\88§ ð\9d\90\85â\9d¨f1â\9d© & ð\9d\90\85â\9d¨f2â\9d©.
/3 width=4 by pr_sor_des_isf_dx, pr_sor_des_isf_sn, conj/ qed-.
(*** sor_isid_sn *)
corec lemma pr_sor_isi_sn:
- â\88\80f1. ð\9d\90\88â\9dªf1â\9d« → ∀f2. f1 ⋓ f2 ≘ f2.
+ â\88\80f1. ð\9d\90\88â\9d¨f1â\9d© → ∀f2. f1 ⋓ f2 ≘ f2.
#f1 * -f1
#f1 #g1 #Hf1 #H1 #f2 cases (pr_map_split_tl f2)
/3 width=7 by pr_sor_push_bi, pr_sor_push_next/
(*** sor_isid_dx *)
corec lemma pr_sor_isi_dx:
- â\88\80f2. ð\9d\90\88â\9dªf2â\9d« → ∀f1. f1 ⋓ f2 ≘ f1.
+ â\88\80f2. ð\9d\90\88â\9d¨f2â\9d© → ∀f1. f1 ⋓ f2 ≘ f1.
#f2 * -f2
#f2 #g2 #Hf2 #H2 #f1 cases (pr_map_split_tl f1)
/3 width=7 by pr_sor_push_bi, pr_sor_next_push/
(*** sor_isid *)
lemma pr_sor_isi_bi_isi:
- â\88\80f1,f2,f. ð\9d\90\88â\9dªf1â\9d« â\86\92 ð\9d\90\88â\9dªf2â\9d« â\86\92 ð\9d\90\88â\9dªfâ\9d« → f1 ⋓ f2 ≘ f.
+ â\88\80f1,f2,f. ð\9d\90\88â\9d¨f1â\9d© â\86\92 ð\9d\90\88â\9d¨f2â\9d© â\86\92 ð\9d\90\88â\9d¨fâ\9d© → f1 ⋓ f2 ≘ f.
/4 width=3 by pr_sor_eq_repl_back_dx, pr_sor_eq_repl_back_sn, pr_isi_inv_eq_repl/ qed.
(*** sor_fwd_isid1 *)
corec lemma pr_sor_des_isi_sn:
- â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\88â\9dªfâ\9d« â\86\92 ð\9d\90\88â\9dªf1â\9d«.
+ â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\88â\9d¨fâ\9d© â\86\92 ð\9d\90\88â\9d¨f1â\9d©.
#f1 #f2 #f * -f1 -f2 -f
#f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H #Hg
[ /4 width=6 by pr_isi_inv_push, pr_isi_push/ ]
(*** sor_fwd_isid2 *)
corec lemma pr_sor_des_isi_dx:
- â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\88â\9dªfâ\9d« â\86\92 ð\9d\90\88â\9dªf2â\9d«.
+ â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\88â\9d¨fâ\9d© â\86\92 ð\9d\90\88â\9d¨f2â\9d©.
#f1 #f2 #f * -f1 -f2 -f
#f1 #f2 #f #g1 #g2 #g #Hf #H1 #H2 #H #Hg
[ /4 width=6 by pr_isi_inv_push, pr_isi_push/ ]
(*** sor_isid_inv_sn *)
lemma pr_sor_inv_isi_sn:
- â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\88â\9dªf1â\9d« → f2 ≡ f.
+ â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\88â\9d¨f1â\9d© → f2 ≡ f.
/3 width=4 by pr_sor_isi_sn, pr_sor_mono/
qed-.
(*** sor_isid_inv_dx *)
lemma pr_sor_inv_isi_dx:
- â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\88â\9dªf2â\9d« → f1 ≡ f.
+ â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\88â\9d¨f2â\9d© → f1 ≡ f.
/3 width=4 by pr_sor_isi_dx, pr_sor_mono/
qed-.
(*** sor_inv_isid3 *)
lemma pr_sor_inv_isi:
- â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\88â\9dªfâ\9d« →
- â\88§â\88§ ð\9d\90\88â\9dªf1â\9d« & ð\9d\90\88â\9dªf2â\9d«.
+ â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\88â\9d¨fâ\9d© →
+ â\88§â\88§ ð\9d\90\88â\9d¨f1â\9d© & ð\9d\90\88â\9d¨f2â\9d©.
/3 width=4 by pr_sor_des_isi_dx, pr_sor_des_isi_sn, conj/ qed-.
(**************************************************************************)
include "ground/notation/functions/apply_2.ma".
+include "ground/arith/pnat_plus.ma".
+include "ground/relocation/pr_pat.ma".
include "ground/relocation/tr_map.ma".
(*
include "ground/arith/pnat_le_plus.ma".
*)
(* POSITIVE APPLICATION FOR TOTAL RELOCATION MAPS ***************************)
+(*** apply *)
rec definition tr_pat (i: pnat) on i: tr_map → pnat.
* #p #f cases i -i
[ @p
"functional positive application (total relocation maps)"
'apply f i = (tr_pat i f).
-(* Properties on at (specific) ************************************************)
+(* Constructions with pr_pat ***********************************************)
-lemma at_O1: ∀i2,f. @❪𝟏, i2⨮f❫ ≘ i2.
+(*** at_O1 *)
+lemma pr_pat_unit_sn: ∀i2,f. @❨𝟏,𝐭❨i2⨮f❩❩ ≘ i2.
#i2 elim i2 -i2 /2 width=5 by gr_pat_refl, gr_pat_next/
qed.
-lemma at_S1: â\88\80p,f,i1,i2. @â\9dªi1, fâ\9d« â\89\98 i2 â\86\92 @â\9dªâ\86\91i1, p⨮fâ\9d« ≘ i2+p.
+lemma at_S1: â\88\80p,f,i1,i2. @â\9d¨i1, fâ\9d© â\89\98 i2 â\86\92 @â\9d¨â\86\91i1, p⨮fâ\9d© ≘ i2+p.
#p elim p -p /3 width=7 by gr_pat_push, gr_pat_next/
qed.
-lemma at_total: â\88\80i1,f. @â\9dªi1, fâ\9d« ≘ f@❨i1❩.
+lemma at_total: â\88\80i1,f. @â\9d¨i1, fâ\9d© ≘ f@❨i1❩.
#i1 elim i1 -i1
[ * // | #i #IH * /3 width=1 by at_S1/ ]
qed.
-lemma at_istot: â\88\80f. ð\9d\90\93â\9dªfâ\9d«.
+lemma at_istot: â\88\80f. ð\9d\90\93â\9d¨fâ\9d©.
/2 width=2 by ex_intro/ qed.
-lemma at_plus2: â\88\80f,i1,i,p,q. @â\9dªi1, p⨮fâ\9d« â\89\98 i â\86\92 @â\9dªi1, (p+q)⨮fâ\9d« ≘ i+q.
+lemma at_plus2: â\88\80f,i1,i,p,q. @â\9d¨i1, p⨮fâ\9d© â\89\98 i â\86\92 @â\9d¨i1, (p+q)⨮fâ\9d© ≘ i+q.
#f #i1 #i #p #q #H elim q -q
/2 width=5 by gr_pat_next/
qed.
(* Inversion lemmas on at (specific) ******************************************)
-lemma at_inv_O1: â\88\80f,p,i2. @â\9dªð\9d\9f\8f, p⨮fâ\9d« ≘ i2 → p = i2.
+lemma at_inv_O1: â\88\80f,p,i2. @â\9d¨ð\9d\9f\8f, p⨮fâ\9d© ≘ i2 → p = i2.
#f #p elim p -p /2 width=6 by gr_pat_inv_unit_push/
#p #IH #i2 #H elim (gr_pat_inv_next … H) -H [|*: // ]
#j2 #Hj * -i2 /3 width=1 by eq_f/
qed-.
-lemma at_inv_S1: â\88\80f,p,j1,i2. @â\9dªâ\86\91j1, p⨮fâ\9d« ≘ i2 →
- â\88\83â\88\83j2. @â\9dªj1, fâ\9d« ≘ j2 & j2+p = i2.
+lemma at_inv_S1: â\88\80f,p,j1,i2. @â\9d¨â\86\91j1, p⨮fâ\9d© ≘ i2 →
+ â\88\83â\88\83j2. @â\9d¨j1, fâ\9d© ≘ j2 & j2+p = i2.
#f #p elim p -p /2 width=5 by gr_pat_inv_succ_push/
#p #IH #j1 #i2 #H elim (gr_pat_inv_next … H) -H [|*: // ]
#j2 #Hj * -i2 elim (IH … Hj) -IH -Hj
#i2 #Hi * -j2 /2 width=3 by ex2_intro/
qed-.
-lemma at_inv_total: â\88\80f,i1,i2. @â\9dªi1, fâ\9d« ≘ i2 → f@❨i1❩ = i2.
+lemma at_inv_total: â\88\80f,i1,i2. @â\9d¨i1, fâ\9d© ≘ i2 → f@❨i1❩ = i2.
/2 width=6 by fr2_nat_mono/ qed-.
(* Forward lemmas on at (specific) *******************************************)
-lemma at_increasing_plus: â\88\80f,p,i1,i2. @â\9dªi1, p⨮fâ\9d« ≘ i2 → i1 + p ≤ ↑i2.
+lemma at_increasing_plus: â\88\80f,p,i1,i2. @â\9d¨i1, p⨮fâ\9d© ≘ i2 → i1 + p ≤ ↑i2.
#f #p *
[ #i2 #H <(at_inv_O1 … H) -i2 //
| #i1 #i2 #H elim (at_inv_S1 … H) -H
]
qed-.
-lemma at_fwd_id: â\88\80f,p,i. @â\9dªi, p⨮fâ\9d« ≘ i → 𝟏 = p.
+lemma at_fwd_id: â\88\80f,p,i. @â\9d¨i, p⨮fâ\9d© ≘ i → 𝟏 = p.
#f #p #i #H elim (gr_pat_des_id … H) -H
#g #H elim (push_inv_seq_dx … H) -H //
qed-.
class "water"
[ { "generic rt-transition counters" * } {
[ { "" * } {
- [ "rtc_ist ( ð\9d\90\93â\9dª?,?â\9d« )" "rtc_ist_shift" "rtc_ist_plus" "rtc_ist_max" * ]
- [ "rtc_ism ( ð\9d\90\8câ\9dª?,?â\9d« )" "rtc_ism_shift" "rtc_ism_plus" "rtc_ism_max" "rtc_ism_max_shift" * ]
+ [ "rtc_ist ( ð\9d\90\93â\9d¨?,?â\9d© )" "rtc_ist_shift" "rtc_ist_plus" "rtc_ist_max" * ]
+ [ "rtc_ism ( ð\9d\90\8câ\9d¨?,?â\9d© )" "rtc_ism_shift" "rtc_ism_plus" "rtc_ism_max" "rtc_ism_max_shift" * ]
[ "rtc ( 〈?,?,?,?〉 ) ( 𝟘𝟘 ) ( 𝟙𝟘 ) ( 𝟘𝟙 )" "rtc_shift ( ↕*? )" "rtc_plus ( ? + ? )" "rtc_max ( ? ∨ ? )" "rtc_max_shift" * ]
}
]
class "green"
[ { "relocation maps" * } {
[ { "finite relocation with pairs" * } {
- [ "fr2_nat ( @â\9dª?,?â\9d« ≘ ? )" "fr2_nat_nat" * ]
+ [ "fr2_nat ( @â\9d¨?,?â\9d© ≘ ? )" "fr2_nat_nat" * ]
[ "fr2_minus ( ? ▭ ? ≘ ? )" * ]
[ "fr2_append ( ?@@? )" * ]
[ "fr2_plus ( ?+? )" * ]
[ "pr_sle ( ? ⊆ ? )" "pr_sle_eq" "pr_sle_pushs" "pr_sle_tls" "pr_sle_isi" "pr_sle_isd" "pr_sle_sle" * ]
[ "pr_coafter ( ? ~⊚ ? ≘ ? )" "pr_coafter_eq" "pr_coafter_uni_pushs" "pr_coafter_pat_tls" "pr_coafter_nat_tls" "pr_coafter_nat_tls_pushs" "pr_coafter_isi" "pr_coafter_isu" "pr_coafter_ist_isi" "pr_coafter_ist_isf" "pr_coafter_coafter" "pr_coafter_coafter_ist" * ]
[ "pr_after ( ? ⊚ ? ≘ ? )" "pr_after_eq" "pr_after_uni" "pr_after_basic" "pr_after_pat" "pr_after_pat_tls" "pr_after_pat_uni_tls" "pr_after_nat" "pr_after_nat_uni_tls" "pr_after_isi" "pr_after_isu" "pr_after_ist" "pr_after_ist_isi" "pr_after_after" "pr_after_after_ist" * ]
- [ "pr_isd ( ð\9d\9b\80â\9dª?â\9d« )" "pr_isd_eq" "pr_isd_tl" "pr_isd_nexts" "pr_isd_tls" * ]
- [ "pr_ist ( ð\9d\90\93â\9dª?â\9d« )" "pr_ist_tls" "pr_ist_isi" "pr_ist_ist" * ]
- [ "pr_isf ( ð\9d\90\85â\9dª?â\9d« )" "pr_isf_eq" "pr_isf_tl" "pr_isf_pushs" "fr_isf_tls" "pr_ifs_uni" "pr_isf_isu" * ]
- [ "pr_fcla ( ð\9d\90\82â\9dª?â\9d« ≘ ? )" "pr_fcla_eq" "fcla_uni" "pr_fcla_fcla" * ]
- [ "pr_isu ( ð\9d\90\94â\9dª?â\9d« )" "pr_isu_tl" "pr_isu_uni" * ]
- [ "pr_isi ( ð\9d\90\88â\9dª?â\9d« )" "pr_isi_eq" "pr_isi_tl" "pr_isi_pushs" "pr_isi_tls" "pr_isi_id" "pr_isi_uni" "pr_isi_pat" "pr_isi_nat" * ]
- [ "pr_nat ( @â\86\91â\9dª?,?â\9d« ≘ ? )" "pr_nat_uni" "pr_nat_basic" "pr_nat_nat" * ]
- [ "pr_pat ( @â\9dª?,?â\9d« ≘ ? )" "pr_pat_lt" "pr_pat_eq" "pr_pat_tls" "pr_pat_id" "pr_pat_uni" "pr_pat_basic" "pr_pat_pat" "pr_pat_pat_id" * ]
+ [ "pr_isd ( ð\9d\9b\80â\9d¨?â\9d© )" "pr_isd_eq" "pr_isd_tl" "pr_isd_nexts" "pr_isd_tls" * ]
+ [ "pr_ist ( ð\9d\90\93â\9d¨?â\9d© )" "pr_ist_tls" "pr_ist_isi" "pr_ist_ist" * ]
+ [ "pr_isf ( ð\9d\90\85â\9d¨?â\9d© )" "pr_isf_eq" "pr_isf_tl" "pr_isf_pushs" "fr_isf_tls" "pr_ifs_uni" "pr_isf_isu" * ]
+ [ "pr_fcla ( ð\9d\90\82â\9d¨?â\9d© ≘ ? )" "pr_fcla_eq" "fcla_uni" "pr_fcla_fcla" * ]
+ [ "pr_isu ( ð\9d\90\94â\9d¨?â\9d© )" "pr_isu_tl" "pr_isu_uni" * ]
+ [ "pr_isi ( ð\9d\90\88â\9d¨?â\9d© )" "pr_isi_eq" "pr_isi_tl" "pr_isi_pushs" "pr_isi_tls" "pr_isi_id" "pr_isi_uni" "pr_isi_pat" "pr_isi_nat" * ]
+ [ "pr_nat ( @â\86\91â\9d¨?,?â\9d© ≘ ? )" "pr_nat_uni" "pr_nat_basic" "pr_nat_nat" * ]
+ [ "pr_pat ( @â\9d¨?,?â\9d© ≘ ? )" "pr_pat_lt" "pr_pat_eq" "pr_pat_tls" "pr_pat_id" "pr_pat_uni" "pr_pat_basic" "pr_pat_pat" "pr_pat_pat_id" * ]
[ "pr_basic ( 𝐛❨?,?❩ )" * ]
[ "pr_uni ( 𝐮❨?❩ )" "pr_uni_eq" * ]
[ "pr_id ( 𝐢 ) " "pr_id_eq" * ]
"" "nstream_istot ( ?@❨?❩ )" "nstream_after ( ? ∘ ? )" "nstream_coafter ( ? ~∘ ? )"
"nstream_basic" ""
* ]
- [ "trace ( â\88¥?â\88¥ )" "trace_at ( @â\9dª?,?â\9d« â\89\98 ? )" "trace_after ( ? â\8a\9a ? â\89\98 ? )" "trace_isid ( ð\9d\90\88â\9dª?â\9d« )" "trace_isun ( ð\9d\90\94â\9dª?â\9d« )"
+ [ "trace ( â\88¥?â\88¥ )" "trace_at ( @â\9d¨?,?â\9d© â\89\98 ? )" "trace_after ( ? â\8a\9a ? â\89\98 ? )" "trace_isid ( ð\9d\90\88â\9d¨?â\9d© )" "trace_isun ( ð\9d\90\94â\9d¨?â\9d© )"
"trace_sle ( ? ⊆ ? )" "trace_sor ( ? ⋓ ? ≘ ? )" "trace_snot ( ∁ ? )"
* ]
}
/3 width=5 by rex_pair, rexs_step_dx, inj/
qed.
-lemma rexs_unit: â\88\80R,f,I,L1,L2. ð\9d\90\88â\9dªfâ\9d« → L1 ⪤[cext2 R,cfull,f] L2 →
+lemma rexs_unit: â\88\80R,f,I,L1,L2. ð\9d\90\88â\9d¨fâ\9d© → L1 ⪤[cext2 R,cfull,f] L2 →
L1.ⓤ[I] ⪤*[R,#0] L2.ⓤ[I].
/3 width=3 by rex_unit, inj/ qed.
∃∃L2. L1 ⪤*[R,U] L2 & ⇩*[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 â\89\98 K1 â\86\92 ð\9d\90\94â\9dªfâ\9d« →
+ λR. â\88\80b,f,L1,K1. â\87©*[b,f] L1 â\89\98 K1 â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
∀L2,U. L1 ⪤*[R,U] L2 → ∀T. ⇧*[f] T ≘ U →
∃∃K2. K1 ⪤*[R,T] K2 & ⇩*[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â\9dªfâ\9d« → ∀T. ⇧*[f] T ≘ U →
+ â\88\80b,f,K2. â\87©*[b,f] L2 â\89\98 K2 â\86\92 ð\9d\90\94â\9d¨fâ\9d© → ∀T. ⇧*[f] T ≘ U →
∃∃K1. ⇩*[b,f] L1 ≘ K1 & K1 ⪤*[R,T] K2.
(* Properties with generic slicing for local environments *******************)
/3 width=3 by rexs_step_dx, rex_pair_refl, inj/
qed.
-lemma rexs_tc: â\88\80R,L1,L2,T,f. ð\9d\90\88â\9dªfâ\9d« → TC … (sex cfull (cext2 R) f) L1 L2 →
+lemma rexs_tc: â\88\80R,L1,L2,T,f. ð\9d\90\88â\9d¨fâ\9d© → TC … (sex cfull (cext2 R) f) L1 L2 →
L1 ⪤*[R,T] L2.
#R #L1 #L2 #T #f #Hf #H elim H -L2
[ elim (frees_total L1 T) | #L elim (frees_total L T) ]
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« â\89\85 â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
+notation "hvbox( â\9d¨ term 46 G1, break term 46 L1, break term 46 T1 â\9d© â\89\85 â\9d¨ break term 46 G2, break term 46 L2, break term 46 T2 â\9d© )"
non associative with precedence 45
for @{ 'ApproxEqSn $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 Lâ\9d« ⊢ break term 46 T ⁝ break term 46 A )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 Lâ\9d© ⊢ break term 46 T ⁝ break term 46 A )"
non associative with precedence 45
for @{ 'AtomicArity $G $L $T $A }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( L â\8a¢ ð\9d\90\85 +â\9dª break term 46 T â\9d« ≘ break term 46 f )"
+notation "hvbox( L â\8a¢ ð\9d\90\85 +â\9d¨ break term 46 T â\9d© ≘ break term 46 f )"
non associative with precedence 45
for @{ 'FreePlus $L $T $f }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G, break term 46 L, break term 46 T â\9d« ϵ ⟦ break term 46 A ⟧[ break term 46 R ] )"
+notation "hvbox( â\9d¨ term 46 G, break term 46 L, break term 46 T â\9d© ϵ ⟦ break term 46 A ⟧[ break term 46 R ] )"
non associative with precedence 45
for @{ 'InWBrackets $R $G $L $T $A }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 L1, break term 46 f1 â\9d« â«\83ð\9d\90\85+â\9dª break term 46 L2, break term 46 f2 â\9d« )"
+notation "hvbox( â\9d¨ term 46 L1, break term 46 f1 â\9d© â«\83ð\9d\90\85+â\9d¨ break term 46 L2, break term 46 f2 â\9d© )"
non associative with precedence 45
for @{ 'LRSubEqF $L1 $f1 $L2 $f2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ð\9d\90\92â\9dª term 46 T â\9d« )"
+notation "hvbox( ð\9d\90\92â\9d¨ term 46 T â\9d© )"
non associative with precedence 45
for @{ 'Simple $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« â\89\9b[ break term 46 S ] â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
+notation "hvbox( â\9d¨ term 46 G1, break term 46 L1, break term 46 T1 â\9d© â\89\9b[ break term 46 S ] â\9d¨ break term 46 G2, break term 46 L2, break term 46 T2 â\9d© )"
non associative with precedence 45
for @{ 'StarEqSn $S $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 L1, break term 46 T1 â\9d« â\8a\86 â\9dª break term 46 L2, break term 46 T2 â\9d« )"
+notation "hvbox( â\9d¨ term 46 L1, break term 46 T1 â\9d© â\8a\86 â\9d¨ break term 46 L2, break term 46 T2 â\9d© )"
non associative with precedence 45
for @{ 'SubSetEq $L1 $T1 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« â¬\82 â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
+notation "hvbox( â\9d¨ term 46 G1, break term 46 L1, break term 46 T1 â\9d© â¬\82 â\9d¨ break term 46 G2, break term 46 L2, break term 46 T2 â\9d© )"
non associative with precedence 45
for @{ 'SupTerm $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« â¬\82[ break term 46 b ] â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
+notation "hvbox( â\9d¨ term 46 G1, break term 46 L1, break term 46 T1 â\9d© â¬\82[ break term 46 b ] â\9d¨ break term 46 G2, break term 46 L2, break term 46 T2 â\9d© )"
non associative with precedence 45
for @{ 'SupTerm $b $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« â¬\82⸮ â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
+notation "hvbox( â\9d¨ term 46 G1, break term 46 L1, break term 46 T1 â\9d© â¬\82⸮ â\9d¨ break term 46 G2, break term 46 L2, break term 46 T2 â\9d© )"
non associative with precedence 45
for @{ 'SupTermOpt $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« â¬\82⸮[ break term 46 b ] â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
+notation "hvbox( â\9d¨ term 46 G1, break term 46 L1, break term 46 T1 â\9d© â¬\82⸮[ break term 46 b ] â\9d¨ break term 46 G2, break term 46 L2, break term 46 T2 â\9d© )"
non associative with precedence 45
for @{ 'SupTermOpt $b $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« â¬\82+ â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
+notation "hvbox( â\9d¨ term 46 G1, break term 46 L1, break term 46 T1 â\9d© â¬\82+ â\9d¨ break term 46 G2, break term 46 L2, break term 46 T2 â\9d© )"
non associative with precedence 45
for @{ 'SupTermPlus $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« â¬\82+[ break term 46 b ] â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
+notation "hvbox( â\9d¨ term 46 G1, break term 46 L1, break term 46 T1 â\9d© â¬\82+[ break term 46 b ] â\9d¨ break term 46 G2, break term 46 L2, break term 46 T2 â\9d© )"
non associative with precedence 45
for @{ 'SupTermPlus $b $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« â¬\82* â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
+notation "hvbox( â\9d¨ term 46 G1, break term 46 L1, break term 46 T1 â\9d© â¬\82* â\9d¨ break term 46 G2, break term 46 L2, break term 46 T2 â\9d© )"
non associative with precedence 45
for @{ 'SupTermStar $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« â¬\82*[ break term 46 b ] â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
+notation "hvbox( â\9d¨ term 46 G1, break term 46 L1, break term 46 T1 â\9d© â¬\82*[ break term 46 b ] â\9d¨ break term 46 G2, break term 46 L2, break term 46 T2 â\9d© )"
non associative with precedence 45
for @{ 'SupTermStar $b $G1 $L1 $T1 $G2 $L2 $T2 }.
drop_refl_atom_O2 drop_drop_lt drop_skip_lt
*)
inductive drops (b:bool): pr_map → relation lenv ≝
-| drops_atom: â\88\80f. (b = â\93\89 â\86\92 ð\9d\90\88â\9dªfâ\9d«) → drops b (f) (⋆) (⋆)
+| drops_atom: â\88\80f. (b = â\93\89 â\86\92 ð\9d\90\88â\9d¨fâ\9d©) → 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 → ⇧*[f] I2 ≘ I1 →
∀U. ⇧*[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 â\89\98 K â\86\92 ð\9d\90\94â\9dªfâ\9d« →
+ λR. â\88\80K,T. R K T â\86\92 â\88\80b,f,L. â\87©*[b,f] L â\89\98 K â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
∀U. ⇧*[f] T ≘ U → R L U.
definition d_deliftable1: predicate (relation2 lenv term) ≝
∀T. ⇧*[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 â\89\98 K â\86\92 ð\9d\90\94â\9dªfâ\9d« →
+ λR. â\88\80L,U. R L U â\86\92 â\88\80b,f,K. â\87©*[b,f] L â\89\98 K â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
∀T. ⇧*[f] T ≘ U → R K T.
definition d_liftable2_sn: ∀C:Type[0]. ∀S:?→relation C.
∀T2. S f T2 U2 → R K T1 T2.
definition co_dropable_sn: predicate (?→relation lenv) ≝
- λR. â\88\80b,f,L1,K1. â\87©*[b,f] L1 â\89\98 K1 â\86\92 ð\9d\90\94â\9dªfâ\9d« →
+ λR. â\88\80b,f,L1,K1. â\87©*[b,f] L1 â\89\98 K1 â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
∀f2,L2. R f2 L1 L2 → ∀f1. f ~⊚ f1 ≘ f2 →
∃∃K2. R f1 K1 K2 & ⇩*[b,f] L2 ≘ K2.
definition co_dropable_dx: predicate (?→relation lenv) ≝
λR. ∀f2,L1,L2. R f2 L1 L2 →
- â\88\80b,f,K2. â\87©*[b,f] L2 â\89\98 K2 â\86\92 ð\9d\90\94â\9dªfâ\9d« →
+ â\88\80b,f,K2. â\87©*[b,f] L2 â\89\98 K2 â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
∀f1. f ~⊚ f1 ≘ f2 →
∃∃K1. ⇩*[b,f] L1 ≘ K1 & R f1 K1 K2.
(* Basic inversion lemmas ***************************************************)
fact drops_inv_atom1_aux: ∀b,f,X,Y. ⇩*[b,f] X ≘ Y → X = ⋆ →
- Y = â\8b\86 â\88§ (b = â\93\89 â\86\92 ð\9d\90\88â\9dªfâ\9d«).
+ Y = â\8b\86 â\88§ (b = â\93\89 â\86\92 ð\9d\90\88â\9d¨fâ\9d©).
#b #f #X #Y * -f -X -Y
[ /3 width=1 by conj/
| #f #I #L1 #L2 #_ #H destruct
(* Basic_1: includes: drop_gen_sort *)
(* Basic_2A1: includes: drop_inv_atom1 *)
-lemma drops_inv_atom1: â\88\80b,f,Y. â\87©*[b,f] â\8b\86 â\89\98 Y â\86\92 Y = â\8b\86 â\88§ (b = â\93\89 â\86\92 ð\9d\90\88â\9dªfâ\9d«).
+lemma drops_inv_atom1: â\88\80b,f,Y. â\87©*[b,f] â\8b\86 â\89\98 Y â\86\92 Y = â\8b\86 â\88§ (b = â\93\89 â\86\92 ð\9d\90\88â\9d¨fâ\9d©).
/2 width=3 by drops_inv_atom1_aux/ qed-.
fact drops_inv_drop1_aux: ∀b,f,X,Y. ⇩*[b,f] X ≘ Y → ∀g,I,K. X = K.ⓘ[I] → f = ↑g →
(* Basic forward lemmas *****************************************************)
fact drops_fwd_drop2_aux: ∀b,f2,X,Y. ⇩*[b,f2] X ≘ Y → ∀I,K. Y = K.ⓘ[I] →
- â\88\83â\88\83f1,f. ð\9d\90\88â\9dªf1â\9d« & f2 ⊚ ↑f1 ≘ f & ⇩*[b,f] X ≘ K.
+ â\88\83â\88\83f1,f. ð\9d\90\88â\9d¨f1â\9d© & f2 ⊚ ↑f1 ≘ f & ⇩*[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: ∀b,f2,I,X,K. ⇩*[b,f2] X ≘ K.ⓘ[I] →
- â\88\83â\88\83f1,f. ð\9d\90\88â\9dªf1â\9d« & f2 ⊚ ↑f1 ≘ f & ⇩*[b,f] X ≘ K.
+ â\88\83â\88\83f1,f. ð\9d\90\88â\9d¨f1â\9d© & f2 ⊚ ↑f1 ≘ f & ⇩*[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â\9dªfâ\9d« → ⇩*[b,f] L ≘ L.
+lemma drops_refl: â\88\80b,L,f. ð\9d\90\88â\9d¨fâ\9d© → ⇩*[b,f] L ≘ L.
#b #L elim L -L /2 width=1 by drops_atom/
#L #I #IHL #f #Hf elim (pr_isi_inv_gen … Hf) -Hf
/3 width=1 by drops_skip, liftsb_refl/
(* Basic_1: includes: drop_gen_refl *)
(* Basic_2A1: includes: drop_inv_O2 *)
-lemma drops_fwd_isid: â\88\80b,f,L1,L2. â\87©*[b,f] L1 â\89\98 L2 â\86\92 ð\9d\90\88â\9dªfâ\9d« → L1 = L2.
+lemma drops_fwd_isid: â\88\80b,f,L1,L2. â\87©*[b,f] L1 â\89\98 L2 â\86\92 ð\9d\90\88â\9d¨fâ\9d© → L1 = L2.
#b #f #L1 #L2 #H elim H -f -L1 -L2 //
[ #f #I #L1 #L2 #_ #_ #H elim (pr_isi_inv_next … H) //
| /5 width=5 by pr_isi_inv_push, liftsb_fwd_isid, eq_f2, sym_eq/
qed-.
lemma drops_after_fwd_drop2: ∀b,f2,I,X,K. ⇩*[b,f2] X ≘ K.ⓘ[I] →
- â\88\80f1,f. ð\9d\90\88â\9dªf1â\9d« → f2 ⊚ ↑f1 ≘ f → ⇩*[b,f] X ≘ K.
+ â\88\80f1,f. ð\9d\90\88â\9d¨f1â\9d© → f2 ⊚ ↑f1 ≘ f → ⇩*[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 (pr_after_mono_eq … Hg … Hf ??) -Hg -Hf
/3 width=5 by drops_eq_repl_back, pr_isi_inv_eq_repl, pr_eq_next/
(* Forward lemmas with test for finite colength *****************************)
-lemma drops_fwd_isfin: â\88\80f,L1,L2. â\87©*[â\93\89,f] L1 â\89\98 L2 â\86\92 ð\9d\90\85â\9dªfâ\9d«.
+lemma drops_fwd_isfin: â\88\80f,L1,L2. â\87©*[â\93\89,f] L1 â\89\98 L2 â\86\92 ð\9d\90\85â\9d¨fâ\9d©.
#f #L1 #L2 #H elim H -f -L1 -L2
/3 width=1 by pr_isf_next, pr_isf_push, pr_isf_isi/
qed-.
(* Properties with test for uniformity **************************************)
-lemma drops_isuni_ex: â\88\80f. ð\9d\90\94â\9dªfâ\9d« → ∀L. ∃K. ⇩*[Ⓕ,f] L ≘ K.
+lemma drops_isuni_ex: â\88\80f. ð\9d\90\94â\9d¨fâ\9d© → ∀L. ∃K. ⇩*[Ⓕ,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©*[â\93\89,f] L1 â\89\98 L2 â\86\92 ð\9d\90\94â\9dªfâ\9d« →
- (ð\9d\90\88â\9dªfâ\9d« ∧ L1 = L2) ∨
- â\88\83â\88\83g,I,K. â\87©*[â\93\89,g] K â\89\98 L2 & ð\9d\90\94â\9dªgâ\9d« & L1 = K.ⓘ[I] & f = ↑g.
+lemma drops_inv_isuni: â\88\80f,L1,L2. â\87©*[â\93\89,f] L1 â\89\98 L2 â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
+ (ð\9d\90\88â\9d¨fâ\9d© ∧ L1 = L2) ∨
+ â\88\83â\88\83g,I,K. â\87©*[â\93\89,g] K â\89\98 L2 & ð\9d\90\94â\9d¨gâ\9d© & L1 = K.ⓘ[I] & f = ↑g.
#f #L1 #L2 * -f -L1 -L2
[ /4 width=1 by or_introl, conj/
| /4 width=7 by pr_isu_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â\9dªfâ\9d« → ⇩*[b,f] K.ⓘ[I] ≘ L2 →
- (ð\9d\90\88â\9dªfâ\9d« ∧ L2 = K.ⓘ[I]) ∨
- â\88\83â\88\83g. ð\9d\90\94â\9dªgâ\9d« & ⇩*[b,g] K ≘ L2 & f = ↑g.
+lemma drops_inv_bind1_isuni: â\88\80b,f,I,K,L2. ð\9d\90\94â\9d¨fâ\9d© → ⇩*[b,f] K.ⓘ[I] ≘ L2 →
+ (ð\9d\90\88â\9d¨fâ\9d© ∧ L2 = K.ⓘ[I]) ∨
+ â\88\83â\88\83g. ð\9d\90\94â\9d¨gâ\9d© & ⇩*[b,g] K ≘ L2 & f = ↑g.
#b #f #I #K #L2 #Hf #H elim (pr_isu_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â\9dªfâ\9d« → ⇩*[b,f] L1 ≘ K.ⓘ[I] →
- (ð\9d\90\88â\9dªfâ\9d« ∧ L1 = K.ⓘ[I]) ∨
- â\88\83â\88\83g,I1,K1. ð\9d\90\94â\9dªgâ\9d« & ⇩*[b,g] K1 ≘ K.ⓘ[I] & L1 = K1.ⓘ[I1] & f = ↑g.
+lemma drops_inv_bind2_isuni: â\88\80b,f,I,K,L1. ð\9d\90\94â\9d¨fâ\9d© → ⇩*[b,f] L1 ≘ K.ⓘ[I] →
+ (ð\9d\90\88â\9d¨fâ\9d© ∧ L1 = K.ⓘ[I]) ∨
+ â\88\83â\88\83g,I1,K1. ð\9d\90\94â\9d¨gâ\9d© & ⇩*[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â\9dªfâ\9d« → ⇩*[b,↑f] L1 ≘ K.ⓘ[I] →
+lemma drops_inv_bind2_isuni_next: â\88\80b,f,I,K,L1. ð\9d\90\94â\9d¨fâ\9d© → ⇩*[b,↑f] L1 ≘ K.ⓘ[I] →
∃∃I1,K1. ⇩*[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 pr_isu_next/ -Hf *
[ #H elim (pr_isi_inv_next … H) -H //
]
qed-.
-fact drops_inv_TF_aux: â\88\80f,L1,L2. â\87©*[â\92»,f] L1 â\89\98 L2 â\86\92 ð\9d\90\94â\9dªfâ\9d« →
+fact drops_inv_TF_aux: â\88\80f,L1,L2. â\87©*[â\92»,f] L1 â\89\98 L2 â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
∀I,K. L2 = K.ⓘ[I] → ⇩*[Ⓣ,f] L1 ≘ K.ⓘ[I].
#f #L1 #L2 #H elim H -f -L1 -L2
[ #f #_ #_ #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â\9dªfâ\9d« → ⇩*[Ⓣ,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â\9d¨fâ\9d© → ⇩*[Ⓣ,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â\9dªfâ\9d« → ⇩*[Ⓣ,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â\9d¨fâ\9d© → ⇩*[Ⓣ,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â\9dªfâ\9d« → ⇩*[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â\9d¨fâ\9d© → ⇩*[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â\9dªfâ\9d« → ⇩*[b,f] X ≘ K.ⓘ[I] → ⇩*[b,↑f] X ≘ K.
+lemma drops_isuni_fwd_drop2: â\88\80b,f,I,X,K. ð\9d\90\94â\9d¨fâ\9d© → ⇩*[b,f] X ≘ K.ⓘ[I] → ⇩*[b,↑f] X ≘ K.
/3 width=7 by drops_after_fwd_drop2, pr_after_isu_isi_next/ qed-.
(* Inversion lemmas with uniform relocations ********************************)
qed-.
(* Basic_2A1: includes: drop_split *)
-lemma drops_split_trans: â\88\80b,f,L1,L2. â\87©*[b,f] L1 â\89\98 L2 â\86\92 â\88\80f1,f2. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\94â\9dªf1â\9d« →
+lemma drops_split_trans: â\88\80b,f,L1,L2. â\87©*[b,f] L1 â\89\98 L2 â\86\92 â\88\80f1,f2. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\94â\9d¨f1â\9d© →
∃∃L. ⇩*[b,f1] L1 ≘ L & ⇩*[b,f2] L ≘ L2.
#b #f #L1 #L2 #H elim H -f -L1 -L2
[ #f #H0f #f1 #f2 #Hf #Hf1 @(ex2_intro … (⋆)) @drops_atom
]
qed-.
-lemma drops_split_div: â\88\80b,f1,L1,L. â\87©*[b,f1] L1 â\89\98 L â\86\92 â\88\80f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\94â\9dªf2â\9d« →
+lemma drops_split_div: â\88\80b,f1,L1,L. â\87©*[b,f1] L1 â\89\98 L â\86\92 â\88\80f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\94â\9d¨f2â\9d© →
∃∃L2. ⇩*[Ⓕ,f2] L ≘ L2 & ⇩*[Ⓕ,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
(* Properties with application **********************************************)
-lemma drops_tls_at: â\88\80f,i1,i2. @â\9dªi1,fâ\9d« ≘ i2 →
+lemma drops_tls_at: â\88\80f,i1,i2. @â\9d¨i1,fâ\9d© ≘ i2 →
∀b,L1,L2. ⇩*[b,⫰*[i2]f] L1 ≘ L2 →
⇩*[b,⫯⫰*[↑i2]f] L1 ≘ L2.
/3 width=3 by drops_eq_repl_fwd, pr_pat_inv_succ_dx_tls/ qed-.
-lemma drops_split_trans_bind2: â\88\80b,f,I,L,K0. â\87©*[b,f] L â\89\98 K0.â\93\98[I] â\86\92 â\88\80i. @â\9dªO,fâ\9d« ≘ i →
+lemma drops_split_trans_bind2: â\88\80b,f,I,L,K0. â\87©*[b,f] L â\89\98 K0.â\93\98[I] â\86\92 â\88\80i. @â\9d¨O,fâ\9d© ≘ i →
∃∃J,K. ⇩[i]L ≘ K.ⓘ[J] & ⇩*[b,⫰*[↑i]f] K ≘ K0 & ⇧*[⫰*[↑i]f] I ≘ J.
#b #f #I #L #K0 #H #i #Hf
elim (drops_split_trans … H) -H [ |5: @(pr_after_nat_uni … Hf) |2,3: skip ] /2 width=1 by pr_after_isi_dx/ #Y #HLY #H
theorem drops_conf_div_isuni:
∀f1,L,K. ⇩*[Ⓣ,f1] L ≘ K → ∀f2. ⇩*[Ⓣ,f2] L ≘ K →
- ð\9d\90\94â\9dªf1â\9d« â\86\92 ð\9d\90\94â\9dªf2â\9d« → f1 ≡ f2.
+ ð\9d\90\94â\9d¨f1â\9d© â\86\92 ð\9d\90\94â\9d¨f2â\9d© → f1 ≡ f2.
#f1 #L #K #H elim H -f1 -L -K
[ #f1 #Hf1 #f2 #Hf2 elim (drops_inv_atom1 … Hf2) -Hf2
/3 width=1 by pr_isi_inv_eq_repl/
lemma drops_conf_div_bind_isuni:
∀f1,f2,I1,I2,L,K.
⇩*[Ⓣ,f1] L ≘ K.ⓘ[I1] → ⇩*[Ⓣ,f2] L ≘ K.ⓘ[I2] →
- ð\9d\90\94â\9dªf1â\9d« â\86\92 ð\9d\90\94â\9dªf2â\9d« → f1 ≡ f2 ∧ I1 = I2.
+ ð\9d\90\94â\9d¨f1â\9d© â\86\92 ð\9d\90\94â\9d¨f2â\9d© → f1 ≡ f2 ∧ I1 = I2.
#f1 #f2 #I1 #I2 #L #K #Hf1 #Hf2 #HU1 #HU2
lapply (drops_isuni_fwd_drop2 … Hf1) // #H1
lapply (drops_isuni_fwd_drop2 … Hf2) // #H2
(* forward lemmas with finite colength assignment ***************************)
lemma drops_fwd_fcla: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 →
- â\88\83â\88\83n. ð\9d\90\82â\9dªfâ\9d« ≘ n & |L1| = |L2| + n.
+ â\88\83â\88\83n. ð\9d\90\82â\9d¨fâ\9d© ≘ n & |L1| = |L2| + n.
#f #L1 #L2 #H elim H -f -L1 -L2
[ /4 width=3 by pr_fcla_isi, ex2_intro/
| #f #I #L1 #L2 #_ * >length_bind /3 width=3 by pr_fcla_next, ex2_intro, eq_f/
qed-.
(* Basic_2A1: includes: drop_fwd_length *)
-lemma drops_fcla_fwd: â\88\80f,L1,L2,n. â\87©*[â\93\89,f] L1 â\89\98 L2 â\86\92 ð\9d\90\82â\9dªfâ\9d« ≘ n →
+lemma drops_fcla_fwd: â\88\80f,L1,L2,n. â\87©*[â\93\89,f] L1 â\89\98 L2 â\86\92 ð\9d\90\82â\9d¨fâ\9d© ≘ n →
|L1| = |L2| + n.
#f #l1 #l2 #n #Hf #Hn elim (drops_fwd_fcla … Hf) -Hf
#k #Hm #H <(pr_fcla_mono … Hm … Hn) -f //
qed-.
lemma drops_fwd_fcla_le2: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 →
- â\88\83â\88\83n. ð\9d\90\82â\9dªfâ\9d« ≘ n & n ≤ |L1|.
+ â\88\83â\88\83n. ð\9d\90\82â\9d¨fâ\9d© ≘ n & n ≤ |L1|.
#f #L1 #L2 #H elim (drops_fwd_fcla … H) -H /2 width=3 by ex2_intro/
qed-.
(* Basic_2A1: includes: drop_fwd_length_le2 *)
-lemma drops_fcla_fwd_le2: â\88\80f,L1,L2,n. â\87©*[â\93\89,f] L1 â\89\98 L2 â\86\92 ð\9d\90\82â\9dªfâ\9d« ≘ n →
+lemma drops_fcla_fwd_le2: â\88\80f,L1,L2,n. â\87©*[â\93\89,f] L1 â\89\98 L2 â\86\92 ð\9d\90\82â\9d¨fâ\9d© ≘ n →
n ≤ |L1|.
#f #L1 #L2 #n #H #Hn elim (drops_fwd_fcla_le2 … H) -H
#k #Hm #H <(pr_fcla_mono … Hm … Hn) -f //
qed-.
lemma drops_fwd_fcla_lt2: ∀f,L1,I2,K2. ⇩*[Ⓣ,f] L1 ≘ K2.ⓘ[I2] →
- â\88\83â\88\83n. ð\9d\90\82â\9dªfâ\9d« ≘ n & n < |L1|.
+ â\88\83â\88\83n. ð\9d\90\82â\9d¨fâ\9d© ≘ n & n < |L1|.
#f #L1 #I2 #K2 #H elim (drops_fwd_fcla … H) -H
#n #Hf #H >H -L1 /3 width=3 by nle_succ_bi, ex2_intro/
qed-.
(* Basic_2A1: includes: drop_fwd_length_lt2 *)
lemma drops_fcla_fwd_lt2: ∀f,L1,I2,K2,n.
- â\87©*[â\93\89,f] L1 â\89\98 K2.â\93\98[I2] â\86\92 ð\9d\90\82â\9dªfâ\9d« ≘ n →
+ â\87©*[â\93\89,f] L1 â\89\98 K2.â\93\98[I2] â\86\92 ð\9d\90\82â\9d¨fâ\9d© ≘ n →
n < |L1|.
#f #L1 #I2 #K2 #n #H #Hn elim (drops_fwd_fcla_lt2 … H) -H
#k #Hm #H <(pr_fcla_mono … Hm … Hn) -f //
qed-.
(* Basic_2A1: includes: drop_fwd_length_lt4 *)
-lemma drops_fcla_fwd_lt4: â\88\80f,L1,L2,n. â\87©*[â\93\89,f] L1 â\89\98 L2 â\86\92 ð\9d\90\82â\9dªfâ\9d« ≘ n → 0 < n →
+lemma drops_fcla_fwd_lt4: â\88\80f,L1,L2,n. â\87©*[â\93\89,f] L1 â\89\98 L2 â\86\92 ð\9d\90\82â\9d¨fâ\9d© ≘ n → 0 < n →
|L2| < |L1|.
#f #L1 #L2 #n #H #Hf #Hn lapply (drops_fcla_fwd … H Hf) -f
/2 width=1 by nlt_inv_minus_dx/ qed-.
(* Basic_2A1: includes: drop_inv_length_eq *)
-lemma drops_inv_length_eq: â\88\80f,L1,L2. â\87©*[â\93\89,f] L1 â\89\98 L2 â\86\92 |L1| = |L2| â\86\92 ð\9d\90\88â\9dªfâ\9d«.
+lemma drops_inv_length_eq: â\88\80f,L1,L2. â\87©*[â\93\89,f] L1 â\89\98 L2 â\86\92 |L1| = |L2| â\86\92 ð\9d\90\88â\9d¨fâ\9d©.
#f #L1 #L2 #H #HL12 elim (drops_fwd_fcla … H) -H
#n #Hn <HL12 -L2 #H lapply (nplus_refl_sn … H) -H
/2 width=3 by pr_fcla_inv_zero/
qed-.
theorem drops_conf_div: ∀f1,f2,L1,L2. ⇩*[Ⓣ,f1] L1 ≘ L2 → ⇩*[Ⓣ,f2] L1 ≘ L2 →
- â\88\83â\88\83n. ð\9d\90\82â\9dªf1â\9d« â\89\98 n & ð\9d\90\82â\9dªf2â\9d« ≘ n.
+ â\88\83â\88\83n. ð\9d\90\82â\9d¨f1â\9d© â\89\98 n & ð\9d\90\82â\9d¨f2â\9d© ≘ n.
#f1 #f2 #L1 #L2 #H1 #H2
elim (drops_fwd_fcla … H1) -H1 #n1 #Hf1 #H1
elim (drops_fwd_fcla … H2) -H2 #n2 #Hf2 >H1 -L1 #H
qed-.
theorem drops_conf_div_fcla: ∀f1,f2,L1,L2,n1,n2.
- â\87©*[â\93\89,f1] L1 â\89\98 L2 â\86\92 â\87©*[â\93\89,f2] L1 â\89\98 L2 â\86\92 ð\9d\90\82â\9dªf1â\9d« â\89\98 n1 â\86\92 ð\9d\90\82â\9dªf2â\9d« ≘ n2 →
+ â\87©*[â\93\89,f1] L1 â\89\98 L2 â\86\92 â\87©*[â\93\89,f2] L1 â\89\98 L2 â\86\92 ð\9d\90\82â\9d¨f1â\9d© â\89\98 n1 â\86\92 ð\9d\90\82â\9d¨f2â\9d© ≘ n2 →
n1 = n2.
#f1 #f2 #L1 #L2 #n1 #n2 #Hf1 #Hf2 #Hn1 #Hn2
lapply (drops_fcla_fwd … Hf1 Hn1) -f1 #H1
∃∃L2. L1 ⪤[R] L2 & ⇩*[b,f] L2 ≘ K2 & L1 ≡[f] L2.
definition dropable_sn: predicate … ≝
- λR. â\88\80b,f,L1,K1. â\87©*[b,f] L1 â\89\98 K1 â\86\92 ð\9d\90\94â\9dªfâ\9d« → ∀L2. L1 ⪤[R] L2 →
+ λR. â\88\80b,f,L1,K1. â\87©*[b,f] L1 â\89\98 K1 â\86\92 ð\9d\90\94â\9d¨fâ\9d© → ∀L2. L1 ⪤[R] L2 →
∃∃K2. K1 ⪤[R] K2 & ⇩*[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 â\89\98 K2 â\86\92 ð\9d\90\94â\9dªfâ\9d« →
+ λR. â\88\80L1,L2. L1 ⪤[R] L2 â\86\92 â\88\80b,f,K2. â\87©*[b,f] L2 â\89\98 K2 â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
∃∃K1. ⇩*[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 â\89\98 K1.â\93\91[I]V1 â\86\92 ð\9d\90\94â\9dªfâ\9d« →
+ â\88\80b,f,I,K1,V1. â\87©*[b,f] L1 â\89\98 K1.â\93\91[I]V1 â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
∃∃K2,V2. ⇩*[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
(* 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 â\89\98 K2.â\93\91[I]V2 â\86\92 ð\9d\90\94â\9dªfâ\9d« →
+ â\88\80b,f,I,K2,V2. â\87©*[b,f] L2 â\89\98 K2.â\93\91[I]V2 â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
∃∃K1,V1. ⇩*[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
(* 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 â\89\98 K2.â\93\98[I] â\86\92 ð\9d\90\94â\9dªfâ\9d« →
+ â\88\80b,f,I,K2. â\87©*[b,f] L2 â\89\98 K2.â\93\98[I] â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
∀f1. f ~⊚ ↑f1 ≘ f2 →
∃∃K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I] & K1 ≡[f1] K2.
#f2 #L1 #L2 #HL12 #b #f #I2 #K2 #HLK2 #Hf #f1 #Hf2
(* 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 â\89\98 K1.â\93\98[I] â\86\92 ð\9d\90\94â\9dªfâ\9d« →
+ â\88\80b,f,I,K1. â\87©*[b,f] L1 â\89\98 K1.â\93\98[I] â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
∀f1. f ~⊚ ↑f1 ≘ f2 →
∃∃K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I] & K1 ≡[f1] K2.
#f2 #L1 #L2 #HL12 #b #f #I1 #K1 #HLK1 #Hf #f1 #Hf2
qed-.
fact sex_dropable_dx_aux (RN) (RP):
- â\88\80b,f,L2,K2. â\87©*[b,f] L2 â\89\98 K2 â\86\92 ð\9d\90\94â\9dªfâ\9d« →
+ â\88\80b,f,L2,K2. â\87©*[b,f] L2 â\89\98 K2 â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
∀f2,L1. L1 ⪤[RN,RP,f2] L2 → ∀f1. f ~⊚ f1 ≘ f2 →
∃∃K1. ⇩*[b,f] L1 ≘ K1 & K1 ⪤[RN,RP,f1] K2.
#RN #RP #b #f #L2 #K2 #H elim H -f -L2 -K2
lemma sex_drops_conf_next (RN) (RP):
∀f2,L1,L2. L1 ⪤[RN,RP,f2] L2 →
- â\88\80b,f,I1,K1. â\87©*[b,f] L1 â\89\98 K1.â\93\98[I1] â\86\92 ð\9d\90\94â\9dªfâ\9d« →
+ â\88\80b,f,I1,K1. â\87©*[b,f] L1 â\89\98 K1.â\93\98[I1] â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
∀f1. f ~⊚ ↑f1 ≘ f2 →
∃∃I2,K2. ⇩*[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
lemma sex_drops_conf_push (RN) (RP):
∀f2,L1,L2. L1 ⪤[RN,RP,f2] L2 →
- â\88\80b,f,I1,K1. â\87©*[b,f] L1 â\89\98 K1.â\93\98[I1] â\86\92 ð\9d\90\94â\9dªfâ\9d« →
+ â\88\80b,f,I1,K1. â\87©*[b,f] L1 â\89\98 K1.â\93\98[I1] â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
∀f1. f ~⊚ ⫯f1 ≘ f2 →
∃∃I2,K2. ⇩*[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
lemma sex_drops_trans_next (RN) (RP):
∀f2,L1,L2. L1 ⪤[RN,RP,f2] L2 →
- â\88\80b,f,I2,K2. â\87©*[b,f] L2 â\89\98 K2.â\93\98[I2] â\86\92 ð\9d\90\94â\9dªfâ\9d« →
+ â\88\80b,f,I2,K2. â\87©*[b,f] L2 â\89\98 K2.â\93\98[I2] â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
∀f1. f ~⊚ ↑f1 ≘ f2 →
∃∃I1,K1. ⇩*[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
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 â\89\98 K2.â\93\98[I2] â\86\92 ð\9d\90\94â\9dªfâ\9d« →
+ â\88\80b,f,I2,K2. â\87©*[b,f] L2 â\89\98 K2.â\93\98[I2] â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
∀f1. f ~⊚ ⫯f1 ≘ f2 →
∃∃I1,K1. ⇩*[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
qed-.
lemma drops_atom2_sex_conf (RN) (RP):
- â\88\80b,f1,L1. â\87©*[b,f1] L1 â\89\98 â\8b\86 â\86\92 ð\9d\90\94â\9dªf1â\9d« →
+ â\88\80b,f1,L1. â\87©*[b,f1] L1 â\89\98 â\8b\86 â\86\92 ð\9d\90\94â\9d¨f1â\9d© →
∀f,L2. L1 ⪤[RN,RP,f] L2 →
∀f2. f1 ~⊚ f2 ≘f → ⇩*[b,f1] L2 ≘ ⋆.
#RN #RP #b #f1 #L1 #H1 #Hf1 #f #L2 #H2 #f2 #H3
(* Basic_2A1: includes: drop_fwd_lw_lt *)
lemma drops_fwd_lw_lt: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 →
- (ð\9d\90\88â\9dªfâ\9d« → ⊥) → ♯❨L2❩ < ♯❨L1❩.
+ (ð\9d\90\88â\9d¨fâ\9d© → ⊥) → ♯❨L2❩ < ♯❨L1❩.
#f #L1 #L2 #H elim H -f -L1 -L2
[ #f #Hf #Hnf elim Hnf -Hnf /2 width=1 by/
| /3 width=3 by drops_fwd_lw, nle_nlt_trans/
(* GENERIC EXTENSION OF A CONTEXT-SENSITIVE REALTION FOR TERMS **************)
definition lex (R): relation lenv ≝
- λL1,L2. â\88\83â\88\83f. ð\9d\90\88â\9dªfâ\9d« & L1 ⪤[cfull,cext2 R,f] L2.
+ λL1,L2. â\88\83â\88\83f. ð\9d\90\88â\9d¨fâ\9d© & L1 ⪤[cfull,cext2 R,f] L2.
interpretation "generic extension (local environment)"
'Relation R L1 L2 = (lex R L1 L2).
*)
inductive lifts: pr_map → relation term ≝
| lifts_sort: ∀f,s. lifts f (⋆s) (⋆s)
-| lifts_lref: â\88\80f,i1,i2. @â\86\91â\9dªi1,fâ\9d« ≘ i2 → lifts f (#i1) (#i2)
+| lifts_lref: â\88\80f,i1,i2. @â\86\91â\9d¨i1,fâ\9d© ≘ i2 → lifts f (#i1) (#i2)
| lifts_gref: ∀f,l. lifts f (§l) (§l)
| lifts_bind: ∀f,p,I,V1,V2,T1,T2.
lifts f V1 V2 → lifts (⫯f) T1 T2 →
/2 width=4 by lifts_inv_sort1_aux/ qed-.
fact lifts_inv_lref1_aux: ∀f,X,Y. ⇧*[f] X ≘ Y → ∀i1. X = #i1 →
- â\88\83â\88\83i2. @â\86\91â\9dªi1,fâ\9d« ≘ i2 & Y = #i2.
+ â\88\83â\88\83i2. @â\86\91â\9d¨i1,fâ\9d© ≘ i2 & Y = #i2.
#f #X #Y * -f -X -Y
[ #f #s #x #H destruct
| #f #i1 #i2 #Hi12 #x #H destruct /2 width=3 by ex2_intro/
(* Basic_1: was: lift1_lref *)
(* Basic_2A1: includes: lift_inv_lref1 lift_inv_lref1_lt lift_inv_lref1_ge *)
lemma lifts_inv_lref1: ∀f,Y,i1. ⇧*[f] #i1 ≘ Y →
- â\88\83â\88\83i2. @â\86\91â\9dªi1,fâ\9d« ≘ i2 & Y = #i2.
+ â\88\83â\88\83i2. @â\86\91â\9d¨i1,fâ\9d© ≘ i2 & Y = #i2.
/2 width=3 by lifts_inv_lref1_aux/ qed-.
fact lifts_inv_gref1_aux: ∀f,X,Y. ⇧*[f] X ≘ Y → ∀l. X = §l → Y = §l.
/2 width=4 by lifts_inv_sort2_aux/ qed-.
fact lifts_inv_lref2_aux: ∀f,X,Y. ⇧*[f] X ≘ Y → ∀i2. Y = #i2 →
- â\88\83â\88\83i1. @â\86\91â\9dªi1,fâ\9d« ≘ i2 & X = #i1.
+ â\88\83â\88\83i1. @â\86\91â\9d¨i1,fâ\9d© ≘ i2 & X = #i1.
#f #X #Y * -f -X -Y
[ #f #s #x #H destruct
| #f #i1 #i2 #Hi12 #x #H destruct /2 width=3 by ex2_intro/
(* Basic_1: includes: lift_gen_lref lift_gen_lref_lt lift_gen_lref_false lift_gen_lref_ge *)
(* Basic_2A1: includes: lift_inv_lref2 lift_inv_lref2_lt lift_inv_lref2_be lift_inv_lref2_ge lift_inv_lref2_plus *)
lemma lifts_inv_lref2: ∀f,X,i2. ⇧*[f] X ≘ #i2 →
- â\88\83â\88\83i1. @â\86\91â\9dªi1,fâ\9d« ≘ i2 & X = #i1.
+ â\88\83â\88\83i1. @â\86\91â\9d¨i1,fâ\9d© ≘ i2 & X = #i1.
/2 width=3 by lifts_inv_lref2_aux/ qed-.
fact lifts_inv_gref2_aux: ∀f,X,Y. ⇧*[f] X ≘ Y → ∀l. Y = §l → X = §l.
lemma lifts_inv_atom1: ∀f,I,Y. ⇧*[f] ⓪[I] ≘ Y →
∨∨ ∃∃s. I = Sort s & Y = ⋆s
- | â\88\83â\88\83i,j. @â\86\91â\9dªi,fâ\9d« ≘ j & I = LRef i & Y = #j
+ | â\88\83â\88\83i,j. @â\86\91â\9d¨i,fâ\9d© ≘ j & I = LRef i & Y = #j
| ∃∃l. I = GRef l & Y = §l.
#f * #n #Y #H
[ lapply (lifts_inv_sort1 … H)
lemma lifts_inv_atom2: ∀f,I,X. ⇧*[f] X ≘ ⓪[I] →
∨∨ ∃∃s. X = ⋆s & I = Sort s
- | â\88\83â\88\83i,j. @â\86\91â\9dªi,fâ\9d« ≘ j & X = #i & I = LRef j
+ | â\88\83â\88\83i,j. @â\86\91â\9d¨i,fâ\9d© ≘ j & X = #i & I = LRef j
| ∃∃l. X = §l & I = GRef l.
#f * #n #X #H
[ lapply (lifts_inv_sort2 … H)
(* Basic forward lemmas *****************************************************)
(* Basic_2A1: includes: lift_inv_O2 *)
-lemma lifts_fwd_isid: â\88\80f,T1,T2. â\87§*[f] T1 â\89\98 T2 â\86\92 ð\9d\90\88â\9dªfâ\9d« → T1 = T2.
+lemma lifts_fwd_isid: â\88\80f,T1,T2. â\87§*[f] T1 â\89\98 T2 â\86\92 ð\9d\90\88â\9d¨fâ\9d© → T1 = T2.
#f #T1 #T2 #H elim H -f -T1 -T2
/4 width=3 by pr_isi_nat_des, pr_isi_push, eq_f2, eq_f/
qed-.
(* Basic_1: includes: lift_r *)
(* Basic_2A1: includes: lift_refl *)
-lemma lifts_refl: â\88\80T,f. ð\9d\90\88â\9dªfâ\9d« → ⇧*[f] T ≘ T.
+lemma lifts_refl: â\88\80T,f. ð\9d\90\88â\9d¨fâ\9d© → ⇧*[f] T ≘ T.
#T elim T -T *
/4 width=3 by lifts_flat, lifts_bind, lifts_lref, pr_isi_inv_pat, pr_isi_push/
qed.
(* Basic_2A1: includes: lift_total *)
-lemma lifts_total: â\88\80T1,f. ð\9d\90\93â\9dªfâ\9d« → ∃T2. ⇧*[f] T1 ≘ T2.
+lemma lifts_total: â\88\80T1,f. ð\9d\90\93â\9d¨fâ\9d© → ∃T2. ⇧*[f] T1 ≘ T2.
#T1 elim T1 -T1 *
/3 width=2 by lifts_sort, lifts_gref, ex_intro/
[ #i #f #Hf elim (Hf (↑i)) -Hf /3 width=2 by ex_intro, lifts_lref/ ]
(* Note: apparently, this was missing in Basic_2A1 *)
lemma lifts_split_div: ∀f1,T1,T2. ⇧*[f1] T1 ≘ T2 →
- â\88\80f2. ð\9d\90\93â\9dªf2â\9d« → ∀f. f2 ⊚ f1 ≘ f →
+ â\88\80f2. ð\9d\90\93â\9d¨f2â\9d© → ∀f. f2 ⊚ f1 ≘ f →
∃∃T. ⇧*[f2] T2 ≘ T & ⇧*[f] T1 ≘ T.
#f1 #T1 #T2 #H elim H -f1 -T1 -T2
[ /3 width=3 by lifts_sort, ex2_intro/
(* Basic_1: includes: dnf_dec2 dnf_dec *)
(* Basic_2A1: includes: is_lift_dec *)
-lemma is_lifts_dec: â\88\80T2,f. ð\9d\90\93â\9dªfâ\9d« → Decidable (∃T1. ⇧*[f] T1 ≘ T2).
+lemma is_lifts_dec: â\88\80T2,f. ð\9d\90\93â\9d¨fâ\9d© → Decidable (∃T1. ⇧*[f] T1 ≘ T2).
#T1 elim T1 -T1
[ * [1,3: /3 width=2 by lifts_sort, lifts_gref, ex_intro, or_introl/ ]
#i2 #f #Hf elim (is_pr_nat_dec f i2) //
#I1 #I2 #f1 * -I1 -I2 /3 width=3 by lifts_eq_repl_back, ext2_pair/
qed-.
-lemma liftsb_refl (f): ð\9d\90\88â\9dªfâ\9d« → reflexive … (liftsb f).
+lemma liftsb_refl (f): ð\9d\90\88â\9d¨fâ\9d© → reflexive … (liftsb f).
/3 width=1 by lifts_refl, ext2_refl/ qed.
lemma liftsb_total: ∀I1,f. ∃I2. ⇧*[f] I1 ≘ I2.
(* Basic forward lemmas *****************************************************)
lemma liftsb_fwd_isid (f):
- â\88\80I1,I2. â\87§*[f] I1 â\89\98 I2 â\86\92 ð\9d\90\88â\9dªfâ\9d« → I1 = I2.
+ â\88\80I1,I2. â\87§*[f] I1 â\89\98 I2 â\86\92 ð\9d\90\88â\9d¨fâ\9d© → I1 = I2.
#f #I1 #I2 * -I1 -I2 /3 width=3 by lifts_fwd_isid, eq_f2/
qed-.
(* Forward lemmas with simple terms *****************************************)
(* Basic_2A1: includes: lift_simple_dx *)
-lemma lifts_simple_dx: â\88\80f,T1,T2. â\87§*[f] T1 â\89\98 T2 â\86\92 ð\9d\90\92â\9dªT1â\9d« â\86\92 ð\9d\90\92â\9dªT2â\9d«.
+lemma lifts_simple_dx: â\88\80f,T1,T2. â\87§*[f] T1 â\89\98 T2 â\86\92 ð\9d\90\92â\9d¨T1â\9d© â\86\92 ð\9d\90\92â\9d¨T2â\9d©.
#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. â\87§*[f] T1 â\89\98 T2 â\86\92 ð\9d\90\92â\9dªT2â\9d« â\86\92 ð\9d\90\92â\9dªT1â\9d«.
+lemma lifts_simple_sn: â\88\80f,T1,T2. â\87§*[f] T1 â\89\98 T2 â\86\92 ð\9d\90\92â\9d¨T2â\9d© â\86\92 ð\9d\90\92â\9d¨T1â\9d©.
#f #T1 #T2 #H elim H -f -T1 -T2 //
#f #p #I #V1 #V2 #T1 #T2 #_ #_ #_ #_ #H elim (simple_inv_bind … H)
qed-.
lemma sex_co_isid (RN1) (RP1) (RN2) (RP2):
RP1 ⊆ RP2 →
- â\88\80f,L1,L2. L1 ⪤[RN1,RP1,f] L2 â\86\92 ð\9d\90\88â\9dªfâ\9d« →
+ â\88\80f,L1,L2. L1 ⪤[RN1,RP1,f] L2 â\86\92 ð\9d\90\88â\9d¨fâ\9d© →
L1 ⪤[RN2,RP2,f] L2.
#RN1 #RP1 #RN2 #RP2 #HR #f #L1 #L2 #H elim H -f -L1 -L2 //
#f #I1 #I2 #K1 #K2 #_ #HI12 #IH #H
qed.
lemma sex_length_isid: ∀R,L1,L2. |L1| = |L2| →
- â\88\80f. ð\9d\90\88â\9dªfâ\9d« → L1 ⪤[R,cfull,f] L2.
+ â\88\80f. ð\9d\90\88â\9d¨fâ\9d© → L1 ⪤[R,cfull,f] L2.
#R #L1 elim L1 -L1
[ #Y2 #H >(length_inv_zero_sn … H) -Y2 //
| #L1 #I1 #IH #Y2 #H #f #Hf
/2 width=9 by sex_trans_gen/ qed-.
theorem sex_trans_id_cfull (R1) (R2) (R3):
- â\88\80L1,L,f. L1 ⪤[R1,cfull,f] L â\86\92 ð\9d\90\88â\9dªfâ\9d« →
+ â\88\80L1,L,f. L1 ⪤[R1,cfull,f] L â\86\92 ð\9d\90\88â\9d¨fâ\9d© →
∀L2. L ⪤[R2,cfull,f] L2 → L1 ⪤[R3,cfull,f] L2.
#R1 #R2 #R3 #L1 #L #f #H elim H -L1 -L -f
[ #f #Hf #L2 #H >(sex_inv_atom1 … H) -L2 // ]
(* GENERIC ENTRYWISE EXTENSION OF CONTEXT-SENSITIVE REALTIONS FOR TERMS *****)
definition s_rs_transitive_isid: relation (relation3 lenv bind bind) ≝ λRN,RP.
- â\88\80f. ð\9d\90\88â\9dªfâ\9d« → s_rs_transitive … RP (λ_.sex RN RP f).
+ â\88\80f. ð\9d\90\88â\9d¨fâ\9d© → s_rs_transitive … RP (λ_.sex RN RP f).
(* Properties with transitive closure ***************************************)
(* Basic_2A1: uses: TC_lpx_sn_ind *)
theorem sex_tc_step_dx: ∀RN,RP. s_rs_transitive_isid RN RP →
- â\88\80f,L1,L. L1 ⪤[RN,RP,f] L â\86\92 ð\9d\90\88â\9dªfâ\9d« →
+ â\88\80f,L1,L. L1 ⪤[RN,RP,f] L â\86\92 ð\9d\90\88â\9d¨fâ\9d© →
∀L2. L ⪤[RN,CTC … RP,f] L2 → L1⪤ [RN,CTC … RP,f] L2.
#RN #RP #HRP #f #L1 #L #H elim H -f -L1 -L
[ #f #_ #Y #H -HRP >(sex_inv_atom1 … H) -Y // ]
(* Advanced properties ******************************************************)
lemma sex_tc_dx: ∀RN,RP. s_rs_transitive_isid RN RP →
- â\88\80f. ð\9d\90\88â\9dªfâ\9d« → ∀L1,L2. TC … (sex RN RP f) L1 L2 → L1 ⪤[RN,CTC … RP,f] L2.
+ â\88\80f. ð\9d\90\88â\9d¨fâ\9d© → ∀L1,L2. TC … (sex RN RP f) L1 L2 → L1 ⪤[RN,CTC … RP,f] L2.
#RN #RP #HRP #f #Hf #L1 #L2 #H @(TC_ind_dx ??????? H) -L1
/3 width=3 by sex_tc_step_dx, sex_tc_inj_dx/
qed.
(* Basic properties *********************************************************)
-lemma fqu_fqup: â\88\80b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d«.
+lemma fqu_fqup: â\88\80b,G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d©.
/2 width=1 by tri_inj/ qed.
lemma fqup_strap1: ∀b,G1,G,G2,L1,L,L2,T1,T,T2.
- â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d«.
+ â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G,L,Tâ\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d©.
/2 width=5 by tri_step/ qed.
lemma fqup_strap2: ∀b,G1,G,G2,L1,L,L2,T1,T,T2.
- â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d«.
+ â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G,L,Tâ\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d©.
/2 width=5 by tri_TC_strap/ qed.
-lemma fqup_pair_sn: â\88\80b,I,G,L,V,T. â\9dªG,L,â\91¡[I]V.Tâ\9d« â¬\82+[b] â\9dªG,L,Vâ\9d«.
+lemma fqup_pair_sn: â\88\80b,I,G,L,V,T. â\9d¨G,L,â\91¡[I]V.Tâ\9d© â¬\82+[b] â\9d¨G,L,Vâ\9d©.
/2 width=1 by fqu_pair_sn, fqu_fqup/ qed.
-lemma fqup_bind_dx: â\88\80p,I,G,L,V,T. â\9dªG,L,â\93\91[p,I]V.Tâ\9d« â¬\82+[â\93\89] â\9dªG,L.â\93\91[I]V,Tâ\9d«.
+lemma fqup_bind_dx: â\88\80p,I,G,L,V,T. â\9d¨G,L,â\93\91[p,I]V.Tâ\9d© â¬\82+[â\93\89] â\9d¨G,L.â\93\91[I]V,Tâ\9d©.
/3 width=1 by fqu_bind_dx, fqu_fqup/ qed.
-lemma fqup_clear: â\88\80p,I,G,L,V,T. â\9dªG,L,â\93\91[p,I]V.Tâ\9d« â¬\82+[â\92»] â\9dªG,L.â\93§,Tâ\9d«.
+lemma fqup_clear: â\88\80p,I,G,L,V,T. â\9d¨G,L,â\93\91[p,I]V.Tâ\9d© â¬\82+[â\92»] â\9d¨G,L.â\93§,Tâ\9d©.
/3 width=1 by fqu_clear, fqu_fqup/ qed.
-lemma fqup_flat_dx: â\88\80b,I,G,L,V,T. â\9dªG,L,â\93\95[I]V.Tâ\9d« â¬\82+[b] â\9dªG,L,Tâ\9d«.
+lemma fqup_flat_dx: â\88\80b,I,G,L,V,T. â\9d¨G,L,â\93\95[I]V.Tâ\9d© â¬\82+[b] â\9d¨G,L,Tâ\9d©.
/2 width=1 by fqu_flat_dx, fqu_fqup/ qed.
-lemma fqup_flat_dx_pair_sn: â\88\80b,I1,I2,G,L,V1,V2,T. â\9dªG,L,â\93\95[I1]V1.â\91¡[I2]V2.Tâ\9d« â¬\82+[b] â\9dªG,L,V2â\9d«.
+lemma fqup_flat_dx_pair_sn: â\88\80b,I1,I2,G,L,V1,V2,T. â\9d¨G,L,â\93\95[I1]V1.â\91¡[I2]V2.Tâ\9d© â¬\82+[b] â\9d¨G,L,V2â\9d©.
/2 width=5 by fqu_pair_sn, fqup_strap1/ qed.
-lemma fqup_bind_dx_flat_dx: â\88\80p,G,I1,I2,L,V1,V2,T. â\9dªG,L,â\93\91[p,I1]V1.â\93\95[I2]V2.Tâ\9d« â¬\82+[â\93\89] â\9dªG,L.â\93\91[I1]V1,Tâ\9d«.
+lemma fqup_bind_dx_flat_dx: â\88\80p,G,I1,I2,L,V1,V2,T. â\9d¨G,L,â\93\91[p,I1]V1.â\93\95[I2]V2.Tâ\9d© â¬\82+[â\93\89] â\9d¨G,L.â\93\91[I1]V1,Tâ\9d©.
/2 width=5 by fqu_flat_dx, fqup_strap1/ qed.
-lemma fqup_flat_dx_bind_dx: â\88\80p,I1,I2,G,L,V1,V2,T. â\9dªG,L,â\93\95[I1]V1.â\93\91[p,I2]V2.Tâ\9d« â¬\82+[â\93\89] â\9dªG,L.â\93\91[I2]V2,Tâ\9d«.
+lemma fqup_flat_dx_bind_dx: â\88\80p,I1,I2,G,L,V1,V2,T. â\9d¨G,L,â\93\95[I1]V1.â\93\91[p,I2]V2.Tâ\9d© â¬\82+[â\93\89] â\9d¨G,L.â\93\91[I2]V2,Tâ\9d©.
/3 width=5 by fqu_bind_dx, fqup_strap1/ qed.
(* Basic eliminators ********************************************************)
lemma fqup_ind: ∀b,G1,L1,T1. ∀Q:relation3 ….
- (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
- (â\88\80G,G2,L,L2,T,T2. â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« → Q G L T → Q G2 L2 T2) →
- â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« → Q G2 L2 T2.
+ (â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© → Q G2 L2 T2) →
+ (â\88\80G,G2,L,L2,T,T2. â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G,L,Tâ\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© → Q G L T → Q G2 L2 T2) →
+ â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d© → Q G2 L2 T2.
#b #G1 #L1 #T1 #Q #IH1 #IH2 #G2 #L2 #T2 #H
@(tri_TC_ind … IH1 IH2 G2 L2 T2 H)
qed-.
lemma fqup_ind_dx: ∀b,G2,L2,T2. ∀Q:relation3 ….
- (â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« → Q G1 L1 T1) →
- (â\88\80G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« → Q G L T → Q G1 L1 T1) →
- â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« → Q G1 L1 T1.
+ (â\88\80G1,L1,T1. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© → Q G1 L1 T1) →
+ (â\88\80G1,G,L1,L,T1,T. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G,L,Tâ\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d© → Q G L T → Q G1 L1 T1) →
+ â\88\80G1,L1,T1. â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d© → Q G1 L1 T1.
#b #G2 #L2 #T2 #Q #IH1 #IH2 #G1 #L1 #T1 #H
@(tri_TC_ind_dx … IH1 IH2 G1 L1 T1 H)
qed-.
(* Advanced properties ******************************************************)
lemma fqup_zeta (b) (p) (I) (G) (K) (V):
- â\88\80T1,T2. â\87§[1]T2 â\89\98 T1 â\86\92 â\9dªG,K,â\93\91[p,I]V.T1â\9d« â¬\82+[b] â\9dªG,K,T2â\9d«.
+ â\88\80T1,T2. â\87§[1]T2 â\89\98 T1 â\86\92 â\9d¨G,K,â\93\91[p,I]V.T1â\9d© â¬\82+[b] â\9d¨G,K,T2â\9d©.
* /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: ∀b,G,K,T,i,L,U. ⇩[↑i] L ≘ K → ⇧[↑i] T ≘ U →
- â\9dªG,L,Uâ\9d« â¬\82+[b] â\9dªG,K,Tâ\9d«.
+ â\9d¨G,L,Uâ\9d© â¬\82+[b] â\9d¨G,K,Tâ\9d©.
#b #G #K #T #i elim i -i
[ #L #U #HLK #HTU elim (drops_inv_succ … HLK) -HLK
#I #Y #HY #H destruct <(drops_fwd_isid … HY) -K //
qed.
lemma fqup_drops_strap1: ∀b,G1,G2,L1,K1,K2,T1,T2,U1,i. ⇩[i] L1 ≘ K1 → ⇧[i] T1 ≘ U1 →
- â\9dªG1,K1,T1â\9d« â¬\82[b] â\9dªG2,K2,T2â\9d« â\86\92 â\9dªG1,L1,U1â\9d« â¬\82+[b] â\9dªG2,K2,T2â\9d«.
+ â\9d¨G1,K1,T1â\9d© â¬\82[b] â\9d¨G2,K2,T2â\9d© â\86\92 â\9d¨G1,L1,U1â\9d© â¬\82+[b] â\9d¨G2,K2,T2â\9d©.
#b #G1 #G2 #L1 #K1 #K2 #T1 #T2 #U1 *
[ #HLK1 #HTU1 #HT12
>(drops_fwd_isid … HLK1) -L1 //
]
qed-.
-lemma fqup_lref: â\88\80b,I,G,L,K,V,i. â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 â\9dªG,L,#iâ\9d« â¬\82+[b] â\9dªG,K,Vâ\9d«.
+lemma fqup_lref: â\88\80b,I,G,L,K,V,i. â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 â\9d¨G,L,#iâ\9d© â¬\82+[b] â\9d¨G,K,Vâ\9d©.
/2 width=6 by fqup_drops_strap1/ qed.
(* Forward lemmas with weight for closures **********************************)
-lemma fqup_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« →
+lemma fqup_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d© →
♯❨G2,L2,T2❩ < ♯❨G1,L1,T1❩.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
/3 width=3 by fqu_fwd_fw, nlt_trans/
(* Advanced eliminators *****************************************************)
lemma fqup_wf_ind: ∀b. ∀Q:relation3 …. (
- â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
+ â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d© → Q G2 L2 T2) →
Q G1 L1 T1
) → ∀G1,L1,T1. Q G1 L1 T1.
#b #Q #HQ @(wf3_ind_nlt … fw) #x #IHx #G1 #L1 #T1 #H destruct
qed-.
lemma fqup_wf_ind_eq: ∀b. ∀Q:relation3 …. (
- â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
+ â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d© → Q G2 L2 T2) →
∀G2,L2,T2. G1 = G2 → L1 = L2 → T1 = T2 → Q G2 L2 T2
) → ∀G1,L1,T1. Q G1 L1 T1.
#b #Q #HQ @(wf3_ind_nlt … fw) #x #IHx #G1 #L1 #T1 #H destruct
(* Basic eliminators ********************************************************)
lemma fqus_ind: ∀b,G1,L1,T1. ∀Q:relation3 …. Q G1 L1 T1 →
- (â\88\80G,G2,L,L2,T,T2. â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d« → Q G L T → Q G2 L2 T2) →
- â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« → Q G2 L2 T2.
+ (â\88\80G,G2,L,L2,T,T2. â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G,L,Tâ\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d© → Q G L T → Q G2 L2 T2) →
+ â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© → Q G2 L2 T2.
#b #G1 #L1 #T1 #R #IH1 #IH2 #G2 #L2 #T2 #H
@(tri_TC_star_ind … IH1 IH2 G2 L2 T2 H) //
qed-.
lemma fqus_ind_dx: ∀b,G2,L2,T2. ∀Q:relation3 …. Q G2 L2 T2 →
- (â\88\80G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â¬\82⸮[b] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« → Q G L T → Q G1 L1 T1) →
- â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« → Q G1 L1 T1.
+ (â\88\80G1,G,L1,L,T1,T. â\9d¨G1,L1,T1â\9d© â¬\82⸮[b] â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G,L,Tâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© → Q G L T → Q G1 L1 T1) →
+ â\88\80G1,L1,T1. â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© → Q G1 L1 T1.
#b #G2 #L2 #T2 #Q #IH1 #IH2 #G1 #L1 #T1 #H
@(tri_TC_star_ind_dx … IH1 IH2 G1 L1 T1 H) //
qed-.
lemma fqus_refl: ∀b. tri_reflexive … (fqus b).
/2 width=1 by tri_inj/ qed.
-lemma fquq_fqus: â\88\80b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d«.
+lemma fquq_fqus: â\88\80b,G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d©.
/2 width=1 by tri_inj/ qed.
-lemma fqus_strap1: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG,L,Tâ\9d« →
- â\9dªG,L,Tâ\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d«.
+lemma fqus_strap1: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G,L,Tâ\9d© →
+ â\9d¨G,L,Tâ\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d©.
/2 width=5 by tri_step/ qed-.
-lemma fqus_strap2: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â\9dªG1,L1,T1â\9d« â¬\82⸮[b] â\9dªG,L,Tâ\9d« →
- â\9dªG,L,Tâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d«.
+lemma fqus_strap2: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â\9d¨G1,L1,T1â\9d© â¬\82⸮[b] â\9d¨G,L,Tâ\9d© →
+ â\9d¨G,L,Tâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d©.
/2 width=5 by tri_TC_strap/ qed-.
(* Basic inversion lemmas ***************************************************)
-lemma fqus_inv_fqu_sn: â\88\80b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
+lemma fqus_inv_fqu_sn: â\88\80b,G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
(∧∧ G1 = G2 & L1 = L2 & T1 = T2) ∨
- â\88\83â\88\83G,L,T. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG,L,Tâ\9d« & â\9dªG,L,Tâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d«.
+ â\88\83â\88\83G,L,T. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G,L,Tâ\9d© & â\9d¨G,L,Tâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d©.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H12 @(fqus_ind_dx … H12) -G1 -L1 -T1 /3 width=1 by and3_intro, or_introl/
#G1 #G #L1 #L #T1 #T * /3 width=5 by ex2_3_intro, or_intror/
* #HG #HL #HT #_ destruct //
qed-.
-lemma fqus_inv_sort1: â\88\80b,G1,G2,L1,L2,T2,s. â\9dªG1,L1,â\8b\86sâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
+lemma fqus_inv_sort1: â\88\80b,G1,G2,L1,L2,T2,s. â\9d¨G1,L1,â\8b\86sâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
(∧∧ G1 = G2 & L1 = L2 & ⋆s = T2) ∨
- â\88\83â\88\83J,L. â\9dªG1,L,â\8b\86sâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« & L1 = L.ⓘ[J].
+ â\88\83â\88\83J,L. â\9d¨G1,L,â\8b\86sâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© & L1 = L.ⓘ[J].
#b #G1 #G2 #L1 #L2 #T2 #s #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/
#G #L #T #H elim (fqu_inv_sort1 … H) -H /3 width=4 by ex2_2_intro, or_intror/
qed-.
-lemma fqus_inv_lref1: â\88\80b,G1,G2,L1,L2,T2,i. â\9dªG1,L1,#iâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
+lemma fqus_inv_lref1: â\88\80b,G1,G2,L1,L2,T2,i. â\9d¨G1,L1,#iâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
∨∨ ∧∧ G1 = G2 & L1 = L2 & #i = T2
- | â\88\83â\88\83J,L,V. â\9dªG1,L,Vâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« & L1 = L.ⓑ[J]V & i = 0
- | â\88\83â\88\83J,L,j. â\9dªG1,L,#jâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« & L1 = L.ⓘ[J] & i = ↑j.
+ | â\88\83â\88\83J,L,V. â\9d¨G1,L,Vâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© & L1 = L.ⓑ[J]V & i = 0
+ | â\88\83â\88\83J,L,j. â\9d¨G1,L,#jâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© & L1 = L.ⓘ[J] & i = ↑j.
#b #G1 #G2 #L1 #L2 #T2 #i #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or3_intro0/
#G #L #T #H elim (fqu_inv_lref1 … H) -H * /3 width=6 by ex3_3_intro, or3_intro1, or3_intro2/
qed-.
-lemma fqus_inv_gref1: â\88\80b,G1,G2,L1,L2,T2,l. â\9dªG1,L1,§lâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
+lemma fqus_inv_gref1: â\88\80b,G1,G2,L1,L2,T2,l. â\9d¨G1,L1,§lâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
(∧∧ G1 = G2 & L1 = L2 & §l = T2) ∨
- â\88\83â\88\83J,L. â\9dªG1,L,§lâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« & L1 = L.ⓘ[J].
+ â\88\83â\88\83J,L. â\9d¨G1,L,§lâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© & L1 = L.ⓘ[J].
#b #G1 #G2 #L1 #L2 #T2 #l #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/
#G #L #T #H elim (fqu_inv_gref1 … H) -H /3 width=4 by ex2_2_intro, or_intror/
qed-.
-lemma fqus_inv_bind1: â\88\80b,p,I,G1,G2,L1,L2,V1,T1,T2. â\9dªG1,L1,â\93\91[p,I]V1.T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
+lemma fqus_inv_bind1: â\88\80b,p,I,G1,G2,L1,L2,V1,T1,T2. â\9d¨G1,L1,â\93\91[p,I]V1.T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓑ[p,I]V1.T1 = T2
- | â\9dªG1,L1,V1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d«
- | â\88§â\88§ â\9dªG1,L1.â\93\91[I]V1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« & b = Ⓣ
- | â\88§â\88§ â\9dªG1,L1.â\93§,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« & b = Ⓕ
- | â\88\83â\88\83J,L,T. â\9dªG1,L,Tâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« & ⇧[1] T ≘ ⓑ[p,I]V1.T1 & L1 = L.ⓘ[J].
+ | â\9d¨G1,L1,V1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d©
+ | â\88§â\88§ â\9d¨G1,L1.â\93\91[I]V1,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© & b = Ⓣ
+ | â\88§â\88§ â\9d¨G1,L1.â\93§,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© & b = Ⓕ
+ | â\88\83â\88\83J,L,T. â\9d¨G1,L,Tâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© & ⇧[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
qed-.
-lemma fqus_inv_bind1_true: â\88\80p,I,G1,G2,L1,L2,V1,T1,T2. â\9dªG1,L1,â\93\91[p,I]V1.T1â\9d« â¬\82* â\9dªG2,L2,T2â\9d« →
+lemma fqus_inv_bind1_true: â\88\80p,I,G1,G2,L1,L2,V1,T1,T2. â\9d¨G1,L1,â\93\91[p,I]V1.T1â\9d© â¬\82* â\9d¨G2,L2,T2â\9d© →
∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓑ[p,I]V1.T1 = T2
- | â\9dªG1,L1,V1â\9d« â¬\82* â\9dªG2,L2,T2â\9d«
- | â\9dªG1,L1.â\93\91[I]V1,T1â\9d« â¬\82* â\9dªG2,L2,T2â\9d«
- | â\88\83â\88\83J,L,T. â\9dªG1,L,Tâ\9d« â¬\82* â\9dªG2,L2,T2â\9d« & ⇧[1] T ≘ ⓑ[p,I]V1.T1 & L1 = L.ⓘ[J].
+ | â\9d¨G1,L1,V1â\9d© â¬\82* â\9d¨G2,L2,T2â\9d©
+ | â\9d¨G1,L1.â\93\91[I]V1,T1â\9d© â¬\82* â\9d¨G2,L2,T2â\9d©
+ | â\88\83â\88\83J,L,T. â\9d¨G1,L,Tâ\9d© â¬\82* â\9d¨G2,L2,T2â\9d© & ⇧[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
qed-.
-lemma fqus_inv_flat1: â\88\80b,I,G1,G2,L1,L2,V1,T1,T2. â\9dªG1,L1,â\93\95[I]V1.T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
+lemma fqus_inv_flat1: â\88\80b,I,G1,G2,L1,L2,V1,T1,T2. â\9d¨G1,L1,â\93\95[I]V1.T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓕ[I]V1.T1 = T2
- | â\9dªG1,L1,V1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d«
- | â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d«
- | â\88\83â\88\83J,L,T. â\9dªG1,L,Tâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« & ⇧[1] T ≘ ⓕ[I]V1.T1 & L1 = L.ⓘ[J].
+ | â\9d¨G1,L1,V1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d©
+ | â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d©
+ | â\88\83â\88\83J,L,T. â\9d¨G1,L,Tâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© & ⇧[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
(* Advanced inversion lemmas ************************************************)
-lemma fqus_inv_atom1: â\88\80b,I,G1,G2,L2,T2. â\9dªG1,â\8b\86,â\93ª[I]â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
+lemma fqus_inv_atom1: â\88\80b,I,G1,G2,L2,T2. â\9d¨G1,â\8b\86,â\93ª[I]â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
∧∧ G1 = G2 & ⋆ = L2 & ⓪[I] = T2.
#b #I #G1 #G2 #L2 #T2 #H elim (fqus_inv_fqu_sn … H) -H * /2 width=1 by and3_intro/
#G #L #T #H elim (fqu_inv_atom1 … H)
qed-.
-lemma fqus_inv_sort1_bind: â\88\80b,I,G1,G2,L1,L2,T2,s. â\9dªG1,L1.â\93\98[I],â\8b\86sâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
- (â\88§â\88§ G1 = G2 & L1.â\93\98[I] = L2 & â\8b\86s = T2) â\88¨ â\9dªG1,L1,â\8b\86sâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d«.
+lemma fqus_inv_sort1_bind: â\88\80b,I,G1,G2,L1,L2,T2,s. â\9d¨G1,L1.â\93\98[I],â\8b\86sâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
+ (â\88§â\88§ G1 = G2 & L1.â\93\98[I] = L2 & â\8b\86s = T2) â\88¨ â\9d¨G1,L1,â\8b\86sâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d©.
#b #I #G1 #G2 #L1 #L2 #T2 #s #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/
#G #L #T #H elim (fqu_inv_sort1_bind … H) -H
#H1 #H2 #H3 #H destruct /2 width=1 by or_intror/
qed-.
-lemma fqus_inv_zero1_pair: â\88\80b,I,G1,G2,L1,L2,V1,T2. â\9dªG1,L1.â\93\91[I]V1,#0â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
- (â\88§â\88§ G1 = G2 & L1.â\93\91[I]V1 = L2 & #0 = T2) â\88¨ â\9dªG1,L1,V1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d«.
+lemma fqus_inv_zero1_pair: â\88\80b,I,G1,G2,L1,L2,V1,T2. â\9d¨G1,L1.â\93\91[I]V1,#0â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
+ (â\88§â\88§ G1 = G2 & L1.â\93\91[I]V1 = L2 & #0 = T2) â\88¨ â\9d¨G1,L1,V1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d©.
#b #I #G1 #G2 #L1 #L2 #V1 #T2 #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/
#G #L #T #H elim (fqu_inv_zero1_pair … H) -H
#H1 #H2 #H3 #H destruct /2 width=1 by or_intror/
qed-.
-lemma fqus_inv_lref1_bind: â\88\80b,I,G1,G2,L1,L2,T2,i. â\9dªG1,L1.â\93\98[I],#â\86\91iâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
- (â\88§â\88§ G1 = G2 & L1.â\93\98[I] = L2 & #(â\86\91i) = T2) â\88¨ â\9dªG1,L1,#iâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d«.
+lemma fqus_inv_lref1_bind: â\88\80b,I,G1,G2,L1,L2,T2,i. â\9d¨G1,L1.â\93\98[I],#â\86\91iâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
+ (â\88§â\88§ G1 = G2 & L1.â\93\98[I] = L2 & #(â\86\91i) = T2) â\88¨ â\9d¨G1,L1,#iâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d©.
#b #I #G1 #G2 #L1 #L2 #T2 #i #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/
#G #L #T #H elim (fqu_inv_lref1_bind … H) -H
#H1 #H2 #H3 #H destruct /2 width=1 by or_intror/
qed-.
-lemma fqus_inv_gref1_bind: â\88\80b,I,G1,G2,L1,L2,T2,l. â\9dªG1,L1.â\93\98[I],§lâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
- (â\88§â\88§ G1 = G2 & L1.â\93\98[I] = L2 & §l = T2) â\88¨ â\9dªG1,L1,§lâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d«.
+lemma fqus_inv_gref1_bind: â\88\80b,I,G1,G2,L1,L2,T2,l. â\9d¨G1,L1.â\93\98[I],§lâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
+ (â\88§â\88§ G1 = G2 & L1.â\93\98[I] = L2 & §l = T2) â\88¨ â\9d¨G1,L1,§lâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d©.
#b #I #G1 #G2 #L1 #L2 #T2 #l #H elim (fqus_inv_fqu_sn … H) -H * /3 width=1 by and3_intro, or_introl/
#G #L #T #H elim (fqu_inv_gref1_bind … H) -H
#H1 #H2 #H3 #H destruct /2 width=1 by or_intror/
(* Properties with generic slicing for local environments *******************)
lemma fqus_drops: ∀b,G,L,K,T,U,i. ⇩[i] L ≘ K → ⇧[i] T ≘ U →
- â\9dªG,L,Uâ\9d« â¬\82*[b] â\9dªG,K,Tâ\9d«.
+ â\9d¨G,L,Uâ\9d© â¬\82*[b] â\9d¨G,K,Tâ\9d©.
#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 //
qed.
(* Alternative definition with plus-iterated supclosure *********************)
-lemma fqup_fqus: â\88\80b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d«.
+lemma fqup_fqus: â\88\80b,G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d©.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
/3 width=5 by fqus_strap1, fquq_fqus, fqu_fquq/
qed.
(* Basic_2A1: was: fqus_inv_gen *)
-lemma fqus_inv_fqup: â\88\80b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« ∨ (∧∧ G1 = G2 & L1 = L2 & T1 = T2).
+lemma fqus_inv_fqup: â\88\80b,G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d© ∨ (∧∧ G1 = G2 & L1 = L2 & T1 = T2).
#b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -G2 -L2 -T2 //
#G #G2 #L #L2 #T #T2 #_ *
[ #H2 * /3 width=5 by fqup_strap1, or_introl/
(* Advanced properties ******************************************************)
-lemma fqus_strap1_fqu: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d«.
+lemma fqus_strap1_fqu: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G,L,Tâ\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d©.
#b #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 elim (fqus_inv_fqup … H1) -H1
[ /2 width=5 by fqup_strap1/
| * /2 width=1 by fqu_fqup/
]
qed-.
-lemma fqus_strap2_fqu: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d«.
+lemma fqus_strap2_fqu: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G,L,Tâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d©.
#b #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 elim (fqus_inv_fqup … H2) -H2
[ /2 width=5 by fqup_strap2/
| * /2 width=1 by fqu_fqup/
]
qed-.
-lemma fqus_fqup_trans: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« →
- â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d«.
+lemma fqus_fqup_trans: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G,L,Tâ\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d© →
+ â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d©.
#b #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2 @(fqup_ind … H2) -H2 -G2 -L2 -T2
/2 width=5 by fqus_strap1_fqu, fqup_strap1/
qed-.
-lemma fqup_fqus_trans: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG,L,Tâ\9d« →
- â\9dªG,L,Tâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d«.
+lemma fqup_fqus_trans: â\88\80b,G1,G,G2,L1,L,L2,T1,T,T2. â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G,L,Tâ\9d© →
+ â\9d¨G,L,Tâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d©.
#b #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 @(fqup_ind_dx … H1) -H1 -G1 -L1 -T1
/3 width=5 by fqus_strap2_fqu, fqup_strap2/
qed-.
(* Advanced inversion lemmas for plus-iterated supclosure *******************)
-lemma fqup_inv_step_sn: â\88\80b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« →
- â\88\83â\88\83G,L,T. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG,L,Tâ\9d« & â\9dªG,L,Tâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d«.
+lemma fqup_inv_step_sn: â\88\80b,G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82+[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\83â\88\83G,L,T. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G,L,Tâ\9d© & â\9d¨G,L,Tâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d©.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind_dx … H) -G1 -L1 -T1 /2 width=5 by ex2_3_intro/
#G1 #G #L1 #L #T1 #T #H1 #_ * /4 width=9 by fqus_strap2, fqu_fquq, ex2_3_intro/
qed-.
(* Forward lemmas with weight for closures **********************************)
-lemma fqus_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
+lemma fqus_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
♯❨G2,L2,T2❩ ≤ ♯❨G1,L1,T1❩.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -L2 -T2
/3 width=3 by fquq_fwd_fw, nle_trans/
(* Advanced inversion lemmas ************************************************)
-lemma fqus_inv_refl_atom3: â\88\80b,I,G,L,X. â\9dªG,L,â\93ª[I]â\9d« â¬\82*[b] â\9dªG,L,Xâ\9d« → ⓪[I] = X.
+lemma fqus_inv_refl_atom3: â\88\80b,I,G,L,X. â\9d¨G,L,â\93ª[I]â\9d© â¬\82*[b] â\9d¨G,L,Xâ\9d© → ⓪[I] = X.
#b #I #G #L #X #H elim (fqus_inv_fqu_sn … H) -H * //
#G0 #L0 #T0 #H1 #H2 lapply (fqu_fwd_fw … H1) lapply (fqus_fwd_fw … H2) -H2 -H1
#H2 #H1 lapply (nle_nlt_trans … H2 H1) -G0 -L0 -T0
(* Basic properties *********************************************************)
-lemma fqu_sort: â\88\80b,I,G,L,s. â\9dªG,L.â\93\98[I],â\8b\86sâ\9d« â¬\82[b] â\9dªG,L,â\8b\86sâ\9d«.
+lemma fqu_sort: â\88\80b,I,G,L,s. â\9d¨G,L.â\93\98[I],â\8b\86sâ\9d© â¬\82[b] â\9d¨G,L,â\8b\86sâ\9d©.
/2 width=1 by fqu_drop/ qed.
-lemma fqu_lref_S: â\88\80b,I,G,L,i. â\9dªG,L.â\93\98[I],#â\86\91iâ\9d« â¬\82[b] â\9dªG,L,#iâ\9d«.
+lemma fqu_lref_S: â\88\80b,I,G,L,i. â\9d¨G,L.â\93\98[I],#â\86\91iâ\9d© â¬\82[b] â\9d¨G,L,#iâ\9d©.
/2 width=1 by fqu_drop/ qed.
-lemma fqu_gref: â\88\80b,I,G,L,l. â\9dªG,L.â\93\98[I],§lâ\9d« â¬\82[b] â\9dªG,L,§lâ\9d«.
+lemma fqu_gref: â\88\80b,I,G,L,l. â\9d¨G,L.â\93\98[I],§lâ\9d© â¬\82[b] â\9d¨G,L,§lâ\9d©.
/2 width=1 by fqu_drop/ qed.
(* Basic inversion lemmas ***************************************************)
-fact fqu_inv_sort1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+fact fqu_inv_sort1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
∀s. T1 = ⋆s →
∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & T2 = ⋆s.
#b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2
]
qed-.
-lemma fqu_inv_sort1: â\88\80b,G1,G2,L1,L2,T2,s. â\9dªG1,L1,â\8b\86sâ\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+lemma fqu_inv_sort1: â\88\80b,G1,G2,L1,L2,T2,s. â\9d¨G1,L1,â\8b\86sâ\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & T2 = ⋆s.
/2 width=4 by fqu_inv_sort1_aux/ qed-.
-fact fqu_inv_lref1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+fact fqu_inv_lref1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
∀i. T1 = #i →
(∃∃J,V. G1 = G2 & L1 = L2.ⓑ[J]V & T2 = V & i = 0) ∨
∃∃J,j. G1 = G2 & L1 = L2.ⓘ[J] & T2 = #j & i = ↑j.
]
qed-.
-lemma fqu_inv_lref1: â\88\80b,G1,G2,L1,L2,T2,i. â\9dªG1,L1,#iâ\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+lemma fqu_inv_lref1: â\88\80b,G1,G2,L1,L2,T2,i. â\9d¨G1,L1,#iâ\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
(∃∃J,V. G1 = G2 & L1 = L2.ⓑ[J]V & T2 = V & i = 0) ∨
∃∃J,j. G1 = G2 & L1 = L2.ⓘ[J] & T2 = #j & i = ↑j.
/2 width=4 by fqu_inv_lref1_aux/ qed-.
-fact fqu_inv_gref1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+fact fqu_inv_gref1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
∀l. T1 = §l →
∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & T2 = §l.
#b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2
]
qed-.
-lemma fqu_inv_gref1: â\88\80b,G1,G2,L1,L2,T2,l. â\9dªG1,L1,§lâ\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+lemma fqu_inv_gref1: â\88\80b,G1,G2,L1,L2,T2,l. â\9d¨G1,L1,§lâ\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & T2 = §l.
/2 width=4 by fqu_inv_gref1_aux/ qed-.
-fact fqu_inv_bind1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+fact fqu_inv_bind1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
∀p,I,V1,U1. T1 = ⓑ[p,I]V1.U1 →
∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2
| ∧∧ G1 = G2 & L1.ⓑ[I]V1 = L2 & U1 = T2 & b = Ⓣ
]
qed-.
-lemma fqu_inv_bind1: â\88\80b,p,I,G1,G2,L1,L2,V1,U1,T2. â\9dªG1,L1,â\93\91[p,I]V1.U1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+lemma fqu_inv_bind1: â\88\80b,p,I,G1,G2,L1,L2,V1,U1,T2. â\9d¨G1,L1,â\93\91[p,I]V1.U1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2
| ∧∧ G1 = G2 & L1.ⓑ[I]V1 = L2 & U1 = T2 & b = Ⓣ
| ∧∧ G1 = G2 & L1.ⓧ = L2 & U1 = T2 & b = Ⓕ
| ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & ⇧[1] T2 ≘ ⓑ[p,I]V1.U1.
/2 width=4 by fqu_inv_bind1_aux/ qed-.
-lemma fqu_inv_bind1_true: â\88\80p,I,G1,G2,L1,L2,V1,U1,T2. â\9dªG1,L1,â\93\91[p,I]V1.U1â\9d« â¬\82 â\9dªG2,L2,T2â\9d« →
+lemma fqu_inv_bind1_true: â\88\80p,I,G1,G2,L1,L2,V1,U1,T2. â\9d¨G1,L1,â\93\91[p,I]V1.U1â\9d© â¬\82 â\9d¨G2,L2,T2â\9d© →
∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2
| ∧∧ G1 = G2 & L1.ⓑ[I]V1 = L2 & U1 = T2
| ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & ⇧[1] T2 ≘ ⓑ[p,I]V1.U1.
/3 width=1 by and3_intro, or3_intro1/
qed-.
-fact fqu_inv_flat1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+fact fqu_inv_flat1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
∀I,V1,U1. T1 = ⓕ[I]V1.U1 →
∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2
| ∧∧ G1 = G2 & L1 = L2 & U1 = T2
]
qed-.
-lemma fqu_inv_flat1: â\88\80b,I,G1,G2,L1,L2,V1,U1,T2. â\9dªG1,L1,â\93\95[I]V1.U1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+lemma fqu_inv_flat1: â\88\80b,I,G1,G2,L1,L2,V1,U1,T2. â\9d¨G1,L1,â\93\95[I]V1.U1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
∨∨ ∧∧ G1 = G2 & L1 = L2 & V1 = T2
| ∧∧ G1 = G2 & L1 = L2 & U1 = T2
| ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & ⇧[1] T2 ≘ ⓕ[I]V1.U1.
(* Advanced inversion lemmas ************************************************)
-lemma fqu_inv_atom1: â\88\80b,I,G1,G2,L2,T2. â\9dªG1,â\8b\86,â\93ª[I]â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« → ⊥.
+lemma fqu_inv_atom1: â\88\80b,I,G1,G2,L2,T2. â\9d¨G1,â\8b\86,â\93ª[I]â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© → ⊥.
#b * #x #G1 #G2 #L2 #T2 #H
[ elim (fqu_inv_sort1 … H) | elim (fqu_inv_lref1 … H) * | elim (fqu_inv_gref1 … H) ] -H
#I [2: #V |3: #i ] #_ #H destruct
qed-.
-lemma fqu_inv_sort1_bind: â\88\80b,I,G1,G2,K,L2,T2,s. â\9dªG1,K.â\93\98[I],â\8b\86sâ\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+lemma fqu_inv_sort1_bind: â\88\80b,I,G1,G2,K,L2,T2,s. â\9d¨G1,K.â\93\98[I],â\8b\86sâ\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
∧∧ G1 = G2 & L2 = K & T2 = ⋆s.
#b #I #G1 #G2 #K #L2 #T2 #s #H elim (fqu_inv_sort1 … H) -H
#Z #X #H1 #H2 destruct /2 width=1 by and3_intro/
qed-.
-lemma fqu_inv_zero1_pair: â\88\80b,I,G1,G2,K,L2,V,T2. â\9dªG1,K.â\93\91[I]V,#0â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+lemma fqu_inv_zero1_pair: â\88\80b,I,G1,G2,K,L2,V,T2. â\9d¨G1,K.â\93\91[I]V,#0â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
∧∧ G1 = G2 & L2 = K & T2 = V.
#b #I #G1 #G2 #K #L2 #V #T2 #H elim (fqu_inv_lref1 … H) -H *
#Z #X #H1 #H2 #H3 #H4 destruct /2 width=1 by and3_intro/
qed-.
-lemma fqu_inv_lref1_bind: â\88\80b,I,G1,G2,K,L2,T2,i. â\9dªG1,K.â\93\98[I],#(â\86\91i)â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+lemma fqu_inv_lref1_bind: â\88\80b,I,G1,G2,K,L2,T2,i. â\9d¨G1,K.â\93\98[I],#(â\86\91i)â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
∧∧ G1 = G2 & L2 = K & T2 = #i.
#b #I #G1 #G2 #K #L2 #T2 #i #H elim (fqu_inv_lref1 … H) -H *
#Z #X #H1 #H2 #H3 #H4 destruct /2 width=1 by and3_intro/
qed-.
-lemma fqu_inv_gref1_bind: â\88\80b,I,G1,G2,K,L2,T2,l. â\9dªG1,K.â\93\98[I],§lâ\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+lemma fqu_inv_gref1_bind: â\88\80b,I,G1,G2,K,L2,T2,l. â\9d¨G1,K.â\93\98[I],§lâ\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
∧∧ G1 = G2 & L2 = K & T2 = §l.
#b #I #G1 #G2 #K #L2 #T2 #l #H elim (fqu_inv_gref1 … H) -H
#Z #H1 #H2 #H3 destruct /2 width=1 by and3_intro/
(* Forward lemmas with length for local environments ************************)
-fact fqu_fwd_length_lref1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+fact fqu_fwd_length_lref1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
∀i. T1 = #i → |L2| < |L1|.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 // [2,3: #p]
#I #G #L #V #T [1,2: #_ ] #j #H destruct
qed-.
-lemma fqu_fwd_length_lref1: â\88\80b,G1,G2,L1,L2,T2,i. â\9dªG1,L1,#iâ\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+lemma fqu_fwd_length_lref1: â\88\80b,G1,G2,L1,L2,T2,i. â\9d¨G1,L1,#iâ\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
|L2| < |L1|.
/2 width=8 by fqu_fwd_length_lref1_aux/
qed-.
(* Inversion lemmas with context-free generic equivalence for terms *********)
fact fqu_inv_teqg_aux (S) (b):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
G1 = G2 → |L1| = |L2| → T1 ≛[S] T2 → ⊥.
#S #b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2
[1: #I #G #L #V #_ #H elim (nsucc_inv_refl … H)
(* Basic_2A1: uses: fqu_inv_eq *)
lemma fqu_inv_teqg (S) (b):
- â\88\80G,L1,L2,T1,T2. â\9dªG,L1,T1â\9d« â¬\82[b] â\9dªG,L2,T2â\9d« →
+ â\88\80G,L1,L2,T1,T2. â\9d¨G,L1,T1â\9d© â¬\82[b] â\9d¨G,L2,T2â\9d© →
|L1| = |L2| → T1 ≛[S] T2 → ⊥.
#S #b #G #L1 #L2 #T1 #T2 #H
@(fqu_inv_teqg_aux … H) // (**) (* full auto fails *)
(* Forward lemmas with weight for closures **********************************)
-lemma fqu_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« →
+lemma fqu_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© →
♯❨G2,L2,T2❩ < ♯❨G1,L1,T1❩.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2 //
#I #I1 #I2 #G #L #HI12 normalize in ⊢ (?%%); -I1
(* Advanced eliminators *****************************************************)
lemma fqu_wf_ind: ∀b. ∀Q:relation3 …. (
- â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
+ â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© → Q G2 L2 T2) →
Q G1 L1 T1
) → ∀G1,L1,T1. Q G1 L1 T1.
#b #Q #HQ @(wf3_ind_nlt … fw) #x #IHx #G1 #L1 #T1 #H destruct /4 width=2 by fqu_fwd_fw/
lemma fquq_refl: ∀b. tri_reflexive … (fquq b).
// qed.
-lemma fqu_fquq: â\88\80b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d«.
+lemma fqu_fquq: â\88\80b,G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d©.
/2 width=1 by or_introl/ qed.
(* Basic_2A1: removed theorems 8:
(* Forward lemmas with length for local environments ************************)
-lemma fquq_fwd_length_lref1: â\88\80b,G1,G2,L1,L2,T2,i. â\9dªG1,L1,#iâ\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d« →
+lemma fquq_fwd_length_lref1: â\88\80b,G1,G2,L1,L2,T2,i. â\9d¨G1,L1,#iâ\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d© →
|L2| ≤ |L1|.
#b #G1 #G2 #L1 #L2 #T2 #i #H elim H -H [2: * ]
/3 width=6 by fqu_fwd_length_lref1, nlt_des_le/
(* Forward lemmas with weight for closures **********************************)
-lemma fquq_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d« →
+lemma fquq_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d© →
♯❨G2,L2,T2❩ ≤ ♯❨G1,L1,T1❩.
#b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H [2: * ]
/3 width=2 by fqu_fwd_fw, nlt_des_le/
(* Basic inversion lemmas ***************************************************)
-fact aaa_inv_sort_aux: â\88\80G,L,T,A. â\9dªG,Lâ\9d« ⊢ T ⁝ A → ∀s. T = ⋆s → A = ⓪.
+fact aaa_inv_sort_aux: â\88\80G,L,T,A. â\9d¨G,Lâ\9d© ⊢ T ⁝ A → ∀s. T = ⋆s → A = ⓪.
#G #L #T #A * -G -L -T -A //
[ #I #G #L #V #B #_ #s #H destruct
| #I #G #L #A #i #_ #s #H destruct
]
qed-.
-lemma aaa_inv_sort: â\88\80G,L,A,s. â\9dªG,Lâ\9d« ⊢ ⋆s ⁝ A → A = ⓪.
+lemma aaa_inv_sort: â\88\80G,L,A,s. â\9d¨G,Lâ\9d© ⊢ ⋆s ⁝ A → A = ⓪.
/2 width=6 by aaa_inv_sort_aux/ qed-.
-fact aaa_inv_zero_aux: â\88\80G,L,T,A. â\9dªG,Lâ\9d« ⊢ T ⁝ A → T = #0 →
- â\88\83â\88\83I,K,V. L = K.â\93\91[I]V & â\9dªG,Kâ\9d« ⊢ V ⁝ A.
+fact aaa_inv_zero_aux: â\88\80G,L,T,A. â\9d¨G,Lâ\9d© ⊢ T ⁝ A → T = #0 →
+ â\88\83â\88\83I,K,V. L = K.â\93\91[I]V & â\9d¨G,Kâ\9d© ⊢ V ⁝ A.
#G #L #T #A * -G -L -T -A /2 width=5 by ex2_3_intro/
[ #G #L #s #H destruct
| #I #G #L #A #i #_ #H destruct
]
qed-.
-lemma aaa_inv_zero: â\88\80G,L,A. â\9dªG,Lâ\9d« ⊢ #0 ⁝ A →
- â\88\83â\88\83I,K,V. L = K.â\93\91[I]V & â\9dªG,Kâ\9d« ⊢ V ⁝ A.
+lemma aaa_inv_zero: â\88\80G,L,A. â\9d¨G,Lâ\9d© ⊢ #0 ⁝ A →
+ â\88\83â\88\83I,K,V. L = K.â\93\91[I]V & â\9d¨G,Kâ\9d© ⊢ V ⁝ A.
/2 width=3 by aaa_inv_zero_aux/ qed-.
-fact aaa_inv_lref_aux: â\88\80G,L,T,A. â\9dªG,Lâ\9d« ⊢ T ⁝ A → ∀i. T = #(↑i) →
- â\88\83â\88\83I,K. L = K.â\93\98[I] & â\9dªG,Kâ\9d« ⊢ #i ⁝ A.
+fact aaa_inv_lref_aux: â\88\80G,L,T,A. â\9d¨G,Lâ\9d© ⊢ T ⁝ A → ∀i. T = #(↑i) →
+ â\88\83â\88\83I,K. L = K.â\93\98[I] & â\9d¨G,Kâ\9d© ⊢ #i ⁝ A.
#G #L #T #A * -G -L -T -A
[ #G #L #s #j #H destruct
| #I #G #L #V #B #_ #j #H destruct
]
qed-.
-lemma aaa_inv_lref: â\88\80G,L,A,i. â\9dªG,Lâ\9d« ⊢ #↑i ⁝ A →
- â\88\83â\88\83I,K. L = K.â\93\98[I] & â\9dªG,Kâ\9d« ⊢ #i ⁝ A.
+lemma aaa_inv_lref: â\88\80G,L,A,i. â\9d¨G,Lâ\9d© ⊢ #↑i ⁝ A →
+ â\88\83â\88\83I,K. L = K.â\93\98[I] & â\9d¨G,Kâ\9d© ⊢ #i ⁝ A.
/2 width=3 by aaa_inv_lref_aux/ qed-.
-fact aaa_inv_gref_aux: â\88\80G,L,T,A. â\9dªG,Lâ\9d« ⊢ T ⁝ A → ∀l. T = §l → ⊥.
+fact aaa_inv_gref_aux: â\88\80G,L,T,A. â\9d¨G,Lâ\9d© ⊢ T ⁝ A → ∀l. T = §l → ⊥.
#G #L #T #A * -G -L -T -A
[ #G #L #s #k #H destruct
| #I #G #L #V #B #_ #k #H destruct
]
qed-.
-lemma aaa_inv_gref: â\88\80G,L,A,l. â\9dªG,Lâ\9d« ⊢ §l ⁝ A → ⊥.
+lemma aaa_inv_gref: â\88\80G,L,A,l. â\9d¨G,Lâ\9d© ⊢ §l ⁝ A → ⊥.
/2 width=7 by aaa_inv_gref_aux/ qed-.
-fact aaa_inv_abbr_aux: â\88\80G,L,T,A. â\9dªG,Lâ\9d« ⊢ T ⁝ A → ∀p,W,U. T = ⓓ[p]W.U →
- â\88\83â\88\83B. â\9dªG,Lâ\9d« â\8a¢ W â\81\9d B & â\9dªG,L.â\93\93Wâ\9d« ⊢ U ⁝ A.
+fact aaa_inv_abbr_aux: â\88\80G,L,T,A. â\9d¨G,Lâ\9d© ⊢ T ⁝ A → ∀p,W,U. T = ⓓ[p]W.U →
+ â\88\83â\88\83B. â\9d¨G,Lâ\9d© â\8a¢ W â\81\9d B & â\9d¨G,L.â\93\93Wâ\9d© ⊢ U ⁝ A.
#G #L #T #A * -G -L -T -A
[ #G #L #s #q #W #U #H destruct
| #I #G #L #V #B #_ #q #W #U #H destruct
]
qed-.
-lemma aaa_inv_abbr: â\88\80p,G,L,V,T,A. â\9dªG,Lâ\9d« ⊢ ⓓ[p]V.T ⁝ A →
- â\88\83â\88\83B. â\9dªG,Lâ\9d« â\8a¢ V â\81\9d B & â\9dªG,L.â\93\93Vâ\9d« ⊢ T ⁝ A.
+lemma aaa_inv_abbr: â\88\80p,G,L,V,T,A. â\9d¨G,Lâ\9d© ⊢ ⓓ[p]V.T ⁝ A →
+ â\88\83â\88\83B. â\9d¨G,Lâ\9d© â\8a¢ V â\81\9d B & â\9d¨G,L.â\93\93Vâ\9d© ⊢ T ⁝ A.
/2 width=4 by aaa_inv_abbr_aux/ qed-.
-fact aaa_inv_abst_aux: â\88\80G,L,T,A. â\9dªG,Lâ\9d« ⊢ T ⁝ A → ∀p,W,U. T = ⓛ[p]W.U →
- â\88\83â\88\83B1,B2. â\9dªG,Lâ\9d« â\8a¢ W â\81\9d B1 & â\9dªG,L.â\93\9bWâ\9d« ⊢ U ⁝ B2 & A = ②B1.B2.
+fact aaa_inv_abst_aux: â\88\80G,L,T,A. â\9d¨G,Lâ\9d© ⊢ T ⁝ A → ∀p,W,U. T = ⓛ[p]W.U →
+ â\88\83â\88\83B1,B2. â\9d¨G,Lâ\9d© â\8a¢ W â\81\9d B1 & â\9d¨G,L.â\93\9bWâ\9d© ⊢ U ⁝ B2 & A = ②B1.B2.
#G #L #T #A * -G -L -T -A
[ #G #L #s #q #W #U #H destruct
| #I #G #L #V #B #_ #q #W #U #H destruct
]
qed-.
-lemma aaa_inv_abst: â\88\80p,G,L,W,T,A. â\9dªG,Lâ\9d« ⊢ ⓛ[p]W.T ⁝ A →
- â\88\83â\88\83B1,B2. â\9dªG,Lâ\9d« â\8a¢ W â\81\9d B1 & â\9dªG,L.â\93\9bWâ\9d« ⊢ T ⁝ B2 & A = ②B1.B2.
+lemma aaa_inv_abst: â\88\80p,G,L,W,T,A. â\9d¨G,Lâ\9d© ⊢ ⓛ[p]W.T ⁝ A →
+ â\88\83â\88\83B1,B2. â\9d¨G,Lâ\9d© â\8a¢ W â\81\9d B1 & â\9d¨G,L.â\93\9bWâ\9d© ⊢ T ⁝ B2 & A = ②B1.B2.
/2 width=4 by aaa_inv_abst_aux/ qed-.
-fact aaa_inv_appl_aux: â\88\80G,L,T,A. â\9dªG,Lâ\9d« ⊢ T ⁝ A → ∀W,U. T = ⓐW.U →
- â\88\83â\88\83B. â\9dªG,Lâ\9d« â\8a¢ W â\81\9d B & â\9dªG,Lâ\9d« ⊢ U ⁝ ②B.A.
+fact aaa_inv_appl_aux: â\88\80G,L,T,A. â\9d¨G,Lâ\9d© ⊢ T ⁝ A → ∀W,U. T = ⓐW.U →
+ â\88\83â\88\83B. â\9d¨G,Lâ\9d© â\8a¢ W â\81\9d B & â\9d¨G,Lâ\9d© ⊢ U ⁝ ②B.A.
#G #L #T #A * -G -L -T -A
[ #G #L #s #W #U #H destruct
| #I #G #L #V #B #_ #W #U #H destruct
]
qed-.
-lemma aaa_inv_appl: â\88\80G,L,V,T,A. â\9dªG,Lâ\9d« ⊢ ⓐV.T ⁝ A →
- â\88\83â\88\83B. â\9dªG,Lâ\9d« â\8a¢ V â\81\9d B & â\9dªG,Lâ\9d« ⊢ T ⁝ ②B.A.
+lemma aaa_inv_appl: â\88\80G,L,V,T,A. â\9d¨G,Lâ\9d© ⊢ ⓐV.T ⁝ A →
+ â\88\83â\88\83B. â\9d¨G,Lâ\9d© â\8a¢ V â\81\9d B & â\9d¨G,Lâ\9d© ⊢ T ⁝ ②B.A.
/2 width=3 by aaa_inv_appl_aux/ qed-.
-fact aaa_inv_cast_aux: â\88\80G,L,T,A. â\9dªG,Lâ\9d« ⊢ T ⁝ A → ∀W,U. T = ⓝW.U →
- â\9dªG,Lâ\9d« â\8a¢ W â\81\9d A â\88§ â\9dªG,Lâ\9d« ⊢ U ⁝ A.
+fact aaa_inv_cast_aux: â\88\80G,L,T,A. â\9d¨G,Lâ\9d© ⊢ T ⁝ A → ∀W,U. T = ⓝW.U →
+ â\9d¨G,Lâ\9d© â\8a¢ W â\81\9d A â\88§ â\9d¨G,Lâ\9d© ⊢ U ⁝ A.
#G #L #T #A * -G -L -T -A
[ #G #L #s #W #U #H destruct
| #I #G #L #V #B #_ #W #U #H destruct
]
qed-.
-lemma aaa_inv_cast: â\88\80G,L,W,T,A. â\9dªG,Lâ\9d« ⊢ ⓝW.T ⁝ A →
- â\9dªG,Lâ\9d« â\8a¢ W â\81\9d A â\88§ â\9dªG,Lâ\9d« ⊢ T ⁝ A.
+lemma aaa_inv_cast: â\88\80G,L,W,T,A. â\9d¨G,Lâ\9d© ⊢ ⓝW.T ⁝ A →
+ â\9d¨G,Lâ\9d© â\8a¢ W â\81\9d A â\88§ â\9d¨G,Lâ\9d© ⊢ T ⁝ A.
/2 width=3 by aaa_inv_cast_aux/ qed-.
(* Main inversion lemmas ****************************************************)
-theorem aaa_mono: â\88\80G,L,T,A1. â\9dªG,Lâ\9d« â\8a¢ T â\81\9d A1 â\86\92 â\88\80A2. â\9dªG,Lâ\9d« ⊢ T ⁝ A2 → A1 = A2.
+theorem aaa_mono: â\88\80G,L,T,A1. â\9d¨G,Lâ\9d© â\8a¢ T â\81\9d A1 â\86\92 â\88\80A2. â\9d¨G,Lâ\9d© ⊢ T ⁝ A2 → A1 = A2.
#G #L #T #A1 #H elim H -G -L -T -A1
[ #G #L #s #A2 #H >(aaa_inv_sort … H) -H //
| #I1 #G #L #V1 #B #_ #IH #A2 #H
(* Advanced inversion lemmas ************************************************)
lemma aaa_aaa_inv_appl (G) (L) (V) (T) (B) (X):
- â\88\80A. â\9dªG,Lâ\9d« â\8a¢ â\93\90V.T â\81\9d A â\86\92 â\9dªG,Lâ\9d« â\8a¢ V â\81\9d B â\86\92 â\9dªG,Lâ\9d«⊢ T ⁝ X → ②B.A = X.
+ â\88\80A. â\9d¨G,Lâ\9d© â\8a¢ â\93\90V.T â\81\9d A â\86\92 â\9d¨G,Lâ\9d© â\8a¢ V â\81\9d B â\86\92 â\9d¨G,Lâ\9d©⊢ T ⁝ X → ②B.A = X.
#G #L #V #T #B #X #A #H #H1V #H1T
elim (aaa_inv_appl … H) -H #B0 #H2V #H2T
lapply (aaa_mono … H2V … H1V) -V #H destruct
qed-.
lemma aaa_aaa_inv_cast (G) (L) (U) (T) (B) (A):
- â\88\80X. â\9dªG,Lâ\9d« â\8a¢ â\93\9dU.T â\81\9d X â\86\92 â\9dªG,Lâ\9d« â\8a¢ U â\81\9d B â\86\92 â\9dªG,Lâ\9d«⊢ T ⁝ A → ∧∧ B = X & A = X.
+ â\88\80X. â\9d¨G,Lâ\9d© â\8a¢ â\93\9dU.T â\81\9d X â\86\92 â\9d¨G,Lâ\9d© â\8a¢ U â\81\9d B â\86\92 â\9d¨G,Lâ\9d©⊢ T ⁝ A → ∧∧ B = X & A = X.
#G #L #U #T #B #A #X #H #H1U #H1T
elim (aaa_inv_cast … H) -H #H2U #H2T
lapply (aaa_mono … H1U … H2U) -U #HB
(* Main properties **********************************************************)
-theorem aaa_dec (G) (L) (T): Decidable (â\88\83A. â\9dªG,Lâ\9d« ⊢ T ⁝ A).
+theorem aaa_dec (G) (L) (T): Decidable (â\88\83A. â\9d¨G,Lâ\9d© ⊢ T ⁝ A).
#G #L #T @(fqup_wf_ind_eq (Ⓣ) … G L T) -G -L -T
#G0 #L0 #T0 #IH #G #L * * [||| #p * | * ]
[ #s #HG #HL #HT destruct -IH
(* Advanced properties ******************************************************)
(* Basic_2A1: was: aaa_lref *)
-lemma aaa_lref_drops: â\88\80I,G,K,V,B,i,L. â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 â\9dªG,Kâ\9d« â\8a¢ V â\81\9d B â\86\92 â\9dªG,Lâ\9d« ⊢ #i ⁝ B.
+lemma aaa_lref_drops: â\88\80I,G,K,V,B,i,L. â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 â\9d¨G,Kâ\9d© â\8a¢ V â\81\9d B â\86\92 â\9d¨G,Lâ\9d© ⊢ #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/
(* Advanced inversion lemmas ************************************************)
(* Basic_2A1: was: aaa_inv_lref *)
-lemma aaa_inv_lref_drops: â\88\80G,A,i,L. â\9dªG,Lâ\9d« ⊢ #i ⁝ A →
- â\88\83â\88\83I,K,V. â\87©[i] L â\89\98 K.â\93\91[I]V & â\9dªG,Kâ\9d« ⊢ V ⁝ A.
+lemma aaa_inv_lref_drops: â\88\80G,A,i,L. â\9d¨G,Lâ\9d© ⊢ #i ⁝ A →
+ â\88\83â\88\83I,K,V. â\87©[i] L â\89\98 K.â\93\91[I]V & â\9d¨G,Kâ\9d© ⊢ 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. â\9dªG,Lâ\9d« â\8a¢ #i â\81\9d A â\86\92 â\88\80I,K,V. â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 â\9dªG,Kâ\9d« ⊢ V ⁝ A.
+ â\88\80A. â\9d¨G,Lâ\9d© â\8a¢ #i â\81\9d A â\86\92 â\88\80I,K,V. â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 â\9d¨G,Kâ\9d© ⊢ 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. â\9dªG,L1â\9d« ⊢ T1 ⁝ A → ∀b,f,L2. ⇩*[b,f] L2 ≘ L1 →
- â\88\80T2. â\87§*[f] T1 â\89\98 T2 â\86\92 â\9dªG,L2â\9d« ⊢ T2 ⁝ A.
+lemma aaa_lifts: â\88\80G,L1,T1,A. â\9d¨G,L1â\9d© ⊢ T1 ⁝ A → ∀b,f,L2. ⇩*[b,f] L2 ≘ L1 →
+ â\88\80T2. â\87§*[f] T1 â\89\98 T2 â\86\92 â\9d¨G,L2â\9d© ⊢ 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. â\9dªG,L2â\9d« ⊢ T2 ⁝ A → ∀b,f,L1. ⇩*[b,f] L2 ≘ L1 →
- â\88\80T1. â\87§*[f] T1 â\89\98 T2 â\86\92 â\9dªG,L1â\9d« ⊢ T1 ⁝ A.
+lemma aaa_inv_lifts: â\88\80G,L2,T2,A. â\9d¨G,L2â\9d© ⊢ T2 ⁝ A → ∀b,f,L1. ⇩*[b,f] L2 ≘ L1 →
+ â\88\80T1. â\87§*[f] T1 â\89\98 T2 â\86\92 â\9d¨G,L1â\9d© ⊢ 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
lemma aaa_feqg_conf (S):
reflexive … S →
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« →
- â\88\80A. â\9dªG1,L1â\9d« â\8a¢ T1 â\81\9d A â\86\92 â\9dªG2,L2â\9d« ⊢ T2 ⁝ A.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© →
+ â\88\80A. â\9d¨G1,L1â\9d© â\8a¢ T1 â\81\9d A â\86\92 â\9d¨G2,L2â\9d© ⊢ T2 ⁝ A.
#S #HS #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2
/2 width=7 by aaa_teqg_conf_reqg/ qed-.
(* Properties on supclosure *************************************************)
-lemma aaa_fqu_conf: â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82 â\9dªG2,L2,T2â\9d« →
- â\88\80A1. â\9dªG1,L1â\9d« â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â\9dªG2,L2â\9d« ⊢ T2 ⁝ A2.
+lemma aaa_fqu_conf: â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82 â\9d¨G2,L2,T2â\9d© →
+ â\88\80A1. â\9d¨G1,L1â\9d© â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â\9d¨G2,L2â\9d© ⊢ T2 ⁝ A2.
#G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ #I #G #L #T #A #H elim (aaa_inv_zero … H) -H
#J #K #V #H #HA destruct /2 width=2 by ex_intro/
]
qed-.
-lemma aaa_fquq_conf: â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82⸮ â\9dªG2,L2,T2â\9d« →
- â\88\80A1. â\9dªG1,L1â\9d« â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â\9dªG2,L2â\9d« ⊢ T2 ⁝ A2.
+lemma aaa_fquq_conf: â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82⸮ â\9d¨G2,L2,T2â\9d© →
+ â\88\80A1. â\9d¨G1,L1â\9d© â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â\9d¨G2,L2â\9d© ⊢ T2 ⁝ A2.
#G1 #G2 #L1 #L2 #T1 #T2 #H elim H -H /2 width=6 by aaa_fqu_conf/
* #H1 #H2 #H3 destruct /2 width=2 by ex_intro/
qed-.
-lemma aaa_fqup_conf: â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82+ â\9dªG2,L2,T2â\9d« →
- â\88\80A1. â\9dªG1,L1â\9d« â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â\9dªG2,L2â\9d« ⊢ T2 ⁝ A2.
+lemma aaa_fqup_conf: â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82+ â\9d¨G2,L2,T2â\9d© →
+ â\88\80A1. â\9d¨G1,L1â\9d© â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â\9d¨G2,L2â\9d© ⊢ T2 ⁝ A2.
#G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
[2: #G #G2 #L #L2 #T #T2 #_ #H2 #IH1 #A #HA elim (IH1 … HA) -IH1 -A ]
/2 width=6 by aaa_fqu_conf/
qed-.
-lemma aaa_fqus_conf: â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82* â\9dªG2,L2,T2â\9d« →
- â\88\80A1. â\9dªG1,L1â\9d« â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â\9dªG2,L2â\9d« ⊢ T2 ⁝ A2.
+lemma aaa_fqus_conf: â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â¬\82* â\9d¨G2,L2,T2â\9d© →
+ â\88\80A1. â\9d¨G1,L1â\9d© â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â\9d¨G2,L2â\9d© ⊢ T2 ⁝ A2.
#G1 #G2 #L1 #L2 #T1 #T2 #H elim(fqus_inv_fqup … H) -H /2 width=6 by aaa_fqup_conf/
* #H1 #H2 #H3 destruct /2 width=2 by ex_intro/
qed-.
lemma aaa_teqg_conf_reqg (S) (G):
reflexive … S →
- â\88\80L1,T1,A. â\9dªG,L1â\9d« ⊢ T1 ⁝ A → ∀T2. T1 ≛[S] T2 →
- â\88\80L2. L1 â\89\9b[S,T1] L2 â\86\92 â\9dªG,L2â\9d« ⊢ T2 ⁝ A.
+ â\88\80L1,T1,A. â\9d¨G,L1â\9d© ⊢ T1 ⁝ A → ∀T2. T1 ≛[S] T2 →
+ â\88\80L2. L1 â\89\9b[S,T1] L2 â\86\92 â\9d¨G,L2â\9d© ⊢ T2 ⁝ A.
#S #G #HS #L1 #T1 #A #H elim H -G -L1 -T1 -A
[ #G #L1 #s1 #X #H1 elim (teqg_inv_sort1 … H1) -H1 //
| #I #G #L1 #V1 #B #_ #IH #X #H1 >(teqg_inv_lref1 … H1) -H1
lemma aaa_teqg_conf (S) (G) (L) (A):
reflexive … S →
- â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T1 â\81\9d A â\86\92 â\88\80T2. T1 â\89\9b[S] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T2 ⁝ A.
+ â\88\80T1. â\9d¨G,Lâ\9d© â\8a¢ T1 â\81\9d A â\86\92 â\88\80T2. T1 â\89\9b[S] T2 â\86\92 â\9d¨G,Lâ\9d© ⊢ T2 ⁝ A.
/3 width=7 by aaa_teqg_conf_reqg, reqg_refl/ qed-.
lemma aaa_reqg_conf (S) (G) (T) (A):
reflexive … S →
- â\88\80L1. â\9dªG,L1â\9d« â\8a¢ T â\81\9d A â\86\92 â\88\80L2. L1 â\89\9b[S,T] L2 â\86\92 â\9dªG,L2â\9d« ⊢ T ⁝ A.
+ â\88\80L1. â\9d¨G,L1â\9d© â\8a¢ T â\81\9d A â\86\92 â\88\80L2. L1 â\89\9b[S,T] L2 â\86\92 â\9d¨G,L2â\9d© ⊢ T ⁝ A.
/3 width=7 by aaa_teqg_conf_reqg, teqg_refl/ qed-.
lemma feqg_intro_dx (S) (G):
reflexive … S → symmetric … S →
∀L1,L2,T2. L1 ≛[S,T2] L2 →
- â\88\80T1. T1 â\89\9b[S] T2 â\86\92 â\9dªG,L1,T1â\9d« â\89\9b[S] â\9dªG,L2,T2â\9d«.
+ â\88\80T1. T1 â\89\9b[S] T2 â\86\92 â\9d¨G,L1,T1â\9d© â\89\9b[S] â\9d¨G,L2,T2â\9d©.
/3 width=6 by feqg_intro_sn, teqg_reqg_div/ qed.
(* Basic inversion lemmas ***************************************************)
lemma feqg_inv_gen_sn (S):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« →
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© →
∧∧ G1 = G2 & L1 ≛[S,T1] L2 & T1 ≛[S] T2.
#S #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 /2 width=1 by and3_intro/
qed-.
lemma feqg_inv_gen_dx (S):
reflexive … S →
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« →
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© →
∧∧ G1 = G2 & L1 ≛[S,T2] L2 & T1 ≛[S] T2.
#S #HS #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2
/3 width=6 by teqg_reqg_conf_sn, and3_intro/
(* Basic forward lemmas *****************************************************)
lemma feqg_fwd_teqg (S):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« → T1 ≛[S] T2.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© → T1 ≛[S] T2.
#S #G1 #G2 #L1 #L2 #T1 #T2 #H
elim (feqg_inv_gen_sn … H) -H //
qed-.
lemma feqg_fwd_reqg_sn (S):
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« → L1 ≛[S,T1] L2.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© → L1 ≛[S,T1] L2.
#S #G1 #G2 #L1 #L2 #T1 #T2 #H
elim (feqg_inv_gen_sn … H) -H //
qed-.
lemma feqg_fwd_reqg_dx (S):
reflexive … S →
- â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« → L1 ≛[S,T2] L2.
+ â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© → L1 ≛[S,T2] L2.
#S #HS #G1 #G2 #L1 #L2 #T1 #T2 #H
elim (feqg_inv_gen_dx … H) -H //
qed-.
lemma feqg_dec (S):
(∀s1,s2. Decidable … (S s1 s2)) →
- â\88\80G1,G2,L1,L2,T1,T2. Decidable (â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d«).
+ â\88\80G1,G2,L1,L2,T1,T2. Decidable (â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d©).
#S #HS #G1 #G2 #L1 #L2 #T1 #T2
elim (eq_genv_dec G1 G2) #HnG destruct
[ elim (reqg_dec … HS L1 L2 T1) #HnL
theorem feqg_canc_sn (S):
reflexive … S → symmetric … S → Transitive … S →
- â\88\80G,G1,L,L1,T,T1. â\9dªG,L,Tâ\9d« â\89\9b[S] â\9dªG1,L1,T1â\9d« →
- â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d«.
+ â\88\80G,G1,L,L1,T,T1. â\9d¨G,L,Tâ\9d© â\89\9b[S] â\9d¨G1,L1,T1â\9d© →
+ â\88\80G2,L2,T2. â\9d¨G,L,Tâ\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d©.
/3 width=5 by feqg_trans, feqg_sym/ qed-.
theorem feqg_canc_dx (S):
reflexive … S → symmetric … S → Transitive … S →
- â\88\80G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG,L,Tâ\9d« →
- â\88\80G2,L2,T2. â\9dªG2,L2,T2â\9d« â\89\9b[S] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G,L1,L,T1,T. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G,L,Tâ\9d© →
+ â\88\80G2,L2,T2. â\9d¨G2,L2,T2â\9d© â\89\9b[S] â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d©.
/3 width=5 by feqg_trans, feqg_sym/ qed-.
lemma feqg_reqg_trans (S) (G2) (L) (T2):
reflexive … S → symmetric … S → Transitive … S →
- â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L,T2â\9d« →
- â\88\80L2. L â\89\9b[S,T2] L2 â\86\92 â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,L1,T1. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L,T2â\9d© →
+ â\88\80L2. L â\89\9b[S,T2] L2 â\86\92 â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d©.
#S #G2 #L #T2 #H1S #H2S #H3S #G1 #L1 #T1 #H1 #L2 #HL2
/4 width=5 by feqg_trans, feqg_intro_sn, teqg_refl/
qed-.
(* Basic_2A1: uses: feqg_tneqg_repl_dx *)
lemma feqg_tneqg_trans (S) (G1) (G2) (L1) (L2) (T):
reflexive … S → symmetric … S → Transitive … S →
- â\88\80T1. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,Tâ\9d« →
+ â\88\80T1. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,Tâ\9d© →
∀T2. (T ≛[S] T2 → ⊥) → (T1 ≛[S] T2 → ⊥).
#S #G1 #G2 #L1 #L2 #T #H1S #H2S #H3S #T1 #H1 #T2 #HnT2 #HT12
elim (feqg_inv_gen_sn … H1) -H1 #_ #_ #HnT1 -G1 -G2 -L1 -L2
(* Properties with structural successor for closures ************************)
lemma fqu_fneqg (S) (b) (G1) (G2) (L1) (L2) (T1) (T2):
- â\9dªG1,L1,T1â\9d« â¬\82[b] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« → ⊥.
+ â\9d¨G1,L1,T1â\9d© â¬\82[b] â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© → ⊥.
#S #b #G1 #G2 #L1 #L2 #T1 #T2 #H elim H -G1 -G2 -L1 -L2 -T1 -T2
[ /3 width=8 by feqg_fwd_length, nsucc_inv_refl/
| /3 width=9 by teqg_inv_pair_xy_x, feqg_fwd_teqg/
lemma teqg_feqg (S):
reflexive … S →
∀T1,T2. T1 ≛[S] T2 →
- â\88\80G,L. â\9dªG,L,T1â\9d« â\89\9b[S] â\9dªG,L,T2â\9d«.
+ â\88\80G,L. â\9d¨G,L,T1â\9d© â\89\9b[S] â\9d¨G,L,T2â\9d©.
/3 width=1 by feqg_intro_sn, reqg_refl/ qed.
(* Advanced properties ******************************************************)
lemma feqg_fquq_trans (S) (b):
reflexive … S → symmetric … S → Transitive … S →
- â\88\80G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG,L,Tâ\9d« →
- â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« â¬\82⸮[b] â\9dªG2,L2,T2â\9d« →
- â\88\83â\88\83G,L0,T0. â\9dªG1,L1,T1â\9d« â¬\82⸮[b] â\9dªG,L0,T0â\9d« & â\9dªG,L0,T0â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G,L1,L,T1,T. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G,L,Tâ\9d© →
+ â\88\80G2,L2,T2. â\9d¨G,L,Tâ\9d© â¬\82⸮[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\83â\88\83G,L0,T0. â\9d¨G1,L1,T1â\9d© â¬\82⸮[b] â\9d¨G,L0,T0â\9d© & â\9d¨G,L0,T0â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d©.
#S #b #H1S #H2S #H3S #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H2
elim(feqg_inv_gen_dx … H1) -H1 // #HG #HL1 #HT1 destruct
elim (reqg_fquq_trans … H2 … HL1) -L // #L #T0 #H2 #HT02 #HL2
lemma feqg_fqus_trans (S) (b):
reflexive … S → symmetric … S → Transitive … S →
- â\88\80G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG,L,Tâ\9d« →
- â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
- â\88\83â\88\83G,L0,T0. â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG,L0,T0â\9d« & â\9dªG,L0,T0â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d«.
+ â\88\80G1,G,L1,L,T1,T. â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G,L,Tâ\9d© →
+ â\88\80G2,L2,T2. â\9d¨G,L,Tâ\9d© â¬\82*[b] â\9d¨G2,L2,T2â\9d© →
+ â\88\83â\88\83G,L0,T0. â\9d¨G1,L1,T1â\9d© â¬\82*[b] â\9d¨G,L0,T0â\9d© & â\9d¨G,L0,T0â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d©.
#S #b #H1S #H2S #H3S #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H2
elim(feqg_inv_gen_dx … H1) -H1 // #HG #HL1 #HT1 destruct
elim (reqg_fqus_trans … H2 … HL1) -L // #L #T0 #H2 #HT02 #HL2
(* Forward lemmas with length for local environments ************************)
lemma feqg_fwd_length (S) (G1) (G2) (L1) (L2) (T1) (T2):
- â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« → |L1| = |L2|.
+ â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© → |L1| = |L2|.
/3 width=6 by feqg_fwd_reqg_sn, reqg_fwd_length/ qed-.
(* Basic_properties *********************************************************)
lemma feqg_feqx (S) (G1) (G2) (L1) (L2) (T1) (T2):
- â\9dªG1,L1,T1â\9d« â\89\9b[S] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89\85 â\9dªG2,L2,T2â\9d«.
+ â\9d¨G1,L1,T1â\9d© â\89\9b[S] â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89\85 â\9d¨G2,L2,T2â\9d©.
#S #G1 #G2 #L1 #L2 #T1 #T2 #H
elim (feqg_inv_gen_sn … H) -H
/3 width=2 by feqg_intro_sn, reqg_reqx, teqg_teqx/
(* Advanced properties ******************************************************)
lemma feqx_dec (G1) (G2) (L1) (L2) (T1) (T2):
- Decidable (â\9dªG1,L1,T1â\9d« â\89\85 â\9dªG2,L2,T2â\9d«).
+ Decidable (â\9d¨G1,L1,T1â\9d© â\89\85 â\9d¨G2,L2,T2â\9d©).
/3 width=1 by feqg_dec, sfull_dec/ qed-.
(*
lemma feqx_sym: tri_symmetric … feqx.
/4 width=5 by feqx_intro_sn, reqx_trans, teqx_reqx_div, teqx_trans/
qed-.
-theorem feqx_canc_sn: â\88\80G,G1,L,L1,T,T1. â\9dªG,L,Tâ\9d« â\89\9b â\9dªG1,L1,T1â\9d«→
- â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« â\89\9b â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d«.
+theorem feqx_canc_sn: â\88\80G,G1,L,L1,T,T1. â\9d¨G,L,Tâ\9d© â\89\9b â\9d¨G1,L1,T1â\9d©→
+ â\88\80G2,L2,T2. â\9d¨G,L,Tâ\9d© â\89\9b â\9d¨G2,L2,T2â\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89\9b â\9d¨G2,L2,T2â\9d©.
/3 width=5 by feqx_trans, feqx_sym/ qed-.
-theorem feqx_canc_dx: â\88\80G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG,L,Tâ\9d« →
- â\88\80G2,L2,T2. â\9dªG2,L2,T2â\9d« â\89\9b â\9dªG,L,Tâ\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d«.
+theorem feqx_canc_dx: â\88\80G1,G,L1,L,T1,T. â\9d¨G1,L1,T1â\9d© â\89\9b â\9d¨G,L,Tâ\9d© →
+ â\88\80G2,L2,T2. â\9d¨G2,L2,T2â\9d© â\89\9b â\9d¨G,L,Tâ\9d© â\86\92 â\9d¨G1,L1,T1â\9d© â\89\9b â\9d¨G2,L2,T2â\9d©.
/3 width=5 by feqx_trans, feqx_sym/ qed-.
(* Main inversion lemmas with degree-based equivalence on terms *************)
-theorem feqx_tneqx_repl_dx: â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d« →
- â\88\80U1,U2. â\9dªG1,L1,U1â\9d« â\89\9b â\9dªG2,L2,U2â\9d« →
+theorem feqx_tneqx_repl_dx: â\88\80G1,G2,L1,L2,T1,T2. â\9d¨G1,L1,T1â\9d© â\89\9b â\9d¨G2,L2,T2â\9d© →
+ â\88\80U1,U2. â\9d¨G1,L1,U1â\9d© â\89\9b â\9d¨G2,L2,U2â\9d© →
(T2 ≛ U2 → ⊥) → (T1 ≛ U1 → ⊥).
#G1 #G2 #L1 #L2 #T1 #T2 #HT #U1 #U2 #HU #HnTU2 #HTU1
elim (feqx_inv_gen_sn … HT) -HT #_ #_ #HT
(* CONTEXT-SENSITIVE FREE VARIABLES *****************************************)
inductive frees: relation3 lenv term pr_map ≝
-| frees_sort: â\88\80f,L,s. ð\9d\90\88â\9dªfâ\9d« → frees L (⋆s) f
-| frees_atom: â\88\80f,i. ð\9d\90\88â\9dªfâ\9d« → frees (⋆) (#i) (⫯*[i]↑f)
+| frees_sort: â\88\80f,L,s. ð\9d\90\88â\9d¨fâ\9d© → frees L (⋆s) f
+| frees_atom: â\88\80f,i. ð\9d\90\88â\9d¨fâ\9d© → frees (⋆) (#i) (⫯*[i]↑f)
| frees_pair: ∀f,I,L,V. frees L V f →
frees (L.ⓑ[I]V) (#0) (↑f)
-| frees_unit: â\88\80f,I,L. ð\9d\90\88â\9dªfâ\9d« → frees (L.ⓤ[I]) (#0) (↑f)
+| frees_unit: â\88\80f,I,L. ð\9d\90\88â\9d¨fâ\9d© → frees (L.ⓤ[I]) (#0) (↑f)
| frees_lref: ∀f,I,L,i. frees L (#i) f →
frees (L.ⓘ[I]) (#↑i) (⫯f)
-| frees_gref: â\88\80f,L,l. ð\9d\90\88â\9dªfâ\9d« → frees L (§l) f
+| frees_gref: â\88\80f,L,l. ð\9d\90\88â\9d¨fâ\9d© → frees L (§l) f
| frees_bind: ∀f1,f2,f,p,I,L,V,T. frees L V f1 → frees (L.ⓑ[I]V) T f2 →
f1 ⋓ ⫰f2 ≘ f → frees L (ⓑ[p,I]V.T) f
| frees_flat: ∀f1,f2,f,I,L,V,T. frees L V f1 → frees L T f2 →
(* Basic inversion lemmas ***************************************************)
-fact frees_inv_sort_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9dªXâ\9d« â\89\98 f â\86\92 â\88\80x. X = â\8b\86x â\86\92 ð\9d\90\88â\9dªfâ\9d«.
+fact frees_inv_sort_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9d¨Xâ\9d© â\89\98 f â\86\92 â\88\80x. X = â\8b\86x â\86\92 ð\9d\90\88â\9d¨fâ\9d©.
#L #X #f #H elim H -f -L -X //
[ #f #i #_ #x #H destruct
| #f #_ #L #V #_ #_ #x #H destruct
]
qed-.
-lemma frees_inv_sort: â\88\80f,L,s. L â\8a¢ ð\9d\90\85+â\9dªâ\8b\86sâ\9d« â\89\98 f â\86\92 ð\9d\90\88â\9dªfâ\9d«.
+lemma frees_inv_sort: â\88\80f,L,s. L â\8a¢ ð\9d\90\85+â\9d¨â\8b\86sâ\9d© â\89\98 f â\86\92 ð\9d\90\88â\9d¨fâ\9d©.
/2 width=5 by frees_inv_sort_aux/ qed-.
fact frees_inv_atom_aux:
- â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9dªXâ\9d« ≘ f → ∀i. L = ⋆ → X = #i →
- â\88\83â\88\83g. ð\9d\90\88â\9dªgâ\9d« & f = ⫯*[i]↑g.
+ â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9d¨Xâ\9d© ≘ f → ∀i. L = ⋆ → X = #i →
+ â\88\83â\88\83g. ð\9d\90\88â\9d¨gâ\9d© & f = ⫯*[i]↑g.
#f #L #X #H elim H -f -L -X
[ #f #L #s #_ #j #_ #H destruct
| #f #i #Hf #j #_ #H destruct /2 width=3 by ex2_intro/
]
qed-.
-lemma frees_inv_atom: â\88\80f,i. â\8b\86 â\8a¢ ð\9d\90\85+â\9dª#iâ\9d« â\89\98 f â\86\92 â\88\83â\88\83g. ð\9d\90\88â\9dªgâ\9d« & f = ⫯*[i]↑g.
+lemma frees_inv_atom: â\88\80f,i. â\8b\86 â\8a¢ ð\9d\90\85+â\9d¨#iâ\9d© â\89\98 f â\86\92 â\88\83â\88\83g. ð\9d\90\88â\9d¨gâ\9d© & f = ⫯*[i]↑g.
/2 width=5 by frees_inv_atom_aux/ qed-.
fact frees_inv_pair_aux:
- â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9dªXâ\9d« ≘ f → ∀I,K,V. L = K.ⓑ[I]V → X = #0 →
- â\88\83â\88\83g. K â\8a¢ ð\9d\90\85+â\9dªVâ\9d« ≘ g & f = ↑g.
+ â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9d¨Xâ\9d© ≘ f → ∀I,K,V. L = K.ⓑ[I]V → X = #0 →
+ â\88\83â\88\83g. K â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© ≘ g & f = ↑g.
#f #L #X * -f -L -X
[ #f #L #s #_ #Z #Y #X #_ #H destruct
| #f #i #_ #Z #Y #X #H destruct
]
qed-.
-lemma frees_inv_pair: â\88\80f,I,K,V. K.â\93\91[I]V â\8a¢ ð\9d\90\85+â\9dª#0â\9d« â\89\98 f â\86\92 â\88\83â\88\83g. K â\8a¢ ð\9d\90\85+â\9dªVâ\9d« ≘ g & f = ↑g.
+lemma frees_inv_pair: â\88\80f,I,K,V. K.â\93\91[I]V â\8a¢ ð\9d\90\85+â\9d¨#0â\9d© â\89\98 f â\86\92 â\88\83â\88\83g. K â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© ≘ g & f = ↑g.
/2 width=6 by frees_inv_pair_aux/ qed-.
fact frees_inv_unit_aux:
- â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9dªXâ\9d« ≘ f → ∀I,K. L = K.ⓤ[I] → X = #0 →
- â\88\83â\88\83g. ð\9d\90\88â\9dªgâ\9d« & f = ↑g.
+ â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9d¨Xâ\9d© ≘ f → ∀I,K. L = K.ⓤ[I] → X = #0 →
+ â\88\83â\88\83g. ð\9d\90\88â\9d¨gâ\9d© & f = ↑g.
#f #L #X * -f -L -X
[ #f #L #s #_ #Z #Y #_ #H destruct
| #f #i #_ #Z #Y #H destruct
]
qed-.
-lemma frees_inv_unit: â\88\80f,I,K. K.â\93¤[I] â\8a¢ ð\9d\90\85+â\9dª#0â\9d« â\89\98 f â\86\92 â\88\83â\88\83g. ð\9d\90\88â\9dªgâ\9d« & f = ↑g.
+lemma frees_inv_unit: â\88\80f,I,K. K.â\93¤[I] â\8a¢ ð\9d\90\85+â\9d¨#0â\9d© â\89\98 f â\86\92 â\88\83â\88\83g. ð\9d\90\88â\9d¨gâ\9d© & f = ↑g.
/2 width=7 by frees_inv_unit_aux/ qed-.
fact frees_inv_lref_aux:
- â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9dªXâ\9d« ≘ f → ∀I,K,j. L = K.ⓘ[I] → X = #(↑j) →
- â\88\83â\88\83g. K â\8a¢ ð\9d\90\85+â\9dª#jâ\9d« ≘ g & f = ⫯g.
+ â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9d¨Xâ\9d© ≘ f → ∀I,K,j. L = K.ⓘ[I] → X = #(↑j) →
+ â\88\83â\88\83g. K â\8a¢ ð\9d\90\85+â\9d¨#jâ\9d© ≘ g & f = ⫯g.
#f #L #X * -f -L -X
[ #f #L #s #_ #Z #Y #j #_ #H destruct
| #f #i #_ #Z #Y #j #H destruct
qed-.
lemma frees_inv_lref:
- â\88\80f,I,K,i. K.â\93\98[I] â\8a¢ ð\9d\90\85+â\9dª#(â\86\91i)â\9d« ≘ f →
- â\88\83â\88\83g. K â\8a¢ ð\9d\90\85+â\9dª#iâ\9d« ≘ g & f = ⫯g.
+ â\88\80f,I,K,i. K.â\93\98[I] â\8a¢ ð\9d\90\85+â\9d¨#(â\86\91i)â\9d© ≘ f →
+ â\88\83â\88\83g. K â\8a¢ ð\9d\90\85+â\9d¨#iâ\9d© ≘ g & f = ⫯g.
/2 width=6 by frees_inv_lref_aux/ qed-.
-fact frees_inv_gref_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9dªXâ\9d« â\89\98 f â\86\92 â\88\80x. X = §x â\86\92 ð\9d\90\88â\9dªfâ\9d«.
+fact frees_inv_gref_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9d¨Xâ\9d© â\89\98 f â\86\92 â\88\80x. X = §x â\86\92 ð\9d\90\88â\9d¨fâ\9d©.
#f #L #X #H elim H -f -L -X //
[ #f #i #_ #x #H destruct
| #f #_ #L #V #_ #_ #x #H destruct
]
qed-.
-lemma frees_inv_gref: â\88\80f,L,l. L â\8a¢ ð\9d\90\85+â\9dªÂ§lâ\9d« â\89\98 f â\86\92 ð\9d\90\88â\9dªfâ\9d«.
+lemma frees_inv_gref: â\88\80f,L,l. L â\8a¢ ð\9d\90\85+â\9d¨Â§lâ\9d© â\89\98 f â\86\92 ð\9d\90\88â\9d¨fâ\9d©.
/2 width=5 by frees_inv_gref_aux/ qed-.
fact frees_inv_bind_aux:
- â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9dªXâ\9d« ≘ f → ∀p,I,V,T. X = ⓑ[p,I]V.T →
- â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85+â\9dªVâ\9d« â\89\98 f1 & L.â\93\91[I]V â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f2 & f1 ⋓ ⫰f2 ≘ f.
+ â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9d¨Xâ\9d© ≘ f → ∀p,I,V,T. X = ⓑ[p,I]V.T →
+ â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© â\89\98 f1 & L.â\93\91[I]V â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f2 & f1 ⋓ ⫰f2 ≘ f.
#f #L #X * -f -L -X
[ #f #L #s #_ #q #J #W #U #H destruct
| #f #i #_ #q #J #W #U #H destruct
qed-.
lemma frees_inv_bind:
- â\88\80f,p,I,L,V,T. L â\8a¢ ð\9d\90\85+â\9dªâ\93\91[p,I]V.Tâ\9d« ≘ f →
- â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85+â\9dªVâ\9d« â\89\98 f1 & L.â\93\91[I]V â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f2 & f1 ⋓ ⫰f2 ≘ f.
+ â\88\80f,p,I,L,V,T. L â\8a¢ ð\9d\90\85+â\9d¨â\93\91[p,I]V.Tâ\9d© ≘ f →
+ â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© â\89\98 f1 & L.â\93\91[I]V â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f2 & f1 ⋓ ⫰f2 ≘ f.
/2 width=4 by frees_inv_bind_aux/ qed-.
-fact frees_inv_flat_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9dªXâ\9d« ≘ f → ∀I,V,T. X = ⓕ[I]V.T →
- â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85+â\9dªVâ\9d« â\89\98 f1 & L â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f2 & f1 ⋓ f2 ≘ f.
+fact frees_inv_flat_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9d¨Xâ\9d© ≘ f → ∀I,V,T. X = ⓕ[I]V.T →
+ â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© â\89\98 f1 & L â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f2 & f1 ⋓ f2 ≘ f.
#f #L #X * -f -L -X
[ #f #L #s #_ #J #W #U #H destruct
| #f #i #_ #J #W #U #H destruct
qed-.
lemma frees_inv_flat:
- â\88\80f,I,L,V,T. L â\8a¢ ð\9d\90\85+â\9dªâ\93\95[I]V.Tâ\9d« ≘ f →
- â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85+â\9dªVâ\9d« â\89\98 f1 & L â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f2 & f1 ⋓ f2 ≘ f.
+ â\88\80f,I,L,V,T. L â\8a¢ ð\9d\90\85+â\9d¨â\93\95[I]V.Tâ\9d© ≘ f →
+ â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© â\89\98 f1 & L â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f2 & f1 ⋓ f2 ≘ f.
/2 width=4 by frees_inv_flat_aux/ qed-.
(* Basic properties ********************************************************)
-lemma frees_eq_repl_back: â\88\80L,T. pr_eq_repl_back â\80¦ (λf. L â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f).
+lemma frees_eq_repl_back: â\88\80L,T. pr_eq_repl_back â\80¦ (λf. L â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f).
#L #T #f1 #H elim H -f1 -L -T
[ /3 width=3 by frees_sort, pr_isi_eq_repl_back/
| #f1 #i #Hf1 #g2 #H
]
qed-.
-lemma frees_eq_repl_fwd: â\88\80L,T. pr_eq_repl_fwd â\80¦ (λf. L â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f).
+lemma frees_eq_repl_fwd: â\88\80L,T. pr_eq_repl_fwd â\80¦ (λf. L â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f).
#L #T @pr_eq_repl_sym /2 width=3 by frees_eq_repl_back/
qed-.
-lemma frees_lref_push: â\88\80f,i. â\8b\86 â\8a¢ ð\9d\90\85+â\9dª#iâ\9d« â\89\98 f â\86\92 â\8b\86 â\8a¢ ð\9d\90\85+â\9dª#â\86\91iâ\9d« ≘ ⫯f.
+lemma frees_lref_push: â\88\80f,i. â\8b\86 â\8a¢ ð\9d\90\85+â\9d¨#iâ\9d© â\89\98 f â\86\92 â\8b\86 â\8a¢ ð\9d\90\85+â\9d¨#â\86\91iâ\9d© ≘ ⫯f.
#f #i #H
elim (frees_inv_atom … H) -H #g #Hg #H destruct
/2 width=1 by frees_atom/
(* Forward lemmas with test for finite colength *****************************)
-lemma frees_fwd_isfin: â\88\80f,L,T. L â\8a¢ ð\9d\90\85+â\9dªTâ\9d« â\89\98 f â\86\92 ð\9d\90\85â\9dªfâ\9d«.
+lemma frees_fwd_isfin: â\88\80f,L,T. L â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© â\89\98 f â\86\92 ð\9d\90\85â\9d¨fâ\9d©.
#f #L #T #H elim H -f -L -T
/4 width=5 by pr_sor_inv_isf_bi, pr_isf_isi, pr_isf_tl, pr_isf_pushs, pr_isf_push, pr_isf_next/
qed-.
(* Properties with append for local environments ****************************)
-lemma frees_append_void: â\88\80f,K,T. K â\8a¢ ð\9d\90\85+â\9dªTâ\9d« â\89\98 f â\86\92 â\93§.K â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f.
+lemma frees_append_void: â\88\80f,K,T. K â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© â\89\98 f â\86\92 â\93§.K â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f.
#f #K #T #H elim H -f -K -T
[ /2 width=1 by frees_sort/
| #f * /3 width=1 by frees_atom, frees_unit, frees_lref/
(* Inversion lemmas with append for local environments **********************)
fact frees_inv_append_void_aux:
- â\88\80f,L,T. L â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f →
- â\88\80K. L = â\93§.K â\86\92 K â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f.
+ â\88\80f,L,T. L â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f →
+ â\88\80K. L = â\93§.K â\86\92 K â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f.
#f #L #T #H elim H -f -L -T
[ /2 width=1 by frees_sort/
| #f #i #_ #K #H
]
qed-.
-lemma frees_inv_append_void: â\88\80f,K,T. â\93§.K â\8a¢ ð\9d\90\85+â\9dªTâ\9d« â\89\98 f â\86\92 K â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f.
+lemma frees_inv_append_void: â\88\80f,K,T. â\93§.K â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© â\89\98 f â\86\92 K â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f.
/2 width=3 by frees_inv_append_void_aux/ qed-.
lemma frees_atom_drops:
∀b,L,i. ⇩*[b,𝐔❨i❩] L ≘ ⋆ →
- â\88\80f. ð\9d\90\88â\9dªfâ\9d« â\86\92 L â\8a¢ ð\9d\90\85+â\9dª#iâ\9d« ≘ ⫯*[i]↑f.
+ â\88\80f. ð\9d\90\88â\9d¨fâ\9d© â\86\92 L â\8a¢ ð\9d\90\85+â\9d¨#iâ\9d© ≘ ⫯*[i]↑f.
#b #L elim L -L /2 width=1 by frees_atom/
#L #I #IH *
[ #H lapply (drops_fwd_isid … H ?) -H // #H destruct
qed.
lemma frees_pair_drops:
- â\88\80f,K,V. K â\8a¢ ð\9d\90\85+â\9dªVâ\9d« ≘ f →
- â\88\80i,I,L. â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 L â\8a¢ ð\9d\90\85+â\9dª#iâ\9d« ≘ ⫯*[i] ↑f.
+ â\88\80f,K,V. K â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© ≘ f →
+ â\88\80i,I,L. â\87©[i] L â\89\98 K.â\93\91[I]V â\86\92 L â\8a¢ ð\9d\90\85+â\9d¨#iâ\9d© ≘ ⫯*[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â\9dªfâ\9d« → ∀I,K,i,L. ⇩[i] L ≘ K.ⓤ[I] →
- L â\8a¢ ð\9d\90\85+â\9dª#iâ\9d« ≘ ⫯*[i] ↑f.
+ â\88\80f. ð\9d\90\88â\9d¨fâ\9d© → ∀I,K,i,L. ⇩[i] L ≘ K.ⓤ[I] →
+ L â\8a¢ ð\9d\90\85+â\9d¨#iâ\9d© ≘ ⫯*[i] ↑f.
#f #Hf #I #K #i elim i -i
[ #L #H lapply (drops_fwd_isid … H ?) -H /2 width=1 by frees_unit/
| #i #IH #Y #H elim (drops_inv_succ … H) -H
qed.
lemma frees_lref_pushs:
- â\88\80f,K,j. K â\8a¢ ð\9d\90\85+â\9dª#jâ\9d« ≘ f →
- â\88\80i,L. â\87©[i] L â\89\98 K â\86\92 L â\8a¢ ð\9d\90\85+â\9dª#(i+j)â\9d« ≘ ⫯*[i] f.
+ â\88\80f,K,j. K â\8a¢ ð\9d\90\85+â\9d¨#jâ\9d© ≘ f →
+ â\88\80i,L. â\87©[i] L â\89\98 K â\86\92 L â\8a¢ ð\9d\90\85+â\9d¨#(i+j)â\9d© ≘ ⫯*[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
(* Advanced inversion lemmas ************************************************)
lemma frees_inv_lref_drops:
- â\88\80L,i,f. L â\8a¢ ð\9d\90\85+â\9dª#iâ\9d« ≘ f →
- â\88¨â\88¨ â\88\83â\88\83g. â\87©*[â\92»,ð\9d\90\94â\9d¨iâ\9d©] L â\89\98 â\8b\86 & ð\9d\90\88â\9dªgâ\9d« & f = ⫯*[i] ↑g
- | â\88\83â\88\83g,I,K,V. K â\8a¢ ð\9d\90\85+â\9dªVâ\9d« ≘ g & ⇩[i] L ≘ K.ⓑ[I]V & f = ⫯*[i] ↑g
- | â\88\83â\88\83g,I,K. â\87©[i] L â\89\98 K.â\93¤[I] & ð\9d\90\88â\9dªgâ\9d« & f = ⫯*[i] ↑g.
+ â\88\80L,i,f. L â\8a¢ ð\9d\90\85+â\9d¨#iâ\9d© ≘ f →
+ â\88¨â\88¨ â\88\83â\88\83g. â\87©*[â\92»,ð\9d\90\94â\9d¨iâ\9d©] L â\89\98 â\8b\86 & ð\9d\90\88â\9d¨gâ\9d© & f = ⫯*[i] ↑g
+ | â\88\83â\88\83g,I,K,V. K â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© ≘ g & ⇩[i] L ≘ K.ⓑ[I]V & f = ⫯*[i] ↑g
+ | â\88\83â\88\83g,I,K. â\87©[i] L â\89\98 K.â\93¤[I] & ð\9d\90\88â\9d¨gâ\9d© & f = ⫯*[i] ↑g.
#L elim L -L
[ #i #g | #L #I #IH * [ #g cases I -I [ #I | #I #V ] -IH | #i #g ] ] #H
[ elim (frees_inv_atom … H) -H #f #Hf #H destruct
(* Properties with generic slicing for local environments *******************)
lemma frees_lifts:
- â\88\80b,f1,K,T. K â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f1 →
+ â\88\80b,f1,K,T. K â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f1 →
∀f,L. ⇩*[b,f] L ≘ K → ∀U. ⇧*[f] T ≘ U →
- â\88\80f2. f ~â\8a\9a f1 â\89\98 f2 â\86\92 L â\8a¢ ð\9d\90\85+â\9dªUâ\9d« ≘ f2.
+ â\88\80f2. f ~â\8a\9a f1 â\89\98 f2 â\86\92 L â\8a¢ ð\9d\90\85+â\9d¨Uâ\9d© ≘ f2.
#b #f1 #K #T #H lapply (frees_fwd_isfin … H) elim H -f1 -K -T
[ #f1 #K #s #Hf1 #_ #f #L #HLK #U #H2 #f2 #H3
lapply (pr_coafter_isi_inv_dx … H3 … Hf1) -f1 #Hf2
lemma frees_lifts_SO:
∀b,L,K. ⇩*[b,𝐔❨1❩] L ≘ K → ∀T,U. ⇧[1] T ≘ U →
- â\88\80f. K â\8a¢ ð\9d\90\85+â\9dªTâ\9d« â\89\98 f â\86\92 L â\8a¢ ð\9d\90\85+â\9dªUâ\9d« ≘ ⫯f.
+ â\88\80f. K â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© â\89\98 f â\86\92 L â\8a¢ ð\9d\90\85+â\9d¨Uâ\9d© ≘ ⫯f.
#b #L #K #HLK #T #U #HTU #f #Hf
@(frees_lifts b … Hf … HTU) // (**) (* auto fails *)
qed.
(* Forward lemmas with generic slicing for local environments ***************)
lemma frees_fwd_coafter:
- â\88\80b,f2,L,U. L â\8a¢ ð\9d\90\85+â\9dªUâ\9d« ≘ f2 →
+ â\88\80b,f2,L,U. L â\8a¢ ð\9d\90\85+â\9d¨Uâ\9d© ≘ f2 →
∀f,K. ⇩*[b,f] L ≘ K → ∀T. ⇧*[f] T ≘ U →
- â\88\80f1. K â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f1 → f ~⊚ f1 ≘ f2.
+ â\88\80f1. K â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f1 → f ~⊚ f1 ≘ f2.
/4 width=11 by frees_lifts, frees_mono, pr_coafter_eq_repl_back/ qed-.
(* Inversion lemmas with generic slicing for local environments *************)
lemma frees_inv_lifts_ex:
- â\88\80b,f2,L,U. L â\8a¢ ð\9d\90\85+â\9dªUâ\9d« ≘ f2 →
+ â\88\80b,f2,L,U. L â\8a¢ ð\9d\90\85+â\9d¨Uâ\9d© ≘ f2 →
∀f,K. ⇩*[b,f] L ≘ K → ∀T. ⇧*[f] T ≘ U →
- â\88\83â\88\83f1. f ~â\8a\9a f1 â\89\98 f2 & K â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f1.
+ â\88\83â\88\83f1. f ~â\8a\9a f1 â\89\98 f2 & K â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f1.
#b #f2 #L #U #Hf2 #f #K #HLK #T elim (frees_total K T)
/3 width=9 by frees_fwd_coafter, ex2_intro/
qed-.
lemma frees_inv_lifts_SO:
- â\88\80b,f,L,U. L â\8a¢ ð\9d\90\85+â\9dªUâ\9d« ≘ f →
+ â\88\80b,f,L,U. L â\8a¢ ð\9d\90\85+â\9d¨Uâ\9d© ≘ f →
∀K. ⇩*[b,𝐔❨1❩] L ≘ K → ∀T. ⇧[1] T ≘ U →
- K â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ ⫰f.
+ K â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ ⫰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 (pr_coafter_inv_next_sn … Hf) -Hf
/3 width=5 by frees_eq_repl_back, pr_coafter_isi_inv_sn/
qed-.
lemma frees_inv_lifts:
- â\88\80b,f2,L,U. L â\8a¢ ð\9d\90\85+â\9dªUâ\9d« ≘ f2 →
+ â\88\80b,f2,L,U. L â\8a¢ ð\9d\90\85+â\9d¨Uâ\9d© ≘ f2 →
∀f,K. ⇩*[b,f] L ≘ K → ∀T. ⇧*[f] T ≘ U →
- â\88\80f1. f ~â\8a\9a f1 â\89\98 f2 â\86\92 K â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f1.
+ â\88\80f1. f ~â\8a\9a f1 â\89\98 f2 â\86\92 K â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ 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, pr_coafter_inj/
qed-.
(* Note: this is used by rex_conf and might be modified *)
lemma frees_inv_drops_next:
- â\88\80f1,L1,T1. L1 â\8a¢ ð\9d\90\85+â\9dªT1â\9d« ≘ f1 →
+ â\88\80f1,L1,T1. L1 â\8a¢ ð\9d\90\85+â\9d¨T1â\9d© ≘ f1 →
∀I2,L2,V2,i. ⇩[i] L1 ≘ L2.ⓑ[I2]V2 →
∀g1. ↑g1 = ⫰*[i] f1 →
- â\88\83â\88\83g2. L2 â\8a¢ ð\9d\90\85+â\9dªV2â\9d« ≘ g2 & g2 ⊆ g1.
+ â\88\83â\88\83g2. L2 â\8a¢ ð\9d\90\85+â\9d¨V2â\9d© ≘ g2 & g2 ⊆ g1.
#f1 #L1 #T1 #H elim H -f1 -L1 -T1
[ #f1 #L1 #s #Hf1 #I2 #L2 #V2 #j #_ #g1 #H1 -I2 -L1 -s
lapply (pr_isi_tls j … Hf1) -Hf1 <H1 -f1 #Hf1
(* Advanced properties ******************************************************)
(* Note: this replaces lemma 1400 concluding the "big tree" theorem *)
-lemma frees_total: â\88\80L,T. â\88\83f. L â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f.
+lemma frees_total: â\88\80L,T. â\88\83f. L â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f.
#L #T @(fqup_wf_ind_eq (Ⓣ) … (⋆) L T) -L -T
#G0 #L0 #T0 #IH #G #L * *
[ /3 width=2 by frees_sort, ex_intro/
(* Advanced main properties *************************************************)
theorem frees_bind_void:
- â\88\80f1,L,V. L â\8a¢ ð\9d\90\85+â\9dªVâ\9d« â\89\98 f1 â\86\92 â\88\80f2,T. L.â\93§ â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f2 →
- â\88\80f. f1 â\8b\93 â«°f2 â\89\98 f â\86\92 â\88\80p,I. L â\8a¢ ð\9d\90\85+â\9dªâ\93\91[p,I]V.Tâ\9d« ≘ f.
+ â\88\80f1,L,V. L â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© â\89\98 f1 â\86\92 â\88\80f2,T. L.â\93§ â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f2 →
+ â\88\80f. f1 â\8b\93 â«°f2 â\89\98 f â\86\92 â\88\80p,I. L â\8a¢ ð\9d\90\85+â\9d¨â\93\91[p,I]V.Tâ\9d© ≘ f.
#f1 #L #V #Hf1 #f2 #T #Hf2 #f #Hf #p #I
elim (frees_total (L.ⓑ[I]V) T) #f0 #Hf0
lapply (lsubr_lsubf … Hf2 … Hf0) -Hf2 /2 width=5 by lsubr_unit/ #H02
(* Advanced inversion lemmas ************************************************)
lemma frees_inv_bind_void:
- â\88\80f,p,I,L,V,T. L â\8a¢ ð\9d\90\85+â\9dªâ\93\91[p,I]V.Tâ\9d« ≘ f →
- â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85+â\9dªVâ\9d« â\89\98 f1 & L.â\93§ â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f2 & f1 ⋓ ⫰f2 ≘ f.
+ â\88\80f,p,I,L,V,T. L â\8a¢ ð\9d\90\85+â\9d¨â\93\91[p,I]V.Tâ\9d© ≘ f →
+ â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© â\89\98 f1 & L.â\93§ â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f2 & f1 ⋓ ⫰f2 ≘ f.
#f #p #I #L #V #T #H
elim (frees_inv_bind … H) -H #f1 #f2 #Hf1 #Hf2 #Hf
elim (frees_total (L.ⓧ) T) #f0 #Hf0
lemma frees_ind_void (Q:relation3 …):
(
- â\88\80f,L,s. ð\9d\90\88â\9dªfâ\9d« → Q L (⋆s) f
+ â\88\80f,L,s. ð\9d\90\88â\9d¨fâ\9d© → Q L (⋆s) f
) → (
- â\88\80f,i. ð\9d\90\88â\9dªfâ\9d« → Q (⋆) (#i) (⫯*[i]↑f)
+ â\88\80f,i. ð\9d\90\88â\9d¨fâ\9d© → Q (⋆) (#i) (⫯*[i]↑f)
) → (
∀f,I,L,V.
- L â\8a¢ ð\9d\90\85+â\9dªVâ\9d« ≘ f → Q L V f→ Q (L.ⓑ[I]V) (#O) (↑f)
+ L â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© ≘ f → Q L V f→ Q (L.ⓑ[I]V) (#O) (↑f)
) → (
- â\88\80f,I,L. ð\9d\90\88â\9dªfâ\9d« → Q (L.ⓤ[I]) (#O) (↑f)
+ â\88\80f,I,L. ð\9d\90\88â\9d¨fâ\9d© → Q (L.ⓤ[I]) (#O) (↑f)
) → (
∀f,I,L,i.
- L â\8a¢ ð\9d\90\85+â\9dª#iâ\9d« ≘ f → Q L (#i) f → Q (L.ⓘ[I]) (#(↑i)) (⫯f)
+ L â\8a¢ ð\9d\90\85+â\9d¨#iâ\9d© ≘ f → Q L (#i) f → Q (L.ⓘ[I]) (#(↑i)) (⫯f)
) → (
- â\88\80f,L,l. ð\9d\90\88â\9dªfâ\9d« → Q L (§l) f
+ â\88\80f,L,l. ð\9d\90\88â\9d¨fâ\9d© → Q L (§l) f
) → (
∀f1,f2,f,p,I,L,V,T.
- L â\8a¢ ð\9d\90\85+â\9dªVâ\9d« â\89\98 f1 â\86\92 L.â\93§ â\8a¢ð\9d\90\85+â\9dªTâ\9d«≘ f2 → f1 ⋓ ⫰f2 ≘ f →
+ L â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© â\89\98 f1 â\86\92 L.â\93§ â\8a¢ð\9d\90\85+â\9d¨Tâ\9d©≘ f2 → f1 ⋓ ⫰f2 ≘ f →
Q L V f1 → Q (L.ⓧ) T f2 → Q L (ⓑ[p,I]V.T) f
) → (
∀f1,f2,f,I,L,V,T.
- L â\8a¢ ð\9d\90\85+â\9dªVâ\9d« â\89\98 f1 â\86\92 L â\8a¢ð\9d\90\85+â\9dªTâ\9d« ≘ f2 → f1 ⋓ f2 ≘ f →
+ L â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© â\89\98 f1 â\86\92 L â\8a¢ð\9d\90\85+â\9d¨Tâ\9d© ≘ f2 → f1 ⋓ f2 ≘ f →
Q L V f1 → Q L T f2 → Q L (ⓕ[I]V.T) f
) →
- â\88\80L,T,f. L â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f → Q L T f.
+ â\88\80L,T,f. L â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f → Q L T f.
#Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #L #T
@(fqup_wf_ind_eq (Ⓕ) … (⋆) L T) -L -T #G0 #L0 #T0 #IH #G #L * *
[ #s #HG #HL #HT #f #H destruct -IH
(* Main inversion lemmas ****************************************************)
-theorem frees_mono: â\88\80f1,L,T. L â\8a¢ ð\9d\90\85+â\9dªTâ\9d« â\89\98 f1 â\86\92 â\88\80f2. L â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f2 → f1 ≡ f2.
+theorem frees_mono: â\88\80f1,L,T. L â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© â\89\98 f1 â\86\92 â\88\80f2. L â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f2 → f1 ≡ f2.
#f1 #L #T #H elim H -f1 -L -T
[ /3 width=3 by frees_inv_sort, pr_isi_inv_eq_repl/
| #f1 #i #Hf1 #g2 #H
(* FREE VARIABLES INCLUSION FOR RESTRICTED CLOSURES *************************)
definition fsle: bi_relation lenv term ≝ λL1,T1,L2,T2.
- â\88\83â\88\83n1,n2,f1,f2. L1 â\8a¢ ð\9d\90\85+â\9dªT1â\9d« â\89\98 f1 & L2 â\8a¢ ð\9d\90\85+â\9dªT2â\9d« ≘ f2 &
+ â\88\83â\88\83n1,n2,f1,f2. L1 â\8a¢ ð\9d\90\85+â\9d¨T1â\9d© â\89\98 f1 & L2 â\8a¢ ð\9d\90\85+â\9d¨T2â\9d© ≘ f2 &
L1 ≋ⓧ*[n1,n2] L2 & ⫰*[n1]f1 ⊆ ⫰*[n2]f2.
interpretation "free variables inclusion (restricted closure)"
(* Basic properties *********************************************************)
-lemma fsle_sort: â\88\80L,s1,s2. â\9dªL,â\8b\86s1â\9d« â\8a\86 â\9dªL,â\8b\86s2â\9d«.
+lemma fsle_sort: â\88\80L,s1,s2. â\9d¨L,â\8b\86s1â\9d© â\8a\86 â\9d¨L,â\8b\86s2â\9d©.
/3 width=8 by frees_sort, pr_sle_refl, ex4_4_intro/ qed.
-lemma fsle_gref: â\88\80L,l1,l2. â\9dªL,§l1â\9d« â\8a\86 â\9dªL,§l2â\9d«.
+lemma fsle_gref: â\88\80L,l1,l2. â\9d¨L,§l1â\9d© â\8a\86 â\9d¨L,§l2â\9d©.
/3 width=8 by frees_gref, pr_sle_refl, ex4_4_intro/ qed.
(* Advanced properties ******************************************************)
lemma fsle_lifts_sn: ∀T1,U1. ⇧[1] T1 ≘ U1 → ∀L1,L2. |L2| ≤ |L1| →
- â\88\80T2. â\9dªL1,T1â\9d« â\8a\86 â\9dªL2,T2â\9d« â\86\92 â\9dªL1.â\93§,U1â\9d« â\8a\86 â\9dªL2,T2â\9d«.
+ â\88\80T2. â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2,T2â\9d© â\86\92 â\9d¨L1.â\93§,U1â\9d© â\8a\86 â\9d¨L2,T2â\9d©.
#T1 #U1 #HTU1 #L1 #L2 #H1L #T2
* #n #m #f #g #Hf #Hg #H2L #Hfg
lapply (lveq_length_fwd_dx … H2L ?) // -H1L #H destruct
lemma fsle_lifts_dx (L1) (L2):
|L1| ≤ |L2| → ∀T2,U2. ⇧[1]T2 ≘ U2 →
- â\88\80T1. â\9dªL1,T1â\9d« â\8a\86 â\9dªL2,T2â\9d« â\86\92 â\9dªL1,T1â\9d« â\8a\86 â\9dªL2.â\93§,U2â\9d«.
+ â\88\80T1. â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2,T2â\9d© â\86\92 â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2.â\93§,U2â\9d©.
#L1 #L2 #HL21 #T2 #U2 #HTU2 #T1
* #n #m #f #g #Hf #Hg #H2L #Hfg
lapply (lveq_length_fwd_sn … H2L ?) // -HL21 #H destruct
@(ex4_4_intro … Hf Hg) /2 width=4 by lveq_void_dx/ (**) (* explict constructor *)
qed-.
-lemma fsle_lifts_SO_sn: â\88\80K1,K2. |K1| = |K2| â\86\92 â\88\80V1,V2. â\9dªK1,V1â\9d« â\8a\86 â\9dªK2,V2â\9d« →
- â\88\80W1. â\87§[1] V1 â\89\98 W1 â\86\92 â\88\80I1,I2. â\9dªK1.â\93\98[I1],W1â\9d« â\8a\86 â\9dªK2.â\93\91[I2]V2,#Oâ\9d«.
+lemma fsle_lifts_SO_sn: â\88\80K1,K2. |K1| = |K2| â\86\92 â\88\80V1,V2. â\9d¨K1,V1â\9d© â\8a\86 â\9d¨K2,V2â\9d© →
+ â\88\80W1. â\87§[1] V1 â\89\98 W1 â\86\92 â\88\80I1,I2. â\9d¨K1.â\93\98[I1],W1â\9d© â\8a\86 â\9d¨K2.â\93\91[I2]V2,#Oâ\9d©.
#K1 #K2 #HK #V1 #V2
* #n1 #n2 #f1 #f2 #Hf1 #Hf2 #HK12 #Hf12
#W1 #HVW1 #I1 #I2
/5 width=12 by frees_lifts_SO, frees_pair, drops_refl, drops_drop, lveq_bind, pr_sle_weak, ex4_4_intro/
qed.
-lemma fsle_lifts_SO: â\88\80K1,K2. |K1| = |K2| â\86\92 â\88\80T1,T2. â\9dªK1,T1â\9d« â\8a\86 â\9dªK2,T2â\9d« →
+lemma fsle_lifts_SO: â\88\80K1,K2. |K1| = |K2| â\86\92 â\88\80T1,T2. â\9d¨K1,T1â\9d© â\8a\86 â\9d¨K2,T2â\9d© →
∀U1,U2. ⇧[1] T1 ≘ U1 → ⇧[1] T2 ≘ U2 →
- â\88\80I1,I2. â\9dªK1.â\93\98[I1],U1â\9d« â\8a\86 â\9dªK2.â\93\98[I2],U2â\9d«.
+ â\88\80I1,I2. â\9d¨K1.â\93\98[I1],U1â\9d© â\8a\86 â\9d¨K2.â\93\98[I2],U2â\9d©.
#K1 #K2 #HK #T1 #T2
* #n1 #n2 #f1 #f2 #Hf1 #Hf2 #HK12 #Hf12
#U1 #U2 #HTU1 #HTU2 #I1 #I2
(* Advanced inversion lemmas ************************************************)
lemma fsle_inv_lifts_sn: ∀T1,U1. ⇧[1] T1 ≘ U1 →
- â\88\80I1,I2,L1,L2,V1,V2,U2. â\9dªL1.â\93\91[I1]V1,U1â\9d« â\8a\86 â\9dªL2.â\93\91[I2]V2,U2â\9d« →
- â\88\80p. â\9dªL1,T1â\9d« â\8a\86 â\9dªL2,â\93\91[p,I2]V2.U2â\9d«.
+ â\88\80I1,I2,L1,L2,V1,V2,U2. â\9d¨L1.â\93\91[I1]V1,U1â\9d© â\8a\86 â\9d¨L2.â\93\91[I2]V2,U2â\9d© →
+ â\88\80p. â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2,â\93\91[p,I2]V2.U2â\9d©.
#T1 #U1 #HTU1 #I1 #I2 #L1 #L2 #V1 #V2 #U2
* #n #m #f2 #g2 #Hf2 #Hg2 #HL #Hfg2 #p
elim (lveq_inv_pair_pair … HL) -HL #HL #H1 #H2 destruct
qed.
lemma fsle_shift: ∀L1,L2. |L1| = |L2| →
- â\88\80I,T1,T2,V. â\9dªL1.â\93§,T1â\9d« â\8a\86 â\9dªL2.â\93\91[I]V,T2â\9d« →
- â\88\80p. â\9dªL1.â\93§,T1â\9d« â\8a\86 â\9dªL2,â\93\91[p,I]V.T2â\9d«.
+ â\88\80I,T1,T2,V. â\9d¨L1.â\93§,T1â\9d© â\8a\86 â\9d¨L2.â\93\91[I]V,T2â\9d© →
+ â\88\80p. â\9d¨L1.â\93§,T1â\9d© â\8a\86 â\9d¨L2,â\93\91[p,I]V.T2â\9d©.
#L1 #L2 #H1L #I #T1 #T2 #V
* #n #m #f2 #g2 #Hf2 #Hg2 #H2L #Hfg2 #p
elim (lveq_inj_length … H2L) // -H1L #H1 #H2 destruct
/4 width=10 by frees_bind, lveq_void_sn, pr_sle_tl, pr_sle_trans, ex4_4_intro/
qed.
-lemma fsle_bind_dx_sn: â\88\80L1,L2,V1,V2. â\9dªL1,V1â\9d« â\8a\86 â\9dªL2,V2â\9d« →
- â\88\80p,I,T2. â\9dªL1,V1â\9d« â\8a\86 â\9dªL2,â\93\91[p,I]V2.T2â\9d«.
+lemma fsle_bind_dx_sn: â\88\80L1,L2,V1,V2. â\9d¨L1,V1â\9d© â\8a\86 â\9d¨L2,V2â\9d© →
+ â\88\80p,I,T2. â\9d¨L1,V1â\9d© â\8a\86 â\9d¨L2,â\93\91[p,I]V2.T2â\9d©.
#L1 #L2 #V1 #V2 * #n1 #m1 #f1 #g1 #Hf1 #Hg1 #HL12 #Hfg1 #p #I #T2
elim (frees_total (L2.ⓧ) T2) #g2 #Hg2
elim (pr_sor_isf_bi g1 (⫰g2)) /3 width=3 by frees_fwd_isfin, pr_isf_tl/ #g #Hg #_
/4 width=5 by frees_bind_void, pr_sor_inv_sle_sn, pr_sor_tls, pr_sle_trans/
qed.
-lemma fsle_bind_dx_dx: â\88\80L1,L2,T1,T2. â\9dªL1,T1â\9d« â\8a\86 â\9dªL2.â\93§,T2â\9d« → |L1| ≤ |L2| →
- â\88\80p,I,V2. â\9dªL1,T1â\9d« â\8a\86 â\9dªL2,â\93\91[p,I]V2.T2â\9d«.
+lemma fsle_bind_dx_dx: â\88\80L1,L2,T1,T2. â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2.â\93§,T2â\9d© → |L1| ≤ |L2| →
+ â\88\80p,I,V2. â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2,â\93\91[p,I]V2.T2â\9d©.
#L1 #L2 #T1 #T2 * #n1 #x1 #f2 #g2 #Hf2 #Hg2 #H #Hfg2 #HL12 #p #I #V2
elim (lveq_inv_void_dx_length … H HL12) -H -HL12 #m1 #HL12 #H1 #H2 destruct
<pr_tls_swap in Hfg2; #Hfg2
/4 width=5 by frees_bind_void, pr_sor_inv_sle_dx, pr_sor_tls, pr_sle_trans/
qed.
-lemma fsle_flat_dx_sn: â\88\80L1,L2,V1,V2. â\9dªL1,V1â\9d« â\8a\86 â\9dªL2,V2â\9d« →
- â\88\80I,T2. â\9dªL1,V1â\9d« â\8a\86 â\9dªL2,â\93\95[I]V2.T2â\9d«.
+lemma fsle_flat_dx_sn: â\88\80L1,L2,V1,V2. â\9d¨L1,V1â\9d© â\8a\86 â\9d¨L2,V2â\9d© →
+ â\88\80I,T2. â\9d¨L1,V1â\9d© â\8a\86 â\9d¨L2,â\93\95[I]V2.T2â\9d©.
#L1 #L2 #V1 #V2 * #n1 #m1 #f1 #g1 #Hf1 #Hg1 #HL12 #Hfg1 #I #T2
elim (frees_total L2 T2) #g2 #Hg2
elim (pr_sor_isf_bi g1 g2) /2 width=3 by frees_fwd_isfin/ #g #Hg #_
/4 width=5 by frees_flat, pr_sor_inv_sle_sn, pr_sor_tls, pr_sle_trans/
qed.
-lemma fsle_flat_dx_dx: â\88\80L1,L2,T1,T2. â\9dªL1,T1â\9d« â\8a\86 â\9dªL2,T2â\9d« →
- â\88\80I,V2. â\9dªL1,T1â\9d« â\8a\86 â\9dªL2,â\93\95[I]V2.T2â\9d«.
+lemma fsle_flat_dx_dx: â\88\80L1,L2,T1,T2. â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2,T2â\9d© →
+ â\88\80I,V2. â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2,â\93\95[I]V2.T2â\9d©.
#L1 #L2 #T1 #T2 * #n1 #m1 #f2 #g2 #Hf2 #Hg2 #HL12 #Hfg2 #I #V2
elim (frees_total L2 V2) #g1 #Hg1
elim (pr_sor_isf_bi g1 g2) /2 width=3 by frees_fwd_isfin/ #g #Hg #_
(* Advanced forward lemmas ***************************************************)
-lemma fsle_fwd_pair_sn: â\88\80I1,I2,L1,L2,V1,V2,T1,T2. â\9dªL1.â\93\91[I1]V1,T1â\9d« â\8a\86 â\9dªL2.â\93\91[I2]V2,T2â\9d« →
- â\9dªL1.â\93§,T1â\9d« â\8a\86 â\9dªL2.â\93\91[I2]V2,T2â\9d«.
+lemma fsle_fwd_pair_sn: â\88\80I1,I2,L1,L2,V1,V2,T1,T2. â\9d¨L1.â\93\91[I1]V1,T1â\9d© â\8a\86 â\9d¨L2.â\93\91[I2]V2,T2â\9d© →
+ â\9d¨L1.â\93§,T1â\9d© â\8a\86 â\9d¨L2.â\93\91[I2]V2,T2â\9d©.
#I1 #I2 #L1 #L2 #V1 #V2 #T1 #T2 *
#n1 #n2 #f1 #f2 #Hf1 #Hf2 #HL12 #Hf12
elim (lveq_inv_pair_pair … HL12) -HL12 #HL12 #H1 #H2 destruct
(* Advanced inversion lemmas ************************************************)
lemma fsle_frees_trans:
- â\88\80L1,L2,T1,T2. â\9dªL1,T1â\9d« â\8a\86 â\9dªL2,T2â\9d« →
- â\88\80f2. L2 â\8a¢ ð\9d\90\85+â\9dªT2â\9d« ≘ f2 →
- â\88\83â\88\83n1,n2,f1. L1 â\8a¢ ð\9d\90\85+â\9dªT1â\9d« ≘ f1 & L1 ≋ⓧ*[n1,n2] L2 & ⫰*[n1]f1 ⊆ ⫰*[n2]f2.
+ â\88\80L1,L2,T1,T2. â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2,T2â\9d© →
+ â\88\80f2. L2 â\8a¢ ð\9d\90\85+â\9d¨T2â\9d© ≘ f2 →
+ â\88\83â\88\83n1,n2,f1. L1 â\8a¢ ð\9d\90\85+â\9d¨T1â\9d© ≘ f1 & L1 ≋ⓧ*[n1,n2] L2 & ⫰*[n1]f1 ⊆ ⫰*[n2]f2.
#L1 #L2 #T1 #T2 * #n1 #n2 #f1 #g2 #Hf1 #Hg2 #HL #Hn #f2 #Hf2
lapply (frees_mono … Hg2 … Hf2) -Hg2 -Hf2 #Hgf2
lapply (pr_tls_eq_repl n2 … Hgf2) -Hgf2 #Hgf2
lemma fsle_frees_trans_eq:
∀L1,L2. |L1| = |L2| →
- â\88\80T1,T2. â\9dªL1,T1â\9d« â\8a\86 â\9dªL2,T2â\9d« â\86\92 â\88\80f2. L2 â\8a¢ ð\9d\90\85+â\9dªT2â\9d« ≘ f2 →
- â\88\83â\88\83f1. L1 â\8a¢ ð\9d\90\85+â\9dªT1â\9d« ≘ f1 & f1 ⊆ f2.
+ â\88\80T1,T2. â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2,T2â\9d© â\86\92 â\88\80f2. L2 â\8a¢ ð\9d\90\85+â\9d¨T2â\9d© ≘ f2 →
+ â\88\83â\88\83f1. L1 â\8a¢ ð\9d\90\85+â\9d¨T1â\9d© ≘ f1 & f1 ⊆ f2.
#L1 #L2 #H1L #T1 #T2 #H2L #f2 #Hf2
elim (fsle_frees_trans … H2L … Hf2) -T2 #n1 #n2 #f1 #Hf1 #H2L #Hf12
elim (lveq_inj_length … H2L) // -L2 #H1 #H2 destruct
lemma fsle_inv_frees_eq:
∀L1,L2. |L1| = |L2| →
- â\88\80T1,T2. â\9dªL1,T1â\9d« â\8a\86 â\9dªL2,T2â\9d« →
- â\88\80f1. L1 â\8a¢ ð\9d\90\85+â\9dªT1â\9d« â\89\98 f1 â\86\92 â\88\80f2. L2 â\8a¢ ð\9d\90\85+â\9dªT2â\9d« ≘ f2 →
+ â\88\80T1,T2. â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2,T2â\9d© →
+ â\88\80f1. L1 â\8a¢ ð\9d\90\85+â\9d¨T1â\9d© â\89\98 f1 â\86\92 â\88\80f2. L2 â\8a¢ ð\9d\90\85+â\9d¨T2â\9d© ≘ f2 →
f1 ⊆ f2.
#L1 #L2 #H1L #T1 #T2 #H2L #f1 #Hf1 #f2 #Hf2
elim (fsle_frees_trans_eq … H2L … Hf2) // -L2 -T2
qed-.
lemma fsle_frees_conf:
- â\88\80L1,L2,T1,T2. â\9dªL1,T1â\9d« â\8a\86 â\9dªL2,T2â\9d« →
- â\88\80f1. L1 â\8a¢ ð\9d\90\85+â\9dªT1â\9d« ≘ f1 →
- â\88\83â\88\83n1,n2,f2. L2 â\8a¢ ð\9d\90\85+â\9dªT2â\9d« ≘ f2 & L1 ≋ⓧ*[n1,n2] L2 & ⫰*[n1]f1 ⊆ ⫰*[n2]f2.
+ â\88\80L1,L2,T1,T2. â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2,T2â\9d© →
+ â\88\80f1. L1 â\8a¢ ð\9d\90\85+â\9d¨T1â\9d© ≘ f1 →
+ â\88\83â\88\83n1,n2,f2. L2 â\8a¢ ð\9d\90\85+â\9d¨T2â\9d© ≘ f2 & L1 ≋ⓧ*[n1,n2] L2 & ⫰*[n1]f1 ⊆ ⫰*[n2]f2.
#L1 #L2 #T1 #T2 * #n1 #n2 #g1 #g2 #Hg1 #Hg2 #HL #Hn #f1 #Hf1
lapply (frees_mono … Hg1 … Hf1) -Hg1 -Hf1 #Hgf1
lapply (pr_tls_eq_repl n1 … Hgf1) -Hgf1 #Hgf1
lemma fsle_frees_conf_eq:
∀L1,L2. |L1| = |L2| →
- â\88\80T1,T2. â\9dªL1,T1â\9d« â\8a\86 â\9dªL2,T2â\9d« â\86\92 â\88\80f1. L1 â\8a¢ ð\9d\90\85+â\9dªT1â\9d« ≘ f1 →
- â\88\83â\88\83f2. L2 â\8a¢ ð\9d\90\85+â\9dªT2â\9d« ≘ f2 & f1 ⊆ f2.
+ â\88\80T1,T2. â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2,T2â\9d© â\86\92 â\88\80f1. L1 â\8a¢ ð\9d\90\85+â\9d¨T1â\9d© ≘ f1 →
+ â\88\83â\88\83f2. L2 â\8a¢ ð\9d\90\85+â\9d¨T2â\9d© ≘ f2 & f1 ⊆ f2.
#L1 #L2 #H1L #T1 #T2 #H2L #f1 #Hf1
elim (fsle_frees_conf … H2L … Hf1) -T1 #n1 #n2 #f2 #Hf2 #H2L #Hf12
elim (lveq_inj_length … H2L) // -L1 #H1 #H2 destruct
(* Main properties **********************************************************)
theorem fsle_trans_sn:
- â\88\80L1,L2,T1,T. â\9dªL1,T1â\9d« â\8a\86 â\9dªL2,Tâ\9d« →
- â\88\80T2. â\9dªL2,Tâ\9d« â\8a\86 â\9dªL2,T2â\9d« â\86\92 â\9dªL1,T1â\9d« â\8a\86 â\9dªL2,T2â\9d«.
+ â\88\80L1,L2,T1,T. â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2,Tâ\9d© →
+ â\88\80T2. â\9d¨L2,Tâ\9d© â\8a\86 â\9d¨L2,T2â\9d© â\86\92 â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2,T2â\9d©.
#L1 #L2 #T1 #T
* #m1 #m0 #g1 #g0 #Hg1 #Hg0 #Hm #Hg
#T2
qed-.
theorem fsle_trans_dx:
- â\88\80L1,T1,T. â\9dªL1,T1â\9d« â\8a\86 â\9dªL1,Tâ\9d« →
- â\88\80L2,T2. â\9dªL1,Tâ\9d« â\8a\86 â\9dªL2,T2â\9d« â\86\92 â\9dªL1,T1â\9d« â\8a\86 â\9dªL2,T2â\9d«.
+ â\88\80L1,T1,T. â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L1,Tâ\9d© →
+ â\88\80L2,T2. â\9d¨L1,Tâ\9d© â\8a\86 â\9d¨L2,T2â\9d© â\86\92 â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2,T2â\9d©.
#L1 #T1 #T
* #m1 #m0 #g1 #g0 #Hg1 #Hg0 #Hm #Hg
#L2 #T2
qed-.
theorem fsle_trans_rc:
- â\88\80L1,L,T1,T. |L1| = |L| â\86\92 â\9dªL1,T1â\9d« â\8a\86 â\9dªL,Tâ\9d« →
- â\88\80L2,T2. |L| = |L2| â\86\92 â\9dªL,Tâ\9d« â\8a\86 â\9dªL2,T2â\9d« â\86\92 â\9dªL1,T1â\9d« â\8a\86 â\9dªL2,T2â\9d«.
+ â\88\80L1,L,T1,T. |L1| = |L| â\86\92 â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L,Tâ\9d© →
+ â\88\80L2,T2. |L| = |L2| â\86\92 â\9d¨L,Tâ\9d© â\8a\86 â\9d¨L2,T2â\9d© â\86\92 â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2,T2â\9d©.
#L1 #L #T1 #T #HL1
* #m1 #m0 #g1 #g0 #Hg1 #Hg0 #Hm #Hg
#L2 #T2 #HL2
theorem fsle_bind_sn_ge:
∀L1,L2. |L2| ≤ |L1| →
- â\88\80V1,T1,T. â\9dªL1,V1â\9d« â\8a\86 â\9dªL2,Tâ\9d« â\86\92 â\9dªL1.â\93§,T1â\9d« â\8a\86 â\9dªL2,Tâ\9d« →
- â\88\80p,I. â\9dªL1,â\93\91[p,I]V1.T1â\9d« â\8a\86 â\9dªL2,Tâ\9d«.
+ â\88\80V1,T1,T. â\9d¨L1,V1â\9d© â\8a\86 â\9d¨L2,Tâ\9d© â\86\92 â\9d¨L1.â\93§,T1â\9d© â\8a\86 â\9d¨L2,Tâ\9d© →
+ â\88\80p,I. â\9d¨L1,â\93\91[p,I]V1.T1â\9d© â\8a\86 â\9d¨L2,Tâ\9d©.
#L1 #L2 #HL #V1 #T1 #T * #n1 #x #f1 #g #Hf1 #Hg #H1n1 #H2n1 #H #p #I
elim (fsle_frees_trans … H … Hg) -H #n2 #n #f2 #Hf2 #H1n2 #H2n2
elim (lveq_inj_void_sn_ge … H1n1 … H1n2) -H1n2 // #H1 #H2 #H3 destruct
qed.
theorem fsle_flat_sn:
- â\88\80L1,L2,V1,T1,T. â\9dªL1,V1â\9d« â\8a\86 â\9dªL2,Tâ\9d« â\86\92 â\9dªL1,T1â\9d« â\8a\86 â\9dªL2,Tâ\9d« →
- â\88\80I. â\9dªL1,â\93\95[I]V1.T1â\9d« â\8a\86 â\9dªL2,Tâ\9d«.
+ â\88\80L1,L2,V1,T1,T. â\9d¨L1,V1â\9d© â\8a\86 â\9d¨L2,Tâ\9d© â\86\92 â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2,Tâ\9d© →
+ â\88\80I. â\9d¨L1,â\93\95[I]V1.T1â\9d© â\8a\86 â\9d¨L2,Tâ\9d©.
#L1 #L2 #V1 #T1 #T * #n1 #x #f1 #g #Hf1 #Hg #H1n1 #H2n1 #H #I
elim (fsle_frees_trans … H … Hg) -H #n2 #n #f2 #Hf2 #H1n2 #H2n2
elim (lveq_inj … H1n1 … H1n2) -H1n2 #H1 #H2 destruct
qed.
theorem fsle_bind_eq:
- â\88\80L1,L2. |L1| = |L2| â\86\92 â\88\80V1,V2. â\9dªL1,V1â\9d« â\8a\86 â\9dªL2,V2â\9d« →
- â\88\80I2,T1,T2. â\9dªL1.â\93§,T1â\9d« â\8a\86 â\9dªL2.â\93\91[I2]V2,T2â\9d« →
- â\88\80p,I1. â\9dªL1,â\93\91[p,I1]V1.T1â\9d« â\8a\86 â\9dªL2,â\93\91[p,I2]V2.T2â\9d«.
+ â\88\80L1,L2. |L1| = |L2| â\86\92 â\88\80V1,V2. â\9d¨L1,V1â\9d© â\8a\86 â\9d¨L2,V2â\9d© →
+ â\88\80I2,T1,T2. â\9d¨L1.â\93§,T1â\9d© â\8a\86 â\9d¨L2.â\93\91[I2]V2,T2â\9d© →
+ â\88\80p,I1. â\9d¨L1,â\93\91[p,I1]V1.T1â\9d© â\8a\86 â\9d¨L2,â\93\91[p,I2]V2.T2â\9d©.
#L1 #L2 #HL #V1 #V2
* #n1 #m1 #f1 #g1 #Hf1 #Hg1 #H1L #Hfg1 #I2 #T1 #T2
* #n2 #m2 #f2 #g2 #Hf2 #Hg2 #H2L #Hfg2 #p #I1
qed.
theorem fsle_bind:
- â\88\80L1,L2,V1,V2. â\9dªL1,V1â\9d« â\8a\86 â\9dªL2,V2â\9d« →
- â\88\80I1,I2,T1,T2. â\9dªL1.â\93\91[I1]V1,T1â\9d« â\8a\86 â\9dªL2.â\93\91[I2]V2,T2â\9d« →
- â\88\80p. â\9dªL1,â\93\91[p,I1]V1.T1â\9d« â\8a\86 â\9dªL2,â\93\91[p,I2]V2.T2â\9d«.
+ â\88\80L1,L2,V1,V2. â\9d¨L1,V1â\9d© â\8a\86 â\9d¨L2,V2â\9d© →
+ â\88\80I1,I2,T1,T2. â\9d¨L1.â\93\91[I1]V1,T1â\9d© â\8a\86 â\9d¨L2.â\93\91[I2]V2,T2â\9d© →
+ â\88\80p. â\9d¨L1,â\93\91[p,I1]V1.T1â\9d© â\8a\86 â\9d¨L2,â\93\91[p,I2]V2.T2â\9d©.
#L1 #L2 #V1 #V2
* #n1 #m1 #f1 #g1 #Hf1 #Hg1 #H1L #Hfg1 #I1 #I2 #T1 #T2
* #n2 #m2 #f2 #g2 #Hf2 #Hg2 #H2L #Hfg2 #p
qed.
theorem fsle_flat:
- â\88\80L1,L2,V1,V2. â\9dªL1,V1â\9d« â\8a\86 â\9dªL2,V2â\9d« →
- â\88\80T1,T2. â\9dªL1,T1â\9d« â\8a\86 â\9dªL2,T2â\9d« →
- â\88\80I1,I2. â\9dªL1,â\93\95[I1]V1.T1â\9d« â\8a\86 â\9dªL2,â\93\95[I2]V2.T2â\9d«.
+ â\88\80L1,L2,V1,V2. â\9d¨L1,V1â\9d© â\8a\86 â\9d¨L2,V2â\9d© →
+ â\88\80T1,T2. â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L2,T2â\9d© →
+ â\88\80I1,I2. â\9d¨L1,â\93\95[I1]V1.T1â\9d© â\8a\86 â\9d¨L2,â\93\95[I2]V2.T2â\9d©.
/3 width=1 by fsle_flat_sn, fsle_flat_dx_dx, fsle_flat_dx_sn/ qed-.
(* Properties with length for local environments ****************************)
-lemma fsle_sort_bi: â\88\80L1,L2,s1,s2. |L1| = |L2| â\86\92 â\9dªL1,â\8b\86s1â\9d« â\8a\86 â\9dªL2,â\8b\86s2â\9d«.
+lemma fsle_sort_bi: â\88\80L1,L2,s1,s2. |L1| = |L2| â\86\92 â\9d¨L1,â\8b\86s1â\9d© â\8a\86 â\9d¨L2,â\8b\86s2â\9d©.
/3 width=8 by lveq_length_eq, frees_sort, pr_sle_refl, ex4_4_intro/ qed.
-lemma fsle_gref_bi: â\88\80L1,L2,l1,l2. |L1| = |L2| â\86\92 â\9dªL1,§l1â\9d« â\8a\86 â\9dªL2,§l2â\9d«.
+lemma fsle_gref_bi: â\88\80L1,L2,l1,l2. |L1| = |L2| â\86\92 â\9d¨L1,§l1â\9d© â\8a\86 â\9d¨L2,§l2â\9d©.
/3 width=8 by lveq_length_eq, frees_gref, pr_sle_refl, ex4_4_intro/ qed.
-lemma fsle_pair_bi: â\88\80K1,K2. |K1| = |K2| â\86\92 â\88\80V1,V2. â\9dªK1,V1â\9d« â\8a\86 â\9dªK2,V2â\9d« →
- â\88\80I1,I2. â\9dªK1.â\93\91[I1]V1,#Oâ\9d« â\8a\86 â\9dªK2.â\93\91[I2]V2,#Oâ\9d«.
+lemma fsle_pair_bi: â\88\80K1,K2. |K1| = |K2| â\86\92 â\88\80V1,V2. â\9d¨K1,V1â\9d© â\8a\86 â\9d¨K2,V2â\9d© →
+ â\88\80I1,I2. â\9d¨K1.â\93\91[I1]V1,#Oâ\9d© â\8a\86 â\9d¨K2.â\93\91[I2]V2,#Oâ\9d©.
#K1 #K2 #HK #V1 #V2
* #n1 #n2 #f1 #f2 #Hf1 #Hf2 #HK12 #Hf12
#I1 #I2
qed.
lemma fsle_unit_bi: ∀K1,K2. |K1| = |K2| →
- â\88\80I1,I2. â\9dªK1.â\93¤[I1],#Oâ\9d« â\8a\86 â\9dªK2.â\93¤[I2],#Oâ\9d«.
+ â\88\80I1,I2. â\9d¨K1.â\93¤[I1],#Oâ\9d© â\8a\86 â\9d¨K2.â\93¤[I2],#Oâ\9d©.
/3 width=8 by frees_unit, lveq_length_eq, pr_sle_refl, ex4_4_intro/
qed.
(* Basic_1: was: sc3_arity_csubc *)
theorem acr_aaa_lsubc_lifts (RR) (RS) (RP):
gcp RR RS RP → gcr RR RS RP RP →
- â\88\80G,L1,T,A. â\9dªG,L1â\9d« ⊢ T ⁝ A → ∀b,f,L0. ⇩*[b,f] L0 ≘ L1 →
+ â\88\80G,L1,T,A. â\9d¨G,L1â\9d© ⊢ T ⁝ A → ∀b,f,L0. ⇩*[b,f] L0 ≘ L1 →
∀T0. ⇧*[f] T ≘ T0 → ∀L2. G ⊢ L2 ⫃[RP] L0 →
- â\9dªG,L2,T0â\9d« ϵ ⟦A⟧[RP].
+ â\9d¨G,L2,T0â\9d© ϵ ⟦A⟧[RP].
#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 ] * ]
[ #s #HG #HL #HT #A #HA #b #f #L0 #HL01 #X0 #H0 #L2 #HL20 destruct -IH
(* Basic_1: was: sc3_arity *)
lemma acr_aaa (RR) (RS) (RP):
gcp RR RS RP → gcr RR RS RP RP →
- â\88\80G,L,T,A. â\9dªG,Lâ\9d« â\8a¢ T â\81\9d A â\86\92 â\9dªG,L,Tâ\9d« ϵ ⟦A⟧[RP].
+ â\88\80G,L,T,A. â\9d¨G,Lâ\9d© â\8a¢ T â\81\9d A â\86\92 â\9d¨G,L,Tâ\9d© ϵ ⟦A⟧[RP].
/3 width=9 by drops_refl, lifts_refl, acr_aaa_lsubc_lifts/ qed.
lemma gcr_aaa (RR) (RS) (RP):
gcp RR RS RP → gcr RR RS RP RP →
- â\88\80G,L,T,A. â\9dªG,Lâ\9d« ⊢ T ⁝ A → RP G L T.
+ â\88\80G,L,T,A. â\9d¨G,Lâ\9d© ⊢ T ⁝ A → RP G L T.
#RR #RS #RP #H1RP #H2RP #G #L #T #A #HT
lapply (acr_gcr … H1RP H2RP A) #HA
@(s1 … HA) /2 width=4 by acr_aaa/
(* Note: this is Tait's iii, or Girard's CR4 *)
definition S2 ≝ λRR:relation4 genv lenv term term. λRS:relation term. λRP,C:candidate.
∀G,L,Vs. all … (RP G L) Vs →
- â\88\80T. ð\9d\90\92â\9dªTâ\9d« → nf RR RS G L T → C G L (ⒶVs.T).
+ â\88\80T. ð\9d\90\92â\9d¨Tâ\9d© → nf RR RS G L T → C G L (ⒶVs.T).
(* Note: this generalizes Tait's ii, or Girard's CR3 *)
definition S3 ≝ λC:candidate.
qed.
lemma acr_abst: ∀RR,RS,RP. gcp RR RS RP → gcr RR RS RP RP →
- â\88\80p,G,L,W,T,A,B. â\9dªG,L,Wâ\9d« ϵ ⟦B⟧[RP] → (
+ â\88\80p,G,L,W,T,A,B. â\9d¨G,L,Wâ\9d© ϵ ⟦B⟧[RP] → (
∀b,f,L0,V0,W0,T0. ⇩*[b,f] L0 ≘ L → ⇧*[f] W ≘ W0 → ⇧*[⫯f] T ≘ T0 →
- â\9dªG,L0,V0â\9d« ϵ â\9f¦Bâ\9f§[RP] â\86\92 â\9dªG,L0,W0â\9d« ϵ â\9f¦Bâ\9f§[RP] â\86\92 â\9dªG,L0.â\93\93â\93\9dW0.V0,T0â\9d« ϵ ⟦A⟧[RP]
+ â\9d¨G,L0,V0â\9d© ϵ â\9f¦Bâ\9f§[RP] â\86\92 â\9d¨G,L0,W0â\9d© ϵ â\9f¦Bâ\9f§[RP] â\86\92 â\9d¨G,L0.â\93\93â\93\9dW0.V0,T0â\9d© ϵ ⟦A⟧[RP]
) →
- â\9dªG,L,â\93\9b[p]W.Tâ\9d« ϵ ⟦②B.A⟧[RP].
+ â\9d¨G,L,â\93\9b[p]W.Tâ\9d© ϵ ⟦②B.A⟧[RP].
#RR #RS #RP #H1RP #H2RP #p #G #L #W #T #A #B #HW #HA #f #L0 #V0 #X #HL0 #H #HB
lapply (acr_gcr … H1RP H2RP A) #HCA
lapply (acr_gcr … H1RP H2RP B) #HCB
inductive lsuba (G:genv): relation lenv ≝
| lsuba_atom: lsuba G (⋆) (⋆)
| lsuba_bind: ∀I,L1,L2. lsuba G L1 L2 → lsuba G (L1.ⓘ[I]) (L2.ⓘ[I])
-| lsuba_beta: â\88\80L1,L2,W,V,A. â\9dªG,L1â\9d« â\8a¢ â\93\9dW.V â\81\9d A â\86\92 â\9dªG,L2â\9d« ⊢ W ⁝ A →
+| lsuba_beta: â\88\80L1,L2,W,V,A. â\9d¨G,L1â\9d© â\8a¢ â\93\9dW.V â\81\9d A â\86\92 â\9d¨G,L2â\9d© ⊢ W ⁝ A →
lsuba G L1 L2 → lsuba G (L1.ⓓⓝW.V) (L2.ⓛW)
.
fact lsuba_inv_bind1_aux: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → ∀I,K1. L1 = K1.ⓘ[I] →
(∃∃K2. G ⊢ K1 ⫃⁝ K2 & L2 = K2.ⓘ[I]) ∨
- â\88\83â\88\83K2,W,V,A. â\9dªG,K1â\9d« â\8a¢ â\93\9dW.V â\81\9d A & â\9dªG,K2â\9d« ⊢ W ⁝ A &
+ â\88\83â\88\83K2,W,V,A. â\9d¨G,K1â\9d© â\8a¢ â\93\9dW.V â\81\9d A & â\9d¨G,K2â\9d© ⊢ W ⁝ A &
G ⊢ K1 ⫃⁝ K2 & I = BPair Abbr (ⓝW.V) & L2 = K2.ⓛW.
#G #L1 #L2 * -L1 -L2
[ #J #K1 #H destruct
lemma lsuba_inv_bind1: ∀I,G,K1,L2. G ⊢ K1.ⓘ[I] ⫃⁝ L2 →
(∃∃K2. G ⊢ K1 ⫃⁝ K2 & L2 = K2.ⓘ[I]) ∨
- â\88\83â\88\83K2,W,V,A. â\9dªG,K1â\9d« â\8a¢ â\93\9dW.V â\81\9d A & â\9dªG,K2â\9d« ⊢ W ⁝ A & G ⊢ K1 ⫃⁝ K2 &
+ â\88\83â\88\83K2,W,V,A. â\9d¨G,K1â\9d© â\8a¢ â\93\9dW.V â\81\9d A & â\9d¨G,K2â\9d© ⊢ W ⁝ A & G ⊢ K1 ⫃⁝ K2 &
I = BPair Abbr (ⓝW.V) & L2 = K2.ⓛW.
/2 width=3 by lsuba_inv_bind1_aux/ qed-.
fact lsuba_inv_bind2_aux: ∀G,L1,L2. G ⊢ L1 ⫃⁝ L2 → ∀I,K2. L2 = K2.ⓘ[I] →
(∃∃K1. G ⊢ K1 ⫃⁝ K2 & L1 = K1.ⓘ[I]) ∨
- â\88\83â\88\83K1,V,W,A. â\9dªG,K1â\9d« â\8a¢ â\93\9dW.V â\81\9d A & â\9dªG,K2â\9d« ⊢ W ⁝ A &
+ â\88\83â\88\83K1,V,W,A. â\9d¨G,K1â\9d© â\8a¢ â\93\9dW.V â\81\9d A & â\9d¨G,K2â\9d© ⊢ W ⁝ A &
G ⊢ K1 ⫃⁝ K2 & I = BPair Abst W & L1 = K1.ⓓⓝW.V.
#G #L1 #L2 * -L1 -L2
[ #J #K2 #H destruct
lemma lsuba_inv_bind2: ∀I,G,L1,K2. G ⊢ L1 ⫃⁝ K2.ⓘ[I] →
(∃∃K1. G ⊢ K1 ⫃⁝ K2 & L1 = K1.ⓘ[I]) ∨
- â\88\83â\88\83K1,V,W,A. â\9dªG,K1â\9d« â\8a¢ â\93\9dW.V â\81\9d A & â\9dªG,K2â\9d« ⊢ W ⁝ A & G ⊢ K1 ⫃⁝ K2 &
+ â\88\83â\88\83K1,V,W,A. â\9d¨G,K1â\9d© â\8a¢ â\93\9dW.V â\81\9d A & â\9d¨G,K2â\9d© ⊢ W ⁝ A & G ⊢ K1 ⫃⁝ K2 &
I = BPair Abst W & L1 = K1.ⓓⓝW.V.
/2 width=3 by lsuba_inv_bind2_aux/ qed-.
(* Properties with atomic arity assignment **********************************)
-lemma lsuba_aaa_conf: â\88\80G,L1,V,A. â\9dªG,L1â\9d« ⊢ V ⁝ A →
- â\88\80L2. G â\8a¢ L1 â«\83â\81\9d L2 â\86\92 â\9dªG,L2â\9d« ⊢ V ⁝ A.
+lemma lsuba_aaa_conf: â\88\80G,L1,V,A. â\9d¨G,L1â\9d© ⊢ V ⁝ A →
+ â\88\80L2. G â\8a¢ L1 â«\83â\81\9d L2 â\86\92 â\9d¨G,L2â\9d© ⊢ V ⁝ A.
#G #L1 #V #A #H elim H -G -L1 -V -A
[ //
| #I #G #L1 #V #A #HA #IH #L2 #H
]
qed-.
-lemma lsuba_aaa_trans: â\88\80G,L2,V,A. â\9dªG,L2â\9d« ⊢ V ⁝ A →
- â\88\80L1. G â\8a¢ L1 â«\83â\81\9d L2 â\86\92 â\9dªG,L1â\9d« ⊢ V ⁝ A.
+lemma lsuba_aaa_trans: â\88\80G,L2,V,A. â\9d¨G,L2â\9d© ⊢ V ⁝ A →
+ â\88\80L1. G â\8a¢ L1 â«\83â\81\9d L2 â\86\92 â\9d¨G,L1â\9d© ⊢ V ⁝ A.
#G #L2 #V #A #H elim H -G -L2 -V -A
[ //
| #I #G #L2 #V #A #HA #IH #L1 #H
(* Properties with generic slicing for local environments *******************)
-(* Note: the premise ð\9d\90\94â\9dªfâ\9d« cannot be removed *)
+(* Note: the premise ð\9d\90\94â\9d¨fâ\9d© 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â\9dªfâ\9d« → ⇩*[b,f] L1 ≘ K1 →
+ â\88\80b,f,K1. ð\9d\90\94â\9d¨fâ\9d© → ⇩*[b,f] L1 ≘ K1 →
∃∃K2. G ⊢ K1 ⫃⁝ K2 & ⇩*[b,f] L2 ≘ K2.
#G #L1 #L2 #H elim H -L1 -L2
[ /2 width=3 by ex2_intro/
]
qed-.
-(* Note: the premise ð\9d\90\94â\9dªfâ\9d« cannot be removed *)
+(* Note: the premise ð\9d\90\94â\9d¨fâ\9d© 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â\9dªfâ\9d« → ⇩*[b,f] L2 ≘ K2 →
+ â\88\80b,f,K2. ð\9d\90\94â\9d¨fâ\9d© → ⇩*[b,f] L2 ≘ K2 →
∃∃K1. G ⊢ K1 ⫃⁝ K2 & ⇩*[b,f] L1 ≘ K1.
#G #L1 #L2 #H elim H -L1 -L2
[ /2 width=3 by ex2_intro/
inductive lsubc (RP) (G): relation lenv ≝
| lsubc_atom: lsubc RP G (⋆) (⋆)
| lsubc_bind: ∀I,L1,L2. lsubc RP G L1 L2 → lsubc RP G (L1.ⓘ[I]) (L2.ⓘ[I])
-| lsubc_beta: â\88\80L1,L2,V,W,A. â\9dªG,L1,Vâ\9d« ϵ â\9f¦Aâ\9f§[RP] â\86\92 â\9dªG,L1,Wâ\9d« ϵ â\9f¦Aâ\9f§[RP] â\86\92 â\9dªG,L2â\9d« ⊢ W ⁝ A →
+| lsubc_beta: â\88\80L1,L2,V,W,A. â\9d¨G,L1,Vâ\9d© ϵ â\9f¦Aâ\9f§[RP] â\86\92 â\9d¨G,L1,Wâ\9d© ϵ â\9f¦Aâ\9f§[RP] â\86\92 â\9d¨G,L2â\9d© ⊢ W ⁝ A →
lsubc RP G L1 L2 → lsubc RP G (L1. ⓓⓝW.V) (L2.ⓛW)
.
fact lsubc_inv_bind1_aux: ∀RP,G,L1,L2. G ⊢ L1 ⫃[RP] L2 → ∀I,K1. L1 = K1.ⓘ[I] →
(∃∃K2. G ⊢ K1 ⫃[RP] K2 & L2 = K2.ⓘ[I]) ∨
- â\88\83â\88\83K2,V,W,A. â\9dªG,K1,Vâ\9d« ϵ â\9f¦Aâ\9f§[RP] & â\9dªG,K1,Wâ\9d« ϵ â\9f¦Aâ\9f§[RP] & â\9dªG,K2â\9d« ⊢ W ⁝ A &
+ â\88\83â\88\83K2,V,W,A. â\9d¨G,K1,Vâ\9d© ϵ â\9f¦Aâ\9f§[RP] & â\9d¨G,K1,Wâ\9d© ϵ â\9f¦Aâ\9f§[RP] & â\9d¨G,K2â\9d© ⊢ W ⁝ A &
G ⊢ K1 ⫃[RP] K2 &
L2 = K2. ⓛW & I = BPair Abbr (ⓝW.V).
#RP #G #L1 #L2 * -L1 -L2
(* Basic_1: was: csubc_gen_head_r *)
lemma lsubc_inv_bind1: ∀RP,I,G,K1,L2. G ⊢ K1.ⓘ[I] ⫃[RP] L2 →
(∃∃K2. G ⊢ K1 ⫃[RP] K2 & L2 = K2.ⓘ[I]) ∨
- â\88\83â\88\83K2,V,W,A. â\9dªG,K1,Vâ\9d« ϵ â\9f¦Aâ\9f§[RP] & â\9dªG,K1,Wâ\9d« ϵ â\9f¦Aâ\9f§[RP] & â\9dªG,K2â\9d« ⊢ W ⁝ A &
+ â\88\83â\88\83K2,V,W,A. â\9d¨G,K1,Vâ\9d© ϵ â\9f¦Aâ\9f§[RP] & â\9d¨G,K1,Wâ\9d© ϵ â\9f¦Aâ\9f§[RP] & â\9d¨G,K2â\9d© ⊢ W ⁝ A &
G ⊢ K1 ⫃[RP] K2 &
L2 = K2.ⓛW & I = BPair Abbr (ⓝW.V).
/2 width=3 by lsubc_inv_bind1_aux/ qed-.
fact lsubc_inv_bind2_aux: ∀RP,G,L1,L2. G ⊢ L1 ⫃[RP] L2 → ∀I,K2. L2 = K2.ⓘ[I] →
(∃∃K1. G ⊢ K1 ⫃[RP] K2 & L1 = K1. ⓘ[I]) ∨
- â\88\83â\88\83K1,V,W,A. â\9dªG,K1,Vâ\9d« ϵ â\9f¦Aâ\9f§[RP] & â\9dªG,K1,Wâ\9d« ϵ â\9f¦Aâ\9f§[RP] & â\9dªG,K2â\9d« ⊢ W ⁝ A &
+ â\88\83â\88\83K1,V,W,A. â\9d¨G,K1,Vâ\9d© ϵ â\9f¦Aâ\9f§[RP] & â\9d¨G,K1,Wâ\9d© ϵ â\9f¦Aâ\9f§[RP] & â\9d¨G,K2â\9d© ⊢ W ⁝ A &
G ⊢ K1 ⫃[RP] K2 &
L1 = K1.ⓓⓝW.V & I = BPair Abst W.
#RP #G #L1 #L2 * -L1 -L2
(* Basic_1: was just: csubc_gen_head_l *)
lemma lsubc_inv_bind2: ∀RP,I,G,L1,K2. G ⊢ L1 ⫃[RP] K2.ⓘ[I] →
(∃∃K1. G ⊢ K1 ⫃[RP] K2 & L1 = K1.ⓘ[I]) ∨
- â\88\83â\88\83K1,V,W,A. â\9dªG,K1,Vâ\9d« ϵ â\9f¦Aâ\9f§[RP] & â\9dªG,K1,Wâ\9d« ϵ â\9f¦Aâ\9f§[RP] & â\9dªG,K2â\9d« ⊢ W ⁝ A &
+ â\88\83â\88\83K1,V,W,A. â\9d¨G,K1,Vâ\9d© ϵ â\9f¦Aâ\9f§[RP] & â\9d¨G,K1,Wâ\9d© ϵ â\9f¦Aâ\9f§[RP] & â\9d¨G,K2â\9d© ⊢ W ⁝ A &
G ⊢ K1 ⫃[RP] K2 &
L1 = K1.ⓓⓝW.V & I = BPair Abst W.
/2 width=3 by lsubc_inv_bind2_aux/ qed-.
(* Properties with generic slicing ******************************************)
-(* Note: the premise ð\9d\90\94â\9dªfâ\9d« cannot be removed *)
+(* Note: the premise ð\9d\90\94â\9d¨fâ\9d© cannot be removed *)
(* 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â\9dªfâ\9d« → ⇩*[b,f] L2 ≘ K2 →
+ â\88\80b,f,K2. ð\9d\90\94â\9d¨fâ\9d© → ⇩*[b,f] L2 ≘ K2 →
∃∃K1. ⇩*[b,f] L1 ≘ K1 & G ⊢ K1 ⫃[RP] K2.
#RP #G #L1 #L2 #H elim H -L1 -L2
[ /2 width=3 by ex2_intro/
lsubf (L1.ⓘ[I1]) (⫯f1) (L2.ⓘ[I2]) (⫯f2)
| lsubf_bind: ∀f1,f2,I,L1,L2. lsubf L1 f1 L2 f2 →
lsubf (L1.ⓘ[I]) (↑f1) (L2.ⓘ[I]) (↑f2)
-| lsubf_beta: â\88\80f,f0,f1,f2,L1,L2,W,V. L1 â\8a¢ ð\9d\90\85+â\9dªVâ\9d« ≘ f → f0 ⋓ f ≘ f1 →
+| lsubf_beta: â\88\80f,f0,f1,f2,L1,L2,W,V. L1 â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© ≘ f → f0 ⋓ f ≘ f1 →
lsubf L1 f0 L2 f2 → lsubf (L1.ⓓⓝW.V) (↑f1) (L2.ⓛW) (↑f2)
-| lsubf_unit: â\88\80f,f0,f1,f2,I1,I2,L1,L2,V. L1 â\8a¢ ð\9d\90\85+â\9dªVâ\9d« ≘ f → f0 ⋓ f ≘ f1 →
+| lsubf_unit: â\88\80f,f0,f1,f2,I1,I2,L1,L2,V. L1 â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© ≘ f → f0 ⋓ f ≘ f1 →
lsubf L1 f0 L2 f2 → lsubf (L1.ⓑ[I1]V) (↑f1) (L2.ⓤ[I2]) (↑f2)
.
(* Basic inversion lemmas ***************************************************)
fact lsubf_inv_atom1_aux:
- â\88\80f1,f2,L1,L2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« → L1 = ⋆ →
+ â\88\80f1,f2,L1,L2. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© → L1 = ⋆ →
∧∧ f1 ≡ f2 & L2 = ⋆.
#f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
[ /2 width=1 by conj/
]
qed-.
-lemma lsubf_inv_atom1: â\88\80f1,f2,L2. â\9dªâ\8b\86,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« → ∧∧ f1 ≡ f2 & L2 = ⋆.
+lemma lsubf_inv_atom1: â\88\80f1,f2,L2. â\9d¨â\8b\86,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© → ∧∧ f1 ≡ f2 & L2 = ⋆.
/2 width=3 by lsubf_inv_atom1_aux/ qed-.
fact lsubf_inv_push1_aux:
- â\88\80f1,f2,L1,L2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« →
+ â\88\80f1,f2,L1,L2. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© →
∀g1,I1,K1. f1 = ⫯g1 → L1 = K1.ⓘ[I1] →
- â\88\83â\88\83g2,I2,K2. â\9dªK1,g1â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« & f2 = ⫯g2 & L2 = K2.ⓘ[I2].
+ â\88\83â\88\83g2,I2,K2. â\9d¨K1,g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© & f2 = ⫯g2 & L2 = K2.ⓘ[I2].
#f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
[ #f1 #f2 #_ #g1 #J1 #K1 #_ #H destruct
| #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g1 #J1 #K1 #H1 #H2 destruct
qed-.
lemma lsubf_inv_push1:
- â\88\80g1,f2,I1,K1,L2. â\9dªK1.â\93\98[I1],⫯g1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« →
- â\88\83â\88\83g2,I2,K2. â\9dªK1,g1â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« & f2 = ⫯g2 & L2 = K2.ⓘ[I2].
+ â\88\80g1,f2,I1,K1,L2. â\9d¨K1.â\93\98[I1],⫯g1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© →
+ â\88\83â\88\83g2,I2,K2. â\9d¨K1,g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© & f2 = ⫯g2 & L2 = K2.ⓘ[I2].
/2 width=6 by lsubf_inv_push1_aux/ qed-.
fact lsubf_inv_pair1_aux:
- â\88\80f1,f2,L1,L2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« →
+ â\88\80f1,f2,L1,L2. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© →
∀g1,I,K1,X. f1 = ↑g1 → L1 = K1.ⓑ[I]X →
- â\88¨â\88¨ â\88\83â\88\83g2,K2. â\9dªK1,g1â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« & f2 = ↑g2 & L2 = K2.ⓑ[I]X
- | â\88\83â\88\83g,g0,g2,K2,W,V. â\9dªK1,g0â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« &
- K1 â\8a¢ ð\9d\90\85+â\9dªVâ\9d« ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 &
+ â\88¨â\88¨ â\88\83â\88\83g2,K2. â\9d¨K1,g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© & f2 = ↑g2 & L2 = K2.ⓑ[I]X
+ | â\88\83â\88\83g,g0,g2,K2,W,V. â\9d¨K1,g0â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© &
+ K1 â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 &
I = Abbr & X = ⓝW.V & L2 = K2.ⓛW
- | â\88\83â\88\83g,g0,g2,J,K2. â\9dªK1,g0â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« &
- K1 â\8a¢ ð\9d\90\85+â\9dªXâ\9d« ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & L2 = K2.ⓤ[J].
+ | â\88\83â\88\83g,g0,g2,J,K2. â\9d¨K1,g0â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© &
+ K1 â\8a¢ ð\9d\90\85+â\9d¨Xâ\9d© ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & L2 = K2.ⓤ[J].
#f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
[ #f1 #f2 #_ #g1 #J #K1 #X #_ #H destruct
| #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g1 #J #K1 #X #H elim (eq_inv_pr_push_next … H)
qed-.
lemma lsubf_inv_pair1:
- â\88\80g1,f2,I,K1,L2,X. â\9dªK1.â\93\91[I]X,â\86\91g1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« →
- â\88¨â\88¨ â\88\83â\88\83g2,K2. â\9dªK1,g1â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« & f2 = ↑g2 & L2 = K2.ⓑ[I]X
- | â\88\83â\88\83g,g0,g2,K2,W,V. â\9dªK1,g0â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« &
- K1 â\8a¢ ð\9d\90\85+â\9dªVâ\9d« ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 &
+ â\88\80g1,f2,I,K1,L2,X. â\9d¨K1.â\93\91[I]X,â\86\91g1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© →
+ â\88¨â\88¨ â\88\83â\88\83g2,K2. â\9d¨K1,g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© & f2 = ↑g2 & L2 = K2.ⓑ[I]X
+ | â\88\83â\88\83g,g0,g2,K2,W,V. â\9d¨K1,g0â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© &
+ K1 â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 &
I = Abbr & X = ⓝW.V & L2 = K2.ⓛW
- | â\88\83â\88\83g,g0,g2,J,K2. â\9dªK1,g0â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« &
- K1 â\8a¢ ð\9d\90\85+â\9dªXâ\9d« ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & L2 = K2.ⓤ[J].
+ | â\88\83â\88\83g,g0,g2,J,K2. â\9d¨K1,g0â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© &
+ K1 â\8a¢ ð\9d\90\85+â\9d¨Xâ\9d© ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 & L2 = K2.ⓤ[J].
/2 width=5 by lsubf_inv_pair1_aux/ qed-.
fact lsubf_inv_unit1_aux:
- â\88\80f1,f2,L1,L2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« →
+ â\88\80f1,f2,L1,L2. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© →
∀g1,I,K1. f1 = ↑g1 → L1 = K1.ⓤ[I] →
- â\88\83â\88\83g2,K2. â\9dªK1,g1â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« & f2 = ↑g2 & L2 = K2.ⓤ[I].
+ â\88\83â\88\83g2,K2. â\9d¨K1,g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© & f2 = ↑g2 & L2 = K2.ⓤ[I].
#f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
[ #f1 #f2 #_ #g1 #J #K1 #_ #H destruct
| #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g1 #J #K1 #H elim (eq_inv_pr_push_next … H)
qed-.
lemma lsubf_inv_unit1:
- â\88\80g1,f2,I,K1,L2. â\9dªK1.â\93¤[I],â\86\91g1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« →
- â\88\83â\88\83g2,K2. â\9dªK1,g1â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« & f2 = ↑g2 & L2 = K2.ⓤ[I].
+ â\88\80g1,f2,I,K1,L2. â\9d¨K1.â\93¤[I],â\86\91g1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© →
+ â\88\83â\88\83g2,K2. â\9d¨K1,g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© & f2 = ↑g2 & L2 = K2.ⓤ[I].
/2 width=5 by lsubf_inv_unit1_aux/ qed-.
fact lsubf_inv_atom2_aux:
- â\88\80f1,f2,L1,L2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« → L2 = ⋆ →
+ â\88\80f1,f2,L1,L2. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© → L2 = ⋆ →
∧∧ f1 ≡ f2 & L1 = ⋆.
#f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
[ /2 width=1 by conj/
]
qed-.
-lemma lsubf_inv_atom2: â\88\80f1,f2,L1. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªâ\8b\86,f2â\9d« → ∧∧f1 ≡ f2 & L1 = ⋆.
+lemma lsubf_inv_atom2: â\88\80f1,f2,L1. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨â\8b\86,f2â\9d© → ∧∧f1 ≡ f2 & L1 = ⋆.
/2 width=3 by lsubf_inv_atom2_aux/ qed-.
fact lsubf_inv_push2_aux:
- â\88\80f1,f2,L1,L2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« →
+ â\88\80f1,f2,L1,L2. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© →
∀g2,I2,K2. f2 = ⫯g2 → L2 = K2.ⓘ[I2] →
- â\88\83â\88\83g1,I1,K1. â\9dªK1,g1â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« & f1 = ⫯g1 & L1 = K1.ⓘ[I1].
+ â\88\83â\88\83g1,I1,K1. â\9d¨K1,g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© & f1 = ⫯g1 & L1 = K1.ⓘ[I1].
#f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
[ #f1 #f2 #_ #g2 #J2 #K2 #_ #H destruct
| #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g2 #J2 #K2 #H1 #H2 destruct
qed-.
lemma lsubf_inv_push2:
- â\88\80f1,g2,I2,L1,K2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªK2.â\93\98[I2],⫯g2â\9d« →
- â\88\83â\88\83g1,I1,K1. â\9dªK1,g1â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« & f1 = ⫯g1 & L1 = K1.ⓘ[I1].
+ â\88\80f1,g2,I2,L1,K2. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨K2.â\93\98[I2],⫯g2â\9d© →
+ â\88\83â\88\83g1,I1,K1. â\9d¨K1,g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© & f1 = ⫯g1 & L1 = K1.ⓘ[I1].
/2 width=6 by lsubf_inv_push2_aux/ qed-.
fact lsubf_inv_pair2_aux:
- â\88\80f1,f2,L1,L2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« →
+ â\88\80f1,f2,L1,L2. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© →
∀g2,I,K2,W. f2 = ↑g2 → L2 = K2.ⓑ[I]W →
- â\88¨â\88¨ â\88\83â\88\83g1,K1. â\9dªK1,g1â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« & f1 = ↑g1 & L1 = K1.ⓑ[I]W
- | â\88\83â\88\83g,g0,g1,K1,V. â\9dªK1,g0â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« &
- K1 â\8a¢ ð\9d\90\85+â\9dªVâ\9d« ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 &
+ â\88¨â\88¨ â\88\83â\88\83g1,K1. â\9d¨K1,g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© & f1 = ↑g1 & L1 = K1.ⓑ[I]W
+ | â\88\83â\88\83g,g0,g1,K1,V. â\9d¨K1,g0â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© &
+ K1 â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 &
I = Abst & L1 = K1.ⓓⓝW.V.
#f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
[ #f1 #f2 #_ #g2 #J #K2 #X #_ #H destruct
qed-.
lemma lsubf_inv_pair2:
- â\88\80f1,g2,I,L1,K2,W. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªK2.â\93\91[I]W,â\86\91g2â\9d« →
- â\88¨â\88¨ â\88\83â\88\83g1,K1. â\9dªK1,g1â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« & f1 = ↑g1 & L1 = K1.ⓑ[I]W
- | â\88\83â\88\83g,g0,g1,K1,V. â\9dªK1,g0â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« &
- K1 â\8a¢ ð\9d\90\85+â\9dªVâ\9d« ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 &
+ â\88\80f1,g2,I,L1,K2,W. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨K2.â\93\91[I]W,â\86\91g2â\9d© →
+ â\88¨â\88¨ â\88\83â\88\83g1,K1. â\9d¨K1,g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© & f1 = ↑g1 & L1 = K1.ⓑ[I]W
+ | â\88\83â\88\83g,g0,g1,K1,V. â\9d¨K1,g0â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© &
+ K1 â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 &
I = Abst & L1 = K1.ⓓⓝW.V.
/2 width=5 by lsubf_inv_pair2_aux/ qed-.
fact lsubf_inv_unit2_aux:
- â\88\80f1,f2,L1,L2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« →
+ â\88\80f1,f2,L1,L2. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© →
∀g2,I,K2. f2 = ↑g2 → L2 = K2.ⓤ[I] →
- â\88¨â\88¨ â\88\83â\88\83g1,K1. â\9dªK1,g1â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« & f1 = ↑g1 & L1 = K1.ⓤ[I]
- | â\88\83â\88\83g,g0,g1,J,K1,V. â\9dªK1,g0â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« &
- K1 â\8a¢ ð\9d\90\85+â\9dªVâ\9d« ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & L1 = K1.ⓑ[J]V.
+ â\88¨â\88¨ â\88\83â\88\83g1,K1. â\9d¨K1,g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© & f1 = ↑g1 & L1 = K1.ⓤ[I]
+ | â\88\83â\88\83g,g0,g1,J,K1,V. â\9d¨K1,g0â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© &
+ K1 â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & L1 = K1.ⓑ[J]V.
#f1 #f2 #L1 #L2 * -f1 -f2 -L1 -L2
[ #f1 #f2 #_ #g2 #J #K2 #_ #H destruct
| #f1 #f2 #I1 #I2 #L1 #L2 #H12 #g2 #J #K2 #H elim (eq_inv_pr_push_next … H)
qed-.
lemma lsubf_inv_unit2:
- â\88\80f1,g2,I,L1,K2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªK2.â\93¤[I],â\86\91g2â\9d« →
- â\88¨â\88¨ â\88\83â\88\83g1,K1. â\9dªK1,g1â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« & f1 = ↑g1 & L1 = K1.ⓤ[I]
- | â\88\83â\88\83g,g0,g1,J,K1,V. â\9dªK1,g0â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« &
- K1 â\8a¢ ð\9d\90\85+â\9dªVâ\9d« ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & L1 = K1.ⓑ[J]V.
+ â\88\80f1,g2,I,L1,K2. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨K2.â\93¤[I],â\86\91g2â\9d© →
+ â\88¨â\88¨ â\88\83â\88\83g1,K1. â\9d¨K1,g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© & f1 = ↑g1 & L1 = K1.ⓤ[I]
+ | â\88\83â\88\83g,g0,g1,J,K1,V. â\9d¨K1,g0â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© &
+ K1 â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 & L1 = K1.ⓑ[J]V.
/2 width=5 by lsubf_inv_unit2_aux/ qed-.
(* Advanced inversion lemmas ************************************************)
-lemma lsubf_inv_atom: â\88\80f1,f2. â\9dªâ\8b\86,f1â\9d« â«\83ð\9d\90\85+ â\9dªâ\8b\86,f2â\9d« → f1 ≡ f2.
+lemma lsubf_inv_atom: â\88\80f1,f2. â\9d¨â\8b\86,f1â\9d© â«\83ð\9d\90\85+ â\9d¨â\8b\86,f2â\9d© → f1 ≡ f2.
#f1 #f2 #H elim (lsubf_inv_atom1 … H) -H //
qed-.
lemma lsubf_inv_push_sn:
- â\88\80g1,f2,I1,I2,K1,K2. â\9dªK1.â\93\98[I1],⫯g1â\9d« â«\83ð\9d\90\85+ â\9dªK2.â\93\98[I2],f2â\9d« →
- â\88\83â\88\83g2. â\9dªK1,g1â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« & f2 = ⫯g2.
+ â\88\80g1,f2,I1,I2,K1,K2. â\9d¨K1.â\93\98[I1],⫯g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2.â\93\98[I2],f2â\9d© →
+ â\88\83â\88\83g2. â\9d¨K1,g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© & f2 = ⫯g2.
#g1 #f2 #I #K1 #K2 #X #H elim (lsubf_inv_push1 … H) -H
#g2 #I #Y #H0 #H2 #H destruct /2 width=3 by ex2_intro/
qed-.
lemma lsubf_inv_bind_sn:
- â\88\80g1,f2,I,K1,K2. â\9dªK1.â\93\98[I],â\86\91g1â\9d« â«\83ð\9d\90\85+ â\9dªK2.â\93\98[I],f2â\9d« →
- â\88\83â\88\83g2. â\9dªK1,g1â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« & f2 = ↑g2.
+ â\88\80g1,f2,I,K1,K2. â\9d¨K1.â\93\98[I],â\86\91g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2.â\93\98[I],f2â\9d© →
+ â\88\83â\88\83g2. â\9d¨K1,g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© & f2 = ↑g2.
#g1 #f2 * #I [2: #X ] #K1 #K2 #H
[ elim (lsubf_inv_pair1 … H) -H *
[ #z2 #Y2 #H2 #H #H0 destruct /2 width=3 by ex2_intro/
qed-.
lemma lsubf_inv_beta_sn:
- â\88\80g1,f2,K1,K2,V,W. â\9dªK1.â\93\93â\93\9dW.V,â\86\91g1â\9d« â«\83ð\9d\90\85+ â\9dªK2.â\93\9bW,f2â\9d« →
- â\88\83â\88\83g,g0,g2. â\9dªK1,g0â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« & K1 â\8a¢ ð\9d\90\85+â\9dªVâ\9d« ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2.
+ â\88\80g1,f2,K1,K2,V,W. â\9d¨K1.â\93\93â\93\9dW.V,â\86\91g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2.â\93\9bW,f2â\9d© →
+ â\88\83â\88\83g,g0,g2. â\9d¨K1,g0â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© & K1 â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2.
#g1 #f2 #K1 #K2 #V #W #H elim (lsubf_inv_pair1 … H) -H *
[ #z2 #Y2 #_ #_ #H destruct
| #z #z0 #z2 #Y2 #X0 #X #H02 #Hz #Hg1 #H #_ #H0 #H1 destruct
qed-.
lemma lsubf_inv_unit_sn:
- â\88\80g1,f2,I,J,K1,K2,V. â\9dªK1.â\93\91[I]V,â\86\91g1â\9d« â«\83ð\9d\90\85+ â\9dªK2.â\93¤[J],f2â\9d« →
- â\88\83â\88\83g,g0,g2. â\9dªK1,g0â\9d« â«\83ð\9d\90\85+ â\9dªK2,g2â\9d« & K1 â\8a¢ ð\9d\90\85+â\9dªVâ\9d« ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2.
+ â\88\80g1,f2,I,J,K1,K2,V. â\9d¨K1.â\93\91[I]V,â\86\91g1â\9d© â«\83ð\9d\90\85+ â\9d¨K2.â\93¤[J],f2â\9d© →
+ â\88\83â\88\83g,g0,g2. â\9d¨K1,g0â\9d© â«\83ð\9d\90\85+ â\9d¨K2,g2â\9d© & K1 â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2.
#g1 #f2 #I #J #K1 #K2 #V #H elim (lsubf_inv_pair1 … H) -H *
[ #z2 #Y2 #_ #_ #H destruct
| #z #z0 #z2 #Y2 #X0 #X #_ #_ #_ #_ #_ #_ #H destruct
]
qed-.
-lemma lsubf_inv_refl: â\88\80L,f1,f2. â\9dªL,f1â\9d« â«\83ð\9d\90\85+ â\9dªL,f2â\9d« → f1 ≡ f2.
+lemma lsubf_inv_refl: â\88\80L,f1,f2. â\9d¨L,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L,f2â\9d© → f1 ≡ f2.
#L elim L -L /2 width=1 by lsubf_inv_atom/
#L #I #IH #f1 #f2 #H12
elim (pr_map_split_tl f1) * #g1 #H destruct
(* Basic forward lemmas *****************************************************)
lemma lsubf_fwd_bind_tl:
- â\88\80f1,f2,I,L1,L2. â\9dªL1.â\93\98[I],f1â\9d« â«\83ð\9d\90\85+ â\9dªL2.â\93\98[I],f2â\9d« â\86\92 â\9dªL1,â«°f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,â«°f2â\9d«.
+ â\88\80f1,f2,I,L1,L2. â\9d¨L1.â\93\98[I],f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2.â\93\98[I],f2â\9d© â\86\92 â\9d¨L1,â«°f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,â«°f2â\9d©.
#f1 #f2 #I #L1 #L2 #H
elim (pr_map_split_tl f1) * #g1 #H0 destruct
[ elim (lsubf_inv_push_sn … H) | elim (lsubf_inv_bind_sn … H) ] -H
#g2 #H12 #H destruct //
qed-.
-lemma lsubf_fwd_isid_dx: â\88\80f1,f2,L1,L2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« â\86\92 ð\9d\90\88â\9dªf2â\9d« â\86\92 ð\9d\90\88â\9dªf1â\9d«.
+lemma lsubf_fwd_isid_dx: â\88\80f1,f2,L1,L2. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© â\86\92 ð\9d\90\88â\9d¨f2â\9d© â\86\92 ð\9d\90\88â\9d¨f1â\9d©.
#f1 #f2 #L1 #L2 #H elim H -f1 -f2 -L1 -L2
[ /2 width=3 by pr_isi_eq_repl_fwd/
| /4 width=3 by pr_isi_inv_push, pr_isi_push/
]
qed-.
-lemma lsubf_fwd_isid_sn: â\88\80f1,f2,L1,L2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« â\86\92 ð\9d\90\88â\9dªf1â\9d« â\86\92 ð\9d\90\88â\9dªf2â\9d«.
+lemma lsubf_fwd_isid_sn: â\88\80f1,f2,L1,L2. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© â\86\92 ð\9d\90\88â\9d¨f1â\9d© â\86\92 ð\9d\90\88â\9d¨f2â\9d©.
#f1 #f2 #L1 #L2 #H elim H -f1 -f2 -L1 -L2
[ /2 width=3 by pr_isi_eq_repl_back/
| /4 width=3 by pr_isi_inv_push, pr_isi_push/
]
qed-.
-lemma lsubf_fwd_sle: â\88\80f1,f2,L1,L2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« → f2 ⊆ f1.
+lemma lsubf_fwd_sle: â\88\80f1,f2,L1,L2. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© → f2 ⊆ f1.
#f1 #f2 #L1 #L2 #H elim H -f1 -f2 -L1 -L2
/3 width=5 by pr_sor_inv_sle_sn_trans, pr_sle_next, pr_sle_push, pr_sle_refl_eq, pr_eq_sym/
qed-.
(* Basic properties *********************************************************)
-lemma lsubf_eq_repl_back1: â\88\80f2,L1,L2. pr_eq_repl_back â\80¦ (λf1. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d«).
+lemma lsubf_eq_repl_back1: â\88\80f2,L1,L2. pr_eq_repl_back â\80¦ (λf1. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d©).
#f2 #L1 #L2 #f #H elim H -f -f2 -L1 -L2
[ #f1 #f2 #Hf12 #g1 #Hfg1
/3 width=3 by lsubf_atom, pr_eq_canc_sn/
]
qed-.
-lemma lsubf_eq_repl_fwd1: â\88\80f2,L1,L2. pr_eq_repl_fwd â\80¦ (λf1. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d«).
+lemma lsubf_eq_repl_fwd1: â\88\80f2,L1,L2. pr_eq_repl_fwd â\80¦ (λf1. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d©).
#f2 #L1 #L2 @pr_eq_repl_sym /2 width=3 by lsubf_eq_repl_back1/
qed-.
-lemma lsubf_eq_repl_back2: â\88\80f1,L1,L2. pr_eq_repl_back â\80¦ (λf2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d«).
+lemma lsubf_eq_repl_back2: â\88\80f1,L1,L2. pr_eq_repl_back â\80¦ (λf2. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d©).
#f1 #L1 #L2 #f #H elim H -f1 -f -L1 -L2
[ #f1 #f2 #Hf12 #g2 #Hfg2
/3 width=3 by lsubf_atom, pr_eq_trans/
]
qed-.
-lemma lsubf_eq_repl_fwd2: â\88\80f1,L1,L2. pr_eq_repl_fwd â\80¦ (λf2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d«).
+lemma lsubf_eq_repl_fwd2: â\88\80f1,L1,L2. pr_eq_repl_fwd â\80¦ (λf2. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d©).
#f1 #L1 #L2 @pr_eq_repl_sym /2 width=3 by lsubf_eq_repl_back2/
qed-.
/2 width=1 by lsubf_push, lsubf_bind/
qed.
-lemma lsubf_refl_eq: â\88\80f1,f2,L. f1 â\89¡ f2 â\86\92 â\9dªL,f1â\9d« â«\83ð\9d\90\85+ â\9dªL,f2â\9d«.
+lemma lsubf_refl_eq: â\88\80f1,f2,L. f1 â\89¡ f2 â\86\92 â\9d¨L,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L,f2â\9d©.
/2 width=3 by lsubf_eq_repl_back2/ qed.
lemma lsubf_bind_tl_dx:
- â\88\80g1,f2,I,L1,L2. â\9dªL1,g1â\9d« â«\83ð\9d\90\85+ â\9dªL2,â«°f2â\9d« →
- â\88\83â\88\83f1. â\9dªL1.â\93\98[I],f1â\9d« â«\83ð\9d\90\85+ â\9dªL2.â\93\98[I],f2â\9d« & g1 = ⫰f1.
+ â\88\80g1,f2,I,L1,L2. â\9d¨L1,g1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,â«°f2â\9d© →
+ â\88\83â\88\83f1. â\9d¨L1.â\93\98[I],f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2.â\93\98[I],f2â\9d© & g1 = ⫰f1.
#g1 #f2 #I #L1 #L2 #H
elim (pr_map_split_tl f2) * #g2 #H2 destruct
@ex2_intro [1,2,4,5: /2 width=2 by lsubf_push, lsubf_bind/ ] // (**) (* constructor needed *)
qed-.
lemma lsubf_beta_tl_dx:
- â\88\80f,f0,g1,L1,V. L1 â\8a¢ ð\9d\90\85+â\9dªVâ\9d« ≘ f → f0 ⋓ f ≘ g1 →
- â\88\80f2,L2,W. â\9dªL1,f0â\9d« â«\83ð\9d\90\85+ â\9dªL2,â«°f2â\9d« →
- â\88\83â\88\83f1. â\9dªL1.â\93\93â\93\9dW.V,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2.â\93\9bW,f2â\9d« & ⫰f1 ⊆ g1.
+ â\88\80f,f0,g1,L1,V. L1 â\8a¢ ð\9d\90\85+â\9d¨Vâ\9d© ≘ f → f0 ⋓ f ≘ g1 →
+ â\88\80f2,L2,W. â\9d¨L1,f0â\9d© â«\83ð\9d\90\85+ â\9d¨L2,â«°f2â\9d© →
+ â\88\83â\88\83f1. â\9d¨L1.â\93\93â\93\9dW.V,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2.â\93\9bW,f2â\9d© & ⫰f1 ⊆ g1.
#f #f0 #g1 #L1 #V #Hf #Hg1 #f2
elim (pr_map_split_tl f2) * #x2 #H2 #L2 #W #HL12 destruct
[ /3 width=4 by lsubf_push, pr_sor_inv_sle_sn, ex2_intro/
(* Note: this might be moved *)
lemma lsubf_inv_sor_dx:
- â\88\80f1,f2,L1,L2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« →
+ â\88\80f1,f2,L1,L2. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© →
∀f2l,f2r. f2l⋓f2r ≘ f2 →
- â\88\83â\88\83f1l,f1r. â\9dªL1,f1lâ\9d« â«\83ð\9d\90\85+ â\9dªL2,f2lâ\9d« & â\9dªL1,f1râ\9d« â«\83ð\9d\90\85+ â\9dªL2,f2râ\9d« & f1l⋓f1r ≘ f1.
+ â\88\83â\88\83f1l,f1r. â\9d¨L1,f1lâ\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2lâ\9d© & â\9d¨L1,f1râ\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2râ\9d© & f1l⋓f1r ≘ f1.
#f1 #f2 #L1 #L2 #H elim H -f1 -f2 -L1 -L2
[ /3 width=7 by pr_sor_eq_repl_fwd, ex3_2_intro/
| #g1 #g2 #I1 #I2 #L1 #L2 #_ #IH #f2l #f2r #H
(* Properties with context-sensitive free variables *************************)
lemma lsubf_frees_trans:
- â\88\80f2,L2,T. L2 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f2 →
- â\88\80f1,L1. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« â\86\92 L1 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f1.
+ â\88\80f2,L2,T. L2 â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f2 →
+ â\88\80f1,L1. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© â\86\92 L1 â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f1.
#f2 #L2 #T #H elim H -f2 -L2 -T
[ /3 width=5 by lsubf_fwd_isid_dx, frees_sort/
| #f2 #i #Hf2 #g1 #Y1 #H
(* Main properties **********************************************************)
theorem lsubf_sor:
- â\88\80K,L,g1,f1. â\9dªK,g1â\9d« â«\83ð\9d\90\85+ â\9dªL,f1â\9d« →
- â\88\80g2,f2. â\9dªK,g2â\9d« â«\83ð\9d\90\85+ â\9dªL,f2â\9d« →
- â\88\80g. g1 â\8b\93 g2 â\89\98 g â\86\92 â\88\80f. f1 â\8b\93 f2 â\89\98 f â\86\92 â\9dªK,gâ\9d« â«\83ð\9d\90\85+ â\9dªL,fâ\9d«.
+ â\88\80K,L,g1,f1. â\9d¨K,g1â\9d© â«\83ð\9d\90\85+ â\9d¨L,f1â\9d© →
+ â\88\80g2,f2. â\9d¨K,g2â\9d© â«\83ð\9d\90\85+ â\9d¨L,f2â\9d© →
+ â\88\80g. g1 â\8b\93 g2 â\89\98 g â\86\92 â\88\80f. f1 â\8b\93 f2 â\89\98 f â\86\92 â\9d¨K,gâ\9d© â«\83ð\9d\90\85+ â\9d¨L,fâ\9d©.
#K elim K -K
[ #L #g1 #f1 #H1 #g2 #f2 #H2 #g #Hg #f #Hf
elim (lsubf_inv_atom1 … H1) -H1 #H1 #H destruct
(* Forward lemmas with restricted refinement for local environments *********)
lemma lsubf_fwd_lsubr_isdiv:
- â\88\80f1,f2,L1,L2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d« â\86\92 ð\9d\9b\80â\9dªf1â\9d« â\86\92 ð\9d\9b\80â\9dªf2â\9d« → L1 ⫃ L2.
+ â\88\80f1,f2,L1,L2. â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d© â\86\92 ð\9d\9b\80â\9d¨f1â\9d© â\86\92 ð\9d\9b\80â\9d¨f2â\9d© → L1 ⫃ L2.
#f1 #f2 #L1 #L2 #H elim H -f1 -f2 -L1 -L2
/4 width=3 by lsubr_bind, pr_isd_inv_next/
[ #f1 #f2 #I1 #I2 #L1 #L2 #_ #_ #H
(* Properties with restricted refinement for local environments *************)
lemma lsubr_lsubf_isid:
- â\88\80L1,L2. L1 â«\83 L2 â\86\92 â\88\80f1,f2. ð\9d\90\88â\9dªf1â\9d« â\86\92 ð\9d\90\88â\9dªf2â\9d« â\86\92 â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d«.
+ â\88\80L1,L2. L1 â«\83 L2 â\86\92 â\88\80f1,f2. ð\9d\90\88â\9d¨f1â\9d© â\86\92 ð\9d\90\88â\9d¨f2â\9d© â\86\92 â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d©.
#L1 #L2 #H elim H -L1 -L2
[ /3 width=1 by lsubf_atom, pr_isi_inv_eq_repl/
| #I #L1 #L2 | #L1 #L2 #V #W | #I1 #I2 #L1 #L2 #V
qed.
lemma lsubr_lsubf:
- â\88\80f2,L2,T. L2 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f2 → ∀L1. L1 ⫃ L2 →
- â\88\80f1. L1 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« â\89\98 f1 â\86\92 â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d«.
+ â\88\80f2,L2,T. L2 â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f2 → ∀L1. L1 ⫃ L2 →
+ â\88\80f1. L1 â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© â\89\98 f1 â\86\92 â\9d¨L1,f1â\9d© â«\83ð\9d\90\85+ â\9d¨L2,f2â\9d©.
#f2 #L2 #T #H elim H -f2 -L2 -T
[ #f2 #L2 #s #Hf2 #L1 #HL12 #f1 #Hf1
lapply (frees_inv_sort … Hf1) -Hf1 /2 width=1 by lsubr_lsubf_isid/
(* Basic_2A1: includes: lsubr_fwd_drop2_pair *)
lemma lsubr_fwd_drops2_bind:
∀L1,L2. L1 ⫃ L2 →
- â\88\80b,f,I,K2. ð\9d\90\94â\9dªfâ\9d« → ⇩*[b,f] L2 ≘ K2.ⓘ[I] →
+ â\88\80b,f,I,K2. ð\9d\90\94â\9d¨fâ\9d© → ⇩*[b,f] L2 ≘ K2.ⓘ[I] →
∨∨ ∃∃K1. K1 ⫃ K2 & ⇩*[b,f] L1 ≘ K1.ⓘ[I]
| ∃∃K1,W,V. K1 ⫃ K2 & ⇩*[b,f] L1 ≘ K1.ⓓⓝW.V & I = BPair Abst W
| ∃∃J1,J2,K1,V. K1 ⫃ K2 & ⇩*[b,f] L1 ≘ K1.ⓑ[J1]V & I = BUnit J2.
(* Basic_2A1: includes: lsubr_fwd_drop2_abbr *)
lemma lsubr_fwd_drops2_abbr:
∀L1,L2. L1 ⫃ L2 →
- â\88\80b,f,K2,V. ð\9d\90\94â\9dªfâ\9d« → ⇩*[b,f] L2 ≘ K2.ⓓV →
+ â\88\80b,f,K2,V. ð\9d\90\94â\9d¨fâ\9d© → ⇩*[b,f] L2 ≘ K2.ⓓV →
∃∃K1. K1 ⫃ K2 & ⇩*[b,f] L1 ≘ K1.ⓓV.
#L1 #L2 #HL12 #b #f #K2 #V #Hf #HLK2
elim (lsubr_fwd_drops2_bind … HL12 … Hf HLK2) -L2 -Hf // *
(* Basic properties ***********************************************************)
lemma frees_teqg_conf_seqg (S):
- â\88\80f,L1,T1. L1 â\8a¢ ð\9d\90\85+â\9dªT1â\9d« ≘ f → ∀T2. T1 ≛[S] T2 →
- â\88\80L2. L1 â\89\9b[S,f] L2 â\86\92 L2 â\8a¢ ð\9d\90\85+â\9dªT2â\9d« ≘ f.
+ â\88\80f,L1,T1. L1 â\8a¢ ð\9d\90\85+â\9d¨T1â\9d© ≘ f → ∀T2. T1 ≛[S] T2 →
+ â\88\80L2. L1 â\89\9b[S,f] L2 â\86\92 L2 â\8a¢ ð\9d\90\85+â\9d¨T2â\9d© ≘ f.
#S #f #L1 #T1 #H elim H -f -L1 -T1
[ #f #L1 #s1 #Hf #X #H1 #L2 #_
elim (teqg_inv_sort1 … H1) -H1 #s2 #_ #H destruct
lemma frees_teqg_conf (S):
reflexive … S →
- â\88\80f,L,T1. L â\8a¢ ð\9d\90\85+â\9dªT1â\9d« ≘ f →
- â\88\80T2. T1 â\89\9b[S] T2 â\86\92 L â\8a¢ ð\9d\90\85+â\9dªT2â\9d« ≘ f.
+ â\88\80f,L,T1. L â\8a¢ ð\9d\90\85+â\9d¨T1â\9d© ≘ f →
+ â\88\80T2. T1 â\89\9b[S] T2 â\86\92 L â\8a¢ ð\9d\90\85+â\9d¨T2â\9d© ≘ f.
/5 width=6 by frees_teqg_conf_seqg, sex_refl, teqg_refl, ext2_refl/ qed-.
lemma frees_seqg_conf (S):
reflexive … S →
- â\88\80f,L1,T. L1 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f →
- â\88\80L2. L1 â\89\9b[S,f] L2 â\86\92 L2 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f.
+ â\88\80f,L1,T. L1 â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f →
+ â\88\80L2. L1 â\89\9b[S,f] L2 â\86\92 L2 â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f.
/3 width=6 by frees_teqg_conf_seqg, teqg_refl/ qed-.
lemma teqg_rex_conf_sn (S) (R):
/2 width=1 by rex_pair/ qed.
lemma reqg_unit (S):
- â\88\80f,I,L1,L2. ð\9d\90\88â\9dªfâ\9d« → L1 ≛[S,f] L2 →
+ â\88\80f,I,L1,L2. ð\9d\90\88â\9d¨fâ\9d© → L1 ≛[S,f] L2 →
L1.ⓤ[I] ≛[S,#0] L2.ⓤ[I].
/2 width=3 by rex_unit/ qed.
∀Y1,Y2. Y1 ≛[S,#0] Y2 →
∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
| ∃∃I,L1,L2,V1,V2. L1 ≛[S,V1] L2 & V1 ≛[S] V2 & Y1 = L1.ⓑ[I]V1 & Y2 = L2.ⓑ[I]V2
- | â\88\83â\88\83f,I,L1,L2. ð\9d\90\88â\9dªfâ\9d« & L1 ≛[S,f] L2 & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I].
+ | â\88\83â\88\83f,I,L1,L2. ð\9d\90\88â\9d¨fâ\9d© & L1 ≛[S,f] L2 & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I].
#S #Y1 #Y2 #H elim (rex_inv_zero … H) -H *
/3 width=9 by or3_intro0, or3_intro1, or3_intro2, ex4_5_intro, ex4_4_intro, conj/
qed-.
/2 width=5 by rex_dropable_dx/ qed-.
lemma reqg_inv_lifts_bi (S):
- â\88\80L1,L2,U. L1 â\89\9b[S,U] L2 â\86\92 â\88\80b,f. ð\9d\90\94â\9dªfâ\9d« →
+ â\88\80L1,L2,U. L1 â\89\9b[S,U] L2 â\86\92 â\88\80b,f. ð\9d\90\94â\9d¨fâ\9d© →
∀K1,K2. ⇩*[b,f] L1 ≘ K1 → ⇩*[b,f] L2 ≘ K2 →
∀T. ⇧*[f] T ≘ U → K1 ≛[S,T] K2.
/2 width=10 by rex_inv_lifts_bi/ qed-.
lemma fqu_teqg_conf (S) (b):
reflexive … S →
- â\88\80G1,G2,L1,L2,U1,T1. â\9dªG1,L1,U1â\9d« â¬\82[b] â\9dªG2,L2,T1â\9d« →
+ â\88\80G1,G2,L1,L2,U1,T1. â\9d¨G1,L1,U1â\9d© â¬\82[b] â\9d¨G2,L2,T1â\9d© →
∀U2. U1 ≛[S] U2 →
- â\88\83â\88\83L,T2. â\9dªG1,L1,U2â\9d« â¬\82[b] â\9dªG2,L,T2â\9d« & L2 ≛[S,T1] L & T1 ≛[S] T2.
+ â\88\83â\88\83L,T2. â\9d¨G1,L1,U2â\9d© â¬\82[b] â\9d¨G2,L,T2â\9d© & L2 ≛[S,T1] L & T1 ≛[S] T2.
#S #b #HS #G1 #G2 #L1 #L2 #U1 #T1 #H elim H -G1 -G2 -L1 -L2 -U1 -T1
[ #I #G #L #W #X #H >(teqg_inv_lref1 … H) -X
/3 width=5 by reqg_refl, fqu_lref_O, teqg_refl, ex3_2_intro/
lemma teqg_fqu_trans (S) (b):
reflexive … S → symmetric … S →
- â\88\80G1,G2,L1,L2,U1,T1. â\9dªG1,L1,U1â\9d« â¬\82[b] â\9dªG2,L2,T1â\9d« →
+ â\88\80G1,G2,L1,L2,U1,T1. â\9d¨G1,L1,U1â\9d© â¬\82[b] â\9d¨G2,L2,T1â\9d© →
∀U2. U2 ≛[S] U1 →
- â\88\83â\88\83L,T2. â\9dªG1,L1,U2â\9d« â¬\82[b] â\9dªG2,L,T2â\9d« & T2 ≛[S] T1 & L ≛[S,T1] L2.
+ â\88\83â\88\83L,T2. â\9d¨G1,L1,U2â\9d© â¬\82[b] â\9d¨G2,L,T2â\9d© & T2 ≛[S] T1 & L ≛[S,T1] L2.
#S #b #H1S #H2S #G1 #G2 #L1 #L2 #U1 #T1 #H12 #U2 #HU21
elim (fqu_teqg_conf … H12 U2) -H12
/3 width=5 by reqg_sym, teqg_sym, ex3_2_intro/
(* Basic_2A1: uses: lleq_fqu_trans *)
lemma reqg_fqu_trans (S) (b):
reflexive … S →
- â\88\80G1,G2,L2,K2,T,U. â\9dªG1,L2,Tâ\9d« â¬\82[b] â\9dªG2,K2,Uâ\9d« →
+ â\88\80G1,G2,L2,K2,T,U. â\9d¨G1,L2,Tâ\9d© â¬\82[b] â\9d¨G2,K2,Uâ\9d© →
∀L1. L1 ≛[S,T] L2 →
- â\88\83â\88\83K1,U0. â\9dªG1,L1,Tâ\9d« â¬\82[b] â\9dªG2,K1,U0â\9d« & U0 ≛[S] U & K1 ≛[S,U] K2.
+ â\88\83â\88\83K1,U0. â\9d¨G1,L1,Tâ\9d© â¬\82[b] â\9d¨G2,K1,U0â\9d© & U0 ≛[S] U & K1 ≛[S,U] K2.
#S #b #HS #G1 #G2 #L2 #K2 #T #U #H elim H -G1 -G2 -L2 -K2 -T -U
[ #I #G #L2 #V2 #L1 #H elim (reqg_inv_zero_pair_dx … H) -H
#K1 #V1 #HV1 #HV12 #H destruct
lemma teqg_fquq_trans (S) (b):
reflexive … S → symmetric … S →
- â\88\80G1,G2,L1,L2,U1,T1. â\9dªG1,L1,U1â\9d« â¬\82⸮[b] â\9dªG2,L2,T1â\9d« →
+ â\88\80G1,G2,L1,L2,U1,T1. â\9d¨G1,L1,U1â\9d© â¬\82⸮[b] â\9d¨G2,L2,T1â\9d© →
∀U2. U2 ≛[S] U1 →
- â\88\83â\88\83L,T2. â\9dªG1,L1,U2â\9d« â¬\82⸮[b] â\9dªG2,L,T2â\9d« & T2 ≛[S] T1 & L ≛[S,T1] L2.
+ â\88\83â\88\83L,T2. â\9d¨G1,L1,U2â\9d© â¬\82⸮[b] â\9d¨G2,L,T2â\9d© & T2 ≛[S] T1 & L ≛[S,T1] L2.
#S #b #H1S #H2S #G1 #G2 #L1 #L2 #U1 #T1 #H elim H -H
[ #H #U2 #HU21 elim (teqg_fqu_trans … H … HU21) -U1
/3 width=5 by fqu_fquq, ex3_2_intro/
(* Basic_2A1: was just: lleq_fquq_trans *)
lemma reqg_fquq_trans (S) (b):
reflexive … S →
- â\88\80G1,G2,L2,K2,T,U. â\9dªG1,L2,Tâ\9d« â¬\82⸮[b] â\9dªG2,K2,Uâ\9d« →
+ â\88\80G1,G2,L2,K2,T,U. â\9d¨G1,L2,Tâ\9d© â¬\82⸮[b] â\9d¨G2,K2,Uâ\9d© →
∀L1. L1 ≛[S,T] L2 →
- â\88\83â\88\83K1,U0. â\9dªG1,L1,Tâ\9d« â¬\82⸮[b] â\9dªG2,K1,U0â\9d« & U0 ≛[S] U & K1 ≛[S,U] K2.
+ â\88\83â\88\83K1,U0. â\9d¨G1,L1,Tâ\9d© â¬\82⸮[b] â\9d¨G2,K1,U0â\9d© & U0 ≛[S] U & K1 ≛[S,U] K2.
#S #b #HS #G1 #G2 #L2 #K2 #T #U #H elim H -H
[ #H #L1 #HL12 elim (reqg_fqu_trans … H … HL12) -L2 /3 width=5 by fqu_fquq, ex3_2_intro/
| * #HG #HL #HT destruct /3 width=5 by teqg_refl, ex3_2_intro/
(* Basic_2A1: was just: lleq_fqup_trans *)
lemma reqg_fqup_trans (S) (b):
reflexive … S → symmetric … S → Transitive … S →
- â\88\80G1,G2,L2,K2,T,U. â\9dªG1,L2,Tâ\9d« â¬\82+[b] â\9dªG2,K2,Uâ\9d« →
+ â\88\80G1,G2,L2,K2,T,U. â\9d¨G1,L2,Tâ\9d© â¬\82+[b] â\9d¨G2,K2,Uâ\9d© →
∀L1. L1 ≛[S,T] L2 →
- â\88\83â\88\83K1,U0. â\9dªG1,L1,Tâ\9d« â¬\82+[b] â\9dªG2,K1,U0â\9d« & U0 ≛[S] U & K1 ≛[S,U] K2.
+ â\88\83â\88\83K1,U0. â\9d¨G1,L1,Tâ\9d© â¬\82+[b] â\9d¨G2,K1,U0â\9d© & U0 ≛[S] U & K1 ≛[S,U] K2.
#S #b #H1S #H2S #H3S #G1 #G2 #L2 #K2 #T #U #H @(fqup_ind … H) -G2 -K2 -U
[ #G2 #K2 #U #HTU #L1 #HL12 elim (reqg_fqu_trans … HTU … HL12) -L2
/3 width=5 by fqu_fqup, ex3_2_intro/
lemma teqg_fqup_trans (S) (b):
reflexive … S → symmetric … S → Transitive … S →
- â\88\80G1,G2,L1,L2,U1,T1. â\9dªG1,L1,U1â\9d« â¬\82+[b] â\9dªG2,L2,T1â\9d« →
+ â\88\80G1,G2,L1,L2,U1,T1. â\9d¨G1,L1,U1â\9d© â¬\82+[b] â\9d¨G2,L2,T1â\9d© →
∀U2. U2 ≛[S] U1 →
- â\88\83â\88\83L,T2. â\9dªG1,L1,U2â\9d« â¬\82+[b] â\9dªG2,L,T2â\9d« & T2 ≛[S] T1 & L ≛[S,T1] L2.
+ â\88\83â\88\83L,T2. â\9d¨G1,L1,U2â\9d© â¬\82+[b] â\9d¨G2,L,T2â\9d© & T2 ≛[S] T1 & L ≛[S,T1] L2.
#S #b #H1S #H2S #H3S #G1 #G2 #L1 #L2 #U1 #T1 #H @(fqup_ind_dx … H) -G1 -L1 -U1
[ #G1 #L1 #U1 #H #U2 #HU21 elim (teqg_fqu_trans … H … HU21) -U1 //
/3 width=5 by fqu_fqup, ex3_2_intro/
lemma teqg_fqus_trans (S) (b):
reflexive … S → symmetric … S → Transitive … S →
- â\88\80G1,G2,L1,L2,U1,T1. â\9dªG1,L1,U1â\9d« â¬\82*[b] â\9dªG2,L2,T1â\9d« →
+ â\88\80G1,G2,L1,L2,U1,T1. â\9d¨G1,L1,U1â\9d© â¬\82*[b] â\9d¨G2,L2,T1â\9d© →
∀U2. U2 ≛[S] U1 →
- â\88\83â\88\83L,T2. â\9dªG1,L1,U2â\9d« â¬\82*[b] â\9dªG2,L,T2â\9d« & T2 ≛[S] T1 & L ≛[S,T1] L2.
+ â\88\83â\88\83L,T2. â\9d¨G1,L1,U2â\9d© â¬\82*[b] â\9d¨G2,L,T2â\9d© & T2 ≛[S] T1 & L ≛[S,T1] L2.
#S #b #H1S #H2S #H3S #G1 #G2 #L1 #L2 #U1 #T1 #H #U2 #HU21 elim(fqus_inv_fqup … H) -H
[ #H elim (teqg_fqup_trans … H … HU21) -U1 /3 width=5 by fqup_fqus, ex3_2_intro/
| * #HG #HL #HT destruct /3 width=5 by reqg_refl, ex3_2_intro/
(* Basic_2A1: was just: lleq_fqus_trans *)
lemma reqg_fqus_trans (S) (b):
reflexive … S → symmetric … S → Transitive … S →
- â\88\80G1,G2,L2,K2,T,U. â\9dªG1,L2,Tâ\9d« â¬\82*[b] â\9dªG2,K2,Uâ\9d« →
+ â\88\80G1,G2,L2,K2,T,U. â\9d¨G1,L2,Tâ\9d© â¬\82*[b] â\9d¨G2,K2,Uâ\9d© →
∀L1. L1 ≛[S,T] L2 →
- â\88\83â\88\83K1,U0. â\9dªG1,L1,Tâ\9d« â¬\82*[b] â\9dªG2,K1,U0â\9d« & U0 ≛[S] U & K1 ≛[S,U] K2.
+ â\88\83â\88\83K1,U0. â\9d¨G1,L1,Tâ\9d© â¬\82*[b] â\9d¨G2,K1,U0â\9d© & U0 ≛[S] U & K1 ≛[S,U] K2.
#S #b #H1S #H2S #H3S #G1 #G2 #L2 #K2 #T #U #H #L1 #HL12 elim(fqus_inv_fqup … H) -H
[ #H elim (reqg_fqup_trans … H … HL12) -L2 /3 width=5 by fqup_fqus, ex3_2_intro/
| * #HG #HL #HT destruct /3 width=5 by teqg_refl, ex3_2_intro/
lemma frees_reqg_conf (S):
reflexive … S →
- â\88\80f,L1,T. L1 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f →
- â\88\80L2. L1 â\89\9b[S,T] L2 â\86\92 L2 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f.
+ â\88\80f,L1,T. L1 â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f →
+ â\88\80L2. L1 â\89\9b[S,T] L2 â\86\92 L2 â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f.
/3 width=7 by frees_seqg_conf, rex_inv_frees/ qed-.
(* Properties with free variables inclusion for restricted closures *******)
(* Basic properties ***********************************************************)
(*
lemma frees_teqx_conf_reqx:
- â\88\80f,L1,T1. L1 â\8a¢ ð\9d\90\85+â\9dªT1â\9d« ≘ f → ∀T2. T1 ≛ T2 →
- â\88\80L2. L1 â\89\9b[f] L2 â\86\92 L2 â\8a¢ ð\9d\90\85+â\9dªT2â\9d« ≘ f.
+ â\88\80f,L1,T1. L1 â\8a¢ ð\9d\90\85+â\9d¨T1â\9d© ≘ f → ∀T2. T1 ≛ T2 →
+ â\88\80L2. L1 â\89\9b[f] L2 â\86\92 L2 â\8a¢ ð\9d\90\85+â\9d¨T2â\9d© ≘ f.
#f #L1 #T1 #H elim H -f -L1 -T1
[ #f #L1 #s1 #Hf #X #H1 #L2 #_
elim (teqx_inv_sort1 … H1) -H1 #s2 #H destruct
qed-.
lemma frees_teqx_conf:
- â\88\80f,L,T1. L â\8a¢ ð\9d\90\85+â\9dªT1â\9d« ≘ f →
- â\88\80T2. T1 â\89\9b T2 â\86\92 L â\8a¢ ð\9d\90\85+â\9dªT2â\9d« ≘ f.
+ â\88\80f,L,T1. L â\8a¢ ð\9d\90\85+â\9d¨T1â\9d© ≘ f →
+ â\88\80T2. T1 â\89\9b T2 â\86\92 L â\8a¢ ð\9d\90\85+â\9d¨T2â\9d© ≘ f.
/4 width=7 by frees_teqx_conf_reqx, sex_refl, ext2_refl/ qed-.
lemma frees_reqx_conf:
- â\88\80f,L1,T. L1 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f →
- â\88\80L2. L1 â\89\9b[f] L2 â\86\92 L2 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f.
+ â\88\80f,L1,T. L1 â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f →
+ â\88\80L2. L1 â\89\9b[f] L2 â\86\92 L2 â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f.
/2 width=7 by frees_teqx_conf_reqx, teqx_refl/ qed-.
lemma teqx_rex_conf_sn (R):
/2 width=1 by rex_pair/ qed.
lemma reqx_unit:
- â\88\80f,I,L1,L2. ð\9d\90\88â\9dªfâ\9d« → L1 ≛[f] L2 →
+ â\88\80f,I,L1,L2. ð\9d\90\88â\9d¨fâ\9d© → L1 ≛[f] L2 →
L1.ⓤ[I] ≛[#0] L2.ⓤ[I].
/2 width=3 by rex_unit/ qed.
∀Y1,Y2. Y1 ≛[#0] Y2 →
∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
| ∃∃I,L1,L2,V1,V2. L1 ≛[V1] L2 & V1 ≛ V2 & Y1 = L1.ⓑ[I]V1 & Y2 = L2.ⓑ[I]V2
- | â\88\83â\88\83f,I,L1,L2. ð\9d\90\88â\9dªfâ\9d« & L1 ≛[f] L2 & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I].
+ | â\88\83â\88\83f,I,L1,L2. ð\9d\90\88â\9d¨fâ\9d© & L1 ≛[f] L2 & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I].
#Y1 #Y2 #H elim (rex_inv_zero … H) -H *
/3 width=9 by or3_intro0, or3_intro1, or3_intro2, ex4_5_intro, ex4_4_intro, conj/
qed-.
(* GENERIC EXTENSION ON REFERRED ENTRIES OF A CONTEXT-SENSITIVE REALTION ****)
definition rex (R) (T): relation lenv ≝
- λL1,L2. â\88\83â\88\83f. L1 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f & L1 ⪤[cext2 R,cfull,f] L2.
+ λL1,L2. â\88\83â\88\83f. L1 â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f & L1 ⪤[cext2 R,cfull,f] L2.
interpretation
"generic extension on referred entries (local environment)"
∀Y1,Y2. Y1 ⪤[R,#0] Y2 →
∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
| ∃∃I,L1,L2,V1,V2. L1 ⪤[R,V1] L2 & R L1 V1 V2 & Y1 = L1.ⓑ[I]V1 & Y2 = L2.ⓑ[I]V2
- | â\88\83â\88\83f,I,L1,L2. ð\9d\90\88â\9dªfâ\9d« & L1 ⪤[cext2 R,cfull,f] L2 & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I].
+ | â\88\83â\88\83f,I,L1,L2. ð\9d\90\88â\9d¨fâ\9d© & L1 ⪤[cext2 R,cfull,f] L2 & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I].
#R * [ | #Y1 * #I1 [ | #X ] ] #Y2 * #f #H1 #H2
[ lapply (sex_inv_atom1 … H2) -H2 /3 width=1 by or3_intro0, conj/
| elim (frees_inv_unit … H1) -H1 #g #HX #H destruct
lemma rex_inv_zero_unit_sn (R):
∀I,K1,L2. K1.ⓤ[I] ⪤[R,#0] L2 →
- â\88\83â\88\83f,K2. ð\9d\90\88â\9dªfâ\9d« & K1 ⪤[cext2 R,cfull,f] K2 & L2 = K2.ⓤ[I].
+ â\88\83â\88\83f,K2. ð\9d\90\88â\9d¨fâ\9d© & K1 ⪤[cext2 R,cfull,f] K2 & L2 = K2.ⓤ[I].
#R #I #K1 #L2 #H elim (rex_inv_zero … H) -H *
[ #H destruct
| #Z #Y1 #Y2 #X1 #X2 #_ #_ #H destruct
lemma rex_inv_zero_unit_dx (R):
∀I,L1,K2. L1 ⪤[R,#0] K2.ⓤ[I] →
- â\88\83â\88\83f,K1. ð\9d\90\88â\9dªfâ\9d« & K1 ⪤[cext2 R,cfull,f] K2 & L1 = K1.ⓤ[I].
+ â\88\83â\88\83f,K1. ð\9d\90\88â\9d¨fâ\9d© & K1 ⪤[cext2 R,cfull,f] K2 & L1 = K1.ⓤ[I].
#R #I #L1 #K2 #H elim (rex_inv_zero … H) -H *
[ #_ #H destruct
| #Z #Y1 #Y2 #X1 #X2 #_ #_ #_ #H destruct
qed.
lemma rex_unit (R):
- â\88\80f,I,L1,L2. ð\9d\90\88â\9dªfâ\9d« → L1 ⪤[cext2 R,cfull,f] L2 →
+ â\88\80f,I,L1,L2. ð\9d\90\88â\9d¨fâ\9d© → L1 ⪤[cext2 R,cfull,f] L2 →
L1.ⓤ[I] ⪤[R,#0] L2.ⓤ[I].
/4 width=3 by frees_unit, sex_next, ext2_unit, ex2_intro/ qed.
lemma rex_isid (R1) (R2):
∀L1,L2,T1,T2.
- (â\88\80f. L1 â\8a¢ ð\9d\90\85+â\9dªT1â\9d« â\89\98 f â\86\92 ð\9d\90\88â\9dªfâ\9d«) →
- (â\88\80f. ð\9d\90\88â\9dªfâ\9d« â\86\92 L1 â\8a¢ ð\9d\90\85+â\9dªT2â\9d« ≘ f) →
+ (â\88\80f. L1 â\8a¢ ð\9d\90\85+â\9d¨T1â\9d© â\89\98 f â\86\92 ð\9d\90\88â\9d¨fâ\9d©) →
+ (â\88\80f. ð\9d\90\88â\9d¨fâ\9d© â\86\92 L1 â\8a¢ ð\9d\90\85+â\9d¨T2â\9d© ≘ f) →
L1 ⪤[R1,T1] L2 → L1 ⪤[R2,T2] L2.
#R1 #R2 #L1 #L2 #T1 #T2 #H1 #H2 *
/4 width=7 by sex_co_isid, ex2_intro/
definition f_dropable_sn:
predicate (relation3 lenv term term) ≝ λR.
- â\88\80b,f,L1,K1. â\87©*[b,f] L1 â\89\98 K1 â\86\92 ð\9d\90\94â\9dªfâ\9d« →
+ â\88\80b,f,L1,K1. â\87©*[b,f] L1 â\89\98 K1 â\86\92 ð\9d\90\94â\9d¨fâ\9d© →
∀L2,U. L1 ⪤[R,U] L2 → ∀T. ⇧*[f] T ≘ U →
∃∃K2. K1 ⪤[R,T] K2 & ⇩*[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â\9dªfâ\9d« → ∀T. ⇧*[f] T ≘ U →
+ â\88\80b,f,K2. â\87©*[b,f] L2 â\89\98 K2 â\86\92 ð\9d\90\94â\9d¨fâ\9d© → ∀T. ⇧*[f] T ≘ U →
∃∃K1. ⇩*[b,f] L1 ≘ K1 & K1 ⪤[R,T] K2.
definition f_transitive_next:
relation3 … ≝ λR1,R2,R3.
- â\88\80f,L,T. L â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f →
+ â\88\80f,L,T. L â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f →
∀g,I,K,i. ⇩[i] L ≘ K.ⓘ[I] → ↑g = ⫰*[i] f →
R_pw_transitive_sex (cext2 R1) (cext2 R2) (cext2 R3) (cext2 R1) cfull g K I.
definition f_confluent1_next: relation2 … ≝ λR1,R2.
- â\88\80f,L,T. L â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f →
+ â\88\80f,L,T. L â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f →
∀g,I,K,i. ⇩[i] L ≘ K.ⓘ[I] → ↑g = ⫰*[i] f →
R_pw_confluent1_sex (cext2 R1) (cext2 R1) (cext2 R2) cfull g K I.
(* Basic_2A1: uses: llpx_sn_inv_lift_O *)
lemma rex_inv_lifts_bi (R):
- â\88\80L1,L2,U. L1 ⪤[R,U] L2 â\86\92 â\88\80b,f. ð\9d\90\94â\9dªfâ\9d« →
+ â\88\80L1,L2,U. L1 ⪤[R,U] L2 â\86\92 â\88\80b,f. ð\9d\90\94â\9d¨fâ\9d© →
∀K1,K2. ⇩*[b,f] L1 ≘ K1 → ⇩*[b,f] L2 ≘ K2 →
∀T. ⇧*[f] T ≘ U → K1 ⪤[R,T] K2.
#R #L1 #L2 #U #HL12 #b #f #Hf #K1 #K2 #HLK1 #HLK2 #T #HTU
lemma rex_inv_lref_unit_sn (R):
∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K1. ⇩[i] L1 ≘ K1.ⓤ[I] →
- â\88\83â\88\83f,K2. â\87©[i] L2 â\89\98 K2.â\93¤[I] & K1 ⪤[cext2 R,cfull,f] K2 & ð\9d\90\88â\9dªfâ\9d«.
+ â\88\83â\88\83f,K2. â\87©[i] L2 â\89\98 K2.â\93¤[I] & K1 ⪤[cext2 R,cfull,f] K2 & ð\9d\90\88â\9d¨fâ\9d©.
#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/
lemma rex_inv_lref_unit_dx (R):
∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K2. ⇩[i] L2 ≘ K2.ⓤ[I] →
- â\88\83â\88\83f,K1. â\87©[i] L1 â\89\98 K1.â\93¤[I] & K1 ⪤[cext2 R,cfull,f] K2 & ð\9d\90\88â\9dªfâ\9d«.
+ â\88\83â\88\83f,K1. â\87©[i] L1 â\89\98 K1.â\93¤[I] & K1 ⪤[cext2 R,cfull,f] K2 & ð\9d\90\88â\9d¨fâ\9d©.
#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/
(* GENERIC EXTENSION ON REFERRED ENTRIES OF A CONTEXT-SENSITIVE REALTION ****)
definition R_fsge_compatible: predicate (relation3 …) ≝ λRN.
- â\88\80L,T1,T2. RN L T1 T2 â\86\92 â\9dªL,T2â\9d« â\8a\86 â\9dªL,T1â\9d«.
+ â\88\80L,T1,T2. RN L T1 T2 â\86\92 â\9d¨L,T2â\9d© â\8a\86 â\9d¨L,T1â\9d©.
definition rex_fsge_compatible: predicate (relation3 …) ≝ λRN.
- â\88\80L1,L2,T. L1 ⪤[RN,T] L2 â\86\92 â\9dªL2,Tâ\9d« â\8a\86 â\9dªL1,Tâ\9d«.
+ â\88\80L1,L2,T. L1 ⪤[RN,T] L2 â\86\92 â\9d¨L2,Tâ\9d© â\8a\86 â\9d¨L1,Tâ\9d©.
definition rex_fsle_compatible: predicate (relation3 …) ≝ λRN.
- â\88\80L1,L2,T. L1 ⪤[RN,T] L2 â\86\92 â\9dªL1,Tâ\9d« â\8a\86 â\9dªL2,Tâ\9d«.
+ â\88\80L1,L2,T. L1 ⪤[RN,T] L2 â\86\92 â\9d¨L1,Tâ\9d© â\8a\86 â\9d¨L2,Tâ\9d©.
(* Basic inversions with free variables inclusion for restricted closures ***)
lemma frees_sex_conf_fsge (R):
rex_fsge_compatible R →
- â\88\80L1,T,f1. L1 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f1 →
+ â\88\80L1,T,f1. L1 â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f1 →
∀L2. L1 ⪤[cext2 R,cfull,f1] L2 →
- â\88\83â\88\83f2. L2 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f2 & f2 ⊆ f1.
+ â\88\83â\88\83f2. L2 â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f2 & f2 ⊆ f1.
#R #HR #L1 #T #f1 #Hf1 #L2 #H1L
lapply (HR L1 L2 T ?) /2 width=3 by ex2_intro/ #H2L
@(fsle_frees_trans_eq … H2L … Hf1) /3 width=4 by sex_fwd_length, sym_eq/
lemma frees_sex_conf_fsle (R):
rex_fsle_compatible R →
- â\88\80L1,T,f1. L1 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f1 →
+ â\88\80L1,T,f1. L1 â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f1 →
∀L2. L1 ⪤[cext2 R,cfull,f1] L2 →
- â\88\83â\88\83f2. L2 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f2 & f1 ⊆ f2.
+ â\88\83â\88\83f2. L2 â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f2 & f1 ⊆ f2.
#R #HR #L1 #T #f1 #Hf1 #L2 #H1L
lapply (HR L1 L2 T ?) /2 width=3 by ex2_intro/ #H2L
@(fsle_frees_conf_eq … H2L … Hf1) /3 width=4 by sex_fwd_length, sym_eq/
(* Note: we just need lveq_inv_refl: ∀L, n1, n2. L ≋ⓧ*[n1, n2] L → ∧∧ 0 = n1 & 0 = n2 *)
lemma fsge_rex_trans (R):
- â\88\80L1,T1,T2. â\9dªL1,T1â\9d« â\8a\86 â\9dªL1,T2â\9d« →
+ â\88\80L1,T1,T2. â\9d¨L1,T1â\9d© â\8a\86 â\9d¨L1,T2â\9d© →
∀L2. L1 ⪤[R,T2] L2 → L1 ⪤[R,T1] L2.
#R #L1 #T1 #T2 * #n1 #n2 #f1 #f2 #Hf1 #Hf2 #Hn #Hf #L2 #HL12
elim (lveq_inj_length … Hn ?) // #H1 #H2 destruct
lemma rex_inv_frees (R):
∀L1,L2,T. L1 ⪤[R,T] L2 →
- â\88\80f. L1 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f → L1 ⪤[cext2 R,cfull,f] L2.
+ â\88\80f. L1 â\8a¢ ð\9d\90\85+â\9d¨Tâ\9d© ≘ f → L1 ⪤[cext2 R,cfull,f] L2.
#R #L1 #L2 #T * /3 width=6 by frees_mono, sex_eq_repl_back/
qed-.
(* Properies with simple (neutral) terms ************************************)
(* Basic_2A1: was: simple_tsts_repl_dx *)
-lemma simple_teqo_repl_dx: â\88\80T1,T2. T1 ~ T2 â\86\92 ð\9d\90\92â\9dªT1â\9d« â\86\92 ð\9d\90\92â\9dªT2â\9d«.
+lemma simple_teqo_repl_dx: â\88\80T1,T2. T1 ~ T2 â\86\92 ð\9d\90\92â\9d¨T1â\9d© â\86\92 ð\9d\90\92â\9d¨T2â\9d©.
#T1 #T2 * -T1 -T2 //
#I #V1 #V2 #T1 #T2 #H
elim (simple_inv_pair … H) -H #J #H destruct //
qed-.
(* Basic_2A1: was: simple_tsts_repl_sn *)
-lemma simple_teqo_repl_sn: â\88\80T1,T2. T1 ~ T2 â\86\92 ð\9d\90\92â\9dªT2â\9d« â\86\92 ð\9d\90\92â\9dªT1â\9d«.
+lemma simple_teqo_repl_sn: â\88\80T1,T2. T1 ~ T2 â\86\92 ð\9d\90\92â\9d¨T2â\9d© â\86\92 ð\9d\90\92â\9d¨T1â\9d©.
/3 width=3 by simple_teqo_repl_dx, teqo_sym/ qed-.
(* Basic_1: was only: iso_flats_lref_bind_false iso_flats_flat_bind_false *)
(* Basic_2A1: was: tsts_inv_bind_applv_simple *)
lemma teqo_inv_applv_bind_simple (p) (I):
- â\88\80Vs,V2,T1,T2. â\92¶Vs.T1 ~ â\93\91[p,I]V2.T2 â\86\92 ð\9d\90\92â\9dªT1â\9d« → ⊥.
+ â\88\80Vs,V2,T1,T2. â\92¶Vs.T1 ~ â\93\91[p,I]V2.T2 â\86\92 ð\9d\90\92â\9d¨T1â\9d© → ⊥.
#p #I #Vs #V2 #T1 #T2 #H elim (teqo_inv_pair2 … H) -H
#V0 #T0 elim Vs -Vs normalize
[ #H destruct #H /2 width=5 by simple_inv_bind/
(* Properties with simple terms *********************************************)
lemma teqw_simple_trans:
- â\88\80T1,T2. T1 â\89\83 T2 â\86\92 ð\9d\90\92â\9dªT1â\9d« â\86\92 ð\9d\90\92â\9dªT2â\9d«.
+ â\88\80T1,T2. T1 â\89\83 T2 â\86\92 ð\9d\90\92â\9d¨T1â\9d© â\86\92 ð\9d\90\92â\9d¨T2â\9d©.
#T1 #T2 * -T1 -T2
[4,5: #p #V1 #V2 #T1 #T2 [ #_ ] #H
elim (simple_inv_bind … H)
(* Basic inversion lemmas ***************************************************)
-fact simple_inv_bind_aux: â\88\80T. ð\9d\90\92â\9dªTâ\9d« → ∀p,J,W,U. T = ⓑ[p,J]W.U → ⊥.
+fact simple_inv_bind_aux: â\88\80T. ð\9d\90\92â\9d¨Tâ\9d© → ∀p,J,W,U. T = ⓑ[p,J]W.U → ⊥.
#T * -T
[ #I #p #J #W #U #H destruct
| #I #V #T #a #J #W #U #H destruct
]
qed-.
-lemma simple_inv_bind: â\88\80p,I,V,T. ð\9d\90\92â\9dªâ\93\91[p,I] V. Tâ\9d« → ⊥.
+lemma simple_inv_bind: â\88\80p,I,V,T. ð\9d\90\92â\9d¨â\93\91[p,I] V. Tâ\9d© → ⊥.
/2 width=7 by simple_inv_bind_aux/ qed-.
-lemma simple_inv_pair: â\88\80I,V,T. ð\9d\90\92â\9dªâ\91¡[I]V.Tâ\9d« → ∃J. I = Flat2 J.
+lemma simple_inv_pair: â\88\80I,V,T. ð\9d\90\92â\9d¨â\91¡[I]V.Tâ\9d© → ∃J. I = Flat2 J.
* /2 width=2 by ex_intro/
#p #I #V #T #H elim (simple_inv_bind … H)
qed-.
(* Basic properties *********************************************************)
-lemma simple_dec_ex (X): â\88¨â\88¨ ð\9d\90\92â\9dªXâ\9d« | ∃∃p,I,T,U. X = ⓑ[p,I]T.U.
+lemma simple_dec_ex (X): â\88¨â\88¨ ð\9d\90\92â\9d¨Xâ\9d© | ∃∃p,I,T,U. X = ⓑ[p,I]T.U.
* [ /2 width=1 by simple_atom, or_introl/ ]
* [| /2 width=1 by simple_flat, or_introl/ ]
/3 width=5 by ex1_4_intro, or_intror/
(* Properties with simple terms *********************************************)
-lemma applv_simple: â\88\80T,Vs. ð\9d\90\92â\9dªTâ\9d« â\86\92 ð\9d\90\92â\9dªâ\92¶Vs.Tâ\9d«.
+lemma applv_simple: â\88\80T,Vs. ð\9d\90\92â\9d¨Tâ\9d© â\86\92 ð\9d\90\92â\9d¨â\92¶Vs.Tâ\9d©.
#T * //
qed.
[ { "static typing" * } {
[ { "generic reducibility" * } {
[ [ "restricted refinement for lenvs" ] "lsubc" + "( ? ⊢ ? ⫃[?] ? )" "lsubc_drops" + "lsubc_lsubr" + "lsubc_lsuba" * ]
- [ [ "candidates" ] "gcp_cr" + "( â\9dª?,?,?â\9d« ϵ ⟦?⟧[?] )" "gcp_aaa" * ]
+ [ [ "candidates" ] "gcp_cr" + "( â\9d¨?,?,?â\9d© ϵ ⟦?⟧[?] )" "gcp_aaa" * ]
[ [ "computation properties" ] "gcp" *]
}
]
[ { "atomic arity assignment" * } {
[ [ "restricted refinement for lenvs" ] "lsuba" + "( ? ⊢ ? ⫃⁝ ? )" "lsuba_drops" + "lsuba_lsubr" + "lsuba_aaa" + "lsuba_lsuba" * ]
- [ [ "for terms" ] "aaa" + "( â\9dª?,?â\9d« ⊢ ? ⁝ ? )" "aaa_drops" + "aaa_fqus" + "aaa_reqg" + "aaa_feqg" + "aaa_aaa" + "aaa_dec" * ]
+ [ [ "for terms" ] "aaa" + "( â\9d¨?,?â\9d© ⊢ ? ⁝ ? )" "aaa_drops" + "aaa_fqus" + "aaa_reqg" + "aaa_feqg" + "aaa_aaa" + "aaa_dec" * ]
}
]
[ { "sort-irrelevant equivalence" * } {
- [ [ "for closures on referred entries" ] "feqx" + "( â\9dª?,?,?â\9d« â\89\85 â\9dª?,?,?â\9d« )" "feqx_feqx" * ]
+ [ [ "for closures on referred entries" ] "feqx" + "( â\9d¨?,?,?â\9d© â\89\85 â\9d¨?,?,?â\9d© )" "feqx_feqx" * ]
[ [ "for lenvs on referred entries" ] "reqx" + "( ? ≅[?] ? )" "reqx_reqx" * ]
}
]
}
]
[ { "generic equivalence" * } {
- [ [ "for closures on referred entries" ] "feqg" + "( â\9dª?,?,?â\9d« â\89\9b[?] â\9dª?,?,?â\9d« )" "feqg_length" + "feqg_fqu" + "feqg_fqup" + "feqg_fqus" + "feqg_feqg" * ]
+ [ [ "for closures on referred entries" ] "feqg" + "( â\9d¨?,?,?â\9d© â\89\9b[?] â\9d¨?,?,?â\9d© )" "feqg_length" + "feqg_fqu" + "feqg_fqup" + "feqg_fqus" + "feqg_feqg" * ]
[ [ "for lenvs on referred entries" ] "reqg" + "( ? ≛[?,?] ? )" "reqg_length" + "reqg_drops" + "reqg_fqup" + "reqg_fqus" + "reqg_reqg" * ]
}
]
}
]
[ { "context-sensitive free variables" * } {
- [ [ "inclusion for restricted closures" ] "fsle" + "( â\9dª?,?â\9d« â\8a\86 â\9dª?,?â\9d« )" "fsle_length" + "fsle_drops" + "fsle_fqup" + "fsle_fsle" * ]
- [ [ "restricted refinement for lenvs" ] "lsubf" + "( â\9dª?,?â\9d« â«\83ð\9d\90\85+ â\9dª?,?â\9d« )" "lsubf_lsubr" + "lsubf_frees" + "lsubf_lsubf" * ]
- [ [ "for terms" ] "frees" + "( ? â\8a¢ ð\9d\90\85+â\9dª?â\9d« ≘ ? )" "frees_append" + "frees_drops" + "frees_fqup" + "frees_frees" * ]
+ [ [ "inclusion for restricted closures" ] "fsle" + "( â\9d¨?,?â\9d© â\8a\86 â\9d¨?,?â\9d© )" "fsle_length" + "fsle_drops" + "fsle_fqup" + "fsle_fsle" * ]
+ [ [ "restricted refinement for lenvs" ] "lsubf" + "( â\9d¨?,?â\9d© â«\83ð\9d\90\85+ â\9d¨?,?â\9d© )" "lsubf_lsubr" + "lsubf_frees" + "lsubf_lsubf" * ]
+ [ [ "for terms" ] "frees" + "( ? â\8a¢ ð\9d\90\85+â\9d¨?â\9d© ≘ ? )" "frees_append" + "frees_drops" + "frees_fqup" + "frees_frees" * ]
}
]
[ { "local environments" * } {
class "grass"
[ { "s-computation" * } {
[ { "iterated structural successor" * } {
- [ [ "for closures" ] "fqus" + "( â\9dª?,?,?â\9d« â¬\82*[?] â\9dª?,?,?â\9d« )" + "( â\9dª?,?,?â\9d« â¬\82* â\9dª?,?,?â\9d« )" "fqus_weight" + "fqus_drops" + "fqus_fqup" + "fqus_fqus" * ]
- [ [ "proper for closures" ] "fqup" + "( â\9dª?,?,?â\9d« â¬\82+[?] â\9dª?,?,?â\9d« )" + "( â\9dª?,?,?â\9d« â¬\82+ â\9dª?,?,?â\9d« )" "fqup_weight" + "fqup_drops" + "fqup_fqup" * ]
+ [ [ "for closures" ] "fqus" + "( â\9d¨?,?,?â\9d© â¬\82*[?] â\9d¨?,?,?â\9d© )" + "( â\9d¨?,?,?â\9d© â¬\82* â\9d¨?,?,?â\9d© )" "fqus_weight" + "fqus_drops" + "fqus_fqup" + "fqus_fqus" * ]
+ [ [ "proper for closures" ] "fqup" + "( â\9d¨?,?,?â\9d© â¬\82+[?] â\9d¨?,?,?â\9d© )" + "( â\9d¨?,?,?â\9d© â¬\82+ â\9d¨?,?,?â\9d© )" "fqup_weight" + "fqup_drops" + "fqup_fqup" * ]
}
]
}
class "yellow"
[ { "s-transition" * } {
[ { "structural successor" * } {
- [ [ "for closures" ] "fquq" + "( â\9dª?,?,?â\9d« â¬\82⸮[?] â\9dª?,?,?â\9d« )" + "( â\9dª?,?,?â\9d« â¬\82⸮ â\9dª?,?,?â\9d« )" "fquq_length" + "fquq_weight" * ]
- [ [ "proper for closures" ] "fqu" + "( â\9dª?,?,?â\9d« â¬\82[?] â\9dª?,?,?â\9d« )" + "( â\9dª?,?,?â\9d« â¬\82 â\9dª?,?,?â\9d« )" "fqu_length" + "fqu_weight" + "fqu_teqg" * ]
+ [ [ "for closures" ] "fquq" + "( â\9d¨?,?,?â\9d© â¬\82⸮[?] â\9d¨?,?,?â\9d© )" + "( â\9d¨?,?,?â\9d© â¬\82⸮ â\9d¨?,?,?â\9d© )" "fquq_length" + "fquq_weight" * ]
+ [ [ "proper for closures" ] "fqu" + "( â\9d¨?,?,?â\9d© â¬\82[?] â\9d¨?,?,?â\9d© )" + "( â\9d¨?,?,?â\9d© â¬\82 â\9d¨?,?,?â\9d© )" "fqu_length" + "fqu_weight" + "fqu_teqg" * ]
}
]
}
]
[ { "terms" * } {
[ [ "" ] "term_vector" + "( Ⓐ?.? )" * ]
- [ [ "" ] "term_simple" + "( ð\9d\90\92â\9dª?â\9d« )" * ]
+ [ [ "" ] "term_simple" + "( ð\9d\90\92â\9d¨?â\9d© )" * ]
[ [ "" ] "term_weight" + "( ♯❨?❩ )" * ]
[ [ "" ] "term" * ]
}