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 #_ * *