(* Basic inversion lemmas ***************************************************)
-fact lift_inv_refl_O2_aux: â\88\80d,e,T1,T2. â\86\91[d, e] T1 â\89¡ T2 â\86\92 e = 0 â\86\92 T1 = T2.
+fact lift_inv_refl_O2_aux: â\88\80d,e,T1,T2. â\87\91[d, e] T1 â\89¡ T2 â\86\92 e = 0 â\86\92 T1 = T2.
#d #e #T1 #T2 #H elim H -d -e -T1 -T2 // /3 width=1/
qed.
-lemma lift_inv_refl_O2: â\88\80d,T1,T2. â\86\91[d, 0] T1 â\89¡ T2 â\86\92 T1 = T2.
+lemma lift_inv_refl_O2: â\88\80d,T1,T2. â\87\91[d, 0] T1 â\89¡ T2 â\86\92 T1 = T2.
/2 width=4/ qed-.
-fact lift_inv_sort1_aux: â\88\80d,e,T1,T2. â\86\91[d,e] T1 â\89¡ T2 â\86\92 â\88\80k. T1 = â\8b\86k â\86\92 T2 = â\8b\86k.
+fact lift_inv_sort1_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 â\89¡ T2 â\86\92 â\88\80k. T1 = â\8b\86k â\86\92 T2 = â\8b\86k.
#d #e #T1 #T2 * -d -e -T1 -T2 //
[ #i #d #e #_ #k #H destruct
| #I #V1 #V2 #T1 #T2 #d #e #_ #_ #k #H destruct
]
qed.
-lemma lift_inv_sort1: â\88\80d,e,T2,k. â\86\91[d,e] â\8b\86k â\89¡ T2 â\86\92 T2 = â\8b\86k.
+lemma lift_inv_sort1: â\88\80d,e,T2,k. â\87\91[d,e] â\8b\86k â\89¡ T2 â\86\92 T2 = â\8b\86k.
/2 width=5/ qed-.
-fact lift_inv_lref1_aux: â\88\80d,e,T1,T2. â\86\91[d,e] T1 â\89¡ T2 â\86\92 â\88\80i. T1 = #i â\86\92
+fact lift_inv_lref1_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 â\89¡ T2 â\86\92 â\88\80i. T1 = #i â\86\92
(i < d ∧ T2 = #i) ∨ (d ≤ i ∧ T2 = #(i + e)).
#d #e #T1 #T2 * -d -e -T1 -T2
[ #k #d #e #i #H destruct
]
qed.
-lemma lift_inv_lref1: â\88\80d,e,T2,i. â\86\91[d,e] #i â\89¡ T2 â\86\92
+lemma lift_inv_lref1: â\88\80d,e,T2,i. â\87\91[d,e] #i â\89¡ T2 â\86\92
(i < d ∧ T2 = #i) ∨ (d ≤ i ∧ T2 = #(i + e)).
/2 width=3/ qed-.
-lemma lift_inv_lref1_lt: â\88\80d,e,T2,i. â\86\91[d,e] #i â\89¡ T2 â\86\92 i < d â\86\92 T2 = #i.
+lemma lift_inv_lref1_lt: â\88\80d,e,T2,i. â\87\91[d,e] #i â\89¡ T2 â\86\92 i < d â\86\92 T2 = #i.
#d #e #T2 #i #H elim (lift_inv_lref1 … H) -H * //
#Hdi #_ #Hid lapply (le_to_lt_to_lt … Hdi Hid) -Hdi -Hid #Hdd
elim (lt_refl_false … Hdd)
qed-.
-lemma lift_inv_lref1_ge: â\88\80d,e,T2,i. â\86\91[d,e] #i â\89¡ T2 â\86\92 d â\89¤ i â\86\92 T2 = #(i + e).
+lemma lift_inv_lref1_ge: â\88\80d,e,T2,i. â\87\91[d,e] #i â\89¡ T2 â\86\92 d â\89¤ i â\86\92 T2 = #(i + e).
#d #e #T2 #i #H elim (lift_inv_lref1 … H) -H * //
#Hid #_ #Hdi lapply (le_to_lt_to_lt … Hdi Hid) -Hdi -Hid #Hdd
elim (lt_refl_false … Hdd)
qed-.
-fact lift_inv_gref1_aux: â\88\80d,e,T1,T2. â\86\91[d,e] T1 â\89¡ T2 â\86\92 â\88\80p. T1 = §p â\86\92 T2 = §p.
+fact lift_inv_gref1_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 â\89¡ T2 â\86\92 â\88\80p. T1 = §p â\86\92 T2 = §p.
#d #e #T1 #T2 * -d -e -T1 -T2 //
[ #i #d #e #_ #k #H destruct
| #I #V1 #V2 #T1 #T2 #d #e #_ #_ #k #H destruct
]
qed.
-lemma lift_inv_gref1: â\88\80d,e,T2,p. â\86\91[d,e] §p â\89¡ T2 â\86\92 T2 = §p.
+lemma lift_inv_gref1: â\88\80d,e,T2,p. â\87\91[d,e] §p â\89¡ T2 â\86\92 T2 = §p.
/2 width=5/ qed-.
-fact lift_inv_bind1_aux: â\88\80d,e,T1,T2. â\86\91[d,e] T1 â\89¡ T2 â\86\92
+fact lift_inv_bind1_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 â\89¡ T2 â\86\92
∀I,V1,U1. T1 = 𝕓{I} V1.U1 →
- â\88\83â\88\83V2,U2. â\86\91[d,e] V1 â\89¡ V2 & â\86\91[d+1,e] U1 â\89¡ U2 &
+ â\88\83â\88\83V2,U2. â\87\91[d,e] V1 â\89¡ V2 & â\87\91[d+1,e] U1 â\89¡ U2 &
T2 = 𝕓{I} V2. U2.
#d #e #T1 #T2 * -d -e -T1 -T2
[ #k #d #e #I #V1 #U1 #H destruct
]
qed.
-lemma lift_inv_bind1: â\88\80d,e,T2,I,V1,U1. â\86\91[d,e] ð\9d\95\93{I} V1. U1 â\89¡ T2 â\86\92
- â\88\83â\88\83V2,U2. â\86\91[d,e] V1 â\89¡ V2 & â\86\91[d+1,e] U1 â\89¡ U2 &
+lemma lift_inv_bind1: â\88\80d,e,T2,I,V1,U1. â\87\91[d,e] ð\9d\95\93{I} V1. U1 â\89¡ T2 â\86\92
+ â\88\83â\88\83V2,U2. â\87\91[d,e] V1 â\89¡ V2 & â\87\91[d+1,e] U1 â\89¡ U2 &
T2 = 𝕓{I} V2. U2.
/2 width=3/ qed-.
-fact lift_inv_flat1_aux: â\88\80d,e,T1,T2. â\86\91[d,e] T1 â\89¡ T2 â\86\92
+fact lift_inv_flat1_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 â\89¡ T2 â\86\92
∀I,V1,U1. T1 = 𝕗{I} V1.U1 →
- â\88\83â\88\83V2,U2. â\86\91[d,e] V1 â\89¡ V2 & â\86\91[d,e] U1 â\89¡ U2 &
+ â\88\83â\88\83V2,U2. â\87\91[d,e] V1 â\89¡ V2 & â\87\91[d,e] U1 â\89¡ U2 &
T2 = 𝕗{I} V2. U2.
#d #e #T1 #T2 * -d -e -T1 -T2
[ #k #d #e #I #V1 #U1 #H destruct
]
qed.
-lemma lift_inv_flat1: â\88\80d,e,T2,I,V1,U1. â\86\91[d,e] ð\9d\95\97{I} V1. U1 â\89¡ T2 â\86\92
- â\88\83â\88\83V2,U2. â\86\91[d,e] V1 â\89¡ V2 & â\86\91[d,e] U1 â\89¡ U2 &
+lemma lift_inv_flat1: â\88\80d,e,T2,I,V1,U1. â\87\91[d,e] ð\9d\95\97{I} V1. U1 â\89¡ T2 â\86\92
+ â\88\83â\88\83V2,U2. â\87\91[d,e] V1 â\89¡ V2 & â\87\91[d,e] U1 â\89¡ U2 &
T2 = 𝕗{I} V2. U2.
/2 width=3/ qed-.
-fact lift_inv_sort2_aux: â\88\80d,e,T1,T2. â\86\91[d,e] T1 â\89¡ T2 â\86\92 â\88\80k. T2 = â\8b\86k â\86\92 T1 = â\8b\86k.
+fact lift_inv_sort2_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 â\89¡ T2 â\86\92 â\88\80k. T2 = â\8b\86k â\86\92 T1 = â\8b\86k.
#d #e #T1 #T2 * -d -e -T1 -T2 //
[ #i #d #e #_ #k #H destruct
| #I #V1 #V2 #T1 #T2 #d #e #_ #_ #k #H destruct
qed.
(* Basic_1: was: lift_gen_sort *)
-lemma lift_inv_sort2: â\88\80d,e,T1,k. â\86\91[d,e] T1 â\89¡ â\8b\86k â\86\92 T1 = â\8b\86k.
+lemma lift_inv_sort2: â\88\80d,e,T1,k. â\87\91[d,e] T1 â\89¡ â\8b\86k â\86\92 T1 = â\8b\86k.
/2 width=5/ qed-.
-fact lift_inv_lref2_aux: â\88\80d,e,T1,T2. â\86\91[d,e] T1 â\89¡ T2 â\86\92 â\88\80i. T2 = #i â\86\92
+fact lift_inv_lref2_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 â\89¡ T2 â\86\92 â\88\80i. T2 = #i â\86\92
(i < d ∧ T1 = #i) ∨ (d + e ≤ i ∧ T1 = #(i - e)).
#d #e #T1 #T2 * -d -e -T1 -T2
[ #k #d #e #i #H destruct
qed.
(* Basic_1: was: lift_gen_lref *)
-lemma lift_inv_lref2: â\88\80d,e,T1,i. â\86\91[d,e] T1 â\89¡ #i â\86\92
+lemma lift_inv_lref2: â\88\80d,e,T1,i. â\87\91[d,e] T1 â\89¡ #i â\86\92
(i < d ∧ T1 = #i) ∨ (d + e ≤ i ∧ T1 = #(i - e)).
/2 width=3/ qed-.
(* Basic_1: was: lift_gen_lref_lt *)
-lemma lift_inv_lref2_lt: â\88\80d,e,T1,i. â\86\91[d,e] T1 â\89¡ #i â\86\92 i < d â\86\92 T1 = #i.
+lemma lift_inv_lref2_lt: â\88\80d,e,T1,i. â\87\91[d,e] T1 â\89¡ #i â\86\92 i < d â\86\92 T1 = #i.
#d #e #T1 #i #H elim (lift_inv_lref2 … H) -H * //
#Hdi #_ #Hid lapply (le_to_lt_to_lt … Hdi Hid) -Hdi -Hid #Hdd
elim (lt_inv_plus_l … Hdd) -Hdd #Hdd
qed-.
(* Basic_1: was: lift_gen_lref_false *)
-lemma lift_inv_lref2_be: â\88\80d,e,T1,i. â\86\91[d,e] T1 â\89¡ #i â\86\92
+lemma lift_inv_lref2_be: â\88\80d,e,T1,i. â\87\91[d,e] T1 â\89¡ #i â\86\92
d ≤ i → i < d + e → False.
#d #e #T1 #i #H elim (lift_inv_lref2 … H) -H *
[ #H1 #_ #H2 #_ | #H2 #_ #_ #H1 ]
qed-.
(* Basic_1: was: lift_gen_lref_ge *)
-lemma lift_inv_lref2_ge: â\88\80d,e,T1,i. â\86\91[d,e] T1 â\89¡ #i â\86\92 d + e â\89¤ i â\86\92 T1 = #(i - e).
+lemma lift_inv_lref2_ge: â\88\80d,e,T1,i. â\87\91[d,e] T1 â\89¡ #i â\86\92 d + e â\89¤ i â\86\92 T1 = #(i - e).
#d #e #T1 #i #H elim (lift_inv_lref2 … H) -H * //
#Hid #_ #Hdi lapply (le_to_lt_to_lt … Hdi Hid) -Hdi -Hid #Hdd
elim (lt_inv_plus_l … Hdd) -Hdd #Hdd
elim (lt_refl_false … Hdd)
qed-.
-fact lift_inv_gref2_aux: â\88\80d,e,T1,T2. â\86\91[d,e] T1 â\89¡ T2 â\86\92 â\88\80p. T2 = §p â\86\92 T1 = §p.
+fact lift_inv_gref2_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 â\89¡ T2 â\86\92 â\88\80p. T2 = §p â\86\92 T1 = §p.
#d #e #T1 #T2 * -d -e -T1 -T2 //
[ #i #d #e #_ #k #H destruct
| #I #V1 #V2 #T1 #T2 #d #e #_ #_ #k #H destruct
]
qed.
-lemma lift_inv_gref2: â\88\80d,e,T1,p. â\86\91[d,e] T1 â\89¡ §p â\86\92 T1 = §p.
+lemma lift_inv_gref2: â\88\80d,e,T1,p. â\87\91[d,e] T1 â\89¡ §p â\86\92 T1 = §p.
/2 width=5/ qed-.
-fact lift_inv_bind2_aux: â\88\80d,e,T1,T2. â\86\91[d,e] T1 â\89¡ T2 â\86\92
+fact lift_inv_bind2_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 â\89¡ T2 â\86\92
∀I,V2,U2. T2 = 𝕓{I} V2.U2 →
- â\88\83â\88\83V1,U1. â\86\91[d,e] V1 â\89¡ V2 & â\86\91[d+1,e] U1 â\89¡ U2 &
+ â\88\83â\88\83V1,U1. â\87\91[d,e] V1 â\89¡ V2 & â\87\91[d+1,e] U1 â\89¡ U2 &
T1 = 𝕓{I} V1. U1.
#d #e #T1 #T2 * -d -e -T1 -T2
[ #k #d #e #I #V2 #U2 #H destruct
qed.
(* Basic_1: was: lift_gen_bind *)
-lemma lift_inv_bind2: â\88\80d,e,T1,I,V2,U2. â\86\91[d,e] T1 â\89¡ ð\9d\95\93{I} V2. U2 â\86\92
- â\88\83â\88\83V1,U1. â\86\91[d,e] V1 â\89¡ V2 & â\86\91[d+1,e] U1 â\89¡ U2 &
+lemma lift_inv_bind2: â\88\80d,e,T1,I,V2,U2. â\87\91[d,e] T1 â\89¡ ð\9d\95\93{I} V2. U2 â\86\92
+ â\88\83â\88\83V1,U1. â\87\91[d,e] V1 â\89¡ V2 & â\87\91[d+1,e] U1 â\89¡ U2 &
T1 = 𝕓{I} V1. U1.
/2 width=3/ qed-.
-fact lift_inv_flat2_aux: â\88\80d,e,T1,T2. â\86\91[d,e] T1 â\89¡ T2 â\86\92
+fact lift_inv_flat2_aux: â\88\80d,e,T1,T2. â\87\91[d,e] T1 â\89¡ T2 â\86\92
∀I,V2,U2. T2 = 𝕗{I} V2.U2 →
- â\88\83â\88\83V1,U1. â\86\91[d,e] V1 â\89¡ V2 & â\86\91[d,e] U1 â\89¡ U2 &
+ â\88\83â\88\83V1,U1. â\87\91[d,e] V1 â\89¡ V2 & â\87\91[d,e] U1 â\89¡ U2 &
T1 = 𝕗{I} V1. U1.
#d #e #T1 #T2 * -d -e -T1 -T2
[ #k #d #e #I #V2 #U2 #H destruct
qed.
(* Basic_1: was: lift_gen_flat *)
-lemma lift_inv_flat2: â\88\80d,e,T1,I,V2,U2. â\86\91[d,e] T1 â\89¡ ð\9d\95\97{I} V2. U2 â\86\92
- â\88\83â\88\83V1,U1. â\86\91[d,e] V1 â\89¡ V2 & â\86\91[d,e] U1 â\89¡ U2 &
+lemma lift_inv_flat2: â\88\80d,e,T1,I,V2,U2. â\87\91[d,e] T1 â\89¡ ð\9d\95\97{I} V2. U2 â\86\92
+ â\88\83â\88\83V1,U1. â\87\91[d,e] V1 â\89¡ V2 & â\87\91[d,e] U1 â\89¡ U2 &
T1 = 𝕗{I} V1. U1.
/2 width=3/ qed-.
-lemma lift_inv_pair_xy_x: â\88\80d,e,I,V,T. â\86\91[d, e] ð\9d\95\94{I} V. T â\89¡ V â\86\92 False.
+lemma lift_inv_pair_xy_x: â\88\80d,e,I,V,T. â\87\91[d, e] ð\9d\95\94{I} V. T â\89¡ V â\86\92 False.
#d #e #J #V elim V -V
[ * #i #T #H
[ lapply (lift_inv_sort2 … H) -H #H destruct
]
qed-.
-lemma lift_inv_pair_xy_y: â\88\80I,T,V,d,e. â\86\91[d, e] ð\9d\95\94{I} V. T â\89¡ T â\86\92 False.
+lemma lift_inv_pair_xy_y: â\88\80I,T,V,d,e. â\87\91[d, e] ð\9d\95\94{I} V. T â\89¡ T â\86\92 False.
#J #T elim T -T
[ * #i #V #d #e #H
[ lapply (lift_inv_sort2 … H) -H #H destruct
(* Basic forward lemmas *****************************************************)
-lemma tw_lift: â\88\80d,e,T1,T2. â\86\91[d, e] T1 â\89¡ T2 â\86\92 #[T1] = #[T2].
+lemma tw_lift: â\88\80d,e,T1,T2. â\87\91[d, e] T1 â\89¡ T2 â\86\92 #[T1] = #[T2].
#d #e #T1 #T2 #H elim H -d -e -T1 -T2 normalize //
qed-.
(* Basic properties *********************************************************)
(* Basic_1: was: lift_lref_gt *)
-lemma lift_lref_ge_minus: â\88\80d,e,i. d + e â\89¤ i â\86\92 â\86\91[d, e] #(i - e) â\89¡ #i.
+lemma lift_lref_ge_minus: â\88\80d,e,i. d + e â\89¤ i â\86\92 â\87\91[d, e] #(i - e) â\89¡ #i.
#d #e #i #H >(plus_minus_m_m i e) in ⊢ (? ? ? ? %); /2 width=2/ /3 width=2/
qed.
-lemma lift_lref_ge_minus_eq: â\88\80d,e,i,j. d + e â\89¤ i â\86\92 j = i - e â\86\92 â\86\91[d, e] #j â\89¡ #i.
+lemma lift_lref_ge_minus_eq: â\88\80d,e,i,j. d + e â\89¤ i â\86\92 j = i - e â\86\92 â\87\91[d, e] #j â\89¡ #i.
/2 width=1/ qed-.
(* Basic_1: was: lift_r *)
-lemma lift_refl: â\88\80T,d. â\86\91[d, 0] T â\89¡ T.
+lemma lift_refl: â\88\80T,d. â\87\91[d, 0] T â\89¡ T.
#T elim T -T
[ * #i // #d elim (lt_or_ge i d) /2 width=1/
| * /2 width=1/
]
qed.
-lemma lift_total: â\88\80T1,d,e. â\88\83T2. â\86\91[d,e] T1 â\89¡ T2.
+lemma lift_total: â\88\80T1,d,e. â\88\83T2. â\87\91[d,e] T1 â\89¡ T2.
#T1 elim T1 -T1
[ * #i /2 width=2/ #d #e elim (lt_or_ge i d) /3 width=2/
| * #I #V1 #T1 #IHV1 #IHT1 #d #e
qed.
(* Basic_1: was: lift_free (right to left) *)
-lemma lift_split: â\88\80d1,e2,T1,T2. â\86\91[d1, e2] T1 â\89¡ T2 â\86\92
+lemma lift_split: â\88\80d1,e2,T1,T2. â\87\91[d1, e2] T1 â\89¡ T2 â\86\92
∀d2,e1. d1 ≤ d2 → d2 ≤ d1 + e1 → e1 ≤ e2 →
- â\88\83â\88\83T. â\86\91[d1, e1] T1 â\89¡ T & â\86\91[d2, e2 - e1] T â\89¡ T2.
+ â\88\83â\88\83T. â\87\91[d1, e1] T1 â\89¡ T & â\87\91[d2, e2 - e1] T â\89¡ T2.
#d1 #e2 #T1 #T2 #H elim H -d1 -e2 -T1 -T2
[ /3 width=3/
| #i #d1 #e2 #Hid1 #d2 #e1 #Hd12 #_ #_
qed.
(* Basic_1: was only: dnf_dec2 dnf_dec *)
-lemma is_lift_dec: â\88\80T2,d,e. Decidable (â\88\83T1. â\86\91[d,e] T1 â\89¡ T2).
+lemma is_lift_dec: â\88\80T2,d,e. Decidable (â\88\83T1. â\87\91[d,e] T1 â\89¡ T2).
#T1 elim T1 -T1
[ * [1,3: /3 width=2/ ] #i #d #e
elim (lt_dec i d) #Hid