(* NOTATION FOR THE FORMAL SYSTEM α *****************************************)
-notation "hvbox( - 𝛌 . break term 55 T )"
+notation "hvbox( -𝛌. break term 55 T )"
non associative with precedence 55
for @{ 'SnAbstNeg $T }.
(* NOTATION FOR THE FORMAL SYSTEM α *****************************************)
-notation "hvbox( § term 90 p . break term 55 T )"
+notation "hvbox( § term 90 l. break term 55 T )"
non associative with precedence 55
- for @{ 'SnGRef $p $T }.
+ for @{ 'SnGRef $l $T }.
(* NOTATION FOR THE FORMAL SYSTEM α *****************************************)
-notation "hvbox( ① { term 46 I } . break term 55 T )"
+notation "hvbox( ① [ term 46 I ]. break term 55 T )"
non associative with precedence 55
for @{ 'SnItem1 $I $T }.
(* NOTATION FOR THE FORMAL SYSTEM α *****************************************)
-notation "hvbox( # term 90 i . break term 55 T )"
+notation "hvbox( # term 90 i. break term 55 T )"
non associative with precedence 55
for @{ 'SnLRef $i $T }.
(* NOTATION FOR THE FORMAL SYSTEM α *****************************************)
-notation "hvbox( 𝛑 { term 46 a } break term 55 T1 . break term 55 T2 )"
+notation "hvbox( 𝛑[ term 46 p ] break term 55 T1. break term 55 T2 )"
non associative with precedence 55
- for @{ 'SnProj $a $T1 $T2 }.
+ for @{ 'SnProj $p $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM α *****************************************)
-notation "hvbox( - 𝛑 term 55 T1 . break term 55 T2 )"
+notation "hvbox( -𝛑 term 55 T1. break term 55 T2 )"
non associative with precedence 55
for @{ 'SnProjNeg $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM α *****************************************)
-notation "hvbox( + 𝛑 term 55 T1 . break term 55 T2 )"
+notation "hvbox( +𝛑 term 55 T1. break term 55 T2 )"
non associative with precedence 55
for @{ 'SnProjPos $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM α *****************************************)
-notation "hvbox( ⋆ term 90 k . break term 55 T )"
+notation "hvbox( ⋆ term 90 s. break term 55 T )"
non associative with precedence 55
- for @{ 'SnStar $k $T }.
+ for @{ 'SnStar $s $T }.
'SnItem2 I T1 T2 = (TPair I T1 T2).
interpretation "character (term)"
- 'SnStar k T = (TUnit (Char k) T).
+ 'SnStar s T = (TUnit (Char s) T).
interpretation "local reference (term)"
'SnLRef i T = (TUnit (LRef i) T).
interpretation "global reference (term)"
- 'SnGRef p T = (TUnit (GRef p) T).
+ 'SnGRef l T = (TUnit (GRef l) T).
interpretation "negative abbreviation (term)"
'SnAbbrNeg T = (TUnit Decl T).
'SnAbstPos T1 T2 = (TPair Abst T1 T2).
interpretation "abbreviation (term)"
- 'SnAbbr a T1 T2 = (TPair (Abbr a) T1 T2).
+ 'SnAbbr p T1 T2 = (TPair (Abbr p) T1 T2).
interpretation "positive abbreviation (term)"
'SnAbbrPos T1 T2 = (TPair (Abbr true) T1 T2).
'SnAbbrNeg T1 T2 = (TPair (Abbr false) T1 T2).
interpretation "projection (term)"
- 'SnProj a T1 T2 = (TPair (Proj a) T1 T2).
+ 'SnProj p T1 T2 = (TPair (Proj p) T1 T2).
interpretation "positive projection (term)"
'SnProjPos T1 T2 = (TPair (Proj true) T1 T2).
let rec tappend T U on T ≝ match T with
[ TAtom ⇒ U
-| TUnit I T ⇒ ①{I}.(tappend T U)
-| TPair I V T ⇒ ②{I}V.(tappend T U)
+| TUnit I T ⇒ ①[I].(tappend T U)
+| TPair I V T ⇒ ②[I]V.(tappend T U)
].
interpretation "append (term)" 'plus T U = (tappend T U).
(* Note: extended validity of a closure, height of cnv_appl > 1 *)
lemma cnv_extended (h) (p) (G) (L):
- â\88\80s. â¦\83G,L.â\93\9bâ\8b\86s.â\93\9bâ\93\9b{p}â\8b\86s.â\8b\86s.â\93\9b#0â¦\84 ⊢ ⓐ#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. â¦\83G,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â¦\84 ⊢ ⓐ#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. â¦\83G,L.â\93\9bâ\8b\86sâ¦\84 ⊢ ⓐ#O.#O ➡[h] X → ⓐ#O.#O = X.
+ â\88\80X. â\9dªG,L.â\93\9bâ\8b\86sâ\9d« ⊢ ⓐ#O.#O ➡[h] 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. â¦\83G,Lâ¦\84 ⊢ Delta s ➡[h] X → Delta s = X.
+ â\88\80X. â\9dªG,Lâ\9d« ⊢ Delta s ➡[h] 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): â¦\83G,Lâ¦\84 ⊢ Omega1 s ➡[h] Omega2 s.
+theorem cpr_Omega_12 (h) (G) (L) (s): â\9dªG,Lâ\9d« ⊢ Omega1 s ➡[h] Omega2 s.
/2 width=1 by cpm_beta/ qed.
-theorem cpr_Omega_23 (h) (G) (L) (s): â¦\83G,Lâ¦\84 ⊢ Omega2 s ➡[h] Omega3 s.
+theorem cpr_Omega_23 (h) (G) (L) (s): â\9dªG,Lâ\9d« ⊢ Omega2 s ➡[h] 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): â¦\83G,Lâ¦\84 ⊢ Omega3 s ➡[h] Omega1 s.
+theorem cpr_Omega_31 (h) (G) (L) (s): â\9dªG,Lâ\9d« ⊢ Omega3 s ➡[h] 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. â¦\83G,Lâ¦\84 ⊢ Omega1 s ➡[h] X →
+ â\88\80X. â\9dªG,Lâ\9d« ⊢ Omega1 s ➡[h] 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): â¦\83G,Lâ¦\84 ⊢ Omega2 s ➡[h] Omega1 s → ⊥.
+theorem cpr_Omega_21_false (h) (G) (L) (s): â\9dªG,Lâ\9d« ⊢ Omega2 s ➡[h] Omega1 s → ⊥.
#h #G #L #s #H elim (cpm_inv_bind1 … H) -H *
[ #W #T #_ #_ whd in ⊢ (??%?→?); #H destruct
| #X #H #_ #_ #_
⇧*[f] (ApplDelta s0 s) ≘ (ApplDelta s0 s).
/5 width=1 by lifts_sort, lifts_lref, lifts_bind, lifts_flat/ qed.
-lemma cpr_ApplOmega_12 (h) (G) (L) (s0) (s): â¦\83G,Lâ¦\84 ⊢ ApplOmega1 s0 s ➡[h] ApplOmega2 s0 s.
+lemma cpr_ApplOmega_12 (h) (G) (L) (s0) (s): â\9dªG,Lâ\9d« ⊢ ApplOmega1 s0 s ➡[h] ApplOmega2 s0 s.
/2 width=1 by cpm_beta/ qed.
-lemma cpr_ApplOmega_23 (h) (G) (L) (s0) (s): â¦\83G,Lâ¦\84 ⊢ ApplOmega2 s0 s ➡[h] ApplOmega3 s0 s.
+lemma cpr_ApplOmega_23 (h) (G) (L) (s0) (s): â\9dªG,Lâ\9d« ⊢ ApplOmega2 s0 s ➡[h] ApplOmega3 s0 s.
/6 width=3 by cpm_eps, cpm_appl, cpm_bind, cpm_delta, ApplDelta_lifts/ qed.
-lemma cpr_ApplOmega_34 (h) (G) (L) (s0) (s): â¦\83G,Lâ¦\84 ⊢ ApplOmega3 s0 s ➡[h] ApplOmega4 s0 s.
+lemma cpr_ApplOmega_34 (h) (G) (L) (s0) (s): â\9dªG,Lâ\9d« ⊢ ApplOmega3 s0 s ➡[h] ApplOmega4 s0 s.
/4 width=3 by cpm_zeta, ApplDelta_lifts, lifts_sort, lifts_flat/ qed.
-lemma cpxs_ApplOmega_14 (h) (G) (L) (s0) (s): â¦\83G,Lâ¦\84 ⊢ ApplOmega1 s0 s ⬈*[h] ApplOmega4 s0 s.
+lemma cpxs_ApplOmega_14 (h) (G) (L) (s0) (s): â\9dªG,Lâ\9d« ⊢ ApplOmega1 s0 s ⬈*[h] ApplOmega4 s0 s.
/5 width=4 by cpxs_strap1, cpm_fwd_cpx/ qed.
-lemma fqup_ApplOmega_41 (G) (L) (s0) (s): â¦\83G,L,ApplOmega4 s0 sâ¦\84 â¬\82+ â¦\83G,L,ApplOmega1 s0 sâ¦\84.
+lemma fqup_ApplOmega_41 (G) (L) (s0) (s): â\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 (h) (G) (L) (s0) (s): â¦\83G,L,ApplOmega1 s0 sâ¦\84 >[h] â¦\83G,L,ApplOmega1 s0 sâ¦\84.
+theorem fpbg_refl (h) (G) (L) (s0) (s): â\9dªG,L,ApplOmega1 s0 sâ\9d« >[h] â\9dªG,L,ApplOmega1 s0 sâ\9d«.
/3 width=5 by fpbs_fpbg_trans, fqup_fpbg, cpxs_fpbs/ qed.
rec definition flifts f U on U ≝ match U with
[ TAtom I ⇒ match I with
[ Sort _ ⇒ U
- | LRef i â\87\92 #(f@â\9d´iâ\9dµ)
+ | LRef i â\87\92 #(f@â\9d¨iâ\9d©)
| GRef _ ⇒ U
]
| TPair I V T ⇒ match I with
- [ Bind2 p I ⇒ ⓑ{p,I}(flifts f V).(flifts (⫯f) T)
- | Flat2 I ⇒ ⓕ{I}(flifts f V).(flifts f T)
+ [ Bind2 p I ⇒ ⓑ[p,I](flifts f V).(flifts (⫯f) T)
+ | Flat2 I ⇒ ⓕ[I](flifts f V).(flifts f T)
]
].
(* Basic properties *********************************************************)
-lemma flifts_lref (f) (i): â\86\91*[f](#i) = #(f@â\9d´iâ\9dµ).
+lemma flifts_lref (f) (i): â\86\91*[f](#i) = #(f@â\9d¨iâ\9d©).
// qed.
-lemma flifts_bind (f) (p) (I) (V) (T): ↑*[f](ⓑ{p,I}V.T) = ⓑ{p,I}↑*[f]V.↑*[⫯f]T.
+lemma flifts_bind (f) (p) (I) (V) (T): ↑*[f](ⓑ[p,I]V.T) = ⓑ[p,I]↑*[f]V.↑*[⫯f]T.
// qed.
-lemma flifts_flat (f) (I) (V) (T): ↑*[f](ⓕ{I}V.T) = ⓕ{I}↑*[f]V.↑*[f]T.
+lemma flifts_flat (f) (I) (V) (T): ↑*[f](ⓕ[I]V.T) = ⓕ[I]↑*[f]V.↑*[f]T.
// qed.
(* Main properties **********************************************************)
/4 width=1 by apply_basic_ge, (* 2x *) eq_f/
qed-.
-lemma flifts_basic_bind (p) (I) (V) (T) (d) (h): ↑[d,h](ⓑ{p,I}V.T) = ⓑ{p,I}(↑[d,h]V).(↑[↑d,h]T).
+lemma flifts_basic_bind (p) (I) (V) (T) (d) (h): ↑[d,h](ⓑ[p,I]V.T) = ⓑ[p,I](↑[d,h]V).(↑[↑d,h]T).
// qed.
// qed.
lemma mf_bind (p) (I): ∀gv,lv,V,T.
- ●[gv,lv]ⓑ{p,I}V.T = ⓑ{p,I}●[gv,lv]V.●[⇡[0]gv,⇡[0←#0]lv]T.
+ ●[gv,lv]ⓑ[p,I]V.T = ⓑ[p,I]●[gv,lv]V.●[⇡[0]gv,⇡[0←#0]lv]T.
// qed.
lemma mf_flat (I): ∀gv,lv,V,T.
- ●[gv,lv]ⓕ{I}V.T = ⓕ{I}●[gv,lv]V.●[gv,lv]T.
+ ●[gv,lv]ⓕ[I]V.T = ⓕ[I]●[gv,lv]V.●[gv,lv]T.
// qed.
(* Properties with relocation ***********************************************)
-lemma mf_delta_drops (h) (G): â\88\80K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ➡[h] V2 →
+lemma mf_delta_drops (h) (G): â\88\80K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡[h] V2 →
∀T,L,l. ⇩*[l] L ≘ K.ⓓV1 →
- â\88\80gv,lv. â¦\83G,Lâ¦\84 ⊢ ●[gv,⇡[l←#l]lv]T ➡[h] ●[gv,⇡[l←↑[↑l]V2]lv]T.
+ â\88\80gv,lv. â\9dªG,Lâ\9d« ⊢ ●[gv,⇡[l←#l]lv]T ➡[h] ●[gv,⇡[l←↑[↑l]V2]lv]T.
#h #G #K #V1 #V2 #HV #T elim T -T * //
[ #i #L #l #HKL #gv #lv
>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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ≗{M} T2.
+ â\88\80G,L,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h] 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
| li_atom: ∀lv. li M gv (⋆) lv
| li_abbr: ∀lv,d,L,V. li M gv L lv → ⟦V⟧[gv,lv] = d → li M gv (L.ⓓV) (⫯[0←d]lv)
| li_abst: ∀lv,d,L,W. li M gv L lv → li M gv (L.ⓛW) (⫯[0←d]lv)
-| li_unit: ∀lv,d,I,L. li M gv L lv → li M gv (L.ⓤ{I}) (⫯[0←d]lv)
+| li_unit: ∀lv,d,I,L. li M gv L lv → li M gv (L.ⓤ[I]) (⫯[0←d]lv)
| li_veq : ∀lv1,lv2,L. li M gv L lv1 → lv1 ≗ lv2 → li M gv L lv2
.
/2 width=4 by li_inv_abst_aux/ qed-.
fact li_inv_unit_aux (M) (gv): is_model M →
- ∀v,Y. v ϵ ⟦Y⟧{M}[gv] → ∀I,L. Y = L.ⓤ{I} →
+ ∀v,Y. v ϵ ⟦Y⟧{M}[gv] → ∀I,L. Y = L.ⓤ[I] →
∃∃lv,d. lv ϵ ⟦L⟧[gv] & ⫯[0←d]lv ≗ v.
#M #gv #HM #v #Y #H elim H -v -Y
[ #lv #J #K #H destruct
qed-.
lemma li_inv_unit (M) (gv): is_model M →
- ∀v,I,L. v ϵ ⟦L.ⓤ{I}⟧{M}[gv] →
+ ∀v,I,L. v ϵ ⟦L.ⓤ[I]⟧{M}[gv] →
∃∃lv,d. lv ϵ ⟦L⟧[gv] & ⫯[0←d]lv ≗ v.
/2 width=4 by li_inv_unit_aux/ qed-.
(* Advanced forward lemmas **************************************************)
lemma li_fwd_bind (M) (gv): is_model M →
- ∀v,I,L. v ϵ ⟦L.ⓘ{I}⟧{M}[gv] →
+ ∀v,I,L. v ϵ ⟦L.ⓘ[I]⟧{M}[gv] →
∃∃lv,d. lv ϵ ⟦L⟧[gv] & ⫯[0←d]lv ≗ v.
#M #gv #HM #v * [ #I | * #V ] #L #H
[ /2 width=2 by li_inv_unit/
(* Note: interpretation: intensional binder *)
mi: ∀p,gv1,gv2,lv1,lv2,W,T. ⟦W⟧{M}[gv1,lv1] ≗ ⟦W⟧{M}[gv2,lv2] →
(∀d. ⟦T⟧{M}[gv1,⫯[0←d]lv1] ≗ ⟦T⟧{M}[gv2,⫯[0←d]lv2]) →
- ⟦ⓛ{p}W.T⟧[gv1,lv1] ≗ ⟦ⓛ{p}W.T⟧[gv2,lv2];
+ ⟦ⓛ[p]W.T⟧[gv1,lv1] ≗ ⟦ⓛ[p]W.T⟧[gv2,lv2];
(* Note: interpretation: abbreviation *)
- md: ∀p,gv,lv,V,T. ⟦ⓓ{p}V.T⟧{M}[gv,lv] ≗ ⟦V⟧[gv,lv] ⊕[p] ⟦T⟧[gv,⫯[0←⟦V⟧[gv,lv]]lv];
+ md: ∀p,gv,lv,V,T. ⟦ⓓ[p]V.T⟧{M}[gv,lv] ≗ ⟦V⟧[gv,lv] ⊕[p] ⟦T⟧[gv,⫯[0←⟦V⟧[gv,lv]]lv];
(* Note: interpretation: application *)
ma: ∀gv,lv,V,T. ⟦ⓐV.T⟧{M}[gv,lv] ≗ ⟦V⟧[gv,lv] @ ⟦T⟧[gv,lv];
(* Note: interpretation: ζ-equivalence *)
(* Note: interpretation: ϵ-equivalence *)
me: ∀gv,lv,W,T. ⟦ⓝW.T⟧{M}[gv,lv] ≗ ⟦T⟧[gv,lv];
(* Note: interpretation: β-requivalence *)
- mb: ∀p,gv,lv,d,W,T. d @ ⟦ⓛ{p}W.T⟧{M}[gv,lv] ≗ d ⊕[p] ⟦T⟧[gv,⫯[0←d]lv];
+ mb: ∀p,gv,lv,d,W,T. d @ ⟦ⓛ[p]W.T⟧{M}[gv,lv] ≗ d ⊕[p] ⟦T⟧[gv,⫯[0←d]lv];
(* Note: interpretation: θ-requivalence *)
mh: ∀p,d1,d2,d3. d1 @ (d2 ⊕{M}[p] d3) ≗ d2 ⊕[p] (d1 @ d3)
}.
(* Note: interpretation: extensional abstraction *)
mx: ∀p,gv1,gv2,lv1,lv2,W1,W2,T1,T2. ⟦W1⟧{M}[gv1,lv1] ≗ ⟦W2⟧{M}[gv2,lv2] →
(∀d. ⟦T1⟧{M}[gv1,⫯[0←d]lv1] ≗ ⟦T2⟧{M}[gv2,⫯[0←d]lv2]) →
- ⟦ⓛ{p}W1.T1⟧[gv1,lv1] ≗ ⟦ⓛ{p}W2.T2⟧[gv2,lv2]
+ ⟦ⓛ[p]W1.T1⟧[gv1,lv1] ≗ ⟦ⓛ[p]W2.T2⟧[gv2,lv2]
}.
record is_injective (M): Prop ≝ {
lemma ti_fwd_mx_dx (M): is_model M → is_injective M →
∀p,gv1,gv2,lv1,lv2,W1,W2,T1,T2.
- ⟦ⓛ{p}W1.T1⟧[gv1,lv1] ≗ ⟦ⓛ{p}W2.T2⟧[gv2,lv2] →
+ ⟦ⓛ[p]W1.T1⟧[gv1,lv1] ≗ ⟦ⓛ[p]W2.T2⟧[gv2,lv2] →
∀d. ⟦T1⟧{M}[gv1,⫯[0←d]lv1] ≗ ⟦T2⟧{M}[gv2,⫯[0←d]lv2].
#M #H1M #H2M #p #gv1 #gv2 #lv1 #lv2 #W1 #W2 #T1 #T2 #H12 #d
@(co_inv_dx … p d d)
lemma ti_fwd_abbr_dx (M): is_model M → is_injective M →
∀p,gv1,gv2,lv1,lv2,V1,V2,T1,T2.
- ⟦ⓓ{p}V1.T1⟧[gv1,lv1] ≗ ⟦ⓓ{p}V2.T2⟧[gv2,lv2] →
+ ⟦ⓓ[p]V1.T1⟧[gv1,lv1] ≗ ⟦ⓓ[p]V2.T2⟧[gv2,lv2] →
⟦T1⟧{M}[gv1,⫯[0←⟦V1⟧[gv1,lv1]]lv1] ≗ ⟦T2⟧{M}[gv2,⫯[0←⟦V2⟧[gv2,lv2]]lv2].
#M #H1M #H2M #p #gv1 #gv2 #lv1 #lv2 #V1 #V2 #T1 #T2 #H12
@(co_inv_dx … p (⟦V1⟧[gv1,lv1]) (⟦V2⟧[gv2,lv2]))
definition tm_dd ≝ term.
-definition tm_sq (h) (T1) (T2) â\89\9d â¦\83â\8b\86,â\8b\86â¦\84 ⊢ 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.
-definition tm_co (p) (V) (T) ≝ ⓓ{p}V.(↑[1]T).
+definition tm_co (p) (V) (T) ≝ ⓓ[p]V.(↑[1]T).
definition tm_ap (V) (T) ≝ ⓐV.T.
(* Basic properties *********************************************************)
-lemma tm_co_rw (h) (p) (V) (T): V⊕{TM h}[p]T = ⓓ{p}V.(↑[1]T).
+lemma tm_co_rw (h) (p) (V) (T): V⊕{TM h}[p]T = ⓓ[p]V.(↑[1]T).
// qed.
lemma tm_ti_sort (h) (gv) (lv): ∀s. ⟦⋆s⟧{TM h}[gv,lv] = sv … s.
// qed.
lemma tm_ti_bind (h) (p) (I): ∀gv,lv,V,T.
- ⟦ⓑ{p,I}V.T⟧{TM h}[gv,lv] = ⓑ{p,I}⟦V⟧[gv,lv].⟦T⟧{TM h}[⇡[0]gv,⇡[0←#0]lv].
+ ⟦ⓑ[p,I]V.T⟧{TM h}[gv,lv] = ⓑ[p,I]⟦V⟧[gv,lv].⟦T⟧{TM h}[⇡[0]gv,⇡[0←#0]lv].
// qed.
lemma tm_mi (h) (gv1) (gv2) (lv1) (lv2) (p) (W) (T):
⟦W⟧[gv1,lv1] ≗{TM h} ⟦W⟧[gv2,lv2] →
(∀d. ⟦T⟧[gv1,⫯[0←d]lv1] ≗ ⟦T⟧[gv2,⫯[0←d]lv2]) →
- ⟦ⓛ{p}W.T⟧[gv1,lv1] ≗ ⟦ⓛ{p}W.T⟧[gv2,lv2].
+ ⟦ⓛ[p]W.T⟧[gv1,lv1] ≗ ⟦ⓛ[p]W.T⟧[gv2,lv2].
#h #gv1 #gv2 #lv1 #lv2 #p #W #T #HW #HT
>tm_ti_bind >tm_ti_bind
@(cpcs_bind1 … HW)
*)
lemma tm_md (h) (p) (gv) (lv) (V) (T):
- ⓓ{p}V.⟦T⟧{TM h}[⇡[0]gv,⇡[0←#0]lv] ≗{TM h} V⊕{TM h}[p]⟦T⟧{TM h}[gv,⫯{TM h}[0←V]lv].
+ ⓓ[p]V.⟦T⟧{TM h}[⇡[0]gv,⇡[0←#0]lv] ≗{TM h} V⊕{TM h}[p]⟦T⟧{TM h}[gv,⫯{TM h}[0←V]lv].
#h #p #gv #lv #V #T
>tm_co_rw >(mf_lifts_basic_SO_dx T 0)
>(mf_comp … T) in ⊢ (???%);
/4 width=1 by cpc_cpcs, cpm_eps, or_introl/ qed.
lemma tm_mb (h) (p) (gv) (lv) (d) (W) (T):
- d@⟦ⓛ{p}W.T⟧[gv,lv] ≗{TM h} d⊕[p]⟦T⟧[gv,⫯[0←d]lv].
+ d@⟦ⓛ[p]W.T⟧[gv,lv] ≗{TM h} d⊕[p]⟦T⟧[gv,⫯[0←d]lv].
#h #p #gv #lv #d #W #T
@cpcs_repl [5: @tm_md |4: /4 width=2 by cpc_cpcs, cpm_beta, or_intror/ |1,2: skip ]
/5 width=1 by cpcs_bind1, cpc_cpcs, cpm_eps, or_introl/
(* Forward lemmas with generic relocation ***********************************)
fact lifts_fwd_vpush_aux (M): is_model M → is_extensional M →
- â\88\80f,T1,T2. â\87§*[f] T1 â\89\98 T2 â\86\92 â\88\80m. ð\9d\90\81â\9d´m,1â\9dµ = f →
+ â\88\80f,T1,T2. â\87§*[f] T1 â\89\98 T2 â\86\92 â\88\80m. ð\9d\90\81â\9d¨m,1â\9d© = f →
∀gv,lv,d. ⟦T1⟧[gv,lv] ≗{M} ⟦T2⟧[gv,⫯[m←d]lv].
#M #H1M #H2M #f #T1 #T2 #H elim H -f -T1 -T2
[ #f #s #m #Hf #gv #lv #d
| vpushs_atom: vpushs M gv lv (⋆) lv
| vpushs_abbr: ∀v,d,K,V. vpushs M gv lv K v → ⟦V⟧[gv,v] = d → vpushs M gv lv (K.ⓓV) (⫯[0←d]v)
| vpushs_abst: ∀v,d,K,V. vpushs M gv lv K v → vpushs M gv lv (K.ⓛV) (⫯[0←d]v)
-| vpushs_unit: ∀v,d,I,K. vpushs M gv lv K v → vpushs M gv lv (K.ⓤ{I}) (⫯[0←d]v)
+| vpushs_unit: ∀v,d,I,K. vpushs M gv lv K v → vpushs M gv lv (K.ⓤ[I]) (⫯[0←d]v)
| vpushs_repl: ∀v1,v2,L. vpushs M gv lv L v1 → v1 ≗ v2 → vpushs M gv lv L v2
.
fact vpushs_inv_unit_aux (M) (gv) (lv): is_model M →
∀y,L. L ⨁{M}[gv] lv ≘ y →
- ∀I,K. K.ⓤ{I} = L →
+ ∀I,K. K.ⓤ[I] = L →
∃∃v,d. K ⨁[gv] lv ≘ v & ⫯[0←d]v ≗ y.
#M #gv #lv #HM #y #L #H elim H -y -L
[ #Z #Y #H destruct
qed-.
lemma vpushs_inv_unit (M) (gv) (lv): is_model M →
- ∀y,I,K. K.ⓤ{I} ⨁{M}[gv] lv ≘ y →
+ ∀y,I,K. K.ⓤ[I] ⨁{M}[gv] lv ≘ y →
∃∃v,d. K ⨁[gv] lv ≘ v & ⫯[0←d]v ≗ y.
/2 width=4 by vpushs_inv_unit_aux/ qed-.
(* Basic forward lemmas *****************************************************)
lemma vpushs_fwd_bind (M) (gv) (lv): is_model M →
- ∀y,I,K. K.ⓘ{I} ⨁{M}[gv] lv ≘ y →
+ ∀y,I,K. K.ⓘ[I] ⨁{M}[gv] lv ≘ y →
∃∃v,d. K ⨁[gv] lv ≘ v & ⫯[0←d]v ≗ y.
#M #gv #lv #HM #y * [ #I | * #V ] #L #H
[ /2 width=2 by vpushs_inv_unit/
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation < "hvbox( â¦\83 term 46 G, break term 46 L â¦\84 ⊢ 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( â¦\83 term 46 G, break term 46 L â¦\84 ⊢ 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( â¦\83 term 46 G, break term 46 L â¦\84 ⊢ 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 }.
(* Basic_2A1: uses: snv *)
inductive cnv (h) (a): relation3 genv lenv term ≝
| cnv_sort: ∀G,L,s. cnv h a G L (⋆s)
-| cnv_zero: ∀I,G,K,V. cnv h a G K V → cnv h a G (K.ⓑ{I}V) (#0)
-| 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_zero: ∀I,G,K,V. cnv h a G K V → cnv h a G (K.ⓑ[I]V) (#0)
+| 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 →
- â¦\83G,Lâ¦\84 â\8a¢ V â\9e¡*[1,h] W0 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n,h] â\93\9b{p}W0.U0 → cnv h a G L (ⓐV.T)
+ â\9dªG,Lâ\9d« â\8a¢ V â\9e¡*[1,h] W0 â\86\92 â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n,h] â\93\9b[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 →
- â¦\83G,Lâ¦\84 â\8a¢ U â\9e¡*[h] U0 â\86\92 â¦\83G,Lâ¦\84 ⊢ T ➡*[1,h] U0 → cnv h a G L (ⓝU.T)
+ â\9dªG,Lâ\9d« â\8a¢ U â\9e¡*[h] U0 â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡*[1,h] 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. â¦\83G,Lâ¦\84 ⊢ X ![h,a] → X = #0 →
- â\88\83â\88\83I,K,V. â¦\83G,Kâ¦\84 â\8a¢ V ![h,a] & L = K.â\93\91{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« â\8a¢ V ![h,a] & L = K.â\93\91[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. â¦\83G,Lâ¦\84 ⊢ #0 ![h,a] →
- â\88\83â\88\83I,K,V. â¦\83G,Kâ¦\84 â\8a¢ V ![h,a] & L = K.â\93\91{I}V.
+ â\88\80G,L. â\9dªG,Lâ\9d« ⊢ #0 ![h,a] →
+ â\88\83â\88\83I,K,V. â\9dªG,Kâ\9d« â\8a¢ V ![h,a] & L = K.â\93\91[I]V.
/2 width=3 by cnv_inv_zero_aux/ qed-.
fact cnv_inv_lref_aux (h) (a):
- â\88\80G,L,X. â¦\83G,Lâ¦\84 ⊢ X ![h,a] → ∀i. X = #(↑i) →
- â\88\83â\88\83I,K. â¦\83G,Kâ¦\84 â\8a¢ #i ![h,a] & L = K.â\93\98{I}.
+ â\88\80G,L,X. â\9dªG,Lâ\9d« ⊢ X ![h,a] → ∀i. X = #(↑i) →
+ â\88\83â\88\83I,K. â\9dªG,Kâ\9d« â\8a¢ #i ![h,a] & L = K.â\93\98[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. â¦\83G,Lâ¦\84 ⊢ #↑i ![h,a] →
- â\88\83â\88\83I,K. â¦\83G,Kâ¦\84 â\8a¢ #i ![h,a] & L = K.â\93\98{I}.
+ â\88\80G,L,i. â\9dªG,Lâ\9d« ⊢ #↑i ![h,a] →
+ â\88\83â\88\83I,K. â\9dªG,Kâ\9d« â\8a¢ #i ![h,a] & L = K.â\93\98[I].
/2 width=3 by cnv_inv_lref_aux/ qed-.
-fact cnv_inv_gref_aux (h) (a): â\88\80G,L,X. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ §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. â¦\83G,Lâ¦\84 ⊢ X ![h,a] →
- ∀p,I,V,T. X = ⓑ{p,I}V.T →
- â\88§â\88§ â¦\83G,Lâ¦\84 â\8a¢ V ![h,a] & â¦\83G,L.â\93\91{I}Vâ¦\84 ⊢ T ![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].
#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. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V.T ![h,a] →
- â\88§â\88§ â¦\83G,Lâ¦\84 â\8a¢ V ![h,a] & â¦\83G,L.â\93\91{I}Vâ¦\84 ⊢ T ![h,a].
+ â\88\80p,I,G,L,V,T. â\9dªG,Lâ\9d« â\8a¢ â\93\91[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. â¦\83G,Lâ¦\84 ⊢ X ![h,a] → ∀V,T. X = ⓐV.T →
- â\88\83â\88\83n,p,W0,U0. ad a n & â¦\83G,Lâ¦\84 â\8a¢ V ![h,a] & â¦\83G,Lâ¦\84 ⊢ T ![h,a] &
- â¦\83G,Lâ¦\84 â\8a¢ V â\9e¡*[1,h] W0 & â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n,h] â\93\9b{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¡*[1,h] W0 & â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n,h] â\93\9b[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. â¦\83G,Lâ¦\84 ⊢ ⓐV.T ![h,a] →
- â\88\83â\88\83n,p,W0,U0. ad a n & â¦\83G,Lâ¦\84 â\8a¢ V ![h,a] & â¦\83G,Lâ¦\84 ⊢ T ![h,a] &
- â¦\83G,Lâ¦\84 â\8a¢ V â\9e¡*[1,h] W0 & â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n,h] â\93\9b{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¡*[1,h] W0 & â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n,h] â\93\9b[p]W0.U0.
/2 width=3 by cnv_inv_appl_aux/ qed-.
fact cnv_inv_cast_aux (h) (a):
- â\88\80G,L,X. â¦\83G,Lâ¦\84 ⊢ X ![h,a] → ∀U,T. X = ⓝU.T →
- â\88\83â\88\83U0. â¦\83G,Lâ¦\84 â\8a¢ U ![h,a] & â¦\83G,Lâ¦\84 ⊢ T ![h,a] &
- â¦\83G,Lâ¦\84 â\8a¢ U â\9e¡*[h] U0 & â¦\83G,Lâ¦\84 ⊢ T ➡*[1,h] 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] U0 & â\9dªG,Lâ\9d« ⊢ T ➡*[1,h] 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. â¦\83G,Lâ¦\84 ⊢ ⓝU.T ![h,a] →
- â\88\83â\88\83U0. â¦\83G,Lâ¦\84 â\8a¢ U ![h,a] & â¦\83G,Lâ¦\84 ⊢ T ![h,a] &
- â¦\83G,Lâ¦\84 â\8a¢ U â\9e¡*[h] U0 & â¦\83G,Lâ¦\84 ⊢ T ➡*[1,h] 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] U0 & â\9dªG,Lâ\9d« ⊢ T ➡*[1,h] 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. â¦\83G,Lâ¦\84 â\8a¢ â\93\95{I}V.T ![h,a] →
- â\88§â\88§ â¦\83G,Lâ¦\84 â\8a¢ V ![h,a] & â¦\83G,Lâ¦\84 ⊢ T ![h,a].
+ â\88\80V,T. â\9dªG,Lâ\9d« â\8a¢ â\93\95[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. â¦\83G,Lâ¦\84 â\8a¢ â\91¡{I}V.T ![h,a] â\86\92 â¦\83G,Lâ¦\84 ⊢ 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 #_
(* Forward lemmas on atomic arity assignment for terms **********************)
(* Basic_2A1: uses: snv_fwd_aaa *)
-lemma cnv_fwd_aaa (h) (a): â\88\80G,L,T. â¦\83G,Lâ¦\84 â\8a¢ T ![h,a] â\86\92 â\88\83A. â¦\83G,Lâ¦\84 ⊢ T ⁝ A.
+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.
#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. â¦\83G,Lâ¦\84 â\8a¢ T ![h,a] â\86\92 â\88\83U. â¦\83G,Lâ¦\84 ⊢ T ➡[1,h] U.
+ â\88\80T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\88\83U. â\9dªG,Lâ\9d« ⊢ T ➡[1,h] 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. â¦\83G,Lâ¦\84 â\8a¢ T ![h,a] â\86\92 â\88\83U. â¦\83G,Lâ¦\84 ⊢ T ➡*[n,h] U.
+ â\88\80T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\88\83U. â\9dªG,Lâ\9d« ⊢ T ➡*[n,h] 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. â¦\83G,Lâ¦\84 ⊢ T ![h,a] →
- â\88\80n1,U1. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n1,h] â\93\9b{p}W.U1 → ∀n2. n1 ≤ n2 →
- â\88\83â\88\83U2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n2,h] â\93\9b{p}W.U2 & â¦\83G,L.â\93\9bWâ¦\84 ⊢ U1 ➡*[n2-n1,h] U2.
+ â\88\80T. â\9dªG,Lâ\9d« ⊢ T ![h,a] →
+ â\88\80n1,U1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n1,h] â\93\9b[p]W.U1 → ∀n2. n1 ≤ n2 →
+ â\88\83â\88\83U2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n2,h] â\93\9b[p]W.U2 & â\9dªG,L.â\93\9bWâ\9d« ⊢ U1 ➡*[n2-n1,h] 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. â¦\83G,Lâ¦\84 â\8a¢ V ![h,a] â\86\92 â\88\80T. â¦\83G,Lâ¦\84 ⊢ T ![h,a] →
- â\88\80X. â¦\83G,Lâ¦\84 â\8a¢ V â\9e¡*[1,h] X â\86\92 â\88\80W. â¦\83G,Lâ¦\84 ⊢ W ➡*[h] X →
- â\88\80U. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n1,h] â\93\9b{p}W.U â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓐ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¡*[1,h] X â\86\92 â\88\80W. â\9dªG,Lâ\9d« ⊢ W ➡*[h] X →
+ â\88\80U. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n1,h] â\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. â¦\83G,Lâ¦\84 â\8a¢ T ![h,a1] â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T ![h,a] â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T ![h,ð\9d\9f\8f] â\86\92 ad a n â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T2 ![h,a] →
- Decidable â\80¦ (â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ V ![h,a] â\86\92 â\88\80T. â¦\83G,Lâ¦\84 ⊢ T ![h,a] →
- â\88\80W. â¦\83G,Lâ¦\84 ⊢ V ⬌*[h,1,0] W →
- â\88\80p,U. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n,h] â\93\9b{p}W.U â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓐ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¡*[n,h] â\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. â¦\83G,Lâ¦\84 ⊢ U ![h,a] →
- â\88\80T. â¦\83G,Lâ¦\84 â\8a¢ T ![h,a] â\86\92 â¦\83G,Lâ¦\84 â\8a¢ U â¬\8c*[h,0,1] T â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓝ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. â¦\83G,Lâ¦\84 ⊢ ⓐV.T ![h,a] →
- â\88\83â\88\83n,p,W,U. ad a n & â¦\83G,Lâ¦\84 â\8a¢ V ![h,a] & â¦\83G,Lâ¦\84 ⊢ T ![h,a] &
- â¦\83G,Lâ¦\84 â\8a¢ V â¬\8c*[h,1,0] W & â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n,h] â\93\9b{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« â\8a¢ T â\9e¡*[n,h] â\93\9b[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. â¦\83G,Lâ¦\84 ⊢ ⓝU.T ![h,a] →
- â\88§â\88§ â¦\83G,Lâ¦\84 â\8a¢ U ![h,a] & â¦\83G,Lâ¦\84 â\8a¢ T ![h,a] & â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Kâ¦\84 â\8a¢ V![h,a] â\86\92 Q G K V â\86\92 Q G (K.â\93\91{I}V) (#O)) →
- (â\88\80I,G,K,i. â¦\83G,Kâ¦\84 â\8a¢ #i![h,a] â\86\92 Q G K (#i) â\86\92 Q G (K.â\93\98{I}) (#(↑i))) →
- (â\88\80p,I,G,L,V,T. â¦\83G,Lâ¦\84 â\8a¢ V![h,a] â\86\92 â¦\83G,L.â\93\91{I}Vâ¦\84⊢T![h,a] →
- Q G L V →Q G (L.ⓑ{I}V) T →Q G L (ⓑ{p,I}V.T)
+ (â\88\80I,G,K,V. â\9dªG,Kâ\9d« â\8a¢ V![h,a] â\86\92 Q G K V â\86\92 Q G (K.â\93\91[I]V) (#O)) →
+ (â\88\80I,G,K,i. â\9dªG,Kâ\9d« â\8a¢ #i![h,a] â\86\92 Q G K (#i) â\86\92 Q G (K.â\93\98[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 â¦\83G,Lâ¦\84 â\8a¢ V![h,a] â\86\92 â¦\83G,Lâ¦\84 ⊢ T![h,a] →
- â¦\83G,Lâ¦\84 â\8a¢ V â¬\8c*[h,1,0]W â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n,h] â\93\9b{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« â\8a¢ T â\9e¡*[n,h] â\93\9b[p]W.U →
Q G L V → Q G L T → Q G L (ⓐV.T)
) →
- (â\88\80G,L,U,T. â¦\83G,Lâ¦\84â\8a¢ U![h,a] â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T![h,a] â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84⊢ 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. â¦\83G,L1â¦\84 â\8a¢ â\93ª{I} â\9e¡*[0,h] T & â¦\83G,L2â¦\84 â\8a¢ â\93ª{I} ➡*[O,h] T.
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93ª[I] â\9e¡*[0,h] T & â\9dªG,L2â\9d« â\8a¢ â\93ª[I] ➡*[O,h] 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. â¦\83G,L1â¦\84 â\8a¢ â\8b\86s â\9e¡*[1,h] T & â¦\83G,L2â¦\84 ⊢ ⋆(⫯[h]s) ➡*[h] T.
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\8b\86s â\9e¡*[1,h] T & â\9dªG,L2â\9d« ⊢ ⋆(⫯[h]s) ➡*[h] 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. â¦\83G,L,#iâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â¦\83G,Lâ¦\84⊢#i![h,a] →
+ (â\88\80G0,L0,T0. â\9dªG,L,#iâ\9d« >[h] â\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. â¦\83G,Kâ¦\84 ⊢ V ➡[n,h] XV →
+ â\88\80n,XV. â\9dªG,Kâ\9d« ⊢ V ➡[n,h] XV →
∀X. ⇧*[↑i]XV ≘ X →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ #i â\9e¡*[n,h] T & â¦\83G,L2â¦\84 ⊢ X ➡*[h] T.
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ #i â\9e¡*[n,h] T & â\9dªG,L2â\9d« ⊢ X ➡*[h] 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. â¦\83G,L,#iâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â¦\83G,Lâ¦\84⊢#i![h,a] →
+ (â\88\80G0,L0,T0. â\9dªG,L,#iâ\9d« >[h] â\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. â¦\83G,Kâ¦\84 ⊢ W ➡[n,h] XW →
+ â\88\80n,XW. â\9dªG,Kâ\9d« ⊢ W ➡[n,h] XW →
∀X. ⇧*[↑i]XW ≘ X →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ #i â\9e¡*[â\86\91n,h] T & â¦\83G,L2â¦\84 ⊢ X ➡*[h] T.
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ #i â\9e¡*[â\86\91n,h] T & â\9dªG,L2â\9d« ⊢ X ➡*[h] 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. â¦\83G,L,#iâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â¦\83G,Lâ¦\84⊢#i![h,a] →
- ∀K1,V1. ⇩*[i]L ≘ K1.ⓑ{I}V1 → ∀K2,V2. ⇩*[i]L ≘ K2.ⓑ{I}V2 →
- â\88\80n1,XV1. â¦\83G,K1â¦\84 â\8a¢ V1 â\9e¡[n1,h] XV1 â\86\92 â\88\80n2,XV2. â¦\83G,K2â¦\84 ⊢ V2 ➡[n2,h] XV2 →
+ (â\88\80G0,L0,T0. â\9dªG,L,#iâ\9d« >[h] â\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¡[n1,h] XV1 â\86\92 â\88\80n2,XV2. â\9dªG,K2â\9d« ⊢ V2 ➡[n2,h] XV2 →
∀X1. ⇧*[↑i]XV1 ≘ X1 → ∀X2. ⇧*[↑i]XV2 ≘ X2 →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ X1 â\9e¡*[n2-n1,h] T & â¦\83G,L2â¦\84 ⊢ X2 ➡*[n1-n2,h] T.
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ X1 â\9e¡*[n2-n1,h] T & â\9dªG,L2â\9d« ⊢ X2 ➡*[n1-n2,h] 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. â¦\83G,L,â\93\91{p,I}V.Tâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V.T ![h,a] →
- â\88\80V1. â¦\83G,Lâ¦\84 â\8a¢ V â\9e¡[h] V1 â\86\92 â\88\80V2. â¦\83G,Lâ¦\84 ⊢ V ➡[h] V2 →
- â\88\80n1,T1. â¦\83G,L.â\93\91{I}Vâ¦\84 â\8a¢ T â\9e¡[n1,h] T1 â\86\92 â\88\80n2,T2. â¦\83G,L.â\93\91{I}Vâ¦\84 ⊢ T ➡[n2,h] T2 →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ â\93\91{p,I}V1.T1 â\9e¡*[n2-n1,h] T & â¦\83G,L2â¦\84 â\8a¢ â\93\91{p,I}V2.T2 ➡*[n1-n2,h] T.
+ (â\88\80G0,L0,T0. â\9dªG,L,â\93\91[p,I]V.Tâ\9d« >[h] â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V.T ![h,a] →
+ â\88\80V1. â\9dªG,Lâ\9d« â\8a¢ V â\9e¡[h] V1 â\86\92 â\88\80V2. â\9dªG,Lâ\9d« ⊢ V ➡[h] V2 →
+ â\88\80n1,T1. â\9dªG,L.â\93\91[I]Vâ\9d« â\8a¢ T â\9e¡[n1,h] T1 â\86\92 â\88\80n2,T2. â\9dªG,L.â\93\91[I]Vâ\9d« ⊢ T ➡[n2,h] T2 →
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\91[p,I]V1.T1 â\9e¡*[n2-n1,h] T & â\9dªG,L2â\9d« â\8a¢ â\93\91[p,I]V2.T2 ➡*[n1-n2,h] 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
elim (cnv_inv_bind … H0) -H0 #HV0 #HT0
elim (cpr_conf_lpr … HV01 … HV02 … HL01 … HL02) #V #HV1 #HV2
-elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 (L1.ⓑ{I}V1) … (L2.ⓑ{I}V2)) [|*: /2 width=1 by fqup_fpbg, lpr_pair/ ]
+elim (cnv_cpm_conf_lpr_sub … IH … HT01 … HT02 (L1.ⓑ[I]V1) … (L2.ⓑ[I]V2)) [|*: /2 width=1 by fqup_fpbg, lpr_pair/ ]
#T #HT1 #HT2 -L0 -V0 -T0
/3 width=5 by cpms_bind_dx, ex2_intro/
qed-.
fact cnv_cpm_conf_lpr_bind_zeta_aux (h) (a) (G) (L) (V) (T):
- (â\88\80G0,L0,T0. â¦\83G,L,+â\93\93V.Tâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â¦\83G,Lâ¦\84 ⊢ +ⓓV.T ![h,a] →
- â\88\80V1. â¦\83G,Lâ¦\84 â\8a¢V â\9e¡[h] V1 â\86\92 â\88\80n1,T1. â¦\83G,L.â\93\93Vâ¦\84 ⊢ T ➡[n1,h] T1 →
- â\88\80T2. â\87§*[1]T2 â\89\98 T â\86\92 â\88\80n2,XT2. â¦\83G,Lâ¦\84 ⊢ T2 ➡[n2,h] XT2 →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ +â\93\93V1.T1 â\9e¡*[n2-n1,h] T & â¦\83G,L2â¦\84 ⊢ XT2 ➡*[n1-n2,h] T.
+ (â\88\80G0,L0,T0. â\9dªG,L,+â\93\93V.Tâ\9d« >[h] â\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] V1 â\86\92 â\88\80n1,T1. â\9dªG,L.â\93\93Vâ\9d« ⊢ T ➡[n1,h] T1 →
+ â\88\80T2. â\87§*[1]T2 â\89\98 T â\86\92 â\88\80n2,XT2. â\9dªG,Lâ\9d« ⊢ T2 ➡[n2,h] XT2 →
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ +â\93\93V1.T1 â\9e¡*[n2-n1,h] T & â\9dªG,L2â\9d« ⊢ XT2 ➡*[n1-n2,h] 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. â¦\83G,L,+â\93\93V.Tâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â¦\83G,Lâ¦\84 ⊢ +ⓓV.T ![h,a] →
+ (â\88\80G0,L0,T0. â\9dªG,L,+â\93\93V.Tâ\9d« >[h] â\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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[n1,h] XT1 â\86\92 â\88\80n2,XT2. â¦\83G,Lâ¦\84 ⊢ T2 ➡[n2,h] XT2 →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ XT1 â\9e¡*[n2-n1,h] T & â¦\83G,L2â¦\84 ⊢ XT2 ➡*[n1-n2,h] T.
+ â\88\80n1,XT1. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[n1,h] XT1 â\86\92 â\88\80n2,XT2. â\9dªG,Lâ\9d« ⊢ T2 ➡[n2,h] XT2 →
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ XT1 â\9e¡*[n2-n1,h] T & â\9dªG,L2â\9d« ⊢ XT2 ➡*[n1-n2,h] 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. â¦\83G,L,â\93\90V.Tâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â¦\83G,Lâ¦\84 ⊢ ⓐV.T ![h,a] →
- â\88\80V1. â¦\83G,Lâ¦\84 â\8a¢ V â\9e¡[h] V1 â\86\92 â\88\80V2. â¦\83G,Lâ¦\84 ⊢ V ➡[h] V2 →
- â\88\80n1,T1. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡[n1,h] T1 â\86\92 â\88\80n2,T2. â¦\83G,Lâ¦\84 ⊢ T ➡[n2,h] T2 →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ â\93\90V1.T1 â\9e¡*[n2-n1,h] T & â¦\83G,L2â¦\84 ⊢ ⓐV2.T2 ➡*[n1-n2,h] T.
+ (â\88\80G0,L0,T0. â\9dªG,L,â\93\90V.Tâ\9d« >[h] â\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] V1 â\86\92 â\88\80V2. â\9dªG,Lâ\9d« ⊢ V ➡[h] V2 →
+ â\88\80n1,T1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[n1,h] T1 â\86\92 â\88\80n2,T2. â\9dªG,Lâ\9d« ⊢ T ➡[n2,h] T2 →
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\90V1.T1 â\9e¡*[n2-n1,h] T & â\9dªG,L2â\9d« ⊢ ⓐV2.T2 ➡*[n1-n2,h] 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. â¦\83G,L,â\93\90V.â\93\9b{p}W.Tâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.â\93\9b{p}W.T ![h,a] →
- â\88\80V1. â¦\83G,Lâ¦\84 â\8a¢ V â\9e¡[h] V1 â\86\92 â\88\80V2. â¦\83G,Lâ¦\84 ⊢ V ➡[h] V2 →
- â\88\80W2. â¦\83G,Lâ¦\84 ⊢ W ➡[h] W2 →
- â\88\80n1,T1. â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p}W.T â\9e¡[n1,h] T1 â\86\92 â\88\80n2,T2. â¦\83G,L.â\93\9bWâ¦\84 ⊢ T ➡[n2,h] T2 →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ â\93\90V1.T1 â\9e¡*[n2-n1,h] T & â¦\83G,L2â¦\84 â\8a¢ â\93\93{p}ⓝW2.V2.T2 ➡*[n1-n2,h] T.
+ (â\88\80G0,L0,T0. â\9dªG,L,â\93\90V.â\93\9b[p]W.Tâ\9d« >[h] â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\90V.â\93\9b[p]W.T ![h,a] →
+ â\88\80V1. â\9dªG,Lâ\9d« â\8a¢ V â\9e¡[h] V1 â\86\92 â\88\80V2. â\9dªG,Lâ\9d« ⊢ V ➡[h] V2 →
+ â\88\80W2. â\9dªG,Lâ\9d« ⊢ W ➡[h] W2 →
+ â\88\80n1,T1. â\9dªG,Lâ\9d« â\8a¢ â\93\9b[p]W.T â\9e¡[n1,h] T1 â\86\92 â\88\80n2,T2. â\9dªG,L.â\93\9bWâ\9d« ⊢ T ➡[n2,h] T2 →
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\90V1.T1 â\9e¡*[n2-n1,h] T & â\9dªG,L2â\9d« â\8a¢ â\93\93[p]ⓝW2.V2.T2 ➡*[n1-n2,h] 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. â¦\83G,L,â\93\90V.â\93\93{p}W.Tâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.â\93\93{p}W.T ![h,a] →
- â\88\80V1. â¦\83G,Lâ¦\84 â\8a¢ V â\9e¡[h] V1 â\86\92 â\88\80V2. â¦\83G,Lâ¦\84 ⊢ V ➡[h] V2 →
- â\88\80W2. â¦\83G,Lâ¦\84 ⊢ W ➡[h] W2 →
- â\88\80n1,T1. â¦\83G,Lâ¦\84 â\8a¢ â\93\93{p}W.T â\9e¡[n1,h] T1 â\86\92 â\88\80n2,T2. â¦\83G,L.â\93\93Wâ¦\84 ⊢ T ➡[n2,h] T2 →
+ (â\88\80G0,L0,T0. â\9dªG,L,â\93\90V.â\93\93[p]W.Tâ\9d« >[h] â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\90V.â\93\93[p]W.T ![h,a] →
+ â\88\80V1. â\9dªG,Lâ\9d« â\8a¢ V â\9e¡[h] V1 â\86\92 â\88\80V2. â\9dªG,Lâ\9d« ⊢ V ➡[h] V2 →
+ â\88\80W2. â\9dªG,Lâ\9d« ⊢ W ➡[h] W2 →
+ â\88\80n1,T1. â\9dªG,Lâ\9d« â\8a¢ â\93\93[p]W.T â\9e¡[n1,h] T1 â\86\92 â\88\80n2,T2. â\9dªG,L.â\93\93Wâ\9d« ⊢ T ➡[n2,h] T2 →
∀U2. ⇧*[1]V2 ≘ U2 →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ â\93\90V1.T1 â\9e¡*[n2-n1,h] T & â¦\83G,L2â¦\84 â\8a¢ â\93\93{p}W2.ⓐU2.T2 ➡*[n1-n2,h] T.
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\90V1.T1 â\9e¡*[n2-n1,h] T & â\9dªG,L2â\9d« â\8a¢ â\93\93[p]W2.ⓐU2.T2 ➡*[n1-n2,h] 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. â¦\83G,L,â\93\90V.â\93\9b{p}W.Tâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.â\93\9b{p}W.T ![h,a] →
- â\88\80V1. â¦\83G,Lâ¦\84 â\8a¢ V â\9e¡[h] V1 â\86\92 â\88\80V2. â¦\83G,Lâ¦\84 ⊢ V ➡[h] V2 →
- â\88\80W1. â¦\83G,Lâ¦\84 â\8a¢ W â\9e¡[h] W1 â\86\92 â\88\80W2. â¦\83G,Lâ¦\84 ⊢ W ➡[h] W2 →
- â\88\80n1,T1. â¦\83G,L.â\93\9bWâ¦\84 â\8a¢ T â\9e¡[n1,h] T1 â\86\92 â\88\80n2,T2. â¦\83G,L.â\93\9bWâ¦\84 ⊢ T ➡[n2,h] T2 →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ â\93\93{p}â\93\9dW1.V1.T1 â\9e¡*[n2-n1,h] T & â¦\83G,L2â¦\84 â\8a¢ â\93\93{p}ⓝW2.V2.T2 ➡*[n1-n2,h] T.
+ (â\88\80G0,L0,T0. â\9dªG,L,â\93\90V.â\93\9b[p]W.Tâ\9d« >[h] â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\90V.â\93\9b[p]W.T ![h,a] →
+ â\88\80V1. â\9dªG,Lâ\9d« â\8a¢ V â\9e¡[h] V1 â\86\92 â\88\80V2. â\9dªG,Lâ\9d« ⊢ V ➡[h] V2 →
+ â\88\80W1. â\9dªG,Lâ\9d« â\8a¢ W â\9e¡[h] W1 â\86\92 â\88\80W2. â\9dªG,Lâ\9d« ⊢ W ➡[h] W2 →
+ â\88\80n1,T1. â\9dªG,L.â\93\9bWâ\9d« â\8a¢ T â\9e¡[n1,h] T1 â\86\92 â\88\80n2,T2. â\9dªG,L.â\93\9bWâ\9d« ⊢ T ➡[n2,h] T2 →
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\93[p]â\93\9dW1.V1.T1 â\9e¡*[n2-n1,h] T & â\9dªG,L2â\9d« â\8a¢ â\93\93[p]ⓝW2.V2.T2 ➡*[n1-n2,h] 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. â¦\83G,L,â\93\90V.â\93\93{p}W.Tâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.â\93\93{p}W.T ![h,a] →
- â\88\80V1. â¦\83G,Lâ¦\84 â\8a¢ V â\9e¡[h] V1 â\86\92 â\88\80V2. â¦\83G,Lâ¦\84 ⊢ V ➡[h] V2 →
- â\88\80W1. â¦\83G,Lâ¦\84 â\8a¢ W â\9e¡[h] W1 â\86\92 â\88\80W2. â¦\83G,Lâ¦\84 ⊢ W ➡[h] W2 →
- â\88\80n1,T1. â¦\83G,L.â\93\93Wâ¦\84 â\8a¢ T â\9e¡[n1,h] T1 â\86\92 â\88\80n2,T2. â¦\83G,L.â\93\93Wâ¦\84 ⊢ T ➡[n2,h] T2 →
+ (â\88\80G0,L0,T0. â\9dªG,L,â\93\90V.â\93\93[p]W.Tâ\9d« >[h] â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\90V.â\93\93[p]W.T ![h,a] →
+ â\88\80V1. â\9dªG,Lâ\9d« â\8a¢ V â\9e¡[h] V1 â\86\92 â\88\80V2. â\9dªG,Lâ\9d« ⊢ V ➡[h] V2 →
+ â\88\80W1. â\9dªG,Lâ\9d« â\8a¢ W â\9e¡[h] W1 â\86\92 â\88\80W2. â\9dªG,Lâ\9d« ⊢ W ➡[h] W2 →
+ â\88\80n1,T1. â\9dªG,L.â\93\93Wâ\9d« â\8a¢ T â\9e¡[n1,h] T1 â\86\92 â\88\80n2,T2. â\9dªG,L.â\93\93Wâ\9d« ⊢ T ➡[n2,h] T2 →
∀U1. ⇧*[1]V1 ≘ U1 → ∀U2. ⇧*[1]V2 ≘ U2 →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ â\93\93{p}W1.â\93\90U1.T1 â\9e¡*[n2-n1,h] T & â¦\83G,L2â¦\84 â\8a¢ â\93\93{p}W2.ⓐU2.T2 ➡*[n1-n2,h] T.
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\93[p]W1.â\93\90U1.T1 â\9e¡*[n2-n1,h] T & â\9dªG,L2â\9d« â\8a¢ â\93\93[p]W2.ⓐU2.T2 ➡*[n1-n2,h] 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. â¦\83G,L,â\93\9dV.Tâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â¦\83G,Lâ¦\84 ⊢ ⓝV.T ![h,a] →
- â\88\80n1,V1. â¦\83G,Lâ¦\84 â\8a¢ V â\9e¡[n1,h] V1 â\86\92 â\88\80n2,V2. â¦\83G,Lâ¦\84 ⊢ V ➡[n2,h] V2 →
- â\88\80T1. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡[n1,h] T1 â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T ➡[n2,h] T2 →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ â\93\9dV1.T1 â\9e¡*[n2-n1,h] T & â¦\83G,L2â¦\84 ⊢ ⓝV2.T2 ➡*[n1-n2,h] T.
+ (â\88\80G0,L0,T0. â\9dªG,L,â\93\9dV.Tâ\9d« >[h] â\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¡[n1,h] V1 â\86\92 â\88\80n2,V2. â\9dªG,Lâ\9d« ⊢ V ➡[n2,h] V2 →
+ â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[n1,h] T1 â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T ➡[n2,h] T2 →
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\9dV1.T1 â\9e¡*[n2-n1,h] T & â\9dªG,L2â\9d« ⊢ ⓝV2.T2 ➡*[n1-n2,h] 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. â¦\83G,L,â\93\9dV.Tâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â¦\83G,Lâ¦\84 ⊢ ⓝV.T ![h,a] →
- â\88\80n1,V1. â¦\83G,Lâ¦\84 ⊢ V ➡[n1,h] V1 →
- â\88\80T1. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡[n1,h] T1 â\86\92 â\88\80n2,T2. â¦\83G,Lâ¦\84 ⊢ T ➡[n2,h] T2 →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ â\93\9dV1.T1 â\9e¡*[n2-n1,h] T & â¦\83G,L2â¦\84 ⊢ T2 ➡*[n1-n2,h] T.
+ (â\88\80G0,L0,T0. â\9dªG,L,â\93\9dV.Tâ\9d« >[h] â\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 ➡[n1,h] V1 →
+ â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[n1,h] T1 â\86\92 â\88\80n2,T2. â\9dªG,Lâ\9d« ⊢ T ➡[n2,h] T2 →
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\9dV1.T1 â\9e¡*[n2-n1,h] T & â\9dªG,L2â\9d« ⊢ T2 ➡*[n1-n2,h] 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. â¦\83G,L,â\93\9dV.Tâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpm_trans_lpr h a G0 L0 T0) →
- (â\88\80G0,L0,T0. â¦\83G,L,â\93\9dV.Tâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â¦\83G,Lâ¦\84 ⊢ ⓝV.T ![h,a] →
- â\88\80n1,V1. â¦\83G,Lâ¦\84 â\8a¢ V â\9e¡[n1,h] V1 â\86\92 â\88\80n2,V2. â¦\83G,Lâ¦\84 ⊢ V ➡[n2,h] V2 →
- â\88\80T1. â¦\83G,Lâ¦\84 ⊢ T ➡[n1,h] T1 →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ â\93\9dV1.T1 â\9e¡*[â\86\91n2-n1,h] T & â¦\83G,L2â¦\84 ⊢ V2 ➡*[n1-↑n2,h] T.
+ (â\88\80G0,L0,T0. â\9dªG,L,â\93\9dV.Tâ\9d« >[h] â\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« >[h] â\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¡[n1,h] V1 â\86\92 â\88\80n2,V2. â\9dªG,Lâ\9d« ⊢ V ➡[n2,h] V2 →
+ â\88\80T1. â\9dªG,Lâ\9d« ⊢ T ➡[n1,h] T1 →
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93\9dV1.T1 â\9e¡*[â\86\91n2-n1,h] T & â\9dªG,L2â\9d« ⊢ V2 ➡*[n1-↑n2,h] 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. â¦\83G,L,â\93\9dV.Tâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â¦\83G,Lâ¦\84 ⊢ ⓝV.T ![h,a] →
- â\88\80n1,T1. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡[n1,h] T1 â\86\92 â\88\80n2,T2. â¦\83G,Lâ¦\84 ⊢ T ➡[n2,h] T2 →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ T1 â\9e¡*[n2-n1,h] T & â¦\83G,L2â¦\84 ⊢ T2 ➡*[n1-n2,h] T.
+ (â\88\80G0,L0,T0. â\9dªG,L,â\93\9dV.Tâ\9d« >[h] â\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¡[n1,h] T1 â\86\92 â\88\80n2,T2. â\9dªG,Lâ\9d« ⊢ T ➡[n2,h] T2 →
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[n2-n1,h] T & â\9dªG,L2â\9d« ⊢ T2 ➡*[n1-n2,h] 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. â¦\83G,L,â\93\9dV.Tâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpm_trans_lpr h a G0 L0 T0) →
- (â\88\80G0,L0,T0. â¦\83G,L,â\93\9dV.Tâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â¦\83G,Lâ¦\84 ⊢ ⓝV.T ![h,a] →
- â\88\80n1,T1. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡[n1,h] T1 â\86\92 â\88\80n2,V2. â¦\83G,Lâ¦\84 ⊢ V ➡[n2,h] V2 →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ T1 â\9e¡*[â\86\91n2-n1,h] T & â¦\83G,L2â¦\84 ⊢ V2 ➡*[n1-↑n2,h] T.
+ (â\88\80G0,L0,T0. â\9dªG,L,â\93\9dV.Tâ\9d« >[h] â\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« >[h] â\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¡[n1,h] T1 â\86\92 â\88\80n2,V2. â\9dªG,Lâ\9d« ⊢ V ➡[n2,h] V2 →
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[â\86\91n2-n1,h] T & â\9dªG,L2â\9d« ⊢ V2 ➡*[n1-↑n2,h] 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. â¦\83G,L,â\93\9dV.Tâ¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- â¦\83G,Lâ¦\84 ⊢ ⓝV.T ![h,a] →
- â\88\80n1,V1. â¦\83G,Lâ¦\84 â\8a¢ V â\9e¡[n1,h] V1 â\86\92 â\88\80n2,V2. â¦\83G,Lâ¦\84 ⊢ V ➡[n2,h] V2 →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ V1 â\9e¡*[n2-n1,h] T & â¦\83G,L2â¦\84 ⊢ V2 ➡*[n1-n2,h] T.
+ (â\88\80G0,L0,T0. â\9dªG,L,â\93\9dV.Tâ\9d« >[h] â\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¡[n1,h] V1 â\86\92 â\88\80n2,V2. â\9dªG,Lâ\9d« ⊢ V ➡[n2,h] V2 →
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ V1 â\9e¡*[n2-n1,h] T & â\9dªG,L2â\9d« ⊢ V2 ➡*[n1-n2,h] 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. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G1,L1,T1â¦\84 → IH_cnv_cpm_trans_lpr h a G1 L1 T1) →
- (â\88\80G1,L1,T1. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G1,L1,T1â¦\84 → IH_cnv_cpms_conf_lpr h a G1 L1 T1) →
+ (â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« >[h] â\9dªG1,L1,T1â\9d« → IH_cnv_cpm_trans_lpr h a G1 L1 T1) →
+ (â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« >[h] â\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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[h] T2 â\86\92 T1 â\89\9b T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ![h,a] → T1 = T2.
+ â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h] T2 â\86\92 T1 â\89\9b 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. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V.T1 ![h,a] →
- â\88\80X. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V.T1 â\9e¡[n,h] X â\86\92 â\93\91{p,I}V.T1 ≛ X →
- â\88\83â\88\83T2. â¦\83G,Lâ¦\84 â\8a¢ V ![h,a] & â¦\83G,L.â\93\91{I}Vâ¦\84 â\8a¢ T1 ![h,a] & â¦\83G,L.â\93\91{I}Vâ¦\84 â\8a¢ T1 â\9e¡[n,h] T2 & T1 â\89\9b T2 & X = â\93\91{p,I}V.T2.
+ â\88\80V,T1. â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V.T1 ![h,a] →
+ â\88\80X. â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V.T1 â\9e¡[n,h] X â\86\92 â\93\91[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« â\8a¢ T1 â\9e¡[n,h] T2 & T1 â\89\9b T2 & X = â\93\91[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. â¦\83G,Lâ¦\84 ⊢ ⓐV.T1 ![h,a] →
- â\88\80X. â¦\83G,Lâ¦\84 ⊢ ⓐV.T1 ➡[n,h] X → ⓐV.T1 ≛ X →
- â\88\83â\88\83m,q,W,U1,T2. ad a m & â¦\83G,Lâ¦\84 â\8a¢ V ![h,a] & â¦\83G,Lâ¦\84 â\8a¢ V â\9e¡*[1,h] W & â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[m,h] â\93\9b{q}W.U1
- & â¦\83G,Lâ¦\84â\8a¢ T1 ![h,a] & â¦\83G,Lâ¦\84 ⊢ T1 ➡[n,h] 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 ➡[n,h] 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¡*[1,h] W & â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[m,h] â\93\9b[q]W.U1
+ & â\9dªG,Lâ\9d«â\8a¢ T1 ![h,a] & â\9dªG,Lâ\9d« ⊢ T1 ➡[n,h] 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. â¦\83G,Lâ¦\84 ⊢ ⓝU1.T1 ![h,a] →
- â\88\80X. â¦\83G,Lâ¦\84 ⊢ ⓝU1.T1 ➡[n,h] X → ⓝU1.T1 ≛ X →
- â\88\83â\88\83U0,U2,T2. â¦\83G,Lâ¦\84 â\8a¢ U1 â\9e¡*[h] U0 & â¦\83G,Lâ¦\84 ⊢ T1 ➡*[1,h] U0
- & â¦\83G,Lâ¦\84 â\8a¢ U1 ![h,a] & â¦\83G,Lâ¦\84 ⊢ U1 ➡[n,h] U2 & U1 ≛ U2
- & â¦\83G,Lâ¦\84 â\8a¢ T1 ![h,a] & â¦\83G,Lâ¦\84 ⊢ T1 ➡[n,h] 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 ➡[n,h] X → ⓝU1.T1 ≛ X →
+ â\88\83â\88\83U0,U2,T2. â\9dªG,Lâ\9d« â\8a¢ U1 â\9e¡*[h] U0 & â\9dªG,Lâ\9d« ⊢ T1 ➡*[1,h] U0
+ & â\9dªG,Lâ\9d« â\8a¢ U1 ![h,a] & â\9dªG,Lâ\9d« ⊢ U1 ➡[n,h] U2 & U1 ≛ U2
+ & â\9dªG,Lâ\9d« â\8a¢ T1 ![h,a] & â\9dªG,Lâ\9d« ⊢ T1 ➡[n,h] 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. â¦\83G,Lâ¦\84 ⊢ X ![h,a] →
- â\88\80V,T2. â¦\83G,Lâ¦\84 â\8a¢ X â\9e¡[n,h] â\93\91{p,I}V.T2 â\86\92 X â\89\9b â\93\91{p,I}V.T2 →
- â\88\83â\88\83T1. â¦\83G,Lâ¦\84 â\8a¢ V ![h,a] & â¦\83G,L.â\93\91{I}Vâ¦\84 â\8a¢ T1 ![h,a] & â¦\83G,L.â\93\91{I}Vâ¦\84 â\8a¢ T1 â\9e¡[n,h] T2 & T1 â\89\9b T2 & X = â\93\91{p,I}V.T1.
+ â\88\80X. â\9dªG,Lâ\9d« ⊢ X ![h,a] →
+ â\88\80V,T2. â\9dªG,Lâ\9d« â\8a¢ X â\9e¡[n,h] â\93\91[p,I]V.T2 â\86\92 X â\89\9b â\93\91[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« â\8a¢ T1 â\9e¡[n,h] T2 & T1 â\89\9b T2 & X = â\93\91[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
(* Eliminators with restricted rt-transition for terms **********************)
lemma cpm_teqx_ind (h) (a) (n) (G) (Q:relation3 …):
- (∀I,L. n = 0 → Q L (⓪{I}) (⓪{I})) →
+ (∀I,L. n = 0 → Q L (⓪[I]) (⓪[I])) →
(∀L,s. n = 1 → Q L (⋆s) (⋆(⫯[h]s))) →
- (â\88\80p,I,L,V,T1. â¦\83G,Lâ¦\84â\8a¢ V![h,a] â\86\92 â¦\83G,L.â\93\91{I}Vâ¦\84⊢T1![h,a] →
- â\88\80T2. â¦\83G,L.â\93\91{I}Vâ¦\84 ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 →
- Q (L.ⓑ{I}V) T1 T2 → Q L (ⓑ{p,I}V.T1) (ⓑ{p,I}V.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 ➡[n,h] 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. â¦\83G,Lâ¦\84 â\8a¢ V ![h,a] â\86\92 â\88\80W. â¦\83G,Lâ¦\84 ⊢ V ➡*[1,h] W →
- â\88\80p,T1,U1. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[m,h] â\93\9b{p}W.U1 â\86\92 â¦\83G,Lâ¦\84⊢ T1 ![h,a] →
- â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 →
+ â\88\80L,V. â\9dªG,Lâ\9d« â\8a¢ V ![h,a] â\86\92 â\88\80W. â\9dªG,Lâ\9d« ⊢ V ➡*[1,h] W →
+ â\88\80p,T1,U1. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[m,h] â\93\9b[p]W.U1 â\86\92 â\9dªG,Lâ\9d«⊢ T1 ![h,a] →
+ â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 →
Q L T1 T2 → Q L (ⓐV.T1) (ⓐV.T2)
) →
- (â\88\80L,U0,U1,T1. â¦\83G,Lâ¦\84 â\8a¢ U1 â\9e¡*[h] U0 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡*[1,h] U0 →
- â\88\80U2. â¦\83G,Lâ¦\84 â\8a¢ U1 ![h,a] â\86\92 â¦\83G,Lâ¦\84 ⊢ U1 ➡[n,h] U2 → U1 ≛ U2 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T1 ![h,a] â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 →
+ (â\88\80L,U0,U1,T1. â\9dªG,Lâ\9d« â\8a¢ U1 â\9e¡*[h] U0 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[1,h] U0 →
+ â\88\80U2. â\9dªG,Lâ\9d« â\8a¢ U1 ![h,a] â\86\92 â\9dªG,Lâ\9d« ⊢ U1 ➡[n,h] U2 → U1 ≛ U2 →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 ![h,a] â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 →
Q L U1 U2 → Q L T1 T2 → Q L (ⓝU1.T1) (ⓝU2.T2)
) →
- â\88\80L,T1. â¦\83G,Lâ¦\84 ⊢ T1 ![h,a] →
- â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 → Q L T1 T2.
+ â\88\80L,T1. â\9dªG,Lâ\9d« ⊢ T1 ![h,a] →
+ â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[n,h] 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. â¦\83G,Lâ¦\84 ⊢ T1 ![h,a] →
- â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 →
- â\88\80F,K. â¦\83F,Kâ¦\84 ⊢ T1 ➡[n,h] T2.
+ â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ![h,a] →
+ â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[n,h] T2 → T1 ≛ T2 →
+ â\88\80F,K. â\9dªF,Kâ\9d« ⊢ T1 ➡[n,h] 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. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V.T1 ![h,a] →
- â\88\80X. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V.T1 â\9e¡[n,h] X â\86\92 â\93\91{p,I}V.T1 ≛ X →
- â\88\83â\88\83T2. â¦\83G,Lâ¦\84 â\8a¢ V ![h,a] & â¦\83G,L.â\93\91{I}Vâ¦\84 â\8a¢ T1 ![h,a] & â¦\83G,L.â\93§â¦\84 â\8a¢ T1 â\9e¡[n,h] T2 & T1 â\89\9b T2 & X = â\93\91{p,I}V.T2.
+ â\88\80V,T1. â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V.T1 ![h,a] →
+ â\88\80X. â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V.T1 â\9e¡[n,h] X â\86\92 â\93\91[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« â\8a¢ T1 â\9e¡[n,h] T2 & T1 â\89\9b T2 & X = â\93\91[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. â¦\83G,L0â¦\84 ⊢ T0 ![h,a] →
- â\88\80n1,T1. â¦\83G,L0â¦\84 ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 →
- â\88\80n2,T2. â¦\83G,L0â¦\84 ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 →
- â\88\80L1. â¦\83G,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ T1 â\9e¡[n2-n1,h] T & T1 â\89\9b T & â¦\83G,L2â¦\84 ⊢ T2 ➡[n1-n2,h] T & T2 ≛ T.
+ λG,L0,T0. â\9dªG,L0â\9d« ⊢ T0 ![h,a] →
+ â\88\80n1,T1. â\9dªG,L0â\9d« ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 →
+ â\88\80n2,T2. â\9dªG,L0â\9d« ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 →
+ â\88\80L1. â\9dªG,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡[n2-n1,h] T & T1 â\89\9b T & â\9dªG,L2â\9d« ⊢ T2 ➡[n1-n2,h] 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. â¦\83G0,L1â¦\84 â\8a¢ â\93ª{I} â\9e¡[h] T & â\93ª{I} â\89\9b T & â¦\83G0,L2â¦\84 â\8a¢ â\93ª{I} â\9e¡[h] T & â\93ª{I} ≛ T.
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93ª[I] â\9e¡[h] T & â\93ª[I] â\89\9b T & â\9dªG0,L2â\9d« â\8a¢ â\93ª[I] â\9e¡[h] T & â\93ª[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. â¦\83G0,L1â¦\84 â\8a¢ â\8b\86s â\9e¡[1,h] T & â\8b\86s â\89\9b T & â¦\83G0,L2â¦\84 ⊢ ⋆(⫯[h]s) ➡[h] T & ⋆(⫯[h]s) ≛ T.
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\8b\86s â\9e¡[1,h] T & â\8b\86s â\89\9b T & â\9dªG0,L2â\9d« ⊢ ⋆(⫯[h]s) ➡[h] T & ⋆(⫯[h]s) ≛ T.
#h #G0 #L1 #L2 #s
/3 width=5 by teqx_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. â¦\83G0,L0,â\93\91{p,I}V0.T0â¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 → IH_cnv_cpm_teqx_conf_lpr h a G L T) →
- â¦\83G0,L0â¦\84 â\8a¢ â\93\91{p,I}V0.T0 ![h,a] →
- â\88\80n1,T1. â¦\83G0,L0.â\93\91{I}V0â¦\84 ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 →
- â\88\80n2,T2. â¦\83G0,L0.â\93\91{I}V0â¦\84 ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ â\93\91{p,I}V0.T1 â\9e¡[n2-n1,h] T & â\93\91{p,I}V0.T1 â\89\9b T & â¦\83G0,L2â¦\84 â\8a¢ â\93\91{p,I}V0.T2 â\9e¡[n1-n2,h] T & â\93\91{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« â\8a¢ â\93\91[p,I]V0.T0 ![h,a] →
+ â\88\80n1,T1. â\9dªG0,L0.â\93\91[I]V0â\9d« ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 →
+ â\88\80n2,T2. â\9dªG0,L0.â\93\91[I]V0â\9d« ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\91[p,I]V0.T1 â\9e¡[n2-n1,h] T & â\93\91[p,I]V0.T1 â\89\9b T & â\9dªG0,L2â\9d« â\8a¢ â\93\91[p,I]V0.T2 â\9e¡[n1-n2,h] T & â\93\91[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
elim (cnv_inv_bind … H0) -H0 #_ #HT0
-elim (IH … H1T01 H2T01 … H1T02 H2T02 (L1.ⓑ{I}V0) … (L2.ⓑ{I}V0)) [|*: /2 width=1 by lpr_bind_refl_dx/ ]
+elim (IH … H1T01 H2T01 … H1T02 H2T02 (L1.ⓑ[I]V0) … (L2.ⓑ[I]V0)) [|*: /2 width=1 by lpr_bind_refl_dx/ ]
#T #H1T1 #H2T1 #H1T2 #H2T2 -L0 -T0
/3 width=7 by cpm_bind, teqx_pair, ex4_intro/
qed-.
fact cnv_cpm_teqx_conf_lpr_appl_appl_aux (h) (a) (G0) (L0) (V0) (T0):
- (â\88\80G,L,T. â¦\83G0,L0,â\93\90V0.T0â¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 → IH_cnv_cpm_teqx_conf_lpr h a G L T) →
- â¦\83G0,L0â¦\84 ⊢ ⓐV0.T0 ![h,a] →
- â\88\80n1,T1. â¦\83G0,L0â¦\84 ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 →
- â\88\80n2,T2. â¦\83G0,L0â¦\84 ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ â\93\90V0.T1 â\9e¡[n2-n1,h] T & â\93\90V0.T1 â\89\9b T & â¦\83G0,L2â¦\84 ⊢ ⓐV0.T2 ➡[n1-n2,h] 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 ➡[n1,h] T1 → T0 ≛ T1 →
+ â\88\80n2,T2. â\9dªG0,L0â\9d« ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\90V0.T1 â\9e¡[n2-n1,h] T & â\93\90V0.T1 â\89\9b T & â\9dªG0,L2â\9d« ⊢ ⓐV0.T2 ➡[n1-n2,h] 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. â¦\83G0,L0,â\93\9dV0.T0â¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 → IH_cnv_cpm_teqx_conf_lpr h a G L T) →
- â¦\83G0,L0â¦\84 ⊢ ⓝV0.T0 ![h,a] →
- â\88\80n1,V1. â¦\83G0,L0â¦\84 ⊢ V0 ➡[n1,h] V1 → V0 ≛ V1 →
- â\88\80n2,V2. â¦\83G0,L0â¦\84 ⊢ V0 ➡[n2,h] V2 → V0 ≛ V2 →
- â\88\80T1. â¦\83G0,L0â¦\84 ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 →
- â\88\80T2. â¦\83G0,L0â¦\84 ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ â\93\9dV1.T1 â\9e¡[n2-n1,h] T & â\93\9dV1.T1 â\89\9b T & â¦\83G0,L2â¦\84 ⊢ ⓝV2.T2 ➡[n1-n2,h] 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 ➡[n1,h] V1 → V0 ≛ V1 →
+ â\88\80n2,V2. â\9dªG0,L0â\9d« ⊢ V0 ➡[n2,h] V2 → V0 ≛ V2 →
+ â\88\80T1. â\9dªG0,L0â\9d« ⊢ T0 ➡[n1,h] T1 → T0 ≛ T1 →
+ â\88\80T2. â\9dªG0,L0â\9d« ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\9dV1.T1 â\9e¡[n2-n1,h] T & â\93\9dV1.T1 â\89\9b T & â\9dªG0,L2â\9d« ⊢ ⓝV2.T2 ➡[n1-n2,h] 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. â¦\83G0,L0,T0â¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 → 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. â¦\83G,Lâ¦\84 ⊢ T1 ![h,a] →
- â\88\80n1,T. â¦\83G,Lâ¦\84 ⊢ T1 ➡[n1,h] T → T1 ≛ T →
- â\88\80n2,T2. â¦\83G,Lâ¦\84 ⊢ T ➡[n2,h] T2 →
- â\88\83â\88\83T0. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[n2,h] T0 & â¦\83G,Lâ¦\84 ⊢ T0 ➡[n1,h] T2 & T0 ≛ T2.
+ λG,L,T1. â\9dªG,Lâ\9d« ⊢ T1 ![h,a] →
+ â\88\80n1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡[n1,h] T → T1 ≛ T →
+ â\88\80n2,T2. â\9dªG,Lâ\9d« ⊢ T ➡[n2,h] T2 →
+ â\88\83â\88\83T0. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[n2,h] T0 & â\9dªG,Lâ\9d« ⊢ T0 ➡[n1,h] 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. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â¦\83G0,L0,T0â¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 → IH_cnv_cpm_teqx_cpm_trans h a G L T) →
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\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
elim (cpm_inv_bind1 … HX2) -HX2 *
[ #V2 #T2 #HV12 #HT2 #H destruct
elim (IH1 … H0T1 … H1T1 H2T1 … HT2) -T -IH1 [| // ] #T0 #HT10 #H1T02 #H2T02
- lapply (IH2 … H0T1 … HT10 (L.ⓑ{I}V1) ?) -IH2 -H0T1 [3:|*: /2 width=1 by fqup_fpbg/ ] #HT0
- lapply (cpm_teqx_free … HT0 … H1T02 H2T02 G (L.ⓑ{I}V2)) -H1T02 #H1T02
+ lapply (IH2 … H0T1 … HT10 (L.ⓑ[I]V1) ?) -IH2 -H0T1 [3:|*: /2 width=1 by fqup_fpbg/ ] #HT0
+ lapply (cpm_teqx_free … HT0 … H1T02 H2T02 G (L.ⓑ[I]V2)) -H1T02 #H1T02
/3 width=6 by cpm_bind, teqx_pair, ex3_intro/
| #T2 #HT2 #HTX2 #H1 #H2 destruct -IH2
elim (teqx_inv_lifts_dx … H2T1 … HT2) -H2T1 #XT #HXT1 #H2XT2
qed-.
fact cnv_cpm_teqx_cpm_trans_aux (h) (a) (G0) (L0) (T0):
- (â\88\80G,L,T. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\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. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G1,L1,T1â¦\84 → IH_cnv_cpms_conf_lpr h a G1 L1 T1) →
- (â\88\80G1,L1,T1. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G1,L1,T1â¦\84 → IH_cnv_cpm_trans_lpr h a G1 L1 T1) →
+ (â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« >[h] â\9dªG1,L1,T1â\9d« → IH_cnv_cpms_conf_lpr h a G1 L1 T1) →
+ (â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« >[h] â\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
elim (cpms_inv_abst_sn … H) -H #W2 #X2 #HW12 #_ #H destruct
elim (cprs_conf … HXW1 … HW12) -W1 #W1 #HXW1 #HW21
lapply (cpms_trans … HXV2 … HXW1) -XW1 <plus_n_O #HV2W1
- lapply (cpms_trans … HTX2 … (ⓛ{p}W1.X2) ?)
+ lapply (cpms_trans … HTX2 … (ⓛ[p]W1.X2) ?)
[3:|*: /2 width=2 by cpms_bind/ ] -W2 <plus_n_O #HTX2
elim (cnv_fwd_cpms_abst_dx_le … HT2 … HTX2 n) -HTX2 [| // ] #U2 #HTU2 #_ -X2
/2 width=7 by cnv_appl/
lapply (cpms_lifts_bi … HXW1 (Ⓣ) … (L2.ⓓW2) … HW13 … HXW12) /3 width=1 by drops_refl, drops_drop/ -W1 -XW1 #HXW32
elim (cprs_conf … HXW32 … HW3) -W3 #W3 #HXW23 #HW3
lapply (cpms_trans … HXVW2 … HXW23) -XW2 <plus_n_O #H1
- lapply (cpms_trans … HTX2 ? (ⓛ{p}W3.X2) ?) [3:|*:/2 width=2 by cpms_bind/ ] -W #H2
+ lapply (cpms_trans … HTX2 ? (ⓛ[p]W3.X2) ?) [3:|*:/2 width=2 by cpms_bind/ ] -W #H2
elim (cnv_fwd_cpms_abst_dx_le … HT2 … H2 n) -H2 [| // ] #U2 #HTU2 #_ -X2
/3 width=7 by cnv_appl, cnv_bind/
]
(* Properties with t-bound evaluation on terms ******************************)
lemma cnv_cpmre_trans (h) (a) (n) (G) (L):
- â\88\80T1. â¦\83G,Lâ¦\84 ⊢ T1 ![h,a] →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[h,n] ð\9d\90\8dâ¦\83T2â¦\84 â\86\92 â¦\83G,Lâ¦\84 ⊢ T2 ![h,a].
+ â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ![h,a] →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n] ð\9d\90\8dâ\9dªT2â\9d« â\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. â¦\83G,Lâ¦\84 â\8a¢ T ![h,a] â\86\92 â\88\80T1. â¦\83G,Lâ¦\84 ⊢ T ➡*[n,h] T1 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[h,n] ð\9d\90\8dâ¦\83T2â¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[h] ð\9d\90\8dâ¦\83T2â¦\84.
+ â\88\80T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\88\80T1. â\9dªG,Lâ\9d« ⊢ T ➡*[n,h] T1 →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n] ð\9d\90\8dâ\9dªT2â\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h] ð\9d\90\8dâ\9dªT2â\9d«.
#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. â¦\83G,Lâ¦\84 â\8a¢ T ![h,a] â\86\92 â\88\80T1. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[h,n] ð\9d\90\8dâ¦\83T1â¦\84 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[h,n] ð\9d\90\8dâ¦\83T2â¦\84 → T1 = T2.
+ â\88\80T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n] ð\9d\90\8dâ\9dªT1â\9d« →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h,n] ð\9d\90\8dâ\9dªT2â\9d« → 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. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpms_conf_lpr h a G L T) →
- â¦\83G0,L0â¦\84 ⊢ T0 ![h,a] →
- â\88\80n1,T1. â¦\83G0,L0â¦\84 ⊢ T0 ➡*[n1,h] T1 → T0 ≛ T1 →
- â\88\80n2,T2. â¦\83G0,L0â¦\84 ⊢ T0 ➡*[n2,h] T2 → T0 ≛ T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ T1 â\9e¡*[n2-n1,h] T & â¦\83G0,L2â¦\84 ⊢ T2 ➡*[n1-n2,h] T.
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\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 ➡*[n1,h] T1 → T0 ≛ T1 →
+ â\88\80n2,T2. â\9dªG0,L0â\9d« ⊢ T0 ➡*[n2,h] T2 → T0 ≛ T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡*[n2-n1,h] T & â\9dªG0,L2â\9d« ⊢ T2 ➡*[n1-n2,h] 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. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpms_conf_lpr h a G L T) →
- â¦\83G0,L0â¦\84 ⊢ T0 ![h,a] →
- â\88\80X2. â¦\83G0,L0â¦\84 â\8a¢ T0 â\9e¡[m21,h] X2 â\86\92 (T0 â\89\9b X2 â\86\92 â\8a¥) â\86\92 â\88\80T2. â¦\83G0,L0â¦\84 ⊢ X2 ➡*[m22,h] T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ T0 â\9e¡*[m21+m22,h] T& â¦\83G0,L2â¦\84 ⊢ T2 ➡*[h] T.
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\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¡[m21,h] X2 â\86\92 (T0 â\89\9b X2 â\86\92 â\8a¥) â\86\92 â\88\80T2. â\9dªG0,L0â\9d« ⊢ X2 ➡*[m22,h] T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T0 â\9e¡*[m21+m22,h] T& â\9dªG0,L2â\9d« ⊢ T2 ➡*[h] 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. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpms_conf_lpr h a G L T) →
- â¦\83G0,L0â¦\84 ⊢ T0 ![h,a] →
- â\88\80X1. â¦\83G0,L0â¦\84 â\8a¢ T0 â\9e¡[m11,h] X1 â\86\92 T0 â\89\9b X1 â\86\92 â\88\80T1. â¦\83G0,L0â¦\84 ⊢ X1 ➡*[m12,h] T1 → X1 ≛ T1 →
- â\88\80X2. â¦\83G0,L0â¦\84 â\8a¢ T0 â\9e¡[m21,h] X2 â\86\92 (T0 â\89\9b X2 â\86\92 â\8a¥) â\86\92 â\88\80T2. â¦\83G0,L0â¦\84 ⊢ X2 ➡*[m22,h] T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- ((â\88\80G,L,T. â¦\83G0,L0,X1â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â¦\83G0,L0,X1â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpms_conf_lpr h a G L T) →
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\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¡[m11,h] X1 â\86\92 T0 â\89\9b X1 â\86\92 â\88\80T1. â\9dªG0,L0â\9d« ⊢ X1 ➡*[m12,h] T1 → X1 ≛ T1 →
+ â\88\80X2. â\9dªG0,L0â\9d« â\8a¢ T0 â\9e¡[m21,h] X2 â\86\92 (T0 â\89\9b X2 â\86\92 â\8a¥) â\86\92 â\88\80T2. â\9dªG0,L0â\9d« ⊢ X2 ➡*[m22,h] T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ ((â\88\80G,L,T. â\9dªG0,L0,X1â\9d« >[h] â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9dªG0,L0,X1â\9d« >[h] â\9dªG,L,Tâ\9d« → IH_cnv_cpms_conf_lpr h a G L T) →
∀m21,m22.
- â\88\80X2. â¦\83G0,L0â¦\84 ⊢ X1 ➡[m21,h] X2 → (X1 ≛ X2 → ⊥) →
- â\88\80T2. â¦\83G0,L0â¦\84 ⊢ X2 ➡*[m22,h] T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ T1 â\9e¡*[m21+m22-m12,h] T & â¦\83G0,L2â¦\84 ⊢ T2 ➡*[m12-(m21+m22),h]T
+ â\88\80X2. â\9dªG0,L0â\9d« ⊢ X1 ➡[m21,h] X2 → (X1 ≛ X2 → ⊥) →
+ â\88\80T2. â\9dªG0,L0â\9d« ⊢ X2 ➡*[m22,h] T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡*[m21+m22-m12,h] T & â\9dªG0,L2â\9d« ⊢ T2 ➡*[m12-(m21+m22),h]T
) →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ T1 â\9e¡*[m21+m22-(m11+m12),h] T & â¦\83G0,L2â¦\84 ⊢ T2 ➡*[m11+m12-(m21+m22),h] T.
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡*[m21+m22-(m11+m12),h] T & â\9dªG0,L2â\9d« ⊢ T2 ➡*[m11+m12-(m21+m22),h] 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 (â¦\83G0, L0, T0â¦\84 >[h] â¦\83G0, L0, X2â¦\84) [ /4 width=5 by cpms_fwd_fpbs, cpm_fpb, ex2_3_intro/ ] #H1fpbg (**) (* cut *)
+cut (â\9dªG0, L0, T0â\9d« >[h] â\9dªG0, L0, X2â\9d«) [ /4 width=5 by cpms_fwd_fpbs, cpm_fpb, ex2_3_intro/ ] #H1fpbg (**) (* cut *)
lapply (fpbg_fpbs_trans ?? G0 ? L0 ? Z0 ? … H1fpbg) [ /2 width=2 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 fpb_fpbg, cpm_fpb/ ] -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. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpms_conf_lpr h a G L T) →
- â¦\83G0,L0â¦\84 ⊢ T0 ![h,a] →
- â\88\80T1. â¦\83G0,L0â¦\84 ⊢ T0 ➡*[n1,h] T1 → T0 ≛ T1 →
- â\88\80X2. â¦\83G0,L0â¦\84 â\8a¢ T0 â\9e¡[m21,h] X2 â\86\92 (T0 â\89\9b X2 â\86\92 â\8a¥) â\86\92 â\88\80T2. â¦\83G0,L0â¦\84 ⊢ X2 ➡*[m22,h] T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ T1 â\9e¡*[m21+m22-n1,h] T & â¦\83G0,L2â¦\84 ⊢ T2 ➡*[n1-(m21+m22),h] T.
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\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 ➡*[n1,h] T1 → T0 ≛ T1 →
+ â\88\80X2. â\9dªG0,L0â\9d« â\8a¢ T0 â\9e¡[m21,h] X2 â\86\92 (T0 â\89\9b X2 â\86\92 â\8a¥) â\86\92 â\88\80T2. â\9dªG0,L0â\9d« ⊢ X2 ➡*[m22,h] T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡*[m21+m22-n1,h] T & â\9dªG0,L2â\9d« ⊢ T2 ➡*[n1-(m21+m22),h] 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. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpms_conf_lpr h a G L T) →
- â¦\83G0,L0â¦\84 ⊢ T0 ![h,a] →
- â\88\80X1. â¦\83G0,L0â¦\84 â\8a¢ T0 â\9e¡[m11,h] X1 â\86\92 (T0 â\89\9b X1 â\86\92 â\8a¥) â\86\92 â\88\80T1. â¦\83G0,L0â¦\84 ⊢ X1 ➡*[m12,h] T1 →
- â\88\80X2. â¦\83G0,L0â¦\84 â\8a¢ T0 â\9e¡[m21,h] X2 â\86\92 (T0 â\89\9b X2 â\86\92 â\8a¥) â\86\92 â\88\80T2. â¦\83G0,L0â¦\84 ⊢ X2 ➡*[m22,h] T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ T1 â\9e¡*[m21+m22-(m11+m12),h] T & â¦\83G0,L2â¦\84 ⊢ T2 ➡*[m11+m12-(m21+m22),h] T.
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\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¡[m11,h] X1 â\86\92 (T0 â\89\9b X1 â\86\92 â\8a¥) â\86\92 â\88\80T1. â\9dªG0,L0â\9d« ⊢ X1 ➡*[m12,h] T1 →
+ â\88\80X2. â\9dªG0,L0â\9d« â\8a¢ T0 â\9e¡[m21,h] X2 â\86\92 (T0 â\89\9b X2 â\86\92 â\8a¥) â\86\92 â\88\80T2. â\9dªG0,L0â\9d« ⊢ X2 ➡*[m22,h] T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡*[m21+m22-(m11+m12),h] T & â\9dªG0,L2â\9d« ⊢ T2 ➡*[m11+m12-(m21+m22),h] 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 (â¦\83G0, L0, T0â¦\84 >[h] â¦\83G0, L0, X1â¦\84) [ /4 width=5 by cpms_fwd_fpbs, cpm_fpb, ex2_3_intro/ ] #H1fpbg (**) (* cut *)
+cut (â\9dªG0, L0, T0â\9d« >[h] â\9dªG0, L0, X1â\9d«) [ /4 width=5 by cpms_fwd_fpbs, cpm_fpb, ex2_3_intro/ ] #H1fpbg (**) (* cut *)
lapply (fpbg_fpbs_trans ?? G0 ? L0 ? Z0 ? … H1fpbg) [ /2 width=2 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 fpb_fpbg, cpm_fpb/ ] -HXT1 -HXZ10 #Z1 #HTZ1 #HZ01
qed-.
fact cnv_cpms_conf_lpr_aux (h) (a) (G0) (L0) (T0):
- (â\88\80G,L,T. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpms_conf_lpr h a G L T) →
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n,h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ![h,a] → (T1 ≛ T2 → ⊥) →
- (â\88\80G0,L0,T0. â¦\83G,L,T1â¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- (â\88\80G0,L0,T0. â¦\83G,L,T1â¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpm_trans_lpr h a G0 L0 T0) →
- â\88\83â\88\83n1,n2,T0. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[n1,h] T0 & T1 â\89\9b T0 â\86\92 â\8a¥ & â¦\83G,Lâ¦\84 ⊢ T0 ➡*[n2,h] T2 & n1+n2 = n.
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[n,h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ![h,a] → (T1 ≛ T2 → ⊥) →
+ (â\88\80G0,L0,T0. â\9dªG,L,T1â\9d« >[h] â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ (â\88\80G0,L0,T0. â\9dªG,L,T1â\9d« >[h] â\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¡[n1,h] T0 & T1 â\89\9b T0 â\86\92 â\8a¥ & â\9dªG,Lâ\9d« ⊢ T0 ➡*[n2,h] 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 …):
- (â¦\83G,Lâ¦\84 ⊢ T2 ![h,a] → Q 0 T2) →
- (â\88\80n1,n2,T1,T. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[n1,h] T â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T1 ![h,a] â\86\92 T1 â\89\9b T â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n2,h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T ![h,a] → T ≛ T2 → Q n2 T → Q (n1+n2) T1) →
- â\88\80n,T1. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n,h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ![h,a] → T1 ≛ T2 →
- (â\88\80G0,L0,T0. â¦\83G,L,T1â¦\84 >[h] â¦\83G0,L0,T0â¦\84 → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
- (â\88\80G0,L0,T0. â¦\83G,L,T1â¦\84 >[h] â¦\83G0,L0,T0â¦\84 → 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¡[n1,h] T â\86\92 â\9dªG,Lâ\9d« â\8a¢ T1 ![h,a] â\86\92 T1 â\89\9b T â\86\92 â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n2,h] 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¡*[n,h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ![h,a] → T1 ≛ T2 →
+ (â\88\80G0,L0,T0. â\9dªG,L,T1â\9d« >[h] â\9dªG0,L0,T0â\9d« → IH_cnv_cpms_conf_lpr h a G0 L0 T0) →
+ (â\88\80G0,L0,T0. â\9dªG,L,T1â\9d« >[h] â\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. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpms_conf_lpr h a G L T) →
- â\88\80n1,T1. â¦\83G0,L0â¦\84 â\8a¢ T0 â\9e¡*[n1,h] T1 â\86\92 â¦\83G0,L0â¦\84 ⊢ T0 ![h,a] → T0 ≛ T1 →
- â\88\80n2,T2. â¦\83G0,L0â¦\84 ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ T1 â\9e¡[n2-n1,h] T & T1 â\89\9b T & â¦\83G0,L2â¦\84 ⊢ T2 ➡*[n1-n2,h] T & T2 ≛ T.
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\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¡*[n1,h] T1 â\86\92 â\9dªG0,L0â\9d« ⊢ T0 ![h,a] → T0 ≛ T1 →
+ â\88\80n2,T2. â\9dªG0,L0â\9d« ⊢ T0 ➡[n2,h] T2 → T0 ≛ T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡[n2-n1,h] T & T1 â\89\9b T & â\9dªG0,L2â\9d« ⊢ T2 ➡*[n1-n2,h] 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. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpm_trans_lpr h a G L T) →
- (â\88\80G,L,T. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G,L,Tâ¦\84 → IH_cnv_cpms_conf_lpr h a G L T) →
- â\88\80n1,T1. â¦\83G0,L0â¦\84 â\8a¢ T0 â\9e¡*[n1,h] T1 â\86\92 â¦\83G0,L0â¦\84 ⊢ T0 ![h,a] → T0 ≛ T1 →
- â\88\80n2,T2. â¦\83G0,L0â¦\84 ⊢ T0 ➡*[n2,h] T2 → T0 ≛ T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ T1 â\9e¡*[n2-n1,h] T & T1 â\89\9b T & â¦\83G0,L2â¦\84 ⊢ T2 ➡*[n1-n2,h] T & T2 ≛ T.
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\9dªG,L,Tâ\9d« → IH_cnv_cpm_trans_lpr h a G L T) →
+ (â\88\80G,L,T. â\9dªG0,L0,T0â\9d« >[h] â\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¡*[n1,h] T1 â\86\92 â\9dªG0,L0â\9d« ⊢ T0 ![h,a] → T0 ≛ T1 →
+ â\88\80n2,T2. â\9dªG0,L0â\9d« ⊢ T0 ➡*[n2,h] T2 → T0 ≛ T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡*[n2-n1,h] T & T1 â\89\9b T & â\9dªG0,L2â\9d« ⊢ T2 ➡*[n1-n2,h] 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. â¦\83G,Lâ¦\84 ⊢ T1 ![h,a] →
- â\88\80n,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*ð\9d\90\8dð\9d\90\96*[h,n] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ 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=2 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. â¦\83G,Lâ¦\84 ⊢ T0 ![h,a] →
- â\88\80n1,T1. â¦\83G,Lâ¦\84 ⊢ T0 ➡*𝐍𝐖*[h,n1] T1 →
- â\88\80n2,T2. â¦\83G,Lâ¦\84 ⊢ T0 ➡*𝐍𝐖*[h,n2] T2 →
- â\88§â\88§ â¦\83G,Lâ¦\84 ⊢ 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, tweq_canc_dx, conj/
(* Advanced Properties with t-unbound whd evaluation on terms ***************)
lemma cnv_R_cpmuwe_dec (h) (a) (G) (L):
- â\88\80T. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T0 ![h,a] â\86\92 â\88\80T1. â¦\83G,Lâ¦\84 ⊢ T0 ⬆*[h,n] T1 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T0 â\9e¡*[n,h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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¡*[n,h] 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. â¦\83G,Lâ¦\84 â\8a¢ U1 ![h,a] â\86\92 â\88\80U2. â¦\83G,Lâ¦\84 ⊢ U1 ⬆*[h,nu] U2 →
- â\88\80T1. â¦\83G,Lâ¦\84 â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬆*[h,nt] T2 →
- â¦\83G,Lâ¦\84 â\8a¢ U1 â¬\8c*[h,nu,nt] T1 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ V1 ![h,a] â\86\92 â\88\80V2. â¦\83G,Lâ¦\84 ⊢ V1 ⬆*[h,nv] V2 →
- â\88\80T1. â¦\83G,Lâ¦\84 â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬆*[h,nt] T2 →
- â\88\80V0. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡*[nv,h] V0 â\86\92 â\88\80T0. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[nt,h] â\93\9b{p}V0.T0 →
- â\88\83â\88\83W0,U0. â¦\83G,Lâ¦\84 â\8a¢ V2 â\9e¡*[h] W0 & â¦\83G,Lâ¦\84 â\8a¢ T2 â\9e¡*[h] â\93\9b{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¡*[nv,h] V0 â\86\92 â\88\80T0. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[nt,h] â\93\9b[p]V0.T0 →
+ â\88\83â\88\83W0,U0. â\9dªG,Lâ\9d« â\8a¢ V2 â\9e¡*[h] W0 & â\9dªG,Lâ\9d« â\8a¢ T2 â\9e¡*[h] â\93\9b[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. â¦\83G,Lâ¦\84 â\8a¢ U1 ![h,a] â\86\92 â\88\80U2. â¦\83G,Lâ¦\84 ⊢ U1 ⬆*[h,nu] U2 →
- â\88\80T1. â¦\83G,Lâ¦\84 â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬆*[h,nt] T2 →
- â¦\83G,Lâ¦\84 â\8a¢ U2 â¬\8c*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ V1 ![h,a] â\86\92 â\88\80V2. â¦\83G,Lâ¦\84 ⊢ V1 ⬆*[h,nv] V2 →
- â\88\80T1. â¦\83G,Lâ¦\84 â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬆*[h,nt] T2 →
- â\88\80V0. â¦\83G,Lâ¦\84 â\8a¢ V2 â\9e¡*[h] V0 â\86\92 â\88\80T0. â¦\83G,Lâ¦\84 â\8a¢ T2 â\9e¡*[h] â\93\9b{p}V0.T0 →
- â\88\83â\88\83W0,U0. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡*[nv,h] W0 & â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[nt,h] â\93\9b{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] V0 â\86\92 â\88\80T0. â\9dªG,Lâ\9d« â\8a¢ T2 â\9e¡*[h] â\93\9b[p]V0.T0 →
+ â\88\83â\88\83W0,U0. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡*[nv,h] W0 & â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[nt,h] â\93\9b[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. â¦\83G,Kâ¦\84 ⊢ V ![h,a] →
- ⇩*[i] L ≘ K.ⓑ{I}V → ⦃G,L⦄ ⊢ #i ![h,a].
+ â\88\80I,K,V,i,L. â\9dªG,Kâ\9d« ⊢ V ![h,a] →
+ ⇩*[i] L ≘ K.ⓑ[I]V → ❪G,L❫ ⊢ #i ![h,a].
#h #a #G #I #K #V #i elim i -i
[ #L #HV #H
lapply (drops_fwd_isid … H ?) -H // #H destruct
(* Basic_2A1: uses: snv_inv_lref *)
lemma cnv_inv_lref_drops (h) (a) (G):
- â\88\80i,L. â¦\83G,Lâ¦\84 ⊢ #i ![h,a] →
- ∃∃I,K,V. ⇩*[i] L ≘ K.ⓑ{I}V & ⦃G,K⦄ ⊢ V ![h,a].
+ â\88\80i,L. â\9dªG,Lâ\9d« ⊢ #i ![h,a] →
+ ∃∃I,K,V. ⇩*[i] L ≘ K.ⓑ[I]V & ❪G,K❫ ⊢ V ![h,a].
#h #a #G #i elim i -i
[ #L #H
elim (cnv_inv_zero … H) -H #I #K #V #HV #H destruct
qed-.
lemma cnv_inv_lref_pair (h) (a) (G):
- â\88\80i,L. â¦\83G,Lâ¦\84 ⊢ #i ![h,a] →
- ∀I,K,V. ⇩*[i] L ≘ K.ⓑ{I}V → ⦃G,K⦄ ⊢ V ![h,a].
+ â\88\80i,L. â\9dªG,Lâ\9d« ⊢ #i ![h,a] →
+ ∀I,K,V. ⇩*[i] L ≘ K.ⓑ[I]V → ❪G,K❫ ⊢ V ![h,a].
#h #a #G #i #L #H #I #K #V #HLK
elim (cnv_inv_lref_drops … H) -H #Z #Y #X #HLY #HX
lapply (drops_mono … HLY … HLK) -L #H destruct //
qed-.
lemma cnv_inv_lref_atom (h) (a) (b) (G):
- â\88\80i,L. â¦\83G,Lâ¦\84 â\8a¢ #i ![h,a] â\86\92 â\87©*[b,ð\9d\90\94â\9d´iâ\9dµ] L ≘ ⋆ → ⊥.
+ â\88\80i,L. â\9dªG,Lâ\9d« â\8a¢ #i ![h,a] â\86\92 â\87©*[b,ð\9d\90\94â\9d¨iâ\9d©] 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. â¦\83G,Lâ¦\84 ⊢ #i ![h,a] →
- ∀I,K. ⇩*[i] L ≘ K.ⓤ{I} → ⊥.
+ â\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 #_
lapply (drops_mono … HLY … HLK) -L #H destruct
elim (cnv_inv_lref_drops … H1) -H1 #I0 #L0 #W #HL0 #HW
elim (lifts_inv_lref2 … H2) -H2 #i #Hf #H destruct
(**) (* this should be a lemma *)
- lapply (drops_split_div â\80¦ HLK (ð\9d\90\94â\9d´iâ\9dµ) ???) -HLK [4,8: * |*: // ] #Y0 #HK #HLY0
+ lapply (drops_split_div â\80¦ HLK (ð\9d\90\94â\9d¨iâ\9d©) ???) -HLK [4,8: * |*: // ] #Y0 #HK #HLY0
lapply (drops_conf … HL0 … HLY0 ??) -HLY0 [3,6: |*: /2 width=6 by after_uni_dx/ ] #HLY0
lapply (drops_tls_at … Hf … HLY0) -HLY0 #HLY0
elim (drops_inv_skip1 … HLY0) -HLY0 #Z #K0 #HLK0 #HZ #H destruct
(* main properties with evaluations for rt-transition on terms **************)
theorem cnv_dec (h) (a) (G) (L) (T): ac_props a →
- Decidable (â¦\83G,Lâ¦\84 ⊢ 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
/3 width=6 by cnv_inv_gref, or_intror/
| #p #I #V #T #HG #HL #HT destruct -Ha
elim (IH G L V) [| -IH | // ] #HV
- [ elim (IH G (L.ⓑ{I}V) T) -IH [3: // ] #HT
+ [ elim (IH G (L.ⓑ[I]V) T) -IH [3: // ] #HT
[ /3 width=1 by cnv_bind, or_introl/ ]
]
@or_intror #H
(* Basic_2A1: uses: snv_fqu_conf *)
lemma cnv_fqu_conf (h) (a):
- â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82 â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1â¦\84 â\8a¢ T1 ![h,a] â\86\92 â¦\83G2,L2â¦\84 ⊢ 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. â¦\83G1,L1,T1â¦\84 â¬\82⸮ â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1â¦\84 â\8a¢ T1 ![h,a] â\86\92 â¦\83G2,L2â¦\84 ⊢ 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. â¦\83G1,L1,T1â¦\84 â¬\82+ â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1â¦\84 â\8a¢ T1 ![h,a] â\86\92 â¦\83G2,L2â¦\84 ⊢ 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. â¦\83G1,L1,T1â¦\84 â¬\82* â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1â¦\84 â\8a¢ T1 ![h,a] â\86\92 â¦\83G2,L2â¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T ![h,a] â\86\92 â\89¥[h] ð\9d\90\92â¦\83G,L,Tâ¦\84.
+ â\88\80G,L,T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\89¥[h] ð\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. â¦\83G,Lâ¦\84 â\8a¢ T ![h,a] â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84.
+ â\88\80G,L,T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d«.
#h #a #G #L #T #H
/3 width=2 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. â¦\83G,Lâ¦\84 â\8a¢ T ![h,a] â\86\92 â¦\83G,L,Tâ¦\84 >[h] â¦\83G,L,Tâ¦\84 → ⊥.
+ â\88\80G,L,T. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] â\86\92 â\9dªG,L,Tâ\9d« >[h] â\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. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T0 ![h,a] →
- â\88\80n1,T1. â¦\83G,Lâ¦\84 â\8a¢ T0 â\9e¡*[n1,h] T1 â\86\92 â\88\80n2,T2. â¦\83G,Lâ¦\84 ⊢ T0 ➡*[n2,h] T2 →
- â\88\83â\88\83T. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n2-n1,h] T & â¦\83G,Lâ¦\84 ⊢ T2 ➡*[n1-n2,h] T.
+ â\88\80T0. â\9dªG,Lâ\9d« ⊢ T0 ![h,a] →
+ â\88\80n1,T1. â\9dªG,Lâ\9d« â\8a¢ T0 â\9e¡*[n1,h] T1 â\86\92 â\88\80n2,T2. â\9dªG,Lâ\9d« ⊢ T0 ➡*[n2,h] T2 →
+ â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[n2-n1,h] T & â\9dªG,Lâ\9d« ⊢ T2 ➡*[n1-n2,h] 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. â¦\83G,Lâ¦\84 ⊢ T1 ![h,a] →
- â\88\80n,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[n,h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T2 ![h,a].
+ â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ![h,a] →
+ â\88\80n,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[n,h] 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. â¦\83G,Lâ¦\84 ⊢ T1 ![h,a] →
- â\88\80n,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n,h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T2 ![h,a].
+ â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ![h,a] →
+ â\88\80n,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[n,h] 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. â¦\83G,L1â¦\84 â\8a¢ T ![h,a] â\86\92 â\88\80L2. â¦\83G,L1â¦\84 â\8a¢ â\9e¡[h] L2 â\86\92 â¦\83G,L2â¦\84 ⊢ 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] 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. â¦\83G,L1â¦\84 â\8a¢ T ![h,a] â\86\92 â\88\80L2. â¦\83G,L1â¦\84 â\8a¢ â\9e¡*[h] L2 â\86\92 â¦\83G,L2â¦\84 ⊢ 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] 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. â¦\83G,Lâ¦\84 ⊢ T ![h,a] →
- â\88\80T1. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n,h] T1 â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n,h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2.
+ â\88\80T. â\9dªG,Lâ\9d« ⊢ T ![h,a] →
+ â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n,h] T1 â\86\92 â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n,h] 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. â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.T ![h,a] â\86\92 â\88\80n,X. â¦\83G,Lâ¦\84 ⊢ ⓐV.T ➡*[n,h] X →
- â\88\83â\88\83U. â¦\83G,Lâ¦\84 â\8a¢ T ![h,a] & â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n,h] U & â¦\83G,Lâ¦\84 ⊢ ⓐ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 ➡*[n,h] X →
+ â\88\83â\88\83U. â\9dªG,Lâ\9d« â\8a¢ T ![h,a] & â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n,h] 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. â¦\83G,Lâ¦\84 â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T2 ![h,a] →
- Decidable â\80¦ (â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,L1â¦\84 ⊢ T1 ![h,a] →
- â\88\80n,T2. â¦\83G,L1â¦\84 ⊢ T1 ➡[n,h] T2 →
- â\88\80L2. â¦\83G,L1â¦\84 â\8a¢ â\9e¡[h] L2 â\86\92 â¦\83G,L2â¦\84 ⊢ T2 ![h,a].
+ λG,L1,T1. â\9dªG,L1â\9d« ⊢ T1 ![h,a] →
+ â\88\80n,T2. â\9dªG,L1â\9d« ⊢ T1 ➡[n,h] T2 →
+ â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h] 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. â¦\83G,L1â¦\84 ⊢ T1 ![h,a] →
- â\88\80n,T2. â¦\83G,L1â¦\84 ⊢ T1 ➡*[n,h] T2 →
- â\88\80L2. â¦\83G,L1â¦\84 â\8a¢ â\9e¡[h] L2 â\86\92 â¦\83G,L2â¦\84 ⊢ T2 ![h,a].
+ λG,L1,T1. â\9dªG,L1â\9d« ⊢ T1 ![h,a] →
+ â\88\80n,T2. â\9dªG,L1â\9d« ⊢ T1 ➡*[n,h] T2 →
+ â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h] 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. â¦\83G,L0â¦\84 ⊢ T0 ![h,a] →
- â\88\80n1,T1. â¦\83G,L0â¦\84 â\8a¢ T0 â\9e¡[n1,h] T1 â\86\92 â\88\80n2,T2. â¦\83G,L0â¦\84 ⊢ T0 ➡[n2,h] T2 →
- â\88\80L1. â¦\83G,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ T1 â\9e¡*[n2-n1,h] T & â¦\83G,L2â¦\84 ⊢ T2 ➡*[n1-n2,h] T.
+ λG,L0,T0. â\9dªG,L0â\9d« ⊢ T0 ![h,a] →
+ â\88\80n1,T1. â\9dªG,L0â\9d« â\8a¢ T0 â\9e¡[n1,h] T1 â\86\92 â\88\80n2,T2. â\9dªG,L0â\9d« ⊢ T0 ➡[n2,h] T2 →
+ â\88\80L1. â\9dªG,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[n2-n1,h] T & â\9dªG,L2â\9d« ⊢ T2 ➡*[n1-n2,h] T.
definition IH_cnv_cpms_strip_lpr (h) (a): relation3 genv lenv term ≝
- λG,L0,T0. â¦\83G,L0â¦\84 ⊢ T0 ![h,a] →
- â\88\80n1,T1. â¦\83G,L0â¦\84 â\8a¢ T0 â\9e¡*[n1,h] T1 â\86\92 â\88\80n2,T2. â¦\83G,L0â¦\84 ⊢ T0 ➡[n2,h] T2 →
- â\88\80L1. â¦\83G,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ T1 â\9e¡*[n2-n1,h] T & â¦\83G,L2â¦\84 ⊢ T2 ➡*[n1-n2,h] T.
+ λG,L0,T0. â\9dªG,L0â\9d« ⊢ T0 ![h,a] →
+ â\88\80n1,T1. â\9dªG,L0â\9d« â\8a¢ T0 â\9e¡*[n1,h] T1 â\86\92 â\88\80n2,T2. â\9dªG,L0â\9d« ⊢ T0 ➡[n2,h] T2 →
+ â\88\80L1. â\9dªG,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[n2-n1,h] T & â\9dªG,L2â\9d« ⊢ T2 ➡*[n1-n2,h] T.
definition IH_cnv_cpms_conf_lpr (h) (a): relation3 genv lenv term ≝
- λG,L0,T0. â¦\83G,L0â¦\84 ⊢ T0 ![h,a] →
- â\88\80n1,T1. â¦\83G,L0â¦\84 â\8a¢ T0 â\9e¡*[n1,h] T1 â\86\92 â\88\80n2,T2. â¦\83G,L0â¦\84 ⊢ T0 ➡*[n2,h] T2 →
- â\88\80L1. â¦\83G,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ T1 â\9e¡*[n2-n1,h] T & â¦\83G,L2â¦\84 ⊢ T2 ➡*[n1-n2,h] T.
+ λG,L0,T0. â\9dªG,L0â\9d« ⊢ T0 ![h,a] →
+ â\88\80n1,T1. â\9dªG,L0â\9d« â\8a¢ T0 â\9e¡*[n1,h] T1 â\86\92 â\88\80n2,T2. â\9dªG,L0â\9d« ⊢ T0 ➡*[n2,h] T2 →
+ â\88\80L1. â\9dªG,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[n2-n1,h] T & â\9dªG,L2â\9d« ⊢ T2 ➡*[n1-n2,h] T.
(* Auxiliary properties for preservation ************************************)
fact cnv_cpms_trans_lpr_sub (h) (a):
∀G0,L0,T0.
- (â\88\80G1,L1,T1. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G1,L1,T1â¦\84 → IH_cnv_cpm_trans_lpr h a G1 L1 T1) →
- â\88\80G1,L1,T1. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G1,L1,T1â¦\84 → IH_cnv_cpms_trans_lpr h a G1 L1 T1.
+ (â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« >[h] â\9dªG1,L1,T1â\9d« → IH_cnv_cpm_trans_lpr h a G1 L1 T1) →
+ â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« >[h] â\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. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G1,L1,T1â¦\84 → IH_cnv_cpms_conf_lpr h a G1 L1 T1) →
- â\88\80G1,L1,T1. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G1,L1,T1â¦\84 → IH_cnv_cpm_conf_lpr h a G1 L1 T1.
+ (â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« >[h] â\9dªG1,L1,T1â\9d« → IH_cnv_cpms_conf_lpr h a G1 L1 T1) →
+ â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« >[h] â\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. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G1,L1,T1â¦\84 → IH_cnv_cpms_conf_lpr h a G1 L1 T1) →
- â\88\80G1,L1,T1. â¦\83G0,L0,T0â¦\84 >[h] â¦\83G1,L1,T1â¦\84 → IH_cnv_cpms_strip_lpr h a G1 L1 T1.
+ (â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« >[h] â\9dªG1,L1,T1â\9d« → IH_cnv_cpms_conf_lpr h a G1 L1 T1) →
+ â\88\80G1,L1,T1. â\9dªG0,L0,T0â\9d« >[h] â\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. â¦\83G,L1â¦\84 ⊢ ⓝW.V ![h,a] →
+| 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 h a G L1 L2 → lsubv h a G (L1.ⓓⓝW.V) (L2.ⓛW)
.
/2 width=6 by lsubv_inv_atom_sn_aux/ qed-.
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. â¦\83G,K1â¦\84 ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2
+ ∀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
& I = BPair Abbr (ⓝW.V) & L2 = K2.ⓛW.
#h #a #G #L1 #L2 * -L1 -L2
[ #J #K1 #H destruct
(* Basic_2A1: uses: lsubsv_inv_pair1 *)
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. â¦\83G,K1â¦\84 ⊢ ⓝW.V ![h,a] & G ⊢ K1 ⫃![h,a] K2
+ ∀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
& I = BPair Abbr (ⓝW.V) & L2 = K2.ⓛW.
/2 width=3 by lsubv_inv_bind_sn_aux/ qed-.
fact lsubv_inv_bind_dx_aux (h) (a) (G):
∀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. â¦\83G,K1â¦\84 ⊢ ⓝW.V ![h,a] &
+ ∀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] &
G ⊢ K1 ⫃![h,a] K2 & I = BPair Abst W & L1 = K1.ⓓⓝW.V.
#h #a #G #L1 #L2 * -L1 -L2
[ #J #K2 #H destruct
(* Basic_2A1: uses: lsubsv_inv_pair2 *)
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. â¦\83G,K1â¦\84 ⊢ ⓝW.V ![h,a] &
+ ∀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] &
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. â¦\83G,L2â¦\84 ⊢ T ![h,a] →
- â\88\80L1. G â\8a¢ L1 â«\83![h,a] L2 â\86\92 â¦\83G,L1â¦\84 ⊢ 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â¦\83fâ¦\84 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â¦\83fâ¦\84 → ⇩*[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â¦\83fâ¦\84 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â¦\83fâ¦\84 → ⇩*[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. â¦\83G,Lâ¦\84 ⊢ ⓝ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. â¦\83G,Lâ¦\84 ⊢ ⋆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. â¦\83G,Kâ¦\84 ⊢ V ![h,a] →
- â\88\80I,T,U. â¦\83G,K.â\93\91{I}Vâ¦\84 ⊢ T :[h,a] U →
- â\88\80p. â¦\83G,Kâ¦\84 â\8a¢ â\93\91{p,I}V.T :[h,a] â\93\91{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« â\8a¢ â\93\91[p,I]V.T :[h,a] â\93\91[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. â¦\83G,Lâ¦\84 â\8a¢ T :[h,a] U â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓝ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. â¦\83G,Lâ¦\84 ⊢ T0 :[h,a] T1 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T1 :[h,a] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓝ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. â¦\83G,Lâ¦\84 ⊢ §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. â¦\83G,Lâ¦\84 â\8a¢ T :[h,a] U â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T :[h,a] U â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T :[h,a] U â\86\92 â\88\83â\88\83A. â¦\83G,Lâ¦\84 â\8a¢ T â\81\9d A & â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p}W.T :[h,a] W → ⊥.
+ â\88\80W,T. â\9dªG,Lâ\9d« â\8a¢ â\93\9b[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. â¦\83G,Kâ¦\84 â\8a¢ â\93\9b{p}W.T :[h,a] U1 →
- â\88\80U2. â¦\83G,K.â\93\9bWâ¦\84 ⊢ T :[h,a] U2 → ⇧*[1] U1 ≘ U2 → ⊥.
+ â\88\80W,T,U1. â\9dªG,Kâ\9d« â\8a¢ â\93\9b[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. â¦\83G,Lâ¦\84 ⊢ T :[h,a] U1 →
- â\88\80U2. â¦\83G,Lâ¦\84 â\8a¢ U1 â¬\8c*[h] U2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ U2 ![h,a] â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T :[h,a] U1 →
- â\88\80U2. â¦\83G,Lâ¦\84 ⊢ U1 ⬌*[h] U2 →
- â\88\80W2. â¦\83G,Lâ¦\84 â\8a¢ U2 :[h,a] W2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ ⋆s :[h,a] X2 →
- â\88§â\88§ â¦\83G,Lâ¦\84 â\8a¢ â\8b\86(⫯[h]s) â¬\8c*[h] X2 & â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,K.â\93\9bVâ¦\84 ⊢ #0 :[h,a] X2 →
- â\88\83â\88\83U. â¦\83G,Kâ¦\84 â\8a¢ V ![h,a] & â\87§*[1] V â\89\98 U & â¦\83G,K.â\93\9bVâ¦\84 â\8a¢ U â¬\8c*[h] X2 & â¦\83G,K.â\93\9bVâ¦\84 ⊢ 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
elim (cpms_inv_ell_sn … H2) -H2 *
[ #_ #H destruct
| #m #W #HVW #HWX1 #H destruct
- elim (lifts_total V (ð\9d\90\94â\9d´1â\9dµ)) #U #HVU
+ elim (lifts_total V (ð\9d\90\94â\9d¨1â\9d©)) #U #HVU
lapply (cpms_lifts_bi … HVW (Ⓣ) … (K.ⓛV) … HVU … HWX1) -W
[ /3 width=1 by drops_refl, drops_drop/ ] #HUX1
/3 width=5 by cprs_div, ex4_intro/
(* 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. â¦\83G,Lâ¦\84 ⊢ V :[h,a] W →
- â\88\80T,U. â¦\83G,L.â\93\9bWâ¦\84 â\8a¢ T :[h,a] U â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.â\93\9b{p}W.T :[h,a] â\93\90V.â\93\9b{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« â\8a¢ â\93\90V.â\93\9b[p]W.T :[h,a] â\93\90V.â\93\9b[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. â¦\83G,Lâ¦\84 ⊢ V :[h,a] W →
- â\88\80T,U. â¦\83G,Lâ¦\84 â\8a¢ T :[h,a] â\93\9b{p}W.U â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.T :[h,a] â\93\90V.â\93\9b{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« â\8a¢ â\93\90V.T :[h,a] â\93\90V.â\93\9b[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
elim (cpms_inv_abst_sn … HUX2) #W0 #U0 #HW0 #HU0 #H destruct
elim (cprs_conf … HWX1 … HW0) -HW0 #X0 #HX10 #HWX0
-@(cnv_cast … (ⓐV.ⓛ{p}W0.U0)) (**) (* full auto too slow *)
+@(cnv_cast … (ⓐV.ⓛ[p]W0.U0)) (**) (* full auto too slow *)
[ /2 width=11 by cnv_appl_ge/
| /3 width=11 by cnv_appl_ge, cpms_cprs_trans/
| /2 width=1 by cpms_appl_dx/
(* Inversion lemmas with advanced rt_computation for terms ******************)
lemma nta_inv_abst_bi_cnv (h) (a) (p) (G) (K) (W):
- â\88\80T,U. â¦\83G,Kâ¦\84 â\8a¢ â\93\9b{p}W.T :[h,a] â\93\9b{p}W.U →
- â\88§â\88§ â¦\83G,Kâ¦\84 â\8a¢ W ![h,a] & â¦\83G,K.â\93\9bWâ¦\84 ⊢ T :[h,a] U.
+ â\88\80T,U. â\9dªG,Kâ\9d« â\8a¢ â\93\9b[p]W.T :[h,a] â\93\9b[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. â¦\83G,Kâ¦\84 ⊢ V :[h,a] W →
- â\88\80U. â\87§*[1] W â\89\98 U â\86\92 â¦\83G,K.â\93\93Vâ¦\84 ⊢ #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. â¦\83G,Kâ¦\84 ⊢ W ![h,a] →
- â\88\80U. â\87§*[1] W â\89\98 U â\86\92 â¦\83G,K.â\93\9bWâ¦\84 ⊢ #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. â¦\83G,Kâ¦\84 ⊢ #i :[h,a] T →
- â\88\80U. â\87§*[1] T â\89\98 U â\86\92 â¦\83G,K.â\93\98{I}â¦\84 ⊢ #(↑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
+lapply (cnv_lifts … HT (Ⓣ) … (K.ⓘ[I]) … HTU) -HT
[ /3 width=3 by drops_refl, drops_drop/ ] #HU
-lapply (cnv_lifts â\80¦ Hi (â\93\89) (ð\9d\90\94â\9d´1â\9dµ) (K.â\93\98{I}) ???) -Hi
+lapply (cnv_lifts â\80¦ Hi (â\93\89) (ð\9d\90\94â\9d¨1â\9d©) (K.â\93\98[I]) ???) -Hi
[4:|*: /3 width=3 by drops_refl, drops_drop/ ] #Hi
-elim (cpms_lifts_sn … HTX … (Ⓣ) … (K.ⓘ{I}) … HTU) -T
+elim (cpms_lifts_sn … HTX … (Ⓣ) … (K.ⓘ[I]) … HTU) -T
[| /3 width=3 by drops_refl, drops_drop/ ] #XU #HXU #HUXU
/3 width=5 by cnv_cast, cpms_lref/
qed.
(* 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. â¦\83G,Kâ¦\84 ⊢ 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 â¦\83G,Lâ¦\84 ⊢ #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 â\80¦ HWU (ð\9d\90\94â\9d´1â\9dµ) (ð\9d\90\94â\9d´iâ\9dµ)) [| // ] #X #HWX #HXU
+elim (lifts_split_trans â\80¦ HWU (ð\9d\90\94â\9d¨1â\9d©) (ð\9d\90\94â\9d¨iâ\9d©)) [| // ] #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. â¦\83G,Kâ¦\84 ⊢ W ![h,a] →
- â\88\80U. â\87§*[â\86\91i] W â\89\98 U â\86\92 â\87©*[i] L â\89\98 K.â\93\9bW â\86\92 â¦\83G,Lâ¦\84 ⊢ #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 â\80¦ HWU (ð\9d\90\94â\9d´1â\9dµ) (ð\9d\90\94â\9d´iâ\9dµ)) [| // ] #X #HWX #HXU
+elim (lifts_split_trans â\80¦ HWU (ð\9d\90\94â\9d¨1â\9d©) (ð\9d\90\94â\9d¨iâ\9d©)) [| // ] #X #HWX #HXU
/3 width=9 by nta_lifts_bi, nta_ldec_cnv/
qed.
(* Properties with evaluations for rt-transition on terms *******************)
lemma nta_typecheck_dec (h) (a) (G) (L): ac_props a →
- â\88\80T,U. Decidable â\80¦ (â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T :[h,a] U →
- â\88§â\88§ â\89¥[h] ð\9d\90\92â¦\83G,L,Tâ¦\84 & â\89¥[h] ð\9d\90\92â¦\83G,L,Uâ¦\84.
+ â\88\80T,U. â\9dªG,Lâ\9d« ⊢ T :[h,a] U →
+ â\88§â\88§ â\89¥[h] ð\9d\90\92â\9dªG,L,Tâ\9d« & â\89¥[h] ð\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=2 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.
- â¦\83G,Kâ¦\84 ⊢ 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. â¦\83G,Kâ¦\84 ⊢ 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.
- â¦\83G,Kâ¦\84 ⊢ #i :[h,𝟐] W → ⇧*[1] W ≘ U →
- Q G K (#i) W → Q G (K.ⓘ{I}) (#↑i) 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.
- â¦\83G,Kâ¦\84 â\8a¢ V ![h,ð\9d\9f\90] â\86\92 â¦\83G,K.â\93\91{I}Vâ¦\84 ⊢ T :[h,𝟐] U →
- Q G (K.ⓑ{I}V) T U → Q G K (ⓑ{p,I}V.T) (ⓑ{p,I}V.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.
- â¦\83G,Lâ¦\84 â\8a¢ V :[h,ð\9d\9f\90] W â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T :[h,ð\9d\9f\90] â\93\9b{p}W.U →
- Q G L V W → Q G L T (ⓛ{p}W.U) → Q G L (ⓐV.T) (ⓐV.ⓛ{p}W.U)
+ â\9dªG,Lâ\9d« â\8a¢ V :[h,ð\9d\9f\90] W â\86\92 â\9dªG,Lâ\9d« â\8a¢ T :[h,ð\9d\9f\90] â\93\9b[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. â¦\83G,Lâ¦\84 ⊢ 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.
- â¦\83G,Lâ¦\84 â\8a¢ T :[h,ð\9d\9f\90] U1 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ U1 â¬\8c*[h] U2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ 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.
- â¦\83G,Kâ¦\84 ⊢ 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. â¦\83G,Kâ¦\84 ⊢ 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.
- â¦\83G,Kâ¦\84 ⊢ #i :[h,𝛚] W → ⇧*[1] W ≘ U →
- Q G K (#i) W → Q G (K.ⓘ{I}) (#↑i) 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.
- â¦\83G,Kâ¦\84 â\8a¢ V ![h,ð\9d\9b\9a] â\86\92 â¦\83G,K.â\93\91{I}Vâ¦\84 ⊢ T :[h,𝛚] U →
- Q G (K.ⓑ{I}V) T U → Q G K (ⓑ{p,I}V.T) (ⓑ{p,I}V.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.
- â¦\83G,Lâ¦\84 â\8a¢ V :[h,ð\9d\9b\9a] W â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T :[h,ð\9d\9b\9a] â\93\9b{p}W.U →
- Q G L V W → Q G L T (ⓛ{p}W.U) → Q G L (ⓐV.T) (ⓐV.ⓛ{p}W.U)
+ â\9dªG,Lâ\9d« â\8a¢ V :[h,ð\9d\9b\9a] W â\86\92 â\9dªG,Lâ\9d« â\8a¢ T :[h,ð\9d\9b\9a] â\93\9b[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.
- â¦\83G,Lâ¦\84 â\8a¢ T :[h,ð\9d\9b\9a] U â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓐ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. â¦\83G,Lâ¦\84 ⊢ 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.
- â¦\83G,Lâ¦\84 â\8a¢ T :[h,ð\9d\9b\9a] U1 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ U1 â¬\8c*[h] U2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ 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.
- â¦\83G,Kâ¦\84 ⊢ 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. â¦\83G,Kâ¦\84 ⊢ 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.
- â¦\83G,Kâ¦\84 ⊢ #i :[h,𝛚] W → ⇧*[1] W ≘ U →
- Q G K (#i) W → Q G (K.ⓘ{I}) (#↑i) 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.
- â¦\83G,Kâ¦\84 â\8a¢ V ![h,ð\9d\9b\9a] â\86\92 â¦\83G,K.â\93\91{I}Vâ¦\84 ⊢ T :[h,𝛚] U →
- Q G (K.ⓑ{I}V) T U → Q G K (ⓑ{p,I}V.T) (ⓑ{p,I}V.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.
- â¦\83G,Kâ¦\84 â\8a¢ V :[h,ð\9d\9b\9a] W â\86\92 â¦\83G,K.â\93\9bWâ¦\84 ⊢ 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)
+ â\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.
- â¦\83G,Lâ¦\84 â\8a¢ T :[h,ð\9d\9b\9a] U â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓐ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. â¦\83G,Lâ¦\84 ⊢ 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.
- â¦\83G,Lâ¦\84 â\8a¢ T :[h,ð\9d\9b\9a] U1 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ U1 â¬\8c*[h] U2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T ![h,a] â\86\92 â\88\80U.â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[1,h] U â\86\92 â¦\83G,Lâ¦\84 ⊢ 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¡*[1,h] 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. â¦\83G,Lâ¦\84 â\8a¢ T ![h,a] â\86\92 â\88\83U. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T :[h,a] U â\86\92 â\88\83T0. â¦\83G,Lâ¦\84 ⊢ ⓝ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. â¦\83G,Lâ¦\84 â\8a¢ T :[h,a] U â\86\92 â\88\83T0. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T :[h,𝛚] U →
- â\88\80V. â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.U ![h,ð\9d\9b\9a] â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓐ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. â¦\83G,L1â¦\84 â\8a¢ T1 :[h,a] U â\86\92 â\88\80T2. â¦\83G,L1â¦\84 ⊢ T1 ➡[h] T2 →
- â\88\80L2. â¦\83G,L1â¦\84 â\8a¢ â\9e¡[h] L2 â\86\92 â¦\83G,L2â¦\84 ⊢ 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] T2 →
+ â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h] 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. â¦\83G,Lâ¦\84 ⊢ T1 :[h,a] U →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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] 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. â¦\83G,Lâ¦\84 ⊢ T1 :[h,a] U →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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] 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. â¦\83G,L1â¦\84 ⊢ T :[h,a] U →
- â\88\80L2. â¦\83G,L1â¦\84 â\8a¢ â\9e¡[h] L2 â\86\92 â¦\83G,L2â¦\84 ⊢ 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] 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. â¦\83G,L1â¦\84 ⊢ T :[h,a] U →
- â\88\80L2. â¦\83G,L1â¦\84 â\8a¢ â\9e¡*[h] L2 â\86\92 â¦\83G,L2â¦\84 ⊢ 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] 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. â¦\83G,K.â\93\93Vâ¦\84 ⊢ #0 :[h,a] X2 →
- â\88\83â\88\83W,U. â¦\83G,Kâ¦\84 â\8a¢ V :[h,a] W & â\87§*[1] W â\89\98 U & â¦\83G,K.â\93\93Vâ¦\84 â\8a¢ U â¬\8c*[h] X2 & â¦\83G,K.â\93\93Vâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ #↑i :[h,a] X2 →
- â\88\83â\88\83I,K,T2,U2. â¦\83G,Kâ¦\84 â\8a¢ #i :[h,a] T2 & â\87§*[1] T2 â\89\98 U2 & â¦\83G,K.â\93\98{I}â¦\84 â\8a¢ U2 â¬\8c*[h] X2 & â¦\83G,K.â\93\98{I}â¦\84 â\8a¢ X2 ![h,a] & L = K.â\93\98{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« â\8a¢ X2 ![h,a] & L = K.â\93\98[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. â¦\83G,Lâ¦\84 ⊢ #i :[h,a] X2 →
- â\88¨â\88¨ â\88\83â\88\83K,V,W,U. â\87©*[i] L â\89\98 K.â\93\93V & â¦\83G,Kâ¦\84 â\8a¢ V :[h,a] W & â\87§*[â\86\91i] W â\89\98 U & â¦\83G,Lâ¦\84 â\8a¢ U â¬\8c*[h] X2 & â¦\83G,Lâ¦\84 ⊢ X2 ![h,a]
- | â\88\83â\88\83K,W,U. â\87©*[i] L â\89\98 K. â\93\9bW & â¦\83G,Kâ¦\84 â\8a¢ W ![h,a] & â\87§*[â\86\91i] W â\89\98 U & â¦\83G,Lâ¦\84 â\8a¢ U â¬\8c*[h] X2 & â¦\83G,Lâ¦\84 ⊢ 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
/4 width=8 by cnv_cpms_nta, cpcs_cprs_sn, ex5_4_intro, or_introl/
| #n #Y #X #U #H #HVU #HUX1 #H0 destruct
lapply (drops_mono … H … HLK) -H #H destruct
- elim (lifts_total V (ð\9d\90\94â\9d´â\86\91iâ\9dµ)) #W #HVW
+ elim (lifts_total V (ð\9d\90\94â\9d¨â\86\91iâ\9d©)) #W #HVW
lapply (cpms_lifts_bi … HVU (Ⓣ) … L … HVW … HUX1) -U
[ /2 width=2 by drops_isuni_fwd_drop2/ ] #HWX1
/4 width=9 by cprs_div, ex5_3_intro, or_intror/
qed-.
lemma nta_inv_bind_sn_cnv (h) (a) (p) (I) (G) (K) (X2):
- â\88\80V,T. â¦\83G,Kâ¦\84 â\8a¢ â\93\91{p,I}V.T :[h,a] X2 →
- â\88\83â\88\83U. â¦\83G,Kâ¦\84 â\8a¢ V ![h,a] & â¦\83G,K.â\93\91{I}Vâ¦\84 â\8a¢ T :[h,a] U & â¦\83G,Kâ¦\84 â\8a¢ â\93\91{p,I}V.U â¬\8c*[h] X2 & â¦\83G,Kâ¦\84 ⊢ X2 ![h,a].
+ â\88\80V,T. â\9dªG,Kâ\9d« â\8a¢ â\93\91[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. â¦\83G,Lâ¦\84 ⊢ ⓐV.T :[h,𝟐] X2 →
- â\88\83â\88\83p,W,U. â¦\83G,Lâ¦\84 â\8a¢ V :[h,ð\9d\9f\90] W & â¦\83G,Lâ¦\84 â\8a¢ T :[h,ð\9d\9f\90] â\93\9b{p}W.U & â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.â\93\9b{p}W.U â¬\8c*[h] X2 & â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ ⓐV.T :[h,𝛚] X2 →
- â\88¨â\88¨ â\88\83â\88\83p,W,U. â¦\83G,Lâ¦\84 â\8a¢ V :[h,ð\9d\9b\9a] W & â¦\83G,Lâ¦\84 â\8a¢ T :[h,ð\9d\9b\9a] â\93\9b{p}W.U & â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.â\93\9b{p}W.U â¬\8c*[h] X2 & â¦\83G,Lâ¦\84 ⊢ X2 ![h,𝛚]
- | â\88\83â\88\83U. â¦\83G,Lâ¦\84 â\8a¢ T :[h,ð\9d\9b\9a] U & â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.U ![h,ð\9d\9b\9a] & â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.U â¬\8c*[h] X2 & â¦\83G,Lâ¦\84 ⊢ 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
[ lapply (cnv_cpms_trans … HT … HT0) #H0
elim (cnv_inv_bind … H0) -H0 #_ #HU
elim (cnv_fwd_cpm_SO … HU) #U0 #HU0 -HU
- lapply (cpms_step_dx … HT0 1 (ⓛ{p}W0.U0) ?) -HT0 [ /2 width=1 by cpm_bind/ ] #HT0
+ lapply (cpms_step_dx … HT0 1 (ⓛ[p]W0.U0) ?) -HT0 [ /2 width=1 by cpm_bind/ ] #HT0
lapply (cpms_appl_dx … V V … HT0) [ // ] #HTU0
lapply (cnv_cpms_conf_eq … H1 … HTU0 … H) -H1 -H -HTU0 #HU0X1
/4 width=8 by cnv_cpms_nta, cpcs_cprs_div, ex4_3_intro, or_introl/
(* Basic_2A1: uses: nta_inv_cast1 *)
lemma nta_inv_cast_sn (h) (a) (G) (L) (X2):
- â\88\80U,T. â¦\83G,Lâ¦\84 ⊢ ⓝU.T :[h,a] X2 →
- â\88§â\88§ â¦\83G,Lâ¦\84 â\8a¢ T :[h,a] U & â¦\83G,Lâ¦\84 â\8a¢ U â¬\8c*[h] X2 & â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ ⓝT1.T0 :[h,a] X2 →
- â\88\83â\88\83T2. â¦\83G,Lâ¦\84 â\8a¢ T0 :[h,a] T1 & â¦\83G,Lâ¦\84 â\8a¢ T1 :[h,a] T2 & â¦\83G,Lâ¦\84 â\8a¢ â\93\9dT2.T1 â¬\8c*[h] X2 & â¦\83G,Lâ¦\84 ⊢ 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: "â¦\83G, Lâ¦\84 â\8a¢ U2 â¬\8c*[h] X2" can be "â¦\83G, Lâ¦\84 ⊢ X2 ➡*[h] U2" *)
+(* Note: "â\9dªG, Lâ\9d« â\8a¢ U2 â¬\8c*[h] X2" can be "â\9dªG, Lâ\9d« ⊢ X2 ➡*[h] U2" *)
lemma nta_inv_lifts_sn (h) (a) (G):
- â\88\80L,T2,X2. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Kâ¦\84 â\8a¢ T1 :[h,a] U1 & â\87§*[f] U1 â\89\98 U2 & â¦\83G,Lâ¦\84 â\8a¢ U2 â¬\8c*[h] X2 & â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T :[h,a] U1 â\86\92 â\88\80U2. â¦\83G,Lâ¦\84 â\8a¢ T :[h,a] U2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T1 :[h,a] U1 â\86\92 â\88\80T2,U2. â¦\83G,Lâ¦\84 ⊢ T2 :[h,a] U2 →
- â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T :[h,a] U1 â\86\92 â\88\80U2. â¦\83G,Lâ¦\84 â\8a¢ U1 â\9e¡*[h] U2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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] 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. â¦\83G,Lâ¦\84 â\8a¢ T1 :[h,a] U0 â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[h] T2 →
- â\88\80U. â¦\83G,Lâ¦\84 â\8a¢ T2 :[h,a] U â\86\92 â¦\83G,Lâ¦\84 ⊢ 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] 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. â¦\83G,Lâ¦\84 â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[h] T2 →
- â\88\80U. â¦\83G,Lâ¦\84 â\8a¢ T2 :[h,a] U â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 :[h,a] U.
+ â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T1 ![h,a] â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h] 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. â¦\83G,Lâ¦\84 â\8a¢ T1 :[h,a] U â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2 →
- â\88\80U0. â¦\83G,Lâ¦\84 â\8a¢ T2 :[h,a] U0 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T1 :[h,a] U →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T2 ![h,a] â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ U ![h,a] & â¦\83G,Lâ¦\84 â\8a¢ T ![h,a] & â¦\83G,Lâ¦\84 â\8a¢ U â\9e¡*[h] U0 & â¦\83G,Lâ¦\84 ⊢ T ➡*[n,h] 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] U0 & â\9dªG,Lâ\9d« ⊢ T ➡*[n,h] 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. â¦\83G,Lâ¦\84 â\8a¢ U ![h,a] â\86\92 â\88\80T. â¦\83G,Lâ¦\84 ⊢ T ![h,a] →
- â\88\80U0. â¦\83G,Lâ¦\84 â\8a¢ U â\9e¡*[h] U0 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n,h] U0 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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] U0 â\86\92 â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n,h] 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. â¦\83G,Lâ¦\84 â\8a¢ T ![h,a] â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ ⋆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. â¦\83G,Kâ¦\84 ⊢ V ![h,a] →
- â\88\80I,T,U. â¦\83G,K.â\93\91{I}Vâ¦\84 ⊢ T :*[h,a,n] U →
- â\88\80p. â¦\83G,Kâ¦\84 â\8a¢ â\93\91{p,I}V.T :*[h,a,n] â\93\91{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« â\8a¢ â\93\91[p,I]V.T :*[h,a,n] â\93\91[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. â¦\83G,Lâ¦\84 â\8a¢ T :*[h,a,n] U â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T :*[h,a,n] U â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T1 ![h,a] â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T2 ![h,a] â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T1 :*[h,a,0] T2 →
- â\88§â\88§ â¦\83G,Lâ¦\84 â\8a¢ T1 ![h,a] & â¦\83G,Lâ¦\84 â\8a¢ T2 ![h,a] & â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ V :[h,a] W →
- â\88\80p,T,U. â¦\83G,Lâ¦\84 â\8a¢ T :*[h,a,m] â\93\9b{p}W.U â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓐ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
-elim (cnv_cpms_conf … H … HU0 0 (ⓛ{p}W0.U)) -H -HU0
+elim (cnv_cpms_conf … H … HU0 0 (ⓛ[p]W0.U)) -H -HU0
[| /2 width=1 by cpms_bind/ ] -HW0 <minus_n_O #X0 #HUX0 #H
elim (cpms_inv_abst_sn … H) -H #W1 #U1 #HW01 #_ #H destruct
/3 width=13 by cnv_appl_ge, cpms_cprs_trans/
(* Advanced inversion lemmas of native validity for terms *******************)
lemma cnv_inv_appl_ntas (h) (a) (G) (L):
- â\88\80V,T. â¦\83G,Lâ¦\84 ⊢ ⓐV.T ![h,a] →
- â\88\83â\88\83n,p,W,T,U. ad a n & â¦\83G,Lâ¦\84 â\8a¢ V :[h,a] W & â¦\83G,Lâ¦\84 â\8a¢ T :*[h,a,n] â\93\9b{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« â\8a¢ T :*[h,a,n] â\93\9b[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. â¦\83G,Lâ¦\84 â\8a¢ T :[h,a] U â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T1 :[h,a] T →
- â\88\80n,T2. â¦\83G,Lâ¦\84 â\8a¢ T :*[h,a,n] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T1 :*[h,a,n] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T :[h,a] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ V :[h,a] W â\86\92 â\88\80p,T,U0. â¦\83G,Lâ¦\84 â\8a¢ T :*[h,a,0] â\93\9b{p}W.U0 →
- â\88\80U. â¦\83G,L.â\93\9bWâ¦\84 â\8a¢ U0 :[h,a] U â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.T :[h,a] â\93\90V.â\93\9b{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« â\8a¢ T :*[h,a,0] â\93\9b[p]W.U0 →
+ â\88\80U. â\9dªG,L.â\93\9bWâ\9d« â\8a¢ U0 :[h,a] U â\86\92 â\9dªG,Lâ\9d« â\8a¢ â\93\90V.T :[h,a] â\93\90V.â\93\9b[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. â¦\83G,Lâ¦\84 â\8a¢ V :[h,a] W â\86\92 â\88\80T,U. â¦\83G,Lâ¦\84 ⊢ T :[h,a] U →
- â\88\80p,U0. â¦\83G,Lâ¦\84 â\8a¢ U :*[h,a,n] â\93\9b{p}W.U0 â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓐ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. â¦\83G,Lâ¦\84 â\8a¢ T :*[h,a,1] U â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ ⓐV.T :[h,a] X →
- â\88¨â\88¨ â\88\83â\88\83p,W,U,U0. ad a 0 & â¦\83G,Lâ¦\84 â\8a¢ V :[h,a] W & â¦\83G,Lâ¦\84 â\8a¢ T :*[h,a,0] â\93\9b{p}W.U0 & â¦\83G,L.â\93\9bWâ¦\84 â\8a¢ U0 :[h,a] U & â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.â\93\9b{p}W.U â¬\8c*[h] X & â¦\83G,Lâ¦\84 ⊢ X ![h,a]
- | â\88\83â\88\83n,p,W,U,U0. ad a (â\86\91n) & â¦\83G,Lâ¦\84 â\8a¢ V :[h,a] W & â¦\83G,Lâ¦\84 â\8a¢ T :[h,a] U & â¦\83G,Lâ¦\84 â\8a¢ U :*[h,a,n] â\93\9b{p}W.U0 & â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.U â¬\8c*[h] X & â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T1 ![h,a] â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T2 ![h,a] â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T1 :*[h,a,n1] T0 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ 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.
- â¦\83G,Kâ¦\84 ⊢ 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. â¦\83G,Kâ¦\84 ⊢ 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.
- â¦\83G,Kâ¦\84 ⊢ #i :[h,a] W → ⇧*[1] W ≘ U →
- Q G K (#i) W → Q G (K.ⓘ{I}) (#↑i) 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.
- â¦\83G,Kâ¦\84 â\8a¢ V ![h,a] â\86\92 â¦\83G,K.â\93\91{I}Vâ¦\84 ⊢ T :[h,a] U →
- Q G (K.ⓑ{I}V) T U → Q G K (ⓑ{p,I}V.T) (ⓑ{p,I}V.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 â¦\83G,Lâ¦\84 â\8a¢ V :[h,a] W â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T :*[h,a,0] â\93\9b{p}W.U0 â\86\92 â¦\83G,L.â\93\9bWâ¦\84 ⊢ U0 :[h,a] U →
- Q G L V W (* → Q G (L.ⓛW) U0 U *) → Q G L (ⓐV.T) (ⓐV.ⓛ{p}W.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 â¦\83G,Lâ¦\84 â\8a¢ V :[h,a] W â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T :[h,a] U â\86\92 â¦\83G,Lâ¦\84 â\8a¢ U :*[h,a,n] â\93\9b{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« â\8a¢ U :*[h,a,n] â\93\9b[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. â¦\83G,Lâ¦\84 ⊢ 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.
- â¦\83G,Lâ¦\84 â\8a¢ T :[h,a] U1 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ U1 â¬\8c*[h] U2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T1 :*[h,a,n1] T0 →
- â\88\80n2,T2. â¦\83G,Lâ¦\84 â\8a¢ T0 :*[h,a,n2] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T ![h,a] â\86\92 â\88\80n,U.â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n,h] U â\86\92 â¦\83G,Lâ¦\84 ⊢ 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¡*[n,h] 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. â¦\83G,Lâ¦\84 ⊢ T1 :*[h,a,n1+n2] T2 →
- â\88\83â\88\83T0. â¦\83G,Lâ¦\84 â\8a¢ T1 :*[h,a,n1] T0 & â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ ⓐV.T :*[h,a,m] X →
- â\88¨â\88¨ â\88\83â\88\83n,p,W,U,U0. n â\89¤ m & ad a n & â¦\83G,Lâ¦\84 â\8a¢ V :*[h,a,1] W & â¦\83G,Lâ¦\84 â\8a¢ T :*[h,a,n] â\93\9b{p}W.U0 & â¦\83G,L.â\93\9bWâ¦\84 â\8a¢ U0 :*[h,a,m-n] U & â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.â\93\9b{p}W.U â¬\8c*[h] X & â¦\83G,Lâ¦\84 ⊢ X ![h,a]
- | â\88\83â\88\83n,p,W,U,U0. m â\89¤ n & ad a n & â¦\83G,Lâ¦\84 â\8a¢ V :*[h,a,1] W & â¦\83G,Lâ¦\84 â\8a¢ T :*[h,a,m] U & â¦\83G,Lâ¦\84 â\8a¢ U :*[h,a,n-m] â\93\9b{p}W.U0 & â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.U â¬\8c*[h] X & â¦\83G,Lâ¦\84 ⊢ 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( â¦\83 term 46 G, break term 46 L â¦\84 ⊢ 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( â¦\83 term 46 G, break term 46 L â¦\84 ⊢ 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( â¦\83 term 46 G, break term 46 L â¦\84 ⊢ 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( â¦\83 term 46 G, break term 46 L â¦\84 ⊢ 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( â¦\83 term 46 G, break term 46 L1 â¦\84 ⊢ ⬌η[ 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( â¦\83 term 46 G, break term 46 L â¦\84 ⊢ 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( â¦\83 term 46 G, break term 46 L â¦\84 ⊢ 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( â¦\83 term 46 G, break term 46 L â¦\84 â\8a¢ break term 46 T1 â¬\8c* [ 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« â\8a¢ break term 46 T1 â¬\8c*[ 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( â¦\83 term 46 G, break term 46 L â¦\84 â\8a¢ break term 46 T1 â\9e¡ [ break term 46 h ] break term 46 T2 )"
+notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« â\8a¢ break term 46 T1 â\9e¡[ break term 46 h ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PRed $h $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 L â¦\84 â\8a¢ break term 46 T1 â\9e¡ [ break term 46 n, break term 46 h ] break term 46 T2 )"
+notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« â\8a¢ break term 46 T1 â\9e¡[ break term 46 n, break term 46 h ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PRed $n $h $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 L â¦\84 â\8a¢ break term 46 T1 â\9e¡* [ break term 46 h ] ð\9d\90\8d â¦\83 break term 46 T2 â¦\84 )"
+notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« â\8a¢ break term 46 T1 â\9e¡*[ break term 46 h ] ð\9d\90\8dâ\9dª break term 46 T2 â\9d« )"
non associative with precedence 45
for @{ 'PRedEval $h $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 L â¦\84 â\8a¢ break term 46 T1 â\9e¡* [ break term 46 h, break term 46 n ] ð\9d\90\8d â¦\83 break term 46 T2 â¦\84 )"
+notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« â\8a¢ break term 46 T1 â\9e¡*[ break term 46 h, break term 46 n ] ð\9d\90\8dâ\9dª break term 46 T2 â\9d« )"
non associative with precedence 45
for @{ 'PRedEval $h $n $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 L â¦\84 ⊢ 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( â¦\83 term 46 G, break term 46 L â¦\84 ⊢ ➡𝐍𝐖*[ 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( â¦\83 term 46 G, break term 46 L â¦\84 â\8a¢ â\9e¡ [ break term 46 h ] ð\9d\90\8d â¦\83 break term 46 T â¦\84 )"
+notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« â\8a¢ â\9e¡[ break term 46 h ] ð\9d\90\8dâ\9dª break term 46 T â\9d« )"
non associative with precedence 45
for @{ 'PRedNormal $h $G $L $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 L1 â¦\84 ⊢ ➡[ 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 @{ 'PRedSn $h $G $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 L1 â¦\84 ⊢ ➡*[ 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 @{ 'PRedSnStar $h $G $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 L â¦\84 â\8a¢ break term 46 T1 â\9e¡ * [ break term 46 h ] break term 46 T2 )"
+notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« â\8a¢ break term 46 T1 â\9e¡*[ break term 46 h ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PRedStar $h $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 L â¦\84 â\8a¢ break term 46 T1 â\9e¡* [ break term 46 n, break term 46 h ] break term 46 T2 )"
+notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« â\8a¢ break term 46 T1 â\9e¡*[ break term 46 n, break term 46 h ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PRedStar $n $h $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\89½ [ break term 46 h ] â¦\83 break term 46 G2, break term 46 L2, break term 46 T2 â¦\84 )"
+notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« â\89½[ break term 46 h ] â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
non associative with precedence 45
for @{ 'PRedSubTy $h $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\89» [ break term 46 h ] â¦\83 break term 46 G2, break term 46 L2, break term 46 T2 â¦\84 )"
+notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« â\89»[ break term 46 h ] â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
non associative with precedence 45
for @{ 'PRedSubTyProper $h $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\89¥ [ break term 46 h ] â¦\83 break term 46 G2, break term 46 L2, break term 46 T2 â¦\84 )"
+notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« â\89¥[ break term 46 h ] â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
non associative with precedence 45
for @{ 'PRedSubTyStar $h $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 > [ break term 46 h ] â¦\83 break term 46 G2, break term 46 L2, break term 46 T2 â¦\84 )"
+notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« >[ break term 46 h ] â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
non associative with precedence 45
for @{ 'PRedSubTyStarProper $h $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ≥ [ term 46 h ] 𝐒 ⦃ break term 46 G, break term 46 L, break term 46 T ⦄ )"
+notation "hvbox( ≥[ term 46 h ] 𝐒❪ break term 46 G, break term 46 L, break term 46 T ❫ )"
non associative with precedence 45
for @{ 'PRedSubTyStrong $h $G $L $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 L â¦\84 â\8a¢ break term 46 T1 â¬\88 [ break term 46 h ] break term 46 T2 )"
+notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« â\8a¢ break term 46 T1 â¬\88[ break term 46 h ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PRedTy $h $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 L â¦\84 â\8a¢ break term 46 T1 â¬\88 [ break term 46 Rt, break term 46 c, break term 46 h ] break term 46 T2 )"
+notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« â\8a¢ break term 46 T1 â¬\88[ break term 46 Rt, break term 46 c, break term 46 h ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PRedTy $Rt $c $h $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 L â¦\84 â\8a¢ â¬\88 [ break term 46 h ] ð\9d\90\8d â¦\83 break term 46 T â¦\84 )"
+notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« â\8a¢ â¬\88[ break term 46 h ] ð\9d\90\8dâ\9dª break term 46 T â\9d« )"
non associative with precedence 45
for @{ 'PRedTyNormal $h $G $L $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 L1 â¦\84 ⊢ ⬈[ 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 @{ 'PRedTySn $h $G $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 L1 â¦\84 â\8a¢ â¬\88 [ break term 46 h, break term 46 T ] break term 46 L2 )"
+notation "hvbox( â\9dª term 46 G, break term 46 L1 â\9d« â\8a¢ â¬\88[ break term 46 h, break term 46 T ] break term 46 L2 )"
non associative with precedence 45
for @{ 'PRedTySn $h $T $G $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 L1 â¦\84 ⊢ ⬈*[ 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 @{ 'PRedTySnStar $h $G $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( G ⊢ ⬈ * [ break term 46 h, break term 46 T ] 𝐒 ⦃ break term 46 L ⦄ )"
+notation "hvbox( G ⊢ ⬈*[ break term 46 h, break term 46 T ] 𝐒❪ break term 46 L ❫ )"
non associative with precedence 45
for @{ 'PRedTySNStrong $h $T $G $L }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 L â¦\84 â\8a¢ break term 46 T1 â¬\88 * [ break term 46 h ] break term 46 T2 )"
+notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« â\8a¢ break term 46 T1 â¬\88*[ break term 46 h ] break term 46 T2 )"
non associative with precedence 45
for @{ 'PRedTyStar $h $G $L $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 L â¦\84 â\8a¢ â¬\88 * [ break term 46 h] ð\9d\90\92 â¦\83 break term 46 T â¦\84 )"
+notation "hvbox( â\9dª term 46 G, break term 46 L â\9d« â\8a¢ â¬\88*[ break term 46 h] ð\9d\90\92â\9dª break term 46 T â\9d« )"
non associative with precedence 45
for @{ 'PRedTyStrong $h $G $L $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 L â¦\84 ⊢ 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( â¦\83 term 46 G, break term 46 L â¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] T2 → T1 ≅ T2.
+ λT1. â\88\80n,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] 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. â¦\83G,Lâ¦\84 ⊢ ➡𝐍𝐖*[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. â¦\83G,â\8b\86â¦\84 ⊢ ➡𝐍𝐖*[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. â¦\83G,L.â\93¤{I}â¦\84 ⊢ ➡𝐍𝐖*[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. â¦\83G,Lâ¦\84 ⊢ ➡𝐍𝐖*[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. â¦\83G,L.â\93\91{I}Vâ¦\84 ⊢ ➡𝐍𝐖*[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 (ð\9d\90\94â\9d´1â\9dµ)) #W #HVW
+elim (lifts_total V (ð\9d\90\94â\9d¨1â\9d©)) #W #HVW
[ lapply (H 0 W ?) [ /3 width=3 by cpm_cpms, cpm_delta/ ]
| lapply (H 1 W ?) [ /3 width=3 by cpm_cpms, cpm_ell/ ]
] -H #HW
qed-.
lemma cnuw_inv_cast (h) (G) (L):
- â\88\80V,T. â¦\83G,Lâ¦\84 ⊢ ➡𝐍𝐖*[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 tweq_inv_cast_xy_y/
(* Basic forward lemmas *****************************************************)
lemma cnuw_fwd_appl (h) (G) (L):
- â\88\80V,T. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡ð\9d\90\8dð\9d\90\96*[h] â\93\90V.T â\86\92 â¦\83G,Lâ¦\84 ⊢ ➡𝐍𝐖*[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, tweq_inv_appl_bi/
(* Advanced inversion lemmas ************************************************)
lemma cnuw_inv_abbr_pos (h) (G) (L):
- â\88\80V,T. â¦\83G,Lâ¦\84 ⊢ ➡𝐍𝐖*[h] +ⓓV.T → ⊥.
+ â\88\80V,T. â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] +ⓓV.T → ⊥.
#h #G #L #V #T1 #H
elim (cprs_abbr_pos_twneq h G L V T1) #T2 #HT12 #HnT12
/3 width=2 by/
(* Advanced properties ******************************************************)
-lemma cnuw_abbr_neg (h) (G) (L): â\88\80V,T. â¦\83G,Lâ¦\84 ⊢ ➡𝐍𝐖*[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 tweq_abbr_neg/
]
qed.
-lemma cnuw_abst (h) (p) (G) (L): â\88\80W,T. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡ð\9d\90\8dð\9d\90\96*[h] â\93\9b{p}W.T.
+lemma cnuw_abst (h) (p) (G) (L): â\88\80W,T. â\9dªG,Lâ\9d« â\8a¢ â\9e¡ð\9d\90\8dð\9d\90\96*[h] â\93\9b[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 tweq_abst/
qed.
lemma cnuw_cpms_trans (h) (n) (G) (L):
- â\88\80T1. â¦\83G,Lâ¦\84 ⊢ ➡𝐍𝐖*[h] T1 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n,h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ ➡𝐍𝐖*[h] T2.
+ â\88\80T1. â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] T1 →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[n,h] 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, tweq_canc_sn/
qed-.
lemma cnuw_dec_ex (h) (G) (L):
- â\88\80T1. â\88¨â\88¨ â¦\83G,Lâ¦\84 ⊢ ➡𝐍𝐖*[h] T1
- | â\88\83â\88\83n,T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] T2 & (T1 ≅ T2 → ⊥).
+ â\88\80T1. â\88¨â\88¨ â\9dªG,Lâ\9d« ⊢ ➡𝐍𝐖*[h] T1
+ | â\88\83â\88\83n,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] 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)
[ /3 width=7 by cnuw_atom_drops, or_introl/
| * * [ #I | * #V ] #K #HLK
[ /3 width=8 by cnuw_unit_drops, or_introl/
- | elim (lifts_total V ð\9d\90\94â\9d´â\86\91iâ\9dµ) #W #HVW
+ | elim (lifts_total V ð\9d\90\94â\9d¨â\86\91iâ\9d©) #W #HVW
@or_intror @(ex2_2_intro … W) [1,2: /2 width=7 by cpms_delta_drops/ ] #H
lapply (tweq_inv_lref_sn … H) -H #H destruct
/2 width=5 by lifts_inv_lref2_uni_lt/
- | elim (lifts_total V ð\9d\90\94â\9d´â\86\91iâ\9dµ) #W #HVW
+ | elim (lifts_total V ð\9d\90\94â\9d¨â\86\91iâ\9d©) #W #HVW
@or_intror @(ex2_2_intro … W) [1,2: /2 width=7 by cpms_ell_drops/ ] #H
lapply (tweq_inv_lref_sn … H) -H #H destruct
/2 width=5 by lifts_inv_lref2_uni_lt/
@or_intror @(ex2_2_intro … n (ⓐV1.T2)) [ /2 width=1 by cpms_appl_dx/ ] #H
lapply (tweq_inv_appl_bi … H) -H /2 width=1 by/
]
- | elim (lifts_total V1 ð\9d\90\94â\9d´1â\9dµ) #X1 #HVX1
- @or_intror @(ex2_2_intro … (ⓓ{p}W1.ⓐX1.U1)) [1,2: /2 width=3 by cpms_theta/ ] #H
+ | elim (lifts_total V1 ð\9d\90\94â\9d¨1â\9d©) #X1 #HVX1
+ @or_intror @(ex2_2_intro … (ⓓ[p]W1.ⓐX1.U1)) [1,2: /2 width=3 by cpms_theta/ ] #H
elim (tweq_inv_appl_sn … H) -H #X1 #X2 #_ #H destruct
- | @or_intror @(ex2_2_intro … (ⓓ{p}ⓝW1.V1.U1)) [1,2: /2 width=2 by cpms_beta/ ] #H
+ | @or_intror @(ex2_2_intro … (ⓓ[p]ⓝW1.V1.U1)) [1,2: /2 width=2 by cpms_beta/ ] #H
elim (tweq_inv_appl_sn … H) -H #X1 #X2 #_ #H destruct
]
| @or_intror @(ex2_2_intro … T1) [1,2: /2 width=2 by cpms_eps/ ] #H
]
qed-.
-lemma cnuw_dec (h) (G) (L): â\88\80T. Decidable (â¦\83G,Lâ¦\84 ⊢ ➡𝐍𝐖*[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. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡ð\9d\90\8dð\9d\90\96*[h] #i â\86\92 â¦\83G,L.â\93\98{I}â¦\84 ⊢ ➡𝐍𝐖*[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 â¦\83G,Lâ¦\84 ⊢ ➡𝐍𝐖*[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):
- ∀K,i. ⇩*[i] L ≘ K.ⓤ{I} → ⦃G,L⦄ ⊢ ➡𝐍𝐖*[h] #i.
+ ∀K,i. ⇩*[i] L ≘ K.ⓤ[I] → ❪G,L❫ ⊢ ➡𝐍𝐖*[h] #i.
#h #I #G #L #K #i #HLK #n #X #H
elim (cpms_inv_lref1_drops … H) -H * [ // || #m ] #Y #V1 #V2 #HLY
lapply (drops_mono … HLK … HLY) -L #H destruct
(* Advanced properties with simple terms ************************************)
lemma cnuw_appl_simple (h) (G) (L):
- â\88\80V,T. ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â\9e¡ð\9d\90\8dð\9d\90\96*[h] T â\86\92 â¦\83G,Lâ¦\84 ⊢ ➡𝐍𝐖*[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: cprre *)
definition cpmre (h) (n) (G) (L): relation2 term term ≝
- λT1,T2. â\88§â\88§ â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n,h] T2 & â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83T2â¦\84.
+ λT1,T2. â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[n,h] T2 & â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªT2â\9d«.
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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n,h] T2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83T2â¦\84 â\86\92 â¦\83G,Lâ¦\84â\8a¢T1â\9e¡*[h,n]ð\9d\90\8dâ¦\83T2â¦\84.
+ â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[n,h] T2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªT2â\9d« â\86\92 â\9dªG,Lâ\9d«â\8a¢T1â\9e¡*[h,n]ð\9d\90\8dâ\9dªT2â\9d«.
/2 width=1 by conj/ qed.
(* Basic forward lemmas *****************************************************)
lemma cpmre_fwd_cpms (h) (n) (G) (L):
- â\88\80T1,T2. â¦\83G,Lâ¦\84â\8a¢T1â\9e¡*[h,n]ð\9d\90\8dâ¦\83T2â¦\84 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] T2.
+ â\88\80T1,T2. â\9dªG,Lâ\9d«â\8a¢T1â\9e¡*[h,n]ð\9d\90\8dâ\9dªT2â\9d« â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] 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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\81\9d A â\86\92 â\88\83T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[h,n] ð\9d\90\8dâ¦\83T2â¦\84.
+ â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T1 â\81\9d A â\86\92 â\88\83T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n] ð\9d\90\8dâ\9dªT2â\9d«.
#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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[n1,h] T â\86\92 â¦\83G,Lâ¦\84 ⊢ T ➡*[n2,h] T2 → Q n2 T → Q (n1+n2) T1) →
- â\88\80n,T1. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] T2 → Q n T1.
+ (â\88\80n1,n2,T1,T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[n1,h] T â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡*[n2,h] T2 → Q n2 T → Q (n1+n2) T1) →
+ â\88\80n,T1. â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] 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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n1,h] T â\86\92 Q n1 T â\86\92 â¦\83G,Lâ¦\84 ⊢ T ➡[n2,h] T2 → Q (n1+n2) T2) →
- â\88\80n,T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] T2 → Q n T2.
+ (â\88\80n1,n2,T,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[n1,h] T â\86\92 Q n1 T â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡[n2,h] T2 → Q (n1+n2) T2) →
+ â\88\80n,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] T2 → Q n T2.
#h #G #L #T1 #Q @ltc_ind_dx_refl //
qed-.
(* Basic_1: includes: pr1_pr0 *)
(* Basic_1: uses: pr3_pr2 *)
(* Basic_2A1: includes: cpr_cprs *)
-lemma cpm_cpms (h) (G) (L): â\88\80n,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[n,h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] T2.
+lemma cpm_cpms (h) (G) (L): â\88\80n,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[n,h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] T2.
/2 width=1 by ltc_rc/ qed.
-lemma cpms_step_sn (h) (G) (L): â\88\80n1,T1,T. â¦\83G,Lâ¦\84 ⊢ T1 ➡[n1,h] T →
- â\88\80n2,T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n2,h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n1+n2,h] T2.
+lemma cpms_step_sn (h) (G) (L): â\88\80n1,T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡[n1,h] T →
+ â\88\80n2,T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n2,h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[n1+n2,h] T2.
/2 width=3 by ltc_sn/ qed-.
-lemma cpms_step_dx (h) (G) (L): â\88\80n1,T1,T. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n1,h] T →
- â\88\80n2,T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡[n2,h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n1+n2,h] T2.
+lemma cpms_step_dx (h) (G) (L): â\88\80n1,T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡*[n1,h] T →
+ â\88\80n2,T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[n2,h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[n1+n2,h] T2.
/2 width=3 by ltc_dx/ qed-.
(* Basic_2A1: uses: cprs_bind_dx *)
lemma cpms_bind_dx (n) (h) (G) (L):
- â\88\80V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ➡[h] V2 →
- â\88\80I,T1,T2. â¦\83G,L.â\93\91{I}V1â¦\84 ⊢ T1 ➡*[n,h] T2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â\9e¡*[n,h] â\93\91{p,I}V2.T2.
+ â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h] V2 →
+ â\88\80I,T1,T2. â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ➡*[n,h] T2 →
+ â\88\80p. â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V1.T1 â\9e¡*[n,h] â\93\91[p,I]V2.T2.
#n #h #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 (n) (h) (G) (L):
- â\88\80V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ➡[h] V2 →
- â\88\80T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] T2 →
- â¦\83G,Lâ¦\84 ⊢ ⓐV1.T1 ➡*[n,h] ⓐV2.T2.
+ â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h] V2 →
+ â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] T2 →
+ â\9dªG,Lâ\9d« ⊢ ⓐV1.T1 ➡*[n,h] ⓐV2.T2.
#n #h #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 (n) (h) (G) (L):
∀T1,T. ⇧*[1] T ≘ T1 →
- â\88\80V,T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n,h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ +ⓓV.T1 ➡*[n,h] T2.
+ â\88\80V,T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n,h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ +ⓓV.T1 ➡*[n,h] T2.
#n #h #G #L #T1 #T #HT1 #V #T2 #H @(cpms_ind_dx … H) -T2
/3 width=3 by cpms_step_dx, cpm_cpms, cpm_zeta/
qed.
(* Basic_2A1: uses: cprs_zeta *)
lemma cpms_zeta_dx (n) (h) (G) (L):
∀T2,T. ⇧*[1] T2 ≘ T →
- â\88\80V,T1. â¦\83G,L.â\93\93Vâ¦\84 â\8a¢ T1 â\9e¡*[n,h] T â\86\92 â¦\83G,Lâ¦\84 ⊢ +ⓓV.T1 ➡*[n,h] T2.
+ â\88\80V,T1. â\9dªG,L.â\93\93Vâ\9d« â\8a¢ T1 â\9e¡*[n,h] T â\86\92 â\9dªG,Lâ\9d« ⊢ +ⓓV.T1 ➡*[n,h] T2.
#n #h #G #L #T2 #T #HT2 #V #T1 #H @(cpms_ind_sn … H) -T1
/3 width=3 by cpms_step_sn, cpm_cpms, cpm_bind, cpm_zeta/
qed.
(* Basic_2A1: uses: cprs_eps *)
lemma cpms_eps (n) (h) (G) (L):
- â\88\80T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] T2 →
- â\88\80V. â¦\83G,Lâ¦\84 ⊢ ⓝV.T1 ➡*[n,h] T2.
+ â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] T2 →
+ â\88\80V. â\9dªG,Lâ\9d« ⊢ ⓝV.T1 ➡*[n,h] T2.
#n #h #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 (n) (h) (G) (L):
- â\88\80U1,U2. â¦\83G,Lâ¦\84 ⊢ U1 ➡*[n,h] U2 →
- â\88\80T. â¦\83G,Lâ¦\84 ⊢ ⓝU1.T ➡*[↑n,h] U2.
+ â\88\80U1,U2. â\9dªG,Lâ\9d« ⊢ U1 ➡*[n,h] U2 →
+ â\88\80T. â\9dªG,Lâ\9d« ⊢ ⓝU1.T ➡*[↑n,h] U2.
#n #h #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 (n) (h) (G) (L):
- â\88\80V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ➡[h] V2 →
- â\88\80W1,W2. â¦\83G,Lâ¦\84 ⊢ W1 ➡[h] W2 →
- â\88\80T1,T2. â¦\83G,L.â\93\9bW1â¦\84 ⊢ T1 ➡*[n,h] T2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\9b{p}W1.T1 â\9e¡*[n,h] â\93\93{p}ⓝW2.V2.T2.
+ â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h] V2 →
+ â\88\80W1,W2. â\9dªG,Lâ\9d« ⊢ W1 ➡[h] W2 →
+ â\88\80T1,T2. â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ➡*[n,h] T2 →
+ â\88\80p. â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\9b[p]W1.T1 â\9e¡*[n,h] â\93\93[p]ⓝW2.V2.T2.
#n #h #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 (n) (h) (G) (L):
- â\88\80V1,V. â¦\83G,Lâ¦\84 ⊢ V1 ➡[h] V →
+ â\88\80V1,V. â\9dªG,Lâ\9d« ⊢ V1 ➡[h] V →
∀V2. ⇧*[1] V ≘ V2 →
- â\88\80W1,W2. â¦\83G,Lâ¦\84 ⊢ W1 ➡[h] W2 →
- â\88\80T1,T2. â¦\83G,L.â\93\93W1â¦\84 ⊢ T1 ➡*[n,h] T2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\93{p}W1.T1 â\9e¡*[n,h] â\93\93{p}W2.ⓐV2.T2.
+ â\88\80W1,W2. â\9dªG,Lâ\9d« ⊢ W1 ➡[h] W2 →
+ â\88\80T1,T2. â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ➡*[n,h] T2 →
+ â\88\80p. â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\93[p]W1.T1 â\9e¡*[n,h] â\93\93[p]W2.ⓐV2.T2.
#n #h #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) (n):
- â\88\80s. â¦\83G,Lâ¦\84 ⊢ ⋆s ➡*[n,h] ⋆((next h)^n s).
+ â\88\80s. â\9dªG,Lâ\9d« ⊢ ⋆s ➡*[n,h] ⋆((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 (n) (h) (G) (L): â\88\80X2,s. â¦\83G,Lâ¦\84 ⊢ ⋆s ➡*[n,h] X2 → X2 = ⋆(((next h)^n) s).
+lemma cpms_inv_sort1 (n) (h) (G) (L): â\88\80X2,s. â\9dªG,Lâ\9d« ⊢ ⋆s ➡*[n,h] X2 → X2 = ⋆(((next h)^n) s).
#n #h #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 (n) (h) (G):
- â\88\80X2,i. â¦\83G,â\8b\86â¦\84 ⊢ #i ➡*[n,h] X2 → ∧∧ X2 = #i & n = 0.
+ â\88\80X2,i. â\9dªG,â\8b\86â\9d« ⊢ #i ➡*[n,h] X2 → ∧∧ X2 = #i & n = 0.
#n #h #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 (n) (h) (I) (K) (G):
- â\88\80X2. â¦\83G,K.â\93¤{I}â¦\84 ⊢ #0 ➡*[n,h] X2 → ∧∧ X2 = #0 & n = 0.
+ â\88\80X2. â\9dªG,K.â\93¤[I]â\9d« ⊢ #0 ➡*[n,h] X2 → ∧∧ X2 = #0 & n = 0.
#n #h #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 (n) (h) (G) (L):
- â\88\80X2,l. â¦\83G,Lâ¦\84 ⊢ §l ➡*[n,h] X2 → ∧∧ X2 = §l & n = 0.
+ â\88\80X2,l. â\9dªG,Lâ\9d« ⊢ §l ➡*[n,h] X2 → ∧∧ X2 = §l & n = 0.
#n #h #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. â¦\83G,Lâ¦\84 ⊢ ⓝW1.T1 ➡*[n,h] X2 →
- â\88¨â\88¨ â\88\83â\88\83W2,T2. â¦\83G,Lâ¦\84 â\8a¢ W1 â\9e¡*[n,h] W2 & â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] T2 & X2 = ⓝW2.T2
- | â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] X2
- | â\88\83â\88\83m. â¦\83G,Lâ¦\84 ⊢ W1 ➡*[m,h] X2 & n = ↑m.
+ â\88\80W1,T1,X2. â\9dªG,Lâ\9d« ⊢ ⓝW1.T1 ➡*[n,h] X2 →
+ â\88¨â\88¨ â\88\83â\88\83W2,T2. â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡*[n,h] W2 & â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] T2 & X2 = ⓝW2.T2
+ | â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] X2
+ | â\88\83â\88\83m. â\9dªG,Lâ\9d« ⊢ W1 ➡*[m,h] 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. â¦\83G,Lâ¦\84 â\8a¢ T â\81\9d A â\86\92 â\88\83U. â¦\83G,Lâ¦\84 ⊢ T ➡*[n,h] U.
+ â\88\80T. â\9dªG,Lâ\9d« â\8a¢ T â\81\9d A â\86\92 â\88\83U. â\9dªG,Lâ\9d« ⊢ T ➡*[n,h] 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. â¦\83G,Lâ¦\84 ⊢ T ⁝ A →
- â\88\80n1,U1. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n1,h] â\93\9b{p}W.U1 → ∀n2. n1 ≤ n2 →
- â\88\83â\88\83U2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n2,h] â\93\9b{p}W.U2 & â¦\83G,L.â\93\9bWâ¦\84 ⊢ U1 ➡*[n2-n1,h] U2.
+ â\88\80A. â\9dªG,Lâ\9d« ⊢ T ⁝ A →
+ â\88\80n1,U1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n1,h] â\93\9b[p]W.U1 → ∀n2. n1 ≤ n2 →
+ â\88\83â\88\83U2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n2,h] â\93\9b[p]W.U2 & â\9dªG,L.â\93\9bWâ\9d« ⊢ U1 ➡*[n2-n1,h] 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 (n) (h) (G) (L):
- â\88\80I,V1,T1,T2. â¦\83G,L.â\93\91{I}V1â¦\84 ⊢ T1 ➡*[n,h] T2 →
- â\88\80V2. â¦\83G,Lâ¦\84 ⊢ V1 ➡*[h] V2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â\9e¡*[n,h] â\93\91{p,I}V2.T2.
+ â\88\80I,V1,T1,T2. â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ➡*[n,h] T2 →
+ â\88\80V2. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h] V2 →
+ â\88\80p. â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V1.T1 â\9e¡*[n,h] â\93\91[p,I]V2.T2.
#n #h #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 (n) (h) (G) (L):
- â\88\80T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] T2 →
- â\88\80V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ➡*[h] V2 →
- â¦\83G,Lâ¦\84 ⊢ ⓐV1.T1 ➡*[n,h] ⓐV2.T2.
+ â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] T2 →
+ â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h] V2 →
+ â\9dªG,Lâ\9d« ⊢ ⓐV1.T1 ➡*[n,h] ⓐV2.T2.
#n #h #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 (n) (h) (G) (L):
- â\88\80V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ➡[h] V2 →
- â\88\80W1,T1,T2. â¦\83G,L.â\93\9bW1â¦\84 ⊢ T1 ➡*[n,h] T2 →
- â\88\80W2. â¦\83G,Lâ¦\84 ⊢ W1 ➡*[h] W2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\9b{p}W1.T1 â\9e¡*[n,h] â\93\93{p}ⓝW2.V2.T2.
+ â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h] V2 →
+ â\88\80W1,T1,T2. â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ➡*[n,h] T2 →
+ â\88\80W2. â\9dªG,Lâ\9d« ⊢ W1 ➡*[h] W2 →
+ â\88\80p. â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\9b[p]W1.T1 â\9e¡*[n,h] â\93\93[p]ⓝW2.V2.T2.
#n #h #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 (n) (h) (G) (L):
- â\88\80W1,T1,T2. â¦\83G,L.â\93\9bW1â¦\84 ⊢ T1 ➡*[n,h] T2 →
- â\88\80W2. â¦\83G,Lâ¦\84 ⊢ W1 ➡*[h] W2 →
- â\88\80V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ➡*[h] V2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\9b{p}W1.T1 â\9e¡*[n,h] â\93\93{p}ⓝW2.V2.T2.
+ â\88\80W1,T1,T2. â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ➡*[n,h] T2 →
+ â\88\80W2. â\9dªG,Lâ\9d« ⊢ W1 ➡*[h] W2 →
+ â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h] V2 →
+ â\88\80p. â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\9b[p]W1.T1 â\9e¡*[n,h] â\93\93[p]ⓝW2.V2.T2.
#n #h #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 (n) (h) (G) (L):
- â\88\80V1,V. â¦\83G,Lâ¦\84 ⊢ V1 ➡[h] V → ∀V2. ⇧*[1] V ≘ V2 →
- â\88\80W1,T1,T2. â¦\83G,L.â\93\93W1â¦\84 ⊢ T1 ➡*[n,h] T2 →
- â\88\80W2. â¦\83G,Lâ¦\84 ⊢ W1 ➡*[h] W2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\93{p}W1.T1 â\9e¡*[n,h] â\93\93{p}W2.ⓐV2.T2.
+ â\88\80V1,V. â\9dªG,Lâ\9d« ⊢ V1 ➡[h] V → ∀V2. ⇧*[1] V ≘ V2 →
+ â\88\80W1,T1,T2. â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ➡*[n,h] T2 →
+ â\88\80W2. â\9dªG,Lâ\9d« ⊢ W1 ➡*[h] W2 →
+ â\88\80p. â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\93[p]W1.T1 â\9e¡*[n,h] â\93\93[p]W2.ⓐV2.T2.
#n #h #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 (n) (h) (G) (L):
- â\88\80V,V2. â\87§*[1] V â\89\98 V2 â\86\92 â\88\80W1,W2. â¦\83G,Lâ¦\84 ⊢ W1 ➡*[h] W2 →
- â\88\80T1,T2. â¦\83G,L.â\93\93W1â¦\84 ⊢ T1 ➡*[n,h] T2 →
- â\88\80V1. â¦\83G,Lâ¦\84 ⊢ V1 ➡*[h] V →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\93{p}W1.T1 â\9e¡*[n,h] â\93\93{p}W2.ⓐV2.T2.
+ â\88\80V,V2. â\87§*[1] V â\89\98 V2 â\86\92 â\88\80W1,W2. â\9dªG,Lâ\9d« ⊢ W1 ➡*[h] W2 →
+ â\88\80T1,T2. â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ➡*[n,h] T2 →
+ â\88\80V1. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h] V →
+ â\88\80p. â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\93[p]W1.T1 â\9e¡*[n,h] â\93\93[p]W2.ⓐV2.T2.
#n #h #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. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n1,h] T →
- â\88\80n2,T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n2,h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n1+n2,h] T2.
+ â\88\80n1,T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡*[n1,h] T →
+ â\88\80n2,T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n2,h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[n1+n2,h] T2.
/2 width=3 by ltc_trans/ qed-.
(* Basic_2A1: uses: scpds_cprs_trans *)
theorem cpms_cprs_trans (n) (h) (G) (L):
- â\88\80T1,T. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] T2.
+ â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] T →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] T2.
#n #h #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 (n) (h) (G) (L):
- â\88\80V1,T1,X2. â¦\83G,Lâ¦\84 ⊢ ⓐV1.T1 ➡*[n,h] X2 →
+ â\88\80V1,T1,X2. â\9dªG,Lâ\9d« ⊢ ⓐV1.T1 ➡*[n,h] X2 →
∨∨ ∃∃V2,T2.
- â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡*[h] V2 & â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] T2 &
+ â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡*[h] V2 & â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] T2 &
X2 = ⓐV2.T2
| ∃∃n1,n2,p,W,T.
- â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n1,h] â\93\9b{p}W.T & â¦\83G,Lâ¦\84 â\8a¢ â\93\93{p}ⓝW.V1.T ➡*[n2,h] X2 &
+ â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[n1,h] â\93\9b[p]W.T & â\9dªG,Lâ\9d« â\8a¢ â\93\93[p]ⓝW.V1.T ➡*[n2,h] X2 &
n1 + n2 = n
| ∃∃n1,n2,p,V0,V2,V,T.
- â¦\83G,Lâ¦\84 ⊢ V1 ➡*[h] V0 & ⇧*[1] V0 ≘ V2 &
- â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n1,h] â\93\93{p}V.T & â¦\83G,Lâ¦\84 â\8a¢ â\93\93{p}V.ⓐV2.T ➡*[n2,h] X2 &
+ â\9dªG,Lâ\9d« ⊢ V1 ➡*[h] V0 & ⇧*[1] V0 ≘ V2 &
+ â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[n1,h] â\93\93[p]V.T & â\9dªG,Lâ\9d« â\8a¢ â\93\93[p]V.ⓐV2.T ➡*[n2,h] X2 &
n1 + n2 = n.
#n #h #G #L #V1 #T1 #U2 #H
@(cpms_ind_dx … H) -U2 /3 width=5 by or3_intro0, ex3_2_intro/
]
qed-.
-lemma cpms_inv_plus (h) (G) (L): â\88\80n1,n2,T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n1+n2,h] T2 →
- â\88\83â\88\83T. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n1,h] T & â¦\83G,Lâ¦\84 ⊢ T ➡*[n2,h] T2.
+lemma cpms_inv_plus (h) (G) (L): â\88\80n1,n2,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[n1+n2,h] T2 →
+ â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[n1,h] T & â\9dªG,Lâ\9d« ⊢ T ➡*[n2,h] 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 (n) (h) (G) (L):
- â\88\80T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] T2 →
- â\88\80U1,U2. â¦\83G,Lâ¦\84 ⊢ U1 ➡*[n,h] U2 →
- â¦\83G,Lâ¦\84 ⊢ ⓝU1.T1 ➡*[n,h] ⓝU2.T2.
+ â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] T2 →
+ â\88\80U1,U2. â\9dªG,Lâ\9d« ⊢ U1 ➡*[n,h] U2 →
+ â\9dªG,Lâ\9d« ⊢ ⓝU1.T1 ➡*[n,h] ⓝU2.T2.
#n #h #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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n1,h] T â\86\92 â\88\80n2,T2. â¦\83G,Lâ¦\84 ⊢ T ➡*[n2,h] T2 →
- â\88\83â\88\83T0. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n2,h] T0 & â¦\83G,Lâ¦\84 ⊢ T0 ➡*[n1,h] T2.
+ â\88\80n1,T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[n1,h] T â\86\92 â\88\80n2,T2. â\9dªG,Lâ\9d« ⊢ T ➡*[n2,h] T2 →
+ â\88\83â\88\83T0. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[n2,h] T0 & â\9dªG,Lâ\9d« ⊢ T0 ➡*[n1,h] 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/
(* Forward lemmas with unbound context-sensitive rt-computation for terms ***)
(* Basic_2A1: includes: scpds_fwd_cpxs cprs_cpxs *)
-lemma cpms_fwd_cpxs (n) (h): â\88\80G,L,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n,h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2.
+lemma cpms_fwd_cpxs (n) (h): â\88\80G,L,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[n,h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T2.
#n #h #G #L #T1 #T2 #H @(cpms_ind_dx … H) -T2
/3 width=4 by cpxs_strap1, cpm_fwd_cpx/
qed-.
(* Advanced properties ******************************************************)
-lemma cpms_delta (n) (h) (G): â\88\80K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ➡*[n,h] V2 →
- â\88\80W2. â\87§*[1] V2 â\89\98 W2 â\86\92 â¦\83G,K.â\93\93V1â¦\84 ⊢ #0 ➡*[n,h] W2.
+lemma cpms_delta (n) (h) (G): â\88\80K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡*[n,h] V2 →
+ â\88\80W2. â\87§*[1] V2 â\89\98 W2 â\86\92 â\9dªG,K.â\93\93V1â\9d« ⊢ #0 ➡*[n,h] W2.
#n #h #G #K #V1 #V2 #H @(cpms_ind_dx … H) -V2
[ /3 width=3 by cpm_cpms, cpm_delta/
| #n1 #n2 #V #V2 #_ #IH #HV2 #W2 #HVW2
- elim (lifts_total V (ð\9d\90\94â\9d´1â\9dµ)) #W #HVW
+ elim (lifts_total V (ð\9d\90\94â\9d¨1â\9d©)) #W #HVW
/5 width=11 by cpms_step_dx, cpm_lifts_bi, drops_refl, drops_drop/
]
qed.
-lemma cpms_ell (n) (h) (G): â\88\80K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ➡*[n,h] V2 →
- â\88\80W2. â\87§*[1] V2 â\89\98 W2 â\86\92 â¦\83G,K.â\93\9bV1â¦\84 ⊢ #0 ➡*[↑n,h] W2.
+lemma cpms_ell (n) (h) (G): â\88\80K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡*[n,h] V2 →
+ â\88\80W2. â\87§*[1] V2 â\89\98 W2 â\86\92 â\9dªG,K.â\93\9bV1â\9d« ⊢ #0 ➡*[↑n,h] W2.
#n #h #G #K #V1 #V2 #H @(cpms_ind_dx … H) -V2
[ /3 width=3 by cpm_cpms, cpm_ell/
| #n1 #n2 #V #V2 #_ #IH #HV2 #W2 #HVW2
- elim (lifts_total V (ð\9d\90\94â\9d´1â\9dµ)) #W #HVW >plus_S1
+ elim (lifts_total V (ð\9d\90\94â\9d¨1â\9d©)) #W #HVW >plus_S1
/5 width=11 by cpms_step_dx, cpm_lifts_bi, drops_refl, drops_drop/
]
qed.
-lemma cpms_lref (n) (h) (I) (G): â\88\80K,T,i. â¦\83G,Kâ¦\84 ⊢ #i ➡*[n,h] T →
- â\88\80U. â\87§*[1] T â\89\98 U â\86\92 â¦\83G,K.â\93\98{I}â¦\84 ⊢ #↑i ➡*[n,h] U.
+lemma cpms_lref (n) (h) (I) (G): â\88\80K,T,i. â\9dªG,Kâ\9d« ⊢ #i ➡*[n,h] T →
+ â\88\80U. â\87§*[1] T â\89\98 U â\86\92 â\9dªG,K.â\93\98[I]â\9d« ⊢ #↑i ➡*[n,h] U.
#n #h #I #G #K #T #i #H @(cpms_ind_dx … H) -T
[ /3 width=3 by cpm_cpms, cpm_lref/
| #n1 #n2 #T #T2 #_ #IH #HT2 #U2 #HTU2
- elim (lifts_total T (ð\9d\90\94â\9d´1â\9dµ)) #U #TU
+ elim (lifts_total T (ð\9d\90\94â\9d¨1â\9d©)) #U #TU
/5 width=11 by cpms_step_dx, cpm_lifts_bi, drops_refl, drops_drop/
]
qed.
lemma cpms_cast_sn (n) (h) (G) (L):
- â\88\80U1,U2. â¦\83G,Lâ¦\84 ⊢ U1 ➡*[n,h] U2 →
- â\88\80T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡[n,h] T2 →
- â¦\83G,Lâ¦\84 ⊢ ⓝU1.T1 ➡*[n,h] ⓝU2.T2.
+ â\88\80U1,U2. â\9dªG,Lâ\9d« ⊢ U1 ➡*[n,h] U2 →
+ â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[n,h] T2 →
+ â\9dªG,Lâ\9d« ⊢ ⓝU1.T1 ➡*[n,h] ⓝU2.T2.
#n #h #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 (n) (h) (G):
∀L,K,V,i. ⇩*[i] L ≘ K.ⓓV →
- â\88\80V2. â¦\83G,Kâ¦\84 ⊢ V ➡*[n,h] V2 →
- â\88\80W2. â\87§*[â\86\91i] V2 â\89\98 W2 â\86\92 â¦\83G,Lâ¦\84 ⊢ #i ➡*[n,h] W2.
+ â\88\80V2. â\9dªG,Kâ\9d« ⊢ V ➡*[n,h] V2 →
+ â\88\80W2. â\87§*[â\86\91i] V2 â\89\98 W2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ➡*[n,h] W2.
#n #h #G #L #K #V #i #HLK #V2 #H @(cpms_ind_dx … H) -V2
[ /3 width=6 by cpm_cpms, cpm_delta_drops/
| #n1 #n2 #V1 #V2 #_ #IH #HV12 #W2 #HVW2
lapply (drops_isuni_fwd_drop2 … HLK) -HLK // #HLK
- elim (lifts_total V1 (ð\9d\90\94â\9d´â\86\91iâ\9dµ)) #W1 #HVW1
+ elim (lifts_total V1 (ð\9d\90\94â\9d¨â\86\91iâ\9d©)) #W1 #HVW1
/3 width=11 by cpm_lifts_bi, cpms_step_dx/
]
qed.
lemma cpms_ell_drops (n) (h) (G):
∀L,K,W,i. ⇩*[i] L ≘ K.ⓛW →
- â\88\80W2. â¦\83G,Kâ¦\84 ⊢ W ➡*[n,h] W2 →
- â\88\80V2. â\87§*[â\86\91i] W2 â\89\98 V2 â\86\92 â¦\83G,Lâ¦\84 ⊢ #i ➡*[↑n,h] V2.
+ â\88\80W2. â\9dªG,Kâ\9d« ⊢ W ➡*[n,h] W2 →
+ â\88\80V2. â\87§*[â\86\91i] W2 â\89\98 V2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ➡*[↑n,h] V2.
#n #h #G #L #K #W #i #HLK #W2 #H @(cpms_ind_dx … H) -W2
[ /3 width=6 by cpm_cpms, cpm_ell_drops/
| #n1 #n2 #W1 #W2 #_ #IH #HW12 #V2 #HWV2
lapply (drops_isuni_fwd_drop2 … HLK) -HLK // #HLK
- elim (lifts_total W1 (ð\9d\90\94â\9d´â\86\91iâ\9dµ)) #V1 #HWV1 >plus_S1
+ elim (lifts_total W1 (ð\9d\90\94â\9d¨â\86\91iâ\9d©)) #V1 #HWV1 >plus_S1
/3 width=11 by cpm_lifts_bi, cpms_step_dx/
]
qed.
(* Advanced inversion lemmas ************************************************)
lemma cpms_inv_lref1_drops (n) (h) (G):
- â\88\80L,T2,i. â¦\83G,Lâ¦\84 ⊢ #i ➡*[n,h] T2 →
+ â\88\80L,T2,i. â\9dªG,Lâ\9d« ⊢ #i ➡*[n,h] T2 →
∨∨ ∧∧ T2 = #i & n = 0
- | â\88\83â\88\83K,V,V2. â\87©*[i] L â\89\98 K.â\93\93V & â¦\83G,Kâ¦\84 ⊢ V ➡*[n,h] V2 &
+ | â\88\83â\88\83K,V,V2. â\87©*[i] L â\89\98 K.â\93\93V & â\9dªG,Kâ\9d« ⊢ V ➡*[n,h] V2 &
⇧*[↑i] V2 ≘ T2
- | â\88\83â\88\83m,K,V,V2. â\87©*[i] L â\89\98 K.â\93\9bV & â¦\83G,Kâ¦\84 ⊢ V ➡*[m,h] V2 &
+ | â\88\83â\88\83m,K,V,V2. â\87©*[i] L â\89\98 K.â\93\9bV & â\9dªG,Kâ\9d« ⊢ V ➡*[m,h] V2 &
⇧*[↑i] V2 ≘ T2 & n = ↑m.
#n #h #G #L #T2 #i #H @(cpms_ind_dx … H) -T2
[ /3 width=1 by or3_intro0, conj/
qed-.
lemma cpms_inv_delta_sn (n) (h) (G) (K) (V):
- â\88\80T2. â¦\83G,K.â\93\93Vâ¦\84 ⊢ #0 ➡*[n,h] T2 →
+ â\88\80T2. â\9dªG,K.â\93\93Vâ\9d« ⊢ #0 ➡*[n,h] T2 →
∨∨ ∧∧ T2 = #0 & n = 0
- | â\88\83â\88\83V2. â¦\83G,Kâ¦\84 ⊢ V ➡*[n,h] V2 & ⇧*[1] V2 ≘ T2.
+ | â\88\83â\88\83V2. â\9dªG,Kâ\9d« ⊢ V ➡*[n,h] V2 & ⇧*[1] V2 ≘ T2.
#n #h #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 (n) (h) (G) (K) (V):
- â\88\80T2. â¦\83G,K.â\93\9bVâ¦\84 ⊢ #0 ➡*[n,h] T2 →
+ â\88\80T2. â\9dªG,K.â\93\9bVâ\9d« ⊢ #0 ➡*[n,h] T2 →
∨∨ ∧∧ T2 = #0 & n = 0
- | â\88\83â\88\83m,V2. â¦\83G,Kâ¦\84 ⊢ V ➡*[m,h] V2 & ⇧*[1] V2 ≘ T2 & n = ↑m.
+ | â\88\83â\88\83m,V2. â\9dªG,Kâ\9d« ⊢ V ➡*[m,h] V2 & ⇧*[1] V2 ≘ T2 & n = ↑m.
#n #h #G #K #V #T2 #H
elim (cpms_inv_lref1_drops … H) -H *
[ /3 width=1 by or_introl, conj/
qed-.
lemma cpms_inv_lref_sn (n) (h) (G) (I) (K):
- â\88\80U2,i. â¦\83G,K.â\93\98{I}â¦\84 ⊢ #↑i ➡*[n,h] U2 →
+ â\88\80U2,i. â\9dªG,K.â\93\98[I]â\9d« ⊢ #↑i ➡*[n,h] U2 →
∨∨ ∧∧ U2 = #↑i & n = 0
- | â\88\83â\88\83T2. â¦\83G,Kâ¦\84 ⊢ #i ➡*[n,h] T2 & ⇧*[1] T2 ≘ U2.
+ | â\88\83â\88\83T2. â\9dªG,Kâ\9d« ⊢ #i ➡*[n,h] T2 & ⇧*[1] T2 ≘ U2.
#n #h #G #I #K #U2 #i #H
elim (cpms_inv_lref1_drops … H) -H *
[ /3 width=1 by or_introl, conj/
| #L #V #V2 #H #HV2 #HVU2
lapply (drops_inv_drop1 … H) -H #HLK
- elim (lifts_split_trans â\80¦ HVU2 (ð\9d\90\94â\9d´â\86\91iâ\9dµ) (ð\9d\90\94â\9d´1â\9dµ)) -HVU2
+ elim (lifts_split_trans â\80¦ HVU2 (ð\9d\90\94â\9d¨â\86\91iâ\9d©) (ð\9d\90\94â\9d¨1â\9d©)) -HVU2
[| // ] #T2 #HVT2 #HTU2
/4 width=6 by cpms_delta_drops, ex2_intro, or_intror/
| #m #L #V #V2 #H #HV2 #HVU2 #H0 destruct
lapply (drops_inv_drop1 … H) -H #HLK
- elim (lifts_split_trans â\80¦ HVU2 (ð\9d\90\94â\9d´â\86\91iâ\9dµ) (ð\9d\90\94â\9d´1â\9dµ)) -HVU2
+ elim (lifts_split_trans â\80¦ HVU2 (ð\9d\90\94â\9d¨â\86\91iâ\9d©) (ð\9d\90\94â\9d¨1â\9d©)) -HVU2
[| // ] #T2 #HVT2 #HTU2
/4 width=6 by cpms_ell_drops, ex2_intro, or_intror/
]
qed-.
fact cpms_inv_succ_sn (n) (h) (G) (L):
- â\88\80T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[↑n,h] T2 →
- â\88\83â\88\83T. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[1,h] T & â¦\83G,Lâ¦\84 ⊢ T ➡*[n,h] T2.
+ â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[↑n,h] T2 →
+ â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[1,h] T & â\9dªG,Lâ\9d« ⊢ T ➡*[n,h] T2.
#n #h #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. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] T2 →
- (T1 â\89\9b T2 â\86\92 â\8a¥) â\86\92 â¦\83G,L,T1â¦\84 >[h] â¦\83G,L,T2â¦\84.
+ â\88\80G,L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] T2 →
+ (T1 â\89\9b T2 â\86\92 â\8a¥) â\86\92 â\9dªG,L,T1â\9d« >[h] â\9dªG,L,T2â\9d«.
/3 width=2 by cpms_fwd_cpxs, cpxs_tneqx_fpbg/ qed-.
lemma fpbg_cpms_trans (h) (n):
- â\88\80G1,G2,L1,L2,T1,T. â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,Tâ¦\84 →
- â\88\80T2. â¦\83G2,L2â¦\84 â\8a¢ T â\9e¡*[n,h] T2 â\86\92 â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84.
+ â\88\80G1,G2,L1,L2,T1,T. â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,Tâ\9d« →
+ â\88\80T2. â\9dªG2,L2â\9d« â\8a¢ T â\9e¡*[n,h] T2 â\86\92 â\9dªG1,L1,T1â\9d« >[h] â\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. â¦\83G1,L1â¦\84 ⊢ T1 ➡*[n,h] T →
- â\88\80G2,L2,T2. â¦\83G1,L1,Tâ¦\84 >[h] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84.
+ â\88\80G1,L1,T1,T. â\9dªG1,L1â\9d« ⊢ T1 ➡*[n,h] T →
+ â\88\80G2,L2,T2. â\9dªG1,L1,Tâ\9d« >[h] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« >[h] â\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. â¦\83G1,L1,T1â¦\84 â¬\82+ â¦\83G2,L2,Tâ¦\84 →
- â\88\80n,T2. â¦\83G2,L2â¦\84 â\8a¢ T â\9e¡*[n,h] T2 â\86\92 â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84.
+ â\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¡*[n,h] T2 â\86\92 â\9dªG1,L1,T1â\9d« >[h] â\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. â¦\83G,Lâ¦\84 ⊢ T1 ➡[n1,h] T → (T1 ≛ T → ⊥) →
- â\88\80n2,T2. â¦\83G,Lâ¦\84â\8a¢ T â\9e¡*[n2,h] T2 â\86\92 T1 â\89\9b T2 â\86\92 â¦\83G,L,T1â¦\84 >[h] â¦\83G,L,T1â¦\84.
+ â\88\80n1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡[n1,h] T → (T1 ≛ T → ⊥) →
+ â\88\80n2,T2. â\9dªG,Lâ\9d«â\8a¢ T â\9e¡*[n2,h] T2 â\86\92 T1 â\89\9b T2 â\86\92 â\9dªG,L,T1â\9d« >[h] â\9dªG,L,T1â\9d«.
#h #G #L #T1 #n1 #T #H1T1 #H2T1 #n2 #T2 #H1T2 #H2T12
/4 width=7 by cpms_fwd_fpbs, cpm_fpb, fpbs_teqx_trans, teqx_sym, ex2_3_intro/
qed-.
(* Basic_2A1: uses: cprs_fpbs *)
lemma cpms_fwd_fpbs (n) (h):
- â\88\80G,L,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n,h] T2 â\86\92 â¦\83G,L,T1â¦\84 â\89¥[h] â¦\83G,L,T2â¦\84.
+ â\88\80G,L,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[n,h] T2 â\86\92 â\9dªG,L,T1â\9d« â\89¥[h] â\9dªG,L,T2â\9d«.
/3 width=2 by cpms_fwd_cpxs, cpxs_fpbs/ qed-.
(* Properties with parallel rt-transition for full local environments *******)
lemma lpr_cpm_trans (n) (h) (G):
- â\88\80L2,T1,T2. â¦\83G,L2â¦\84 ⊢ T1 ➡[n,h] T2 →
- â\88\80L1. â¦\83G,L1â¦\84 â\8a¢ â\9e¡[h] L2 â\86\92 â¦\83G,L1â¦\84 ⊢ T1 ➡*[n,h] T2.
+ â\88\80L2,T1,T2. â\9dªG,L2â\9d« ⊢ T1 ➡[n,h] T2 →
+ â\88\80L1. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h] L2 â\86\92 â\9dªG,L1â\9d« ⊢ T1 ➡*[n,h] T2.
#n #h #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 (n) (h) (G):
- â\88\80L1,L2. â¦\83G,L1â¦\84 ⊢ ➡[h] L2 →
- â\88\80T1,T2. â¦\83G,L2â¦\84 â\8a¢ T1 â\9e¡*[n,h] T2 â\86\92 â¦\83G,L1â¦\84 ⊢ T1 ➡*[n,h] T2.
+ â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡[h] L2 →
+ â\88\80T1,T2. â\9dªG,L2â\9d« â\8a¢ T1 â\9e¡*[n,h] T2 â\86\92 â\9dªG,L1â\9d« ⊢ T1 ➡*[n,h] T2.
#n #h #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 (n) (h) (G) (L):
- â\88\80V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ➡[h] V2 →
- â\88\80I,T1,T2. â¦\83G,L.â\93\91{I}V2â¦\84 ⊢ T1 ➡[n,h] T2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â\9e¡*[n,h] â\93\91{p,I}V2.T2.
+ â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h] V2 →
+ â\88\80I,T1,T2. â\9dªG,L.â\93\91[I]V2â\9d« ⊢ T1 ➡[n,h] T2 →
+ â\88\80p. â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V1.T1 â\9e¡*[n,h] â\93\91[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 (n) (h) (G) (L):
- â\88\80V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ➡[h] V2 →
- â\88\80I,T1,T2. â¦\83G,L.â\93\91{I}V2â¦\84 ⊢ T1 ➡*[n,h] T2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â\9e¡*[n,h] â\93\91{p,I}V2.T2.
+ â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h] V2 →
+ â\88\80I,T1,T2. â\9dªG,L.â\93\91[I]V2â\9d« ⊢ T1 ➡*[n,h] T2 →
+ â\88\80p. â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V1.T1 â\9e¡*[n,h] â\93\91[p,I]V2.T2.
/4 width=5 by lpr_cpms_trans, cpms_bind_dx, lpr_pair/ qed.
(* Properties with sort-irrelevant equivalence for local environments *******)
lemma cpms_reqx_conf_sn (h) (n) (G) (L1) (L2):
- â\88\80T1,T2. â¦\83G,L1â¦\84 ⊢ T1 ➡*[n,h] T2 →
+ â\88\80T1,T2. â\9dªG,L1â\9d« ⊢ T1 ➡*[n,h] T2 →
L1 ≛[T1] L2 → L1 ≛[T2] L2.
/3 width=5 by cpms_fwd_cpxs, cpxs_reqx_conf_sn/ qed-.
lemma cpms_reqx_conf_dx (h) (n) (G) (L1) (L2):
- â\88\80T1,T2. â¦\83G,L2â¦\84 ⊢ T1 ➡*[n,h] T2 →
+ â\88\80T1,T2. â\9dªG,L2â\9d« ⊢ T1 ➡*[n,h] T2 →
L1 ≛[T1] L2 → L1 ≛[T2] L2.
/3 width=5 by cpms_fwd_cpxs, cpxs_reqx_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§ â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n,h] T2 & â¦\83G,Lâ¦\84 ⊢ ➡𝐍𝐖*[h] T2.
+ λT1,T2. â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[n,h] 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. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n,h] T2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â\9e¡ð\9d\90\8dð\9d\90\96*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡*𝐍𝐖*[h,n] T2.
+ â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[n,h] 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. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n,h] â\8b\86s â\86\92 â¦\83G,Lâ¦\84 ⊢ T ➡*𝐍𝐖*[h,n] ⋆s.
+ â\88\80s. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n,h] â\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. â¦\83G,â\8b\86â¦\84 â\8a¢ T â\9e¡*[n,h] #i â\86\92 â¦\83G,â\8b\86â¦\84 ⊢ T ➡*𝐍𝐖*[h,n] #i.
+ â\88\80i. â\9dªG,â\8b\86â\9d« â\8a¢ T â\9e¡*[n,h] #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. â¦\83G,L.â\93¤{I}â¦\84 â\8a¢ T â\9e¡*[n,h] #0 â\86\92 â¦\83G,L.â\93¤{I}â¦\84 ⊢ T ➡*𝐍𝐖*[h,n] #0.
+ â\88\80I. â\9dªG,L.â\93¤[I]â\9d« â\8a¢ T â\9e¡*[n,h] #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. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n,h] §l â\86\92 â¦\83G,Lâ¦\84 ⊢ T ➡*𝐍𝐖*[h,n] §l.
+ â\88\80l. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n,h] §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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*ð\9d\90\8dð\9d\90\96*[h,n] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] 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 ➡*[n,h] T2.
#h #n #G #L #T1 #T2 * #HT12 #_ //
qed-.
(* Advanced properties ******************************************************)
lemma cpmuwe_abbr_neg (h) (n) (G) (L) (T):
- â\88\80V,U. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n,h] -â\93\93V.U â\86\92 â¦\83G,Lâ¦\84 ⊢ T ➡*𝐍𝐖*[h,n] -ⓓV.U.
+ â\88\80V,U. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n,h] -â\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. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[n,h] â\93\9b{p}W.U â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*ð\9d\90\8dð\9d\90\96*[h,n] â\93\9b{p}W.U.
+ â\88\80W,U. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[n,h] â\93\9b[p]W.U â\86\92 â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*ð\9d\90\8dð\9d\90\96*[h,n] â\93\9b[p]W.U.
/3 width=5 by cnuw_abst, cpmuwe_intro/ qed.
(* Properties with strong normalization for unbound rt-transition for terms *)
lemma cpmuwe_total_csx (h) (G) (L):
- â\88\80T1. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 â\86\92 â\88\83â\88\83T2,n. â¦\83G,Lâ¦\84 ⊢ T1 ➡*𝐍𝐖*[h,n] T2.
+ â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« â\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. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 → ∃n. R_cpmuwe h G L T1 n.
+ â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« → ∃n. R_cpmuwe h G L T1 n.
#h #G #L #T1 #H
elim (cpmuwe_total_csx … 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. â¦\83G,Lâ¦\84 ⊢T1 ➡*[n,h] T0 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T0 â\9e¡*[h] ð\9d\90\8dâ¦\83T2â¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[h,n] ð\9d\90\8dâ¦\83T2â¦\84.
+ â\88\80T1,T0. â\9dªG,Lâ\9d« ⊢T1 ➡*[n,h] T0 →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T0 â\9e¡*[h] ð\9d\90\8dâ\9dªT2â\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h,n] ð\9d\90\8dâ\9dªT2â\9d«.
#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. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[h] T1 â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[h] ð\9d\90\8dâ¦\83T2â¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[h] ð\9d\90\8dâ¦\83T2â¦\84.
+ â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h] T1 â\86\92 â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h] ð\9d\90\8dâ\9dªT2â\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h] ð\9d\90\8dâ\9dªT2â\9d«.
#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. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[h] ð\9d\90\8dâ¦\83T1â¦\84 â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[h] ð\9d\90\8dâ¦\83T2â¦\84 → T1 = T2.
+ â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h] ð\9d\90\8dâ\9dªT1â\9d« â\86\92 â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h] ð\9d\90\8dâ\9dªT2â\9d« → 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. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 â\86\92 â\88\83T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[h] ð\9d\90\8dâ¦\83T2â¦\84.
+ â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« â\86\92 â\88\83T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h] ð\9d\90\8dâ\9dªT2â\9d«.
#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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[h] T â\86\92 â¦\83G,Lâ¦\84 ⊢ T ➡*[h] T2 → Q T → Q T1) →
- â\88\80T1. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[h] T2 → Q T1.
+ (â\88\80T1,T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[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.
#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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[h] T â\86\92 â¦\83G,Lâ¦\84 ⊢ T ➡[h] T2 → Q T → Q T2) →
- â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[h] T2 → Q T2.
+ (â\88\80T,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[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.
#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. â¦\83G,Lâ¦\84 ⊢ T1 ➡[h] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡*[h] T2.
+ â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡[h] T →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[h] T2.
/2 width=3 by cpms_step_sn/ qed-.
(* Basic_2A1: was: cprs_strap1 *)
lemma cprs_step_dx (h) (G) (L):
- â\88\80T1,T. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[h] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡*[h] T2.
+ â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h] T →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[h] 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. â¦\83G,Lâ¦\84 ⊢ V1 ➡[h] V2 →
- â\88\80T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[h] T2 →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\95{I}V1.T1 â\9e¡*[h] â\93\95{I}V2.T2.
+ â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h] V2 →
+ â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h] T2 →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\95[I]V1.T1 â\9e¡*[h] â\93\95[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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[h] T2 â\86\92 â\88\80V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ➡*[h] V2 →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\95{I} V1. T1 â\9e¡*[h] â\93\95{I} V2. T2.
+ â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h] T2 â\86\92 â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h] V2 →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\95[I] V1. T1 â\9e¡*[h] â\93\95[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. â¦\83G,Lâ¦\84 ⊢ ⋆s ➡*[h] X2 → X2 = ⋆s.
+lemma cprs_inv_sort1 (h) (G) (L): â\88\80X2,s. â\9dªG,Lâ\9d« ⊢ ⋆s ➡*[h] 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. â¦\83G,Lâ¦\84 ⊢ ⓝW1.T1 ➡*[h] X2 →
- â\88¨â\88¨ â\88\83â\88\83W2,T2. â¦\83G,Lâ¦\84 â\8a¢ W1 â\9e¡*[h] W2 & â¦\83G,Lâ¦\84 ⊢ T1 ➡*[h] T2 & X2 = ⓝW2.T2
- | â¦\83G,Lâ¦\84 ⊢ T1 ➡*[h] X2.
+lemma cprs_inv_cast1 (h) (G) (L): â\88\80W1,T1,X2. â\9dªG,Lâ\9d« ⊢ ⓝW1.T1 ➡*[h] X2 →
+ â\88¨â\88¨ â\88\83â\88\83W2,T2. â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡*[h] W2 & â\9dªG,Lâ\9d« ⊢ T1 ➡*[h] T2 & X2 = ⓝW2.T2
+ | â\9dªG,Lâ\9d« ⊢ T1 ➡*[h] 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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[h] T2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83T1â¦\84 → T1 = T2.
+ â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h] T2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªT1â\9d« → 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. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[h] T2 →
- â\88\80V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ➡*[h] V2 →
- â\88\80I. â¦\83G,Lâ¦\84 â\8a¢ â\93\95{I}V1.T1 â\9e¡*[h] â\93\95{I}V2.T2.
+ â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡*[h] T2 →
+ â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h] V2 →
+ â\88\80I. â\9dªG,Lâ\9d« â\8a¢ â\93\95[I]V1.T1 â\9e¡*[h] â\93\95[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. â¦\83G,Lâ¦\84 ⊢ ⓐV1.T1 ➡*[h] X2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 ⊢ V1 ➡*[h] V2 &
- â¦\83G,Lâ¦\84 ⊢ T1 ➡*[h] T2 &
+ â\88\80V1,T1,X2. â\9dªG,Lâ\9d« ⊢ ⓐV1.T1 ➡*[h] X2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h] V2 &
+ â\9dªG,Lâ\9d« ⊢ T1 ➡*[h] T2 &
X2 = ⓐV2. T2
- | â\88\83â\88\83p,W,T. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[h] â\93\9b{p}W.T &
- â¦\83G,Lâ¦\84 â\8a¢ â\93\93{p}ⓝW.V1.T ➡*[h] X2
- | â\88\83â\88\83p,V0,V2,V,T. â¦\83G,Lâ¦\84 ⊢ V1 ➡*[h] V0 & ⇧*[1] V0 ≘ V2 &
- â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[h] â\93\93{p}V.T &
- â¦\83G,Lâ¦\84 â\8a¢ â\93\93{p}V.ⓐV2.T ➡*[h] X2.
+ | â\88\83â\88\83p,W,T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h] â\93\9b[p]W.T &
+ â\9dªG,Lâ\9d« â\8a¢ â\93\93[p]ⓝW.V1.T ➡*[h] X2
+ | â\88\83â\88\83p,V0,V2,V,T. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h] V0 & ⇧*[1] V0 ≘ V2 &
+ â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h] â\93\93[p]V.T &
+ â\9dªG,Lâ\9d« â\8a¢ â\93\93[p]V.ⓐV2.T ➡*[h] 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. â¦\83G,Lâ¦\84 ⊢ #i ➡*[h] T2 →
+lemma cprs_inv_lref1_drops (h) (G): â\88\80L,T2,i. â\9dªG,Lâ\9d« ⊢ #i ➡*[h] T2 →
∨∨ T2 = #i
- | â\88\83â\88\83K,V1,T1. â\87©*[i] L â\89\98 K.â\93\93V1 & â¦\83G,Kâ¦\84 ⊢ V1 ➡*[h] T1 &
+ | â\88\83â\88\83K,V1,T1. â\87©*[i] L â\89\98 K.â\93\93V1 & â\9dªG,Kâ\9d« ⊢ V1 ➡*[h] 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. â¦\83G,L0â¦\84 â\8a¢ T0 â\9e¡*[h] T1 â\86\92 â\88\80L1. â¦\83G,L0â¦\84 ⊢ ➡[h] L1 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ T1 â\9e¡*[h] T & â¦\83G,L1â¦\84 ⊢ T0 ➡*[h] T.
+ â\88\80L0,T0,T1. â\9dªG,L0â\9d« â\8a¢ T0 â\9e¡*[h] T1 â\86\92 â\88\80L1. â\9dªG,L0â\9d« ⊢ ➡[h] L1 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[h] T & â\9dªG,L1â\9d« ⊢ T0 ➡*[h] 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. â¦\83G,L0â¦\84 ⊢ T0 ➡*[h] T1 →
- â\88\80L1. â¦\83G,L0â¦\84 ⊢ ➡[h] L1 →
- â\88\83â\88\83T. â¦\83G,L0â¦\84 â\8a¢ T1 â\9e¡*[h] T & â¦\83G,L1â¦\84 ⊢ T0 ➡*[h] T.
+ â\88\80L0,T0,T1. â\9dªG,L0â\9d« ⊢ T0 ➡*[h] T1 →
+ â\88\80L1. â\9dªG,L0â\9d« ⊢ ➡[h] L1 →
+ â\88\83â\88\83T. â\9dªG,L0â\9d« â\8a¢ T1 â\9e¡*[h] T & â\9dªG,L1â\9d« ⊢ T0 ➡*[h] 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_twneq (h) (G) (L) (V) (T1):
- â\88\83â\88\83T2. â¦\83G,Lâ¦\84 ⊢ +ⓓV.T1 ➡*[h] T2 & (+ⓓV.T1 ≅ T2 → ⊥).
+ â\88\83â\88\83T2. â\9dªG,Lâ\9d« ⊢ +ⓓV.T1 ➡*[h] 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 (tweq_dec U1 U2) [ #HpU12 | -HTU2 #HnU12 ]
lemma cpts_ind_sn (h) (G) (L) (T2) (Q:relation2 …):
Q 0 T2 →
- (â\88\80n1,n2,T1,T. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\86[h,n1] T â\86\92 â¦\83G,Lâ¦\84 ⊢ T ⬆*[h,n2] T2 → Q n2 T → Q (n1+n2) T1) →
- â\88\80n,T1. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\86*[h,n1] T â\86\92 Q n1 T â\86\92 â¦\83G,Lâ¦\84 ⊢ T ⬆[h,n2] T2 → Q (n1+n2) T2) →
- â\88\80n,T2. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\86[h,n] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T1 ⬆[h,n1] T →
- â\88\80n2,T2. â¦\83G,Lâ¦\84 â\8a¢ T â¬\86*[h,n2] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T1 ⬆*[h,n1] T →
- â\88\80n2,T2. â¦\83G,Lâ¦\84 â\8a¢ T â¬\86[h,n2] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ V1 ⬆[h,0] V2 →
- â\88\80I,T1,T2. â¦\83G,L.â\93\91{I}V1â¦\84 ⊢ T1 ⬆*[h,n] T2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â¬\86*[h,n] â\93\91{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« â\8a¢ â\93\91[p,I]V1.T1 â¬\86*[h,n] â\93\91[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. â¦\83G,Lâ¦\84 ⊢ V1 ⬆[h,0] V2 →
- â\88\80T1,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\86*[h,n] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓐ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. â¦\83G,Lâ¦\84 ⊢ U1 ⬆*[h,n] U2 →
- â\88\80T. â¦\83G,Lâ¦\84 ⊢ ⓝ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. â¦\83G,Lâ¦\84 ⊢ ⋆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. â¦\83G,Lâ¦\84 ⊢ ⋆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. â¦\83G,â\8b\86â¦\84 ⊢ #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. â¦\83G,K.â\93¤{I}â¦\84 ⊢ #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. â¦\83G,Lâ¦\84 ⊢ §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. â¦\83G,Lâ¦\84 ⊢ ⓝU1.T1 ⬆*[h,n] X2 →
- â\88¨â\88¨ â\88\83â\88\83U2,T2. â¦\83G,Lâ¦\84 â\8a¢ U1 â¬\86*[h,n] U2 & â¦\83G,Lâ¦\84 ⊢ T1 ⬆*[h,n] T2 & X2 = ⓝU2.T2
- | â\88\83â\88\83m. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\81\9d A â\86\92 â\88\80n. â\88\83T2. â¦\83G,Lâ¦\84 ⊢ 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
cases I -I
[ elim (IH n) -IH #V2 #HV12
- elim (lifts_total V2 (ð\9d\90\94â\9d´1â\9dµ)) #T2 #HVT2
+ elim (lifts_total V2 (ð\9d\90\94â\9d¨1â\9d©)) #T2 #HVT2
/3 width=4 by cpts_delta, ex_intro/
| cases n -n
[ /2 width=2 by ex_intro/
| #n elim (IH n) -IH #V2 #HV12
- elim (lifts_total V2 (ð\9d\90\94â\9d´1â\9dµ)) #T2 #HVT2
+ elim (lifts_total V2 (ð\9d\90\94â\9d¨1â\9d©)) #T2 #HVT2
/3 width=4 by cpts_ell, ex_intro/
]
]
| #I #G #K #A #i #_ #IH #n -A
elim (IH n) -IH #T #HT
- elim (lifts_total T (ð\9d\90\94â\9d´1â\9dµ)) #U #HTU
+ elim (lifts_total T (ð\9d\90\94â\9d¨1â\9d©)) #U #HTU
/3 width=4 by cpts_lref, ex_intro/
| #p #G #L #V1 #T1 #B #A #_ #_ #IHV #IHT #n -B -A
elim (IHV 0) -IHV #V2 #HV12
(* Forward lemmas with t-bound rt-computation for terms *********************)
lemma cpts_fwd_cpms (h) (n) (G) (L):
- â\88\80T1,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\86*[h,n] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] T2.
+ â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\86*[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] 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. â¦\83G,Lâ¦\84 ⊢ T1 ⬆*[h,n] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n,h] T2.
+ â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ⬆*[h,n] T →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡*[n,h] 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. â¦\83G,Kâ¦\84 ⊢ V1 ⬆*[h,n] V2 →
- â\88\80W2. â\87§*[1] V2 â\89\98 W2 â\86\92 â¦\83G,K.â\93\93V1â¦\84 ⊢ #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
- elim (lifts_total V (ð\9d\90\94â\9d´1â\9dµ)) #W #HVW
+ elim (lifts_total V (ð\9d\90\94â\9d¨1â\9d©)) #W #HVW
/5 width=11 by cpts_step_dx, cpt_lifts_bi, drops_refl, drops_drop/
]
qed.
lemma cpts_ell (h) (n) (G):
- â\88\80K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬆*[h,n] V2 →
- â\88\80W2. â\87§*[1] V2 â\89\98 W2 â\86\92 â¦\83G,K.â\93\9bV1â¦\84 ⊢ #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
- elim (lifts_total V (ð\9d\90\94â\9d´1â\9dµ)) #W #HVW >plus_S1
+ elim (lifts_total V (ð\9d\90\94â\9d¨1â\9d©)) #W #HVW >plus_S1
/5 width=11 by cpts_step_dx, cpt_lifts_bi, drops_refl, drops_drop/
]
qed.
lemma cpts_lref (h) (n) (I) (G):
- â\88\80K,T,i. â¦\83G,Kâ¦\84 ⊢ #i ⬆*[h,n] T →
- â\88\80U. â\87§*[1] T â\89\98 U â\86\92 â¦\83G,K.â\93\98{I}â¦\84 ⊢ #↑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
- elim (lifts_total T (ð\9d\90\94â\9d´1â\9dµ)) #U #TU
+ elim (lifts_total T (ð\9d\90\94â\9d¨1â\9d©)) #U #TU
/5 width=11 by cpts_step_dx, cpt_lifts_bi, drops_refl, drops_drop/
]
qed.
lemma cpts_cast_sn (h) (n) (G) (L):
- â\88\80U1,U2. â¦\83G,Lâ¦\84 ⊢ U1 ⬆*[h,n] U2 →
- â\88\80T1,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\86[h,n] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓝ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. â¦\83G,Kâ¦\84 ⊢ V ⬆*[h,n] V2 →
- â\88\80W2. â\87§*[â\86\91i] V2 â\89\98 W2 â\86\92 â¦\83G,Lâ¦\84 ⊢ #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
lapply (drops_isuni_fwd_drop2 … HLK) -HLK // #HLK
- elim (lifts_total V1 (ð\9d\90\94â\9d´â\86\91iâ\9dµ)) #W1 #HVW1
+ elim (lifts_total V1 (ð\9d\90\94â\9d¨â\86\91iâ\9d©)) #W1 #HVW1
/3 width=11 by cpt_lifts_bi, cpts_step_dx/
]
qed.
lemma cpts_ell_drops (h) (n) (G):
∀L,K,W,i. ⇩*[i] L ≘ K.ⓛW →
- â\88\80W2. â¦\83G,Kâ¦\84 ⊢ W ⬆*[h,n] W2 →
- â\88\80V2. â\87§*[â\86\91i] W2 â\89\98 V2 â\86\92 â¦\83G,Lâ¦\84 ⊢ #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
lapply (drops_isuni_fwd_drop2 … HLK) -HLK // #HLK
- elim (lifts_total W1 (ð\9d\90\94â\9d´â\86\91iâ\9dµ)) #V1 #HWV1 >plus_S1
+ elim (lifts_total W1 (ð\9d\90\94â\9d¨â\86\91iâ\9d©)) #V1 #HWV1 >plus_S1
/3 width=11 by cpt_lifts_bi, cpts_step_dx/
]
qed.
(* Advanced inversion lemmas ************************************************)
lemma cpts_inv_lref_sn_drops (h) (n) (G) (L) (i):
- â\88\80X2. â¦\83G,Lâ¦\84 ⊢ #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 & â¦\83G,Kâ¦\84 ⊢ V ⬆*[h,n] V2 & ⇧*[↑i] V2 ≘ X2
- | â\88\83â\88\83m,K,V,V2. â\87©*[i] L â\89\98 K.â\93\9bV & â¦\83G,Kâ¦\84 ⊢ 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. â¦\83G,K.â\93\93Vâ¦\84 ⊢ #0 ⬆*[h,n] X2 →
+ â\88\80X2. â\9dªG,K.â\93\93Vâ\9d« ⊢ #0 ⬆*[h,n] X2 →
∨∨ ∧∧ X2 = #0 & n = 0
- | â\88\83â\88\83V2. â¦\83G,Kâ¦\84 ⊢ 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. â¦\83G,K.â\93\9bVâ¦\84 ⊢ #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. â¦\83G,Kâ¦\84 ⊢ 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. â¦\83G,K.â\93\98{I}â¦\84 ⊢ #↑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. â¦\83G,Kâ¦\84 ⊢ #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/
| #L #V #V2 #H #HV2 #HVU2
lapply (drops_inv_drop1 … H) -H #HLK
- elim (lifts_split_trans â\80¦ HVU2 (ð\9d\90\94â\9d´â\86\91iâ\9dµ) (ð\9d\90\94â\9d´1â\9dµ)) -HVU2
+ elim (lifts_split_trans â\80¦ HVU2 (ð\9d\90\94â\9d¨â\86\91iâ\9d©) (ð\9d\90\94â\9d¨1â\9d©)) -HVU2
[| // ] #T2 #HVT2 #HTU2
/4 width=6 by cpts_delta_drops, ex2_intro, or_intror/
| #m #L #V #V2 #H #HV2 #HVU2 #H0 destruct
lapply (drops_inv_drop1 … H) -H #HLK
- elim (lifts_split_trans â\80¦ HVU2 (ð\9d\90\94â\9d´â\86\91iâ\9dµ) (ð\9d\90\94â\9d´1â\9dµ)) -HVU2
+ elim (lifts_split_trans â\80¦ HVU2 (ð\9d\90\94â\9d¨â\86\91iâ\9d©) (ð\9d\90\94â\9d¨1â\9d©)) -HVU2
[| // ] #T2 #HVT2 #HTU2
/4 width=6 by cpts_ell_drops, ex2_intro, or_intror/
]
qed-.
lemma cpts_inv_succ_sn (h) (n) (G) (L):
- â\88\80T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬆*[h,↑n] T2 →
- â\88\83â\88\83T. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\86*[h,1] T & â¦\83G,Lâ¦\84 ⊢ 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
(* Basic eliminators ********************************************************)
lemma cpxs_ind: ∀h,G,L,T1. ∀Q:predicate term. Q T1 →
- (â\88\80T,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88*[h] T â\86\92 â¦\83G,Lâ¦\84 ⊢ T ⬈[h] T2 → Q T → Q T2) →
- â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2 → Q T2.
+ (â\88\80T,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88*[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.
#h #L #G #T1 #Q #HT1 #IHT1 #T2 #HT12
@(TC_star_ind … HT1 IHT1 … HT12) //
qed-.
lemma cpxs_ind_dx: ∀h,G,L,T2. ∀Q:predicate term. Q T2 →
- (â\88\80T1,T. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88[h] T â\86\92 â¦\83G,Lâ¦\84 ⊢ T ⬈*[h] T2 → Q T → Q T1) →
- â\88\80T1. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2 → Q T1.
+ (â\88\80T1,T. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88[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.
#h #G #L #T2 #Q #HT2 #IHT2 #T1 #HT12
@(TC_star_ind_dx … HT2 IHT2 … HT12) //
qed-.
(* Basic properties *********************************************************)
-lemma cpxs_refl: â\88\80h,G,L,T. â¦\83G,Lâ¦\84 ⊢ T ⬈*[h] T.
+lemma cpxs_refl: â\88\80h,G,L,T. â\9dªG,Lâ\9d« ⊢ T ⬈*[h] T.
/2 width=1 by inj/ qed.
-lemma cpx_cpxs: â\88\80h,G,L,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2.
+lemma cpx_cpxs: â\88\80h,G,L,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T2.
/2 width=1 by inj/ qed.
-lemma cpxs_strap1: â\88\80h,G,L,T1,T. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â¬\88[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2.
+lemma cpxs_strap1: â\88\80h,G,L,T1,T. â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â¬\88[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T2.
normalize /2 width=3 by step/ qed-.
-lemma cpxs_strap2: â\88\80h,G,L,T1,T. â¦\83G,Lâ¦\84 ⊢ T1 ⬈[h] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â¬\88*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2.
+lemma cpxs_strap2: â\88\80h,G,L,T1,T. â\9dªG,Lâ\9d« ⊢ T1 ⬈[h] T →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â¬\88*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T2.
normalize /2 width=3 by TC_strap/ qed-.
(* Basic_2A1: was just: cpxs_sort *)
-lemma cpxs_sort: â\88\80h,G,L,s,n. â¦\83G,Lâ¦\84 ⊢ ⋆s ⬈*[h] ⋆((next h)^n s).
+lemma cpxs_sort: â\88\80h,G,L,s,n. â\9dªG,Lâ\9d« ⊢ ⋆s ⬈*[h] ⋆((next h)^n s).
#h #G #L #s #n elim n -n /2 width=1 by cpx_cpxs/
#n >iter_S /2 width=3 by cpxs_strap1/
qed.
-lemma cpxs_bind_dx: â\88\80h,G,L,V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ⬈[h] V2 →
- â\88\80I,T1,T2. â¦\83G,L. â\93\91{I}V1â¦\84 ⊢ T1 ⬈*[h] T2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â¬\88*[h] â\93\91{p,I}V2.T2.
+lemma cpxs_bind_dx: â\88\80h,G,L,V1,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« â\8a¢ â\93\91[p,I]V1.T1 â¬\88*[h] â\93\91[p,I]V2.T2.
#h #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: â\88\80h,G,L,V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ⬈[h] V2 →
- â\88\80T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2 →
- â\88\80I. â¦\83G,Lâ¦\84 â\8a¢ â\93\95{I}V1.T1 â¬\88*[h] â\93\95{I}V2.T2.
+lemma cpxs_flat_dx: â\88\80h,G,L,V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈[h] V2 →
+ â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T2 →
+ â\88\80I. â\9dªG,Lâ\9d« â\8a¢ â\93\95[I]V1.T1 â¬\88*[h] â\93\95[I]V2.T2.
#h #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: â\88\80h,G,L,T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈[h] T2 →
- â\88\80V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ⬈*[h] V2 →
- â\88\80I. â¦\83G,Lâ¦\84 â\8a¢ â\93\95{I}V1.T1 â¬\88*[h] â\93\95{I}V2.T2.
+lemma cpxs_flat_sn: â\88\80h,G,L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈[h] T2 →
+ â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈*[h] V2 →
+ â\88\80I. â\9dªG,Lâ\9d« â\8a¢ â\93\95[I]V1.T1 â¬\88*[h] â\93\95[I]V2.T2.
#h #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: â\88\80h,I,G,L,V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ⬈*[h] V2 →
- â\88\80T. â¦\83G,Lâ¦\84 â\8a¢ â\91¡{I}V1.T â¬\88*[h] â\91¡{I}V2.T.
+lemma cpxs_pair_sn: â\88\80h,I,G,L,V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈*[h] V2 →
+ â\88\80T. â\9dªG,Lâ\9d« â\8a¢ â\91¡[I]V1.T â¬\88*[h] â\91¡[I]V2.T.
#h #I #G #L #V1 #V2 #H @(cpxs_ind … H) -V2
/3 width=3 by cpxs_strap1, cpx_pair_sn/
qed.
lemma cpxs_zeta (h) (G) (L) (V):
∀T1,T. ⇧*[1] T ≘ T1 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â¬\88*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ +ⓓV.T1 ⬈*[h] T2.
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â¬\88*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ +ⓓV.T1 ⬈*[h] T2.
#h #G #L #V #T1 #T #HT1 #T2 #H @(cpxs_ind … H) -T2
/3 width=3 by cpxs_strap1, cpx_cpxs, cpx_zeta/
qed.
(* Basic_2A1: was: cpxs_zeta *)
lemma cpxs_zeta_dx (h) (G) (L) (V):
∀T2,T. ⇧*[1] T2 ≘ T →
- â\88\80T1. â¦\83G,L.â\93\93Vâ¦\84 â\8a¢ T1 â¬\88*[h] T â\86\92 â¦\83G,Lâ¦\84 ⊢ +ⓓV.T1 ⬈*[h] T2.
+ â\88\80T1. â\9dªG,L.â\93\93Vâ\9d« â\8a¢ T1 â¬\88*[h] T â\86\92 â\9dªG,Lâ\9d« ⊢ +ⓓV.T1 ⬈*[h] T2.
#h #G #L #V #T2 #T #HT2 #T1 #H @(cpxs_ind_dx … H) -T1
/3 width=3 by cpxs_strap2, cpx_cpxs, cpx_bind, cpx_zeta/
qed.
-lemma cpxs_eps: â\88\80h,G,L,T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2 →
- â\88\80V. â¦\83G,Lâ¦\84 ⊢ ⓝV.T1 ⬈*[h] T2.
+lemma cpxs_eps: â\88\80h,G,L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T2 →
+ â\88\80V. â\9dªG,Lâ\9d« ⊢ ⓝV.T1 ⬈*[h] T2.
#h #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: â\88\80h,G,L,V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ⬈*[h] V2 →
- â\88\80T. â¦\83G,Lâ¦\84 ⊢ ⓝV1.T ⬈*[h] V2.
+lemma cpxs_ee: â\88\80h,G,L,V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈*[h] V2 →
+ â\88\80T. â\9dªG,Lâ\9d« ⊢ ⓝV1.T ⬈*[h] V2.
#h #G #L #V1 #V2 #H @(cpxs_ind … H) -V2
/3 width=3 by cpxs_strap1, cpx_cpxs, cpx_ee/
qed.
lemma cpxs_beta_dx: ∀h,p,G,L,V1,V2,W1,W2,T1,T2.
- â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 â\86\92 â¦\83G,L.â\93\9bW1â¦\84 â\8a¢ T1 â¬\88*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ W1 ⬈[h] W2 →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\9b{p}W1.T1 â¬\88*[h] â\93\93{p}ⓝW2.V2.T2.
+ â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V2 â\86\92 â\9dªG,L.â\93\9bW1â\9d« â\8a¢ T1 â¬\88*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ W1 ⬈[h] W2 →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\9b[p]W1.T1 â¬\88*[h] â\93\93[p]ⓝW2.V2.T2.
#h #p #G #L #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: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2.
- â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V â\86\92 â\87§*[1] V â\89\98 V2 â\86\92 â¦\83G,L.â\93\93W1â¦\84 ⊢ T1 ⬈*[h] T2 →
- â¦\83G,Lâ¦\84 â\8a¢ W1 â¬\88[h] W2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\93{p}W1.T1 â¬\88*[h] â\93\93{p}W2.ⓐV2.T2.
+ â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V â\86\92 â\87§*[1] V â\89\98 V2 â\86\92 â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ⬈*[h] T2 →
+ â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88[h] W2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\93[p]W1.T1 â¬\88*[h] â\93\93[p]W2.ⓐV2.T2.
#h #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV1 #HV2 * -T2
/4 width=9 by cpx_cpxs, cpxs_strap1, cpxs_bind_dx, cpxs_flat_dx, cpx_theta/
qed.
(* Basic inversion lemmas ***************************************************)
(* Basic_2A1: wa just: cpxs_inv_sort1 *)
-lemma cpxs_inv_sort1: â\88\80h,G,L,X2,s. â¦\83G,Lâ¦\84 ⊢ ⋆s ⬈*[h] X2 →
+lemma cpxs_inv_sort1: â\88\80h,G,L,X2,s. â\9dªG,Lâ\9d« ⊢ ⋆s ⬈*[h] X2 →
∃n. X2 = ⋆((next h)^n s).
#h #G #L #X2 #s #H @(cpxs_ind … H) -X2 /2 width=2 by ex_intro/
#X #X2 #_ #HX2 * #n #H destruct
@(ex_intro … (↑n)) >iter_S //
qed-.
-lemma cpxs_inv_cast1: â\88\80h,G,L,W1,T1,U2. â¦\83G,Lâ¦\84 ⊢ ⓝW1.T1 ⬈*[h] U2 →
- â\88¨â\88¨ â\88\83â\88\83W2,T2. â¦\83G,Lâ¦\84 â\8a¢ W1 â¬\88*[h] W2 & â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2 & U2 = ⓝW2.T2
- | â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] U2
- | â¦\83G,Lâ¦\84 ⊢ W1 ⬈*[h] U2.
+lemma cpxs_inv_cast1: â\88\80h,G,L,W1,T1,U2. â\9dªG,Lâ\9d« ⊢ ⓝW1.T1 ⬈*[h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83W2,T2. â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88*[h] W2 & â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T2 & U2 = ⓝW2.T2
+ | â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] U2
+ | â\9dªG,Lâ\9d« ⊢ W1 ⬈*[h] U2.
#h #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 (h) (G) (L) (T1):
- (â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88*[h] T2 â\86\92 T1 â\89\9b T2) â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83T1â¦\84.
+ (â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88*[h] T2 â\86\92 T1 â\89\9b T2) â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªT1â\9d«.
/3 width=1 by cpx_cpxs/ qed.
(* Inversion lemmas with normal terms ***************************************)
lemma cpxs_inv_cnx1 (h) (G) (L):
- â\88\80T1,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88*[h] T2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83T1â¦\84 → T1 ≛ T2.
+ â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88*[h] T2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªT1â\9d« → T1 ≛ T2.
#h #G #L #T1 #T2 #H @(cpxs_ind_dx … H) -T1
/5 width=9 by cnx_teqx_trans, teqx_trans/
qed-.
theorem cpxs_trans: ∀h,G,L. Transitive … (cpxs h G L).
normalize /2 width=3 by trans_TC/ qed-.
-theorem cpxs_bind: â\88\80h,p,I,G,L,V1,V2,T1,T2. â¦\83G,L.â\93\91{I}V1â¦\84 ⊢ T1 ⬈*[h] T2 →
- â¦\83G,Lâ¦\84 ⊢ V1 ⬈*[h] V2 →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â¬\88*[h] â\93\91{p,I}V2.T2.
+theorem cpxs_bind: â\88\80h,p,I,G,L,V1,V2,T1,T2. â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ⬈*[h] T2 →
+ â\9dªG,Lâ\9d« ⊢ V1 ⬈*[h] V2 →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V1.T1 â¬\88*[h] â\93\91[p,I]V2.T2.
#h #p #I #G #L #V1 #V2 #T1 #T2 #HT12 #H @(cpxs_ind … H) -V2
/3 width=5 by cpxs_trans, cpxs_bind_dx/
qed.
-theorem cpxs_flat: â\88\80h,I,G,L,V1,V2,T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2 →
- â¦\83G,Lâ¦\84 ⊢ V1 ⬈*[h] V2 →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\95{I}V1.T1 â¬\88*[h] â\93\95{I}V2.T2.
+theorem cpxs_flat: â\88\80h,I,G,L,V1,V2,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T2 →
+ â\9dªG,Lâ\9d« ⊢ V1 ⬈*[h] V2 →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\95[I]V1.T1 â¬\88*[h] â\93\95[I]V2.T2.
#h #I #G #L #V1 #V2 #T1 #T2 #HT12 #H @(cpxs_ind … H) -V2
/3 width=5 by cpxs_trans, cpxs_flat_dx/
qed.
theorem cpxs_beta_rc: ∀h,p,G,L,V1,V2,W1,W2,T1,T2.
- â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 â\86\92 â¦\83G,L.â\93\9bW1â¦\84 â\8a¢ T1 â¬\88*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ W1 ⬈*[h] W2 →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\9b{p}W1.T1 â¬\88*[h] â\93\93{p}ⓝW2.V2.T2.
+ â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V2 â\86\92 â\9dªG,L.â\93\9bW1â\9d« â\8a¢ T1 â¬\88*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ W1 ⬈*[h] W2 →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\9b[p]W1.T1 â¬\88*[h] â\93\93[p]ⓝW2.V2.T2.
#h #p #G #L #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: ∀h,p,G,L,V1,V2,W1,W2,T1,T2.
- â¦\83G,L.â\93\9bW1â¦\84 â\8a¢ T1 â¬\88*[h] T2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ W1 â¬\88*[h] W2 â\86\92 â¦\83G,Lâ¦\84 ⊢ V1 ⬈*[h] V2 →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\9b{p}W1.T1 â¬\88*[h] â\93\93{p}ⓝW2.V2.T2.
+ â\9dªG,L.â\93\9bW1â\9d« â\8a¢ T1 â¬\88*[h] T2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88*[h] W2 â\86\92 â\9dªG,Lâ\9d« ⊢ V1 ⬈*[h] V2 →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\9b[p]W1.T1 â¬\88*[h] â\93\93[p]ⓝW2.V2.T2.
#h #p #G #L #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: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2.
- â¦\83G,Lâ¦\84 ⊢ V1 ⬈[h] V → ⇧*[1] V ≘ V2 →
- â¦\83G,L.â\93\93W1â¦\84 â\8a¢ T1 â¬\88*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ W1 ⬈*[h] W2 →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\93{p}W1.T1 â¬\88*[h] â\93\93{p}W2.ⓐV2.T2.
+ â\9dªG,Lâ\9d« ⊢ V1 ⬈[h] V → ⇧*[1] V ≘ V2 →
+ â\9dªG,L.â\93\93W1â\9d« â\8a¢ T1 â¬\88*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ W1 ⬈*[h] W2 →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\93[p]W1.T1 â¬\88*[h] â\93\93[p]W2.ⓐV2.T2.
#h #p #G #L #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: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2.
- â\87§*[1] V â\89\98 V2 â\86\92 â¦\83G,Lâ¦\84 ⊢ W1 ⬈*[h] W2 →
- â¦\83G,L.â\93\93W1â¦\84 â\8a¢ T1 â¬\88*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ V1 ⬈*[h] V →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\93{p}W1.T1 â¬\88*[h] â\93\93{p}W2.ⓐV2.T2.
+ â\87§*[1] V â\89\98 V2 â\86\92 â\9dªG,Lâ\9d« ⊢ W1 ⬈*[h] W2 →
+ â\9dªG,L.â\93\93W1â\9d« â\8a¢ T1 â¬\88*[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ V1 ⬈*[h] V →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\93[p]W1.T1 â¬\88*[h] â\93\93[p]W2.ⓐV2.T2.
#h #p #G #L #V1 #V #V2 #W1 #W2 #T1 #T2 #HV2 #HW12 #HT12 #H @(TC_ind_dx … V1 H) -V1
/3 width=5 by cpxs_trans, cpxs_theta_rc, cpxs_flat_dx/
qed.
(* Advanced inversion lemmas ************************************************)
-lemma cpxs_inv_appl1: â\88\80h,G,L,V1,T1,U2. â¦\83G,Lâ¦\84 ⊢ ⓐV1.T1 ⬈*[h] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88*[h] V2 & â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2 &
+lemma cpxs_inv_appl1: â\88\80h,G,L,V1,T1,U2. â\9dªG,Lâ\9d« ⊢ ⓐV1.T1 ⬈*[h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88*[h] V2 & â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T2 &
U2 = ⓐV2.T2
- | â\88\83â\88\83p,W,T. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88*[h] â\93\9b{p}W.T & â¦\83G,Lâ¦\84 â\8a¢ â\93\93{p}ⓝW.V1.T ⬈*[h] U2
- | â\88\83â\88\83p,V0,V2,V,T. â¦\83G,Lâ¦\84 ⊢ V1 ⬈*[h] V0 & ⇧*[1] V0 ≘ V2 &
- â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88*[h] â\93\93{p}V.T & â¦\83G,Lâ¦\84 â\8a¢ â\93\93{p}V.ⓐV2.T ⬈*[h] U2.
+ | â\88\83â\88\83p,W,T. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88*[h] â\93\9b[p]W.T & â\9dªG,Lâ\9d« â\8a¢ â\93\93[p]ⓝW.V1.T ⬈*[h] U2
+ | â\88\83â\88\83p,V0,V2,V,T. â\9dªG,Lâ\9d« ⊢ V1 ⬈*[h] V0 & ⇧*[1] V0 ≘ V2 &
+ â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88*[h] â\93\93[p]V.T & â\9dªG,Lâ\9d« â\8a¢ â\93\93[p]V.ⓐV2.T ⬈*[h] U2.
#h #G #L #V1 #T1 #U2 #H @(cpxs_ind … H) -U2 [ /3 width=5 by or3_intro0, ex3_2_intro/ ]
#U #U2 #_ #HU2 * *
[ #V0 #T0 #HV10 #HT10 #H destruct
(* Advanced properties ******************************************************)
-lemma cpxs_delta: â\88\80h,I,G,K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬈*[h] V2 →
- â\88\80W2. â\87§*[1] V2 â\89\98 W2 â\86\92 â¦\83G,K.â\93\91{I}V1â¦\84 ⊢ #0 ⬈*[h] W2.
+lemma cpxs_delta: â\88\80h,I,G,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈*[h] V2 →
+ â\88\80W2. â\87§*[1] V2 â\89\98 W2 â\86\92 â\9dªG,K.â\93\91[I]V1â\9d« ⊢ #0 ⬈*[h] W2.
#h #I #G #K #V1 #V2 #H @(cpxs_ind … H) -V2
[ /3 width=3 by cpx_cpxs, cpx_delta/
| #V #V2 #_ #HV2 #IH #W2 #HVW2
- elim (lifts_total V (ð\9d\90\94â\9d´1â\9dµ))
+ elim (lifts_total V (ð\9d\90\94â\9d¨1â\9d©))
/5 width=11 by cpxs_strap1, cpx_lifts_bi, drops_refl, drops_drop/
]
qed.
-lemma cpxs_lref: â\88\80h,I,G,K,T,i. â¦\83G,Kâ¦\84 ⊢ #i ⬈*[h] T →
- â\88\80U. â\87§*[1] T â\89\98 U â\86\92 â¦\83G,K.â\93\98{I}â¦\84 ⊢ #↑i ⬈*[h] U.
+lemma cpxs_lref: â\88\80h,I,G,K,T,i. â\9dªG,Kâ\9d« ⊢ #i ⬈*[h] T →
+ â\88\80U. â\87§*[1] T â\89\98 U â\86\92 â\9dªG,K.â\93\98[I]â\9d« ⊢ #↑i ⬈*[h] U.
#h #I #G #K #T #i #H @(cpxs_ind … H) -T
[ /3 width=3 by cpx_cpxs, cpx_lref/
| #T0 #T #_ #HT2 #IH #U #HTU
- elim (lifts_total T0 (ð\9d\90\94â\9d´1â\9dµ))
+ elim (lifts_total T0 (ð\9d\90\94â\9d¨1â\9d©))
/5 width=11 by cpxs_strap1, cpx_lifts_bi, drops_refl, drops_drop/
]
qed.
(* Basic_2A1: was: cpxs_delta *)
lemma cpxs_delta_drops: ∀h,I,G,L,K,V1,V2,i.
- ⇩*[i] L ≘ K.ⓑ{I}V1 → ⦃G,K⦄ ⊢ V1 ⬈*[h] V2 →
- â\88\80W2. â\87§*[â\86\91i] V2 â\89\98 W2 â\86\92 â¦\83G,Lâ¦\84 ⊢ #i ⬈*[h] W2.
+ ⇩*[i] L ≘ K.ⓑ[I]V1 → ❪G,K❫ ⊢ V1 ⬈*[h] V2 →
+ â\88\80W2. â\87§*[â\86\91i] V2 â\89\98 W2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ⬈*[h] W2.
#h #I #G #L #K #V1 #V2 #i #HLK #H @(cpxs_ind … H) -V2
[ /3 width=7 by cpx_cpxs, cpx_delta_drops/
| #V #V2 #_ #HV2 #IH #W2 #HVW2
- elim (lifts_total V (ð\9d\90\94â\9d´â\86\91iâ\9dµ))
+ elim (lifts_total V (ð\9d\90\94â\9d¨â\86\91iâ\9d©))
/4 width=11 by cpxs_strap1, cpx_lifts_bi, drops_isuni_fwd_drop2/
]
qed.
(* Advanced inversion lemmas ************************************************)
-lemma cpxs_inv_zero1: â\88\80h,G,L,T2. â¦\83G,Lâ¦\84 ⊢ #0 ⬈*[h] T2 →
+lemma cpxs_inv_zero1: â\88\80h,G,L,T2. â\9dªG,Lâ\9d« ⊢ #0 ⬈*[h] T2 →
T2 = #0 ∨
- â\88\83â\88\83I,K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬈*[h] V2 & ⇧*[1] V2 ≘ T2 &
- L = K.ⓑ{I}V1.
+ â\88\83â\88\83I,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈*[h] V2 & ⇧*[1] V2 ≘ T2 &
+ L = K.ⓑ[I]V1.
#h #G #L #T2 #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/
#T #T2 #_ #HT2 *
[ #H destruct
]
qed-.
-lemma cpxs_inv_lref1: â\88\80h,G,L,T2,i. â¦\83G,Lâ¦\84 ⊢ #↑i ⬈*[h] T2 →
+lemma cpxs_inv_lref1: â\88\80h,G,L,T2,i. â\9dªG,Lâ\9d« ⊢ #↑i ⬈*[h] T2 →
T2 = #(↑i) ∨
- â\88\83â\88\83I,K,T. â¦\83G,Kâ¦\84 â\8a¢ #i â¬\88*[h] T & â\87§*[1] T â\89\98 T2 & L = K.â\93\98{I}.
+ â\88\83â\88\83I,K,T. â\9dªG,Kâ\9d« â\8a¢ #i â¬\88*[h] T & â\87§*[1] T â\89\98 T2 & L = K.â\93\98[I].
#h #G #L #T2 #i #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/
#T #T2 #_ #HT2 *
[ #H destruct
qed-.
(* Basic_2A1: was: cpxs_inv_lref1 *)
-lemma cpxs_inv_lref1_drops: â\88\80h,G,L,T2,i. â¦\83G,Lâ¦\84 ⊢ #i ⬈*[h] T2 →
+lemma cpxs_inv_lref1_drops: â\88\80h,G,L,T2,i. â\9dªG,Lâ\9d« ⊢ #i ⬈*[h] T2 →
T2 = #i ∨
- ∃∃I,K,V1,T1. ⇩*[i] L ≘ K.ⓑ{I}V1 & ⦃G,K⦄ ⊢ V1 ⬈*[h] T1 &
+ ∃∃I,K,V1,T1. ⇩*[i] L ≘ K.ⓑ[I]V1 & ❪G,K❫ ⊢ V1 ⬈*[h] T1 &
⇧*[↑i] T1 ≘ T2.
#h #G #L #T2 #i #H @(cpxs_ind … H) -T2 /2 width=1 by or_introl/
#T #T2 #_ #HT2 *
(* Properties with sort-irrelevant equivalence for closures *****************)
-lemma feqx_cpxs_trans: â\88\80h,G1,G2,L1,L2,T1,T. â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,Tâ¦\84 →
- â\88\80T2. â¦\83G2,L2â¦\84 ⊢ T ⬈*[h] T2 →
- â\88\83â\88\83T0. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] T0 & â¦\83G1,L1,T0â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84.
+lemma feqx_cpxs_trans: â\88\80h,G1,G2,L1,L2,T1,T. â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,Tâ\9d« →
+ â\88\80T2. â\9dªG2,L2â\9d« ⊢ T ⬈*[h] T2 →
+ â\88\83â\88\83T0. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88*[h] T0 & â\9dªG1,L1,T0â\9d« â\89\9b â\9dªG2,L2,T2â\9d«.
#h #G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2
elim (feqx_inv_gen_dx … H) -H #H #HL12 #HT1 destruct
elim (reqx_cpxs_trans … HT2 … HL12) #T0 #HT0 #HT02
(* Properties on supclosure *************************************************)
-lemma fqu_cpxs_trans: â\88\80h,b,G1,G2,L1,L2,T2,U2. â¦\83G2,L2â¦\84 ⊢ T2 ⬈*[h] U2 →
- â\88\80T1. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & â¦\83G1,L1,U1â¦\84 â¬\82[b] â¦\83G2,L2,U2â¦\84.
+lemma fqu_cpxs_trans: â\88\80h,b,G1,G2,L1,L2,T2,U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈*[h] 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*[h] U1 & â\9dªG1,L1,U1â\9d« â¬\82[b] â\9dªG2,L2,U2â\9d«.
#h #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: â\88\80h,b,G1,G2,L1,L2,T2,U2. â¦\83G2,L2â¦\84 ⊢ T2 ⬈*[h] U2 →
- â\88\80T1. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84 →
- â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & â¦\83G1,L1,U1â¦\84 â¬\82⸮[b] â¦\83G2,L2,U2â¦\84.
+lemma fquq_cpxs_trans: â\88\80h,b,G1,G2,L1,L2,T2,U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈*[h] 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*[h] U1 & â\9dªG1,L1,U1â\9d« â¬\82⸮[b] â\9dªG2,L2,U2â\9d«.
#h #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: â\88\80h,b,G1,G2,L1,L2,T2,U2. â¦\83G2,L2â¦\84 ⊢ T2 ⬈*[h] U2 →
- â\88\80T1. â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 →
- â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & â¦\83G1,L1,U1â¦\84 â¬\82+[b] â¦\83G2,L2,U2â¦\84.
+lemma fqup_cpxs_trans: â\88\80h,b,G1,G2,L1,L2,T2,U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈*[h] 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*[h] U1 & â\9dªG1,L1,U1â\9d« â¬\82+[b] â\9dªG2,L2,U2â\9d«.
#h #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: â\88\80h,b,G1,G2,L1,L2,T2,U2. â¦\83G2,L2â¦\84 ⊢ T2 ⬈*[h] U2 →
- â\88\80T1. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
- â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & â¦\83G1,L1,U1â¦\84 â¬\82*[b] â¦\83G2,L2,U2â¦\84.
+lemma fqus_cpxs_trans: â\88\80h,b,G1,G2,L1,L2,T2,U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈*[h] 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*[h] U1 & â\9dªG1,L1,U1â\9d« â¬\82*[b] â\9dªG2,L2,U2â\9d«.
#h #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_tneqx: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80U2. â¦\83G2,L2â¦\84 ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) →
- â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â¬\82[b] â¦\83G2,L2,U2â¦\84.
+lemma fqu_cpxs_trans_tneqx: â\88\80h,b,G1,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] U2 → (T2 ≛ U2 → ⊥) →
+ â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88*[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â\9dªG1,L1,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
-[ #I #G #L #V1 #V2 #HV12 #_ elim (lifts_total V2 ð\9d\90\94â\9d´1â\9dµ)
+[ #I #G #L #V1 #V2 #HV12 #_ elim (lifts_total V2 ð\9d\90\94â\9d¨1â\9d©)
#U2 #HVU2 @(ex3_intro … U2)
[1,3: /3 width=7 by cpxs_delta, fqu_drop/
| #H lapply (teqx_inv_lref1 … H) -H
#H destruct /2 width=5 by lifts_inv_lref2_uni_lt/
]
-| #I #G #L #V1 #T #V2 #HV12 #H0 @(ex3_intro … (②{I}V2.T))
+| #I #G #L #V1 #T #V2 #HV12 #H0 @(ex3_intro … (②[I]V2.T))
[1,3: /2 width=4 by fqu_pair_sn, cpxs_pair_sn/
| #H elim (teqx_inv_pair … H) -H /2 width=1 by/
]
-| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ{p,I}V.T2))
+| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ[p,I]V.T2))
[1,3: /2 width=4 by fqu_bind_dx, cpxs_bind/
| #H elim (teqx_inv_pair … H) -H /2 width=1 by/
]
-| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ{p,I}V.T2))
+| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ[p,I]V.T2))
[1,3: /4 width=4 by lsubr_cpxs_trans, cpxs_bind, lsubr_unit, fqu_clear/
| #H elim (teqx_inv_pair … H) -H /2 width=1 by/
]
-| #I #G #L #V #T1 #T2 #HT12 #H0 @(ex3_intro … (ⓕ{I}V.T2))
+| #I #G #L #V #T1 #T2 #HT12 #H0 @(ex3_intro … (ⓕ[I]V.T2))
[1,3: /2 width=4 by fqu_flat_dx, cpxs_flat/
| #H elim (teqx_inv_pair … H) -H /2 width=1 by/
]
| #I #G #L #T1 #U1 #HTU1 #T2 #HT12 #H0
- elim (cpxs_lifts_sn … HT12 (Ⓣ) … (L.ⓘ{I}) … HTU1) -HT12
+ elim (cpxs_lifts_sn … HT12 (Ⓣ) … (L.ⓘ[I]) … HTU1) -HT12
/4 width=6 by fqu_drop, drops_refl, drops_drop, teqx_inv_lifts_bi, ex3_intro/
]
qed-.
(* Basic_2A1: uses: fquq_cpxs_trans_neq *)
-lemma fquq_cpxs_trans_tneqx: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80U2. â¦\83G2,L2â¦\84 ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) →
- â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â¬\82⸮[b] â¦\83G2,L2,U2â¦\84.
+lemma fquq_cpxs_trans_tneqx: â\88\80h,b,G1,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] U2 → (T2 ≛ U2 → ⊥) →
+ â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88*[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â\9dªG1,L1,U1â\9d« â¬\82⸮[b] â\9dªG2,L2,U2â\9d«.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 elim H12 -H12
[ #H12 #U2 #HTU2 #H elim (fqu_cpxs_trans_tneqx … H12 … HTU2 H) -T2
/3 width=4 by fqu_fquq, ex3_intro/
qed-.
(* Basic_2A1: uses: fqup_cpxs_trans_neq *)
-lemma fqup_cpxs_trans_tneqx: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80U2. â¦\83G2,L2â¦\84 ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) →
- â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â¬\82+[b] â¦\83G2,L2,U2â¦\84.
+lemma fqup_cpxs_trans_tneqx: â\88\80h,b,G1,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] U2 → (T2 ≛ U2 → ⊥) →
+ â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88*[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â\9dªG1,L1,U1â\9d« â¬\82+[b] â\9dªG2,L2,U2â\9d«.
#h #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_tneqx … H12 … HTU2 H) -T2
/3 width=4 by fqu_fqup, ex3_intro/
qed-.
(* Basic_2A1: uses: fqus_cpxs_trans_neq *)
-lemma fqus_cpxs_trans_tneqx: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80U2. â¦\83G2,L2â¦\84 ⊢ T2 ⬈*[h] U2 → (T2 ≛ U2 → ⊥) →
- â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â¬\82*[b] â¦\83G2,L2,U2â¦\84.
+lemma fqus_cpxs_trans_tneqx: â\88\80h,b,G1,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] U2 → (T2 ≛ U2 → ⊥) →
+ â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88*[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â\9dªG1,L1,U1â\9d« â¬\82*[b] â\9dªG2,L2,U2â\9d«.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H12 #U2 #HTU2 #H elim (fqus_inv_fqup … H12) -H12
[ #H12 elim (fqup_cpxs_trans_tneqx … H12 … HTU2 H) -T2
/3 width=4 by fqup_fqus, ex3_intro/
(* Advanced properties ******************************************************)
-lemma cpx_bind2: â\88\80h,G,L,V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ⬈[h] V2 →
- â\88\80I,T1,T2. â¦\83G,L.â\93\91{I}V2â¦\84 ⊢ T1 ⬈[h] T2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â¬\88*[h] â\93\91{p,I}V2.T2.
+lemma cpx_bind2: â\88\80h,G,L,V1,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« â\8a¢ â\93\91[p,I]V1.T1 â¬\88*[h] â\93\91[p,I]V2.T2.
/4 width=5 by lpx_cpx_trans, cpxs_bind_dx, lpx_pair/ qed.
-lemma cpxs_bind2_dx: â\88\80h,G,L,V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ⬈[h] V2 →
- â\88\80I,T1,T2. â¦\83G,L.â\93\91{I}V2â¦\84 ⊢ T1 ⬈*[h] T2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â¬\88*[h] â\93\91{p,I}V2.T2.
+lemma cpxs_bind2_dx: â\88\80h,G,L,V1,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« â\8a¢ â\93\91[p,I]V1.T1 â¬\88*[h] â\93\91[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: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80K1. â¦\83G1,K1â¦\84 ⊢ ⬈[h] L1 →
- â\88\83â\88\83K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â¬\88*[h] T & â¦\83G1,K1,Tâ¦\84 â¬\82+[b] â¦\83G2,K2,T2â¦\84 & â¦\83G2,K2â¦\84 ⊢ ⬈[h] L2.
+lemma lpx_fqup_trans: â\88\80h,b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82+[b] â\9dªG2,L2,T2â\9d« →
+ â\88\80K1. â\9dªG1,K1â\9d« ⊢ ⬈[h] L1 →
+ â\88\83â\88\83K2,T. â\9dªG1,K1â\9d« â\8a¢ T1 â¬\88*[h] T & â\9dªG1,K1,Tâ\9d« â¬\82+[b] â\9dªG2,K2,T2â\9d« & â\9dªG2,K2â\9d« ⊢ ⬈[h] L2.
#h #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/
(* Properties with star-iterated structural successor for closures **********)
(* Basic_2A1: uses: lpx_fqus_trans *)
-lemma lpx_fqus_trans: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80K1. â¦\83G1,K1â¦\84 ⊢ ⬈[h] L1 →
- â\88\83â\88\83K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â¬\88*[h] T & â¦\83G1,K1,Tâ¦\84 â¬\82*[b] â¦\83G2,K2,T2â¦\84 & â¦\83G2,K2â¦\84 ⊢ ⬈[h] L2.
+lemma lpx_fqus_trans: â\88\80h,b,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« →
+ â\88\80K1. â\9dªG1,K1â\9d« ⊢ ⬈[h] L1 →
+ â\88\83â\88\83K2,T. â\9dªG1,K1â\9d« â\8a¢ T1 â¬\88*[h] T & â\9dªG1,K1,Tâ\9d« â¬\82*[b] â\9dªG2,K2,T2â\9d« & â\9dªG2,K2â\9d« ⊢ ⬈[h] L2.
#h #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/
(* Properties with sort-irrelevant equivalence for local environments *******)
(* Basic_2A1: was just: lleq_cpxs_trans *)
-lemma reqx_cpxs_trans: â\88\80h,G,L0,T0,T1. â¦\83G,L0â¦\84 ⊢ T0 ⬈*[h] T1 →
+lemma reqx_cpxs_trans: â\88\80h,G,L0,T0,T1. â\9dªG,L0â\9d« ⊢ T0 ⬈*[h] T1 →
∀L2. L2 ≛[T0] L0 →
- â\88\83â\88\83T. â¦\83G,L2â¦\84 ⊢ T0 ⬈*[h] T & T ≛ T1.
+ â\88\83â\88\83T. â\9dªG,L2â\9d« ⊢ T0 ⬈*[h] T & T ≛ T1.
#h #G #L0 #T0 #T1 #H @(cpxs_ind_dx … H) -T0 /2 width=3 by ex2_intro/
#T0 #T #HT0 #_ #IH #L2 #HL2
elim (reqx_cpx_trans … HL2 … HT0) #U1 #H1 #H2
qed-.
(* Basic_2A1: was just: cpxs_lleq_conf *)
-lemma cpxs_reqx_conf: â\88\80h,G,L0,T0,T1. â¦\83G,L0â¦\84 ⊢ T0 ⬈*[h] T1 →
+lemma cpxs_reqx_conf: â\88\80h,G,L0,T0,T1. â\9dªG,L0â\9d« ⊢ T0 ⬈*[h] T1 →
∀L2. L0 ≛[T0] L2 →
- â\88\83â\88\83T. â¦\83G,L2â¦\84 ⊢ T0 ⬈*[h] T & T ≛ T1.
+ â\88\83â\88\83T. â\9dªG,L2â\9d« ⊢ T0 ⬈*[h] T & T ≛ T1.
/3 width=3 by reqx_cpxs_trans, reqx_sym/ qed-.
(* Basic_2A1: was just: cpxs_lleq_conf_dx *)
-lemma cpxs_reqx_conf_dx: â\88\80h,G,L2,T1,T2. â¦\83G,L2â¦\84 ⊢ T1 ⬈*[h] T2 →
+lemma cpxs_reqx_conf_dx: â\88\80h,G,L2,T1,T2. â\9dªG,L2â\9d« ⊢ T1 ⬈*[h] T2 →
∀L1. L1 ≛[T1] L2 → L1 ≛[T2] L2.
#h #G #L2 #T1 #T2 #H @(cpxs_ind … H) -T2 /3 width=6 by cpx_reqx_conf_dx/
qed-.
(* Basic_2A1: was just: lleq_conf_sn *)
-lemma cpxs_reqx_conf_sn: â\88\80h,G,L1,T1,T2. â¦\83G,L1â¦\84 ⊢ T1 ⬈*[h] T2 →
+lemma cpxs_reqx_conf_sn: â\88\80h,G,L1,T1,T2. â\9dªG,L1â\9d« ⊢ T1 ⬈*[h] T2 →
∀L2. L1 ≛[T1] L2 → L1 ≛[T2] L2.
/4 width=6 by cpxs_reqx_conf_dx, reqx_sym/ qed-.
(* Forward lemmas with sort-irrelevant outer equivalence for terms **********)
lemma cpxs_fwd_sort (h) (G) (L):
- â\88\80X2,s1. â¦\83G,Lâ¦\84 ⊢ ⋆s1 ⬈*[h] X2 → ⋆s1 ⩳ X2.
+ â\88\80X2,s1. â\9dªG,Lâ\9d« ⊢ ⋆s1 ⬈*[h] X2 → ⋆s1 ⩳ X2.
#h #G #L #X2 #s1 #H
elim (cpxs_inv_sort1 … H) -H #s2 #H destruct //
qed-.
(* Note: probably this is an inversion lemma *)
(* Basic_2A1: was: cpxs_fwd_delta *)
lemma cpxs_fwd_delta_drops (h) (I) (G) (L) (K):
- ∀V1,i. ⇩*[i] L ≘ K.ⓑ{I}V1 →
+ ∀V1,i. ⇩*[i] L ≘ K.ⓑ[I]V1 →
∀V2. ⇧*[↑i] V1 ≘ V2 →
- â\88\80X2. â¦\83G,Lâ¦\84 ⊢ #i ⬈*[h] X2 →
- â\88¨â\88¨ #i ⩳ X2 | â¦\83G,Lâ¦\84 ⊢ V2 ⬈*[h] X2.
+ â\88\80X2. â\9dªG,Lâ\9d« ⊢ #i ⬈*[h] X2 →
+ â\88¨â\88¨ #i ⩳ X2 | â\9dªG,Lâ\9d« ⊢ V2 ⬈*[h] X2.
#h #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 (h) (p) (G) (L):
- â\88\80V,W,T,X2. â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.â\93\9b{p}W.T ⬈*[h] X2 →
- ∨∨ ⓐV.ⓛ{p}W.T ⩳ X2 | ⦃G,L⦄ ⊢ ⓓ{p}ⓝW.V.T ⬈*[h] X2.
+ â\88\80V,W,T,X2. â\9dªG,Lâ\9d« â\8a¢ â\93\90V.â\93\9b[p]W.T ⬈*[h] X2 →
+ ∨∨ ⓐV.ⓛ[p]W.T ⩳ X2 | ❪G,L❫ ⊢ ⓓ[p]ⓝW.V.T ⬈*[h] X2.
#h #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 (h) (p) (G) (L):
- â\88\80V1,V,T,X2. â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\93{p}V.T ⬈*[h] X2 →
+ â\88\80V1,V,T,X2. â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\93[p]V.T ⬈*[h] X2 →
∀V2. ⇧*[1] V1 ≘ V2 →
- ∨∨ ⓐV1.ⓓ{p}V.T ⩳ X2 | ⦃G,L⦄ ⊢ ⓓ{p}V.ⓐV2.T ⬈*[h] X2.
+ ∨∨ ⓐV1.ⓓ[p]V.T ⩳ X2 | ❪G,L❫ ⊢ ⓓ[p]V.ⓐV2.T ⬈*[h] X2.
#h #p #G #L #V1 #V #T #X2 #H #V2 #HV12
elim (cpxs_inv_appl1 … H) -H *
[ -HV12 #V0 #T0 #_ #_ #H destruct /2 width=1 by teqo_pair, or_introl/
| #X #HT2 #H #H0 destruct
elim (lifts_inv_bind1 … H) -H #W2 #T2 #HW2 #HT02 #H destruct
@or_intror @(cpxs_trans … HU) -X2 (**) (* explicit constructor *)
- @(cpxs_trans … (+ⓓV.ⓐV2.ⓛ{q}W2.T2)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T
- @(cpxs_strap2 … (ⓐV1.ⓛ{q}W.T0)) [2: /2 width=1 by cpxs_beta_dx/ ]
+ @(cpxs_trans … (+ⓓV.ⓐV2.ⓛ[q]W2.T2)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T
+ @(cpxs_strap2 … (ⓐV1.ⓛ[q]W.T0)) [2: /2 width=1 by cpxs_beta_dx/ ]
/4 width=7 by cpx_zeta, lifts_bind, lifts_flat/
]
| #q #V3 #V4 #V0 #T0 #HV13 #HV34 #HT0 #HU
| #X #HT1 #H #H0 destruct
elim (lifts_inv_bind1 … H) -H #V5 #T5 #HV05 #HT05 #H destruct
lapply (cpxs_lifts_bi … HV13 (Ⓣ) … (L.ⓓV0) … HV12 … HV34) -V3 /3 width=1 by drops_refl, drops_drop/ #HV24
- @(cpxs_trans … (+ⓓV.ⓐV2.ⓓ{q}V5.T5)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T
- @(cpxs_strap2 … (ⓐV1.ⓓ{q}V0.T0)) [ /4 width=7 by cpx_zeta, lifts_bind, lifts_flat/ ] -V -V5 -T5
- @(cpxs_strap2 … (ⓓ{q}V0.ⓐV2.T0)) /3 width=3 by cpxs_pair_sn, cpxs_bind_dx, cpx_theta/
+ @(cpxs_trans … (+ⓓV.ⓐV2.ⓓ[q]V5.T5)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T
+ @(cpxs_strap2 … (ⓐV1.ⓓ[q]V0.T0)) [ /4 width=7 by cpx_zeta, lifts_bind, lifts_flat/ ] -V -V5 -T5
+ @(cpxs_strap2 … (ⓓ[q]V0.ⓐV2.T0)) /3 width=3 by cpxs_pair_sn, cpxs_bind_dx, cpx_theta/
]
]
qed-.
lemma cpxs_fwd_cast (h) (G) (L):
- â\88\80W,T,X2. â¦\83G,Lâ¦\84 ⊢ ⓝW.T ⬈*[h] X2 →
- â\88¨â\88¨ â\93\9dW. T ⩳ X2 | â¦\83G,Lâ¦\84 â\8a¢ T â¬\88*[h] X2 | â¦\83G,Lâ¦\84 ⊢ W ⬈*[h] X2.
+ â\88\80W,T,X2. â\9dªG,Lâ\9d« ⊢ ⓝW.T ⬈*[h] X2 →
+ â\88¨â\88¨ â\93\9dW. T ⩳ X2 | â\9dªG,Lâ\9d« â\8a¢ T â¬\88*[h] X2 | â\9dªG,Lâ\9d« ⊢ W ⬈*[h] X2.
#h #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 (h) (G) (L):
- â\88\80T1. â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83T1â¦\84 →
- â\88\80X2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] X2 → T1 ⩳ X2.
+ â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªT1â\9d« →
+ â\88\80X2. â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] X2 → T1 ⩳ X2.
/3 width=5 by cpxs_inv_cnx1, teqx_teqo/ qed-.
(* Vector form of forward lemmas with outer equivalence for terms ***********)
lemma cpxs_fwd_sort_vector (h) (G) (L):
- â\88\80s,Vs,X2. â¦\83G,Lâ¦\84 ⊢ ⒶVs.⋆s ⬈*[h] X2 → ⒶVs.⋆s ⩳ X2.
+ â\88\80s,Vs,X2. â\9dªG,Lâ\9d« ⊢ ⒶVs.⋆s ⬈*[h] X2 → ⒶVs.⋆s ⩳ X2.
#h #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 *
(* Basic_2A1: was: cpxs_fwd_delta_vector *)
lemma cpxs_fwd_delta_drops_vector (h) (I) (G) (L) (K):
- ∀V1,i. ⇩*[i] L ≘ K.ⓑ{I}V1 →
+ ∀V1,i. ⇩*[i] L ≘ K.ⓑ[I]V1 →
∀V2. ⇧*[↑i] V1 ≘ V2 →
- â\88\80Vs,X2. â¦\83G,Lâ¦\84 ⊢ ⒶVs.#i ⬈*[h] X2 →
- â\88¨â\88¨ â\92¶Vs.#i ⩳ X2 | â¦\83G,Lâ¦\84 ⊢ ⒶVs.V2 ⬈*[h] X2.
+ â\88\80Vs,X2. â\9dªG,Lâ\9d« ⊢ ⒶVs.#i ⬈*[h] X2 →
+ â\88¨â\88¨ â\92¶Vs.#i ⩳ X2 | â\9dªG,Lâ\9d« ⊢ ⒶVs.V2 ⬈*[h] X2.
#h #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
[ elim (teqo_inv_applv_bind_simple … HT0) //
| @or_intror -i (**) (* explicit constructor *)
@(cpxs_trans … HU) -X2
- @(cpxs_strap1 … (ⓐV.ⓛ{q}W0.T0)) /3 width=1 by cpxs_flat_dx, cpx_beta/
+ @(cpxs_strap1 … (ⓐV.ⓛ[q]W0.T0)) /3 width=1 by cpxs_flat_dx, cpx_beta/
]
| #q #V0 #V1 #V3 #T0 #HV0 #HV01 #HT0 #HU
elim (IHVs … HT0) -IHVs -HT0 #HT0
[ elim (teqo_inv_applv_bind_simple … HT0) //
| @or_intror -i (**) (* explicit constructor *)
@(cpxs_trans … HU) -X2
- @(cpxs_strap1 … (ⓐV0.ⓓ{q}V3.T0)) /3 width=3 by cpxs_flat, cpx_theta/
+ @(cpxs_strap1 … (ⓐV0.ⓓ[q]V3.T0)) /3 width=3 by cpxs_flat, cpx_theta/
]
]
qed-.
(* Basic_1: was just: pr3_iso_appls_beta *)
lemma cpxs_fwd_beta_vector (h) (p) (G) (L):
- â\88\80Vs,V,W,T,X2. â¦\83G,Lâ¦\84 â\8a¢ â\92¶Vs.â\93\90V.â\93\9b{p}W.T ⬈*[h] X2 →
- ∨∨ ⒶVs.ⓐV.ⓛ{p}W. T ⩳ X2 | ⦃G,L⦄ ⊢ ⒶVs.ⓓ{p}ⓝW.V.T ⬈*[h] X2.
+ â\88\80Vs,V,W,T,X2. â\9dªG,Lâ\9d« â\8a¢ â\92¶Vs.â\93\90V.â\93\9b[p]W.T ⬈*[h] X2 →
+ ∨∨ ⒶVs.ⓐV.ⓛ[p]W. T ⩳ X2 | ❪G,L❫ ⊢ ⒶVs.ⓓ[p]ⓝW.V.T ⬈*[h] X2.
#h #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 *
[ elim (teqo_inv_applv_bind_simple … HT1) //
| @or_intror (**) (* explicit constructor *)
@(cpxs_trans … HU) -X2
- @(cpxs_strap1 … (ⓐV0.ⓛ{q}W1.T1)) /3 width=1 by cpxs_flat_dx, cpx_beta/
+ @(cpxs_strap1 … (ⓐV0.ⓛ[q]W1.T1)) /3 width=1 by cpxs_flat_dx, cpx_beta/
]
| #q #V1 #V2 #V3 #T1 #HV01 #HV12 #HT1 #HU
elim (IHVs … HT1) -IHVs -HT1 #HT1
[ elim (teqo_inv_applv_bind_simple … HT1) //
| @or_intror (**) (* explicit constructor *)
@(cpxs_trans … HU) -X2
- @(cpxs_strap1 … (ⓐV1.ⓓ{q}V3.T1)) /3 width=3 by cpxs_flat, cpx_theta/
+ @(cpxs_strap1 … (ⓐV1.ⓓ[q]V3.T1)) /3 width=3 by cpxs_flat, cpx_theta/
]
]
qed-.
(* Basic_1: was just: pr3_iso_appls_abbr *)
lemma cpxs_fwd_theta_vector (h) (G) (L):
∀V1b,V2b. ⇧*[1] V1b ≘ V2b →
- â\88\80p,V,T,X2. â¦\83G,Lâ¦\84 â\8a¢ â\92¶V1b.â\93\93{p}V.T ⬈*[h] X2 →
- ∨∨ ⒶV1b.ⓓ{p}V.T ⩳ X2 | ⦃G,L⦄ ⊢ ⓓ{p}V.ⒶV2b.T ⬈*[h] X2.
+ â\88\80p,V,T,X2. â\9dªG,Lâ\9d« â\8a¢ â\92¶V1b.â\93\93[p]V.T ⬈*[h] X2 →
+ ∨∨ ⒶV1b.ⓓ[p]V.T ⩳ X2 | ❪G,L❫ ⊢ ⓓ[p]V.ⒶV2b.T ⬈*[h] X2.
#h #G #L #V1b #V2b * -V1b -V2b /3 width=1 by or_intror/
#V1b #V2b #V1a #V2a #HV12a #HV12b #p
generalize in match HV12a; -HV12a
[ -HV12a #V1 #T1 #_ #_ #H destruct
| -V1b #X #HT1 #H #H0 destruct
elim (lifts_inv_bind1 … H) -H #W1 #T1 #HW01 #HT01 #H destruct
- @(cpxs_trans … (+ⓓV.ⓐV2a.ⓛ{q}W1.T1)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T -V2b -V2b
- @(cpxs_strap2 … (ⓐV1a.ⓛ{q}W0.T0))
+ @(cpxs_trans … (+ⓓV.ⓐV2a.ⓛ[q]W1.T1)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T -V2b -V2b
+ @(cpxs_strap2 … (ⓐV1a.ⓛ[q]W0.T0))
/4 width=7 by cpxs_beta_dx, cpx_zeta, lifts_bind, lifts_flat/
]
]
elim (cpxs_inv_abbr1_dx … HT0) -HT0 *
[ #V1 #T1 #HV1 #HT1 #H destruct
lapply (cpxs_lifts_bi … HV10a (Ⓣ) … (L.ⓓV) … HV12a … HV0a) -V1a -V0a /3 width=1 by drops_refl, drops_drop/ #HV2a
- @(cpxs_trans … (ⓓ{p}V.ⓐV2a.T1)) /3 width=1 by cpxs_bind, cpxs_pair_sn, cpxs_flat_dx, cpxs_bind_dx/
+ @(cpxs_trans … (ⓓ[p]V.ⓐV2a.T1)) /3 width=1 by cpxs_bind, cpxs_pair_sn, cpxs_flat_dx, cpxs_bind_dx/
| #X #HT1 #H #H0 destruct
elim (lifts_inv_bind1 … H) -H #V1 #T1 #HW01 #HT01 #H destruct
lapply (cpxs_lifts_bi … HV10a (Ⓣ) … (L.ⓓV0) … HV12a … HV0a) -V0a /3 width=1 by drops_refl, drops_drop/ #HV2a
- @(cpxs_trans … (+ⓓV.ⓐV2a.ⓓ{q}V1.T1)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T -V2b -V2b
- @(cpxs_strap2 … (ⓐV1a.ⓓ{q}V0.T0)) [ /4 width=7 by cpx_zeta, lifts_bind, lifts_flat/ ] -V -V1 -T1
- @(cpxs_strap2 … (ⓓ{q}V0.ⓐV2a.T0)) /3 width=3 by cpxs_pair_sn, cpxs_bind_dx, cpx_theta/
+ @(cpxs_trans … (+ⓓV.ⓐV2a.ⓓ[q]V1.T1)) [ /3 width=1 by cpxs_flat_dx, cpxs_bind_dx/ ] -T -V2b -V2b
+ @(cpxs_strap2 … (ⓐV1a.ⓓ[q]V0.T0)) [ /4 width=7 by cpx_zeta, lifts_bind, lifts_flat/ ] -V -V1 -T1
+ @(cpxs_strap2 … (ⓓ[q]V0.ⓐV2a.T0)) /3 width=3 by cpxs_pair_sn, cpxs_bind_dx, cpx_theta/
]
]
]
(* Basic_1: was just: pr3_iso_appls_cast *)
lemma cpxs_fwd_cast_vector (h) (G) (L):
- â\88\80Vs,W,T,X2. â¦\83G,Lâ¦\84 ⊢ ⒶVs.ⓝW.T ⬈*[h] X2 →
+ â\88\80Vs,W,T,X2. â\9dªG,Lâ\9d« ⊢ ⒶVs.ⓝW.T ⬈*[h] X2 →
∨∨ ⒶVs. ⓝW. T ⩳ X2
- | â¦\83G,Lâ¦\84 ⊢ ⒶVs.T ⬈*[h] X2
- | â¦\83G,Lâ¦\84 ⊢ ⒶVs.W ⬈*[h] X2.
+ | â\9dªG,Lâ\9d« ⊢ ⒶVs.T ⬈*[h] X2
+ | â\9dªG,Lâ\9d« ⊢ ⒶVs.W ⬈*[h] X2.
#h #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 *
[ elim (teqo_inv_applv_bind_simple … HT0) //
| @or3_intro1 -W (**) (* explicit constructor *)
@(cpxs_trans … HU) -X2
- @(cpxs_strap1 … (ⓐV.ⓛ{q}W0.T0)) /2 width=1 by cpxs_flat_dx, cpx_beta/
+ @(cpxs_strap1 … (ⓐV.ⓛ[q]W0.T0)) /2 width=1 by cpxs_flat_dx, cpx_beta/
| @or3_intro2 -T (**) (* explicit constructor *)
@(cpxs_trans … HU) -X2
- @(cpxs_strap1 … (ⓐV.ⓛ{q}W0.T0)) /2 width=1 by cpxs_flat_dx, cpx_beta/
+ @(cpxs_strap1 … (ⓐV.ⓛ[q]W0.T0)) /2 width=1 by cpxs_flat_dx, cpx_beta/
]
| #q #V0 #V1 #V2 #T0 #HV0 #HV01 #HT0 #HU
elim (IHVs … HT0) -IHVs -HT0 #HT0
[ elim (teqo_inv_applv_bind_simple … HT0) //
| @or3_intro1 -W (**) (* explicit constructor *)
@(cpxs_trans … HU) -X2
- @(cpxs_strap1 … (ⓐV0.ⓓ{q}V2.T0)) /2 width=3 by cpxs_flat, cpx_theta/
+ @(cpxs_strap1 … (ⓐV0.ⓓ[q]V2.T0)) /2 width=3 by cpxs_flat, cpx_theta/
| @or3_intro2 -T (**) (* explicit constructor *)
@(cpxs_trans … HU) -X2
- @(cpxs_strap1 … (ⓐV0.ⓓ{q}V2.T0)) /2 width=3 by cpxs_flat, cpx_theta/
+ @(cpxs_strap1 … (ⓐV0.ⓓ[q]V2.T0)) /2 width=3 by cpxs_flat, cpx_theta/
]
]
qed-.
(* Basic_1: was just: nf2_iso_appls_lref *)
lemma cpxs_fwd_cnx_vector (h) (G) (L):
- â\88\80T. ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83Tâ¦\84 →
- â\88\80Vs,X2. â¦\83G,Lâ¦\84 ⊢ ⒶVs.T ⬈*[h] X2 → ⒶVs.T ⩳ X2.
+ â\88\80T. ð\9d\90\92â\9dªTâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªTâ\9d« →
+ â\88\80Vs,X2. â\9dªG,Lâ\9d« ⊢ ⒶVs.T ⬈*[h] X2 → ⒶVs.T ⩳ X2.
#h #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 *
(* Properties with sort-irrelevant equivalence for terms ********************)
-lemma teqx_cpxs_trans: â\88\80h,U1,T1. U1 â\89\9b T1 â\86\92 â\88\80G,L,T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2 →
- â\88\83â\88\83U2. â¦\83G,Lâ¦\84 ⊢ U1 ⬈*[h] U2 & U2 ≛ T2.
+lemma teqx_cpxs_trans: â\88\80h,U1,T1. U1 â\89\9b T1 â\86\92 â\88\80G,L,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T2 →
+ â\88\83â\88\83U2. â\9dªG,Lâ\9d« ⊢ U1 ⬈*[h] U2 & U2 ≛ T2.
#h #U1 #T1 #HUT1 #G #L #T2 #HT12 @(cpxs_ind … HT12) -T2 /2 width=3 by ex2_intro/
#T #T2 #_ #HT2 * #U #HU1 #HUT elim (teqx_cpx_trans … HUT … HT2) -T -T1
/3 width=3 by ex2_intro, cpxs_strap1/
(* Note: this requires teqx to be symmetric *)
(* Nasic_2A1: uses: cpxs_neq_inv_step_sn *)
-lemma cpxs_tneqx_fwd_step_sn: â\88\80h,G,L,T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) →
- â\88\83â\88\83T,T0. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88[h] T & T1 â\89\9b T â\86\92 â\8a¥ & â¦\83G,Lâ¦\84 ⊢ T ⬈*[h] T0 & T0 ≛ T2.
+lemma cpxs_tneqx_fwd_step_sn: â\88\80h,G,L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) →
+ â\88\83â\88\83T,T0. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88[h] T & T1 â\89\9b T â\86\92 â\8a¥ & â\9dªG,Lâ\9d« ⊢ T ⬈*[h] T0 & T0 ≛ T2.
#h #G #L #T1 #T2 #H @(cpxs_ind_dx … H) -T1
[ #H elim H -H //
| #T1 #T0 #HT10 #HT02 #IH #Hn12
(* Basic eliminators ********************************************************)
lemma csx_ind: ∀h,G,L. ∀Q:predicate term.
- (â\88\80T1. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 →
- (â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) →
+ (â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« →
+ (â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) →
Q T1
) →
- â\88\80T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 → Q T.
+ â\88\80T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« → Q T.
#h #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: ∀h,G,L,T1.
- (â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88[h] T2 â\86\92 (T1 â\89\9b T2 â\86\92 â\8a¥) â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T2â¦\84) →
- â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84.
+ (â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88[h] T2 â\86\92 (T1 â\89\9b T2 â\86\92 â\8a¥) â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT2â\9d«) →
+ â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d«.
/4 width=1 by SN_intro/ qed.
(* Basic forward lemmas *****************************************************)
-fact csx_fwd_pair_sn_aux: â\88\80h,G,L,U. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Uâ¦\84 →
- ∀I,V,T. U = ②{I}V.T → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃V⦄.
+fact csx_fwd_pair_sn_aux: â\88\80h,G,L,U. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªUâ\9d« →
+ ∀I,V,T. U = ②[I]V.T → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪V❫.
#h #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
+@(IH (②[I]V2.T)) -IH /2 width=3 by cpx_pair_sn/ -HLV2
#H elim (teqx_inv_pair … H) -H /2 width=1 by/
qed-.
(* Basic_1: was just: sn3_gen_head *)
-lemma csx_fwd_pair_sn: â\88\80h,I,G,L,V,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\91¡{I}V.Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vâ¦\84.
+lemma csx_fwd_pair_sn: â\88\80h,I,G,L,V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\91¡[I]V.Tâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVâ\9d«.
/2 width=5 by csx_fwd_pair_sn_aux/ qed-.
-fact csx_fwd_bind_dx_aux: â\88\80h,G,L,U. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Uâ¦\84 →
- ∀p,I,V,T. U = ⓑ{p,I}V.T → ⦃G,L.ⓑ{I}V⦄ ⊢ ⬈*[h] 𝐒⦃T⦄.
+fact csx_fwd_bind_dx_aux: â\88\80h,G,L,U. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªUâ\9d« →
+ ∀p,I,V,T. U = ⓑ[p,I]V.T → ❪G,L.ⓑ[I]V❫ ⊢ ⬈*[h] 𝐒❪T❫.
#h #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
+@(IH (ⓑ[p, I]V.T2)) -IH /2 width=3 by cpx_bind/ -HLT2
#H elim (teqx_inv_pair … H) -H /2 width=1 by/
qed-.
(* Basic_1: was just: sn3_gen_bind *)
-lemma csx_fwd_bind_dx: â\88\80h,p,I,G,L,V,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\91{p,I}V.Tâ¦\84 â\86\92 â¦\83G,L.â\93\91{I}Vâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84.
+lemma csx_fwd_bind_dx: â\88\80h,p,I,G,L,V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\91[p,I]V.Tâ\9d« â\86\92 â\9dªG,L.â\93\91[I]Vâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d«.
/2 width=4 by csx_fwd_bind_dx_aux/ qed-.
-fact csx_fwd_flat_dx_aux: â\88\80h,G,L,U. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Uâ¦\84 →
- ∀I,V,T. U = ⓕ{I}V.T → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃T⦄.
+fact csx_fwd_flat_dx_aux: â\88\80h,G,L,U. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªUâ\9d« →
+ ∀I,V,T. U = ⓕ[I]V.T → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪T❫.
#h #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
+@(IH (ⓕ[I]V.T2)) -IH /2 width=3 by cpx_flat/ -HLT2
#H elim (teqx_inv_pair … H) -H /2 width=1 by/
qed-.
(* Basic_1: was just: sn3_gen_flat *)
-lemma csx_fwd_flat_dx: â\88\80h,I,G,L,V,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\95{I}V.Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84.
+lemma csx_fwd_flat_dx: â\88\80h,I,G,L,V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\95[I]V.Tâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d«.
/2 width=5 by csx_fwd_flat_dx_aux/ qed-.
-lemma csx_fwd_bind: â\88\80h,p,I,G,L,V,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\91{p,I}V.Tâ¦\84 →
- â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vâ¦\84 â\88§ â¦\83G,L.â\93\91{I}Vâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84.
+lemma csx_fwd_bind: â\88\80h,p,I,G,L,V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\91[p,I]V.Tâ\9d« →
+ â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVâ\9d« â\88§ â\9dªG,L.â\93\91[I]Vâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d«.
/3 width=3 by csx_fwd_pair_sn, csx_fwd_bind_dx, conj/ qed-.
-lemma csx_fwd_flat: â\88\80h,I,G,L,V,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\95{I}V.Tâ¦\84 →
- â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vâ¦\84 â\88§ â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84.
+lemma csx_fwd_flat: â\88\80h,I,G,L,V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\95[I]V.Tâ\9d« →
+ â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVâ\9d« â\88§ â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d«.
/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: â\88\80h,G,L,T,A. â¦\83G,Lâ¦\84 â\8a¢ T â\81\9d A â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84.
+theorem aaa_csx: â\88\80h,G,L,T,A. â\9dªG,Lâ\9d« â\8a¢ T â\81\9d A â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d«.
#h #G #L #T #A #H
@(gcr_aaa … (csx_gcp h) (csx_gcr h) … H)
qed.
(* Advanced eliminators *****************************************************)
fact aaa_ind_csx_aux: ∀h,G,L,A. ∀Q:predicate term.
- (â\88\80T1. â¦\83G,Lâ¦\84 ⊢ T1 ⁝ A →
- (â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1
+ (â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ⁝ A →
+ (â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1
) →
- â\88\80T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 ⊢ T ⁝ A → Q T.
+ â\88\80T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« â\86\92 â\9dªG,Lâ\9d« ⊢ T ⁝ A → Q T.
#h #G #L #A #Q #IH #T #H @(csx_ind … H) -T /4 width=5 by cpx_aaa_conf/
qed-.
lemma aaa_ind_csx: ∀h,G,L,A. ∀Q:predicate term.
- (â\88\80T1. â¦\83G,Lâ¦\84 ⊢ T1 ⁝ A →
- (â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1
+ (â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ⁝ A →
+ (â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1
) →
- â\88\80T. â¦\83G,Lâ¦\84 ⊢ 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: ∀h,G,L,A. ∀Q:predicate term.
- (â\88\80T1. â¦\83G,Lâ¦\84 ⊢ T1 ⁝ A →
- (â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1
+ (â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ⁝ A →
+ (â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1
) →
- â\88\80T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 ⊢ T ⁝ A → Q T.
+ â\88\80T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« â\86\92 â\9dªG,Lâ\9d« ⊢ T ⁝ A → Q T.
#h #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: ∀h,G,L,A. ∀Q:predicate term.
- (â\88\80T1. â¦\83G,Lâ¦\84 ⊢ T1 ⁝ A →
- (â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1
+ (â\88\80T1. â\9dªG,Lâ\9d« ⊢ T1 ⁝ A →
+ (â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1
) →
- â\88\80T. â¦\83G,Lâ¦\84 ⊢ 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-.
(* Properties with normal terms for unbound parallel rt-transition **********)
(* Basic_1: was just: sn3_nf2 *)
-lemma cnx_csx: â\88\80h,G,L,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84.
+lemma cnx_csx: â\88\80h,G,L,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªTâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d«.
/2 width=1 by NF_to_SN/ qed.
(* Advanced properties ******************************************************)
-lemma csx_sort: â\88\80h,G,L,s. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\8b\86sâ¦\84.
+lemma csx_sort: â\88\80h,G,L,s. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\8b\86sâ\9d«.
/3 width=4 by cnx_csx, cnx_sort/ qed.
(* Basic_1: was just: sn3_appls_lref *)
lemma csx_applv_cnx (h) (G) (L):
- â\88\80T. ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83Tâ¦\84 →
- â\88\80Vs. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vsâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\92¶Vs.Tâ¦\84.
+ â\88\80T. ð\9d\90\92â\9dªTâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªTâ\9d« →
+ â\88\80Vs. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVsâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\92¶Vs.Tâ\9d«.
#h #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 (h) (G) (L):
- â\88\80s,Vs. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vsâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\92¶Vs.â\8b\86sâ¦\84.
+ â\88\80s,Vs. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVsâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\92¶Vs.â\8b\86sâ\9d«.
/3 width=6 by csx_applv_cnx, cnx_sort, simple_atom/ qed.
(* Basic_1: was just: sn3_intro *)
lemma csx_intro_cpxs: ∀h,G,L,T1.
- (â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88*[h] T2 â\86\92 (T1 â\89\9b T2 â\86\92 â\8a¥) â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T2â¦\84) →
- â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84.
+ (â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88*[h] T2 â\86\92 (T1 â\89\9b T2 â\86\92 â\8a¥) â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT2â\9d«) →
+ â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d«.
/4 width=1 by cpx_cpxs, csx_intro/ qed-.
(* Basic_1: was just: sn3_pr3_trans *)
-lemma csx_cpxs_trans: â\88\80h,G,L,T1. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88*[h] T2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T2â¦\84.
+lemma csx_cpxs_trans: â\88\80h,G,L,T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88*[h] T2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT2â\9d«.
#h #G #L #T1 #HT1 #T2 #H @(cpxs_ind … H) -T2
/2 width=3 by csx_cpx_trans/
qed-.
(* Eliminators with unbound context-sensitive rt-computation for terms ******)
lemma csx_ind_cpxs_teqx: ∀h,G,L. ∀Q:predicate term.
- (â\88\80T1. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 →
- (â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1
+ (â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« →
+ (â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1
) →
- â\88\80T1. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 →
- â\88\80T0. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T0 → ∀T2. T0 ≛ T2 → Q T2.
+ â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« →
+ â\88\80T0. â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T0 → ∀T2. T0 ≛ T2 → Q T2.
#h #G #L #Q #IH #T1 #H @(csx_ind … H) -T1
#T1 #HT1 #IH1 #T0 #HT10 #T2 #HT02
@IH -IH /3 width=3 by csx_cpxs_trans, csx_teqx_trans/ -HT1 #V2 #HTV2 #HnTV2
(* Basic_2A1: was: csx_ind_alt *)
lemma csx_ind_cpxs: ∀h,G,L. ∀Q:predicate term.
- (â\88\80T1. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 →
- (â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1
+ (â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« →
+ (â\88\80T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T2 → (T1 ≛ T2 → ⊥) → Q T2) → Q T1
) →
- â\88\80T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 → Q T.
+ â\88\80T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« → Q T.
#h #G #L #Q #IH #T #HT
@(csx_ind_cpxs_teqx … IH … HT) -IH -HT // (**) (* full auto fails *)
qed-.
(* Advanced properties ******************************************************)
lemma csx_teqx_trans (h) (G):
- â\88\80L,T1. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 →
- â\88\80T2. T1 â\89\9b T2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T2â¦\84.
+ â\88\80L,T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« →
+ â\88\80T2. T1 â\89\9b T2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT2â\9d«.
#h #G #L #T1 #H @(csx_ind … H) -T1 #T #_ #IH #T2 #HT2
@csx_intro #T1 #HT21 #HnT21 elim (teqx_cpx_trans … HT2 … HT21) -HT21
/4 width=5 by teqx_repl/
qed-.
lemma csx_cpx_trans (h) (G):
- â\88\80L,T1. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88[h] T2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T2â¦\84.
+ â\88\80L,T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88[h] T2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT2â\9d«.
#h #G #L #T1 #H @(csx_ind … H) -T1 #T1 #HT1 #IHT1 #T2 #HLT12
elim (teqx_dec T1 T2) /3 width=4 by csx_teqx_trans/
qed-.
(* Basic_1: was just: sn3_cast *)
lemma csx_cast (h) (G):
- â\88\80L,W. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Wâ¦\84 →
- â\88\80T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\9dW.Tâ¦\84.
+ â\88\80L,W. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªWâ\9d« →
+ â\88\80T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\9dW.Tâ\9d«.
#h #G #L #W #HW @(csx_ind … HW) -W
#W #HW #IHW #T #HT @(csx_ind … HT) -T
#T #HT #IHT @csx_intro
(* Basic_1: was just: sn3_abbr *)
(* Basic_2A1: was: csx_lref_bind *)
lemma csx_lref_pair_drops (h) (G):
- ∀I,L,K,V,i. ⇩*[i] L ≘ K.ⓑ{I}V →
- â¦\83G,Kâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83#iâ¦\84.
+ ∀I,L,K,V,i. ⇩*[i] L ≘ K.ⓑ[I]V →
+ â\9dªG,Kâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dª#iâ\9d«.
#h #G #I #L #K #V #i #HLK #HV
@csx_intro #X #H #Hi elim (cpx_inv_lref1_drops … H) -H
[ #H destruct elim Hi //
(* Basic_1: was: sn3_gen_def *)
(* Basic_2A1: was: csx_inv_lref_bind *)
lemma csx_inv_lref_pair_drops (h) (G):
- ∀I,L,K,V,i. ⇩*[i] L ≘ K.ⓑ{I}V →
- â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83#iâ¦\84 â\86\92 â¦\83G,Kâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vâ¦\84.
+ ∀I,L,K,V,i. ⇩*[i] L ≘ K.ⓑ[I]V →
+ â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dª#iâ\9d« â\86\92 â\9dªG,Kâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVâ\9d«.
#h #G #I #L #K #V #i #HLK #Hi
-elim (lifts_total V (ð\9d\90\94â\9d´â\86\91iâ\9dµ))
+elim (lifts_total V (ð\9d\90\94â\9d¨â\86\91iâ\9d©))
/4 width=9 by csx_inv_lifts, csx_cpx_trans, cpx_delta_drops, drops_isuni_fwd_drop2/
qed-.
lemma csx_inv_lref_drops (h) (G):
- â\88\80L,i. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83#iâ¦\84 →
- â\88¨â\88¨ â\87©*[â\92»,ð\9d\90\94â\9d´iâ\9dµ] L ≘ ⋆
- | ∃∃I,K. ⇩*[i] L ≘ K.ⓤ{I}
- | ∃∃I,K,V. ⇩*[i] L ≘ K.ⓑ{I}V & ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄.
+ â\88\80L,i. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dª#iâ\9d« →
+ â\88¨â\88¨ â\87©*[â\92»,ð\9d\90\94â\9d¨iâ\9d©] L ≘ ⋆
+ | ∃∃I,K. ⇩*[i] L ≘ K.ⓤ[I]
+ | ∃∃I,K,V. ⇩*[i] L ≘ K.ⓑ[I]V & ❪G,K❫ ⊢ ⬈*[h] 𝐒❪V❫.
#h #G #L #i #H elim (drops_F_uni L i) /2 width=1 by or3_intro0/
* * /4 width=9 by csx_inv_lref_pair_drops, ex2_3_intro, ex1_2_intro, or3_intro2, or3_intro1/
qed-.
(* Basic_1: was just: sn3_appls_beta *)
lemma csx_applv_beta (h) (G):
- â\88\80p,L,Vs,V,W,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\92¶Vs.â\93\93{p}â\93\9dW.V.Tâ¦\84 →
- â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\92¶Vs.â\93\90V.â\93\9b{p}W.Tâ¦\84.
+ â\88\80p,L,Vs,V,W,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\92¶Vs.â\93\93[p]â\93\9dW.V.Tâ\9d« →
+ â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\92¶Vs.â\93\90V.â\93\9b[p]W.Tâ\9d«.
#h #G #p #L #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
qed.
lemma csx_applv_delta_drops (h) (G):
- ∀I,L,K,V1,i. ⇩*[i] L ≘ K.ⓑ{I}V1 →
+ ∀I,L,K,V1,i. ⇩*[i] L ≘ K.ⓑ[I]V1 →
∀V2. ⇧*[↑i] V1 ≘ V2 →
- â\88\80Vs. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\92¶Vs.V2â¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\92¶Vs.#iâ¦\84.
+ â\88\80Vs. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\92¶Vs.V2â\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\92¶Vs.#iâ\9d«.
#h #G #I #L #K #V1 #i #HLK #V2 #HV12 #Vs elim Vs -Vs
[ /4 width=11 by csx_inv_lifts, csx_lref_pair_drops, drops_isuni_fwd_drop2/
| #V #Vs #IHV #H1T
(* Basic_1: was just: sn3_appls_abbr *)
lemma csx_applv_theta (h) (G):
∀p,L,V1b,V2b. ⇧*[1] V1b ≘ V2b →
- â\88\80V,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\93{p}V.â\92¶V2b.Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\92¶V1b.â\93\93{p}V.Tâ¦\84.
+ â\88\80V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\93[p]V.â\92¶V2b.Tâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\92¶V1b.â\93\93[p]V.Tâ\9d«.
#h #G #p #L #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 (h) (G):
- â\88\80L,Vs,U. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\92¶Vs.Uâ¦\84 →
- â\88\80T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\92¶Vs.Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\92¶Vs.â\93\9dU.Tâ¦\84.
+ â\88\80L,Vs,U. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\92¶Vs.Uâ\9d« →
+ â\88\80T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\92¶Vs.Tâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\92¶Vs.â\93\9dU.Tâ\9d«.
#h #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
(* Properties with sort-irrelevant equivalence for closures *****************)
-lemma csx_feqx_conf: â\88\80h,G1,L1,T1. â¦\83G1,L1â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 →
- â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G2,L2â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T2â¦\84.
+lemma csx_feqx_conf: â\88\80h,G1,L1,T1. â\9dªG1,L1â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« →
+ â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG2,L2â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT2â\9d«.
#h #G1 #L1 #T1 #HT1 #G2 #L2 #T2 * -G2 -L2 -T2
/3 width=3 by csx_reqx_conf, csx_teqx_trans/
qed-.
(* Properties with parallel rst-transition for closures *********************)
(* Basic_2A1: was: csx_fpb_conf *)
-lemma csx_fpbq_conf: â\88\80h,G1,L1,T1. â¦\83G1,L1â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 →
- â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\89½[h] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G2,L2â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T2â¦\84.
+lemma csx_fpbq_conf: â\88\80h,G1,L1,T1. â\9dªG1,L1â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« →
+ â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89½[h] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG2,L2â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT2â\9d«.
#h #G1 #L1 #T1 #HT1 #G2 #L2 #T2 *
/2 width=6 by csx_cpx_trans, csx_fquq_conf, csx_lpx_conf, csx_feqx_conf/
qed-.
(* Properties with extended supclosure **************************************)
lemma csx_fqu_conf (h) (b):
- â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 â\86\92 â¦\83G2,L2â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T2â¦\84.
+ â\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*[h] ð\9d\90\92â\9dªT1â\9d« â\86\92 â\9dªG2,L2â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT2â\9d«.
#h #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 (h) (b):
- â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 â\86\92 â¦\83G2,L2â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T2â¦\84.
+ â\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*[h] ð\9d\90\92â\9dªT1â\9d« â\86\92 â\9dªG2,L2â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT2â\9d«.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 * /2 width=6 by csx_fqu_conf/
* #HG #HL #HT destruct //
qed-.
lemma csx_fqup_conf (h) (b):
- â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 â\86\92 â¦\83G2,L2â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T2â¦\84.
+ â\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*[h] ð\9d\90\92â\9dªT1â\9d« â\86\92 â\9dªG2,L2â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT2â\9d«.
#h #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 (h) (b):
- â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 â\86\92 â¦\83G2,L2â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T2â¦\84.
+ â\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*[h] ð\9d\90\92â\9dªT1â\9d« â\86\92 â\9dªG2,L2â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT2â\9d«.
#h #b #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -H
/3 width=6 by csx_fquq_conf/
qed-.
(* Properties with unbound parallel rt-transition on all entries ************)
lemma csx_lpx_conf (h) (G):
- â\88\80L1,T. â¦\83G,L1â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 →
- â\88\80L2. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h] L2 â\86\92 â¦\83G,L2â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84.
+ â\88\80L1,T. â\9dªG,L1â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« →
+ â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â¬\88[h] L2 â\86\92 â\9dªG,L2â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d«.
#h #G #L1 #T #H @(csx_ind_cpxs … H) -T
/4 width=3 by csx_intro, lpx_cpx_trans/
qed-.
(* Advanced properties ******************************************************)
lemma csx_abst (h) (G):
- â\88\80p,L,W. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Wâ¦\84 →
- â\88\80T. â¦\83G,L.â\93\9bWâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\9b{p}W.Tâ¦\84.
+ â\88\80p,L,W. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªWâ\9d« →
+ â\88\80T. â\9dªG,L.â\93\9bWâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\9b[p]W.Tâ\9d«.
#h #G #p #L #W #HW
@(csx_ind … HW) -W #W #_ #IHW #T #HT
@(csx_ind … HT) -T #T #HT #IHT
qed.
lemma csx_abbr (h) (G):
- â\88\80p,L,V. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vâ¦\84 →
- â\88\80T. â¦\83G,L.â\93\93Vâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\93{p}V.Tâ¦\84.
+ â\88\80p,L,V. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVâ\9d« →
+ â\88\80T. â\9dªG,L.â\93\93Vâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\93[p]V.Tâ\9d«.
#h #G #p #L #V #HV
@(csx_ind … HV) -V #V #_ #IHV #T #HT
@(csx_ind_cpxs … HT) -T #T #HT #IHT
qed.
lemma csx_bind (h) (G):
- â\88\80p,I,L,V. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vâ¦\84 →
- â\88\80T. â¦\83G,L.â\93\91{I}Vâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\91{p,I}V.Tâ¦\84.
+ â\88\80p,I,L,V. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVâ\9d« →
+ â\88\80T. â\9dªG,L.â\93\91[I]Vâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\91[p,I]V.Tâ\9d«.
#h #G #p * #L #V #HV #T #HT
/2 width=1 by csx_abbr, csx_abst/
qed.
fact csx_appl_theta_aux (h) (G):
- â\88\80p,L,U. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Uâ¦\84 → ∀V1,V2. ⇧*[1] V1 ≘ V2 →
- ∀V,T. U = ⓓ{p}V.ⓐV2.T → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV1.ⓓ{p}V.T⦄.
+ â\88\80p,L,U. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªUâ\9d« → ∀V1,V2. ⇧*[1] V1 ≘ V2 →
+ ∀V,T. U = ⓓ[p]V.ⓐV2.T → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓐV1.ⓓ[p]V.T❫.
#h #G #p #L #X #H
@(csx_ind_cpxs … H) -X #X #HVT #IHVT #V1 #V2 #HV12 #V #T #H destruct
lapply (csx_fwd_pair_sn … HVT) #HV
elim (cpx_inv_abbr1 … HL) -HL *
[ #V3 #T3 #HV3 #HLT3 #H0 destruct
elim (cpx_lifts_sn … HLV10 (Ⓣ) … (L.ⓓV) … HV12) -HLV10 /3 width=1 by drops_refl, drops_drop/ #V4 #HV04 #HV24
- elim (teqx_dec (ⓓ{p}V.ⓐV2.T) (ⓓ{p}V3.ⓐV4.T3)) #H0
+ elim (teqx_dec (ⓓ[p]V.ⓐV2.T) (ⓓ[p]V3.ⓐV4.T3)) #H0
[ -IHVT -HV3 -HV24 -HLT3
elim (teqx_inv_pair … H0) -H0 #_ #HV3 #H0
elim (teqx_inv_pair … H0) -H0 #_ #HV24 #HT3
qed-.
lemma csx_appl_theta (h) (G):
- â\88\80p,L,V,V2,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\93{p}V.â\93\90V2.Tâ¦\84 →
- â\88\80V1. â\87§*[1] V1 â\89\98 V2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\90V1.â\93\93{p}V.Tâ¦\84.
+ â\88\80p,L,V,V2,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\93[p]V.â\93\90V2.Tâ\9d« →
+ â\88\80V1. â\87§*[1] V1 â\89\98 V2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\90V1.â\93\93[p]V.Tâ\9d«.
/2 width=5 by csx_appl_theta_aux/ qed.
(* Properties with unbound parallel rt-computation on all entries ***********)
-lemma csx_lpxs_conf: â\88\80h,G,L1,L2,T. â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2 →
- â¦\83G,L1â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â¦\83G,L2â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84.
+lemma csx_lpxs_conf: â\88\80h,G,L1,L2,T. â\9dªG,L1â\9d« ⊢ ⬈*[h] L2 →
+ â\9dªG,L1â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« â\86\92 â\9dªG,L2â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d«.
#h #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 (h) (G):
- â\88\80p,L,U1. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83U1â¦\84 →
- ∀V,W,T1. U1 = ⓓ{p}ⓝW.V.T1 → ⦃G,L⦄ ⊢ ⬈*[h] 𝐒⦃ⓐV.ⓛ{p}W.T1⦄.
+ â\88\80p,L,U1. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªU1â\9d« →
+ ∀V,W,T1. U1 = ⓓ[p]ⓝW.V.T1 → ❪G,L❫ ⊢ ⬈*[h] 𝐒❪ⓐV.ⓛ[p]W.T1❫.
#h #G #p #L #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 (h) (G):
- â\88\80p,L,V,W,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\93{p}â\93\9dW.V.Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\90V.â\93\9b{p}W.Tâ¦\84.
+ â\88\80p,L,V,W,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\93[p]â\93\9dW.V.Tâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\90V.â\93\9b[p]W.Tâ\9d«.
/2 width=3 by csx_appl_beta_aux/ qed.
(* Advanced forward lemmas **************************************************)
fact csx_fwd_bind_dx_unit_aux (h) (G):
- â\88\80L,U. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Uâ¦\84 →
- ∀p,I,J,V,T. U = ⓑ{p,I}V.T → ⦃G,L.ⓤ{J}⦄ ⊢ ⬈*[h] 𝐒⦃T⦄.
+ â\88\80L,U. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªUâ\9d« →
+ ∀p,I,J,V,T. U = ⓑ[p,I]V.T → ❪G,L.ⓤ[J]❫ ⊢ ⬈*[h] 𝐒❪T❫.
#h #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
+@(IH (ⓑ[p, I]V.T2)) -IH /2 width=4 by cpx_bind_unit/ -HLT2
#H elim (teqx_inv_pair … H) -H /2 width=1 by/
qed-.
lemma csx_fwd_bind_dx_unit (h) (G):
- â\88\80p,I,L,V,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\91{p,I}V.Tâ¦\84 →
- â\88\80J. â¦\83G,L.â\93¤{J}â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84.
+ â\88\80p,I,L,V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\91[p,I]V.Tâ\9d« →
+ â\88\80J. â\9dªG,L.â\93¤[J]â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d«.
/2 width=6 by csx_fwd_bind_dx_unit_aux/ qed-.
lemma csx_fwd_bind_unit (h) (G):
- â\88\80p,I,L,V,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\91{p,I}V.Tâ¦\84 →
- â\88\80J. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vâ¦\84 â\88§ â¦\83G,L.â\93¤{J}â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84.
+ â\88\80p,I,L,V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\91[p,I]V.Tâ\9d« →
+ â\88\80J. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVâ\9d« â\88§ â\9dªG,L.â\93¤[J]â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d«.
/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 (h) (G):
- â\88\80L1,T. â¦\83G,L1â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â\88\80L2. L1 â«\83 L2 â\86\92 â¦\83G,L2â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84.
+ â\88\80L1,T. â\9dªG,L1â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« â\86\92 â\88\80L2. L1 â«\83 L2 â\86\92 â\9dªG,L2â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d«.
#h #G #L1 #T #H
@(csx_ind … H) -T #T1 #_ #IH #L2 #HL12
@csx_intro #T2 #HT12 #HnT12
(* Properties with sort-irrelevant equivalence for local environments *******)
(* Basic_2A1: uses: csx_lleq_conf *)
-lemma csx_reqx_conf: â\88\80h,G,L1,T. â¦\83G,L1â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 →
- â\88\80L2. L1 â\89\9b[T] L2 â\86\92 â¦\83G,L2â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84.
+lemma csx_reqx_conf: â\88\80h,G,L1,T. â\9dªG,L1â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« →
+ â\88\80L2. L1 â\89\9b[T] L2 â\86\92 â\9dªG,L2â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d«.
#h #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_reqx_trans: ∀h,L1,L2,T. L1 ≛[T] L2 →
- â\88\80G. â¦\83G,L2â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â¦\83G,L1â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84.
+ â\88\80G. â\9dªG,L2â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« â\86\92 â\9dªG,L1â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d«.
/3 width=3 by csx_reqx_conf, reqx_sym/ qed-.
(* Properties with simple terms *********************************************)
-lemma csx_appl_simple: â\88\80h,G,L,V. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vâ¦\84 → ∀T1.
- (â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88[h] T2 â\86\92 (T1 â\89\9b T2 â\86\92 â\8a¥) â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\90V.T2â¦\84) →
- ð\9d\90\92â¦\83T1â¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\90V.T1â¦\84.
+lemma csx_appl_simple: â\88\80h,G,L,V. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVâ\9d« → ∀T1.
+ (â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88[h] T2 â\86\92 (T1 â\89\9b T2 â\86\92 â\8a¥) â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\90V.T2â\9d«) →
+ ð\9d\90\92â\9dªT1â\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\90V.T1â\9d«.
#h #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 (h) (G) (L):
- â\88\80V. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vâ¦\84 â\86\92 â\88\80T1. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 →
- (â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88*[h] T2 â\86\92 (T1 ⩳ T2 â\86\92 â\8a¥) â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\90V.T2â¦\84) →
- ð\9d\90\92â¦\83T1â¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\93\90V.T1â¦\84.
+ â\88\80V. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVâ\9d« â\86\92 â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« →
+ (â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88*[h] T2 â\86\92 (T1 ⩳ T2 â\86\92 â\8a¥) â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\90V.T2â\9d«) →
+ ð\9d\90\92â\9dªT1â\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\93\90V.T1â\9d«.
#h #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: â\88\80h,G,L,T,Ts. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T⨮Tsâ¦\84 →
- â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 â\88§ â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tsâ¦\84.
+lemma csxv_inv_cons: â\88\80h,G,L,T,Ts. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT⨮Tsâ\9d« →
+ â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« â\88§ â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTsâ\9d«.
normalize // qed-.
(* Basic forward lemmas *****************************************************)
-lemma csx_fwd_applv: â\88\80h,G,L,T,Vs. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83â\92¶Vs.Tâ¦\84 →
- â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vsâ¦\84 â\88§ â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84.
+lemma csx_fwd_applv: â\88\80h,G,L,T,Vs. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªâ\92¶Vs.Tâ\9d« →
+ â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVsâ\9d« â\88§ â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d«.
#h #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: ∀h. tri_relation genv lenv term ≝
λh,G1,L1,T1,G2,L2,T2.
- â\88\83â\88\83G,L,T. â¦\83G1,L1,T1â¦\84 â\89»[h] â¦\83G,L,Tâ¦\84 & â¦\83G,L,Tâ¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+ â\88\83â\88\83G,L,T. â\9dªG1,L1,T1â\9d« â\89»[h] â\9dªG,L,Tâ\9d« & â\9dªG,L,Tâ\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
interpretation "proper parallel rst-computation (closure)"
'PRedSubTyStarProper h G1 L1 T1 G2 L2 T2 = (fpbg h G1 L1 T1 G2 L2 T2).
(* Basic properties *********************************************************)
-lemma fpb_fpbg: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\89»[h] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84.
+lemma fpb_fpbg: â\88\80h,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89»[h] â\9dªG2,L2,T2â\9d« →
+ â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d«.
/2 width=5 by ex2_3_intro/ qed.
lemma fpbg_fpbq_trans: ∀h,G1,G,G2,L1,L,L2,T1,T,T2.
- â¦\83G1,L1,T1â¦\84 >[h] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â\89½[h] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84.
+ â\9dªG1,L1,T1â\9d« >[h] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« â\89½[h] â\9dªG2,L2,T2â\9d« →
+ â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d«.
#h #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 *
/3 width=9 by fpbs_strap1, ex2_3_intro/
qed-.
lemma fpbg_fqu_trans (h): ∀G1,G,G2,L1,L,L2,T1,T,T2.
- â¦\83G1,L1,T1â¦\84 >[h] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82 â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84.
+ â\9dªG1,L1,T1â\9d« >[h] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« â¬\82 â\9dªG2,L2,T2â\9d« →
+ â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d«.
#h #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2
/4 width=5 by fpbg_fpbq_trans, fpbq_fquq, fqu_fquq/
qed-.
(* Note: this is used in the closure proof *)
-lemma fpbg_fpbs_trans: â\88\80h,G,G2,L,L2,T,T2. â¦\83G,L,Tâ¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 →
- â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 >[h] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84.
+lemma fpbg_fpbs_trans: â\88\80h,G,G2,L,L2,T,T2. â\9dªG,L,Tâ\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« →
+ â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« >[h] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d«.
#h #G #G2 #L #L2 #T #T2 #H @(fpbs_ind_dx … H) -G -L -T /3 width=5 by fpbg_fpbq_trans/
qed-.
(* Basic_2A1: uses: fpbg_fleq_trans *)
-lemma fpbg_feqx_trans: â\88\80h,G1,G,L1,L,T1,T. â¦\83G1,L1,T1â¦\84 >[h] â¦\83G,L,Tâ¦\84 →
- â\88\80G2,L2,T2. â¦\83G,L,Tâ¦\84 â\89\9b â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84.
+lemma fpbg_feqx_trans: â\88\80h,G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« >[h] â\9dªG,L,Tâ\9d« →
+ â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« â\89\9b â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d«.
/3 width=5 by fpbg_fpbq_trans, fpbq_feqx/ qed-.
(* Properties with t-bound rt-transition for terms **************************)
lemma cpm_tneqx_cpm_fpbg (h) (G) (L):
- â\88\80n1,T1,T. â¦\83G,Lâ¦\84 ⊢ T1 ➡[n1,h] T → (T1 ≛ T → ⊥) →
- â\88\80n2,T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡[n2,h] T2 â\86\92 â¦\83G,L,T1â¦\84 >[h] â¦\83G,L,T2â¦\84.
+ â\88\80n1,T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡[n1,h] T → (T1 ≛ T → ⊥) →
+ â\88\80n2,T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[n2,h] T2 â\86\92 â\9dªG,L,T1â\9d« >[h] â\9dªG,L,T2â\9d«.
/4 width=5 by fpbq_fpbs, cpm_fpbq, cpm_fpb, ex2_3_intro/ qed.
(* Properties with unbound context-sensitive parallel rt-computation ********)
(* Basic_2A1: was: cpxs_fpbg *)
-lemma cpxs_tneqx_fpbg (h): â\88\80G,L,T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2 →
- (T1 â\89\9b T2 â\86\92 â\8a¥) â\86\92 â¦\83G,L,T1â¦\84 >[h] â¦\83G,L,T2â¦\84.
+lemma cpxs_tneqx_fpbg (h): â\88\80G,L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T2 →
+ (T1 â\89\9b T2 â\86\92 â\8a¥) â\86\92 â\9dªG,L,T1â\9d« >[h] â\9dªG,L,T2â\9d«.
#h #G #L #T1 #T2 #H #H0
elim (cpxs_tneqx_fwd_step_sn … H … H0) -H -H0
/4 width=5 by cpxs_teqx_fpbs, fpb_cpx, ex2_3_intro/
qed.
-lemma cpxs_fpbg_trans (h): â\88\80G1,L1,T1,T. â¦\83G1,L1â¦\84 ⊢ T1 ⬈*[h] T →
- â\88\80G2,L2,T2. â¦\83G1,L1,Tâ¦\84 >[h] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84.
+lemma cpxs_fpbg_trans (h): â\88\80G1,L1,T1,T. â\9dªG1,L1â\9d« ⊢ T1 ⬈*[h] T →
+ â\88\80G2,L2,T2. â\9dªG1,L1,Tâ\9d« >[h] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d«.
/3 width=5 by fpbs_fpbg_trans, cpxs_fpbs/ qed-.
(* Advanced forward lemmas **************************************************)
lemma fpbg_fwd_fpbs: ∀h,G1,G2,L1,L2,T1,T2.
- â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+ â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
#h #G1 #G2 #L1 #L2 #T1 #T2 *
/3 width=5 by fpbs_strap2, fpb_fpbq/
qed-.
(* Advanced properties with sort-irrelevant equivalence on closures *********)
(* Basic_2A1: uses: fleq_fpbg_trans *)
-lemma feqx_fpbg_trans: â\88\80h,G,G2,L,L2,T,T2. â¦\83G,L,Tâ¦\84 >[h] â¦\83G2,L2,T2â¦\84 →
- â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84.
+lemma feqx_fpbg_trans: â\88\80h,G,G2,L,L2,T,T2. â\9dªG,L,Tâ\9d« >[h] â\9dªG2,L2,T2â\9d« →
+ â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG,L,Tâ\9d« â\86\92 â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d«.
#h #G #G2 #L #L2 #T #T2 * #G0 #L0 #T0 #H0 #H02 #G1 #L1 #T1 #H1
elim (feqx_fpb_trans … H1 … H0) -G -L -T
/4 width=9 by fpbs_strap2, fpbq_feqx, ex2_3_intro/
(* Properties with parallel proper rst-reduction on closures ****************)
lemma fpb_fpbg_trans: ∀h,G1,G,G2,L1,L,L2,T1,T,T2.
- â¦\83G1,L1,T1â¦\84 â\89»[h] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 >[h] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84.
+ â\9dªG1,L1,T1â\9d« â\89»[h] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« >[h] â\9dªG2,L2,T2â\9d« →
+ â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d«.
/3 width=5 by fpbg_fwd_fpbs, ex2_3_intro/ qed-.
(* Properties with parallel rst-reduction on closures ***********************)
lemma fpbq_fpbg_trans: ∀h,G1,G,G2,L1,L,L2,T1,T,T2.
- â¦\83G1,L1,T1â¦\84 â\89½[h] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 >[h] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84.
+ â\9dªG1,L1,T1â\9d« â\89½[h] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« >[h] â\9dªG2,L2,T2â\9d« →
+ â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d«.
#h #G1 #G #G2 #L1 #L #L2 #T1 #T #T2 #H1 #H2
elim (fpbq_inv_fpb … H1) -H1
/2 width=5 by feqx_fpbg_trans, fpb_fpbg_trans/
(* Properties with parallel rst-compuutation on closures ********************)
-lemma fpbs_fpbg_trans: â\88\80h,G1,G,L1,L,T1,T. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G,L,Tâ¦\84 →
- â\88\80G2,L2,T2. â¦\83G,L,Tâ¦\84 >[h] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84.
+lemma fpbs_fpbg_trans: â\88\80h,G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG,L,Tâ\9d« →
+ â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« >[h] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d«.
#h #G1 #G #L1 #L #T1 #T #H @(fpbs_ind … H) -G -L -T /3 width=5 by fpbq_fpbg_trans/
qed-.
(* Advanced properties with plus-iterated structural successor for closures *)
lemma fqup_fpbg_trans (h):
- â\88\80G1,G,L1,L,T1,T. â¦\83G1,L1,T1â¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 →
- â\88\80G2,L2,T2. â¦\83G,L,Tâ¦\84 >[h] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84.
+ â\88\80G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â¬\82+ â\9dªG,L,Tâ\9d« →
+ â\88\80G2,L2,T2. â\9dªG,L,Tâ\9d« >[h] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d«.
/3 width=5 by fpbs_fpbg_trans, fqup_fpbs/ qed-.
(* Advanced inversion lemmas of parallel rst-computation on closures ********)
(* Basic_2A1: was: fpbs_fpbg *)
-lemma fpbs_inv_fpbg: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 →
- â\88¨â\88¨ â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84
- | â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84.
+lemma fpbs_inv_fpbg: â\88\80h,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« →
+ â\88¨â\88¨ â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d«
+ | â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d«.
#h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2
[ /2 width=1 by or_introl/
| #G #G2 #L #L2 #T #T2 #_ #H2 * #H1
(* Advanced properties of parallel rst-computation on closures **************)
-lemma fpbs_fpb_trans: â\88\80h,F1,F2,K1,K2,T1,T2. â¦\83F1,K1,T1â¦\84 â\89¥[h] â¦\83F2,K2,T2â¦\84 →
- â\88\80G2,L2,U2. â¦\83F2,K2,T2â¦\84 â\89»[h] â¦\83G2,L2,U2â¦\84 →
- â\88\83â\88\83G1,L1,U1. â¦\83F1,K1,T1â¦\84 â\89»[h] â¦\83G1,L1,U1â¦\84 & â¦\83G1,L1,U1â¦\84 â\89¥[h] â¦\83G2,L2,U2â¦\84.
+lemma fpbs_fpb_trans: â\88\80h,F1,F2,K1,K2,T1,T2. â\9dªF1,K1,T1â\9d« â\89¥[h] â\9dªF2,K2,T2â\9d« →
+ â\88\80G2,L2,U2. â\9dªF2,K2,T2â\9d« â\89»[h] â\9dªG2,L2,U2â\9d« →
+ â\88\83â\88\83G1,L1,U1. â\9dªF1,K1,T1â\9d« â\89»[h] â\9dªG1,L1,U1â\9d« & â\9dªG1,L1,U1â\9d« â\89¥[h] â\9dªG2,L2,U2â\9d«.
#h #F1 #F2 #K1 #K2 #T1 #T2 #H elim (fpbs_inv_fpbg … H) -H
[ #H12 #G2 #L2 #U2 #H2 elim (feqx_fpb_trans … H12 … H2) -F2 -K2 -T2
/3 width=5 by feqx_fpbs, ex2_3_intro/
(* Advanced properties with sort-irrelevant equivalence for terms ***********)
-lemma fpbg_teqx_div: â\88\80h,G1,G2,L1,L2,T1,T. â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,Tâ¦\84 →
- â\88\80T2. T2 â\89\9b T â\86\92 â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84.
+lemma fpbg_teqx_div: â\88\80h,G1,G2,L1,L2,T1,T. â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,Tâ\9d« →
+ â\88\80T2. T2 â\89\9b T â\86\92 â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d«.
/4 width=5 by fpbg_feqx_trans, teqx_feqx, teqx_sym/ qed-.
(* Properties with plus-iterated structural successor for closures **********)
(* Note: this is used in the closure proof *)
-lemma fqup_fpbg: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+ â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84.
+lemma fqup_fpbg: â\88\80h,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82+ â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d«.
#h #G1 #G2 #L1 #L2 #T1 #T2 #H elim (fqup_inv_step_sn … H) -H
/3 width=5 by fqus_fpbs, fpb_fqu, ex2_3_intro/
qed.
(* Properties with unbound rt-computation on full local environments ********)
(* Basic_2A1: uses: lpxs_fpbg *)
-lemma lpxs_rneqx_fpbg: â\88\80h,G,L1,L2,T. â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2 →
- (L1 â\89\9b[T] L2 â\86\92 â\8a¥) â\86\92 â¦\83G,L1,Tâ¦\84 >[h] â¦\83G,L2,Tâ¦\84.
+lemma lpxs_rneqx_fpbg: â\88\80h,G,L1,L2,T. â\9dªG,L1â\9d« ⊢ ⬈*[h] L2 →
+ (L1 â\89\9b[T] L2 â\86\92 â\8a¥) â\86\92 â\9dªG,L1,Tâ\9d« >[h] â\9dªG,L2,Tâ\9d«.
#h #G #L1 #L2 #T #H #H0
elim (lpxs_rneqx_inv_step_sn … H … H0) -H -H0
/4 width=7 by fpb_lpx, lpxs_feqx_fpbs, feqx_intro_sn, ex2_3_intro/
(* Basic eliminators ********************************************************)
lemma fpbs_ind: ∀h,G1,L1,T1. ∀Q:relation3 genv lenv term. Q G1 L1 T1 →
- (â\88\80G,G2,L,L2,T,T2. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â\89½[h] â¦\83G2,L2,T2â¦\84 → Q G L T → Q G2 L2 T2) →
- â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 → Q G2 L2 T2.
+ (â\88\80G,G2,L,L2,T,T2. â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« â\89½[h] â\9dªG2,L2,T2â\9d« → Q G L T → Q G2 L2 T2) →
+ â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« → Q G2 L2 T2.
/3 width=8 by tri_TC_star_ind/ qed-.
lemma fpbs_ind_dx: ∀h,G2,L2,T2. ∀Q:relation3 genv lenv term. Q G2 L2 T2 →
- (â\88\80G1,G,L1,L,T1,T. â¦\83G1,L1,T1â¦\84 â\89½[h] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 → Q G L T → Q G1 L1 T1) →
- â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 → Q G1 L1 T1.
+ (â\88\80G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â\89½[h] â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« → Q G L T → Q G1 L1 T1) →
+ â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« → Q G1 L1 T1.
/3 width=8 by tri_TC_star_ind_dx/ qed-.
(* Basic properties *********************************************************)
lemma fpbs_refl: ∀h. tri_reflexive … (fpbs h).
/2 width=1 by tri_inj/ qed.
-lemma fpbq_fpbs: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\89½[h] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma fpbq_fpbs: â\88\80h,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89½[h] â\9dªG2,L2,T2â\9d« →
+ â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
/2 width=1 by tri_inj/ qed.
-lemma fpbs_strap1: â\88\80h,G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G,L,Tâ¦\84 →
- â¦\83G,L,Tâ¦\84 â\89½[h] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma fpbs_strap1: â\88\80h,G1,G,G2,L1,L,L2,T1,T,T2. â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG,L,Tâ\9d« →
+ â\9dªG,L,Tâ\9d« â\89½[h] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
/2 width=5 by tri_step/ qed-.
-lemma fpbs_strap2: â\88\80h,G1,G,G2,L1,L,L2,T1,T,T2. â¦\83G1,L1,T1â¦\84 â\89½[h] â¦\83G,L,Tâ¦\84 →
- â¦\83G,L,Tâ¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma fpbs_strap2: â\88\80h,G1,G,G2,L1,L,L2,T1,T,T2. â\9dªG1,L1,T1â\9d« â\89½[h] â\9dªG,L,Tâ\9d« →
+ â\9dªG,L,Tâ\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
/2 width=5 by tri_TC_strap/ qed-.
(* Basic_2A1: uses: lleq_fpbs fleq_fpbs *)
-lemma feqx_fpbs: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma feqx_fpbs: â\88\80h,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
/3 width=1 by fpbq_fpbs, fpbq_feqx/ qed.
(* Basic_2A1: uses: fpbs_lleq_trans *)
-lemma fpbs_feqx_trans: â\88\80h,G1,G,L1,L,T1,T. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G,L,Tâ¦\84 →
- â\88\80G2,L2,T2. â¦\83G,L,Tâ¦\84 â\89\9b â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma fpbs_feqx_trans: â\88\80h,G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG,L,Tâ\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¥[h] â\9dªG2,L2,T2â\9d«.
/3 width=9 by fpbs_strap1, fpbq_feqx/ qed-.
(* Basic_2A1: uses: lleq_fpbs_trans *)
-lemma feqx_fpbs_trans: â\88\80h,G,G2,L,L2,T,T2. â¦\83G,L,Tâ¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 →
- â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma feqx_fpbs_trans: â\88\80h,G,G2,L,L2,T,T2. â\9dªG,L,Tâ\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« →
+ â\88\80G1,L1,T1. â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG,L,Tâ\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
/3 width=5 by fpbs_strap2, fpbq_feqx/ qed-.
lemma teqx_reqx_lpx_fpbs: ∀h,T1,T2. T1 ≛ T2 → ∀L1,L0. L1 ≛[T2] L0 →
- â\88\80G,L2. â¦\83G,L0â¦\84 â\8a¢ â¬\88[h] L2 â\86\92 â¦\83G,L1,T1â¦\84 â\89¥[h] â¦\83G,L2,T2â¦\84.
+ â\88\80G,L2. â\9dªG,L0â\9d« â\8a¢ â¬\88[h] L2 â\86\92 â\9dªG,L1,T1â\9d« â\89¥[h] â\9dªG,L2,T2â\9d«.
/4 width=5 by feqx_fpbs, fpbs_strap1, fpbq_lpx, feqx_intro_dx/ qed.
(* Basic_2A1: removed theorems 3:
(* Properties with atomic arity assignment for terms ************************)
-lemma fpbs_aaa_conf: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 →
- â\88\80A1. â¦\83G1,L1â¦\84 â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â¦\83G2,L2â¦\84 ⊢ T2 ⁝ A2.
+lemma fpbs_aaa_conf: â\88\80h,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89¥[h] â\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.
#h #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
/2 width=8 by fpbq_aaa_conf/
(* Properties with unbound context-sensitive parallel rt-transition *********)
(* Basic_2A1: uses: fpbs_cpx_trans_neq *)
-lemma fpbs_cpx_tneqx_trans: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 →
- â\88\80U2. â¦\83G2,L2â¦\84 ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) →
- â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â\89¥[h] â¦\83G2,L2,U2â¦\84.
+lemma fpbs_cpx_tneqx_trans: â\88\80h,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« →
+ â\88\80U2. â\9dªG2,L2â\9d« ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) →
+ â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â\9dªG1,L1,U1â\9d« â\89¥[h] â\9dªG2,L2,U2â\9d«.
#h #G1 #G2 #L1 #L2 #T1 #T2 #H #U2 #HTU2 #HnTU2
elim (fpbs_inv_star … H) -H #G0 #L0 #L3 #T0 #T3 #HT10 #H10 #HL03 #H32
elim (feqx_cpx_trans … H32 … HTU2) -HTU2 #T4 #HT34 #H42
(* Properties with unbound context-sensitive parallel rt-computation ********)
-lemma cpxs_fpbs: â\88\80h,G,L,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88*[h] T2 â\86\92 â¦\83G,L,T1â¦\84 â\89¥[h] â¦\83G,L,T2â¦\84.
+lemma cpxs_fpbs: â\88\80h,G,L,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88*[h] T2 â\86\92 â\9dªG,L,T1â\9d« â\89¥[h] â\9dªG,L,T2â\9d«.
#h #G #L #T1 #T2 #H @(cpxs_ind … H) -T2
/3 width=5 by fpbq_cpx, fpbs_strap1/
qed.
-lemma fpbs_cpxs_trans: â\88\80h,G1,G,L1,L,T1,T. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G,L,Tâ¦\84 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â¬\88*[h] T2 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G,L,T2â¦\84.
+lemma fpbs_cpxs_trans: â\88\80h,G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG,L,Tâ\9d« →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â¬\88*[h] T2 â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG,L,T2â\9d«.
#h #G1 #G #L1 #L #T1 #T #H1 #T2 #H @(cpxs_ind … H) -T2
/3 width=5 by fpbs_strap1, fpbq_cpx/
qed-.
-lemma cpxs_fpbs_trans: â\88\80h,G1,G2,L1,L2,T,T2. â¦\83G1,L1,Tâ¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 →
- â\88\80T1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] T â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma cpxs_fpbs_trans: â\88\80h,G1,G2,L1,L2,T,T2. â\9dªG1,L1,Tâ\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« →
+ â\88\80T1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88*[h] T â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
#h #G1 #G2 #L1 #L2 #T #T2 #H1 #T1 #H @(cpxs_ind_dx … H) -T1
/3 width=5 by fpbs_strap2, fpbq_cpx/
qed-.
-lemma cpxs_teqx_fpbs_trans: â\88\80h,G1,L1,T1,T. â¦\83G1,L1â¦\84 ⊢ T1 ⬈*[h] T →
+lemma cpxs_teqx_fpbs_trans: â\88\80h,G1,L1,T1,T. â\9dªG1,L1â\9d« ⊢ T1 ⬈*[h] T →
∀T0. T ≛ T0 →
- â\88\80G2,L2,T2. â¦\83G1,L1,T0â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+ â\88\80G2,L2,T2. â\9dªG1,L1,T0â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
/3 width=3 by cpxs_fpbs_trans, teqx_fpbs_trans/ qed-.
-lemma cpxs_teqx_fpbs: â\88\80h,G,L,T1,T. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T →
- â\88\80T2. T â\89\9b T2 â\86\92 â¦\83G,L,T1â¦\84 â\89¥[h] â¦\83G,L,T2â¦\84.
+lemma cpxs_teqx_fpbs: â\88\80h,G,L,T1,T. â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T →
+ â\88\80T2. T â\89\9b T2 â\86\92 â\9dªG,L,T1â\9d« â\89¥[h] â\9dªG,L,T2â\9d«.
/4 width=3 by cpxs_fpbs_trans, feqx_fpbs, teqx_feqx/ qed.
(* Properties with star-iterated structural successor for closures **********)
-lemma cpxs_fqus_fpbs: â\88\80h,G1,L1,T1,T. â¦\83G1,L1â¦\84 ⊢ T1 ⬈*[h] T →
- â\88\80G2,L2,T2. â¦\83G1,L1,Tâ¦\84 â¬\82* â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma cpxs_fqus_fpbs: â\88\80h,G1,L1,T1,T. â\9dªG1,L1â\9d« ⊢ T1 ⬈*[h] T →
+ â\88\80G2,L2,T2. â\9dªG1,L1,Tâ\9d« â¬\82* â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
/3 width=5 by fpbs_fqus_trans, cpxs_fpbs/ qed.
(* Properties with plus-iterated structural successor for closures **********)
-lemma cpxs_fqup_fpbs: â\88\80h,G1,L1,T1,T. â¦\83G1,L1â¦\84 ⊢ T1 ⬈*[h] T →
- â\88\80G2,L2,T2. â¦\83G1,L1,Tâ¦\84 â¬\82+ â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma cpxs_fqup_fpbs: â\88\80h,G1,L1,T1,T. â\9dªG1,L1â\9d« ⊢ T1 ⬈*[h] T →
+ â\88\80G2,L2,T2. â\9dªG1,L1,Tâ\9d« â¬\82+ â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
/3 width=5 by fpbs_fqup_trans, cpxs_fpbs/ qed.
(* Properties with sn for unbound parallel rt-transition for terms **********)
(* Basic_2A1: was: csx_fpbs_conf *)
-lemma fpbs_csx_conf: â\88\80h,G1,L1,T1. â¦\83G1,L1â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 →
- â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G2,L2â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T2â¦\84.
+lemma fpbs_csx_conf: â\88\80h,G1,L1,T1. â\9dªG1,L1â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« →
+ â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG2,L2â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT2â\9d«.
#h #G1 #L1 #T1 #HT1 #G2 #L2 #T2 #H @(fpbs_ind … H) -G2 -L2 -T2
/2 width=5 by csx_fpbq_conf/
qed-.
(* Properties with proper parallel rst-reduction on closures ****************)
-lemma fpb_fpbs: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\89»[h] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma fpb_fpbs: â\88\80h,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89»[h] â\9dªG2,L2,T2â\9d« →
+ â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
/3 width=1 by fpbq_fpbs, fpb_fpbq/ qed.
(* Advanced properties ******************************************************)
lemma teqx_fpbs_trans: ∀h,T1,T. T1 ≛ T →
- â\88\80G1,G2,L1,L2,T2. â¦\83G1,L1,Tâ¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+ â\88\80G1,G2,L1,L2,T2. â\9dªG1,L1,Tâ\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
/3 width=5 by feqx_fpbs_trans, teqx_feqx/ qed-.
-lemma fpbs_teqx_trans: â\88\80h,G1,G2,L1,L2,T1,T. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,Tâ¦\84 →
- â\88\80T2. T â\89\9b T2 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma fpbs_teqx_trans: â\88\80h,G1,G2,L1,L2,T1,T. â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,Tâ\9d« →
+ â\88\80T2. T â\89\9b T2 â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
/3 width=5 by fpbs_feqx_trans, teqx_feqx/ qed-.
(* Properties with plus-iterated structural successor for closures **********)
-lemma fqup_fpbs: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+ â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma fqup_fpbs: â\88\80h,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82+ â\9dªG2,L2,T2â\9d« →
+ â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
#h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqup_ind … H) -G2 -L2 -T2
/4 width=5 by fqu_fquq, fpbq_fquq, tri_step/
qed.
-lemma fpbs_fqup_trans: â\88\80h,G1,G,L1,L,T1,T. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G,L,Tâ¦\84 →
- â\88\80G2,L2,T2. â¦\83G,L,Tâ¦\84 â¬\82+ â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma fpbs_fqup_trans: â\88\80h,G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â\89¥[h] â\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¥[h] â\9dªG2,L2,T2â\9d«.
/3 width=5 by fpbs_fqus_trans, fqup_fqus/ qed-.
-lemma fqup_fpbs_trans: â\88\80h,G,G2,L,L2,T,T2. â¦\83G,L,Tâ¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 →
- â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma fqup_fpbs_trans: â\88\80h,G,G2,L,L2,T,T2. â\9dªG,L,Tâ\9d« â\89¥[h] â\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¥[h] â\9dªG2,L2,T2â\9d«.
/3 width=5 by fqus_fpbs_trans, fqup_fqus/ qed-.
(* Properties with star-iterated structural successor for closures **********)
-lemma fqus_fpbs: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82* â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma fqus_fpbs: â\88\80h,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82* â\9dªG2,L2,T2â\9d« →
+ â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
#h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fqus_ind … H) -G2 -L2 -T2
/3 width=5 by fpbq_fquq, tri_step/
qed.
-lemma fpbs_fqus_trans: â\88\80h,G1,G,L1,L,T1,T. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G,L,Tâ¦\84 →
- â\88\80G2,L2,T2. â¦\83G,L,Tâ¦\84 â¬\82* â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma fpbs_fqus_trans: â\88\80h,G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â\89¥[h] â\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¥[h] â\9dªG2,L2,T2â\9d«.
#h #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H @(fqus_ind … H) -G2 -L2 -T2
/3 width=5 by fpbs_strap1, fpbq_fquq/
qed-.
-lemma fqus_fpbs_trans: â\88\80h,G,G2,L,L2,T,T2. â¦\83G,L,Tâ¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 →
- â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 â¬\82* â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma fqus_fpbs_trans: â\88\80h,G,G2,L,L2,T,T2. â\9dªG,L,Tâ\9d« â\89¥[h] â\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¥[h] â\9dªG2,L2,T2â\9d«.
#h #G #G2 #L #L2 #T #T2 #H1 #G1 #L1 #T1 #H @(fqus_ind_dx … H) -G1 -L1 -T1
/3 width=5 by fpbs_strap2, fpbq_fquq/
qed-.
(* Properties with unbound rt-computation on full local environments *******)
-lemma lpxs_fpbs: â\88\80h,G,L1,L2,T. â¦\83G,L1â¦\84 â\8a¢ â¬\88*[h] L2 â\86\92 â¦\83G,L1,Tâ¦\84 â\89¥[h] â¦\83G,L2,Tâ¦\84.
+lemma lpxs_fpbs: â\88\80h,G,L1,L2,T. â\9dªG,L1â\9d« â\8a¢ â¬\88*[h] L2 â\86\92 â\9dªG,L1,Tâ\9d« â\89¥[h] â\9dªG,L2,Tâ\9d«.
#h #G #L1 #L2 #T #H @(lpxs_ind_dx … H) -L2
/3 width=5 by fpbq_lpx, fpbs_strap1/
qed.
-lemma fpbs_lpxs_trans: â\88\80h,G1,G2,L1,L,T1,T2. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L,T2â¦\84 →
- â\88\80L2. â¦\83G2,Lâ¦\84 â\8a¢ â¬\88*[h] L2 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma fpbs_lpxs_trans: â\88\80h,G1,G2,L1,L,T1,T2. â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L,T2â\9d« →
+ â\88\80L2. â\9dªG2,Lâ\9d« â\8a¢ â¬\88*[h] L2 â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
#h #G1 #G2 #L1 #L #T1 #T2 #H1 #L2 #H @(lpxs_ind_dx … H) -L2
/3 width=5 by fpbs_strap1, fpbq_lpx/
qed-.
-lemma lpxs_fpbs_trans: â\88\80h,G1,G2,L,L2,T1,T2. â¦\83G1,L,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 →
- â\88\80L1. â¦\83G1,L1â¦\84 â\8a¢ â¬\88*[h] L â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma lpxs_fpbs_trans: â\88\80h,G1,G2,L,L2,T1,T2. â\9dªG1,L,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« →
+ â\88\80L1. â\9dªG1,L1â\9d« â\8a¢ â¬\88*[h] L â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
#h #G1 #G2 #L #L2 #T1 #T2 #H1 #L1 #H @(lpxs_ind_sn … H) -L1
/3 width=5 by fpbs_strap2, fpbq_lpx/
qed-.
(* Basic_2A1: uses: lpxs_lleq_fpbs *)
-lemma lpxs_feqx_fpbs: â\88\80h,G1,L1,L,T1. â¦\83G1,L1â¦\84 ⊢ ⬈*[h] L →
- â\88\80G2,L2,T2. â¦\83G1,L,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma lpxs_feqx_fpbs: â\88\80h,G1,L1,L,T1. â\9dªG1,L1â\9d« ⊢ ⬈*[h] L →
+ â\88\80G2,L2,T2. â\9dªG1,L,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
/3 width=3 by lpxs_fpbs_trans, feqx_fpbs/ qed.
-lemma fpbs_lpx_trans: â\88\80h,G1,G2,L1,L,T1,T2. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L,T2â¦\84 →
- â\88\80L2. â¦\83G2,Lâ¦\84 â\8a¢ â¬\88[h] L2 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma fpbs_lpx_trans: â\88\80h,G1,G2,L1,L,T1,T2. â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L,T2â\9d« →
+ â\88\80L2. â\9dªG2,Lâ\9d« â\8a¢ â¬\88[h] L2 â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
/3 width=3 by fpbs_lpxs_trans, lpx_lpxs/ qed-.
(* Properties with star-iterated structural successor for closures **********)
-lemma fqus_lpxs_fpbs: â\88\80h,G1,G2,L1,L,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82* â¦\83G2,L,T2â¦\84 →
- â\88\80L2. â¦\83G2,Lâ¦\84 â\8a¢ â¬\88*[h] L2 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma fqus_lpxs_fpbs: â\88\80h,G1,G2,L1,L,T1,T2. â\9dªG1,L1,T1â\9d« â¬\82* â\9dªG2,L,T2â\9d« →
+ â\88\80L2. â\9dªG2,Lâ\9d« â\8a¢ â¬\88*[h] L2 â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
/3 width=3 by fpbs_lpxs_trans, fqus_fpbs/ qed.
(* Properties with unbound context-sensitive parallel rt-computation ********)
-lemma cpxs_fqus_lpxs_fpbs: â\88\80h,G1,L1,T1,T. â¦\83G1,L1â¦\84 ⊢ T1 ⬈*[h] T →
- â\88\80G2,L,T2. â¦\83G1,L1,Tâ¦\84 â¬\82* â¦\83G2,L,T2â¦\84 →
- â\88\80L2.â¦\83G2,Lâ¦\84 â\8a¢ â¬\88*[h] L2 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84.
+lemma cpxs_fqus_lpxs_fpbs: â\88\80h,G1,L1,T1,T. â\9dªG1,L1â\9d« ⊢ T1 ⬈*[h] T →
+ â\88\80G2,L,T2. â\9dªG1,L1,Tâ\9d« â¬\82* â\9dªG2,L,T2â\9d« →
+ â\88\80L2.â\9dªG2,Lâ\9d« â\8a¢ â¬\88*[h] L2 â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d«.
/3 width=5 by cpxs_fqus_fpbs, fpbs_lpxs_trans/ qed.
-lemma fpbs_cpxs_teqx_fqup_lpx_trans: â\88\80h,G1,G3,L1,L3,T1,T3. â¦\83G1,L1,T1â¦\84 â\89¥ [h] â¦\83G3,L3,T3â¦\84 →
- â\88\80T4. â¦\83G3,L3â¦\84 ⊢ T3 ⬈*[h] T4 → ∀T5. T4 ≛ T5 →
- â\88\80G2,L4,T2. â¦\83G3,L3,T5â¦\84 â¬\82+ â¦\83G2,L4,T2â¦\84 →
- â\88\80L2. â¦\83G2,L4â¦\84 â\8a¢ â¬\88[h] L2 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥ [h] â¦\83G2,L2,T2â¦\84.
+lemma fpbs_cpxs_teqx_fqup_lpx_trans: â\88\80h,G1,G3,L1,L3,T1,T3. â\9dªG1,L1,T1â\9d« â\89¥ [h] â\9dªG3,L3,T3â\9d« →
+ â\88\80T4. â\9dªG3,L3â\9d« ⊢ T3 ⬈*[h] T4 → ∀T5. T4 ≛ T5 →
+ â\88\80G2,L4,T2. â\9dªG3,L3,T5â\9d« â¬\82+ â\9dªG2,L4,T2â\9d« →
+ â\88\80L2. â\9dªG2,L4â\9d« â\8a¢ â¬\88[h] L2 â\86\92 â\9dªG1,L1,T1â\9d« â\89¥ [h] â\9dªG2,L2,T2â\9d«.
#h #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
(* Advanced properties ******************************************************)
(* Basic_2A1: uses: fpbs_intro_alt *)
-lemma fpbs_intro_star: â\88\80h,G1,L1,T1,T. â¦\83G1,L1â¦\84 ⊢ T1 ⬈*[h] T →
- â\88\80G,L,T0. â¦\83G1,L1,Tâ¦\84 â¬\82* â¦\83G,L,T0â¦\84 →
- â\88\80L0. â¦\83G,Lâ¦\84 ⊢ ⬈*[h] L0 →
- â\88\80G2,L2,T2. â¦\83G,L0,T0â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 .
+lemma fpbs_intro_star: â\88\80h,G1,L1,T1,T. â\9dªG1,L1â\9d« ⊢ T1 ⬈*[h] T →
+ â\88\80G,L,T0. â\9dªG1,L1,Tâ\9d« â¬\82* â\9dªG,L,T0â\9d« →
+ â\88\80L0. â\9dªG,Lâ\9d« ⊢ ⬈*[h] L0 →
+ â\88\80G2,L2,T2. â\9dªG,L0,T0â\9d« â\89\9b â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« .
/3 width=5 by cpxs_fqus_lpxs_fpbs, fpbs_strap1, fpbq_feqx/ qed.
(* Advanced inversion lemmas *************************************************)
(* Basic_2A1: uses: fpbs_inv_alt *)
-lemma fpbs_inv_star: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 →
- â\88\83â\88\83G,L,L0,T,T0. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88*[h] T & â¦\83G1,L1,Tâ¦\84 â¬\82* â¦\83G,L,T0â¦\84
- & â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] L0 & â¦\83G,L0,T0â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84.
+lemma fpbs_inv_star: â\88\80h,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« →
+ â\88\83â\88\83G,L,L0,T,T0. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88*[h] T & â\9dªG1,L1,Tâ\9d« â¬\82* â\9dªG,L,T0â\9d«
+ & â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] L0 & â\9dªG,L0,T0â\9d« â\89\9b â\9dªG2,L2,T2â\9d«.
#h #G1 #G2 #L1 #L2 #T1 #T2 #H @(fpbs_ind_dx … H) -G1 -L1 -T1
[ /2 width=9 by ex4_5_intro/
| #G1 #G0 #L1 #L0 #T1 #T0 * -G0 -L0 -T0
inductive fsb (h): relation3 genv lenv term ≝
| fsb_intro: ∀G1,L1,T1. (
- â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\89»[h] â¦\83G2,L2,T2â¦\84 → fsb h G2 L2 T2
+ â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89»[h] â\9dªG2,L2,T2â\9d« → fsb h G2 L2 T2
) → fsb h G1 L1 T1
.
(* Note: eliminator with shorter ground hypothesis *)
(* Note: to be named fsb_ind when fsb becomes a definition like csx, lfsx ***)
lemma fsb_ind_alt: ∀h. ∀Q: relation3 …. (
- â\88\80G1,L1,T1. â\89¥[h] ð\9d\90\92â¦\83G1,L1,T1â¦\84 → (
- â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\89»[h] â¦\83G2,L2,T2â¦\84 → Q G2 L2 T2
+ â\88\80G1,L1,T1. â\89¥[h] ð\9d\90\92â\9dªG1,L1,T1â\9d« → (
+ â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89»[h] â\9dªG2,L2,T2â\9d« → Q G2 L2 T2
) → Q G1 L1 T1
) →
- â\88\80G,L,T. â\89¥[h] ð\9d\90\92â¦\83G,L,Tâ¦\84 → Q G L T.
+ â\88\80G,L,T. â\89¥[h] ð\9d\90\92â\9dªG,L,Tâ\9d« → Q G L T.
#h #Q #IH #G #L #T #H elim H -G -L -T
/4 width=1 by fsb_intro/
qed-.
(* Main properties with atomic arity assignment for terms *******************)
-theorem aaa_fsb: â\88\80h,G,L,T,A. â¦\83G,Lâ¦\84 â\8a¢ T â\81\9d A â\86\92 â\89¥[h] ð\9d\90\92â¦\83G,L,Tâ¦\84.
+theorem aaa_fsb: â\88\80h,G,L,T,A. â\9dªG,Lâ\9d« â\8a¢ T â\81\9d A â\86\92 â\89¥[h] ð\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_fpb_aux: ∀h. ∀Q:relation3 ….
- (â\88\80G1,L1,T1,A. â¦\83G1,L1â¦\84 ⊢ T1 ⁝ A →
- (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\89»[h] â¦\83G2,L2,T2â¦\84 → Q G2 L2 T2) →
+ (â\88\80G1,L1,T1,A. â\9dªG1,L1â\9d« ⊢ T1 ⁝ A →
+ (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89»[h] â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
Q G1 L1 T1
) →
- â\88\80G,L,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â\88\80A. â¦\83G,Lâ¦\84 ⊢ T ⁝ A → Q G L T.
+ â\88\80G,L,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« â\86\92 â\88\80A. â\9dªG,Lâ\9d« ⊢ T ⁝ A → Q G L T.
#h #R #IH #G #L #T #H @(csx_ind_fpb … 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
qed-.
lemma aaa_ind_fpb: ∀h. ∀Q:relation3 ….
- (â\88\80G1,L1,T1,A. â¦\83G1,L1â¦\84 ⊢ T1 ⁝ A →
- (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\89»[h] â¦\83G2,L2,T2â¦\84 → Q G2 L2 T2) →
+ (â\88\80G1,L1,T1,A. â\9dªG1,L1â\9d« ⊢ T1 ⁝ A →
+ (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89»[h] â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
Q G1 L1 T1
) →
- â\88\80G,L,T,A. â¦\83G,Lâ¦\84 ⊢ 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_fpb_aux, aaa_csx/ qed-.
fact aaa_ind_fpbg_aux: ∀h. ∀Q:relation3 ….
- (â\88\80G1,L1,T1,A. â¦\83G1,L1â¦\84 ⊢ T1 ⁝ A →
- (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84 → Q G2 L2 T2) →
+ (â\88\80G1,L1,T1,A. â\9dªG1,L1â\9d« ⊢ T1 ⁝ A →
+ (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
Q G1 L1 T1
) →
- â\88\80G,L,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â\88\80A. â¦\83G,Lâ¦\84 ⊢ T ⁝ A → Q G L T.
+ â\88\80G,L,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« â\86\92 â\88\80A. â\9dªG,Lâ\9d« ⊢ T ⁝ A → Q G L T.
#h #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
qed-.
lemma aaa_ind_fpbg: ∀h. ∀Q:relation3 ….
- (â\88\80G1,L1,T1,A. â¦\83G1,L1â¦\84 ⊢ T1 ⁝ A →
- (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84 → Q G2 L2 T2) →
+ (â\88\80G1,L1,T1,A. â\9dªG1,L1â\9d« ⊢ T1 ⁝ A →
+ (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
Q G1 L1 T1
) →
- â\88\80G,L,T,A. â¦\83G,Lâ¦\84 ⊢ 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\80h,G,L,T. â\89¥[h] ð\9d\90\92â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84.
+lemma fsb_inv_csx: â\88\80h,G,L,T. â\89¥[h] ð\9d\90\92â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d«.
#h #G #L #T #H @(fsb_ind_alt … H) -G -L -T /5 width=1 by csx_intro, fpb_cpx/
qed-.
(* Propreties with context-sensitive stringly rt-normalizing terms **********)
-lemma csx_fsb_fpbs: â\88\80h,G1,L1,T1. â¦\83G1,L1â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 →
- â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 â\86\92 â\89¥[h] ð\9d\90\92â¦\83G2,L2,T2â¦\84.
+lemma csx_fsb_fpbs: â\88\80h,G1,L1,T1. â\9dªG1,L1â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« →
+ â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« â\86\92 â\89¥[h] ð\9d\90\92â\9dªG2,L2,T2â\9d«.
#h #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: â\88\80h,G,L,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â\89¥[h] ð\9d\90\92â¦\83G,L,Tâ¦\84.
+lemma csx_fsb: â\88\80h,G,L,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« â\86\92 â\89¥[h] ð\9d\90\92â\9dªG,L,Tâ\9d«.
/2 width=5 by csx_fsb_fpbs/ qed.
(* Advanced eliminators *****************************************************)
lemma csx_ind_fpb: ∀h. ∀Q:relation3 genv lenv term.
- (â\88\80G1,L1,T1. â¦\83G1,L1â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 →
- (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\89»[h] â¦\83G2,L2,T2â¦\84 → Q G2 L2 T2) →
+ (â\88\80G1,L1,T1. â\9dªG1,L1â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« →
+ (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89»[h] â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
Q G1 L1 T1
) →
- â\88\80G,L,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 → Q G L T.
+ â\88\80G,L,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« → Q G L T.
/4 width=4 by fsb_inv_csx, csx_fsb, fsb_ind_alt/ qed-.
lemma csx_ind_fpbg: ∀h. ∀Q:relation3 genv lenv term.
- (â\88\80G1,L1,T1. â¦\83G1,L1â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 →
- (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84 → Q G2 L2 T2) →
+ (â\88\80G1,L1,T1. â\9dªG1,L1â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« →
+ (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
Q G1 L1 T1
) →
- â\88\80G,L,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 → Q G L T.
+ â\88\80G,L,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« → Q G L T.
/4 width=4 by fsb_inv_csx, csx_fsb, fsb_ind_fpbg/ qed-.
(* Properties with sort-irrelevant equivalence for closures *****************)
-lemma fsb_feqx_trans: â\88\80h,G1,L1,T1. â\89¥[h] ð\9d\90\92â¦\83G1,L1,T1â¦\84 →
- â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84 â\86\92 â\89¥[h] ð\9d\90\92â¦\83G2,L2,T2â¦\84.
+lemma fsb_feqx_trans: â\88\80h,G1,L1,T1. â\89¥[h] ð\9d\90\92â\9dªG1,L1,T1â\9d« →
+ â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d« â\86\92 â\89¥[h] ð\9d\90\92â\9dªG2,L2,T2â\9d«.
#h #G1 #L1 #T1 #H @(fsb_ind_alt … 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\80h,G1,L1,T1. â\89¥[h] ð\9d\90\92â¦\83G1,L1,T1â¦\84 →
- â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 â\86\92 â\89¥[h] ð\9d\90\92â¦\83G2,L2,T2â¦\84.
+lemma fsb_fpbs_trans: â\88\80h,G1,L1,T1. â\89¥[h] ð\9d\90\92â\9dªG1,L1,T1â\9d« →
+ â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« â\86\92 â\89¥[h] ð\9d\90\92â\9dªG2,L2,T2â\9d«.
#h #G1 #L1 #T1 #H @(fsb_ind_alt … H) -G1 -L1 -T1
#G1 #L1 #T1 #H1 #IH #G2 #L2 #T2 #H12
elim (fpbs_inv_fpbg … H12) -H12
(* Properties with proper parallel rst-computation for closures *************)
lemma fsb_intro_fpbg: ∀h,G1,L1,T1. (
- â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84 â\86\92 â\89¥[h] ð\9d\90\92â¦\83G2,L2,T2â¦\84
- ) â\86\92 â\89¥[h] ð\9d\90\92â¦\83G1,L1,T1â¦\84.
+ â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d« â\86\92 â\89¥[h] ð\9d\90\92â\9dªG2,L2,T2â\9d«
+ ) â\86\92 â\89¥[h] ð\9d\90\92â\9dªG1,L1,T1â\9d«.
/4 width=1 by fsb_intro, fpb_fpbg/ qed.
(* Eliminators with proper parallel rst-computation for closures ************)
lemma fsb_ind_fpbg_fpbs: ∀h. ∀Q:relation3 genv lenv term.
- (â\88\80G1,L1,T1. â\89¥[h] ð\9d\90\92â¦\83G1,L1,T1â¦\84 →
- (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84 → Q G2 L2 T2) →
+ (â\88\80G1,L1,T1. â\89¥[h] ð\9d\90\92â\9dªG1,L1,T1â\9d« →
+ (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
Q G1 L1 T1
) →
- â\88\80G1,L1,T1. â\89¥[h] ð\9d\90\92â¦\83G1,L1,T1â¦\84 →
- â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\89¥[h] â¦\83G2,L2,T2â¦\84 → Q G2 L2 T2.
+ â\88\80G1,L1,T1. â\89¥[h] ð\9d\90\92â\9dªG1,L1,T1â\9d« →
+ â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89¥[h] â\9dªG2,L2,T2â\9d« → Q G2 L2 T2.
#h #Q #IH1 #G1 #L1 #T1 #H @(fsb_ind_alt … H) -G1 -L1 -T1
#G1 #L1 #T1 #H1 #IH #G2 #L2 #T2 #H12
@IH1 -IH1
qed-.
lemma fsb_ind_fpbg: ∀h. ∀Q:relation3 genv lenv term.
- (â\88\80G1,L1,T1. â\89¥[h] ð\9d\90\92â¦\83G1,L1,T1â¦\84 →
- (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 >[h] â¦\83G2,L2,T2â¦\84 → Q G2 L2 T2) →
+ (â\88\80G1,L1,T1. â\89¥[h] ð\9d\90\92â\9dªG1,L1,T1â\9d« →
+ (â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« >[h] â\9dªG2,L2,T2â\9d« → Q G2 L2 T2) →
Q G1 L1 T1
) →
- â\88\80G1,L1,T1. â\89¥[h] ð\9d\90\92â¦\83G1,L1,T1â¦\84 → Q G1 L1 T1.
+ â\88\80G1,L1,T1. â\89¥[h] ð\9d\90\92â\9dªG1,L1,T1â\9d« → Q G1 L1 T1.
#h #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 (h) (G) (L) (T):
- â\89¥[h] ð\9d\90\92â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 >[h] â¦\83G,L,Tâ¦\84 → ⊥.
+ â\89¥[h] ð\9d\90\92â\9dªG,L,Tâ\9d« â\86\92 â\9dªG,L,Tâ\9d« >[h] â\9dªG,L,Tâ\9d« → ⊥.
#h #G #L #T #H
@(fsb_ind_fpbg … H) -G -L -T #G1 #L1 #T1 #_ #IH #H
/2 width=5 by/
inductive jsx (h) (G): relation lenv ≝
| jsx_atom: jsx h G (⋆) (⋆)
| jsx_bind: ∀I,K1,K2. jsx h G K1 K2 →
- jsx h G (K1.ⓘ{I}) (K2.ⓘ{I})
+ jsx h G (K1.ⓘ[I]) (K2.ⓘ[I])
| jsx_pair: ∀I,K1,K2,V. jsx h G K1 K2 →
- G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83K2â¦\84 â\86\92 jsx h G (K1.â\93\91{I}V) (K2.ⓧ)
+ G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªK2â\9d« â\86\92 jsx h G (K1.â\93\91[I]V) (K2.ⓧ)
.
interpretation
fact jsx_inv_bind_sn_aux (h) (G):
∀L1,L2. G ⊢ L1 ⊒[h] L2 →
- ∀I,K1. L1 = K1.ⓘ{I} →
- ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓘ{I}
- | â\88\83â\88\83J,K2,V. G â\8a¢ K1 â\8a\92[h] K2 & G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83K2â¦\84 & I = BPair J V & L2 = K2.ⓧ.
+ ∀I,K1. L1 = K1.ⓘ[I] →
+ ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓘ[I]
+ | â\88\83â\88\83J,K2,V. G â\8a¢ K1 â\8a\92[h] K2 & G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªK2â\9d« & I = BPair J V & L2 = K2.ⓧ.
#h #G #L1 #L2 * -L1 -L2
[ #J #L1 #H destruct
| #I #K1 #K2 #HK12 #J #L1 #H destruct /3 width=3 by ex2_intro, or_introl/
qed-.
lemma jsx_inv_bind_sn (h) (G):
- ∀I,K1,L2. G ⊢ K1.ⓘ{I} ⊒[h] L2 →
- ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓘ{I}
- | â\88\83â\88\83J,K2,V. G â\8a¢ K1 â\8a\92[h] K2 & G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83K2â¦\84 & I = BPair J V & L2 = K2.ⓧ.
+ ∀I,K1,L2. G ⊢ K1.ⓘ[I] ⊒[h] L2 →
+ ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓘ[I]
+ | â\88\83â\88\83J,K2,V. G â\8a¢ K1 â\8a\92[h] K2 & G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªK2â\9d« & I = BPair J V & L2 = K2.ⓧ.
/2 width=3 by jsx_inv_bind_sn_aux/ qed-.
(* Advanced inversion lemmas ************************************************)
(* Basic_2A1: uses: lcosx_inv_pair *)
lemma jsx_inv_pair_sn (h) (G):
- ∀I,K1,L2,V. G ⊢ K1.ⓑ{I}V ⊒[h] L2 →
- ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓑ{I}V
- | â\88\83â\88\83K2. G â\8a¢ K1 â\8a\92[h] K2 & G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83K2â¦\84 & L2 = K2.ⓧ.
+ ∀I,K1,L2,V. G ⊢ K1.ⓑ[I]V ⊒[h] L2 →
+ ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓑ[I]V
+ | â\88\83â\88\83K2. G â\8a¢ K1 â\8a\92[h] K2 & G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªK2â\9d« & L2 = K2.ⓧ.
#h #G #I #K1 #L2 #V #H elim (jsx_inv_bind_sn … H) -H *
[ /3 width=3 by ex2_intro, or_introl/
| #J #K2 #X #HK12 #HX #H1 #H2 destruct /3 width=4 by ex3_intro, or_intror/
(* Advanced forward lemmas **************************************************)
lemma jsx_fwd_bind_sn (h) (G):
- ∀I1,K1,L2. G ⊢ K1.ⓘ{I1} ⊒[h] L2 →
- ∃∃I2,K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓘ{I2}.
+ ∀I1,K1,L2. G ⊢ K1.ⓘ[I1] ⊒[h] L2 →
+ ∃∃I2,K2. G ⊢ K1 ⊒[h] K2 & L2 = K2.ⓘ[I2].
#h #G #I1 #K1 #L2 #H elim (jsx_inv_bind_sn … H) -H *
/2 width=4 by ex2_2_intro/
qed-.
lemma jsx_csx_conf (h) (G):
∀L1,L2. G ⊢ L1 ⊒[h] L2 →
- â\88\80T. â¦\83G,L1â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â¦\83G,L2â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84.
+ â\88\80T. â\9dªG,L1â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« â\86\92 â\9dªG,L2â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d«.
/3 width=5 by jsx_fwd_lsubr, csx_lsubr_conf/ qed-.
(* Properties with strongly rt-normalizing referred local environments ******)
(* Note: Try by induction on the 2nd premise by generalizing V with f *)
lemma rsx_jsx_trans (h) (G):
- â\88\80L1,V. G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83L1â¦\84 →
- â\88\80L2. G â\8a¢ L1 â\8a\92[h] L2 â\86\92 G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83L2â¦\84.
+ â\88\80L1,V. G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªL1â\9d« →
+ â\88\80L2. G â\8a¢ L1 â\8a\92[h] L2 â\86\92 G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªL2â\9d«.
#h #G #L1 #V @(fqup_wf_ind_eq (Ⓕ) … G L1 V) -G -L1 -V
#G0 #L0 #V0 #IH #G #L1 * *
[ //
lemma jsx_fwd_drops_atom_sn (h) (b) (G):
∀L1,L2. G ⊢ L1 ⊒[h] L2 →
- â\88\80f. ð\9d\90\94â¦\83fâ¦\84 → ⇩*[b,f]L1 ≘ ⋆ → ⇩*[b,f]L2 ≘ ⋆.
+ â\88\80f. ð\9d\90\94â\9dªfâ\9d« → ⇩*[b,f]L1 ≘ ⋆ → ⇩*[b,f]L2 ≘ ⋆.
#h #b #G #L1 #L2 #H elim H -L1 -L2
[ #f #_ #H //
| #I #K1 #K2 #_ #IH #f #Hf #H
lemma jsx_fwd_drops_unit_sn (h) (b) (G):
∀L1,L2. G ⊢ L1 ⊒[h] L2 →
- â\88\80f. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\88\80I,K1. â\87©*[b,f]L1 â\89\98 K1.â\93¤{I} →
- ∃∃K2. G ⊢ K1 ⊒[h] K2 & ⇩*[b,f]L2 ≘ K2.ⓤ{I}.
+ â\88\80f. ð\9d\90\94â\9dªfâ\9d« â\86\92 â\88\80I,K1. â\87©*[b,f]L1 â\89\98 K1.â\93¤[I] →
+ ∃∃K2. G ⊢ K1 ⊒[h] K2 & ⇩*[b,f]L2 ≘ K2.ⓤ[I].
#h #b #G #L1 #L2 #H elim H -L1 -L2
[ #f #_ #J #Y1 #H
lapply (drops_inv_atom1 … H) -H * #H #_ destruct
lemma jsx_fwd_drops_pair_sn (h) (b) (G):
∀L1,L2. G ⊢ L1 ⊒[h] L2 →
- â\88\80f. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\88\80I,K1,V. â\87©*[b,f]L1 â\89\98 K1.â\93\91{I}V →
- ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & ⇩*[b,f]L2 ≘ K2.ⓑ{I}V
- | â\88\83â\88\83K2. G â\8a¢ K1 â\8a\92[h] K2 & â\87©*[b,f]L2 â\89\98 K2.â\93§ & G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83K2â¦\84.
+ â\88\80f. ð\9d\90\94â\9dªfâ\9d« â\86\92 â\88\80I,K1,V. â\87©*[b,f]L1 â\89\98 K1.â\93\91[I]V →
+ ∨∨ ∃∃K2. G ⊢ K1 ⊒[h] K2 & ⇩*[b,f]L2 ≘ K2.ⓑ[I]V
+ | â\88\83â\88\83K2. G â\8a¢ K1 â\8a\92[h] K2 & â\87©*[b,f]L2 â\89\98 K2.â\93§ & G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªK2â\9d«.
#h #b #G #L1 #L2 #H elim H -L1 -L2
[ #f #_ #J #Y1 #X1 #H
lapply (drops_inv_atom1 … H) -H * #H #_ destruct
(* Basic_2A1: uses: lsx_cpx_trans_lcosx *)
lemma rsx_cpx_trans_jsx (h) (G):
- â\88\80L0,T1,T2. â¦\83G,L0â¦\84 ⊢ T1 ⬈[h] T2 →
- â\88\80L. G â\8a¢ L0 â\8a\92[h] L â\86\92 G â\8a¢ â¬\88*[h,T1] ð\9d\90\92â¦\83Lâ¦\84 â\86\92 G â\8a¢ â¬\88*[h,T2] ð\9d\90\92â¦\83Lâ¦\84.
+ â\88\80L0,T1,T2. â\9dªG,L0â\9d« ⊢ T1 ⬈[h] T2 →
+ â\88\80L. G â\8a¢ L0 â\8a\92[h] L â\86\92 G â\8a¢ â¬\88*[h,T1] ð\9d\90\92â\9dªLâ\9d« â\86\92 G â\8a¢ â¬\88*[h,T2] ð\9d\90\92â\9dªLâ\9d«.
#h #G #L0 #T1 #T2 #H @(cpx_ind … H) -G -L0 -T1 -T2
[ //
| //
(* Basic_2A1: uses: lsx_cpx_trans_O *)
lemma rsx_cpx_trans (h) (G):
- â\88\80L,T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈[h] T2 →
- G â\8a¢ â¬\88*[h,T1] ð\9d\90\92â¦\83Lâ¦\84 â\86\92 G â\8a¢ â¬\88*[h,T2] ð\9d\90\92â¦\83Lâ¦\84.
+ â\88\80L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈[h] T2 →
+ G â\8a¢ â¬\88*[h,T1] ð\9d\90\92â\9dªLâ\9d« â\86\92 G â\8a¢ â¬\88*[h,T2] ð\9d\90\92â\9dªLâ\9d«.
/3 width=6 by rsx_cpx_trans_jsx, jsx_refl/ qed-.
lemma rsx_cpxs_trans (h) (G):
- â\88\80L,T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈*[h] T2 →
- G â\8a¢ â¬\88*[h,T1] ð\9d\90\92â¦\83Lâ¦\84 â\86\92 G â\8a¢ â¬\88*[h,T2] ð\9d\90\92â¦\83Lâ¦\84.
+ â\88\80L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈*[h] T2 →
+ G â\8a¢ â¬\88*[h,T1] ð\9d\90\92â\9dªLâ\9d« â\86\92 G â\8a¢ â¬\88*[h,T2] ð\9d\90\92â\9dªLâ\9d«.
#h #G #L #T1 #T2 #H
@(cpxs_ind_dx ???????? H) -T1 //
/3 width=3 by rsx_cpx_trans/
(* Basic properties *********************************************************)
(* Basic_2A1: uses: lprs_pair_refl *)
-lemma lprs_bind_refl_dx (h) (G): â\88\80L1,L2. â¦\83G,L1â¦\84 ⊢ ➡*[h] L2 →
- â\88\80I. â¦\83G,L1.â\93\98{I}â¦\84 â\8a¢ â\9e¡*[h] L2.â\93\98{I}.
+lemma lprs_bind_refl_dx (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡*[h] L2 →
+ â\88\80I. â\9dªG,L1.â\93\98[I]â\9d« â\8a¢ â\9e¡*[h] L2.â\93\98[I].
/2 width=1 by lex_bind_refl_dx/ qed.
-lemma lprs_pair (h) (G): â\88\80L1,L2. â¦\83G,L1â¦\84 ⊢ ➡*[h] L2 →
- â\88\80V1,V2. â¦\83G,L1â¦\84 ⊢ V1 ➡*[h] V2 →
- â\88\80I. â¦\83G,L1.â\93\91{I}V1â¦\84 â\8a¢ â\9e¡*[h] L2.â\93\91{I}V2.
+lemma lprs_pair (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡*[h] L2 →
+ â\88\80V1,V2. â\9dªG,L1â\9d« ⊢ V1 ➡*[h] V2 →
+ â\88\80I. â\9dªG,L1.â\93\91[I]V1â\9d« â\8a¢ â\9e¡*[h] L2.â\93\91[I]V2.
/2 width=1 by lex_pair/ qed.
-lemma lprs_refl (h) (G): â\88\80L. â¦\83G,Lâ¦\84 ⊢ ➡*[h] L.
+lemma lprs_refl (h) (G): â\88\80L. â\9dªG,Lâ\9d« ⊢ ➡*[h] 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. â¦\83G,â\8b\86â¦\84 ⊢ ➡*[h] L2 → L2 = ⋆.
+lemma lprs_inv_atom_sn (h) (G): â\88\80L2. â\9dªG,â\8b\86â\9d« ⊢ ➡*[h] 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. â¦\83G,K1.â\93\91{I}V1â¦\84 ⊢ ➡*[h] L2 →
- â\88\83â\88\83K2,V2. â¦\83G,K1â¦\84 â\8a¢ â\9e¡*[h] K2 & â¦\83G,K1â¦\84 â\8a¢ V1 â\9e¡*[h] V2 & L2 = K2.â\93\91{I}V2.
+ â\88\80I,K1,L2,V1. â\9dªG,K1.â\93\91[I]V1â\9d« ⊢ ➡*[h] L2 →
+ â\88\83â\88\83K2,V2. â\9dªG,K1â\9d« â\8a¢ â\9e¡*[h] K2 & â\9dªG,K1â\9d« â\8a¢ V1 â\9e¡*[h] V2 & L2 = K2.â\93\91[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. â¦\83G,L1â¦\84 ⊢ ➡*[h] ⋆ → L1 = ⋆.
+lemma lprs_inv_atom_dx (h) (G): â\88\80L1. â\9dªG,L1â\9d« ⊢ ➡*[h] ⋆ → 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. â¦\83G,L1â¦\84 â\8a¢ â\9e¡*[h] K2.â\93\91{I}V2 →
- â\88\83â\88\83K1,V1. â¦\83G,K1â¦\84 â\8a¢ â\9e¡*[h] K2 & â¦\83G,K1â¦\84 â\8a¢ V1 â\9e¡*[h] V2 & L1 = K1.â\93\91{I}V1.
+ â\88\80I,L1,K2,V2. â\9dªG,L1â\9d« â\8a¢ â\9e¡*[h] K2.â\93\91[I]V2 →
+ â\88\83â\88\83K1,V1. â\9dªG,K1â\9d« â\8a¢ â\9e¡*[h] K2 & â\9dªG,K1â\9d« â\8a¢ V1 â\9e¡*[h] V2 & L1 = K1.â\93\91[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.
- â¦\83G,K1â¦\84 ⊢ ➡*[h] K2 →
- Q K1 K2 → Q (K1.ⓘ{I}) (K2.ⓘ{I})
+ â\9dªG,K1â\9d« ⊢ ➡*[h] K2 →
+ Q K1 K2 → Q (K1.ⓘ[I]) (K2.ⓘ[I])
) → (
∀I,K1,K2,V1,V2.
- â¦\83G,K1â¦\84 â\8a¢ â\9e¡*[h] K2 â\86\92 â¦\83G,K1â¦\84 ⊢ V1 ➡*[h] V2 →
- Q K1 K2 → Q (K1.ⓑ{I}V1) (K2.ⓑ{I}V2)
+ â\9dªG,K1â\9d« â\8a¢ â\9e¡*[h] K2 â\86\92 â\9dªG,K1â\9d« ⊢ V1 ➡*[h] V2 →
+ Q K1 K2 → Q (K1.ⓑ[I]V1) (K2.ⓑ[I]V2)
) →
- â\88\80L1,L2. â¦\83G,L1â¦\84 ⊢ ➡*[h] L2 → Q L1 L2.
+ â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡*[h] 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 (n) (h) (G):
- â\88\80L2,T1,T2. â¦\83G,L2â¦\84 ⊢ T1 ➡*[n,h] T2 →
- â\88\80L1. â¦\83G,L1â¦\84 â\8a¢ â\9e¡*[h] L2 â\86\92 â¦\83G,L1â¦\84 ⊢ T1 ➡*[n,h] T2.
+ â\88\80L2,T1,T2. â\9dªG,L2â\9d« ⊢ T1 ➡*[n,h] T2 →
+ â\88\80L1. â\9dªG,L1â\9d« â\8a¢ â\9e¡*[h] L2 â\86\92 â\9dªG,L1â\9d« ⊢ T1 ➡*[n,h] T2.
#n #h #G #L2 #T1 #T2 #HT12 #L1 #H
@(lprs_ind_sn … H) -L1 /2 width=3 by lpr_cpms_trans/
qed-.
lemma lprs_cpm_trans (n) (h) (G):
- â\88\80L2,T1,T2. â¦\83G,L2â¦\84 ⊢ T1 ➡[n,h] T2 →
- â\88\80L1. â¦\83G,L1â¦\84 â\8a¢ â\9e¡*[h] L2 â\86\92 â¦\83G,L1â¦\84 ⊢ T1 ➡*[n,h] T2.
+ â\88\80L2,T1,T2. â\9dªG,L2â\9d« ⊢ T1 ➡[n,h] T2 →
+ â\88\80L1. â\9dªG,L1â\9d« â\8a¢ â\9e¡*[h] L2 â\86\92 â\9dªG,L1â\9d« ⊢ T1 ➡*[n,h] T2.
/3 width=3 by lprs_cpms_trans, cpm_cpms/ qed-.
(* Basic_2A1: includes cprs_bind2 *)
lemma cpms_bind_dx (n) (h) (G) (L):
- â\88\80V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ➡*[h] V2 →
- â\88\80I,T1,T2. â¦\83G,L.â\93\91{I}V2â¦\84 ⊢ T1 ➡*[n,h] T2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â\9e¡*[n,h] â\93\91{p,I}V2.T2.
+ â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡*[h] V2 →
+ â\88\80I,T1,T2. â\9dªG,L.â\93\91[I]V2â\9d« ⊢ T1 ➡*[n,h] T2 →
+ â\88\80p. â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V1.T1 â\9e¡*[n,h] â\93\91[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 (n) (h) (G) (L):
- â\88\80p,V1,T1,X2. â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p}V1.T1 ➡*[n,h] X2 →
- â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡*[h] V2 & â¦\83G,L.â\93\9bV1â¦\84 ⊢ T1 ➡*[n,h] T2 &
- X2 = ⓛ{p}V2.T2.
+ â\88\80p,V1,T1,X2. â\9dªG,Lâ\9d« â\8a¢ â\93\9b[p]V1.T1 ➡*[n,h] X2 →
+ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡*[h] V2 & â\9dªG,L.â\93\9bV1â\9d« ⊢ T1 ➡*[n,h] T2 &
+ X2 = ⓛ[p]V2.T2.
#n #h #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. â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p}W.T ➡*[n,h] X →
- â\88\83â\88\83U. â¦\83G,L.â\93\9bWâ¦\84â\8a¢ T â\9e¡*[n,h] U & â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p}W.U ➡*[h] X.
+ â\88\80T,X. â\9dªG,Lâ\9d« â\8a¢ â\93\9b[p]W.T ➡*[n,h] X →
+ â\88\83â\88\83U. â\9dªG,L.â\93\9bWâ\9d«â\8a¢ T â\9e¡*[n,h] U & â\9dªG,Lâ\9d« â\8a¢ â\93\9b[p]W.U ➡*[h] 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 (n) (h) (p1) (p2) (G) (L):
- â\88\80W1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p1}W1.T1 â\9e¡*[n,h] â\93\9b{p2}W2.T2 →
- â\88§â\88§ p1 = p2 & â¦\83G,Lâ¦\84 â\8a¢ W1 â\9e¡*[h] W2 & â¦\83G,L.â\93\9bW1â¦\84 ⊢ T1 ➡*[n,h] T2.
+ â\88\80W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ â\93\9b[p1]W1.T1 â\9e¡*[n,h] â\93\9b[p2]W2.T2 →
+ â\88§â\88§ p1 = p2 & â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡*[h] W2 & â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ➡*[n,h] T2.
#n #h #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 (n) (h) (G) (L):
- â\88\80p,V1,T1,X2. â¦\83G,Lâ¦\84 â\8a¢ â\93\93{p}V1.T1 ➡*[n,h] X2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡*[h] V2 & â¦\83G,L.â\93\93V1â¦\84 â\8a¢ T1 â\9e¡*[n,h] T2 & X2 = â\93\93{p}V2.T2
- | â\88\83â\88\83T2. â¦\83G,L.â\93\93V1â¦\84 ⊢ T1 ➡*[n ,h] T2 & ⇧*[1] X2 ≘ T2 & p = Ⓣ.
+ â\88\80p,V1,T1,X2. â\9dªG,Lâ\9d« â\8a¢ â\93\93[p]V1.T1 ➡*[n,h] X2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡*[h] V2 & â\9dªG,L.â\93\93V1â\9d« â\8a¢ T1 â\9e¡*[n,h] T2 & X2 = â\93\93[p]V2.T2
+ | â\88\83â\88\83T2. â\9dªG,L.â\93\93V1â\9d« ⊢ T1 ➡*[n ,h] T2 & ⇧*[1] X2 ≘ T2 & p = Ⓣ.
#n #h #G #L #p #V1 #T1 #X2 #H
@(cpms_ind_dx … H) -X2 -n /3 width=5 by ex3_2_intro, or_introl/
#n1 #n2 #X #X2 #_ * *
(* Basic_2A1: uses: scpds_inv_abbr_abst *)
lemma cpms_inv_abbr_abst (n) (h) (G) (L):
- â\88\80p1,p2,V1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ â\93\93{p1}V1.T1 â\9e¡*[n,h] â\93\9b{p2}W2.T2 →
- â\88\83â\88\83T. â¦\83G,L.â\93\93V1â¦\84 â\8a¢ T1 â\9e¡*[n,h] T & â\87§*[1] â\93\9b{p2}W2.T2 ≘ T & p1 = Ⓣ.
+ â\88\80p1,p2,V1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ â\93\93[p1]V1.T1 â\9e¡*[n,h] â\93\9b[p2]W2.T2 →
+ â\88\83â\88\83T. â\9dªG,L.â\93\93V1â\9d« â\8a¢ T1 â\9e¡*[n,h] T & â\87§*[1] â\93\9b[p2]W2.T2 ≘ T & p1 = Ⓣ.
#n #h #G #L #p1 #p2 #V1 #W2 #T1 #T2 #H
elim (cpms_inv_abbr_sn_dx … H) -H *
[ #V #T #_ #_ #H destruct
(* Advanced properties ******************************************************)
(* Basic_2A1: was: lprs_pair2 *)
-lemma lprs_pair_dx (h) (G): â\88\80L1,L2. â¦\83G,L1â¦\84 ⊢ ➡*[h] L2 →
- â\88\80V1,V2. â¦\83G,L2â¦\84 ⊢ V1 ➡*[h] V2 →
- â\88\80I. â¦\83G,L1.â\93\91{I}V1â¦\84 â\8a¢ â\9e¡*[h] L2.â\93\91{I}V2.
+lemma lprs_pair_dx (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡*[h] L2 →
+ â\88\80V1,V2. â\9dªG,L2â\9d« ⊢ V1 ➡*[h] V2 →
+ â\88\80I. â\9dªG,L1.â\93\91[I]V1â\9d« â\8a¢ â\9e¡*[h] L2.â\93\91[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. â¦\83G,L0â¦\84 ⊢ T0 ➡*[h] T1 →
- â\88\80L1. â¦\83G,L0â¦\84 ⊢ ➡*[h] L1 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ T1 â\9e¡*[h] T & â¦\83G,L1â¦\84 ⊢ T0 ➡*[h] T.
+lemma lprs_cprs_conf_dx (h) (G): â\88\80L0.â\88\80T0,T1:term. â\9dªG,L0â\9d« ⊢ T0 ➡*[h] T1 →
+ â\88\80L1. â\9dªG,L0â\9d« ⊢ ➡*[h] L1 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[h] T & â\9dªG,L1â\9d« ⊢ T0 ➡*[h] 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. â¦\83G,L0â¦\84 ⊢ T0 ➡[h] T1 →
- â\88\80L1. â¦\83G,L0â¦\84 ⊢ ➡*[h] L1 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ T1 â\9e¡*[h] T & â¦\83G,L1â¦\84 ⊢ T0 ➡*[h] T.
+lemma lprs_cpr_conf_dx (h) (G): â\88\80L0. â\88\80T0,T1:term. â\9dªG,L0â\9d« ⊢ T0 ➡[h] T1 →
+ â\88\80L1. â\9dªG,L0â\9d« ⊢ ➡*[h] L1 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[h] T & â\9dªG,L1â\9d« ⊢ T0 ➡*[h] 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. â¦\83G,L0â¦\84 ⊢ T0 ➡*[h] T1 →
- â\88\80L1. â¦\83G,L0â¦\84 ⊢ ➡*[h] L1 →
- â\88\83â\88\83T. â¦\83G,L0â¦\84 â\8a¢ T1 â\9e¡*[h] T & â¦\83G,L1â¦\84 ⊢ T0 ➡*[h] T.
+lemma lprs_cprs_conf_sn (h) (G): â\88\80L0. â\88\80T0,T1:term. â\9dªG,L0â\9d« ⊢ T0 ➡*[h] T1 →
+ â\88\80L1. â\9dªG,L0â\9d« ⊢ ➡*[h] L1 →
+ â\88\83â\88\83T. â\9dªG,L0â\9d« â\8a¢ T1 â\9e¡*[h] T & â\9dªG,L1â\9d« ⊢ T0 ➡*[h] 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. â¦\83G,L0â¦\84 ⊢ T0 ➡[h] T1 →
- â\88\80L1. â¦\83G,L0â¦\84 ⊢ ➡*[h] L1 →
- â\88\83â\88\83T. â¦\83G,L0â¦\84 â\8a¢ T1 â\9e¡*[h] T & â¦\83G,L1â¦\84 ⊢ T0 ➡*[h] T.
+lemma lprs_cpr_conf_sn (h) (G): â\88\80L0. â\88\80T0,T1:term. â\9dªG,L0â\9d« ⊢ T0 ➡[h] T1 →
+ â\88\80L1. â\9dªG,L0â\9d« ⊢ ➡*[h] L1 →
+ â\88\83â\88\83T. â\9dªG,L0â\9d« â\8a¢ T1 â\9e¡*[h] T & â\9dªG,L1â\9d« ⊢ T0 ➡*[h] 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 â¦\83G,L1â¦\84⊢ ➡*[h] L2.
+ â\88\80L1,L2. L1⪤[CTC â\80¦ (λL. cpm h G L 0)] L2 â\86\92 â\9dªG,L1â\9d«⊢ ➡*[h] 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. â¦\83G,L1â¦\84⊢ ➡*[h] L2 → L1⪤[CTC … (λL. cpm h G L 0)] L2.
+ â\88\80L1,L2. â\9dªG,L1â\9d«⊢ ➡*[h] 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. â¦\83G,L1â¦\84 ⊢ ➡*[h] L2 → |L1| = |L2|.
+lemma lprs_fwd_length (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡*[h] 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. â¦\83G,L1â¦\84 â\8a¢ â\9e¡[h] L â\86\92 â¦\83G,Lâ¦\84 ⊢ ➡*[h] L2 → Q L → Q L1) →
- â\88\80L1. â¦\83G,L1â¦\84 ⊢ ➡*[h] L2 → Q L1.
+ (â\88\80L1,L. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h] L â\86\92 â\9dªG,Lâ\9d« ⊢ ➡*[h] L2 → Q L → Q L1) →
+ â\88\80L1. â\9dªG,L1â\9d« ⊢ ➡*[h] 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. â¦\83G,L1â¦\84 â\8a¢ â\9e¡*[h] L â\86\92 â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 → Q L → Q L2) →
- â\88\80L2. â¦\83G,L1â¦\84 ⊢ ➡*[h] L2 → Q L2.
+ (â\88\80L,L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡*[h] L â\86\92 â\9dªG,Lâ\9d« ⊢ ➡[h] L2 → Q L → Q L2) →
+ â\88\80L2. â\9dªG,L1â\9d« ⊢ ➡*[h] L2 → Q L2.
/4 width=8 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, cpr_refl, lex_CTC_ind_dx/ qed-.
(* Properties with unbound rt-transition for full local environments ********)
-lemma lpr_lprs (h) (G): â\88\80L1,L2. â¦\83G,L1â¦\84 â\8a¢ â\9e¡[h] L2 â\86\92 â¦\83G,L1â¦\84 ⊢ ➡*[h] L2.
+lemma lpr_lprs (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ➡*[h] 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. â¦\83G,L1â¦\84 ⊢ ➡[h] L →
- â\88\80L2.â¦\83G,Lâ¦\84 â\8a¢ â\9e¡*[h] L2 â\86\92 â¦\83G,L1â¦\84 ⊢ ➡*[h] L2.
+lemma lprs_step_sn (h) (G): â\88\80L1,L. â\9dªG,L1â\9d« ⊢ ➡[h] L →
+ â\88\80L2.â\9dªG,Lâ\9d« â\8a¢ â\9e¡*[h] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ➡*[h] 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. â¦\83G,L1â¦\84 ⊢ ➡*[h] L →
- â\88\80L2. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L2 â\86\92 â¦\83G,L1â¦\84 ⊢ ➡*[h] L2.
+lemma lprs_step_dx (h) (G): â\88\80L1,L. â\9dªG,L1â\9d« ⊢ ➡*[h] L →
+ â\88\80L2. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ➡*[h] L2.
/4 width=3 by lprs_inv_CTC, lprs_CTC, lpr_cprs_trans, lex_CTC_step_dx/ qed-.
lemma lprs_strip (h) (G): confluent2 … (lprs h G) (lpr 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. â¦\83G,L1â¦\84 â\8a¢ â\9e¡*[h] L2 â\86\92 â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2.
+lemma lprs_fwd_lpxs (h) (G) : â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡*[h] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈*[h] 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 â¦\83G,L1â¦\84⊢ ➡*[h] L2.
+ â\88\80L1,L2. TC â\80¦ (lex (λL.cpm h G L 0)) L1 L2 â\86\92 â\9dªG,L1â\9d«⊢ ➡*[h] 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. â¦\83G,L1â¦\84⊢ ➡*[h] L2 → TC … (lex (λL.cpm h G L 0)) L1 L2.
+ â\88\80L1,L2. â\9dªG,L1â\9d«⊢ ➡*[h] L2 → TC … (lex (λL.cpm h G L 0)) L1 L2.
/3 width=3 by lprs_inv_CTC, lex_inv_CTC/ qed-.
(* Basic properties *********************************************************)
(* Basic_2A1: uses: lpxs_pair_refl *)
-lemma lpxs_bind_refl_dx (h) (G): â\88\80L1,L2. â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2 →
- â\88\80I. â¦\83G,L1.â\93\98{I}â¦\84 â\8a¢ â¬\88*[h] L2.â\93\98{I}.
+lemma lpxs_bind_refl_dx (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈*[h] L2 →
+ â\88\80I. â\9dªG,L1.â\93\98[I]â\9d« â\8a¢ â¬\88*[h] L2.â\93\98[I].
/2 width=1 by lex_bind_refl_dx/ qed.
-lemma lpxs_pair (h) (G): â\88\80L1,L2. â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2 →
- â\88\80V1,V2. â¦\83G,L1â¦\84 ⊢ V1 ⬈*[h] V2 →
- â\88\80I. â¦\83G,L1.â\93\91{I}V1â¦\84 â\8a¢ â¬\88*[h] L2.â\93\91{I}V2.
+lemma lpxs_pair (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈*[h] L2 →
+ â\88\80V1,V2. â\9dªG,L1â\9d« ⊢ V1 ⬈*[h] V2 →
+ â\88\80I. â\9dªG,L1.â\93\91[I]V1â\9d« â\8a¢ â¬\88*[h] L2.â\93\91[I]V2.
/2 width=1 by lex_pair/ qed.
lemma lpxs_refl (h) (G): reflexive … (lpxs h G).
(* Basic inversion lemmas ***************************************************)
(* Basic_2A1: was: lpxs_inv_atom1 *)
-lemma lpxs_inv_atom_sn (h) (G): â\88\80L2. â¦\83G,â\8b\86â¦\84 ⊢ ⬈*[h] L2 → L2 = ⋆.
+lemma lpxs_inv_atom_sn (h) (G): â\88\80L2. â\9dªG,â\8b\86â\9d« ⊢ ⬈*[h] L2 → L2 = ⋆.
/2 width=2 by lex_inv_atom_sn/ qed-.
-lemma lpxs_inv_bind_sn (h) (G): â\88\80I1,L2,K1. â¦\83G,K1.â\93\98{I1}â¦\84 ⊢ ⬈*[h] L2 →
- â\88\83â\88\83I2,K2. â¦\83G,K1â¦\84 â\8a¢ â¬\88*[h] K2 & â¦\83G,K1â¦\84 â\8a¢ I1 â¬\88*[h] I2 & L2 = K2.â\93\98{I2}.
+lemma lpxs_inv_bind_sn (h) (G): â\88\80I1,L2,K1. â\9dªG,K1.â\93\98[I1]â\9d« ⊢ ⬈*[h] L2 →
+ â\88\83â\88\83I2,K2. â\9dªG,K1â\9d« â\8a¢ â¬\88*[h] K2 & â\9dªG,K1â\9d« â\8a¢ I1 â¬\88*[h] I2 & L2 = K2.â\93\98[I2].
/2 width=1 by lex_inv_bind_sn/ qed-.
(* Basic_2A1: was: lpxs_inv_pair1 *)
-lemma lpxs_inv_pair_sn (h) (G): â\88\80I,L2,K1,V1. â¦\83G,K1.â\93\91{I}V1â¦\84 ⊢ ⬈*[h] L2 →
- â\88\83â\88\83K2,V2. â¦\83G,K1â¦\84 â\8a¢ â¬\88*[h] K2 & â¦\83G,K1â¦\84 â\8a¢ V1 â¬\88*[h] V2 & L2 = K2.â\93\91{I}V2.
+lemma lpxs_inv_pair_sn (h) (G): â\88\80I,L2,K1,V1. â\9dªG,K1.â\93\91[I]V1â\9d« ⊢ ⬈*[h] L2 →
+ â\88\83â\88\83K2,V2. â\9dªG,K1â\9d« â\8a¢ â¬\88*[h] K2 & â\9dªG,K1â\9d« â\8a¢ V1 â¬\88*[h] V2 & L2 = K2.â\93\91[I]V2.
/2 width=1 by lex_inv_pair_sn/ qed-.
(* Basic_2A1: was: lpxs_inv_atom2 *)
-lemma lpxs_inv_atom_dx (h) (G): â\88\80L1. â¦\83G,L1â¦\84 ⊢ ⬈*[h] ⋆ → L1 = ⋆.
+lemma lpxs_inv_atom_dx (h) (G): â\88\80L1. â\9dªG,L1â\9d« ⊢ ⬈*[h] ⋆ → L1 = ⋆.
/2 width=2 by lex_inv_atom_dx/ qed-.
(* Basic_2A1: was: lpxs_inv_pair2 *)
-lemma lpxs_inv_pair_dx (h) (G): â\88\80I,L1,K2,V2. â¦\83G,L1â¦\84 â\8a¢ â¬\88*[h] K2.â\93\91{I}V2 →
- â\88\83â\88\83K1,V1. â¦\83G,K1â¦\84 â\8a¢ â¬\88*[h] K2 & â¦\83G,K1â¦\84 â\8a¢ V1 â¬\88*[h] V2 & L1 = K1.â\93\91{I}V1.
+lemma lpxs_inv_pair_dx (h) (G): â\88\80I,L1,K2,V2. â\9dªG,L1â\9d« â\8a¢ â¬\88*[h] K2.â\93\91[I]V2 →
+ â\88\83â\88\83K1,V1. â\9dªG,K1â\9d« â\8a¢ â¬\88*[h] K2 & â\9dªG,K1â\9d« â\8a¢ V1 â¬\88*[h] V2 & L1 = K1.â\93\91[I]V1.
/2 width=1 by lex_inv_pair_dx/ qed-.
(* Basic eliminators ********************************************************)
lemma lpxs_ind (h) (G): ∀Q:relation lenv.
Q (⋆) (⋆) → (
∀I,K1,K2.
- â¦\83G,K1â¦\84 ⊢ ⬈*[h] K2 →
- Q K1 K2 → Q (K1.ⓘ{I}) (K2.ⓘ{I})
+ â\9dªG,K1â\9d« ⊢ ⬈*[h] K2 →
+ Q K1 K2 → Q (K1.ⓘ[I]) (K2.ⓘ[I])
) → (
∀I,K1,K2,V1,V2.
- â¦\83G,K1â¦\84 â\8a¢ â¬\88*[h] K2 â\86\92 â¦\83G,K1â¦\84 ⊢ V1 ⬈*[h] V2 →
- Q K1 K2 → Q (K1.ⓑ{I}V1) (K2.ⓑ{I}V2)
+ â\9dªG,K1â\9d« â\8a¢ â¬\88*[h] K2 â\86\92 â\9dªG,K1â\9d« ⊢ V1 ⬈*[h] V2 →
+ Q K1 K2 → Q (K1.ⓑ[I]V1) (K2.ⓑ[I]V2)
) →
- â\88\80L1,L2. â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2 → Q L1 L2.
+ â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈*[h] L2 → Q L1 L2.
/3 width=4 by lex_ind/ qed-.
(* Properties with context-sensitive extended rt-computation for terms ******)
(* Basic_2A1: was: cpxs_bind2 *)
-lemma cpxs_bind_dx (h) (G): â\88\80L,V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ⬈*[h] V2 →
- â\88\80I,T1,T2. â¦\83G,L.â\93\91{I}V2â¦\84 ⊢ T1 ⬈*[h] T2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â¬\88*[h] â\93\91{p,I}V2.T2.
+lemma cpxs_bind_dx (h) (G): â\88\80L,V1,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« â\8a¢ â\93\91[p,I]V1.T1 â¬\88*[h] â\93\91[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 (h) (G): â\88\80p,L,V1,T1,U2. â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p}V1.T1 ⬈*[h] U2 →
- â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88*[h] V2 & â¦\83G,L.â\93\9bV1â¦\84 ⊢ T1 ⬈*[h] T2 &
- U2 = ⓛ{p}V2.T2.
+lemma cpxs_inv_abst1 (h) (G): â\88\80p,L,V1,T1,U2. â\9dªG,Lâ\9d« â\8a¢ â\93\9b[p]V1.T1 ⬈*[h] U2 →
+ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88*[h] V2 & â\9dªG,L.â\93\9bV1â\9d« ⊢ T1 ⬈*[h] T2 &
+ U2 = ⓛ[p]V2.T2.
#h #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 (h) (p) (G) (L):
- â\88\80V1,T1,U2. â¦\83G,Lâ¦\84 â\8a¢ â\93\93{p}V1.T1 ⬈*[h] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88*[h] V2 & â¦\83G,L.â\93\93V1â¦\84 ⊢ T1 ⬈*[h] T2 &
- U2 = ⓓ{p}V2.T2
- | â\88\83â\88\83T2. â¦\83G,L.â\93\93V1â¦\84 ⊢ T1 ⬈*[h] T2 & ⇧*[1] U2 ≘ T2 & p = Ⓣ.
+ â\88\80V1,T1,U2. â\9dªG,Lâ\9d« â\8a¢ â\93\93[p]V1.T1 ⬈*[h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88*[h] V2 & â\9dªG,L.â\93\93V1â\9d« ⊢ T1 ⬈*[h] T2 &
+ U2 = ⓓ[p]V2.T2
+ | â\88\83â\88\83T2. â\9dªG,L.â\93\93V1â\9d« ⊢ T1 ⬈*[h] T2 & ⇧*[1] U2 ≘ T2 & p = Ⓣ.
#h #p #G #L #V1 #T1 #U2 #H
@(cpxs_ind … H) -U2 /3 width=5 by ex3_2_intro, or_introl/
#U0 #U2 #_ #HU02 * *
(* Properties with sort-irrelevant equivalence on closures ******************)
-lemma feqx_lpxs_trans (h): â\88\80G1,G2,L1,L0,T1,T2. â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L0,T2â¦\84 →
- â\88\80L2. â¦\83G2,L0â¦\84 ⊢⬈*[h] L2 →
- â\88\83â\88\83L. â¦\83G1,L1â¦\84 â\8a¢â¬\88*[h] L & â¦\83G1,L,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84.
+lemma feqx_lpxs_trans (h): â\88\80G1,G2,L1,L0,T1,T2. â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L0,T2â\9d« →
+ â\88\80L2. â\9dªG2,L0â\9d« ⊢⬈*[h] L2 →
+ â\88\83â\88\83L. â\9dªG1,L1â\9d« â\8a¢â¬\88*[h] L & â\9dªG1,L,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d«.
#h #G1 #G2 #L1 #L0 #T1 #T2 #H1 #L2 #HL02
elim (feqx_inv_gen_dx … H1) -H1 #HG #HL10 #HT12 destruct
elim (reqx_lpxs_trans … HL02 … HL10) -L0 #L0 #HL10 #HL02
(* Forward lemmas with length for local environments ************************)
-lemma lpxs_fwd_length (h) (G): â\88\80L1,L2. â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2 → |L1| = |L2|.
+lemma lpxs_fwd_length (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈*[h] L2 → |L1| = |L2|.
/2 width=2 by lex_fwd_length/ qed-.
(* Properties with unbound rt-transition for full local environments ********)
-lemma lpx_lpxs (h) (G): â\88\80L1,L2. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h] L2 â\86\92 â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2.
+lemma lpx_lpxs (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â¬\88[h] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈*[h] L2.
/3 width=3 by lpx_cpxs_trans, lex_CTC_inj/ qed.
(* Basic_2A1: was: lpxs_strap2 *)
-lemma lpxs_step_sn (h) (G): â\88\80L1,L. â¦\83G,L1â¦\84 ⊢ ⬈[h] L →
- â\88\80L2. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] L2 â\86\92 â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2.
+lemma lpxs_step_sn (h) (G): â\88\80L1,L. â\9dªG,L1â\9d« ⊢ ⬈[h] L →
+ â\88\80L2. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈*[h] L2.
/3 width=3 by lpx_cpxs_trans, lex_CTC_step_sn/ qed-.
(* Basic_2A1: was: lpxs_strap1 *)
-lemma lpxs_step_dx (h) (G): â\88\80L1,L. â¦\83G,L1â¦\84 ⊢ ⬈*[h] L →
- â\88\80L2. â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] L2 â\86\92 â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2.
+lemma lpxs_step_dx (h) (G): â\88\80L1,L. â\9dªG,L1â\9d« ⊢ ⬈*[h] L →
+ â\88\80L2. â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈*[h] L2.
/3 width=3 by lpx_cpxs_trans, lex_CTC_step_dx/ qed-.
(* Eliminators with unbound rt-transition for full local environments *******)
(* Basic_2A1: was: lpxs_ind_dx *)
lemma lpxs_ind_sn (h) (G) (L2): ∀Q:predicate lenv. Q L2 →
- (â\88\80L1,L. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h] L â\86\92 â¦\83G,Lâ¦\84 ⊢ ⬈*[h] L2 → Q L → Q L1) →
- â\88\80L1. â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2 → Q L1.
+ (â\88\80L1,L. â\9dªG,L1â\9d« â\8a¢ â¬\88[h] L â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈*[h] L2 → Q L → Q L1) →
+ â\88\80L1. â\9dªG,L1â\9d« ⊢ ⬈*[h] 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 (h) (G) (L1): ∀Q:predicate lenv. Q L1 →
- (â\88\80L,L2. â¦\83G,L1â¦\84 â\8a¢ â¬\88*[h] L â\86\92 â¦\83G,Lâ¦\84 ⊢ ⬈[h] L2 → Q L → Q L2) →
- â\88\80L2. â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2 → Q L2.
+ (â\88\80L,L2. â\9dªG,L1â\9d« â\8a¢ â¬\88*[h] L â\86\92 â\9dªG,Lâ\9d« ⊢ ⬈[h] L2 → Q L → Q L2) →
+ â\88\80L2. â\9dªG,L1â\9d« ⊢ ⬈*[h] 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 *******)
(* Advanced properties ******************************************************)
(* Basic_2A1: was: lpxs_pair2 *)
-lemma lpxs_pair_dx (h) (G): â\88\80L1,L2. â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2 →
- â\88\80V1,V2. â¦\83G,L2â¦\84 ⊢ V1 ⬈*[h] V2 →
- â\88\80I. â¦\83G,L1.â\93\91{I}V1â¦\84 â\8a¢ â¬\88*[h] L2.â\93\91{I}V2.
+lemma lpxs_pair_dx (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈*[h] L2 →
+ â\88\80V1,V2. â\9dªG,L2â\9d« ⊢ V1 ⬈*[h] V2 →
+ â\88\80I. â\9dªG,L1.â\93\91[I]V1â\9d« â\8a¢ â¬\88*[h] L2.â\93\91[I]V2.
/3 width=3 by lpxs_pair, lpxs_cpxs_trans/ qed.
(* Basic_2A1: uses: lleq_lpxs_trans *)
lemma reqx_lpxs_trans (h) (G) (T:term):
- â\88\80L2,K2. â¦\83G,L2â¦\84 ⊢ ⬈*[h] K2 →
+ â\88\80L2,K2. â\9dªG,L2â\9d« ⊢ ⬈*[h] K2 →
∀L1. L1 ≛[T] L2 →
- â\88\83â\88\83K1. â¦\83G,L1â¦\84 ⊢ ⬈*[h] K1 & K1 ≛[T] K2.
+ â\88\83â\88\83K1. â\9dªG,L1â\9d« ⊢ ⬈*[h] K1 & K1 ≛[T] K2.
#h #G #T #L2 #K2 #H @(lpxs_ind_sn … H) -L2 /2 width=3 by ex2_intro/
#L #L2 #HL2 #_ #IH #L1 #HT
elim (reqx_lpx_trans … HL2 … HT) -L #L #HL1 #HT
(* Basic_2A1: uses: lpxs_nlleq_inv_step_sn *)
lemma lpxs_rneqx_inv_step_sn (h) (G) (T:term):
- â\88\80L1,L2. â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) →
- â\88\83â\88\83L,L0. â¦\83G,L1â¦\84 ⊢ ⬈[h] L & L1 ≛[T] L → ⊥ &
- â¦\83G,Lâ¦\84 ⊢ ⬈*[h] L0 & L0 ≛[T] L2.
+ â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) →
+ â\88\83â\88\83L,L0. â\9dªG,L1â\9d« ⊢ ⬈[h] L & L1 ≛[T] L → ⊥ &
+ â\9dªG,Lâ\9d« ⊢ ⬈*[h] L0 & L0 ≛[T] L2.
#h #G #T #L1 #L2 #H @(lpxs_ind_sn … H) -L1
[ #H elim H -H //
| #L1 #L #H1 #H2 #IH2 #H12 elim (reqx_dec L1 L T) #H
(* Basic_2A1: uses: lsx_ind *)
lemma rsx_ind (h) (G) (T) (Q:predicate lenv):
- (â\88\80L1. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L1â¦\84 →
- (â\88\80L2. â¦\83G,L1â¦\84 ⊢ ⬈[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) →
+ (â\88\80L1. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL1â\9d« →
+ (â\88\80L2. â\9dªG,L1â\9d« ⊢ ⬈[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) →
Q L1
) →
- â\88\80L. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83Lâ¦\84 → Q L.
+ â\88\80L. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªLâ\9d« → Q L.
#h #G #T #Q #H0 #L1 #H elim H -L1
/5 width=1 by SN_intro/
qed-.
(* Basic_2A1: uses: lsx_intro *)
lemma rsx_intro (h) (G) (T):
∀L1.
- (â\88\80L2. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h] L2 â\86\92 (L1 â\89\9b[T] L2 â\86\92 â\8a¥) â\86\92 G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L2â¦\84) →
- G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L1â¦\84.
+ (â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â¬\88[h] L2 â\86\92 (L1 â\89\9b[T] L2 â\86\92 â\8a¥) â\86\92 G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL2â\9d«) →
+ G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL1â\9d«.
/5 width=1 by SN_intro/ qed.
(* Basic forward lemmas *****************************************************)
(* Basic_2A1: uses: lsx_fwd_pair_sn lsx_fwd_bind_sn lsx_fwd_flat_sn *)
lemma rsx_fwd_pair_sn (h) (G):
- ∀I,L,V,T. G ⊢ ⬈*[h,②{I}V.T] 𝐒⦃L⦄ →
- G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83Lâ¦\84.
+ ∀I,L,V,T. G ⊢ ⬈*[h,②[I]V.T] 𝐒❪L❫ →
+ G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªLâ\9d«.
#h #G #I #L #V #T #H
@(rsx_ind … H) -L #L1 #_ #IHL1
@rsx_intro #L2 #HL12 #HnL12
(* Basic_2A1: uses: lsx_fwd_flat_dx *)
lemma rsx_fwd_flat_dx (h) (G):
- ∀I,L,V,T. G ⊢ ⬈*[h,ⓕ{I}V.T] 𝐒⦃L⦄ →
- G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83Lâ¦\84.
+ ∀I,L,V,T. G ⊢ ⬈*[h,ⓕ[I]V.T] 𝐒❪L❫ →
+ G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªLâ\9d«.
#h #G #I #L #V #T #H
@(rsx_ind … H) -L #L1 #_ #IHL1
@rsx_intro #L2 #HL12 #HnL12
qed-.
fact rsx_fwd_pair_aux (h) (G):
- â\88\80L. G â\8a¢ â¬\88*[h,#0] ð\9d\90\92â¦\83Lâ¦\84 →
- ∀I,K,V. L = K.ⓑ{I}V → G ⊢ ⬈*[h,V] 𝐒⦃K⦄.
+ â\88\80L. G â\8a¢ â¬\88*[h,#0] ð\9d\90\92â\9dªLâ\9d« →
+ ∀I,K,V. L = K.ⓑ[I]V → G ⊢ ⬈*[h,V] 𝐒❪K❫.
#h #G #L #H
@(rsx_ind … H) -L #L1 #_ #IH #I #K1 #V #H destruct
/5 width=5 by lpx_pair, rsx_intro, reqx_fwd_zero_pair/
qed-.
lemma rsx_fwd_pair (h) (G):
- â\88\80I,K,V. G â\8a¢ â¬\88*[h,#0] ð\9d\90\92â¦\83K.â\93\91{I}Vâ¦\84 â\86\92 G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83Kâ¦\84.
+ â\88\80I,K,V. G â\8a¢ â¬\88*[h,#0] ð\9d\90\92â\9dªK.â\93\91[I]Vâ\9d« â\86\92 G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªKâ\9d«.
/2 width=4 by rsx_fwd_pair_aux/ qed-.
(* Basic inversion lemmas ***************************************************)
(* Basic_2A1: uses: lsx_inv_flat *)
lemma rsx_inv_flat (h) (G):
- ∀I,L,V,T. G ⊢ ⬈*[h,ⓕ{I}V.T] 𝐒⦃L⦄ →
- â\88§â\88§ G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83Lâ¦\84 & G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83Lâ¦\84.
+ ∀I,L,V,T. G ⊢ ⬈*[h,ⓕ[I]V.T] 𝐒❪L❫ →
+ â\88§â\88§ G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªLâ\9d« & G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªLâ\9d«.
/3 width=3 by rsx_fwd_pair_sn, rsx_fwd_flat_dx, conj/ qed-.
(* Basic_2A1: removed theorems 9:
(* Forward lemmas with strongly rt-normalizing terms ************************)
fact rsx_fwd_lref_pair_csx_aux (h) (G):
- â\88\80L. G â\8a¢ â¬\88*[h,#0] ð\9d\90\92â¦\83Lâ¦\84 →
- ∀I,K,V. L = K.ⓑ{I}V → ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄.
+ â\88\80L. G â\8a¢ â¬\88*[h,#0] ð\9d\90\92â\9dªLâ\9d« →
+ ∀I,K,V. L = K.ⓑ[I]V → ❪G,K❫ ⊢ ⬈*[h] 𝐒❪V❫.
#h #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 (h) (G):
- â\88\80I,K,V. G â\8a¢ â¬\88*[h,#0] ð\9d\90\92â¦\83K.â\93\91{I}Vâ¦\84 â\86\92 â¦\83G,Kâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vâ¦\84.
+ â\88\80I,K,V. G â\8a¢ â¬\88*[h,#0] ð\9d\90\92â\9dªK.â\93\91[I]Vâ\9d« â\86\92 â\9dªG,Kâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVâ\9d«.
/2 width=4 by rsx_fwd_lref_pair_csx_aux/ qed-.
lemma rsx_fwd_lref_pair_csx_drops (h) (G):
- ∀I,K,V,i,L. ⇩*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄ → ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄.
+ ∀I,K,V,i,L. ⇩*[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*[h,#i] 𝐒❪L❫ → ❪G,K❫ ⊢ ⬈*[h] 𝐒❪V❫.
#h #G #I #K #V #i elim i -i
[ #L #H >(drops_fwd_isid … H) -H
/2 width=2 by rsx_fwd_lref_pair_csx/
| #i #IH #L #H1 #H2
elim (drops_inv_bind2_isuni_next … H1) -H1 // #J #Y #HY #H destruct
- lapply (rsx_inv_lifts â\80¦ H2 â\80¦ (ð\9d\90\94â\9d´1â\9dµ) ?????) -H2
+ lapply (rsx_inv_lifts â\80¦ H2 â\80¦ (ð\9d\90\94â\9d¨1â\9d©) ?????) -H2
/3 width=6 by drops_refl, drops_drop/
]
qed-.
(* Inversion lemmas with strongly rt-normalizing terms **********************)
lemma rsx_inv_lref_pair (h) (G):
- â\88\80I,K,V. G â\8a¢ â¬\88*[h,#0] ð\9d\90\92â¦\83K.â\93\91{I}Vâ¦\84 →
- â\88§â\88§ â¦\83G,Kâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vâ¦\84 & G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83Kâ¦\84.
+ â\88\80I,K,V. G â\8a¢ â¬\88*[h,#0] ð\9d\90\92â\9dªK.â\93\91[I]Vâ\9d« →
+ â\88§â\88§ â\9dªG,Kâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVâ\9d« & G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªKâ\9d«.
/3 width=2 by rsx_fwd_lref_pair_csx, rsx_fwd_pair, conj/ qed-.
lemma rsx_inv_lref_pair_drops (h) (G):
- ∀I,K,V,i,L. ⇩*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄ →
- â\88§â\88§ â¦\83G,Kâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vâ¦\84 & G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83Kâ¦\84.
+ ∀I,K,V,i,L. ⇩*[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*[h,#i] 𝐒❪L❫ →
+ â\88§â\88§ â\9dªG,Kâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVâ\9d« & G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªKâ\9d«.
/3 width=5 by rsx_fwd_lref_pair_csx_drops, rsx_fwd_lref_pair_drops, conj/ qed-.
lemma rsx_inv_lref_drops (h) (G):
- â\88\80L,i. G â\8a¢ â¬\88*[h,#i] ð\9d\90\92â¦\83Lâ¦\84 →
- â\88¨â\88¨ â\87©*[â\92»,ð\9d\90\94â\9d´iâ\9dµ] L ≘ ⋆
- | ∃∃I,K. ⇩*[i] L ≘ K.ⓤ{I}
- | ∃∃I,K,V. ⇩*[i] L ≘ K.ⓑ{I}V & ⦃G,K⦄ ⊢ ⬈*[h] 𝐒⦃V⦄ & G ⊢ ⬈*[h,V] 𝐒⦃K⦄.
+ â\88\80L,i. G â\8a¢ â¬\88*[h,#i] ð\9d\90\92â\9dªLâ\9d« →
+ â\88¨â\88¨ â\87©*[â\92»,ð\9d\90\94â\9d¨iâ\9d©] L ≘ ⋆
+ | ∃∃I,K. ⇩*[i] L ≘ K.ⓤ[I]
+ | ∃∃I,K,V. ⇩*[i] L ≘ K.ⓑ[I]V & ❪G,K❫ ⊢ ⬈*[h] 𝐒❪V❫ & G ⊢ ⬈*[h,V] 𝐒❪K❫.
#h #G #L #i #H elim (drops_F_uni L i)
[ /2 width=1 by or3_intro0/
| * * /4 width=10 by rsx_fwd_lref_pair_csx_drops, rsx_fwd_lref_pair_drops, ex3_3_intro, ex1_2_intro, or3_intro2, or3_intro1/
(* Note: swapping the eliminations to avoid rsx_cpx_trans: no solution found *)
(* Basic_2A1: uses: lsx_lref_be_lpxs *)
lemma rsx_lref_pair_lpxs (h) (G):
- â\88\80K1,V. â¦\83G,K1â¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vâ¦\84 →
- â\88\80K2. G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83K2â¦\84 â\86\92 â¦\83G,K1â¦\84 ⊢ ⬈*[h] K2 →
- â\88\80I. G â\8a¢ â¬\88*[h,#0] ð\9d\90\92â¦\83K2.â\93\91{I}Vâ¦\84.
+ â\88\80K1,V. â\9dªG,K1â\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVâ\9d« →
+ â\88\80K2. G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªK2â\9d« â\86\92 â\9dªG,K1â\9d« ⊢ ⬈*[h] K2 →
+ â\88\80I. G â\8a¢ â¬\88*[h,#0] ð\9d\90\92â\9dªK2.â\93\91[I]Vâ\9d«.
#h #G #K1 #V #H
@(csx_ind_cpxs … H) -V #V0 #_ #IHV0 #K2 #H
@(rsx_ind … H) -K2 #K0 #HK0 #IHK0 #HK10 #I
qed.
lemma rsx_lref_pair (h) (G):
- â\88\80K,V. â¦\83G,Kâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vâ¦\84 â\86\92 G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83Kâ¦\84 â\86\92 â\88\80I. G â\8a¢ â¬\88*[h,#0] ð\9d\90\92â¦\83K.â\93\91{I}Vâ¦\84.
+ â\88\80K,V. â\9dªG,Kâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVâ\9d« â\86\92 G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªKâ\9d« â\86\92 â\88\80I. G â\8a¢ â¬\88*[h,#0] ð\9d\90\92â\9dªK.â\93\91[I]Vâ\9d«.
/2 width=3 by rsx_lref_pair_lpxs/ qed.
(* Basic_2A1: uses: lsx_lref_be *)
lemma rsx_lref_pair_drops (h) (G):
- â\88\80K,V. â¦\83G,Kâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Vâ¦\84 â\86\92 G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83Kâ¦\84 →
- ∀I,i,L. ⇩*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄.
+ â\88\80K,V. â\9dªG,Kâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªVâ\9d« â\86\92 G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªKâ\9d« →
+ ∀I,i,L. ⇩*[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*[h,#i] 𝐒❪L❫.
#h #G #K #V #HV #HK #I #i elim i -i
[ #L #H >(drops_fwd_isid … H) -H /2 width=1 by rsx_lref_pair/
| #i #IH #L #H
elim (drops_inv_bind2_isuni_next … H) -H // #J #Y #HY #H destruct
- @(rsx_lifts â\80¦ (ð\9d\90\94â\9d´1â\9dµ)) /3 width=6 by drops_refl, drops_drop/ (**) (* full auto fails *)
+ @(rsx_lifts â\80¦ (ð\9d\90\94â\9d¨1â\9d©)) /3 width=6 by drops_refl, drops_drop/ (**) (* full auto fails *)
]
qed.
(* Main properties with strongly rt-normalizing terms ***********************)
(* Basic_2A1: uses: csx_lsx *)
-theorem csx_rsx (h) (G): â\88\80L,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83Tâ¦\84 â\86\92 G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83Lâ¦\84.
+theorem csx_rsx (h) (G): â\88\80L,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªTâ\9d« â\86\92 G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªLâ\9d«.
#h #G #L #T @(fqup_wf_ind_eq (Ⓣ) … G L T) -G -L -T
#Z #Y #X #IH #G #L * *
[ //
(* Note: this uses length *)
(* Basic_2A1: uses: lsx_lift_le lsx_lift_ge *)
-lemma rsx_lifts (h) (G): d_liftable1_isuni â\80¦ (λL,T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83Lâ¦\84).
+lemma rsx_lifts (h) (G): d_liftable1_isuni â\80¦ (λL,T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªLâ\9d«).
#h #G #K #T #H @(rsx_ind … H) -K
#K1 #_ #IH #b #f #L1 #HLK1 #Hf #U #HTU @rsx_intro
#L2 #HL12 #HnL12 elim (lpx_drops_conf … HLK1 … HL12)
(* Inversion lemmas on relocation *******************************************)
(* Basic_2A1: uses: lsx_inv_lift_le lsx_inv_lift_be lsx_inv_lift_ge *)
-lemma rsx_inv_lifts (h) (G): d_deliftable1_isuni â\80¦ (λL,T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83Lâ¦\84).
+lemma rsx_inv_lifts (h) (G): d_deliftable1_isuni â\80¦ (λL,T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªLâ\9d«).
#h #G #L #U #H @(rsx_ind … H) -L
#L1 #_ #IH #b #f #K1 #HLK1 #Hf #T #HTU @rsx_intro
#K2 #HK12 #HnK12 elim (drops_lpx_trans … HLK1 … HK12) -HK12
(* Advanced properties ******************************************************)
(* Basic_2A1: uses: lsx_lref_free *)
-lemma rsx_lref_atom_drops (h) (G): â\88\80L,i. â\87©*[â\92»,ð\9d\90\94â\9d´iâ\9dµ] L â\89\98 â\8b\86 â\86\92 G â\8a¢ â¬\88*[h,#i] ð\9d\90\92â¦\83Lâ¦\84.
+lemma rsx_lref_atom_drops (h) (G): â\88\80L,i. â\87©*[â\92»,ð\9d\90\94â\9d¨iâ\9d©] L â\89\98 â\8b\86 â\86\92 G â\8a¢ â¬\88*[h,#i] ð\9d\90\92â\9dªLâ\9d«.
#h #G #L1 #i #HL1
@(rsx_lifts … (#0) … HL1) -HL1 //
qed.
(* Basic_2A1: uses: lsx_lref_skip *)
-lemma rsx_lref_unit_drops (h) (G): ∀I,L,K,i. ⇩*[i] L ≘ K.ⓤ{I} → G ⊢ ⬈*[h,#i] 𝐒⦃L⦄.
+lemma rsx_lref_unit_drops (h) (G): ∀I,L,K,i. ⇩*[i] L ≘ K.ⓤ[I] → G ⊢ ⬈*[h,#i] 𝐒❪L❫.
#h #G #I #L1 #K1 #i #HL1
@(rsx_lifts … (#0) … HL1) -HL1 //
qed.
(* Basic_2A1: uses: lsx_fwd_lref_be *)
lemma rsx_fwd_lref_pair_drops (h) (G):
- â\88\80L,i. G â\8a¢ â¬\88*[h,#i] ð\9d\90\92â¦\83Lâ¦\84 →
- ∀I,K,V. ⇩*[i] L ≘ K.ⓑ{I}V → G ⊢ ⬈*[h,V] 𝐒⦃K⦄.
+ â\88\80L,i. G â\8a¢ â¬\88*[h,#i] ð\9d\90\92â\9dªLâ\9d« →
+ ∀I,K,V. ⇩*[i] L ≘ K.ⓑ[I]V → G ⊢ ⬈*[h,V] 𝐒❪K❫.
#h #G #L #i #HL #I #K #V #HLK
lapply (rsx_inv_lifts … HL … HLK … (#0) ?) -L
/2 width=2 by rsx_fwd_pair/
(* Advanced properties ******************************************************)
(* Basic_2A1: uses: lsx_atom *)
-lemma lfsx_atom (h) (G) (T): G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83â\8b\86â¦\84.
+lemma lfsx_atom (h) (G) (T): G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªâ\8b\86â\9d«.
#h #G #T
@rsx_intro #Y #H #HnT
lapply (lpx_inv_atom_sn … H) -H #H destruct
(* Note: the exclusion binder (ⓧ) makes this more elegant and much simpler *)
(* Note: the old proof without the exclusion binder requires lreq *)
lemma rsx_fwd_bind_dx_void (h) (G):
- ∀p,I,L,V,T. G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L⦄ → G ⊢ ⬈*[h,T] 𝐒⦃L.ⓧ⦄.
+ ∀p,I,L,V,T. G ⊢ ⬈*[h,ⓑ[p,I]V.T] 𝐒❪L❫ → G ⊢ ⬈*[h,T] 𝐒❪L.ⓧ❫.
#h #G #p #I #L #V #T #H
@(rsx_ind … H) -L #L1 #_ #IH
@rsx_intro #Y #H #HT
(* Basic_2A1: uses: lsx_inv_bind *)
lemma rsx_inv_bind_void (h) (G):
- ∀p,I,L,V,T. G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L⦄ →
- â\88§â\88§ G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83Lâ¦\84 & G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L.â\93§â¦\84.
+ ∀p,I,L,V,T. G ⊢ ⬈*[h,ⓑ[p,I]V.T] 𝐒❪L❫ →
+ â\88§â\88§ G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªLâ\9d« & G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL.â\93§â\9d«.
/3 width=4 by rsx_fwd_pair_sn, rsx_fwd_bind_dx_void, conj/ qed-.
(* Advanced properties ******************************************************)
(* Basic_2A1: uses: lsx_sort *)
-lemma rsx_sort (h) (G): â\88\80L,s. G â\8a¢ â¬\88*[h,â\8b\86s] ð\9d\90\92â¦\83Lâ¦\84.
+lemma rsx_sort (h) (G): â\88\80L,s. G â\8a¢ â¬\88*[h,â\8b\86s] ð\9d\90\92â\9dªLâ\9d«.
#h #G #L1 #s @rsx_intro #L2 #H #Hs
elim Hs -Hs /3 width=3 by lpx_fwd_length, reqx_sort_length/
qed.
(* Basic_2A1: uses: lsx_gref *)
-lemma rsx_gref (h) (G): â\88\80L,l. G â\8a¢ â¬\88*[h,§l] ð\9d\90\92â¦\83Lâ¦\84.
+lemma rsx_gref (h) (G): â\88\80L,l. G â\8a¢ â¬\88*[h,§l] ð\9d\90\92â\9dªLâ\9d«.
#h #G #L1 #s @rsx_intro #L2 #H #Hs
elim Hs -Hs /3 width=3 by lpx_fwd_length, reqx_gref_length/
qed.
-lemma rsx_unit (h) (G): â\88\80I,L. G â\8a¢ â¬\88*[h,#0] ð\9d\90\92â¦\83L.â\93¤{I}â¦\84.
+lemma rsx_unit (h) (G): â\88\80I,L. G â\8a¢ â¬\88*[h,#0] ð\9d\90\92â\9dªL.â\93¤[I]â\9d«.
#h #G #I #L1 @rsx_intro
#Y #HY #HnY elim HnY -HnY
elim (lpx_inv_unit_sn … HY) -HY #L2 #HL12 #H destruct
(* Basic_2A1: uses: lsx_intro_alt *)
lemma rsx_intro_lpxs (h) (G):
- â\88\80L1,T. (â\88\80L2. â¦\83G,L1â¦\84 â\8a¢ â¬\88*[h] L2 â\86\92 (L1 â\89\9b[T] L2 â\86\92 â\8a¥) â\86\92 G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L2â¦\84) →
- G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L1â¦\84.
+ â\88\80L1,T. (â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â¬\88*[h] L2 â\86\92 (L1 â\89\9b[T] L2 â\86\92 â\8a¥) â\86\92 G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL2â\9d«) →
+ G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL1â\9d«.
/4 width=1 by lpx_lpxs, rsx_intro/ qed-.
(* Basic_2A1: uses: lsx_lpxs_trans *)
lemma rsx_lpxs_trans (h) (G):
- â\88\80L1,T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L1â¦\84 →
- â\88\80L2. â¦\83G,L1â¦\84 â\8a¢ â¬\88*[h] L2 â\86\92 G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L2â¦\84.
+ â\88\80L1,T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL1â\9d« →
+ â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â¬\88*[h] L2 â\86\92 G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL2â\9d«.
#h #G #L1 #T #HL1 #L2 #H @(lpxs_ind_dx … H) -L2
/2 width=3 by rsx_lpx_trans/
qed-.
(* Eliminators with unbound rt-computation for full local environments ******)
lemma rsx_ind_lpxs_reqx (h) (G) (T) (Q:predicate lenv):
- (â\88\80L1. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L1â¦\84 →
- (â\88\80L2. â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) →
+ (â\88\80L1. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL1â\9d« →
+ (â\88\80L2. â\9dªG,L1â\9d« ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) →
Q L1
) →
- â\88\80L1. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L1â¦\84 →
- â\88\80L0. â¦\83G,L1â¦\84 ⊢ ⬈*[h] L0 → ∀L2. L0 ≛[T] L2 → Q L2.
+ â\88\80L1. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL1â\9d« →
+ â\88\80L0. â\9dªG,L1â\9d« ⊢ ⬈*[h] L0 → ∀L2. L0 ≛[T] L2 → Q L2.
#h #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 (h) (G) (T) (Q:predicate lenv):
- (â\88\80L1. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L1â¦\84 →
- (â\88\80L2. â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) →
+ (â\88\80L1. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL1â\9d« →
+ (â\88\80L2. â\9dªG,L1â\9d« ⊢ ⬈*[h] L2 → (L1 ≛[T] L2 → ⊥) → Q L2) →
Q L1
) →
- â\88\80L. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83Lâ¦\84 → Q L.
+ â\88\80L. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªLâ\9d« → Q L.
#h #G #T #Q #IH #L #HL
@(rsx_ind_lpxs_reqx … IH … HL) -IH -HL // (**) (* full auto fails *)
qed-.
(* Advanced properties ******************************************************)
fact rsx_bind_lpxs_aux (h) (G):
- â\88\80p,I,L1,V. G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83L1â¦\84 →
- â\88\80Y,T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83Yâ¦\84 →
- ∀L2. Y = L2.ⓑ{I}V → ⦃G,L1⦄ ⊢ ⬈*[h] L2 →
- G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L2⦄.
+ â\88\80p,I,L1,V. G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªL1â\9d« →
+ â\88\80Y,T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªYâ\9d« →
+ ∀L2. Y = L2.ⓑ[I]V → ❪G,L1❫ ⊢ ⬈*[h] L2 →
+ G ⊢ ⬈*[h,ⓑ[p,I]V.T] 𝐒❪L2❫.
#h #G #p #I #L1 #V #H @(rsx_ind_lpxs … H) -L1
#L1 #_ #IHL1 #Y #T #H @(rsx_ind_lpxs … H) -Y
#Y #HY #IHY #L2 #H #HL12 destruct
(* Basic_2A1: uses: lsx_bind *)
lemma rsx_bind (h) (G):
- â\88\80p,I,L,V. G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83Lâ¦\84 →
- â\88\80T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L.â\93\91{I}Vâ¦\84 →
- G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L⦄.
+ â\88\80p,I,L,V. G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªLâ\9d« →
+ â\88\80T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL.â\93\91[I]Vâ\9d« →
+ G ⊢ ⬈*[h,ⓑ[p,I]V.T] 𝐒❪L❫.
/2 width=3 by rsx_bind_lpxs_aux/ qed.
(* Basic_2A1: uses: lsx_flat_lpxs *)
lemma rsx_flat_lpxs (h) (G):
- â\88\80I,L1,V. G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83L1â¦\84 →
- â\88\80L2,T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L2â¦\84 â\86\92 â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2 →
- G ⊢ ⬈*[h,ⓕ{I}V.T] 𝐒⦃L2⦄.
+ â\88\80I,L1,V. G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªL1â\9d« →
+ â\88\80L2,T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL2â\9d« â\86\92 â\9dªG,L1â\9d« ⊢ ⬈*[h] L2 →
+ G ⊢ ⬈*[h,ⓕ[I]V.T] 𝐒❪L2❫.
#h #G #I #L1 #V #H @(rsx_ind_lpxs … H) -L1
#L1 #HL1 #IHL1 #L2 #T #H @(rsx_ind_lpxs … H) -L2
#L2 #HL2 #IHL2 #HL12 @rsx_intro_lpxs
(* Basic_2A1: uses: lsx_flat *)
lemma rsx_flat (h) (G):
- â\88\80I,L,V. G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83Lâ¦\84 →
- â\88\80T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83Lâ¦\84 â\86\92 G â\8a¢ â¬\88*[h,â\93\95{I}V.T] ð\9d\90\92â¦\83Lâ¦\84.
+ â\88\80I,L,V. G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªLâ\9d« →
+ â\88\80T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªLâ\9d« â\86\92 G â\8a¢ â¬\88*[h,â\93\95[I]V.T] ð\9d\90\92â\9dªLâ\9d«.
/2 width=3 by rsx_flat_lpxs/ qed.
fact rsx_bind_lpxs_void_aux (h) (G):
- â\88\80p,I,L1,V. G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83L1â¦\84 →
- â\88\80Y,T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83Yâ¦\84 →
- â\88\80L2. Y = L2.â\93§ â\86\92 â¦\83G,L1â¦\84 ⊢ ⬈*[h] L2 →
- G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L2⦄.
+ â\88\80p,I,L1,V. G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªL1â\9d« →
+ â\88\80Y,T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªYâ\9d« →
+ â\88\80L2. Y = L2.â\93§ â\86\92 â\9dªG,L1â\9d« ⊢ ⬈*[h] L2 →
+ G ⊢ ⬈*[h,ⓑ[p,I]V.T] 𝐒❪L2❫.
#h #G #p #I #L1 #V #H @(rsx_ind_lpxs … H) -L1
#L1 #_ #IHL1 #Y #T #H @(rsx_ind_lpxs … H) -Y
#Y #HY #IHY #L2 #H #HL12 destruct
qed-.
lemma rsx_bind_void (h) (G):
- â\88\80p,I,L,V. G â\8a¢ â¬\88*[h,V] ð\9d\90\92â¦\83Lâ¦\84 →
- â\88\80T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L.â\93§â¦\84 →
- G ⊢ ⬈*[h,ⓑ{p,I}V.T] 𝐒⦃L⦄.
+ â\88\80p,I,L,V. G â\8a¢ â¬\88*[h,V] ð\9d\90\92â\9dªLâ\9d« →
+ â\88\80T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL.â\93§â\9d« →
+ G ⊢ ⬈*[h,ⓑ[p,I]V.T] 𝐒❪L❫.
/2 width=3 by rsx_bind_lpxs_void_aux/ qed.
(* Basic_2A1: uses: lsx_lleq_trans *)
lemma rsx_reqx_trans (h) (G):
- â\88\80L1,T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L1â¦\84 →
- â\88\80L2. L1 â\89\9b[T] L2 â\86\92 G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L2â¦\84.
+ â\88\80L1,T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL1â\9d« →
+ â\88\80L2. L1 â\89\9b[T] L2 â\86\92 G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL2â\9d«.
#h #G #L1 #T #H @(rsx_ind … H) -L1
#L1 #_ #IHL1 #L2 #HL12 @rsx_intro
#L #HL2 #HnL2 elim (reqx_lpx_trans … HL2 … HL12) -HL2
(* Basic_2A1: uses: lsx_lpx_trans *)
lemma rsx_lpx_trans (h) (G):
- â\88\80L1,T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L1â¦\84 →
- â\88\80L2. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h] L2 â\86\92 G â\8a¢ â¬\88*[h,T] ð\9d\90\92â¦\83L2â¦\84.
+ â\88\80L1,T. G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL1â\9d« →
+ â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â¬\88[h] L2 â\86\92 G â\8a¢ â¬\88*[h,T] ð\9d\90\92â\9dªL2â\9d«.
#h #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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[h] T2 â\88¨ â¦\83G,Lâ¦\84 ⊢ T2 ➡[h] T1.
+ λh,G,L,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h] T2 â\88¨ â\9dªG,Lâ\9d« ⊢ T2 ➡[h] T1.
interpretation
"context-sensitive parallel r-conversion (term)"
(* Basic forward lemmas *****************************************************)
-lemma cpc_fwd_cpr: â\88\80h,G,L,T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬌[h] T2 →
- â\88\83â\88\83T. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[h] T & â¦\83G,Lâ¦\84 ⊢ T2 ➡[h] 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] T & â\9dªG,Lâ\9d« ⊢ T2 ➡[h] 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. â¦\83G,Lâ¦\84 â\8a¢ T0 â¬\8c[h] T1 â\86\92 â¦\83G,Lâ¦\84 ⊢ T0 ⬌[h] T2 →
- â\88\83â\88\83T. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\8c[h] T & â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\8c[h] T â\86\92 â¦\83G,Lâ¦\84 ⊢ T ⬌*[h] T2 → Q T → Q T1) →
- â\88\80T1. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\8c*[h] T â\86\92 â¦\83G,Lâ¦\84 ⊢ T ⬌[h] T2 → Q T → Q T2) →
- â\88\80T2. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\8c[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T1 ⬌[h] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â¬\8c*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â¬\8c[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2.
+lemma cpr_cpcs_dx (h) (G) (L): â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h] 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. â¦\83G,Lâ¦\84 â\8a¢ T2 â\9e¡[h] T1 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2.
+lemma cpr_cpcs_sn (h) (G) (L): â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T2 â\9e¡[h] 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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[h] T â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â¬\8c*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cpr_step_sn (h) (G) (L): â\88\80T1,T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[h] 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. â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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] 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. â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T2 â\9e¡[h] T â\86\92 â¦\83G,Lâ¦\84 ⊢ 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] 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. â¦\83G,Lâ¦\84 ⊢ T1 ➡[h] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T2 â\9e¡[h] T â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2.
+lemma 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] 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. â¦\83G,Lâ¦\84 ⊢ T ➡[h] T1 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â¬\8c*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cpr_conf (h) (G) (L): â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T ➡[h] 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. â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2 →
- â\88\80A1. â¦\83G,Lâ¦\84 â\8a¢ T1 â\81\9d A1 â\86\92 â\88\80A2. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ V1 ⬌*[h] V2 →
- â\88\80I,T1,T2. â¦\83G,L.â\93\91{I}V1â¦\84 ⊢ T1 ⬌*[h] T2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â¬\8c*[h] â\93\91{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« â\8a¢ â\93\91[p,I]V1.T1 â¬\8c*[h] â\93\91[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. â¦\83G,Lâ¦\84 ⊢ V1 ⬌*[h] V2 →
- â\88\80I,T1,T2. â¦\83G,L.â\93\91{I}V2â¦\84 ⊢ T1 ⬌*[h] T2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â¬\8c*[h] â\93\91{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« â\8a¢ â\93\91[p,I]V1.T1 â¬\8c*[h] â\93\91[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. â¦\83G,L1â¦\84 ⊢ ➡[h] L2 →
- â\88\80T1,T2. â¦\83G,L1â¦\84 â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â¦\83G,L2â¦\84 ⊢ T1 ⬌*[h] T2.
+lemma lpr_cpcs_conf (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡[h] 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. â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2 →
- â\88\83â\88\83T. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[h] T & â¦\83G,Lâ¦\84 ⊢ T2 ➡*[h] 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] T & â\9dªG,Lâ\9d« ⊢ T2 ➡*[h] 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. â¦\83G,Lâ¦\84 ⊢ ⋆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. â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p}W1.T1 ⬌*[h] X →
- â\88\83â\88\83W2,T2. â¦\83G,Lâ¦\84 â\8a¢ X â\9e¡*[h] â\93\9b{p}W2.T2 & â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p}W1.T1 â\9e¡*[h] â\93\9b{p}W2.T2.
+ â\88\80p,W1,T1,X. â\9dªG,Lâ\9d« â\8a¢ â\93\9b[p]W1.T1 ⬌*[h] X →
+ â\88\83â\88\83W2,T2. â\9dªG,Lâ\9d« â\8a¢ X â\9e¡*[h] â\93\9b[p]W2.T2 & â\9dªG,Lâ\9d« â\8a¢ â\93\9b[p]W1.T1 â\9e¡*[h] â\93\9b[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. â¦\83G,Lâ¦\84 â\8a¢ X â¬\8c*[h] â\93\9b{p}W1.T1 →
- â\88\83â\88\83W2,T2. â¦\83G,Lâ¦\84 â\8a¢ X â\9e¡*[h] â\93\9b{p}W2.T2 & â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p}W1.T1 â\9e¡*[h] â\93\9b{p}W2.T2.
+ â\88\80p,W1,T1,X. â\9dªG,Lâ\9d« â\8a¢ X â¬\8c*[h] â\93\9b[p]W1.T1 →
+ â\88\83â\88\83W2,T2. â\9dªG,Lâ\9d« â\8a¢ X â\9e¡*[h] â\93\9b[p]W2.T2 & â\9dªG,Lâ\9d« â\8a¢ â\93\9b[p]W1.T1 â\9e¡*[h] â\93\9b[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. â¦\83G,Lâ¦\84 â\8a¢ â\8b\86s â¬\8c*[h] â\93\9b{p}W.T → ⊥.
+ â\88\80p,W,T,s. â\9dªG,Lâ\9d« â\8a¢ â\8b\86s â¬\8c*[h] â\93\9b[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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cprs_dx (h) (G) (L): â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[h] 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. â¦\83G,Lâ¦\84 â\8a¢ T2 â\9e¡*[h] T1 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cprs_sn (h) (G) (L): â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T2 â\9e¡*[h] 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. â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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] 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. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[h] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â¬\8c*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cprs_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.
#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. â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T2 â\9e¡*[h] T â\86\92 â¦\83G,Lâ¦\84 ⊢ 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] 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. â¦\83G,Lâ¦\84 ⊢ T ➡*[h] T1 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â¬\8c*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2.
+lemma cpcs_cprs_conf (h) (G) (L): â\88\80T1,T. â\9dªG,Lâ\9d« ⊢ T ➡*[h] 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. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[h] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T2 â\9e¡*[h] T â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2.
+lemma 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] 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. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[h] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T2 â\9e¡[h] T â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2.
+lemma cprs_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] 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. â¦\83G,Lâ¦\84 ⊢ T1 ➡[h] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T2 â\9e¡*[h] T â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2.
+lemma cpr_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] 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. â¦\83G,Lâ¦\84 ⊢ T ➡*[h] T1 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2.
+lemma cpr_cprs_conf_cpcs (h) (G) (L): â\88\80T,T1. â\9dªG,Lâ\9d« ⊢ T ➡*[h] T1 →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[h] 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. â¦\83G,Lâ¦\84 ⊢ T ➡*[h] T1 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T2 ⬌*[h] T1.
+lemma cprs_cpr_conf_cpcs (h) (G) (L): â\88\80T,T1. â\9dªG,Lâ\9d« ⊢ T ➡*[h] T1 →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[h] 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. â¦\83G,Lâ¦\84 ⊢ T ➡*[h] T1 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2.
+lemma cprs_conf_cpcs (h) (G) (L): â\88\80T,T1. â\9dªG,Lâ\9d« ⊢ T ➡*[h] T1 →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡*[h] 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. â¦\83G,Lâ¦\84 ⊢ V1 ⬌*[h] V2 →
- â\88\80T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2 →
- â\88\80I. â¦\83G,Lâ¦\84 â\8a¢ â\93\95{I}V1.T1 â¬\8c*[h] â\93\95{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« â\8a¢ â\93\95[I]V1.T1 â¬\8c*[h] â\93\95[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. â¦\83G,Lâ¦\84 ⊢ V2 ➡[h] V1 →
- â\88\80T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2 →
- â\88\80I. â¦\83G,Lâ¦\84 â\8a¢ â\93\95{I}V1.T1 â¬\8c*[h] â\93\95{I}V2.T2.
+lemma cpcs_flat_dx_cpr_rev (h) (G) (L): â\88\80V1,V2. â\9dªG,Lâ\9d« ⊢ V2 ➡[h] V1 →
+ â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2 →
+ â\88\80I. â\9dªG,Lâ\9d« â\8a¢ â\93\95[I]V1.T1 â¬\8c*[h] â\93\95[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. â¦\83G,L.â\93\91{I}Vâ¦\84 ⊢ T1 ⬌*[h] T2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V.T1 â¬\8c*[h] â\93\91{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« â\8a¢ â\93\91[p,I]V.T1 â¬\8c*[h] â\93\91[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. â¦\83G,Lâ¦\84 ⊢ V1 ⬌*[h] V2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T â¬\8c*[h] â\93\91{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« â\8a¢ â\93\91[p,I]V1.T â¬\8c*[h] â\93\91[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. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T1â¦\84 â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ â¬\88*[h] ð\9d\90\92â¦\83T2â¦\84 →
- Decidable â\80¦ (â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h] T2).
+ â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT1â\9d« â\86\92 â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ â¬\88*[h] ð\9d\90\92â\9dªT2â\9d« →
+ Decidable â\80¦ (â\9dªG,Lâ\9d« ⊢ T1 ⬌*[h] T2).
#h #G #L #T1 #HT1 #T2 #HT2
elim (cprre_total_csx … HT1) -HT1 #U1 #HTU1
elim (cprre_total_csx … HT2) -HT2 #U2 #HTU2
(* Properties with parallel r-computation for full local environments *******)
-lemma lpr_cpcs_trans (h) (G): â\88\80L1,L2. â¦\83G,L1â¦\84 ⊢ ➡[h] L2 →
- â\88\80T1,T2. â¦\83G,L2â¦\84 â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â¦\83G,L1â¦\84 ⊢ T1 ⬌*[h] T2.
+lemma lpr_cpcs_trans (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡[h] 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. â¦\83G,L1â¦\84 ⊢ ➡*[h] L2 →
- â\88\80T1,T2. â¦\83G,L2â¦\84 â\8a¢ T1 â¬\8c*[h] T2 â\86\92 â¦\83G,L1â¦\84 ⊢ T1 ⬌*[h] T2.
+lemma lprs_cpcs_trans (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡*[h] 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. â¦\83G,L1â¦\84 ⊢ ➡*[h] L2 →
- â\88\80T1,T2. â¦\83G,L1â¦\84 â\8a¢ T1 â\9e¡*[h] T2 â\86\92 â¦\83G,L2â¦\84 ⊢ T1 ⬌*[h] T2.
+lemma lprs_cprs_conf (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡*[h] L2 →
+ â\88\80T1,T2. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[h] 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. â¦\83G,L1â¦\84 ⊢ ➡[h] L2 →
- â\88\80T1,T2. â¦\83G,L1â¦\84 â\8a¢ T1 â\9e¡*[h] T2 â\86\92 â¦\83G,L2â¦\84 ⊢ T1 ⬌*[h] T2.
+lemma lpr_cprs_conf (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡[h] L2 →
+ â\88\80T1,T2. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡*[h] 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. â¦\83G,L1â¦\84 ⊢ ➡[h] L2 →
- â\88\80T1,T2. â¦\83G,L1â¦\84 â\8a¢ T1 â\9e¡[h] T2 â\86\92 â¦\83G,L2â¦\84 ⊢ T1 ⬌*[h] T2.
+lemma lpr_cpr_conf (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡[h] L2 →
+ â\88\80T1,T2. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡[h] 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_sn (h) (G) (L): â\88\80p1,p2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p1}W1.T1 â¬\8c*[h] â\93\9b{p2}W2.T2 →
- â\88§â\88§ â¦\83G,Lâ¦\84 â\8a¢ W1 â¬\8c*[h] W2 & â¦\83G,L.â\93\9bW1â¦\84 ⊢ T1 ⬌*[h] T2 & p1 = p2.
+lemma cpcs_inv_abst_sn (h) (G) (L): â\88\80p1,p2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ â\93\9b[p1]W1.T1 â¬\8c*[h] â\93\9b[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
/4 width=3 by and3_intro, cprs_div, cpcs_cprs_div, cpcs_sym/
qed-.
-lemma cpcs_inv_abst_dx (h) (G) (L): â\88\80p1,p2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p1}W1.T1 â¬\8c*[h] â\93\9b{p2}W2.T2 →
- â\88§â\88§ â¦\83G,Lâ¦\84 â\8a¢ W1 â¬\8c*[h] W2 & â¦\83G,L.â\93\9bW2â¦\84 ⊢ T1 ⬌*[h] T2 & p1 = p2.
+lemma cpcs_inv_abst_dx (h) (G) (L): â\88\80p1,p2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ â\93\9b[p1]W1.T1 â¬\8c*[h] â\93\9b[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_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. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡*[n1,h] T & â¦\83G,Lâ¦\84 ⊢ T2 ➡*[n2,h] T.
+ â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡*[n1,h] T & â\9dªG,Lâ\9d« ⊢ T2 ➡*[n2,h] 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. â¦\83G,Lâ¦\84 ⊢ T1 ➡*[n1,h] T →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T2 â\9e¡*[n2,h] T â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h,n1,n2] T2.
+ â\88\80G,L,T1,T. â\9dªG,Lâ\9d« ⊢ T1 ➡*[n1,h] T →
+ â\88\80T2. â\9dªG,Lâ\9d« â\8a¢ T2 â\9e¡*[n2,h] 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. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\8c*[h,n1,n2] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T â\81\9d A â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h,n1,n2] T2 →
- â\88\80A1. â¦\83G,Lâ¦\84 â\8a¢ T1 â\81\9d A1 â\86\92 â\88\80A2. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p1}W1.T1 â¬\8c*[h,n1,n2] â\93\9b{p2}W2.T2 →
- â\88§â\88§ p1 = p2 & â¦\83G,Lâ¦\84 ⊢ W1 ⬌*[h,0,O] W2.
+ â\88\80W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ â\93\9b[p1]W1.T1 â¬\8c*[h,n1,n2] â\93\9b[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. â¦\83G,Lâ¦\84 ⊢ T ⬌*[h,n1,0] T1 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\8c*[h,0,n2] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h,n,0] T0 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T0 â\9e¡*[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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] 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. â¦\83G,Lâ¦\84 ⊢ T1 ⬌*[h,n,n1] T0 →
- â\88\80T2. â¦\83G,Lâ¦\84 â\8a¢ T2 â\9e¡*[n2,h] T0 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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¡*[n2,h] 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. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83â\93\9b{p}V.Tâ¦\84 â\86\92 â\88§â\88§ â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83Vâ¦\84 & â¦\83G,L.â\93\9bVâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83Tâ¦\84.
+ â\88\80V,T. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªâ\93\9b[p]V.Tâ\9d« â\86\92 â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªVâ\9d« & â\9dªG,L.â\93\9bVâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªTâ\9d«.
#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 //
+[ #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 //
]
qed-.
(* Basic_2A1: was: cnr_inv_abbr *)
lemma cnr_inv_abbr_neg (h) (G) (L):
- â\88\80V,T. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83-â\93\93V.Tâ¦\84 â\86\92 â\88§â\88§ â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83Vâ¦\84 & â¦\83G,L.â\93\93Vâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83Tâ¦\84.
+ â\88\80V,T. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dª-â\93\93V.Tâ\9d« â\86\92 â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªVâ\9d« & â\9dªG,L.â\93\93Vâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªTâ\9d«.
#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 //
qed-.
(* Basic_2A1: was: cnr_inv_eps *)
-lemma cnr_inv_cast (h) (G) (L): â\88\80V,T. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83â\93\9dV.Tâ¦\84 → ⊥.
+lemma cnr_inv_cast (h) (G) (L): â\88\80V,T. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªâ\93\9dV.Tâ\9d« → ⊥.
#h #G #L #V #T #H lapply (H T ?) -H
/2 width=4 by cpm_eps, discr_tpair_xy_y/
qed-.
(* Basic properties *********************************************************)
(* Basic_1: was: nf2_sort *)
-lemma cnr_sort (h) (G) (L): â\88\80s. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83â\8b\86sâ¦\84.
+lemma cnr_sort (h) (G) (L): â\88\80s. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªâ\8b\86sâ\9d«.
#h #G #L #s #X #H
>(cpr_inv_sort1 … H) //
qed.
-lemma cnr_gref (h) (G) (L): â\88\80l. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83§lâ¦\84.
+lemma cnr_gref (h) (G) (L): â\88\80l. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªÂ§lâ\9d«.
#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. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83Wâ¦\84 â\86\92 â¦\83G,L.â\93\9bWâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83â\93\9b{p}W.Tâ¦\84.
+ â\88\80W,T. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªWâ\9d« â\86\92 â\9dªG,L.â\93\9bWâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªTâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªâ\93\9b[p]W.Tâ\9d«.
#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. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83Vâ¦\84 â\86\92 â¦\83G,L.â\93\93Vâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83-â\93\93V.Tâ¦\84.
+ â\88\80V,T. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªVâ\9d« â\86\92 â\9dªG,L.â\93\93Vâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªTâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dª-â\93\93V.Tâ\9d«.
#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 â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83#iâ¦\84.
+ â\88\80i. â\87©*[b,ð\9d\90\94â\9d¨iâ\9d©] L â\89\98 â\8b\86 â\86\92 â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dª#iâ\9d«.
#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 â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83#iâ¦\84.
+ â\88\80K,V,i. â\87©*[i] L â\89\98 K.â\93\9bV â\86\92 â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dª#iâ\9d«.
#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):
- ∀K,i. ⇩*[i] L ≘ K.ⓤ{I} → ⦃G,L⦄ ⊢ ➡[h] 𝐍⦃#i⦄.
+ ∀K,i. ⇩*[i] L ≘ K.ⓤ[I] → ❪G,L❫ ⊢ ➡[h] 𝐍❪#i❫.
#h #I #G #L #K #i #HLK #X #H
elim (cpr_inv_lref1_drops … H) -H // *
#K0 #V1 #V2 #HLK0 #_ #_
(* Basic_2A1: was: cnr_inv_delta *)
lemma cnr_inv_lref_abbr (h) (G) (L):
- â\88\80K,V,i. â\87©*[i] L â\89\98 K.â\93\93V â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83#iâ¦\84 → ⊥.
+ â\88\80K,V,i. â\87©*[i] L â\89\98 K.â\93\93V â\86\92 â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dª#iâ\9d« → ⊥.
#h #G #L #K #V #i #HLK #H
-elim (lifts_total V ð\9d\90\94â\9d´â\86\91iâ\9dµ) #W #HVW
+elim (lifts_total V ð\9d\90\94â\9d¨â\86\91iâ\9d©) #W #HVW
lapply (H W ?) -H [ /3 width=6 by cpm_delta_drops/ ] -HLK #H destruct
elim (lifts_inv_lref2_uni_lt … HVW) -HVW //
qed-.
(* Inversion lemmas with simple terms ***************************************)
lemma cnr_inv_appl (h) (G) (L):
- â\88\80V,T. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83â\93\90V.Tâ¦\84 â\86\92 â\88§â\88§ â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83Vâ¦\84 & â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83Tâ¦\84 & ð\9d\90\92â¦\83Tâ¦\84.
+ â\88\80V,T. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªâ\93\90V.Tâ\9d« â\86\92 â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªVâ\9d« & â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªTâ\9d« & ð\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 //
| generalize in match HVT1; -HVT1 elim T1 -T1 * // #a * #W1 #U1 #_ #_ #H
- [ elim (lifts_total V1 ð\9d\90\94â\9d´1â\9dµ) #V2 #HV12
- lapply (H (ⓓ{a}W1.ⓐV2.U1) ?) -H /2 width=3 by cpm_theta/ -HV12 #H destruct
- | lapply (H (ⓓ{a}ⓝW1.V1.U1) ?) -H /2 width=1 by cpm_beta/ #H destruct
+ [ elim (lifts_total V1 ð\9d\90\94â\9d¨1â\9d©) #V2 #HV12
+ lapply (H (ⓓ[a]W1.ⓐV2.U1) ?) -H /2 width=3 by cpm_theta/ -HV12 #H destruct
+ | lapply (H (ⓓ[a]ⓝW1.V1.U1) ?) -H /2 width=1 by cpm_beta/ #H destruct
]
]
qed-.
(* Basic_1: was only: nf2_appl_lref *)
lemma cnr_appl_simple (h) (G) (L):
- â\88\80V,T. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83Vâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83Tâ¦\84 â\86\92 ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83â\93\90V.Tâ¦\84.
+ â\88\80V,T. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªVâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªTâ\9d« â\86\92 ð\9d\90\92â\9dªTâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªâ\93\90V.Tâ\9d«.
#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_teqx (h) (G) (L):
- â\88\80T1. â\88¨â\88¨ â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] ð\9d\90\8dâ¦\83T1â¦\84
- | â\88\83â\88\83T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡[h] T2 & (T1 ≛ T2 → ⊥).
+ â\88\80T1. â\88¨â\88¨ â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] ð\9d\90\8dâ\9dªT1â\9d«
+ | â\88\83â\88\83T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[h] T2 & (T1 ≛ T2 → ⊥).
#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
[ /3 width=6 by cnr_lref_atom, or_introl/
| * * [ #I | * #V ] #K #HLK
[ /3 width=7 by cnr_lref_unit, or_introl/
- | elim (lifts_total V ð\9d\90\94â\9d´â\86\91iâ\9dµ) #W #HVW
+ | elim (lifts_total V ð\9d\90\94â\9d¨â\86\91iâ\9d©) #W #HVW
@or_intror @(ex2_intro … W) [ /2 width=6 by cpm_delta_drops/ ] #H
lapply (teqx_inv_lref1 … H) -H #H destruct
/2 width=5 by lifts_inv_lref2_uni_lt/
| elim (IH G L V1) [ elim (IH G (L.ⓛV1) T1) [| * | // ] | * | // ] -IH
[ #HT1 #HV1 /3 width=6 by cnr_abst, or_introl/
| #T2 #HT12 #HnT12 #_
- @or_intror @(ex2_intro … (ⓛ{p}V1.T2)) [ /2 width=1 by cpm_bind/ ] #H
+ @or_intror @(ex2_intro … (ⓛ[p]V1.T2)) [ /2 width=1 by cpm_bind/ ] #H
elim (teqx_inv_pair … H) -H /2 width=1 by/
| #V2 #HV12 #HnV12
- @or_intror @(ex2_intro … (ⓛ{p}V2.T1)) [ /2 width=1 by cpr_pair_sn/ ] #H
+ @or_intror @(ex2_intro … (ⓛ[p]V2.T1)) [ /2 width=1 by cpr_pair_sn/ ] #H
elim (teqx_inv_pair … H) -H /2 width=1 by/
]
]
[ #HT1 #HV1
elim (simple_dec_ex T1) [| * #p * #W1 #U1 #H destruct ]
[ /3 width=6 by cnr_appl_simple, or_introl/
- | elim (lifts_total V1 ð\9d\90\94â\9d´1â\9dµ) #X1 #HVX1
- @or_intror @(ex2_intro … (ⓓ{p}W1.ⓐX1.U1)) [ /2 width=3 by cpm_theta/ ] #H
+ | elim (lifts_total V1 ð\9d\90\94â\9d¨1â\9d©) #X1 #HVX1
+ @or_intror @(ex2_intro … (ⓓ[p]W1.ⓐX1.U1)) [ /2 width=3 by cpm_theta/ ] #H
elim (teqx_inv_pair … H) -H #H destruct
- | @or_intror @(ex2_intro … (ⓓ{p}ⓝW1.V1.U1)) [ /2 width=1 by cpm_beta/ ] #H
+ | @or_intror @(ex2_intro … (ⓓ[p]ⓝW1.V1.U1)) [ /2 width=1 by cpm_beta/ ] #H
elim (teqx_inv_pair … H) -H #H destruct
]
| #T2 #HT12 #HnT12 #_
(* Basic inversion lemmas ***************************************************)
-lemma cnx_inv_abst: â\88\80h,p,G,L,V,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83â\93\9b{p}V.Tâ¦\84 →
- â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83Vâ¦\84 â\88§ â¦\83G,L.â\93\9bVâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83Tâ¦\84.
+lemma cnx_inv_abst: â\88\80h,p,G,L,V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªâ\93\9b[p]V.Tâ\9d« →
+ â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªVâ\9d« â\88§ â\9dªG,L.â\93\9bVâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªTâ\9d«.
#h #p #G #L #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
+[ #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
]
#H elim (teqx_inv_pair … H) -H //
qed-.
(* Basic_2A1: was: cnx_inv_abbr *)
-lemma cnx_inv_abbr_neg: â\88\80h,G,L,V,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83-â\93\93V.Tâ¦\84 →
- â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83Vâ¦\84 â\88§ â¦\83G,L.â\93\93Vâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83Tâ¦\84.
+lemma cnx_inv_abbr_neg: â\88\80h,G,L,V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dª-â\93\93V.Tâ\9d« →
+ â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªVâ\9d« â\88§ â\9dªG,L.â\93\93Vâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªTâ\9d«.
#h #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
qed-.
(* Basic_2A1: was: cnx_inv_eps *)
-lemma cnx_inv_cast: â\88\80h,G,L,V,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83â\93\9dV.Tâ¦\84 → ⊥.
+lemma cnx_inv_cast: â\88\80h,G,L,V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªâ\93\9dV.Tâ\9d« → ⊥.
#h #G #L #V #T #H lapply (H T ?) -H
/2 width=6 by cpx_eps, teqx_inv_pair_xy_y/
qed-.
(* Basic properties *********************************************************)
-lemma cnx_sort: â\88\80h,G,L,s. â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83â\8b\86sâ¦\84.
+lemma cnx_sort: â\88\80h,G,L,s. â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªâ\8b\86sâ\9d«.
#h #G #L #s #X #H elim (cpx_inv_sort1 … H) -H
/2 width=1 by teqx_sort/
qed.
-lemma cnx_abst: â\88\80h,p,G,L,W,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83Wâ¦\84 â\86\92 â¦\83G,L.â\93\9bWâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83Tâ¦\84 →
- â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83â\93\9b{p}W.Tâ¦\84.
+lemma cnx_abst: â\88\80h,p,G,L,W,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªWâ\9d« â\86\92 â\9dªG,L.â\93\9bWâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªTâ\9d« →
+ â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªâ\93\9b[p]W.Tâ\9d«.
#h #p #G #L #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 (h) (G) (L): â\88\80V,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83+â\93\93V.Tâ¦\84 → ⊥.
+lemma cnx_inv_abbr_pos (h) (G) (L): â\88\80V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dª+â\93\93V.Tâ\9d« → ⊥.
#h #G #L #V #U1 #H
elim (cpx_subst h 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: â\88\80h,G,L,T1. â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83T1â¦\84 →
- â\88\80T2. T1 â\89\9b T2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83T2â¦\84.
+lemma cnx_teqx_trans: â\88\80h,G,L,T1. â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªT1â\9d« →
+ â\88\80T2. T1 â\89\9b T2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªT2â\9d«.
#h #G #L #T1 #HT1 #T2 #HT12 #T #HT2
elim (teqx_cpx_trans … HT12 … HT2) -HT2 #T0 #HT10 #HT0
lapply (HT1 … HT10) -HT1 -HT10 /2 width=5 by teqx_repl/ (**) (* full auto fails *)
(* Properties with generic slicing ******************************************)
-lemma cnx_lref_atom: â\88\80h,G,L,i. â\87©*[i] L â\89\98 â\8b\86 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83#iâ¦\84.
+lemma cnx_lref_atom: â\88\80h,G,L,i. â\87©*[i] L â\89\98 â\8b\86 â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dª#iâ\9d«.
#h #G #L #i #Hi #X #H elim (cpx_inv_lref1_drops … H) -H // *
#I #K #V1 #V2 #HLK lapply (drops_mono … Hi … HLK) -L #H destruct
qed.
-lemma cnx_lref_unit: ∀h,I,G,L,K,i. ⇩*[i] L ≘ K.ⓤ{I} → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃#i⦄.
+lemma cnx_lref_unit: ∀h,I,G,L,K,i. ⇩*[i] L ≘ K.ⓤ[I] → ❪G,L❫ ⊢ ⬈[h] 𝐍❪#i❫.
#h #I #G #L #K #i #HLK #X #H elim (cpx_inv_lref1_drops … H) -H // *
#Z #Y #V1 #V2 #HLY lapply (drops_mono … HLK … HLY) -L #H destruct
qed.
(* Inversion lemmas with generic slicing ************************************)
(* Basic_2A1: was: cnx_inv_delta *)
-lemma cnx_inv_lref_pair: ∀h,I,G,L,K,V,i. ⇩*[i] L ≘ K.ⓑ{I}V → ⦃G,L⦄ ⊢ ⬈[h] 𝐍⦃#i⦄ → ⊥.
+lemma cnx_inv_lref_pair: ∀h,I,G,L,K,V,i. ⇩*[i] L ≘ K.ⓑ[I]V → ❪G,L❫ ⊢ ⬈[h] 𝐍❪#i❫ → ⊥.
#h #I #G #L #K #V #i #HLK #H
-elim (lifts_total V (ð\9d\90\94â\9d´â\86\91iâ\9dµ)) #W #HVW
+elim (lifts_total V (ð\9d\90\94â\9d¨â\86\91iâ\9d©)) #W #HVW
lapply (H W ?) -H /2 width=7 by cpx_delta_drops/ -HLK
#H lapply (teqx_inv_lref1 … H) -H #H destruct
/2 width=5 by lifts_inv_lref2_uni_lt/
(* Inversion lemmas with simple terms ***************************************)
-lemma cnx_inv_appl: â\88\80h,G,L,V,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83â\93\90V.Tâ¦\84 →
- â\88§â\88§ â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83Vâ¦\84 & â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83Tâ¦\84 & ð\9d\90\92â¦\83Tâ¦\84.
+lemma cnx_inv_appl: â\88\80h,G,L,V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªâ\93\90V.Tâ\9d« →
+ â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªVâ\9d« & â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªTâ\9d« & ð\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 cpx_pair_sn/ -HV2
#H elim (teqx_inv_pair … H) -H //
#H elim (teqx_inv_pair … H) -H //
| generalize in match HVT1; -HVT1 elim T1 -T1 * //
#p * #W1 #U1 #_ #_ #H
- [ elim (lifts_total V1 (ð\9d\90\94â\9d´1â\9dµ)) #V2 #HV12
- lapply (H (ⓓ{p}W1.ⓐV2.U1) ?) -H /2 width=3 by cpx_theta/ -HV12
+ [ elim (lifts_total V1 (ð\9d\90\94â\9d¨1â\9d©)) #V2 #HV12
+ lapply (H (ⓓ[p]W1.ⓐV2.U1) ?) -H /2 width=3 by cpx_theta/ -HV12
#H elim (teqx_inv_pair … H) -H #H destruct
- | lapply (H (ⓓ{p}ⓝW1.V1.U1) ?) -H /2 width=1 by cpx_beta/
+ | lapply (H (ⓓ[p]ⓝW1.V1.U1) ?) -H /2 width=1 by cpx_beta/
#H elim (teqx_inv_pair … H) -H #H destruct
]
]
(* Properties with simple terms *********************************************)
-lemma cnx_appl_simple: â\88\80h,G,L,V,T. â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83Vâ¦\84 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83Tâ¦\84 â\86\92 ð\9d\90\92â¦\83Tâ¦\84 →
- â¦\83G,Lâ¦\84 â\8a¢ â¬\88[h] ð\9d\90\8dâ¦\83â\93\90V.Tâ¦\84.
+lemma cnx_appl_simple: â\88\80h,G,L,V,T. â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªVâ\9d« â\86\92 â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªTâ\9d« â\86\92 ð\9d\90\92â\9dªTâ\9d« →
+ â\9dªG,Lâ\9d« â\8a¢ â¬\88[h] ð\9d\90\8dâ\9dªâ\93\90V.Tâ\9d«.
#h #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 *)
(* avtivate genv *)
inductive cpg (Rt:relation rtc) (h): rtc → relation4 genv lenv term term ≝
-| cpg_atom : ∀I,G,L. cpg Rt h (𝟘𝟘) G L (⓪{I}) (⓪{I})
+| cpg_atom : ∀I,G,L. cpg Rt h (𝟘𝟘) G L (⓪[I]) (⓪[I])
| cpg_ess : ∀G,L,s. cpg Rt h (𝟘𝟙) G L (⋆s) (⋆(⫯[h]s))
| cpg_delta: ∀c,G,L,V1,V2,W2. cpg Rt h c G L V1 V2 →
⇧*[1] V2 ≘ W2 → cpg Rt h c G (L.ⓓV1) (#0) W2
| cpg_ell : ∀c,G,L,V1,V2,W2. cpg Rt h c G L V1 V2 →
⇧*[1] V2 ≘ W2 → cpg Rt h (c+𝟘𝟙) G (L.ⓛV1) (#0) W2
| cpg_lref : ∀c,I,G,L,T,U,i. cpg Rt h c G L (#i) T →
- ⇧*[1] T ≘ U → cpg Rt h c G (L.ⓘ{I}) (#↑i) U
+ ⇧*[1] T ≘ U → cpg Rt h c G (L.ⓘ[I]) (#↑i) U
| cpg_bind : ∀cV,cT,p,I,G,L,V1,V2,T1,T2.
- cpg Rt h cV G L V1 V2 → cpg Rt h cT G (L.ⓑ{I}V1) T1 T2 →
- cpg Rt h ((↕*cV)∨cT) G L (ⓑ{p,I}V1.T1) (ⓑ{p,I}V2.T2)
+ cpg Rt h cV G L V1 V2 → cpg Rt h cT G (L.ⓑ[I]V1) T1 T2 →
+ cpg Rt h ((↕*cV)∨cT) G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2)
| cpg_appl : ∀cV,cT,G,L,V1,V2,T1,T2.
cpg Rt h cV G L V1 V2 → cpg Rt h cT G L T1 T2 →
cpg Rt h ((↕*cV)∨cT) G L (ⓐV1.T1) (ⓐV2.T2)
| cpg_ee : ∀c,G,L,V1,V2,T. cpg Rt h c G L V1 V2 → cpg Rt h (c+𝟘𝟙) G L (ⓝV1.T) V2
| cpg_beta : ∀cV,cW,cT,p,G,L,V1,V2,W1,W2,T1,T2.
cpg Rt h cV G L V1 V2 → cpg Rt h cW G L W1 W2 → cpg Rt h cT G (L.ⓛW1) T1 T2 →
- cpg Rt h (((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓛ{p}W1.T1) (ⓓ{p}ⓝW2.V2.T2)
+ cpg Rt h (((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓛ[p]W1.T1) (ⓓ[p]ⓝW2.V2.T2)
| cpg_theta: ∀cV,cW,cT,p,G,L,V1,V,V2,W1,W2,T1,T2.
cpg Rt h cV G L V1 V → ⇧*[1] V ≘ V2 → cpg Rt h cW G L W1 W2 →
cpg Rt h cT G (L.ⓓW1) T1 T2 →
- cpg Rt h (((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓓ{p}W1.T1) (ⓓ{p}W2.ⓐV2.T2)
+ cpg Rt h (((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘) G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2)
.
interpretation
(* Basic properties *********************************************************)
(* Note: this is "∀Rt. reflexive … Rt → ∀h,g,L. reflexive … (cpg Rt h (𝟘𝟘) L)" *)
-lemma cpg_refl: â\88\80Rt. reflexive â\80¦ Rt â\86\92 â\88\80h,G,T,L. â¦\83G,Lâ¦\84 ⊢ T ⬈[Rt,𝟘𝟘,h] T.
+lemma cpg_refl: â\88\80Rt. reflexive â\80¦ Rt â\86\92 â\88\80h,G,T,L. â\9dªG,Lâ\9d« ⊢ T ⬈[Rt,𝟘𝟘,h] T.
#Rt #HRt #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: â\88\80Rt,c,h,G,L,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88[Rt,c,h] T2 â\86\92 â\88\80J. T1 = â\93ª{J} →
- ∨∨ T2 = ⓪{J} ∧ c = 𝟘𝟘
+fact cpg_inv_atom1_aux: â\88\80Rt,c,h,G,L,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88[Rt,c,h] T2 â\86\92 â\88\80J. T1 = â\93ª[J] →
+ ∨∨ T2 = ⓪[J] ∧ c = 𝟘𝟘
| ∃∃s. J = Sort s & T2 = ⋆(⫯[h]s) & c = 𝟘𝟙
- | â\88\83â\88\83cV,K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 &
L = K.ⓓV1 & J = LRef 0 & c = cV
- | â\88\83â\88\83cV,K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 &
L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙
- | â\88\83â\88\83I,K,T,i. â¦\83G,Kâ¦\84 ⊢ #i ⬈[Rt,c,h] T & ⇧*[1] T ≘ T2 &
- L = K.ⓘ{I} & J = LRef (↑i).
+ | â\88\83â\88\83I,K,T,i. â\9dªG,Kâ\9d« ⊢ #i ⬈[Rt,c,h] T & ⇧*[1] T ≘ T2 &
+ L = K.ⓘ[I] & J = LRef (↑i).
#Rt #c #h #G #L #T1 #T2 * -c -G -L -T1 -T2
[ #I #G #L #J #H destruct /3 width=1 by or5_intro0, conj/
| #G #L #s #J #H destruct /3 width=3 by or5_intro1, ex3_intro/
]
qed-.
-lemma cpg_inv_atom1: â\88\80Rt,c,h,J,G,L,T2. â¦\83G,Lâ¦\84 â\8a¢ â\93ª{J} ⬈[Rt,c,h] T2 →
- ∨∨ T2 = ⓪{J} ∧ c = 𝟘𝟘
+lemma cpg_inv_atom1: â\88\80Rt,c,h,J,G,L,T2. â\9dªG,Lâ\9d« â\8a¢ â\93ª[J] ⬈[Rt,c,h] T2 →
+ ∨∨ T2 = ⓪[J] ∧ c = 𝟘𝟘
| ∃∃s. J = Sort s & T2 = ⋆(⫯[h]s) & c = 𝟘𝟙
- | â\88\83â\88\83cV,K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 &
L = K.ⓓV1 & J = LRef 0 & c = cV
- | â\88\83â\88\83cV,K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 &
L = K.ⓛV1 & J = LRef 0 & c = cV+𝟘𝟙
- | â\88\83â\88\83I,K,T,i. â¦\83G,Kâ¦\84 ⊢ #i ⬈[Rt,c,h] T & ⇧*[1] T ≘ T2 &
- L = K.ⓘ{I} & J = LRef (↑i).
+ | â\88\83â\88\83I,K,T,i. â\9dªG,Kâ\9d« ⊢ #i ⬈[Rt,c,h] T & ⇧*[1] T ≘ T2 &
+ L = K.ⓘ[I] & J = LRef (↑i).
/2 width=3 by cpg_inv_atom1_aux/ qed-.
-lemma cpg_inv_sort1: â\88\80Rt,c,h,G,L,T2,s. â¦\83G,Lâ¦\84 ⊢ ⋆s ⬈[Rt,c,h] T2 →
+lemma cpg_inv_sort1: â\88\80Rt,c,h,G,L,T2,s. â\9dªG,Lâ\9d« ⊢ ⋆s ⬈[Rt,c,h] T2 →
∨∨ T2 = ⋆s ∧ c = 𝟘𝟘 | T2 = ⋆(⫯[h]s) ∧ c = 𝟘𝟙.
#Rt #c #h #G #L #T2 #s #H
elim (cpg_inv_atom1 … H) -H * /3 width=1 by or_introl, conj/
]
qed-.
-lemma cpg_inv_zero1: â\88\80Rt,c,h,G,L,T2. â¦\83G,Lâ¦\84 ⊢ #0 ⬈[Rt,c,h] T2 →
+lemma cpg_inv_zero1: â\88\80Rt,c,h,G,L,T2. â\9dªG,Lâ\9d« ⊢ #0 ⬈[Rt,c,h] T2 →
∨∨ T2 = #0 ∧ c = 𝟘𝟘
- | â\88\83â\88\83cV,K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 &
L = K.ⓓV1 & c = cV
- | â\88\83â\88\83cV,K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 &
+ | â\88\83â\88\83cV,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 &
L = K.ⓛV1 & c = cV+𝟘𝟙.
#Rt #c #h #G #L #T2 #H
elim (cpg_inv_atom1 … H) -H * /3 width=1 by or3_intro0, conj/
]
qed-.
-lemma cpg_inv_lref1: â\88\80Rt,c,h,G,L,T2,i. â¦\83G,Lâ¦\84 ⊢ #↑i ⬈[Rt,c,h] T2 →
+lemma cpg_inv_lref1: â\88\80Rt,c,h,G,L,T2,i. â\9dªG,Lâ\9d« ⊢ #↑i ⬈[Rt,c,h] T2 →
∨∨ T2 = #(↑i) ∧ c = 𝟘𝟘
- | â\88\83â\88\83I,K,T. â¦\83G,Kâ¦\84 â\8a¢ #i â¬\88[Rt,c,h] T & â\87§*[1] T â\89\98 T2 & L = K.â\93\98{I}.
+ | â\88\83â\88\83I,K,T. â\9dªG,Kâ\9d« â\8a¢ #i â¬\88[Rt,c,h] T & â\87§*[1] T â\89\98 T2 & L = K.â\93\98[I].
#Rt #c #h #G #L #T2 #i #H
elim (cpg_inv_atom1 … H) -H * /3 width=1 by or_introl, conj/
[ #s #H destruct
]
qed-.
-lemma cpg_inv_gref1: â\88\80Rt,c,h,G,L,T2,l. â¦\83G,Lâ¦\84 ⊢ §l ⬈[Rt,c,h] T2 → T2 = §l ∧ c = 𝟘𝟘.
+lemma cpg_inv_gref1: â\88\80Rt,c,h,G,L,T2,l. â\9dªG,Lâ\9d« ⊢ §l ⬈[Rt,c,h] T2 → T2 = §l ∧ c = 𝟘𝟘.
#Rt #c #h #G #L #T2 #l #H
elim (cpg_inv_atom1 … H) -H * /2 width=1 by conj/
[ #s #H destruct
]
qed-.
-fact cpg_inv_bind1_aux: â\88\80Rt,c,h,G,L,U,U2. â¦\83G,Lâ¦\84 ⊢ U ⬈[Rt,c,h] U2 →
- ∀p,J,V1,U1. U = ⓑ{p,J}V1.U1 →
- â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â¦\83G,L.â\93\91{J}V1â¦\84 ⊢ U1 ⬈[Rt,cT,h] T2 &
- U2 = ⓑ{p,J}V2.T2 & c = ((↕*cV)∨cT)
- | â\88\83â\88\83cT,T. â\87§*[1] T â\89\98 U1 & â¦\83G,Lâ¦\84 ⊢ T ⬈[Rt,cT,h] U2 &
+fact cpg_inv_bind1_aux: â\88\80Rt,c,h,G,L,U,U2. â\9dªG,Lâ\9d« ⊢ U ⬈[Rt,c,h] 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[Rt,cV,h] V2 & â\9dªG,L.â\93\91[J]V1â\9d« ⊢ U1 ⬈[Rt,cT,h] 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 ⬈[Rt,cT,h] U2 &
p = true & J = Abbr & c = cT+𝟙𝟘.
#Rt #c #h #G #L #U #U2 * -c -G -L -U -U2
[ #I #G #L #q #J #W #U1 #H destruct
]
qed-.
-lemma cpg_inv_bind1: â\88\80Rt,c,h,p,I,G,L,V1,T1,U2. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 ⬈[Rt,c,h] U2 →
- â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â¦\83G,L.â\93\91{I}V1â¦\84 ⊢ T1 ⬈[Rt,cT,h] T2 &
- U2 = ⓑ{p,I}V2.T2 & c = ((↕*cV)∨cT)
- | â\88\83â\88\83cT,T. â\87§*[1] T â\89\98 T1 & â¦\83G,Lâ¦\84 ⊢ T ⬈[Rt,cT,h] U2 &
+lemma cpg_inv_bind1: â\88\80Rt,c,h,p,I,G,L,V1,T1,U2. â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V1.T1 ⬈[Rt,c,h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ⬈[Rt,cT,h] 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 ⬈[Rt,cT,h] U2 &
p = true & I = Abbr & c = cT+𝟙𝟘.
/2 width=3 by cpg_inv_bind1_aux/ qed-.
-lemma cpg_inv_abbr1: â\88\80Rt,c,h,p,G,L,V1,T1,U2. â¦\83G,Lâ¦\84 â\8a¢ â\93\93{p}V1.T1 ⬈[Rt,c,h] U2 →
- â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â¦\83G,L.â\93\93V1â¦\84 ⊢ T1 ⬈[Rt,cT,h] T2 &
- U2 = ⓓ{p}V2.T2 & c = ((↕*cV)∨cT)
- | â\88\83â\88\83cT,T. â\87§*[1] T â\89\98 T1 & â¦\83G,Lâ¦\84 ⊢ T ⬈[Rt,cT,h] U2 &
+lemma cpg_inv_abbr1: â\88\80Rt,c,h,p,G,L,V1,T1,U2. â\9dªG,Lâ\9d« â\8a¢ â\93\93[p]V1.T1 ⬈[Rt,c,h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\9dªG,L.â\93\93V1â\9d« ⊢ T1 ⬈[Rt,cT,h] T2 &
+ U2 = ⓓ[p]V2.T2 & c = ((↕*cV)∨cT)
+ | â\88\83â\88\83cT,T. â\87§*[1] T â\89\98 T1 & â\9dªG,Lâ\9d« ⊢ T ⬈[Rt,cT,h] U2 &
p = true & c = cT+𝟙𝟘.
#Rt #c #h #p #G #L #V1 #T1 #U2 #H elim (cpg_inv_bind1 … H) -H *
/3 width=8 by ex4_4_intro, ex4_2_intro, or_introl, or_intror/
qed-.
-lemma cpg_inv_abst1: â\88\80Rt,c,h,p,G,L,V1,T1,U2. â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p}V1.T1 ⬈[Rt,c,h] U2 →
- â\88\83â\88\83cV,cT,V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â¦\83G,L.â\93\9bV1â¦\84 ⊢ T1 ⬈[Rt,cT,h] T2 &
- U2 = ⓛ{p}V2.T2 & c = ((↕*cV)∨cT).
+lemma cpg_inv_abst1: â\88\80Rt,c,h,p,G,L,V1,T1,U2. â\9dªG,Lâ\9d« â\8a¢ â\93\9b[p]V1.T1 ⬈[Rt,c,h] U2 →
+ â\88\83â\88\83cV,cT,V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\9dªG,L.â\93\9bV1â\9d« ⊢ T1 ⬈[Rt,cT,h] T2 &
+ U2 = ⓛ[p]V2.T2 & c = ((↕*cV)∨cT).
#Rt #c #h #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: â\88\80Rt,c,h,G,L,U,U2. â¦\83G,Lâ¦\84 ⊢ U ⬈[Rt,c,h] U2 →
+fact cpg_inv_appl1_aux: â\88\80Rt,c,h,G,L,U,U2. â\9dªG,Lâ\9d« ⊢ U ⬈[Rt,c,h] U2 →
∀V1,U1. U = ⓐV1.U1 →
- â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â¦\83G,Lâ¦\84 ⊢ U1 ⬈[Rt,cT,h] T2 &
+ â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\9dªG,Lâ\9d« ⊢ U1 ⬈[Rt,cT,h] T2 &
U2 = ⓐV2.T2 & c = ((↕*cV)∨cT)
- | â\88\83â\88\83cV,cW,cT,p,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â¦\83G,Lâ¦\84 â\8a¢ W1 â¬\88[Rt,cW,h] W2 & â¦\83G,L.â\93\9bW1â¦\84 ⊢ T1 ⬈[Rt,cT,h] T2 &
- U1 = ⓛ{p}W1.T1 & U2 = ⓓ{p}ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘
- | â\88\83â\88\83cV,cW,cT,p,V,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V & â\87§*[1] V â\89\98 V2 & â¦\83G,Lâ¦\84 â\8a¢ W1 â¬\88[Rt,cW,h] W2 & â¦\83G,L.â\93\93W1â¦\84 ⊢ T1 ⬈[Rt,cT,h] T2 &
- U1 = ⓓ{p}W1.T1 & U2 = ⓓ{p}W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘.
+ | â\88\83â\88\83cV,cW,cT,p,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88[Rt,cW,h] W2 & â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ⬈[Rt,cT,h] T2 &
+ U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘
+ | â\88\83â\88\83cV,cW,cT,p,V,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rt,cV,h] V & â\87§*[1] V â\89\98 V2 & â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88[Rt,cW,h] W2 & â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ⬈[Rt,cT,h] T2 &
+ U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘.
#Rt #c #h #G #L #U #U2 * -c -G -L -U -U2
[ #I #G #L #W #U1 #H destruct
| #G #L #s #W #U1 #H destruct
]
qed-.
-lemma cpg_inv_appl1: â\88\80Rt,c,h,G,L,V1,U1,U2. â¦\83G,Lâ¦\84 ⊢ ⓐV1.U1 ⬈[Rt,c,h] U2 →
- â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â¦\83G,Lâ¦\84 ⊢ U1 ⬈[Rt,cT,h] T2 &
+lemma cpg_inv_appl1: â\88\80Rt,c,h,G,L,V1,U1,U2. â\9dªG,Lâ\9d« ⊢ ⓐV1.U1 ⬈[Rt,c,h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\9dªG,Lâ\9d« ⊢ U1 ⬈[Rt,cT,h] T2 &
U2 = ⓐV2.T2 & c = ((↕*cV)∨cT)
- | â\88\83â\88\83cV,cW,cT,p,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â¦\83G,Lâ¦\84 â\8a¢ W1 â¬\88[Rt,cW,h] W2 & â¦\83G,L.â\93\9bW1â¦\84 ⊢ T1 ⬈[Rt,cT,h] T2 &
- U1 = ⓛ{p}W1.T1 & U2 = ⓓ{p}ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘
- | â\88\83â\88\83cV,cW,cT,p,V,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V & â\87§*[1] V â\89\98 V2 & â¦\83G,Lâ¦\84 â\8a¢ W1 â¬\88[Rt,cW,h] W2 & â¦\83G,L.â\93\93W1â¦\84 ⊢ T1 ⬈[Rt,cT,h] T2 &
- U1 = ⓓ{p}W1.T1 & U2 = ⓓ{p}W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘.
+ | â\88\83â\88\83cV,cW,cT,p,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88[Rt,cW,h] W2 & â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ⬈[Rt,cT,h] T2 &
+ U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘
+ | â\88\83â\88\83cV,cW,cT,p,V,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rt,cV,h] V & â\87§*[1] V â\89\98 V2 & â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88[Rt,cW,h] W2 & â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ⬈[Rt,cT,h] T2 &
+ U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2 & c = ((↕*cV)∨(↕*cW)∨cT)+𝟙𝟘.
/2 width=3 by cpg_inv_appl1_aux/ qed-.
-fact cpg_inv_cast1_aux: â\88\80Rt,c,h,G,L,U,U2. â¦\83G,Lâ¦\84 ⊢ U ⬈[Rt,c,h] U2 →
+fact cpg_inv_cast1_aux: â\88\80Rt,c,h,G,L,U,U2. â\9dªG,Lâ\9d« ⊢ U ⬈[Rt,c,h] U2 →
∀V1,U1. U = ⓝV1.U1 →
- â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â¦\83G,Lâ¦\84 ⊢ U1 ⬈[Rt,cT,h] T2 &
+ â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\9dªG,Lâ\9d« ⊢ U1 ⬈[Rt,cT,h] T2 &
Rt cV cT & U2 = ⓝV2.T2 & c = (cV∨cT)
- | â\88\83â\88\83cT. â¦\83G,Lâ¦\84 ⊢ U1 ⬈[Rt,cT,h] U2 & c = cT+𝟙𝟘
- | â\88\83â\88\83cV. â¦\83G,Lâ¦\84 ⊢ V1 ⬈[Rt,cV,h] U2 & c = cV+𝟘𝟙.
+ | â\88\83â\88\83cT. â\9dªG,Lâ\9d« ⊢ U1 ⬈[Rt,cT,h] U2 & c = cT+𝟙𝟘
+ | â\88\83â\88\83cV. â\9dªG,Lâ\9d« ⊢ V1 ⬈[Rt,cV,h] U2 & c = cV+𝟘𝟙.
#Rt #c #h #G #L #U #U2 * -c -G -L -U -U2
[ #I #G #L #W #U1 #H destruct
| #G #L #s #W #U1 #H destruct
]
qed-.
-lemma cpg_inv_cast1: â\88\80Rt,c,h,G,L,V1,U1,U2. â¦\83G,Lâ¦\84 ⊢ ⓝV1.U1 ⬈[Rt,c,h] U2 →
- â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â¦\83G,Lâ¦\84 ⊢ U1 ⬈[Rt,cT,h] T2 &
+lemma cpg_inv_cast1: â\88\80Rt,c,h,G,L,V1,U1,U2. â\9dªG,Lâ\9d« ⊢ ⓝV1.U1 ⬈[Rt,c,h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83cV,cT,V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\9dªG,Lâ\9d« ⊢ U1 ⬈[Rt,cT,h] T2 &
Rt cV cT & U2 = ⓝV2.T2 & c = (cV∨cT)
- | â\88\83â\88\83cT. â¦\83G,Lâ¦\84 ⊢ U1 ⬈[Rt,cT,h] U2 & c = cT+𝟙𝟘
- | â\88\83â\88\83cV. â¦\83G,Lâ¦\84 ⊢ V1 ⬈[Rt,cV,h] U2 & c = cV+𝟘𝟙.
+ | â\88\83â\88\83cT. â\9dªG,Lâ\9d« ⊢ U1 ⬈[Rt,cT,h] U2 & c = cT+𝟙𝟘
+ | â\88\83â\88\83cV. â\9dªG,Lâ\9d« ⊢ V1 ⬈[Rt,cV,h] U2 & c = cV+𝟘𝟙.
/2 width=3 by cpg_inv_cast1_aux/ qed-.
(* Advanced inversion lemmas ************************************************)
-lemma cpg_inv_zero1_pair: â\88\80Rt,c,h,I,G,K,V1,T2. â¦\83G,K.â\93\91{I}V1â¦\84 ⊢ #0 ⬈[Rt,c,h] T2 →
+lemma cpg_inv_zero1_pair: â\88\80Rt,c,h,I,G,K,V1,T2. â\9dªG,K.â\93\91[I]V1â\9d« ⊢ #0 ⬈[Rt,c,h] T2 →
∨∨ T2 = #0 ∧ c = 𝟘𝟘
- | â\88\83â\88\83cV,V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 &
+ | â\88\83â\88\83cV,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 &
I = Abbr & c = cV
- | â\88\83â\88\83cV,V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 &
+ | â\88\83â\88\83cV,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[Rt,cV,h] V2 & ⇧*[1] V2 ≘ T2 &
I = Abst & c = cV+𝟘𝟙.
#Rt #c #h #I #G #K #V1 #T2 #H elim (cpg_inv_zero1 … H) -H /2 width=1 by or3_intro0/
* #z #Y #X1 #X2 #HX12 #HXT2 #H1 #H2 destruct /3 width=5 by or3_intro1, or3_intro2, ex4_2_intro/
qed-.
-lemma cpg_inv_lref1_bind: â\88\80Rt,c,h,I,G,K,T2,i. â¦\83G,K.â\93\98{I}â¦\84 ⊢ #↑i ⬈[Rt,c,h] T2 →
+lemma cpg_inv_lref1_bind: â\88\80Rt,c,h,I,G,K,T2,i. â\9dªG,K.â\93\98[I]â\9d« ⊢ #↑i ⬈[Rt,c,h] T2 →
∨∨ T2 = #(↑i) ∧ c = 𝟘𝟘
- | â\88\83â\88\83T. â¦\83G,Kâ¦\84 ⊢ #i ⬈[Rt,c,h] T & ⇧*[1] T ≘ T2.
+ | â\88\83â\88\83T. â\9dªG,Kâ\9d« ⊢ #i ⬈[Rt,c,h] T & ⇧*[1] T ≘ T2.
#Rt #c #h #I #G #L #T2 #i #H elim (cpg_inv_lref1 … H) -H /2 width=1 by or_introl/
* #Z #Y #T #HT #HT2 #H destruct /3 width=3 by ex2_intro, or_intror/
qed-.
(* Basic forward lemmas *****************************************************)
-lemma cpg_fwd_bind1_minus: â\88\80Rt,c,h,I,G,L,V1,T1,T. â¦\83G,Lâ¦\84 â\8a¢ -â\93\91{I}V1.T1 ⬈[Rt,c,h] T → ∀p.
- â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â¬\88[Rt,c,h] â\93\91{p,I}V2.T2 &
- T = -ⓑ{I}V2.T2.
+lemma cpg_fwd_bind1_minus: â\88\80Rt,c,h,I,G,L,V1,T1,T. â\9dªG,Lâ\9d« â\8a¢ -â\93\91[I]V1.T1 ⬈[Rt,c,h] T → ∀p.
+ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V1.T1 â¬\88[Rt,c,h] â\93\91[p,I]V2.T2 &
+ T = -ⓑ[I]V2.T2.
#Rt #c #h #I #G #L #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: â\88\80Rt,c,h,G,K,V,V2,i,L,T2. â\87©*[i] L â\89\98 K.â\93\93V â\86\92 â¦\83G,Kâ¦\84 ⊢ V ⬈[Rt,c,h] V2 →
- â\87§*[â\86\91i] V2 â\89\98 T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ #i ⬈[Rt,c,h] T2.
+lemma cpg_delta_drops: â\88\80Rt,c,h,G,K,V,V2,i,L,T2. â\87©*[i] L â\89\98 K.â\93\93V â\86\92 â\9dªG,Kâ\9d« ⊢ V ⬈[Rt,c,h] V2 →
+ â\87§*[â\86\91i] V2 â\89\98 T2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ⬈[Rt,c,h] T2.
#Rt #c #h #G #K #V #V2 #i elim i -i
[ #L #T2 #HLK lapply (drops_fwd_isid … HLK ?) // #H destruct /3 width=3 by cpg_delta/
| #i #IH #L0 #T0 #H0 #HV2 #HVT2
elim (drops_inv_succ … H0) -H0 #I #L #HLK #H destruct
- elim (lifts_split_trans â\80¦ HVT2 (ð\9d\90\94â\9d´â\86\91iâ\9dµ) (ð\9d\90\94â\9d´1â\9dµ) ?) -HVT2 /3 width=3 by cpg_lref/
+ elim (lifts_split_trans â\80¦ HVT2 (ð\9d\90\94â\9d¨â\86\91iâ\9d©) (ð\9d\90\94â\9d¨1â\9d©) ?) -HVT2 /3 width=3 by cpg_lref/
]
qed.
-lemma cpg_ell_drops: â\88\80Rt,c,h,G,K,V,V2,i,L,T2. â\87©*[i] L â\89\98 K.â\93\9bV â\86\92 â¦\83G,Kâ¦\84 ⊢ V ⬈[Rt,c,h] V2 →
- â\87§*[â\86\91i] V2 â\89\98 T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ #i ⬈[Rt,c+𝟘𝟙,h] T2.
+lemma cpg_ell_drops: â\88\80Rt,c,h,G,K,V,V2,i,L,T2. â\87©*[i] L â\89\98 K.â\93\9bV â\86\92 â\9dªG,Kâ\9d« ⊢ V ⬈[Rt,c,h] V2 →
+ â\87§*[â\86\91i] V2 â\89\98 T2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ⬈[Rt,c+𝟘𝟙,h] T2.
#Rt #c #h #G #K #V #V2 #i elim i -i
[ #L #T2 #HLK lapply (drops_fwd_isid … HLK ?) // #H destruct /3 width=3 by cpg_ell/
| #i #IH #L0 #T0 #H0 #HV2 #HVT2
elim (drops_inv_succ … H0) -H0 #I #L #HLK #H destruct
- elim (lifts_split_trans â\80¦ HVT2 (ð\9d\90\94â\9d´â\86\91iâ\9dµ) (ð\9d\90\94â\9d´1â\9dµ) ?) -HVT2 /3 width=3 by cpg_lref/
+ elim (lifts_split_trans â\80¦ HVT2 (ð\9d\90\94â\9d¨â\86\91iâ\9d©) (ð\9d\90\94â\9d¨1â\9d©) ?) -HVT2 /3 width=3 by cpg_lref/
]
qed.
(* Advanced inversion lemmas ************************************************)
-lemma cpg_inv_lref1_drops: â\88\80Rt,c,h,G,i,L,T2. â¦\83G,Lâ¦\84 ⊢ #i ⬈[Rt,c,h] T2 →
+lemma cpg_inv_lref1_drops: â\88\80Rt,c,h,G,i,L,T2. â\9dªG,Lâ\9d« ⊢ #i ⬈[Rt,c,h] T2 →
∨∨ T2 = #i ∧ c = 𝟘𝟘
- | â\88\83â\88\83cV,K,V,V2. â\87©*[i] L â\89\98 K.â\93\93V & â¦\83G,Kâ¦\84 ⊢ V ⬈[Rt,cV,h] V2 &
+ | â\88\83â\88\83cV,K,V,V2. â\87©*[i] L â\89\98 K.â\93\93V & â\9dªG,Kâ\9d« ⊢ V ⬈[Rt,cV,h] V2 &
⇧*[↑i] V2 ≘ T2 & c = cV
- | â\88\83â\88\83cV,K,V,V2. â\87©*[i] L â\89\98 K.â\93\9bV & â¦\83G,Kâ¦\84 ⊢ V ⬈[Rt,cV,h] V2 &
+ | â\88\83â\88\83cV,K,V,V2. â\87©*[i] L â\89\98 K.â\93\9bV & â\9dªG,Kâ\9d« ⊢ V ⬈[Rt,cV,h] V2 &
⇧*[↑i] V2 ≘ T2 & c = cV + 𝟘𝟙.
#Rt #c #h #G #i elim i -i
[ #L #T2 #H elim (cpg_inv_zero1 … H) -H * /3 width=1 by or3_intro0, conj/
]
qed-.
-lemma cpg_inv_atom1_drops: â\88\80Rt,c,h,I,G,L,T2. â¦\83G,Lâ¦\84 â\8a¢ â\93ª{I} ⬈[Rt,c,h] T2 →
- ∨∨ T2 = ⓪{I} ∧ c = 𝟘𝟘
+lemma cpg_inv_atom1_drops: â\88\80Rt,c,h,I,G,L,T2. â\9dªG,Lâ\9d« â\8a¢ â\93ª[I] ⬈[Rt,c,h] T2 →
+ ∨∨ T2 = ⓪[I] ∧ c = 𝟘𝟘
| ∃∃s. T2 = ⋆(⫯[h]s) & I = Sort s & c = 𝟘𝟙
- | â\88\83â\88\83cV,i,K,V,V2. â\87©*[i] L â\89\98 K.â\93\93V & â¦\83G,Kâ¦\84 ⊢ V ⬈[Rt,cV,h] V2 &
+ | â\88\83â\88\83cV,i,K,V,V2. â\87©*[i] L â\89\98 K.â\93\93V & â\9dªG,Kâ\9d« ⊢ V ⬈[Rt,cV,h] 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 & â¦\83G,Kâ¦\84 ⊢ V ⬈[Rt,cV,h] V2 &
+ | â\88\83â\88\83cV,i,K,V,V2. â\87©*[i] L â\89\98 K.â\93\9bV & â\9dªG,Kâ\9d« ⊢ V ⬈[Rt,cV,h] V2 &
⇧*[↑i] V2 ≘ T2 & I = LRef i & c = cV + 𝟘𝟙.
#Rt #c #h * #n #G #L #T2 #H
[ elim (cpg_inv_sort1 … H) -H *
elim (drops_inv_skip2 … HY) -HY #Z #L0 #HLK0 #HZ #H destruct
elim (liftsb_inv_pair_sn … HZ) -HZ #W #HVW #H destruct
elim (IH … HV2 … HLK0 … HVW) -IH /2 width=2 by fqup_lref/ -K -K0 -V #W2 #HVW2 #HW2
- elim (lifts_total W2 (ð\9d\90\94â\9d´â\86\91i2â\9dµ)) #U2 #HWU2
+ elim (lifts_total W2 (ð\9d\90\94â\9d¨â\86\91i2â\9d©)) #U2 #HWU2
lapply (lifts_trans … HVW2 … HWU2 ??) -HVW2 [3,6: |*: // ] #HVU2
lapply (lifts_conf … HVT2 … HVU2 f ?) -V2 [1,3: /2 width=3 by after_uni_succ_sn/ ]
/4 width=8 by cpg_ell_drops, cpg_delta_drops, drops_inv_gen, ex2_intro/
elim (IH … HV12 … HLK … HVW1) -HV12 -HVW1 // #W2 #HVW2 #HW12
elim (IH … HY12 … HLK … HYZ1) -HY12 //
elim (IH … HT12 … HTU1) -IH -HT12 -HTU1 [ |*: /3 width=3 by drops_skip, ext2_pair/ ]
- elim (lifts_total W2 (ð\9d\90\94â\9d´1â\9dµ)) #W20 #HW20
+ elim (lifts_total W2 (ð\9d\90\94â\9d¨1â\9d©)) #W20 #HW20
lapply (lifts_trans … HVW2 … HW20 ??) -HVW2 [3: |*: // ] #H
lapply (lifts_conf … HV20 … H (⫯f) ?) -V2 /2 width=3 by after_uni_one_sn/
/4 width=9 by cpg_theta, lifts_bind, lifts_flat, ex2_intro/
[ #H1 #H2 destruct /3 width=3 by cpg_refl, ex2_intro/ ]
#cW #L0 #W #W2 #HL0 #HW2 #HWU2 #H destruct
elim (lifts_inv_lref2 … H1) -H1 #i1 #Hf #H destruct
- lapply (drops_split_div â\80¦ HLK (ð\9d\90\94â\9d´i1â\9dµ) ???) -HLK [4,8: * |*: // ] #Y0 #HK0 #HLY0
+ lapply (drops_split_div â\80¦ HLK (ð\9d\90\94â\9d¨i1â\9d©) ???) -HLK [4,8: * |*: // ] #Y0 #HK0 #HLY0
lapply (drops_conf … HL0 … HLY0 ??) -HLY0 [3,6: |*: /2 width=6 by after_uni_dx/ ] #HLY0
lapply (drops_tls_at … Hf … HLY0) -HLY0 #HLY0
elim (drops_inv_skip1 … HLY0) -HLY0 #Z #K0 #HLK0 #HZ #H destruct
(* Properties with simple terms *********************************************)
(* Note: the main property of simple terms *)
-lemma cpg_inv_appl1_simple: â\88\80Rt,c,h,G,L,V1,T1,U. â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.T1 â¬\88[Rt,c,h] U â\86\92 ð\9d\90\92â¦\83T1â¦\84 →
- â\88\83â\88\83cV,cT,V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â¦\83G,Lâ¦\84 ⊢ T1 ⬈[Rt,cT,h] T2 &
+lemma cpg_inv_appl1_simple: â\88\80Rt,c,h,G,L,V1,T1,U. â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.T1 â¬\88[Rt,c,h] U â\86\92 ð\9d\90\92â\9dªT1â\9d« →
+ â\88\83â\88\83cV,cT,V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[Rt,cV,h] V2 & â\9dªG,Lâ\9d« ⊢ T1 ⬈[Rt,cT,h] T2 &
U = ⓐV2.T2 & c = ((↕*cV)∨cT).
#Rt #c #h #G #L #V1 #T1 #U #H #HT1 elim (cpg_inv_appl1 … H) -H *
[ /2 width=8 by ex4_4_intro/
(* 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â¦\83n,câ¦\84 & â¦\83G,Lâ¦\84 ⊢ T1 ⬈[eq_t,c,h] T2.
+ λT1,T2. â\88\83â\88\83c. ð\9d\90\91ð\9d\90\93â\9dªn,câ\9d« & â\9dªG,Lâ\9d« ⊢ T1 ⬈[eq_t,c,h] T2.
interpretation
"t-bound context-sensitive parallel rt-transition (term)"
(* Basic properties *********************************************************)
-lemma cpm_ess: â\88\80h,G,L,s. â¦\83G,Lâ¦\84 ⊢ ⋆s ➡[1,h] ⋆(⫯[h]s).
+lemma cpm_ess: â\88\80h,G,L,s. â\9dªG,Lâ\9d« ⊢ ⋆s ➡[1,h] ⋆(⫯[h]s).
/2 width=3 by cpg_ess, ex2_intro/ qed.
-lemma cpm_delta: â\88\80n,h,G,K,V1,V2,W2. â¦\83G,Kâ¦\84 ⊢ V1 ➡[n,h] V2 →
- â\87§*[1] V2 â\89\98 W2 â\86\92 â¦\83G,K.â\93\93V1â¦\84 ⊢ #0 ➡[n,h] W2.
+lemma cpm_delta: â\88\80n,h,G,K,V1,V2,W2. â\9dªG,Kâ\9d« ⊢ V1 ➡[n,h] V2 →
+ â\87§*[1] V2 â\89\98 W2 â\86\92 â\9dªG,K.â\93\93V1â\9d« ⊢ #0 ➡[n,h] W2.
#n #h #G #K #V1 #V2 #W2 *
/3 width=5 by cpg_delta, ex2_intro/
qed.
-lemma cpm_ell: â\88\80n,h,G,K,V1,V2,W2. â¦\83G,Kâ¦\84 ⊢ V1 ➡[n,h] V2 →
- â\87§*[1] V2 â\89\98 W2 â\86\92 â¦\83G,K.â\93\9bV1â¦\84 ⊢ #0 ➡[↑n,h] W2.
+lemma cpm_ell: â\88\80n,h,G,K,V1,V2,W2. â\9dªG,Kâ\9d« ⊢ V1 ➡[n,h] V2 →
+ â\87§*[1] V2 â\89\98 W2 â\86\92 â\9dªG,K.â\93\9bV1â\9d« ⊢ #0 ➡[↑n,h] W2.
#n #h #G #K #V1 #V2 #W2 *
/3 width=5 by cpg_ell, ex2_intro, isrt_succ/
qed.
-lemma cpm_lref: â\88\80n,h,I,G,K,T,U,i. â¦\83G,Kâ¦\84 ⊢ #i ➡[n,h] T →
- â\87§*[1] T â\89\98 U â\86\92 â¦\83G,K.â\93\98{I}â¦\84 ⊢ #↑i ➡[n,h] U.
+lemma cpm_lref: â\88\80n,h,I,G,K,T,U,i. â\9dªG,Kâ\9d« ⊢ #i ➡[n,h] T →
+ â\87§*[1] T â\89\98 U â\86\92 â\9dªG,K.â\93\98[I]â\9d« ⊢ #↑i ➡[n,h] U.
#n #h #I #G #K #T #U #i *
/3 width=5 by cpg_lref, ex2_intro/
qed.
(* Basic_2A1: includes: cpr_bind *)
lemma cpm_bind: ∀n,h,p,I,G,L,V1,V2,T1,T2.
- â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 â\86\92 â¦\83G,L.â\93\91{I}V1â¦\84 ⊢ T1 ➡[n,h] T2 →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â\9e¡[n,h] â\93\91{p,I}V2.T2.
+ â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 â\86\92 â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ➡[n,h] T2 →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V1.T1 â\9e¡[n,h] â\93\91[p,I]V2.T2.
#n #h #p #I #G #L #V1 #V2 #T1 #T2 * #cV #HcV #HV12 *
/5 width=5 by cpg_bind, isrt_max_O1, isr_shift, ex2_intro/
qed.
lemma cpm_appl: ∀n,h,G,L,V1,V2,T1,T2.
- â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡[n,h] T2 →
- â¦\83G,Lâ¦\84 ⊢ ⓐV1.T1 ➡[n,h] ⓐV2.T2.
+ â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡[n,h] T2 →
+ â\9dªG,Lâ\9d« ⊢ ⓐV1.T1 ➡[n,h] ⓐV2.T2.
#n #h #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: ∀n,h,G,L,U1,U2,T1,T2.
- â¦\83G,Lâ¦\84 â\8a¢ U1 â\9e¡[n,h] U2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡[n,h] T2 →
- â¦\83G,Lâ¦\84 ⊢ ⓝU1.T1 ➡[n,h] ⓝU2.T2.
+ â\9dªG,Lâ\9d« â\8a¢ U1 â\9e¡[n,h] U2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡[n,h] T2 →
+ â\9dªG,Lâ\9d« ⊢ ⓝU1.T1 ➡[n,h] ⓝU2.T2.
#n #h #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 (n) (h) (G) (L):
- â\88\80T1,T. â\87§*[1] T â\89\98 T1 â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T ➡[n,h] T2 →
- â\88\80V. â¦\83G,Lâ¦\84 ⊢ +ⓓV.T1 ➡[n,h] T2.
+ â\88\80T1,T. â\87§*[1] T â\89\98 T1 â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T ➡[n,h] T2 →
+ â\88\80V. â\9dªG,Lâ\9d« ⊢ +ⓓV.T1 ➡[n,h] T2.
#n #h #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: â\88\80n,h,G,L,V,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[n,h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓝV.T1 ➡[n,h] T2.
+lemma cpm_eps: â\88\80n,h,G,L,V,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[n,h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⓝV.T1 ➡[n,h] T2.
#n #h #G #L #V #T1 #T2 *
/3 width=3 by cpg_eps, isrt_plus_O2, ex2_intro/
qed.
-lemma cpm_ee: â\88\80n,h,G,L,V1,V2,T. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[n,h] V2 â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓝV1.T ➡[↑n,h] V2.
+lemma cpm_ee: â\88\80n,h,G,L,V1,V2,T. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[n,h] V2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⓝV1.T ➡[↑n,h] V2.
#n #h #G #L #V1 #V2 #T *
/3 width=3 by cpg_ee, isrt_succ, ex2_intro/
qed.
(* Basic_2A1: includes: cpr_beta *)
lemma cpm_beta: ∀n,h,p,G,L,V1,V2,W1,W2,T1,T2.
- â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ W1 â\9e¡[h] W2 â\86\92 â¦\83G,L.â\93\9bW1â¦\84 ⊢ T1 ➡[n,h] T2 →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\9b{p}W1.T1 â\9e¡[n,h] â\93\93{p}ⓝW2.V2.T2.
+ â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡[h] W2 â\86\92 â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ➡[n,h] T2 →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\9b[p]W1.T1 â\9e¡[n,h] â\93\93[p]ⓝW2.V2.T2.
#n #h #p #G #L #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: ∀n,h,p,G,L,V1,V,V2,W1,W2,T1,T2.
- â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V â\86\92 â\87§*[1] V â\89\98 V2 â\86\92 â¦\83G,Lâ¦\84 ⊢ W1 ➡[h] W2 →
- â¦\83G,L.â\93\93W1â¦\84 ⊢ T1 ➡[n,h] T2 →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\93{p}W1.T1 â\9e¡[n,h] â\93\93{p}W2.ⓐV2.T2.
+ â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V â\86\92 â\87§*[1] V â\89\98 V2 â\86\92 â\9dªG,Lâ\9d« ⊢ W1 ➡[h] W2 →
+ â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ➡[n,h] T2 →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\93[p]W1.T1 â\9e¡[n,h] â\93\93[p]W2.ⓐV2.T2.
#n #h #p #G #L #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) (G) (L):
- â\88\80n. n â\89¤ 1 â\86\92 â\88\80s. â¦\83G,Lâ¦\84 ⊢ ⋆s ➡[n,h] ⋆((next h)^n s).
+ â\88\80n. n â\89¤ 1 â\86\92 â\88\80s. â\9dªG,Lâ\9d« ⊢ ⋆s ➡[n,h] ⋆((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 cpm_inv_atom1: â\88\80n,h,J,G,L,T2. â¦\83G,Lâ¦\84 â\8a¢ â\93ª{J} ➡[n,h] T2 →
- ∨∨ T2 = ⓪{J} ∧ n = 0
+lemma cpm_inv_atom1: â\88\80n,h,J,G,L,T2. â\9dªG,Lâ\9d« â\8a¢ â\93ª[J] ➡[n,h] T2 →
+ ∨∨ T2 = ⓪[J] ∧ n = 0
| ∃∃s. T2 = ⋆(⫯[h]s) & J = Sort s & n = 1
- | â\88\83â\88\83K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ➡[n,h] V2 & ⇧*[1] V2 ≘ T2 &
+ | â\88\83â\88\83K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡[n,h] V2 & ⇧*[1] V2 ≘ T2 &
L = K.ⓓV1 & J = LRef 0
- | â\88\83â\88\83m,K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ➡[m,h] V2 & ⇧*[1] V2 ≘ T2 &
+ | â\88\83â\88\83m,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡[m,h] V2 & ⇧*[1] V2 ≘ T2 &
L = K.ⓛV1 & J = LRef 0 & n = ↑m
- | â\88\83â\88\83I,K,T,i. â¦\83G,Kâ¦\84 ⊢ #i ➡[n,h] T & ⇧*[1] T ≘ T2 &
- L = K.ⓘ{I} & J = LRef (↑i).
+ | â\88\83â\88\83I,K,T,i. â\9dªG,Kâ\9d« ⊢ #i ➡[n,h] T & ⇧*[1] T ≘ T2 &
+ L = K.ⓘ[I] & J = LRef (↑i).
#n #h #J #G #L #T2 * #c #Hc #H elim (cpg_inv_atom1 … H) -H *
[ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or5_intro0, conj/
| #s #H1 #H2 #H3 destruct /4 width=3 by isrt_inv_01, or5_intro1, ex3_intro/
]
qed-.
-lemma cpm_inv_sort1: â\88\80n,h,G,L,T2,s. â¦\83G,Lâ¦\84 ⊢ ⋆s ➡[n,h] T2 →
+lemma cpm_inv_sort1: â\88\80n,h,G,L,T2,s. â\9dªG,Lâ\9d« ⊢ ⋆s ➡[n,h] T2 →
∧∧ T2 = ⋆(((next h)^n) s) & n ≤ 1.
#n #h #G #L #T2 #s * #c #Hc #H
elim (cpg_inv_sort1 … H) -H * #H1 #H2 destruct
#H destruct /2 width=1 by conj/
qed-.
-lemma cpm_inv_zero1: â\88\80n,h,G,L,T2. â¦\83G,Lâ¦\84 ⊢ #0 ➡[n,h] T2 →
+lemma cpm_inv_zero1: â\88\80n,h,G,L,T2. â\9dªG,Lâ\9d« ⊢ #0 ➡[n,h] T2 →
∨∨ T2 = #0 ∧ n = 0
- | â\88\83â\88\83K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ➡[n,h] V2 & ⇧*[1] V2 ≘ T2 &
+ | â\88\83â\88\83K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡[n,h] V2 & ⇧*[1] V2 ≘ T2 &
L = K.ⓓV1
- | â\88\83â\88\83m,K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ➡[m,h] V2 & ⇧*[1] V2 ≘ T2 &
+ | â\88\83â\88\83m,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡[m,h] V2 & ⇧*[1] V2 ≘ T2 &
L = K.ⓛV1 & n = ↑m.
#n #h #G #L #T2 * #c #Hc #H elim (cpg_inv_zero1 … H) -H *
[ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or3_intro0, conj/
qed-.
lemma cpm_inv_zero1_unit (n) (h) (I) (K) (G):
- â\88\80X2. â¦\83G,K.â\93¤{I}â¦\84 ⊢ #0 ➡[n,h] X2 → ∧∧ X2 = #0 & n = 0.
+ â\88\80X2. â\9dªG,K.â\93¤[I]â\9d« ⊢ #0 ➡[n,h] X2 → ∧∧ X2 = #0 & n = 0.
#n #h #I #G #K #X2 #H
elim (cpm_inv_zero1 … H) -H *
[ #H1 #H2 destruct /2 width=1 by conj/
]
qed.
-lemma cpm_inv_lref1: â\88\80n,h,G,L,T2,i. â¦\83G,Lâ¦\84 ⊢ #↑i ➡[n,h] T2 →
+lemma cpm_inv_lref1: â\88\80n,h,G,L,T2,i. â\9dªG,Lâ\9d« ⊢ #↑i ➡[n,h] T2 →
∨∨ T2 = #(↑i) ∧ n = 0
- | â\88\83â\88\83I,K,T. â¦\83G,Kâ¦\84 â\8a¢ #i â\9e¡[n,h] T & â\87§*[1] T â\89\98 T2 & L = K.â\93\98{I}.
+ | â\88\83â\88\83I,K,T. â\9dªG,Kâ\9d« â\8a¢ #i â\9e¡[n,h] T & â\87§*[1] T â\89\98 T2 & L = K.â\93\98[I].
#n #h #G #L #T2 #i * #c #Hc #H elim (cpg_inv_lref1 … H) -H *
[ #H1 #H2 destruct /4 width=1 by isrt_inv_00, or_introl, conj/
| #I #K #V2 #HV2 #HVT2 #H destruct
qed-.
lemma cpm_inv_lref1_ctop (n) (h) (G):
- â\88\80X2,i. â¦\83G,â\8b\86â¦\84 ⊢ #i ➡[n,h] X2 → ∧∧ X2 = #i & n = 0.
+ â\88\80X2,i. â\9dªG,â\8b\86â\9d« ⊢ #i ➡[n,h] X2 → ∧∧ X2 = #i & n = 0.
#n #h #G #X2 * [| #i ] #H
[ elim (cpm_inv_zero1 … H) -H *
[ #H1 #H2 destruct /2 width=1 by conj/
]
qed.
-lemma cpm_inv_gref1: â\88\80n,h,G,L,T2,l. â¦\83G,Lâ¦\84 ⊢ §l ➡[n,h] T2 → T2 = §l ∧ n = 0.
+lemma cpm_inv_gref1: â\88\80n,h,G,L,T2,l. â\9dªG,Lâ\9d« ⊢ §l ➡[n,h] T2 → T2 = §l ∧ n = 0.
#n #h #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: â\88\80n,h,p,I,G,L,V1,T1,U2. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 ➡[n,h] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 & â¦\83G,L.â\93\91{I}V1â¦\84 ⊢ T1 ➡[n,h] T2 &
- U2 = ⓑ{p,I}V2.T2
- | â\88\83â\88\83T. â\87§*[1] T â\89\98 T1 & â¦\83G,Lâ¦\84 ⊢ T ➡[n,h] U2 &
+lemma cpm_inv_bind1: â\88\80n,h,p,I,G,L,V1,T1,U2. â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V1.T1 ➡[n,h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 & â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ➡[n,h] T2 &
+ U2 = ⓑ[p,I]V2.T2
+ | â\88\83â\88\83T. â\87§*[1] T â\89\98 T1 & â\9dªG,Lâ\9d« ⊢ T ➡[n,h] U2 &
p = true & I = Abbr.
#n #h #p #I #G #L #V1 #T1 #U2 * #c #Hc #H elim (cpg_inv_bind1 … H) -H *
[ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct
(* Basic_1: includes: pr0_gen_abbr pr2_gen_abbr *)
(* Basic_2A1: includes: cpr_inv_abbr1 *)
-lemma cpm_inv_abbr1: â\88\80n,h,p,G,L,V1,T1,U2. â¦\83G,Lâ¦\84 â\8a¢ â\93\93{p}V1.T1 ➡[n,h] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 & â¦\83G,L.â\93\93V1â¦\84 ⊢ T1 ➡[n,h] T2 &
- U2 = ⓓ{p}V2.T2
- | â\88\83â\88\83T. â\87§*[1] T â\89\98 T1 & â¦\83G,Lâ¦\84 ⊢ T ➡[n,h] U2 & p = true.
+lemma cpm_inv_abbr1: â\88\80n,h,p,G,L,V1,T1,U2. â\9dªG,Lâ\9d« â\8a¢ â\93\93[p]V1.T1 ➡[n,h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 & â\9dªG,L.â\93\93V1â\9d« ⊢ T1 ➡[n,h] T2 &
+ U2 = ⓓ[p]V2.T2
+ | â\88\83â\88\83T. â\87§*[1] T â\89\98 T1 & â\9dªG,Lâ\9d« ⊢ T ➡[n,h] U2 & p = true.
#n #h #p #G #L #V1 #T1 #U2 #H
elim (cpm_inv_bind1 … H) -H
[ /3 width=1 by or_introl/
(* Basic_1: includes: pr0_gen_abst pr2_gen_abst *)
(* Basic_2A1: includes: cpr_inv_abst1 *)
-lemma cpm_inv_abst1: â\88\80n,h,p,G,L,V1,T1,U2. â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p}V1.T1 ➡[n,h] U2 →
- â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 & â¦\83G,L.â\93\9bV1â¦\84 ⊢ T1 ➡[n,h] T2 &
- U2 = ⓛ{p}V2.T2.
+lemma cpm_inv_abst1: â\88\80n,h,p,G,L,V1,T1,U2. â\9dªG,Lâ\9d« â\8a¢ â\93\9b[p]V1.T1 ➡[n,h] U2 →
+ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 & â\9dªG,L.â\93\9bV1â\9d« ⊢ T1 ➡[n,h] T2 &
+ U2 = ⓛ[p]V2.T2.
#n #h #p #G #L #V1 #T1 #U2 #H
elim (cpm_inv_bind1 … H) -H
[ /3 width=1 by or_introl/
]
qed-.
-lemma cpm_inv_abst_bi: â\88\80n,h,p1,p2,G,L,V1,V2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p1}V1.T1 â\9e¡[n,h] â\93\9b{p2}V2.T2 →
- â\88§â\88§ â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 & â¦\83G,L.â\93\9bV1â¦\84 ⊢ T1 ➡[n,h] T2 & p1 = p2.
+lemma cpm_inv_abst_bi: â\88\80n,h,p1,p2,G,L,V1,V2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ â\93\9b[p1]V1.T1 â\9e¡[n,h] â\93\9b[p2]V2.T2 →
+ â\88§â\88§ â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 & â\9dªG,L.â\93\9bV1â\9d« ⊢ T1 ➡[n,h] T2 & p1 = p2.
#n #h #p1 #p2 #G #L #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: â\88\80n,h,G,L,V1,U1,U2. â¦\83G,Lâ¦\84 ⊢ ⓐ V1.U1 ➡[n,h] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 & â¦\83G,Lâ¦\84 ⊢ U1 ➡[n,h] T2 &
+lemma cpm_inv_appl1: â\88\80n,h,G,L,V1,U1,U2. â\9dªG,Lâ\9d« ⊢ ⓐ V1.U1 ➡[n,h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 & â\9dªG,Lâ\9d« ⊢ U1 ➡[n,h] T2 &
U2 = ⓐV2.T2
- | â\88\83â\88\83p,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 & â¦\83G,Lâ¦\84 ⊢ W1 ➡[h] W2 &
- â¦\83G,L.â\93\9bW1â¦\84 ⊢ T1 ➡[n,h] T2 &
- U1 = ⓛ{p}W1.T1 & U2 = ⓓ{p}ⓝW2.V2.T2
- | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 ⊢ V1 ➡[h] V & ⇧*[1] V ≘ V2 &
- â¦\83G,Lâ¦\84 â\8a¢ W1 â\9e¡[h] W2 & â¦\83G,L.â\93\93W1â¦\84 ⊢ T1 ➡[n,h] T2 &
- U1 = ⓓ{p}W1.T1 & U2 = ⓓ{p}W2.ⓐV2.T2.
+ | â\88\83â\88\83p,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 & â\9dªG,Lâ\9d« ⊢ W1 ➡[h] W2 &
+ â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ➡[n,h] T2 &
+ U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2
+ | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h] V & ⇧*[1] V ≘ V2 &
+ â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡[h] W2 & â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ➡[n,h] T2 &
+ U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2.
#n #h #G #L #V1 #U1 #U2 * #c #Hc #H elim (cpg_inv_appl1 … H) -H *
[ #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: â\88\80n,h,G,L,V1,U1,U2. â¦\83G,Lâ¦\84 ⊢ ⓝV1.U1 ➡[n,h] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[n,h] V2 & â¦\83G,Lâ¦\84 ⊢ U1 ➡[n,h] T2 &
+lemma cpm_inv_cast1: â\88\80n,h,G,L,V1,U1,U2. â\9dªG,Lâ\9d« ⊢ ⓝV1.U1 ➡[n,h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[n,h] V2 & â\9dªG,Lâ\9d« ⊢ U1 ➡[n,h] T2 &
U2 = ⓝV2.T2
- | â¦\83G,Lâ¦\84 ⊢ U1 ➡[n,h] U2
- | â\88\83â\88\83m. â¦\83G,Lâ¦\84 ⊢ V1 ➡[m,h] U2 & n = ↑m.
+ | â\9dªG,Lâ\9d« ⊢ U1 ➡[n,h] U2
+ | â\88\83â\88\83m. â\9dªG,Lâ\9d« ⊢ V1 ➡[m,h] U2 & n = ↑m.
#n #h #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 forward lemmas *****************************************************)
(* Basic_2A1: includes: cpr_fwd_bind1_minus *)
-lemma cpm_fwd_bind1_minus: â\88\80n,h,I,G,L,V1,T1,T. â¦\83G,Lâ¦\84 â\8a¢ -â\93\91{I}V1.T1 ➡[n,h] T → ∀p.
- â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â\9e¡[n,h] â\93\91{p,I}V2.T2 &
- T = -ⓑ{I}V2.T2.
+lemma cpm_fwd_bind1_minus: â\88\80n,h,I,G,L,V1,T1,T. â\9dªG,Lâ\9d« â\8a¢ -â\93\91[I]V1.T1 ➡[n,h] T → ∀p.
+ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V1.T1 â\9e¡[n,h] â\93\91[p,I]V2.T2 &
+ T = -ⓑ[I]V2.T2.
#n #h #I #G #L #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-.
(* Basic eliminators ********************************************************)
lemma cpm_ind (h): ∀Q:relation5 nat genv lenv term term.
- (∀I,G,L. Q 0 G L (⓪{I}) (⓪{I})) →
+ (∀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. â¦\83G,Kâ¦\84 ⊢ V1 ➡[n,h] V2 → Q n G K V1 V2 →
+ (â\88\80n,G,K,V1,V2,W2. â\9dªG,Kâ\9d« ⊢ V1 ➡[n,h] 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. â¦\83G,Kâ¦\84 ⊢ V1 ➡[n,h] V2 → Q n G K V1 V2 →
+ ) â\86\92 (â\88\80n,G,K,V1,V2,W2. â\9dªG,Kâ\9d« ⊢ V1 ➡[n,h] 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. â¦\83G,Kâ¦\84 ⊢ #i ➡[n,h] 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. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 â\86\92 â¦\83G,L.â\93\91{I}V1â¦\84 ⊢ T1 ➡[n,h] T2 →
- Q 0 G L V1 V2 → Q n G (L.ⓑ{I}V1) T1 T2 → Q n G L (ⓑ{p,I}V1.T1) (ⓑ{p,I}V2.T2)
- ) â\86\92 (â\88\80n,G,L,V1,V2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡[n,h] T2 →
+ ) â\86\92 (â\88\80n,I,G,K,T,U,i. â\9dªG,Kâ\9d« ⊢ #i ➡[n,h] 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] V2 â\86\92 â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ➡[n,h] T2 →
+ Q 0 G L V1 V2 → Q n G (L.ⓑ[I]V1) T1 T2 → Q n G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2)
+ ) â\86\92 (â\88\80n,G,L,V1,V2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡[n,h] 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. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[n,h] V2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡[n,h] T2 →
+ ) â\86\92 (â\88\80n,G,L,V1,V2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[n,h] V2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡[n,h] T2 →
Q n G L V1 V2 → Q n G L T1 T2 → Q n G L (ⓝV1.T1) (ⓝV2.T2)
- ) â\86\92 (â\88\80n,G,L,V,T1,T,T2. â\87§*[1] T â\89\98 T1 â\86\92 â¦\83G,Lâ¦\84 ⊢ T ➡[n,h] T2 →
+ ) â\86\92 (â\88\80n,G,L,V,T1,T,T2. â\87§*[1] T â\89\98 T1 â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡[n,h] T2 →
Q n G L T T2 → Q n G L (+ⓓV.T1) T2
- ) â\86\92 (â\88\80n,G,L,V,T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡[n,h] T2 →
+ ) â\86\92 (â\88\80n,G,L,V,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[n,h] T2 →
Q n G L T1 T2 → Q n G L (ⓝV.T1) T2
- ) â\86\92 (â\88\80n,G,L,V1,V2,T. â¦\83G,Lâ¦\84 ⊢ V1 ➡[n,h] V2 →
+ ) â\86\92 (â\88\80n,G,L,V1,V2,T. â\9dªG,Lâ\9d« ⊢ V1 ➡[n,h] 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. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ W1 â\9e¡[h] W2 â\86\92 â¦\83G,L.â\93\9bW1â¦\84 ⊢ T1 ➡[n,h] T2 →
+ ) â\86\92 (â\88\80n,p,G,L,V1,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡[h] W2 â\86\92 â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ➡[n,h] 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. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V â\86\92 â¦\83G,Lâ¦\84 â\8a¢ W1 â\9e¡[h] W2 â\86\92 â¦\83G,L.â\93\93W1â¦\84 ⊢ T1 ➡[n,h] 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] V â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡[h] W2 â\86\92 â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ➡[n,h] 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)
+ ⇧*[1] V ≘ V2 → Q n G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2)
) →
- â\88\80n,G,L,T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡[n,h] T2 → Q n G L T1 T2.
+ â\88\80n,G,L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[n,h] T2 → Q n G L T1 T2.
#h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #IH10 #IH11 #IH12 #IH13 #n #G #L #T1 #T2
* #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. â¦\83G,Lâ¦\84 â\8a¢ T â\81\9d A â\86\92 â\88\83U. â¦\83G,Lâ¦\84 ⊢ T ➡[1,h] U.
+ â\88\80T. â\9dªG,Lâ\9d« â\8a¢ T â\81\9d A â\86\92 â\88\83U. â\9dªG,Lâ\9d« ⊢ T ➡[1,h] 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
- [ elim (lifts_total V0 (ð\9d\90\94â\9d´1â\9dµ)) #W0 #HVW0
+ [ elim (lifts_total V0 (ð\9d\90\94â\9d¨1â\9d©)) #W0 #HVW0
/3 width=4 by cpm_delta, ex_intro/
- | elim (lifts_total V (ð\9d\90\94â\9d´1â\9dµ)) #W #HVW -V0
+ | elim (lifts_total V (ð\9d\90\94â\9d¨1â\9d©)) #W #HVW -V0
/3 width=4 by cpm_ell, ex_intro/
]
| #I #G #L #A #i #_ * #T0 #HT0
- elim (lifts_total T0 (ð\9d\90\94â\9d´1â\9dµ)) #U0 #HTU0
+ elim (lifts_total T0 (ð\9d\90\94â\9d¨1â\9d©)) #U0 #HTU0
/3 width=4 by cpm_lref, ex_intro/
| #p #G #L #V #T #B #A #_ #_ #_ * #T0 #HT0
/3 width=2 by cpm_bind, ex_intro/
(* Forward lemmas with unbound context-sensitive rt-transition for terms ****)
(* Basic_2A1: includes: cpr_cpx *)
-lemma cpm_fwd_cpx: â\88\80n,h,G,L,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[n,h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬈[h] T2.
+lemma cpm_fwd_cpx: â\88\80n,h,G,L,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[n,h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈[h] T2.
#n #h #G #L #T1 #T2 * #c #Hc #H elim H -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_1: includes: pr2_delta1 *)
(* Basic_2A1: includes: cpr_delta *)
lemma cpm_delta_drops: ∀n,h,G,L,K,V,V2,W2,i.
- â\87©*[i] L â\89\98 K.â\93\93V â\86\92 â¦\83G,Kâ¦\84 ⊢ V ➡[n,h] V2 →
- â\87§*[â\86\91i] V2 â\89\98 W2 â\86\92 â¦\83G,Lâ¦\84 ⊢ #i ➡[n,h] W2.
+ â\87©*[i] L â\89\98 K.â\93\93V â\86\92 â\9dªG,Kâ\9d« ⊢ V ➡[n,h] V2 →
+ â\87§*[â\86\91i] V2 â\89\98 W2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ➡[n,h] W2.
#n #h #G #L #K #V #V2 #W2 #i #HLK *
/3 width=8 by cpg_delta_drops, ex2_intro/
qed.
lemma cpm_ell_drops: ∀n,h,G,L,K,V,V2,W2,i.
- â\87©*[i] L â\89\98 K.â\93\9bV â\86\92 â¦\83G,Kâ¦\84 ⊢ V ➡[n,h] V2 →
- â\87§*[â\86\91i] V2 â\89\98 W2 â\86\92 â¦\83G,Lâ¦\84 ⊢ #i ➡[↑n,h] W2.
+ â\87©*[i] L â\89\98 K.â\93\9bV â\86\92 â\9dªG,Kâ\9d« ⊢ V ➡[n,h] V2 →
+ â\87§*[â\86\91i] V2 â\89\98 W2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ➡[↑n,h] W2.
#n #h #G #L #K #V #V2 #W2 #i #HLK *
/3 width=8 by cpg_ell_drops, isrt_succ, ex2_intro/
qed.
(* Advanced inversion lemmas ************************************************)
-lemma cpm_inv_atom1_drops: â\88\80n,h,I,G,L,T2. â¦\83G,Lâ¦\84 â\8a¢ â\93ª{I} ➡[n,h] T2 →
- ∨∨ T2 = ⓪{I} ∧ n = 0
+lemma cpm_inv_atom1_drops: â\88\80n,h,I,G,L,T2. â\9dªG,Lâ\9d« â\8a¢ â\93ª[I] ➡[n,h] T2 →
+ ∨∨ T2 = ⓪[I] ∧ n = 0
| ∃∃s. T2 = ⋆(⫯[h]s) & I = Sort s & n = 1
- | â\88\83â\88\83K,V,V2,i. â\87©*[i] L â\89\98 K.â\93\93V & â¦\83G,Kâ¦\84 ⊢ V ➡[n,h] V2 &
+ | â\88\83â\88\83K,V,V2,i. â\87©*[i] L â\89\98 K.â\93\93V & â\9dªG,Kâ\9d« ⊢ V ➡[n,h] V2 &
⇧*[↑i] V2 ≘ T2 & I = LRef i
- | â\88\83â\88\83m,K,V,V2,i. â\87©*[i] L â\89\98 K.â\93\9bV & â¦\83G,Kâ¦\84 ⊢ V ➡[m,h] V2 &
+ | â\88\83â\88\83m,K,V,V2,i. â\87©*[i] L â\89\98 K.â\93\9bV & â\9dªG,Kâ\9d« ⊢ V ➡[m,h] V2 &
⇧*[↑i] V2 ≘ T2 & I = LRef i & n = ↑m.
#n #h #I #G #L #T2 * #c #Hc #H elim (cpg_inv_atom1_drops … H) -H *
[ #H1 #H2 destruct lapply (isrt_inv_00 … Hc) -Hc
]
qed-.
-lemma cpm_inv_lref1_drops: â\88\80n,h,G,L,T2,i. â¦\83G,Lâ¦\84 ⊢ #i ➡[n,h] T2 →
+lemma cpm_inv_lref1_drops: â\88\80n,h,G,L,T2,i. â\9dªG,Lâ\9d« ⊢ #i ➡[n,h] T2 →
∨∨ T2 = #i ∧ n = 0
- | â\88\83â\88\83K,V,V2. â\87©*[i] L â\89\98 K.â\93\93V & â¦\83G,Kâ¦\84 ⊢ V ➡[n,h] V2 &
+ | â\88\83â\88\83K,V,V2. â\87©*[i] L â\89\98 K.â\93\93V & â\9dªG,Kâ\9d« ⊢ V ➡[n,h] V2 &
⇧*[↑i] V2 ≘ T2
- | â\88\83â\88\83m,K,V,V2. â\87©*[i] L â\89\98 K. â\93\9bV & â¦\83G,Kâ¦\84 ⊢ V ➡[m,h] V2 &
+ | â\88\83â\88\83m,K,V,V2. â\87©*[i] L â\89\98 K. â\93\9bV & â\9dªG,Kâ\9d« ⊢ V ➡[m,h] V2 &
⇧*[↑i] V2 ≘ T2 & n = ↑m.
#n #h #G #L #T2 #i * #c #Hc #H elim (cpg_inv_lref1_drops … H) -H *
[ #H1 #H2 destruct lapply (isrt_inv_00 … Hc) -Hc
(* Advanced forward lemmas **************************************************)
-fact cpm_fwd_plus_aux (n) (h): â\88\80G,L,T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡[n,h] T2 →
+fact cpm_fwd_plus_aux (n) (h): â\88\80G,L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[n,h] T2 →
∀n1,n2. n1+n2 = n →
- â\88\83â\88\83T. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[n1,h] T & â¦\83G,Lâ¦\84 ⊢ T ➡[n2,h] T2.
+ â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[n1,h] T & â\9dªG,Lâ\9d« ⊢ T ➡[n2,h] T2.
#n #h #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
]
| #n #G #K #V1 #V2 #W2 #_ #IH #HVW2 #n1 #n2 #H destruct
elim IH [|*: // ] -IH #V #HV1 #HV2
- elim (lifts_total V ð\9d\90\94â\9d´â\86\91Oâ\9dµ) #W #HVW
+ elim (lifts_total V ð\9d\90\94â\9d¨â\86\91Oâ\9d©) #W #HVW
/5 width=11 by cpm_lifts_bi, cpm_delta, drops_refl, drops_drop, ex2_intro/
| #n #G #K #V1 #V2 #W2 #HV12 #IH #HVW2 #x1 #n2 #H
elim (plus_inv_S3_sn … H) -H *
[ #H1 #H2 destruct -IH /3 width=3 by cpm_ell, ex2_intro/
| #n1 #H1 #H2 destruct -HV12
elim (IH n1) [|*: // ] -IH #V #HV1 #HV2
- elim (lifts_total V ð\9d\90\94â\9d´â\86\91Oâ\9dµ) #W #HVW
+ elim (lifts_total V ð\9d\90\94â\9d¨â\86\91Oâ\9d©) #W #HVW
/5 width=11 by cpm_lifts_bi, cpm_ell, drops_refl, drops_drop, ex2_intro/
]
| #n #I #G #K #T2 #U2 #i #_ #IH #HTU2 #n1 #n2 #H destruct
elim IH [|*: // ] -IH #T #HT1 #HT2
- elim (lifts_total T ð\9d\90\94â\9d´â\86\91Oâ\9dµ) #U #HTU
+ elim (lifts_total T ð\9d\90\94â\9d¨â\86\91Oâ\9d©) #U #HTU
/5 width=11 by cpm_lifts_bi, cpm_lref, drops_refl, drops_drop, ex2_intro/
| #n #p #I #G #L #V1 #V2 #T1 #T2 #HV12 #_ #_ #IHT #n1 #n2 #H destruct
elim IHT [|*: // ] -IHT #T #HT1 #HT2
]
qed-.
-lemma cpm_fwd_plus (h) (G) (L): â\88\80n1,n2,T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡[n1+n2,h] T2 →
- â\88\83â\88\83T. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[n1,h] T & â¦\83G,Lâ¦\84 ⊢ T ➡[n2,h] T2.
+lemma cpm_fwd_plus (h) (G) (L): â\88\80n1,n2,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[n1+n2,h] T2 →
+ â\88\83â\88\83T. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[n1,h] T & â\9dªG,Lâ\9d« ⊢ T ➡[n2,h] T2.
/2 width=3 by cpm_fwd_plus_aux/ qed-.
#n #h #G #L1 #T1 #T2 * /3 width=5 by lsubr_cpg_trans, ex2_intro/
qed-.
-lemma cpm_bind_unit (n) (h) (G): â\88\80L,V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ➡[h] V2 →
- â\88\80J,T1,T2. â¦\83G,L.â\93¤{J}â¦\84 ⊢ T1 ➡[n,h] T2 →
- â\88\80p,I. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â\9e¡[n,h] â\93\91{p,I}V2.T2.
+lemma cpm_bind_unit (n) (h) (G): â\88\80L,V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h] V2 →
+ â\88\80J,T1,T2. â\9dªG,L.â\93¤[J]â\9d« ⊢ T1 ➡[n,h] T2 →
+ â\88\80p,I. â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V1.T1 â\9e¡[n,h] â\93\91[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\80n,h,G,L,V1,T1,U. â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.T1 â\9e¡[n,h] U â\86\92 ð\9d\90\92â¦\83T1â¦\84 →
- â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 & â¦\83G,Lâ¦\84 ⊢ T1 ➡[n,h] T2 &
+lemma cpm_inv_appl1_simple: â\88\80n,h,G,L,V1,T1,U. â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.T1 â\9e¡[n,h] U â\86\92 ð\9d\90\92â\9dªT1â\9d« →
+ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 & â\9dªG,Lâ\9d« ⊢ T1 ➡[n,h] T2 &
U = ⓐV2.T2.
#n #h #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 (n) (h) (G) (L) (i):
- â\88\80X. â¦\83G,Lâ¦\84 ⊢ #i ➡[n,h] X → #i ≛ X →
+ â\88\80X. â\9dªG,Lâ\9d« ⊢ #i ➡[n,h] X → #i ≛ X →
∧∧ X = #i & n = 0.
#n #h #G #L #i #X #H1 #H2
lapply (teqx_inv_lref1 … H2) -H2 #H destruct
qed-.
lemma cpm_teqx_inv_atom_sn (n) (h) (I) (G) (L):
- â\88\80X. â¦\83G,Lâ¦\84 â\8a¢ â\93ª{I} â\9e¡[n,h] X â\86\92 â\93ª{I} ≛ X →
- ∨∨ ∧∧ X = ⓪{I} & n = 0
+ â\88\80X. â\9dªG,Lâ\9d« â\8a¢ â\93ª[I] â\9e¡[n,h] X â\86\92 â\93ª[I] ≛ X →
+ ∨∨ ∧∧ X = ⓪[I] & n = 0
| ∃∃s. X = ⋆(⫯[h]s) & I = Sort s & n = 1.
#n #h * #s #G #L #X #H1 #H2
[ elim (cpm_inv_sort1 … H1) -H1
(* 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.
- â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡[h] T2 →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\95{I}V1.T1 â\9e¡[h] â\93\95{I}V2.T2.
+ â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡[h] T2 →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\95[I]V1.T1 â\9e¡[h] â\93\95[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. â¦\83G,Lâ¦\84 ⊢ V1 ➡[h] V2 →
- â\88\80T. â¦\83G,Lâ¦\84 â\8a¢ â\91¡{I}V1.T â\9e¡[h] â\91¡{I}V2.T.
+lemma cpr_pair_sn: â\88\80h,I,G,L,V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ➡[h] V2 →
+ â\88\80T. â\9dªG,Lâ\9d« â\8a¢ â\91¡[I]V1.T â\9e¡[h] â\91¡[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. â¦\83G,Lâ¦\84 â\8a¢ â\93ª{J} ➡[h] T2 →
- ∨∨ T2 = ⓪{J}
- | â\88\83â\88\83K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ➡[h] V2 & ⇧*[1] V2 ≘ T2 &
+lemma cpr_inv_atom1: â\88\80h,J,G,L,T2. â\9dªG,Lâ\9d« â\8a¢ â\93ª[J] ➡[h] T2 →
+ ∨∨ T2 = ⓪[J]
+ | â\88\83â\88\83K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡[h] V2 & ⇧*[1] V2 ≘ T2 &
L = K.ⓓV1 & J = LRef 0
- | â\88\83â\88\83I,K,T,i. â¦\83G,Kâ¦\84 ⊢ #i ➡[h] T & ⇧*[1] T ≘ T2 &
- L = K.ⓘ{I} & J = LRef (↑i).
+ | â\88\83â\88\83I,K,T,i. â\9dªG,Kâ\9d« ⊢ #i ➡[h] 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/ ]
[ #n #_ #_ #H destruct
qed-.
(* Basic_1: includes: pr0_gen_sort pr2_gen_sort *)
-lemma cpr_inv_sort1: â\88\80h,G,L,T2,s. â¦\83G,Lâ¦\84 ⊢ ⋆s ➡[h] T2 → T2 = ⋆s.
+lemma cpr_inv_sort1: â\88\80h,G,L,T2,s. â\9dªG,Lâ\9d« ⊢ ⋆s ➡[h] 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. â¦\83G,Lâ¦\84 ⊢ #0 ➡[h] T2 →
+lemma cpr_inv_zero1: â\88\80h,G,L,T2. â\9dªG,Lâ\9d« ⊢ #0 ➡[h] T2 →
∨∨ T2 = #0
- | â\88\83â\88\83K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ➡[h] V2 & ⇧*[1] V2 ≘ T2 &
+ | â\88\83â\88\83K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ➡[h] 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. â¦\83G,Lâ¦\84 ⊢ #↑i ➡[h] T2 →
+lemma cpr_inv_lref1: â\88\80h,G,L,T2,i. â\9dªG,Lâ\9d« ⊢ #↑i ➡[h] T2 →
∨∨ T2 = #(↑i)
- | â\88\83â\88\83I,K,T. â¦\83G,Kâ¦\84 â\8a¢ #i â\9e¡[h] T & â\87§*[1] T â\89\98 T2 & L = K.â\93\98{I}.
+ | â\88\83â\88\83I,K,T. â\9dªG,Kâ\9d« â\8a¢ #i â\9e¡[h] T & â\87§*[1] T â\89\98 T2 & L = K.â\93\98[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. â¦\83G,Lâ¦\84 ⊢ §l ➡[h] T2 → T2 = §l.
+lemma cpr_inv_gref1: â\88\80h,G,L,T2,l. â\9dªG,Lâ\9d« ⊢ §l ➡[h] 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. â¦\83G,Lâ¦\84 ⊢ ⓝ V1.U1 ➡[h] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 & â¦\83G,Lâ¦\84 ⊢ U1 ➡[h] T2 &
+lemma cpr_inv_cast1: â\88\80h,G,L,V1,U1,U2. â\9dªG,Lâ\9d« ⊢ ⓝ V1.U1 ➡[h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 & â\9dªG,Lâ\9d« ⊢ U1 ➡[h] T2 &
U2 = ⓝV2.T2
- | â¦\83G,Lâ¦\84 ⊢ U1 ➡[h] U2.
+ | â\9dªG,Lâ\9d« ⊢ U1 ➡[h] 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. â¦\83G,Lâ¦\84 â\8a¢ â\93\95{I}V1.U1 ➡[h] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 & â¦\83G,Lâ¦\84 ⊢ U1 ➡[h] T2 &
- U2 = ⓕ{I}V2.T2
- | (â¦\83G,Lâ¦\84 ⊢ U1 ➡[h] U2 ∧ I = Cast)
- | â\88\83â\88\83p,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 & â¦\83G,Lâ¦\84 ⊢ W1 ➡[h] W2 &
- â¦\83G,L.â\93\9bW1â¦\84 â\8a¢ T1 â\9e¡[h] T2 & U1 = â\93\9b{p}W1.T1 &
- U2 = ⓓ{p}ⓝW2.V2.T2 & I = Appl
- | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 ⊢ V1 ➡[h] V & ⇧*[1] V ≘ V2 &
- â¦\83G,Lâ¦\84 â\8a¢ W1 â\9e¡[h] W2 & â¦\83G,L.â\93\93W1â¦\84 ⊢ T1 ➡[h] T2 &
- U1 = ⓓ{p}W1.T1 &
- U2 = ⓓ{p}W2.ⓐV2.T2 & I = Appl.
+lemma cpr_inv_flat1: â\88\80h,I,G,L,V1,U1,U2. â\9dªG,Lâ\9d« â\8a¢ â\93\95[I]V1.U1 ➡[h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 & â\9dªG,Lâ\9d« ⊢ U1 ➡[h] T2 &
+ U2 = ⓕ[I]V2.T2
+ | (â\9dªG,Lâ\9d« ⊢ U1 ➡[h] U2 ∧ I = Cast)
+ | â\88\83â\88\83p,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 & â\9dªG,Lâ\9d« ⊢ W1 ➡[h] W2 &
+ â\9dªG,L.â\93\9bW1â\9d« â\8a¢ T1 â\9e¡[h] T2 & U1 = â\93\9b[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] V & ⇧*[1] V ≘ V2 &
+ â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡[h] W2 & â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ➡[h] T2 &
+ U1 = ⓓ[p]W1.T1 &
+ U2 = ⓓ[p]W2.ⓐV2.T2 & I = Appl.
#h * #G #L #V1 #U1 #U2 #H
[ elim (cpm_inv_appl1 … H) -H *
/3 width=13 by or4_intro0, or4_intro2, or4_intro3, ex7_7_intro, ex6_6_intro, ex3_2_intro/
(* Basic eliminators ********************************************************)
lemma cpr_ind (h): ∀Q:relation4 genv lenv term term.
- (∀I,G,L. Q G L (⓪{I}) (⓪{I})) →
- (â\88\80G,K,V1,V2,W2. â¦\83G,Kâ¦\84 ⊢ V1 ➡[h] V2 → Q G K V1 V2 →
+ (∀I,G,L. Q G L (⓪[I]) (⓪[I])) →
+ (â\88\80G,K,V1,V2,W2. â\9dªG,Kâ\9d« ⊢ V1 ➡[h] V2 → Q G K V1 V2 →
⇧*[1] V2 ≘ W2 → Q G (K.ⓓV1) (#0) W2
- ) â\86\92 (â\88\80I,G,K,T,U,i. â¦\83G,Kâ¦\84 ⊢ #i ➡[h] 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. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 â\86\92 â¦\83G,L.â\93\91{I}V1â¦\84 ⊢ T1 ➡[h] T2 →
- Q G L V1 V2 → Q G (L.ⓑ{I}V1) T1 T2 → Q G L (ⓑ{p,I}V1.T1) (ⓑ{p,I}V2.T2)
- ) â\86\92 (â\88\80I,G,L,V1,V2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡[h] T2 →
- Q G L V1 V2 → Q G L T1 T2 → Q G L (ⓕ{I}V1.T1) (ⓕ{I}V2.T2)
- ) â\86\92 (â\88\80G,L,V,T1,T,T2. â\87§*[1] T â\89\98 T1 â\86\92 â¦\83G,Lâ¦\84 ⊢ T ➡[h] T2 →
+ ) â\86\92 (â\88\80I,G,K,T,U,i. â\9dªG,Kâ\9d« ⊢ #i ➡[h] 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] V2 â\86\92 â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ➡[h] T2 →
+ Q G L V1 V2 → Q G (L.ⓑ[I]V1) T1 T2 → Q G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2)
+ ) â\86\92 (â\88\80I,G,L,V1,V2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡[h] T2 →
+ Q G L V1 V2 → Q G L T1 T2 → Q G L (ⓕ[I]V1.T1) (ⓕ[I]V2.T2)
+ ) â\86\92 (â\88\80G,L,V,T1,T,T2. â\87§*[1] T â\89\98 T1 â\86\92 â\9dªG,Lâ\9d« ⊢ T ➡[h] T2 →
Q G L T T2 → Q G L (+ⓓV.T1) T2
- ) â\86\92 (â\88\80G,L,V,T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡[h] T2 → Q G L T1 T2 →
+ ) â\86\92 (â\88\80G,L,V,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[h] T2 → Q G L T1 T2 →
Q G L (ⓝV.T1) T2
- ) â\86\92 (â\88\80p,G,L,V1,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ W1 â\9e¡[h] W2 â\86\92 â¦\83G,L.â\93\9bW1â¦\84 ⊢ T1 ➡[h] T2 →
+ ) â\86\92 (â\88\80p,G,L,V1,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â\9e¡[h] V2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡[h] W2 â\86\92 â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ➡[h] 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. â¦\83G,Lâ¦\84 â\8a¢ V1 â\9e¡[h] V â\86\92 â¦\83G,Lâ¦\84 â\8a¢ W1 â\9e¡[h] W2 â\86\92 â¦\83G,L.â\93\93W1â¦\84 ⊢ T1 ➡[h] 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] V â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â\9e¡[h] W2 â\86\92 â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ➡[h] 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)
+ ⇧*[1] V ≘ V2 → Q G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2)
) →
- â\88\80G,L,T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡[h] T2 → Q G L T1 T2.
+ â\88\80G,L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[h] 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. â¦\83G,Lâ¦\84 â\8a¢ â\93ª{I} ➡[h] T2 →
- ∨∨ T2 = ⓪{I}
- | â\88\83â\88\83K,V,V2,i. â\87©*[i] L â\89\98 K.â\93\93V & â¦\83G,Kâ¦\84 ⊢ V ➡[h] V2 &
+lemma cpr_inv_atom1_drops: â\88\80h,I,G,L,T2. â\9dªG,Lâ\9d« â\8a¢ â\93ª[I] ➡[h] T2 →
+ ∨∨ T2 = ⓪[I]
+ | â\88\83â\88\83K,V,V2,i. â\87©*[i] L â\89\98 K.â\93\93V & â\9dªG,Kâ\9d« ⊢ V ➡[h] 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. â¦\83G,Lâ¦\84 ⊢ #i ➡[h] T2 →
+lemma cpr_inv_lref1_drops: â\88\80h,G,L,T2,i. â\9dªG,Lâ\9d« ⊢ #i ➡[h] T2 →
∨∨ T2 = #i
- | â\88\83â\88\83K,V,V2. â\87©*[i] L â\89\98 K. â\93\93V & â¦\83G,Kâ¦\84 ⊢ V ➡[h] V2 &
+ | â\88\83â\88\83K,V,V2. â\87©*[i] L â\89\98 K. â\93\93V & â\9dªG,Kâ\9d« ⊢ V ➡[h] 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. â¦\83G,Lâ¦\84 ⊢ U1 ➡[h] U2 & ⇧[i,1] T2 ≘ U2.
+ â\88\83â\88\83U2,T2. â\9dªG,Lâ\9d« ⊢ U1 ➡[h] 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
| #j #HG #HL #HT #i #K #V #HLK destruct -IH
elim (lt_or_eq_or_gt i j) #Hij
[ /3 width=4 by lifts_lref_ge_minus, cpr_refl, ex2_2_intro/
- | elim (lifts_total V (ð\9d\90\94â\9d´â\86\91iâ\9dµ)) #U2 #HU2
- elim (lifts_split_trans â\80¦ HU2 (ð\9d\90\94â\9d´iâ\9dµ) (ð\9d\90\81â\9d´i,1â\9dµ)) [2: @(after_basic_rc i 0) ]
+ | elim (lifts_total V (ð\9d\90\94â\9d¨â\86\91iâ\9d©)) #U2 #HU2
+ elim (lifts_split_trans â\80¦ HU2 (ð\9d\90\94â\9d¨iâ\9d©) (ð\9d\90\81â\9d¨i,1â\9d©)) [2: @(after_basic_rc i 0) ]
/3 width=7 by cpm_delta_drops, ex2_2_intro/
| /3 width=4 by lifts_lref_lt, cpr_refl, ex2_2_intro/
]
/2 width=4 by lifts_gref, ex2_2_intro/
| #p #J #W1 #U1 #HG #HL #HT #i #K #V #HLK destruct
elim (IH G L W1 … HLK) [| // ] #W2 #V2 #HW12 #HVW2
- elim (IH G (L.ⓑ{J}W1) U1 … (↑i)) [|*: /3 width=4 by drops_drop/ ] #U2 #T2 #HU12 #HTU2
+ elim (IH G (L.ⓑ[J]W1) U1 … (↑i)) [|*: /3 width=4 by drops_drop/ ] #U2 #T2 #HU12 #HTU2
/3 width=9 by cpm_bind, lifts_bind, ex2_2_intro/
| #J #W1 #U1 #HG #HL #HT #i #K #V #HLK destruct
elim (IH G L W1 … HLK) [| // ] #W2 #V2 #HW12 #HVW2
(* Properties with context-free sort-irrelevant equivalence *****************)
lemma cpr_abbr_pos_tneqx (h) (G) (L) (V) (T1):
- â\88\83â\88\83T2. â¦\83G,Lâ¦\84 ⊢ +ⓓV.T1 ➡[h] T2 & (+ⓓV.T1 ≛ T2 → ⊥).
+ â\88\83â\88\83T2. â\9dªG,Lâ\9d« ⊢ +ⓓV.T1 ➡[h] 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 (teqx_dec 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â¦\83n,câ¦\84 & â¦\83G,Lâ¦\84 ⊢ T1 ⬈[eq …,c,h] T2.
+ λT1,T2. â\88\83â\88\83c. ð\9d\90\93â\9dªn,câ\9d« & â\9dªG,Lâ\9d« ⊢ T1 ⬈[eq …,c,h] T2.
interpretation
"t-bound context-sensitive parallel t-transition (term)"
(* Basic properties *********************************************************)
lemma cpt_ess (h) (G) (L):
- â\88\80s. â¦\83G,Lâ¦\84 ⊢ ⋆s ⬆[h,1] ⋆(⫯[h]s).
+ â\88\80s. â\9dªG,Lâ\9d« ⊢ ⋆s ⬆[h,1] ⋆(⫯[h]s).
/2 width=3 by cpg_ess, ex2_intro/ qed.
lemma cpt_delta (h) (n) (G) (K):
- â\88\80V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬆[h,n] V2 →
- â\88\80W2. â\87§*[1] V2 â\89\98 W2 â\86\92 â¦\83G,K.â\93\93V1â¦\84 ⊢ #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. â¦\83G,Kâ¦\84 ⊢ V1 ⬆[h,n] V2 →
- â\88\80W2. â\87§*[1] V2 â\89\98 W2 â\86\92 â¦\83G,K.â\93\9bV1â¦\84 ⊢ #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. â¦\83G,Kâ¦\84 ⊢ #i ⬆[h,n] T → ∀U. ⇧*[1] T ≘ U →
- â\88\80I. â¦\83G,K.â\93\98{I}â¦\84 ⊢ #↑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. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\86[h,0] V2 â\86\92 â\88\80I,T1,T2. â¦\83G,L.â\93\91{I}V1â¦\84 ⊢ T1 ⬆[h,n] T2 →
- â\88\80p. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â¬\86[h,n] â\93\91{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« â\8a¢ â\93\91[p,I]V1.T1 â¬\86[h,n] â\93\91[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. â¦\83G,Lâ¦\84 ⊢ V1 ⬆[h,0] V2 →
- â\88\80T1,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\86[h,n] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓐ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. â¦\83G,Lâ¦\84 ⊢ U1 ⬆[h,n] U2 →
- â\88\80T1,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\86[h,n] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓝ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. â¦\83G,Lâ¦\84 â\8a¢ U1 â¬\86[h,n] U2 â\86\92 â\88\80T. â¦\83G,Lâ¦\84 ⊢ ⓝ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. â¦\83G,Lâ¦\84 ⊢ ⋆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. â¦\83G,Lâ¦\84 â\8a¢ â\93ª{J} ⬆[h,n] X2 →
- ∨∨ ∧∧ X2 = ⓪{J} & n = 0
+ â\88\80X2. â\9dªG,Lâ\9d« â\8a¢ â\93ª[J] ⬆[h,n] X2 →
+ ∨∨ ∧∧ X2 = ⓪[J] & n = 0
| ∃∃s. X2 = ⋆(⫯[h]s) & J = Sort s & n =1
- | â\88\83â\88\83K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬆[h,n] V2 & ⇧*[1] V2 ≘ X2 & L = K.ⓓV1 & J = LRef 0
- | â\88\83â\88\83m,K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬆[h,m] V2 & ⇧*[1] V2 ≘ X2 & L = K.ⓛV1 & J = LRef 0 & n = ↑m
- | â\88\83â\88\83I,K,T,i. â¦\83G,Kâ¦\84 â\8a¢ #i â¬\86[h,n] T & â\87§*[1] T â\89\98 X2 & L = K.â\93\98{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« â\8a¢ #i â¬\86[h,n] T & â\87§*[1] T â\89\98 X2 & L = K.â\93\98[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. â¦\83G,Lâ¦\84 ⊢ ⋆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. â¦\83G,Lâ¦\84 ⊢ #0 ⬆[h,n] X2 →
+ â\88\80X2. â\9dªG,Lâ\9d« ⊢ #0 ⬆[h,n] X2 →
∨∨ ∧∧ X2 = #0 & n = 0
- | â\88\83â\88\83K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬆[h,n] V2 & ⇧*[1] V2 ≘ X2 & L = K.ⓓV1
- | â\88\83â\88\83m,K,V1,V2. â¦\83G,Kâ¦\84 ⊢ 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 isrt_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. â¦\83G,K.â\93¤{I}â¦\84 ⊢ #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. â¦\83G,Lâ¦\84 ⊢ #↑i ⬆[h,n] X2 →
+ â\88\80X2. â\9dªG,Lâ\9d« ⊢ #↑i ⬆[h,n] X2 →
∨∨ ∧∧ X2 = #(↑i) & n = 0
- | â\88\83â\88\83I,K,T. â¦\83G,Kâ¦\84 â\8a¢ #i â¬\86[h,n] T & â\87§*[1] T â\89\98 X2 & L = K.â\93\98{I}.
+ | â\88\83â\88\83I,K,T. â\9dªG,Kâ\9d« â\8a¢ #i â¬\86[h,n] T & â\87§*[1] T â\89\98 X2 & L = K.â\93\98[I].
#h #n #G #L #i #X2 * #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 cpt_inv_lref_sn_ctop (n) (h) (G) (i):
- â\88\80X2. â¦\83G,â\8b\86â¦\84 ⊢ #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. â¦\83G,Lâ¦\84 ⊢ §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. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 ⬆[h,n] X2 →
- â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\86[h,0] V2 & â¦\83G,L.â\93\91{I}V1â¦\84 ⊢ T1 ⬆[h,n] T2
- & X2 = ⓑ{p,I}V2.T2.
+ â\88\80X2. â\9dªG,Lâ\9d« â\8a¢ â\93\91[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 *
[ #cV #cT #V2 #T2 #HV12 #HT12 #H1 #H2 destruct
qed-.
lemma cpt_inv_appl_sn (h) (n) (G) (L) (V1) (T1):
- â\88\80X2. â¦\83G,Lâ¦\84 ⊢ ⓐV1.T1 ⬆[h,n] X2 →
- â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\86[h,0] V2 & â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ ⓝV1.T1 ⬆[h,n] X2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\86[h,n] V2 & â¦\83G,Lâ¦\84 ⊢ T1 ⬆[h,n] T2 & X2 = ⓝV2.T2
- | â\88\83â\88\83m. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\86[h,n] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ➡[n,h] T2.
+ â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\86[h,n] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ➡[n,h] 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. â¦\83G,Kâ¦\84 ⊢ V ⬆[h,n] V2 →
- â\88\80W2. â\87§*[â\86\91i] V2 â\89\98 W2 â\86\92 â¦\83G,Lâ¦\84 ⊢ #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. â¦\83G,Kâ¦\84 ⊢ V ⬆[h,n] V2 →
- â\88\80W2. â\87§*[â\86\91i] V2 â\89\98 W2 â\86\92 â¦\83G,Lâ¦\84 ⊢ #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. â¦\83G,Lâ¦\84 â\8a¢ â\93ª{I} ⬆[h,n] X2 →
- ∨∨ ∧∧ X2 = ⓪{I} & n = 0
+ â\88\80X2. â\9dªG,Lâ\9d« â\8a¢ â\93ª[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 & â¦\83G,Kâ¦\84 ⊢ 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 & â¦\83G,Kâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ #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 & â¦\83G,Kâ¦\84 ⊢ V ⬆[h,n] V2 & ⇧*[↑i] V2 ≘ X2
- | â\88\83â\88\83m,K,V,V2. â\87©*[i] L â\89\98 K. â\93\9bV & â¦\83G,Kâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T1 ⬆[h,n] T2 → ∀n1,n2. n1+n2 = n →
- â\88\83â\88\83T. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\86[h,n1] T & â¦\83G,Lâ¦\84 ⊢ 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
]
| #n #G #K #V1 #V2 #W2 #_ #IH #HVW2 #n1 #n2 #H destruct
elim IH [|*: // ] -IH #V #HV1 #HV2
- elim (lifts_total V ð\9d\90\94â\9d´â\86\91Oâ\9dµ) #W #HVW
+ elim (lifts_total V ð\9d\90\94â\9d¨â\86\91Oâ\9d©) #W #HVW
/5 width=11 by cpt_lifts_bi, cpt_delta, drops_refl, drops_drop, ex2_intro/
| #n #G #K #V1 #V2 #W2 #HV12 #IH #HVW2 #x1 #n2 #H
elim (plus_inv_S3_sn … H) -H *
[ #H1 #H2 destruct -IH /3 width=3 by cpt_ell, ex2_intro/
| #n1 #H1 #H2 destruct -HV12
elim (IH n1) [|*: // ] -IH #V #HV1 #HV2
- elim (lifts_total V ð\9d\90\94â\9d´â\86\91Oâ\9dµ) #W #HVW
+ elim (lifts_total V ð\9d\90\94â\9d¨â\86\91Oâ\9d©) #W #HVW
/5 width=11 by cpt_lifts_bi, cpt_ell, drops_refl, drops_drop, ex2_intro/
]
| #n #I #G #K #T2 #U2 #i #_ #IH #HTU2 #n1 #n2 #H destruct
elim IH [|*: // ] -IH #T #HT1 #HT2
- elim (lifts_total T ð\9d\90\94â\9d´â\86\91Oâ\9dµ) #U #HTU
+ elim (lifts_total T ð\9d\90\94â\9d¨â\86\91Oâ\9d©) #U #HTU
/5 width=11 by cpt_lifts_bi, cpt_lref, drops_refl, drops_drop, ex2_intro/
| #n #p #I #G #L #V1 #V2 #T1 #T2 #HV12 #_ #_ #IHT #n1 #n2 #H destruct
elim IHT [|*: // ] -IHT #T #HT1 #HT2
qed-.
lemma cpt_fwd_plus (h) (n1) (n2) (G) (L):
- â\88\80T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬆[h,n1+n2] T2 →
- â\88\83â\88\83T. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\86[h,n1] T & â¦\83G,Lâ¦\84 ⊢ 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-.
(* Basic eliminators ********************************************************)
lemma cpt_ind (h) (Q:relation5 …):
- (∀I,G,L. Q 0 G L (⓪{I}) (⓪{I})) →
+ (∀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. â¦\83G,Kâ¦\84 ⊢ 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. â¦\83G,Kâ¦\84 ⊢ 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. â¦\83G,Kâ¦\84 ⊢ #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. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\86[h,0] V2 â\86\92 â¦\83G,L.â\93\91{I}V1â¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\86[h,0] V2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬆[h,n] T2 →
+ ) â\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 →
+ 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 →
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. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\86[h,n] V2 â\86\92 â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ 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 * [| * [| * ]]
(* UNBOUND CONTEXT-SENSITIVE PARALLEL RT-TRANSITION FOR TERMS ***************)
definition cpx (h): relation4 genv lenv term term ≝
- λG,L,T1,T2. â\88\83c. â¦\83G,Lâ¦\84 ⊢ T1 ⬈[eq_f,c,h] T2.
+ λG,L,T1,T2. â\88\83c. â\9dªG,Lâ\9d« ⊢ T1 ⬈[eq_f,c,h] T2.
interpretation
"unbound context-sensitive parallel rt-transition (term)"
(* Basic properties *********************************************************)
(* Basic_2A1: was: cpx_st *)
-lemma cpx_ess: â\88\80h,G,L,s. â¦\83G,Lâ¦\84 ⊢ ⋆s ⬈[h] ⋆(⫯[h]s).
+lemma cpx_ess: â\88\80h,G,L,s. â\9dªG,Lâ\9d« ⊢ ⋆s ⬈[h] ⋆(⫯[h]s).
/2 width=2 by cpg_ess, ex_intro/ qed.
-lemma cpx_delta: â\88\80h,I,G,K,V1,V2,W2. â¦\83G,Kâ¦\84 ⊢ V1 ⬈[h] V2 →
- â\87§*[1] V2 â\89\98 W2 â\86\92 â¦\83G,K.â\93\91{I}V1â¦\84 ⊢ #0 ⬈[h] W2.
+lemma cpx_delta: â\88\80h,I,G,K,V1,V2,W2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[h] V2 →
+ â\87§*[1] V2 â\89\98 W2 â\86\92 â\9dªG,K.â\93\91[I]V1â\9d« ⊢ #0 ⬈[h] W2.
#h * #G #K #V1 #V2 #W2 *
/3 width=4 by cpg_delta, cpg_ell, ex_intro/
qed.
-lemma cpx_lref: â\88\80h,I,G,K,T,U,i. â¦\83G,Kâ¦\84 ⊢ #i ⬈[h] T →
- â\87§*[1] T â\89\98 U â\86\92 â¦\83G,K.â\93\98{I}â¦\84 ⊢ #↑i ⬈[h] U.
+lemma cpx_lref: â\88\80h,I,G,K,T,U,i. â\9dªG,Kâ\9d« ⊢ #i ⬈[h] T →
+ â\87§*[1] T â\89\98 U â\86\92 â\9dªG,K.â\93\98[I]â\9d« ⊢ #↑i ⬈[h] U.
#h #I #G #K #T #U #i *
/3 width=4 by cpg_lref, ex_intro/
qed.
lemma cpx_bind: ∀h,p,I,G,L,V1,V2,T1,T2.
- â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 â\86\92 â¦\83G,L.â\93\91{I}V1â¦\84 ⊢ T1 ⬈[h] T2 →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â¬\88[h] â\93\91{p,I}V2.T2.
+ â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V2 â\86\92 â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ⬈[h] T2 →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V1.T1 â¬\88[h] â\93\91[p,I]V2.T2.
#h #p #I #G #L #V1 #V2 #T1 #T2 * #cV #HV12 *
/3 width=2 by cpg_bind, ex_intro/
qed.
lemma cpx_flat: ∀h,I,G,L,V1,V2,T1,T2.
- â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬈[h] T2 →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\95{I}V1.T1 â¬\88[h] â\93\95{I}V2.T2.
+ â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈[h] T2 →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\95[I]V1.T1 â¬\88[h] â\93\95[I]V2.T2.
#h * #G #L #V1 #V2 #T1 #T2 * #cV #HV12 *
/3 width=5 by cpg_appl, cpg_cast, ex_intro/
qed.
lemma cpx_zeta (h) (G) (L):
- â\88\80T1,T. â\87§*[1] T â\89\98 T1 â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T ⬈[h] T2 →
- â\88\80V. â¦\83G,Lâ¦\84 ⊢ +ⓓV.T1 ⬈[h] T2.
+ â\88\80T1,T. â\87§*[1] T â\89\98 T1 â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T ⬈[h] T2 →
+ â\88\80V. â\9dªG,Lâ\9d« ⊢ +ⓓV.T1 ⬈[h] T2.
#h #G #L #T1 #T #HT1 #T2 *
/3 width=4 by cpg_zeta, ex_intro/
qed.
-lemma cpx_eps: â\88\80h,G,L,V,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88[h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓝV.T1 ⬈[h] T2.
+lemma cpx_eps: â\88\80h,G,L,V,T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88[h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⓝV.T1 ⬈[h] T2.
#h #G #L #V #T1 #T2 *
/3 width=2 by cpg_eps, ex_intro/
qed.
(* Basic_2A1: was: cpx_ct *)
-lemma cpx_ee: â\88\80h,G,L,V1,V2,T. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 â\86\92 â¦\83G,Lâ¦\84 ⊢ ⓝV1.T ⬈[h] V2.
+lemma cpx_ee: â\88\80h,G,L,V1,V2,T. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V2 â\86\92 â\9dªG,Lâ\9d« ⊢ ⓝV1.T ⬈[h] V2.
#h #G #L #V1 #V2 #T *
/3 width=2 by cpg_ee, ex_intro/
qed.
lemma cpx_beta: ∀h,p,G,L,V1,V2,W1,W2,T1,T2.
- â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ W1 â¬\88[h] W2 â\86\92 â¦\83G,L.â\93\9bW1â¦\84 ⊢ T1 ⬈[h] T2 →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\9b{p}W1.T1 â¬\88[h] â\93\93{p}ⓝW2.V2.T2.
+ â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88[h] W2 â\86\92 â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ⬈[h] T2 →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\9b[p]W1.T1 â¬\88[h] â\93\93[p]ⓝW2.V2.T2.
#h #p #G #L #V1 #V2 #W1 #W2 #T1 #T2 * #cV #HV12 * #cW #HW12 *
/3 width=2 by cpg_beta, ex_intro/
qed.
lemma cpx_theta: ∀h,p,G,L,V1,V,V2,W1,W2,T1,T2.
- â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V â\86\92 â\87§*[1] V â\89\98 V2 â\86\92 â¦\83G,Lâ¦\84 ⊢ W1 ⬈[h] W2 →
- â¦\83G,L.â\93\93W1â¦\84 ⊢ T1 ⬈[h] T2 →
- â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.â\93\93{p}W1.T1 â¬\88[h] â\93\93{p}W2.ⓐV2.T2.
+ â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V â\86\92 â\87§*[1] V â\89\98 V2 â\86\92 â\9dªG,Lâ\9d« ⊢ W1 ⬈[h] W2 →
+ â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ⬈[h] T2 →
+ â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.â\93\93[p]W1.T1 â¬\88[h] â\93\93[p]W2.ⓐV2.T2.
#h #p #G #L #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: â\88\80h,I,G,L,V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ⬈[h] V2 →
- â\88\80T. â¦\83G,Lâ¦\84 â\8a¢ â\91¡{I}V1.T â¬\88[h] â\91¡{I}V2.T.
+lemma cpx_pair_sn: â\88\80h,I,G,L,V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈[h] V2 →
+ â\88\80T. â\9dªG,Lâ\9d« â\8a¢ â\91¡[I]V1.T â¬\88[h] â\91¡[I]V2.T.
#h * /2 width=2 by cpx_flat, cpx_bind/
qed.
lemma cpg_cpx (h) (Rt) (c) (G) (L):
- â\88\80T1,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â¬\88[Rt,c,h] T2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬈[h] T2.
+ â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â¬\88[Rt,c,h] T2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈[h] T2.
#h #Rt #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: â\88\80h,J,G,L,T2. â¦\83G,Lâ¦\84 â\8a¢ â\93ª{J} ⬈[h] T2 →
- ∨∨ T2 = ⓪{J}
+lemma cpx_inv_atom1: â\88\80h,J,G,L,T2. â\9dªG,Lâ\9d« â\8a¢ â\93ª[J] ⬈[h] T2 →
+ ∨∨ T2 = ⓪[J]
| ∃∃s. T2 = ⋆(⫯[h]s) & J = Sort s
- | â\88\83â\88\83I,K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬈[h] V2 & ⇧*[1] V2 ≘ T2 &
- L = K.ⓑ{I}V1 & J = LRef 0
- | â\88\83â\88\83I,K,T,i. â¦\83G,Kâ¦\84 ⊢ #i ⬈[h] T & ⇧*[1] T ≘ T2 &
- L = K.ⓘ{I} & J = LRef (↑i).
+ | â\88\83â\88\83I,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[h] V2 & ⇧*[1] V2 ≘ T2 &
+ L = K.ⓑ[I]V1 & J = LRef 0
+ | â\88\83â\88\83I,K,T,i. â\9dªG,Kâ\9d« ⊢ #i ⬈[h] T & ⇧*[1] T ≘ T2 &
+ L = K.ⓘ[I] & J = LRef (↑i).
#h #J #G #L #T2 * #c #H elim (cpg_inv_atom1 … H) -H *
/4 width=8 by or4_intro0, or4_intro1, or4_intro2, or4_intro3, ex4_4_intro, ex2_intro, ex_intro/
qed-.
-lemma cpx_inv_sort1: â\88\80h,G,L,T2,s. â¦\83G,Lâ¦\84 ⊢ ⋆s ⬈[h] T2 →
+lemma cpx_inv_sort1: â\88\80h,G,L,T2,s. â\9dªG,Lâ\9d« ⊢ ⋆s ⬈[h] T2 →
∨∨ T2 = ⋆s | T2 = ⋆(⫯[h]s).
#h #G #L #T2 #s * #c #H elim (cpg_inv_sort1 … H) -H *
/2 width=1 by or_introl, or_intror/
qed-.
-lemma cpx_inv_zero1: â\88\80h,G,L,T2. â¦\83G,Lâ¦\84 ⊢ #0 ⬈[h] T2 →
+lemma cpx_inv_zero1: â\88\80h,G,L,T2. â\9dªG,Lâ\9d« ⊢ #0 ⬈[h] T2 →
∨∨ T2 = #0
- | â\88\83â\88\83I,K,V1,V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬈[h] V2 & ⇧*[1] V2 ≘ T2 &
- L = K.ⓑ{I}V1.
+ | â\88\83â\88\83I,K,V1,V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[h] V2 & ⇧*[1] V2 ≘ T2 &
+ L = K.ⓑ[I]V1.
#h #G #L #T2 * #c #H elim (cpg_inv_zero1 … H) -H *
/4 width=7 by ex3_4_intro, ex_intro, or_introl, or_intror/
qed-.
-lemma cpx_inv_lref1: â\88\80h,G,L,T2,i. â¦\83G,Lâ¦\84 ⊢ #↑i ⬈[h] T2 →
+lemma cpx_inv_lref1: â\88\80h,G,L,T2,i. â\9dªG,Lâ\9d« ⊢ #↑i ⬈[h] T2 →
∨∨ T2 = #(↑i)
- | â\88\83â\88\83I,K,T. â¦\83G,Kâ¦\84 â\8a¢ #i â¬\88[h] T & â\87§*[1] T â\89\98 T2 & L = K.â\93\98{I}.
+ | â\88\83â\88\83I,K,T. â\9dªG,Kâ\9d« â\8a¢ #i â¬\88[h] T & â\87§*[1] T â\89\98 T2 & L = K.â\93\98[I].
#h #G #L #T2 #i * #c #H elim (cpg_inv_lref1 … H) -H *
/4 width=6 by ex3_3_intro, ex_intro, or_introl, or_intror/
qed-.
-lemma cpx_inv_gref1: â\88\80h,G,L,T2,l. â¦\83G,Lâ¦\84 ⊢ §l ⬈[h] T2 → T2 = §l.
+lemma cpx_inv_gref1: â\88\80h,G,L,T2,l. â\9dªG,Lâ\9d« ⊢ §l ⬈[h] T2 → T2 = §l.
#h #G #L #T2 #l * #c #H elim (cpg_inv_gref1 … H) -H //
qed-.
-lemma cpx_inv_bind1: â\88\80h,p,I,G,L,V1,T1,U2. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 ⬈[h] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â¦\83G,L.â\93\91{I}V1â¦\84 ⊢ T1 ⬈[h] T2 &
- U2 = ⓑ{p,I}V2.T2
- | â\88\83â\88\83T. â\87§*[1] T â\89\98 T1 & â¦\83G,Lâ¦\84 ⊢ T ⬈[h] U2 &
+lemma cpx_inv_bind1: â\88\80h,p,I,G,L,V1,T1,U2. â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V1.T1 ⬈[h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V2 & â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ⬈[h] T2 &
+ U2 = ⓑ[p,I]V2.T2
+ | â\88\83â\88\83T. â\87§*[1] T â\89\98 T1 & â\9dªG,Lâ\9d« ⊢ T ⬈[h] U2 &
p = true & I = Abbr.
#h #p #I #G #L #V1 #T1 #U2 * #c #H elim (cpg_inv_bind1 … H) -H *
/4 width=5 by ex4_intro, ex3_2_intro, ex_intro, or_introl, or_intror/
qed-.
-lemma cpx_inv_abbr1: â\88\80h,p,G,L,V1,T1,U2. â¦\83G,Lâ¦\84 â\8a¢ â\93\93{p}V1.T1 ⬈[h] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â¦\83G,L.â\93\93V1â¦\84 ⊢ T1 ⬈[h] T2 &
- U2 = ⓓ{p}V2.T2
- | â\88\83â\88\83T. â\87§*[1] T â\89\98 T1 & â¦\83G,Lâ¦\84 ⊢ T ⬈[h] U2 & p = true.
+lemma cpx_inv_abbr1: â\88\80h,p,G,L,V1,T1,U2. â\9dªG,Lâ\9d« â\8a¢ â\93\93[p]V1.T1 ⬈[h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V2 & â\9dªG,L.â\93\93V1â\9d« ⊢ T1 ⬈[h] T2 &
+ U2 = ⓓ[p]V2.T2
+ | â\88\83â\88\83T. â\87§*[1] T â\89\98 T1 & â\9dªG,Lâ\9d« ⊢ T ⬈[h] U2 & p = true.
#h #p #G #L #V1 #T1 #U2 * #c #H elim (cpg_inv_abbr1 … H) -H *
/4 width=5 by ex3_2_intro, ex3_intro, ex_intro, or_introl, or_intror/
qed-.
-lemma cpx_inv_abst1: â\88\80h,p,G,L,V1,T1,U2. â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p}V1.T1 ⬈[h] U2 →
- â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â¦\83G,L.â\93\9bV1â¦\84 ⊢ T1 ⬈[h] T2 &
- U2 = ⓛ{p}V2.T2.
+lemma cpx_inv_abst1: â\88\80h,p,G,L,V1,T1,U2. â\9dªG,Lâ\9d« â\8a¢ â\93\9b[p]V1.T1 ⬈[h] U2 →
+ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V2 & â\9dªG,L.â\93\9bV1â\9d« ⊢ T1 ⬈[h] T2 &
+ U2 = ⓛ[p]V2.T2.
#h #p #G #L #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: â\88\80h,G,L,V1,U1,U2. â¦\83G,Lâ¦\84 ⊢ ⓐ V1.U1 ⬈[h] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â¦\83G,Lâ¦\84 ⊢ U1 ⬈[h] T2 &
+lemma cpx_inv_appl1: â\88\80h,G,L,V1,U1,U2. â\9dªG,Lâ\9d« ⊢ ⓐ V1.U1 ⬈[h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V2 & â\9dªG,Lâ\9d« ⊢ U1 ⬈[h] T2 &
U2 = ⓐV2.T2
- | â\88\83â\88\83p,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â¦\83G,Lâ¦\84 ⊢ W1 ⬈[h] W2 &
- â¦\83G,L.â\93\9bW1â¦\84 ⊢ T1 ⬈[h] T2 &
- U1 = ⓛ{p}W1.T1 & U2 = ⓓ{p}ⓝW2.V2.T2
- | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 ⊢ V1 ⬈[h] V & ⇧*[1] V ≘ V2 &
- â¦\83G,Lâ¦\84 â\8a¢ W1 â¬\88[h] W2 & â¦\83G,L.â\93\93W1â¦\84 ⊢ T1 ⬈[h] T2 &
- U1 = ⓓ{p}W1.T1 & U2 = ⓓ{p}W2.ⓐV2.T2.
+ | â\88\83â\88\83p,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V2 & â\9dªG,Lâ\9d« ⊢ W1 ⬈[h] W2 &
+ â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ⬈[h] T2 &
+ U1 = ⓛ[p]W1.T1 & U2 = ⓓ[p]ⓝW2.V2.T2
+ | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« ⊢ V1 ⬈[h] V & ⇧*[1] V ≘ V2 &
+ â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88[h] W2 & â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ⬈[h] T2 &
+ U1 = ⓓ[p]W1.T1 & U2 = ⓓ[p]W2.ⓐV2.T2.
#h #G #L #V1 #U1 #U2 * #c #H elim (cpg_inv_appl1 … H) -H *
/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: â\88\80h,G,L,V1,U1,U2. â¦\83G,Lâ¦\84 ⊢ ⓝV1.U1 ⬈[h] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â¦\83G,Lâ¦\84 ⊢ U1 ⬈[h] T2 &
+lemma cpx_inv_cast1: â\88\80h,G,L,V1,U1,U2. â\9dªG,Lâ\9d« ⊢ ⓝV1.U1 ⬈[h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V2 & â\9dªG,Lâ\9d« ⊢ U1 ⬈[h] T2 &
U2 = ⓝV2.T2
- | â¦\83G,Lâ¦\84 ⊢ U1 ⬈[h] U2
- | â¦\83G,Lâ¦\84 ⊢ V1 ⬈[h] U2.
+ | â\9dªG,Lâ\9d« ⊢ U1 ⬈[h] U2
+ | â\9dªG,Lâ\9d« ⊢ V1 ⬈[h] U2.
#h #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: â\88\80h,I,G,K,V1,T2. â¦\83G,K.â\93\91{I}V1â¦\84 ⊢ #0 ⬈[h] T2 →
+lemma cpx_inv_zero1_pair: â\88\80h,I,G,K,V1,T2. â\9dªG,K.â\93\91[I]V1â\9d« ⊢ #0 ⬈[h] T2 →
∨∨ T2 = #0
- | â\88\83â\88\83V2. â¦\83G,Kâ¦\84 ⊢ V1 ⬈[h] V2 & ⇧*[1] V2 ≘ T2.
+ | â\88\83â\88\83V2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[h] V2 & ⇧*[1] V2 ≘ T2.
#h #I #G #L #V1 #T2 * #c #H elim (cpg_inv_zero1_pair … H) -H *
/4 width=3 by ex2_intro, ex_intro, or_intror, or_introl/
qed-.
-lemma cpx_inv_lref1_bind: â\88\80h,I,G,K,T2,i. â¦\83G,K.â\93\98{I}â¦\84 ⊢ #↑i ⬈[h] T2 →
+lemma cpx_inv_lref1_bind: â\88\80h,I,G,K,T2,i. â\9dªG,K.â\93\98[I]â\9d« ⊢ #↑i ⬈[h] T2 →
∨∨ T2 = #(↑i)
- | â\88\83â\88\83T. â¦\83G,Kâ¦\84 ⊢ #i ⬈[h] T & ⇧*[1] T ≘ T2.
+ | â\88\83â\88\83T. â\9dªG,Kâ\9d« ⊢ #i ⬈[h] T & ⇧*[1] T ≘ T2.
#h #I #G #L #T2 #i * #c #H elim (cpg_inv_lref1_bind … H) -H *
/4 width=3 by ex2_intro, ex_intro, or_introl, or_intror/
qed-.
-lemma cpx_inv_flat1: â\88\80h,I,G,L,V1,U1,U2. â¦\83G,Lâ¦\84 â\8a¢ â\93\95{I}V1.U1 ⬈[h] U2 →
- â\88¨â\88¨ â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â¦\83G,Lâ¦\84 ⊢ U1 ⬈[h] T2 &
- U2 = ⓕ{I}V2.T2
- | (â¦\83G,Lâ¦\84 ⊢ U1 ⬈[h] U2 ∧ I = Cast)
- | (â¦\83G,Lâ¦\84 ⊢ V1 ⬈[h] U2 ∧ I = Cast)
- | â\88\83â\88\83p,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â¦\83G,Lâ¦\84 ⊢ W1 ⬈[h] W2 &
- â¦\83G,L.â\93\9bW1â¦\84 ⊢ T1 ⬈[h] T2 &
- U1 = ⓛ{p}W1.T1 &
- U2 = ⓓ{p}ⓝW2.V2.T2 & I = Appl
- | â\88\83â\88\83p,V,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 ⊢ V1 ⬈[h] V & ⇧*[1] V ≘ V2 &
- â¦\83G,Lâ¦\84 â\8a¢ W1 â¬\88[h] W2 & â¦\83G,L.â\93\93W1â¦\84 ⊢ T1 ⬈[h] T2 &
- U1 = ⓓ{p}W1.T1 &
- U2 = ⓓ{p}W2.ⓐV2.T2 & I = Appl.
+lemma cpx_inv_flat1: â\88\80h,I,G,L,V1,U1,U2. â\9dªG,Lâ\9d« â\8a¢ â\93\95[I]V1.U1 ⬈[h] U2 →
+ â\88¨â\88¨ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V2 & â\9dªG,Lâ\9d« ⊢ U1 ⬈[h] T2 &
+ U2 = ⓕ[I]V2.T2
+ | (â\9dªG,Lâ\9d« ⊢ U1 ⬈[h] U2 ∧ I = Cast)
+ | (â\9dªG,Lâ\9d« ⊢ V1 ⬈[h] U2 ∧ I = Cast)
+ | â\88\83â\88\83p,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V2 & â\9dªG,Lâ\9d« ⊢ W1 ⬈[h] W2 &
+ â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ⬈[h] 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] V & ⇧*[1] V ≘ V2 &
+ â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88[h] W2 & â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ⬈[h] T2 &
+ U1 = ⓓ[p]W1.T1 &
+ U2 = ⓓ[p]W2.ⓐV2.T2 & I = Appl.
#h * #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: â\88\80h,I,G,L,V1,T1,T. â¦\83G,Lâ¦\84 â\8a¢ -â\93\91{I}V1.T1 ⬈[h] T → ∀p.
- â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â¬\88[h] â\93\91{p,I}V2.T2 &
- T = -ⓑ{I}V2.T2.
+lemma cpx_fwd_bind1_minus: â\88\80h,I,G,L,V1,T1,T. â\9dªG,Lâ\9d« â\8a¢ -â\93\91[I]V1.T1 ⬈[h] T → ∀p.
+ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V1.T1 â¬\88[h] â\93\91[p,I]V2.T2 &
+ T = -ⓑ[I]V2.T2.
#h #I #G #L #V1 #T1 #T * #c #H #p elim (cpg_fwd_bind1_minus … H p) -H
/3 width=4 by ex2_2_intro, ex_intro/
qed-.
(* Basic eliminators ********************************************************)
lemma cpx_ind: ∀h. ∀Q:relation4 genv lenv term term.
- (∀I,G,L. Q G L (⓪{I}) (⓪{I})) →
+ (∀I,G,L. Q G L (⓪[I]) (⓪[I])) →
(∀G,L,s. Q G L (⋆s) (⋆(⫯[h]s))) →
- (â\88\80I,G,K,V1,V2,W2. â¦\83G,Kâ¦\84 ⊢ V1 ⬈[h] 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. â¦\83G,Kâ¦\84 ⊢ #i ⬈[h] 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. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 â\86\92 â¦\83G,L.â\93\91{I}V1â¦\84 ⊢ T1 ⬈[h] T2 →
- Q G L V1 V2 → Q G (L.ⓑ{I}V1) T1 T2 → Q G L (ⓑ{p,I}V1.T1) (ⓑ{p,I}V2.T2)
- ) â\86\92 (â\88\80I,G,L,V1,V2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 â\86\92 â¦\83G,Lâ¦\84 ⊢ T1 ⬈[h] T2 →
- Q G L V1 V2 → Q G L T1 T2 → Q G L (ⓕ{I}V1.T1) (ⓕ{I}V2.T2)
- ) â\86\92 (â\88\80G,L,V,T1,T,T2. â\87§*[1] T â\89\98 T1 â\86\92 â¦\83G,Lâ¦\84 ⊢ T ⬈[h] T2 → Q G L T T2 →
+ (â\88\80I,G,K,V1,V2,W2. â\9dªG,Kâ\9d« ⊢ V1 ⬈[h] 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 ⬈[h] 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[h] V2 â\86\92 â\9dªG,L.â\93\91[I]V1â\9d« ⊢ T1 ⬈[h] T2 →
+ Q G L V1 V2 → Q G (L.ⓑ[I]V1) T1 T2 → Q G L (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2)
+ ) â\86\92 (â\88\80I,G,L,V1,V2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V2 â\86\92 â\9dªG,Lâ\9d« ⊢ T1 ⬈[h] T2 →
+ Q G L V1 V2 → Q G L T1 T2 → Q G L (ⓕ[I]V1.T1) (ⓕ[I]V2.T2)
+ ) â\86\92 (â\88\80G,L,V,T1,T,T2. â\87§*[1] T â\89\98 T1 â\86\92 â\9dªG,Lâ\9d« ⊢ T ⬈[h] T2 → Q G L T T2 →
Q G L (+ⓓV.T1) T2
- ) â\86\92 (â\88\80G,L,V,T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈[h] T2 → Q G L T1 T2 →
+ ) â\86\92 (â\88\80G,L,V,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈[h] T2 → Q G L T1 T2 →
Q G L (ⓝV.T1) T2
- ) â\86\92 (â\88\80G,L,V1,V2,T. â¦\83G,Lâ¦\84 ⊢ V1 ⬈[h] V2 → Q G L V1 V2 →
+ ) â\86\92 (â\88\80G,L,V1,V2,T. â\9dªG,Lâ\9d« ⊢ V1 ⬈[h] V2 → Q G L V1 V2 →
Q G L (ⓝV1.T) V2
- ) â\86\92 (â\88\80p,G,L,V1,V2,W1,W2,T1,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 â\86\92 â¦\83G,Lâ¦\84 â\8a¢ W1 â¬\88[h] W2 â\86\92 â¦\83G,L.â\93\9bW1â¦\84 ⊢ T1 ⬈[h] T2 →
+ ) â\86\92 (â\88\80p,G,L,V1,V2,W1,W2,T1,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V2 â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88[h] W2 â\86\92 â\9dªG,L.â\93\9bW1â\9d« ⊢ T1 ⬈[h] 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. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V â\86\92 â¦\83G,Lâ¦\84 â\8a¢ W1 â¬\88[h] W2 â\86\92 â¦\83G,L.â\93\93W1â¦\84 ⊢ T1 ⬈[h] 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[h] V â\86\92 â\9dªG,Lâ\9d« â\8a¢ W1 â¬\88[h] W2 â\86\92 â\9dªG,L.â\93\93W1â\9d« ⊢ T1 ⬈[h] 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)
+ ⇧*[1] V ≘ V2 → Q G L (ⓐV1.ⓓ[p]W1.T1) (ⓓ[p]W2.ⓐV2.T2)
) →
- â\88\80G,L,T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ⬈[h] T2 → Q G L T1 T2.
+ â\88\80G,L,T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ⬈[h] T2 → Q G L T1 T2.
#h #Q #IH1 #IH2 #IH3 #IH4 #IH5 #IH6 #IH7 #IH8 #IH9 #IH10 #IH11 #G #L #T1 #T2
* #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: ∀h,I,G,L,K,V,V2,W2,i.
- ⇩*[i] L ≘ K.ⓑ{I}V → ⦃G,K⦄ ⊢ V ⬈[h] V2 →
- â\87§*[â\86\91i] V2 â\89\98 W2 â\86\92 â¦\83G,Lâ¦\84 ⊢ #i ⬈[h] W2.
+ ⇩*[i] L ≘ K.ⓑ[I]V → ❪G,K❫ ⊢ V ⬈[h] V2 →
+ â\87§*[â\86\91i] V2 â\89\98 W2 â\86\92 â\9dªG,Lâ\9d« ⊢ #i ⬈[h] W2.
#h * #G #L #K #V #V2 #W2 #i #HLK *
/3 width=7 by cpg_ell_drops, cpg_delta_drops, ex_intro/
qed.
(* Advanced inversion lemmas ************************************************)
(* Basic_2A1: was: cpx_inv_atom1 *)
-lemma cpx_inv_atom1_drops: â\88\80h,I,G,L,T2. â¦\83G,Lâ¦\84 â\8a¢ â\93ª{I} ⬈[h] T2 →
- ∨∨ T2 = ⓪{I}
+lemma cpx_inv_atom1_drops: â\88\80h,I,G,L,T2. â\9dªG,Lâ\9d« â\8a¢ â\93ª[I] ⬈[h] T2 →
+ ∨∨ T2 = ⓪[I]
| ∃∃s. T2 = ⋆(⫯[h]s) & I = Sort s
- | ∃∃J,K,V,V2,i. ⇩*[i] L ≘ K.ⓑ{J}V & ⦃G,K⦄ ⊢ V ⬈[h] V2 &
+ | ∃∃J,K,V,V2,i. ⇩*[i] L ≘ K.ⓑ[J]V & ❪G,K❫ ⊢ V ⬈[h] V2 &
⇧*[↑i] V2 ≘ T2 & I = LRef i.
#h #I #G #L #T2 * #c #H elim (cpg_inv_atom1_drops … H) -H *
/4 width=9 by or3_intro0, or3_intro1, or3_intro2, ex4_5_intro, ex2_intro, ex_intro/
qed-.
(* Basic_2A1: was: cpx_inv_lref1 *)
-lemma cpx_inv_lref1_drops: â\88\80h,G,L,T2,i. â¦\83G,Lâ¦\84 ⊢ #i ⬈[h] T2 →
+lemma cpx_inv_lref1_drops: â\88\80h,G,L,T2,i. â\9dªG,Lâ\9d« ⊢ #i ⬈[h] T2 →
T2 = #i ∨
- ∃∃J,K,V,V2. ⇩*[i] L ≘ K. ⓑ{J}V & ⦃G,K⦄ ⊢ V ⬈[h] V2 &
+ ∃∃J,K,V,V2. ⇩*[i] L ≘ K. ⓑ[J]V & ❪G,K❫ ⊢ V ⬈[h] V2 &
⇧*[↑i] V2 ≘ T2.
#h #G #L #T1 #i * #c #H elim (cpg_inv_lref1_drops … H) -H *
/4 width=7 by ex3_4_intro, ex_intro, or_introl, or_intror/
(* Properties with basic relocation *****************************************)
lemma cpx_subst (h) (G) (L) (U1) (i):
- ∀I,K,V. ⇩*[i] L ≘ K.ⓑ{I}V →
- â\88\83â\88\83U2,T2. â¦\83G,Lâ¦\84 ⊢ U1 ⬈[h] U2 & ⇧[i,1] T2 ≘ U2.
+ ∀I,K,V. ⇩*[i] L ≘ K.ⓑ[I]V →
+ â\88\83â\88\83U2,T2. â\9dªG,Lâ\9d« ⊢ U1 ⬈[h] 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 #I #K #V #_ destruct -IH
| #j #HG #HL #HT #i #I #K #V #HLK destruct -IH
elim (lt_or_eq_or_gt i j) #Hij
[ /3 width=4 by lifts_lref_ge_minus, cpx_refl, ex2_2_intro/
- | elim (lifts_total V (ð\9d\90\94â\9d´â\86\91iâ\9dµ)) #U2 #HU2
- elim (lifts_split_trans â\80¦ HU2 (ð\9d\90\94â\9d´iâ\9dµ) (ð\9d\90\81â\9d´i,1â\9dµ)) [2: @(after_basic_rc i 0) ]
+ | elim (lifts_total V (ð\9d\90\94â\9d¨â\86\91iâ\9d©)) #U2 #HU2
+ elim (lifts_split_trans â\80¦ HU2 (ð\9d\90\94â\9d¨iâ\9d©) (ð\9d\90\81â\9d¨i,1â\9d©)) [2: @(after_basic_rc i 0) ]
/3 width=7 by cpx_delta_drops, ex2_2_intro/
| /3 width=4 by lifts_lref_lt, cpx_refl, ex2_2_intro/
]
/2 width=4 by lifts_gref, ex2_2_intro/
| #p #J #W1 #U1 #HG #HL #HT #i #I #K #V #HLK destruct
elim (IH G L W1 … HLK) [| // ] #W2 #V2 #HW12 #HVW2
- elim (IH G (L.ⓑ{J}W1) U1 … (↑i)) [|*: /3 width=4 by drops_drop/ ] #U2 #T2 #HU12 #HTU2
+ elim (IH G (L.ⓑ[J]W1) U1 … (↑i)) [|*: /3 width=4 by drops_drop/ ] #U2 #T2 #HU12 #HTU2
/3 width=9 by cpx_bind, lifts_bind, ex2_2_intro/
| #J #W1 #U1 #HG #HL #HT #i #I #K #V #HLK destruct
elim (IH G L W1 … HLK) [| // ] #W2 #V2 #HW12 #HVW2
(* Properties with sort-irrelevant equivalence for closures *****************)
-lemma feqx_cpx_trans: â\88\80h,G1,G2,L1,L2,T1,T. â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,Tâ¦\84 →
- â\88\80T2. â¦\83G2,L2â¦\84 ⊢ T ⬈[h] T2 →
- â\88\83â\88\83T0. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] T0 & â¦\83G1,L1,T0â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84.
+lemma feqx_cpx_trans: â\88\80h,G1,G2,L1,L2,T1,T. â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,Tâ\9d« →
+ â\88\80T2. â\9dªG2,L2â\9d« ⊢ T ⬈[h] T2 →
+ â\88\83â\88\83T0. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88[h] T0 & â\9dªG1,L1,T0â\9d« â\89\9b â\9dªG2,L2,T2â\9d«.
#h #G1 #G2 #L1 #L2 #T1 #T #H #T2 #HT2
elim (feqx_inv_gen_dx … H) -H #H #HL12 #HT1 destruct
elim (reqx_cpx_trans … HL12 … HT2) #T0 #HT0 #HT02
(* Properties on supclosure *************************************************)
-lemma fqu_cpx_trans: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80U2. â¦\83G2,L2â¦\84 ⊢ T2 ⬈[h] U2 →
- â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & â¦\83G1,L1,U1â¦\84 â¬\82[b] â¦\83G2,L2,U2â¦\84.
+lemma fqu_cpx_trans: â\88\80h,b,G1,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] U2 →
+ â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88[h] U1 & â\9dªG1,L1,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=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
- elim (lifts_total X2 (ð\9d\90\94â\9d´1â\9dµ))
+ elim (lifts_total X2 (ð\9d\90\94â\9d¨1â\9d©))
/3 width=3 by fqu_drop, cpx_delta, ex2_intro/
| /5 width=4 by lsubr_cpx_trans, cpx_bind, lsubr_unit, fqu_clear, ex2_intro/
| #I #G #L2 #T2 #X2 #HTX2 #U2 #HTU2
- elim (cpx_lifts_sn … HTU2 (Ⓣ) … (L2.ⓘ{I}) … HTX2)
+ elim (cpx_lifts_sn … HTU2 (Ⓣ) … (L2.ⓘ[I]) … HTX2)
/3 width=3 by fqu_drop, drops_refl, drops_drop, ex2_intro/
]
qed-.
-lemma fquq_cpx_trans: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80U2. â¦\83G2,L2â¦\84 ⊢ T2 ⬈[h] U2 →
- â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & â¦\83G1,L1,U1â¦\84 â¬\82⸮[b] â¦\83G2,L2,U2â¦\84.
+lemma fquq_cpx_trans: â\88\80h,b,G1,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] U2 →
+ â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88[h] U1 & â\9dªG1,L1,U1â\9d« â¬\82⸮[b] â\9dªG2,L2,U2â\9d«.
#h #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: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80U2. â¦\83G2,L2â¦\84 ⊢ T2 ⬈[h] U2 →
- â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & â¦\83G1,L1,U1â¦\84 â¬\82+[b] â¦\83G2,L2,U2â¦\84.
+lemma fqup_cpx_trans: â\88\80h,b,G1,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] U2 →
+ â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88[h] U1 & â\9dªG1,L1,U1â\9d« â¬\82+[b] â\9dªG2,L2,U2â\9d«.
#h #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: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80U2. â¦\83G2,L2â¦\84 ⊢ T2 ⬈[h] U2 →
- â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & â¦\83G1,L1,U1â¦\84 â¬\82*[b] â¦\83G2,L2,U2â¦\84.
+lemma fqus_cpx_trans: â\88\80h,b,G1,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] U2 →
+ â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88[h] U1 & â\9dªG1,L1,U1â\9d« â¬\82*[b] â\9dªG2,L2,U2â\9d«.
#h #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: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80U2. â¦\83G2,L2â¦\84 ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) →
- â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â¬\82[b] â¦\83G2,L2,U2â¦\84.
+lemma fqu_cpx_trans_tneqx: â\88\80h,b,G1,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] U2 → (T2 ≛ U2 → ⊥) →
+ â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â\9dªG1,L1,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
-[ #I #G #L #V1 #V2 #HV12 #_ elim (lifts_total V2 ð\9d\90\94â\9d´1â\9dµ)
+[ #I #G #L #V1 #V2 #HV12 #_ elim (lifts_total V2 ð\9d\90\94â\9d¨1â\9d©)
#U2 #HVU2 @(ex3_intro … U2)
[1,3: /3 width=7 by cpx_delta, fqu_drop/
| #H lapply (teqx_inv_lref1 … H) -H
#H destruct /2 width=5 by lifts_inv_lref2_uni_lt/
]
-| #I #G #L #V1 #T #V2 #HV12 #H0 @(ex3_intro … (②{I}V2.T))
+| #I #G #L #V1 #T #V2 #HV12 #H0 @(ex3_intro … (②[I]V2.T))
[1,3: /2 width=4 by fqu_pair_sn, cpx_pair_sn/
| #H elim (teqx_inv_pair … H) -H /2 width=1 by/
]
-| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ{p,I}V.T2))
+| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ[p,I]V.T2))
[1,3: /2 width=4 by fqu_bind_dx, cpx_bind/
| #H elim (teqx_inv_pair … H) -H /2 width=1 by/
]
-| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ{p,I}V.T2))
+| #p #I #G #L #V #T1 #Hb #T2 #HT12 #H0 @(ex3_intro … (ⓑ[p,I]V.T2))
[1,3: /4 width=4 by lsubr_cpx_trans, cpx_bind, lsubr_unit, fqu_clear/
| #H elim (teqx_inv_pair … H) -H /2 width=1 by/
]
-| #I #G #L #V #T1 #T2 #HT12 #H0 @(ex3_intro … (ⓕ{I}V.T2))
+| #I #G #L #V #T1 #T2 #HT12 #H0 @(ex3_intro … (ⓕ[I]V.T2))
[1,3: /2 width=4 by fqu_flat_dx, cpx_flat/
| #H elim (teqx_inv_pair … H) -H /2 width=1 by/
]
| #I #G #L #T1 #U1 #HTU1 #T2 #HT12 #H0
- elim (cpx_lifts_sn … HT12 (Ⓣ) … (L.ⓘ{I}) … HTU1) -HT12
+ elim (cpx_lifts_sn … HT12 (Ⓣ) … (L.ⓘ[I]) … HTU1) -HT12
/4 width=6 by fqu_drop, drops_refl, drops_drop, teqx_inv_lifts_bi, ex3_intro/
]
qed-.
-lemma fquq_cpx_trans_tneqx: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80U2. â¦\83G2,L2â¦\84 ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) →
- â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â¬\82⸮[b] â¦\83G2,L2,U2â¦\84.
+lemma fquq_cpx_trans_tneqx: â\88\80h,b,G1,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] U2 → (T2 ≛ U2 → ⊥) →
+ â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â\9dªG1,L1,U1â\9d« â¬\82⸮[b] â\9dªG2,L2,U2â\9d«.
#h #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: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80U2. â¦\83G2,L2â¦\84 ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) →
- â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â¬\82+[b] â¦\83G2,L2,U2â¦\84.
+lemma fqup_cpx_trans_tneqx: â\88\80h,b,G1,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] U2 → (T2 ≛ U2 → ⊥) →
+ â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â\9dªG1,L1,U1â\9d« â¬\82+[b] â\9dªG2,L2,U2â\9d«.
#h #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: â\88\80h,b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80U2. â¦\83G2,L2â¦\84 ⊢ T2 ⬈[h] U2 → (T2 ≛ U2 → ⊥) →
- â\88\83â\88\83U1. â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â¦\83G1,L1,U1â¦\84 â¬\82*[b] â¦\83G2,L2,U2â¦\84.
+lemma fqus_cpx_trans_tneqx: â\88\80h,b,G1,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] U2 → (T2 ≛ U2 → ⊥) →
+ â\88\83â\88\83U1. â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88[h] U1 & T1 â\89\9b U1 â\86\92 â\8a¥ & â\9dªG1,L1,U1â\9d« â¬\82*[b] â\9dªG2,L2,U2â\9d«.
#h #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/
#h #G #L1 #T1 #T2 * /3 width=4 by lsubr_cpg_trans, ex_intro/
qed-.
-lemma cpx_bind_unit (h) (G): â\88\80L,V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ⬈[h] V2 →
- â\88\80J,T1,T2. â¦\83G,L.â\93¤{J}â¦\84 ⊢ T1 ⬈[h] T2 →
- â\88\80p,I. â¦\83G,Lâ¦\84 â\8a¢ â\93\91{p,I}V1.T1 â¬\88[h] â\93\91{p,I}V2.T2.
+lemma cpx_bind_unit (h) (G): â\88\80L,V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈[h] V2 →
+ â\88\80J,T1,T2. â\9dªG,L.â\93¤[J]â\9d« ⊢ T1 ⬈[h] T2 →
+ â\88\80p,I. â\9dªG,Lâ\9d« â\8a¢ â\93\91[p,I]V1.T1 â¬\88[h] â\93\91[p,I]V2.T2.
/4 width=4 by lsubr_cpx_trans, cpx_bind, lsubr_unit/ qed.
/3 width=6 by cpx_rex_conf/ qed-.
(* Basic_2A1: was just: cpx_lleq_conf_dx *)
-lemma cpx_reqx_conf_dx: â\88\80h,G,L2,T1,T2. â¦\83G,L2â¦\84 ⊢ T1 ⬈[h] T2 →
+lemma cpx_reqx_conf_dx: â\88\80h,G,L2,T1,T2. â\9dªG,L2â\9d« ⊢ T1 ⬈[h] T2 →
∀L1. L1 ≛[T1] L2 → L1 ≛[T2] L2.
/4 width=5 by cpx_reqx_conf_sn, reqx_sym/ qed-.
(* Inversion lemmas with simple terms ***************************************)
-lemma cpx_inv_appl1_simple: â\88\80h,G,L,V1,T1,U. â¦\83G,Lâ¦\84 â\8a¢ â\93\90V1.T1 â¬\88[h] U â\86\92 ð\9d\90\92â¦\83T1â¦\84 →
- â\88\83â\88\83V2,T2. â¦\83G,Lâ¦\84 â\8a¢ V1 â¬\88[h] V2 & â¦\83G,Lâ¦\84 ⊢ T1 ⬈[h] T2 &
+lemma cpx_inv_appl1_simple: â\88\80h,G,L,V1,T1,U. â\9dªG,Lâ\9d« â\8a¢ â\93\90V1.T1 â¬\88[h] U â\86\92 ð\9d\90\92â\9dªT1â\9d« →
+ â\88\83â\88\83V2,T2. â\9dªG,Lâ\9d« â\8a¢ V1 â¬\88[h] V2 & â\9dªG,Lâ\9d« ⊢ T1 ⬈[h] T2 &
U = ⓐV2.T2.
#h #G #L #V1 #T1 #U * #c #H #HT1 elim (cpg_inv_appl1_simple … H) -H
/3 width=5 by ex3_2_intro, ex_intro/
(* PROPER PARALLEL RST-TRANSITION FOR CLOSURES ******************************)
inductive fpb (h) (G1) (L1) (T1): relation3 genv lenv term ≝
-| fpb_fqu: â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â¬\82 â¦\83G2,L2,T2â¦\84 → fpb h G1 L1 T1 G2 L2 T2
-| fpb_cpx: â\88\80T2. â¦\83G1,L1â¦\84 ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → fpb h G1 L1 T1 G1 L1 T2
-| fpb_lpx: â\88\80L2. â¦\83G1,L1â¦\84 ⊢ ⬈[h] L2 → (L1 ≛[T1] L2 → ⊥) → fpb h G1 L1 T1 G1 L2 T1
+| fpb_fqu: â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â¬\82 â\9dªG2,L2,T2â\9d« → fpb h G1 L1 T1 G2 L2 T2
+| fpb_cpx: â\88\80T2. â\9dªG1,L1â\9d« ⊢ T1 ⬈[h] T2 → (T1 ≛ T2 → ⊥) → fpb h G1 L1 T1 G1 L1 T2
+| fpb_lpx: â\88\80L2. â\9dªG1,L1â\9d« ⊢ ⬈[h] L2 → (L1 ≛[T1] L2 → ⊥) → fpb h G1 L1 T1 G1 L2 T1
.
interpretation
(* Basic properties *********************************************************)
(* Basic_2A1: includes: cpr_fpb *)
-lemma cpm_fpb (n) (h) (G) (L): â\88\80T1,T2. â¦\83G,Lâ¦\84 ⊢ T1 ➡[n,h] T2 → (T1 ≛ T2 → ⊥) →
- â¦\83G,L,T1â¦\84 â\89»[h] â¦\83G,L,T2â¦\84.
+lemma cpm_fpb (n) (h) (G) (L): â\88\80T1,T2. â\9dªG,Lâ\9d« ⊢ T1 ➡[n,h] T2 → (T1 ≛ T2 → ⊥) →
+ â\9dªG,L,T1â\9d« â\89»[h] â\9dªG,L,T2â\9d«.
/3 width=2 by fpb_cpx, cpm_fwd_cpx/ qed.
-lemma lpr_fpb (h) (G) (T): â\88\80L1,L2. â¦\83G,L1â¦\84 ⊢ ➡[h] L2 → (L1 ≛[T] L2 → ⊥) →
- â¦\83G,L1,Tâ¦\84 â\89»[h] â¦\83G,L2,Tâ¦\84.
+lemma lpr_fpb (h) (G) (T): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡[h] L2 → (L1 ≛[T] L2 → ⊥) →
+ â\9dªG,L1,Tâ\9d« â\89»[h] â\9dªG,L2,Tâ\9d«.
/3 width=1 by fpb_lpx, lpr_fwd_lpx/ qed.
(* Properties with degree-based equivalence for closures ********************)
(* Basic_2A1: uses: fleq_fpb_trans *)
-lemma feqx_fpb_trans: â\88\80h,F1,F2,K1,K2,T1,T2. â¦\83F1,K1,T1â¦\84 â\89\9b â¦\83F2,K2,T2â¦\84 →
- â\88\80G2,L2,U2. â¦\83F2,K2,T2â¦\84 â\89»[h] â¦\83G2,L2,U2â¦\84 →
- â\88\83â\88\83G1,L1,U1. â¦\83F1,K1,T1â¦\84 â\89»[h] â¦\83G1,L1,U1â¦\84 & â¦\83G1,L1,U1â¦\84 â\89\9b â¦\83G2,L2,U2â¦\84.
+lemma feqx_fpb_trans: â\88\80h,F1,F2,K1,K2,T1,T2. â\9dªF1,K1,T1â\9d« â\89\9b â\9dªF2,K2,T2â\9d« →
+ â\88\80G2,L2,U2. â\9dªF2,K2,T2â\9d« â\89»[h] â\9dªG2,L2,U2â\9d« →
+ â\88\83â\88\83G1,L1,U1. â\9dªF1,K1,T1â\9d« â\89»[h] â\9dªG1,L1,U1â\9d« & â\9dªG1,L1,U1â\9d« â\89\9b â\9dªG2,L2,U2â\9d«.
#h #F1 #F2 #K1 #K2 #T1 #T2 * -F2 -K2 -T2
#K2 #T2 #HK12 #HT12 #G2 #L2 #U2 #H12
elim (teqx_fpb_trans … HT12 … H12) -T2 #K0 #T0 #H #HT0 #HK0
(* Inversion lemmas with degree-based equivalence for closures **************)
(* Basic_2A1: uses: fpb_inv_fleq *)
-lemma fpb_inv_feqx: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\89»[h] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84 → ⊥.
+lemma fpb_inv_feqx: â\88\80h,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89»[h] â\9dªG2,L2,T2â\9d« →
+ â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d« → ⊥.
#h #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2
[ #G2 #L2 #T2 #H12 #H elim (feqx_inv_gen_sn … H) -H
/3 width=11 by reqx_fwd_length, fqu_inv_teqx/
(* Properties with sort-irrelevant equivalence for local environments *******)
lemma teqx_fpb_trans: ∀h,U2,U1. U2 ≛ U1 →
- â\88\80G1,G2,L1,L2,T1. â¦\83G1,L1,U1â¦\84 â\89»[h] â¦\83G2,L2,T1â¦\84 →
- â\88\83â\88\83L,T2. â¦\83G1,L1,U2â¦\84 â\89»[h] â¦\83G2,L,T2â¦\84 & T2 ≛ T1 & L ≛[T1] L2.
+ â\88\80G1,G2,L1,L2,T1. â\9dªG1,L1,U1â\9d« â\89»[h] â\9dªG2,L2,T1â\9d« →
+ â\88\83â\88\83L,T2. â\9dªG1,L1,U2â\9d« â\89»[h] â\9dªG2,L,T2â\9d« & T2 ≛ T1 & L ≛[T1] L2.
#h #U2 #U1 #HU21 #G1 #G2 #L1 #L2 #T1 * -G2 -L2 -T1
[ #G2 #L2 #T1 #H
elim (teqx_fqu_trans … H … HU21) -H
(* Basic_2A1: was just: lleq_fpb_trans *)
lemma reqx_fpb_trans: ∀h,F,K1,K2,T. K1 ≛[T] K2 →
- â\88\80G,L2,U. â¦\83F,K2,Tâ¦\84 â\89»[h] â¦\83G,L2,Uâ¦\84 →
- â\88\83â\88\83L1,U0. â¦\83F,K1,Tâ¦\84 â\89»[h] â¦\83G,L1,U0â¦\84 & U0 ≛ U & L1 ≛[U] L2.
+ â\88\80G,L2,U. â\9dªF,K2,Tâ\9d« â\89»[h] â\9dªG,L2,Uâ\9d« →
+ â\88\83â\88\83L1,U0. â\9dªF,K1,Tâ\9d« â\89»[h] â\9dªG,L1,U0â\9d« & U0 ≛ U & L1 ≛[U] L2.
#h #F #K1 #K2 #T #HT #G #L2 #U * -G -L2 -U
[ #G #L2 #U #H2 elim (reqx_fqu_trans … H2 … HT) -K2
/3 width=5 by fpb_fqu, ex3_2_intro/
(* Basic_2A1: includes: fleq_fpbq fpbq_lleq *)
inductive fpbq (h) (G1) (L1) (T1): relation3 genv lenv term ≝
-| fpbq_fquq: â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮ â¦\83G2,L2,T2â¦\84 → fpbq h G1 L1 T1 G2 L2 T2
-| fpbq_cpx : â\88\80T2. â¦\83G1,L1â¦\84 ⊢ T1 ⬈[h] T2 → fpbq h G1 L1 T1 G1 L1 T2
-| fpbq_lpx : â\88\80L2. â¦\83G1,L1â¦\84 ⊢ ⬈[h] L2 → fpbq h G1 L1 T1 G1 L2 T1
-| fpbq_feqx: â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84 → fpbq h G1 L1 T1 G2 L2 T2
+| fpbq_fquq: â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â¬\82⸮ â\9dªG2,L2,T2â\9d« → fpbq h G1 L1 T1 G2 L2 T2
+| fpbq_cpx : â\88\80T2. â\9dªG1,L1â\9d« ⊢ T1 ⬈[h] T2 → fpbq h G1 L1 T1 G1 L1 T2
+| fpbq_lpx : â\88\80L2. â\9dªG1,L1â\9d« ⊢ ⬈[h] L2 → fpbq h G1 L1 T1 G1 L2 T1
+| fpbq_feqx: â\88\80G2,L2,T2. â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d« → fpbq h G1 L1 T1 G2 L2 T2
.
interpretation
/2 width=1 by fpbq_cpx/ qed.
(* Basic_2A1: includes: cpr_fpbq *)
-lemma cpm_fpbq (n) (h) (G) (L): â\88\80T1,T2. â¦\83G,Lâ¦\84 â\8a¢ T1 â\9e¡[n,h] T2 â\86\92 â¦\83G,L,T1â¦\84 â\89½[h] â¦\83G,L,T2â¦\84.
+lemma cpm_fpbq (n) (h) (G) (L): â\88\80T1,T2. â\9dªG,Lâ\9d« â\8a¢ T1 â\9e¡[n,h] T2 â\86\92 â\9dªG,L,T1â\9d« â\89½[h] â\9dªG,L,T2â\9d«.
/3 width=2 by fpbq_cpx, cpm_fwd_cpx/ qed.
-lemma lpr_fpbq (h) (G) (T): â\88\80L1,L2. â¦\83G,L1â¦\84 â\8a¢ â\9e¡[h] L2 â\86\92 â¦\83G,L1,Tâ¦\84 â\89½[h] â¦\83G,L2,Tâ¦\84.
+lemma lpr_fpbq (h) (G) (T): â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h] L2 â\86\92 â\9dªG,L1,Tâ\9d« â\89½[h] â\9dªG,L2,Tâ\9d«.
/3 width=1 by fpbq_lpx, lpr_fwd_lpx/ qed.
(* Basic_2A1: removed theorems 2:
(* Properties with atomic arity assignment for terms ************************)
-lemma fpbq_aaa_conf: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\89½[h] â¦\83G2,L2,T2â¦\84 →
- â\88\80A1. â¦\83G1,L1â¦\84 â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â¦\83G2,L2â¦\84 ⊢ T2 ⁝ A2.
+lemma fpbq_aaa_conf: â\88\80h,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89½[h] â\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.
#h #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2
/3 width=8 by lpx_aaa_conf, cpx_aaa_conf, aaa_feqx_conf, aaa_fquq_conf, ex_intro/
qed-.
(* Properties with proper parallel rst-transition for closures **************)
-lemma fpb_fpbq: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\89»[h] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 â\89½[h] â¦\83G2,L2,T2â¦\84.
+lemma fpb_fpbq: â\88\80h,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89»[h] â\9dªG2,L2,T2â\9d« →
+ â\9dªG1,L1,T1â\9d« â\89½[h] â\9dªG2,L2,T2â\9d«.
#h #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2
/3 width=1 by fpbq_fquq, fpbq_cpx, fpbq_lpx, fqu_fquq/
qed.
(* Basic_2A1: fpb_fpbq_alt *)
-lemma fpb_fpbq_fneqx: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\89»[h] â¦\83G2,L2,T2â¦\84 →
- â\88§â\88§ â¦\83G1,L1,T1â¦\84 â\89½[h] â¦\83G2,L2,T2â¦\84 & (â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84 → ⊥).
+lemma fpb_fpbq_fneqx: â\88\80h,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89»[h] â\9dªG2,L2,T2â\9d« →
+ â\88§â\88§ â\9dªG1,L1,T1â\9d« â\89½[h] â\9dªG2,L2,T2â\9d« & (â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d« → ⊥).
/3 width=10 by fpb_fpbq, fpb_inv_feqx, conj/ qed-.
(* Inversrion lemmas with proper parallel rst-transition for closures *******)
(* Basic_2A1: uses: fpbq_ind_alt *)
-lemma fpbq_inv_fpb: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\89½[h] â¦\83G2,L2,T2â¦\84 →
- â\88¨â\88¨ â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84
- | â¦\83G1,L1,T1â¦\84 â\89»[h] â¦\83G2,L2,T2â¦\84.
+lemma fpbq_inv_fpb: â\88\80h,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89½[h] â\9dªG2,L2,T2â\9d« →
+ â\88¨â\88¨ â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d«
+ | â\9dªG1,L1,T1â\9d« â\89»[h] â\9dªG2,L2,T2â\9d«.
#h #G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2
[ #G2 #L2 #T2 * [2: * #H1 #H2 #H3 destruct ]
/3 width=1 by fpb_fqu, feqx_intro_sn, or_intror, or_introl/
qed-.
(* Basic_2A1: fpbq_inv_fpb_alt *)
-lemma fpbq_fneqx_inv_fpb: â\88\80h,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\89½[h] â¦\83G2,L2,T2â¦\84 →
- (â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84 â\86\92 â\8a¥) â\86\92 â¦\83G1,L1,T1â¦\84 â\89»[h] â¦\83G2,L2,T2â¦\84.
+lemma fpbq_fneqx_inv_fpb: â\88\80h,G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89½[h] â\9dªG2,L2,T2â\9d« →
+ (â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d« â\86\92 â\8a¥) â\86\92 â\9dªG1,L1,T1â\9d« â\89»[h] â\9dªG2,L2,T2â\9d«.
#h #G1 #G2 #L1 #L2 #T1 #T2 #H #H0
elim (fpbq_inv_fpb … H) -H // #H elim H0 -H0 //
qed-.
(* Basic properties *********************************************************)
-lemma lpr_bind (h) (G): â\88\80K1,K2. â¦\83G,K1â¦\84 ⊢ ➡[h] K2 →
- â\88\80I1,I2. â¦\83G,K1â¦\84 â\8a¢ I1 â\9e¡[h] I2 â\86\92 â¦\83G,K1.â\93\98{I1}â¦\84 â\8a¢ â\9e¡[h] K2.â\93\98{I2}.
+lemma lpr_bind (h) (G): â\88\80K1,K2. â\9dªG,K1â\9d« ⊢ ➡[h] K2 →
+ â\88\80I1,I2. â\9dªG,K1â\9d« â\8a¢ I1 â\9e¡[h] I2 â\86\92 â\9dªG,K1.â\93\98[I1]â\9d« â\8a¢ â\9e¡[h] K2.â\93\98[I2].
/2 width=1 by lex_bind/ qed.
(* Note: lemma 250 *)
(* Advanced properties ******************************************************)
-lemma lpr_bind_refl_dx (h) (G): â\88\80K1,K2. â¦\83G,K1â¦\84 ⊢ ➡[h] K2 →
- â\88\80I. â¦\83G,K1.â\93\98{I}â¦\84 â\8a¢ â\9e¡[h] K2.â\93\98{I}.
+lemma lpr_bind_refl_dx (h) (G): â\88\80K1,K2. â\9dªG,K1â\9d« ⊢ ➡[h] K2 →
+ â\88\80I. â\9dªG,K1.â\93\98[I]â\9d« â\8a¢ â\9e¡[h] K2.â\93\98[I].
/2 width=1 by lex_bind_refl_dx/ qed.
-lemma lpr_pair (h) (G): â\88\80K1,K2,V1,V2. â¦\83G,K1â¦\84 â\8a¢ â\9e¡[h] K2 â\86\92 â¦\83G,K1â¦\84 ⊢ V1 ➡[h] V2 →
- â\88\80I. â¦\83G,K1.â\93\91{I}V1â¦\84 â\8a¢ â\9e¡[h] K2.â\93\91{I}V2.
+lemma lpr_pair (h) (G): â\88\80K1,K2,V1,V2. â\9dªG,K1â\9d« â\8a¢ â\9e¡[h] K2 â\86\92 â\9dªG,K1â\9d« ⊢ V1 ➡[h] V2 →
+ â\88\80I. â\9dªG,K1.â\93\91[I]V1â\9d« â\8a¢ â\9e¡[h] K2.â\93\91[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. â¦\83G,â\8b\86â¦\84 ⊢ ➡[h] L2 → L2 = ⋆.
+lemma lpr_inv_atom_sn (h) (G): â\88\80L2. â\9dªG,â\8b\86â\9d« ⊢ ➡[h] L2 → L2 = ⋆.
/2 width=2 by lex_inv_atom_sn/ qed-.
-lemma lpr_inv_bind_sn (h) (G): â\88\80I1,L2,K1. â¦\83G,K1.â\93\98{I1}â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83I2,K2. â¦\83G,K1â¦\84 â\8a¢ â\9e¡[h] K2 & â¦\83G,K1â¦\84 ⊢ I1 ➡[h] I2 &
- L2 = K2.ⓘ{I2}.
+lemma lpr_inv_bind_sn (h) (G): â\88\80I1,L2,K1. â\9dªG,K1.â\93\98[I1]â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83I2,K2. â\9dªG,K1â\9d« â\8a¢ â\9e¡[h] K2 & â\9dªG,K1â\9d« ⊢ I1 ➡[h] 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. â¦\83G,L1â¦\84 ⊢ ➡[h] ⋆ → L1 = ⋆.
+lemma lpr_inv_atom_dx (h) (G): â\88\80L1. â\9dªG,L1â\9d« ⊢ ➡[h] ⋆ → L1 = ⋆.
/2 width=2 by lex_inv_atom_dx/ qed-.
-lemma lpr_inv_bind_dx (h) (G): â\88\80I2,L1,K2. â¦\83G,L1â¦\84 â\8a¢ â\9e¡[h] K2.â\93\98{I2} →
- â\88\83â\88\83I1,K1. â¦\83G,K1â¦\84 â\8a¢ â\9e¡[h] K2 & â¦\83G,K1â¦\84 ⊢ I1 ➡[h] I2 &
- L1 = K1.ⓘ{I1}.
+lemma lpr_inv_bind_dx (h) (G): â\88\80I2,L1,K2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h] K2.â\93\98[I2] →
+ â\88\83â\88\83I1,K1. â\9dªG,K1â\9d« â\8a¢ â\9e¡[h] K2 & â\9dªG,K1â\9d« ⊢ I1 ➡[h] 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. â¦\83G,K1.â\93¤{I}â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83K2. â¦\83G,K1â¦\84 â\8a¢ â\9e¡[h] K2 & L2 = K2.â\93¤{I}.
+lemma lpr_inv_unit_sn (h) (G): â\88\80I,L2,K1. â\9dªG,K1.â\93¤[I]â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83K2. â\9dªG,K1â\9d« â\8a¢ â\9e¡[h] K2 & L2 = K2.â\93¤[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. â¦\83G,K1.â\93\91{I}V1â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83K2,V2. â¦\83G,K1â¦\84 â\8a¢ â\9e¡[h] K2 & â¦\83G,K1â¦\84 ⊢ V1 ➡[h] V2 &
- L2 = K2.ⓑ{I}V2.
+lemma lpr_inv_pair_sn (h) (G): â\88\80I,L2,K1,V1. â\9dªG,K1.â\93\91[I]V1â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83K2,V2. â\9dªG,K1â\9d« â\8a¢ â\9e¡[h] K2 & â\9dªG,K1â\9d« ⊢ V1 ➡[h] 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. â¦\83G,L1â¦\84 â\8a¢ â\9e¡[h] K2.â\93¤{I} →
- â\88\83â\88\83K1. â¦\83G,K1â¦\84 â\8a¢ â\9e¡[h] K2 & L1 = K1.â\93¤{I}.
+lemma lpr_inv_unit_dx (h) (G): â\88\80I,L1,K2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h] K2.â\93¤[I] →
+ â\88\83â\88\83K1. â\9dªG,K1â\9d« â\8a¢ â\9e¡[h] K2 & L1 = K1.â\93¤[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. â¦\83G,L1â¦\84 â\8a¢ â\9e¡[h] K2.â\93\91{I}V2 →
- â\88\83â\88\83K1,V1. â¦\83G,K1â¦\84 â\8a¢ â\9e¡[h] K2 & â¦\83G,K1â¦\84 ⊢ V1 ➡[h] V2 &
- L1 = K1.ⓑ{I}V1.
+lemma lpr_inv_pair_dx (h) (G): â\88\80I,L1,K2,V2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h] K2.â\93\91[I]V2 →
+ â\88\83â\88\83K1,V1. â\9dªG,K1â\9d« â\8a¢ â\9e¡[h] K2 & â\9dªG,K1â\9d« ⊢ V1 ➡[h] 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. â¦\83G,L1.â\93\91{I1}V1â¦\84 â\8a¢ â\9e¡[h] L2.â\93\91{I2}V2 →
- â\88§â\88§ â¦\83G,L1â¦\84 â\8a¢ â\9e¡[h] L2 & â¦\83G,L1â¦\84 ⊢ V1 ➡[h] V2 & I1 = I2.
+lemma lpr_inv_pair (h) (G): â\88\80I1,I2,L1,L2,V1,V2. â\9dªG,L1.â\93\91[I1]V1â\9d« â\8a¢ â\9e¡[h] L2.â\93\91[I2]V2 →
+ â\88§â\88§ â\9dªG,L1â\9d« â\8a¢ â\9e¡[h] L2 & â\9dªG,L1â\9d« ⊢ V1 ➡[h] V2 & I1 = I2.
/2 width=1 by lex_inv_pair/ qed-.
(* Basic_1: removed theorems 3: wcpr0_getl wcpr0_getl_back
(* Properties with extended structural successor for closures ***************)
-lemma fqu_cpr_trans_sn (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80U2. â¦\83G2,L2â¦\84 ⊢ T2 ➡[h] U2 →
- â\88\83â\88\83L,U1. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] L & â¦\83G1,L1â¦\84 â\8a¢ T1 â\9e¡[h] U1 & â¦\83G1,L,U1â¦\84 â¬\82[b] â¦\83G2,L2,U2â¦\84.
+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] U2 →
+ â\88\83â\88\83L,U1. â\9dªG1,L1â\9d« â\8a¢ â\9e¡[h] L & â\9dªG1,L1â\9d« â\8a¢ T1 â\9e¡[h] 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/
| /3 width=5 by cpm_bind_unit, fqu_clear, ex3_2_intro/
| /3 width=5 by cpr_flat, fqu_flat_dx, ex3_2_intro/
| #I #G #K #U #T #HUT #U2 #HU2
- elim (cpm_lifts_sn … HU2 (Ⓣ) … (K.ⓘ{I}) … HUT) -U
+ elim (cpm_lifts_sn … HU2 (Ⓣ) … (K.ⓘ[I]) … HUT) -U
/3 width=5 by lpr_bind_refl_dx, fqu_drop, drops_refl, drops_drop, ex3_2_intro/
]
qed-.
-lemma fqu_cpr_trans_dx (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80U2. â¦\83G2,L2â¦\84 ⊢ T2 ➡[h] U2 →
- â\88\83â\88\83L,U1. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] L & â¦\83G1,Lâ¦\84 â\8a¢ T1 â\9e¡[h] U1 & â¦\83G1,L,U1â¦\84 â¬\82[b] â¦\83G2,L2,U2â¦\84.
+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] U2 →
+ â\88\83â\88\83L,U1. â\9dªG1,L1â\9d« â\8a¢ â\9e¡[h] L & â\9dªG1,Lâ\9d« â\8a¢ T1 â\9e¡[h] 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/
| /3 width=5 by cpm_bind_unit, fqu_clear, ex3_2_intro/
| /3 width=5 by cpr_flat, fqu_flat_dx, ex3_2_intro/
| #I #G #K #U #T #HUT #U2 #HU2
- elim (cpm_lifts_sn … HU2 (Ⓣ) … (K.ⓘ{I}) … HUT) -U
+ elim (cpm_lifts_sn … HU2 (Ⓣ) … (K.ⓘ[I]) … HUT) -U
/3 width=5 by lpr_bind_refl_dx, fqu_drop, drops_refl, drops_drop, ex3_2_intro/
]
qed-.
-lemma fqu_lpr_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80K2. â¦\83G2,L2â¦\84 ⊢ ➡[h] K2 →
- â\88\83â\88\83K1,T. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] K1 & â¦\83G1,L1â¦\84 â\8a¢ T1 â\9e¡[h] T & â¦\83G1,K1,Tâ¦\84 â¬\82[b] â¦\83G2,K2,T2â¦\84.
+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] K2 →
+ â\88\83â\88\83K1,T. â\9dªG1,L1â\9d« â\8a¢ â\9e¡[h] K1 & â\9dªG1,L1â\9d« â\8a¢ T1 â\9e¡[h] 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. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80K1. â¦\83G1,K1â¦\84 ⊢ ➡[h] L1 →
- â\88\83â\88\83n,K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â\9e¡[n,h] T & â¦\83G1,K1,Tâ¦\84 â¬\82[b] â¦\83G2,K2,T2â¦\84 & â¦\83G2,K2â¦\84 ⊢ ➡[h] 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] L1 →
+ â\88\83â\88\83n,K2,T. â\9dªG1,K1â\9d« â\8a¢ T1 â\9e¡[n,h] T & â\9dªG1,K1,Tâ\9d« â¬\82[b] â\9dªG2,K2,T2â\9d« & â\9dªG2,K2â\9d« ⊢ ➡[h] 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
- elim (lifts_total V (ð\9d\90\94â\9d´1â\9dµ)) #T #HVT
+ elim (lifts_total V (ð\9d\90\94â\9d¨1â\9d©)) #T #HVT
/3 width=7 by cpm_ell, cpm_delta, fqu_drop, ex4_3_intro/
| /3 width=7 by cpr_pair_sn, fqu_pair_sn, ex4_3_intro/
| /3 width=7 by lpr_bind_refl_dx, cpr_pair_sn, fqu_bind_dx, ex4_3_intro/
(* Properties with extended optional structural successor for closures ******)
-lemma fquq_cpr_trans_sn (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80U2. â¦\83G2,L2â¦\84 ⊢ T2 ➡[h] U2 →
- â\88\83â\88\83L,U1. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] L & â¦\83G1,L1â¦\84 â\8a¢ T1 â\9e¡[h] U1 & â¦\83G1,L,U1â¦\84 â¬\82⸮[b] â¦\83G2,L2,U2â¦\84.
+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] U2 →
+ â\88\83â\88\83L,U1. â\9dªG1,L1â\9d« â\8a¢ â\9e¡[h] L & â\9dªG1,L1â\9d« â\8a¢ T1 â\9e¡[h] 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. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80U2. â¦\83G2,L2â¦\84 ⊢ T2 ➡[h] U2 →
- â\88\83â\88\83L,U1. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] L & â¦\83G1,Lâ¦\84 â\8a¢ T1 â\9e¡[h] U1 & â¦\83G1,L,U1â¦\84 â¬\82⸮[b] â¦\83G2,L2,U2â¦\84.
+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] U2 →
+ â\88\83â\88\83L,U1. â\9dªG1,L1â\9d« â\8a¢ â\9e¡[h] L & â\9dªG1,Lâ\9d« â\8a¢ T1 â\9e¡[h] 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. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80K2. â¦\83G2,L2â¦\84 ⊢ ➡[h] K2 →
- â\88\83â\88\83K1,T. â¦\83G1,L1â¦\84 â\8a¢ â\9e¡[h] K1 & â¦\83G1,L1â¦\84 â\8a¢ T1 â\9e¡[h] T & â¦\83G1,K1,Tâ¦\84 â¬\82⸮[b] â¦\83G2,K2,T2â¦\84.
+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] K2 →
+ â\88\83â\88\83K1,T. â\9dªG1,L1â\9d« â\8a¢ â\9e¡[h] K1 & â\9dªG1,L1â\9d« â\8a¢ T1 â\9e¡[h] 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. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80K1. â¦\83G1,K1â¦\84 ⊢ ➡[h] L1 →
- â\88\83â\88\83n,K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â\9e¡[n,h] T & â¦\83G1,K1,Tâ¦\84 â¬\82⸮[b] â¦\83G2,K2,T2â¦\84 & â¦\83G2,K2â¦\84 ⊢ ➡[h] 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] L1 →
+ â\88\83â\88\83n,K2,T. â\9dªG1,K1â\9d« â\8a¢ T1 â\9e¡[n,h] T & â\9dªG1,K1,Tâ\9d« â¬\82⸮[b] â\9dªG2,K2,T2â\9d« & â\9dªG2,K2â\9d« ⊢ ➡[h] 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. â¦\83G,L1â¦\84 ⊢ ➡[h] L2 → |L1| = |L2|.
+lemma lpr_fwd_length (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ➡[h] 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. â¦\83G,Lâ¦\84 â\8a¢ T â\9e¡[h] T1 â\86\92 â\88\80T2. â¦\83G,Lâ¦\84 ⊢ T ➡[h] T2 →
- â\88\80L1. â¦\83G,Lâ¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G,Lâ¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T0. â¦\83G,L1â¦\84 â\8a¢ T1 â\9e¡[h] T0 & â¦\83G,L2â¦\84 ⊢ T2 ➡[h] T0.
+ â\88\80T1. â\9dªG,Lâ\9d« â\8a¢ T â\9e¡[h] T1 â\86\92 â\88\80T2. â\9dªG,Lâ\9d« ⊢ T ➡[h] T2 →
+ â\88\80L1. â\9dªG,Lâ\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG,Lâ\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T0. â\9dªG,L1â\9d« â\8a¢ T1 â\9e¡[h] T0 & â\9dªG,L2â\9d« ⊢ T2 ➡[h] 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. â¦\83G,L1â¦\84 â\8a¢ â\93ª{I} â\9e¡[h] T & â¦\83G,L2â¦\84 â\8a¢ â\93ª{I} ➡[h] T.
+ â\88\80I,G,L1,L2. â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ â\93ª[I] â\9e¡[h] T & â\9dªG,L2â\9d« â\8a¢ â\93ª[I] ➡[h] T.
/2 width=3 by cpr_refl, ex2_intro/ qed-.
fact cpr_conf_lpr_atom_delta (h):
∀G0,L0,i. (
- â\88\80G,L,T. â¦\83G0,L0,#iâ¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 → 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. â¦\83G0,K0â¦\84 ⊢ V0 ➡[h] V2 → ∀T2. ⇧*[↑i] V2 ≘ T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ #i â\9e¡[h] T & â¦\83G0,L2â¦\84 ⊢ T2 ➡[h] T.
+ â\88\80V2. â\9dªG0,K0â\9d« ⊢ V0 ➡[h] V2 → ∀T2. ⇧*[↑i] V2 ≘ T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ #i â\9e¡[h] T & â\9dªG0,L2â\9d« ⊢ T2 ➡[h] 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. â¦\83G0,L0,#iâ¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 → 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. â¦\83G0,K0â¦\84 ⊢ V0 ➡[h] V1 → ∀T1. ⇧*[↑i] V1 ≘ T1 →
+ â\88\80V1. â\9dªG0,K0â\9d« ⊢ V0 ➡[h] V1 → ∀T1. ⇧*[↑i] V1 ≘ T1 →
∀KX,VX. ⇩*[i] L0 ≘ KX.ⓓVX →
- â\88\80V2. â¦\83G0,KXâ¦\84 ⊢ VX ➡[h] V2 → ∀T2. ⇧*[↑i] V2 ≘ T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ T1 â\9e¡[h] T & â¦\83G0,L2â¦\84 ⊢ T2 ➡[h] T.
+ â\88\80V2. â\9dªG0,KXâ\9d« ⊢ VX ➡[h] V2 → ∀T2. ⇧*[↑i] V2 ≘ T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡[h] T & â\9dªG0,L2â\9d« ⊢ T2 ➡[h] 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. â¦\83G0,L0,â\93\91{p,I}V0.T0â¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 → 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. â¦\83G0,L0â¦\84 â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80T1. â¦\83G0,L0.â\93\91{I}V0â¦\84 ⊢ T0 ➡[h] T1 →
- â\88\80V2. â¦\83G0,L0â¦\84 â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80T2. â¦\83G0,L0.â\93\91{I}V0â¦\84 ⊢ T0 ➡[h] T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ â\93\91{p,I}V1.T1 â\9e¡[h] T & â¦\83G0,L2â¦\84 â\8a¢ â\93\91{p,I}V2.T2 ➡[h] T.
+ â\88\80V1. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80T1. â\9dªG0,L0.â\93\91[I]V0â\9d« ⊢ T0 ➡[h] T1 →
+ â\88\80V2. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80T2. â\9dªG0,L0.â\93\91[I]V0â\9d« ⊢ T0 ➡[h] T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\91[p,I]V1.T1 â\9e¡[h] T & â\9dªG0,L2â\9d« â\8a¢ â\93\91[p,I]V2.T2 ➡[h] 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) //
-elim (IH … HT01 … HT02 (L1.ⓑ{I}V1) … (L2.ⓑ{I}V2)) -IH
+elim (IH … HT01 … HT02 (L1.ⓑ[I]V1) … (L2.ⓑ[I]V2)) -IH
/3 width=5 by lpr_pair, cpm_bind, ex2_intro/
qed-.
fact cpr_conf_lpr_bind_zeta (h):
∀G0,L0,V0,T0. (
- â\88\80G,L,T. â¦\83G0,L0,+â\93\93V0.T0â¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 → 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. â¦\83G0,L0â¦\84 â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80T1. â¦\83G0,L0.â\93\93V0â¦\84 ⊢ T0 ➡[h] T1 →
- â\88\80T2. â\87§*[1]T2 â\89\98 T0 â\86\92 â\88\80X2. â¦\83G0,L0â¦\84 ⊢ T2 ➡[h] X2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ +â\93\93V1.T1 â\9e¡[h] T & â¦\83G0,L2â¦\84 ⊢ X2 ➡[h] T.
+ â\88\80V1. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80T1. â\9dªG0,L0.â\93\93V0â\9d« ⊢ T0 ➡[h] T1 →
+ â\88\80T2. â\87§*[1]T2 â\89\98 T0 â\86\92 â\88\80X2. â\9dªG0,L0â\9d« ⊢ T2 ➡[h] X2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ +â\93\93V1.T1 â\9e¡[h] T & â\9dªG0,L2â\9d« ⊢ X2 ➡[h] 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. â¦\83G0,L0,+â\93\93V0.T0â¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 → 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. â¦\83G0,L0â¦\84 ⊢ T1 ➡[h] X1 →
- â\88\80T2. â\87§*[1] T2 â\89\98 T0 â\86\92 â\88\80X2. â¦\83G0,L0â¦\84 ⊢ T2 ➡[h] X2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ X1 â\9e¡[h] T & â¦\83G0,L2â¦\84 ⊢ X2 ➡[h] T.
+ â\88\80T1. â\87§*[1] T1 â\89\98 T0 â\86\92 â\88\80X1. â\9dªG0,L0â\9d« ⊢ T1 ➡[h] X1 →
+ â\88\80T2. â\87§*[1] T2 â\89\98 T0 â\86\92 â\88\80X2. â\9dªG0,L0â\9d« ⊢ T2 ➡[h] X2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ X1 â\9e¡[h] T & â\9dªG0,L2â\9d« ⊢ X2 ➡[h] 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. â¦\83G0,L0,â\93\95{I}V0.T0â¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 → 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. â¦\83G0,L0â¦\84 â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80T1. â¦\83G0,L0â¦\84 ⊢ T0 ➡[h] T1 →
- â\88\80V2. â¦\83G0,L0â¦\84 â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80T2. â¦\83G0,L0â¦\84 ⊢ T0 ➡[h] T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ â\93\95{I}V1.T1 â\9e¡[h] T & â¦\83G0,L2â¦\84 â\8a¢ â\93\95{I}V2.T2 ➡[h] T.
+ â\88\80V1. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80T1. â\9dªG0,L0â\9d« ⊢ T0 ➡[h] T1 →
+ â\88\80V2. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80T2. â\9dªG0,L0â\9d« ⊢ T0 ➡[h] T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\95[I]V1.T1 â\9e¡[h] T & â\9dªG0,L2â\9d« â\8a¢ â\93\95[I]V2.T2 ➡[h] 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. â¦\83G0,L0,â\93\9dV0.T0â¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 → 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. â¦\83G0,L0â¦\84 â\8a¢ T0 â\9e¡[h] T1 â\86\92 â\88\80T2. â¦\83G0,L0â¦\84 ⊢ T0 ➡[h] T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ â\93\9dV1.T1 â\9e¡[h] T & â¦\83G0,L2â¦\84 ⊢ T2 ➡[h] T.
+ â\88\80V1,T1. â\9dªG0,L0â\9d« â\8a¢ T0 â\9e¡[h] T1 â\86\92 â\88\80T2. â\9dªG0,L0â\9d« ⊢ T0 ➡[h] T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\9dV1.T1 â\9e¡[h] T & â\9dªG0,L2â\9d« ⊢ T2 ➡[h] 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. â¦\83G0,L0,â\93\9dV0.T0â¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 → 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. â¦\83G0,L0â¦\84 â\8a¢ T0 â\9e¡[h] T1 â\86\92 â\88\80T2. â¦\83G0,L0â¦\84 ⊢ T0 ➡[h] T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ T1 â\9e¡[h] T & â¦\83G0,L2â¦\84 ⊢ T2 ➡[h] T.
+ â\88\80T1. â\9dªG0,L0â\9d« â\8a¢ T0 â\9e¡[h] T1 â\86\92 â\88\80T2. â\9dªG0,L0â\9d« ⊢ T0 ➡[h] T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ T1 â\9e¡[h] T & â\9dªG0,L2â\9d« ⊢ T2 ➡[h] 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. â¦\83G0,L0,â\93\90V0.â\93\9b{p}W0.T0â¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 → 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. â¦\83G0,L0â¦\84 â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80T1. â¦\83G0,L0â¦\84 â\8a¢ â\93\9b{p}W0.T0 ➡[h] T1 →
- â\88\80V2. â¦\83G0,L0â¦\84 â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80W2. â¦\83G0,L0â¦\84 â\8a¢ W0 â\9e¡[h] W2 â\86\92 â\88\80T2. â¦\83G0,L0.â\93\9bW0â¦\84 ⊢ T0 ➡[h] T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ â\93\90V1.T1 â\9e¡[h] T & â¦\83G0,L2â¦\84 â\8a¢ â\93\93{p}ⓝW2.V2.T2 ➡[h] T.
+ â\88\80V1. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80T1. â\9dªG0,L0â\9d« â\8a¢ â\93\9b[p]W0.T0 ➡[h] T1 →
+ â\88\80V2. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80W2. â\9dªG0,L0â\9d« â\8a¢ W0 â\9e¡[h] W2 â\86\92 â\88\80T2. â\9dªG0,L0.â\93\9bW0â\9d« ⊢ T0 ➡[h] T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\90V1.T1 â\9e¡[h] T & â\9dªG0,L2â\9d« â\8a¢ â\93\93[p]ⓝW2.V2.T2 ➡[h] 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. â¦\83G0,L0,â\93\90V0.â\93\93{p}W0.T0â¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 → 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. â¦\83G0,L0â¦\84 â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80T1. â¦\83G0,L0â¦\84 â\8a¢ â\93\93{p}W0.T0 ➡[h] T1 →
- â\88\80V2. â¦\83G0,L0â¦\84 ⊢ V0 ➡[h] V2 → ∀U2. ⇧*[1] V2 ≘ U2 →
- â\88\80W2. â¦\83G0,L0â¦\84 â\8a¢ W0 â\9e¡[h] W2 â\86\92 â\88\80T2. â¦\83G0,L0.â\93\93W0â¦\84 ⊢ T0 ➡[h] T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ â\93\90V1.T1 â\9e¡[h] T & â¦\83G0,L2â¦\84 â\8a¢ â\93\93{p}W2.ⓐU2.T2 ➡[h] T.
+ â\88\80V1. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80T1. â\9dªG0,L0â\9d« â\8a¢ â\93\93[p]W0.T0 ➡[h] T1 →
+ â\88\80V2. â\9dªG0,L0â\9d« ⊢ V0 ➡[h] V2 → ∀U2. ⇧*[1] V2 ≘ U2 →
+ â\88\80W2. â\9dªG0,L0â\9d« â\8a¢ W0 â\9e¡[h] W2 â\86\92 â\88\80T2. â\9dªG0,L0.â\93\93W0â\9d« ⊢ T0 ➡[h] T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\90V1.T1 â\9e¡[h] T & â\9dªG0,L2â\9d« â\8a¢ â\93\93[p]W2.ⓐU2.T2 ➡[h] 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. â¦\83G0,L0,â\93\90V0.â\93\9b{p}W0.T0â¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 → 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. â¦\83G0,L0â¦\84 â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80W1. â¦\83G0,L0â¦\84 â\8a¢ W0 â\9e¡[h] W1 â\86\92 â\88\80T1. â¦\83G0,L0.â\93\9bW0â¦\84 ⊢ T0 ➡[h] T1 →
- â\88\80V2. â¦\83G0,L0â¦\84 â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80W2. â¦\83G0,L0â¦\84 â\8a¢ W0 â\9e¡[h] W2 â\86\92 â\88\80T2. â¦\83G0,L0.â\93\9bW0â¦\84 ⊢ T0 ➡[h] T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ â\93\93{p}â\93\9dW1.V1.T1 â\9e¡[h] T & â¦\83G0,L2â¦\84 â\8a¢ â\93\93{p}ⓝW2.V2.T2 ➡[h] T.
+ â\88\80V1. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h] V1 â\86\92 â\88\80W1. â\9dªG0,L0â\9d« â\8a¢ W0 â\9e¡[h] W1 â\86\92 â\88\80T1. â\9dªG0,L0.â\93\9bW0â\9d« ⊢ T0 ➡[h] T1 →
+ â\88\80V2. â\9dªG0,L0â\9d« â\8a¢ V0 â\9e¡[h] V2 â\86\92 â\88\80W2. â\9dªG0,L0â\9d« â\8a¢ W0 â\9e¡[h] W2 â\86\92 â\88\80T2. â\9dªG0,L0.â\93\9bW0â\9d« ⊢ T0 ➡[h] T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\93[p]â\93\9dW1.V1.T1 â\9e¡[h] T & â\9dªG0,L2â\9d« â\8a¢ â\93\93[p]ⓝW2.V2.T2 ➡[h] 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. â¦\83G0,L0,â\93\90V0.â\93\93{p}W0.T0â¦\84 â¬\82+ â¦\83G,L,Tâ¦\84 → 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. â¦\83G0,L0â¦\84 ⊢ V0 ➡[h] V1 → ∀U1. ⇧*[1] V1 ≘ U1 →
- â\88\80W1. â¦\83G0,L0â¦\84 â\8a¢ W0 â\9e¡[h] W1 â\86\92 â\88\80T1. â¦\83G0,L0.â\93\93W0â¦\84 ⊢ T0 ➡[h] T1 →
- â\88\80V2. â¦\83G0,L0â¦\84 ⊢ V0 ➡[h] V2 → ∀U2. ⇧*[1] V2 ≘ U2 →
- â\88\80W2. â¦\83G0,L0â¦\84 â\8a¢ W0 â\9e¡[h] W2 â\86\92 â\88\80T2. â¦\83G0,L0.â\93\93W0â¦\84 ⊢ T0 ➡[h] T2 →
- â\88\80L1. â¦\83G0,L0â¦\84 â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â¦\83G0,L0â¦\84 ⊢ ➡[h] L2 →
- â\88\83â\88\83T. â¦\83G0,L1â¦\84 â\8a¢ â\93\93{p}W1.â\93\90U1.T1 â\9e¡[h] T & â¦\83G0,L2â¦\84 â\8a¢ â\93\93{p}W2.ⓐU2.T2 ➡[h] T.
+ â\88\80V1. â\9dªG0,L0â\9d« ⊢ V0 ➡[h] V1 → ∀U1. ⇧*[1] V1 ≘ U1 →
+ â\88\80W1. â\9dªG0,L0â\9d« â\8a¢ W0 â\9e¡[h] W1 â\86\92 â\88\80T1. â\9dªG0,L0.â\93\93W0â\9d« ⊢ T0 ➡[h] T1 →
+ â\88\80V2. â\9dªG0,L0â\9d« ⊢ V0 ➡[h] V2 → ∀U2. ⇧*[1] V2 ≘ U2 →
+ â\88\80W2. â\9dªG0,L0â\9d« â\8a¢ W0 â\9e¡[h] W2 â\86\92 â\88\80T2. â\9dªG0,L0.â\93\93W0â\9d« ⊢ T0 ➡[h] T2 →
+ â\88\80L1. â\9dªG0,L0â\9d« â\8a¢ â\9e¡[h] L1 â\86\92 â\88\80L2. â\9dªG0,L0â\9d« ⊢ ➡[h] L2 →
+ â\88\83â\88\83T. â\9dªG0,L1â\9d« â\8a¢ â\93\93[p]W1.â\93\90U1.T1 â\9e¡[h] T & â\9dªG0,L2â\9d« â\8a¢ â\93\93[p]W2.ⓐU2.T2 ➡[h] 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. â¦\83G,L0â¦\84 â\8a¢ T0 â\9e¡[h] T1 â\86\92 â\88\80L1. â¦\83G,L0â¦\84 ⊢ ➡[h] L1 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ T0 â\9e¡[h] T & â¦\83G,L1â¦\84 ⊢ T1 ➡[h] T.
+lemma lpr_cpr_conf_dx (h) (G): â\88\80L0. â\88\80T0,T1:term. â\9dªG,L0â\9d« â\8a¢ T0 â\9e¡[h] T1 â\86\92 â\88\80L1. â\9dªG,L0â\9d« ⊢ ➡[h] L1 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T0 â\9e¡[h] T & â\9dªG,L1â\9d« ⊢ T1 ➡[h] 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. â¦\83G,L0â¦\84 â\8a¢ T0 â\9e¡[h] T1 â\86\92 â\88\80L1. â¦\83G,L0â¦\84 ⊢ ➡[h] L1 →
- â\88\83â\88\83T. â¦\83G,L1â¦\84 â\8a¢ T0 â\9e¡[h] T & â¦\83G,L0â¦\84 ⊢ T1 ➡[h] T.
+lemma lpr_cpr_conf_sn (h) (G): â\88\80L0. â\88\80T0,T1:term. â\9dªG,L0â\9d« â\8a¢ T0 â\9e¡[h] T1 â\86\92 â\88\80L1. â\9dªG,L0â\9d« ⊢ ➡[h] L1 →
+ â\88\83â\88\83T. â\9dªG,L1â\9d« â\8a¢ T0 â\9e¡[h] T & â\9dªG,L0â\9d« ⊢ T1 ➡[h] 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/
(* Forward lemmas with unbound parallel rt-transition for ref local envs ****)
(* Basic_2A1: was: lpr_lpx *)
-lemma lpr_fwd_lpx (h) (G): â\88\80L1,L2. â¦\83G,L1â¦\84 â\8a¢ â\9e¡[h] L2 â\86\92 â¦\83G,L1â¦\84 ⊢ ⬈[h] L2.
+lemma lpr_fwd_lpx (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« â\8a¢ â\9e¡[h] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[h] L2.
/3 width=3 by cpm_fwd_cpx, lex_co/ qed-.
(* Basic properties *********************************************************)
-lemma lpx_bind (h) (G): â\88\80K1,K2. â¦\83G,K1â¦\84 ⊢ ⬈[h] K2 →
- â\88\80I1,I2. â¦\83G,K1â¦\84 â\8a¢ I1 â¬\88[h] I2 â\86\92 â¦\83G,K1.â\93\98{I1}â¦\84 â\8a¢ â¬\88[h] K2.â\93\98{I2}.
+lemma lpx_bind (h) (G): â\88\80K1,K2. â\9dªG,K1â\9d« ⊢ ⬈[h] K2 →
+ â\88\80I1,I2. â\9dªG,K1â\9d« â\8a¢ I1 â¬\88[h] I2 â\86\92 â\9dªG,K1.â\93\98[I1]â\9d« â\8a¢ â¬\88[h] K2.â\93\98[I2].
/2 width=1 by lex_bind/ qed.
lemma lpx_refl (h) (G): reflexive … (lpx h G).
(* Advanced properties ******************************************************)
-lemma lpx_bind_refl_dx (h) (G): â\88\80K1,K2. â¦\83G,K1â¦\84 ⊢ ⬈[h] K2 →
- â\88\80I. â¦\83G,K1.â\93\98{I}â¦\84 â\8a¢ â¬\88[h] K2.â\93\98{I}.
+lemma lpx_bind_refl_dx (h) (G): â\88\80K1,K2. â\9dªG,K1â\9d« ⊢ ⬈[h] K2 →
+ â\88\80I. â\9dªG,K1.â\93\98[I]â\9d« â\8a¢ â¬\88[h] K2.â\93\98[I].
/2 width=1 by lex_bind_refl_dx/ qed.
-lemma lpx_pair (h) (G): â\88\80K1,K2. â¦\83G,K1â¦\84 â\8a¢ â¬\88[h] K2 â\86\92 â\88\80V1,V2. â¦\83G,K1â¦\84 ⊢ V1 ⬈[h] V2 →
- â\88\80I.â¦\83G,K1.â\93\91{I}V1â¦\84 â\8a¢ â¬\88[h] K2.â\93\91{I}V2.
+lemma lpx_pair (h) (G): â\88\80K1,K2. â\9dªG,K1â\9d« â\8a¢ â¬\88[h] K2 â\86\92 â\88\80V1,V2. â\9dªG,K1â\9d« ⊢ V1 ⬈[h] V2 →
+ â\88\80I.â\9dªG,K1.â\93\91[I]V1â\9d« â\8a¢ â¬\88[h] K2.â\93\91[I]V2.
/2 width=1 by lex_pair/ qed.
(* Basic inversion lemmas ***************************************************)
(* Basic_2A1: was: lpx_inv_atom1 *)
-lemma lpx_inv_atom_sn (h) (G): â\88\80L2. â¦\83G,â\8b\86â¦\84 ⊢ ⬈[h] L2 → L2 = ⋆.
+lemma lpx_inv_atom_sn (h) (G): â\88\80L2. â\9dªG,â\8b\86â\9d« ⊢ ⬈[h] L2 → L2 = ⋆.
/2 width=2 by lex_inv_atom_sn/ qed-.
-lemma lpx_inv_bind_sn (h) (G): â\88\80I1,L2,K1. â¦\83G,K1.â\93\98{I1}â¦\84 ⊢ ⬈[h] L2 →
- â\88\83â\88\83I2,K2. â¦\83G,K1â¦\84 â\8a¢ â¬\88[h] K2 & â¦\83G,K1â¦\84 ⊢ I1 ⬈[h] I2 &
- L2 = K2.ⓘ{I2}.
+lemma lpx_inv_bind_sn (h) (G): â\88\80I1,L2,K1. â\9dªG,K1.â\93\98[I1]â\9d« ⊢ ⬈[h] L2 →
+ â\88\83â\88\83I2,K2. â\9dªG,K1â\9d« â\8a¢ â¬\88[h] K2 & â\9dªG,K1â\9d« ⊢ I1 ⬈[h] I2 &
+ L2 = K2.ⓘ[I2].
/2 width=1 by lex_inv_bind_sn/ qed-.
(* Basic_2A1: was: lpx_inv_atom2 *)
-lemma lpx_inv_atom_dx: â\88\80h,G,L1. â¦\83G,L1â¦\84 ⊢ ⬈[h] ⋆ → L1 = ⋆.
+lemma lpx_inv_atom_dx: â\88\80h,G,L1. â\9dªG,L1â\9d« ⊢ ⬈[h] ⋆ → L1 = ⋆.
/2 width=2 by lex_inv_atom_dx/ qed-.
-lemma lpx_inv_bind_dx (h) (G): â\88\80I2,L1,K2. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h] K2.â\93\98{I2} →
- â\88\83â\88\83I1,K1. â¦\83G,K1â¦\84 â\8a¢ â¬\88[h] K2 & â¦\83G,K1â¦\84 ⊢ I1 ⬈[h] I2 &
- L1 = K1.ⓘ{I1}.
+lemma lpx_inv_bind_dx (h) (G): â\88\80I2,L1,K2. â\9dªG,L1â\9d« â\8a¢ â¬\88[h] K2.â\93\98[I2] →
+ â\88\83â\88\83I1,K1. â\9dªG,K1â\9d« â\8a¢ â¬\88[h] K2 & â\9dªG,K1â\9d« ⊢ I1 ⬈[h] I2 &
+ L1 = K1.ⓘ[I1].
/2 width=1 by lex_inv_bind_dx/ qed-.
(* Advanced inversion lemmas ************************************************)
-lemma lpx_inv_unit_sn (h) (G): â\88\80I,L2,K1. â¦\83G,K1.â\93¤{I}â¦\84 ⊢ ⬈[h] L2 →
- â\88\83â\88\83K2. â¦\83G,K1â¦\84 â\8a¢ â¬\88[h] K2 & L2 = K2.â\93¤{I}.
+lemma lpx_inv_unit_sn (h) (G): â\88\80I,L2,K1. â\9dªG,K1.â\93¤[I]â\9d« ⊢ ⬈[h] L2 →
+ â\88\83â\88\83K2. â\9dªG,K1â\9d« â\8a¢ â¬\88[h] K2 & L2 = K2.â\93¤[I].
/2 width=1 by lex_inv_unit_sn/ qed-.
(* Basic_2A1: was: lpx_inv_pair1 *)
-lemma lpx_inv_pair_sn (h) (G): â\88\80I,L2,K1,V1. â¦\83G,K1.â\93\91{I}V1â¦\84 ⊢ ⬈[h] L2 →
- â\88\83â\88\83K2,V2. â¦\83G,K1â¦\84 â\8a¢ â¬\88[h] K2 & â¦\83G,K1â¦\84 ⊢ V1 ⬈[h] V2 &
- L2 = K2.ⓑ{I}V2.
+lemma lpx_inv_pair_sn (h) (G): â\88\80I,L2,K1,V1. â\9dªG,K1.â\93\91[I]V1â\9d« ⊢ ⬈[h] L2 →
+ â\88\83â\88\83K2,V2. â\9dªG,K1â\9d« â\8a¢ â¬\88[h] K2 & â\9dªG,K1â\9d« ⊢ V1 ⬈[h] V2 &
+ L2 = K2.ⓑ[I]V2.
/2 width=1 by lex_inv_pair_sn/ qed-.
-lemma lpx_inv_unit_dx (h) (G): â\88\80I,L1,K2. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h] K2.â\93¤{I} →
- â\88\83â\88\83K1. â¦\83G,K1â¦\84 â\8a¢ â¬\88[h] K2 & L1 = K1.â\93¤{I}.
+lemma lpx_inv_unit_dx (h) (G): â\88\80I,L1,K2. â\9dªG,L1â\9d« â\8a¢ â¬\88[h] K2.â\93¤[I] →
+ â\88\83â\88\83K1. â\9dªG,K1â\9d« â\8a¢ â¬\88[h] K2 & L1 = K1.â\93¤[I].
/2 width=1 by lex_inv_unit_dx/ qed-.
(* Basic_2A1: was: lpx_inv_pair2 *)
-lemma lpx_inv_pair_dx (h) (G): â\88\80I,L1,K2,V2. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h] K2.â\93\91{I}V2 →
- â\88\83â\88\83K1,V1. â¦\83G,K1â¦\84 â\8a¢ â¬\88[h] K2 & â¦\83G,K1â¦\84 ⊢ V1 ⬈[h] V2 &
- L1 = K1.ⓑ{I}V1.
+lemma lpx_inv_pair_dx (h) (G): â\88\80I,L1,K2,V2. â\9dªG,L1â\9d« â\8a¢ â¬\88[h] K2.â\93\91[I]V2 →
+ â\88\83â\88\83K1,V1. â\9dªG,K1â\9d« â\8a¢ â¬\88[h] K2 & â\9dªG,K1â\9d« ⊢ V1 ⬈[h] V2 &
+ L1 = K1.ⓑ[I]V1.
/2 width=1 by lex_inv_pair_dx/ qed-.
-lemma lpx_inv_pair (h) (G): â\88\80I1,I2,L1,L2,V1,V2. â¦\83G,L1.â\93\91{I1}V1â¦\84 â\8a¢ â¬\88[h] L2.â\93\91{I2}V2 →
- â\88§â\88§ â¦\83G,L1â¦\84 â\8a¢ â¬\88[h] L2 & â¦\83G,L1â¦\84 ⊢ V1 ⬈[h] V2 & I1 = I2.
+lemma lpx_inv_pair (h) (G): â\88\80I1,I2,L1,L2,V1,V2. â\9dªG,L1.â\93\91[I1]V1â\9d« â\8a¢ â¬\88[h] L2.â\93\91[I2]V2 →
+ â\88§â\88§ â\9dªG,L1â\9d« â\8a¢ â¬\88[h] L2 & â\9dªG,L1â\9d« ⊢ V1 ⬈[h] 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 (h): â\88\80G,L1,T1,A. â¦\83G,L1â¦\84 ⊢ T1 ⁝ A →
- â\88\80T2. â¦\83G,L1â¦\84 ⊢ T1 ⬈[h] T2 →
- â\88\80L2. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h] L2 â\86\92 â¦\83G,L2â¦\84 ⊢ T2 ⁝ A.
+lemma cpx_aaa_conf_lpx (h): â\88\80G,L1,T1,A. â\9dªG,L1â\9d« ⊢ T1 ⁝ A →
+ â\88\80T2. â\9dªG,L1â\9d« ⊢ T1 ⬈[h] T2 →
+ â\88\80L2. â\9dªG,L1â\9d« â\8a¢ â¬\88[h] L2 â\86\92 â\9dªG,L2â\9d« ⊢ T2 ⁝ A.
#h #G #L1 #T1 #A #H elim H -G -L1 -T1 -A
[ #G #L1 #s #X #H
elim (cpx_inv_sort1 … H) -H #H destruct //
[ #V2 #T2 #HV12 #HT12 #H destruct /3 width=3 by aaa_appl/
| #q #V2 #W1 #W2 #U1 #U2 #HV12 #HW12 #HU12 #H1 #H2 destruct
lapply (IHV1 … HV12 … HL12) -IHV1 -HV12 #HV2
- lapply (IHT1 (ⓛ{q}W2.U2) … HL12) -IHT1 /2 width=1 by cpx_bind/ -L1 #H
+ lapply (IHT1 (ⓛ[q]W2.U2) … HL12) -IHT1 /2 width=1 by cpx_bind/ -L1 #H
elim (aaa_inv_abst … H) -H #B0 #A0 #HW1 #HU2 #H destruct
/5 width=6 by lsuba_aaa_trans, lsuba_beta, aaa_abbr, aaa_cast/
| #q #V #V2 #W1 #W2 #U1 #U2 #HV1 #HV2 #HW12 #HU12 #H1 #H2 destruct
lapply (aaa_lifts G L2 … B … (L2.ⓓW2) … HV2) -HV2 /3 width=2 by drops_refl, drops_drop/ #HV2
- lapply (IHT1 (ⓓ{q}W2.U2) … HL12) -IHT1 /2 width=1 by cpx_bind/ -L1 #H
+ lapply (IHT1 (ⓓ[q]W2.U2) … HL12) -IHT1 /2 width=1 by cpx_bind/ -L1 #H
elim (aaa_inv_abbr … H) -H /3 width=3 by aaa_abbr, aaa_appl/
]
| #G #L1 #V1 #T1 #A #_ #_ #IHV1 #IHT1 #X #H #L2 #HL12
(* Properties with extended structural successor for closures ***************)
-lemma lpx_fqu_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80K1. â¦\83G1,K1â¦\84 ⊢ ⬈[h] L1 →
- â\88\83â\88\83K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â¬\88[h] T & â¦\83G1,K1,Tâ¦\84 â¬\82[b] â¦\83G2,K2,T2â¦\84 & â¦\83G2,K2â¦\84 ⊢ ⬈[h] L2.
+lemma lpx_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] L1 →
+ â\88\83â\88\83K2,T. â\9dªG1,K1â\9d« â\8a¢ T1 â¬\88[h] T & â\9dªG1,K1,Tâ\9d« â¬\82[b] â\9dªG2,K2,T2â\9d« & â\9dªG2,K2â\9d« ⊢ ⬈[h] L2.
#h #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
- elim (lifts_total V (ð\9d\90\94â\9d´1â\9dµ)) #T #HVT
+ elim (lifts_total V (ð\9d\90\94â\9d¨1â\9d©)) #T #HVT
/3 width=5 by cpx_delta, fqu_drop, ex3_2_intro/
| /3 width=5 by cpx_pair_sn, fqu_pair_sn, ex3_2_intro/
| /3 width=5 by lpx_bind_refl_dx, cpx_pair_sn, fqu_bind_dx, ex3_2_intro/
]
qed-.
-lemma fqu_lpx_trans (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80K2. â¦\83G2,L2â¦\84 ⊢ ⬈[h] K2 →
- â\88\83â\88\83K1,T. â¦\83G1,L1â¦\84 â\8a¢ â¬\88[h] K1 & â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] T & â¦\83G1,K1,Tâ¦\84 â¬\82[b] â¦\83G2,K2,T2â¦\84.
+lemma fqu_lpx_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] K2 →
+ â\88\83â\88\83K1,T. â\9dªG1,L1â\9d« â\8a¢ â¬\88[h] K1 & â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88[h] 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 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 (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80K1. â¦\83G1,K1â¦\84 ⊢ ⬈[h] L1 →
- â\88\83â\88\83K2,T. â¦\83G1,K1â¦\84 â\8a¢ T1 â¬\88[h] T & â¦\83G1,K1,Tâ¦\84 â¬\82⸮[b] â¦\83G2,K2,T2â¦\84 & â¦\83G2,K2â¦\84 ⊢ ⬈[h] L2.
+lemma lpx_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] L1 →
+ â\88\83â\88\83K2,T. â\9dªG1,K1â\9d« â\8a¢ T1 â¬\88[h] T & â\9dªG1,K1,Tâ\9d« â¬\82⸮[b] â\9dªG2,K2,T2â\9d« & â\9dªG2,K2â\9d« ⊢ ⬈[h] L2.
#h #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 (h) (b): â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84 →
- â\88\80K2. â¦\83G2,L2â¦\84 ⊢ ⬈[h] K2 →
- â\88\83â\88\83K1,T. â¦\83G1,L1â¦\84 â\8a¢ â¬\88[h] K1 & â¦\83G1,L1â¦\84 â\8a¢ T1 â¬\88[h] T & â¦\83G1,K1,Tâ¦\84 â¬\82⸮[b] â¦\83G2,K2,T2â¦\84.
+lemma fquq_lpx_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] K2 →
+ â\88\83â\88\83K1,T. â\9dªG1,L1â\9d« â\8a¢ â¬\88[h] K1 & â\9dªG1,L1â\9d« â\8a¢ T1 â¬\88[h] 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_lpx_trans … H12 … HLK2) /3 width=5 by fqu_fquq, ex3_2_intro/
| * #H1 #H2 #H3 destruct /2 width=5 by ex3_2_intro/
(* Forward lemmas with free variables inclusion for restricted closures *****)
(* Basic_2A1: uses: lpx_cpx_frees_trans *)
-lemma lpx_cpx_conf_fsge (h) (G): â\88\80L0,T0,T1. â¦\83G,L0â¦\84 ⊢ T0 ⬈[h] T1 →
- â\88\80L2. â¦\83G,L0â¦\84 â\8a¢ â¬\88[h] L2 â\86\92 â¦\83L2,T1â¦\84 â\8a\86 â¦\83L0,T0â¦\84.
+lemma lpx_cpx_conf_fsge (h) (G): â\88\80L0,T0,T1. â\9dªG,L0â\9d« ⊢ T0 ⬈[h] T1 →
+ â\88\80L2. â\9dªG,L0â\9d« â\8a¢ â¬\88[h] 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 (h) (G): â\88\80L0,L2,T0. â¦\83G,L0â¦\84 â\8a¢ â¬\88[h] L2 â\86\92 â¦\83L2,T0â¦\84 â\8a\86 â¦\83L0,T0â¦\84.
+lemma lpx_fsge_comp (h) (G): â\88\80L0,L2,T0. â\9dªG,L0â\9d« â\8a¢ â¬\88[h] 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 (h) (G): â\88\80L1,L2. â¦\83G,L1â¦\84 ⊢ ⬈[h] L2 → |L1| = |L2|.
+lemma lpx_fwd_length (h) (G): â\88\80L1,L2. â\9dªG,L1â\9d« ⊢ ⬈[h] L2 → |L1| = |L2|.
/2 width=2 by lex_fwd_length/ qed-.
(* Properties with sort-irrelevant equivalence for local environments *******)
(* Basic_2A1: uses: lleq_lpx_trans *)
-lemma reqx_lpx_trans (h) (G): â\88\80L2,K2. â¦\83G,L2â¦\84 ⊢ ⬈[h] K2 →
+lemma reqx_lpx_trans (h) (G): â\88\80L2,K2. â\9dªG,L2â\9d« ⊢ ⬈[h] K2 →
∀L1. ∀T:term. L1 ≛[T] L2 →
- â\88\83â\88\83K1. â¦\83G,L1â¦\84 ⊢ ⬈[h] K1 & K1 ≛[T] K2.
+ â\88\83â\88\83K1. â\9dªG,L1â\9d« ⊢ ⬈[h] K1 & K1 ≛[T] K2.
#h #G #L2 #K2 #HLK2 #L1 #T #HL12
lapply (lpx_rpx … T HLK2) -HLK2 #HLK2
elim (reqx_rpx_trans … HLK2 … HL12) -L2 #K #H #HK2
(* Basic properties ***********************************************************)
-lemma rpx_atom: â\88\80h,I,G. â¦\83G,â\8b\86â¦\84 â\8a¢ â¬\88[h,â\93ª{I}] ⋆.
+lemma rpx_atom: â\88\80h,I,G. â\9dªG,â\8b\86â\9d« â\8a¢ â¬\88[h,â\93ª[I]] ⋆.
/2 width=1 by rex_atom/ qed.
lemma rpx_sort: ∀h,I1,I2,G,L1,L2,s.
- â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,â\8b\86s] L2 â\86\92 â¦\83G,L1.â\93\98{I1}â¦\84 â\8a¢ â¬\88[h,â\8b\86s] L2.â\93\98{I2}.
+ â\9dªG,L1â\9d« â\8a¢ â¬\88[h,â\8b\86s] L2 â\86\92 â\9dªG,L1.â\93\98[I1]â\9d« â\8a¢ â¬\88[h,â\8b\86s] L2.â\93\98[I2].
/2 width=1 by rex_sort/ qed.
lemma rpx_pair: ∀h,I,G,L1,L2,V1,V2.
- â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,V1] L2 â\86\92 â¦\83G,L1â¦\84 â\8a¢ V1 â¬\88[h] V2 â\86\92 â¦\83G,L1.â\93\91{I}V1â¦\84 â\8a¢ â¬\88[h,#0] L2.â\93\91{I}V2.
+ â\9dªG,L1â\9d« â\8a¢ â¬\88[h,V1] L2 â\86\92 â\9dªG,L1â\9d« â\8a¢ V1 â¬\88[h] V2 â\86\92 â\9dªG,L1.â\93\91[I]V1â\9d« â\8a¢ â¬\88[h,#0] L2.â\93\91[I]V2.
/2 width=1 by rex_pair/ qed.
lemma rpx_lref: ∀h,I1,I2,G,L1,L2,i.
- â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,#i] L2 â\86\92 â¦\83G,L1.â\93\98{I1}â¦\84 â\8a¢ â¬\88[h,#â\86\91i] L2.â\93\98{I2}.
+ â\9dªG,L1â\9d« â\8a¢ â¬\88[h,#i] L2 â\86\92 â\9dªG,L1.â\93\98[I1]â\9d« â\8a¢ â¬\88[h,#â\86\91i] L2.â\93\98[I2].
/2 width=1 by rex_lref/ qed.
lemma rpx_gref: ∀h,I1,I2,G,L1,L2,l.
- â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,§l] L2 â\86\92 â¦\83G,L1.â\93\98{I1}â¦\84 â\8a¢ â¬\88[h,§l] L2.â\93\98{I2}.
+ â\9dªG,L1â\9d« â\8a¢ â¬\88[h,§l] L2 â\86\92 â\9dªG,L1.â\93\98[I1]â\9d« â\8a¢ â¬\88[h,§l] L2.â\93\98[I2].
/2 width=1 by rex_gref/ qed.
lemma rpx_bind_repl_dx: ∀h,I,I1,G,L1,L2,T.
- â¦\83G,L1.â\93\98{I}â¦\84 â\8a¢ â¬\88[h,T] L2.â\93\98{I1} →
- â\88\80I2. â¦\83G,L1â¦\84 ⊢ I ⬈[h] I2 →
- â¦\83G,L1.â\93\98{I}â¦\84 â\8a¢ â¬\88[h,T] L2.â\93\98{I2}.
+ â\9dªG,L1.â\93\98[I]â\9d« â\8a¢ â¬\88[h,T] L2.â\93\98[I1] →
+ â\88\80I2. â\9dªG,L1â\9d« ⊢ I ⬈[h] I2 →
+ â\9dªG,L1.â\93\98[I]â\9d« â\8a¢ â¬\88[h,T] L2.â\93\98[I2].
/2 width=2 by rex_bind_repl_dx/ qed-.
(* Basic inversion lemmas ***************************************************)
-lemma rpx_inv_atom_sn: â\88\80h,G,Y2,T. â¦\83G,â\8b\86â¦\84 ⊢ ⬈[h,T] Y2 → Y2 = ⋆.
+lemma rpx_inv_atom_sn: â\88\80h,G,Y2,T. â\9dªG,â\8b\86â\9d« ⊢ ⬈[h,T] Y2 → Y2 = ⋆.
/2 width=3 by rex_inv_atom_sn/ qed-.
-lemma rpx_inv_atom_dx: â\88\80h,G,Y1,T. â¦\83G,Y1â¦\84 ⊢ ⬈[h,T] ⋆ → Y1 = ⋆.
+lemma rpx_inv_atom_dx: â\88\80h,G,Y1,T. â\9dªG,Y1â\9d« ⊢ ⬈[h,T] ⋆ → Y1 = ⋆.
/2 width=3 by rex_inv_atom_dx/ qed-.
-lemma rpx_inv_sort: â\88\80h,G,Y1,Y2,s. â¦\83G,Y1â¦\84 ⊢ ⬈[h,⋆s] Y2 →
+lemma rpx_inv_sort: â\88\80h,G,Y1,Y2,s. â\9dªG,Y1â\9d« ⊢ ⬈[h,⋆s] Y2 →
∨∨ Y1 = ⋆ ∧ Y2 = ⋆
- | â\88\83â\88\83I1,I2,L1,L2. â¦\83G,L1â¦\84 ⊢ ⬈[h,⋆s] L2 &
- Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}.
+ | â\88\83â\88\83I1,I2,L1,L2. â\9dªG,L1â\9d« ⊢ ⬈[h,⋆s] L2 &
+ Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2].
/2 width=1 by rex_inv_sort/ qed-.
-lemma rpx_inv_lref: â\88\80h,G,Y1,Y2,i. â¦\83G,Y1â¦\84 ⊢ ⬈[h,#↑i] Y2 →
+lemma rpx_inv_lref: â\88\80h,G,Y1,Y2,i. â\9dªG,Y1â\9d« ⊢ ⬈[h,#↑i] Y2 →
∨∨ Y1 = ⋆ ∧ Y2 = ⋆
- | â\88\83â\88\83I1,I2,L1,L2. â¦\83G,L1â¦\84 ⊢ ⬈[h,#i] L2 &
- Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}.
+ | â\88\83â\88\83I1,I2,L1,L2. â\9dªG,L1â\9d« ⊢ ⬈[h,#i] L2 &
+ Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2].
/2 width=1 by rex_inv_lref/ qed-.
-lemma rpx_inv_gref: â\88\80h,G,Y1,Y2,l. â¦\83G,Y1â¦\84 ⊢ ⬈[h,§l] Y2 →
+lemma rpx_inv_gref: â\88\80h,G,Y1,Y2,l. â\9dªG,Y1â\9d« ⊢ ⬈[h,§l] Y2 →
∨∨ Y1 = ⋆ ∧ Y2 = ⋆
- | â\88\83â\88\83I1,I2,L1,L2. â¦\83G,L1â¦\84 ⊢ ⬈[h,§l] L2 &
- Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}.
+ | â\88\83â\88\83I1,I2,L1,L2. â\9dªG,L1â\9d« ⊢ ⬈[h,§l] L2 &
+ Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2].
/2 width=1 by rex_inv_gref/ qed-.
-lemma rpx_inv_bind: â\88\80h,p,I,G,L1,L2,V,T. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,â\93\91{p,I}V.T] L2 →
- â\88§â\88§ â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,V] L2 & â¦\83G,L1.â\93\91{I}Vâ¦\84 â\8a¢ â¬\88[h,T] L2.â\93\91{I}V.
+lemma rpx_inv_bind: â\88\80h,p,I,G,L1,L2,V,T. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,â\93\91[p,I]V.T] L2 →
+ â\88§â\88§ â\9dªG,L1â\9d« â\8a¢ â¬\88[h,V] L2 & â\9dªG,L1.â\93\91[I]Vâ\9d« â\8a¢ â¬\88[h,T] L2.â\93\91[I]V.
/2 width=2 by rex_inv_bind/ qed-.
-lemma rpx_inv_flat: â\88\80h,I,G,L1,L2,V,T. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,â\93\95{I}V.T] L2 →
- â\88§â\88§ â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,V] L2 & â¦\83G,L1â¦\84 ⊢ ⬈[h,T] L2.
+lemma rpx_inv_flat: â\88\80h,I,G,L1,L2,V,T. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,â\93\95[I]V.T] L2 →
+ â\88§â\88§ â\9dªG,L1â\9d« â\8a¢ â¬\88[h,V] L2 & â\9dªG,L1â\9d« ⊢ ⬈[h,T] L2.
/2 width=2 by rex_inv_flat/ qed-.
(* Advanced inversion lemmas ************************************************)
-lemma rpx_inv_sort_bind_sn: â\88\80h,I1,G,Y2,L1,s. â¦\83G,L1.â\93\98{I1}â¦\84 ⊢ ⬈[h,⋆s] Y2 →
- â\88\83â\88\83I2,L2. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,â\8b\86s] L2 & Y2 = L2.â\93\98{I2}.
+lemma rpx_inv_sort_bind_sn: â\88\80h,I1,G,Y2,L1,s. â\9dªG,L1.â\93\98[I1]â\9d« ⊢ ⬈[h,⋆s] Y2 →
+ â\88\83â\88\83I2,L2. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,â\8b\86s] L2 & Y2 = L2.â\93\98[I2].
/2 width=2 by rex_inv_sort_bind_sn/ qed-.
-lemma rpx_inv_sort_bind_dx: â\88\80h,I2,G,Y1,L2,s. â¦\83G,Y1â¦\84 â\8a¢ â¬\88[h,â\8b\86s] L2.â\93\98{I2} →
- â\88\83â\88\83I1,L1. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,â\8b\86s] L2 & Y1 = L1.â\93\98{I1}.
+lemma rpx_inv_sort_bind_dx: â\88\80h,I2,G,Y1,L2,s. â\9dªG,Y1â\9d« â\8a¢ â¬\88[h,â\8b\86s] L2.â\93\98[I2] →
+ â\88\83â\88\83I1,L1. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,â\8b\86s] L2 & Y1 = L1.â\93\98[I1].
/2 width=2 by rex_inv_sort_bind_dx/ qed-.
-lemma rpx_inv_zero_pair_sn: â\88\80h,I,G,Y2,L1,V1. â¦\83G,L1.â\93\91{I}V1â¦\84 ⊢ ⬈[h,#0] Y2 →
- â\88\83â\88\83L2,V2. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,V1] L2 & â¦\83G,L1â¦\84 ⊢ V1 ⬈[h] V2 &
- Y2 = L2.ⓑ{I}V2.
+lemma rpx_inv_zero_pair_sn: â\88\80h,I,G,Y2,L1,V1. â\9dªG,L1.â\93\91[I]V1â\9d« ⊢ ⬈[h,#0] Y2 →
+ â\88\83â\88\83L2,V2. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,V1] L2 & â\9dªG,L1â\9d« ⊢ V1 ⬈[h] V2 &
+ Y2 = L2.ⓑ[I]V2.
/2 width=1 by rex_inv_zero_pair_sn/ qed-.
-lemma rpx_inv_zero_pair_dx: â\88\80h,I,G,Y1,L2,V2. â¦\83G,Y1â¦\84 â\8a¢ â¬\88[h,#0] L2.â\93\91{I}V2 →
- â\88\83â\88\83L1,V1. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,V1] L2 & â¦\83G,L1â¦\84 ⊢ V1 ⬈[h] V2 &
- Y1 = L1.ⓑ{I}V1.
+lemma rpx_inv_zero_pair_dx: â\88\80h,I,G,Y1,L2,V2. â\9dªG,Y1â\9d« â\8a¢ â¬\88[h,#0] L2.â\93\91[I]V2 →
+ â\88\83â\88\83L1,V1. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,V1] L2 & â\9dªG,L1â\9d« ⊢ V1 ⬈[h] V2 &
+ Y1 = L1.ⓑ[I]V1.
/2 width=1 by rex_inv_zero_pair_dx/ qed-.
-lemma rpx_inv_lref_bind_sn: â\88\80h,I1,G,Y2,L1,i. â¦\83G,L1.â\93\98{I1}â¦\84 ⊢ ⬈[h,#↑i] Y2 →
- â\88\83â\88\83I2,L2. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,#i] L2 & Y2 = L2.â\93\98{I2}.
+lemma rpx_inv_lref_bind_sn: â\88\80h,I1,G,Y2,L1,i. â\9dªG,L1.â\93\98[I1]â\9d« ⊢ ⬈[h,#↑i] Y2 →
+ â\88\83â\88\83I2,L2. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,#i] L2 & Y2 = L2.â\93\98[I2].
/2 width=2 by rex_inv_lref_bind_sn/ qed-.
-lemma rpx_inv_lref_bind_dx: â\88\80h,I2,G,Y1,L2,i. â¦\83G,Y1â¦\84 â\8a¢ â¬\88[h,#â\86\91i] L2.â\93\98{I2} →
- â\88\83â\88\83I1,L1. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,#i] L2 & Y1 = L1.â\93\98{I1}.
+lemma rpx_inv_lref_bind_dx: â\88\80h,I2,G,Y1,L2,i. â\9dªG,Y1â\9d« â\8a¢ â¬\88[h,#â\86\91i] L2.â\93\98[I2] →
+ â\88\83â\88\83I1,L1. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,#i] L2 & Y1 = L1.â\93\98[I1].
/2 width=2 by rex_inv_lref_bind_dx/ qed-.
-lemma rpx_inv_gref_bind_sn: â\88\80h,I1,G,Y2,L1,l. â¦\83G,L1.â\93\98{I1}â¦\84 ⊢ ⬈[h,§l] Y2 →
- â\88\83â\88\83I2,L2. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,§l] L2 & Y2 = L2.â\93\98{I2}.
+lemma rpx_inv_gref_bind_sn: â\88\80h,I1,G,Y2,L1,l. â\9dªG,L1.â\93\98[I1]â\9d« ⊢ ⬈[h,§l] Y2 →
+ â\88\83â\88\83I2,L2. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,§l] L2 & Y2 = L2.â\93\98[I2].
/2 width=2 by rex_inv_gref_bind_sn/ qed-.
-lemma rpx_inv_gref_bind_dx: â\88\80h,I2,G,Y1,L2,l. â¦\83G,Y1â¦\84 â\8a¢ â¬\88[h,§l] L2.â\93\98{I2} →
- â\88\83â\88\83I1,L1. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,§l] L2 & Y1 = L1.â\93\98{I1}.
+lemma rpx_inv_gref_bind_dx: â\88\80h,I2,G,Y1,L2,l. â\9dªG,Y1â\9d« â\8a¢ â¬\88[h,§l] L2.â\93\98[I2] →
+ â\88\83â\88\83I1,L1. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,§l] L2 & Y1 = L1.â\93\98[I1].
/2 width=2 by rex_inv_gref_bind_dx/ qed-.
(* Basic forward lemmas *****************************************************)
lemma rpx_fwd_pair_sn: ∀h,I,G,L1,L2,V,T.
- â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,â\91¡{I}V.T] L2 â\86\92 â¦\83G,L1â¦\84 ⊢ ⬈[h,V] L2.
+ â\9dªG,L1â\9d« â\8a¢ â¬\88[h,â\91¡[I]V.T] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[h,V] L2.
/2 width=3 by rex_fwd_pair_sn/ qed-.
lemma rpx_fwd_bind_dx: ∀h,p,I,G,L1,L2,V,T.
- â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,â\93\91{p,I}V.T] L2 â\86\92 â¦\83G,L1.â\93\91{I}Vâ¦\84 â\8a¢ â¬\88[h,T] L2.â\93\91{I}V.
+ â\9dªG,L1â\9d« â\8a¢ â¬\88[h,â\93\91[p,I]V.T] L2 â\86\92 â\9dªG,L1.â\93\91[I]Vâ\9d« â\8a¢ â¬\88[h,T] L2.â\93\91[I]V.
/2 width=2 by rex_fwd_bind_dx/ qed-.
lemma rpx_fwd_flat_dx: ∀h,I,G,L1,L2,V,T.
- â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,â\93\95{I}V.T] L2 â\86\92 â¦\83G,L1â¦\84 ⊢ ⬈[h,T] L2.
+ â\9dªG,L1â\9d« â\8a¢ â¬\88[h,â\93\95[I]V.T] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[h,T] L2.
/2 width=3 by rex_fwd_flat_dx/ qed-.
/2 width=5 by rex_dropable_dx/ qed-.
lemma rpx_inv_lifts_bi (h) (G):
- â\88\80L1,L2,U. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,U] L2 â\86\92 â\88\80b,f. ð\9d\90\94â¦\83fâ¦\84 →
+ â\88\80L1,L2,U. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,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 â¦\83G,K1â¦\84 ⊢ ⬈[h,T] K2.
+ â\88\80T. â\87§*[f]T â\89\98 U â\86\92 â\9dªG,K1â\9d« ⊢ ⬈[h,T] K2.
/2 width=10 by rex_inv_lifts_bi/ qed-.
lemma rpx_refl: ∀h,G,T. reflexive … (rpx h G T).
/2 width=1 by rex_refl/ qed.
-lemma rpx_pair_refl: â\88\80h,G,L,V1,V2. â¦\83G,Lâ¦\84 ⊢ V1 ⬈[h] V2 →
- â\88\80I,T. â¦\83G,L.â\93\91{I}V1â¦\84 â\8a¢ â¬\88[h,T] L.â\93\91{I}V2.
+lemma rpx_pair_refl: â\88\80h,G,L,V1,V2. â\9dªG,Lâ\9d« ⊢ V1 ⬈[h] V2 →
+ â\88\80I,T. â\9dªG,L.â\93\91[I]V1â\9d« â\8a¢ â¬\88[h,T] L.â\93\91[I]V2.
/2 width=1 by rex_pair_refl/ qed.
(* Advanced inversion lemmas ************************************************)
-lemma rpx_inv_bind_void: â\88\80h,p,I,G,L1,L2,V,T. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,â\93\91{p,I}V.T] L2 →
- â\88§â\88§ â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,V] L2 & â¦\83G,L1.â\93§â¦\84 ⊢ ⬈[h,T] L2.ⓧ.
+lemma rpx_inv_bind_void: â\88\80h,p,I,G,L1,L2,V,T. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,â\93\91[p,I]V.T] L2 →
+ â\88§â\88§ â\9dªG,L1â\9d« â\8a¢ â¬\88[h,V] L2 & â\9dªG,L1.â\93§â\9d« ⊢ ⬈[h,T] L2.ⓧ.
/2 width=3 by rex_inv_bind_void/ qed-.
(* Advanced forward lemmas **************************************************)
lemma rpx_fwd_bind_dx_void: ∀h,p,I,G,L1,L2,V,T.
- â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,â\93\91{p,I}V.T] L2 â\86\92 â¦\83G,L1.â\93§â¦\84 ⊢ ⬈[h,T] L2.ⓧ.
+ â\9dªG,L1â\9d« â\8a¢ â¬\88[h,â\93\91[p,I]V.T] L2 â\86\92 â\9dªG,L1.â\93§â\9d« ⊢ ⬈[h,T] L2.ⓧ.
/2 width=4 by rex_fwd_bind_dx_void/ qed-.
(* Forward lemmas with free variables inclusion for restricted closures *****)
-(* Note: "â¦\83L2, T1â¦\84 â\8a\86 â¦\83L2, T0â¦\84" 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: "∀h, G. s_r_confluent1 … (cpx h G) (rpxs h G)" *)
-lemma rpx_cpx_conf_fsge (h) (G): â\88\80L0,T0,T1. â¦\83G,L0â¦\84 ⊢ T0 ⬈[h] T1 →
- â\88\80L2. â¦\83G,L0â¦\84 â\8a¢â¬\88[h,T0] L2 â\86\92 â¦\83L2,T1â¦\84 â\8a\86 â¦\83L0,T0â¦\84.
+lemma rpx_cpx_conf_fsge (h) (G): â\88\80L0,T0,T1. â\9dªG,L0â\9d« ⊢ T0 ⬈[h] T1 →
+ â\88\80L2. â\9dªG,L0â\9d« â\8a¢â¬\88[h,T0] L2 â\86\92 â\9dªL2,T1â\9d« â\8a\86 â\9dªL0,T0â\9d«.
#h #G0 #L0 #T0 @(fqup_wf_ind_eq (Ⓣ) … G0 L0 T0) -G0 -L0 -T0
#G #L #T #IH #G0 #L0 * *
[ #s #HG #HL #HT #X #HX #Y #HY destruct -IH
lemma rpx_cpx_conf (h) (G): s_r_confluent1 … (cpx h G) (rpx h G).
/2 width=5 by cpx_rex_conf/ qed-.
-lemma rpx_cpx_conf_fsge_dx (h) (G): â\88\80L0,T0,T1. â¦\83G,L0â¦\84 ⊢ T0 ⬈[h] T1 →
- â\88\80L2. â¦\83G,L0â¦\84 â\8a¢â¬\88[h,T0] L2 â\86\92 â¦\83L2,T1â¦\84 â\8a\86 â¦\83L0,T1â¦\84.
+lemma rpx_cpx_conf_fsge_dx (h) (G): â\88\80L0,T0,T1. â\9dªG,L0â\9d« ⊢ T0 ⬈[h] T1 →
+ â\88\80L2. â\9dªG,L0â\9d« â\8a¢â¬\88[h,T0] L2 â\86\92 â\9dªL2,T1â\9d« â\8a\86 â\9dªL0,T1â\9d«.
/3 width=5 by rpx_cpx_conf, rpx_fsge_comp/ qed-.
(* Forward lemmas with length for local environments ************************)
-lemma rpx_fwd_length: â\88\80h,G,L1,L2,T. â¦\83G,L1â¦\84 ⊢ ⬈[h,T] L2 → |L1| = |L2|.
+lemma rpx_fwd_length: â\88\80h,G,L1,L2,T. â\9dªG,L1â\9d« ⊢ ⬈[h,T] L2 → |L1| = |L2|.
/2 width=3 by rex_fwd_length/ qed-.
(* Inversion lemmas with length for local environments **********************)
-lemma rpx_inv_zero_length: â\88\80h,G,Y1,Y2. â¦\83G,Y1â¦\84 ⊢ ⬈[h,#0] Y2 →
+lemma rpx_inv_zero_length: â\88\80h,G,Y1,Y2. â\9dªG,Y1â\9d« ⊢ ⬈[h,#0] Y2 →
∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
- | â\88\83â\88\83I,L1,L2,V1,V2. â¦\83G,L1â¦\84 ⊢ ⬈[h,V1] L2 &
- â¦\83G,L1â¦\84 ⊢ V1 ⬈[h] V2 &
- Y1 = L1.ⓑ{I}V1 & Y2 = L2.ⓑ{I}V2
- | ∃∃I,L1,L2. |L1| = |L2| & Y1 = L1.ⓤ{I} & Y2 = L2.ⓤ{I}.
+ | â\88\83â\88\83I,L1,L2,V1,V2. â\9dªG,L1â\9d« ⊢ ⬈[h,V1] L2 &
+ â\9dªG,L1â\9d« ⊢ V1 ⬈[h] 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 fleq_rpx (h) (G): â\88\80L1,L2,T. L1 â\89¡[T] L2 â\86\92 â¦\83G,L1â¦\84 ⊢ ⬈[h,T] L2.
+lemma fleq_rpx (h) (G): â\88\80L1,L2,T. L1 â\89¡[T] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[h,T] L2.
/2 width=1 by req_fwd_rex/ qed.
(* Properties with unbound parallel rt-transition for full local envs *******)
-lemma lpx_rpx: â\88\80h,G,L1,L2,T. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h] L2 â\86\92 â¦\83G,L1â¦\84 ⊢ ⬈[h,T] L2.
+lemma lpx_rpx: â\88\80h,G,L1,L2,T. â\9dªG,L1â\9d« â\8a¢ â¬\88[h] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[h,T] L2.
/2 width=1 by rex_lex/ qed.
(* Inversion lemmas with unbound parallel rt-transition for full local envs *)
-lemma rpx_inv_lpx_req: â\88\80h,G,L1,L2,T. â¦\83G,L1â¦\84 ⊢ ⬈[h,T] L2 →
- â\88\83â\88\83L. â¦\83G,L1â¦\84 ⊢ ⬈[h] L & L ≡[T] L2.
+lemma rpx_inv_lpx_req: â\88\80h,G,L1,L2,T. â\9dªG,L1â\9d« ⊢ ⬈[h,T] L2 →
+ â\88\83â\88\83L. â\9dªG,L1â\9d« ⊢ ⬈[h] L & L ≡[T] L2.
/3 width=3 by rpx_fsge_comp, rex_inv_lex_req/ qed-.
(* Properties with sort-irrelevant equivalence for local environments *******)
-lemma rpx_pair_sn_split: â\88\80h,G,L1,L2,V. â¦\83G,L1â¦\84 ⊢ ⬈[h,V] L2 → ∀I,T.
- â\88\83â\88\83L. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,â\91¡{I}V.T] L & L ≛[V] L2.
+lemma rpx_pair_sn_split: â\88\80h,G,L1,L2,V. â\9dªG,L1â\9d« ⊢ ⬈[h,V] L2 → ∀I,T.
+ â\88\83â\88\83L. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,â\91¡[I]V.T] L & L ≛[V] L2.
/3 width=5 by rpx_fsge_comp, rex_pair_sn_split/ qed-.
-lemma rpx_flat_dx_split: â\88\80h,G,L1,L2,T. â¦\83G,L1â¦\84 ⊢ ⬈[h,T] L2 → ∀I,V.
- â\88\83â\88\83L. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,â\93\95{I}V.T] L & L ≛[T] L2.
+lemma rpx_flat_dx_split: â\88\80h,G,L1,L2,T. â\9dªG,L1â\9d« ⊢ ⬈[h,T] L2 → ∀I,V.
+ â\88\83â\88\83L. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,â\93\95[I]V.T] L & L ≛[T] L2.
/3 width=5 by rpx_fsge_comp, rex_flat_dx_split/ qed-.
-lemma rpx_bind_dx_split: â\88\80h,I,G,L1,L2,V1,T. â¦\83G,L1.â\93\91{I}V1â¦\84 ⊢ ⬈[h,T] L2 → ∀p.
- â\88\83â\88\83L,V. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,â\93\91{p,I}V1.T] L & L.â\93\91{I}V â\89\9b[T] L2 & â¦\83G,L1â¦\84 ⊢ V1 ⬈[h] V.
+lemma rpx_bind_dx_split: â\88\80h,I,G,L1,L2,V1,T. â\9dªG,L1.â\93\91[I]V1â\9d« ⊢ ⬈[h,T] L2 → ∀p.
+ â\88\83â\88\83L,V. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,â\93\91[p,I]V1.T] L & L.â\93\91[I]V â\89\9b[T] L2 & â\9dªG,L1â\9d« ⊢ V1 ⬈[h] V.
/3 width=5 by rpx_fsge_comp, rex_bind_dx_split/ qed-.
-lemma rpx_bind_dx_split_void: â\88\80h,G,K1,L2,T. â¦\83G,K1.â\93§â¦\84 ⊢ ⬈[h,T] L2 → ∀p,I,V.
- â\88\83â\88\83K2. â¦\83G,K1â¦\84 â\8a¢ â¬\88[h,â\93\91{p,I}V.T] K2 & K2.ⓧ ≛[T] L2.
+lemma rpx_bind_dx_split_void: â\88\80h,G,K1,L2,T. â\9dªG,K1.â\93§â\9d« ⊢ ⬈[h,T] L2 → ∀p,I,V.
+ â\88\83â\88\83K2. â\9dªG,K1â\9d« â\8a¢ â¬\88[h,â\93\91[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: ∀h,G. s_r_confluent1 … cdeq (rpx h G).
/2 width=5 by teqx_rex_conf/ qed-.
lemma rpx_teqx_div: ∀h,T1,T2. T1 ≛ T2 →
- â\88\80G,L1,L2. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,T2] L2 â\86\92 â¦\83G,L1â¦\84 ⊢ ⬈[h,T1] L2.
+ â\88\80G,L1,L2. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,T2] L2 â\86\92 â\9dªG,L1â\9d« ⊢ ⬈[h,T1] L2.
/2 width=5 by teqx_rex_div/ qed-.
lemma cpx_teqx_conf_rex: ∀h,G. R_confluent2_rex … (cpx h G) cdeq (cpx h G) cdeq.
]
qed-.
-lemma cpx_teqx_conf: â\88\80h,G,L. â\88\80T0:term. â\88\80T1. â¦\83G,Lâ¦\84 ⊢ T0 ⬈[h] T1 →
+lemma cpx_teqx_conf: â\88\80h,G,L. â\88\80T0:term. â\88\80T1. â\9dªG,Lâ\9d« ⊢ T0 ⬈[h] T1 →
∀T2. T0 ≛ T2 →
- â\88\83â\88\83T. T1 â\89\9b T & â¦\83G,Lâ¦\84 ⊢ T2 ⬈[h] T.
+ â\88\83â\88\83T. T1 â\89\9b T & â\9dªG,Lâ\9d« ⊢ T2 ⬈[h] T.
#h #G #L #T0 #T1 #HT01 #T2 #HT02
elim (cpx_teqx_conf_rex … HT01 … HT02 L … L) -HT01 -HT02
/2 width=3 by rex_refl, ex2_intro/
qed-.
lemma teqx_cpx_trans: ∀h,G,L,T2. ∀T0:term. T2 ≛ T0 →
- â\88\80T1. â¦\83G,Lâ¦\84 ⊢ T0 ⬈[h] T1 →
- â\88\83â\88\83T. â¦\83G,Lâ¦\84 ⊢ T2 ⬈[h] T & T ≛ T1.
+ â\88\80T1. â\9dªG,Lâ\9d« ⊢ T0 ⬈[h] T1 →
+ â\88\83â\88\83T. â\9dªG,Lâ\9d« ⊢ T2 ⬈[h] T & T ≛ T1.
#h #G #L #T2 #T0 #HT20 #T1 #HT01
elim (cpx_teqx_conf … HT01 T2) -HT01 /3 width=3 by teqx_sym, ex2_intro/
qed-.
(* Basic_2A1: uses: cpx_lleq_conf *)
-lemma cpx_reqx_conf: â\88\80h,G,L0,T0,T1. â¦\83G,L0â¦\84 ⊢ T0 ⬈[h] T1 →
+lemma cpx_reqx_conf: â\88\80h,G,L0,T0,T1. â\9dªG,L0â\9d« ⊢ T0 ⬈[h] T1 →
∀L2. L0 ≛[T0] L2 →
- â\88\83â\88\83T. â¦\83G,L2â¦\84 ⊢ T0 ⬈[h] T & T1 ≛ T.
+ â\88\83â\88\83T. â\9dªG,L2â\9d« ⊢ T0 ⬈[h] T & T1 ≛ T.
#h #G #L0 #T0 #T1 #HT01 #L2 #HL02
elim (cpx_teqx_conf_rex … HT01 T0 … L0 … HL02) -HT01 -HL02
/2 width=3 by rex_refl, ex2_intro/
(* Basic_2A1: uses: lleq_cpx_trans *)
lemma reqx_cpx_trans: ∀h,G,L2,L0,T0. L2 ≛[T0] L0 →
- â\88\80T1. â¦\83G,L0â¦\84 ⊢ T0 ⬈[h] T1 →
- â\88\83â\88\83T. â¦\83G,L2â¦\84 ⊢ T0 ⬈[h] T & T ≛ T1.
+ â\88\80T1. â\9dªG,L0â\9d« ⊢ T0 ⬈[h] T1 →
+ â\88\83â\88\83T. â\9dªG,L2â\9d« ⊢ T0 ⬈[h] T & T ≛ T1.
#h #G #L2 #L0 #T0 #HL20 #T1 #HT01
elim (cpx_reqx_conf … HT01 L2) -HT01
/3 width=3 by reqx_sym, teqx_sym, ex2_intro/
lemma rpx_reqx_conf: ∀h,G,T. confluent2 … (rpx h G T) (reqx T).
/3 width=6 by rpx_fsge_comp, reqx_fsge_comp, cpx_teqx_conf_rex, rex_conf/ qed-.
-lemma reqx_rpx_trans: â\88\80h,G,T,L2,K2. â¦\83G,L2â¦\84 ⊢ ⬈[h,T] K2 →
+lemma reqx_rpx_trans: â\88\80h,G,T,L2,K2. â\9dªG,L2â\9d« ⊢ ⬈[h,T] K2 →
∀L1. L1 ≛[T] L2 →
- â\88\83â\88\83K1. â¦\83G,L1â¦\84 ⊢ ⬈[h,T] K1 & K1 ≛[T] K2.
+ â\88\83â\88\83K1. â\9dªG,L1â\9d« ⊢ ⬈[h,T] K1 & K1 ≛[T] K2.
#h #G #T #L2 #K2 #HLK2 #L1 #HL12
elim (rpx_reqx_conf … HLK2 L1)
/3 width=3 by reqx_sym, ex2_intro/
(* Main properties **********************************************************)
-theorem rpx_bind: â\88\80h,G,L1,L2,V1. â¦\83G,L1â¦\84 ⊢ ⬈[h,V1] L2 →
- â\88\80I,V2,T. â¦\83G,L1.â\93\91{I}V1â¦\84 â\8a¢ â¬\88[h,T] L2.â\93\91{I}V2 →
- â\88\80p. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,â\93\91{p,I}V1.T] L2.
+theorem rpx_bind: â\88\80h,G,L1,L2,V1. â\9dªG,L1â\9d« ⊢ ⬈[h,V1] L2 →
+ â\88\80I,V2,T. â\9dªG,L1.â\93\91[I]V1â\9d« â\8a¢ â¬\88[h,T] L2.â\93\91[I]V2 →
+ â\88\80p. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,â\93\91[p,I]V1.T] L2.
/2 width=2 by rex_bind/ qed.
-theorem rpx_flat: â\88\80h,G,L1,L2,V. â¦\83G,L1â¦\84 ⊢ ⬈[h,V] L2 →
- â\88\80I,T. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,T] L2 â\86\92 â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,â\93\95{I}V.T] L2.
+theorem rpx_flat: â\88\80h,G,L1,L2,V. â\9dªG,L1â\9d« ⊢ ⬈[h,V] L2 →
+ â\88\80I,T. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,T] L2 â\86\92 â\9dªG,L1â\9d« â\8a¢ â¬\88[h,â\93\95[I]V.T] L2.
/2 width=1 by rex_flat/ qed.
-theorem rpx_bind_void: â\88\80h,G,L1,L2,V. â¦\83G,L1â¦\84 ⊢ ⬈[h,V] L2 →
- â\88\80T. â¦\83G,L1.â\93§â¦\84 ⊢ ⬈[h,T] L2.ⓧ →
- â\88\80p,I. â¦\83G,L1â¦\84 â\8a¢ â¬\88[h,â\93\91{p,I}V.T] L2.
+theorem rpx_bind_void: â\88\80h,G,L1,L2,V. â\9dªG,L1â\9d« ⊢ ⬈[h,V] L2 →
+ â\88\80T. â\9dªG,L1.â\93§â\9d« ⊢ ⬈[h,T] L2.ⓧ →
+ â\88\80p,I. â\9dªG,L1â\9d« â\8a¢ â¬\88[h,â\93\91[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" + "( â¦\83?,?â¦\84 ⊢ ? :*[?,?,?] ? )" "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" + "( â¦\83?,?â¦\84 ⊢ ? :[?,?] ? )" "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" + "( â¦\83?,?â¦\84 ⊢ ? ![?,?] )" "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 ( â¦\83?,?â¦\84 ⊢ ? ⬌*[?] ? )" "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 ( â¦\83?,?â¦\84 ⊢ ? ⬌*[?,?,?] ? )" "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 ( â¦\83?,?â¦\84 ⊢ ⬌η[?] ? )" "lpce_drops" * ]
- [ [ "for binders" ] "cpce_ext" + "( â¦\83?,?â¦\84 ⊢ ? ⬌η[?] ? )" * ]
- [ [ "for terms" ] "cpce" + "( â¦\83?,?â¦\84 ⊢ ? ⬌η[?] ? )" "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" + "( â¦\83?,?â¦\84 ⊢ ? ⬌[?] ? )" "cpc_cpc" * ]
+ [ [ "for terms" ] "cpc" + "( â\9dª?,?â\9d« ⊢ ? ⬌[?] ? )" "cpc_cpc" * ]
}
]
}
class "sky"
[ { "rt-computation" * } {
[ { "context-sensitive parallel t-computation" * } {
- [ [ "for terms" ] "cpts" + "( â¦\83?,?â¦\84 ⊢ ? ⬆*[?,?] ? )" "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 ( â¦\83?,?â¦\84 â\8a¢ ? â\9e¡*[?] ð\9d\90\8dâ¦\83?â¦\84 )" "cprre_csx" + "cprre_cpms" + "cprre_cprre" * ]
- [ [ "for lenvs on all entries" ] "lprs ( â¦\83?,?â¦\84 ⊢ ➡*[?] ? )" "lprs_tc" + "lprs_ctc" + "lprs_length" + "lprs_drops" + "lprs_aaa" + "lprs_lpr" + "lprs_lpxs" + "lprs_cpms" + "lprs_cprs" + "lprs_lprs" * ]
- [ [ "for binders" ] "cprs_ext" + "( â¦\83?,?â¦\84 ⊢ ? ➡*[?] ?)" * ]
- [ [ "for terms" ] "cprs" + "( â¦\83?,?â¦\84 ⊢ ? ➡*[?] ?)" "cprs_ctc" + "cprs_tweq" + "cprs_drops" + "cprs_cpr" + "cprs_lpr" + "cprs_cnr" + "cprs_cprs" * ]
+ [ [ "evaluation for terms" ] "cprre ( â\9dª?,?â\9d« â\8a¢ ? â\9e¡*[?] ð\9d\90\8dâ\9dª?â\9d« )" "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 terms" ] "cprs" + "( â\9dª?,?â\9d« ⊢ ? ➡*[?] ?)" "cprs_ctc" + "cprs_tweq" + "cprs_drops" + "cprs_cpr" + "cprs_lpr" + "cprs_cnr" + "cprs_cprs" * ]
}
]
[ { "t-bound context-sensitive parallel rt-computation" * } {
- [ [ "t-unbound whd evaluation for terms" ] "cpmuwe ( â¦\83?,?â¦\84 â\8a¢ ? â¬\8c*𝐍𝐖*[?,?] ? )" "cpmuwe_csx" + "cpmuwe_cpmuwe" * ]
- [ [ "t-unbound whd normal form for terms" ] "cnuw ( â¦\83?,?â¦\84 â\8a¢ â¬\8c𝐍𝐖*[?] ? )" "cnuw_drops" + "cnuw_simple" + "cnuw_cnuw" * ]
- [ [ "t-bpund evaluation for terms" ] "cpmre ( â¦\83?,?â¦\84 â\8a¢ ? â\9e¡*[?,?] ð\9d\90\8dâ¦\83?â¦\84 )" "cpmre_aaa" * ]
- [ [ "for terms" ] "cpms" + "( â¦\83?,?â¦\84 ⊢ ? ➡*[?,?] ? )" "cpms_drops" + "cpms_lsubr" + "cpms_reqx" + "cpms_aaa" + "cpms_lpr" + "cpms_cpxs" + "cpms_fpbs" + "cpms_fpbg" + "cpms_cpms" * ]
+ [ [ "t-unbound whd evaluation for terms" ] "cpmuwe ( â\9dª?,?â\9d« â\8a¢ ? â\9e¡*𝐍𝐖*[?,?] ? )" "cpmuwe_csx" + "cpmuwe_cpmuwe" * ]
+ [ [ "t-unbound whd normal form for terms" ] "cnuw ( â\9dª?,?â\9d« â\8a¢ â\9e¡𝐍𝐖*[?] ? )" "cnuw_drops" + "cnuw_simple" + "cnuw_cnuw" * ]
+ [ [ "t-bpund evaluation for terms" ] "cpmre ( â\9dª?,?â\9d« â\8a¢ ? â\9e¡*[?,?] ð\9d\90\8dâ\9dª?â\9d« )" "cpmre_aaa" * ]
+ [ [ "for terms" ] "cpms" + "( â\9dª?,?â\9d« ⊢ ? ➡*[?,?] ? )" "cpms_drops" + "cpms_lsubr" + "cpms_reqx" + "cpms_aaa" + "cpms_lpr" + "cpms_cpxs" + "cpms_fpbs" + "cpms_fpbg" + "cpms_cpms" * ]
}
]
[ { "unbound context-sensitive parallel rst-computation" * } {
- [ [ "strongly normalizing for closures" ] "fsb" + "( â\89¥[?] ð\9d\90\92â¦\83?,?,?â¦\84 )" "fsb_feqx" + "fsb_aaa" + "fsb_csx" + "fsb_fpbg" * ]
- [ [ "proper for closures" ] "fpbg" + "( â¦\83?,?,?â¦\84 >[?] â¦\83?,?,?â¦\84 )" "fpbg_fqup" + "fpbg_cpxs" + "fpbg_lpxs" + "fpbg_fpbs" + "fpbg_fpbg" * ]
- [ [ "for closures" ] "fpbs" + "( â¦\83?,?,?â¦\84 â\89¥[?] â¦\83?,?,?â¦\84 )" "fpbs_fqup" + "fpbs_fqus" + "fpbs_aaa" + "fpbs_cpx" + "fpbs_fpb" + "fpbs_cpxs" + "fpbs_lpxs" + "fpbs_csx" + "fpbs_fpbs" * ]
+ [ [ "strongly normalizing for closures" ] "fsb" + "( â\89¥[?] ð\9d\90\92â\9dª?,?,?â\9d« )" "fsb_feqx" + "fsb_aaa" + "fsb_csx" + "fsb_fpbg" * ]
+ [ [ "proper for closures" ] "fpbg" + "( â\9dª?,?,?â\9d« >[?] â\9dª?,?,?â\9d« )" "fpbg_fqup" + "fpbg_cpxs" + "fpbg_lpxs" + "fpbg_fpbs" + "fpbg_fpbg" * ]
+ [ [ "for closures" ] "fpbs" + "( â\9dª?,?,?â\9d« â\89¥[?] â\9dª?,?,?â\9d« )" "fpbs_fqup" + "fpbs_fqus" + "fpbs_aaa" + "fpbs_cpx" + "fpbs_fpb" + "fpbs_cpxs" + "fpbs_lpxs" + "fpbs_csx" + "fpbs_fpbs" * ]
}
]
[ { "unbound 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" + "( ? â\8a¢ â¬\88*[?,?] ð\9d\90\92â¦\83?â¦\84 )" "rsx_length" + "rsx_drops" + "rsx_fqup" + "rsx_cpxs" + "rsx_csx" + "rsx_rsx" * ]
- [ [ "strongly normalizing for term vectors" ] "csx_vector" + "( â¦\83?,?â¦\84 â\8a¢ â¬\88*[?] ð\9d\90\92â¦\83?â¦\84 )" "csx_cnx_vector" + "csx_csx_vector" * ]
- [ [ "strongly normalizing for terms" ] "csx" + "( â¦\83?,?â¦\84 â\8a¢ â¬\88*[?] ð\9d\90\92â¦\83?â¦\84 )" "csx_simple" + "csx_simple_teqo" + "csx_drops" + "csx_fqus" + "csx_lsubr" + "csx_reqx" + "csx_feqx" + "csx_aaa" + "csx_gcp" + "csx_gcr" + "csx_lpx" + "csx_cnx" + "csx_fpbq" + "csx_cpxs" + "csx_lpxs" + "csx_csx" * ]
- [ [ "for lenvs on all entries" ] "lpxs" + "( â¦\83?,?â¦\84 ⊢ ⬈*[?] ? )" "lpxs_length" + "lpxs_drops" + "lpxs_reqx" + "lpxs_feqx" + "lpxs_aaa" + "lpxs_lpx" + "lpxs_cpxs" + "lpxs_lpxs" * ]
- [ [ "for binders" ] "cpxs_ext" + "( â¦\83?,?â¦\84 ⊢ ? ⬈*[?] ? )" * ]
- [ [ "for terms" ] "cpxs" + "( â¦\83?,?â¦\84 ⊢ ? ⬈*[?] ? )" "cpxs_teqx" + "cpxs_teqo" + "cpxs_teqo_vector" + "cpxs_drops" + "cpxs_fqus" + "cpxs_lsubr" + "cpxs_reqx" + "cpxs_feqx" + "cpxs_aaa" + "cpxs_lpx" + "cpxs_cnx" + "cpxs_cpxs" * ]
+ [ [ "strongly normalizing for lenvs on referred entries" ] "rsx" + "( ? â\8a¢ â¬\88*[?,?] ð\9d\90\92â\9dª?â\9d« )" "rsx_length" + "rsx_drops" + "rsx_fqup" + "rsx_cpxs" + "rsx_csx" + "rsx_rsx" * ]
+ [ [ "strongly normalizing for term vectors" ] "csx_vector" + "( â\9dª?,?â\9d« â\8a¢ â¬\88*[?] ð\9d\90\92â\9dª?â\9d« )" "csx_cnx_vector" + "csx_csx_vector" * ]
+ [ [ "strongly normalizing for terms" ] "csx" + "( â\9dª?,?â\9d« â\8a¢ â¬\88*[?] ð\9d\90\92â\9dª?â\9d« )" "csx_simple" + "csx_simple_teqo" + "csx_drops" + "csx_fqus" + "csx_lsubr" + "csx_reqx" + "csx_feqx" + "csx_aaa" + "csx_gcp" + "csx_gcr" + "csx_lpx" + "csx_cnx" + "csx_fpbq" + "csx_cpxs" + "csx_lpxs" + "csx_csx" * ]
+ [ [ "for lenvs on all entries" ] "lpxs" + "( â\9dª?,?â\9d« ⊢ ⬈*[?] ? )" "lpxs_length" + "lpxs_drops" + "lpxs_reqx" + "lpxs_feqx" + "lpxs_aaa" + "lpxs_lpx" + "lpxs_cpxs" + "lpxs_lpxs" * ]
+ [ [ "for binders" ] "cpxs_ext" + "( â\9dª?,?â\9d« ⊢ ? ⬈*[?] ? )" * ]
+ [ [ "for terms" ] "cpxs" + "( â\9dª?,?â\9d« ⊢ ? ⬈*[?] ? )" "cpxs_teqx" + "cpxs_teqo" + "cpxs_teqo_vector" + "cpxs_drops" + "cpxs_fqus" + "cpxs_lsubr" + "cpxs_reqx" + "cpxs_feqx" + "cpxs_aaa" + "cpxs_lpx" + "cpxs_cnx" + "cpxs_cpxs" * ]
}
]
}
class "cyan"
[ { "rt-transition" * } {
[ { "context-sensitive parallel t-transition" * } {
- [ [ "for terms" ] "cpt" + "( â¦\83?,?â¦\84 ⊢ ? ⬆[?,?] ? )" "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 ( â¦\83?,?â¦\84 â\8a¢ â\9e¡[?] ð\9d\90\8dâ¦\83?â¦\84 )" "cnr_simple" + "cnr_teqx" + "cnr_drops" * ]
- [ [ "for lenvs on all entries" ] "lpr" + "( â¦\83?,?â¦\84 ⊢ ➡[?] ? )" "lpr_length" + "lpr_drops" + "lpr_fquq" + "lpr_aaa" + "lpr_lpx" + "lpr_lpr" * ]
- [ [ "for binders" ] "cpr_ext" + "( â¦\83?,?â¦\84 ⊢ ? ➡[?] ? )" * ]
- [ [ "for terms" ] "cpr" + "( â¦\83?,?â¦\84 ⊢ ? ➡[?] ? )" "cpr_drops" + "cpr_drops_basic" + "cpr_teqx" + "cpr_cpr" * ]
+ [ [ "normal form for terms" ] "cnr ( â\9dª?,?â\9d« â\8a¢ â\9e¡[?] ð\9d\90\8dâ\9dª?â\9d« )" "cnr_simple" + "cnr_teqx" + "cnr_drops" * ]
+ [ [ "for lenvs on all entries" ] "lpr" + "( â\9dª?,?â\9d« ⊢ ➡[?] ? )" "lpr_length" + "lpr_drops" + "lpr_fquq" + "lpr_aaa" + "lpr_lpx" + "lpr_lpr" * ]
+ [ [ "for binders" ] "cpr_ext" + "( â\9dª?,?â\9d« ⊢ ? ➡[?] ? )" * ]
+ [ [ "for terms" ] "cpr" + "( â\9dª?,?â\9d« ⊢ ? ➡[?] ? )" "cpr_drops" + "cpr_drops_basic" + "cpr_teqx" + "cpr_cpr" * ]
}
]
[ { "t-bound context-sensitive parallel rt-transition" * } {
- [ [ "for terms" ] "cpm" + "( â¦\83?,?â¦\84 ⊢ ? ➡[?,?] ? )" "cpm_simple" + "cpm_teqx" + "cpm_drops" + "cpm_lsubr" + "cpm_fsle" + "cpm_aaa" + "cpm_cpx" * ]
+ [ [ "for terms" ] "cpm" + "( â\9dª?,?â\9d« ⊢ ? ➡[?,?] ? )" "cpm_simple" + "cpm_teqx" + "cpm_drops" + "cpm_lsubr" + "cpm_fsle" + "cpm_aaa" + "cpm_cpx" * ]
}
]
[ { "unbound parallel rst-transition" * } {
- [ [ "for closures" ] "fpbq" + "( â¦\83?,?,?â¦\84 â\89½[?] â¦\83?,?,?â¦\84 )" "fpbq_aaa" + "fpbq_fpb" * ]
- [ [ "proper for closures" ] "fpb" + "( â¦\83?,?,?â¦\84 â\89»[?] â¦\83?,?,?â¦\84 )" "fpb_reqx" + "fpb_feqx" * ]
+ [ [ "for closures" ] "fpbq" + "( â\9dª?,?,?â\9d« â\89½[?] â\9dª?,?,?â\9d« )" "fpbq_aaa" + "fpbq_fpb" * ]
+ [ [ "proper for closures" ] "fpb" + "( â\9dª?,?,?â\9d« â\89»[?] â\9dª?,?,?â\9d« )" "fpb_reqx" + "fpb_feqx" * ]
}
]
[ { "unbound context-sensitive parallel rt-transition" * } {
- [ [ "normal form for terms" ] "cnx" + "( â¦\83?,?â¦\84 â\8a¢ â¬\88[?] ð\9d\90\8dâ¦\83?â¦\84 )" "cnx_simple" + "cnx_drops" + "cnx_basic" + "cnx_cnx" * ]
- [ [ "for lenvs on referred entries" ] "rpx" + "( â¦\83?,?â¦\84 ⊢ ⬈[?,?] ? )" "rpx_length" + "rpx_drops" + "rpx_fqup" + "rpx_fsle" + "rpx_reqx" + "rpx_lpx" + "rpx_rpx" * ]
- [ [ "for lenvs on all entries" ] "lpx" + "( â¦\83?,?â¦\84 ⊢ ⬈[?] ? )" "lpx_length" + "lpx_drops" + "lpx_fquq" + "lpx_fsle" + "lpx_reqx" + "lpx_aaa" * ]
- [ [ "for binders" ] "cpx_ext" + "( â¦\83?,?â¦\84 ⊢ ? ⬈[?] ? )" * ]
- [ [ "for terms" ] "cpx" + "( â¦\83?,?â¦\84 ⊢ ? ⬈[?] ? )" "cpx_simple" + "cpx_drops" + "cpx_drops_basic" + "cpx_fqus" + "cpx_lsubr" + "cpx_req" + "cpx_reqx" + "cpx_feqx" * ]
+ [ [ "normal form for terms" ] "cnx" + "( â\9dª?,?â\9d« â\8a¢ â¬\88[?] ð\9d\90\8dâ\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_reqx" + "rpx_lpx" + "rpx_rpx" * ]
+ [ [ "for lenvs on all entries" ] "lpx" + "( â\9dª?,?â\9d« ⊢ ⬈[?] ? )" "lpx_length" + "lpx_drops" + "lpx_fquq" + "lpx_fsle" + "lpx_reqx" + "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_reqx" + "cpx_feqx" * ]
}
]
[ { "bound context-sensitive parallel rt-transition" * } {
- [ [ "for terms" ] "cpg" + "( â¦\83?,?â¦\84 ⊢ ? ⬈[?,?] ? )" "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 ( â¦\83?,?â¦\84 ⊢ ? ¡[?,?,?] )" * ]
+ [ [ "" ] "shnv ( â\9dª?,?â\9d« ⊢ ? ¡[?,?,?] )" * ]
[ { "decomposed rt-equivalence" * } {
"scpes_cpcs" + "scpes_scpes"
}
]
- [ [ "for lenvs on referred entries" ] "rpxs" + "( â¦\83?,?â¦\84 ⊢ ⬈*[?,?] ? )" "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" + "( â¦\83?,?â¦\84 ⊢ ➡[?,?] ? )" "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 ( â¦\83?,?â¦\84 â\8a¢ â\9e¡*[?,?] ð\9d\90\8dâ¦\83?â¦\84 )" * ]
+ [ [ "" ] "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 ( â¦\83?,?â¦\84 â\8a¢ â\9e¡[?,?] ð\9d\90\88â¦\83?â¦\84 )" "cix_lift" * ]
+ [ [ "" ] "cix ( â\9dª?,?â\9d« â\8a¢ â\9e¡[?,?] ð\9d\90\88â\9dª?â\9d« )" "cix_lift" * ]
}
]
[ { "reducible forms for context-sensitive rt-reduction" * } {
- [ [ "" ] "crx ( â¦\83?,?â¦\84 â\8a¢ â\9e¡[?,?] ð\9d\90\91â¦\83?â¦\84 )" "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 ( â¦\83?,?â¦\84 â\8a¢ â\9e¡ ð\9d\90\88â¦\83?â¦\84 )" "cir_lift" * ]
+ [ [ "" ] "cir ( â\9dª?,?â\9d« â\8a¢ â\9e¡ ð\9d\90\88â\9dª?â\9d« )" "cir_lift" * ]
}
]
[ { "reducible forms for context-sensitive reduction" * } {
- [ [ "" ] "crr ( â¦\83?,?â¦\84 â\8a¢ â\9e¡ ð\9d\90\91â¦\83?â¦\84 )" "crr_lift" * ]
+ [ [ "" ] "crr ( â\9dª?,?â\9d« â\8a¢ â\9e¡ ð\9d\90\91â\9dª?â\9d« )" "crr_lift" * ]
}
]
[ { "unfold" * } {
- [ [ "" ] "unfold ( â¦\83?,?â¦\84 ⊢ ? ⧫* ? )" * ]
+ [ [ "" ] "unfold ( â\9dª?,?â\9d« ⊢ ? ⧫* ? )" * ]
}
]
[ { "iterated static type assignment" * } {
- [ [ "" ] "lstas ( â¦\83?,?â¦\84 ⊢ ? •*[?,?] ? )" "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 ( â¦\83?,?â¦\84 ⊢ ? ▪[?,?] ? )" "da_lift" + "da_aaa" + "da_da" * ]
+ [ [ "" ] "da ( â\9dª?,?â\9d« ⊢ ? ▪[?,?] ? )" "da_lift" + "da_aaa" + "da_da" * ]
}
]
[ { "context-sensitive multiple rt-substitution" * } {
- [ [ "" ] "cpys ( â¦\83?,?â¦\84 â\8a¢ ? â\96¶*[?,?] ? )" "cpys_alt ( â¦\83?,?â¦\84 ⊢ ? ▶▶*[?,?] ? )" "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 ( â¦\83?,?â¦\84 ⊢ ? ▶[?,?] ? )" "cpy_lift" + "cpy_nlift" + "cpy_cpy" * ]
+ [ [ "" ] "cpy ( â\9dª?,?â\9d« ⊢ ? ▶[?,?] ? )" "cpy_lift" + "cpy_nlift" + "cpy_cpy" * ]
}
]
[ { "local env. ref. for rt-substitution" * } {
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( f @ ❴ break term 46 a ❵ )"
+notation "hvbox( f @❨ break term 46 a ❩ )"
non associative with precedence 60
for @{ 'Apply $f $a }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( ð\9d\90\81â\9d´ term 46 l, break term 46 h â\9dµ )"
+notation "hvbox( ð\9d\90\81â\9d¨ term 46 l, break term 46 h â\9d© )"
non associative with precedence 90
for @{ 'Basic $l $h }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox(f2 ~ \circ break f1)" (**)
+notation "hvbox( f2 ~∘ break f1 )"
right associative with precedence 60
for @{ 'CoCompose $f2 $f1 }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( ⫱ * [ term 46 n ] break term 46 T )"
+notation "hvbox( ⫱ *[ term 46 n ] break term 46 T )"
non associative with precedence 46
for @{ 'DropPreds $n $T }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( { term 46 hd1, break term 46 hd2 }; break term 46 tl )"
+notation "hvbox( ❨ term 46 hd1, break term 46 hd2 ❩; break term 46 tl )"
non associative with precedence 47
for @{ 'Semicolon $hd1 $hd2 $tl }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( ð\9d\90\94 â\9d´ break term 46 a â\9dµ )"
+notation "hvbox( ð\9d\90\94 â\9d¨ break term 46 a â\9d© )"
non associative with precedence 90
for @{ 'Uniform $a }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( ↑ * [ term 46 n ] break term 70 T )"
+notation "hvbox( ↑*[ term 46 n ] break term 70 T )"
non associative with precedence 70
for @{ 'UpArrowStar $n $T }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( ⫯ * [ term 46 n ] break term 46 T )"
+notation "hvbox( ⫯*[ term 46 n ] break term 46 T )"
non associative with precedence 46
for @{ 'UpSpoonStar $n $T }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( 𝛀 ⦃ term 46 f ⦄ )"
+notation "hvbox( 𝛀❪ term 46 f ❫ )"
non associative with precedence 45
for @{ 'IsDivergent $f }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( 𝐅 ⦃ term 46 f ⦄ )"
+notation "hvbox( 𝐅❪ term 46 f ❫ )"
non associative with precedence 45
for @{ 'IsFinite $f }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( 𝐈 ⦃ term 46 f ⦄ )"
+notation "hvbox( 𝐈❪ term 46 f ❫ )"
non associative with precedence 45
for @{ 'IsIdentity $f }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( 𝐑𝐓 ⦃ term 46 n, break term 46 c ⦄ )"
+notation "hvbox( 𝐑𝐓❪ term 46 n, break term 46 c ❫ )"
non associative with precedence 45
for @{ 'IsRedType $n $c }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( 𝐓 ⦃ term 46 f ⦄ )"
+notation "hvbox( 𝐓❪ term 46 f ❫ )"
non associative with precedence 45
for @{ 'IsTotal $f }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( ð\9d\90\93â¦\83 term 46 n, break term 46 c â¦\84 )"
+notation "hvbox( ð\9d\90\93â\9dª term 46 n, break term 46 c â\9d« )"
non associative with precedence 45
for @{ 'IsType $n $c }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( 𝐔 ⦃ term 46 f ⦄ )"
+notation "hvbox( 𝐔❪ term 46 f ❫ )"
non associative with precedence 45
for @{ 'IsUniform $f }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( @ ⦃ term 46 T1 , break term 46 f ⦄ ≘ break term 46 T2 )"
+notation "hvbox( @❪ term 46 T1 , break term 46 f ❫ ≘ break term 46 T2 )"
non associative with precedence 45
for @{ 'RAt $T1 $f $T2 }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( f1 ~ ⊚ break term 46 f2 ≘ break term 46 f )"
+notation "hvbox( f1 ~⊚ break term 46 f2 ≘ break term 46 f )"
non associative with precedence 45
for @{ 'RCoAfter $f1 $f2 $f }.
(* GENERAL NOTATION USED BY THE FORMAL SYSTEM λδ ****************************)
-notation "hvbox( 𝐂 ⦃ term 46 f ⦄ ≘ break term 46 n )"
+notation "hvbox( 𝐂❪ term 46 f ❫ ≘ break term 46 n )"
non associative with precedence 45
for @{ 'RCoLength $f $n }.
inductive at: mr2 → relation nat ≝
| at_nil: ∀i. at (◊) i i
| at_lt : ∀cs,l,m,i1,i2. i1 < l →
- at cs i1 i2 → at ({l, m};cs) i1 i2
+ at cs i1 i2 → at (❨l, m❩;cs) i1 i2
| at_ge : ∀cs,l,m,i1,i2. l ≤ i1 →
- at cs (i1 + m) i2 → at ({l, m};cs) i1 i2
+ at cs (i1 + m) i2 → at (❨l, m❩;cs) i1 i2
.
interpretation "application (multiple relocation with pairs)"
(* Basic inversion lemmas ***************************************************)
-fact at_inv_nil_aux: â\88\80cs,i1,i2. @â¦\83i1, csâ¦\84 ≘ i2 → cs = ◊ → i1 = i2.
+fact at_inv_nil_aux: â\88\80cs,i1,i2. @â\9dªi1, csâ\9d« ≘ i2 → cs = ◊ → i1 = i2.
#cs #i1 #i2 * -cs -i1 -i2
[ //
| #cs #l #m #i1 #i2 #_ #_ #H destruct
]
qed-.
-lemma at_inv_nil: â\88\80i1,i2. @â¦\83i1, â\97\8aâ¦\84 ≘ i2 → i1 = i2.
+lemma at_inv_nil: â\88\80i1,i2. @â\9dªi1, â\97\8aâ\9d« ≘ i2 → i1 = i2.
/2 width=3 by at_inv_nil_aux/ qed-.
-fact at_inv_cons_aux: â\88\80cs,i1,i2. @â¦\83i1, csâ¦\84 ≘ i2 →
- ∀l,m,cs0. cs = {l, m};cs0 →
- i1 < l â\88§ @â¦\83i1, cs0â¦\84 ≘ i2 ∨
- l â\89¤ i1 â\88§ @â¦\83i1 + m, cs0â¦\84 ≘ i2.
+fact at_inv_cons_aux: â\88\80cs,i1,i2. @â\9dªi1, csâ\9d« ≘ i2 →
+ ∀l,m,cs0. cs = ❨l, m❩;cs0 →
+ i1 < l â\88§ @â\9dªi1, cs0â\9d« ≘ i2 ∨
+ l â\89¤ i1 â\88§ @â\9dªi1 + m, cs0â\9d« ≘ i2.
#cs #i1 #i2 * -cs -i1 -i2
[ #i #l #m #cs #H destruct
| #cs1 #l1 #m1 #i1 #i2 #Hil1 #Hi12 #l2 #m2 #cs2 #H destruct /3 width=1 by or_introl, conj/
]
qed-.
-lemma at_inv_cons: â\88\80cs,l,m,i1,i2. @â¦\83i1, {l, m};csâ¦\84 ≘ i2 →
- i1 < l â\88§ @â¦\83i1, csâ¦\84 ≘ i2 ∨
- l â\89¤ i1 â\88§ @â¦\83i1 + m, csâ¦\84 ≘ i2.
+lemma at_inv_cons: â\88\80cs,l,m,i1,i2. @â\9dªi1, â\9d¨l, mâ\9d©;csâ\9d« ≘ i2 →
+ i1 < l â\88§ @â\9dªi1, csâ\9d« ≘ i2 ∨
+ l â\89¤ i1 â\88§ @â\9dªi1 + m, csâ\9d« ≘ i2.
/2 width=3 by at_inv_cons_aux/ qed-.
-lemma at_inv_cons_lt: â\88\80cs,l,m,i1,i2. @â¦\83i1, {l, m};csâ¦\84 ≘ i2 →
- i1 < l â\86\92 @â¦\83i1, csâ¦\84 ≘ i2.
+lemma at_inv_cons_lt: â\88\80cs,l,m,i1,i2. @â\9dªi1, â\9d¨l, mâ\9d©;csâ\9d« ≘ i2 →
+ i1 < l â\86\92 @â\9dªi1, csâ\9d« ≘ i2.
#cs #l #m #i1 #m2 #H
elim (at_inv_cons … H) -H * // #Hli1 #_ #Hi1l
elim (lt_le_false … Hi1l Hli1)
qed-.
-lemma at_inv_cons_ge: â\88\80cs,l,m,i1,i2. @â¦\83i1, {l, m};csâ¦\84 ≘ i2 →
- l â\89¤ i1 â\86\92 @â¦\83i1 + m, csâ¦\84 ≘ i2.
+lemma at_inv_cons_ge: â\88\80cs,l,m,i1,i2. @â\9dªi1, â\9d¨l, mâ\9d©;csâ\9d« ≘ i2 →
+ l â\89¤ i1 â\86\92 @â\9dªi1 + m, csâ\9d« ≘ i2.
#cs #l #m #i1 #m2 #H
elim (at_inv_cons … H) -H * // #Hi1l #_ #Hli1
elim (lt_le_false … Hi1l Hli1)
(* Main properties **********************************************************)
-theorem at_mono: â\88\80cs,i,i1. @â¦\83i, csâ¦\84 â\89\98 i1 â\86\92 â\88\80i2. @â¦\83i, csâ¦\84 ≘ i2 → i1 = i2.
+theorem at_mono: â\88\80cs,i,i1. @â\9dªi, csâ\9d« â\89\98 i1 â\86\92 â\88\80i2. @â\9dªi, csâ\9d« ≘ i2 → i1 = i2.
#cs #i #i1 #H elim H -cs -i -i1
[ #i #x #H <(at_inv_nil … H) -x //
| #cs #l #m #i #i1 #Hil #_ #IHi1 #x #H
inductive minuss: nat → relation mr2 ≝
| minuss_nil: ∀i. minuss i (◊) (◊)
| minuss_lt : ∀cs1,cs2,l,m,i. i < l → minuss i cs1 cs2 →
- minuss i ({l, m};cs1) ({l - i, m};cs2)
+ minuss i (❨l, m❩;cs1) (❨l - i, m❩;cs2)
| minuss_ge : ∀cs1,cs2,l,m,i. l ≤ i → minuss (m + i) cs1 cs2 →
- minuss i ({l, m};cs1) cs2
+ minuss i (❨l, m❩;cs1) cs2
.
interpretation "minus (multiple relocation with pairs)"
/2 width=4 by minuss_inv_nil1_aux/ qed-.
fact minuss_inv_cons1_aux: ∀cs1,cs2,i. cs1 ▭ i ≘ cs2 →
- ∀l,m,cs. cs1 = {l, m};cs →
+ ∀l,m,cs. cs1 = ❨l, m❩;cs →
l ≤ i ∧ cs ▭ m + i ≘ cs2 ∨
∃∃cs0. i < l & cs ▭ i ≘ cs0 &
- cs2 = {l - i, m};cs0.
+ cs2 = ❨l - i, m❩;cs0.
#cs1 #cs2 #i * -cs1 -cs2 -i
[ #i #l #m #cs #H destruct
| #cs1 #cs #l1 #m1 #i1 #Hil1 #Hcs #l2 #m2 #cs2 #H destruct /3 width=3 by ex3_intro, or_intror/
]
qed-.
-lemma minuss_inv_cons1: ∀cs1,cs2,l,m,i. {l, m};cs1 ▭ i ≘ cs2 →
+lemma minuss_inv_cons1: ∀cs1,cs2,l,m,i. ❨l, m❩;cs1 ▭ i ≘ cs2 →
l ≤ i ∧ cs1 ▭ m + i ≘ cs2 ∨
∃∃cs. i < l & cs1 ▭ i ≘ cs &
- cs2 = {l - i, m};cs.
+ cs2 = ❨l - i, m❩;cs.
/2 width=3 by minuss_inv_cons1_aux/ qed-.
-lemma minuss_inv_cons1_ge: ∀cs1,cs2,l,m,i. {l, m};cs1 ▭ i ≘ cs2 →
+lemma minuss_inv_cons1_ge: ∀cs1,cs2,l,m,i. ❨l, m❩;cs1 ▭ i ≘ cs2 →
l ≤ i → cs1 ▭ m + i ≘ cs2.
#cs1 #cs2 #l #m #i #H
elim (minuss_inv_cons1 … H) -H * // #cs #Hil #_ #_ #Hli
elim (lt_le_false … Hil Hli)
qed-.
-lemma minuss_inv_cons1_lt: ∀cs1,cs2,l,m,i. {l, m};cs1 ▭ i ≘ cs2 →
+lemma minuss_inv_cons1_lt: ∀cs1,cs2,l,m,i. ❨l, m❩;cs1 ▭ i ≘ cs2 →
i < l →
- ∃∃cs. cs1 ▭ i ≘ cs & cs2 = {l - i, m};cs.
+ ∃∃cs. cs1 ▭ i ≘ cs & cs2 = ❨l - i, m❩;cs.
#cs1 #cs2 #l #m #i #H elim (minuss_inv_cons1 … H) -H * /2 width=3 by ex2_intro/
#Hli #_ #Hil elim (lt_le_false … Hil Hli)
qed-.
rec definition pluss (cs:mr2) (i:nat) on cs ≝ match cs with
[ nil2 ⇒ ◊
-| cons2 l m cs ⇒ {l + i,m};pluss cs i
+| cons2 l m cs ⇒ ❨l + i,m❩;pluss cs i
].
interpretation "plus (multiple relocation with pairs)"
(* Basic properties *********************************************************)
-lemma pluss_SO2: ∀l,m,cs. ({l,m};cs) + 1 = {↑l,m};cs + 1.
+lemma pluss_SO2: ∀l,m,cs. (❨l,m❩;cs) + 1 = ❨↑l,m❩;cs + 1.
normalize // qed.
(* Basic inversion lemmas ***************************************************)
#l #m #cs #H destruct
qed.
-lemma pluss_inv_cons2: ∀i,l,m,cs2,cs. cs + i = {l,m};cs2 →
- ∃∃cs1. cs1 + i = cs2 & cs = {l - i,m};cs1.
+lemma pluss_inv_cons2: ∀i,l,m,cs2,cs. cs + i = ❨l,m❩;cs2 →
+ ∃∃cs1. cs1 + i = cs2 & cs = ❨l - i,m❩;cs1.
#i #l #m #cs2 *
[ normalize #H destruct
| #l1 #m1 #cs1 whd in ⊢ (??%?→?); #H destruct
(* RELOCATION N-STREAM ******************************************************)
corec definition compose: rtmap → rtmap → rtmap.
-#f2 * #n1 #f1 @(seq â\80¦ (f2@â\9d´n1â\9dµ)) @(compose ? f1) -compose -f1
+#f2 * #n1 #f1 @(seq â\80¦ (f2@â\9d¨n1â\9d©)) @(compose ? f1) -compose -f1
@(⫰*[↑n1] f2)
defined.
(* Basic properies on compose ***********************************************)
-lemma compose_rew: â\88\80f2,f1,n1. f2@â\9d´n1â\9dµ⨮(⫰*[↑n1]f2)∘f1 = f2∘(n1⨮f1).
+lemma compose_rew: â\88\80f2,f1,n1. f2@â\9d¨n1â\9d©⨮(⫰*[↑n1]f2)∘f1 = f2∘(n1⨮f1).
#f2 #f1 #n1 <(stream_rew … (f2∘(n1⨮f1))) normalize //
qed.
(* Basic inversion lemmas on compose ****************************************)
lemma compose_inv_rew: ∀f2,f1,f,n1,n. f2∘(n1⨮f1) = n⨮f →
- f2@â\9d´n1â\9dµ = n ∧ (⫰*[↑n1]f2)∘f1 = f.
+ f2@â\9d¨n1â\9d© = n ∧ (⫰*[↑n1]f2)∘f1 = f.
#f2 #f1 #f #n1 #n <(stream_rew … (f2∘(n1⨮f1))) normalize
#H destruct /2 width=1 by conj/
qed-.
qed-.
lemma compose_inv_S2: ∀f2,f1,f,n2,n1,n. (n2⨮f2)∘(↑n1⨮f1) = n⨮f →
- â\86\91(n2+f2@â\9d´n1â\9dµ) = n â\88§ f2â\88\98(n1⨮f1) = f2@â\9d´n1â\9dµ⨮f.
+ â\86\91(n2+f2@â\9d¨n1â\9d©) = n â\88§ f2â\88\98(n1⨮f1) = f2@â\9d¨n1â\9d©⨮f.
#f2 #f1 #f #n2 #n1 #n <compose_rew
#H destruct <tls_S1 /2 width=1 by conj/
qed-.
lemma compose_inv_S1: ∀f2,f1,f,n1,n. (↑f2)∘(n1⨮f1) = n⨮f →
- â\86\91(f2@â\9d´n1â\9dµ) = n â\88§ f2â\88\98(n1⨮f1) = f2@â\9d´n1â\9dµ⨮f.
+ â\86\91(f2@â\9d¨n1â\9d©) = n â\88§ f2â\88\98(n1⨮f1) = f2@â\9d¨n1â\9d©⨮f.
#f2 #f1 #f #n1 #n <compose_rew
#H destruct <tls_S1 /2 width=1 by conj/
qed-.
#f2 #f1 #f #n1 #n #Hf #n2 elim n2 -n2 /2 width=7 by after_next, after_push/
qed.
-lemma after_apply: â\88\80n1,f2,f1,f. (â«°*[â\86\91n1] f2) â\8a\9a f1 â\89\98 f â\86\92 f2 â\8a\9a n1⨮f1 â\89\98 f2@â\9d´n1â\9dµ⨮f.
+lemma after_apply: â\88\80n1,f2,f1,f. (â«°*[â\86\91n1] f2) â\8a\9a f1 â\89\98 f â\86\92 f2 â\8a\9a n1⨮f1 â\89\98 f2@â\9d¨n1â\9d©⨮f.
#n1 elim n1 -n1
[ * /2 width=1 by after_O2/
| #n1 #IH * /3 width=1 by after_S2/
(* Specific forward lemmas on after *****************************************)
-lemma after_fwd_hd: â\88\80f2,f1,f,n1,n. f2 â\8a\9a n1⨮f1 â\89\98 n⨮f â\86\92 f2@â\9d´n1â\9dµ = n.
+lemma after_fwd_hd: â\88\80f2,f1,f,n1,n. f2 â\8a\9a n1⨮f1 â\89\98 n⨮f â\86\92 f2@â\9d¨n1â\9d© = n.
#f2 #f1 #f #n1 #n #H lapply (after_fwd_at ? n1 0 … H) -H [1,2,3: // ]
/3 width=2 by at_inv_O1, sym_eq/
qed-.
qed-.
lemma after_inv_apply: ∀f2,f1,f,n2,n1,n. n2⨮f2 ⊚ n1⨮f1 ≘ n⨮f →
- (n2⨮f2)@â\9d´n1â\9dµ = n ∧ (⫰*[n1]f2) ⊚ f1 ≘ f.
+ (n2⨮f2)@â\9d¨n1â\9d© = n ∧ (⫰*[n1]f2) ⊚ f1 ≘ f.
/3 width=3 by after_fwd_tls, after_fwd_hd, conj/ qed-.
(* Properties on apply ******************************************************)
-lemma compose_apply (f2) (f1) (i): f2@â\9d´f1@â\9d´iâ\9dµâ\9dµ = (f2â\88\98f1)@â\9d´iâ\9dµ.
+lemma compose_apply (f2) (f1) (i): f2@â\9d¨f1@â\9d¨iâ\9d©â\9d© = (f2â\88\98f1)@â\9d¨iâ\9d©.
/4 width=6 by after_fwd_at, at_inv_total, sym_eq/ qed.
(* Specific properties on basic relocation **********************************)
-lemma apply_basic_lt: â\88\80m,n,i. i < m â\86\92 ð\9d\90\81â\9d´m,nâ\9dµ@â\9d´iâ\9dµ = i.
+lemma apply_basic_lt: â\88\80m,n,i. i < m â\86\92 ð\9d\90\81â\9d¨m,nâ\9d©@â\9d¨iâ\9d© = i.
/3 width=1 by at_inv_total, at_basic_lt/ qed-.
-lemma apply_basic_ge: â\88\80m,n,i. m â\89¤ i â\86\92 ð\9d\90\81â\9d´m,nâ\9dµ@â\9d´iâ\9dµ = n+i.
+lemma apply_basic_ge: â\88\80m,n,i. m â\89¤ i â\86\92 ð\9d\90\81â\9d¨m,nâ\9d©@â\9d¨iâ\9d© = n+i.
/3 width=1 by at_inv_total, at_basic_ge/ qed-.
(* Specific main properties on basic relocation *****************************)
theorem basic_swap: ∀d1,d2. d2 ≤ d1 →
- â\88\80h1,h2. ð\9d\90\81â\9d´d2,h2â\9dµâ\88\98ð\9d\90\81â\9d´d1,h1â\9dµ â\89¡ ð\9d\90\81â\9d´h2+d1,h1â\9dµâ\88\98ð\9d\90\81â\9d´d2,h2â\9dµ.
+ â\88\80h1,h2. ð\9d\90\81â\9d¨d2,h2â\9d©â\88\98ð\9d\90\81â\9d¨d1,h1â\9d© â\89¡ ð\9d\90\81â\9d¨h2+d1,h1â\9d©â\88\98ð\9d\90\81â\9d¨d2,h2â\9d©.
#d1 #d2 #Hd21 #h1 #h2
@nstream_inv_eq
@nstream_eq_inv_ext #i
(* Specific inversion lemmas ************************************************)
-lemma isid_inv_seq: â\88\80f,n. ð\9d\90\88â¦\83n⨮fâ¦\84 â\86\92 ð\9d\90\88â¦\83fâ¦\84 ∧ 0 = n.
+lemma isid_inv_seq: â\88\80f,n. ð\9d\90\88â\9dªn⨮fâ\9d« â\86\92 ð\9d\90\88â\9dªfâ\9d« ∧ 0 = n.
#f #n #H elim (isid_inv_gen … H) -H
#g #Hg #H elim (push_inv_seq_dx … H) -H /2 width=1 by conj/
qed-.
(* Specific properties on at ************************************************)
-lemma at_O1: â\88\80i2,f. @â¦\830, i2⨮fâ¦\84 ≘ i2.
+lemma at_O1: â\88\80i2,f. @â\9dª0, i2⨮fâ\9d« ≘ i2.
#i2 elim i2 -i2 /2 width=5 by at_refl, at_next/
qed.
-lemma at_S1: â\88\80n,f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 â\86\92 @â¦\83â\86\91i1, n⨮fâ¦\84 ≘ ↑(n+i2).
+lemma at_S1: â\88\80n,f,i1,i2. @â\9dªi1, fâ\9d« â\89\98 i2 â\86\92 @â\9dªâ\86\91i1, n⨮fâ\9d« ≘ ↑(n+i2).
#n elim n -n /3 width=7 by at_push, at_next/
qed.
-lemma at_total: â\88\80i1,f. @â¦\83i1, fâ¦\84 â\89\98 f@â\9d´i1â\9dµ.
+lemma at_total: â\88\80i1,f. @â\9dªi1, fâ\9d« â\89\98 f@â\9d¨i1â\9d©.
#i1 elim i1 -i1
[ * // | #i #IH * /3 width=1 by at_S1/ ]
qed.
-lemma at_istot: â\88\80f. ð\9d\90\93â¦\83fâ¦\84.
+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,n,m. @â¦\83i1, n⨮fâ¦\84 â\89\98 i â\86\92 @â¦\83i1, (m+n)⨮fâ¦\84 ≘ m+i.
+lemma at_plus2: â\88\80f,i1,i,n,m. @â\9dªi1, n⨮fâ\9d« â\89\98 i â\86\92 @â\9dªi1, (m+n)⨮fâ\9d« ≘ m+i.
#f #i1 #i #n #m #H elim m -m //
#m <plus_S1 /2 width=5 by at_next/ (**) (* full auto fails *)
qed.
(* Specific inversion lemmas on at ******************************************)
-lemma at_inv_O1: â\88\80f,n,i2. @â¦\830, n⨮fâ¦\84 ≘ i2 → n = i2.
+lemma at_inv_O1: â\88\80f,n,i2. @â\9dª0, n⨮fâ\9d« ≘ i2 → n = i2.
#f #n elim n -n /2 width=6 by at_inv_ppx/
#n #IH #i2 #H elim (at_inv_xnx … H) -H [2,3: // ]
#j2 #Hj * -i2 /3 width=1 by eq_f/
qed-.
-lemma at_inv_S1: â\88\80f,n,j1,i2. @â¦\83â\86\91j1, n⨮fâ¦\84 ≘ i2 →
- â\88\83â\88\83j2. @â¦\83j1, fâ¦\84 ≘ j2 & ↑(n+j2) = i2.
+lemma at_inv_S1: â\88\80f,n,j1,i2. @â\9dªâ\86\91j1, n⨮fâ\9d« ≘ i2 →
+ â\88\83â\88\83j2. @â\9dªj1, fâ\9d« ≘ j2 & ↑(n+j2) = i2.
#f #n elim n -n /2 width=5 by at_inv_npx/
#n #IH #j1 #i2 #H elim (at_inv_xnx … H) -H [2,3: // ]
#j2 #Hj * -i2 elim (IH … Hj) -IH -Hj
#i2 #Hi * -j2 /2 width=3 by ex2_intro/
qed-.
-lemma at_inv_total: â\88\80f,i1,i2. @â¦\83i1, fâ¦\84 â\89\98 i2 â\86\92 f@â\9d´i1â\9dµ = i2.
+lemma at_inv_total: â\88\80f,i1,i2. @â\9dªi1, fâ\9d« â\89\98 i2 â\86\92 f@â\9d¨i1â\9d© = i2.
/2 width=6 by at_mono/ qed-.
(* Spercific forward lemmas on at *******************************************)
-lemma at_increasing_plus: â\88\80f,n,i1,i2. @â¦\83i1, n⨮fâ¦\84 ≘ i2 → i1 + n ≤ i2.
+lemma at_increasing_plus: â\88\80f,n,i1,i2. @â\9dªi1, n⨮fâ\9d« ≘ i2 → i1 + n ≤ i2.
#f #n *
[ #i2 #H <(at_inv_O1 … H) -i2 //
| #i1 #i2 #H elim (at_inv_S1 … H) -H
]
qed-.
-lemma at_fwd_id: â\88\80f,n,i. @â¦\83i, n⨮fâ¦\84 ≘ i → 0 = n.
+lemma at_fwd_id: â\88\80f,n,i. @â\9dªi, n⨮fâ\9d« ≘ i → 0 = n.
#f #n #i #H elim (at_fwd_id_ex … H) -H
#g #H elim (push_inv_seq_dx … H) -H //
qed-.
(* Basic properties *********************************************************)
-lemma apply_O1: â\88\80n,f. (n⨮f)@â\9d´0â\9dµ = n.
+lemma apply_O1: â\88\80n,f. (n⨮f)@â\9d¨0â\9d© = n.
// qed.
-lemma apply_S1: â\88\80n,f,i. (n⨮f)@â\9d´â\86\91iâ\9dµ = â\86\91(n+f@â\9d´iâ\9dµ).
+lemma apply_S1: â\88\80n,f,i. (n⨮f)@â\9d¨â\86\91iâ\9d© = â\86\91(n+f@â\9d¨iâ\9d©).
// qed.
-lemma apply_eq_repl (i): eq_repl â\80¦ (λf1,f2. f1@â\9d´iâ\9dµ = f2@â\9d´iâ\9dµ).
+lemma apply_eq_repl (i): eq_repl â\80¦ (λf1,f2. f1@â\9d¨iâ\9d© = f2@â\9d¨iâ\9d©).
#i elim i -i [2: #i #IH ] * #n1 #f1 * #n2 #f2 #H
elim (eq_inv_seq_aux … H) -H normalize //
#Hn #Hf /4 width=1 by eq_f2, eq_f/
qed.
-lemma apply_S2: â\88\80f,i. (â\86\91f)@â\9d´iâ\9dµ = â\86\91(f@â\9d´iâ\9dµ).
+lemma apply_S2: â\88\80f,i. (â\86\91f)@â\9d¨iâ\9d© = â\86\91(f@â\9d¨iâ\9d©).
* #n #f * //
qed.
(* Main inversion lemmas ****************************************************)
-theorem apply_inj: â\88\80f,i1,i2,j. f@â\9d´i1â\9dµ = j â\86\92 f@â\9d´i2â\9dµ = j → i1 = i2.
+theorem apply_inj: â\88\80f,i1,i2,j. f@â\9d¨i1â\9d© = j â\86\92 f@â\9d¨i2â\9d© = j → i1 = i2.
/2 width=4 by at_inj/ qed-.
-corec theorem nstream_eq_inv_ext: â\88\80f1,f2. (â\88\80i. f1@â\9d´iâ\9dµ = f2@â\9d´iâ\9dµ) → f1 ≗ f2.
+corec theorem nstream_eq_inv_ext: â\88\80f1,f2. (â\88\80i. f1@â\9d¨iâ\9d© = f2@â\9d¨iâ\9d©) → f1 ≗ f2.
* #n1 #f1 * #n2 #f2 #Hf @eq_seq
[ @(Hf 0)
| @nstream_eq_inv_ext -nstream_eq_inv_ext #i
'RAfter f1 f2 f = (after f1 f2 f).
definition H_after_inj: predicate rtmap ≝
- λf1. ð\9d\90\93â¦\83f1â¦\84 →
+ λf1. ð\9d\90\93â\9dªf1â\9d« →
∀f,f21,f22. f1 ⊚ f21 ≘ f → f1 ⊚ f22 ≘ f → f21 ≡ f22.
(* Basic inversion lemmas ***************************************************)
(* Properties on tls ********************************************************)
-lemma after_tls: â\88\80n,f1,f2,f. @â¦\830, f1â¦\84 ≘ n →
+lemma after_tls: â\88\80n,f1,f2,f. @â\9dª0, f1â\9d« ≘ n →
f1 ⊚ f2 ≘ f → ⫱*[n]f1 ⊚ f2 ≘ ⫱*[n]f.
#n elim n -n //
#n #IH #f1 #f2 #f #Hf1 #Hf
(* Properties on isid *******************************************************)
-corec lemma after_isid_sn: â\88\80f1. ð\9d\90\88â¦\83f1â¦\84 → ∀f2. f1 ⊚ f2 ≘ f2.
+corec lemma after_isid_sn: â\88\80f1. ð\9d\90\88â\9dªf1â\9d« → ∀f2. f1 ⊚ f2 ≘ f2.
#f1 * -f1 #f1 #g1 #Hf1 #H1 #f2 cases (pn_split f2) * #g2 #H2
/3 width=7 by after_push, after_refl/
qed.
-corec lemma after_isid_dx: â\88\80f2. ð\9d\90\88â¦\83f2â¦\84 → ∀f1. f1 ⊚ f2 ≘ f1.
+corec lemma after_isid_dx: â\88\80f2. ð\9d\90\88â\9dªf2â\9d« → ∀f1. f1 ⊚ f2 ≘ f1.
#f2 * -f2 #f2 #g2 #Hf2 #H2 #f1 cases (pn_split f1) * #g1 #H1
[ /3 width=7 by after_refl/
| @(after_next … H1 H1) /3 width=3 by isid_push/
(* Inversion lemmas on isid *************************************************)
-lemma after_isid_inv_sn: â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â¦\83f1â¦\84 → f2 ≡ f.
+lemma after_isid_inv_sn: â\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 after_isid_sn, after_mono/ qed-.
-lemma after_isid_inv_dx: â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â¦\83f2â¦\84 → f1 ≡ f.
+lemma after_isid_inv_dx: â\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 after_isid_dx, after_mono/ qed-.
-corec lemma after_fwd_isid1: â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â¦\83fâ¦\84 â\86\92 ð\9d\90\88â¦\83f1â¦\84.
+corec lemma after_fwd_isid1: â\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 isid_inv_push, isid_push/ ]
cases (isid_inv_next … H … H0)
qed-.
-corec lemma after_fwd_isid2: â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â¦\83fâ¦\84 â\86\92 ð\9d\90\88â¦\83f2â¦\84.
+corec lemma after_fwd_isid2: â\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 isid_inv_push, isid_push/ ]
cases (isid_inv_next … H … H0)
qed-.
-lemma after_inv_isid3: â\88\80f1,f2,f. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â¦\83fâ¦\84 â\86\92 ð\9d\90\88â¦\83f1â¦\84 â\88§ ð\9d\90\88â¦\83f2â¦\84.
+lemma after_inv_isid3: â\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 after_fwd_isid2, after_fwd_isid1, conj/ qed-.
(* Properties on isuni ******************************************************)
-lemma after_isid_isuni: â\88\80f1,f2. ð\9d\90\88â¦\83f2â¦\84 â\86\92 ð\9d\90\94â¦\83f1â¦\84 → f1 ⊚ ↑f2 ≘ ↑f1.
+lemma after_isid_isuni: â\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 H -H
/5 width=7 by after_isid_dx, after_eq_repl_back2, after_next, after_push, eq_push_inv_isid/
qed.
-lemma after_uni_next2: â\88\80f2. ð\9d\90\94â¦\83f2â¦\84 → ∀f1,f. ↑f2 ⊚ f1 ≘ f → f2 ⊚ ↑f1 ≘ f.
+lemma after_uni_next2: â\88\80f2. ð\9d\90\94â\9dªf2â\9d« → ∀f1,f. ↑f2 ⊚ f1 ≘ f → f2 ⊚ ↑f1 ≘ f.
#f2 #H elim H -f2
[ #f2 #Hf2 #f1 #f #Hf
elim (after_inv_nxx … Hf) -Hf [2,3: // ] #g #Hg #H0 destruct
(* Properties on uni ********************************************************)
-lemma after_uni: â\88\80n1,n2. ð\9d\90\94â\9d´n1â\9dµ â\8a\9a ð\9d\90\94â\9d´n2â\9dµ â\89\98 ð\9d\90\94â\9d´n1+n2â\9dµ.
+lemma after_uni: â\88\80n1,n2. ð\9d\90\94â\9d¨n1â\9d© â\8a\9a ð\9d\90\94â\9d¨n2â\9d© â\89\98 ð\9d\90\94â\9d¨n1+n2â\9d©.
@nat_elim2 [3: #n #m <plus_n_Sm ] (**) (* full auto fails *)
/4 width=5 by after_uni_next2, after_isid_dx, after_isid_sn, after_next/
qed.
(* Forward lemmas on at *****************************************************)
-lemma after_at_fwd: â\88\80i,i1,f. @â¦\83i1, fâ¦\84 ≘ i → ∀f2,f1. f2 ⊚ f1 ≘ f →
- â\88\83â\88\83i2. @â¦\83i1, f1â¦\84 â\89\98 i2 & @â¦\83i2, f2â¦\84 ≘ i.
+lemma after_at_fwd: â\88\80i,i1,f. @â\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 (at_inv_xxn … Hf) -Hf [1,3:* |*: // ]
[1: #g #j1 #Hg #H0 #H |2,4: #g #Hg #H ]
/3 width=9 by at_refl, at_push, at_next, ex2_intro/
qed-.
-lemma after_fwd_at: â\88\80i,i2,i1,f1,f2. @â¦\83i1, f1â¦\84 â\89\98 i2 â\86\92 @â¦\83i2, f2â¦\84 ≘ i →
- â\88\80f. f2 â\8a\9a f1 â\89\98 f â\86\92 @â¦\83i1, fâ¦\84 ≘ i.
+lemma after_fwd_at: â\88\80i,i2,i1,f1,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 (at_inv_xxn … Hf2) -Hf2 [1,3: * |*: // ]
#g2 [ #j2 ] #Hg2 [ #H22 ] #H20
]
qed-.
-lemma after_fwd_at2: â\88\80f,i1,i. @â¦\83i1, fâ¦\84 â\89\98 i â\86\92 â\88\80f1,i2. @â¦\83i1, f1â¦\84 ≘ i2 →
- â\88\80f2. f2 â\8a\9a f1 â\89\98 f â\86\92 @â¦\83i2, f2â¦\84 ≘ i.
+lemma after_fwd_at2: â\88\80f,i1,i. @â\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.
#f #i1 #i #Hf #f1 #i2 #Hf1 #f2 #H elim (after_at_fwd … Hf … H) -f
#j1 #H #Hf2 <(at_mono … Hf1 … H) -i1 -i2 //
qed-.
-lemma after_fwd_at1: â\88\80i,i2,i1,f,f2. @â¦\83i1, fâ¦\84 â\89\98 i â\86\92 @â¦\83i2, f2â¦\84 ≘ i →
- â\88\80f1. f2 â\8a\9a f1 â\89\98 f â\86\92 @â¦\83i1, f1â¦\84 ≘ i2.
+lemma after_fwd_at1: â\88\80i,i2,i1,f,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 (at_inv_xxn … Hf) -Hf [1,3: * |*: // ]
#g [ #j1 ] #Hg [ #H01 ] #H00
(* Properties with at *******************************************************)
-lemma after_uni_dx: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 ≘ i2 →
- â\88\80f. f2 â\8a\9a ð\9d\90\94â\9d´i1â\9dµ â\89\98 f â\86\92 ð\9d\90\94â\9d´i2â\9dµ ⊚ ⫱*[i2] f2 ≘ f.
+lemma after_uni_dx: â\88\80i2,i1,f2. @â\9dªi1, f2â\9d« ≘ i2 →
+ â\88\80f. f2 â\8a\9a ð\9d\90\94â\9d¨i1â\9d© â\89\98 f â\86\92 ð\9d\90\94â\9d¨i2â\9d© ⊚ ⫱*[i2] f2 ≘ f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct
]
qed.
-lemma after_uni_sn: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 ≘ i2 →
- â\88\80f. ð\9d\90\94â\9d´i2â\9dµ â\8a\9a ⫱*[i2] f2 â\89\98 f â\86\92 f2 â\8a\9a ð\9d\90\94â\9d´i1â\9dµ ≘ f.
+lemma after_uni_sn: â\88\80i2,i1,f2. @â\9dªi1, f2â\9d« ≘ i2 →
+ â\88\80f. ð\9d\90\94â\9d¨i2â\9d© â\8a\9a ⫱*[i2] f2 â\89\98 f â\86\92 f2 â\8a\9a ð\9d\90\94â\9d¨i1â\9d© ≘ f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct
]
qed-.
-lemma after_uni_succ_dx: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 ≘ i2 →
- â\88\80f. f2 â\8a\9a ð\9d\90\94â\9d´â\86\91i1â\9dµ â\89\98 f â\86\92 ð\9d\90\94â\9d´â\86\91i2â\9dµ ⊚ ⫱*[↑i2] f2 ≘ f.
+lemma after_uni_succ_dx: â\88\80i2,i1,f2. @â\9dªi1, f2â\9d« ≘ i2 →
+ â\88\80f. f2 â\8a\9a ð\9d\90\94â\9d¨â\86\91i1â\9d© â\89\98 f â\86\92 ð\9d\90\94â\9d¨â\86\91i2â\9d© ⊚ ⫱*[↑i2] f2 ≘ f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct
]
qed.
-lemma after_uni_succ_sn: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 ≘ i2 →
- â\88\80f. ð\9d\90\94â\9d´â\86\91i2â\9dµ â\8a\9a ⫱*[â\86\91i2] f2 â\89\98 f â\86\92 f2 â\8a\9a ð\9d\90\94â\9d´â\86\91i1â\9dµ ≘ f.
+lemma after_uni_succ_sn: â\88\80i2,i1,f2. @â\9dªi1, f2â\9d« ≘ i2 →
+ â\88\80f. ð\9d\90\94â\9d¨â\86\91i2â\9d© â\8a\9a ⫱*[â\86\91i2] f2 â\89\98 f â\86\92 f2 â\8a\9a ð\9d\90\94â\9d¨â\86\91i1â\9d© ≘ f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct
]
qed-.
-lemma after_uni_one_dx: â\88\80f2,f. ⫯f2 â\8a\9a ð\9d\90\94â\9d´â\86\91Oâ\9dµ â\89\98 f â\86\92 ð\9d\90\94â\9d´â\86\91Oâ\9dµ ⊚ f2 ≘ f.
+lemma after_uni_one_dx: â\88\80f2,f. ⫯f2 â\8a\9a ð\9d\90\94â\9d¨â\86\91Oâ\9d© â\89\98 f â\86\92 ð\9d\90\94â\9d¨â\86\91Oâ\9d© ⊚ f2 ≘ f.
#f2 #f #H @(after_uni_succ_dx … (⫯f2)) /2 width=3 by at_refl/
qed.
-lemma after_uni_one_sn: â\88\80f1,f. ð\9d\90\94â\9d´â\86\91Oâ\9dµ â\8a\9a f1 â\89\98 f â\86\92 ⫯f1 â\8a\9a ð\9d\90\94â\9d´â\86\91Oâ\9dµ ≘ f.
+lemma after_uni_one_sn: â\88\80f1,f. ð\9d\90\94â\9d¨â\86\91Oâ\9d© â\8a\9a f1 â\89\98 f â\86\92 ⫯f1 â\8a\9a ð\9d\90\94â\9d¨â\86\91Oâ\9d© ≘ f.
/3 width=3 by after_uni_succ_sn, at_refl/ qed-.
(* Forward lemmas on istot **************************************************)
-lemma after_istot_fwd: â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f â\86\92 ð\9d\90\93â¦\83f2â¦\84 â\86\92 ð\9d\90\93â¦\83f1â¦\84 â\86\92 ð\9d\90\93â¦\83fâ¦\84.
+lemma after_istot_fwd: â\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 after_fwd_at, ex_intro/
qed-.
-lemma after_fwd_istot_dx: â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f â\86\92 ð\9d\90\93â¦\83fâ¦\84 â\86\92 ð\9d\90\93â¦\83f1â¦\84.
+lemma after_fwd_istot_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«.
#f2 #f1 #f #H #Hf #i1 elim (Hf i1) -Hf
#i2 #Hf elim (after_at_fwd … Hf … H) -f /2 width=2 by ex_intro/
qed-.
-lemma after_fwd_istot_sn: â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f â\86\92 ð\9d\90\93â¦\83fâ¦\84 â\86\92 ð\9d\90\93â¦\83f2â¦\84.
+lemma after_fwd_istot_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«.
#f2 #f1 #f #H #Hf #i1 elim (Hf i1) -Hf
#i #Hf elim (after_at_fwd … Hf … H) -f
#i2 #Hf1 #Hf2 lapply (at_increasing … Hf1) -f1
#Hi12 elim (at_le_ex … Hf2 … Hi12) -i2 /2 width=2 by ex_intro/
qed-.
-lemma after_inv_istot: â\88\80f2,f1,f. f2 â\8a\9a f1 â\89\98 f â\86\92 ð\9d\90\93â¦\83fâ¦\84 â\86\92 ð\9d\90\93â¦\83f2â¦\84 â\88§ ð\9d\90\93â¦\83f1â¦\84.
+lemma after_inv_istot: â\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§ ð\9d\90\93â\9dªf1â\9d«.
/3 width=4 by after_fwd_istot_sn, after_fwd_istot_dx, conj/ qed-.
-lemma after_at1_fwd: â\88\80f1,i1,i2. @â¦\83i1, f1â¦\84 â\89\98 i2 â\86\92 â\88\80f2. ð\9d\90\93â¦\83f2â¦\84 → ∀f. f2 ⊚ f1 ≘ f →
- â\88\83â\88\83i. @â¦\83i2, f2â¦\84 â\89\98 i & @â¦\83i1, fâ¦\84 ≘ i.
+lemma after_at1_fwd: â\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 after_fwd_at, ex2_intro/
qed-.
-lemma after_fwd_isid_sn: â\88\80f2,f1,f. ð\9d\90\93â¦\83fâ¦\84 â\86\92 f2 â\8a\9a f1 â\89\98 f â\86\92 f1 â\89¡ f â\86\92 ð\9d\90\88â¦\83f2â¦\84.
+lemma after_fwd_isid_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«.
#f2 #f1 #f #H #Hf elim (after_inv_istot … Hf H) -H
#Hf2 #Hf1 #H @isid_at_total // -Hf2
#i2 #i #Hf2 elim (Hf1 i2) -Hf1
/3 width=7 by at_eq_repl_back, at_mono, at_id_le/
qed-.
-lemma after_fwd_isid_dx: â\88\80f2,f1,f. ð\9d\90\93â¦\83fâ¦\84 â\86\92 f2 â\8a\9a f1 â\89\98 f â\86\92 f2 â\89¡ f â\86\92 ð\9d\90\88â¦\83f1â¦\84.
+lemma after_fwd_isid_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«.
#f2 #f1 #f #H #Hf elim (after_inv_istot … Hf H) -H
#Hf2 #Hf1 #H2 @isid_at_total // -Hf1
#i1 #i2 #Hi12 elim (after_at1_fwd … Hi12 … Hf) -f1
/3 width=8 by at_inj, at_eq_repl_back/
qed-.
-corec fact after_inj_O_aux: â\88\80f1. @â¦\830, f1â¦\84 ≘ 0 → H_after_inj f1.
+corec fact after_inj_O_aux: â\88\80f1. @â\9dª0, f1â\9d« ≘ 0 → H_after_inj f1.
#f1 #H1f1 #H2f1 #f #f21 #f22 #H1f #H2f
cases (at_inv_pxp … H1f1) -H1f1 [ |*: // ] #g1 #H1
lapply (istot_inv_push … H2f1 … H1) -H2f1 #H2g1
/2 width=1 by after_tls, istot_tls, at_pxx_tls/
qed-.
-fact after_inj_aux: (â\88\80f1. @â¦\830, f1â¦\84 ≘ 0 → H_after_inj f1) →
- â\88\80i2,f1. @â¦\830, f1â¦\84 ≘ i2 → H_after_inj f1.
+fact after_inj_aux: (â\88\80f1. @â\9dª0, f1â\9d« ≘ 0 → H_after_inj f1) →
+ â\88\80i2,f1. @â\9dª0, f1â\9d« ≘ i2 → H_after_inj f1.
#H0 #i2 elim i2 -i2 /2 width=1 by/ -H0
#i2 #IH #f1 #H1f1 #H2f1 #f #f21 #f22 #H1f #H2f
elim (at_inv_pxn … H1f1) -H1f1 [ |*: // ] #g1 #H1g1 #H1
'RAt i1 f i2 = (at f i1 i2).
definition H_at_div: relation4 rtmap rtmap rtmap rtmap ≝ λf2,g2,f1,g1.
- â\88\80jf,jg,j. @â¦\83jf,f2â¦\84 â\89\98 j â\86\92 @â¦\83jg,g2â¦\84 ≘ j →
- â\88\83â\88\83j0. @â¦\83j0,f1â¦\84 â\89\98 jf & @â¦\83j0,g1â¦\84 ≘ 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 inversion lemmas ***************************************************)
-lemma at_inv_ppx: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 → ∀g. 0 = i1 → ⫯g = f → 0 = i2.
+lemma at_inv_ppx: â\88\80f,i1,i2. @â\9dªi1,fâ\9d« ≘ i2 → ∀g. 0 = i1 → ⫯g = f → 0 = i2.
#f #i1 #i2 * -f -i1 -i2 //
[ #f #i1 #i2 #_ #g #j1 #j2 #_ * #_ #x #H destruct
| #f #i1 #i2 #_ #g #j2 * #_ #x #_ #H elim (discr_push_next … H)
]
qed-.
-lemma at_inv_npx: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 → ∀g,j1. ↑j1 = i1 → ⫯g = f →
- â\88\83â\88\83j2. @â¦\83j1,gâ¦\84 ≘ j2 & ↑j2 = i2.
+lemma at_inv_npx: â\88\80f,i1,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 >(injective_push … Hf) -g destruct /2 width=3 by ex2_intro/
]
qed-.
-lemma at_inv_xnx: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 → ∀g. ↑g = f →
- â\88\83â\88\83j2. @â¦\83i1,gâ¦\84 ≘ j2 & ↑j2 = i2.
+lemma at_inv_xnx: â\88\80f,i1,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 (discr_next_push … H)
| #f #i1 #i2 #_ #g #j1 #j2 * #_ #_ #x #H elim (discr_next_push … H)
(* Advanced inversion lemmas ************************************************)
-lemma at_inv_ppn: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 →
+lemma at_inv_ppn: â\88\80f,i1,i2. @â\9dªi1,fâ\9d« ≘ i2 →
∀g,j2. 0 = i1 → ⫯g = f → ↑j2 = i2 → ⊥.
#f #i1 #i2 #Hf #g #j2 #H1 #H <(at_inv_ppx … Hf … H1 H) -f -g -i1 -i2
#H destruct
qed-.
-lemma at_inv_npp: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 →
+lemma at_inv_npp: â\88\80f,i1,i2. @â\9dªi1,fâ\9d« ≘ i2 →
∀g,j1. ↑j1 = i1 → ⫯g = f → 0 = i2 → ⊥.
#f #i1 #i2 #Hf #g #j1 #H1 #H elim (at_inv_npx … Hf … H1 H) -f -i1
#x2 #Hg * -i2 #H destruct
qed-.
-lemma at_inv_npn: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 →
- â\88\80g,j1,j2. â\86\91j1 = i1 â\86\92 ⫯g = f â\86\92 â\86\91j2 = i2 â\86\92 @â¦\83j1,gâ¦\84 ≘ j2.
+lemma at_inv_npn: â\88\80f,i1,i2. @â\9dªi1,fâ\9d« ≘ i2 →
+ â\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 (at_inv_npx … Hf … H1 H) -f -i1
#x2 #Hg * -i2 #H destruct //
qed-.
-lemma at_inv_xnp: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 →
+lemma at_inv_xnp: â\88\80f,i1,i2. @â\9dªi1,fâ\9d« ≘ i2 →
∀g. ↑g = f → 0 = i2 → ⊥.
#f #i1 #i2 #Hf #g #H elim (at_inv_xnx … Hf … H) -f
#x2 #Hg * -i2 #H destruct
qed-.
-lemma at_inv_xnn: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 →
- â\88\80g,j2. â\86\91g = f â\86\92 â\86\91j2 = i2 â\86\92 @â¦\83i1,gâ¦\84 ≘ j2.
+lemma at_inv_xnn: â\88\80f,i1,i2. @â\9dªi1,fâ\9d« ≘ i2 →
+ â\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 (at_inv_xnx … Hf … H) -f
#x2 #Hg * -i2 #H destruct //
qed-.
-lemma at_inv_pxp: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 → 0 = i1 → 0 = i2 → ∃g. ⫯g = f.
+lemma at_inv_pxp: â\88\80f,i1,i2. @â\9dªi1,fâ\9d« ≘ i2 → 0 = i1 → 0 = i2 → ∃g. ⫯g = f.
#f elim (pn_split … f) * /2 width=2 by ex_intro/
#g #H #i1 #i2 #Hf #H1 #H2 cases (at_inv_xnp … Hf … H H2)
qed-.
-lemma at_inv_pxn: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 → ∀j2. 0 = i1 → ↑j2 = i2 →
- â\88\83â\88\83g. @â¦\83i1,gâ¦\84 ≘ j2 & ↑g = f.
+lemma at_inv_pxn: â\88\80f,i1,i2. @â\9dªi1,fâ\9d« ≘ i2 → ∀j2. 0 = i1 → ↑j2 = i2 →
+ â\88\83â\88\83g. @â\9dªi1,gâ\9d« ≘ j2 & ↑g = f.
#f elim (pn_split … f) *
#g #H #i1 #i2 #Hf #j2 #H1 #H2
[ elim (at_inv_ppn … Hf … H1 H H2)
]
qed-.
-lemma at_inv_nxp: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 →
+lemma at_inv_nxp: â\88\80f,i1,i2. @â\9dªi1,fâ\9d« ≘ i2 →
∀j1. ↑j1 = i1 → 0 = i2 → ⊥.
#f elim (pn_split f) *
#g #H #i1 #i2 #Hf #j1 #H1 #H2
]
qed-.
-lemma at_inv_nxn: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 → ∀j1,j2. ↑j1 = i1 → ↑j2 = i2 →
- (â\88\83â\88\83g. @â¦\83j1,gâ¦\84 ≘ j2 & ⫯g = f) ∨
- â\88\83â\88\83g. @â¦\83i1,gâ¦\84 ≘ j2 & ↑g = f.
+lemma at_inv_nxn: â\88\80f,i1,i2. @â\9dªi1,fâ\9d« ≘ i2 → ∀j1,j2. ↑j1 = i1 → ↑j2 = i2 →
+ (â\88\83â\88\83g. @â\9dªj1,gâ\9d« ≘ j2 & ⫯g = f) ∨
+ â\88\83â\88\83g. @â\9dªi1,gâ\9d« ≘ j2 & ↑g = f.
#f elim (pn_split f) *
/4 width=7 by at_inv_xnn, at_inv_npn, ex2_intro, or_intror, or_introl/
qed-.
(* Note: the following inversion lemmas must be checked *)
-lemma at_inv_xpx: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 → ∀g. ⫯g = f →
+lemma at_inv_xpx: â\88\80f,i1,i2. @â\9dªi1,fâ\9d« ≘ i2 → ∀g. ⫯g = f →
(0 = i1 ∧ 0 = i2) ∨
- â\88\83â\88\83j1,j2. @â¦\83j1,gâ¦\84 ≘ 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 (at_inv_npx … Hf … H) -f /3 width=5 by or_intror, ex3_2_intro/
| >(at_inv_ppx … Hf … H) -f /3 width=1 by conj, or_introl/
]
qed-.
-lemma at_inv_xpp: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 → ∀g. ⫯g = f → 0 = i2 → 0 = i1.
+lemma at_inv_xpp: â\88\80f,i1,i2. @â\9dªi1,fâ\9d« ≘ i2 → ∀g. ⫯g = f → 0 = i2 → 0 = i1.
#f #i1 #i2 #Hf #g #H elim (at_inv_xpx … Hf … H) -f * //
#j1 #j2 #_ #_ * -i2 #H destruct
qed-.
-lemma at_inv_xpn: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 → ∀g,j2. ⫯g = f → ↑j2 = i2 →
- â\88\83â\88\83j1. @â¦\83j1,gâ¦\84 ≘ j2 & ↑j1 = i1.
+lemma at_inv_xpn: â\88\80f,i1,i2. @â\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 (at_inv_xpx … Hf … H) -f *
[ #_ * -i2 #H destruct
| #x1 #x2 #Hg #H1 * -i2 #H destruct /2 width=3 by ex2_intro/
]
qed-.
-lemma at_inv_xxp: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 → 0 = i2 →
+lemma at_inv_xxp: â\88\80f,i1,i2. @â\9dªi1,fâ\9d« ≘ i2 → 0 = i2 →
∃∃g. 0 = i1 & ⫯g = f.
#f elim (pn_split f) *
#g #H #i1 #i2 #Hf #H2
]
qed-.
-lemma at_inv_xxn: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 → ∀j2. ↑j2 = i2 →
- (â\88\83â\88\83g,j1. @â¦\83j1,gâ¦\84 ≘ j2 & ↑j1 = i1 & ⫯g = f) ∨
- â\88\83â\88\83g. @â¦\83i1,gâ¦\84 ≘ j2 & ↑g = f.
+lemma at_inv_xxn: â\88\80f,i1,i2. @â\9dªi1,fâ\9d« ≘ i2 → ∀j2. ↑j2 = i2 →
+ (â\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 (pn_split f) *
#g #H #i1 #i2 #Hf #j2 #H2
[ elim (at_inv_xpn … Hf … H H2) -i2 /3 width=5 by or_introl, ex3_2_intro/
(* Basic forward lemmas *****************************************************)
-lemma at_increasing: â\88\80i2,i1,f. @â¦\83i1,fâ¦\84 ≘ i2 → i1 ≤ i2.
+lemma at_increasing: â\88\80i2,i1,f. @â\9dªi1,fâ\9d« ≘ i2 → i1 ≤ i2.
#i2 elim i2 -i2
[ #i1 #f #Hf elim (at_inv_xxp … Hf) -Hf //
| #i2 #IH * //
]
qed-.
-lemma at_increasing_strict: â\88\80g,i1,i2. @â¦\83i1,gâ¦\84 ≘ i2 → ∀f. ↑f = g →
- i1 < i2 â\88§ @â¦\83i1,fâ¦\84 ≘ ↓i2.
+lemma at_increasing_strict: â\88\80g,i1,i2. @â\9dªi1,gâ\9d« ≘ i2 → ∀f. ↑f = g →
+ i1 < i2 â\88§ @â\9dªi1,fâ\9d« ≘ ↓i2.
#g #i1 #i2 #Hg #f #H elim (at_inv_xnx … Hg … H) -Hg -H
/4 width=2 by conj, at_increasing, le_S_S/
qed-.
-lemma at_fwd_id_ex: â\88\80f,i. @â¦\83i,fâ¦\84 ≘ i → ∃g. ⫯g = f.
+lemma at_fwd_id_ex: â\88\80f,i. @â\9dªi,fâ\9d« ≘ i → ∃g. ⫯g = f.
#f elim (pn_split f) * /2 width=2 by ex_intro/
#g #H #i #Hf elim (at_inv_xnx … Hf … H) -Hf -H
#j2 #Hg #H destruct lapply (at_increasing … Hg) -Hg
(* Basic properties *********************************************************)
-corec lemma at_eq_repl_back: â\88\80i1,i2. eq_repl_back (λf. @â¦\83i1,fâ¦\84 ≘ i2).
+corec lemma at_eq_repl_back: â\88\80i1,i2. eq_repl_back (λf. @â\9dªi1,fâ\9d« ≘ i2).
#i1 #i2 #f1 #H1 cases H1 -f1 -i1 -i2
[ #f1 #g1 #j1 #j2 #H #H1 #H2 #f2 #H12 cases (eq_inv_px … H12 … H) -g1 /2 width=2 by at_refl/
| #f1 #i1 #i2 #Hf1 #g1 #j1 #j2 #H #H1 #H2 #f2 #H12 cases (eq_inv_px … H12 … H) -g1 /3 width=7 by at_push/
]
qed-.
-lemma at_eq_repl_fwd: â\88\80i1,i2. eq_repl_fwd (λf. @â¦\83i1,fâ¦\84 ≘ i2).
+lemma at_eq_repl_fwd: â\88\80i1,i2. eq_repl_fwd (λf. @â\9dªi1,fâ\9d« ≘ i2).
#i1 #i2 @eq_repl_sym /2 width=3 by at_eq_repl_back/
qed-.
-lemma at_le_ex: â\88\80j2,i2,f. @â¦\83i2,fâ¦\84 ≘ j2 → ∀i1. i1 ≤ i2 →
- â\88\83â\88\83j1. @â¦\83i1,fâ¦\84 ≘ j1 & j1 ≤ j2.
+lemma at_le_ex: â\88\80j2,i2,f. @â\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 (at_inv_xxn … Hf) -Hf [1,3: * |*: // ]
#g [ #x2 ] #Hg [ #H2 ] #H0
]
qed-.
-lemma at_id_le: â\88\80i1,i2. i1 â\89¤ i2 â\86\92 â\88\80f. @â¦\83i2,fâ¦\84 â\89\98 i2 â\86\92 @â¦\83i1,fâ¦\84 ≘ i1.
+lemma at_id_le: â\88\80i1,i2. i1 â\89¤ i2 â\86\92 â\88\80f. @â\9dªi2,fâ\9d« â\89\98 i2 â\86\92 @â\9dªi1,fâ\9d« ≘ i1.
#i1 #i2 #H @(le_elim … H) -i1 -i2 [ #i2 | #i1 #i2 #IH ]
#f #Hf elim (at_fwd_id_ex … Hf) /4 width=7 by at_inv_npn, at_push, at_refl/
qed-.
(* Main properties **********************************************************)
-theorem at_monotonic: â\88\80j2,i2,f. @â¦\83i2,fâ¦\84 â\89\98 j2 â\86\92 â\88\80j1,i1. @â¦\83i1,fâ¦\84 ≘ j1 →
+theorem at_monotonic: â\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 (at_inv_xxp … H2f) -H2f //
]
qed-.
-theorem at_inv_monotonic: â\88\80j1,i1,f. @â¦\83i1,fâ¦\84 â\89\98 j1 â\86\92 â\88\80j2,i2. @â¦\83i2,fâ¦\84 ≘ j2 →
+theorem at_inv_monotonic: â\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 (at_inv_xxp … H1f) -H1f //
]
qed-.
-theorem at_mono: â\88\80f,i,i1. @â¦\83i,fâ¦\84 â\89\98 i1 â\86\92 â\88\80i2. @â¦\83i,fâ¦\84 ≘ i2 → i2 = i1.
+theorem at_mono: â\88\80f,i,i1. @â\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 (lt_or_eq_or_gt i2 i1) //
#Hi elim (lt_le_false i i) /3 width=6 by at_inv_monotonic, eq_sym/
qed-.
-theorem at_inj: â\88\80f,i1,i. @â¦\83i1,fâ¦\84 â\89\98 i â\86\92 â\88\80i2. @â¦\83i2,fâ¦\84 ≘ i → i1 = i2.
+theorem at_inj: â\88\80f,i1,i. @â\9dªi1,fâ\9d« â\89\98 i â\86\92 â\88\80i2. @â\9dªi2,fâ\9d« ≘ i → i1 = i2.
#f #i1 #i #H1 #i2 #H2 elim (lt_or_eq_or_gt i2 i1) //
#Hi elim (lt_le_false i i) /3 width=6 by at_monotonic, eq_sym/
qed-.
(* Properties on tls ********************************************************)
-lemma at_pxx_tls: â\88\80n,f. @â¦\830,fâ¦\84 â\89\98 n â\86\92 @â¦\830,⫱*[n]fâ¦\84 ≘ 0.
+lemma at_pxx_tls: â\88\80n,f. @â\9dª0,fâ\9d« â\89\98 n â\86\92 @â\9dª0,⫱*[n]fâ\9d« ≘ 0.
#n elim n -n //
#n #IH #f #Hf
cases (at_inv_pxn … Hf) -Hf [ |*: // ] #g #Hg #H0 destruct
<tls_xn /2 width=1 by/
qed.
-lemma at_tls: â\88\80i2,f. ⫯⫱*[â\86\91i2]f â\89¡ ⫱*[i2]f â\86\92 â\88\83i1. @â¦\83i1,fâ¦\84 ≘ i2.
+lemma at_tls: â\88\80i2,f. ⫯⫱*[â\86\91i2]f â\89¡ ⫱*[i2]f â\86\92 â\88\83i1. @â\9dªi1,fâ\9d« ≘ i2.
#i2 elim i2 -i2
[ /4 width=4 by at_eq_repl_back, at_refl, ex_intro/
| #i2 #IH #f <tls_xn <tls_xn in ⊢ (??%→?); #H
(* Inversion lemmas with tls ************************************************)
-lemma at_inv_nxx: â\88\80n,g,i1,j2. @â¦\83â\86\91i1,gâ¦\84 â\89\98 j2 â\86\92 @â¦\830,gâ¦\84 ≘ n →
- â\88\83â\88\83i2. @â¦\83i1,⫱*[â\86\91n]gâ¦\84 ≘ i2 & ↑(n+i2) = j2.
+lemma at_inv_nxx: â\88\80n,g,i1,j2. @â\9dªâ\86\91i1,gâ\9d« â\89\98 j2 â\86\92 @â\9dª0,gâ\9d« ≘ n →
+ â\88\83â\88\83i2. @â\9dªi1,⫱*[â\86\91n]gâ\9d« ≘ i2 & ↑(n+i2) = j2.
#n elim n -n
[ #g #i1 #j2 #Hg #H
elim (at_inv_pxp … H) -H [ |*: // ] #f #H0
]
qed-.
-lemma at_inv_tls: â\88\80i2,i1,f. @â¦\83i1,fâ¦\84 ≘ i2 → ⫯⫱*[↑i2]f ≡ ⫱*[i2]f.
+lemma at_inv_tls: â\88\80i2,i1,f. @â\9dªi1,fâ\9d« ≘ i2 → ⫯⫱*[↑i2]f ≡ ⫱*[i2]f.
#i2 elim i2 -i2
[ #i1 #f #Hf elim (at_inv_xxp … Hf) -Hf // #g #H1 #H destruct
/2 width=1 by eq_refl/
(* Advanced inversion lemmas on isid ****************************************)
-lemma isid_inv_at: â\88\80i,f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 @â¦\83i,fâ¦\84 ≘ i.
+lemma isid_inv_at: â\88\80i,f. ð\9d\90\88â\9dªfâ\9d« â\86\92 @â\9dªi,fâ\9d« ≘ i.
#i elim i -i
[ #f #H elim (isid_inv_gen … H) -H /2 width=2 by at_refl/
| #i #IH #f #H elim (isid_inv_gen … H) -H /3 width=7 by at_push/
]
qed.
-lemma isid_inv_at_mono: â\88\80f,i1,i2. ð\9d\90\88â¦\83fâ¦\84 â\86\92 @â¦\83i1,fâ¦\84 ≘ i2 → i1 = i2.
+lemma isid_inv_at_mono: â\88\80f,i1,i2. ð\9d\90\88â\9dªfâ\9d« â\86\92 @â\9dªi1,fâ\9d« ≘ i2 → i1 = i2.
/3 width=6 by isid_inv_at, at_mono/ qed-.
(* Advanced properties on isid **********************************************)
-corec lemma isid_at: â\88\80f. (â\88\80i. @â¦\83i,fâ¦\84 â\89\98 i) â\86\92 ð\9d\90\88â¦\83fâ¦\84.
+corec lemma isid_at: â\88\80f. (â\88\80i. @â\9dªi,fâ\9d« â\89\98 i) â\86\92 ð\9d\90\88â\9dªfâ\9d«.
#f #Hf lapply (Hf 0)
#H cases (at_fwd_id_ex … H) -H
#g #H @(isid_push … H) /3 width=7 by at_inv_npn/
(* Advanced properties on id ************************************************)
-lemma id_inv_at: â\88\80f. (â\88\80i. @â¦\83i,fâ¦\84 ≘ i) → 𝐈𝐝 ≡ f.
+lemma id_inv_at: â\88\80f. (â\88\80i. @â\9dªi,fâ\9d« ≘ i) → 𝐈𝐝 ≡ f.
/3 width=1 by isid_at, eq_id_inv_isid/ qed-.
-lemma id_at: â\88\80i. @â¦\83i,ð\9d\90\88ð\9d\90\9dâ¦\84 ≘ i.
+lemma id_at: â\88\80i. @â\9dªi,ð\9d\90\88ð\9d\90\9dâ\9d« ≘ i.
/2 width=1 by isid_inv_at/ qed.
(* Advanced forward lemmas on id ********************************************)
-lemma at_id_fwd: â\88\80i1,i2. @â¦\83i1,ð\9d\90\88ð\9d\90\9dâ¦\84 ≘ i2 → i1 = i2.
+lemma at_id_fwd: â\88\80i1,i2. @â\9dªi1,ð\9d\90\88ð\9d\90\9dâ\9d« ≘ i2 → i1 = i2.
/2 width=4 by at_mono/ qed.
(* Main properties on id ****************************************************)
(* Properties with uniform relocations **************************************)
-lemma at_uni: â\88\80n,i. @â¦\83i,ð\9d\90\94â\9d´nâ\9dµâ¦\84 ≘ n+i.
+lemma at_uni: â\88\80n,i. @â\9dªi,ð\9d\90\94â\9d¨nâ\9d©â\9d« ≘ n+i.
#n elim n -n /2 width=5 by at_next/
qed.
(* Inversion lemmas with uniform relocations ********************************)
-lemma at_inv_uni: â\88\80n,i,j. @â¦\83i,ð\9d\90\94â\9d´nâ\9dµâ¦\84 ≘ j → j = n+i.
+lemma at_inv_uni: â\88\80n,i,j. @â\9dªi,ð\9d\90\94â\9d¨nâ\9d©â\9d« ≘ j → j = n+i.
/2 width=4 by at_mono/ qed-.
(* RELOCATION MAP ***********************************************************)
-definition basic: nat â\86\92 nat â\86\92 rtmap â\89\9d λm,n. ⫯*[m] ð\9d\90\94â\9d´nâ\9dµ.
+definition basic: nat â\86\92 nat â\86\92 rtmap â\89\9d λm,n. ⫯*[m] ð\9d\90\94â\9d¨nâ\9d©.
interpretation "basic relocation (rtmap)"
'Basic m n = (basic m n).
(* Prioerties with application **********************************************)
-lemma at_basic_lt: â\88\80m,n,i. i < m â\86\92 @â¦\83i, ð\9d\90\81â\9d´m,nâ\9dµâ¦\84 ≘ i.
+lemma at_basic_lt: â\88\80m,n,i. i < m â\86\92 @â\9dªi, ð\9d\90\81â\9d¨m,nâ\9d©â\9d« ≘ i.
#m elim m -m [ #n #i #H elim (lt_zero_false … H) ]
#m #IH #n * [ /2 width=2 by refl, at_refl/ ]
#i #H lapply (lt_S_S_to_lt … H) -H /3 width=7 by refl, at_push/
qed.
-lemma at_basic_ge: â\88\80m,n,i. m â\89¤ i â\86\92 @â¦\83i, ð\9d\90\81â\9d´m,nâ\9dµâ¦\84 ≘ n+i.
+lemma at_basic_ge: â\88\80m,n,i. m â\89¤ i â\86\92 @â\9dªi, ð\9d\90\81â\9d¨m,nâ\9d©â\9d« ≘ n+i.
#m elim m -m //
#m #IH #n #j #H
elim (le_inv_S1 … H) -H #i #Hmi #H destruct
(* Inversion lemmas with application ****************************************)
-lemma at_basic_inv_lt: â\88\80m,n,i,j. i < m â\86\92 @â¦\83i, ð\9d\90\81â\9d´m,nâ\9dµâ¦\84 ≘ j → i = j.
+lemma at_basic_inv_lt: â\88\80m,n,i,j. i < m â\86\92 @â\9dªi, ð\9d\90\81â\9d¨m,nâ\9d©â\9d« ≘ j → i = j.
/3 width=4 by at_basic_lt, at_mono/ qed-.
-lemma at_basic_inv_ge: â\88\80m,n,i,j. m â\89¤ i â\86\92 @â¦\83i, ð\9d\90\81â\9d´m,nâ\9dµâ¦\84 ≘ j → n+i = j.
+lemma at_basic_inv_ge: â\88\80m,n,i,j. m â\89¤ i â\86\92 @â\9dªi, ð\9d\90\81â\9d¨m,nâ\9d©â\9d« ≘ j → n+i = j.
/3 width=4 by at_basic_ge, at_mono/ qed-.
(* Properties with composition **********************************************)
lemma after_basic_rc (m2,m1,n2,n1):
- m1 â\89¤ m2 â\86\92 m2 â\89¤ m1+n1 â\86\92 ð\9d\90\81â\9d´m2,n2â\9dµ â\8a\9a ð\9d\90\81â\9d´m1,n1â\9dµ â\89\98 ð\9d\90\81â\9d´m1,n2+n1â\9dµ.
+ m1 â\89¤ m2 â\86\92 m2 â\89¤ m1+n1 â\86\92 ð\9d\90\81â\9d¨m2,n2â\9d© â\8a\9a ð\9d\90\81â\9d¨m1,n1â\9d© â\89\98 ð\9d\90\81â\9d¨m1,n2+n1â\9d©.
#m2 elim m2 -m2
[ #m1 #n2 #n1 #Hm21 #_
<(le_n_O_to_eq … Hm21) -m1 //
'RCoAfter f1 f2 f = (coafter f1 f2 f).
definition H_coafter_inj: predicate rtmap ≝
- λf1. ð\9d\90\93â¦\83f1â¦\84 →
+ λf1. ð\9d\90\93â\9dªf1â\9d« →
∀f,f21,f22. f1 ~⊚ f21 ≘ f → f1 ~⊚ f22 ≘ f → f21 ≡ f22.
definition H_coafter_fwd_isid2: predicate rtmap ≝
- λf1. â\88\80f2,f. f1 ~â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\93â¦\83f1â¦\84 â\86\92 ð\9d\90\88â¦\83fâ¦\84 â\86\92 ð\9d\90\88â¦\83f2â¦\84.
+ λ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«.
definition H_coafter_isfin2_fwd: predicate rtmap ≝
- λf1. â\88\80f2. ð\9d\90\85â¦\83f2â¦\84 â\86\92 ð\9d\90\93â¦\83f1â¦\84 â\86\92 â\88\80f. f1 ~â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\85â¦\83fâ¦\84.
+ λ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«.
(* Basic inversion lemmas ***************************************************)
(* Forward lemmas with pushs ************************************************)
-lemma coafter_fwd_pushs: â\88\80j,i,g2,f1,g. g2 ~â\8a\9a ⫯*[i]f1 â\89\98 g â\86\92 @â¦\83i, g2â¦\84 ≘ j →
+lemma coafter_fwd_pushs: â\88\80j,i,g2,f1,g. g2 ~â\8a\9a ⫯*[i]f1 â\89\98 g â\86\92 @â\9dªi, g2â\9d« ≘ j →
∃f. ⫯*[j] f = g.
#j elim j -j
[ #i #g2 #f1 #g #Hg #H
(* Properties with iterated tail ********************************************)
-lemma coafter_tls: â\88\80j,i,f1,f2,f. @â¦\83i, f1â¦\84 ≘ j →
+lemma coafter_tls: â\88\80j,i,f1,f2,f. @â\9dªi, f1â\9d« ≘ j →
f1 ~⊚ f2 ≘ f → ⫱*[j]f1 ~⊚ ⫱*[i]f2 ≘ ⫱*[j]f.
#j elim j -j [ #i | #j #IH * [| #i ] ] #f1 #f2 #f #Hf1 #Hf
[ elim (at_inv_xxp … Hf1) -Hf1 [ |*: // ] #g1 #Hg1 #H1 destruct //
]
qed.
-lemma coafter_tls_O: â\88\80n,f1,f2,f. @â¦\830, f1â¦\84 ≘ n →
+lemma coafter_tls_O: â\88\80n,f1,f2,f. @â\9dª0, f1â\9d« ≘ n →
f1 ~⊚ f2 ≘ f → ⫱*[n]f1 ~⊚ f2 ≘ ⫱*[n]f.
/2 width=1 by coafter_tls/ qed.
lemma coafter_tls_succ: ∀g2,g1,g. g2 ~⊚ g1 ≘ g →
- â\88\80n. @â¦\830, g2â¦\84 ≘ n → ⫱*[↑n]g2 ~⊚ ⫱g1 ≘ ⫱*[↑n]g.
+ â\88\80n. @â\9dª0, g2â\9d« ≘ n → ⫱*[↑n]g2 ~⊚ ⫱g1 ≘ ⫱*[↑n]g.
#g2 #g1 #g #Hg #n #Hg2
lapply (coafter_tls … Hg2 … Hg) -Hg #Hg
lapply (at_pxx_tls … Hg2) -Hg2 #H
<tls_S <tls_S <H2 <H0 -g2 -g -n //
qed.
-lemma coafter_fwd_xpx_pushs: â\88\80g2,f1,g,i,j. @â¦\83i, g2â¦\84 ≘ j → g2 ~⊚ ⫯*[↑i]f1 ≘ g →
+lemma coafter_fwd_xpx_pushs: â\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
elim (coafter_fwd_pushs … Hg Hg2) #f #H0 destruct
/2 width=3 by ex2_intro/
qed-.
-lemma coafter_fwd_xnx_pushs: â\88\80g2,f1,g,i,j. @â¦\83i, g2â¦\84 ≘ j → g2 ~⊚ ⫯*[i]↑f1 ≘ g →
+lemma coafter_fwd_xnx_pushs: â\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
(* Properties with test for identity ****************************************)
-corec lemma coafter_isid_sn: â\88\80f1. ð\9d\90\88â¦\83f1â¦\84 → ∀f2. f1 ~⊚ f2 ≘ f2.
+corec lemma coafter_isid_sn: â\88\80f1. ð\9d\90\88â\9dªf1â\9d« → ∀f2. f1 ~⊚ f2 ≘ f2.
#f1 * -f1 #f1 #g1 #Hf1 #H1 #f2 cases (pn_split f2) * #g2 #H2
/3 width=7 by coafter_push, coafter_refl/
qed.
-corec lemma coafter_isid_dx: â\88\80f2,f. ð\9d\90\88â¦\83f2â¦\84 â\86\92 ð\9d\90\88â¦\83fâ¦\84 → ∀f1. f1 ~⊚ f2 ≘ f.
+corec lemma coafter_isid_dx: â\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 (pn_split f1) * #g1 #H1
[ /3 width=7 by coafter_refl/
| @(coafter_next … H1 … H) /3 width=3 by isid_push/
(* Inversion lemmas with test for identity **********************************)
-lemma coafter_isid_inv_sn: â\88\80f1,f2,f. f1 ~â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â¦\83f1â¦\84 → f2 ≡ f.
+lemma coafter_isid_inv_sn: â\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 coafter_isid_sn, coafter_mono/ qed-.
-lemma coafter_isid_inv_dx: â\88\80f1,f2,f. f1 ~â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\88â¦\83f2â¦\84 â\86\92 ð\9d\90\88â¦\83fâ¦\84.
+lemma coafter_isid_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«.
/4 width=4 by eq_id_isid, coafter_isid_dx, coafter_mono/ qed-.
(* Properties with test for uniform relocations *****************************)
-lemma coafter_isuni_isid: â\88\80f2. ð\9d\90\88â¦\83f2â¦\84 â\86\92 â\88\80f1. ð\9d\90\94â¦\83f1â¦\84 → f1 ~⊚ f2 ≘ f2.
+lemma coafter_isuni_isid: â\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 H -g
/3 width=5 by coafter_isid_sn, coafter_eq_repl_back0, coafter_next, eq_push_inv_isid/
qed.
(*
-lemma coafter_isid_isuni: â\88\80f1,f2. ð\9d\90\88â¦\83f2â¦\84 â\86\92 ð\9d\90\94â¦\83f1â¦\84 → f1 ~⊚ ↑f2 ≘ ↑f1.
+lemma coafter_isid_isuni: â\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 H -H
/5 width=7 by coafter_isid_dx, coafter_eq_repl_back2, coafter_next, coafter_push, eq_push_inv_isid/
qed.
-lemma coafter_uni_next2: â\88\80f2. ð\9d\90\94â¦\83f2â¦\84 → ∀f1,f. ↑f2 ~⊚ f1 ≘ f → f2 ~⊚ ↑f1 ≘ f.
+lemma coafter_uni_next2: â\88\80f2. ð\9d\90\94â\9dªf2â\9d« → ∀f1,f. ↑f2 ~⊚ f1 ≘ f → f2 ~⊚ ↑f1 ≘ f.
#f2 #H elim H -f2
[ #f2 #Hf2 #f1 #f #Hf
elim (coafter_inv_nxx … Hf) -Hf [2,3: // ] #g #Hg #H0 destruct
(* Properties with uniform relocations **************************************)
-lemma coafter_uni_sn: â\88\80i,f. ð\9d\90\94â\9d´iâ\9dµ ~⊚ f ≘ ⫯*[i] f.
+lemma coafter_uni_sn: â\88\80i,f. ð\9d\90\94â\9d¨iâ\9d© ~⊚ f ≘ ⫯*[i] f.
#i elim i -i /2 width=5 by coafter_isid_sn, coafter_next/
qed.
(*
-lemma coafter_uni: â\88\80n1,n2. ð\9d\90\94â\9d´n1â\9dµ ~â\8a\9a ð\9d\90\94â\9d´n2â\9dµ â\89\98 ð\9d\90\94â\9d´n1+n2â\9dµ.
+lemma coafter_uni: â\88\80n1,n2. ð\9d\90\94â\9d¨n1â\9d© ~â\8a\9a ð\9d\90\94â\9d¨n2â\9d© â\89\98 ð\9d\90\94â\9d¨n1+n2â\9d©.
@nat_elim2
/4 width=5 by coafter_uni_next2, coafter_isid_sn, coafter_isid_dx, coafter_next/
qed.
(* Forward lemmas on at *****************************************************)
-lemma coafter_at_fwd: â\88\80i,i1,f. @â¦\83i1, fâ¦\84 ≘ i → ∀f2,f1. f2 ~⊚ f1 ≘ f →
- â\88\83â\88\83i2. @â¦\83i1, f1â¦\84 â\89\98 i2 & @â¦\83i2, f2â¦\84 ≘ i.
+lemma coafter_at_fwd: â\88\80i,i1,f. @â\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 (at_inv_xxn … Hf) -Hf [1,3:* |*: // ]
[1: #g #j1 #Hg #H0 #H |2,4: #g #Hg #H ]
/3 width=9 by at_refl, at_push, at_next, ex2_intro/
qed-.
-lemma coafter_fwd_at: â\88\80i,i2,i1,f1,f2. @â¦\83i1, f1â¦\84 â\89\98 i2 â\86\92 @â¦\83i2, f2â¦\84 ≘ i →
- â\88\80f. f2 ~â\8a\9a f1 â\89\98 f â\86\92 @â¦\83i1, fâ¦\84 ≘ i.
+lemma coafter_fwd_at: â\88\80i,i2,i1,f1,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 (at_inv_xxn … Hf2) -Hf2 [1,3: * |*: // ]
#g2 [ #j2 ] #Hg2 [ #H22 ] #H20
]
qed-.
-lemma coafter_fwd_at2: â\88\80f,i1,i. @â¦\83i1, fâ¦\84 â\89\98 i â\86\92 â\88\80f1,i2. @â¦\83i1, f1â¦\84 ≘ i2 →
- â\88\80f2. f2 ~â\8a\9a f1 â\89\98 f â\86\92 @â¦\83i2, f2â¦\84 ≘ i.
+lemma coafter_fwd_at2: â\88\80f,i1,i. @â\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.
#f #i1 #i #Hf #f1 #i2 #Hf1 #f2 #H elim (coafter_at_fwd … Hf … H) -f
#j1 #H #Hf2 <(at_mono … Hf1 … H) -i1 -i2 //
qed-.
-lemma coafter_fwd_at1: â\88\80i,i2,i1,f,f2. @â¦\83i1, fâ¦\84 â\89\98 i â\86\92 @â¦\83i2, f2â¦\84 ≘ i →
- â\88\80f1. f2 ~â\8a\9a f1 â\89\98 f â\86\92 @â¦\83i1, f1â¦\84 ≘ i2.
+lemma coafter_fwd_at1: â\88\80i,i2,i1,f,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 (at_inv_xxn … Hf) -Hf [1,3: * |*: // ]
#g [ #j1 ] #Hg [ #H01 ] #H00
(* Properties with at *******************************************************)
-lemma coafter_uni_dx: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 ≘ i2 →
- â\88\80f. f2 ~â\8a\9a ð\9d\90\94â\9d´i1â\9dµ â\89\98 f â\86\92 ð\9d\90\94â\9d´i2â\9dµ ~⊚ ⫱*[i2] f2 ≘ f.
+lemma coafter_uni_dx: â\88\80i2,i1,f2. @â\9dªi1, f2â\9d« ≘ i2 →
+ â\88\80f. f2 ~â\8a\9a ð\9d\90\94â\9d¨i1â\9d© â\89\98 f â\86\92 ð\9d\90\94â\9d¨i2â\9d© ~⊚ ⫱*[i2] f2 ≘ f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct
]
qed.
-lemma coafter_uni_sn: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 ≘ i2 →
- â\88\80f. ð\9d\90\94â\9d´i2â\9dµ ~â\8a\9a ⫱*[i2] f2 â\89\98 f â\86\92 f2 ~â\8a\9a ð\9d\90\94â\9d´i1â\9dµ ≘ f.
+lemma coafter_uni_sn: â\88\80i2,i1,f2. @â\9dªi1, f2â\9d« ≘ i2 →
+ â\88\80f. ð\9d\90\94â\9d¨i2â\9d© ~â\8a\9a ⫱*[i2] f2 â\89\98 f â\86\92 f2 ~â\8a\9a ð\9d\90\94â\9d¨i1â\9d© ≘ f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct
]
qed-.
-lemma coafter_uni_succ_dx: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 ≘ i2 →
- â\88\80f. f2 ~â\8a\9a ð\9d\90\94â\9d´â\86\91i1â\9dµ â\89\98 f â\86\92 ð\9d\90\94â\9d´â\86\91i2â\9dµ ~⊚ ⫱*[↑i2] f2 ≘ f.
+lemma coafter_uni_succ_dx: â\88\80i2,i1,f2. @â\9dªi1, f2â\9d« ≘ i2 →
+ â\88\80f. f2 ~â\8a\9a ð\9d\90\94â\9d¨â\86\91i1â\9d© â\89\98 f â\86\92 ð\9d\90\94â\9d¨â\86\91i2â\9d© ~⊚ ⫱*[↑i2] f2 ≘ f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct
]
qed.
-lemma coafter_uni_succ_sn: â\88\80i2,i1,f2. @â¦\83i1, f2â¦\84 ≘ i2 →
- â\88\80f. ð\9d\90\94â\9d´â\86\91i2â\9dµ ~â\8a\9a ⫱*[â\86\91i2] f2 â\89\98 f â\86\92 f2 ~â\8a\9a ð\9d\90\94â\9d´â\86\91i1â\9dµ ≘ f.
+lemma coafter_uni_succ_sn: â\88\80i2,i1,f2. @â\9dªi1, f2â\9d« ≘ i2 →
+ â\88\80f. ð\9d\90\94â\9d¨â\86\91i2â\9d© ~â\8a\9a ⫱*[â\86\91i2] f2 â\89\98 f â\86\92 f2 ~â\8a\9a ð\9d\90\94â\9d¨â\86\91i1â\9d© ≘ f.
#i2 elim i2 -i2
[ #i1 #f2 #Hf2 #f #Hf
elim (at_inv_xxp … Hf2) -Hf2 // #g2 #H1 #H2 destruct
]
qed-.
-lemma coafter_uni_one_dx: â\88\80f2,f. ⫯f2 ~â\8a\9a ð\9d\90\94â\9d´â\86\91Oâ\9dµ â\89\98 f â\86\92 ð\9d\90\94â\9d´â\86\91Oâ\9dµ ~⊚ f2 ≘ f.
+lemma coafter_uni_one_dx: â\88\80f2,f. ⫯f2 ~â\8a\9a ð\9d\90\94â\9d¨â\86\91Oâ\9d© â\89\98 f â\86\92 ð\9d\90\94â\9d¨â\86\91Oâ\9d© ~⊚ f2 ≘ f.
#f2 #f #H @(coafter_uni_succ_dx … (⫯f2)) /2 width=3 by at_refl/
qed.
-lemma coafter_uni_one_sn: â\88\80f1,f. ð\9d\90\94â\9d´â\86\91Oâ\9dµ ~â\8a\9a f1 â\89\98 f â\86\92 ⫯f1 ~â\8a\9a ð\9d\90\94â\9d´â\86\91Oâ\9dµ ≘ f.
+lemma coafter_uni_one_sn: â\88\80f1,f. ð\9d\90\94â\9d¨â\86\91Oâ\9d© ~â\8a\9a f1 â\89\98 f â\86\92 ⫯f1 ~â\8a\9a ð\9d\90\94â\9d¨â\86\91Oâ\9d© ≘ f.
/3 width=3 by coafter_uni_succ_sn, at_refl/ qed-.
*)
(* Forward lemmas with istot ************************************************)
(*
-lemma coafter_istot_fwd: â\88\80f2,f1,f. f2 ~â\8a\9a f1 â\89\98 f â\86\92 ð\9d\90\93â¦\83f2â¦\84 â\86\92 ð\9d\90\93â¦\83f1â¦\84 â\86\92 ð\9d\90\93â¦\83fâ¦\84.
+lemma coafter_istot_fwd: â\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 coafter_fwd_at, ex_intro/
qed-.
-lemma coafter_fwd_istot_dx: â\88\80f2,f1,f. f2 ~â\8a\9a f1 â\89\98 f â\86\92 ð\9d\90\93â¦\83fâ¦\84 â\86\92 ð\9d\90\93â¦\83f1â¦\84.
+lemma coafter_fwd_istot_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«.
#f2 #f1 #f #H #Hf #i1 elim (Hf i1) -Hf
#i2 #Hf elim (coafter_at_fwd … Hf … H) -f /2 width=2 by ex_intro/
qed-.
-lemma coafter_fwd_istot_sn: â\88\80f2,f1,f. f2 ~â\8a\9a f1 â\89\98 f â\86\92 ð\9d\90\93â¦\83fâ¦\84 â\86\92 ð\9d\90\93â¦\83f2â¦\84.
+lemma coafter_fwd_istot_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«.
#f2 #f1 #f #H #Hf #i1 elim (Hf i1) -Hf
#i #Hf elim (coafter_at_fwd … Hf … H) -f
#i2 #Hf1 #Hf2 lapply (at_increasing … Hf1) -f1
#Hi12 elim (at_le_ex … Hf2 … Hi12) -i2 /2 width=2 by ex_intro/
qed-.
-lemma coafter_inv_istot: â\88\80f2,f1,f. f2 ~â\8a\9a f1 â\89\98 f â\86\92 ð\9d\90\93â¦\83fâ¦\84 â\86\92 ð\9d\90\93â¦\83f2â¦\84 â\88§ ð\9d\90\93â¦\83f1â¦\84.
+lemma coafter_inv_istot: â\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§ ð\9d\90\93â\9dªf1â\9d«.
/3 width=4 by coafter_fwd_istot_sn, coafter_fwd_istot_dx, conj/ qed-.
-lemma coafter_at1_fwd: â\88\80f1,i1,i2. @â¦\83i1, f1â¦\84 â\89\98 i2 â\86\92 â\88\80f2. ð\9d\90\93â¦\83f2â¦\84 → ∀f. f2 ~⊚ f1 ≘ f →
- â\88\83â\88\83i. @â¦\83i2, f2â¦\84 â\89\98 i & @â¦\83i1, fâ¦\84 ≘ i.
+lemma coafter_at1_fwd: â\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 coafter_fwd_at, ex2_intro/
qed-.
-lemma coafter_fwd_isid_sn: â\88\80f2,f1,f. ð\9d\90\93â¦\83fâ¦\84 â\86\92 f2 ~â\8a\9a f1 â\89\98 f â\86\92 f1 â\89¡ f â\86\92 ð\9d\90\88â¦\83f2â¦\84.
+lemma coafter_fwd_isid_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«.
#f2 #f1 #f #H #Hf elim (coafter_inv_istot … Hf H) -H
#Hf2 #Hf1 #H @isid_at_total // -Hf2
#i2 #i #Hf2 elim (Hf1 i2) -Hf1
/3 width=7 by at_eq_repl_back, at_mono, at_id_le/
qed-.
-lemma coafter_fwd_isid_dx: â\88\80f2,f1,f. ð\9d\90\93â¦\83fâ¦\84 â\86\92 f2 ~â\8a\9a f1 â\89\98 f â\86\92 f2 â\89¡ f â\86\92 ð\9d\90\88â¦\83f1â¦\84.
+lemma coafter_fwd_isid_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«.
#f2 #f1 #f #H #Hf elim (coafter_inv_istot … Hf H) -H
#Hf2 #Hf1 #H2 @isid_at_total // -Hf1
#i1 #i2 #Hi12 elim (coafter_at1_fwd … Hi12 … Hf) -f1
/3 width=8 by at_inj, at_eq_repl_back/
qed-.
*)
-corec fact coafter_inj_O_aux: â\88\80f1. @â¦\830, f1â¦\84 ≘ 0 → H_coafter_inj f1.
+corec fact coafter_inj_O_aux: â\88\80f1. @â\9dª0, f1â\9d« ≘ 0 → H_coafter_inj f1.
#f1 #H1f1 #H2f1 #f #f21 #f22 #H1f #H2f
cases (at_inv_pxp … H1f1) -H1f1 [ |*: // ] #g1 #H1
lapply (istot_inv_push … H2f1 … H1) -H2f1 #H2g1
/2 width=1 by coafter_tls, istot_tls, at_pxx_tls/
qed-.
-fact coafter_inj_aux: (â\88\80f1. @â¦\830, f1â¦\84 ≘ 0 → H_coafter_inj f1) →
- â\88\80i2,f1. @â¦\830, f1â¦\84 ≘ i2 → H_coafter_inj f1.
+fact coafter_inj_aux: (â\88\80f1. @â\9dª0, f1â\9d« ≘ 0 → H_coafter_inj f1) →
+ â\88\80i2,f1. @â\9dª0, f1â\9d« ≘ i2 → H_coafter_inj f1.
#H0 #i2 elim i2 -i2 /2 width=1 by/ -H0
#i2 #IH #f1 #H1f1 #H2f1 #f #f21 #f22 #H1f #H2f
elim (at_inv_pxn … H1f1) -H1f1 [ |*: // ] #g1 #H1g1 #H1
#f1 #H cases (H 0) /3 width=7 by coafter_inj_aux, coafter_inj_O_aux/
qed-.
-corec fact coafter_fwd_isid2_O_aux: â\88\80f1. @â¦\830, f1â¦\84 ≘ 0 →
+corec fact coafter_fwd_isid2_O_aux: â\88\80f1. @â\9dª0, f1â\9d« ≘ 0 →
H_coafter_fwd_isid2 f1.
#f1 #H1f1 #f2 #f #H #H2f1 #Hf
cases (at_inv_pxp … H1f1) -H1f1 [ |*: // ] #g1 #H1
]
qed-.
-fact coafter_fwd_isid2_aux: (â\88\80f1. @â¦\830, f1â¦\84 ≘ 0 → H_coafter_fwd_isid2 f1) →
- â\88\80i2,f1. @â¦\830, f1â¦\84 ≘ i2 → H_coafter_fwd_isid2 f1.
+fact coafter_fwd_isid2_aux: (â\88\80f1. @â\9dª0, f1â\9d« ≘ 0 → H_coafter_fwd_isid2 f1) →
+ â\88\80i2,f1. @â\9dª0, f1â\9d« ≘ i2 → H_coafter_fwd_isid2 f1.
#H0 #i2 elim i2 -i2 /2 width=1 by/ -H0
#i2 #IH #f1 #H1f1 #f2 #f #H #H2f1 #Hf
elim (at_inv_pxn … H1f1) -H1f1 [ |*: // ] #g1 #Hg1 #H1
/3 width=7 by coafter_fwd_isid2_aux, coafter_fwd_isid2_O_aux/
qed-.
-fact coafter_isfin2_fwd_O_aux: â\88\80f1. @â¦\830, f1â¦\84 ≘ 0 →
+fact coafter_isfin2_fwd_O_aux: â\88\80f1. @â\9dª0, f1â\9d« ≘ 0 →
H_coafter_isfin2_fwd f1.
#f1 #Hf1 #f2 #H
generalize in match Hf1; generalize in match f1; -f1
/5 width=6 by isfin_next, isfin_push, isfin_inv_tls, istot_tls, at_pxx_tls, coafter_tls_O/
qed-.
-fact coafter_isfin2_fwd_aux: (â\88\80f1. @â¦\830, f1â¦\84 ≘ 0 → H_coafter_isfin2_fwd f1) →
- â\88\80i2,f1. @â¦\830, f1â¦\84 ≘ i2 → H_coafter_isfin2_fwd f1.
+fact coafter_isfin2_fwd_aux: (â\88\80f1. @â\9dª0, f1â\9d« ≘ 0 → H_coafter_isfin2_fwd f1) →
+ â\88\80i2,f1. @â\9dª0, f1â\9d« ≘ i2 → H_coafter_isfin2_fwd f1.
#H0 #i2 elim i2 -i2 /2 width=1 by/ -H0
#i2 #IH #f1 #H1f1 #f2 #Hf2 #H2f1 #f #Hf
elim (at_inv_pxn … H1f1) -H1f1 [ |*: // ] #g1 #Hg1 #H1
/3 width=7 by coafter_isfin2_fwd_aux, coafter_isfin2_fwd_O_aux/
qed-.
-lemma coafter_inv_sor: â\88\80f. ð\9d\90\85â¦\83fâ¦\84 â\86\92 â\88\80f2. ð\9d\90\93â¦\83f2â¦\84 → ∀f1. f2 ~⊚ f1 ≘ f → ∀fa,fb. fa ⋓ fb ≘ f →
+lemma coafter_inv_sor: â\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.
@isfin_ind
[ #f #Hf #f2 #Hf2 #f1 #H1f #fa #fb #H2f
(* Properties with istot ****************************************************)
-lemma coafter_sor: â\88\80f. ð\9d\90\85â¦\83fâ¦\84 â\86\92 â\88\80f2. ð\9d\90\93â¦\83f2â¦\84 → ∀f1. f2 ~⊚ f1 ≘ f → ∀f1a,f1b. f1a ⋓ f1b ≘ f1 →
+lemma coafter_sor: â\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.
@isfin_ind
[ #f #Hf #f2 #Hf2 #f1 #Hf #f1a #f1b #Hf1
(* RELOCATION MAP ***********************************************************)
inductive fcla: relation2 rtmap nat ≝
-| fcla_isid: â\88\80f. ð\9d\90\88â¦\83fâ¦\84 → fcla f 0
+| fcla_isid: â\88\80f. ð\9d\90\88â\9dªfâ\9d« → fcla f 0
| fcla_push: ∀f,n. fcla f n → fcla (⫯f) n
| fcla_next: ∀f,n. fcla f n → fcla (↑f) (↑n)
.
(* Basic inversion lemmas ***************************************************)
-lemma fcla_inv_px: â\88\80g,m. ð\9d\90\82â¦\83gâ¦\84 â\89\98 m â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\82â¦\83fâ¦\84 ≘ m.
+lemma fcla_inv_px: â\88\80g,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 fcla_isid, isid_inv_push/
#g #m #_ #f #H elim (discr_push_next … H)
qed-.
-lemma fcla_inv_nx: â\88\80g,m. ð\9d\90\82â¦\83gâ¦\84 ≘ m → ∀f. ↑f = g →
- â\88\83â\88\83n. ð\9d\90\82â¦\83fâ¦\84 ≘ n & ↑n = m.
+lemma fcla_inv_nx: â\88\80g,m. ð\9d\90\82â\9dªgâ\9d« ≘ m → ∀f. ↑f = g →
+ â\88\83â\88\83n. ð\9d\90\82â\9dªfâ\9d« ≘ n & ↑n = m.
#g #m * -g -m /2 width=3 by ex2_intro/
[ #g #Hg #f #H elim (isid_inv_next … H) -H //
| #g #m #_ #f #H elim (discr_next_push … H)
(* Advanced inversion lemmas ************************************************)
-lemma cla_inv_nn: â\88\80g,m. ð\9d\90\82â¦\83gâ¦\84 â\89\98 m â\86\92 â\88\80f,n. â\86\91f = g â\86\92 â\86\91n = m â\86\92 ð\9d\90\82â¦\83fâ¦\84 ≘ n.
+lemma cla_inv_nn: â\88\80g,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 (fcla_inv_nx … H … H1) -g
#x #Hf #H destruct //
qed-.
-lemma cla_inv_np: â\88\80g,m. ð\9d\90\82â¦\83gâ¦\84 ≘ m → ∀f. ↑f = g → 0 = m → ⊥.
+lemma cla_inv_np: â\88\80g,m. ð\9d\90\82â\9dªgâ\9d« ≘ m → ∀f. ↑f = g → 0 = m → ⊥.
#g #m #H #f #H1 elim (fcla_inv_nx … H … H1) -g
#x #_ #H1 #H2 destruct
qed-.
-lemma fcla_inv_xp: â\88\80g,m. ð\9d\90\82â¦\83gâ¦\84 â\89\98 m â\86\92 0 = m â\86\92 ð\9d\90\88â¦\83gâ¦\84.
+lemma fcla_inv_xp: â\88\80g,m. ð\9d\90\82â\9dªgâ\9d« â\89\98 m â\86\92 0 = m â\86\92 ð\9d\90\88â\9dªgâ\9d«.
#g #m #H elim H -g -m /3 width=3 by isid_push/
#g #m #_ #_ #H destruct
qed-.
-lemma fcla_inv_isid: â\88\80f,n. ð\9d\90\82â¦\83fâ¦\84 â\89\98 n â\86\92 ð\9d\90\88â¦\83fâ¦\84 → 0 = n.
+lemma fcla_inv_isid: â\88\80f,n. ð\9d\90\82â\9dªfâ\9d« â\89\98 n â\86\92 ð\9d\90\88â\9dªfâ\9d« → 0 = n.
#f #n #H elim H -f -n /3 width=3 by isid_inv_push/
#f #n #_ #_ #H elim (isid_inv_next … H) -H //
qed-.
(* Main forward lemmas ******************************************************)
-theorem fcla_mono: â\88\80f,n1. ð\9d\90\82â¦\83fâ¦\84 â\89\98 n1 â\86\92 â\88\80n2. ð\9d\90\82â¦\83fâ¦\84 ≘ n2 → n1 = n2.
+theorem fcla_mono: â\88\80f,n1. ð\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 fcla_inv_isid/
| /3 width=3 by fcla_inv_px/
(* Basic properties *********************************************************)
-lemma fcla_eq_repl_back: â\88\80n. eq_repl_back â\80¦ (λf. ð\9d\90\82â¦\83fâ¦\84 ≘ n).
+lemma fcla_eq_repl_back: â\88\80n. eq_repl_back â\80¦ (λf. ð\9d\90\82â\9dªfâ\9d« ≘ n).
#n #f1 #H elim H -f1 -n /3 width=3 by fcla_isid, isid_eq_repl_back/
#f1 #n #_ #IH #g2 #H [ elim (eq_inv_px … H) | elim (eq_inv_nx … H) ] -H
/3 width=3 by fcla_push, fcla_next/
qed-.
-lemma fcla_eq_repl_fwd: â\88\80n. eq_repl_fwd â\80¦ (λf. ð\9d\90\82â¦\83fâ¦\84 ≘ n).
+lemma fcla_eq_repl_fwd: â\88\80n. eq_repl_fwd â\80¦ (λf. ð\9d\90\82â\9dªfâ\9d« ≘ n).
#n @eq_repl_sym /2 width=3 by fcla_eq_repl_back/
qed-.
(* Basic properties *********************************************************)
-lemma id_isid: ð\9d\90\88â¦\83ð\9d\90\88ð\9d\90\9dâ¦\84.
+lemma id_isid: ð\9d\90\88â\9dªð\9d\90\88ð\9d\90\9dâ\9d«.
/3 width=5 by eq_push_isid/ qed.
(* Alternative definition of isid *******************************************)
-lemma eq_id_isid: â\88\80f. ð\9d\90\88ð\9d\90\9d â\89¡ f â\86\92 ð\9d\90\88â¦\83fâ¦\84.
+lemma eq_id_isid: â\88\80f. ð\9d\90\88ð\9d\90\9d â\89¡ f â\86\92 ð\9d\90\88â\9dªfâ\9d«.
/2 width=3 by isid_eq_repl_back/ qed.
-lemma eq_id_inv_isid: â\88\80f. ð\9d\90\88â¦\83fâ¦\84 → 𝐈𝐝 ≡ f.
+lemma eq_id_inv_isid: â\88\80f. ð\9d\90\88â\9dªfâ\9d« → 𝐈𝐝 ≡ f.
/2 width=1 by isid_inv_eq_repl/ qed-.
(* Basic inversion lemmas ***************************************************)
-lemma isdiv_inv_gen: â\88\80g. ð\9d\9b\80â¦\83gâ¦\84 â\86\92 â\88\83â\88\83f. ð\9d\9b\80â¦\83fâ¦\84 & ↑f = g.
+lemma isdiv_inv_gen: â\88\80g. ð\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 inversion lemmas ************************************************)
-lemma isdiv_inv_next: â\88\80g. ð\9d\9b\80â¦\83gâ¦\84 â\86\92 â\88\80f. â\86\91f = g â\86\92 ð\9d\9b\80â¦\83fâ¦\84.
+lemma isdiv_inv_next: â\88\80g. ð\9d\9b\80â\9dªgâ\9d« â\86\92 â\88\80f. â\86\91f = g â\86\92 ð\9d\9b\80â\9dªfâ\9d«.
#g #H elim (isdiv_inv_gen … H) -H
#f #Hf * -g #g #H >(injective_next … H) -H //
qed-.
-lemma isdiv_inv_push: â\88\80g. ð\9d\9b\80â¦\83gâ¦\84 → ∀f. ⫯f = g → ⊥.
+lemma isdiv_inv_push: â\88\80g. ð\9d\9b\80â\9dªgâ\9d« → ∀f. ⫯f = g → ⊥.
#g #H elim (isdiv_inv_gen … H) -H
#f #Hf * -g #g #H elim (discr_push_next … H)
qed-.
(* Main inversion lemmas ****************************************************)
-corec theorem isdiv_inv_eq_repl: â\88\80f1,f2. ð\9d\9b\80â¦\83f1â¦\84 â\86\92 ð\9d\9b\80â¦\83f2â¦\84 → f1 ≡ f2.
+corec theorem isdiv_inv_eq_repl: â\88\80f1,f2. ð\9d\9b\80â\9dªf1â\9d« â\86\92 ð\9d\9b\80â\9dªf2â\9d« → f1 ≡ f2.
#f1 #f2 #H1 #H2
cases (isdiv_inv_gen … H1) -H1
cases (isdiv_inv_gen … H2) -H2
(* Alternative definition ***************************************************)
-corec lemma eq_next_isdiv: â\88\80f. â\86\91f â\89¡ f â\86\92 ð\9d\9b\80â¦\83fâ¦\84.
+corec lemma eq_next_isdiv: â\88\80f. â\86\91f â\89¡ f â\86\92 ð\9d\9b\80â\9dªfâ\9d«.
#f #H cases (eq_inv_nx … H) -H /4 width=3 by isdiv_next, eq_trans/
qed.
-corec lemma eq_next_inv_isdiv: â\88\80f. ð\9d\9b\80â¦\83fâ¦\84 → ↑f ≡ f.
+corec lemma eq_next_inv_isdiv: â\88\80f. ð\9d\9b\80â\9dªfâ\9d« → ↑f ≡ f.
#f * -f
#f #g #Hf #Hg @(eq_next … Hg) [2: @eq_next_inv_isdiv // | skip ]
@eq_f //
(* Properties with iterated next ********************************************)
-lemma isdiv_nexts: â\88\80n,f. ð\9d\9b\80â¦\83fâ¦\84 â\86\92 ð\9d\9b\80â¦\83â\86\91*[n]fâ¦\84.
+lemma isdiv_nexts: â\88\80n,f. ð\9d\9b\80â\9dªfâ\9d« â\86\92 ð\9d\9b\80â\9dªâ\86\91*[n]fâ\9d«.
#n elim n -n /3 width=3 by isdiv_next/
qed.
(* Inversion lemmas with iterated next **************************************)
-lemma isdiv_inv_nexts: â\88\80n,g. ð\9d\9b\80â¦\83â\86\91*[n]gâ¦\84 â\86\92 ð\9d\9b\80â¦\83gâ¦\84.
+lemma isdiv_inv_nexts: â\88\80n,g. ð\9d\9b\80â\9dªâ\86\91*[n]gâ\9d« â\86\92 ð\9d\9b\80â\9dªgâ\9d«.
#n elim n -n /3 width=3 by isdiv_inv_next/
qed.
(* Properties with tail *****************************************************)
-lemma isdiv_tl: â\88\80f. ð\9d\9b\80â¦\83fâ¦\84 â\86\92 ð\9d\9b\80â¦\83⫱fâ¦\84.
+lemma isdiv_tl: â\88\80f. ð\9d\9b\80â\9dªfâ\9d« â\86\92 ð\9d\9b\80â\9dªâ«±fâ\9d«.
#f cases (pn_split f) * #g * -f #H
[ elim (isdiv_inv_push … H) -H //
| /2 width=3 by isdiv_inv_next/
(* Properties with iterated tail ********************************************)
-lemma isdiv_tls: â\88\80n,g. ð\9d\9b\80â¦\83gâ¦\84 â\86\92 ð\9d\9b\80â¦\83⫱*[n]gâ¦\84.
+lemma isdiv_tls: â\88\80n,g. ð\9d\9b\80â\9dªgâ\9d« â\86\92 ð\9d\9b\80â\9dªâ«±*[n]gâ\9d«.
#n elim n -n /3 width=1 by isdiv_tl/
qed.
(* RELOCATION MAP ***********************************************************)
definition isfin: predicate rtmap ≝
- λf. â\88\83n. ð\9d\90\82â¦\83fâ¦\84 ≘ n.
+ λf. â\88\83n. ð\9d\90\82â\9dªfâ\9d« ≘ n.
interpretation "test for finite colength (rtmap)"
'IsFinite f = (isfin f).
(* Basic eliminators ********************************************************)
-lemma isfin_ind (R:predicate rtmap): (â\88\80f. ð\9d\90\88â¦\83fâ¦\84 → R f) →
- (â\88\80f. ð\9d\90\85â¦\83fâ¦\84 → R f → R (⫯f)) →
- (â\88\80f. ð\9d\90\85â¦\83fâ¦\84 → R f → R (↑f)) →
- â\88\80f. ð\9d\90\85â¦\83fâ¦\84 → R f.
+lemma isfin_ind (R:predicate rtmap): (â\88\80f. ð\9d\90\88â\9dªfâ\9d« → R f) →
+ (â\88\80f. ð\9d\90\85â\9dªfâ\9d« → R f → R (⫯f)) →
+ (â\88\80f. ð\9d\90\85â\9dªfâ\9d« → R f → R (↑f)) →
+ â\88\80f. ð\9d\90\85â\9dªfâ\9d« → R f.
#R #IH1 #IH2 #IH3 #f #H elim H -H
#n #H elim H -f -n /3 width=2 by ex_intro/
qed-.
(* Basic inversion lemmas ***************************************************)
-lemma isfin_inv_push: â\88\80g. ð\9d\90\85â¦\83gâ¦\84 â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\85â¦\83fâ¦\84.
+lemma isfin_inv_push: â\88\80g. ð\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 fcla_inv_px, ex_intro/
qed-.
-lemma isfin_inv_next: â\88\80g. ð\9d\90\85â¦\83gâ¦\84 â\86\92 â\88\80f. â\86\91f = g â\86\92 ð\9d\90\85â¦\83fâ¦\84.
+lemma isfin_inv_next: â\88\80g. ð\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 (fcla_inv_nx … H … H0) -g
/2 width=2 by ex_intro/
qed-.
lemma isfin_eq_repl_fwd: eq_repl_fwd … isfin.
/3 width=3 by isfin_eq_repl_back, eq_repl_sym/ qed-.
-lemma isfin_isid: â\88\80f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 ð\9d\90\85â¦\83fâ¦\84.
+lemma isfin_isid: â\88\80f. ð\9d\90\88â\9dªfâ\9d« â\86\92 ð\9d\90\85â\9dªfâ\9d«.
/3 width=2 by fcla_isid, ex_intro/ qed.
-lemma isfin_push: â\88\80f. ð\9d\90\85â¦\83fâ¦\84 â\86\92 ð\9d\90\85â¦\83⫯fâ¦\84.
+lemma isfin_push: â\88\80f. ð\9d\90\85â\9dªfâ\9d« â\86\92 ð\9d\90\85â\9dªâ«¯fâ\9d«.
#f * /3 width=2 by fcla_push, ex_intro/
qed.
-lemma isfin_next: â\88\80f. ð\9d\90\85â¦\83fâ¦\84 â\86\92 ð\9d\90\85â¦\83â\86\91fâ¦\84.
+lemma isfin_next: â\88\80f. ð\9d\90\85â\9dªfâ\9d« â\86\92 ð\9d\90\85â\9dªâ\86\91fâ\9d«.
#f * /3 width=2 by fcla_next, ex_intro/
qed.
(* Properties with iterated push ********************************************)
-lemma isfin_pushs: â\88\80n,f. ð\9d\90\85â¦\83fâ¦\84 â\86\92 ð\9d\90\85â¦\83⫯*[n]fâ¦\84.
+lemma isfin_pushs: â\88\80n,f. ð\9d\90\85â\9dªfâ\9d« â\86\92 ð\9d\90\85â\9dªâ«¯*[n]fâ\9d«.
#n elim n -n /3 width=3 by isfin_push/
qed.
(* Inversion lemmas with iterated push **************************************)
-lemma isfin_inv_pushs: â\88\80n,g. ð\9d\90\85â¦\83⫯*[n]gâ¦\84 â\86\92 ð\9d\90\85â¦\83gâ¦\84.
+lemma isfin_inv_pushs: â\88\80n,g. ð\9d\90\85â\9dªâ«¯*[n]gâ\9d« â\86\92 ð\9d\90\85â\9dªgâ\9d«.
#n elim n -n /3 width=3 by isfin_inv_push/
qed.
(* Properties with tail *****************************************************)
-lemma isfin_tl: â\88\80f. ð\9d\90\85â¦\83fâ¦\84 â\86\92 ð\9d\90\85â¦\83⫱fâ¦\84.
+lemma isfin_tl: â\88\80f. ð\9d\90\85â\9dªfâ\9d« â\86\92 ð\9d\90\85â\9dªâ«±fâ\9d«.
#f elim (pn_split f) * #g #H #Hf destruct
/3 width=3 by isfin_inv_push, isfin_inv_next/
qed.
(* Inversion lemmas with tail ***********************************************)
-lemma isfin_inv_tl: â\88\80f. ð\9d\90\85â¦\83⫱fâ¦\84 â\86\92 ð\9d\90\85â¦\83fâ¦\84.
+lemma isfin_inv_tl: â\88\80f. ð\9d\90\85â\9dªâ«±fâ\9d« â\86\92 ð\9d\90\85â\9dªfâ\9d«.
#f elim (pn_split f) * /2 width=1 by isfin_next, isfin_push/
qed-.
(* Inversion lemmas with iterated tail **************************************)
-lemma isfin_inv_tls: â\88\80n,f. ð\9d\90\85â¦\83⫱*[n]fâ¦\84 â\86\92 ð\9d\90\85â¦\83fâ¦\84.
+lemma isfin_inv_tls: â\88\80n,f. ð\9d\90\85â\9dªâ«±*[n]fâ\9d« â\86\92 ð\9d\90\85â\9dªfâ\9d«.
#n elim n -n /3 width=1 by isfin_inv_tl/
qed-.
(* Basic inversion lemmas ***************************************************)
-lemma isid_inv_gen: â\88\80g. ð\9d\90\88â¦\83gâ¦\84 â\86\92 â\88\83â\88\83f. ð\9d\90\88â¦\83fâ¦\84 & ⫯f = g.
+lemma isid_inv_gen: â\88\80g. ð\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 inversion lemmas ************************************************)
-lemma isid_inv_push: â\88\80g. ð\9d\90\88â¦\83gâ¦\84 â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\88â¦\83fâ¦\84.
+lemma isid_inv_push: â\88\80g. ð\9d\90\88â\9dªgâ\9d« â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\88â\9dªfâ\9d«.
#g #H elim (isid_inv_gen … H) -H
#f #Hf * -g #g #H >(injective_push … H) -H //
qed-.
-lemma isid_inv_next: â\88\80g. ð\9d\90\88â¦\83gâ¦\84 → ∀f. ↑f = g → ⊥.
+lemma isid_inv_next: â\88\80g. ð\9d\90\88â\9dªgâ\9d« → ∀f. ↑f = g → ⊥.
#g #H elim (isid_inv_gen … H) -H
#f #Hf * -g #g #H elim (discr_next_push … H)
qed-.
(* Main inversion lemmas ****************************************************)
-corec theorem isid_inv_eq_repl: â\88\80f1,f2. ð\9d\90\88â¦\83f1â¦\84 â\86\92 ð\9d\90\88â¦\83f2â¦\84 → f1 ≡ f2.
+corec theorem isid_inv_eq_repl: â\88\80f1,f2. ð\9d\90\88â\9dªf1â\9d« â\86\92 ð\9d\90\88â\9dªf2â\9d« → f1 ≡ f2.
#f1 #f2 #H1 #H2
cases (isid_inv_gen … H1) -H1
cases (isid_inv_gen … H2) -H2
(* Alternative definition ***************************************************)
-corec lemma eq_push_isid: â\88\80f. ⫯f â\89¡ f â\86\92 ð\9d\90\88â¦\83fâ¦\84.
+corec lemma eq_push_isid: â\88\80f. ⫯f â\89¡ f â\86\92 ð\9d\90\88â\9dªfâ\9d«.
#f #H cases (eq_inv_px … H) -H /4 width=3 by isid_push, eq_trans/
qed.
-corec lemma eq_push_inv_isid: â\88\80f. ð\9d\90\88â¦\83fâ¦\84 → ⫯f ≡ f.
+corec lemma eq_push_inv_isid: â\88\80f. ð\9d\90\88â\9dªfâ\9d« → ⫯f ≡ f.
#f * -f
#f #g #Hf #Hg @(eq_push … Hg) [2: @eq_push_inv_isid // | skip ]
@eq_f //
(* Properties with iterated push ********************************************)
-lemma isid_pushs: â\88\80n,f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 ð\9d\90\88â¦\83⫯*[n]fâ¦\84.
+lemma isid_pushs: â\88\80n,f. ð\9d\90\88â\9dªfâ\9d« â\86\92 ð\9d\90\88â\9dªâ«¯*[n]fâ\9d«.
#n elim n -n /3 width=3 by isid_push/
qed.
(* Inversion lemmas with iterated push **************************************)
-lemma isid_inv_pushs: â\88\80n,g. ð\9d\90\88â¦\83⫯*[n]gâ¦\84 â\86\92 ð\9d\90\88â¦\83gâ¦\84.
+lemma isid_inv_pushs: â\88\80n,g. ð\9d\90\88â\9dªâ«¯*[n]gâ\9d« â\86\92 ð\9d\90\88â\9dªgâ\9d«.
#n elim n -n /3 width=3 by isid_inv_push/
qed.
(* Properties with tail *****************************************************)
-lemma isid_tl: â\88\80f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 ð\9d\90\88â¦\83⫱fâ¦\84.
+lemma isid_tl: â\88\80f. ð\9d\90\88â\9dªfâ\9d« â\86\92 ð\9d\90\88â\9dªâ«±fâ\9d«.
#f cases (pn_split f) * #g * -f #H
[ /2 width=3 by isid_inv_push/
| elim (isid_inv_next … H) -H //
(* Properties with iterated tail ********************************************)
-lemma isid_tls: â\88\80n,g. ð\9d\90\88â¦\83gâ¦\84 â\86\92 ð\9d\90\88â¦\83⫱*[n]gâ¦\84.
+lemma isid_tls: â\88\80n,g. ð\9d\90\88â\9dªgâ\9d« â\86\92 ð\9d\90\88â\9dªâ«±*[n]gâ\9d«.
#n elim n -n /3 width=1 by isid_tl/
qed.
(* RELOCATION MAP ***********************************************************)
-definition istot: predicate rtmap â\89\9d λf. â\88\80i. â\88\83j. @â¦\83i,fâ¦\84 ≘ j.
+definition istot: predicate rtmap â\89\9d λf. â\88\80i. â\88\83j. @â\9dªi,fâ\9d« ≘ j.
interpretation "test for totality (rtmap)"
'IsTotal f = (istot f).
(* Basic inversion lemmas ***************************************************)
-lemma istot_inv_push: â\88\80g. ð\9d\90\93â¦\83gâ¦\84 â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\93â¦\83fâ¦\84.
+lemma istot_inv_push: â\88\80g. ð\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 (at_inv_npx … Hg … H) -Hg -H /2 width=3 by ex_intro/
qed-.
-lemma istot_inv_next: â\88\80g. ð\9d\90\93â¦\83gâ¦\84 â\86\92 â\88\80f. â\86\91f = g â\86\92 ð\9d\90\93â¦\83fâ¦\84.
+lemma istot_inv_next: â\88\80g. ð\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 (at_inv_xnx … Hg … H) -Hg -H /2 width=2 by ex_intro/
qed-.
(* Properties on tl *********************************************************)
-lemma istot_tl: â\88\80f. ð\9d\90\93â¦\83fâ¦\84 â\86\92 ð\9d\90\93â¦\83⫱fâ¦\84.
+lemma istot_tl: â\88\80f. ð\9d\90\93â\9dªfâ\9d« â\86\92 ð\9d\90\93â\9dªâ«±fâ\9d«.
#f cases (pn_split f) *
#g * -f /2 width=3 by istot_inv_next, istot_inv_push/
qed.
(* Properties on tls ********************************************************)
-lemma istot_tls: â\88\80n,f. ð\9d\90\93â¦\83fâ¦\84 â\86\92 ð\9d\90\93â¦\83⫱*[n]fâ¦\84.
+lemma istot_tls: â\88\80n,f. ð\9d\90\93â\9dªfâ\9d« â\86\92 ð\9d\90\93â\9dªâ«±*[n]fâ\9d«.
#n elim n -n /3 width=1 by istot_tl/
qed.
(* Main forward lemmas on at ************************************************)
-corec theorem at_ext: â\88\80f1,f2. ð\9d\90\93â¦\83f1â¦\84 â\86\92 ð\9d\90\93â¦\83f2â¦\84 →
- (â\88\80i,i1,i2. @â¦\83i,f1â¦\84 â\89\98 i1 â\86\92 @â¦\83i,f2â¦\84 ≘ i2 → i1 = i2) →
+corec theorem at_ext: â\88\80f1,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.
#f1 cases (pn_split f1) * #g1 #H1
#f2 cases (pn_split f2) * #g2 #H2
(* Advanced properties on at ************************************************)
-lemma at_dec: â\88\80f,i1,i2. ð\9d\90\93â¦\83fâ¦\84 â\86\92 Decidable (@â¦\83i1,fâ¦\84 ≘ i2).
+lemma at_dec: â\88\80f,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_nat_dec i2 j2)
[ #H destruct /2 width=1 by or_introl/
]
qed-.
-lemma is_at_dec_le: â\88\80f,i2,i. ð\9d\90\93â¦\83fâ¦\84 â\86\92 (â\88\80i1. i1 + i â\89¤ i2 â\86\92 @â¦\83i1,fâ¦\84 ≘ i2 → ⊥) →
- Decidable (â\88\83i1. @â¦\83i1,fâ¦\84 ≘ i2).
+lemma is_at_dec_le: â\88\80f,i2,i. ð\9d\90\93â\9dªfâ\9d« â\86\92 (â\88\80i1. i1 + i â\89¤ i2 â\86\92 @â\9dªi1,fâ\9d« ≘ i2 → ⊥) →
+ Decidable (â\88\83i1. @â\9dªi1,fâ\9d« ≘ i2).
#f #i2 #i #Hf elim i -i
[ #Ht @or_intror * /3 width=3 by at_increasing/
| #i #IH #Ht elim (at_dec f (i2-i) i2) /3 width=2 by ex_intro, or_introl/
]
qed-.
-lemma is_at_dec: â\88\80f,i2. ð\9d\90\93â¦\83fâ¦\84 â\86\92 Decidable (â\88\83i1. @â¦\83i1,fâ¦\84 ≘ i2).
+lemma is_at_dec: â\88\80f,i2. ð\9d\90\93â\9dªfâ\9d« â\86\92 Decidable (â\88\83i1. @â\9dªi1,fâ\9d« ≘ i2).
#f #i2 #Hf @(is_at_dec_le ?? (↑i2)) /2 width=4 by lt_le_false/
qed-.
(* Advanced properties on isid **********************************************)
-lemma isid_at_total: â\88\80f. ð\9d\90\93â¦\83fâ¦\84 â\86\92 (â\88\80i1,i2. @â¦\83i1,fâ¦\84 â\89\98 i2 â\86\92 i1 = i2) â\86\92 ð\9d\90\88â¦\83fâ¦\84.
+lemma isid_at_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 @isid_at
#i lapply (H1f i) -H1f *
#j #Hf >(H2f … Hf) in ⊢ (???%); -H2f //
(* RELOCATION MAP ***********************************************************)
inductive isuni: predicate rtmap ≝
-| isuni_isid: â\88\80f. ð\9d\90\88â¦\83fâ¦\84 → isuni f
+| isuni_isid: â\88\80f. ð\9d\90\88â\9dªfâ\9d« → isuni f
| isuni_next: ∀f. isuni f → ∀g. ↑f = g → isuni g
.
(* Basic inversion lemmas ***************************************************)
-lemma isuni_inv_push: â\88\80g. ð\9d\90\94â¦\83gâ¦\84 â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\88â¦\83fâ¦\84.
+lemma isuni_inv_push: â\88\80g. ð\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 isid_inv_push/
#f #_ #g #H #x #Hx destruct elim (discr_push_next … Hx)
qed-.
-lemma isuni_inv_next: â\88\80g. ð\9d\90\94â¦\83gâ¦\84 â\86\92 â\88\80f. â\86\91f = g â\86\92 ð\9d\90\94â¦\83fâ¦\84.
+lemma isuni_inv_next: â\88\80g. ð\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 (isid_inv_next … Hf … Hx)
| #g #H #x #Hx destruct /2 width=1 by injective_push/
]
qed-.
-lemma isuni_split: â\88\80g. ð\9d\90\94â¦\83gâ¦\84 â\86\92 (â\88\83â\88\83f. ð\9d\90\88â¦\83fâ¦\84 & ⫯f = g) â\88¨ (â\88\83â\88\83f.ð\9d\90\94â¦\83fâ¦\84 & ↑f = g).
+lemma isuni_split: â\88\80g. ð\9d\90\94â\9dªgâ\9d« â\86\92 (â\88\83â\88\83f. ð\9d\90\88â\9dªfâ\9d« & ⫯f = g) â\88¨ (â\88\83â\88\83f.ð\9d\90\94â\9dªfâ\9d« & ↑f = g).
#g #H elim (pn_split g) * #f #Hf
/4 width=3 by isuni_inv_next, isuni_inv_push, or_introl, or_intror, ex2_intro/
qed-.
(* basic forward lemmas *****************************************************)
-lemma isuni_fwd_push: â\88\80g. ð\9d\90\94â¦\83gâ¦\84 â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\94â¦\83fâ¦\84.
+lemma isuni_fwd_push: â\88\80g. ð\9d\90\94â\9dªgâ\9d« â\86\92 â\88\80f. ⫯f = g â\86\92 ð\9d\90\94â\9dªfâ\9d«.
/3 width=3 by isuni_inv_push, isuni_isid/ qed-.
(* Forward lemmas with test for finite colength *****************************)
-lemma isuni_fwd_isfin: â\88\80f. ð\9d\90\94â¦\83fâ¦\84 â\86\92 ð\9d\90\85â¦\83fâ¦\84.
+lemma isuni_fwd_isfin: â\88\80f. ð\9d\90\94â\9dªfâ\9d« â\86\92 ð\9d\90\85â\9dªfâ\9d«.
#f #H elim H -f /3 width=1 by isfin_next, isfin_isid/
qed-.
(* Properties with isid *****************************************************)
-corec lemma sdj_isid_dx: â\88\80f2. ð\9d\90\88â¦\83f2â¦\84 → ∀f1. f1 ∥ f2.
+corec lemma sdj_isid_dx: â\88\80f2. ð\9d\90\88â\9dªf2â\9d« → ∀f1. f1 ∥ f2.
#f2 * -f2
#f2 #g2 #Hf2 #H2 #f1 cases (pn_split f1) *
/3 width=5 by sdj_np, sdj_pp/
qed.
-corec lemma sdj_isid_sn: â\88\80f1. ð\9d\90\88â¦\83f1â¦\84 → ∀f2. f1 ∥ f2.
+corec lemma sdj_isid_sn: â\88\80f1. ð\9d\90\88â\9dªf1â\9d« → ∀f2. f1 ∥ f2.
#f1 * -f1
#f1 #g1 #Hf1 #H1 #f2 cases (pn_split f2) *
/3 width=5 by sdj_pn, sdj_pp/
(* Inversion lemmas with isid ***********************************************)
-corec lemma sdj_inv_refl: â\88\80f. f â\88¥ f â\86\92 ð\9d\90\88â¦\83fâ¦\84.
+corec lemma sdj_inv_refl: â\88\80f. f â\88¥ f â\86\92 ð\9d\90\88â\9dªfâ\9d«.
#f cases (pn_split f) * #g #Hg #H
[ lapply (sdj_inv_pp … H … Hg Hg) -H /3 width=3 by isid_push/
| elim (sdj_inv_nn … H … Hg Hg)
(* Properties with isid *****************************************************)
-corec lemma sle_isid_sn: â\88\80f1. ð\9d\90\88â¦\83f1â¦\84 → ∀f2. f1 ⊆ f2.
+corec lemma sle_isid_sn: â\88\80f1. ð\9d\90\88â\9dªf1â\9d« → ∀f2. f1 ⊆ f2.
#f1 * -f1
#f1 #g1 #Hf1 #H1 #f2 cases (pn_split f2) *
/3 width=5 by sle_weak, sle_push/
(* Inversion lemmas with isid ***********************************************)
-corec lemma sle_inv_isid_dx: â\88\80f1,f2. f1 â\8a\86 f2 â\86\92 ð\9d\90\88â¦\83f2â¦\84 â\86\92 ð\9d\90\88â¦\83f1â¦\84.
+corec lemma sle_inv_isid_dx: â\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 (isid_inv_next … H) // ]
(* Properties with isdiv ****************************************************)
-corec lemma sle_isdiv_dx: â\88\80f2. ð\9d\9b\80â¦\83f2â¦\84 → ∀f1. f1 ⊆ f2.
+corec lemma sle_isdiv_dx: â\88\80f2. ð\9d\9b\80â\9dªf2â\9d« → ∀f1. f1 ⊆ f2.
#f2 * -f2
#f2 #g2 #Hf2 #H2 #f1 cases (pn_split f1) *
/3 width=5 by sle_weak, sle_next/
(* Inversion lemmas with isdiv **********************************************)
-corec lemma sle_inv_isdiv_sn: â\88\80f1,f2. f1 â\8a\86 f2 â\86\92 ð\9d\9b\80â¦\83f1â¦\84 â\86\92 ð\9d\9b\80â¦\83f2â¦\84.
+corec lemma sle_inv_isdiv_sn: â\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 (isdiv_inv_push … H) // ]
(* Properies with test for identity *****************************************)
-corec lemma sor_isid_sn: â\88\80f1. ð\9d\90\88â¦\83f1â¦\84 → ∀f2. f1 ⋓ f2 ≘ f2.
+corec lemma sor_isid_sn: â\88\80f1. ð\9d\90\88â\9dªf1â\9d« → ∀f2. f1 ⋓ f2 ≘ f2.
#f1 * -f1
#f1 #g1 #Hf1 #H1 #f2 cases (pn_split f2) *
/3 width=7 by sor_pp, sor_pn/
qed.
-corec lemma sor_isid_dx: â\88\80f2. ð\9d\90\88â¦\83f2â¦\84 → ∀f1. f1 ⋓ f2 ≘ f1.
+corec lemma sor_isid_dx: â\88\80f2. ð\9d\90\88â\9dªf2â\9d« → ∀f1. f1 ⋓ f2 ≘ f1.
#f2 * -f2
#f2 #g2 #Hf2 #H2 #f1 cases (pn_split f1) *
/3 width=7 by sor_pp, sor_np/
qed.
-lemma sor_isid: â\88\80f1,f2,f. ð\9d\90\88â¦\83f1â¦\84 â\86\92 ð\9d\90\88â¦\83f2â¦\84 â\86\92 ð\9d\90\88â¦\83fâ¦\84 → f1 ⋓ f2 ≘ f.
+lemma sor_isid: â\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 sor_eq_repl_back2, sor_eq_repl_back1, isid_inv_eq_repl/ qed.
(* Inversion lemmas with tail ***********************************************)
(* Inversion lemmas with test for identity **********************************)
-lemma sor_isid_inv_sn: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\88â¦\83f1â¦\84 → f2 ≡ f.
+lemma sor_isid_inv_sn: â\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 sor_isid_sn, sor_mono/
qed-.
-lemma sor_isid_inv_dx: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\88â¦\83f2â¦\84 → f1 ≡ f.
+lemma sor_isid_inv_dx: â\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 sor_isid_dx, sor_mono/
qed-.
-corec lemma sor_fwd_isid1: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\88â¦\83fâ¦\84 â\86\92 ð\9d\90\88â¦\83f1â¦\84.
+corec lemma sor_fwd_isid1: â\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 isid_inv_push, isid_push/ ]
cases (isid_inv_next … Hg … H)
qed-.
-corec lemma sor_fwd_isid2: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\88â¦\83fâ¦\84 â\86\92 ð\9d\90\88â¦\83f2â¦\84.
+corec lemma sor_fwd_isid2: â\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 isid_inv_push, isid_push/ ]
cases (isid_inv_next … Hg … H)
qed-.
-lemma sor_inv_isid3: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\88â¦\83fâ¦\84 â\86\92 ð\9d\90\88â¦\83f1â¦\84 â\88§ ð\9d\90\88â¦\83f2â¦\84.
+lemma sor_inv_isid3: â\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§ ð\9d\90\88â\9dªf2â\9d«.
/3 width=4 by sor_fwd_isid2, sor_fwd_isid1, conj/ qed-.
(* Properties with finite colength assignment *******************************)
-lemma sor_fcla_ex: â\88\80f1,n1. ð\9d\90\82â¦\83f1â¦\84 â\89\98 n1 â\86\92 â\88\80f2,n2. ð\9d\90\82â¦\83f2â¦\84 ≘ n2 →
- â\88\83â\88\83f,n. f1 â\8b\93 f2 â\89\98 f & ð\9d\90\82â¦\83fâ¦\84 ≘ n & (n1 ∨ n2) ≤ n & n ≤ n1 + n2.
+lemma sor_fcla_ex: â\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 sor_isid_sn, ex4_2_intro/
#f1 #n1 #Hf1 #IH #f2 #n2 * -f2 -n2 /3 width=6 by fcla_push, fcla_next, ex4_2_intro, sor_isid_dx/
#f2 #n2 #Hf2 elim (IH … Hf2) -IH -Hf2 -Hf1 [2,4: #f #n <plus_n_Sm ] (**) (* full auto fails *)
]
qed-.
-lemma sor_fcla: â\88\80f1,n1. ð\9d\90\82â¦\83f1â¦\84 â\89\98 n1 â\86\92 â\88\80f2,n2. ð\9d\90\82â¦\83f2â¦\84 ≘ n2 → ∀f. f1 ⋓ f2 ≘ f →
- â\88\83â\88\83n. ð\9d\90\82â¦\83fâ¦\84 ≘ n & (n1 ∨ n2) ≤ n & n ≤ n1 + n2.
+lemma sor_fcla: â\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 (sor_fcla_ex … Hf1 … Hf2) -Hf1 -Hf2
/4 width=6 by sor_mono, fcla_eq_repl_back, ex3_intro/
qed-.
(* Forward lemmas with finite colength **************************************)
-lemma sor_fwd_fcla_sn_ex: â\88\80f,n. ð\9d\90\82â¦\83fâ¦\84 ≘ n → ∀f1,f2. f1 ⋓ f2 ≘ f →
- â\88\83â\88\83n1. ð\9d\90\82â¦\83f1â¦\84 ≘ n1 & n1 ≤ n.
+lemma sor_fwd_fcla_sn_ex: â\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 sor_fwd_isid1, fcla_isid, ex2_intro/
| #f #n #_ #IH #f1 #f2 #H
]
qed-.
-lemma sor_fwd_fcla_dx_ex: â\88\80f,n. ð\9d\90\82â¦\83fâ¦\84 ≘ n → ∀f1,f2. f1 ⋓ f2 ≘ f →
- â\88\83â\88\83n2. ð\9d\90\82â¦\83f2â¦\84 ≘ n2 & n2 ≤ n.
+lemma sor_fwd_fcla_dx_ex: â\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 sor_fwd_fcla_sn_ex, sor_comm/ qed-.
(* Properties with test for finite colength *********************************)
-lemma sor_isfin_ex: â\88\80f1,f2. ð\9d\90\85â¦\83f1â¦\84 â\86\92 ð\9d\90\85â¦\83f2â¦\84 â\86\92 â\88\83â\88\83f. f1 â\8b\93 f2 â\89\98 f & ð\9d\90\85â¦\83fâ¦\84.
+lemma sor_isfin_ex: â\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 (sor_fcla_ex … H1 … H2) -H1 -H2
/3 width=4 by ex2_intro, ex_intro/
qed-.
-lemma sor_isfin: â\88\80f1,f2. ð\9d\90\85â¦\83f1â¦\84 â\86\92 ð\9d\90\85â¦\83f2â¦\84 â\86\92 â\88\80f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\85â¦\83fâ¦\84.
+lemma sor_isfin: â\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 (sor_isfin_ex … Hf1 … Hf2) -Hf1 -Hf2
/3 width=6 by sor_mono, isfin_eq_repl_back/
qed-.
(* Forward lemmas with test for finite colength *****************************)
-lemma sor_fwd_isfin_sn: â\88\80f. ð\9d\90\85â¦\83fâ¦\84 â\86\92 â\88\80f1,f2. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\85â¦\83f1â¦\84.
+lemma sor_fwd_isfin_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«.
#f * #n #Hf #f1 #f2 #H
elim (sor_fwd_fcla_sn_ex … Hf … H) -f -f2 /2 width=2 by ex_intro/
qed-.
-lemma sor_fwd_isfin_dx: â\88\80f. ð\9d\90\85â¦\83fâ¦\84 â\86\92 â\88\80f1,f2. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\85â¦\83f2â¦\84.
+lemma sor_fwd_isfin_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«.
#f * #n #Hf #f1 #f2 #H
elim (sor_fwd_fcla_dx_ex … Hf … H) -f -f1 /2 width=2 by ex_intro/
qed-.
(* Inversion lemmas with test for finite colength ***************************)
-lemma sor_inv_isfin3: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\85â¦\83fâ¦\84 â\86\92 ð\9d\90\85â¦\83f1â¦\84 â\88§ ð\9d\90\85â¦\83f2â¦\84.
+lemma sor_inv_isfin3: â\88\80f1,f2,f. f1 â\8b\93 f2 â\89\98 f â\86\92 ð\9d\90\85â\9dªfâ\9d« â\86\92 ð\9d\90\85â\9dªf1â\9d« â\88§ ð\9d\90\85â\9dªf2â\9d«.
/3 width=4 by sor_fwd_isfin_dx, sor_fwd_isfin_sn, conj/ qed-.
(* Inversion lemmas with inclusion ******************************************)
(* Basic properties *********************************************************)
-lemma uni_zero: ð\9d\90\88ð\9d\90\9d = ð\9d\90\94â\9d´0â\9dµ.
+lemma uni_zero: ð\9d\90\88ð\9d\90\9d = ð\9d\90\94â\9d¨0â\9d©.
// qed.
-lemma uni_succ: â\88\80n. â\86\91ð\9d\90\94â\9d´nâ\9dµ = ð\9d\90\94â\9d´â\86\91nâ\9dµ.
+lemma uni_succ: â\88\80n. â\86\91ð\9d\90\94â\9d¨nâ\9d© = ð\9d\90\94â\9d¨â\86\91nâ\9d©.
// qed.
(* Basic inversion lemmas ***************************************************)
-lemma uni_inv_push_dx: â\88\80f,n. ð\9d\90\94â\9d´nâ\9dµ ≡ ⫯f → 0 = n ∧ 𝐈𝐝 ≡ f.
+lemma uni_inv_push_dx: â\88\80f,n. ð\9d\90\94â\9d¨nâ\9d© ≡ ⫯f → 0 = n ∧ 𝐈𝐝 ≡ f.
#f * /3 width=5 by eq_inv_pp, conj/
#n <uni_succ #H elim (eq_inv_np … H) -H //
qed-.
-lemma uni_inv_push_sn: â\88\80f,n. ⫯f â\89¡ ð\9d\90\94â\9d´nâ\9dµ → 0 = n ∧ 𝐈𝐝 ≡ f.
+lemma uni_inv_push_sn: â\88\80f,n. ⫯f â\89¡ ð\9d\90\94â\9d¨nâ\9d© → 0 = n ∧ 𝐈𝐝 ≡ f.
/3 width=1 by uni_inv_push_dx, eq_sym/ qed-.
-lemma uni_inv_id_dx: â\88\80n. ð\9d\90\94â\9d´nâ\9dµ ≡ 𝐈𝐝 → 0 = n.
+lemma uni_inv_id_dx: â\88\80n. ð\9d\90\94â\9d¨nâ\9d© ≡ 𝐈𝐝 → 0 = n.
#n <id_rew #H elim (uni_inv_push_dx … H) -H //
qed-.
-lemma uni_inv_id_sn: â\88\80n. ð\9d\90\88ð\9d\90\9d â\89¡ ð\9d\90\94â\9d´nâ\9dµ → 0 = n.
+lemma uni_inv_id_sn: â\88\80n. ð\9d\90\88ð\9d\90\9d â\89¡ ð\9d\90\94â\9d¨nâ\9d© → 0 = n.
/3 width=1 by uni_inv_id_dx, eq_sym/ qed-.
-lemma uni_inv_next_dx: â\88\80f,n. ð\9d\90\94â\9d´nâ\9dµ â\89¡ â\86\91f â\86\92 â\88\83â\88\83m. ð\9d\90\94â\9d´mâ\9dµ ≡ f & ↑m = n.
+lemma uni_inv_next_dx: â\88\80f,n. ð\9d\90\94â\9d¨nâ\9d© â\89¡ â\86\91f â\86\92 â\88\83â\88\83m. ð\9d\90\94â\9d¨mâ\9d© ≡ f & ↑m = n.
#f *
[ <uni_zero <id_rew #H elim (eq_inv_pn … H) -H //
| #n <uni_succ /3 width=5 by eq_inv_nn, ex2_intro/
]
qed-.
-lemma uni_inv_next_sn: â\88\80f,n. â\86\91f â\89¡ ð\9d\90\94â\9d´nâ\9dµ â\86\92 â\88\83â\88\83m. ð\9d\90\94â\9d´mâ\9dµ ≡ f & ↑m = n.
+lemma uni_inv_next_sn: â\88\80f,n. â\86\91f â\89¡ ð\9d\90\94â\9d¨nâ\9d© â\86\92 â\88\83â\88\83m. ð\9d\90\94â\9d¨mâ\9d© ≡ f & ↑m = n.
/3 width=1 by uni_inv_next_dx, eq_sym/ qed-.
(* Properties with test for identity ****************************************)
-lemma uni_isid: â\88\80f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 ð\9d\90\94â\9d´0â\9dµ ≡ f.
+lemma uni_isid: â\88\80f. ð\9d\90\88â\9dªfâ\9d« â\86\92 ð\9d\90\94â\9d¨0â\9d© ≡ f.
/2 width=1 by eq_id_inv_isid/ qed-.
(* Inversion lemmas with test for identity **********************************)
-lemma uni_inv_isid: â\88\80f. ð\9d\90\94â\9d´0â\9dµ â\89¡ f â\86\92 ð\9d\90\88â¦\83fâ¦\84.
+lemma uni_inv_isid: â\88\80f. ð\9d\90\94â\9d¨0â\9d© â\89¡ f â\86\92 ð\9d\90\88â\9dªfâ\9d«.
/2 width=1 by eq_id_isid/ qed-.
(* Properties with finite colength assignment ***************************)
-lemma fcla_uni: â\88\80n. ð\9d\90\82â¦\83ð\9d\90\94â\9d´nâ\9dµâ¦\84 ≘ n.
+lemma fcla_uni: â\88\80n. ð\9d\90\82â\9dªð\9d\90\94â\9d¨nâ\9d©â\9d« ≘ n.
#n elim n -n /2 width=1 by fcla_isid, fcla_next/
qed.
(* Properties with test for finite colength ***************************)
-lemma isfin_uni: â\88\80n. ð\9d\90\85â¦\83ð\9d\90\94â\9d´nâ\9dµâ¦\84.
+lemma isfin_uni: â\88\80n. ð\9d\90\85â\9dªð\9d\90\94â\9d¨nâ\9d©â\9d«.
/3 width=2 by ex_intro/ qed.
(* Properties with test for uniformity **************************************)
-lemma isuni_uni: â\88\80n. ð\9d\90\94â¦\83ð\9d\90\94â\9d´nâ\9dµâ¦\84.
+lemma isuni_uni: â\88\80n. ð\9d\90\94â\9dªð\9d\90\94â\9d¨nâ\9d©â\9d«.
#n elim n -n /3 width=3 by isuni_isid, isuni_next/
qed.
-lemma uni_isuni: â\88\80f. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\88\83n. ð\9d\90\94â\9d´nâ\9dµ ≡ f.
+lemma uni_isuni: â\88\80f. ð\9d\90\94â\9dªfâ\9d« â\86\92 â\88\83n. ð\9d\90\94â\9d¨nâ\9d© ≡ f.
#f #H elim H -f /3 width=2 by uni_isid, ex_intro/
#f #_ #g #H * /3 width=6 by eq_next, ex_intro/
qed-.
(* Inversion lemmas with test for uniformity ********************************)
-lemma uni_inv_isuni: â\88\80n,f. ð\9d\90\94â\9d´nâ\9dµ â\89¡ f â\86\92 ð\9d\90\94â¦\83fâ¦\84.
+lemma uni_inv_isuni: â\88\80n,f. ð\9d\90\94â\9d¨nâ\9d© â\89¡ f â\86\92 ð\9d\90\94â\9dªfâ\9d«.
#n elim n -n /3 width=1 by uni_inv_isid, isuni_isid/
#n #IH #x <uni_succ #H elim (eq_inv_nx … H) -H /3 width=3 by isuni_next/
qed-.
(* Basic properties *********************************************************)
-lemma isr_00: ð\9d\90\91ð\9d\90\93â¦\830,ð\9d\9f\98ð\9d\9f\98â¦\84.
+lemma isr_00: ð\9d\90\91ð\9d\90\93â\9dª0,ð\9d\9f\98ð\9d\9f\98â\9d«.
/2 width=3 by ex1_2_intro/ qed.
-lemma isr_10: ð\9d\90\91ð\9d\90\93â¦\830,ð\9d\9f\99ð\9d\9f\98â¦\84.
+lemma isr_10: ð\9d\90\91ð\9d\90\93â\9dª0,ð\9d\9f\99ð\9d\9f\98â\9d«.
/2 width=3 by ex1_2_intro/ qed.
-lemma isrt_01: ð\9d\90\91ð\9d\90\93â¦\831,ð\9d\9f\98ð\9d\9f\99â¦\84.
+lemma isrt_01: ð\9d\90\91ð\9d\90\93â\9dª1,ð\9d\9f\98ð\9d\9f\99â\9d«.
/2 width=3 by ex1_2_intro/ qed.
-lemma isrt_eq_t_trans: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â¦\83n,c1â¦\84 â\86\92 eq_t c1 c2 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83n,c2â¦\84.
+lemma isrt_eq_t_trans: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â\9dªn,c1â\9d« â\86\92 eq_t c1 c2 â\86\92 ð\9d\90\91ð\9d\90\93â\9dªn,c2â\9d«.
#n #c1 #c2 * #ri1 #rs1 #H destruct
#H elim (eq_t_inv_dx … H) -H /2 width=3 by ex1_2_intro/
qed-.
(* Basic inversion properties ***********************************************)
-lemma isrt_inv_00: â\88\80n. ð\9d\90\91ð\9d\90\93â¦\83n,ð\9d\9f\98ð\9d\9f\98â¦\84 → 0 = n.
+lemma isrt_inv_00: â\88\80n. ð\9d\90\91ð\9d\90\93â\9dªn,ð\9d\9f\98ð\9d\9f\98â\9d« → 0 = n.
#n * #ri #rs #H destruct //
qed-.
-lemma isrt_inv_10: â\88\80n. ð\9d\90\91ð\9d\90\93â¦\83n,ð\9d\9f\99ð\9d\9f\98â¦\84 → 0 = n.
+lemma isrt_inv_10: â\88\80n. ð\9d\90\91ð\9d\90\93â\9dªn,ð\9d\9f\99ð\9d\9f\98â\9d« → 0 = n.
#n * #ri #rs #H destruct //
qed-.
-lemma isrt_inv_01: â\88\80n. ð\9d\90\91ð\9d\90\93â¦\83n,ð\9d\9f\98ð\9d\9f\99â¦\84 → 1 = n.
+lemma isrt_inv_01: â\88\80n. ð\9d\90\91ð\9d\90\93â\9dªn,ð\9d\9f\98ð\9d\9f\99â\9d« → 1 = n.
#n * #ri #rs #H destruct //
qed-.
(* Main inversion properties ************************************************)
-theorem isrt_inj: â\88\80n1,n2,c. ð\9d\90\91ð\9d\90\93â¦\83n1,câ¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83n2,câ¦\84 → n1 = n2.
+theorem isrt_inj: â\88\80n1,n2,c. ð\9d\90\91ð\9d\90\93â\9dªn1,câ\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dªn2,câ\9d« → n1 = n2.
#n1 #n2 #c * #ri1 #rs1 #H1 * #ri2 #rs2 #H2 destruct //
qed-.
-theorem isrt_mono: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â¦\83n,c1â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83n,c2â¦\84 → eq_t c1 c2.
+theorem isrt_mono: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â\9dªn,c1â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dªn,c2â\9d« → eq_t c1 c2.
#n #c1 #c2 * #ri1 #rs1 #H1 * #ri2 #rs2 #H2 destruct //
qed-.
(* Basic properties *********************************************************)
-lemma isr_00: ð\9d\90\93â¦\830,ð\9d\9f\98ð\9d\9f\98â¦\84.
+lemma isr_00: ð\9d\90\93â\9dª0,ð\9d\9f\98ð\9d\9f\98â\9d«.
// qed.
-lemma ist_01: ð\9d\90\93â¦\831,ð\9d\9f\98ð\9d\9f\99â¦\84.
+lemma ist_01: ð\9d\90\93â\9dª1,ð\9d\9f\98ð\9d\9f\99â\9d«.
// qed.
(* Basic inversion properties ***********************************************)
-lemma ist_inv_00: â\88\80n. ð\9d\90\93â¦\83n,ð\9d\9f\98ð\9d\9f\98â¦\84 → 0 = n.
+lemma ist_inv_00: â\88\80n. ð\9d\90\93â\9dªn,ð\9d\9f\98ð\9d\9f\98â\9d« → 0 = n.
#n #H destruct //
qed-.
-lemma ist_inv_01: â\88\80n. ð\9d\90\93â¦\83n,ð\9d\9f\98ð\9d\9f\99â¦\84 → 1 = n.
+lemma ist_inv_01: â\88\80n. ð\9d\90\93â\9dªn,ð\9d\9f\98ð\9d\9f\99â\9d« → 1 = n.
#n #H destruct //
qed-.
-lemma ist_inv_10: â\88\80n. ð\9d\90\93â¦\83n,ð\9d\9f\99ð\9d\9f\98â¦\84 → ⊥.
+lemma ist_inv_10: â\88\80n. ð\9d\90\93â\9dªn,ð\9d\9f\99ð\9d\9f\98â\9d« → ⊥.
#h #H destruct
qed-.
(* Main inversion properties ************************************************)
-theorem ist_inj: â\88\80n1,n2,c. ð\9d\90\93â¦\83n1,câ¦\84 â\86\92 ð\9d\90\93â¦\83n2,câ¦\84 → n1 = n2.
+theorem ist_inj: â\88\80n1,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 ist_mono: â\88\80n,c1,c2. ð\9d\90\93â¦\83n,c1â¦\84 â\86\92 ð\9d\90\93â¦\83n,c2â¦\84 → c1 = c2.
+theorem ist_mono: â\88\80n,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-.
(* Properties with test for t-transition counter ****************************)
-lemma ist_max: â\88\80n1,n2,c1,c2. ð\9d\90\93â¦\83n1,c1â¦\84 â\86\92 ð\9d\90\93â¦\83n2,c2â¦\84 â\86\92 ð\9d\90\93â¦\83n1â\88¨n2,c1â\88¨c2â¦\84.
+lemma ist_max: â\88\80n1,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 ist_max_O1: â\88\80n,c1,c2. ð\9d\90\93â¦\830,c1â¦\84 â\86\92 ð\9d\90\93â¦\83n,c2â¦\84 â\86\92 ð\9d\90\93â¦\83n,c1â\88¨c2â¦\84.
+lemma ist_max_O1: â\88\80n,c1,c2. ð\9d\90\93â\9dª0,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 ist_max/ qed.
-lemma ist_max_O2: â\88\80n,c1,c2. ð\9d\90\93â¦\83n,c1â¦\84 â\86\92 ð\9d\90\93â¦\830,c2â¦\84 â\86\92 ð\9d\90\93â¦\83n,c1â\88¨c2â¦\84.
+lemma ist_max_O2: â\88\80n,c1,c2. ð\9d\90\93â\9dªn,c1â\9d« â\86\92 ð\9d\90\93â\9dª0,c2â\9d« â\86\92 ð\9d\90\93â\9dªn,c1â\88¨c2â\9d«.
#n #c1 #c2 #H1 #H2 >(max_O2 n) /2 width=1 by ist_max/
qed.
-lemma ist_max_idem1: â\88\80n,c1,c2. ð\9d\90\93â¦\83n,c1â¦\84 â\86\92 ð\9d\90\93â¦\83n,c2â¦\84 â\86\92 ð\9d\90\93â¦\83n,c1â\88¨c2â¦\84.
+lemma ist_max_idem1: â\88\80n,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 >(idempotent_max n) /2 width=1 by ist_max/
qed.
(* Inversion properties with test for t-transition counter ******************)
lemma ist_inv_max:
- â\88\80n,c1,c2. ð\9d\90\93â¦\83n,c1 â\88¨ c2â¦\84 →
- â\88\83â\88\83n1,n2. ð\9d\90\93â¦\83n1,c1â¦\84 & ð\9d\90\93â¦\83n2,c2â¦\84 & (n1 ∨ n2) = n.
+ â\88\80n,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 (max_inv_dx … H) -H #ri1 #rs1 #ti1 #ts1 #ri2 #rs2 #ti2 #ts2 #H1 #H2 #H3 #H4 #H5 #H6 destruct
elim (max_inv_O3 … H1) -H1 #H11 #H12 destruct
/2 width=5 by ex3_2_intro/
qed-.
-lemma ist_O_inv_max: â\88\80c1,c2. ð\9d\90\93â¦\830,c1 â\88¨ c2â¦\84 â\86\92 â\88§â\88§ ð\9d\90\93â¦\830,c1â¦\84 & ð\9d\90\93â¦\830,c2â¦\84.
+lemma ist_O_inv_max: â\88\80c1,c2. ð\9d\90\93â\9dª0,c1 â\88¨ c2â\9d« â\86\92 â\88§â\88§ ð\9d\90\93â\9dª0,c1â\9d« & ð\9d\90\93â\9dª0,c2â\9d«.
#c1 #c2 #H
elim (ist_inv_max … H) -H #n1 #n2 #Hn1 #Hn2 #H
elim (max_inv_O3 … H) -H #H1 #H2 destruct
/2 width=1 by conj/
qed-.
-lemma ist_inv_max_O_dx: â\88\80n,c1,c2. ð\9d\90\93â¦\83n,c1 â\88¨ c2â¦\84 â\86\92 ð\9d\90\93â¦\830,c2â¦\84 â\86\92 ð\9d\90\93â¦\83n,c1â¦\84.
+lemma ist_inv_max_O_dx: â\88\80n,c1,c2. ð\9d\90\93â\9dªn,c1 â\88¨ c2â\9d« â\86\92 ð\9d\90\93â\9dª0,c2â\9d« â\86\92 ð\9d\90\93â\9dªn,c1â\9d«.
#n #c1 #c2 #H #H2
elim (ist_inv_max … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct //
qed-.
(* Properties with test for t-transition counter ****************************)
-lemma ist_plus: â\88\80n1,n2,c1,c2. ð\9d\90\93â¦\83n1,c1â¦\84 â\86\92 ð\9d\90\93â¦\83n2,c2â¦\84 â\86\92 ð\9d\90\93â¦\83n1+n2,c1+c2â¦\84.
+lemma ist_plus: â\88\80n1,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 ist_plus_O1: â\88\80n,c1,c2. ð\9d\90\93â¦\830,c1â¦\84 â\86\92 ð\9d\90\93â¦\83n,c2â¦\84 â\86\92 ð\9d\90\93â¦\83n,c1+c2â¦\84.
+lemma ist_plus_O1: â\88\80n,c1,c2. ð\9d\90\93â\9dª0,c1â\9d« â\86\92 ð\9d\90\93â\9dªn,c2â\9d« â\86\92 ð\9d\90\93â\9dªn,c1+c2â\9d«.
/2 width=1 by ist_plus/ qed.
-lemma ist_plus_O2: â\88\80n,c1,c2. ð\9d\90\93â¦\83n,c1â¦\84 â\86\92 ð\9d\90\93â¦\830,c2â¦\84 â\86\92 ð\9d\90\93â¦\83n,c1+c2â¦\84.
+lemma ist_plus_O2: â\88\80n,c1,c2. ð\9d\90\93â\9dªn,c1â\9d« â\86\92 ð\9d\90\93â\9dª0,c2â\9d« â\86\92 ð\9d\90\93â\9dªn,c1+c2â\9d«.
#n #c1 #c2 #H1 #H2 >(plus_n_O n) /2 width=1 by ist_plus/
qed.
-lemma ist_succ: â\88\80n,c. ð\9d\90\93â¦\83n,câ¦\84 â\86\92 ð\9d\90\93â¦\83â\86\91n,c+ð\9d\9f\98ð\9d\9f\99â¦\84.
+lemma ist_succ: â\88\80n,c. ð\9d\90\93â\9dªn,câ\9d« â\86\92 ð\9d\90\93â\9dªâ\86\91n,c+ð\9d\9f\98ð\9d\9f\99â\9d«.
/2 width=1 by ist_plus/ qed.
(* Inversion properties with test for constrained rt-transition counter *****)
lemma ist_inv_plus:
- â\88\80n,c1,c2. ð\9d\90\93â¦\83n,c1 + c2â¦\84 →
- â\88\83â\88\83n1,n2. ð\9d\90\93â¦\83n1,c1â¦\84 & ð\9d\90\93â¦\83n2,c2â¦\84 & n1 + n2 = n.
+ â\88\80n,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 (plus_inv_dx … H) -H #ri1 #rs1 #ti1 #ts1 #ri2 #rs2 #ti2 #ts2 #H1 #H2 #H3 #H4 #H5 #H6 destruct
elim (plus_inv_O3 … H1) -H1 #H11 #H12 destruct
/3 width=5 by ex3_2_intro/
qed-.
-lemma ist_inv_plus_O_dx: â\88\80n,c1,c2. ð\9d\90\93â¦\83n,c1 + c2â¦\84 â\86\92 ð\9d\90\93â¦\830,c2â¦\84 â\86\92 ð\9d\90\93â¦\83n,c1â¦\84.
+lemma ist_inv_plus_O_dx: â\88\80n,c1,c2. ð\9d\90\93â\9dªn,c1 + c2â\9d« â\86\92 ð\9d\90\93â\9dª0,c2â\9d« â\86\92 ð\9d\90\93â\9dªn,c1â\9d«.
#n #c1 #c2 #H #H2
elim (ist_inv_plus … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct //
qed-.
lemma ist_inv_plus_SO_dx:
- â\88\80n,c1,c2. ð\9d\90\93â¦\83n,c1 + c2â¦\84 â\86\92 ð\9d\90\93â¦\831,c2â¦\84 →
- â\88\83â\88\83m. ð\9d\90\93â¦\83m,c1â¦\84 & n = ↑m.
+ â\88\80n,c1,c2. ð\9d\90\93â\9dªn,c1 + c2â\9d« â\86\92 ð\9d\90\93â\9dª1,c2â\9d« →
+ â\88\83â\88\83m. ð\9d\90\93â\9dªm,c1â\9d« & n = ↑m.
#n #c1 #c2 #H #H2 destruct
elim (ist_inv_plus … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct
/2 width=3 by ex2_intro/
qed-.
-lemma ist_inv_plus_10_dx: â\88\80n,c. ð\9d\90\93â¦\83n,c+ð\9d\9f\99ð\9d\9f\98â¦\84 → ⊥.
+lemma ist_inv_plus_10_dx: â\88\80n,c. ð\9d\90\93â\9dªn,c+ð\9d\9f\99ð\9d\9f\98â\9d« → ⊥.
#n #c #H
elim (ist_inv_plus … H) -H #n1 #n2 #_ #H #_
/2 width=2 by ist_inv_10/
(* Properties with test for t-transition counter ****************************)
-lemma ist_zero_shift: â\88\80c. ð\9d\90\93â¦\830,câ¦\84 â\86\92 ð\9d\90\93â¦\830,â\86\95*câ¦\84.
+lemma ist_zero_shift: â\88\80c. ð\9d\90\93â\9dª0,câ\9d« â\86\92 ð\9d\90\93â\9dª0,â\86\95*câ\9d«.
#c #H destruct //
qed.
(* Inversion properties with test for t-transition counter ******************)
-lemma ist_inv_shift: â\88\80n,c. ð\9d\90\93â¦\83n,â\86\95*câ¦\84 â\86\92 â\88§â\88§ ð\9d\90\93â¦\830,câ¦\84 & 0 = n.
+lemma ist_inv_shift: â\88\80n,c. ð\9d\90\93â\9dªn,â\86\95*câ\9d« â\86\92 â\88§â\88§ ð\9d\90\93â\9dª0,câ\9d« & 0 = n.
#n #c #H
elim (shift_inv_dx … H) -H #rt0 #rs0 #ti0 #ts0 #H1 #_ #H2 #H3 #H4 destruct
elim (max_inv_O3 … H1) -H1 #H11 #H12 destruct
/2 width=1 by conj/
qed-.
-lemma ist_inv_zero_shift: â\88\80c. ð\9d\90\93â¦\830,â\86\95*câ¦\84 â\86\92 ð\9d\90\93â¦\830,câ¦\84.
+lemma ist_inv_zero_shift: â\88\80c. ð\9d\90\93â\9dª0,â\86\95*câ\9d« â\86\92 ð\9d\90\93â\9dª0,câ\9d«.
#c #H elim (ist_inv_shift … H) -H //
qed-.
(* Properties with test for constrained rt-transition counter ***************)
-lemma isrt_max: â\88\80n1,n2,c1,c2. ð\9d\90\91ð\9d\90\93â¦\83n1,c1â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83n2,c2â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83n1â\88¨n2,c1â\88¨c2â¦\84.
+lemma isrt_max: â\88\80n1,n2,c1,c2. ð\9d\90\91ð\9d\90\93â\9dªn1,c1â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dªn2,c2â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\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 isrt_max_O1: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â¦\830,c1â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83n,c2â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83n,c1â\88¨c2â¦\84.
+lemma isrt_max_O1: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â\9dª0,c1â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dªn,c2â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dªn,c1â\88¨c2â\9d«.
/2 width=1 by isrt_max/ qed.
-lemma isrt_max_O2: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â¦\83n,c1â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\830,c2â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83n,c1â\88¨c2â¦\84.
+lemma isrt_max_O2: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â\9dªn,c1â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dª0,c2â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dªn,c1â\88¨c2â\9d«.
#n #c1 #c2 #H1 #H2 >(max_O2 n) /2 width=1 by isrt_max/
qed.
-lemma isrt_max_idem1: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â¦\83n,c1â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83n,c2â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83n,c1â\88¨c2â¦\84.
+lemma isrt_max_idem1: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â\9dªn,c1â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dªn,c2â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dªn,c1â\88¨c2â\9d«.
#n #c1 #c2 #H1 #H2 >(idempotent_max n) /2 width=1 by isrt_max/
qed.
(* Inversion properties with test for constrained rt-transition counter *****)
-lemma isrt_inv_max: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â¦\83n,c1 â\88¨ c2â¦\84 →
- â\88\83â\88\83n1,n2. ð\9d\90\91ð\9d\90\93â¦\83n1,c1â¦\84 & ð\9d\90\91ð\9d\90\93â¦\83n2,c2â¦\84 & (n1 ∨ n2) = n.
+lemma isrt_inv_max: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â\9dªn,c1 â\88¨ c2â\9d« →
+ â\88\83â\88\83n1,n2. ð\9d\90\91ð\9d\90\93â\9dªn1,c1â\9d« & ð\9d\90\91ð\9d\90\93â\9dªn2,c2â\9d« & (n1 ∨ n2) = n.
#n #c1 #c2 * #ri #rs #H
elim (max_inv_dx … H) -H #ri1 #rs1 #ti1 #ts1 #ri2 #rs2 #ti2 #ts2 #_ #_ #H1 #H2 #H3 #H4
elim (max_inv_O3 … H1) -H1 /3 width=5 by ex3_2_intro, ex1_2_intro/
qed-.
-lemma isrt_O_inv_max: â\88\80c1,c2. ð\9d\90\91ð\9d\90\93â¦\830,c1 â\88¨ c2â¦\84 â\86\92 â\88§â\88§ ð\9d\90\91ð\9d\90\93â¦\830,c1â¦\84 & ð\9d\90\91ð\9d\90\93â¦\830,c2â¦\84.
+lemma isrt_O_inv_max: â\88\80c1,c2. ð\9d\90\91ð\9d\90\93â\9dª0,c1 â\88¨ c2â\9d« â\86\92 â\88§â\88§ ð\9d\90\91ð\9d\90\93â\9dª0,c1â\9d« & ð\9d\90\91ð\9d\90\93â\9dª0,c2â\9d«.
#c1 #c2 #H
elim (isrt_inv_max … H) -H #n1 #n2 #Hn1 #Hn2 #H
elim (max_inv_O3 … H) -H #H1 #H2 destruct
/2 width=1 by conj/
qed-.
-lemma isrt_inv_max_O_dx: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â¦\83n,c1 â\88¨ c2â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\830,c2â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83n,c1â¦\84.
+lemma isrt_inv_max_O_dx: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â\9dªn,c1 â\88¨ c2â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dª0,c2â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dªn,c1â\9d«.
#n #c1 #c2 #H #H2
elim (isrt_inv_max … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct
lapply (isrt_inj … Hn2 H2) -c2 #H destruct //
qed-.
-lemma isrt_inv_max_eq_t: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â¦\83n,c1 â\88¨ c2â¦\84 → eq_t c1 c2 →
- â\88§â\88§ ð\9d\90\91ð\9d\90\93â¦\83n,c1â¦\84 & ð\9d\90\91ð\9d\90\93â¦\83n,c2â¦\84.
+lemma isrt_inv_max_eq_t: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â\9dªn,c1 â\88¨ c2â\9d« → eq_t c1 c2 →
+ â\88§â\88§ ð\9d\90\91ð\9d\90\93â\9dªn,c1â\9d« & ð\9d\90\91ð\9d\90\93â\9dªn,c2â\9d«.
#n #c1 #c2 #H #Hc12
elim (isrt_inv_max … H) -H #n1 #n2 #Hc1 #Hc2 #H destruct
lapply (isrt_eq_t_trans … Hc1 … Hc12) -Hc12 #H
(* Inversion lemmaswith shift ***********************************************)
-lemma isrt_inv_max_shift_sn: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â¦\83n,â\86\95*c1 â\88¨ c2â¦\84 →
- â\88§â\88§ ð\9d\90\91ð\9d\90\93â¦\830,c1â¦\84 & ð\9d\90\91ð\9d\90\93â¦\83n,c2â¦\84.
+lemma isrt_inv_max_shift_sn: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â\9dªn,â\86\95*c1 â\88¨ c2â\9d« →
+ â\88§â\88§ ð\9d\90\91ð\9d\90\93â\9dª0,c1â\9d« & ð\9d\90\91ð\9d\90\93â\9dªn,c2â\9d«.
#n #c1 #c2 #H
elim (isrt_inv_max … H) -H #n1 #n2 #Hc1 #Hc2 #H destruct
elim (isrt_inv_shift … Hc1) -Hc1 #Hc1 * -n1
(* Properties with test for constrained rt-transition counter ***************)
-lemma isrt_plus: â\88\80n1,n2,c1,c2. ð\9d\90\91ð\9d\90\93â¦\83n1,c1â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83n2,c2â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83n1+n2,c1+c2â¦\84.
+lemma isrt_plus: â\88\80n1,n2,c1,c2. ð\9d\90\91ð\9d\90\93â\9dªn1,c1â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dªn2,c2â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\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 isrt_plus_O1: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â¦\830,c1â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83n,c2â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83n,c1+c2â¦\84.
+lemma isrt_plus_O1: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â\9dª0,c1â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dªn,c2â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dªn,c1+c2â\9d«.
/2 width=1 by isrt_plus/ qed.
-lemma isrt_plus_O2: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â¦\83n,c1â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\830,c2â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83n,c1+c2â¦\84.
+lemma isrt_plus_O2: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â\9dªn,c1â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dª0,c2â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dªn,c1+c2â\9d«.
#n #c1 #c2 #H1 #H2 >(plus_n_O n) /2 width=1 by isrt_plus/
qed.
-lemma isrt_succ: â\88\80n,c. ð\9d\90\91ð\9d\90\93â¦\83n,câ¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83â\86\91n,c+ð\9d\9f\98ð\9d\9f\99â¦\84.
+lemma isrt_succ: â\88\80n,c. ð\9d\90\91ð\9d\90\93â\9dªn,câ\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dªâ\86\91n,c+ð\9d\9f\98ð\9d\9f\99â\9d«.
/2 width=1 by isrt_plus/ qed.
(* Inversion properties with test for constrained rt-transition counter *****)
-lemma isrt_inv_plus: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â¦\83n,c1 + c2â¦\84 →
- â\88\83â\88\83n1,n2. ð\9d\90\91ð\9d\90\93â¦\83n1,c1â¦\84 & ð\9d\90\91ð\9d\90\93â¦\83n2,c2â¦\84 & n1 + n2 = n.
+lemma isrt_inv_plus: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â\9dªn,c1 + c2â\9d« →
+ â\88\83â\88\83n1,n2. ð\9d\90\91ð\9d\90\93â\9dªn1,c1â\9d« & ð\9d\90\91ð\9d\90\93â\9dªn2,c2â\9d« & n1 + n2 = n.
#n #c1 #c2 * #ri #rs #H
elim (plus_inv_dx … H) -H #ri1 #rs1 #ti1 #ts1 #ri2 #rs2 #ti2 #ts2 #_ #_ #H1 #H2 #H3 #H4
elim (plus_inv_O3 … H1) -H1 /3 width=5 by ex3_2_intro, ex1_2_intro/
qed-.
-lemma isrt_inv_plus_O_dx: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â¦\83n,c1 + c2â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\830,c2â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\83n,c1â¦\84.
+lemma isrt_inv_plus_O_dx: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â\9dªn,c1 + c2â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dª0,c2â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dªn,c1â\9d«.
#n #c1 #c2 #H #H2
elim (isrt_inv_plus … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct
lapply (isrt_inj … Hn2 H2) -c2 #H destruct //
qed-.
-lemma isrt_inv_plus_SO_dx: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â¦\83n,c1 + c2â¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\831,c2â¦\84 →
- â\88\83â\88\83m. ð\9d\90\91ð\9d\90\93â¦\83m,c1â¦\84 & n = ↑m.
+lemma isrt_inv_plus_SO_dx: â\88\80n,c1,c2. ð\9d\90\91ð\9d\90\93â\9dªn,c1 + c2â\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dª1,c2â\9d« →
+ â\88\83â\88\83m. ð\9d\90\91ð\9d\90\93â\9dªm,c1â\9d« & n = ↑m.
#n #c1 #c2 #H #H2
elim (isrt_inv_plus … H) -H #n1 #n2 #Hn1 #Hn2 #H destruct
lapply (isrt_inj … Hn2 H2) -c2 #H destruct
(* Properties with test for costrained rt-transition counter ****************)
-lemma isr_shift: â\88\80c. ð\9d\90\91ð\9d\90\93â¦\830,câ¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\830,â\86\95*câ¦\84.
+lemma isr_shift: â\88\80c. ð\9d\90\91ð\9d\90\93â\9dª0,câ\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dª0,â\86\95*câ\9d«.
#c * #ri #rs #H destruct /2 width=3 by ex1_2_intro/
qed.
(* Inversion properties with test for costrained rt-counter *****************)
-lemma isrt_inv_shift: â\88\80n,c. ð\9d\90\91ð\9d\90\93â¦\83n,â\86\95*câ¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\830,câ¦\84 ∧ 0 = n.
+lemma isrt_inv_shift: â\88\80n,c. ð\9d\90\91ð\9d\90\93â\9dªn,â\86\95*câ\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dª0,câ\9d« ∧ 0 = n.
#n #c * #ri #rs #H
elim (shift_inv_dx … H) -H #rt0 #rs0 #ti0 #ts0 #_ #_ #H1 #H2 #H3
elim (max_inv_O3 … H1) -H1 /3 width=3 by ex1_2_intro, conj/
qed-.
-lemma isr_inv_shift: â\88\80c. ð\9d\90\91ð\9d\90\93â¦\830,â\86\95*câ¦\84 â\86\92 ð\9d\90\91ð\9d\90\93â¦\830,câ¦\84.
+lemma isr_inv_shift: â\88\80c. ð\9d\90\91ð\9d\90\93â\9dª0,â\86\95*câ\9d« â\86\92 ð\9d\90\91ð\9d\90\93â\9dª0,câ\9d«.
#c #H elim (isrt_inv_shift … H) -H //
qed-.
class "water"
[ { "generic rt-transition counter" * } {
[ { "" * } {
- [ "rtc_ist ( ð\9d\90\93â¦\83?,?â¦\84 )" "rtc_ist_shift" "rtc_ist_plus" "rtc_ist_max" * ]
- [ "rtc ( â\8c©?,?,?,?â\8cª ) ( ð\9d\9f\98ð\9d\9f\98 ) ( ð\9d\9f\99ð\9d\9f\98 ) ( ð\9d\9f\98ð\9d\9f\99 )" "rtc_isrc ( ð\9d\90\91ð\9d\90\93â¦\83?,?â¦\84 )" "rtc_shift ( ↕*? )" "rtc_max ( ? ∨ ? )" "rtc_plus ( ? + ? )" * ]
+ [ "rtc_ist ( ð\9d\90\93â\9dª?,?â\9d« )" "rtc_ist_shift" "rtc_ist_plus" "rtc_ist_max" * ]
+ [ "rtc ( â\8c©?,?,?,?â\8cª ) ( ð\9d\9f\98ð\9d\9f\98 ) ( ð\9d\9f\99ð\9d\9f\98 ) ( ð\9d\9f\98ð\9d\9f\99 )" "rtc_isrc ( ð\9d\90\91ð\9d\90\93â\9dª?,?â\9d« )" "rtc_shift ( ↕*? )" "rtc_max ( ? ∨ ? )" "rtc_plus ( ? + ? )" * ]
}
]
}
[ { "multiple relocation" * } {
[ { "" * } {
[ "rtmap" "rtmap_eq ( ? ≡ ? )" "rtmap_pushs ( ⫯*[?]? )" "rtmap_nexts ( ↑*[?]? )"
- "rtmap_tl ( ⫱? )" "rtmap_tls ( ⫱*[?]? )" "rtmap_isid ( ð\9d\90\88â¦\83?â¦\84 )" "rtmap_id" "rtmap_isdiv ( ð\9d\9b\80â¦\83?â¦\84 )"
- "rtmap_fcla ( ð\9d\90\82â¦\83?â¦\84 â\89\98 ? )" "rtmap_isfin ( ð\9d\90\85â¦\83?â¦\84 )" "rtmap_isuni ( ð\9d\90\94â¦\83?â¦\84 )" "rtmap_uni ( ð\9d\90\94â\9d´?â\9dµ )"
+ "rtmap_tl ( ⫱? )" "rtmap_tls ( ⫱*[?]? )" "rtmap_isid ( ð\9d\90\88â\9dª?â\9d« )" "rtmap_id" "rtmap_isdiv ( ð\9d\9b\80â\9dª?â\9d« )"
+ "rtmap_fcla ( ð\9d\90\82â\9dª?â\9d« â\89\98 ? )" "rtmap_isfin ( ð\9d\90\85â\9dª?â\9d« )" "rtmap_isuni ( ð\9d\90\94â\9dª?â\9d« )" "rtmap_uni ( ð\9d\90\94â\9d¨?â\9d© )"
"rtmap_sle ( ? ⊆ ? )" "rtmap_sdj ( ? ∥ ? )" "rtmap_sand ( ? ⋒ ? ≘ ? )" "rtmap_sor ( ? ⋓ ? ≘ ? )"
- "rtmap_at ( @â¦\83?,?â¦\84 â\89\98 ? )" "rtmap_istot ( ð\9d\90\93â¦\83?â¦\84 )" "rtmap_after ( ? ⊚ ? ≘ ? )" "rtmap_coafter ( ? ~⊚ ? ≘ ? )"
- "rtmap_basic ( ð\9d\90\81â\9d´?,?â\9dµ )" "rtmap_basic_after"
+ "rtmap_at ( @â\9dª?,?â\9d« â\89\98 ? )" "rtmap_istot ( ð\9d\90\93â\9dª?â\9d« )" "rtmap_after ( ? ⊚ ? ≘ ? )" "rtmap_coafter ( ? ~⊚ ? ≘ ? )"
+ "rtmap_basic ( ð\9d\90\81â\9d¨?,?â\9d© )" "rtmap_basic_after"
* ]
[ "nstream ( ⫯? ) ( ↑? )" "nstream_eq" "" ""
"" "" "nstream_isid" "nstream_id ( 𝐈𝐝 )" ""
"" "" "" ""
"" "" "" "nstream_sor"
- "" "nstream_istot ( ?@â\9d´?â\9dµ )" "nstream_after ( ? ∘ ? )" "nstream_coafter ( ? ~∘ ? )"
+ "" "nstream_istot ( ?@â\9d¨?â\9d© )" "nstream_after ( ? ∘ ? )" "nstream_coafter ( ? ~∘ ? )"
"nstream_basic" ""
* ]
(*
- [ "trace ( â\88¥?â\88¥ )" "trace_at ( @â¦\83?,?â¦\84 â\89\98 ? )" "trace_after ( ? â\8a\9a ? â\89\98 ? )" "trace_isid ( ð\9d\90\88â¦\83?â¦\84 )" "trace_isun ( ð\9d\90\94â¦\83?â¦\84 )"
+ [ "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 ( ∁ ? )" * ]
*)
- [ "mr2 ( ◊ ) ( {?,?};? )" "mr2_at ( @⦃?,?⦄ ≘ ? )" "mr2_plus ( ? + ? )" "mr2_minus ( ? ▭ ? ≘ ? )" * ]
+ [ "mr2 ( ◊ ) ( ❨?,?❩;? )" "mr2_at ( @❪?,?❫ ≘ ? )" "mr2_plus ( ? + ? )" "mr2_minus ( ? ▭ ? ≘ ? )" * ]
}
]
}
#R #L1 #L2 #T #HL1 #L2 @TC_strap @HL1 (**) (* auto fails *)
qed-.
-lemma rexs_atom: ∀R,I. ⋆ ⪤*[R,⓪{I}] ⋆.
+lemma rexs_atom: ∀R,I. ⋆ ⪤*[R,⓪[I]] ⋆.
/2 width=1 by inj/ qed.
lemma rexs_sort: ∀R,I,L1,L2,V1,V2,s.
- L1 ⪤*[R,⋆s] L2 → L1.ⓑ{I}V1 ⪤*[R,⋆s] L2.ⓑ{I}V2.
+ L1 ⪤*[R,⋆s] L2 → L1.ⓑ[I]V1 ⪤*[R,⋆s] L2.ⓑ[I]V2.
#R #I #L1 #L2 #V1 #V2 #s #H elim H -L2
/3 width=4 by rex_sort, rexs_step_dx, inj/
qed.
lemma rexs_pair: ∀R. (∀L. reflexive … (R L)) →
∀I,L1,L2,V. L1 ⪤*[R,V] L2 →
- L1.ⓑ{I}V ⪤*[R,#0] L2.ⓑ{I}V.
+ L1.ⓑ[I]V ⪤*[R,#0] L2.ⓑ[I]V.
#R #HR #I #L1 #L2 #V #H elim H -L2
/3 width=5 by rex_pair, rexs_step_dx, inj/
qed.
-lemma rexs_unit: â\88\80R,f,I,L1,L2. ð\9d\90\88â¦\83fâ¦\84 → L1 ⪤[cext2 R,cfull,f] L2 →
- L1.ⓤ{I} ⪤*[R,#0] L2.ⓤ{I}.
+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.
lemma rexs_lref: ∀R,I,L1,L2,V1,V2,i.
- L1 ⪤*[R,#i] L2 → L1.ⓑ{I}V1 ⪤*[R,#↑i] L2.ⓑ{I}V2.
+ L1 ⪤*[R,#i] L2 → L1.ⓑ[I]V1 ⪤*[R,#↑i] L2.ⓑ[I]V2.
#R #I #L1 #L2 #V1 #V2 #i #H elim H -L2
/3 width=4 by rex_lref, rexs_step_dx, inj/
qed.
lemma rexs_gref: ∀R,I,L1,L2,V1,V2,l.
- L1 ⪤*[R,§l] L2 → L1.ⓑ{I}V1 ⪤*[R,§l] L2.ⓑ{I}V2.
+ L1 ⪤*[R,§l] L2 → L1.ⓑ[I]V1 ⪤*[R,§l] L2.ⓑ[I]V2.
#R #I #L1 #L2 #V1 #V2 #l #H elim H -L2
/3 width=4 by rex_gref, rexs_step_dx, inj/
qed.
(* Basic inversion lemmas ***************************************************)
(* Basic_2A1: uses: TC_lpx_sn_inv_atom1 *)
-lemma rexs_inv_atom_sn: ∀R,I,Y2. ⋆ ⪤*[R,⓪{I}] Y2 → Y2 = ⋆.
+lemma rexs_inv_atom_sn: ∀R,I,Y2. ⋆ ⪤*[R,⓪[I]] Y2 → Y2 = ⋆.
#R #I #Y2 #H elim H -Y2 /3 width=3 by inj, rex_inv_atom_sn/
qed-.
(* Basic_2A1: uses: TC_lpx_sn_inv_atom2 *)
-lemma rexs_inv_atom_dx: ∀R,I,Y1. Y1 ⪤*[R,⓪{I}] ⋆ → Y1 = ⋆.
+lemma rexs_inv_atom_dx: ∀R,I,Y1. Y1 ⪤*[R,⓪[I]] ⋆ → Y1 = ⋆.
#R #I #Y1 #H @(TC_ind_dx ??????? H) -Y1
/3 width=3 by inj, rex_inv_atom_dx/
qed-.
lemma rexs_inv_sort: ∀R,Y1,Y2,s. Y1 ⪤*[R,⋆s] Y2 →
∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
| ∃∃I1,I2,L1,L2. L1 ⪤*[R,⋆s] L2 &
- Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}.
+ Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2].
#R #Y1 #Y2 #s #H elim H -Y2
[ #Y2 #H elim (rex_inv_sort … H) -H *
/4 width=8 by ex3_4_intro, inj, or_introl, or_intror, conj/
lemma rexs_inv_gref: ∀R,Y1,Y2,l. Y1 ⪤*[R,§l] Y2 →
∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
| ∃∃I1,I2,L1,L2. L1 ⪤*[R,§l] L2 &
- Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}.
+ Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2].
#R #Y1 #Y2 #l #H elim H -Y2
[ #Y2 #H elim (rex_inv_gref … H) -H *
/4 width=8 by ex3_4_intro, inj, or_introl, or_intror, conj/
qed-.
lemma rexs_inv_bind: ∀R. (∀L. reflexive … (R L)) →
- ∀p,I,L1,L2,V,T. L1 ⪤*[R,ⓑ{p,I}V.T] L2 →
- ∧∧ L1 ⪤*[R,V] L2 & L1.ⓑ{I}V ⪤*[R,T] L2.ⓑ{I}V.
+ ∀p,I,L1,L2,V,T. L1 ⪤*[R,ⓑ[p,I]V.T] L2 →
+ ∧∧ L1 ⪤*[R,V] L2 & L1.ⓑ[I]V ⪤*[R,T] L2.ⓑ[I]V.
#R #HR #p #I #L1 #L2 #V #T #H elim H -L2
[ #L2 #H elim (rex_inv_bind … V ? H) -H /3 width=1 by inj, conj/
| #L #L2 #_ #H * elim (rex_inv_bind … V ? H) -H /3 width=3 by rexs_step_dx, conj/
]
qed-.
-lemma rexs_inv_flat: ∀R,I,L1,L2,V,T. L1 ⪤*[R,ⓕ{I}V.T] L2 →
+lemma rexs_inv_flat: ∀R,I,L1,L2,V,T. L1 ⪤*[R,ⓕ[I]V.T] L2 →
∧∧ L1 ⪤*[R,V] L2 & L1 ⪤*[R,T] L2.
#R #I #L1 #L2 #V #T #H elim H -L2
[ #L2 #H elim (rex_inv_flat … H) -H /3 width=1 by inj, conj/
(* Advanced inversion lemmas ************************************************)
-lemma rexs_inv_sort_bind_sn: ∀R,I1,Y2,L1,s. L1.ⓘ{I1} ⪤*[R,⋆s] Y2 →
- ∃∃I2,L2. L1 ⪤*[R,⋆s] L2 & Y2 = L2.ⓘ{I2}.
+lemma rexs_inv_sort_bind_sn: ∀R,I1,Y2,L1,s. L1.ⓘ[I1] ⪤*[R,⋆s] Y2 →
+ ∃∃I2,L2. L1 ⪤*[R,⋆s] L2 & Y2 = L2.ⓘ[I2].
#R #I1 #Y2 #L1 #s #H elim (rexs_inv_sort … H) -H *
[ #H destruct
| #Z #I2 #Y1 #L2 #Hs #H1 #H2 destruct /2 width=4 by ex2_2_intro/
]
qed-.
-lemma rexs_inv_sort_bind_dx: ∀R,I2,Y1,L2,s. Y1 ⪤*[R,⋆s] L2.ⓘ{I2} →
- ∃∃I1,L1. L1 ⪤*[R,⋆s] L2 & Y1 = L1.ⓘ{I1}.
+lemma rexs_inv_sort_bind_dx: ∀R,I2,Y1,L2,s. Y1 ⪤*[R,⋆s] L2.ⓘ[I2] →
+ ∃∃I1,L1. L1 ⪤*[R,⋆s] L2 & Y1 = L1.ⓘ[I1].
#R #I2 #Y1 #L2 #s #H elim (rexs_inv_sort … H) -H *
[ #_ #H destruct
| #I1 #Z #L1 #Y2 #Hs #H1 #H2 destruct /2 width=4 by ex2_2_intro/
]
qed-.
-lemma rexs_inv_gref_bind_sn: ∀R,I1,Y2,L1,l. L1.ⓘ{I1} ⪤*[R,§l] Y2 →
- ∃∃I2,L2. L1 ⪤*[R,§l] L2 & Y2 = L2.ⓘ{I2}.
+lemma rexs_inv_gref_bind_sn: ∀R,I1,Y2,L1,l. L1.ⓘ[I1] ⪤*[R,§l] Y2 →
+ ∃∃I2,L2. L1 ⪤*[R,§l] L2 & Y2 = L2.ⓘ[I2].
#R #I1 #Y2 #L1 #l #H elim (rexs_inv_gref … H) -H *
[ #H destruct
| #Z #I2 #Y1 #L2 #Hl #H1 #H2 destruct /2 width=4 by ex2_2_intro/
]
qed-.
-lemma rexs_inv_gref_bind_dx: ∀R,I2,Y1,L2,l. Y1 ⪤*[R,§l] L2.ⓘ{I2} →
- ∃∃I1,L1. L1 ⪤*[R,§l] L2 & Y1 = L1.ⓘ{I1}.
+lemma rexs_inv_gref_bind_dx: ∀R,I2,Y1,L2,l. Y1 ⪤*[R,§l] L2.ⓘ[I2] →
+ ∃∃I1,L1. L1 ⪤*[R,§l] L2 & Y1 = L1.ⓘ[I1].
#R #I2 #Y1 #L2 #l #H elim (rexs_inv_gref … H) -H *
[ #_ #H destruct
| #I1 #Z #L1 #Y2 #Hl #H1 #H2 destruct /2 width=4 by ex2_2_intro/
(* Basic forward lemmas *****************************************************)
-lemma rexs_fwd_pair_sn: ∀R,I,L1,L2,V,T. L1 ⪤*[R,②{I}V.T] L2 → L1 ⪤*[R,V] L2.
+lemma rexs_fwd_pair_sn: ∀R,I,L1,L2,V,T. L1 ⪤*[R,②[I]V.T] L2 → L1 ⪤*[R,V] L2.
#R #I #L1 #L2 #V #T #H elim H -L2
/3 width=5 by rex_fwd_pair_sn, rexs_step_dx, inj/
qed-.
lemma rexs_fwd_bind_dx: ∀R. (∀L. reflexive … (R L)) →
- ∀p,I,L1,L2,V,T. L1 ⪤*[R,ⓑ{p,I}V.T] L2 →
- L1.ⓑ{I}V ⪤*[R,T] L2.ⓑ{I}V.
+ ∀p,I,L1,L2,V,T. L1 ⪤*[R,ⓑ[p,I]V.T] L2 →
+ L1.ⓑ[I]V ⪤*[R,T] L2.ⓑ[I]V.
#R #HR #p #I #L1 #L2 #V #T #H elim (rexs_inv_bind … H) -H //
qed-.
-lemma rexs_fwd_flat_dx: ∀R,I,L1,L2,V,T. L1 ⪤*[R,ⓕ{I}V.T] L2 → L1 ⪤*[R,T] L2.
+lemma rexs_fwd_flat_dx: ∀R,I,L1,L2,V,T. L1 ⪤*[R,ⓕ[I]V.T] L2 → L1 ⪤*[R,T] L2.
#R #I #L1 #L2 #V #T #H elim (rexs_inv_flat … H) -H //
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â¦\83fâ¦\84 →
+ λ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â¦\83fâ¦\84 → ∀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 *******************)
(* Basic_2A1: uses: TC_lpx_sn_pair TC_lpx_sn_pair_refl *)
lemma rexs_pair_refl: ∀R. c_reflexive … R →
- ∀L,V1,V2. CTC … R L V1 V2 → ∀I,T. L.ⓑ{I}V1 ⪤*[R,T] L.ⓑ{I}V2.
+ ∀L,V1,V2. CTC … R L V1 V2 → ∀I,T. L.ⓑ[I]V1 ⪤*[R,T] L.ⓑ[I]V2.
#R #HR #L #V1 #V2 #H elim H -V2
/3 width=3 by rexs_step_dx, rex_pair_refl, inj/
qed.
-lemma rexs_tc: â\88\80R,L1,L2,T,f. ð\9d\90\88â¦\83fâ¦\84 → 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) ]
(* Advanced inversion lemmas ************************************************)
lemma rexs_inv_bind_void: ∀R. c_reflexive … R →
- ∀p,I,L1,L2,V,T. L1 ⪤*[R,ⓑ{p,I}V.T] L2 →
+ ∀p,I,L1,L2,V,T. L1 ⪤*[R,ⓑ[p,I]V.T] L2 →
∧∧ L1 ⪤*[R,V] L2 & L1.ⓧ ⪤*[R,T] L2.ⓧ.
#R #HR #p #I #L1 #L2 #V #T #H @(rexs_ind_sn … HR … H) -L2
[ /3 width=1 by rexs_refl, conj/
(* Advanced forward lemmas **************************************************)
lemma rexs_fwd_bind_dx_void: ∀R. c_reflexive … R →
- ∀p,I,L1,L2,V,T. L1 ⪤*[R,ⓑ{p,I}V.T] L2 →
+ ∀p,I,L1,L2,V,T. L1 ⪤*[R,ⓑ[p,I]V.T] L2 →
L1.ⓧ ⪤*[R,T] L2.ⓧ.
#R #HR #p #I #L1 #L2 #V #T #H elim (rexs_inv_bind_void … H) -H //
qed-.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( L. ⓤ { break term 46 I } )"
+notation "hvbox( L. ⓤ[ break term 46 I ] )"
non associative with precedence 47
for @{ 'DxBind1 $L $I }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( L. ⓑ { break term 46 I } break term 49 T1 )"
+notation "hvbox( L. ⓑ[ break term 46 I ] break term 49 T1 )"
non associative with precedence 48
for @{ 'DxBind2 $L $I $T1 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( L. ⓘ { break term 46 I } )"
+notation "hvbox( L. ⓘ[ break term 46 I ] )"
non associative with precedence 46
for @{'DxItem $L $I }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ⓪ { term 46 I } )"
+notation "hvbox( ⓪[ term 46 I ] )"
non associative with precedence 55
for @{ 'Item0 $I }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ⓓ { term 46 p } break term 55 T1. break term 55 T2 )"
+notation "hvbox( ⓓ[ term 46 p ] break term 55 T1. break term 55 T2 )"
non associative with precedence 55
for @{ 'SnAbbr $p $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( - ⓓ term 55 T1. break term 55 T2 )"
+notation "hvbox( -ⓓ term 55 T1. break term 55 T2 )"
non associative with precedence 55
for @{ 'SnAbbrNeg $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( + ⓓ term 55 T1. break term 55 T2 )"
+notation "hvbox( +ⓓ term 55 T1. break term 55 T2 )"
non associative with precedence 55
for @{ 'SnAbbrPos $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ⓛ { term 46 p } break term 55 T1. break term 55 T2 )"
+notation "hvbox( ⓛ[ term 46 p ] break term 55 T1. break term 55 T2 )"
non associative with precedence 55
for @{ 'SnAbst $p $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( - ⓛ term 55 T1. break term 55 T2 )"
+notation "hvbox( -ⓛ term 55 T1. break term 55 T2 )"
non associative with precedence 55
for @{ 'SnAbstNeg $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( + ⓛ term 55 T1. break term 55 T2 )"
+notation "hvbox( +ⓛ term 55 T1. break term 55 T2 )"
non associative with precedence 55
for @{ 'SnAbstPos $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ⓤ { term 46 I }. break term 55 L )"
+notation "hvbox( ⓤ[ term 46 I ]. break term 55 L )"
non associative with precedence 55
for @{ 'SnBind1 $I $L }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ⓑ { term 46 I } break term 55 T. break term 55 L )"
+notation "hvbox( ⓑ[ term 46 I ] break term 55 T. break term 55 L )"
non associative with precedence 55
for @{ 'SnBind2 $I $T $L }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ⓑ { term 46 p, break term 46 I } break term 55 T1. break term 55 T )"
+notation "hvbox( ⓑ[ term 46 p, break term 46 I ] break term 55 T1. break term 55 T )"
non associative with precedence 55
for @{ 'SnBind2 $p $I $T1 $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( - ⓑ { term 46 I } break term 55 T1. break term 55 T )"
+notation "hvbox( -ⓑ[ term 46 I ] break term 55 T1. break term 55 T )"
non associative with precedence 55
for @{ 'SnBind2Neg $I $T1 $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( + ⓑ { term 46 I } break term 55 T1. break term 55 T )"
+notation "hvbox( +ⓑ[ term 46 I ] break term 55 T1. break term 55 T )"
non associative with precedence 55
for @{ 'SnBind2Pos $I $T1 $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ⓕ { term 46 I } break term 55 T1. break term 55 T )"
+notation "hvbox( ⓕ[ term 46 I ] break term 55 T1. break term 55 T )"
non associative with precedence 55
for @{ 'SnFlat2 $I $T1 $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ② { term 46 I } break term 55 T1. break term 55 T )"
+notation "hvbox( ②[ term 46 I ] break term 55 T1. break term 55 T )"
non associative with precedence 55
for @{ 'SnItem2 $I $T1 $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ⓘ { term 46 I }. break term 55 L )"
+notation "hvbox( ⓘ[ term 46 I ]. break term 55 L )"
non associative with precedence 55
for @{ 'SnItem $I $L }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ♯ { term 46 X } )"
+notation "hvbox( ♯❨ term 46 X ❩ )"
non associative with precedence 90
for @{ 'Weight $X }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ♯ { term 46 L, break term 46 T } )"
+notation "hvbox( ♯❨ term 46 L, break term 46 T ❩ )"
non associative with precedence 90
for @{ 'Weight $L $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ♯ { term 46 G, break term 46 L, break term 46 T } )"
+notation "hvbox( ♯❨ term 46 G, break term 46 L, break term 46 T ❩ )"
non associative with precedence 90
for @{ 'Weight $G $L $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G, break term 46 Lâ¦\84 ⊢ 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 ⊢ 𝐅 + ⦃ break term 46 T ⦄ ≘ break term 46 f )"
+notation "hvbox( L ⊢ 𝐅 +❪ break term 46 T ❫ ≘ break term 46 f )"
non associative with precedence 45
for @{ 'FreePlus $L $T $f }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( L1 ≡ [ break term 46 f ] break term 46 L2 )"
+notation "hvbox( L1 ≡[ break term 46 f ] break term 46 L2 )"
non associative with precedence 45
for @{ 'IdEqSn $f $L1 $L2 }.
+++ /dev/null
-(**************************************************************************)
-(* ___ *)
-(* ||M|| *)
-(* ||A|| A project by Andrea Asperti *)
-(* ||T|| *)
-(* ||I|| Developers: *)
-(* ||T|| The HELM team. *)
-(* ||A|| http://helm.cs.unibo.it *)
-(* \ / *)
-(* \ / This file is distributed under the terms of the *)
-(* v GNU General Public License Version 2 *)
-(* *)
-(**************************************************************************)
-
-(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-
-notation "hvbox( ⦃ term 46 G, break term 46 L, break term 46 T ⦄ ϵ [ break term 46 R ] 〚 break term 46 A 〛 )"
- non associative with precedence 45
- for @{ 'InEInt $R $G $L $T $A }.
--- /dev/null
+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The HELM team. *)
+(* ||A|| http://helm.cs.unibo.it *)
+(* \ / *)
+(* \ / This file is distributed under the terms of the *)
+(* v GNU General Public License Version 2 *)
+(* *)
+(**************************************************************************)
+
+(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
+
+notation "hvbox( ❪ term 46 G, break term 46 L, break term 46 T ❫ ϵ ⟦ 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( G ⊢ break term 46 L1 ⫃ ⁝ break term 46 L2 )"
+notation "hvbox( G ⊢ break term 46 L1 ⫃⁝ break term 46 L2 )"
non associative with precedence 45
for @{ 'LRSubEqA $G $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( G ⊢ break term 46 L1 ⫃ [ break term 46 R ] break term 46 L2 )"
+notation "hvbox( G ⊢ break term 46 L1 ⫃[ break term 46 R ] break term 46 L2 )"
non associative with precedence 45
for @{ 'LRSubEqC $R $G $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 L1, break term 46 f1 â¦\84 â«\83 ð\9d\90\85+ â¦\83 break term 46 L2, break term 46 f2 â¦\84 )"
+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( ⇩ * [ term 46 i ] break term 46 L1 ≘ break term 46 L2 )"
+notation "hvbox( ⇩*[ term 46 i ] break term 46 L1 ≘ break term 46 L2 )"
non associative with precedence 45
for @{ 'RDropStar $i $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ⇩ * [ term 46 b, break term 46 f ] break term 46 L1 ≘ break term 46 L2 )"
+notation "hvbox( ⇩*[ term 46 b, break term 46 f ] break term 46 L1 ≘ break term 46 L2 )"
non associative with precedence 45
for @{ 'RDropStar $b $f $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( L1 ⪤ [ break term 46 R ] break term 46 L2 )"
+notation "hvbox( L1 ⪤[ break term 46 R ] break term 46 L2 )"
non associative with precedence 45
for @{ 'Relation $R $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( ⇧ * [ term 46 f ] break term 46 T1 ≘ break term 46 T2 )"
+notation "hvbox( ⇧*[ term 46 f ] break term 46 T1 ≘ break term 46 T2 )"
non associative with precedence 45
for @{ 'RLiftStar $f $T1 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( 𝐒 ⦃ term 46 T ⦄ )"
+notation "hvbox( 𝐒❪ term 46 T ❫ )"
non associative with precedence 45
for @{ 'Simple $T }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( L1 ≛ [ break term 46 T ] break term 46 L2 )"
+notation "hvbox( L1 ≛[ break term 46 T ] break term 46 L2 )"
non associative with precedence 45
for @{ 'StarEqSn $T $L1 $L2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â\89\9b â¦\83 break term 46 G2, break term 46 L2, break term 46 T2 â¦\84 )"
+notation "hvbox( â\9dª term 46 G1, break term 46 L1, break term 46 T1 â\9d« â\89\9b â\9dª break term 46 G2, break term 46 L2, break term 46 T2 â\9d« )"
non associative with precedence 45
for @{ 'StarEqSn $G1 $L1 $T1 $G2 $L2 $T2 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( â¦\83 term 46 L1, break term 46 T1 â¦\84 â\8a\86 â¦\83 break term 46 L2, break term 46 T2 â¦\84 )"
+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( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â¬\82 â¦\83 break term 46 G2, break term 46 L2, break term 46 T2 â¦\84 )"
+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( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â¬\82 [ break term 46 b ] â¦\83 break term 46 G2, break term 46 L2, break term 46 T2 â¦\84 )"
+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( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â¬\82⸮ â¦\83 break term 46 G2, break term 46 L2, break term 46 T2 â¦\84 )"
+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( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â¬\82⸮ [ break term 46 b ] â¦\83 break term 46 G2, break term 46 L2, break term 46 T2 â¦\84 )"
+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( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â¬\82 + â¦\83 break term 46 G2, break term 46 L2, break term 46 T2 â¦\84 )"
+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( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â¬\82 + [ break term 46 b ] â¦\83 break term 46 G2, break term 46 L2, break term 46 T2 â¦\84 )"
+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( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â¬\82 * â¦\83 break term 46 G2, break term 46 L2, break term 46 T2 â¦\84 )"
+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( â¦\83 term 46 G1, break term 46 L1, break term 46 T1 â¦\84 â¬\82 * [ break term 46 b ] â¦\83 break term 46 G2, break term 46 L2, break term 46 T2 â¦\84 )"
+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 }.
(* NOTATION FOR THE FORMAL SYSTEM λδ ****************************************)
-notation "hvbox( L1 ≋ⓧ* [ break term 46 n1, break term 46 n2 ] break term 46 L2 )"
+notation "hvbox( L1 ≋ⓧ*[ break term 46 n1, break term 46 n2 ] break term 46 L2 )"
non associative with precedence 45
for @{ 'VoidStarEq $L1 $n1 $n2 $L2 }.
drop_refl_atom_O2 drop_drop_lt drop_skip_lt
*)
inductive drops (b:bool): rtmap → relation lenv ≝
-| drops_atom: â\88\80f. (b = â\93\89 â\86\92 ð\9d\90\88â¦\83fâ¦\84) → drops b (f) (⋆) (⋆)
-| drops_drop: ∀f,I,L1,L2. drops b f L1 L2 → drops b (↑f) (L1.ⓘ{I}) L2
+| 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 →
- drops b (⫯f) (L1.ⓘ{I1}) (L2.ⓘ{I2})
+ drops b (⫯f) (L1.ⓘ[I1]) (L2.ⓘ[I2])
.
interpretation "uniform slicing (local environment)"
∀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â¦\83fâ¦\84 →
+ λ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â¦\83fâ¦\84 →
+ λ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:rtmap → relation C.
∀T2. S f T2 U2 → R K T1 T2.
definition co_dropable_sn: predicate (rtmap → relation lenv) ≝
- λR. â\88\80b,f,L1,K1. â\87©*[b,f] L1 â\89\98 K1 â\86\92 ð\9d\90\94â¦\83fâ¦\84 →
+ λ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 (rtmap → 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â¦\83fâ¦\84 →
+ â\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â¦\83fâ¦\84).
+ 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â¦\83fâ¦\84).
+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 →
+fact drops_inv_drop1_aux: ∀b,f,X,Y. ⇩*[b,f] X ≘ Y → ∀g,I,K. X = K.ⓘ[I] → f = ↑g →
⇩*[b,g] K ≘ Y.
#b #f #X #Y * -f -X -Y
[ #f #Hf #g #J #K #H destruct
(* Basic_1: includes: drop_gen_drop *)
(* Basic_2A1: includes: drop_inv_drop1_lt drop_inv_drop1 *)
-lemma drops_inv_drop1: ∀b,f,I,K,Y. ⇩*[b,↑f] K.ⓘ{I} ≘ Y → ⇩*[b,f] K ≘ Y.
+lemma drops_inv_drop1: ∀b,f,I,K,Y. ⇩*[b,↑f] K.ⓘ[I] ≘ Y → ⇩*[b,f] K ≘ Y.
/2 width=6 by drops_inv_drop1_aux/ qed-.
-fact drops_inv_skip1_aux: ∀b,f,X,Y. ⇩*[b,f] X ≘ Y → ∀g,I1,K1. X = K1.ⓘ{I1} → f = ⫯g →
- ∃∃I2,K2. ⇩*[b,g] K1 ≘ K2 & ⇧*[g] I2 ≘ I1 & Y = K2.ⓘ{I2}.
+fact drops_inv_skip1_aux: ∀b,f,X,Y. ⇩*[b,f] X ≘ Y → ∀g,I1,K1. X = K1.ⓘ[I1] → f = ⫯g →
+ ∃∃I2,K2. ⇩*[b,g] K1 ≘ K2 & ⇧*[g] I2 ≘ I1 & Y = K2.ⓘ[I2].
#b #f #X #Y * -f -X -Y
[ #f #Hf #g #J1 #K1 #H destruct
| #f #I #L1 #L2 #_ #g #J1 #K1 #_ #H2 elim (discr_next_push … H2)
(* Basic_1: includes: drop_gen_skip_l *)
(* Basic_2A1: includes: drop_inv_skip1 *)
-lemma drops_inv_skip1: ∀b,f,I1,K1,Y. ⇩*[b,⫯f] K1.ⓘ{I1} ≘ Y →
- ∃∃I2,K2. ⇩*[b,f] K1 ≘ K2 & ⇧*[f] I2 ≘ I1 & Y = K2.ⓘ{I2}.
+lemma drops_inv_skip1: ∀b,f,I1,K1,Y. ⇩*[b,⫯f] K1.ⓘ[I1] ≘ Y →
+ ∃∃I2,K2. ⇩*[b,f] K1 ≘ K2 & ⇧*[f] I2 ≘ I1 & Y = K2.ⓘ[I2].
/2 width=5 by drops_inv_skip1_aux/ qed-.
-fact drops_inv_skip2_aux: ∀b,f,X,Y. ⇩*[b,f] X ≘ Y → ∀g,I2,K2. Y = K2.ⓘ{I2} → f = ⫯g →
- ∃∃I1,K1. ⇩*[b,g] K1 ≘ K2 & ⇧*[g] I2 ≘ I1 & X = K1.ⓘ{I1}.
+fact drops_inv_skip2_aux: ∀b,f,X,Y. ⇩*[b,f] X ≘ Y → ∀g,I2,K2. Y = K2.ⓘ[I2] → f = ⫯g →
+ ∃∃I1,K1. ⇩*[b,g] K1 ≘ K2 & ⇧*[g] I2 ≘ I1 & X = K1.ⓘ[I1].
#b #f #X #Y * -f -X -Y
[ #f #Hf #g #J2 #K2 #H destruct
| #f #I #L1 #L2 #_ #g #J2 #K2 #_ #H2 elim (discr_next_push … H2)
(* Basic_1: includes: drop_gen_skip_r *)
(* Basic_2A1: includes: drop_inv_skip2 *)
-lemma drops_inv_skip2: ∀b,f,I2,X,K2. ⇩*[b,⫯f] X ≘ K2.ⓘ{I2} →
- ∃∃I1,K1. ⇩*[b,f] K1 ≘ K2 & ⇧*[f] I2 ≘ I1 & X = K1.ⓘ{I1}.
+lemma drops_inv_skip2: ∀b,f,I2,X,K2. ⇩*[b,⫯f] X ≘ K2.ⓘ[I2] →
+ ∃∃I1,K1. ⇩*[b,f] K1 ≘ K2 & ⇧*[f] I2 ≘ I1 & X = K1.ⓘ[I1].
/2 width=5 by drops_inv_skip2_aux/ qed-.
(* 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â¦\83f1â¦\84 & f2 ⊚ ↑f1 ≘ f & ⇩*[b,f] X ≘ K.
+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.
#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â¦\83f1â¦\84 & f2 ⊚ ↑f1 ≘ f & ⇩*[b,f] X ≘ K.
+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.
/2 width=4 by drops_fwd_drop2_aux/ qed-.
(* Properties with test for identity ****************************************)
(* Basic_2A1: includes: drop_refl *)
-lemma drops_refl: â\88\80b,L,f. ð\9d\90\88â¦\83fâ¦\84 → ⇩*[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 (isid_inv_gen … Hf) -Hf
/3 width=1 by drops_skip, liftsb_refl/
(* Basic_1: includes: drop_gen_refl *)
(* Basic_2A1: includes: drop_inv_O2 *)
-lemma drops_fwd_isid: â\88\80b,f,L1,L2. â\87©*[b,f] L1 â\89\98 L2 â\86\92 ð\9d\90\88â¦\83fâ¦\84 → 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 (isid_inv_next … H) //
| /5 width=5 by isid_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â¦\83f1â¦\84 → f2 ⊚ ↑f1 ≘ f → ⇩*[b,f] X ≘ K.
+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.
#b #f2 #I #X #K #H #f1 #f #Hf1 #Hf elim (drops_fwd_drop2 … H) -H
#g1 #g #Hg1 #Hg #HK lapply (after_mono_eq … Hg … Hf ??) -Hg -Hf
/3 width=5 by drops_eq_repl_back, isid_inv_eq_repl, eq_next/
(* Forward lemmas with test for finite colength *****************************)
-lemma drops_fwd_isfin: â\88\80f,L1,L2. â\87©*[â\93\89,f] L1 â\89\98 L2 â\86\92 ð\9d\90\85â¦\83fâ¦\84.
+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 isfin_next, isfin_push, isfin_isid/
qed-.
(* Properties with test for uniformity **************************************)
-lemma drops_isuni_ex: â\88\80f. ð\9d\90\94â¦\83fâ¦\84 → ∀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â¦\83fâ¦\84 →
- (ð\9d\90\88â¦\83fâ¦\84 ∧ L1 = L2) ∨
- â\88\83â\88\83g,I,K. â\87©*[â\93\89,g] K â\89\98 L2 & ð\9d\90\94â¦\83gâ¦\84 & L1 = K.â\93\98{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.â\93\98[I] & f = ↑g.
#f #L1 #L2 * -f -L1 -L2
[ /4 width=1 by or_introl, conj/
| /4 width=7 by isuni_inv_next, ex4_3_intro, or_intror/
qed-.
(* Basic_2A1: was: drop_inv_O1_pair1 *)
-lemma drops_inv_bind1_isuni: â\88\80b,f,I,K,L2. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\87©*[b,f] K.â\93\98{I} ≘ L2 →
- (ð\9d\90\88â¦\83fâ¦\84 â\88§ L2 = K.â\93\98{I}) ∨
- â\88\83â\88\83g. ð\9d\90\94â¦\83gâ¦\84 & ⇩*[b,g] K ≘ L2 & f = ↑g.
+lemma drops_inv_bind1_isuni: â\88\80b,f,I,K,L2. ð\9d\90\94â\9dªfâ\9d« â\86\92 â\87©*[b,f] K.â\93\98[I] ≘ L2 →
+ (ð\9d\90\88â\9dªfâ\9d« â\88§ L2 = K.â\93\98[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 (isuni_split … Hf) -Hf * #g #Hg #H0 destruct
[ lapply (drops_inv_skip1 … H) -H * #Z #Y #HY #HZ #H destruct
<(drops_fwd_isid … HY Hg) -Y >(liftsb_fwd_isid … HZ Hg) -Z
qed-.
(* Basic_2A1: was: drop_inv_O1_pair2 *)
-lemma drops_inv_bind2_isuni: â\88\80b,f,I,K,L1. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\87©*[b,f] L1 â\89\98 K.â\93\98{I} →
- (ð\9d\90\88â¦\83fâ¦\84 â\88§ L1 = K.â\93\98{I}) ∨
- â\88\83â\88\83g,I1,K1. ð\9d\90\94â¦\83gâ¦\84 & â\87©*[b,g] K1 â\89\98 K.â\93\98{I} & L1 = K1.â\93\98{I1} & f = ↑g.
+lemma drops_inv_bind2_isuni: â\88\80b,f,I,K,L1. ð\9d\90\94â\9dªfâ\9d« â\86\92 â\87©*[b,f] L1 â\89\98 K.â\93\98[I] →
+ (ð\9d\90\88â\9dªfâ\9d« â\88§ L1 = K.â\93\98[I]) ∨
+ â\88\83â\88\83g,I1,K1. ð\9d\90\94â\9dªgâ\9d« & â\87©*[b,g] K1 â\89\98 K.â\93\98[I] & L1 = K1.â\93\98[I1] & f = ↑g.
#b #f #I #K *
[ #Hf #H elim (drops_inv_atom1 … H) -H #H destruct
| #L1 #I1 #Hf #H elim (drops_inv_bind1_isuni … Hf H) -Hf -H *
]
qed-.
-lemma drops_inv_bind2_isuni_next: â\88\80b,f,I,K,L1. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\87©*[b,â\86\91f] L1 â\89\98 K.â\93\98{I} →
- ∃∃I1,K1. ⇩*[b,f] K1 ≘ K.ⓘ{I} & L1 = K1.ⓘ{I1}.
+lemma drops_inv_bind2_isuni_next: â\88\80b,f,I,K,L1. ð\9d\90\94â\9dªfâ\9d« â\86\92 â\87©*[b,â\86\91f] L1 â\89\98 K.â\93\98[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 isuni_next/ -Hf *
[ #H elim (isid_inv_next … H) -H //
| /2 width=4 by ex2_2_intro/
]
qed-.
-fact drops_inv_TF_aux: â\88\80f,L1,L2. â\87©*[â\92»,f] L1 â\89\98 L2 â\86\92 ð\9d\90\94â¦\83fâ¦\84 →
- ∀I,K. L2 = K.ⓘ{I} → ⇩*[Ⓣ,f] L1 ≘ K.ⓘ{I}.
+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
| #f #I #L1 #L2 #_ #IH #Hf #J #K #H destruct
qed-.
(* Basic_2A1: includes: drop_inv_FT *)
-lemma drops_inv_TF: ∀f,I,L,K. ⇩*[Ⓕ,f] L ≘ K.ⓘ{I} → 𝐔⦃f⦄ → ⇩*[Ⓣ,f] L ≘ K.ⓘ{I}.
+lemma drops_inv_TF: ∀f,I,L,K. ⇩*[Ⓕ,f] L ≘ K.ⓘ[I] → 𝐔❪f❫ → ⇩*[Ⓣ,f] L ≘ K.ⓘ[I].
/2 width=3 by drops_inv_TF_aux/ qed-.
(* Basic_2A1: includes: drop_inv_gen *)
-lemma drops_inv_gen: ∀b,f,I,L,K. ⇩*[b,f] L ≘ K.ⓘ{I} → 𝐔⦃f⦄ → ⇩*[Ⓣ,f] L ≘ K.ⓘ{I}.
+lemma drops_inv_gen: ∀b,f,I,L,K. ⇩*[b,f] L ≘ K.ⓘ[I] → 𝐔❪f❫ → ⇩*[Ⓣ,f] L ≘ K.ⓘ[I].
* /2 width=1 by drops_inv_TF/
qed-.
(* Basic_2A1: includes: drop_inv_T *)
-lemma drops_inv_F: ∀b,f,I,L,K. ⇩*[Ⓕ,f] L ≘ K.ⓘ{I} → 𝐔⦃f⦄ → ⇩*[b,f] L ≘ K.ⓘ{I}.
+lemma drops_inv_F: ∀b,f,I,L,K. ⇩*[Ⓕ,f] L ≘ K.ⓘ[I] → 𝐔❪f❫ → ⇩*[b,f] L ≘ K.ⓘ[I].
* /2 width=1 by drops_inv_TF/
qed-.
(* Basic_1: was: drop_S *)
(* Basic_2A1: was: drop_fwd_drop2 *)
-lemma drops_isuni_fwd_drop2: â\88\80b,f,I,X,K. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\87©*[b,f] X â\89\98 K.â\93\98{I} → ⇩*[b,↑f] X ≘ K.
+lemma drops_isuni_fwd_drop2: â\88\80b,f,I,X,K. ð\9d\90\94â\9dªfâ\9d« â\86\92 â\87©*[b,f] X â\89\98 K.â\93\98[I] → ⇩*[b,↑f] X ≘ K.
/3 width=7 by drops_after_fwd_drop2, after_isid_isuni/ qed-.
(* Inversion lemmas with uniform relocations ********************************)
lemma drops_inv_atom2: ∀b,L,f. ⇩*[b,f] L ≘ ⋆ →
- â\88\83â\88\83n,f1. â\87©*[b,ð\9d\90\94â\9d´nâ\9dµ] L â\89\98 â\8b\86 & ð\9d\90\94â\9d´nâ\9dµ ⊚ f1 ≘ f.
+ â\88\83â\88\83n,f1. â\87©*[b,ð\9d\90\94â\9d¨nâ\9d©] L â\89\98 â\8b\86 & ð\9d\90\94â\9d¨nâ\9d© ⊚ f1 ≘ f.
#b #L elim L -L
[ /3 width=4 by drops_atom, after_isid_sn, ex2_2_intro/
| #L #I #IH #f #H elim (pn_split f) * #g #H0 destruct
qed-.
lemma drops_inv_succ: ∀L1,L2,i. ⇩*[↑i] L1 ≘ L2 →
- ∃∃I,K. ⇩*[i] K ≘ L2 & L1 = K.ⓘ{I}.
+ ∃∃I,K. ⇩*[i] K ≘ L2 & L1 = K.ⓘ[I].
#L1 #L2 #i #H elim (drops_inv_isuni … H) -H // *
[ #H elim (isid_inv_next … H) -H //
| /2 width=4 by ex2_2_intro/
(* Properties with uniform relocations **************************************)
-lemma drops_F_uni: â\88\80L,i. â\87©*[â\92»,ð\9d\90\94â\9d´iâ\9dµ] L â\89\98 â\8b\86 â\88¨ â\88\83â\88\83I,K. â\87©*[i] L â\89\98 K.â\93\98{I}.
+lemma drops_F_uni: â\88\80L,i. â\87©*[â\92»,ð\9d\90\94â\9d¨iâ\9d©] L â\89\98 â\8b\86 â\88¨ â\88\83â\88\83I,K. â\87©*[i] L â\89\98 K.â\93\98[I].
#L elim L -L /2 width=1 by or_introl/
#L #I #IH * /4 width=3 by drops_refl, ex1_2_intro, or_intror/
#i elim (IH i) -IH /3 width=1 by drops_drop, or_introl/
qed-.
(* Basic_2A1: includes: drop_split *)
-lemma drops_split_trans: â\88\80b,f,L1,L2. â\87©*[b,f] L1 â\89\98 L2 â\86\92 â\88\80f1,f2. f1 â\8a\9a f2 â\89\98 f â\86\92 ð\9d\90\94â¦\83f1â¦\84 →
+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â¦\83f2â¦\84 →
+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. @â¦\83i1,fâ¦\84 ≘ 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, at_inv_tls/ qed-.
-lemma drops_split_trans_bind2: ∀b,f,I,L,K0. ⇩*[b,f] L ≘ K0.ⓘ{I} → ∀i. @⦃O,f⦄ ≘ i →
- ∃∃J,K. ⇩*[i]L ≘ K.ⓘ{J} & ⇩*[b,⫱*[↑i]f] K ≘ K0 & ⇧*[⫱*[↑i]f] I ≘ J.
+lemma drops_split_trans_bind2: ∀b,f,I,L,K0. ⇩*[b,f] L ≘ K0.ⓘ[I] → ∀i. @❪O,f❫ ≘ 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: @(after_uni_dx … Hf) |2,3: skip ] /2 width=1 by after_isid_dx/ #Y #HLY #H
lapply (drops_tls_at … Hf … H) -H #H
qed-.
theorem drops_conf_div: ∀f1,L,K. ⇩*[Ⓣ,f1] L ≘ K → ∀f2. ⇩*[Ⓣ,f2] L ≘ K →
- ð\9d\90\94â¦\83f1â¦\84 â\86\92 ð\9d\90\94â¦\83f2â¦\84 → 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 isid_inv_eq_repl/
/3 width=8 by drops_conf, drops_fwd_isid/
qed-.
-lemma drops_inv_uni: â\88\80L,i. â\87©*[â\92»,ð\9d\90\94â\9d´iâ\9dµ] L â\89\98 â\8b\86 â\86\92 â\88\80I,K. â\87©*[i] L â\89\98 K.â\93\98{I} → ⊥.
+lemma drops_inv_uni: â\88\80L,i. â\87©*[â\92»,ð\9d\90\94â\9d¨iâ\9d©] L â\89\98 â\8b\86 â\86\92 â\88\80I,K. â\87©*[i] L â\89\98 K.â\93\98[I] → ⊥.
#L #i #H1 #I #K #H2
lapply (drops_F … H2) -H2 #H2
lapply (drops_mono … H2 … H1) -L -i #H destruct
(* Basic_2A1: includes: drop_conf_lt *)
lemma drops_conf_skip1: ∀b2,f,L,L2. ⇩*[b2,f] L ≘ L2 →
- ∀b1,f1,I1,K1. ⇩*[b1,f1] L ≘ K1.ⓘ{I1} →
+ ∀b1,f1,I1,K1. ⇩*[b1,f1] L ≘ K1.ⓘ[I1] →
∀f2. f1 ⊚ ⫯f2 ≘ f →
- ∃∃I2,K2. L2 = K2.ⓘ{I2} &
+ ∃∃I2,K2. L2 = K2.ⓘ[I2] &
⇩*[b2,f2] K1 ≘ K2 & ⇧*[f2] I2 ≘ I1.
#b2 #f #L #L2 #H2 #b1 #f1 #I1 #K1 #H1 #f2 #Hf lapply (drops_conf … H1 … H2 … Hf) -L -Hf
#H elim (drops_inv_skip1 … H) -H /2 width=5 by ex3_2_intro/
(* Basic_2A1: includes: drop_trans_lt *)
lemma drops_trans_skip2: ∀b1,f1,L1,L. ⇩*[b1,f1] L1 ≘ L →
- ∀b2,f2,I2,K2. ⇩*[b2,f2] L ≘ K2.ⓘ{I2} →
+ ∀b2,f2,I2,K2. ⇩*[b2,f2] L ≘ K2.ⓘ[I2] →
∀f. f1 ⊚ f2 ≘ ⫯f →
- ∃∃I1,K1. L1 = K1.ⓘ{I1} &
+ ∃∃I1,K1. L1 = K1.ⓘ[I1] &
⇩*[b1∧b2,f] K1 ≘ K2 & ⇧*[f] I2 ≘ I1.
#b1 #f1 #L1 #L #H1 #b2 #f2 #I2 #K2 #H2 #f #Hf
lapply (drops_trans … H1 … H2 … Hf) -L -Hf
(* Basic_2A1: includes: drops_conf_div *)
lemma drops_conf_div_bind: ∀f1,f2,I1,I2,L,K.
- ⇩*[Ⓣ,f1] L ≘ K.ⓘ{I1} → ⇩*[Ⓣ,f2] L ≘ K.ⓘ{I2} →
- ð\9d\90\94â¦\83f1â¦\84 â\86\92 ð\9d\90\94â¦\83f2â¦\84 → f1 ≡ f2 ∧ I1 = I2.
+ ⇩*[Ⓣ,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.
#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â¦\83fâ¦\84 ≘ 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 fcla_isid, ex2_intro/
| #f #I #L1 #L2 #_ * >length_bind /3 width=3 by fcla_next, ex2_intro, eq_f/
qed-.
(* Basic_2A1: includes: drop_fwd_length *)
-lemma drops_fcla_fwd: â\88\80f,L1,L2,n. â\87©*[â\93\89,f] L1 â\89\98 L2 â\86\92 ð\9d\90\82â¦\83fâ¦\84 ≘ 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 <(fcla_mono … Hm … Hn) -f //
qed-.
lemma drops_fwd_fcla_le2: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 →
- â\88\83â\88\83n. ð\9d\90\82â¦\83fâ¦\84 ≘ 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â¦\83fâ¦\84 ≘ 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 <(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â¦\83fâ¦\84 ≘ n & n < |L1|.
+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|.
#f #L1 #I2 #K2 #H elim (drops_fwd_fcla … H) -H
#n #Hf #H >H -L1 /3 width=3 by le_S_S, ex2_intro/
qed-.
(* Basic_2A1: includes: drop_fwd_length_lt2 *)
lemma drops_fcla_fwd_lt2: ∀f,L1,I2,K2,n.
- ⇩*[Ⓣ,f] L1 ≘ K2.ⓘ{I2} → 𝐂⦃f⦄ ≘ n →
+ ⇩*[Ⓣ,f] L1 ≘ K2.ⓘ[I2] → 𝐂❪f❫ ≘ n →
n < |L1|.
#f #L1 #I2 #K2 #n #H #Hn elim (drops_fwd_fcla_lt2 … H) -H
#k #Hm #H <(fcla_mono … Hm … Hn) -f //
qed-.
(* Basic_2A1: includes: drop_fwd_length_lt4 *)
-lemma drops_fcla_fwd_lt4: â\88\80f,L1,L2,n. â\87©*[â\93\89,f] L1 â\89\98 L2 â\86\92 ð\9d\90\82â¦\83fâ¦\84 ≘ 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 lt_minus_to_plus_r/ qed-.
(* Basic_2A1: includes: drop_inv_length_eq *)
-lemma drops_inv_length_eq: â\88\80f,L1,L2. â\87©*[â\93\89,f] L1 â\89\98 L2 â\86\92 |L1| = |L2| â\86\92 ð\9d\90\88â¦\83fâ¦\84.
+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 (discr_plus_x_xy … H) -H
/2 width=3 by fcla_inv_xp/
qed-.
theorem drops_conf_div: ∀f1,f2,L1,L2. ⇩*[Ⓣ,f1] L1 ≘ L2 → ⇩*[Ⓣ,f2] L1 ≘ L2 →
- â\88\83â\88\83n. ð\9d\90\82â¦\83f1â¦\84 â\89\98 n & ð\9d\90\82â¦\83f2â¦\84 ≘ 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â¦\83f1â¦\84 â\89\98 n1 â\86\92 ð\9d\90\82â¦\83f2â¦\84 ≘ 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â¦\83fâ¦\84 → ∀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â¦\83fâ¦\84 →
+ λ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 →
- ∀b,f,I,K1,V1. ⇩*[b,f] L1 ≘ K1.ⓑ{I}V1 → 𝐔⦃f⦄ →
- ∃∃K2,V2. ⇩*[b,f] L2 ≘ K2.ⓑ{I}V2 & K1 ⪤[R] K2 & R K1 V1 V2.
+ ∀b,f,I,K1,V1. ⇩*[b,f] L1 ≘ K1.ⓑ[I]V1 → 𝐔❪f❫ →
+ ∃∃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
[ #Z2 #K2 #HLK2 #HK12 #H
(* Basic_2A1: includes: lpx_sn_drop_trans *)
lemma lex_drops_trans_pair (R): ∀L1,L2. L1 ⪤[R] L2 →
- ∀b,f,I,K2,V2. ⇩*[b,f] L2 ≘ K2.ⓑ{I}V2 → 𝐔⦃f⦄ →
- ∃∃K1,V1. ⇩*[b,f] L1 ≘ K1.ⓑ{I}V1 & K1 ⪤[R] K2 & R K1 V1 V2.
+ ∀b,f,I,K2,V2. ⇩*[b,f] L2 ≘ K2.ⓑ[I]V2 → 𝐔❪f❫ →
+ ∃∃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
[ #Z1 #K1 #HLK1 #HK12 #H
(* Basic_2A1: includes: lreq_drop_trans_be *)
lemma seq_drops_trans_next: ∀f2,L1,L2. L1 ≡[f2] L2 →
- ∀b,f,I,K2. ⇩*[b,f] L2 ≘ K2.ⓘ{I} → 𝐔⦃f⦄ →
+ ∀b,f,I,K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I] → 𝐔❪f❫ →
∀f1. f ~⊚ ↑f1 ≘ f2 →
- ∃∃K1. ⇩*[b,f] L1 ≘ K1.ⓘ{I} & K1 ≡[f1] K2.
+ ∃∃K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I] & K1 ≡[f1] K2.
#f2 #L1 #L2 #HL12 #b #f #I2 #K2 #HLK2 #Hf #f1 #Hf2
elim (sex_drops_trans_next … HL12 … HLK2 Hf … Hf2) -f2 -L2 -Hf
#I1 #K1 #HLK1 #HK12 #H <(ceq_ext_inv_eq … H) -I2
(* Basic_2A1: includes: lreq_drop_conf_be *)
lemma seq_drops_conf_next: ∀f2,L1,L2. L1 ≡[f2] L2 →
- ∀b,f,I,K1. ⇩*[b,f] L1 ≘ K1.ⓘ{I} → 𝐔⦃f⦄ →
+ ∀b,f,I,K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I] → 𝐔❪f❫ →
∀f1. f ~⊚ ↑f1 ≘ f2 →
- ∃∃K2. ⇩*[b,f] L2 ≘ K2.ⓘ{I} & K1 ≡[f1] K2.
+ ∃∃K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I] & K1 ≡[f1] K2.
#f2 #L1 #L2 #HL12 #b #f #I1 #K1 #HLK1 #Hf #f1 #Hf2
elim (seq_drops_trans_next … (seq_sym … HL12) … HLK1 … Hf2) // -f2 -L1 -Hf
/3 width=3 by seq_sym, ex2_intro/
qed-.
lemma drops_seq_trans_next: ∀f1,K1,K2. K1 ≡[f1] K2 →
- ∀b,f,I,L1. ⇩*[b,f] L1.ⓘ{I} ≘ K1 →
+ ∀b,f,I,L1. ⇩*[b,f] L1.ⓘ[I] ≘ K1 →
∀f2. f ~⊚ f1 ≘ ↑f2 →
- ∃∃L2. ⇩*[b,f] L2.ⓘ{I} ≘ K2 & L1 ≡[f2] L2 & L1.ⓘ{I} ≡[f] L2.ⓘ{I}.
+ ∃∃L2. ⇩*[b,f] L2.ⓘ[I] ≘ K2 & L1 ≡[f2] L2 & L1.ⓘ[I] ≡[f] L2.ⓘ[I].
#f1 #K1 #K2 #HK12 #b #f #I1 #L1 #HLK1 #f2 #Hf2
elim (drops_sex_trans_next … HK12 … HLK1 … Hf2) -f1 -K1
/2 width=6 by cfull_lift_sn, ceq_lift_sn/
]
qed-.
-fact sex_dropable_dx_aux: â\88\80RN,RP,b,f,L2,K2. â\87©*[b,f] L2 â\89\98 K2 â\86\92 ð\9d\90\94â¦\83fâ¦\84 →
+fact sex_dropable_dx_aux: â\88\80RN,RP,b,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 →
- ∀b,f,I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ{I1} → 𝐔⦃f⦄ →
+ ∀b,f,I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I1] → 𝐔❪f❫ →
∀f1. f ~⊚ ↑f1 ≘ f2 →
- ∃∃I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ{I2} & K1 ⪤[RN,RP,f1] K2 & RN K1 I1 I2.
+ ∃∃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
elim (sex_co_dropable_sn … HLK1 … Hf … HL12 … Hf2) -L1 -f2 -Hf
#X #HX #HLK2 elim (sex_inv_next1 … HX) -HX
lemma sex_drops_conf_push: ∀RN,RP.
∀f2,L1,L2. L1 ⪤[RN,RP,f2] L2 →
- ∀b,f,I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ{I1} → 𝐔⦃f⦄ →
+ ∀b,f,I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ[I1] → 𝐔❪f❫ →
∀f1. f ~⊚ ⫯f1 ≘ f2 →
- ∃∃I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ{I2} & K1 ⪤[RN,RP,f1] K2 & RP K1 I1 I2.
+ ∃∃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
elim (sex_co_dropable_sn … HLK1 … Hf … HL12 … Hf2) -L1 -f2 -Hf
#X #HX #HLK2 elim (sex_inv_push1 … HX) -HX
qed-.
lemma sex_drops_trans_next: ∀RN,RP,f2,L1,L2. L1 ⪤[RN,RP,f2] L2 →
- ∀b,f,I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ{I2} → 𝐔⦃f⦄ →
+ ∀b,f,I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I2] → 𝐔❪f❫ →
∀f1. f ~⊚ ↑f1 ≘ f2 →
- ∃∃I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ{I1} & K1 ⪤[RN,RP,f1] K2 & RN K1 I1 I2.
+ ∃∃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
elim (sex_co_dropable_dx … HL12 … HLK2 … Hf … Hf2) -L2 -f2 -Hf
#X #HLK1 #HX elim (sex_inv_next2 … HX) -HX
qed-.
lemma sex_drops_trans_push: ∀RN,RP,f2,L1,L2. L1 ⪤[RN,RP,f2] L2 →
- ∀b,f,I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ{I2} → 𝐔⦃f⦄ →
+ ∀b,f,I2,K2. ⇩*[b,f] L2 ≘ K2.ⓘ[I2] → 𝐔❪f❫ →
∀f1. f ~⊚ ⫯f1 ≘ f2 →
- ∃∃I1,K1. ⇩*[b,f] L1 ≘ K1.ⓘ{I1} & K1 ⪤[RN,RP,f1] K2 & RP K1 I1 I2.
+ ∃∃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
elim (sex_co_dropable_dx … HL12 … HLK2 … Hf … Hf2) -L2 -f2 -Hf
#X #HLK1 #HX elim (sex_inv_push2 … HX) -HX
lemma drops_sex_trans_next: ∀RN,RP. (∀L. reflexive ? (RN L)) → (∀L. reflexive ? (RP L)) →
d_liftable2_sn … liftsb RN → d_liftable2_sn … liftsb RP →
∀f1,K1,K2. K1 ⪤[RN,RP,f1] K2 →
- ∀b,f,I1,L1. ⇩*[b,f] L1.ⓘ{I1} ≘ K1 →
+ ∀b,f,I1,L1. ⇩*[b,f] L1.ⓘ[I1] ≘ K1 →
∀f2. f ~⊚ f1 ≘ ↑f2 →
- ∃∃I2,L2. ⇩*[b,f] L2.ⓘ{I2} ≘ K2 & L1 ⪤[RN,RP,f2] L2 & RN L1 I1 I2 & L1.ⓘ{I1} ≡[f] L2.ⓘ{I2}.
+ ∃∃I2,L2. ⇩*[b,f] L2.ⓘ[I2] ≘ K2 & L1 ⪤[RN,RP,f2] L2 & RN L1 I1 I2 & L1.ⓘ[I1] ≡[f] L2.ⓘ[I2].
#RN #RP #H1RN #H1RP #H2RN #H2RP #f1 #K1 #K2 #HK12 #b #f #I1 #L1 #HLK1 #f2 #Hf2
elim (sex_liftable_co_dedropable_sn … H1RN H1RP H2RN H2RP … HLK1 … HK12 … Hf2) -K1 -f1 -H1RN -H1RP -H2RN -H2RP
#X #HX #HLK2 #H1L12 elim (sex_inv_next1 … HX) -HX
lemma drops_sex_trans_push: ∀RN,RP. (∀L. reflexive ? (RN L)) → (∀L. reflexive ? (RP L)) →
d_liftable2_sn … liftsb RN → d_liftable2_sn … liftsb RP →
∀f1,K1,K2. K1 ⪤[RN,RP,f1] K2 →
- ∀b,f,I1,L1. ⇩*[b,f] L1.ⓘ{I1} ≘ K1 →
+ ∀b,f,I1,L1. ⇩*[b,f] L1.ⓘ[I1] ≘ K1 →
∀f2. f ~⊚ f1 ≘ ⫯f2 →
- ∃∃I2,L2. ⇩*[b,f] L2.ⓘ{I2} ≘ K2 & L1 ⪤[RN,RP,f2] L2 & RP L1 I1 I2 & L1.ⓘ{I1} ≡[f] L2.ⓘ{I2}.
+ ∃∃I2,L2. ⇩*[b,f] L2.ⓘ[I2] ≘ K2 & L1 ⪤[RN,RP,f2] L2 & RP L1 I1 I2 & L1.ⓘ[I1] ≡[f] L2.ⓘ[I2].
#RN #RP #H1RN #H1RP #H2RN #H2RP #f1 #K1 #K2 #HK12 #b #f #I1 #L1 #HLK1 #f2 #Hf2
elim (sex_liftable_co_dedropable_sn … H1RN H1RP H2RN H2RP … HLK1 … HK12 … Hf2) -K1 -f1 -H1RN -H1RP -H2RN -H2RP
#X #HX #HLK2 #H1L12 elim (sex_inv_push1 … HX) -HX
#I2 #L2 #H2L12 #HI12 #H destruct /2 width=6 by ex4_2_intro/
qed-.
-lemma drops_atom2_sex_conf: â\88\80RN,RP,b,f1,L1. â\87©*[b,f1] L1 â\89\98 â\8b\86 â\86\92 ð\9d\90\94â¦\83f1â¦\84 →
+lemma drops_atom2_sex_conf: â\88\80RN,RP,b,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
(* Forward lemmas with weight for local environments ************************)
(* Basic_2A1: includes: drop_fwd_lw *)
-lemma drops_fwd_lw: ∀b,f,L1,L2. ⇩*[b,f] L1 ≘ L2 → ♯{L2} ≤ ♯{L1}.
+lemma drops_fwd_lw: ∀b,f,L1,L2. ⇩*[b,f] L1 ≘ L2 → ♯❨L2❩ ≤ ♯❨L1❩.
#b #f #L1 #L2 #H elim H -f -L1 -L2 //
[ /2 width=3 by transitive_le/
| #f #I1 #I2 #L1 #L2 #_ #HI21 #IHL12 normalize
(* Basic_2A1: includes: drop_fwd_lw_lt *)
lemma drops_fwd_lw_lt: ∀f,L1,L2. ⇩*[Ⓣ,f] L1 ≘ L2 →
- (ð\9d\90\88â¦\83fâ¦\84 â\86\92 â\8a¥) â\86\92 â\99¯{L2} < â\99¯{L1}.
+ (ð\9d\90\88â\9dªfâ\9d« â\86\92 â\8a¥) â\86\92 â\99¯â\9d¨L2â\9d© < â\99¯â\9d¨L1â\9d©.
#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, le_to_lt_to_lt/
(* Forward lemmas with restricted weight for closures ***********************)
(* Basic_2A1: includes: drop_fwd_rfw *)
-lemma drops_bind2_fwd_rfw: ∀b,f,I,L,K,V. ⇩*[b,f] L ≘ K.ⓑ{I}V → ∀T. ♯{K,V} < ♯{L,T}.
+lemma drops_bind2_fwd_rfw: ∀b,f,I,L,K,V. ⇩*[b,f] L ≘ K.ⓑ[I]V → ∀T. ♯❨K,V❩ < ♯❨L,T❩.
#b #f #I #L #K #V #HLK lapply (drops_fwd_lw … HLK) -HLK
normalize in ⊢ (%→?→?%%); /3 width=3 by le_to_lt_to_lt, monotonic_lt_plus_r/
qed-.
(* Advanced inversion lemma *************************************************)
-lemma drops_inv_x_bind_xy: ∀b,f,I,L. ⇩*[b,f] L ≘ L.ⓘ{I} → ⊥.
+lemma drops_inv_x_bind_xy: ∀b,f,I,L. ⇩*[b,f] L ≘ L.ⓘ[I] → ⊥.
#b #f #I #L #H lapply (drops_fwd_lw … H) -b -f
/2 width=4 by lt_le_false/ (**) (* full auto is a bit slow: 19s *)
qed-.
(* GENERIC EXTENSION OF A CONTEXT-SENSITIVE REALTION FOR TERMS **************)
definition lex (R): relation lenv ≝
- λL1,L2. â\88\83â\88\83f. ð\9d\90\88â¦\83fâ¦\84 & 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).
/2 width=3 by sex_atom, ex2_intro/ qed.
lemma lex_bind (R): ∀I1,I2,K1,K2. K1 ⪤[R] K2 → cext2 R K1 I1 I2 →
- K1.ⓘ{I1} ⪤[R] K2.ⓘ{I2}.
+ K1.ⓘ[I1] ⪤[R] K2.ⓘ[I2].
#R #I1 #I2 #K1 #K2 * #f #Hf #HK12 #HI12
/3 width=3 by sex_push, isid_push, ex2_intro/
qed.
(* Advanced properties ******************************************************)
lemma lex_bind_refl_dx (R): c_reflexive … R →
- ∀I,K1,K2. K1 ⪤[R] K2 → K1.ⓘ{I} ⪤[R] K2.ⓘ{I}.
+ ∀I,K1,K2. K1 ⪤[R] K2 → K1.ⓘ[I] ⪤[R] K2.ⓘ[I].
/3 width=3 by ext2_refl, lex_bind/ qed.
-lemma lex_unit (R): ∀I,K1,K2. K1 ⪤[R] K2 → K1.ⓤ{I} ⪤[R] K2.ⓤ{I}.
+lemma lex_unit (R): ∀I,K1,K2. K1 ⪤[R] K2 → K1.ⓤ[I] ⪤[R] K2.ⓤ[I].
/3 width=1 by lex_bind, ext2_unit/ qed.
(* Basic_2A1: was: lpx_sn_pair *)
lemma lex_pair (R): ∀I,K1,K2,V1,V2. K1 ⪤[R] K2 → R K1 V1 V2 →
- K1.ⓑ{I}V1 ⪤[R] K2.ⓑ{I}V2.
+ K1.ⓑ[I]V1 ⪤[R] K2.ⓑ[I]V2.
/3 width=1 by lex_bind, ext2_pair/ qed.
(* Basic inversion lemmas ***************************************************)
#R #L2 * #f #Hf #H >(sex_inv_atom1 … H) -L2 //
qed-.
-lemma lex_inv_bind_sn (R): ∀I1,L2,K1. K1.ⓘ{I1} ⪤[R] L2 →
- ∃∃I2,K2. K1 ⪤[R] K2 & cext2 R K1 I1 I2 & L2 = K2.ⓘ{I2}.
+lemma lex_inv_bind_sn (R): ∀I1,L2,K1. K1.ⓘ[I1] ⪤[R] L2 →
+ ∃∃I2,K2. K1 ⪤[R] K2 & cext2 R K1 I1 I2 & L2 = K2.ⓘ[I2].
#R #I1 #L2 #K1 * #f #Hf #H
lapply (sex_eq_repl_fwd … H (⫯f) ?) -H /2 width=1 by eq_push_inv_isid/ #H
elim (sex_inv_push1 … H) -H #I2 #K2 #HK12 #HI12 #H destruct
#R #L1 * #f #Hf #H >(sex_inv_atom2 … H) -L1 //
qed-.
-lemma lex_inv_bind_dx (R): ∀I2,L1,K2. L1 ⪤[R] K2.ⓘ{I2} →
- ∃∃I1,K1. K1 ⪤[R] K2 & cext2 R K1 I1 I2 & L1 = K1.ⓘ{I1}.
+lemma lex_inv_bind_dx (R): ∀I2,L1,K2. L1 ⪤[R] K2.ⓘ[I2] →
+ ∃∃I1,K1. K1 ⪤[R] K2 & cext2 R K1 I1 I2 & L1 = K1.ⓘ[I1].
#R #I2 #L1 #K2 * #f #Hf #H
lapply (sex_eq_repl_fwd … H (⫯f) ?) -H /2 width=1 by eq_push_inv_isid/ #H
elim (sex_inv_push2 … H) -H #I1 #K1 #HK12 #HI12 #H destruct
(* Advanced inversion lemmas ************************************************)
-lemma lex_inv_unit_sn (R): ∀I,L2,K1. K1.ⓤ{I} ⪤[R] L2 →
- ∃∃K2. K1 ⪤[R] K2 & L2 = K2.ⓤ{I}.
+lemma lex_inv_unit_sn (R): ∀I,L2,K1. K1.ⓤ[I] ⪤[R] L2 →
+ ∃∃K2. K1 ⪤[R] K2 & L2 = K2.ⓤ[I].
#R #I #L2 #K1 #H
elim (lex_inv_bind_sn … H) -H #Z2 #K2 #HK12 #HZ2 #H destruct
elim (ext2_inv_unit_sn … HZ2) -HZ2
qed-.
(* Basic_2A1: was: lpx_sn_inv_pair1 *)
-lemma lex_inv_pair_sn (R): ∀I,L2,K1,V1. K1.ⓑ{I}V1 ⪤[R] L2 →
- ∃∃K2,V2. K1 ⪤[R] K2 & R K1 V1 V2 & L2 = K2.ⓑ{I}V2.
+lemma lex_inv_pair_sn (R): ∀I,L2,K1,V1. K1.ⓑ[I]V1 ⪤[R] L2 →
+ ∃∃K2,V2. K1 ⪤[R] K2 & R K1 V1 V2 & L2 = K2.ⓑ[I]V2.
#R #I #L2 #K1 #V1 #H
elim (lex_inv_bind_sn … H) -H #Z2 #K2 #HK12 #HZ2 #H destruct
elim (ext2_inv_pair_sn … HZ2) -HZ2 #V2 #HV12 #H destruct
/2 width=5 by ex3_2_intro/
qed-.
-lemma lex_inv_unit_dx (R): ∀I,L1,K2. L1 ⪤[R] K2.ⓤ{I} →
- ∃∃K1. K1 ⪤[R] K2 & L1 = K1.ⓤ{I}.
+lemma lex_inv_unit_dx (R): ∀I,L1,K2. L1 ⪤[R] K2.ⓤ[I] →
+ ∃∃K1. K1 ⪤[R] K2 & L1 = K1.ⓤ[I].
#R #I #L1 #K2 #H
elim (lex_inv_bind_dx … H) -H #Z1 #K1 #HK12 #HZ1 #H destruct
elim (ext2_inv_unit_dx … HZ1) -HZ1
qed-.
(* Basic_2A1: was: lpx_sn_inv_pair2 *)
-lemma lex_inv_pair_dx (R): ∀I,L1,K2,V2. L1 ⪤[R] K2.ⓑ{I}V2 →
- ∃∃K1,V1. K1 ⪤[R] K2 & R K1 V1 V2 & L1 = K1.ⓑ{I}V1.
+lemma lex_inv_pair_dx (R): ∀I,L1,K2,V2. L1 ⪤[R] K2.ⓑ[I]V2 →
+ ∃∃K1,V1. K1 ⪤[R] K2 & R K1 V1 V2 & L1 = K1.ⓑ[I]V1.
#R #I #L1 #K2 #V2 #H
elim (lex_inv_bind_dx … H) -H #Z1 #K1 #HK12 #HZ1 #H destruct
elim (ext2_inv_pair_dx … HZ1) -HZ1 #V1 #HV12 #H destruct
(* Basic_2A1: was: lpx_sn_inv_pair *)
lemma lex_inv_pair (R): ∀I1,I2,L1,L2,V1,V2.
- L1.ⓑ{I1}V1 ⪤[R] L2.ⓑ{I2}V2 →
+ L1.ⓑ[I1]V1 ⪤[R] L2.ⓑ[I2]V2 →
∧∧ L1 ⪤[R] L2 & R L1 V1 V2 & I1 = I2.
#R #I1 #I2 #L1 #L2 #V1 #V2 #H elim (lex_inv_pair_sn … H) -H
#L0 #V0 #HL10 #HV10 #H destruct /2 width=1 by and3_intro/
lemma lex_ind (R) (Q:relation2 …):
Q (⋆) (⋆) →
(
- ∀I,K1,K2. K1 ⪤[R] K2 → Q K1 K2 → Q (K1.ⓤ{I}) (K2.ⓤ{I})
+ ∀I,K1,K2. K1 ⪤[R] K2 → Q K1 K2 → Q (K1.ⓤ[I]) (K2.ⓤ[I])
) → (
- ∀I,K1,K2,V1,V2. K1 ⪤[R] K2 → Q K1 K2 → R K1 V1 V2 →Q (K1.ⓑ{I}V1) (K2.ⓑ{I}V2)
+ ∀I,K1,K2,V1,V2. K1 ⪤[R] K2 → Q K1 K2 → R K1 V1 V2 →Q (K1.ⓑ[I]V1) (K2.ⓑ[I]V2)
) →
∀L1,L2. L1 ⪤[R] L2 → Q L1 L2.
#R #Q #IH1 #IH2 #IH3 #L1 #L2 * #f @pull_2 #H
*)
inductive lifts: rtmap → relation term ≝
| lifts_sort: ∀f,s. lifts f (⋆s) (⋆s)
-| lifts_lref: â\88\80f,i1,i2. @â¦\83i1,fâ¦\84 ≘ i2 → lifts f (#i1) (#i2)
+| lifts_lref: â\88\80f,i1,i2. @â\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 →
- lifts f (ⓑ{p,I}V1.T1) (ⓑ{p,I}V2.T2)
+ lifts f (ⓑ[p,I]V1.T1) (ⓑ[p,I]V2.T2)
| lifts_flat: ∀f,I,V1,V2,T1,T2.
lifts f V1 V2 → lifts f T1 T2 →
- lifts f (ⓕ{I}V1.T1) (ⓕ{I}V2.T2)
+ lifts f (ⓕ[I]V1.T1) (ⓕ[I]V2.T2)
.
interpretation "uniform relocation (term)"
/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. @â¦\83i1,fâ¦\84 ≘ i2 & Y = #i2.
+ â\88\83â\88\83i2. @â\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. @â¦\83i1,fâ¦\84 ≘ i2 & Y = #i2.
+ â\88\83â\88\83i2. @â\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_gref1_aux/ qed-.
fact lifts_inv_bind1_aux: ∀f,X,Y. ⇧*[f] X ≘ Y →
- ∀p,I,V1,T1. X = ⓑ{p,I}V1.T1 →
+ ∀p,I,V1,T1. X = ⓑ[p,I]V1.T1 →
∃∃V2,T2. ⇧*[f] V1 ≘ V2 & ⇧*[⫯f] T1 ≘ T2 &
- Y = ⓑ{p,I}V2.T2.
+ Y = ⓑ[p,I]V2.T2.
#f #X #Y * -f -X -Y
[ #f #s #q #J #W1 #U1 #H destruct
| #f #i1 #i2 #_ #q #J #W1 #U1 #H destruct
(* Basic_1: was: lift1_bind *)
(* Basic_2A1: includes: lift_inv_bind1 *)
-lemma lifts_inv_bind1: ∀f,p,I,V1,T1,Y. ⇧*[f] ⓑ{p,I}V1.T1 ≘ Y →
+lemma lifts_inv_bind1: ∀f,p,I,V1,T1,Y. ⇧*[f] ⓑ[p,I]V1.T1 ≘ Y →
∃∃V2,T2. ⇧*[f] V1 ≘ V2 & ⇧*[⫯f] T1 ≘ T2 &
- Y = ⓑ{p,I}V2.T2.
+ Y = ⓑ[p,I]V2.T2.
/2 width=3 by lifts_inv_bind1_aux/ qed-.
fact lifts_inv_flat1_aux: ∀f:rtmap. ∀X,Y. ⇧*[f] X ≘ Y →
- ∀I,V1,T1. X = ⓕ{I}V1.T1 →
+ ∀I,V1,T1. X = ⓕ[I]V1.T1 →
∃∃V2,T2. ⇧*[f] V1 ≘ V2 & ⇧*[f] T1 ≘ T2 &
- Y = ⓕ{I}V2.T2.
+ Y = ⓕ[I]V2.T2.
#f #X #Y * -f -X -Y
[ #f #s #J #W1 #U1 #H destruct
| #f #i1 #i2 #_ #J #W1 #U1 #H destruct
(* Basic_1: was: lift1_flat *)
(* Basic_2A1: includes: lift_inv_flat1 *)
-lemma lifts_inv_flat1: ∀f:rtmap. ∀I,V1,T1,Y. ⇧*[f] ⓕ{I}V1.T1 ≘ Y →
+lemma lifts_inv_flat1: ∀f:rtmap. ∀I,V1,T1,Y. ⇧*[f] ⓕ[I]V1.T1 ≘ Y →
∃∃V2,T2. ⇧*[f] V1 ≘ V2 & ⇧*[f] T1 ≘ T2 &
- Y = ⓕ{I}V2.T2.
+ Y = ⓕ[I]V2.T2.
/2 width=3 by lifts_inv_flat1_aux/ qed-.
fact lifts_inv_sort2_aux: ∀f,X,Y. ⇧*[f] X ≘ Y → ∀s. Y = ⋆s → X = ⋆s.
/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. @â¦\83i1,fâ¦\84 ≘ i2 & X = #i1.
+ â\88\83â\88\83i1. @â\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. @â¦\83i1,fâ¦\84 ≘ i2 & X = #i1.
+ â\88\83â\88\83i1. @â\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.
/2 width=4 by lifts_inv_gref2_aux/ qed-.
fact lifts_inv_bind2_aux: ∀f,X,Y. ⇧*[f] X ≘ Y →
- ∀p,I,V2,T2. Y = ⓑ{p,I}V2.T2 →
+ ∀p,I,V2,T2. Y = ⓑ[p,I]V2.T2 →
∃∃V1,T1. ⇧*[f] V1 ≘ V2 & ⇧*[⫯f] T1 ≘ T2 &
- X = ⓑ{p,I}V1.T1.
+ X = ⓑ[p,I]V1.T1.
#f #X #Y * -f -X -Y
[ #f #s #q #J #W2 #U2 #H destruct
| #f #i1 #i2 #_ #q #J #W2 #U2 #H destruct
(* Basic_1: includes: lift_gen_bind *)
(* Basic_2A1: includes: lift_inv_bind2 *)
-lemma lifts_inv_bind2: ∀f,p,I,V2,T2,X. ⇧*[f] X ≘ ⓑ{p,I}V2.T2 →
+lemma lifts_inv_bind2: ∀f,p,I,V2,T2,X. ⇧*[f] X ≘ ⓑ[p,I]V2.T2 →
∃∃V1,T1. ⇧*[f] V1 ≘ V2 & ⇧*[⫯f] T1 ≘ T2 &
- X = ⓑ{p,I}V1.T1.
+ X = ⓑ[p,I]V1.T1.
/2 width=3 by lifts_inv_bind2_aux/ qed-.
fact lifts_inv_flat2_aux: ∀f:rtmap. ∀X,Y. ⇧*[f] X ≘ Y →
- ∀I,V2,T2. Y = ⓕ{I}V2.T2 →
+ ∀I,V2,T2. Y = ⓕ[I]V2.T2 →
∃∃V1,T1. ⇧*[f] V1 ≘ V2 & ⇧*[f] T1 ≘ T2 &
- X = ⓕ{I}V1.T1.
+ X = ⓕ[I]V1.T1.
#f #X #Y * -f -X -Y
[ #f #s #J #W2 #U2 #H destruct
| #f #i1 #i2 #_ #J #W2 #U2 #H destruct
(* Basic_1: includes: lift_gen_flat *)
(* Basic_2A1: includes: lift_inv_flat2 *)
-lemma lifts_inv_flat2: ∀f:rtmap. ∀I,V2,T2,X. ⇧*[f] X ≘ ⓕ{I}V2.T2 →
+lemma lifts_inv_flat2: ∀f:rtmap. ∀I,V2,T2,X. ⇧*[f] X ≘ ⓕ[I]V2.T2 →
∃∃V1,T1. ⇧*[f] V1 ≘ V2 & ⇧*[f] T1 ≘ T2 &
- X = ⓕ{I}V1.T1.
+ X = ⓕ[I]V1.T1.
/2 width=3 by lifts_inv_flat2_aux/ qed-.
(* Advanced inversion lemmas ************************************************)
-lemma lifts_inv_atom1: ∀f,I,Y. ⇧*[f] ⓪{I} ≘ Y →
+lemma lifts_inv_atom1: ∀f,I,Y. ⇧*[f] ⓪[I] ≘ Y →
∨∨ ∃∃s. I = Sort s & Y = ⋆s
- | â\88\83â\88\83i,j. @â¦\83i,fâ¦\84 ≘ j & I = LRef i & Y = #j
+ | â\88\83â\88\83i,j. @â\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)
] -H /3 width=5 by or3_intro0, or3_intro1, or3_intro2, ex3_2_intro, ex2_intro/
qed-.
-lemma lifts_inv_atom2: ∀f,I,X. ⇧*[f] X ≘ ⓪{I} →
+lemma lifts_inv_atom2: ∀f,I,X. ⇧*[f] X ≘ ⓪[I] →
∨∨ ∃∃s. X = ⋆s & I = Sort s
- | â\88\83â\88\83i,j. @â¦\83i,fâ¦\84 ≘ j & X = #i & I = LRef j
+ | â\88\83â\88\83i,j. @â\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)
qed-.
(* Basic_2A1: includes: lift_inv_pair_xy_x *)
-lemma lifts_inv_pair_xy_x: ∀f,I,V,T. ⇧*[f] ②{I}V.T ≘ V → ⊥.
+lemma lifts_inv_pair_xy_x: ∀f,I,V,T. ⇧*[f] ②[I]V.T ≘ V → ⊥.
#f #J #V elim V -V
[ * #i #U #H
[ lapply (lifts_inv_sort2 … H) -H #H destruct
(* Basic_1: includes: thead_x_lift_y_y *)
(* Basic_2A1: includes: lift_inv_pair_xy_y *)
-lemma lifts_inv_pair_xy_y: ∀I,T,V,f. ⇧*[f] ②{I}V.T ≘ T → ⊥.
+lemma lifts_inv_pair_xy_y: ∀I,T,V,f. ⇧*[f] ②[I]V.T ≘ T → ⊥.
#J #T elim T -T
[ * #i #W #f #H
[ lapply (lifts_inv_sort2 … H) -H #H destruct
(* 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â¦\83fâ¦\84 → 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 isid_inv_at_mono, isid_push, eq_f2, eq_f/
qed-.
(* Basic_2A1: includes: lift_fwd_pair1 *)
-lemma lifts_fwd_pair1: ∀f:rtmap. ∀I,V1,T1,Y. ⇧*[f] ②{I}V1.T1 ≘ Y →
- ∃∃V2,T2. ⇧*[f] V1 ≘ V2 & Y = ②{I}V2.T2.
+lemma lifts_fwd_pair1: ∀f:rtmap. ∀I,V1,T1,Y. ⇧*[f] ②[I]V1.T1 ≘ Y →
+ ∃∃V2,T2. ⇧*[f] V1 ≘ V2 & Y = ②[I]V2.T2.
#f * [ #p ] #I #V1 #T1 #Y #H
[ elim (lifts_inv_bind1 … H) -H /2 width=4 by ex2_2_intro/
| elim (lifts_inv_flat1 … H) -H /2 width=4 by ex2_2_intro/
qed-.
(* Basic_2A1: includes: lift_fwd_pair2 *)
-lemma lifts_fwd_pair2: ∀f:rtmap. ∀I,V2,T2,X. ⇧*[f] X ≘ ②{I}V2.T2 →
- ∃∃V1,T1. ⇧*[f] V1 ≘ V2 & X = ②{I}V1.T1.
+lemma lifts_fwd_pair2: ∀f:rtmap. ∀I,V2,T2,X. ⇧*[f] X ≘ ②[I]V2.T2 →
+ ∃∃V1,T1. ⇧*[f] V1 ≘ V2 & X = ②[I]V1.T1.
#f * [ #p ] #I #V2 #T2 #X #H
[ elim (lifts_inv_bind2 … H) -H /2 width=4 by ex2_2_intro/
| elim (lifts_inv_flat2 … H) -H /2 width=4 by ex2_2_intro/
(* Basic_1: includes: lift_r *)
(* Basic_2A1: includes: lift_refl *)
-lemma lifts_refl: â\88\80T,f. ð\9d\90\88â¦\83fâ¦\84 → ⇧*[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, isid_inv_at, isid_push/
qed.
(* Properties with uniform relocation ***************************************)
-lemma lifts_uni: â\88\80n1,n2,T,U. â\87§*[ð\9d\90\94â\9d´n1â\9dµâ\88\98ð\9d\90\94â\9d´n2â\9dµ] T ≘ U → ⇧*[n1+n2] T ≘ U.
+lemma lifts_uni: â\88\80n1,n2,T,U. â\87§*[ð\9d\90\94â\9d¨n1â\9d©â\88\98ð\9d\90\94â\9d¨n2â\9d©] T ≘ U → ⇧*[n1+n2] T ≘ U.
/3 width=4 by lifts_eq_repl_back, after_inv_total/ qed.
(* Basic_2A1: removed theorems 14:
#I1 #I2 #f1 * -I1 -I2 /3 width=3 by lifts_eq_repl_back, ext2_pair/
qed-.
-lemma liftsb_refl: â\88\80f. ð\9d\90\88â¦\83fâ¦\84 → reflexive … (liftsb f).
+lemma liftsb_refl: â\88\80f. ð\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: â\88\80f,I1,I2. â\87§*[f] I1 â\89\98 I2 â\86\92 ð\9d\90\88â¦\83fâ¦\84 → I1 = I2.
+lemma liftsb_fwd_isid: â\88\80f,I1,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â¦\83T1â¦\84 â\86\92 ð\9d\90\92â¦\83T2â¦\84.
+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â¦\83T2â¦\84 â\86\92 ð\9d\90\92â¦\83T1â¦\84.
+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-.
/3 width=6 by teqx_inv_lifts_sn, deliftable2_sn_bi/ qed-.
lemma teqx_lifts_inv_pair_sn (I) (f:rtmap):
- ∀X,T. ⇧*[f]X ≘ T → ∀V. ②{I}V.T ≛ X → ⊥.
+ ∀X,T. ⇧*[f]X ≘ T → ∀V. ②[I]V.T ≛ X → ⊥.
#I #f #X #T #H elim H -f -X -T
[ #f #s #V #H
elim (teqx_inv_pair1 … H) -H #X1 #X2 #_ #_ #H destruct
(* Forward lemmas with weight for terms *************************************)
(* Basic_2A1: includes: lift_fwd_tw *)
-lemma lifts_fwd_tw: ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → ♯{T1} = ♯{T2}.
+lemma lifts_fwd_tw: ∀f,T1,T2. ⇧*[f] T1 ≘ T2 → ♯❨T1❩ = ♯❨T2❩.
#f #T1 #T2 #H elim H -f -T1 -T2 normalize //
qed-.
(* Forward lemmas with weight for binders ***********************************)
-lemma liftsb_fwd_bw: ∀f,I1,I2. ⇧*[f] I1 ≘ I2 → ♯{I1} = ♯{I2}.
+lemma liftsb_fwd_bw: ∀f,I1,I2. ⇧*[f] I1 ≘ I2 → ♯❨I1❩ = ♯❨I2❩.
#f #I1 #I2 * -I1 -I2 /2 width=2 by lifts_fwd_tw/
qed-.
/2 width=4 by sex_inv_atom1/ qed-.
(* Basic_2A1: includes: lreq_inv_pair1 *)
-lemma seq_inv_next1: ∀g,J,K1,Y. K1.ⓘ{J} ≡[↑g] Y →
- ∃∃K2. K1 ≡[g] K2 & Y = K2.ⓘ{J}.
+lemma seq_inv_next1: ∀g,J,K1,Y. K1.ⓘ[J] ≡[↑g] Y →
+ ∃∃K2. K1 ≡[g] K2 & Y = K2.ⓘ[J].
#g #J #K1 #Y #H
elim (sex_inv_next1 … H) -H #Z #K2 #HK12 #H1 #H2 destruct
<(ceq_ext_inv_eq … H1) -Z /2 width=3 by ex2_intro/
qed-.
(* Basic_2A1: includes: lreq_inv_zero1 lreq_inv_succ1 *)
-lemma seq_inv_push1: ∀g,J1,K1,Y. K1.ⓘ{J1} ≡[⫯g] Y →
- ∃∃J2,K2. K1 ≡[g] K2 & Y = K2.ⓘ{J2}.
+lemma seq_inv_push1: ∀g,J1,K1,Y. K1.ⓘ[J1] ≡[⫯g] Y →
+ ∃∃J2,K2. K1 ≡[g] K2 & Y = K2.ⓘ[J2].
#g #J1 #K1 #Y #H elim (sex_inv_push1 … H) -H /2 width=4 by ex2_2_intro/
qed-.
/2 width=4 by sex_inv_atom2/ qed-.
(* Basic_2A1: includes: lreq_inv_pair2 *)
-lemma seq_inv_next2: ∀g,J,X,K2. X ≡[↑g] K2.ⓘ{J} →
- ∃∃K1. K1 ≡[g] K2 & X = K1.ⓘ{J}.
+lemma seq_inv_next2: ∀g,J,X,K2. X ≡[↑g] K2.ⓘ[J] →
+ ∃∃K1. K1 ≡[g] K2 & X = K1.ⓘ[J].
#g #J #X #K2 #H
elim (sex_inv_next2 … H) -H #Z #K1 #HK12 #H1 #H2 destruct
<(ceq_ext_inv_eq … H1) -J /2 width=3 by ex2_intro/
qed-.
(* Basic_2A1: includes: lreq_inv_zero2 lreq_inv_succ2 *)
-lemma seq_inv_push2: ∀g,J2,X,K2. X ≡[⫯g] K2.ⓘ{J2} →
- ∃∃J1,K1. K1 ≡[g] K2 & X = K1.ⓘ{J1}.
+lemma seq_inv_push2: ∀g,J2,X,K2. X ≡[⫯g] K2.ⓘ[J2] →
+ ∃∃J1,K1. K1 ≡[g] K2 & X = K1.ⓘ[J1].
#g #J2 #X #K2 #H elim (sex_inv_push2 … H) -H /2 width=4 by ex2_2_intro/
qed-.
(* Basic_2A1: includes: lreq_inv_pair *)
-lemma seq_inv_next: ∀f,I1,I2,L1,L2. L1.ⓘ{I1} ≡[↑f] L2.ⓘ{I2} →
+lemma seq_inv_next: ∀f,I1,I2,L1,L2. L1.ⓘ[I1] ≡[↑f] L2.ⓘ[I2] →
∧∧ L1 ≡[f] L2 & I1 = I2.
#f #I1 #I2 #L1 #L2 #H elim (sex_inv_next … H) -H
/3 width=3 by ceq_ext_inv_eq, conj/
qed-.
(* Basic_2A1: includes: lreq_inv_succ *)
-lemma seq_inv_push: ∀f,I1,I2,L1,L2. L1.ⓘ{I1} ≡[⫯f] L2.ⓘ{I2} → L1 ≡[f] L2.
+lemma seq_inv_push: ∀f,I1,I2,L1,L2. L1.ⓘ[I1] ≡[⫯f] L2.ⓘ[I2] → L1 ≡[f] L2.
#f #I1 #I2 #L1 #L2 #H elim (sex_inv_push … H) -H /2 width=1 by conj/
qed-.
-lemma seq_inv_tl: ∀f,I,L1,L2. L1 ≡[⫱f] L2 → L1.ⓘ{I} ≡[f] L2.ⓘ{I}.
+lemma seq_inv_tl: ∀f,I,L1,L2. L1 ≡[⫱f] L2 → L1.ⓘ[I] ≡[f] L2.ⓘ[I].
/2 width=1 by sex_inv_tl/ qed-.
(* Basic_2A1: removed theorems 5:
| sex_atom: ∀f. sex RN RP f (⋆) (⋆)
| sex_next: ∀f,I1,I2,L1,L2.
sex RN RP f L1 L2 → RN L1 I1 I2 →
- sex RN RP (↑f) (L1.ⓘ{I1}) (L2.ⓘ{I2})
+ sex RN RP (↑f) (L1.ⓘ[I1]) (L2.ⓘ[I2])
| sex_push: ∀f,I1,I2,L1,L2.
sex RN RP f L1 L2 → RP L1 I1 I2 →
- sex RN RP (⫯f) (L1.ⓘ{I1}) (L2.ⓘ{I2})
+ sex RN RP (⫯f) (L1.ⓘ[I1]) (L2.ⓘ[I2])
.
interpretation "generic entrywise extension (local environment)"
lemma sex_inv_atom1: ∀RN,RP,f,Y. ⋆ ⪤[RN,RP,f] Y → Y = ⋆.
/2 width=6 by sex_inv_atom1_aux/ qed-.
-fact sex_inv_next1_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J1,K1. X = K1.ⓘ{J1} → f = ↑g →
- ∃∃J2,K2. K1 ⪤[RN,RP,g] K2 & RN K1 J1 J2 & Y = K2.ⓘ{J2}.
+fact sex_inv_next1_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J1,K1. X = K1.ⓘ[J1] → f = ↑g →
+ ∃∃J2,K2. K1 ⪤[RN,RP,g] K2 & RN K1 J1 J2 & Y = K2.ⓘ[J2].
#RN #RP #f #X #Y * -f -X -Y
[ #f #g #J1 #K1 #H destruct
| #f #I1 #I2 #L1 #L2 #HL #HI #g #J1 #K1 #H1 #H2 <(injective_next … H2) -g destruct
qed-.
(* Basic_2A1: includes lpx_sn_inv_pair1 *)
-lemma sex_inv_next1: ∀RN,RP,g,J1,K1,Y. K1.ⓘ{J1} ⪤[RN,RP,↑g] Y →
- ∃∃J2,K2. K1 ⪤[RN,RP,g] K2 & RN K1 J1 J2 & Y = K2.ⓘ{J2}.
+lemma sex_inv_next1: ∀RN,RP,g,J1,K1,Y. K1.ⓘ[J1] ⪤[RN,RP,↑g] Y →
+ ∃∃J2,K2. K1 ⪤[RN,RP,g] K2 & RN K1 J1 J2 & Y = K2.ⓘ[J2].
/2 width=7 by sex_inv_next1_aux/ qed-.
-fact sex_inv_push1_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J1,K1. X = K1.ⓘ{J1} → f = ⫯g →
- ∃∃J2,K2. K1 ⪤[RN,RP,g] K2 & RP K1 J1 J2 & Y = K2.ⓘ{J2}.
+fact sex_inv_push1_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J1,K1. X = K1.ⓘ[J1] → f = ⫯g →
+ ∃∃J2,K2. K1 ⪤[RN,RP,g] K2 & RP K1 J1 J2 & Y = K2.ⓘ[J2].
#RN #RP #f #X #Y * -f -X -Y
[ #f #g #J1 #K1 #H destruct
| #f #I1 #I2 #L1 #L2 #_ #_ #g #J1 #K1 #_ #H elim (discr_next_push … H)
]
qed-.
-lemma sex_inv_push1: ∀RN,RP,g,J1,K1,Y. K1.ⓘ{J1} ⪤[RN,RP,⫯g] Y →
- ∃∃J2,K2. K1 ⪤[RN,RP,g] K2 & RP K1 J1 J2 & Y = K2.ⓘ{J2}.
+lemma sex_inv_push1: ∀RN,RP,g,J1,K1,Y. K1.ⓘ[J1] ⪤[RN,RP,⫯g] Y →
+ ∃∃J2,K2. K1 ⪤[RN,RP,g] K2 & RP K1 J1 J2 & Y = K2.ⓘ[J2].
/2 width=7 by sex_inv_push1_aux/ qed-.
fact sex_inv_atom2_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → Y = ⋆ → X = ⋆.
lemma sex_inv_atom2: ∀RN,RP,f,X. X ⪤[RN,RP,f] ⋆ → X = ⋆.
/2 width=6 by sex_inv_atom2_aux/ qed-.
-fact sex_inv_next2_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J2,K2. Y = K2.ⓘ{J2} → f = ↑g →
- ∃∃J1,K1. K1 ⪤[RN,RP,g] K2 & RN K1 J1 J2 & X = K1.ⓘ{J1}.
+fact sex_inv_next2_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J2,K2. Y = K2.ⓘ[J2] → f = ↑g →
+ ∃∃J1,K1. K1 ⪤[RN,RP,g] K2 & RN K1 J1 J2 & X = K1.ⓘ[J1].
#RN #RP #f #X #Y * -f -X -Y
[ #f #g #J2 #K2 #H destruct
| #f #I1 #I2 #L1 #L2 #HL #HI #g #J2 #K2 #H1 #H2 <(injective_next … H2) -g destruct
qed-.
(* Basic_2A1: includes lpx_sn_inv_pair2 *)
-lemma sex_inv_next2: ∀RN,RP,g,J2,X,K2. X ⪤[RN,RP,↑g] K2.ⓘ{J2} →
- ∃∃J1,K1. K1 ⪤[RN,RP,g] K2 & RN K1 J1 J2 & X = K1.ⓘ{J1}.
+lemma sex_inv_next2: ∀RN,RP,g,J2,X,K2. X ⪤[RN,RP,↑g] K2.ⓘ[J2] →
+ ∃∃J1,K1. K1 ⪤[RN,RP,g] K2 & RN K1 J1 J2 & X = K1.ⓘ[J1].
/2 width=7 by sex_inv_next2_aux/ qed-.
-fact sex_inv_push2_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J2,K2. Y = K2.ⓘ{J2} → f = ⫯g →
- ∃∃J1,K1. K1 ⪤[RN,RP,g] K2 & RP K1 J1 J2 & X = K1.ⓘ{J1}.
+fact sex_inv_push2_aux: ∀RN,RP,f,X,Y. X ⪤[RN,RP,f] Y → ∀g,J2,K2. Y = K2.ⓘ[J2] → f = ⫯g →
+ ∃∃J1,K1. K1 ⪤[RN,RP,g] K2 & RP K1 J1 J2 & X = K1.ⓘ[J1].
#RN #RP #f #X #Y * -f -X -Y
[ #f #J2 #K2 #g #H destruct
| #f #I1 #I2 #L1 #L2 #_ #_ #g #J2 #K2 #_ #H elim (discr_next_push … H)
]
qed-.
-lemma sex_inv_push2: ∀RN,RP,g,J2,X,K2. X ⪤[RN,RP,⫯g] K2.ⓘ{J2} →
- ∃∃J1,K1. K1 ⪤[RN,RP,g] K2 & RP K1 J1 J2 & X = K1.ⓘ{J1}.
+lemma sex_inv_push2: ∀RN,RP,g,J2,X,K2. X ⪤[RN,RP,⫯g] K2.ⓘ[J2] →
+ ∃∃J1,K1. K1 ⪤[RN,RP,g] K2 & RP K1 J1 J2 & X = K1.ⓘ[J1].
/2 width=7 by sex_inv_push2_aux/ qed-.
(* Basic_2A1: includes lpx_sn_inv_pair *)
lemma sex_inv_next: ∀RN,RP,f,I1,I2,L1,L2.
- L1.ⓘ{I1} ⪤[RN,RP,↑f] L2.ⓘ{I2} →
+ L1.ⓘ[I1] ⪤[RN,RP,↑f] L2.ⓘ[I2] →
L1 ⪤[RN,RP,f] L2 ∧ RN L1 I1 I2.
#RN #RP #f #I1 #I2 #L1 #L2 #H elim (sex_inv_next1 … H) -H
#I0 #L0 #HL10 #HI10 #H destruct /2 width=1 by conj/
qed-.
lemma sex_inv_push: ∀RN,RP,f,I1,I2,L1,L2.
- L1.ⓘ{I1} ⪤[RN,RP,⫯f] L2.ⓘ{I2} →
+ L1.ⓘ[I1] ⪤[RN,RP,⫯f] L2.ⓘ[I2] →
L1 ⪤[RN,RP,f] L2 ∧ RP L1 I1 I2.
#RN #RP #f #I1 #I2 #L1 #L2 #H elim (sex_inv_push1 … H) -H
#I0 #L0 #HL10 #HI10 #H destruct /2 width=1 by conj/
lemma sex_inv_tl: ∀RN,RP,f,I1,I2,L1,L2. L1 ⪤[RN,RP,⫱f] L2 →
RN L1 I1 I2 → RP L1 I1 I2 →
- L1.ⓘ{I1} ⪤[RN,RP,f] L2.ⓘ{I2}.
+ L1.ⓘ[I1] ⪤[RN,RP,f] L2.ⓘ[I2].
#RN #RP #f #I1 #I2 #L2 #L2 elim (pn_split f) *
/2 width=1 by sex_next, sex_push/
qed-.
(* Basic forward lemmas *****************************************************)
lemma sex_fwd_bind: ∀RN,RP,f,I1,I2,L1,L2.
- L1.ⓘ{I1} ⪤[RN,RP,f] L2.ⓘ{I2} →
+ L1.ⓘ[I1] ⪤[RN,RP,f] L2.ⓘ[I2] →
L1 ⪤[RN,RP,⫱f] L2.
#RN #RP #f #I1 #I2 #L1 #L2 #Hf
elim (pn_split f) * #g #H destruct
qed-.
lemma sex_pair_repl: ∀RN,RP,f,I1,I2,L1,L2.
- L1.ⓘ{I1} ⪤[RN,RP,f] L2.ⓘ{I2} →
+ L1.ⓘ[I1] ⪤[RN,RP,f] L2.ⓘ[I2] →
∀J1,J2. RN L1 J1 J2 → RP L1 J1 J2 →
- L1.ⓘ{J1} ⪤[RN,RP,f] L2.ⓘ{J2}.
+ L1.ⓘ[J1] ⪤[RN,RP,f] L2.ⓘ[J2].
/3 width=3 by sex_inv_tl, sex_fwd_bind/ qed-.
lemma sex_co: ∀RN1,RP1,RN2,RP2. RN1 ⊆ RN2 → RP1 ⊆ RP2 →
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â¦\83fâ¦\84 →
+ â\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â¦\83fâ¦\84 → 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
theorem sex_trans_gen (RN1) (RP1) (RN2) (RP2) (RN) (RP):
∀L1,f.
- (∀g,I,K,n. ⇩*[n] L1 ≘ K.ⓘ{I} → ↑g = ⫱*[n] f → sex_transitive RN1 RN2 RN RN1 RP1 g K I) →
- (∀g,I,K,n. ⇩*[n] L1 ≘ K.ⓘ{I} → ⫯g = ⫱*[n] f → sex_transitive RP1 RP2 RP RN1 RP1 g K I) →
+ (∀g,I,K,n. ⇩*[n] L1 ≘ K.ⓘ[I] → ↑g = ⫱*[n] f → sex_transitive RN1 RN2 RN RN1 RP1 g K I) →
+ (∀g,I,K,n. ⇩*[n] L1 ≘ K.ⓘ[I] → ⫯g = ⫱*[n] f → sex_transitive RP1 RP2 RP RN1 RP1 g K I) →
∀L0. L1 ⪤[RN1,RP1,f] L0 →
∀L2. L0 ⪤[RN2,RP2,f] L2 →
L1 ⪤[RN,RP,f] L2.
Transitive … (sex RN RP f).
/2 width=9 by sex_trans_gen/ qed-.
-theorem sex_trans_id_cfull: â\88\80R1,R2,R3,L1,L,f. L1 ⪤[R1,cfull,f] L â\86\92 ð\9d\90\88â¦\83fâ¦\84 →
+theorem sex_trans_id_cfull: â\88\80R1,R2,R3,L1,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 // ]
theorem sex_conf (RN1) (RP1) (RN2) (RP2):
∀L,f.
- (∀g,I,K,n. ⇩*[n] L ≘ K.ⓘ{I} → ↑g = ⫱*[n] f → R_pw_confluent2_sex RN1 RN2 RN1 RP1 RN2 RP2 g K I) →
- (∀g,I,K,n. ⇩*[n] L ≘ K.ⓘ{I} → ⫯g = ⫱*[n] f → R_pw_confluent2_sex RP1 RP2 RN1 RP1 RN2 RP2 g K I) →
+ (∀g,I,K,n. ⇩*[n] L ≘ K.ⓘ[I] → ↑g = ⫱*[n] f → R_pw_confluent2_sex RN1 RN2 RN1 RP1 RN2 RP2 g K I) →
+ (∀g,I,K,n. ⇩*[n] L ≘ K.ⓘ[I] → ⫯g = ⫱*[n] f → R_pw_confluent2_sex RP1 RP2 RN1 RP1 RN2 RP2 g K I) →
pw_confluent2 … (sex RN1 RP1 f) (sex RN2 RP2 f) L.
#RN1 #RP1 #RN2 #RP2 #L elim L -L
[ #f #_ #_ #L1 #H1 #L2 #H2 >(sex_inv_atom1 … H1) >(sex_inv_atom1 … H2) -H2 -H1
(* 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â¦\83fâ¦\84 → 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 ***************************************)
lemma sex_tc_next_sn: ∀RN,RP. c_reflexive … RN →
∀f,I2,L1,L2. TC … (sex RN RP f) L1 L2 → ∀I1. RN L1 I1 I2 →
- TC … (sex RN RP (↑f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}).
+ TC … (sex RN RP (↑f)) (L1.ⓘ[I1]) (L2.ⓘ[I2]).
#RN #RP #HRN #f #I2 #L1 #L2 #H @(TC_ind_dx ??????? H) -L1
/3 width=3 by sex_next, TC_strap, inj/
qed.
lemma sex_tc_next_dx: ∀RN,RP. c_reflexive … RN → c_reflexive … RP →
∀f,I1,I2,L1. (CTC … RN) L1 I1 I2 → ∀L2. L1 ⪤[RN,RP,f] L2 →
- TC … (sex RN RP (↑f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}).
+ TC … (sex RN RP (↑f)) (L1.ⓘ[I1]) (L2.ⓘ[I2]).
#RN #RP #HRN #HRP #f #I1 #I2 #L1 #H elim H -I2
/4 width=5 by sex_refl, sex_next, step, inj/
qed.
lemma sex_tc_push_sn: ∀RN,RP. c_reflexive … RP →
∀f,I2,L1,L2. TC … (sex RN RP f) L1 L2 → ∀I1. RP L1 I1 I2 →
- TC … (sex RN RP (⫯f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}).
+ TC … (sex RN RP (⫯f)) (L1.ⓘ[I1]) (L2.ⓘ[I2]).
#RN #RP #HRP #f #I2 #L1 #L2 #H @(TC_ind_dx ??????? H) -L1
/3 width=3 by sex_push, TC_strap, inj/
qed.
lemma sex_tc_push_dx: ∀RN,RP. c_reflexive … RN → c_reflexive … RP →
∀f,I1,I2,L1. (CTC … RP) L1 I1 I2 → ∀L2. L1 ⪤[RN,RP,f] L2 →
- TC … (sex RN RP (⫯f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}).
+ TC … (sex RN RP (⫯f)) (L1.ⓘ[I1]) (L2.ⓘ[I2]).
#RN #RP #HRN #HRP #f #I1 #I2 #L1 #H elim H -I2
/4 width=5 by sex_refl, sex_push, step, inj/
qed.
theorem sex_tc_next: ∀RN,RP. c_reflexive … RN → c_reflexive … RP →
∀f,I1,I2,L1. (CTC … RN) L1 I1 I2 → ∀L2. TC … (sex RN RP f) L1 L2 →
- TC … (sex RN RP (↑f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}).
+ TC … (sex RN RP (↑f)) (L1.ⓘ[I1]) (L2.ⓘ[I2]).
#RN #RP #HRN #HRP #f #I1 #I2 #L1 #H elim H -I2
/4 width=5 by sex_tc_next_sn, sex_tc_refl, trans_TC/
qed.
theorem sex_tc_push: ∀RN,RP. c_reflexive … RN → c_reflexive … RP →
∀f,I1,I2,L1. (CTC … RP) L1 I1 I2 → ∀L2. TC … (sex RN RP f) L1 L2 →
- TC … (sex RN RP (⫯f)) (L1.ⓘ{I1}) (L2.ⓘ{I2}).
+ TC … (sex RN RP (⫯f)) (L1.ⓘ[I1]) (L2.ⓘ[I2]).
#RN #RP #HRN #HRP #f #I1 #I2 #L1 #H elim H -I2
/4 width=5 by sex_tc_push_sn, sex_tc_refl, trans_TC/
qed.
(* 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â¦\83fâ¦\84 →
+ â\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â¦\83fâ¦\84 → ∀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. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84.
+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.
- â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84.
+ â\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.
- â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84.
+ â\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. â¦\83G,L,â\91¡{I}V.Tâ¦\84 â¬\82+[b] â¦\83G,L,Vâ¦\84.
+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. â¦\83G,L,â\93\91{p,I}V.Tâ¦\84 â¬\82+[â\93\89] â¦\83G,L.â\93\91{I}V,Tâ¦\84.
+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. â¦\83G,L,â\93\91{p,I}V.Tâ¦\84 â¬\82+[â\92»] â¦\83G,L.â\93§,Tâ¦\84.
+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. â¦\83G,L,â\93\95{I}V.Tâ¦\84 â¬\82+[b] â¦\83G,L,Tâ¦\84.
+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. â¦\83G,L,â\93\95{I1}V1.â\91¡{I2}V2.Tâ¦\84 â¬\82+[b] â¦\83G,L,V2â¦\84.
+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. â¦\83G,L,â\93\91{p,I1}V1.â\93\95{I2}V2.Tâ¦\84 â¬\82+[â\93\89] â¦\83G,L.â\93\91{I1}V1,Tâ¦\84.
+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. â¦\83G,L,â\93\95{I1}V1.â\93\91{p,I2}V2.Tâ¦\84 â¬\82+[â\93\89] â¦\83G,L.â\93\91{I2}V2,Tâ¦\84.
+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. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 → Q G2 L2 T2) →
- (â\88\80G,G2,L,L2,T,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 → Q G L T → Q G2 L2 T2) →
- â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 → 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. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 → Q G1 L1 T1) →
- (â\88\80G1,G,L1,L,T1,T. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 → Q G L T → Q G1 L1 T1) →
- â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 → 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 â¦\83G,K,â\93\91{p,I}V.T1â¦\84 â¬\82+[b] â¦\83G,K,T2â¦\84.
+ â\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 →
- â¦\83G,L,Uâ¦\84 â¬\82+[b] â¦\83G,K,Tâ¦\84.
+ â\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 //
/3 width=2 by fqu_fqup, fqu_drop/
| #l #IH #L #U #HLK #HTU elim (drops_inv_succ … HLK) -HLK
#I #Y #HY #H destruct
- elim (lifts_split_trans â\80¦ HTU â\80¦ (ð\9d\90\94â\9d´â\86\91lâ\9dµ) (ð\9d\90\94â\9d´1â\9dµ)) -HTU
+ elim (lifts_split_trans â\80¦ HTU â\80¦ (ð\9d\90\94â\9d¨â\86\91lâ\9d©) (ð\9d\90\94â\9d¨1â\9d©)) -HTU
/4 width=5 by fqup_strap2, fqu_drop/
]
qed.
lemma fqup_drops_strap1: ∀b,G1,G2,L1,K1,K2,T1,T2,U1,i. ⇩*[i] L1 ≘ K1 → ⇧*[i] T1 ≘ U1 →
- â¦\83G1,K1,T1â¦\84 â¬\82[b] â¦\83G2,K2,T2â¦\84 â\86\92 â¦\83G1,L1,U1â¦\84 â¬\82+[b] â¦\83G2,K2,T2â¦\84.
+ â\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: ∀b,I,G,L,K,V,i. ⇩*[i] L ≘ K.ⓑ{I}V → ⦃G,L,#i⦄ ⬂+[b] ⦃G,K,V⦄.
+lemma fqup_lref: ∀b,I,G,L,K,V,i. ⇩*[i] L ≘ K.ⓑ[I]V → ❪G,L,#i❫ ⬂+[b] ❪G,K,V❫.
/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. â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 →
- ♯{G2,L2,T2} < ♯{G1,L1,T1}.
+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, transitive_lt/
qed-.
(* Advanced eliminators *****************************************************)
lemma fqup_wf_ind: ∀b. ∀Q:relation3 …. (
- â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 → 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 @(f3_ind … 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. â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 → 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 @(f3_ind … 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. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84 → Q G L T → Q G2 L2 T2) →
- â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 → 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. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 → Q G L T → Q G1 L1 T1) →
- â\88\80G1,L1,T1. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 → 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. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84.
+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. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G,L,Tâ¦\84 →
- â¦\83G,L,Tâ¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84.
+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. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] â¦\83G,L,Tâ¦\84 →
- â¦\83G,L,Tâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84.
+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. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
+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. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G,L,Tâ¦\84 & â¦\83G,L,Tâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84.
+ â\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. â¦\83G1,L1,â\8b\86sâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
+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. â¦\83G1,L,â\8b\86sâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 & L1 = L.â\93\98{J}.
+ â\88\83â\88\83J,L. â\9dªG1,L,â\8b\86sâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« & L1 = L.â\93\98[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. â¦\83G1,L1,#iâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
+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. â¦\83G1,L,Vâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 & L1 = L.â\93\91{J}V & i = 0
- | â\88\83â\88\83J,L,j. â¦\83G1,L,#jâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 & L1 = L.â\93\98{J} & i = ↑j.
+ | â\88\83â\88\83J,L,V. â\9dªG1,L,Vâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« & L1 = L.â\93\91[J]V & i = 0
+ | â\88\83â\88\83J,L,j. â\9dªG1,L,#jâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« & L1 = L.â\93\98[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. â¦\83G1,L1,§lâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
+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. â¦\83G1,L,§lâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 & L1 = L.â\93\98{J}.
+ â\88\83â\88\83J,L. â\9dªG1,L,§lâ\9d« â¬\82*[b] â\9dªG2,L2,T2â\9d« & L1 = L.â\93\98[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. â¦\83G1,L1,â\93\91{p,I}V1.T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
- ∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓑ{p,I}V1.T1 = T2
- | â¦\83G1,L1,V1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84
- | â\88§â\88§ â¦\83G1,L1.â\93\91{I}V1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 & b = Ⓣ
- | â\88§â\88§ â¦\83G1,L1.â\93§,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 & b = Ⓕ
- | â\88\83â\88\83J,L,T. â¦\83G1,L,Tâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 & â\87§*[1] T â\89\98 â\93\91{p,I}V1.T1 & L1 = L.â\93\98{J}.
+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« & â\87§*[1] T â\89\98 â\93\91[p,I]V1.T1 & L1 = L.â\93\98[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. â¦\83G1,L1,â\93\91{p,I}V1.T1â¦\84 â¬\82* â¦\83G2,L2,T2â¦\84 →
- ∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓑ{p,I}V1.T1 = T2
- | â¦\83G1,L1,V1â¦\84 â¬\82* â¦\83G2,L2,T2â¦\84
- | â¦\83G1,L1.â\93\91{I}V1,T1â¦\84 â¬\82* â¦\83G2,L2,T2â¦\84
- | â\88\83â\88\83J,L,T. â¦\83G1,L,Tâ¦\84 â¬\82* â¦\83G2,L2,T2â¦\84 & â\87§*[1] T â\89\98 â\93\91{p,I}V1.T1 & L1 = L.â\93\98{J}.
+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« & â\87§*[1] T â\89\98 â\93\91[p,I]V1.T1 & L1 = L.â\93\98[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. â¦\83G1,L1,â\93\95{I}V1.T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
- ∨∨ ∧∧ G1 = G2 & L1 = L2 & ⓕ{I}V1.T1 = T2
- | â¦\83G1,L1,V1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84
- | â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84
- | â\88\83â\88\83J,L,T. â¦\83G1,L,Tâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 & â\87§*[1] T â\89\98 â\93\95{I}V1.T1 & L1 = L.â\93\98{J}.
+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« & â\87§*[1] T â\89\98 â\93\95[I]V1.T1 & L1 = L.â\93\98[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. â¦\83G1,â\8b\86,â\93ª{I}â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
- ∧∧ G1 = G2 & ⋆ = L2 & ⓪{I} = T2.
+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. â¦\83G1,L1.â\93\98{I},â\8b\86sâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
- (∧∧ G1 = G2 & L1.ⓘ{I} = L2 & ⋆s = T2) ∨ ⦃G1,L1,⋆s⦄ ⬂*[b] ⦃G2,L2,T2⦄.
+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« →
+ (∧∧ G1 = G2 & L1.ⓘ[I] = L2 & ⋆s = T2) ∨ ❪G1,L1,⋆s❫ ⬂*[b] ❪G2,L2,T2❫.
#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. â¦\83G1,L1.â\93\91{I}V1,#0â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
- (∧∧ G1 = G2 & L1.ⓑ{I}V1 = L2 & #0 = T2) ∨ ⦃G1,L1,V1⦄ ⬂*[b] ⦃G2,L2,T2⦄.
+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« →
+ (∧∧ G1 = G2 & L1.ⓑ[I]V1 = L2 & #0 = T2) ∨ ❪G1,L1,V1❫ ⬂*[b] ❪G2,L2,T2❫.
#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. â¦\83G1,L1.â\93\98{I},#â\86\91iâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
- (∧∧ G1 = G2 & L1.ⓘ{I} = L2 & #(↑i) = T2) ∨ ⦃G1,L1,#i⦄ ⬂*[b] ⦃G2,L2,T2⦄.
+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« →
+ (∧∧ G1 = G2 & L1.ⓘ[I] = L2 & #(↑i) = T2) ∨ ❪G1,L1,#i❫ ⬂*[b] ❪G2,L2,T2❫.
#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. â¦\83G1,L1.â\93\98{I},§lâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
- (∧∧ G1 = G2 & L1.ⓘ{I} = L2 & §l = T2) ∨ ⦃G1,L1,§l⦄ ⬂*[b] ⦃G2,L2,T2⦄.
+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« →
+ (∧∧ G1 = G2 & L1.ⓘ[I] = L2 & §l = T2) ∨ ❪G1,L1,§l❫ ⬂*[b] ❪G2,L2,T2❫.
#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 →
- â¦\83G,L,Uâ¦\84 â¬\82*[b] â¦\83G,K,Tâ¦\84.
+ â\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. â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84.
+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. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 ∨ (∧∧ 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. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84.
+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. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84.
+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. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G,L,Tâ¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 →
- â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84.
+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. â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G,L,Tâ¦\84 →
- â¦\83G,L,Tâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84.
+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. â¦\83G1,L1,T1â¦\84 â¬\82+[b] â¦\83G2,L2,T2â¦\84 →
- â\88\83â\88\83G,L,T. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G,L,Tâ¦\84 & â¦\83G,L,Tâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84.
+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. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
- ♯{G2,L2,T2} ≤ ♯{G1,L1,T1}.
+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, transitive_le/
qed-.
(* Advanced inversion lemmas ************************************************)
-lemma fqus_inv_refl_atom3: â\88\80b,I,G,L,X. â¦\83G,L,â\93ª{I}â¦\84 â¬\82*[b] â¦\83G,L,Xâ¦\84 â\86\92 â\93ª{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« â\86\92 â\93ª[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 (le_to_lt_to_lt … H2 H1) -G0 -L0 -T0
frees_fqus_drops requires fqu_drop restricted on atoms
*)
inductive fqu (b:bool): tri_relation genv lenv term ≝
-| fqu_lref_O : ∀I,G,L,V. fqu b G (L.ⓑ{I}V) (#0) G L V
-| fqu_pair_sn: ∀I,G,L,V,T. fqu b G L (②{I}V.T) G L V
-| fqu_bind_dx: ∀p,I,G,L,V,T. b = Ⓣ → fqu b G L (ⓑ{p,I}V.T) G (L.ⓑ{I}V) T
-| fqu_clear : ∀p,I,G,L,V,T. b = Ⓕ → fqu b G L (ⓑ{p,I}V.T) G (L.ⓧ) T
-| fqu_flat_dx: ∀I,G,L,V,T. fqu b G L (ⓕ{I}V.T) G L T
-| fqu_drop : ∀I,G,L,T,U. ⇧*[1] T ≘ U → fqu b G (L.ⓘ{I}) U G L T
+| fqu_lref_O : ∀I,G,L,V. fqu b G (L.ⓑ[I]V) (#0) G L V
+| fqu_pair_sn: ∀I,G,L,V,T. fqu b G L (②[I]V.T) G L V
+| fqu_bind_dx: ∀p,I,G,L,V,T. b = Ⓣ → fqu b G L (ⓑ[p,I]V.T) G (L.ⓑ[I]V) T
+| fqu_clear : ∀p,I,G,L,V,T. b = Ⓕ → fqu b G L (ⓑ[p,I]V.T) G (L.ⓧ) T
+| fqu_flat_dx: ∀I,G,L,V,T. fqu b G L (ⓕ[I]V.T) G L T
+| fqu_drop : ∀I,G,L,T,U. ⇧*[1] T ≘ U → fqu b G (L.ⓘ[I]) U G L T
.
interpretation
(* Basic properties *********************************************************)
-lemma fqu_sort: â\88\80b,I,G,L,s. â¦\83G,L.â\93\98{I},â\8b\86sâ¦\84 â¬\82[b] â¦\83G,L,â\8b\86sâ¦\84.
+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. â¦\83G,L.â\93\98{I},#â\86\91iâ¦\84 â¬\82[b] â¦\83G,L,#iâ¦\84.
+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. â¦\83G,L.â\93\98{I},§lâ¦\84 â¬\82[b] â¦\83G,L,§lâ¦\84.
+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. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
+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.
+ ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & T2 = ⋆s.
#b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2
[ #I #G #L #T #s #H destruct
| #I #G #L #V #T #s #H destruct
]
qed-.
-lemma fqu_inv_sort1: â\88\80b,G1,G2,L1,L2,T2,s. â¦\83G1,L1,â\8b\86sâ¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & T2 = ⋆s.
+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. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
+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.
+ (∃∃J,V. G1 = G2 & L1 = L2.ⓑ[J]V & T2 = V & i = 0) ∨
+ ∃∃J,j. G1 = G2 & L1 = L2.ⓘ[J] & T2 = #j & i = ↑j.
#b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2
[ #I #G #L #T #i #H destruct /3 width=4 by ex4_2_intro, or_introl/
| #I #G #L #V #T #i #H destruct
]
qed-.
-lemma fqu_inv_lref1: â\88\80b,G1,G2,L1,L2,T2,i. â¦\83G1,L1,#iâ¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- (∃∃J,V. G1 = G2 & L1 = L2.ⓑ{J}V & T2 = V & i = 0) ∨
- ∃∃J,j. G1 = G2 & L1 = L2.ⓘ{J} & T2 = #j & i = ↑j.
+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. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
+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.
+ ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & T2 = §l.
#b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2
[ #I #G #L #T #l #H destruct
| #I #G #L #V #T #l #H destruct
]
qed-.
-lemma fqu_inv_gref1: â\88\80b,G1,G2,L1,L2,T2,l. â¦\83G1,L1,§lâ¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & T2 = §l.
+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. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- ∀p,I,V1,U1. T1 = ⓑ{p,I}V1.U1 →
+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 = Ⓣ
+ | ∧∧ 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.
+ | ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & ⇧*[1] T2 ≘ ⓑ[p,I]V1.U1.
#b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2
[ #I #G #L #T #q #J #V0 #U0 #H destruct
| #I #G #L #V #T #q #J #V0 #U0 #H destruct /3 width=1 by and3_intro, or4_intro0/
]
qed-.
-lemma fqu_inv_bind1: â\88\80b,p,I,G1,G2,L1,L2,V1,U1,T2. â¦\83G1,L1,â\93\91{p,I}V1.U1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
+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.ⓑ[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.
+ | ∃∃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. â¦\83G1,L1,â\93\91{p,I}V1.U1â¦\84 â¬\82 â¦\83G2,L2,T2â¦\84 →
+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.
+ | ∧∧ G1 = G2 & L1.ⓑ[I]V1 = L2 & U1 = T2
+ | ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & ⇧*[1] T2 ≘ ⓑ[p,I]V1.U1.
#p #I #G1 #G2 #L1 #L2 #V1 #U1 #T2 #H elim (fqu_inv_bind1 … H) -H
/3 width=1 by or3_intro0, or3_intro2/
* #HG #HL #HU #H destruct
/3 width=1 by and3_intro, or3_intro1/
qed-.
-fact fqu_inv_flat1_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- ∀I,V1,U1. T1 = ⓕ{I}V1.U1 →
+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
- | ∃∃J. G1 = G2 & L1 = L2.ⓘ{J} & ⇧*[1] T2 ≘ ⓕ{I}V1.U1.
+ | ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & ⇧*[1] T2 ≘ ⓕ[I]V1.U1.
#b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2
[ #I #G #L #T #J #V0 #U0 #H destruct
| #I #G #L #V #T #J #V0 #U0 #H destruct /3 width=1 by and3_intro, or3_intro0/
]
qed-.
-lemma fqu_inv_flat1: â\88\80b,I,G1,G2,L1,L2,V1,U1,T2. â¦\83G1,L1,â\93\95{I}V1.U1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
+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.
+ | ∃∃J. G1 = G2 & L1 = L2.ⓘ[J] & ⇧*[1] T2 ≘ ⓕ[I]V1.U1.
/2 width=4 by fqu_inv_flat1_aux/ qed-.
(* Advanced inversion lemmas ************************************************)
-lemma fqu_inv_atom1: â\88\80b,I,G1,G2,L2,T2. â¦\83G1,â\8b\86,â\93ª{I}â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 → ⊥.
+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. â¦\83G1,K.â\93\98{I},â\8b\86sâ¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
+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. â¦\83G1,K.â\93\91{I}V,#0â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
+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. â¦\83G1,K.â\93\98{I},#(â\86\91i)â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
+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. â¦\83G1,K.â\93\98{I},§lâ¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
+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. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
+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. â¦\83G1,L1,#iâ¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
+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 sort-irrelevant equivalence for terms *)
-fact fqu_inv_teqx_aux: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
+fact fqu_inv_teqx_aux: â\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 → ⊥.
#b #G1 #G2 #L1 #L2 #T1 #T2 * -G1 -G2 -L1 -L2 -T1 -T2
[1: #I #G #L #V #_ #H elim (succ_inv_refl_sn … H)
qed-.
(* Basic_2A1: uses: fqu_inv_eq *)
-lemma fqu_inv_teqx: â\88\80b,G,L1,L2,T1,T2. â¦\83G,L1,T1â¦\84 â¬\82[b] â¦\83G,L2,T2â¦\84 →
+lemma fqu_inv_teqx: â\88\80b,G,L1,L2,T1,T2. â\9dªG,L1,T1â\9d« â¬\82[b] â\9dªG,L2,T2â\9d« →
|L1| = |L2| → T1 ≛ T2 → ⊥.
#b #G #L1 #L2 #T1 #T2 #H
@(fqu_inv_teqx_aux … H) // (**) (* full auto fails *)
(* Forward lemmas with weight for closures **********************************)
-lemma fqu_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 →
- ♯{G2,L2,T2} < ♯{G1,L1,T1}.
+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
<(lifts_fwd_tw … HI12) /3 width=1 by monotonic_lt_plus_r, monotonic_lt_plus_l/
(* Advanced eliminators *****************************************************)
lemma fqu_wf_ind: ∀b. ∀Q:relation3 …. (
- â\88\80G1,L1,T1. (â\88\80G2,L2,T2. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 → 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 @(f3_ind … 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. â¦\83G1,L1,T1â¦\84 â¬\82[b] â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84.
+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. â¦\83G1,L1,#iâ¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84 →
+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, lt_to_le/
(* Forward lemmas with weight for closures **********************************)
-lemma fquq_fwd_fw: â\88\80b,G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82⸮[b] â¦\83G2,L2,T2â¦\84 →
- ♯{G2,L2,T2} ≤ ♯{G1,L1,T1}.
+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, lt_to_le/
qed-.
(* activate genv *)
inductive aaa: relation4 genv lenv term aarity ≝
| aaa_sort: ∀G,L,s. aaa G L (⋆s) (⓪)
-| aaa_zero: ∀I,G,L,V,B. aaa G L V B → aaa G (L.ⓑ{I}V) (#0) B
-| aaa_lref: ∀I,G,L,A,i. aaa G L (#i) A → aaa G (L.ⓘ{I}) (#↑i) A
+| aaa_zero: ∀I,G,L,V,B. aaa G L V B → aaa G (L.ⓑ[I]V) (#0) B
+| aaa_lref: ∀I,G,L,A,i. aaa G L (#i) A → aaa G (L.ⓘ[I]) (#↑i) A
| aaa_abbr: ∀p,G,L,V,T,B,A.
- aaa G L V B → aaa G (L.ⓓV) T A → aaa G L (ⓓ{p}V.T) A
+ aaa G L V B → aaa G (L.ⓓV) T A → aaa G L (ⓓ[p]V.T) A
| aaa_abst: ∀p,G,L,V,T,B,A.
- aaa G L V B → aaa G (L.ⓛV) T A → aaa G L (ⓛ{p}V.T) (②B.A)
+ aaa G L V B → aaa G (L.ⓛV) T A → aaa G L (ⓛ[p]V.T) (②B.A)
| aaa_appl: ∀G,L,V,T,B,A. aaa G L V B → aaa G L T (②B.A) → aaa G L (ⓐV.T) A
| aaa_cast: ∀G,L,V,T,A. aaa G L V A → aaa G L T A → aaa G L (ⓝV.T) A
.
(* Basic inversion lemmas ***************************************************)
-fact aaa_inv_sort_aux: â\88\80G,L,T,A. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ ⋆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. â¦\83G,Lâ¦\84 ⊢ T ⁝ A → T = #0 →
- ∃∃I,K,V. L = K.ⓑ{I}V & ⦃G,K⦄ ⊢ V ⁝ A.
+fact aaa_inv_zero_aux: â\88\80G,L,T,A. â\9dªG,Lâ\9d« ⊢ T ⁝ A → T = #0 →
+ ∃∃I,K,V. L = K.ⓑ[I]V & ❪G,K❫ ⊢ 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. â¦\83G,Lâ¦\84 ⊢ #0 ⁝ A →
- ∃∃I,K,V. L = K.ⓑ{I}V & ⦃G,K⦄ ⊢ V ⁝ A.
+lemma aaa_inv_zero: â\88\80G,L,A. â\9dªG,Lâ\9d« ⊢ #0 ⁝ A →
+ ∃∃I,K,V. L = K.ⓑ[I]V & ❪G,K❫ ⊢ V ⁝ A.
/2 width=3 by aaa_inv_zero_aux/ qed-.
-fact aaa_inv_lref_aux: â\88\80G,L,T,A. â¦\83G,Lâ¦\84 ⊢ T ⁝ A → ∀i. T = #(↑i) →
- ∃∃I,K. L = K.ⓘ{I} & ⦃G,K⦄ ⊢ #i ⁝ A.
+fact aaa_inv_lref_aux: â\88\80G,L,T,A. â\9dªG,Lâ\9d« ⊢ T ⁝ A → ∀i. T = #(↑i) →
+ ∃∃I,K. L = K.ⓘ[I] & ❪G,K❫ ⊢ #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. â¦\83G,Lâ¦\84 ⊢ #↑i ⁝ A →
- ∃∃I,K. L = K.ⓘ{I} & ⦃G,K⦄ ⊢ #i ⁝ A.
+lemma aaa_inv_lref: â\88\80G,L,A,i. â\9dªG,Lâ\9d« ⊢ #↑i ⁝ A →
+ ∃∃I,K. L = K.ⓘ[I] & ❪G,K❫ ⊢ #i ⁝ A.
/2 width=3 by aaa_inv_lref_aux/ qed-.
-fact aaa_inv_gref_aux: â\88\80G,L,T,A. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ §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. â¦\83G,Lâ¦\84 â\8a¢ T â\81\9d A â\86\92 â\88\80p,W,U. T = â\93\93{p}W.U →
- â\88\83â\88\83B. â¦\83G,Lâ¦\84 â\8a¢ W â\81\9d B & â¦\83G,L.â\93\93Wâ¦\84 ⊢ U ⁝ A.
+fact aaa_inv_abbr_aux: â\88\80G,L,T,A. â\9dªG,Lâ\9d« â\8a¢ T â\81\9d A â\86\92 â\88\80p,W,U. T = â\93\93[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. â¦\83G,Lâ¦\84 â\8a¢ â\93\93{p}V.T ⁝ A →
- â\88\83â\88\83B. â¦\83G,Lâ¦\84 â\8a¢ V â\81\9d B & â¦\83G,L.â\93\93Vâ¦\84 ⊢ T ⁝ A.
+lemma aaa_inv_abbr: â\88\80p,G,L,V,T,A. â\9dªG,Lâ\9d« â\8a¢ â\93\93[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. â¦\83G,Lâ¦\84 â\8a¢ T â\81\9d A â\86\92 â\88\80p,W,U. T = â\93\9b{p}W.U →
- â\88\83â\88\83B1,B2. â¦\83G,Lâ¦\84 â\8a¢ W â\81\9d B1 & â¦\83G,L.â\93\9bWâ¦\84 ⊢ U ⁝ B2 & A = ②B1.B2.
+fact aaa_inv_abst_aux: â\88\80G,L,T,A. â\9dªG,Lâ\9d« â\8a¢ T â\81\9d A â\86\92 â\88\80p,W,U. T = â\93\9b[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. â¦\83G,Lâ¦\84 â\8a¢ â\93\9b{p}W.T ⁝ A →
- â\88\83â\88\83B1,B2. â¦\83G,Lâ¦\84 â\8a¢ W â\81\9d B1 & â¦\83G,L.â\93\9bWâ¦\84 ⊢ T ⁝ B2 & A = ②B1.B2.
+lemma aaa_inv_abst: â\88\80p,G,L,W,T,A. â\9dªG,Lâ\9d« â\8a¢ â\93\9b[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. â¦\83G,Lâ¦\84 ⊢ T ⁝ A → ∀W,U. T = ⓐW.U →
- â\88\83â\88\83B. â¦\83G,Lâ¦\84 â\8a¢ W â\81\9d B & â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ ⓐV.T ⁝ A →
- â\88\83â\88\83B. â¦\83G,Lâ¦\84 â\8a¢ V â\81\9d B & â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ T ⁝ A → ∀W,U. T = ⓝW.U →
- â¦\83G,Lâ¦\84 â\8a¢ W â\81\9d A â\88§ â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 ⊢ ⓝW.T ⁝ A →
- â¦\83G,Lâ¦\84 â\8a¢ W â\81\9d A â\88§ â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ T â\81\9d A1 â\86\92 â\88\80A2. â¦\83G,Lâ¦\84 ⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ â\93\90V.T â\81\9d A â\86\92 â¦\83G,Lâ¦\84 â\8a¢ V â\81\9d B â\86\92 â¦\83G,Lâ¦\84⊢ 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. â¦\83G,Lâ¦\84 â\8a¢ â\93\9dU.T â\81\9d X â\86\92 â¦\83G,Lâ¦\84 â\8a¢ U â\81\9d B â\86\92 â¦\83G,Lâ¦\84⊢ 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. â¦\83G,Lâ¦\84 ⊢ 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: ∀I,G,K,V,B,i,L. ⇩*[i] L ≘ K.ⓑ{I}V → ⦃G,K⦄ ⊢ V ⁝ B → ⦃G,L⦄ ⊢ #i ⁝ B.
+lemma aaa_lref_drops: ∀I,G,K,V,B,i,L. ⇩*[i] L ≘ K.ⓑ[I]V → ❪G,K❫ ⊢ V ⁝ B → ❪G,L❫ ⊢ #i ⁝ B.
#I #G #K #V #B #i elim i -i
[ #L #H lapply (drops_fwd_isid … H ?) -H //
#H destruct /2 width=1 by aaa_zero/
(* Advanced inversion lemmas ************************************************)
(* Basic_2A1: was: aaa_inv_lref *)
-lemma aaa_inv_lref_drops: â\88\80G,A,i,L. â¦\83G,Lâ¦\84 ⊢ #i ⁝ A →
- ∃∃I,K,V. ⇩*[i] L ≘ K.ⓑ{I}V & ⦃G,K⦄ ⊢ V ⁝ A.
+lemma aaa_inv_lref_drops: â\88\80G,A,i,L. â\9dªG,Lâ\9d« ⊢ #i ⁝ A →
+ ∃∃I,K,V. ⇩*[i] L ≘ K.ⓑ[I]V & ❪G,K❫ ⊢ V ⁝ A.
#G #A #i elim i -i
[ #L #H elim (aaa_inv_zero … H) -H /3 width=5 by drops_refl, ex2_3_intro/
| #i #IH #L #H elim (aaa_inv_lref … H) -H
qed-.
lemma aaa_pair_inv_lref (G) (L) (i):
- â\88\80A. â¦\83G,Lâ¦\84 â\8a¢ #i â\81\9d A â\86\92 â\88\80I,K,V. â\87©*[i] L â\89\98 K.â\93\91{I}V â\86\92 â¦\83G,Kâ¦\84 ⊢ 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. â¦\83G,L1â¦\84 ⊢ T1 ⁝ A → ∀b,f,L2. ⇩*[b,f] L2 ≘ L1 →
- â\88\80T2. â\87§*[f] T1 â\89\98 T2 â\86\92 â¦\83G,L2â¦\84 ⊢ 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. â¦\83G,L2â¦\84 ⊢ T2 ⁝ A → ∀b,f,L1. ⇩*[b,f] L2 ≘ L1 →
- â\88\80T1. â\87§*[f] T1 â\89\98 T2 â\86\92 â¦\83G,L1â¦\84 ⊢ 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
| #i2 #HG #HL #HT #A #H #b #f #L1 #HL21 #X #HX
elim (aaa_inv_lref_drops … H) -H #J #K2 #V2 #HLK2 #HA
elim (lifts_inv_lref2 … HX) -HX #i1 #Hf #H destruct
- lapply (drops_split_div â\80¦ HL21 (ð\9d\90\94â\9d´i1â\9dµ) ???) -HL21 [4: * |*: // ] #Y #HLK1 #HY
+ lapply (drops_split_div â\80¦ HL21 (ð\9d\90\94â\9d¨i1â\9d©) ???) -HL21 [4: * |*: // ] #Y #HLK1 #HY
lapply (drops_conf … HLK2 … HY ??) -HY [1,2: /2 width=6 by after_uni_dx/ ] #HY
lapply (drops_tls_at … Hf … HY) -HY #HY -Hf
elim (drops_inv_skip1 … HY) -HY #Z #K1 #HK21 #HZ #H destruct
(* Properties with sort-irrelevant equivalence on referred entries **********)
-lemma aaa_feqx_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84 →
- â\88\80A. â¦\83G1,L1â¦\84 â\8a¢ T1 â\81\9d A â\86\92 â¦\83G2,L2â¦\84 ⊢ T2 ⁝ A.
+lemma aaa_feqx_conf: â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d« →
+ â\88\80A. â\9dªG1,L1â\9d« â\8a¢ T1 â\81\9d A â\86\92 â\9dªG2,L2â\9d« ⊢ T2 ⁝ A.
#G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2
/2 width=5 by aaa_teqx_conf_reqx/ qed-.
(* Properties on supclosure *************************************************)
-lemma aaa_fqu_conf: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â¬\82 â¦\83G2,L2,T2â¦\84 →
- â\88\80A1. â¦\83G1,L1â¦\84 â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â¦\83G2,L2â¦\84 ⊢ 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. â¦\83G1,L1,T1â¦\84 â¬\82⸮ â¦\83G2,L2,T2â¦\84 →
- â\88\80A1. â¦\83G1,L1â¦\84 â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â¦\83G2,L2â¦\84 ⊢ 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. â¦\83G1,L1,T1â¦\84 â¬\82+ â¦\83G2,L2,T2â¦\84 →
- â\88\80A1. â¦\83G1,L1â¦\84 â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â¦\83G2,L2â¦\84 ⊢ 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. â¦\83G1,L1,T1â¦\84 â¬\82* â¦\83G2,L2,T2â¦\84 →
- â\88\80A1. â¦\83G1,L1â¦\84 â\8a¢ T1 â\81\9d A1 â\86\92 â\88\83A2. â¦\83G2,L2â¦\84 ⊢ 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-.
(* Properties with sort-irrelevant equivalence on referred entries **********)
-lemma aaa_teqx_conf_reqx: â\88\80G,L1,T1,A. â¦\83G,L1â¦\84 ⊢ T1 ⁝ A → ∀T2. T1 ≛ T2 →
- â\88\80L2. L1 â\89\9b[T1] L2 â\86\92 â¦\83G,L2â¦\84 ⊢ T2 ⁝ A.
+lemma aaa_teqx_conf_reqx: â\88\80G,L1,T1,A. â\9dªG,L1â\9d« ⊢ T1 ⁝ A → ∀T2. T1 ≛ T2 →
+ â\88\80L2. L1 â\89\9b[T1] L2 â\86\92 â\9dªG,L2â\9d« ⊢ T2 ⁝ A.
#G #L1 #T1 #A #H elim H -G -L1 -T1 -A
[ #G #L1 #s1 #X #H1 elim (teqx_inv_sort1 … H1) -H1 //
| #I #G #L1 #V1 #B #_ #IH #X #H1 >(teqx_inv_lref1 … H1) -H1
(* Basic_properties *********************************************************)
lemma feqx_intro_dx (G): ∀L1,L2,T2. L1 ≛[T2] L2 →
- â\88\80T1. T1 â\89\9b T2 â\86\92 â¦\83G,L1,T1â¦\84 â\89\9b â¦\83G,L2,T2â¦\84.
+ â\88\80T1. T1 â\89\9b T2 â\86\92 â\9dªG,L1,T1â\9d« â\89\9b â\9dªG,L2,T2â\9d«.
/3 width=3 by feqx_intro_sn, teqx_reqx_div/ qed.
(* Basic inversion lemmas ***************************************************)
-lemma feqx_inv_gen_sn: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84 →
+lemma feqx_inv_gen_sn: â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d« →
∧∧ G1 = G2 & L1 ≛[T1] L2 & T1 ≛ T2.
#G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2 /2 width=1 by and3_intro/
qed-.
-lemma feqx_inv_gen_dx: â\88\80G1,G2,L1,L2,T1,T2. â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84 →
+lemma feqx_inv_gen_dx: â\88\80G1,G2,L1,L2,T1,T2. â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d« →
∧∧ G1 = G2 & L1 ≛[T2] L2 & T1 ≛ T2.
#G1 #G2 #L1 #L2 #T1 #T2 * -G2 -L2 -T2
/3 width=3 by teqx_reqx_conf, and3_intro/
/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. â¦\83G,L,Tâ¦\84 â\89\9b â¦\83G1,L1,T1â¦\84→
- â\88\80G2,L2,T2. â¦\83G,L,Tâ¦\84 â\89\9b â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84.
+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. â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G,L,Tâ¦\84 →
- â\88\80G2,L2,T2. â¦\83G2,L2,T2â¦\84 â\89\9b â¦\83G,L,Tâ¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84.
+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. â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84 →
- â\88\80U1,U2. â¦\83G1,L1,U1â¦\84 â\89\9b â¦\83G2,L2,U2â¦\84 →
+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
(* Properties with sort-irrelevant equivalence for terms ********************)
lemma teqx_feqx: ∀T1,T2. T1 ≛ T2 →
- â\88\80G,L. â¦\83G,L,T1â¦\84 â\89\9b â¦\83G,L,T2â¦\84.
+ â\88\80G,L. â\9dªG,L,T1â\9d« â\89\9b â\9dªG,L,T2â\9d«.
/2 width=1 by feqx_intro_sn/ qed.
(* Advanced properties ******************************************************)
(* Properties with star-iterated structural successor for closures **********)
-lemma feqx_fqus_trans: â\88\80b,G1,G,L1,L,T1,T. â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G,L,Tâ¦\84 →
- â\88\80G2,L2,T2. â¦\83G,L,Tâ¦\84 â¬\82*[b] â¦\83G2,L2,T2â¦\84 →
- â\88\83â\88\83G,L0,T0. â¦\83G1,L1,T1â¦\84 â¬\82*[b] â¦\83G,L0,T0â¦\84 & â¦\83G,L0,T0â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84.
+lemma feqx_fqus_trans: â\88\80b,G1,G,L1,L,T1,T. â\9dªG1,L1,T1â\9d« â\89\9b â\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 â\9dªG2,L2,T2â\9d«.
#b #G1 #G #L1 #L #T1 #T #H1 #G2 #L2 #T2 #H2
elim(feqx_inv_gen_dx … H1) -H1 #HG #HL1 #HT1 destruct
elim (reqx_fqus_trans … H2 … HL1) -L #L #T0 #H2 #HT02 #HL2
(* Properties with syntactic equivalence on referred entries ****************)
lemma req_reqx_trans: ∀L1,L,T1. L1 ≡[T1] L →
- â\88\80G1,G2,L2,T2. â¦\83G1,L,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84 â\86\92 â¦\83G1,L1,T1â¦\84 â\89\9b â¦\83G2,L2,T2â¦\84.
+ â\88\80G1,G2,L2,T2. â\9dªG1,L,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d« â\86\92 â\9dªG1,L1,T1â\9d« â\89\9b â\9dªG2,L2,T2â\9d«.
#L1 #L #T1 #HL1 #G1 #G2 #L2 #T2 #H
elim (feqx_inv_gen_sn … H) -H #H #HL2 #T12 destruct
/3 width=3 by feqx_intro_sn, req_reqx_trans/
(* CONTEXT-SENSITIVE FREE VARIABLES *****************************************)
inductive frees: relation3 lenv term rtmap ≝
-| frees_sort: â\88\80f,L,s. ð\9d\90\88â¦\83fâ¦\84 → frees L (⋆s) f
-| frees_atom: â\88\80f,i. ð\9d\90\88â¦\83fâ¦\84 → 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â¦\83fâ¦\84 â\86\92 frees (L.â\93¤{I}) (#0) (↑f)
+ frees (L.ⓑ[I]V) (#0) (↑f)
+| frees_unit: â\88\80f,I,L. ð\9d\90\88â\9dªfâ\9d« â\86\92 frees (L.â\93¤[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â¦\83fâ¦\84 → 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 (L.ⓘ[I]) (#↑i) (⫯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 →
- f1 ⋓ f2 ≘ f → frees L (ⓕ{I}V.T) f
+ f1 ⋓ f2 ≘ f → frees L (ⓕ[I]V.T) f
.
interpretation
(* Basic inversion lemmas ***************************************************)
-fact frees_inv_sort_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â¦\83Xâ¦\84 â\89\98 f â\86\92 â\88\80x. X = â\8b\86x â\86\92 ð\9d\90\88â¦\83fâ¦\84.
+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+â¦\83â\8b\86sâ¦\84 â\89\98 f â\86\92 ð\9d\90\88â¦\83fâ¦\84.
+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+â¦\83Xâ¦\84 ≘ f → ∀i. L = ⋆ → X = #i →
- â\88\83â\88\83g. ð\9d\90\88â¦\83gâ¦\84 & 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+â¦\83#iâ¦\84 â\89\98 f â\86\92 â\88\83â\88\83g. ð\9d\90\88â¦\83gâ¦\84 & 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+â¦\83Xâ¦\84 â\89\98 f â\86\92 â\88\80I,K,V. L = K.â\93\91{I}V → X = #0 →
- â\88\83â\88\83g. K â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 ≘ g & f = ↑g.
+ â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9dªXâ\9d« â\89\98 f â\86\92 â\88\80I,K,V. L = K.â\93\91[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: ∀f,I,K,V. K.ⓑ{I}V ⊢ 𝐅+⦃#0⦄ ≘ f → ∃∃g. K ⊢ 𝐅+⦃V⦄ ≘ g & f = ↑g.
+lemma frees_inv_pair: ∀f,I,K,V. K.ⓑ[I]V ⊢ 𝐅+❪#0❫ ≘ f → ∃∃g. K ⊢ 𝐅+❪V❫ ≘ g & f = ↑g.
/2 width=6 by frees_inv_pair_aux/ qed-.
fact frees_inv_unit_aux:
- â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â¦\83Xâ¦\84 â\89\98 f â\86\92 â\88\80I,K. L = K.â\93¤{I} → X = #0 →
- â\88\83â\88\83g. ð\9d\90\88â¦\83gâ¦\84 & f = ↑g.
+ â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9dªXâ\9d« â\89\98 f â\86\92 â\88\80I,K. L = K.â\93¤[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: ∀f,I,K. K.ⓤ{I} ⊢ 𝐅+⦃#0⦄ ≘ f → ∃∃g. 𝐈⦃g⦄ & f = ↑g.
+lemma frees_inv_unit: ∀f,I,K. K.ⓤ[I] ⊢ 𝐅+❪#0❫ ≘ f → ∃∃g. 𝐈❪g❫ & f = ↑g.
/2 width=7 by frees_inv_unit_aux/ qed-.
fact frees_inv_lref_aux:
- â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â¦\83Xâ¦\84 â\89\98 f â\86\92 â\88\80I,K,j. L = K.â\93\98{I} → X = #(↑j) →
- â\88\83â\88\83g. K â\8a¢ ð\9d\90\85+â¦\83#jâ¦\84 ≘ g & f = ⫯g.
+ â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9dªXâ\9d« â\89\98 f â\86\92 â\88\80I,K,j. L = K.â\93\98[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:
- ∀f,I,K,i. K.ⓘ{I} ⊢ 𝐅+⦃#(↑i)⦄ ≘ f →
- â\88\83â\88\83g. K â\8a¢ ð\9d\90\85+â¦\83#iâ¦\84 ≘ g & f = ⫯g.
+ ∀f,I,K,i. K.ⓘ[I] ⊢ 𝐅+❪#(↑i)❫ ≘ 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+â¦\83Xâ¦\84 â\89\98 f â\86\92 â\88\80x. X = §x â\86\92 ð\9d\90\88â¦\83fâ¦\84.
+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+â¦\83§lâ¦\84 â\89\98 f â\86\92 ð\9d\90\88â¦\83fâ¦\84.
+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+â¦\83Xâ¦\84 â\89\98 f â\86\92 â\88\80p,I,V,T. X = â\93\91{p,I}V.T →
- â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 â\89\98 f1 & L.â\93\91{I}V â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ f2 & f1 ⋓ ⫱f2 ≘ f.
+ â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9dªXâ\9d« â\89\98 f â\86\92 â\88\80p,I,V,T. X = â\93\91[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+â¦\83â\93\91{p,I}V.Tâ¦\84 ≘ f →
- â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 â\89\98 f1 & L.â\93\91{I}V â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ 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+â¦\83Xâ¦\84 â\89\98 f â\86\92 â\88\80I,V,T. X = â\93\95{I}V.T →
- â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 â\89\98 f1 & L â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ f2 & f1 ⋓ f2 ≘ f.
+fact frees_inv_flat_aux: â\88\80f,L,X. L â\8a¢ ð\9d\90\85+â\9dªXâ\9d« â\89\98 f â\86\92 â\88\80I,V,T. X = â\93\95[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+â¦\83â\93\95{I}V.Tâ¦\84 ≘ f →
- â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 â\89\98 f1 & L â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ 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. eq_repl_back â\80¦ (λf. L â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ f).
+lemma frees_eq_repl_back: â\88\80L,T. 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, isid_eq_repl_back/
| #f1 #i #Hf1 #g2 #H
]
qed-.
-lemma frees_eq_repl_fwd: â\88\80L,T. eq_repl_fwd â\80¦ (λf. L â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ f).
+lemma frees_eq_repl_fwd: â\88\80L,T. eq_repl_fwd â\80¦ (λf. L â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f).
#L #T @eq_repl_sym /2 width=3 by frees_eq_repl_back/
qed-.
-lemma frees_lref_push: â\88\80f,i. â\8b\86 â\8a¢ ð\9d\90\85+â¦\83#iâ¦\84 â\89\98 f â\86\92 â\8b\86 â\8a¢ ð\9d\90\85+â¦\83#â\86\91iâ¦\84 ≘ ⫯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+â¦\83Tâ¦\84 â\89\98 f â\86\92 ð\9d\90\85â¦\83fâ¦\84.
+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 sor_isfin, isfin_isid, isfin_tl, isfin_pushs, isfin_push, isfin_next/
qed-.
(* Properties with append for local environments ****************************)
-lemma frees_append_void: â\88\80f,K,T. K â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 â\89\98 f â\86\92 â\93§.K â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ 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+â¦\83Tâ¦\84 ≘ f →
- â\88\80K. L = â\93§.K â\86\92 K â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ 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+â¦\83Tâ¦\84 â\89\98 f â\86\92 K â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ 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-.
(* Advanced properties ******************************************************)
lemma frees_atom_drops:
- â\88\80b,L,i. â\87©*[b,ð\9d\90\94â\9d´iâ\9dµ] L ≘ ⋆ →
- â\88\80f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 L â\8a¢ ð\9d\90\85+â¦\83#iâ¦\84 ≘ ⫯*[i]↑f.
+ â\88\80b,L,i. â\87©*[b,ð\9d\90\94â\9d¨iâ\9d©] L ≘ ⋆ →
+ â\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+â¦\83Vâ¦\84 ≘ f →
- ∀i,I,L. ⇩*[i] L ≘ K.ⓑ{I}V → L ⊢ 𝐅+⦃#i⦄ ≘ ⫯*[i] ↑f.
+ â\88\80f,K,V. K â\8a¢ ð\9d\90\85+â\9dªVâ\9d« ≘ f →
+ ∀i,I,L. ⇩*[i] L ≘ K.ⓑ[I]V → L ⊢ 𝐅+❪#i❫ ≘ ⫯*[i] ↑f.
#f #K #V #Hf #i elim i -i
[ #I #L #H lapply (drops_fwd_isid … H ?) -H /2 width=1 by frees_pair/
| #i #IH #I #L #H elim (drops_inv_succ … H) -H /3 width=2 by frees_lref/
qed.
lemma frees_unit_drops:
- â\88\80f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 â\88\80I,K,i,L. â\87©*[i] L â\89\98 K.â\93¤{I} →
- L â\8a¢ ð\9d\90\85+â¦\83#iâ¦\84 ≘ ⫯*[i] ↑f.
+ â\88\80f. ð\9d\90\88â\9dªfâ\9d« â\86\92 â\88\80I,K,i,L. â\87©*[i] L â\89\98 K.â\93¤[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+â¦\83#jâ¦\84 ≘ f →
- â\88\80i,L. â\87©*[i] L â\89\98 K â\86\92 L â\8a¢ ð\9d\90\85+â¦\83#(i+j)â¦\84 ≘ ⫯*[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+â¦\83#iâ¦\84 ≘ f →
- â\88¨â\88¨ â\88\83â\88\83g. â\87©*[â\92»,ð\9d\90\94â\9d´iâ\9dµ] L â\89\98 â\8b\86 & ð\9d\90\88â¦\83gâ¦\84 & f = ⫯*[i] ↑g
- | â\88\83â\88\83g,I,K,V. K â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 â\89\98 g & â\87©*[i] L â\89\98 K.â\93\91{I}V & f = ⫯*[i] ↑g
- | ∃∃g,I,K. ⇩*[i] L ≘ K.ⓤ{I} & 𝐈⦃g⦄ & 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« â\89\98 g & â\87©*[i] L â\89\98 K.â\93\91[I]V & f = ⫯*[i] ↑g
+ | ∃∃g,I,K. ⇩*[i] L ≘ K.ⓤ[I] & 𝐈❪g❫ & f = ⫯*[i] ↑g.
#L elim L -L
[ #i #g | #L #I #IH * [ #g cases I -I [ #I | #I #V ] -IH | #i #g ] ] #H
[ elim (frees_inv_atom … H) -H #f #Hf #H destruct
(* Properties with generic slicing for local environments *******************)
lemma frees_lifts:
- â\88\80b,f1,K,T. K â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ 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+â¦\83Uâ¦\84 ≘ 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 (coafter_isid_inv_dx … H3 … Hf1) -f1 #Hf2
qed-.
lemma frees_lifts_SO:
- â\88\80b,L,K. â\87©*[b,ð\9d\90\94â\9d´1â\9dµ] L ≘ K → ∀T,U. ⇧*[1] T ≘ U →
- â\88\80f. K â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 â\89\98 f â\86\92 L â\8a¢ ð\9d\90\85+â¦\83Uâ¦\84 ≘ ⫯f.
+ â\88\80b,L,K. â\87©*[b,ð\9d\90\94â\9d¨1â\9d©] 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.
#b #L #K #HLK #T #U #HTU #f #Hf
@(frees_lifts b … Hf … HTU) // (**) (* auto fails *)
qed.
(* Forward lemmas with generic slicing for local environments ***************)
lemma frees_fwd_coafter:
- â\88\80b,f2,L,U. L â\8a¢ ð\9d\90\85+â¦\83Uâ¦\84 ≘ 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+â¦\83Tâ¦\84 ≘ 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, coafter_eq_repl_back0/ qed-.
(* Inversion lemmas with generic slicing for local environments *************)
lemma frees_inv_lifts_ex:
- â\88\80b,f2,L,U. L â\8a¢ ð\9d\90\85+â¦\83Uâ¦\84 ≘ 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+â¦\83Tâ¦\84 ≘ 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+â¦\83Uâ¦\84 ≘ f →
- â\88\80K. â\87©*[b,ð\9d\90\94â\9d´1â\9dµ] L ≘ K → ∀T. ⇧*[1] T ≘ U →
- K â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ ⫱f.
+ â\88\80b,f,L,U. L â\8a¢ ð\9d\90\85+â\9dªUâ\9d« ≘ f →
+ â\88\80K. â\87©*[b,ð\9d\90\94â\9d¨1â\9d©] L ≘ K → ∀T. ⇧*[1] T ≘ U →
+ 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 (coafter_inv_nxx … Hf) -Hf
/3 width=5 by frees_eq_repl_back, coafter_isid_inv_sn/
qed-.
lemma frees_inv_lifts:
- â\88\80b,f2,L,U. L â\8a¢ ð\9d\90\85+â¦\83Uâ¦\84 ≘ 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+â¦\83Tâ¦\84 ≘ 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, 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+â¦\83T1â¦\84 ≘ f1 →
- ∀I2,L2,V2,n. ⇩*[n] L1 ≘ L2.ⓑ{I2}V2 →
+ â\88\80f1,L1,T1. L1 â\8a¢ ð\9d\90\85+â\9dªT1â\9d« ≘ f1 →
+ ∀I2,L2,V2,n. ⇩*[n] L1 ≘ L2.ⓑ[I2]V2 →
∀g1. ↑g1 = ⫱*[n] f1 →
- â\88\83â\88\83g2. L2 â\8a¢ ð\9d\90\85+â¦\83V2â¦\84 ≘ 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 #n #_ #g1 #H1 -I2 -L1 -s
lapply (isid_tls n … Hf1) -Hf1 <H1 -f1 #Hf1
(* Advanced properties ******************************************************)
(* Note: this replaces lemma 1400 concluding the "big tree" theorem *)
-lemma frees_total: â\88\80L,T. â\88\83f. L â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ 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/
| /3 width=2 by frees_gref, ex_intro/
| #p #I #V #T #HG #HL #HT destruct
elim (IH G L V) // #f1 #HV
- elim (IH G (L.ⓑ{I}V) T) -IH // #f2 #HT
+ elim (IH G (L.ⓑ[I]V) T) -IH // #f2 #HT
elim (sor_isfin_ex f1 (⫱f2))
/3 width=6 by frees_fwd_isfin, frees_bind, isfin_tl, ex_intro/
| #I #V #T #HG #HL #HT destruct
(* Advanced main properties *************************************************)
theorem frees_bind_void:
- â\88\80f1,L,V. L â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 â\89\98 f1 â\86\92 â\88\80f2,T. L.â\93§ â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ f2 →
- â\88\80f. f1 â\8b\93 ⫱f2 â\89\98 f â\86\92 â\88\80p,I. L â\8a¢ ð\9d\90\85+â¦\83â\93\91{p,I}V.Tâ¦\84 ≘ 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
+elim (frees_total (L.ⓑ[I]V) T) #f0 #Hf0
lapply (lsubr_lsubf … Hf2 … Hf0) -Hf2 /2 width=5 by lsubr_unit/ #H02
elim (pn_split f2) * #g2 #H destruct
[ elim (lsubf_inv_push2 … H02) -H02 #g0 #Z #Y #H02 #H0 #H destruct
(* Advanced inversion lemmas ************************************************)
lemma frees_inv_bind_void:
- â\88\80f,p,I,L,V,T. L â\8a¢ ð\9d\90\85+â¦\83â\93\91{p,I}V.Tâ¦\84 ≘ f →
- â\88\83â\88\83f1,f2. L â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 â\89\98 f1 & L.â\93§ â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ 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â¦\83fâ¦\84 → Q L (⋆s) f
+ â\88\80f,L,s. ð\9d\90\88â\9dªfâ\9d« → Q L (⋆s) f
) → (
- â\88\80f,i. ð\9d\90\88â¦\83fâ¦\84 → 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+â¦\83Vâ¦\84 â\89\98 f â\86\92 Q L V fâ\86\92 Q (L.â\93\91{I}V) (#O) (↑f)
+ L â\8a¢ ð\9d\90\85+â\9dªVâ\9d« â\89\98 f â\86\92 Q L V fâ\86\92 Q (L.â\93\91[I]V) (#O) (↑f)
) → (
- â\88\80f,I,L. ð\9d\90\88â¦\83fâ¦\84 â\86\92 Q (L.â\93¤{I}) (#O) (↑f)
+ â\88\80f,I,L. ð\9d\90\88â\9dªfâ\9d« â\86\92 Q (L.â\93¤[I]) (#O) (↑f)
) → (
∀f,I,L,i.
- L â\8a¢ ð\9d\90\85+â¦\83#iâ¦\84 â\89\98 f â\86\92 Q L (#i) f â\86\92 Q (L.â\93\98{I}) (#(↑i)) (⫯f)
+ L â\8a¢ ð\9d\90\85+â\9dª#iâ\9d« â\89\98 f â\86\92 Q L (#i) f â\86\92 Q (L.â\93\98[I]) (#(↑i)) (⫯f)
) → (
- â\88\80f,L,l. ð\9d\90\88â¦\83fâ¦\84 → 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+â¦\83Vâ¦\84 â\89\98 f1 â\86\92 L.â\93§ â\8a¢ð\9d\90\85+â¦\83Tâ¦\84≘ f2 → f1 ⋓ ⫱f2 ≘ f →
- Q L V f1 → Q (L.ⓧ) T f2 → Q L (ⓑ{p,I}V.T) 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+â¦\83Vâ¦\84 â\89\98 f1 â\86\92 L â\8a¢ð\9d\90\85+â¦\83Tâ¦\84 ≘ f2 → f1 ⋓ f2 ≘ f →
- Q L V f1 → Q L T f2 → Q L (ⓕ{I}V.T) 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+â¦\83Tâ¦\84 ≘ 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+â¦\83Tâ¦\84 â\89\98 f1 â\86\92 â\88\80f2. L â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ 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, isid_inv_eq_repl/
| #f1 #i #Hf1 #g2 #H
(* FREE VARIABLES INCLUSION FOR RESTRICTED CLOSURES *************************)
definition fsle: bi_relation lenv term ≝ λL1,T1,L2,T2.
- â\88\83â\88\83n1,n2,f1,f2. L1 â\8a¢ ð\9d\90\85+â¦\83T1â¦\84 â\89\98 f1 & L2 â\8a¢ ð\9d\90\85+â¦\83T2â¦\84 ≘ 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. â¦\83L,â\8b\86s1â¦\84 â\8a\86 â¦\83L,â\8b\86s2â¦\84.
+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, sle_refl, ex4_4_intro/ qed.
-lemma fsle_gref: â\88\80L,l1,l2. â¦\83L,§l1â¦\84 â\8a\86 â¦\83L,§l2â¦\84.
+lemma fsle_gref: â\88\80L,l1,l2. â\9dªL,§l1â\9d« â\8a\86 â\9dªL,§l2â\9d«.
/3 width=8 by frees_gref, sle_refl, ex4_4_intro/ qed.
(* Advanced properties ******************************************************)
lemma fsle_lifts_sn: ∀T1,U1. ⇧*[1] T1 ≘ U1 → ∀L1,L2. |L2| ≤ |L1| →
- â\88\80T2. â¦\83L1,T1â¦\84 â\8a\86 â¦\83L2,T2â¦\84 â\86\92 â¦\83L1.â\93§,U1â¦\84 â\8a\86 â¦\83L2,T2â¦\84.
+ â\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. â¦\83L1,T1â¦\84 â\8a\86 â¦\83L2,T2â¦\84 â\86\92 â¦\83L1,T1â¦\84 â\8a\86 â¦\83L2.â\93§,U2â¦\84.
+ â\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. â¦\83K1,V1â¦\84 â\8a\86 â¦\83K2,V2â¦\84 →
- â\88\80W1. â\87§*[1] V1 â\89\98 W1 â\86\92 â\88\80I1,I2. â¦\83K1.â\93\98{I1},W1â¦\84 â\8a\86 â¦\83K2.â\93\91{I2}V2,#Oâ¦\84.
+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, sle_weak, ex4_4_intro/
qed.
-lemma fsle_lifts_SO: â\88\80K1,K2. |K1| = |K2| â\86\92 â\88\80T1,T2. â¦\83K1,T1â¦\84 â\8a\86 â¦\83K2,T2â¦\84 →
+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. â¦\83K1.â\93\98{I1},U1â¦\84 â\8a\86 â¦\83K2.â\93\98{I2},U2â¦\84.
+ â\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. â¦\83L1.â\93\91{I1}V1,U1â¦\84 â\8a\86 â¦\83L2.â\93\91{I2}V2,U2â¦\84 →
- â\88\80p. â¦\83L1,T1â¦\84 â\8a\86 â¦\83L2,â\93\91{p,I2}V2.U2â¦\84.
+ â\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. â¦\83L1.â\93§,T1â¦\84 â\8a\86 â¦\83L2.â\93\91{I}V,T2â¦\84 →
- â\88\80p. â¦\83L1.â\93§,T1â¦\84 â\8a\86 â¦\83L2,â\93\91{p,I}V.T2â¦\84.
+ â\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, sle_tl, sle_trans, ex4_4_intro/
qed.
-lemma fsle_bind_dx_sn: â\88\80L1,L2,V1,V2. â¦\83L1,V1â¦\84 â\8a\86 â¦\83L2,V2â¦\84 →
- â\88\80p,I,T2. â¦\83L1,V1â¦\84 â\8a\86 â¦\83L2,â\93\91{p,I}V2.T2â¦\84.
+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 (sor_isfin_ex g1 (⫱g2)) /3 width=3 by frees_fwd_isfin, isfin_tl/ #g #Hg #_
/4 width=5 by frees_bind_void, sor_inv_sle_sn, sor_tls, sle_trans/
qed.
-lemma fsle_bind_dx_dx: â\88\80L1,L2,T1,T2. â¦\83L1,T1â¦\84 â\8a\86 â¦\83L2.â\93§,T2â¦\84 → |L1| ≤ |L2| →
- â\88\80p,I,V2. â¦\83L1,T1â¦\84 â\8a\86 â¦\83L2,â\93\91{p,I}V2.T2â¦\84.
+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
<tls_xn in Hfg2; #Hfg2
/4 width=5 by frees_bind_void, sor_inv_sle_dx, sor_tls, sle_trans/
qed.
-lemma fsle_flat_dx_sn: â\88\80L1,L2,V1,V2. â¦\83L1,V1â¦\84 â\8a\86 â¦\83L2,V2â¦\84 →
- â\88\80I,T2. â¦\83L1,V1â¦\84 â\8a\86 â¦\83L2,â\93\95{I}V2.T2â¦\84.
+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 (sor_isfin_ex g1 g2) /2 width=3 by frees_fwd_isfin/ #g #Hg #_
/4 width=5 by frees_flat, sor_inv_sle_sn, sor_tls, sle_trans/
qed.
-lemma fsle_flat_dx_dx: â\88\80L1,L2,T1,T2. â¦\83L1,T1â¦\84 â\8a\86 â¦\83L2,T2â¦\84 →
- â\88\80I,V2. â¦\83L1,T1â¦\84 â\8a\86 â¦\83L2,â\93\95{I}V2.T2â¦\84.
+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 (sor_isfin_ex 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. â¦\83L1.â\93\91{I1}V1,T1â¦\84 â\8a\86 â¦\83L2.â\93\91{I2}V2,T2â¦\84 →
- â¦\83L1.â\93§,T1â¦\84 â\8a\86 â¦\83L2.â\93\91{I2}V2,T2â¦\84.
+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. â¦\83L1,T1â¦\84 â\8a\86 â¦\83L2,T2â¦\84 →
- â\88\80f2. L2 â\8a¢ ð\9d\90\85+â¦\83T2â¦\84 ≘ f2 →
- â\88\83â\88\83n1,n2,f1. L1 â\8a¢ ð\9d\90\85+â¦\83T1â¦\84 ≘ 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 (tls_eq_repl n2 … Hgf2) -Hgf2 #Hgf2
lemma fsle_frees_trans_eq:
∀L1,L2. |L1| = |L2| →
- â\88\80T1,T2. â¦\83L1,T1â¦\84 â\8a\86 â¦\83L2,T2â¦\84 â\86\92 â\88\80f2. L2 â\8a¢ ð\9d\90\85+â¦\83T2â¦\84 ≘ f2 →
- â\88\83â\88\83f1. L1 â\8a¢ ð\9d\90\85+â¦\83T1â¦\84 ≘ 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. â¦\83L1,T1â¦\84 â\8a\86 â¦\83L2,T2â¦\84 →
- â\88\80f1. L1 â\8a¢ ð\9d\90\85+â¦\83T1â¦\84 â\89\98 f1 â\86\92 â\88\80f2. L2 â\8a¢ ð\9d\90\85+â¦\83T2â¦\84 ≘ 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
(* Main properties **********************************************************)
theorem fsle_trans_sn:
- â\88\80L1,L2,T1,T. â¦\83L1,T1â¦\84 â\8a\86 â¦\83L2,Tâ¦\84 →
- â\88\80T2. â¦\83L2,Tâ¦\84 â\8a\86 â¦\83L2,T2â¦\84 â\86\92 â¦\83L1,T1â¦\84 â\8a\86 â¦\83L2,T2â¦\84.
+ â\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. â¦\83L1,T1â¦\84 â\8a\86 â¦\83L1,Tâ¦\84 →
- â\88\80L2,T2. â¦\83L1,Tâ¦\84 â\8a\86 â¦\83L2,T2â¦\84 â\86\92 â¦\83L1,T1â¦\84 â\8a\86 â¦\83L2,T2â¦\84.
+ â\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 â¦\83L1,T1â¦\84 â\8a\86 â¦\83L,Tâ¦\84 →
- â\88\80L2,T2. |L| = |L2| â\86\92 â¦\83L,Tâ¦\84 â\8a\86 â¦\83L2,T2â¦\84 â\86\92 â¦\83L1,T1â¦\84 â\8a\86 â¦\83L2,T2â¦\84.
+ â\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. â¦\83L1,V1â¦\84 â\8a\86 â¦\83L2,Tâ¦\84 â\86\92 â¦\83L1.â\93§,T1â¦\84 â\8a\86 â¦\83L2,Tâ¦\84 →
- â\88\80p,I. â¦\83L1,â\93\91{p,I}V1.T1â¦\84 â\8a\86 â¦\83L2,Tâ¦\84.
+ â\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. â¦\83L1,V1â¦\84 â\8a\86 â¦\83L2,Tâ¦\84 â\86\92 â¦\83L1,T1â¦\84 â\8a\86 â¦\83L2,Tâ¦\84 →
- â\88\80I. â¦\83L1,â\93\95{I}V1.T1â¦\84 â\8a\86 â¦\83L2,Tâ¦\84.
+ â\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. â¦\83L1,V1â¦\84 â\8a\86 â¦\83L2,V2â¦\84 →
- â\88\80I2,T1,T2. â¦\83L1.â\93§,T1â¦\84 â\8a\86 â¦\83L2.â\93\91{I2}V2,T2â¦\84 →
- â\88\80p,I1. â¦\83L1,â\93\91{p,I1}V1.T1â¦\84 â\8a\86 â¦\83L2,â\93\91{p,I2}V2.T2â¦\84.
+ â\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. â¦\83L1,V1â¦\84 â\8a\86 â¦\83L2,V2â¦\84 →
- â\88\80I1,I2,T1,T2. â¦\83L1.â\93\91{I1}V1,T1â¦\84 â\8a\86 â¦\83L2.â\93\91{I2}V2,T2â¦\84 →
- â\88\80p. â¦\83L1,â\93\91{p,I1}V1.T1â¦\84 â\8a\86 â¦\83L2,â\93\91{p,I2}V2.T2â¦\84.
+ â\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. â¦\83L1,V1â¦\84 â\8a\86 â¦\83L2,V2â¦\84 →
- â\88\80T1,T2. â¦\83L1,T1â¦\84 â\8a\86 â¦\83L2,T2â¦\84 →
- â\88\80I1,I2. â¦\83L1,â\93\95{I1}V1.T1â¦\84 â\8a\86 â¦\83L2,â\93\95{I2}V2.T2â¦\84.
+ â\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 â¦\83L1,â\8b\86s1â¦\84 â\8a\86 â¦\83L2,â\8b\86s2â¦\84.
+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, sle_refl, ex4_4_intro/ qed.
-lemma fsle_gref_bi: â\88\80L1,L2,l1,l2. |L1| = |L2| â\86\92 â¦\83L1,§l1â¦\84 â\8a\86 â¦\83L2,§l2â¦\84.
+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, sle_refl, ex4_4_intro/ qed.
-lemma fsle_pair_bi: â\88\80K1,K2. |K1| = |K2| â\86\92 â\88\80V1,V2. â¦\83K1,V1â¦\84 â\8a\86 â¦\83K2,V2â¦\84 →
- â\88\80I1,I2. â¦\83K1.â\93\91{I1}V1,#Oâ¦\84 â\8a\86 â¦\83K2.â\93\91{I2}V2,#Oâ¦\84.
+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. â¦\83K1.â\93¤{I1},#Oâ¦\84 â\8a\86 â¦\83K2.â\93¤{I2},#Oâ¦\84.
+ â\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, sle_refl, ex4_4_intro/
qed.
(* Basic_1: was: sc3_arity_csubc *)
theorem acr_aaa_csubc_lifts: ∀RR,RS,RP.
gcp RR RS RP → gcr RR RS RP RP →
- â\88\80G,L1,T,A. â¦\83G,L1â¦\84 ⊢ 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 →
- â¦\83G,L2,T0â¦\84 ϵ[RP] ã\80\9aAã\80\9b.
+ â\9dªG,L2,T0â\9d« ϵ â\9f¦Aâ\9f§[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
lapply (drops_tls_at … Hf … HY) -Hf -HY #HY
elim (drops_inv_skip2 … HY) -HY #Z #K0 #HK01 #HZ #H destruct
elim (liftsb_inv_pair_sn … HZ) -HZ #V0 #HV10 #H destruct
- elim (lifts_total V0 (ð\9d\90\94â\9d´â\86\91jâ\9dµ)) #V #HV0
+ elim (lifts_total V0 (ð\9d\90\94â\9d¨â\86\91jâ\9d©)) #V #HV0
elim (lsubc_drops_trans_isuni … HL20 … HLK0) -HL20 -HLK0 // #Y #HLK2 #H
elim (lsubc_inv_bind2 … H) -H *
[ #K2 #HK20 #H destruct
lapply (drops_isuni_fwd_drop2 … HLK2) // #HLK2b
lapply (aaa_lifts … HKV1 … HK01 … HV10) -HKV1 -HK01 -HV10 #HKV0A
lapply (aaa_mono … HKV0B … HKV0A) #H destruct -HKV0B -HKV0A
- elim (lifts_total V2 (ð\9d\90\94â\9d´â\86\91jâ\9dµ)) #V3 #HV23
+ elim (lifts_total V2 (ð\9d\90\94â\9d¨â\86\91jâ\9d©)) #V3 #HV23
lapply (s5 … HA … G … (Ⓔ) … (ⓝW2.V2) (ⓝV.V3) ????)
[3: |*: /2 width=9 by drops_inv_gen, lifts_flat/ ] -HLK2
lapply (s7 … HA G L2 (Ⓔ)) -HA /3 width=7 by acr_lifts/
(* 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. â¦\83G,Lâ¦\84 â\8a¢ T â\81\9d A â\86\92 â¦\83G,L,Tâ¦\84 ϵ[RP] ã\80\9aAã\80\9b.
+ â\88\80G,L,T,A. â\9dªG,Lâ\9d« â\8a¢ T â\81\9d A â\86\92 â\9dªG,L,Tâ\9d« ϵ â\9f¦Aâ\9f§[RP].
/3 width=9 by drops_refl, lifts_refl, acr_aaa_csubc_lifts/ qed.
lemma gcr_aaa: ∀RR,RS,RP. gcp RR RS RP → gcr RR RS RP RP →
- â\88\80G,L,T,A. â¦\83G,Lâ¦\84 ⊢ 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/
(* *)
(**************************************************************************)
-include "static_2/notation/relations/ineint_5.ma".
+include "static_2/notation/relations/inwbrackets_5.ma".
include "static_2/syntax/aarity.ma".
include "static_2/relocation/lifts_simple.ma".
include "static_2/relocation/lifts_lifts_vector.ma".
(* 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â¦\83Tâ¦\84 → 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 *)
definition S3 ≝ λC:candidate.
∀a,G,L,Vs,V,T,W.
- C G L (ⒶVs.ⓓ{a}ⓝW.V.T) → C G L (ⒶVs.ⓐV.ⓛ{a}W.T).
+ C G L (ⒶVs.ⓓ[a]ⓝW.V.T) → C G L (ⒶVs.ⓐV.ⓛ[a]W.T).
definition S5 ≝ λC:candidate. ∀I,G,L,K,Vs,V1,V2,i.
C G L (ⒶVs.V2) → ⇧*[↑i] V1 ≘ V2 →
- ⇩*[i] L ≘ K.ⓑ{I}V1 → C G L (ⒶVs.#i).
+ ⇩*[i] L ≘ K.ⓑ[I]V1 → C G L (ⒶVs.#i).
definition S6 ≝ λRP,C:candidate.
∀G,L,V1b,V2b. ⇧*[1] V1b ≘ V2b →
- ∀a,V,T. C G (L.ⓓV) (ⒶV2b.T) → RP G L V → C G L (ⒶV1b.ⓓ{a}V.T).
+ ∀a,V,T. C G (L.ⓓV) (ⒶV2b.T) → RP G L V → C G L (ⒶV1b.ⓓ[a]V.T).
definition S7 ≝ λC:candidate.
∀G,L,Vs,T,W. C G L (ⒶVs.T) → C G L (ⒶVs.W) → C G L (ⒶVs.ⓝW.T).
interpretation
"reducibility candidate of an atomic arity (abstract)"
- 'InEInt RP G L T A = (acr RP A G L T).
+ 'InWBrackets RP G L T A = (acr RP A G L T).
(* Basic properties *********************************************************)
lapply (drops_tls_at … Hf … HY) -HY #HY
elim (drops_inv_skip2 … HY) -HY #Z #K0 #HK0 #HZ #H destruct
elim (liftsb_inv_pair_sn … HZ) -HZ #W1 #HVW1 #H destruct
- elim (lifts_total W1 (ð\9d\90\94â\9d´â\86\91jâ\9dµ)) #W2 #HW12
+ elim (lifts_total W1 (ð\9d\90\94â\9d¨â\86\91jâ\9d©)) #W2 #HW12
lapply (lifts_trans … HVW1 … HW12 ??) -HVW1 [3: |*: // ] #H
lapply (lifts_conf … HV12 … H f ?) -V1 [ /2 width=3 by after_uni_succ_sn/ ] #HVW2
@(s5 … IHA … (V0⨮V0s) … HW12) /3 width=4 by drops_inv_gen, lifts_applv/
| #G #L #V1s #V2s #HV12s #p #V #T #HA #HV #f #L0 #V10 #X #HL0 #H #HB
elim (lifts_inv_applv1 … H) -H #V10s #X0 #HV10s #H0 #H destruct
elim (lifts_inv_bind1 … H0) -H0 #V0 #T0 #HV0 #HT0 #H destruct
- elim (lifts_total V10 (ð\9d\90\94â\9d´1â\9dµ)) #V20 #HV120
- elim (liftsv_total (ð\9d\90\94â\9d´1â\9dµ) V10s) #V20s #HV120s
+ elim (lifts_total V10 (ð\9d\90\94â\9d¨1â\9d©)) #V20 #HV120
+ elim (liftsv_total (ð\9d\90\94â\9d¨1â\9d©) V10s) #V20s #HV120s
@(s6 … IHA … (V10⨮V10s) (V20⨮V20s)) /3 width=7 by cp2, liftsv_cons/
@(HA … (⫯f)) /3 width=2 by drops_skip, ext2_pair/
[ @lifts_applv //
lapply (liftsv_trans … HV10s … HV120s ??) -V10s [3: |*: // ] #H
- elim (liftsv_split_trans â\80¦ H (ð\9d\90\94â\9d´1â\9dµ) (⫯f)) /2 width=1 by after_uni_one_sn/ #V10s #HV10s #HV120s
+ elim (liftsv_split_trans â\80¦ H (ð\9d\90\94â\9d¨1â\9d©) (⫯f)) /2 width=1 by after_uni_one_sn/ #V10s #HV10s #HV120s
>(liftsv_mono … HV12s … HV10s) -V1s //
| @(acr_lifts … H1RP … HB … HV120) /3 width=2 by drops_refl, drops_drop/
]
qed.
lemma acr_abst: ∀RR,RS,RP. gcp RR RS RP → gcr RR RS RP RP →
- â\88\80p,G,L,W,T,A,B. â¦\83G,L,Wâ¦\84 ϵ[RP] ã\80\9aBã\80\9b → (
+ â\88\80p,G,L,W,T,A,B. â\9dªG,L,Wâ\9d« ϵ â\9f¦Bâ\9f§[RP] → (
∀b,f,L0,V0,W0,T0. ⇩*[b,f] L0 ≘ L → ⇧*[f] W ≘ W0 → ⇧*[⫯f] T ≘ T0 →
- â¦\83G,L0,V0â¦\84 ϵ[RP] ã\80\9aBã\80\9b â\86\92 â¦\83G,L0,W0â¦\84 ϵ[RP] ã\80\9aBã\80\9b â\86\92 â¦\83G,L0.â\93\93â\93\9dW0.V0,T0â¦\84 ϵ[RP] ã\80\9aAã\80\9b
+ â\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« ϵ â\9f¦Aâ\9f§[RP]
) →
- â¦\83G,L,â\93\9b{p}W.Tâ¦\84 ϵ[RP] ã\80\9aâ\91¡B.Aã\80\9b.
+ â\9dªG,L,â\93\9b[p]W.Tâ\9d« ϵ â\9f¦â\91¡B.Aâ\9f§[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. â¦\83G,L1â¦\84 â\8a¢ â\93\9dW.V â\81\9d A â\86\92 â¦\83G,L2â¦\84 ⊢ W ⁝ A →
+| 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 G L1 L2 → lsuba G (L1.ⓓⓝW.V) (L2.ⓛW)
.
lemma lsuba_inv_atom1: ∀G,L2. G ⊢ ⋆ ⫃⁝ L2 → L2 = ⋆.
/2 width=4 by lsuba_inv_atom1_aux/ qed-.
-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. â¦\83G,K1â¦\84 â\8a¢ â\93\9dW.V â\81\9d A & â¦\83G,K2â¦\84 ⊢ W ⁝ A &
+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 &
G ⊢ K1 ⫃⁝ K2 & I = BPair Abbr (ⓝW.V) & L2 = K2.ⓛW.
#G #L1 #L2 * -L1 -L2
[ #J #K1 #H destruct
]
qed-.
-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. â¦\83G,K1â¦\84 â\8a¢ â\93\9dW.V â\81\9d A & â¦\83G,K2â¦\84 ⊢ W ⁝ A & G ⊢ K1 ⫃⁝ K2 &
+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 &
I = BPair Abbr (ⓝW.V) & L2 = K2.ⓛW.
/2 width=3 by lsuba_inv_bind1_aux/ qed-.
lemma lsubc_inv_atom2: ∀G,L1. G ⊢ L1 ⫃⁝ ⋆ → L1 = ⋆.
/2 width=4 by lsuba_inv_atom2_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. â¦\83G,K1â¦\84 â\8a¢ â\93\9dW.V â\81\9d A & â¦\83G,K2â¦\84 ⊢ W ⁝ A &
+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 &
G ⊢ K1 ⫃⁝ K2 & I = BPair Abst W & L1 = K1.ⓓⓝW.V.
#G #L1 #L2 * -L1 -L2
[ #J #K2 #H destruct
]
qed-.
-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. â¦\83G,K1â¦\84 â\8a¢ â\93\9dW.V â\81\9d A & â¦\83G,K2â¦\84 ⊢ W ⁝ A & G ⊢ K1 ⫃⁝ K2 &
+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 &
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. â¦\83G,L1â¦\84 ⊢ V ⁝ A →
- â\88\80L2. G â\8a¢ L1 â«\83â\81\9d L2 â\86\92 â¦\83G,L2â¦\84 ⊢ 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. â¦\83G,L2â¦\84 ⊢ V ⁝ A →
- â\88\80L1. G â\8a¢ L1 â«\83â\81\9d L2 â\86\92 â¦\83G,L1â¦\84 ⊢ 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â¦\83fâ¦\84 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â¦\83fâ¦\84 → ⇩*[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â¦\83fâ¦\84 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â¦\83fâ¦\84 → ⇩*[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. â¦\83G,L1,Vâ¦\84 ϵ[RP] ã\80\9aAã\80\9b â\86\92 â¦\83G,L1,Wâ¦\84 ϵ[RP] ã\80\9aAã\80\9b â\86\92 â¦\83G,L2â¦\84 ⊢ W ⁝ A →
+| 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 RP G L1 L2 → lsubc RP G (L1. ⓓⓝW.V) (L2.ⓛW)
.
lemma lsubc_inv_atom1: ∀RP,G,L2. G ⊢ ⋆ ⫃[RP] L2 → L2 = ⋆.
/2 width=5 by lsubc_inv_atom1_aux/ qed-.
-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. â¦\83G,K1,Vâ¦\84 ϵ[RP] ã\80\9aAã\80\9b & â¦\83G,K1,Wâ¦\84 ϵ[RP] ã\80\9aAã\80\9b & â¦\83G,K2â¦\84 ⊢ W ⁝ A &
+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 &
G ⊢ K1 ⫃[RP] K2 &
L2 = K2. ⓛW & I = BPair Abbr (ⓝW.V).
#RP #G #L1 #L2 * -L1 -L2
qed-.
(* 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. â¦\83G,K1,Vâ¦\84 ϵ[RP] ã\80\9aAã\80\9b & â¦\83G,K1,Wâ¦\84 ϵ[RP] ã\80\9aAã\80\9b & â¦\83G,K2â¦\84 ⊢ W ⁝ A &
+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 &
G ⊢ K1 ⫃[RP] K2 &
L2 = K2.ⓛW & I = BPair Abbr (ⓝW.V).
/2 width=3 by lsubc_inv_bind1_aux/ qed-.
lemma lsubc_inv_atom2: ∀RP,G,L1. G ⊢ L1 ⫃[RP] ⋆ → L1 = ⋆.
/2 width=5 by lsubc_inv_atom2_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. â¦\83G,K1,Vâ¦\84 ϵ[RP] ã\80\9aAã\80\9b & â¦\83G,K1,Wâ¦\84 ϵ[RP] ã\80\9aAã\80\9b & â¦\83G,K2â¦\84 ⊢ W ⁝ A &
+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 &
G ⊢ K1 ⫃[RP] K2 &
L1 = K1.ⓓⓝW.V & I = BPair Abst W.
#RP #G #L1 #L2 * -L1 -L2
qed-.
(* 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. â¦\83G,K1,Vâ¦\84 ϵ[RP] ã\80\9aAã\80\9b & â¦\83G,K1,Wâ¦\84 ϵ[RP] ã\80\9aAã\80\9b & â¦\83G,K2â¦\84 ⊢ W ⁝ A &
+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 &
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â¦\83fâ¦\84 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â¦\83fâ¦\84 → ⇩*[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/
inductive lsubf: relation4 lenv rtmap lenv rtmap ≝
| lsubf_atom: ∀f1,f2. f1 ≡ f2 → lsubf (⋆) f1 (⋆) f2
| lsubf_push: ∀f1,f2,I1,I2,L1,L2. lsubf L1 (f1) L2 (f2) →
- lsubf (L1.ⓘ{I1}) (⫯f1) (L2.ⓘ{I2}) (⫯f2)
+ lsubf (L1.ⓘ[I1]) (⫯f1) (L2.ⓘ[I2]) (⫯f2)
| lsubf_bind: ∀f1,f2,I,L1,L2. lsubf L1 f1 L2 f2 →
- lsubf (L1.ⓘ{I}) (↑f1) (L2.ⓘ{I}) (↑f2)
-| lsubf_beta: â\88\80f,f0,f1,f2,L1,L2,W,V. L1 â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 ≘ f → f0 ⋓ f ≘ f1 →
+ 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 L1 f0 L2 f2 → lsubf (L1.ⓓⓝW.V) (↑f1) (L2.ⓛW) (↑f2)
-| lsubf_unit: â\88\80f,f0,f1,f2,I1,I2,L1,L2,V. L1 â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 ≘ f → f0 ⋓ f ≘ f1 →
- lsubf L1 f0 L2 f2 → lsubf (L1.ⓑ{I1}V) (↑f1) (L2.ⓤ{I2}) (↑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 L1 f0 L2 f2 → lsubf (L1.ⓑ[I1]V) (↑f1) (L2.ⓤ[I2]) (↑f2)
.
interpretation
(* Basic inversion lemmas ***************************************************)
fact lsubf_inv_atom1_aux:
- â\88\80f1,f2,L1,L2. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 → 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. â¦\83â\8b\86,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 → ∧∧ 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. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 →
- ∀g1,I1,K1. f1 = ⫯g1 → L1 = K1.ⓘ{I1} →
- â\88\83â\88\83g2,I2,K2. â¦\83K1,g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 & f2 = ⫯g2 & L2 = K2.â\93\98{I2}.
+ â\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.â\93\98[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. â¦\83K1.â\93\98{I1},⫯g1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 →
- â\88\83â\88\83g2,I2,K2. â¦\83K1,g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 & f2 = ⫯g2 & L2 = K2.â\93\98{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.â\93\98[I2].
/2 width=6 by lsubf_inv_push1_aux/ qed-.
fact lsubf_inv_pair1_aux:
- â\88\80f1,f2,L1,L2. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 →
- ∀g1,I,K1,X. f1 = ↑g1 → L1 = K1.ⓑ{I}X →
- â\88¨â\88¨ â\88\83â\88\83g2,K2. â¦\83K1,g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 & f2 = â\86\91g2 & L2 = K2.â\93\91{I}X
- | â\88\83â\88\83g,g0,g2,K2,W,V. â¦\83K1,g0â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 &
- K1 â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 ≘ g & g0 ⋓ g ≘ g1 & f2 = ↑g2 &
+ â\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 = â\86\91g2 & L2 = K2.â\93\91[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. â¦\83K1,g0â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 &
- K1 â\8a¢ ð\9d\90\85+â¦\83Xâ¦\84 â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f2 = â\86\91g2 & L2 = K2.â\93¤{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« â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f2 = â\86\91g2 & L2 = K2.â\93¤[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 (discr_push_next … H)
qed-.
lemma lsubf_inv_pair1:
- â\88\80g1,f2,I,K1,L2,X. â¦\83K1.â\93\91{I}X,â\86\91g1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 →
- â\88¨â\88¨ â\88\83â\88\83g2,K2. â¦\83K1,g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 & f2 = â\86\91g2 & L2 = K2.â\93\91{I}X
- | â\88\83â\88\83g,g0,g2,K2,W,V. â¦\83K1,g0â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 &
- K1 â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 ≘ 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 = â\86\91g2 & L2 = K2.â\93\91[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. â¦\83K1,g0â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 &
- K1 â\8a¢ ð\9d\90\85+â¦\83Xâ¦\84 â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f2 = â\86\91g2 & L2 = K2.â\93¤{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« â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f2 = â\86\91g2 & L2 = K2.â\93¤[J].
/2 width=5 by lsubf_inv_pair1_aux/ qed-.
fact lsubf_inv_unit1_aux:
- â\88\80f1,f2,L1,L2. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 →
- ∀g1,I,K1. f1 = ↑g1 → L1 = K1.ⓤ{I} →
- â\88\83â\88\83g2,K2. â¦\83K1,g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 & f2 = â\86\91g2 & L2 = K2.â\93¤{I}.
+ â\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 = â\86\91g2 & L2 = K2.â\93¤[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 (discr_push_next … H)
qed-.
lemma lsubf_inv_unit1:
- â\88\80g1,f2,I,K1,L2. â¦\83K1.â\93¤{I},â\86\91g1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 →
- â\88\83â\88\83g2,K2. â¦\83K1,g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 & f2 = â\86\91g2 & L2 = K2.â\93¤{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 = â\86\91g2 & L2 = K2.â\93¤[I].
/2 width=5 by lsubf_inv_unit1_aux/ qed-.
fact lsubf_inv_atom2_aux:
- â\88\80f1,f2,L1,L2. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 → 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. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83â\8b\86,f2â¦\84 → ∧∧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. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 →
- ∀g2,I2,K2. f2 = ⫯g2 → L2 = K2.ⓘ{I2} →
- â\88\83â\88\83g1,I1,K1. â¦\83K1,g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 & f1 = ⫯g1 & L1 = K1.â\93\98{I1}.
+ â\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.â\93\98[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. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83K2.â\93\98{I2},⫯g2â¦\84 →
- â\88\83â\88\83g1,I1,K1. â¦\83K1,g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 & f1 = ⫯g1 & L1 = K1.â\93\98{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.â\93\98[I1].
/2 width=6 by lsubf_inv_push2_aux/ qed-.
fact lsubf_inv_pair2_aux:
- â\88\80f1,f2,L1,L2. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 →
- ∀g2,I,K2,W. f2 = ↑g2 → L2 = K2.ⓑ{I}W →
- â\88¨â\88¨ â\88\83â\88\83g1,K1. â¦\83K1,g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 & f1 = â\86\91g1 & L1 = K1.â\93\91{I}W
- | â\88\83â\88\83g,g0,g1,K1,V. â¦\83K1,g0â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 &
- K1 â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 ≘ g & g0 ⋓ g ≘ g1 & f1 = ↑g1 &
+ â\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 = â\86\91g1 & L1 = K1.â\93\91[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. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83K2.â\93\91{I}W,â\86\91g2â¦\84 →
- â\88¨â\88¨ â\88\83â\88\83g1,K1. â¦\83K1,g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 & f1 = â\86\91g1 & L1 = K1.â\93\91{I}W
- | â\88\83â\88\83g,g0,g1,K1,V. â¦\83K1,g0â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 &
- K1 â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 ≘ 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 = â\86\91g1 & L1 = K1.â\93\91[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. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 →
- ∀g2,I,K2. f2 = ↑g2 → L2 = K2.ⓤ{I} →
- â\88¨â\88¨ â\88\83â\88\83g1,K1. â¦\83K1,g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 & f1 = â\86\91g1 & L1 = K1.â\93¤{I}
- | â\88\83â\88\83g,g0,g1,J,K1,V. â¦\83K1,g0â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 &
- K1 â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f1 = â\86\91g1 & L1 = K1.â\93\91{J}V.
+ â\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 = â\86\91g1 & L1 = K1.â\93¤[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« â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f1 = â\86\91g1 & L1 = K1.â\93\91[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 (discr_push_next … H)
qed-.
lemma lsubf_inv_unit2:
- â\88\80f1,g2,I,L1,K2. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83K2.â\93¤{I},â\86\91g2â¦\84 →
- â\88¨â\88¨ â\88\83â\88\83g1,K1. â¦\83K1,g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 & f1 = â\86\91g1 & L1 = K1.â\93¤{I}
- | â\88\83â\88\83g,g0,g1,J,K1,V. â¦\83K1,g0â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 &
- K1 â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f1 = â\86\91g1 & L1 = K1.â\93\91{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 = â\86\91g1 & L1 = K1.â\93¤[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« â\89\98 g & g0 â\8b\93 g â\89\98 g1 & f1 = â\86\91g1 & L1 = K1.â\93\91[J]V.
/2 width=5 by lsubf_inv_unit2_aux/ qed-.
(* Advanced inversion lemmas ************************************************)
-lemma lsubf_inv_atom: â\88\80f1,f2. â¦\83â\8b\86,f1â¦\84 â«\83ð\9d\90\85+ â¦\83â\8b\86,f2â¦\84 → 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. â¦\83K1.â\93\98{I1},⫯g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2.â\93\98{I2},f2â¦\84 →
- â\88\83â\88\83g2. â¦\83K1,g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 & 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. â¦\83K1.â\93\98{I},â\86\91g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2.â\93\98{I},f2â¦\84 →
- â\88\83â\88\83g2. â¦\83K1,g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 & 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. â¦\83K1.â\93\93â\93\9dW.V,â\86\91g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2.â\93\9bW,f2â¦\84 →
- â\88\83â\88\83g,g0,g2. â¦\83K1,g0â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 & K1 â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 ≘ 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. â¦\83K1.â\93\91{I}V,â\86\91g1â¦\84 â«\83ð\9d\90\85+ â¦\83K2.â\93¤{J},f2â¦\84 →
- â\88\83â\88\83g,g0,g2. â¦\83K1,g0â¦\84 â«\83ð\9d\90\85+ â¦\83K2,g2â¦\84 & K1 â\8a¢ ð\9d\90\85+â¦\83Vâ¦\84 ≘ 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. â¦\83L,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L,f2â¦\84 → 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 (pn_split f1) * #g1 #H destruct
(* Basic forward lemmas *****************************************************)
lemma lsubf_fwd_bind_tl:
- â\88\80f1,f2,I,L1,L2. â¦\83L1.â\93\98{I},f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2.â\93\98{I},f2â¦\84 â\86\92 â¦\83L1,⫱f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,⫱f2â¦\84.
+ â\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 (pn_split 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. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 â\86\92 ð\9d\90\88â¦\83f2â¦\84 â\86\92 ð\9d\90\88â¦\83f1â¦\84.
+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 isid_eq_repl_fwd/
| /4 width=3 by isid_inv_push, isid_push/
]
qed-.
-lemma lsubf_fwd_isid_sn: â\88\80f1,f2,L1,L2. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 â\86\92 ð\9d\90\88â¦\83f1â¦\84 â\86\92 ð\9d\90\88â¦\83f2â¦\84.
+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 isid_eq_repl_back/
| /4 width=3 by isid_inv_push, isid_push/
]
qed-.
-lemma lsubf_fwd_sle: â\88\80f1,f2,L1,L2. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 → 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 sor_inv_sle_sn_trans, sle_next, sle_push, sle_refl_eq, eq_sym/
qed-.
(* Basic properties *********************************************************)
-lemma lsubf_eq_repl_back1: â\88\80f2,L1,L2. eq_repl_back â\80¦ (λf1. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84).
+lemma lsubf_eq_repl_back1: â\88\80f2,L1,L2. 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, eq_canc_sn/
]
qed-.
-lemma lsubf_eq_repl_fwd1: â\88\80f2,L1,L2. eq_repl_fwd â\80¦ (λf1. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84).
+lemma lsubf_eq_repl_fwd1: â\88\80f2,L1,L2. eq_repl_fwd â\80¦ (λf1. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d«).
#f2 #L1 #L2 @eq_repl_sym /2 width=3 by lsubf_eq_repl_back1/
qed-.
-lemma lsubf_eq_repl_back2: â\88\80f1,L1,L2. eq_repl_back â\80¦ (λf2. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84).
+lemma lsubf_eq_repl_back2: â\88\80f1,L1,L2. 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, eq_trans/
]
qed-.
-lemma lsubf_eq_repl_fwd2: â\88\80f1,L1,L2. eq_repl_fwd â\80¦ (λf2. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84).
+lemma lsubf_eq_repl_fwd2: â\88\80f1,L1,L2. eq_repl_fwd â\80¦ (λf2. â\9dªL1,f1â\9d« â«\83ð\9d\90\85+ â\9dªL2,f2â\9d«).
#f1 #L1 #L2 @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 â¦\83L,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L,f2â¦\84.
+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. â¦\83L1,g1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,⫱f2â¦\84 →
- â\88\83â\88\83f1. â¦\83L1.â\93\98{I},f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2.â\93\98{I},f2â¦\84 & 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 (pn_split 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+â¦\83Vâ¦\84 ≘ f → f0 ⋓ f ≘ g1 →
- â\88\80f2,L2,W. â¦\83L1,f0â¦\84 â«\83ð\9d\90\85+ â¦\83L2,⫱f2â¦\84 →
- â\88\83â\88\83f1. â¦\83L1.â\93\93â\93\9dW.V,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2.â\93\9bW,f2â¦\84 & ⫱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 (pn_split f2) * #x2 #H2 #L2 #W #HL12 destruct
[ /3 width=4 by lsubf_push, sor_inv_sle_sn, ex2_intro/
(* Note: this might be moved *)
lemma lsubf_inv_sor_dx:
- â\88\80f1,f2,L1,L2. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 →
+ â\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. â¦\83L1,f1lâ¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2lâ¦\84 & â¦\83L1,f1râ¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2râ¦\84 & 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 sor_eq_repl_fwd3, ex3_2_intro/
| #g1 #g2 #I1 #I2 #L1 #L2 #_ #IH #f2l #f2r #H
(* Properties with context-sensitive free variables *************************)
lemma lsubf_frees_trans:
- â\88\80f2,L2,T. L2 â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ f2 →
- â\88\80f1,L1. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 â\86\92 L1 â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ 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. â¦\83K,g1â¦\84 â«\83ð\9d\90\85+ â¦\83L,f1â¦\84 →
- â\88\80g2,f2. â¦\83K,g2â¦\84 â«\83ð\9d\90\85+ â¦\83L,f2â¦\84 →
- â\88\80g. g1 â\8b\93 g2 â\89\98 g â\86\92 â\88\80f. f1 â\8b\93 f2 â\89\98 f â\86\92 â¦\83K,gâ¦\84 â«\83ð\9d\90\85+ â¦\83L,fâ¦\84.
+ â\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. â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84 â\86\92 ð\9d\9b\80â¦\83f1â¦\84 â\86\92 ð\9d\9b\80â¦\83f2â¦\84 → 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, isdiv_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â¦\83f1â¦\84 â\86\92 ð\9d\90\88â¦\83f2â¦\84 â\86\92 â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84.
+ â\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, isid_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+â¦\83Tâ¦\84 ≘ f2 → ∀L1. L1 ⫃ L2 →
- â\88\80f1. L1 â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 â\89\98 f1 â\86\92 â¦\83L1,f1â¦\84 â«\83ð\9d\90\85+ â¦\83L2,f2â¦\84.
+ â\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_pair *)
inductive lsubr: relation lenv ≝
| lsubr_atom: lsubr (⋆) (⋆)
-| lsubr_bind: ∀I,L1,L2. lsubr L1 L2 → lsubr (L1.ⓘ{I}) (L2.ⓘ{I})
+| lsubr_bind: ∀I,L1,L2. lsubr L1 L2 → lsubr (L1.ⓘ[I]) (L2.ⓘ[I])
| lsubr_beta: ∀L1,L2,V,W. lsubr L1 L2 → lsubr (L1.ⓓⓝW.V) (L2.ⓛW)
-| lsubr_unit: ∀I1,I2,L1,L2,V. lsubr L1 L2 → lsubr (L1.ⓑ{I1}V) (L2.ⓤ{I2})
+| lsubr_unit: ∀I1,I2,L1,L2,V. lsubr L1 L2 → lsubr (L1.ⓑ[I1]V) (L2.ⓤ[I2])
.
interpretation
/2 width=3 by lsubr_inv_atom1_aux/ qed-.
fact lsubr_inv_bind1_aux:
- ∀L1,L2. L1 ⫃ L2 → ∀I,K1. L1 = K1.ⓘ{I} →
- ∨∨ ∃∃K2. K1 ⫃ K2 & L2 = K2.ⓘ{I}
+ ∀L1,L2. L1 ⫃ L2 → ∀I,K1. L1 = K1.ⓘ[I] →
+ ∨∨ ∃∃K2. K1 ⫃ K2 & L2 = K2.ⓘ[I]
| ∃∃K2,V,W. K1 ⫃ K2 & L2 = K2.ⓛW & I = BPair Abbr (ⓝW.V)
- | ∃∃J1,J2,K2,V. K1 ⫃ K2 & L2 = K2.ⓤ{J2} & I = BPair J1 V.
+ | ∃∃J1,J2,K2,V. K1 ⫃ K2 & L2 = K2.ⓤ[J2] & I = BPair J1 V.
#L1 #L2 * -L1 -L2
[ #J #K1 #H destruct
| #I #L1 #L2 #HL12 #J #K1 #H destruct /3 width=3 by or3_intro0, ex2_intro/
(* Basic_2A1: uses: lsubr_inv_pair1 *)
lemma lsubr_inv_bind1:
- ∀I,K1,L2. K1.ⓘ{I} ⫃ L2 →
- ∨∨ ∃∃K2. K1 ⫃ K2 & L2 = K2.ⓘ{I}
+ ∀I,K1,L2. K1.ⓘ[I] ⫃ L2 →
+ ∨∨ ∃∃K2. K1 ⫃ K2 & L2 = K2.ⓘ[I]
| ∃∃K2,V,W. K1 ⫃ K2 & L2 = K2.ⓛW & I = BPair Abbr (ⓝW.V)
- | ∃∃J1,J2,K2,V. K1 ⫃ K2 & L2 = K2.ⓤ{J2} & I = BPair J1 V.
+ | ∃∃J1,J2,K2,V. K1 ⫃ K2 & L2 = K2.ⓤ[J2] & I = BPair J1 V.
/2 width=3 by lsubr_inv_bind1_aux/ qed-.
fact lsubr_inv_atom2_aux: ∀L1,L2. L1 ⫃ L2 → L2 = ⋆ → L1 = ⋆.
/2 width=3 by lsubr_inv_atom2_aux/ qed-.
fact lsubr_inv_bind2_aux:
- ∀L1,L2. L1 ⫃ L2 → ∀I,K2. L2 = K2.ⓘ{I} →
- ∨∨ ∃∃K1. K1 ⫃ K2 & L1 = K1.ⓘ{I}
+ ∀L1,L2. L1 ⫃ L2 → ∀I,K2. L2 = K2.ⓘ[I] →
+ ∨∨ ∃∃K1. K1 ⫃ K2 & L1 = K1.ⓘ[I]
| ∃∃K1,W,V. K1 ⫃ K2 & L1 = K1.ⓓⓝW.V & I = BPair Abst W
- | ∃∃J1,J2,K1,V. K1 ⫃ K2 & L1 = K1.ⓑ{J1}V & I = BUnit J2.
+ | ∃∃J1,J2,K1,V. K1 ⫃ K2 & L1 = K1.ⓑ[J1]V & I = BUnit J2.
#L1 #L2 * -L1 -L2
[ #J #K2 #H destruct
| #I #L1 #L2 #HL12 #J #K2 #H destruct /3 width=3 by ex2_intro, or3_intro0/
qed-.
lemma lsubr_inv_bind2:
- ∀I,L1,K2. L1 ⫃ K2.ⓘ{I} →
- ∨∨ ∃∃K1. K1 ⫃ K2 & L1 = K1.ⓘ{I}
+ ∀I,L1,K2. L1 ⫃ K2.ⓘ[I] →
+ ∨∨ ∃∃K1. K1 ⫃ K2 & L1 = K1.ⓘ[I]
| ∃∃K1,W,V. K1 ⫃ K2 & L1 = K1.ⓓⓝW.V & I = BPair Abst W
- | ∃∃J1,J2,K1,V. K1 ⫃ K2 & L1 = K1.ⓑ{J1}V & I = BUnit J2.
+ | ∃∃J1,J2,K1,V. K1 ⫃ K2 & L1 = K1.ⓑ[J1]V & I = BUnit J2.
/2 width=3 by lsubr_inv_bind2_aux/ qed-.
(* Advanced inversion lemmas ************************************************)
lemma lsubr_inv_abst1:
∀K1,L2,W. K1.ⓛW ⫃ L2 →
∨∨ ∃∃K2. K1 ⫃ K2 & L2 = K2.ⓛW
- | ∃∃I2,K2. K1 ⫃ K2 & L2 = K2.ⓤ{I2}.
+ | ∃∃I2,K2. K1 ⫃ K2 & L2 = K2.ⓤ[I2].
#K1 #L2 #W #H elim (lsubr_inv_bind1 … H) -H *
/3 width=4 by ex2_2_intro, ex2_intro, or_introl, or_intror/
#K2 #V2 #W2 #_ #_ #H destruct
qed-.
lemma lsubr_inv_unit1:
- ∀I,K1,L2. K1.ⓤ{I} ⫃ L2 →
- ∃∃K2. K1 ⫃ K2 & L2 = K2.ⓤ{I}.
+ ∀I,K1,L2. K1.ⓤ[I] ⫃ L2 →
+ ∃∃K2. K1 ⫃ K2 & L2 = K2.ⓤ[I].
#I #K1 #L2 #H elim (lsubr_inv_bind1 … H) -H *
[ #K2 #HK12 #H destruct /2 width=3 by ex2_intro/
| #K2 #V #W #_ #_ #H destruct
qed-.
lemma lsubr_inv_pair2:
- ∀I,L1,K2,W. L1 ⫃ K2.ⓑ{I}W →
- ∨∨ ∃∃K1. K1 ⫃ K2 & L1 = K1.ⓑ{I}W
+ ∀I,L1,K2,W. L1 ⫃ K2.ⓑ[I]W →
+ ∨∨ ∃∃K1. K1 ⫃ K2 & L1 = K1.ⓑ[I]W
| ∃∃K1,V. K1 ⫃ K2 & L1 = K1.ⓓⓝW.V & I = Abst.
#I #L1 #K2 #W #H elim (lsubr_inv_bind2 … H) -H *
[ /3 width=3 by ex2_intro, or_introl/
qed-.
lemma lsubr_inv_unit2:
- ∀I,L1,K2. L1 ⫃ K2.ⓤ{I} →
- ∨∨ ∃∃K1. K1 ⫃ K2 & L1 = K1.ⓤ{I}
- | ∃∃J,K1,V. K1 ⫃ K2 & L1 = K1.ⓑ{J}V.
+ ∀I,L1,K2. L1 ⫃ K2.ⓤ[I] →
+ ∨∨ ∃∃K1. K1 ⫃ K2 & L1 = K1.ⓤ[I]
+ | ∃∃J,K1,V. K1 ⫃ K2 & L1 = K1.ⓑ[J]V.
#I #L1 #K2 #H elim (lsubr_inv_bind2 … H) -H *
[ /3 width=3 by ex2_intro, or_introl/
| #K1 #W #V #_ #_ #H destruct
(* Basic forward lemmas *****************************************************)
lemma lsubr_fwd_bind1:
- ∀I1,K1,L2. K1.ⓘ{I1} ⫃ L2 →
- ∃∃I2,K2. K1 ⫃ K2 & L2 = K2.ⓘ{I2}.
+ ∀I1,K1,L2. K1.ⓘ[I1] ⫃ L2 →
+ ∃∃I2,K2. K1 ⫃ K2 & L2 = K2.ⓘ[I2].
#I1 #K1 #L2 #H elim (lsubr_inv_bind1 … H) -H *
[ #K2 #HK12 #H destruct /3 width=4 by ex2_2_intro/
| #K2 #W1 #V1 #HK12 #H1 #H2 destruct /3 width=4 by ex2_2_intro/
qed-.
lemma lsubr_fwd_bind2:
- ∀I2,L1,K2. L1 ⫃ K2.ⓘ{I2} →
- ∃∃I1,K1. K1 ⫃ K2 & L1 = K1.ⓘ{I1}.
+ ∀I2,L1,K2. L1 ⫃ K2.ⓘ[I2] →
+ ∃∃I1,K1. K1 ⫃ K2 & L1 = K1.ⓘ[I1].
#I2 #L1 #K2 #H elim (lsubr_inv_bind2 … H) -H *
[ #K1 #HK12 #H destruct /3 width=4 by ex2_2_intro/
| #K1 #W1 #V1 #HK12 #H1 #H2 destruct /3 width=4 by ex2_2_intro/
(* Basic_2A1: includes: lsubr_fwd_drop2_pair *)
lemma lsubr_fwd_drops2_bind:
∀L1,L2. L1 ⫃ L2 →
- â\88\80b,f,I,K2. ð\9d\90\94â¦\83fâ¦\84 â\86\92 â\87©*[b,f] L2 â\89\98 K2.â\93\98{I} →
- ∨∨ ∃∃K1. K1 ⫃ K2 & ⇩*[b,f] L1 ≘ K1.ⓘ{I}
+ â\88\80b,f,I,K2. ð\9d\90\94â\9dªfâ\9d« â\86\92 â\87©*[b,f] L2 â\89\98 K2.â\93\98[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.
+ | ∃∃J1,J2,K1,V. K1 ⫃ K2 & ⇩*[b,f] L1 ≘ K1.ⓑ[J1]V & I = BUnit J2.
#L1 #L2 #H elim H -L1 -L2
[ #b #f #I #K2 #_ #H
elim (drops_inv_atom1 … H) -H #H destruct
(* Basic_2A1: includes: lsubr_fwd_drop2_abbr *)
lemma lsubr_fwd_drops2_abbr:
∀L1,L2. L1 ⫃ L2 →
- â\88\80b,f,K2,V. ð\9d\90\94â¦\83fâ¦\84 → ⇩*[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 inversion lemmas ***************************************************)
-lemma req_inv_bind: ∀p,I,L1,L2,V,T. L1 ≡[ⓑ{p,I}V.T] L2 →
- ∧∧ L1 ≡[V] L2 & L1.ⓑ{I}V ≡[T] L2.ⓑ{I}V.
+lemma req_inv_bind: ∀p,I,L1,L2,V,T. L1 ≡[ⓑ[p,I]V.T] L2 →
+ ∧∧ L1 ≡[V] L2 & L1.ⓑ[I]V ≡[T] L2.ⓑ[I]V.
/2 width=2 by rex_inv_bind/ qed-.
-lemma req_inv_flat: ∀I,L1,L2,V,T. L1 ≡[ⓕ{I}V.T] L2 →
+lemma req_inv_flat: ∀I,L1,L2,V,T. L1 ≡[ⓕ[I]V.T] L2 →
∧∧ L1 ≡[V] L2 & L1 ≡[T] L2.
/2 width=2 by rex_inv_flat/ qed-.
(* Advanced inversion lemmas ************************************************)
-lemma req_inv_zero_pair_sn: ∀I,L2,K1,V. K1.ⓑ{I}V ≡[#0] L2 →
- ∃∃K2. K1 ≡[V] K2 & L2 = K2.ⓑ{I}V.
+lemma req_inv_zero_pair_sn: ∀I,L2,K1,V. K1.ⓑ[I]V ≡[#0] L2 →
+ ∃∃K2. K1 ≡[V] K2 & L2 = K2.ⓑ[I]V.
#I #L2 #K1 #V #H
elim (rex_inv_zero_pair_sn … H) -H #K2 #X #HK12 #HX #H destruct
/2 width=3 by ex2_intro/
qed-.
-lemma req_inv_zero_pair_dx: ∀I,L1,K2,V. L1 ≡[#0] K2.ⓑ{I}V →
- ∃∃K1. K1 ≡[V] K2 & L1 = K1.ⓑ{I}V.
+lemma req_inv_zero_pair_dx: ∀I,L1,K2,V. L1 ≡[#0] K2.ⓑ[I]V →
+ ∃∃K1. K1 ≡[V] K2 & L1 = K1.ⓑ[I]V.
#I #L1 #K2 #V #H
elim (rex_inv_zero_pair_dx … H) -H #K1 #X #HK12 #HX #H destruct
/2 width=3 by ex2_intro/
qed-.
-lemma req_inv_lref_bind_sn: ∀I1,K1,L2,i. K1.ⓘ{I1} ≡[#↑i] L2 →
- ∃∃I2,K2. K1 ≡[#i] K2 & L2 = K2.ⓘ{I2}.
+lemma req_inv_lref_bind_sn: ∀I1,K1,L2,i. K1.ⓘ[I1] ≡[#↑i] L2 →
+ ∃∃I2,K2. K1 ≡[#i] K2 & L2 = K2.ⓘ[I2].
/2 width=2 by rex_inv_lref_bind_sn/ qed-.
-lemma req_inv_lref_bind_dx: ∀I2,K2,L1,i. L1 ≡[#↑i] K2.ⓘ{I2} →
- ∃∃I1,K1. K1 ≡[#i] K2 & L1 = K1.ⓘ{I1}.
+lemma req_inv_lref_bind_dx: ∀I2,K2,L1,i. L1 ≡[#↑i] K2.ⓘ[I2] →
+ ∃∃I1,K1. K1 ≡[#i] K2 & L1 = K1.ⓘ[I1].
/2 width=2 by rex_inv_lref_bind_dx/ qed-.
(* Basic forward lemmas *****************************************************)
(* Basic_properties *********************************************************)
-lemma frees_req_conf: â\88\80f,L1,T. L1 â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ f →
- â\88\80L2. L1 â\89¡[T] L2 â\86\92 L2 â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ f.
+lemma frees_req_conf: â\88\80f,L1,T. L1 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f →
+ â\88\80L2. L1 â\89¡[T] L2 â\86\92 L2 â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f.
#f #L1 #T #H elim H -f -L1 -T
[ /2 width=3 by frees_sort/
| #f #i #Hf #L2 #H2
(* Note: req_inv_lifts_dx missing in basic_2A1 *)
(* Basic_2A1: uses: lleq_inv_lift_le lleq_inv_lift_be lleq_inv_lift_ge *)
-lemma req_inv_lifts_bi: â\88\80L1,L2,U. L1 â\89¡[U] L2 â\86\92 â\88\80b,f. ð\9d\90\94â¦\83fâ¦\84 →
+lemma req_inv_lifts_bi: â\88\80L1,L2,U. L1 â\89¡[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 ≡[T] K2.
/2 width=10 by rex_inv_lifts_bi/ qed-.
(* Basic properties ***********************************************************)
-lemma frees_teqx_conf_reqx: â\88\80f,L1,T1. L1 â\8a¢ ð\9d\90\85+â¦\83T1â¦\84 ≘ f → ∀T2. T1 ≛ T2 →
- â\88\80L2. L1 â\89\9b[f] L2 â\86\92 L2 â\8a¢ ð\9d\90\85+â¦\83T2â¦\84 ≘ f.
+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.
#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+â¦\83T1â¦\84 ≘ f →
- â\88\80T2. T1 â\89\9b T2 â\86\92 L â\8a¢ ð\9d\90\85+â¦\83T2â¦\84 ≘ f.
+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.
/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+â¦\83Tâ¦\84 ≘ f →
- â\88\80L2. L1 â\89\9b[f] L2 â\86\92 L2 â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ f.
+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.
/2 width=7 by frees_teqx_conf_reqx, teqx_refl/ qed-.
lemma teqx_rex_conf (R): s_r_confluent1 … cdeq (rex R).
∀L1,L2. L1 ≛[T2] L2 → L1 ≛[T1] L2.
/2 width=5 by teqx_rex_div/ qed-.
-lemma reqx_atom: ∀I. ⋆ ≛[⓪{I}] ⋆.
+lemma reqx_atom: ∀I. ⋆ ≛[⓪[I]] ⋆.
/2 width=1 by rex_atom/ qed.
lemma reqx_sort: ∀I1,I2,L1,L2,s.
- L1 ≛[⋆s] L2 → L1.ⓘ{I1} ≛[⋆s] L2.ⓘ{I2}.
+ L1 ≛[⋆s] L2 → L1.ⓘ[I1] ≛[⋆s] L2.ⓘ[I2].
/2 width=1 by rex_sort/ qed.
lemma reqx_pair: ∀I,L1,L2,V1,V2.
- L1 ≛[V1] L2 → V1 ≛ V2 → L1.ⓑ{I}V1 ≛[#0] L2.ⓑ{I}V2.
+ L1 ≛[V1] L2 → V1 ≛ V2 → L1.ⓑ[I]V1 ≛[#0] L2.ⓑ[I]V2.
/2 width=1 by rex_pair/ qed.
-lemma reqx_unit: â\88\80f,I,L1,L2. ð\9d\90\88â¦\83fâ¦\84 → L1 ≛[f] L2 →
- L1.ⓤ{I} ≛[#0] L2.ⓤ{I}.
+lemma reqx_unit: â\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.
lemma reqx_lref: ∀I1,I2,L1,L2,i.
- L1 ≛[#i] L2 → L1.ⓘ{I1} ≛[#↑i] L2.ⓘ{I2}.
+ L1 ≛[#i] L2 → L1.ⓘ[I1] ≛[#↑i] L2.ⓘ[I2].
/2 width=1 by rex_lref/ qed.
lemma reqx_gref: ∀I1,I2,L1,L2,l.
- L1 ≛[§l] L2 → L1.ⓘ{I1} ≛[§l] L2.ⓘ{I2}.
+ L1 ≛[§l] L2 → L1.ⓘ[I1] ≛[§l] L2.ⓘ[I2].
/2 width=1 by rex_gref/ qed.
lemma reqx_bind_repl_dx: ∀I,I1,L1,L2.∀T:term.
- L1.ⓘ{I} ≛[T] L2.ⓘ{I1} →
+ L1.ⓘ[I] ≛[T] L2.ⓘ[I1] →
∀I2. I ≛ I2 →
- L1.ⓘ{I} ≛[T] L2.ⓘ{I2}.
+ L1.ⓘ[I] ≛[T] L2.ⓘ[I2].
/2 width=2 by rex_bind_repl_dx/ qed-.
(* Basic inversion lemmas ***************************************************)
lemma reqx_inv_zero:
∀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â¦\83fâ¦\84 & L1 â\89\9b[f] L2 & Y1 = L1.â\93¤{I} & Y2 = L2.â\93¤{I}.
+ | ∃∃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 â\89\9b[f] L2 & Y1 = L1.â\93¤[I] & Y2 = L2.â\93¤[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-.
lemma reqx_inv_lref: ∀Y1,Y2,i. Y1 ≛[#↑i] Y2 →
∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
| ∃∃I1,I2,L1,L2. L1 ≛[#i] L2 &
- Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}.
+ Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2].
/2 width=1 by rex_inv_lref/ qed-.
(* Basic_2A1: uses: lleq_inv_bind lleq_inv_bind_O *)
-lemma reqx_inv_bind: ∀p,I,L1,L2,V,T. L1 ≛[ⓑ{p,I}V.T] L2 →
- ∧∧ L1 ≛[V] L2 & L1.ⓑ{I}V ≛[T] L2.ⓑ{I}V.
+lemma reqx_inv_bind: ∀p,I,L1,L2,V,T. L1 ≛[ⓑ[p,I]V.T] L2 →
+ ∧∧ L1 ≛[V] L2 & L1.ⓑ[I]V ≛[T] L2.ⓑ[I]V.
/2 width=2 by rex_inv_bind/ qed-.
(* Basic_2A1: uses: lleq_inv_flat *)
-lemma reqx_inv_flat: ∀I,L1,L2,V,T. L1 ≛[ⓕ{I}V.T] L2 →
+lemma reqx_inv_flat: ∀I,L1,L2,V,T. L1 ≛[ⓕ[I]V.T] L2 →
∧∧ L1 ≛[V] L2 & L1 ≛[T] L2.
/2 width=2 by rex_inv_flat/ qed-.
(* Advanced inversion lemmas ************************************************)
-lemma reqx_inv_zero_pair_sn: ∀I,Y2,L1,V1. L1.ⓑ{I}V1 ≛[#0] Y2 →
- ∃∃L2,V2. L1 ≛[V1] L2 & V1 ≛ V2 & Y2 = L2.ⓑ{I}V2.
+lemma reqx_inv_zero_pair_sn: ∀I,Y2,L1,V1. L1.ⓑ[I]V1 ≛[#0] Y2 →
+ ∃∃L2,V2. L1 ≛[V1] L2 & V1 ≛ V2 & Y2 = L2.ⓑ[I]V2.
/2 width=1 by rex_inv_zero_pair_sn/ qed-.
-lemma reqx_inv_zero_pair_dx: ∀I,Y1,L2,V2. Y1 ≛[#0] L2.ⓑ{I}V2 →
- ∃∃L1,V1. L1 ≛[V1] L2 & V1 ≛ V2 & Y1 = L1.ⓑ{I}V1.
+lemma reqx_inv_zero_pair_dx: ∀I,Y1,L2,V2. Y1 ≛[#0] L2.ⓑ[I]V2 →
+ ∃∃L1,V1. L1 ≛[V1] L2 & V1 ≛ V2 & Y1 = L1.ⓑ[I]V1.
/2 width=1 by rex_inv_zero_pair_dx/ qed-.
-lemma reqx_inv_lref_bind_sn: ∀I1,Y2,L1,i. L1.ⓘ{I1} ≛[#↑i] Y2 →
- ∃∃I2,L2. L1 ≛[#i] L2 & Y2 = L2.ⓘ{I2}.
+lemma reqx_inv_lref_bind_sn: ∀I1,Y2,L1,i. L1.ⓘ[I1] ≛[#↑i] Y2 →
+ ∃∃I2,L2. L1 ≛[#i] L2 & Y2 = L2.ⓘ[I2].
/2 width=2 by rex_inv_lref_bind_sn/ qed-.
-lemma reqx_inv_lref_bind_dx: ∀I2,Y1,L2,i. Y1 ≛[#↑i] L2.ⓘ{I2} →
- ∃∃I1,L1. L1 ≛[#i] L2 & Y1 = L1.ⓘ{I1}.
+lemma reqx_inv_lref_bind_dx: ∀I2,Y1,L2,i. Y1 ≛[#↑i] L2.ⓘ[I2] →
+ ∃∃I1,L1. L1 ≛[#i] L2 & Y1 = L1.ⓘ[I1].
/2 width=2 by rex_inv_lref_bind_dx/ qed-.
(* Basic forward lemmas *****************************************************)
lemma reqx_fwd_zero_pair: ∀I,K1,K2,V1,V2.
- K1.ⓑ{I}V1 ≛[#0] K2.ⓑ{I}V2 → K1 ≛[V1] K2.
+ K1.ⓑ[I]V1 ≛[#0] K2.ⓑ[I]V2 → K1 ≛[V1] K2.
/2 width=3 by rex_fwd_zero_pair/ qed-.
(* Basic_2A1: uses: lleq_fwd_bind_sn lleq_fwd_flat_sn *)
-lemma reqx_fwd_pair_sn: ∀I,L1,L2,V,T. L1 ≛[②{I}V.T] L2 → L1 ≛[V] L2.
+lemma reqx_fwd_pair_sn: ∀I,L1,L2,V,T. L1 ≛[②[I]V.T] L2 → L1 ≛[V] L2.
/2 width=3 by rex_fwd_pair_sn/ qed-.
(* Basic_2A1: uses: lleq_fwd_bind_dx lleq_fwd_bind_O_dx *)
lemma reqx_fwd_bind_dx: ∀p,I,L1,L2,V,T.
- L1 ≛[ⓑ{p,I}V.T] L2 → L1.ⓑ{I}V ≛[T] L2.ⓑ{I}V.
+ L1 ≛[ⓑ[p,I]V.T] L2 → L1.ⓑ[I]V ≛[T] L2.ⓑ[I]V.
/2 width=2 by rex_fwd_bind_dx/ qed-.
(* Basic_2A1: uses: lleq_fwd_flat_dx *)
-lemma reqx_fwd_flat_dx: ∀I,L1,L2,V,T. L1 ≛[ⓕ{I}V.T] L2 → L1 ≛[T] L2.
+lemma reqx_fwd_flat_dx: ∀I,L1,L2,V,T. L1 ≛[ⓕ[I]V.T] L2 → L1 ≛[T] L2.
/2 width=3 by rex_fwd_flat_dx/ qed-.
-lemma reqx_fwd_dx: ∀I2,L1,K2. ∀T:term. L1 ≛[T] K2.ⓘ{I2} →
- ∃∃I1,K1. L1 = K1.ⓘ{I1}.
+lemma reqx_fwd_dx: ∀I2,L1,K2. ∀T:term. L1 ≛[T] K2.ⓘ[I2] →
+ ∃∃I1,K1. L1 = K1.ⓘ[I1].
/2 width=5 by rex_fwd_dx/ qed-.
lemma reqx_inv_lifts_dx: f_dropable_dx cdeq.
/2 width=5 by rex_dropable_dx/ qed-.
-lemma reqx_inv_lifts_bi: â\88\80L1,L2,U. L1 â\89\9b[U] L2 â\86\92 â\88\80b,f. ð\9d\90\94â¦\83fâ¦\84 →
+lemma reqx_inv_lifts_bi: â\88\80L1,L2,U. L1 â\89\9b[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 ≛[T] K2.
/2 width=10 by rex_inv_lifts_bi/ qed-.
-lemma reqx_inv_lref_pair_sn: ∀L1,L2,i. L1 ≛[#i] L2 → ∀I,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I}V1 →
- ∃∃K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I}V2 & K1 ≛[V1] K2 & V1 ≛ V2.
+lemma reqx_inv_lref_pair_sn: ∀L1,L2,i. L1 ≛[#i] L2 → ∀I,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ[I]V1 →
+ ∃∃K2,V2. ⇩*[i] L2 ≘ K2.ⓑ[I]V2 & K1 ≛[V1] K2 & V1 ≛ V2.
/2 width=3 by rex_inv_lref_pair_sn/ qed-.
-lemma reqx_inv_lref_pair_dx: ∀L1,L2,i. L1 ≛[#i] L2 → ∀I,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I}V2 →
- ∃∃K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I}V1 & K1 ≛[V1] K2 & V1 ≛ V2.
+lemma reqx_inv_lref_pair_dx: ∀L1,L2,i. L1 ≛[#i] L2 → ∀I,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ[I]V2 →
+ ∃∃K1,V1. ⇩*[i] L1 ≘ K1.ⓑ[I]V1 & K1 ≛[V1] K2 & V1 ≛ V2.
/2 width=3 by rex_inv_lref_pair_dx/ qed-.
lemma reqx_inv_lref_pair_bi (L1) (L2) (i):
L1 ≛[#i] L2 →
- ∀I1,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I1}V1 →
- ∀I2,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I2}V2 →
+ ∀I1,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ[I1]V1 →
+ ∀I2,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ[I2]V2 →
∧∧ K1 ≛[V1] K2 & V1 ≛ V2 & I1 = I2.
/2 width=6 by rex_inv_lref_pair_bi/ qed-.
/2 width=1 by rex_refl/ qed.
lemma reqx_pair_refl: ∀V1,V2. V1 ≛ V2 →
- ∀I,L. ∀T:term. L.ⓑ{I}V1 ≛[T] L.ⓑ{I}V2.
+ ∀I,L. ∀T:term. L.ⓑ[I]V1 ≛[T] L.ⓑ[I]V2.
/2 width=1 by rex_pair_refl/ qed.
(* Advanced inversion lemmas ************************************************)
-lemma reqx_inv_bind_void: ∀p,I,L1,L2,V,T. L1 ≛[ⓑ{p,I}V.T] L2 →
+lemma reqx_inv_bind_void: ∀p,I,L1,L2,V,T. L1 ≛[ⓑ[p,I]V.T] L2 →
L1 ≛[V] L2 ∧ L1.ⓧ ≛[T] L2.ⓧ.
/2 width=3 by rex_inv_bind_void/ qed-.
(* Advanced forward lemmas **************************************************)
lemma reqx_fwd_bind_dx_void: ∀p,I,L1,L2,V,T.
- L1 ≛[ⓑ{p,I}V.T] L2 → L1.ⓧ ≛[T] L2.ⓧ.
+ L1 ≛[ⓑ[p,I]V.T] L2 → L1.ⓧ ≛[T] L2.ⓧ.
/2 width=4 by rex_fwd_bind_dx_void/ qed-.
(* Properties with extended structural successor for closures ***************)
-lemma fqu_teqx_conf: â\88\80b,G1,G2,L1,L2,U1,T1. â¦\83G1,L1,U1â¦\84 â¬\82[b] â¦\83G2,L2,T1â¦\84 →
+lemma fqu_teqx_conf: â\88\80b,G1,G2,L1,L2,U1,T1. â\9dªG1,L1,U1â\9d« â¬\82[b] â\9dªG2,L2,T1â\9d« →
∀U2. U1 ≛ U2 →
- â\88\83â\88\83L,T2. â¦\83G1,L1,U2â¦\84 â¬\82[b] â¦\83G2,L,T2â¦\84 & L2 ≛[T1] L & T1 ≛ T2.
+ â\88\83â\88\83L,T2. â\9dªG1,L1,U2â\9d« â¬\82[b] â\9dªG2,L,T2â\9d« & L2 ≛[T1] L & T1 ≛ T2.
#b #G1 #G2 #L1 #L2 #U1 #T1 #H elim H -G1 -G2 -L1 -L2 -U1 -T1
[ #I #G #L #W #X #H >(teqx_inv_lref1 … H) -X
/2 width=5 by fqu_lref_O, ex3_2_intro/
]
qed-.
-lemma teqx_fqu_trans: â\88\80b,G1,G2,L1,L2,U1,T1. â¦\83G1,L1,U1â¦\84 â¬\82[b] â¦\83G2,L2,T1â¦\84 →
+lemma teqx_fqu_trans: â\88\80b,G1,G2,L1,L2,U1,T1. â\9dªG1,L1,U1â\9d« â¬\82[b] â\9dªG2,L2,T1â\9d« →
∀U2. U2 ≛ U1 →
- â\88\83â\88\83L,T2. â¦\83G1,L1,U2â¦\84 â¬\82[b] â¦\83G2,L,T2â¦\84 & T2 ≛ T1 & L ≛[T1] L2.
+ â\88\83â\88\83L,T2. â\9dªG1,L1,U2â\9d« â¬\82[b] â\9dªG2,L,T2â\9d« & T2 ≛ T1 & L ≛[T1] L2.
#b #G1 #G2 #L1 #L2 #U1 #T1 #H12 #U2 #HU21
elim (fqu_teqx_conf … H12 U2) -H12
/3 width=5 by reqx_sym, teqx_sym, ex3_2_intro/
qed-.
(* Basic_2A1: uses: lleq_fqu_trans *)
-lemma reqx_fqu_trans: â\88\80b,G1,G2,L2,K2,T,U. â¦\83G1,L2,Tâ¦\84 â¬\82[b] â¦\83G2,K2,Uâ¦\84 →
+lemma reqx_fqu_trans: â\88\80b,G1,G2,L2,K2,T,U. â\9dªG1,L2,Tâ\9d« â¬\82[b] â\9dªG2,K2,Uâ\9d« →
∀L1. L1 ≛[T] L2 →
- â\88\83â\88\83K1,U0. â¦\83G1,L1,Tâ¦\84 â¬\82[b] â¦\83G2,K1,U0â¦\84 & U0 ≛ U & K1 ≛[U] K2.
+ â\88\83â\88\83K1,U0. â\9dªG1,L1,Tâ\9d« â¬\82[b] â\9dªG2,K1,U0â\9d« & U0 ≛ U & K1 ≛[U] K2.
#b #G1 #G2 #L2 #K2 #T #U #H elim H -G1 -G2 -L2 -K2 -T -U
[ #I #G #L2 #V2 #L1 #H elim (reqx_inv_zero_pair_dx … H) -H
#K1 #V1 #HV1 #HV12 #H destruct
(* Properties with optional structural successor for closures ***************)
-lemma teqx_fquq_trans: â\88\80b,G1,G2,L1,L2,U1,T1. â¦\83G1,L1,U1â¦\84 â¬\82⸮[b] â¦\83G2,L2,T1â¦\84 →
+lemma teqx_fquq_trans: â\88\80b,G1,G2,L1,L2,U1,T1. â\9dªG1,L1,U1â\9d« â¬\82⸮[b] â\9dªG2,L2,T1â\9d« →
∀U2. U2 ≛ U1 →
- â\88\83â\88\83L,T2. â¦\83G1,L1,U2â¦\84 â¬\82⸮[b] â¦\83G2,L,T2â¦\84 & T2 ≛ T1 & L ≛[T1] L2.
+ â\88\83â\88\83L,T2. â\9dªG1,L1,U2â\9d« â¬\82⸮[b] â\9dªG2,L,T2â\9d« & T2 ≛ T1 & L ≛[T1] L2.
#b #G1 #G2 #L1 #L2 #U1 #T1 #H elim H -H
[ #H #U2 #HU21 elim (teqx_fqu_trans … H … HU21) -U1
/3 width=5 by fqu_fquq, ex3_2_intro/
qed-.
(* Basic_2A1: was just: lleq_fquq_trans *)
-lemma reqx_fquq_trans: â\88\80b,G1,G2,L2,K2,T,U. â¦\83G1,L2,Tâ¦\84 â¬\82⸮[b] â¦\83G2,K2,Uâ¦\84 →
+lemma reqx_fquq_trans: â\88\80b,G1,G2,L2,K2,T,U. â\9dªG1,L2,Tâ\9d« â¬\82⸮[b] â\9dªG2,K2,Uâ\9d« →
∀L1. L1 ≛[T] L2 →
- â\88\83â\88\83K1,U0. â¦\83G1,L1,Tâ¦\84 â¬\82⸮[b] â¦\83G2,K1,U0â¦\84 & U0 ≛ U & K1 ≛[U] K2.
+ â\88\83â\88\83K1,U0. â\9dªG1,L1,Tâ\9d« â¬\82⸮[b] â\9dªG2,K1,U0â\9d« & U0 ≛ U & K1 ≛[U] K2.
#b #G1 #G2 #L2 #K2 #T #U #H elim H -H
[ #H #L1 #HL12 elim (reqx_fqu_trans … H … HL12) -L2 /3 width=5 by fqu_fquq, ex3_2_intro/
| * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/
(* Properties with plus-iterated structural successor for closures **********)
(* Basic_2A1: was just: lleq_fqup_trans *)
-lemma reqx_fqup_trans: â\88\80b,G1,G2,L2,K2,T,U. â¦\83G1,L2,Tâ¦\84 â¬\82+[b] â¦\83G2,K2,Uâ¦\84 →
+lemma reqx_fqup_trans: â\88\80b,G1,G2,L2,K2,T,U. â\9dªG1,L2,Tâ\9d« â¬\82+[b] â\9dªG2,K2,Uâ\9d« →
∀L1. L1 ≛[T] L2 →
- â\88\83â\88\83K1,U0. â¦\83G1,L1,Tâ¦\84 â¬\82+[b] â¦\83G2,K1,U0â¦\84 & U0 ≛ U & K1 ≛[U] K2.
+ â\88\83â\88\83K1,U0. â\9dªG1,L1,Tâ\9d« â¬\82+[b] â\9dªG2,K1,U0â\9d« & U0 ≛ U & K1 ≛[U] K2.
#b #G1 #G2 #L2 #K2 #T #U #H @(fqup_ind … H) -G2 -K2 -U
[ #G2 #K2 #U #HTU #L1 #HL12 elim (reqx_fqu_trans … HTU … HL12) -L2
/3 width=5 by fqu_fqup, ex3_2_intro/
]
qed-.
-lemma teqx_fqup_trans: â\88\80b,G1,G2,L1,L2,U1,T1. â¦\83G1,L1,U1â¦\84 â¬\82+[b] â¦\83G2,L2,T1â¦\84 →
+lemma teqx_fqup_trans: â\88\80b,G1,G2,L1,L2,U1,T1. â\9dªG1,L1,U1â\9d« â¬\82+[b] â\9dªG2,L2,T1â\9d« →
∀U2. U2 ≛ U1 →
- â\88\83â\88\83L,T2. â¦\83G1,L1,U2â¦\84 â¬\82+[b] â¦\83G2,L,T2â¦\84 & T2 ≛ T1 & L ≛[T1] L2.
+ â\88\83â\88\83L,T2. â\9dªG1,L1,U2â\9d« â¬\82+[b] â\9dªG2,L,T2â\9d« & T2 ≛ T1 & L ≛[T1] L2.
#b #G1 #G2 #L1 #L2 #U1 #T1 #H @(fqup_ind_dx … H) -G1 -L1 -U1
[ #G1 #L1 #U1 #H #U2 #HU21 elim (teqx_fqu_trans … H … HU21) -U1
/3 width=5 by fqu_fqup, ex3_2_intro/
(* Properties with star-iterated structural successor for closures **********)
-lemma teqx_fqus_trans: â\88\80b,G1,G2,L1,L2,U1,T1. â¦\83G1,L1,U1â¦\84 â¬\82*[b] â¦\83G2,L2,T1â¦\84 →
+lemma teqx_fqus_trans: â\88\80b,G1,G2,L1,L2,U1,T1. â\9dªG1,L1,U1â\9d« â¬\82*[b] â\9dªG2,L2,T1â\9d« →
∀U2. U2 ≛ U1 →
- â\88\83â\88\83L,T2. â¦\83G1,L1,U2â¦\84 â¬\82*[b] â¦\83G2,L,T2â¦\84 & T2 ≛ T1 & L ≛[T1] L2.
+ â\88\83â\88\83L,T2. â\9dªG1,L1,U2â\9d« â¬\82*[b] â\9dªG2,L,T2â\9d« & T2 ≛ T1 & L ≛[T1] L2.
#b #G1 #G2 #L1 #L2 #U1 #T1 #H #U2 #HU21 elim(fqus_inv_fqup … H) -H
[ #H elim (teqx_fqup_trans … H … HU21) -U1 /3 width=5 by fqup_fqus, ex3_2_intro/
| * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/
qed-.
(* Basic_2A1: was just: lleq_fqus_trans *)
-lemma reqx_fqus_trans: â\88\80b,G1,G2,L2,K2,T,U. â¦\83G1,L2,Tâ¦\84 â¬\82*[b] â¦\83G2,K2,Uâ¦\84 →
+lemma reqx_fqus_trans: â\88\80b,G1,G2,L2,K2,T,U. â\9dªG1,L2,Tâ\9d« â¬\82*[b] â\9dªG2,K2,Uâ\9d« →
∀L1. L1 ≛[T] L2 →
- â\88\83â\88\83K1,U0. â¦\83G1,L1,Tâ¦\84 â¬\82*[b] â¦\83G2,K1,U0â¦\84 & U0 ≛ U & K1 ≛[U] K2.
+ â\88\83â\88\83K1,U0. â\9dªG1,L1,Tâ\9d« â¬\82*[b] â\9dªG2,K1,U0â\9d« & U0 ≛ U & K1 ≛[U] K2.
#b #G1 #G2 #L2 #K2 #T #U #H #L1 #HL12 elim(fqus_inv_fqup … H) -H
[ #H elim (reqx_fqup_trans … H … HL12) -L2 /3 width=5 by fqup_fqus, ex3_2_intro/
| * #HG #HL #HT destruct /2 width=5 by ex3_2_intro/
/2 width=1 by rex_gref_length/ qed.
lemma reqx_unit_length: ∀L1,L2. |L1| = |L2| →
- ∀I. L1.ⓤ{I} ≛[#0] L2.ⓤ{I}.
+ ∀I. L1.ⓤ[I] ≛[#0] L2.ⓤ[I].
/2 width=1 by rex_unit_length/ qed.
(* Basic_2A1: uses: lleq_lift_le lleq_lift_ge *)
(* Basic_2A1: uses: lleq_bind lleq_bind_O *)
theorem reqx_bind: ∀p,I,L1,L2,V1,V2,T.
- L1 ≛[V1] L2 → L1.ⓑ{I}V1 ≛[T] L2.ⓑ{I}V2 →
- L1 ≛[ⓑ{p,I}V1.T] L2.
+ L1 ≛[V1] L2 → L1.ⓑ[I]V1 ≛[T] L2.ⓑ[I]V2 →
+ L1 ≛[ⓑ[p,I]V1.T] L2.
/2 width=2 by rex_bind/ qed.
(* Basic_2A1: uses: lleq_flat *)
theorem reqx_flat: ∀I,L1,L2,V,T.
- L1 ≛[V] L2 → L1 ≛[T] L2 → L1 ≛[ⓕ{I}V.T] L2.
+ L1 ≛[V] L2 → L1 ≛[T] L2 → L1 ≛[ⓕ[I]V.T] L2.
/2 width=1 by rex_flat/ qed.
theorem reqx_bind_void: ∀p,I,L1,L2,V,T.
- L1 ≛[V] L2 → L1.ⓧ ≛[T] L2.ⓧ → L1 ≛[ⓑ{p,I}V.T] L2.
+ L1 ≛[V] L2 → L1.ⓧ ≛[T] L2.ⓧ → L1 ≛[ⓑ[p,I]V.T] L2.
/2 width=1 by rex_bind_void/ qed.
(* Basic_2A1: uses: lleq_trans *)
(* Negated inversion lemmas *************************************************)
(* Basic_2A1: uses: nlleq_inv_bind nlleq_inv_bind_O *)
-lemma rneqx_inv_bind: ∀p,I,L1,L2,V,T. (L1 ≛[ⓑ{p,I}V.T] L2 → ⊥) →
- (L1 ≛[V] L2 → ⊥) ∨ (L1.ⓑ{I}V ≛[T] L2.ⓑ{I}V → ⊥).
+lemma rneqx_inv_bind: ∀p,I,L1,L2,V,T. (L1 ≛[ⓑ[p,I]V.T] L2 → ⊥) →
+ (L1 ≛[V] L2 → ⊥) ∨ (L1.ⓑ[I]V ≛[T] L2.ⓑ[I]V → ⊥).
/3 width=2 by rnex_inv_bind, teqx_dec/ qed-.
(* Basic_2A1: uses: nlleq_inv_flat *)
-lemma rneqx_inv_flat: ∀I,L1,L2,V,T. (L1 ≛[ⓕ{I}V.T] L2 → ⊥) →
+lemma rneqx_inv_flat: ∀I,L1,L2,V,T. (L1 ≛[ⓕ[I]V.T] L2 → ⊥) →
(L1 ≛[V] L2 → ⊥) ∨ (L1 ≛[T] L2 → ⊥).
/3 width=2 by rnex_inv_flat, teqx_dec/ qed-.
-lemma rneqx_inv_bind_void: ∀p,I,L1,L2,V,T. (L1 ≛[ⓑ{p,I}V.T] L2 → ⊥) →
+lemma rneqx_inv_bind_void: ∀p,I,L1,L2,V,T. (L1 ≛[ⓑ[p,I]V.T] L2 → ⊥) →
(L1 ≛[V] L2 → ⊥) ∨ (L1.ⓧ ≛[T] L2.ⓧ → ⊥).
/3 width=3 by rnex_inv_bind_void, teqx_dec/ 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+â¦\83Tâ¦\84 ≘ 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)"
'Relation R T L1 L2 = (rex R T L1 L2).
lemma rex_inv_sort (R):
∀Y1,Y2,s. Y1 ⪤[R,⋆s] Y2 →
∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
- | ∃∃I1,I2,L1,L2. L1 ⪤[R,⋆s] L2 & Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}.
+ | ∃∃I1,I2,L1,L2. L1 ⪤[R,⋆s] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2].
#R * [ | #Y1 #I1 ] #Y2 #s * #f #H1 #H2
[ lapply (sex_inv_atom1 … H2) -H2 /3 width=1 by or_introl, conj/
| lapply (frees_inv_sort … H1) -H1 #Hf
∀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â¦\83fâ¦\84 & L1 ⪤[cext2 R,cfull,f] L2 &
- Y1 = L1.ⓤ{I} & Y2 = L2.ⓤ{I}.
+ 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].
#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_lref (R):
∀Y1,Y2,i. Y1 ⪤[R,#↑i] Y2 →
∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
- | ∃∃I1,I2,L1,L2. L1 ⪤[R,#i] L2 & Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}.
+ | ∃∃I1,I2,L1,L2. L1 ⪤[R,#i] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2].
#R * [ | #Y1 #I1 ] #Y2 #i * #f #H1 #H2
[ lapply (sex_inv_atom1 … H2) -H2 /3 width=1 by or_introl, conj/
| elim (frees_inv_lref … H1) -H1 #g #Hg #H destruct
lemma rex_inv_gref (R):
∀Y1,Y2,l. Y1 ⪤[R,§l] Y2 →
∨∨ ∧∧ Y1 = ⋆ & Y2 = ⋆
- | ∃∃I1,I2,L1,L2. L1 ⪤[R,§l] L2 & Y1 = L1.ⓘ{I1} & Y2 = L2.ⓘ{I2}.
+ | ∃∃I1,I2,L1,L2. L1 ⪤[R,§l] L2 & Y1 = L1.ⓘ[I1] & Y2 = L2.ⓘ[I2].
#R * [ | #Y1 #I1 ] #Y2 #l * #f #H1 #H2
[ lapply (sex_inv_atom1 … H2) -H2 /3 width=1 by or_introl, conj/
| lapply (frees_inv_gref … H1) -H1 #Hf
(* Basic_2A1: uses: llpx_sn_inv_bind llpx_sn_inv_bind_O *)
lemma rex_inv_bind (R):
- ∀p,I,L1,L2,V1,V2,T. L1 ⪤[R,ⓑ{p,I}V1.T] L2 → R L1 V1 V2 →
- ∧∧ L1 ⪤[R,V1] L2 & L1.ⓑ{I}V1 ⪤[R,T] L2.ⓑ{I}V2.
+ ∀p,I,L1,L2,V1,V2,T. L1 ⪤[R,ⓑ[p,I]V1.T] L2 → R L1 V1 V2 →
+ ∧∧ L1 ⪤[R,V1] L2 & L1.ⓑ[I]V1 ⪤[R,T] L2.ⓑ[I]V2.
#R #p #I #L1 #L2 #V1 #V2 #T * #f #Hf #HL #HV elim (frees_inv_bind … Hf) -Hf
/6 width=6 by sle_sex_trans, sex_inv_tl, ext2_pair, sor_inv_sle_dx, sor_inv_sle_sn, ex2_intro, conj/
qed-.
(* Basic_2A1: uses: llpx_sn_inv_flat *)
lemma rex_inv_flat (R):
- ∀I,L1,L2,V,T. L1 ⪤[R,ⓕ{I}V.T] L2 →
+ ∀I,L1,L2,V,T. L1 ⪤[R,ⓕ[I]V.T] L2 →
∧∧ L1 ⪤[R,V] L2 & L1 ⪤[R,T] L2.
#R #I #L1 #L2 #V #T * #f #Hf #HL elim (frees_inv_flat … Hf) -Hf
/5 width=6 by sle_sex_trans, sor_inv_sle_dx, sor_inv_sle_sn, ex2_intro, conj/
(* Advanced inversion lemmas ************************************************)
lemma rex_inv_sort_bind_sn (R):
- ∀I1,K1,L2,s. K1.ⓘ{I1} ⪤[R,⋆s] L2 →
- ∃∃I2,K2. K1 ⪤[R,⋆s] K2 & L2 = K2.ⓘ{I2}.
+ ∀I1,K1,L2,s. K1.ⓘ[I1] ⪤[R,⋆s] L2 →
+ ∃∃I2,K2. K1 ⪤[R,⋆s] K2 & L2 = K2.ⓘ[I2].
#R #I1 #K1 #L2 #s #H elim (rex_inv_sort … H) -H *
[ #H destruct
| #Z1 #I2 #Y1 #K2 #Hs #H1 #H2 destruct /2 width=4 by ex2_2_intro/
qed-.
lemma rex_inv_sort_bind_dx (R):
- ∀I2,K2,L1,s. L1 ⪤[R,⋆s] K2.ⓘ{I2} →
- ∃∃I1,K1. K1 ⪤[R,⋆s] K2 & L1 = K1.ⓘ{I1}.
+ ∀I2,K2,L1,s. L1 ⪤[R,⋆s] K2.ⓘ[I2] →
+ ∃∃I1,K1. K1 ⪤[R,⋆s] K2 & L1 = K1.ⓘ[I1].
#R #I2 #K2 #L1 #s #H elim (rex_inv_sort … H) -H *
[ #_ #H destruct
| #I1 #Z2 #K1 #Y2 #Hs #H1 #H2 destruct /2 width=4 by ex2_2_intro/
qed-.
lemma rex_inv_zero_pair_sn (R):
- ∀I,L2,K1,V1. K1.ⓑ{I}V1 ⪤[R,#0] L2 →
- ∃∃K2,V2. K1 ⪤[R,V1] K2 & R K1 V1 V2 & L2 = K2.ⓑ{I}V2.
+ ∀I,L2,K1,V1. K1.ⓑ[I]V1 ⪤[R,#0] L2 →
+ ∃∃K2,V2. K1 ⪤[R,V1] K2 & R K1 V1 V2 & L2 = K2.ⓑ[I]V2.
#R #I #L2 #K1 #V1 #H elim (rex_inv_zero … H) -H *
[ #H destruct
| #Z #Y1 #K2 #X1 #V2 #HK12 #HV12 #H1 #H2 destruct
qed-.
lemma rex_inv_zero_pair_dx (R):
- ∀I,L1,K2,V2. L1 ⪤[R,#0] K2.ⓑ{I}V2 →
- ∃∃K1,V1. K1 ⪤[R,V1] K2 & R K1 V1 V2 & L1 = K1.ⓑ{I}V1.
+ ∀I,L1,K2,V2. L1 ⪤[R,#0] K2.ⓑ[I]V2 →
+ ∃∃K1,V1. K1 ⪤[R,V1] K2 & R K1 V1 V2 & L1 = K1.ⓑ[I]V1.
#R #I #L1 #K2 #V2 #H elim (rex_inv_zero … H) -H *
[ #_ #H destruct
| #Z #K1 #Y2 #V1 #X2 #HK12 #HV12 #H1 #H2 destruct
qed-.
lemma rex_inv_zero_unit_sn (R):
- ∀I,K1,L2. K1.ⓤ{I} ⪤[R,#0] L2 →
- â\88\83â\88\83f,K2. ð\9d\90\88â¦\83fâ¦\84 & K1 ⪤[cext2 R,cfull,f] K2 & L2 = K2.â\93¤{I}.
+ ∀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.â\93¤[I].
#R #I #K1 #L2 #H elim (rex_inv_zero … H) -H *
[ #H destruct
| #Z #Y1 #Y2 #X1 #X2 #_ #_ #H destruct
qed-.
lemma rex_inv_zero_unit_dx (R):
- ∀I,L1,K2. L1 ⪤[R,#0] K2.ⓤ{I} →
- â\88\83â\88\83f,K1. ð\9d\90\88â¦\83fâ¦\84 & K1 ⪤[cext2 R,cfull,f] K2 & L1 = K1.â\93¤{I}.
+ ∀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.â\93¤[I].
#R #I #L1 #K2 #H elim (rex_inv_zero … H) -H *
[ #_ #H destruct
| #Z #Y1 #Y2 #X1 #X2 #_ #_ #_ #H destruct
qed-.
lemma rex_inv_lref_bind_sn (R):
- ∀I1,K1,L2,i. K1.ⓘ{I1} ⪤[R,#↑i] L2 →
- ∃∃I2,K2. K1 ⪤[R,#i] K2 & L2 = K2.ⓘ{I2}.
+ ∀I1,K1,L2,i. K1.ⓘ[I1] ⪤[R,#↑i] L2 →
+ ∃∃I2,K2. K1 ⪤[R,#i] K2 & L2 = K2.ⓘ[I2].
#R #I1 #K1 #L2 #i #H elim (rex_inv_lref … H) -H *
[ #H destruct
| #Z1 #I2 #Y1 #K2 #Hi #H1 #H2 destruct /2 width=4 by ex2_2_intro/
qed-.
lemma rex_inv_lref_bind_dx (R):
- ∀I2,K2,L1,i. L1 ⪤[R,#↑i] K2.ⓘ{I2} →
- ∃∃I1,K1. K1 ⪤[R,#i] K2 & L1 = K1.ⓘ{I1}.
+ ∀I2,K2,L1,i. L1 ⪤[R,#↑i] K2.ⓘ[I2] →
+ ∃∃I1,K1. K1 ⪤[R,#i] K2 & L1 = K1.ⓘ[I1].
#R #I2 #K2 #L1 #i #H elim (rex_inv_lref … H) -H *
[ #_ #H destruct
| #I1 #Z2 #K1 #Y2 #Hi #H1 #H2 destruct /2 width=4 by ex2_2_intro/
qed-.
lemma rex_inv_gref_bind_sn (R):
- ∀I1,K1,L2,l. K1.ⓘ{I1} ⪤[R,§l] L2 →
- ∃∃I2,K2. K1 ⪤[R,§l] K2 & L2 = K2.ⓘ{I2}.
+ ∀I1,K1,L2,l. K1.ⓘ[I1] ⪤[R,§l] L2 →
+ ∃∃I2,K2. K1 ⪤[R,§l] K2 & L2 = K2.ⓘ[I2].
#R #I1 #K1 #L2 #l #H elim (rex_inv_gref … H) -H *
[ #H destruct
| #Z1 #I2 #Y1 #K2 #Hl #H1 #H2 destruct /2 width=4 by ex2_2_intro/
qed-.
lemma rex_inv_gref_bind_dx (R):
- ∀I2,K2,L1,l. L1 ⪤[R,§l] K2.ⓘ{I2} →
- ∃∃I1,K1. K1 ⪤[R,§l] K2 & L1 = K1.ⓘ{I1}.
+ ∀I2,K2,L1,l. L1 ⪤[R,§l] K2.ⓘ[I2] →
+ ∃∃I1,K1. K1 ⪤[R,§l] K2 & L1 = K1.ⓘ[I1].
#R #I2 #K2 #L1 #l #H elim (rex_inv_gref … H) -H *
[ #_ #H destruct
| #I1 #Z2 #K1 #Y2 #Hl #H1 #H2 destruct /2 width=4 by ex2_2_intro/
(* Basic forward lemmas *****************************************************)
lemma rex_fwd_zero_pair (R):
- ∀I,K1,K2,V1,V2. K1.ⓑ{I}V1 ⪤[R,#0] K2.ⓑ{I}V2 → K1 ⪤[R,V1] K2.
+ ∀I,K1,K2,V1,V2. K1.ⓑ[I]V1 ⪤[R,#0] K2.ⓑ[I]V2 → K1 ⪤[R,V1] K2.
#R #I #K1 #K2 #V1 #V2 #H
elim (rex_inv_zero_pair_sn … H) -H #Y #X #HK12 #_ #H destruct //
qed-.
(* Basic_2A1: uses: llpx_sn_fwd_pair_sn llpx_sn_fwd_bind_sn llpx_sn_fwd_flat_sn *)
-lemma rex_fwd_pair_sn (R): ∀I,L1,L2,V,T. L1 ⪤[R,②{I}V.T] L2 → L1 ⪤[R,V] L2.
+lemma rex_fwd_pair_sn (R): ∀I,L1,L2,V,T. L1 ⪤[R,②[I]V.T] L2 → L1 ⪤[R,V] L2.
#R * [ #p ] #I #L1 #L2 #V #T * #f #Hf #HL
[ elim (frees_inv_bind … Hf) | elim (frees_inv_flat … Hf) ] -Hf
/4 width=6 by sle_sex_trans, sor_inv_sle_sn, ex2_intro/
(* Basic_2A1: uses: llpx_sn_fwd_bind_dx llpx_sn_fwd_bind_O_dx *)
lemma rex_fwd_bind_dx (R):
- ∀p,I,L1,L2,V1,V2,T. L1 ⪤[R,ⓑ{p,I}V1.T] L2 →
- R L1 V1 V2 → L1.ⓑ{I}V1 ⪤[R,T] L2.ⓑ{I}V2.
+ ∀p,I,L1,L2,V1,V2,T. L1 ⪤[R,ⓑ[p,I]V1.T] L2 →
+ R L1 V1 V2 → L1.ⓑ[I]V1 ⪤[R,T] L2.ⓑ[I]V2.
#R #p #I #L1 #L2 #V1 #V2 #T #H #HV elim (rex_inv_bind … H HV) -H -HV //
qed-.
(* Basic_2A1: uses: llpx_sn_fwd_flat_dx *)
-lemma rex_fwd_flat_dx (R): ∀I,L1,L2,V,T. L1 ⪤[R,ⓕ{I}V.T] L2 → L1 ⪤[R,T] L2.
+lemma rex_fwd_flat_dx (R): ∀I,L1,L2,V,T. L1 ⪤[R,ⓕ[I]V.T] L2 → L1 ⪤[R,T] L2.
#R #I #L1 #L2 #V #T #H elim (rex_inv_flat … H) -H //
qed-.
lemma rex_fwd_dx (R):
- ∀I2,L1,K2,T. L1 ⪤[R,T] K2.ⓘ{I2} →
- ∃∃I1,K1. L1 = K1.ⓘ{I1}.
+ ∀I2,L1,K2,T. L1 ⪤[R,T] K2.ⓘ[I2] →
+ ∃∃I1,K1. L1 = K1.ⓘ[I1].
#R #I2 #L1 #K2 #T * #f elim (pn_split f) * #g #Hg #_ #Hf destruct
[ elim (sex_inv_push2 … Hf) | elim (sex_inv_next2 … Hf) ] -Hf #I1 #K1 #_ #_ #H destruct
/2 width=3 by ex1_2_intro/
(* Basic properties *********************************************************)
-lemma rex_atom (R): ∀I. ⋆ ⪤[R,⓪{I}] ⋆.
+lemma rex_atom (R): ∀I. ⋆ ⪤[R,⓪[I]] ⋆.
#R * /3 width=3 by frees_sort, frees_atom, frees_gref, sex_atom, ex2_intro/
qed.
lemma rex_sort (R):
- ∀I1,I2,L1,L2,s. L1 ⪤[R,⋆s] L2 → L1.ⓘ{I1} ⪤[R,⋆s] L2.ⓘ{I2}.
+ ∀I1,I2,L1,L2,s. L1 ⪤[R,⋆s] L2 → L1.ⓘ[I1] ⪤[R,⋆s] L2.ⓘ[I2].
#R #I1 #I2 #L1 #L2 #s * #f #Hf #H12
lapply (frees_inv_sort … Hf) -Hf
/4 width=3 by frees_sort, sex_push, isid_push, ex2_intro/
lemma rex_pair (R):
∀I,L1,L2,V1,V2. L1 ⪤[R,V1] L2 →
- R L1 V1 V2 → L1.ⓑ{I}V1 ⪤[R,#0] L2.ⓑ{I}V2.
+ R L1 V1 V2 → L1.ⓑ[I]V1 ⪤[R,#0] L2.ⓑ[I]V2.
#R #I1 #I2 #L1 #L2 #V1 *
/4 width=3 by ext2_pair, frees_pair, sex_next, ex2_intro/
qed.
lemma rex_unit (R):
- â\88\80f,I,L1,L2. ð\9d\90\88â¦\83fâ¦\84 → L1 ⪤[cext2 R,cfull,f] L2 →
- L1.ⓤ{I} ⪤[R,#0] L2.ⓤ{I}.
+ â\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_lref (R):
- ∀I1,I2,L1,L2,i. L1 ⪤[R,#i] L2 → L1.ⓘ{I1} ⪤[R,#↑i] L2.ⓘ{I2}.
+ ∀I1,I2,L1,L2,i. L1 ⪤[R,#i] L2 → L1.ⓘ[I1] ⪤[R,#↑i] L2.ⓘ[I2].
#R #I1 #I2 #L1 #L2 #i * /3 width=3 by sex_push, frees_lref, ex2_intro/
qed.
lemma rex_gref (R):
- ∀I1,I2,L1,L2,l. L1 ⪤[R,§l] L2 → L1.ⓘ{I1} ⪤[R,§l] L2.ⓘ{I2}.
+ ∀I1,I2,L1,L2,l. L1 ⪤[R,§l] L2 → L1.ⓘ[I1] ⪤[R,§l] L2.ⓘ[I2].
#R #I1 #I2 #L1 #L2 #l * #f #Hf #H12
lapply (frees_inv_gref … Hf) -Hf
/4 width=3 by frees_gref, sex_push, isid_push, ex2_intro/
qed.
lemma rex_bind_repl_dx (R):
- ∀I,I1,L1,L2,T. L1.ⓘ{I} ⪤[R,T] L2.ⓘ{I1} →
- ∀I2. cext2 R L1 I I2 → L1.ⓘ{I} ⪤[R,T] L2.ⓘ{I2}.
+ ∀I,I1,L1,L2,T. L1.ⓘ[I] ⪤[R,T] L2.ⓘ[I1] →
+ ∀I2. cext2 R L1 I I2 → L1.ⓘ[I] ⪤[R,T] L2.ⓘ[I2].
#R #I #I1 #L1 #L2 #T * #f #Hf #HL12 #I2 #HR
/3 width=5 by sex_pair_repl, ex2_intro/
qed-.
lemma rex_isid (R1) (R2):
∀L1,L2,T1,T2.
- (â\88\80f. L1 â\8a¢ ð\9d\90\85+â¦\83T1â¦\84 â\89\98 f â\86\92 ð\9d\90\88â¦\83fâ¦\84) →
- (â\88\80f. ð\9d\90\88â¦\83fâ¦\84 â\86\92 L1 â\8a¢ ð\9d\90\85+â¦\83T2â¦\84 ≘ 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/
qed-.
lemma rex_unit_sn (R1) (R2):
- ∀I,K1,L2. K1.ⓤ{I} ⪤[R1,#0] L2 → K1.ⓤ{I} ⪤[R2,#0] L2.
+ ∀I,K1,L2. K1.ⓤ[I] ⪤[R1,#0] L2 → K1.ⓤ[I] ⪤[R2,#0] L2.
#R1 #R2 #I #K1 #L2 #H
elim (rex_inv_zero_unit_sn … H) -H #f #K2 #Hf #HK12 #H destruct
/3 width=7 by rex_unit, sex_co_isid/
∃∃L2. L1 ⪤[R,U] L2 & ⇩*[b,f] L2 ≘ K2 & L1 ≡[f] L2.
definition f_dropable_sn: predicate (relation3 lenv term term) ≝
- λR. â\88\80b,f,L1,K1. â\87©*[b,f] L1 â\89\98 K1 â\86\92 ð\9d\90\94â¦\83fâ¦\84 →
+ λ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 f_dropable_dx: predicate (relation3 lenv term term) ≝
λR. ∀L1,L2,U. L1 ⪤[R,U] L2 →
- â\88\80b,f,K2. â\87©*[b,f] L2 â\89\98 K2 â\86\92 ð\9d\90\94â¦\83fâ¦\84 → ∀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+â¦\83Tâ¦\84 ≘ f →
- ∀g,I,K,n. ⇩*[n] L ≘ K.ⓘ{I} → ↑g = ⫱*[n] f →
+ â\88\80f,L,T. L â\8a¢ ð\9d\90\85+â\9dªTâ\9d« ≘ f →
+ ∀g,I,K,n. ⇩*[n] L ≘ K.ⓘ[I] → ↑g = ⫱*[n] f →
sex_transitive (cext2 R1) (cext2 R2) (cext2 R3) (cext2 R1) cfull g K I.
(* Properties with generic slicing for local environments *******************)
(* Basic_2A1: uses: llpx_sn_inv_lift_O *)
lemma rex_inv_lifts_bi (R):
- â\88\80L1,L2,U. L1 ⪤[R,U] L2 â\86\92 â\88\80b,f. ð\9d\90\94â¦\83fâ¦\84 →
+ â\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
qed-.
lemma rex_inv_lref_pair_sn (R):
- ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I}V1 →
- ∃∃K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I}V2 & K1 ⪤[R,V1] K2 & R K1 V1 V2.
+ ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ[I]V1 →
+ ∃∃K2,V2. ⇩*[i] L2 ≘ K2.ⓑ[I]V2 & K1 ⪤[R,V1] K2 & R K1 V1 V2.
#R #L1 #L2 #i #HL12 #I #K1 #V1 #HLK1 elim (rex_dropable_sn … HLK1 … HL12 (#0)) -HLK1 -HL12 //
#Y #HY #HLK2 elim (rex_inv_zero_pair_sn … HY) -HY
#K2 #V2 #HK12 #HV12 #H destruct /2 width=5 by ex3_2_intro/
qed-.
lemma rex_inv_lref_pair_dx (R):
- ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I}V2 →
- ∃∃K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I}V1 & K1 ⪤[R,V1] K2 & R K1 V1 V2.
+ ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ[I]V2 →
+ ∃∃K1,V1. ⇩*[i] L1 ≘ K1.ⓑ[I]V1 & K1 ⪤[R,V1] K2 & R K1 V1 V2.
#R #L1 #L2 #i #HL12 #I #K2 #V2 #HLK2 elim (rex_dropable_dx … HL12 … HLK2 … (#0)) -HLK2 -HL12 //
#Y #HLK1 #HY elim (rex_inv_zero_pair_dx … HY) -HY
#K1 #V1 #HK12 #HV12 #H destruct /2 width=5 by ex3_2_intro/
lemma rex_inv_lref_pair_bi (R) (L1) (L2) (i):
L1 ⪤[R,#i] L2 →
- ∀I1,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ{I1}V1 →
- ∀I2,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ{I2}V2 →
+ ∀I1,K1,V1. ⇩*[i] L1 ≘ K1.ⓑ[I1]V1 →
+ ∀I2,K2,V2. ⇩*[i] L2 ≘ K2.ⓑ[I2]V2 →
∧∧ K1 ⪤[R,V1] K2 & R K1 V1 V2 & I1 = I2.
#R #L1 #L2 #i #H12 #I1 #K1 #V1 #H1 #I2 #K2 #V2 #H2
elim (rex_inv_lref_pair_sn … H12 … H1) -L1 #Y2 #X2 #HLY2 #HK12 #HV12
qed-.
lemma rex_inv_lref_unit_sn (R):
- ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K1. ⇩*[i] L1 ≘ K1.ⓤ{I} →
- ∃∃f,K2. ⇩*[i] L2 ≘ K2.ⓤ{I} & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈⦃f⦄.
+ ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K1. ⇩*[i] L1 ≘ K1.ⓤ[I] →
+ ∃∃f,K2. ⇩*[i] L2 ≘ K2.ⓤ[I] & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈❪f❫.
#R #L1 #L2 #i #HL12 #I #K1 #HLK1 elim (rex_dropable_sn … HLK1 … HL12 (#0)) -HLK1 -HL12 //
#Y #HY #HLK2 elim (rex_inv_zero_unit_sn … HY) -HY
#f #K2 #Hf #HK12 #H destruct /2 width=5 by ex3_2_intro/
qed-.
lemma rex_inv_lref_unit_dx (R):
- ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K2. ⇩*[i] L2 ≘ K2.ⓤ{I} →
- ∃∃f,K1. ⇩*[i] L1 ≘ K1.ⓤ{I} & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈⦃f⦄.
+ ∀L1,L2,i. L1 ⪤[R,#i] L2 → ∀I,K2. ⇩*[i] L2 ≘ K2.ⓤ[I] →
+ ∃∃f,K1. ⇩*[i] L1 ≘ K1.ⓤ[I] & K1 ⪤[cext2 R,cfull,f] K2 & 𝐈❪f❫.
#R #L1 #L2 #i #HL12 #I #K2 #HLK2 elim (rex_dropable_dx … HL12 … HLK2 … (#0)) -HLK2 -HL12 //
#Y #HLK1 #HY elim (rex_inv_zero_unit_dx … HY) -HY
#f #K2 #Hf #HK12 #H destruct /2 width=5 by ex3_2_intro/
lemma rex_pair_refl (R):
(∀L. reflexive … (R L)) →
- ∀L,V1,V2. R L V1 V2 → ∀I,T. L.ⓑ{I}V1 ⪤[R,T] L.ⓑ{I}V2.
+ ∀L,V1,V2. R L V1 V2 → ∀I,T. L.ⓑ[I]V1 ⪤[R,T] L.ⓑ[I]V2.
#R #HR #L #V1 #V2 #HV12 #I #T
-elim (frees_total (L.ⓑ{I}V1) T) #f #Hf
+elim (frees_total (L.ⓑ[I]V1) T) #f #Hf
elim (pn_split f) * #g #H destruct
/5 width=3 by sex_refl, sex_next, sex_push, ext2_refl, ext2_pair, ex2_intro/
qed.
(* Advanced inversion lemmas ************************************************)
lemma rex_inv_bind_void (R):
- ∀p,I,L1,L2,V,T. L1 ⪤[R,ⓑ{p,I}V.T] L2 → L1 ⪤[R,V] L2 ∧ L1.ⓧ ⪤[R,T] L2.ⓧ.
+ ∀p,I,L1,L2,V,T. L1 ⪤[R,ⓑ[p,I]V.T] L2 → L1 ⪤[R,V] L2 ∧ L1.ⓧ ⪤[R,T] L2.ⓧ.
#R #p #I #L1 #L2 #V #T * #f #Hf #HL elim (frees_inv_bind_void … Hf) -Hf
/6 width=6 by sle_sex_trans, sex_inv_tl, sor_inv_sle_dx, sor_inv_sle_sn, ex2_intro, conj/
qed-.
(* Advanced forward lemmas **************************************************)
lemma rex_fwd_bind_dx_void (R):
- ∀p,I,L1,L2,V,T. L1 ⪤[R,ⓑ{p,I}V.T] L2 → L1.ⓧ ⪤[R,T] L2.ⓧ.
+ ∀p,I,L1,L2,V,T. L1 ⪤[R,ⓑ[p,I]V.T] L2 → L1.ⓧ ⪤[R,T] L2.ⓧ.
#R #p #I #L1 #L2 #V #T #H elim (rex_inv_bind_void … H) -H //
qed-.
(* 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 â¦\83L,T2â¦\84 â\8a\86 â¦\83L,T1â¦\84.
+ â\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 â¦\83L2,Tâ¦\84 â\8a\86 â¦\83L1,Tâ¦\84.
+ â\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 â¦\83L1,Tâ¦\84 â\8a\86 â¦\83L2,Tâ¦\84.
+ â\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 (R):
rex_fsge_compatible R →
- â\88\80L1,T,f1. L1 â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ 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+â¦\83Tâ¦\84 ≘ 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/
(* 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. â¦\83L1,T1â¦\84 â\8a\86 â¦\83L1,T2â¦\84 →
+ â\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
(∀L. reflexive … (R1 L)) → (∀L. reflexive … (R2 L)) →
rex_fsge_compatible R1 →
∀L1,L2,V. L1 ⪤[R1,V] L2 → ∀I,T.
- ∃∃L. L1 ⪤[R1,②{I}V.T] L & L ⪤[R2,V] L2.
+ ∃∃L. L1 ⪤[R1,②[I]V.T] L & L ⪤[R2,V] L2.
#R1 #R2 #HR1 #HR2 #HR #L1 #L2 #V * #f #Hf #HL12 * [ #p ] #I #T
-[ elim (frees_total L1 (ⓑ{p,I}V.T)) #g #Hg
+[ elim (frees_total L1 (ⓑ[p,I]V.T)) #g #Hg
elim (frees_inv_bind … Hg) #y1 #y2 #H #_ #Hy
-| elim (frees_total L1 (ⓕ{I}V.T)) #g #Hg
+| elim (frees_total L1 (ⓕ[I]V.T)) #g #Hg
elim (frees_inv_flat … Hg) #y1 #y2 #H #_ #Hy
]
lapply(frees_mono … H … Hf) -H #H1
(∀L. reflexive … (R1 L)) → (∀L. reflexive … (R2 L)) →
rex_fsge_compatible R1 →
∀L1,L2,T. L1 ⪤[R1,T] L2 → ∀I,V.
- ∃∃L. L1 ⪤[R1,ⓕ{I}V.T] L & L ⪤[R2,T] L2.
+ ∃∃L. L1 ⪤[R1,ⓕ[I]V.T] L & L ⪤[R2,T] L2.
#R1 #R2 #HR1 #HR2 #HR #L1 #L2 #T * #f #Hf #HL12 #I #V
-elim (frees_total L1 (ⓕ{I}V.T)) #g #Hg
+elim (frees_total L1 (ⓕ[I]V.T)) #g #Hg
elim (frees_inv_flat … Hg) #y1 #y2 #_ #H #Hy
lapply(frees_mono … H … Hf) -H #H2
lapply (sor_eq_repl_back2 … Hy … H2) -y2 #Hy
lemma rex_bind_dx_split (R1) (R2):
(∀L. reflexive … (R1 L)) → (∀L. reflexive … (R2 L)) →
rex_fsge_compatible R1 →
- ∀I,L1,L2,V1,T. L1.ⓑ{I}V1 ⪤[R1,T] L2 → ∀p.
- ∃∃L,V. L1 ⪤[R1,ⓑ{p,I}V1.T] L & L.ⓑ{I}V ⪤[R2,T] L2 & R1 L1 V1 V.
+ ∀I,L1,L2,V1,T. L1.ⓑ[I]V1 ⪤[R1,T] L2 → ∀p.
+ ∃∃L,V. L1 ⪤[R1,ⓑ[p,I]V1.T] L & L.ⓑ[I]V ⪤[R2,T] L2 & R1 L1 V1 V.
#R1 #R2 #HR1 #HR2 #HR #I #L1 #L2 #V1 #T * #f #Hf #HL12 #p
-elim (frees_total L1 (ⓑ{p,I}V1.T)) #g #Hg
+elim (frees_total L1 (ⓑ[p,I]V1.T)) #g #Hg
elim (frees_inv_bind … Hg) #y1 #y2 #_ #H #Hy
lapply(frees_mono … H … Hf) -H #H2
lapply (tl_eq_repl … H2) -H2 #H2
(∀L. reflexive … (R1 L)) → (∀L. reflexive … (R2 L)) →
rex_fsge_compatible R1 →
∀L1,L2,T. L1.ⓧ ⪤[R1,T] L2 → ∀p,I,V.
- ∃∃L. L1 ⪤[R1,ⓑ{p,I}V.T] L & L.ⓧ ⪤[R2,T] L2.
+ ∃∃L. L1 ⪤[R1,ⓑ[p,I]V.T] L & L.ⓧ ⪤[R2,T] L2.
#R1 #R2 #HR1 #HR2 #HR #L1 #L2 #T * #f #Hf #HL12 #p #I #V
-elim (frees_total L1 (ⓑ{p,I}V.T)) #g #Hg
+elim (frees_total L1 (ⓑ[p,I]V.T)) #g #Hg
elim (frees_inv_bind_void … Hg) #y1 #y2 #_ #H #Hy
lapply(frees_mono … H … Hf) -H #H2
lapply (tl_eq_repl … H2) -H2 #H2
]
qed.
-lemma rex_unit_length (R): ∀L1,L2. |L1| = |L2| → ∀I. L1.ⓤ{I} ⪤[R,#0] L2.ⓤ{I}.
+lemma rex_unit_length (R): ∀L1,L2. |L1| = |L2| → ∀I. L1.ⓤ[I] ⪤[R,#0] L2.ⓤ[I].
/3 width=3 by rex_unit, sex_length_isid/ qed.
(* Basic_2A1: uses: llpx_sn_lift_le llpx_sn_lift_ge *)
∀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
- | ∃∃I,L1,L2. |L1| = |L2| & Y1 = L1.ⓤ{I} & Y2 = L2.ⓤ{I}.
+ Y1 = L1.ⓑ[I]V1 & Y2 = L2.ⓑ[I]V2
+ | ∃∃I,L1,L2. |L1| = |L2| & Y1 = L1.ⓤ[I] & Y2 = L2.ⓤ[I].
#R #Y1 #Y2 #H elim (rex_inv_zero … H) -H *
/4 width=9 by sex_fwd_length, ex4_5_intro, ex3_3_intro, or3_intro2, or3_intro1, or3_intro0, conj/
qed-.
lemma rex_inv_frees (R):
∀L1,L2,T. L1 ⪤[R,T] L2 →
- â\88\80f. L1 â\8a¢ ð\9d\90\85+â¦\83Tâ¦\84 ≘ 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-.
(* Basic_2A1: uses: llpx_sn_bind llpx_sn_bind_O *)
theorem rex_bind (R) (p) (I):
- ∀L1,L2,V1,V2,T. L1 ⪤[R,V1] L2 → L1.ⓑ{I}V1 ⪤[R,T] L2.ⓑ{I}V2 →
- L1 ⪤[R,ⓑ{p,I}V1.T] L2.
+ ∀L1,L2,V1,V2,T. L1 ⪤[R,V1] L2 → L1.ⓑ[I]V1 ⪤[R,T] L2.ⓑ[I]V2 →
+ L1 ⪤[R,ⓑ[p,I]V1.T] L2.
#R #p #I #L1 #L2 #V1 #V2 #T * #f1 #HV #Hf1 * #f2 #HT #Hf2
lapply (sex_fwd_bind … Hf2) -Hf2 #Hf2 elim (sor_isfin_ex f1 (⫱f2))
/3 width=7 by frees_fwd_isfin, frees_bind, sex_join, isfin_tl, ex2_intro/
(* Basic_2A1: llpx_sn_flat *)
theorem rex_flat (R) (I):
- ∀L1,L2,V,T. L1 ⪤[R,V] L2 → L1 ⪤[R,T] L2 → L1 ⪤[R,ⓕ{I}V.T] L2.
+ ∀L1,L2,V,T. L1 ⪤[R,V] L2 → L1 ⪤[R,T] L2 → L1 ⪤[R,ⓕ[I]V.T] L2.
#R #I #L1 #L2 #V #T * #f1 #HV #Hf1 * #f2 #HT #Hf2 elim (sor_isfin_ex f1 f2)
/3 width=7 by frees_fwd_isfin, frees_flat, sex_join, ex2_intro/
qed.
theorem rex_bind_void (R) (p) (I):
- ∀L1,L2,V,T. L1 ⪤[R,V] L2 → L1.ⓧ ⪤[R,T] L2.ⓧ → L1 ⪤[R,ⓑ{p,I}V.T] L2.
+ ∀L1,L2,V,T. L1 ⪤[R,V] L2 → L1.ⓧ ⪤[R,T] L2.ⓧ → L1 ⪤[R,ⓑ[p,I]V.T] L2.
#R #p #I #L1 #L2 #V #T * #f1 #HV #Hf1 * #f2 #HT #Hf2
lapply (sex_fwd_bind … Hf2) -Hf2 #Hf2 elim (sor_isfin_ex f1 (⫱f2))
/3 width=7 by frees_fwd_isfin, frees_bind_void, sex_join, isfin_tl, ex2_intro/
(* Basic_2A1: uses: nllpx_sn_inv_bind nllpx_sn_inv_bind_O *)
lemma rnex_inv_bind (R):
(∀L,T1,T2. Decidable (R L T1 T2)) →
- ∀p,I,L1,L2,V,T. (L1 ⪤[R,ⓑ{p,I}V.T] L2 → ⊥) →
- ∨∨ (L1 ⪤[R,V] L2 → ⊥) | (L1.ⓑ{I}V ⪤[R,T] L2.ⓑ{I}V → ⊥).
+ ∀p,I,L1,L2,V,T. (L1 ⪤[R,ⓑ[p,I]V.T] L2 → ⊥) →
+ ∨∨ (L1 ⪤[R,V] L2 → ⊥) | (L1.ⓑ[I]V ⪤[R,T] L2.ⓑ[I]V → ⊥).
#R #HR #p #I #L1 #L2 #V #T #H elim (rex_dec … HR L1 L2 V)
/4 width=2 by rex_bind, or_intror, or_introl/
qed-.
(* Basic_2A1: uses: nllpx_sn_inv_flat *)
lemma rnex_inv_flat (R):
(∀L,T1,T2. Decidable (R L T1 T2)) →
- ∀I,L1,L2,V,T. (L1 ⪤[R,ⓕ{I}V.T] L2 → ⊥) →
+ ∀I,L1,L2,V,T. (L1 ⪤[R,ⓕ[I]V.T] L2 → ⊥) →
∨∨ (L1 ⪤[R,V] L2 → ⊥) | (L1 ⪤[R,T] L2 → ⊥).
#R #HR #I #L1 #L2 #V #T #H elim (rex_dec … HR L1 L2 V)
/4 width=1 by rex_flat, or_intror, or_introl/
lemma rnex_inv_bind_void (R):
(∀L,T1,T2. Decidable (R L T1 T2)) →
- ∀p,I,L1,L2,V,T. (L1 ⪤[R,ⓑ{p,I}V.T] L2 → ⊥) →
+ ∀p,I,L1,L2,V,T. (L1 ⪤[R,ⓑ[p,I]V.T] L2 → ⊥) →
∨∨ (L1 ⪤[R,V] L2 → ⊥) | (L1.ⓧ ⪤[R,T] L2.ⓧ → ⊥).
#R #HR #p #I #L1 #L2 #V #T #H elim (rex_dec … HR L1 L2 V)
/4 width=2 by rex_bind_void, or_intror, or_introl/
rec definition append L K on K ≝ match K with
[ LAtom ⇒ L
-| LBind K I ⇒ (append L K).ⓘ{I}
+| LBind K I ⇒ (append L K).ⓘ[I]
].
interpretation "append (local environment)" 'plus L1 L2 = (append L1 L2).
// qed.
(* Basic_2A1: uses: append_pair *)
-lemma append_bind: ∀I,L,K. L+(K.ⓘ{I}) = (L+K).ⓘ{I}.
+lemma append_bind: ∀I,L,K. L+(K.ⓘ[I]) = (L+K).ⓘ[I].
// qed.
lemma append_atom_sn: ∀L. ⋆ + L = L.
#L1 #L2 #L3 elim L3 -L3 //
qed.
-lemma append_shift: ∀L,K,I. L+(ⓘ{I}.K) = (L.ⓘ{I})+K.
+lemma append_shift: ∀L,K,I. L+(ⓘ[I].K) = (L.ⓘ[I])+K.
#L #K #I <append_assoc //
qed.
#K #I >append_bind #H destruct
qed-.
-lemma append_inv_bind3_sn: ∀I0,L,L0,K. L0.ⓘ{I0} = L + K →
- ∨∨ ∧∧ L0.ⓘ{I0} = L & ⋆ = K
- | ∃∃K0. K = K0.ⓘ{I0} & L0 = L + K0.
+lemma append_inv_bind3_sn: ∀I0,L,L0,K. L0.ⓘ[I0] = L + K →
+ ∨∨ ∧∧ L0.ⓘ[I0] = L & ⋆ = K
+ | ∃∃K0. K = K0.ⓘ[I0] & L0 = L + K0.
#I0 #L #L0 * /3 width=1 by or_introl, conj/
#K #I >append_bind #H destruct /3 width=3 by ex2_intro, or_intror/
qed-.
(* Basic_1: uses: chead_ctail *)
(* Basic_2A1: uses: lpair_ltail *)
-lemma lenv_case_tail: ∀L. L = ⋆ ∨ ∃∃K,I. L = ⓘ{I}.K.
+lemma lenv_case_tail: ∀L. L = ⋆ ∨ ∃∃K,I. L = ⓘ[I].K.
#L elim L -L /2 width=1 by or_introl/
#L #I * [2: * ] /3 width=3 by ex1_2_intro, or_intror/
qed-.
#L2 #I >append_bind >length_bind >length_bind //
qed.
-lemma ltail_length: ∀I,L. |ⓘ{I}.L| = ↑|L|.
+lemma ltail_length: ∀I,L. |ⓘ[I].L| = ↑|L|.
#I #L >append_length //
qed.
(* Basic_2A1: was: length_inv_pos_dx_ltail *)
lemma length_inv_succ_dx_ltail: ∀L,n. |L| = ↑n →
- ∃∃I,K. |K| = n & L = ⓘ{I}.K.
+ ∃∃I,K. |K| = n & L = ⓘ[I].K.
#Y #n #H elim (length_inv_succ_dx … H) -H #I #L #Hn #HLK destruct
elim (lenv_case_tail … L) [2: * #K #J ]
#H destruct /2 width=4 by ex2_2_intro/
(* Basic_2A1: was: length_inv_pos_sn_ltail *)
lemma length_inv_succ_sn_ltail: ∀L,n. ↑n = |L| →
- ∃∃I,K. n = |K| & L = ⓘ{I}.K.
+ ∃∃I,K. n = |K| & L = ⓘ[I].K.
#Y #n #H elim (length_inv_succ_sn … H) -H #I #L #Hn #HLK destruct
elim (lenv_case_tail … L) [2: * #K #J ]
#H destruct /2 width=4 by ex2_2_intro/
#L #K #H elim (append_inj_dx … (⋆) … H) //
qed-.
-lemma append_inv_pair_dx: ∀I,L,K,V. L+K = L.ⓑ{I}V → K = ⋆.ⓑ{I}V.
-#I #L #K #V #H elim (append_inj_dx … (⋆.ⓑ{I}V) … H) //
+lemma append_inv_pair_dx: ∀I,L,K,V. L+K = L.ⓑ[I]V → K = ⋆.ⓑ[I]V.
+#I #L #K #V #H elim (append_inj_dx … (⋆.ⓑ[I]V) … H) //
qed-.
(* Basic eliminators ********************************************************)
(* Basic_1: was: c_tail_ind *)
(* Basic_2A1: was: lenv_ind_alt *)
lemma lenv_ind_tail: ∀Q:predicate lenv.
- Q (⋆) → (∀I,L. Q L → Q (ⓘ{I}.L)) → ∀L. Q L.
+ Q (⋆) → (∀I,L. Q L → Q (ⓘ[I].L)) → ∀L. Q L.
#Q #IH1 #IH2 #L @(f_ind … length … L) -L #x #IHx * //
#L #I -IH1 #H destruct
elim (lenv_case_tail … L) [2: * #K #J ]
rec definition bw I ≝ match I with
[ BUnit _ ⇒ 1
-| BPair _ V ⇒ ♯{V}
+| BPair _ V ⇒ ♯❨V❩
].
interpretation "weight (binder for local environments)" 'Weight I = (bw I).
(* Basic properties *********************************************************)
-lemma bw_pos: ∀I. 1 ≤ ♯{I}.
+lemma bw_pos: ∀I. 1 ≤ ♯❨I❩.
* //
qed.
(* WEIGHT OF A RESTRICTED CLOSURE *******************************************)
-definition rfw: lenv → term → ? ≝ λL,T. ♯{L} + ♯{T}.
+definition rfw: lenv → term → ? ≝ λL,T. ♯❨L❩ + ♯❨T❩.
interpretation "weight (restricted closure)" 'Weight L T = (rfw L T).
(* Basic properties *********************************************************)
(* Basic_1: was: flt_shift *)
-lemma rfw_shift: ∀p,I,K,V,T. ♯{K.ⓑ{I}V,T} < ♯{K,ⓑ{p,I}V.T}.
+lemma rfw_shift: ∀p,I,K,V,T. ♯❨K.ⓑ[I]V,T❩ < ♯❨K,ⓑ[p,I]V.T❩.
normalize /2 width=1 by monotonic_le_plus_r/
qed.
-lemma rfw_clear: ∀p,I1,I2,K,V,T. ♯{K.ⓤ{I1},T} < ♯{K,ⓑ{p,I2}V.T}.
+lemma rfw_clear: ∀p,I1,I2,K,V,T. ♯❨K.ⓤ[I1],T❩ < ♯❨K,ⓑ[p,I2]V.T❩.
normalize /4 width=1 by monotonic_le_plus_r, le_S_S/
qed.
-lemma rfw_tpair_sn: ∀I,L,V,T. ♯{L,V} < ♯{L,②{I}V.T}.
+lemma rfw_tpair_sn: ∀I,L,V,T. ♯❨L,V❩ < ♯❨L,②[I]V.T❩.
normalize in ⊢ (?→?→?→?→?%%); //
qed.
-lemma rfw_tpair_dx: ∀I,L,V,T. ♯{L,T} < ♯{L,②{I}V.T}.
+lemma rfw_tpair_dx: ∀I,L,V,T. ♯❨L,T❩ < ♯❨L,②[I]V.T❩.
normalize in ⊢ (?→?→?→?→?%%); //
qed.
-lemma rfw_lpair_sn: ∀I,L,V,T. ♯{L,V} < ♯{L.ⓑ{I}V,T}.
+lemma rfw_lpair_sn: ∀I,L,V,T. ♯❨L,V❩ < ♯❨L.ⓑ[I]V,T❩.
normalize /3 width=1 by monotonic_lt_plus_l, monotonic_le_plus_r/
qed.
-lemma rfw_lpair_dx: ∀I,L,V,T. ♯{L,T} < ♯{L.ⓑ{I}V,T}.
+lemma rfw_lpair_dx: ∀I,L,V,T. ♯❨L,T❩ < ♯❨L.ⓑ[I]V,T❩.
normalize /3 width=1 by monotonic_lt_plus_l, monotonic_le_plus_r/
qed.
(* WEIGHT OF A CLOSURE ******************************************************)
(* activate genv *)
-definition fw: genv → lenv → term → ? ≝ λG,L,T. ♯{L} + ♯{T}.
+definition fw: genv → lenv → term → ? ≝ λG,L,T. ♯❨L❩ + ♯❨T❩.
interpretation "weight (closure)" 'Weight G L T = (fw G L T).
(* Basic properties *********************************************************)
(* Basic_1: was: flt_shift *)
-lemma fw_shift: ∀p,I,G,K,V,T. ♯{G,K.ⓑ{I}V,T} < ♯{G,K,ⓑ{p,I}V.T}.
+lemma fw_shift: ∀p,I,G,K,V,T. ♯❨G,K.ⓑ[I]V,T❩ < ♯❨G,K,ⓑ[p,I]V.T❩.
normalize /2 width=1 by monotonic_le_plus_r/
qed.
-lemma fw_clear: ∀p,I1,I2,G,K,V,T. ♯{G,K.ⓤ{I1},T} < ♯{G,K,ⓑ{p,I2}V.T}.
+lemma fw_clear: ∀p,I1,I2,G,K,V,T. ♯❨G,K.ⓤ[I1],T❩ < ♯❨G,K,ⓑ[p,I2]V.T❩.
normalize /4 width=1 by monotonic_le_plus_r, le_S_S/
qed.
-lemma fw_tpair_sn: ∀I,G,L,V,T. ♯{G,L,V} < ♯{G,L,②{I}V.T}.
+lemma fw_tpair_sn: ∀I,G,L,V,T. ♯❨G,L,V❩ < ♯❨G,L,②[I]V.T❩.
normalize in ⊢ (?→?→?→?→?→?%%); //
qed.
-lemma fw_tpair_dx: ∀I,G,L,V,T. ♯{G,L,T} < ♯{G,L,②{I}V.T}.
+lemma fw_tpair_dx: ∀I,G,L,V,T. ♯❨G,L,T❩ < ♯❨G,L,②[I]V.T❩.
normalize in ⊢ (?→?→?→?→?→?%%); //
qed.
-lemma fw_lpair_sn: ∀I,G,L,V,T. ♯{G,L,V} < ♯{G,L.ⓑ{I}V,T}.
+lemma fw_lpair_sn: ∀I,G,L,V,T. ♯❨G,L,V❩ < ♯❨G,L.ⓑ[I]V,T❩.
normalize /3 width=1 by monotonic_lt_plus_l, monotonic_le_plus_r/
qed.
[ LAtom ⇒ T
| LBind L I ⇒ match I with
[ BUnit _ ⇒ fold L (-ⓛ⋆0.T)
- | BPair I V ⇒ fold L (-ⓑ{I}V.T)
+ | BPair I V ⇒ fold L (-ⓑ[I]V.T)
]
].
lemma fold_atom: ∀T. ⋆ + T = T.
// qed.
-lemma fold_unit: ∀I,L,T. L.ⓤ{I}+T = L+(-ⓛ⋆0.T).
+lemma fold_unit: ∀I,L,T. L.ⓤ[I]+T = L+(-ⓛ⋆0.T).
// qed.
-lemma fold_pair: ∀I,L,V,T. (L.ⓑ{I}V)+T = L+(-ⓑ{I}V.T).
+lemma fold_pair: ∀I,L,V,T. (L.ⓑ[I]V)+T = L+(-ⓑ[I]V.T).
// qed.
rec definition gw G ≝ match G with
[ GAtom ⇒ 0
-| GPair G I T ⇒ gw G + ♯{T}
+| GPair G I T ⇒ gw G + ♯❨T❩
].
interpretation "weight (global environment)" 'Weight G = (gw G).
(* Basic properties *********************************************************)
-lemma gw_pair: ∀I,G,T. ♯{G} < ♯{G.ⓑ{I}T}.
+lemma gw_pair: ∀I,G,T. ♯❨G❩ < ♯❨G.ⓑ[I]T❩.
normalize /2 width=1 by monotonic_le_plus_r/ qed.
(* Basic inversion lemmas ***************************************************)
-fact destruct_lbind_lbind_aux: ∀I1,I2,L1,L2. L1.ⓘ{I1} = L2.ⓘ{I2} →
+fact destruct_lbind_lbind_aux: ∀I1,I2,L1,L2. L1.ⓘ[I1] = L2.ⓘ[I2] →
L1 = L2 ∧ I1 = I2.
#I1 #I2 #L1 #L2 #H destruct /2 width=1 by conj/
qed-.
(* Basic_2A1: uses: discr_lpair_x_xy *)
-lemma discr_lbind_x_xy: ∀I,L. L = L.ⓘ{I} → ⊥.
+lemma discr_lbind_x_xy: ∀I,L. L = L.ⓘ[I] → ⊥.
#I #L elim L -L
[ #H destruct
| #L #J #IHL #H elim (destruct_lbind_lbind_aux … H) -H (**) (* destruct lemma needed *)
qed-.
(* Basic_2A1: uses: discr_lpair_xy_x *)
-lemma discr_lbind_xy_x: ∀I,L. L.ⓘ{I} = L → ⊥.
+lemma discr_lbind_xy_x: ∀I,L. L.ⓘ[I] = L → ⊥.
/2 width=4 by discr_lbind_x_xy/ qed-.
// qed.
(* Basic_2A1: uses: length_pair *)
-lemma length_bind: ∀I,L. |L.ⓘ{I}| = ↑|L|.
+lemma length_bind: ∀I,L. |L.ⓘ[I]| = ↑|L|.
// qed.
(* Basic inversion lemmas ***************************************************)
(* Basic_2A1: was: length_inv_pos_dx *)
lemma length_inv_succ_dx: ∀n,L. |L| = ↑n →
- ∃∃I,K. |K| = n & L = K. ⓘ{I}.
+ ∃∃I,K. |K| = n & L = K. ⓘ[I].
#n *
[ >length_atom #H destruct
| #L #I >length_bind /3 width=4 by ex2_2_intro, injective_S/
(* Basic_2A1: was: length_inv_pos_sn *)
lemma length_inv_succ_sn: ∀n,L. ↑n = |L| →
- ∃∃I,K. n = |K| & L = K. ⓘ{I}.
+ ∃∃I,K. n = |K| & L = K. ⓘ[I].
#n #L #H lapply (sym_eq ??? H) -H
#H elim (length_inv_succ_dx … H) -H /2 width=4 by ex2_2_intro/
qed-.
rec definition lw L ≝ match L with
[ LAtom ⇒ 0
-| LBind L I ⇒ lw L + ♯{I}
+| LBind L I ⇒ lw L + ♯❨I❩
].
interpretation "weight (local environment)" 'Weight L = (lw L).
(* Basic properties *********************************************************)
(* Basic_2A1: uses: lw_pair *)
-lemma lw_bind: ∀I,L. ♯{L} < ♯{L.ⓘ{I}}.
+lemma lw_bind: ∀I,L. ♯❨L❩ < ♯❨L.ⓘ[I]❩.
normalize /2 width=1 by monotonic_le_plus_r/ qed.
(* Basic_1: removed theorems 4: clt_cong clt_head clt_thead clt_wf_ind *)
inductive lveq: bi_relation nat lenv ≝
| lveq_atom : lveq 0 (⋆) 0 (⋆)
| lveq_bind : ∀I1,I2,K1,K2. lveq 0 K1 0 K2 →
- lveq 0 (K1.ⓘ{I1}) 0 (K2.ⓘ{I2})
+ lveq 0 (K1.ⓘ[I1]) 0 (K2.ⓘ[I2])
| lveq_void_sn: ∀K1,K2,n1. lveq n1 K1 0 K2 →
lveq (↑n1) (K1.ⓧ) 0 K2
| lveq_void_dx: ∀K1,K2,n2. lveq 0 K1 n2 K2 →
fact lveq_inv_zero_aux: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1,n2] L2 →
0 = n1 → 0 = n2 →
∨∨ ∧∧ ⋆ = L1 & ⋆ = L2
- | ∃∃I1,I2,K1,K2. K1 ≋ⓧ*[0,0] K2 & K1.ⓘ{I1} = L1 & K2.ⓘ{I2} = L2.
+ | ∃∃I1,I2,K1,K2. K1 ≋ⓧ*[0,0] K2 & K1.ⓘ[I1] = L1 & K2.ⓘ[I2] = L2.
#L1 #L2 #n1 #n2 * -L1 -L2 -n1 -n2
[1: /3 width=1 by or_introl, conj/
|2: /3 width=7 by ex3_4_intro, or_intror/
lemma lveq_inv_zero: ∀L1,L2. L1 ≋ⓧ*[0,0] L2 →
∨∨ ∧∧ ⋆ = L1 & ⋆ = L2
- | ∃∃I1,I2,K1,K2. K1 ≋ⓧ*[0,0] K2 & K1.ⓘ{I1} = L1 & K2.ⓘ{I2} = L2.
+ | ∃∃I1,I2,K1,K2. K1 ≋ⓧ*[0,0] K2 & K1.ⓘ[I1] = L1 & K2.ⓘ[I2] = L2.
/2 width=5 by lveq_inv_zero_aux/ qed-.
fact lveq_inv_succ_sn_aux: ∀L1,L2,n1,n2. L1 ≋ⓧ*[n1,n2] L2 →
(* Advanced inversion lemmas ************************************************)
-lemma lveq_inv_bind: ∀I1,I2,K1,K2. K1.ⓘ{I1} ≋ⓧ*[0,0] K2.ⓘ{I2} → K1 ≋ⓧ*[0,0] K2.
+lemma lveq_inv_bind: ∀I1,I2,K1,K2. K1.ⓘ[I1] ≋ⓧ*[0,0] K2.ⓘ[I2] → K1 ≋ⓧ*[0,0] K2.
#I1 #I2 #K1 #K2 #H
elim (lveq_inv_zero … H) -H * [| #Z1 #Z2 #Y1 #Y2 #HY ] #H1 #H2 destruct //
qed-.
]
qed-.
-lemma lveq_inv_bind_atom: ∀I1,K1,n1,n2. K1.ⓘ{I1} ≋ⓧ*[n1,n2] ⋆ →
+lemma lveq_inv_bind_atom: ∀I1,K1,n1,n2. K1.ⓘ[I1] ≋ⓧ*[n1,n2] ⋆ →
∃∃m1. K1 ≋ⓧ*[m1,0] ⋆ & BUnit Void = I1 & ↑m1 = n1 & 0 = n2.
#I1 #K1 * [2: #n1 ] * [2,4: #n2 ] #H
[ elim (lveq_inv_succ … H)
]
qed-.
-lemma lveq_inv_atom_bind: ∀I2,K2,n1,n2. ⋆ ≋ⓧ*[n1,n2] K2.ⓘ{I2} →
+lemma lveq_inv_atom_bind: ∀I2,K2,n1,n2. ⋆ ≋ⓧ*[n1,n2] K2.ⓘ[I2] →
∃∃m2. ⋆ ≋ⓧ*[0,m2] K2 & BUnit Void = I2 & 0 = n1 & ↑m2 = n2.
#I2 #K2 #n1 #n2 #H
lapply (lveq_sym … H) -H #H
/3 width=3 by lveq_sym, ex4_intro/
qed-.
-lemma lveq_inv_pair_pair: ∀I1,I2,K1,K2,V1,V2,n1,n2. K1.ⓑ{I1}V1 ≋ⓧ*[n1,n2] K2.ⓑ{I2}V2 →
+lemma lveq_inv_pair_pair: ∀I1,I2,K1,K2,V1,V2,n1,n2. K1.ⓑ[I1]V1 ≋ⓧ*[n1,n2] K2.ⓑ[I2]V2 →
∧∧ K1 ≋ⓧ*[0,0] K2 & 0 = n1 & 0 = n2.
#I1 #I2 #K1 #K2 #V1 #V2 * [2: #n1 ] * [2,4: #n2 ] #H
[ elim (lveq_inv_succ … H)
/2 width=1 by or_introl, or_intror/
qed-.
-lemma lveq_fwd_pair_sn: ∀I1,K1,L2,V1,n1,n2. K1.ⓑ{I1}V1 ≋ⓧ*[n1,n2] L2 → 0 = n1.
+lemma lveq_fwd_pair_sn: ∀I1,K1,L2,V1,n1,n2. K1.ⓑ[I1]V1 ≋ⓧ*[n1,n2] L2 → 0 = n1.
#I1 #K1 #L2 #V1 * [2: #n1 ] // * [2: #n2 ] #H
[ elim (lveq_inv_succ … H)
| elim (lveq_inv_succ_sn … H) -H #Y #_ #H1 #H2 destruct
]
qed-.
-lemma lveq_fwd_pair_dx: ∀I2,L1,K2,V2,n1,n2. L1 ≋ⓧ*[n1,n2] K2.ⓑ{I2}V2 → 0 = n2.
+lemma lveq_fwd_pair_dx: ∀I2,L1,K2,V2,n1,n2. L1 ≋ⓧ*[n1,n2] K2.ⓑ[I2]V2 → 0 = n2.
/3 width=6 by lveq_fwd_pair_sn, lveq_sym/ qed-.
/3 width=3 by lveq_fwd_length_plus, lveq_fwd_length_le_dx, lveq_fwd_length_le_sn, plus_to_minus_2/ qed-.
lemma lveq_fwd_abst_bind_length_le: ∀I1,I2,L1,L2,V1,n1,n2.
- L1.ⓑ{I1}V1 ≋ⓧ*[n1,n2] L2.ⓘ{I2} → |L1| ≤ |L2|.
+ L1.ⓑ[I1]V1 ≋ⓧ*[n1,n2] L2.ⓘ[I2] → |L1| ≤ |L2|.
#I1 #I2 #L1 #L2 #V1 #n1 #n2 #HL
lapply (lveq_fwd_pair_sn … HL) #H destruct
elim (lveq_fwd_length … HL) -HL >length_bind >length_bind //
qed-.
lemma lveq_fwd_bind_abst_length_le: ∀I1,I2,L1,L2,V2,n1,n2.
- L1.ⓘ{I1} ≋ⓧ*[n1,n2] L2.ⓑ{I2}V2 → |L2| ≤ |L1|.
+ L1.ⓘ[I1] ≋ⓧ*[n1,n2] L2.ⓑ[I2]V2 → |L2| ≤ |L1|.
/3 width=6 by lveq_fwd_abst_bind_length_le, lveq_sym/ qed-.
(* Inversion lemmas with length for local environments **********************)
(* Main inversion lemmas ****************************************************)
theorem lveq_inv_bind: ∀K1,K2. K1 ≋ⓧ*[0,0] K2 →
- ∀I1,I2,m1,m2. K1.ⓘ{I1} ≋ⓧ*[m1,m2] K2.ⓘ{I2} →
+ ∀I1,I2,m1,m2. K1.ⓘ[I1] ≋ⓧ*[m1,m2] K2.ⓘ[I2] →
∧∧ 0 = m1 & 0 = m2.
#K1 #K2 #HK #I1 #I2 #m1 #m2 #H
lapply (lveq_fwd_length_eq … HK) -HK #HK
| teqo_sort: ∀s1,s2. teqo (⋆s1) (⋆s2)
| teqo_lref: ∀i. teqo (#i) (#i)
| teqo_gref: ∀l. teqo (§l) (§l)
-| teqo_pair: ∀I,V1,V2,T1,T2. teqo (②{I}V1.T1) (②{I}V2.T2)
+| teqo_pair: ∀I,V1,V2,T1,T2. teqo (②[I]V1.T1) (②[I]V2.T2)
.
interpretation
/2 width=5 by teqo_inv_gref1_aux/ qed-.
fact teqo_inv_pair1_aux: ∀T1,T2. T1 ⩳ T2 →
- ∀J,W1,U1. T1 = ②{J}W1.U1 →
- ∃∃W2,U2. T2 = ②{J}W2.U2.
+ ∀J,W1,U1. T1 = ②[J]W1.U1 →
+ ∃∃W2,U2. T2 = ②[J]W2.U2.
#T1 #T2 * -T1 -T2
[ #s1 #s2 #J #W1 #U1 #H destruct
| #i #J #W1 #U1 #H destruct
(* Basic_1: was: iso_gen_head *)
(* Basic_2A1: was: tsts_inv_pair1 *)
-lemma teqo_inv_pair1: ∀J,W1,U1,T2. ②{J}W1.U1 ⩳ T2 →
- ∃∃W2,U2. T2 = ②{J}W2. U2.
+lemma teqo_inv_pair1: ∀J,W1,U1,T2. ②[J]W1.U1 ⩳ T2 →
+ ∃∃W2,U2. T2 = ②[J]W2. U2.
/2 width=7 by teqo_inv_pair1_aux/ qed-.
fact teqo_inv_pair2_aux: ∀T1,T2. T1 ⩳ T2 →
- ∀J,W2,U2. T2 = ②{J}W2.U2 →
- ∃∃W1,U1. T1 = ②{J}W1.U1.
+ ∀J,W2,U2. T2 = ②[J]W2.U2 →
+ ∃∃W1,U1. T1 = ②[J]W1.U1.
#T1 #T2 * -T1 -T2
[ #s1 #s2 #J #W2 #U2 #H destruct
| #i #J #W2 #U2 #H destruct
qed-.
(* Basic_2A1: was: tsts_inv_pair2 *)
-lemma teqo_inv_pair2: ∀J,T1,W2,U2. T1 ⩳ ②{J}W2.U2 →
- ∃∃W1,U1. T1 = ②{J}W1.U1.
+lemma teqo_inv_pair2: ∀J,T1,W2,U2. T1 ⩳ ②[J]W2.U2 →
+ ∃∃W1,U1. T1 = ②[J]W1.U1.
/2 width=7 by teqo_inv_pair2_aux/ qed-.
(* Advanced inversion lemmas ************************************************)
-lemma teqo_inv_pair: ∀I1,I2,V1,V2,T1,T2. ②{I1}V1.T1 ⩳ ②{I2}V2.T2 →
+lemma teqo_inv_pair: ∀I1,I2,V1,V2,T1,T2. ②[I1]V1.T1 ⩳ ②[I2]V2.T2 →
I1 = I2.
#I1 #I2 #V1 #V2 #T1 #T2 #H elim (teqo_inv_pair1 … H) -H
#V0 #T0 #H destruct //
(* 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â¦\83T1â¦\84 â\86\92 ð\9d\90\92â¦\83T2â¦\84.
+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â¦\83T2â¦\84 â\86\92 ð\9d\90\92â¦\83T1â¦\84.
+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):
- ∀Vs,V2,T1,T2. ⒶVs.T1 ⩳ ⓑ{p,I}V2.T2 → 𝐒⦃T1⦄ → ⊥.
+ ∀Vs,V2,T1,T2. ⒶVs.T1 ⩳ ⓑ[p,I]V2.T2 → 𝐒❪T1❫ → ⊥.
#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/
| teqx_sort: ∀s1,s2. teqx (⋆s1) (⋆s2)
| teqx_lref: ∀i. teqx (#i) (#i)
| teqx_gref: ∀l. teqx (§l) (§l)
-| teqx_pair: ∀I,V1,V2,T1,T2. teqx V1 V2 → teqx T1 T2 → teqx (②{I}V1.T1) (②{I}V2.T2)
+| teqx_pair: ∀I,V1,V2,T1,T2. teqx V1 V2 → teqx T1 T2 → teqx (②[I]V1.T1) (②[I]V2.T2)
.
interpretation
lemma teqx_inv_gref1: ∀Y,l. §l ≛ Y → Y = §l.
/2 width=5 by teqx_inv_gref1_aux/ qed-.
-fact teqx_inv_pair1_aux: ∀X,Y. X ≛ Y → ∀I,V1,T1. X = ②{I}V1.T1 →
- ∃∃V2,T2. V1 ≛ V2 & T1 ≛ T2 & Y = ②{I}V2.T2.
+fact teqx_inv_pair1_aux: ∀X,Y. X ≛ Y → ∀I,V1,T1. X = ②[I]V1.T1 →
+ ∃∃V2,T2. V1 ≛ V2 & T1 ≛ T2 & Y = ②[I]V2.T2.
#X #Y * -X -Y
[ #s1 #s2 #J #W1 #U1 #H destruct
| #i #J #W1 #U1 #H destruct
]
qed-.
-lemma teqx_inv_pair1: ∀I,V1,T1,Y. ②{I}V1.T1 ≛ Y →
- ∃∃V2,T2. V1 ≛ V2 & T1 ≛ T2 & Y = ②{I}V2.T2.
+lemma teqx_inv_pair1: ∀I,V1,T1,Y. ②[I]V1.T1 ≛ Y →
+ ∃∃V2,T2. V1 ≛ V2 & T1 ≛ T2 & Y = ②[I]V2.T2.
/2 width=3 by teqx_inv_pair1_aux/ qed-.
lemma teqx_inv_sort2: ∀X1,s2. X1 ≛ ⋆s2 →
/2 width=2 by teqx_sym, ex_intro/
qed-.
-lemma teqx_inv_pair2: ∀I,X1,V2,T2. X1 ≛ ②{I}V2.T2 →
- ∃∃V1,T1. V1 ≛ V2 & T1 ≛ T2 & X1 = ②{I}V1.T1.
+lemma teqx_inv_pair2: ∀I,X1,V2,T2. X1 ≛ ②[I]V2.T2 →
+ ∃∃V1,T1. V1 ≛ V2 & T1 ≛ T2 & X1 = ②[I]V1.T1.
#I #X1 #V2 #T2 #H
elim (teqx_inv_pair1 I V2 T2 X1)
[ #V1 #T1 #HV #HT #H destruct ]
(* Advanced inversion lemmas ************************************************)
-lemma teqx_inv_pair: ∀I1,I2,V1,V2,T1,T2. ②{I1}V1.T1 ≛ ②{I2}V2.T2 →
+lemma teqx_inv_pair: ∀I1,I2,V1,V2,T1,T2. ②[I1]V1.T1 ≛ ②[I2]V2.T2 →
∧∧ I1 = I2 & V1 ≛ V2 & T1 ≛ T2.
#I1 #I2 #V1 #V2 #T1 #T2 #H elim (teqx_inv_pair1 … H) -H
#V0 #T0 #HV #HT #H destruct /2 width=1 by and3_intro/
qed-.
-lemma teqx_inv_pair_xy_x: ∀I,V,T. ②{I}V.T ≛ V → ⊥.
+lemma teqx_inv_pair_xy_x: ∀I,V,T. ②[I]V.T ≛ V → ⊥.
#I #V elim V -V
[ #J #T #H elim (teqx_inv_pair1 … H) -H #X #Y #_ #_ #H destruct
| #J #X #Y #IHX #_ #T #H elim (teqx_inv_pair … H) -H #H #HY #_ destruct /2 width=2 by/
]
qed-.
-lemma teqx_inv_pair_xy_y: ∀I,T,V. ②{I}V.T ≛ T → ⊥.
+lemma teqx_inv_pair_xy_y: ∀I,T,V. ②[I]V.T ≛ T → ⊥.
#I #T elim T -T
[ #J #V #H elim (teqx_inv_pair1 … H) -H #X #Y #_ #_ #H destruct
| #J #X #Y #_ #IHY #V #H elim (teqx_inv_pair … H) -H #H #_ #HY destruct /2 width=2 by/
(* Basic forward lemmas *****************************************************)
-lemma teqx_fwd_atom1: ∀I,Y. ⓪{I} ≛ Y → ∃J. Y = ⓪{J}.
+lemma teqx_fwd_atom1: ∀I,Y. ⓪[I] ≛ Y → ∃J. Y = ⓪[J].
* #x #Y #H [ elim (teqx_inv_sort1 … H) -H ]
/3 width=4 by teqx_inv_gref1, teqx_inv_lref1, ex_intro/
qed-.
(* Negated inversion lemmas *************************************************)
lemma tneqx_inv_pair: ∀I1,I2,V1,V2,T1,T2.
- (②{I1}V1.T1 ≛ ②{I2}V2.T2 → ⊥) →
+ (②[I1]V1.T1 ≛ ②[I2]V2.T2 → ⊥) →
∨∨ I1 = I2 → ⊥
| (V1 ≛ V2 → ⊥)
| (T1 ≛ T2 → ⊥).
(* Basic properties *********************************************************)
-lemma abst_dec (X): ∨∨ ∃∃p,W,T. X = ⓛ{p}W.T
- | (∀p,W,T. X = ⓛ{p}W.T → ⊥).
+lemma abst_dec (X): ∨∨ ∃∃p,W,T. X = ⓛ[p]W.T
+ | (∀p,W,T. X = ⓛ[p]W.T → ⊥).
* [ #I | * [ #p * | #I ] #V #T ]
[3: /3 width=4 by ex1_3_intro, or_introl/ ]
@or_intror #q #W #U #H destruct
(* Basic inversion lemmas ***************************************************)
-fact destruct_tatom_tatom_aux: ∀I1,I2. ⓪{I1} = ⓪{I2} → I1 = I2.
+fact destruct_tatom_tatom_aux: ∀I1,I2. ⓪[I1] = ⓪[I2] → I1 = I2.
#I1 #I2 #H destruct //
qed-.
-fact destruct_tpair_tpair_aux: ∀I1,I2,T1,T2,V1,V2. ②{I1}T1.V1 = ②{I2}T2.V2 →
+fact destruct_tpair_tpair_aux: ∀I1,I2,T1,T2,V1,V2. ②[I1]T1.V1 = ②[I2]T2.V2 →
∧∧T1 = T2 & I1 = I2 & V1 = V2.
#I1 #I2 #T1 #T2 #V1 #V2 #H destruct /2 width=1 by and3_intro/
qed-.
-lemma discr_tpair_xy_x: ∀I,T,V. ②{I}V.T = V → ⊥.
+lemma discr_tpair_xy_x: ∀I,T,V. ②[I]V.T = V → ⊥.
#I #T #V elim V -V
[ #J #H destruct
| #J #W #U #IHW #_ #H elim (destruct_tpair_tpair_aux … H) -H /2 width=1 by/ (**) (* destruct lemma needed *)
qed-.
(* Basic_1: was: thead_x_y_y *)
-lemma discr_tpair_xy_y: ∀I,V,T. ②{I}V.T = T → ⊥.
+lemma discr_tpair_xy_y: ∀I,V,T. ②[I]V.T = T → ⊥.
#I #V #T elim T -T
[ #J #H destruct
| #J #W #U #_ #IHU #H elim (destruct_tpair_tpair_aux … H) -H /2 width=1 by/ (**) (* destruct lemma needed *)
qed-.
lemma eq_false_inv_tpair_sn: ∀I,V1,T1,V2,T2.
- (②{I}V1.T1 = ②{I}V2.T2 → ⊥) →
+ (②[I]V1.T1 = ②[I]V2.T2 → ⊥) →
(V1 = V2 → ⊥) ∨ (V1 = V2 ∧ (T1 = T2 → ⊥)).
#I #V1 #T1 #V2 #T2 #H
elim (eq_term_dec V1 V2) /3 width=1 by or_introl/ #HV12 destruct
qed-.
lemma eq_false_inv_tpair_dx: ∀I,V1,T1,V2,T2.
- (②{I} V1. T1 = ②{I}V2.T2 → ⊥) →
+ (②[I] V1. T1 = ②[I]V2.T2 → ⊥) →
(T1 = T2 → ⊥) ∨ (T1 = T2 ∧ (V1 = V2 → ⊥)).
#I #V1 #T1 #V2 #T2 #H
elim (eq_term_dec T1 T2) /3 width=1 by or_introl/ #HT12 destruct
(* SIMPLE (NEUTRAL) TERMS ***************************************************)
inductive simple: predicate term ≝
- | simple_atom: ∀I. simple (⓪{I})
- | simple_flat: ∀I,V,T. simple (ⓕ{I}V.T)
+ | simple_atom: ∀I. simple (⓪[I])
+ | simple_flat: ∀I,V,T. simple (ⓕ[I]V.T)
.
interpretation "simple (term)" 'Simple T = (simple T).
(* Basic inversion lemmas ***************************************************)
-fact simple_inv_bind_aux: â\88\80T. ð\9d\90\92â¦\83Tâ¦\84 â\86\92 â\88\80p,J,W,U. T = â\93\91{p,J}W.U → ⊥.
+fact simple_inv_bind_aux: â\88\80T. ð\9d\90\92â\9dªTâ\9d« â\86\92 â\88\80p,J,W,U. T = â\93\91[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â¦\83â\93\91{p,I} V. Tâ¦\84 → ⊥.
+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â¦\83â\91¡{I}V.Tâ¦\84 → ∃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â¦\83Xâ¦\84 | â\88\83â\88\83p,I,T,U. X = â\93\91{p,I}T.U.
+lemma simple_dec_ex (X): â\88¨â\88¨ ð\9d\90\92â\9dªXâ\9d« | â\88\83â\88\83p,I,T,U. X = â\93\91[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â¦\83Tâ¦\84 â\86\92 ð\9d\90\92â¦\83â\92¶Vs.Tâ¦\84.
+lemma applv_simple: â\88\80T,Vs. ð\9d\90\92â\9dªTâ\9d« â\86\92 ð\9d\90\92â\9dªâ\92¶Vs.Tâ\9d«.
#T * //
qed.
(* Basic properties *********************************************************)
(* Basic_1: was: tweight_lt *)
-lemma tw_pos: ∀T. 1 ≤ ♯{T}.
+lemma tw_pos: ∀T. 1 ≤ ♯❨T❩.
#T elim T -T //
qed.
-lemma tw_le_pair_dx (I): ∀V,T. ♯{T} < ♯{②{I}V.T}.
+lemma tw_le_pair_dx (I): ∀V,T. ♯❨T❩ < ♯❨②[I]V.T❩.
#I #V #T /2 width=1 by le_S_S/
qed.
| tweq_sort: ∀s1,s2. tweq (⋆s1) (⋆s2)
| tweq_lref: ∀i. tweq (#i) (#i)
| tweq_gref: ∀l. tweq (§l) (§l)
-| tweq_abbr: ∀p,V1,V2,T1,T2. (p=Ⓣ→tweq T1 T2) → tweq (ⓓ{p}V1.T1) (ⓓ{p}V2.T2)
-| tweq_abst: ∀p,V1,V2,T1,T2. tweq (ⓛ{p}V1.T1) (ⓛ{p}V2.T2)
+| tweq_abbr: ∀p,V1,V2,T1,T2. (p=Ⓣ→tweq T1 T2) → tweq (ⓓ[p]V1.T1) (ⓓ[p]V2.T2)
+| tweq_abst: ∀p,V1,V2,T1,T2. tweq (ⓛ[p]V1.T1) (ⓛ[p]V2.T2)
| tweq_appl: ∀V1,V2,T1,T2. tweq T1 T2 → tweq (ⓐV1.T1) (ⓐV2.T2)
| tweq_cast: ∀V1,V2,T1,T2. tweq V1 V2 → tweq T1 T2 → tweq (ⓝV1.T1) (ⓝV2.T2)
.
/2 width=5 by tweq_inv_gref_sn_aux/ qed-.
fact tweq_inv_abbr_sn_aux:
- ∀X,Y. X ≅ Y → ∀p,V1,T1. X = ⓓ{p}V1.T1 →
- ∃∃V2,T2. p = Ⓣ → T1 ≅ T2 & Y = ⓓ{p}V2.T2.
+ ∀X,Y. X ≅ Y → ∀p,V1,T1. X = ⓓ[p]V1.T1 →
+ ∃∃V2,T2. p = Ⓣ → T1 ≅ T2 & Y = ⓓ[p]V2.T2.
#X #Y * -X -Y
[1 : #s1 #s2 #q #W1 #U1 #H destruct
|2,3: #i #q #W1 #U1 #H destruct
qed-.
lemma tweq_inv_abbr_sn:
- ∀p,V1,T1,Y. ⓓ{p}V1.T1 ≅ Y →
- ∃∃V2,T2. p = Ⓣ → T1 ≅ T2 & Y = ⓓ{p}V2.T2.
+ ∀p,V1,T1,Y. ⓓ[p]V1.T1 ≅ Y →
+ ∃∃V2,T2. p = Ⓣ → T1 ≅ T2 & Y = ⓓ[p]V2.T2.
/2 width=4 by tweq_inv_abbr_sn_aux/ qed-.
fact tweq_inv_abst_sn_aux:
- ∀X,Y. X ≅ Y → ∀p,V1,T1. X = ⓛ{p}V1.T1 →
- ∃∃V2,T2. Y = ⓛ{p}V2.T2.
+ ∀X,Y. X ≅ Y → ∀p,V1,T1. X = ⓛ[p]V1.T1 →
+ ∃∃V2,T2. Y = ⓛ[p]V2.T2.
#X #Y * -X -Y
[1 : #s1 #s2 #q #W1 #U1 #H destruct
|2,3: #i #q #W1 #U1 #H destruct
qed-.
lemma tweq_inv_abst_sn:
- ∀p,V1,T1,Y. ⓛ{p}V1.T1 ≅ Y →
- ∃∃V2,T2. Y = ⓛ{p}V2.T2.
+ ∀p,V1,T1,Y. ⓛ[p]V1.T1 ≅ Y →
+ ∃∃V2,T2. Y = ⓛ[p]V2.T2.
/2 width=5 by tweq_inv_abst_sn_aux/ qed-.
fact tweq_inv_appl_sn_aux:
(* Advanced forward lemmas **************************************************)
lemma tweq_fwd_pair_sn (I):
- ∀V1,T1,X2. ②{I}V1.T1 ≅ X2 → ∃∃V2,T2. X2 = ②{I}V2.T2.
+ ∀V1,T1,X2. ②[I]V1.T1 ≅ X2 → ∃∃V2,T2. X2 = ②[I]V2.T2.
* [ #p ] * [ cases p -p ] #V1 #T1 #X2 #H
[ elim (tweq_inv_abbr_pos_sn … H) -H #V2 #T2 #_ #H
| elim (tweq_inv_abbr_neg_sn … H) -H #V2 #T2 #H
qed-.
lemma tweq_fwd_pair_bi (I1) (I2):
- ∀V1,V2,T1,T2. ②{I1}V1.T1 ≅ ②{I2}V2.T2 → I1 = I2.
+ ∀V1,V2,T1,T2. ②[I1]V1.T1 ≅ ②[I2]V2.T2 → I1 = I2.
#I1 #I2 #V1 #V2 #T1 #T2 #H
elim (tweq_fwd_pair_sn … H) -H #W2 #U2 #H destruct //
qed-.
(* Properties with simple terms *********************************************)
lemma tweq_simple_trans:
- â\88\80T1,T2. T1 â\89\85 T2 â\86\92 ð\9d\90\92â¦\83T1â¦\84 â\86\92 ð\9d\90\92â¦\83T2â¦\84.
+ â\88\80T1,T2. T1 â\89\85 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)
[ { "static typing" * } {
[ { "generic reducibility" * } {
[ [ "restricted refinement for lenvs" ] "lsubc" + "( ? ⊢ ? ⫃[?] ? )" "lsubc_drops" + "lsubc_lsubr" + "lsubc_lsuba" * ]
- [ [ "candidates" ] "gcp_cr" + "( â¦\83?,?,?â¦\84 ϵ[?] ã\80\9a?ã\80\9b )" "gcp_aaa" * ]
+ [ [ "candidates" ] "gcp_cr" + "( â\9dª?,?,?â\9d« ϵ â\9f¦?â\9f§[?] )" "gcp_aaa" * ]
[ [ "computation properties" ] "gcp" *]
}
]
[ { "atomic arity assignment" * } {
[ [ "restricted refinement for lenvs" ] "lsuba" + "( ? ⊢ ? ⫃⁝ ? )" "lsuba_drops" + "lsuba_lsubr" + "lsuba_aaa" + "lsuba_lsuba" * ]
- [ [ "for terms" ] "aaa" + "( â¦\83?,?â¦\84 ⊢ ? ⁝ ? )" "aaa_drops" + "aaa_fqus" + "aaa_reqx" + "aaa_feqx" + "aaa_aaa" + "aaa_dec" * ]
+ [ [ "for terms" ] "aaa" + "( â\9dª?,?â\9d« ⊢ ? ⁝ ? )" "aaa_drops" + "aaa_fqus" + "aaa_reqx" + "aaa_feqx" + "aaa_aaa" + "aaa_dec" * ]
}
]
[ { "degree-based equivalence" * } {
- [ [ "for closures on referred entries" ] "feqx" + "( â¦\83?,?,?â¦\84 â\89\9b â¦\83?,?,?â¦\84 )" "feqx_fqup" + "feqx_fqus" + "feqx_req" + "feqx_feqx" * ]
+ [ [ "for closures on referred entries" ] "feqx" + "( â\9dª?,?,?â\9d« â\89\9b â\9dª?,?,?â\9d« )" "feqx_fqup" + "feqx_fqus" + "feqx_req" + "feqx_feqx" * ]
[ [ "for lenvs on referred entries" ] "reqx" + "( ? ≛[?] ? )" "reqx_length" + "reqx_drops" + "reqx_fqup" + "reqx_fqus" + "reqx_req" + "reqx_reqx" * ]
}
]
}
]
[ { "context-sensitive free variables" * } {
- [ [ "inclusion for restricted closures" ] "fsle" + "( â¦\83?,?â¦\84 â\8a\86 â¦\83?,?â¦\84 )" "fsle_length" + "fsle_drops" + "fsle_fqup" + "fsle_fsle" * ]
- [ [ "restricted refinement for lenvs" ] "lsubf" + "( â¦\83?,?â¦\84 â«\83ð\9d\90\85+ â¦\83?,?â¦\84 )" "lsubf_lsubr" + "lsubf_frees" + "lsubf_lsubf" * ]
- [ [ "for terms" ] "frees" + "( ? â\8a¢ ð\9d\90\85+â¦\83?â¦\84 ≘ ? )" "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" + "( â¦\83?,?,?â¦\84 â¬\82*[?] â¦\83?,?,?â¦\84 )" + "( â¦\83?,?,?â¦\84 â¬\82* â¦\83?,?,?â¦\84 )" "fqus_weight" + "fqus_drops" + "fqus_fqup" + "fqus_fqus" * ]
- [ [ "proper for closures" ] "fqup" + "( â¦\83?,?,?â¦\84 â¬\82+[?] â¦\83?,?,?â¦\84 )" + "( â¦\83?,?,?â¦\84 â¬\82+ â¦\83?,?,?â¦\84 )" "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" + "( â¦\83?,?,?â¦\84 â¬\82⸮[?] â¦\83?,?,?â¦\84 )" + "( â¦\83?,?,?â¦\84 â¬\82⸮ â¦\83?,?,?â¦\84 )" "fquq_length" + "fquq_weight" * ]
- [ [ "proper for closures" ] "fqu" + "( â¦\83?,?,?â¦\84 â¬\82[?] â¦\83?,?,?â¦\84 )" + "( â¦\83?,?,?â¦\84 â¬\82 â¦\83?,?,?â¦\84 )" "fqu_length" + "fqu_weight" + "fqu_teqx" * ]
+ [ [ "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_teqx" * ]
}
]
}
}
]
[ { "closures" * } {
- [ [ "" ] "cl_weight" + "( ♯{?,?,?} )" * ]
- [ [ "" ] "cl_restricted_weight" + "( ♯{?,?} )" * ]
+ [ [ "" ] "cl_weight" + "( ♯❨?,?,?❩ )" * ]
+ [ [ "" ] "cl_restricted_weight" + "( ♯❨?,?❩ )" * ]
}
]
[ { "global environments" * } {
[ [ "" ] "genv_length" + "( |?| )" * ]
- [ [ "" ] "genv_weight" + "( ♯{?} )" * ]
+ [ [ "" ] "genv_weight" + "( ♯❨?❩ )" * ]
[ [ "" ] "genv" * ]
}
]
[ [ "" ] "ceq_ext" "ceq_ext_ceq_ext" * ]
[ [ "" ] "cext2" * ]
[ [ "" ] "lenv_length" + "( |?| )" * ]
- [ [ "" ] "lenv_weight" + "( ♯{?} )" * ]
+ [ [ "" ] "lenv_weight" + "( ♯❨?❩ )" * ]
[ [ "" ] "lenv" * ]
}
]
]
[ { "terms" * } {
[ [ "" ] "term_vector" + "( Ⓐ?.? )" * ]
- [ [ "" ] "term_simple" + "( ð\9d\90\92â¦\83?â¦\84 )" * ]
- [ [ "" ] "term_weight" + "( ♯{?} )" * ]
+ [ [ "" ] "term_simple" + "( ð\9d\90\92â\9dª?â\9d« )" * ]
+ [ [ "" ] "term_weight" + "( ♯❨?❩ )" * ]
[ [ "" ] "term" * ]
}
]