1 (**************************************************************************)
4 (* ||A|| A project by Andrea Asperti *)
6 (* ||I|| Developers: *)
7 (* ||T|| The HELM team. *)
8 (* ||A|| http://helm.cs.unibo.it *)
10 (* \ / This file is distributed under the terms of the *)
11 (* v GNU General Public License Version 2 *)
13 (**************************************************************************)
15 (* This file was automatically generated: do not edit *********************)
17 set "baseuri" "cic:/matita/LAMBDA-TYPES/LambdaDelta-1/lift/fwd".
19 include "lift/defs.ma".
22 \forall (n: nat).(\forall (h: nat).(\forall (d: nat).(eq T (lift h d (TSort
25 \lambda (n: nat).(\lambda (_: nat).(\lambda (_: nat).(refl_equal T (TSort
29 \forall (n: nat).(\forall (h: nat).(\forall (d: nat).((lt n d) \to (eq T
30 (lift h d (TLRef n)) (TLRef n)))))
32 \lambda (n: nat).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H: (lt n
33 d)).(eq_ind bool true (\lambda (b: bool).(eq T (TLRef (match b with [true
34 \Rightarrow n | false \Rightarrow (plus n h)])) (TLRef n))) (refl_equal T
35 (TLRef n)) (blt n d) (sym_eq bool (blt n d) true (lt_blt d n H)))))).
38 \forall (n: nat).(\forall (h: nat).(\forall (d: nat).((le d n) \to (eq T
39 (lift h d (TLRef n)) (TLRef (plus n h))))))
41 \lambda (n: nat).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H: (le d
42 n)).(eq_ind bool false (\lambda (b: bool).(eq T (TLRef (match b with [true
43 \Rightarrow n | false \Rightarrow (plus n h)])) (TLRef (plus n h))))
44 (refl_equal T (TLRef (plus n h))) (blt n d) (sym_eq bool (blt n d) false
48 \forall (k: K).(\forall (u: T).(\forall (t: T).(\forall (h: nat).(\forall
49 (d: nat).(eq T (lift h d (THead k u t)) (THead k (lift h d u) (lift h (s k d)
52 \lambda (k: K).(\lambda (u: T).(\lambda (t: T).(\lambda (h: nat).(\lambda
53 (d: nat).(refl_equal T (THead k (lift h d u) (lift h (s k d) t))))))).
56 \forall (b: B).(\forall (u: T).(\forall (t: T).(\forall (h: nat).(\forall
57 (d: nat).(eq T (lift h d (THead (Bind b) u t)) (THead (Bind b) (lift h d u)
58 (lift h (S d) t)))))))
60 \lambda (b: B).(\lambda (u: T).(\lambda (t: T).(\lambda (h: nat).(\lambda
61 (d: nat).(refl_equal T (THead (Bind b) (lift h d u) (lift h (S d) t))))))).
64 \forall (f: F).(\forall (u: T).(\forall (t: T).(\forall (h: nat).(\forall
65 (d: nat).(eq T (lift h d (THead (Flat f) u t)) (THead (Flat f) (lift h d u)
68 \lambda (f: F).(\lambda (u: T).(\lambda (t: T).(\lambda (h: nat).(\lambda
69 (d: nat).(refl_equal T (THead (Flat f) (lift h d u) (lift h d t))))))).
71 theorem lift_gen_sort:
72 \forall (h: nat).(\forall (d: nat).(\forall (n: nat).(\forall (t: T).((eq T
73 (TSort n) (lift h d t)) \to (eq T t (TSort n))))))
75 \lambda (h: nat).(\lambda (d: nat).(\lambda (n: nat).(\lambda (t: T).(T_ind
76 (\lambda (t0: T).((eq T (TSort n) (lift h d t0)) \to (eq T t0 (TSort n))))
77 (\lambda (n0: nat).(\lambda (H: (eq T (TSort n) (lift h d (TSort
78 n0)))).(sym_eq T (TSort n) (TSort n0) H))) (\lambda (n0: nat).(\lambda (H:
79 (eq T (TSort n) (lift h d (TLRef n0)))).(lt_le_e n0 d (eq T (TLRef n0) (TSort
80 n)) (\lambda (H0: (lt n0 d)).(let H1 \def (eq_ind T (lift h d (TLRef n0))
81 (\lambda (t0: T).(eq T (TSort n) t0)) H (TLRef n0) (lift_lref_lt n0 h d H0))
82 in (let H2 \def (match H1 in eq return (\lambda (t0: T).(\lambda (_: (eq ? ?
83 t0)).((eq T t0 (TLRef n0)) \to (eq T (TLRef n0) (TSort n))))) with
84 [refl_equal \Rightarrow (\lambda (H2: (eq T (TSort n) (TLRef n0))).(let H3
85 \def (eq_ind T (TSort n) (\lambda (e: T).(match e in T return (\lambda (_:
86 T).Prop) with [(TSort _) \Rightarrow True | (TLRef _) \Rightarrow False |
87 (THead _ _ _) \Rightarrow False])) I (TLRef n0) H2) in (False_ind (eq T
88 (TLRef n0) (TSort n)) H3)))]) in (H2 (refl_equal T (TLRef n0)))))) (\lambda
89 (H0: (le d n0)).(let H1 \def (eq_ind T (lift h d (TLRef n0)) (\lambda (t0:
90 T).(eq T (TSort n) t0)) H (TLRef (plus n0 h)) (lift_lref_ge n0 h d H0)) in
91 (let H2 \def (match H1 in eq return (\lambda (t0: T).(\lambda (_: (eq ? ?
92 t0)).((eq T t0 (TLRef (plus n0 h))) \to (eq T (TLRef n0) (TSort n))))) with
93 [refl_equal \Rightarrow (\lambda (H2: (eq T (TSort n) (TLRef (plus n0
94 h)))).(let H3 \def (eq_ind T (TSort n) (\lambda (e: T).(match e in T return
95 (\lambda (_: T).Prop) with [(TSort _) \Rightarrow True | (TLRef _)
96 \Rightarrow False | (THead _ _ _) \Rightarrow False])) I (TLRef (plus n0 h))
97 H2) in (False_ind (eq T (TLRef n0) (TSort n)) H3)))]) in (H2 (refl_equal T
98 (TLRef (plus n0 h)))))))))) (\lambda (k: K).(\lambda (t0: T).(\lambda (_:
99 (((eq T (TSort n) (lift h d t0)) \to (eq T t0 (TSort n))))).(\lambda (t1:
100 T).(\lambda (_: (((eq T (TSort n) (lift h d t1)) \to (eq T t1 (TSort
101 n))))).(\lambda (H1: (eq T (TSort n) (lift h d (THead k t0 t1)))).(let H2
102 \def (eq_ind T (lift h d (THead k t0 t1)) (\lambda (t2: T).(eq T (TSort n)
103 t2)) H1 (THead k (lift h d t0) (lift h (s k d) t1)) (lift_head k t0 t1 h d))
104 in (let H3 \def (match H2 in eq return (\lambda (t2: T).(\lambda (_: (eq ? ?
105 t2)).((eq T t2 (THead k (lift h d t0) (lift h (s k d) t1))) \to (eq T (THead
106 k t0 t1) (TSort n))))) with [refl_equal \Rightarrow (\lambda (H3: (eq T
107 (TSort n) (THead k (lift h d t0) (lift h (s k d) t1)))).(let H4 \def (eq_ind
108 T (TSort n) (\lambda (e: T).(match e in T return (\lambda (_: T).Prop) with
109 [(TSort _) \Rightarrow True | (TLRef _) \Rightarrow False | (THead _ _ _)
110 \Rightarrow False])) I (THead k (lift h d t0) (lift h (s k d) t1)) H3) in
111 (False_ind (eq T (THead k t0 t1) (TSort n)) H4)))]) in (H3 (refl_equal T
112 (THead k (lift h d t0) (lift h (s k d) t1)))))))))))) t)))).
114 theorem lift_gen_lref:
115 \forall (t: T).(\forall (d: nat).(\forall (h: nat).(\forall (i: nat).((eq T
116 (TLRef i) (lift h d t)) \to (or (land (lt i d) (eq T t (TLRef i))) (land (le
117 (plus d h) i) (eq T t (TLRef (minus i h)))))))))
119 \lambda (t: T).(T_ind (\lambda (t0: T).(\forall (d: nat).(\forall (h:
120 nat).(\forall (i: nat).((eq T (TLRef i) (lift h d t0)) \to (or (land (lt i d)
121 (eq T t0 (TLRef i))) (land (le (plus d h) i) (eq T t0 (TLRef (minus i
122 h)))))))))) (\lambda (n: nat).(\lambda (d: nat).(\lambda (h: nat).(\lambda
123 (i: nat).(\lambda (H: (eq T (TLRef i) (lift h d (TSort n)))).(let H0 \def
124 (eq_ind T (lift h d (TSort n)) (\lambda (t0: T).(eq T (TLRef i) t0)) H (TSort
125 n) (lift_sort n h d)) in (let H1 \def (eq_ind T (TLRef i) (\lambda (ee:
126 T).(match ee in T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow
127 False | (TLRef _) \Rightarrow True | (THead _ _ _) \Rightarrow False])) I
128 (TSort n) H0) in (False_ind (or (land (lt i d) (eq T (TSort n) (TLRef i)))
129 (land (le (plus d h) i) (eq T (TSort n) (TLRef (minus i h))))) H1))))))))
130 (\lambda (n: nat).(\lambda (d: nat).(\lambda (h: nat).(\lambda (i:
131 nat).(\lambda (H: (eq T (TLRef i) (lift h d (TLRef n)))).(lt_le_e n d (or
132 (land (lt i d) (eq T (TLRef n) (TLRef i))) (land (le (plus d h) i) (eq T
133 (TLRef n) (TLRef (minus i h))))) (\lambda (H0: (lt n d)).(let H1 \def (eq_ind
134 T (lift h d (TLRef n)) (\lambda (t0: T).(eq T (TLRef i) t0)) H (TLRef n)
135 (lift_lref_lt n h d H0)) in (let H2 \def (f_equal T nat (\lambda (e:
136 T).(match e in T return (\lambda (_: T).nat) with [(TSort _) \Rightarrow i |
137 (TLRef n0) \Rightarrow n0 | (THead _ _ _) \Rightarrow i])) (TLRef i) (TLRef
138 n) H1) in (eq_ind_r nat n (\lambda (n0: nat).(or (land (lt n0 d) (eq T (TLRef
139 n) (TLRef n0))) (land (le (plus d h) n0) (eq T (TLRef n) (TLRef (minus n0
140 h)))))) (or_introl (land (lt n d) (eq T (TLRef n) (TLRef n))) (land (le (plus
141 d h) n) (eq T (TLRef n) (TLRef (minus n h)))) (conj (lt n d) (eq T (TLRef n)
142 (TLRef n)) H0 (refl_equal T (TLRef n)))) i H2)))) (\lambda (H0: (le d
143 n)).(let H1 \def (eq_ind T (lift h d (TLRef n)) (\lambda (t0: T).(eq T (TLRef
144 i) t0)) H (TLRef (plus n h)) (lift_lref_ge n h d H0)) in (let H2 \def
145 (f_equal T nat (\lambda (e: T).(match e in T return (\lambda (_: T).nat) with
146 [(TSort _) \Rightarrow i | (TLRef n0) \Rightarrow n0 | (THead _ _ _)
147 \Rightarrow i])) (TLRef i) (TLRef (plus n h)) H1) in (eq_ind_r nat (plus n h)
148 (\lambda (n0: nat).(or (land (lt n0 d) (eq T (TLRef n) (TLRef n0))) (land (le
149 (plus d h) n0) (eq T (TLRef n) (TLRef (minus n0 h)))))) (eq_ind_r nat n
150 (\lambda (n0: nat).(or (land (lt (plus n h) d) (eq T (TLRef n) (TLRef (plus n
151 h)))) (land (le (plus d h) (plus n h)) (eq T (TLRef n) (TLRef n0)))))
152 (or_intror (land (lt (plus n h) d) (eq T (TLRef n) (TLRef (plus n h)))) (land
153 (le (plus d h) (plus n h)) (eq T (TLRef n) (TLRef n))) (conj (le (plus d h)
154 (plus n h)) (eq T (TLRef n) (TLRef n)) (plus_le_compat d n h h H0 (le_n h))
155 (refl_equal T (TLRef n)))) (minus (plus n h) h) (minus_plus_r n h)) i
156 H2)))))))))) (\lambda (k: K).(\lambda (t0: T).(\lambda (_: ((\forall (d:
157 nat).(\forall (h: nat).(\forall (i: nat).((eq T (TLRef i) (lift h d t0)) \to
158 (or (land (lt i d) (eq T t0 (TLRef i))) (land (le (plus d h) i) (eq T t0
159 (TLRef (minus i h))))))))))).(\lambda (t1: T).(\lambda (_: ((\forall (d:
160 nat).(\forall (h: nat).(\forall (i: nat).((eq T (TLRef i) (lift h d t1)) \to
161 (or (land (lt i d) (eq T t1 (TLRef i))) (land (le (plus d h) i) (eq T t1
162 (TLRef (minus i h))))))))))).(\lambda (d: nat).(\lambda (h: nat).(\lambda (i:
163 nat).(\lambda (H1: (eq T (TLRef i) (lift h d (THead k t0 t1)))).(let H2 \def
164 (eq_ind T (lift h d (THead k t0 t1)) (\lambda (t2: T).(eq T (TLRef i) t2)) H1
165 (THead k (lift h d t0) (lift h (s k d) t1)) (lift_head k t0 t1 h d)) in (let
166 H3 \def (eq_ind T (TLRef i) (\lambda (ee: T).(match ee in T return (\lambda
167 (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow True |
168 (THead _ _ _) \Rightarrow False])) I (THead k (lift h d t0) (lift h (s k d)
169 t1)) H2) in (False_ind (or (land (lt i d) (eq T (THead k t0 t1) (TLRef i)))
170 (land (le (plus d h) i) (eq T (THead k t0 t1) (TLRef (minus i h)))))
173 theorem lift_gen_lref_lt:
174 \forall (h: nat).(\forall (d: nat).(\forall (n: nat).((lt n d) \to (\forall
175 (t: T).((eq T (TLRef n) (lift h d t)) \to (eq T t (TLRef n)))))))
177 \lambda (h: nat).(\lambda (d: nat).(\lambda (n: nat).(\lambda (H: (lt n
178 d)).(\lambda (t: T).(T_ind (\lambda (t0: T).((eq T (TLRef n) (lift h d t0))
179 \to (eq T t0 (TLRef n)))) (\lambda (n0: nat).(\lambda (H0: (eq T (TLRef n)
180 (lift h d (TSort n0)))).(sym_eq T (TLRef n) (TSort n0) H0))) (\lambda (n0:
181 nat).(\lambda (H0: (eq T (TLRef n) (lift h d (TLRef n0)))).(lt_le_e n0 d (eq
182 T (TLRef n0) (TLRef n)) (\lambda (H1: (lt n0 d)).(let H2 \def (eq_ind T (lift
183 h d (TLRef n0)) (\lambda (t0: T).(eq T (TLRef n) t0)) H0 (TLRef n0)
184 (lift_lref_lt n0 h d H1)) in (sym_eq T (TLRef n) (TLRef n0) H2))) (\lambda
185 (H1: (le d n0)).(let H2 \def (eq_ind T (lift h d (TLRef n0)) (\lambda (t0:
186 T).(eq T (TLRef n) t0)) H0 (TLRef (plus n0 h)) (lift_lref_ge n0 h d H1)) in
187 (let H3 \def (match H2 in eq return (\lambda (t0: T).(\lambda (_: (eq ? ?
188 t0)).((eq T t0 (TLRef (plus n0 h))) \to (eq T (TLRef n0) (TLRef n))))) with
189 [refl_equal \Rightarrow (\lambda (H3: (eq T (TLRef n) (TLRef (plus n0
190 h)))).(let H4 \def (f_equal T nat (\lambda (e: T).(match e in T return
191 (\lambda (_: T).nat) with [(TSort _) \Rightarrow n | (TLRef n1) \Rightarrow
192 n1 | (THead _ _ _) \Rightarrow n])) (TLRef n) (TLRef (plus n0 h)) H3) in
193 (eq_ind nat (plus n0 h) (\lambda (n1: nat).(eq T (TLRef n0) (TLRef n1))) (let
194 H5 \def (eq_ind nat n (\lambda (n1: nat).(lt n1 d)) H (plus n0 h) H4) in
195 (le_false d n0 (eq T (TLRef n0) (TLRef (plus n0 h))) H1 (lt_le_S n0 d
196 (le_lt_trans n0 (plus n0 h) d (le_plus_l n0 h) H5)))) n (sym_eq nat n (plus
197 n0 h) H4))))]) in (H3 (refl_equal T (TLRef (plus n0 h)))))))))) (\lambda (k:
198 K).(\lambda (t0: T).(\lambda (_: (((eq T (TLRef n) (lift h d t0)) \to (eq T
199 t0 (TLRef n))))).(\lambda (t1: T).(\lambda (_: (((eq T (TLRef n) (lift h d
200 t1)) \to (eq T t1 (TLRef n))))).(\lambda (H2: (eq T (TLRef n) (lift h d
201 (THead k t0 t1)))).(let H3 \def (eq_ind T (lift h d (THead k t0 t1)) (\lambda
202 (t2: T).(eq T (TLRef n) t2)) H2 (THead k (lift h d t0) (lift h (s k d) t1))
203 (lift_head k t0 t1 h d)) in (let H4 \def (match H3 in eq return (\lambda (t2:
204 T).(\lambda (_: (eq ? ? t2)).((eq T t2 (THead k (lift h d t0) (lift h (s k d)
205 t1))) \to (eq T (THead k t0 t1) (TLRef n))))) with [refl_equal \Rightarrow
206 (\lambda (H4: (eq T (TLRef n) (THead k (lift h d t0) (lift h (s k d)
207 t1)))).(let H5 \def (eq_ind T (TLRef n) (\lambda (e: T).(match e in T return
208 (\lambda (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _)
209 \Rightarrow True | (THead _ _ _) \Rightarrow False])) I (THead k (lift h d
210 t0) (lift h (s k d) t1)) H4) in (False_ind (eq T (THead k t0 t1) (TLRef n))
211 H5)))]) in (H4 (refl_equal T (THead k (lift h d t0) (lift h (s k d)
212 t1)))))))))))) t))))).
214 theorem lift_gen_lref_false:
215 \forall (h: nat).(\forall (d: nat).(\forall (n: nat).((le d n) \to ((lt n
216 (plus d h)) \to (\forall (t: T).((eq T (TLRef n) (lift h d t)) \to (\forall
219 \lambda (h: nat).(\lambda (d: nat).(\lambda (n: nat).(\lambda (H: (le d
220 n)).(\lambda (H0: (lt n (plus d h))).(\lambda (t: T).(T_ind (\lambda (t0:
221 T).((eq T (TLRef n) (lift h d t0)) \to (\forall (P: Prop).P))) (\lambda (n0:
222 nat).(\lambda (H1: (eq T (TLRef n) (lift h d (TSort n0)))).(\lambda (P:
223 Prop).(let H2 \def (match H1 in eq return (\lambda (t0: T).(\lambda (_: (eq ?
224 ? t0)).((eq T t0 (lift h d (TSort n0))) \to P))) with [refl_equal \Rightarrow
225 (\lambda (H2: (eq T (TLRef n) (lift h d (TSort n0)))).(let H3 \def (eq_ind T
226 (TLRef n) (\lambda (e: T).(match e in T return (\lambda (_: T).Prop) with
227 [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow True | (THead _ _ _)
228 \Rightarrow False])) I (lift h d (TSort n0)) H2) in (False_ind P H3)))]) in
229 (H2 (refl_equal T (lift h d (TSort n0)))))))) (\lambda (n0: nat).(\lambda
230 (H1: (eq T (TLRef n) (lift h d (TLRef n0)))).(\lambda (P: Prop).(lt_le_e n0 d
231 P (\lambda (H2: (lt n0 d)).(let H3 \def (eq_ind T (lift h d (TLRef n0))
232 (\lambda (t0: T).(eq T (TLRef n) t0)) H1 (TLRef n0) (lift_lref_lt n0 h d H2))
233 in (let H4 \def (match H3 in eq return (\lambda (t0: T).(\lambda (_: (eq ? ?
234 t0)).((eq T t0 (TLRef n0)) \to P))) with [refl_equal \Rightarrow (\lambda
235 (H4: (eq T (TLRef n) (TLRef n0))).(let H5 \def (f_equal T nat (\lambda (e:
236 T).(match e in T return (\lambda (_: T).nat) with [(TSort _) \Rightarrow n |
237 (TLRef n1) \Rightarrow n1 | (THead _ _ _) \Rightarrow n])) (TLRef n) (TLRef
238 n0) H4) in (eq_ind nat n0 (\lambda (_: nat).P) (let H6 \def (eq_ind_r nat n0
239 (\lambda (n1: nat).(lt n1 d)) H2 n H5) in (le_false d n P H H6)) n (sym_eq
240 nat n n0 H5))))]) in (H4 (refl_equal T (TLRef n0)))))) (\lambda (H2: (le d
241 n0)).(let H3 \def (eq_ind T (lift h d (TLRef n0)) (\lambda (t0: T).(eq T
242 (TLRef n) t0)) H1 (TLRef (plus n0 h)) (lift_lref_ge n0 h d H2)) in (let H4
243 \def (match H3 in eq return (\lambda (t0: T).(\lambda (_: (eq ? ? t0)).((eq T
244 t0 (TLRef (plus n0 h))) \to P))) with [refl_equal \Rightarrow (\lambda (H4:
245 (eq T (TLRef n) (TLRef (plus n0 h)))).(let H5 \def (f_equal T nat (\lambda
246 (e: T).(match e in T return (\lambda (_: T).nat) with [(TSort _) \Rightarrow
247 n | (TLRef n1) \Rightarrow n1 | (THead _ _ _) \Rightarrow n])) (TLRef n)
248 (TLRef (plus n0 h)) H4) in (eq_ind nat (plus n0 h) (\lambda (_: nat).P) (let
249 H6 \def (eq_ind nat n (\lambda (n1: nat).(lt n1 (plus d h))) H0 (plus n0 h)
250 H5) in (le_false d n0 P H2 (lt_le_S n0 d (simpl_lt_plus_r h n0 d H6)))) n
251 (sym_eq nat n (plus n0 h) H5))))]) in (H4 (refl_equal T (TLRef (plus n0
252 h))))))))))) (\lambda (k: K).(\lambda (t0: T).(\lambda (_: (((eq T (TLRef n)
253 (lift h d t0)) \to (\forall (P: Prop).P)))).(\lambda (t1: T).(\lambda (_:
254 (((eq T (TLRef n) (lift h d t1)) \to (\forall (P: Prop).P)))).(\lambda (H3:
255 (eq T (TLRef n) (lift h d (THead k t0 t1)))).(\lambda (P: Prop).(let H4 \def
256 (eq_ind T (lift h d (THead k t0 t1)) (\lambda (t2: T).(eq T (TLRef n) t2)) H3
257 (THead k (lift h d t0) (lift h (s k d) t1)) (lift_head k t0 t1 h d)) in (let
258 H5 \def (match H4 in eq return (\lambda (t2: T).(\lambda (_: (eq ? ?
259 t2)).((eq T t2 (THead k (lift h d t0) (lift h (s k d) t1))) \to P))) with
260 [refl_equal \Rightarrow (\lambda (H5: (eq T (TLRef n) (THead k (lift h d t0)
261 (lift h (s k d) t1)))).(let H6 \def (eq_ind T (TLRef n) (\lambda (e:
262 T).(match e in T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow
263 False | (TLRef _) \Rightarrow True | (THead _ _ _) \Rightarrow False])) I
264 (THead k (lift h d t0) (lift h (s k d) t1)) H5) in (False_ind P H6)))]) in
265 (H5 (refl_equal T (THead k (lift h d t0) (lift h (s k d) t1)))))))))))))
268 theorem lift_gen_lref_ge:
269 \forall (h: nat).(\forall (d: nat).(\forall (n: nat).((le d n) \to (\forall
270 (t: T).((eq T (TLRef (plus n h)) (lift h d t)) \to (eq T t (TLRef n)))))))
272 \lambda (h: nat).(\lambda (d: nat).(\lambda (n: nat).(\lambda (H: (le d
273 n)).(\lambda (t: T).(T_ind (\lambda (t0: T).((eq T (TLRef (plus n h)) (lift h
274 d t0)) \to (eq T t0 (TLRef n)))) (\lambda (n0: nat).(\lambda (H0: (eq T
275 (TLRef (plus n h)) (lift h d (TSort n0)))).(let H1 \def (match H0 in eq
276 return (\lambda (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (lift h d (TSort
277 n0))) \to (eq T (TSort n0) (TLRef n))))) with [refl_equal \Rightarrow
278 (\lambda (H1: (eq T (TLRef (plus n h)) (lift h d (TSort n0)))).(let H2 \def
279 (eq_ind T (TLRef (plus n h)) (\lambda (e: T).(match e in T return (\lambda
280 (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow True |
281 (THead _ _ _) \Rightarrow False])) I (lift h d (TSort n0)) H1) in (False_ind
282 (eq T (TSort n0) (TLRef n)) H2)))]) in (H1 (refl_equal T (lift h d (TSort
283 n0))))))) (\lambda (n0: nat).(\lambda (H0: (eq T (TLRef (plus n h)) (lift h d
284 (TLRef n0)))).(lt_le_e n0 d (eq T (TLRef n0) (TLRef n)) (\lambda (H1: (lt n0
285 d)).(let H2 \def (eq_ind T (lift h d (TLRef n0)) (\lambda (t0: T).(eq T
286 (TLRef (plus n h)) t0)) H0 (TLRef n0) (lift_lref_lt n0 h d H1)) in (let H3
287 \def (match H2 in eq return (\lambda (t0: T).(\lambda (_: (eq ? ? t0)).((eq T
288 t0 (TLRef n0)) \to (eq T (TLRef n0) (TLRef n))))) with [refl_equal
289 \Rightarrow (\lambda (H3: (eq T (TLRef (plus n h)) (TLRef n0))).(let H4 \def
290 (f_equal T nat (\lambda (e: T).(match e in T return (\lambda (_: T).nat) with
291 [(TSort _) \Rightarrow ((let rec plus (n1: nat) on n1: (nat \to nat) \def
292 (\lambda (m: nat).(match n1 with [O \Rightarrow m | (S p) \Rightarrow (S
293 (plus p m))])) in plus) n h) | (TLRef n1) \Rightarrow n1 | (THead _ _ _)
294 \Rightarrow ((let rec plus (n1: nat) on n1: (nat \to nat) \def (\lambda (m:
295 nat).(match n1 with [O \Rightarrow m | (S p) \Rightarrow (S (plus p m))])) in
296 plus) n h)])) (TLRef (plus n h)) (TLRef n0) H3) in (eq_ind nat (plus n h)
297 (\lambda (n1: nat).(eq T (TLRef n1) (TLRef n))) (let H5 \def (eq_ind_r nat n0
298 (\lambda (n1: nat).(lt n1 d)) H1 (plus n h) H4) in (le_false d n (eq T (TLRef
299 (plus n h)) (TLRef n)) H (lt_le_S n d (le_lt_trans n (plus n h) d (le_plus_l
300 n h) H5)))) n0 H4)))]) in (H3 (refl_equal T (TLRef n0)))))) (\lambda (H1: (le
301 d n0)).(let H2 \def (eq_ind T (lift h d (TLRef n0)) (\lambda (t0: T).(eq T
302 (TLRef (plus n h)) t0)) H0 (TLRef (plus n0 h)) (lift_lref_ge n0 h d H1)) in
303 (let H3 \def (match H2 in eq return (\lambda (t0: T).(\lambda (_: (eq ? ?
304 t0)).((eq T t0 (TLRef (plus n0 h))) \to (eq T (TLRef n0) (TLRef n))))) with
305 [refl_equal \Rightarrow (\lambda (H3: (eq T (TLRef (plus n h)) (TLRef (plus
306 n0 h)))).(let H4 \def (f_equal T nat (\lambda (e: T).(match e in T return
307 (\lambda (_: T).nat) with [(TSort _) \Rightarrow ((let rec plus (n1: nat) on
308 n1: (nat \to nat) \def (\lambda (m: nat).(match n1 with [O \Rightarrow m | (S
309 p) \Rightarrow (S (plus p m))])) in plus) n h) | (TLRef n1) \Rightarrow n1 |
310 (THead _ _ _) \Rightarrow ((let rec plus (n1: nat) on n1: (nat \to nat) \def
311 (\lambda (m: nat).(match n1 with [O \Rightarrow m | (S p) \Rightarrow (S
312 (plus p m))])) in plus) n h)])) (TLRef (plus n h)) (TLRef (plus n0 h)) H3) in
313 (eq_ind nat (plus n h) (\lambda (_: nat).(eq T (TLRef n0) (TLRef n)))
314 (f_equal nat T TLRef n0 n (simpl_plus_r h n0 n (sym_eq nat (plus n h) (plus
315 n0 h) H4))) (plus n0 h) H4)))]) in (H3 (refl_equal T (TLRef (plus n0
316 h)))))))))) (\lambda (k: K).(\lambda (t0: T).(\lambda (_: (((eq T (TLRef
317 (plus n h)) (lift h d t0)) \to (eq T t0 (TLRef n))))).(\lambda (t1:
318 T).(\lambda (_: (((eq T (TLRef (plus n h)) (lift h d t1)) \to (eq T t1 (TLRef
319 n))))).(\lambda (H2: (eq T (TLRef (plus n h)) (lift h d (THead k t0
320 t1)))).(let H3 \def (eq_ind T (lift h d (THead k t0 t1)) (\lambda (t2: T).(eq
321 T (TLRef (plus n h)) t2)) H2 (THead k (lift h d t0) (lift h (s k d) t1))
322 (lift_head k t0 t1 h d)) in (let H4 \def (match H3 in eq return (\lambda (t2:
323 T).(\lambda (_: (eq ? ? t2)).((eq T t2 (THead k (lift h d t0) (lift h (s k d)
324 t1))) \to (eq T (THead k t0 t1) (TLRef n))))) with [refl_equal \Rightarrow
325 (\lambda (H4: (eq T (TLRef (plus n h)) (THead k (lift h d t0) (lift h (s k d)
326 t1)))).(let H5 \def (eq_ind T (TLRef (plus n h)) (\lambda (e: T).(match e in
327 T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _)
328 \Rightarrow True | (THead _ _ _) \Rightarrow False])) I (THead k (lift h d
329 t0) (lift h (s k d) t1)) H4) in (False_ind (eq T (THead k t0 t1) (TLRef n))
330 H5)))]) in (H4 (refl_equal T (THead k (lift h d t0) (lift h (s k d)
331 t1)))))))))))) t))))).
333 theorem lift_gen_head:
334 \forall (k: K).(\forall (u: T).(\forall (t: T).(\forall (x: T).(\forall (h:
335 nat).(\forall (d: nat).((eq T (THead k u t) (lift h d x)) \to (ex3_2 T T
336 (\lambda (y: T).(\lambda (z: T).(eq T x (THead k y z)))) (\lambda (y:
337 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
338 T).(eq T t (lift h (s k d) z)))))))))))
340 \lambda (k: K).(\lambda (u: T).(\lambda (t: T).(\lambda (x: T).(T_ind
341 (\lambda (t0: T).(\forall (h: nat).(\forall (d: nat).((eq T (THead k u t)
342 (lift h d t0)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t0 (THead
343 k y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda
344 (_: T).(\lambda (z: T).(eq T t (lift h (s k d) z))))))))) (\lambda (n:
345 nat).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H: (eq T (THead k u t)
346 (lift h d (TSort n)))).(let H0 \def (match H in eq return (\lambda (t0:
347 T).(\lambda (_: (eq ? ? t0)).((eq T t0 (lift h d (TSort n))) \to (ex3_2 T T
348 (\lambda (y: T).(\lambda (z: T).(eq T (TSort n) (THead k y z)))) (\lambda (y:
349 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
350 T).(eq T t (lift h (s k d) z)))))))) with [refl_equal \Rightarrow (\lambda
351 (H0: (eq T (THead k u t) (lift h d (TSort n)))).(let H1 \def (eq_ind T (THead
352 k u t) (\lambda (e: T).(match e in T return (\lambda (_: T).Prop) with
353 [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False | (THead _ _ _)
354 \Rightarrow True])) I (lift h d (TSort n)) H0) in (False_ind (ex3_2 T T
355 (\lambda (y: T).(\lambda (z: T).(eq T (TSort n) (THead k y z)))) (\lambda (y:
356 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
357 T).(eq T t (lift h (s k d) z))))) H1)))]) in (H0 (refl_equal T (lift h d
358 (TSort n))))))))) (\lambda (n: nat).(\lambda (h: nat).(\lambda (d:
359 nat).(\lambda (H: (eq T (THead k u t) (lift h d (TLRef n)))).(lt_le_e n d
360 (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead k y z))))
361 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
362 T).(\lambda (z: T).(eq T t (lift h (s k d) z))))) (\lambda (H0: (lt n
363 d)).(let H1 \def (eq_ind T (lift h d (TLRef n)) (\lambda (t0: T).(eq T (THead
364 k u t) t0)) H (TLRef n) (lift_lref_lt n h d H0)) in (let H2 \def (match H1 in
365 eq return (\lambda (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (TLRef n)) \to
366 (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead k y z))))
367 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
368 T).(\lambda (z: T).(eq T t (lift h (s k d) z)))))))) with [refl_equal
369 \Rightarrow (\lambda (H2: (eq T (THead k u t) (TLRef n))).(let H3 \def
370 (eq_ind T (THead k u t) (\lambda (e: T).(match e in T return (\lambda (_:
371 T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False |
372 (THead _ _ _) \Rightarrow True])) I (TLRef n) H2) in (False_ind (ex3_2 T T
373 (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead k y z)))) (\lambda (y:
374 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
375 T).(eq T t (lift h (s k d) z))))) H3)))]) in (H2 (refl_equal T (TLRef n))))))
376 (\lambda (H0: (le d n)).(let H1 \def (eq_ind T (lift h d (TLRef n)) (\lambda
377 (t0: T).(eq T (THead k u t) t0)) H (TLRef (plus n h)) (lift_lref_ge n h d
378 H0)) in (let H2 \def (match H1 in eq return (\lambda (t0: T).(\lambda (_: (eq
379 ? ? t0)).((eq T t0 (TLRef (plus n h))) \to (ex3_2 T T (\lambda (y:
380 T).(\lambda (z: T).(eq T (TLRef n) (THead k y z)))) (\lambda (y: T).(\lambda
381 (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift
382 h (s k d) z)))))))) with [refl_equal \Rightarrow (\lambda (H2: (eq T (THead k
383 u t) (TLRef (plus n h)))).(let H3 \def (eq_ind T (THead k u t) (\lambda (e:
384 T).(match e in T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow
385 False | (TLRef _) \Rightarrow False | (THead _ _ _) \Rightarrow True])) I
386 (TLRef (plus n h)) H2) in (False_ind (ex3_2 T T (\lambda (y: T).(\lambda (z:
387 T).(eq T (TLRef n) (THead k y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u
388 (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (s k d)
389 z))))) H3)))]) in (H2 (refl_equal T (TLRef (plus n h)))))))))))) (\lambda
390 (k0: K).(\lambda (t0: T).(\lambda (_: ((\forall (h: nat).(\forall (d:
391 nat).((eq T (THead k u t) (lift h d t0)) \to (ex3_2 T T (\lambda (y:
392 T).(\lambda (z: T).(eq T t0 (THead k y z)))) (\lambda (y: T).(\lambda (_:
393 T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (s
394 k d) z)))))))))).(\lambda (t1: T).(\lambda (_: ((\forall (h: nat).(\forall
395 (d: nat).((eq T (THead k u t) (lift h d t1)) \to (ex3_2 T T (\lambda (y:
396 T).(\lambda (z: T).(eq T t1 (THead k y z)))) (\lambda (y: T).(\lambda (_:
397 T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (s
398 k d) z)))))))))).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H1: (eq T
399 (THead k u t) (lift h d (THead k0 t0 t1)))).(let H2 \def (eq_ind T (lift h d
400 (THead k0 t0 t1)) (\lambda (t2: T).(eq T (THead k u t) t2)) H1 (THead k0
401 (lift h d t0) (lift h (s k0 d) t1)) (lift_head k0 t0 t1 h d)) in (let H3 \def
402 (match H2 in eq return (\lambda (t2: T).(\lambda (_: (eq ? ? t2)).((eq T t2
403 (THead k0 (lift h d t0) (lift h (s k0 d) t1))) \to (ex3_2 T T (\lambda (y:
404 T).(\lambda (z: T).(eq T (THead k0 t0 t1) (THead k y z)))) (\lambda (y:
405 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
406 T).(eq T t (lift h (s k d) z)))))))) with [refl_equal \Rightarrow (\lambda
407 (H3: (eq T (THead k u t) (THead k0 (lift h d t0) (lift h (s k0 d) t1)))).(let
408 H4 \def (f_equal T T (\lambda (e: T).(match e in T return (\lambda (_: T).T)
409 with [(TSort _) \Rightarrow t | (TLRef _) \Rightarrow t | (THead _ _ t2)
410 \Rightarrow t2])) (THead k u t) (THead k0 (lift h d t0) (lift h (s k0 d) t1))
411 H3) in ((let H5 \def (f_equal T T (\lambda (e: T).(match e in T return
412 (\lambda (_: T).T) with [(TSort _) \Rightarrow u | (TLRef _) \Rightarrow u |
413 (THead _ t2 _) \Rightarrow t2])) (THead k u t) (THead k0 (lift h d t0) (lift
414 h (s k0 d) t1)) H3) in ((let H6 \def (f_equal T K (\lambda (e: T).(match e in
415 T return (\lambda (_: T).K) with [(TSort _) \Rightarrow k | (TLRef _)
416 \Rightarrow k | (THead k1 _ _) \Rightarrow k1])) (THead k u t) (THead k0
417 (lift h d t0) (lift h (s k0 d) t1)) H3) in (eq_ind K k0 (\lambda (k1: K).((eq
418 T u (lift h d t0)) \to ((eq T t (lift h (s k0 d) t1)) \to (ex3_2 T T (\lambda
419 (y: T).(\lambda (z: T).(eq T (THead k0 t0 t1) (THead k1 y z)))) (\lambda (y:
420 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
421 T).(eq T t (lift h (s k1 d) z)))))))) (\lambda (H7: (eq T u (lift h d
422 t0))).(eq_ind T (lift h d t0) (\lambda (t2: T).((eq T t (lift h (s k0 d) t1))
423 \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (THead k0 t0 t1) (THead
424 k0 y z)))) (\lambda (y: T).(\lambda (_: T).(eq T t2 (lift h d y)))) (\lambda
425 (_: T).(\lambda (z: T).(eq T t (lift h (s k0 d) z))))))) (\lambda (H8: (eq T
426 t (lift h (s k0 d) t1))).(eq_ind T (lift h (s k0 d) t1) (\lambda (t2:
427 T).(ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (THead k0 t0 t1) (THead
428 k0 y z)))) (\lambda (y: T).(\lambda (_: T).(eq T (lift h d t0) (lift h d
429 y)))) (\lambda (_: T).(\lambda (z: T).(eq T t2 (lift h (s k0 d) z))))))
430 (ex3_2_intro T T (\lambda (y: T).(\lambda (z: T).(eq T (THead k0 t0 t1)
431 (THead k0 y z)))) (\lambda (y: T).(\lambda (_: T).(eq T (lift h d t0) (lift h
432 d y)))) (\lambda (_: T).(\lambda (z: T).(eq T (lift h (s k0 d) t1) (lift h (s
433 k0 d) z)))) t0 t1 (refl_equal T (THead k0 t0 t1)) (refl_equal T (lift h d
434 t0)) (refl_equal T (lift h (s k0 d) t1))) t (sym_eq T t (lift h (s k0 d) t1)
435 H8))) u (sym_eq T u (lift h d t0) H7))) k (sym_eq K k k0 H6))) H5)) H4)))])
436 in (H3 (refl_equal T (THead k0 (lift h d t0) (lift h (s k0 d)
437 t1)))))))))))))) x)))).
439 theorem lift_gen_bind:
440 \forall (b: B).(\forall (u: T).(\forall (t: T).(\forall (x: T).(\forall (h:
441 nat).(\forall (d: nat).((eq T (THead (Bind b) u t) (lift h d x)) \to (ex3_2 T
442 T (\lambda (y: T).(\lambda (z: T).(eq T x (THead (Bind b) y z)))) (\lambda
443 (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
444 T).(eq T t (lift h (S d) z)))))))))))
446 \lambda (b: B).(\lambda (u: T).(\lambda (t: T).(\lambda (x: T).(T_ind
447 (\lambda (t0: T).(\forall (h: nat).(\forall (d: nat).((eq T (THead (Bind b) u
448 t) (lift h d t0)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t0
449 (THead (Bind b) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d
450 y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (S d) z)))))))))
451 (\lambda (n: nat).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H: (eq T
452 (THead (Bind b) u t) (lift h d (TSort n)))).(let H0 \def (match H in eq
453 return (\lambda (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (lift h d (TSort
454 n))) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (TSort n) (THead
455 (Bind b) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y))))
456 (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (S d) z)))))))) with
457 [refl_equal \Rightarrow (\lambda (H0: (eq T (THead (Bind b) u t) (lift h d
458 (TSort n)))).(let H1 \def (eq_ind T (THead (Bind b) u t) (\lambda (e:
459 T).(match e in T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow
460 False | (TLRef _) \Rightarrow False | (THead _ _ _) \Rightarrow True])) I
461 (lift h d (TSort n)) H0) in (False_ind (ex3_2 T T (\lambda (y: T).(\lambda
462 (z: T).(eq T (TSort n) (THead (Bind b) y z)))) (\lambda (y: T).(\lambda (_:
463 T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (S
464 d) z))))) H1)))]) in (H0 (refl_equal T (lift h d (TSort n))))))))) (\lambda
465 (n: nat).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H: (eq T (THead (Bind
466 b) u t) (lift h d (TLRef n)))).(lt_le_e n d (ex3_2 T T (\lambda (y:
467 T).(\lambda (z: T).(eq T (TLRef n) (THead (Bind b) y z)))) (\lambda (y:
468 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
469 T).(eq T t (lift h (S d) z))))) (\lambda (H0: (lt n d)).(let H1 \def (eq_ind
470 T (lift h d (TLRef n)) (\lambda (t0: T).(eq T (THead (Bind b) u t) t0)) H
471 (TLRef n) (lift_lref_lt n h d H0)) in (let H2 \def (match H1 in eq return
472 (\lambda (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (TLRef n)) \to (ex3_2 T
473 T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead (Bind b) y z))))
474 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
475 T).(\lambda (z: T).(eq T t (lift h (S d) z)))))))) with [refl_equal
476 \Rightarrow (\lambda (H2: (eq T (THead (Bind b) u t) (TLRef n))).(let H3 \def
477 (eq_ind T (THead (Bind b) u t) (\lambda (e: T).(match e in T return (\lambda
478 (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False
479 | (THead _ _ _) \Rightarrow True])) I (TLRef n) H2) in (False_ind (ex3_2 T T
480 (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead (Bind b) y z))))
481 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
482 T).(\lambda (z: T).(eq T t (lift h (S d) z))))) H3)))]) in (H2 (refl_equal T
483 (TLRef n)))))) (\lambda (H0: (le d n)).(let H1 \def (eq_ind T (lift h d
484 (TLRef n)) (\lambda (t0: T).(eq T (THead (Bind b) u t) t0)) H (TLRef (plus n
485 h)) (lift_lref_ge n h d H0)) in (let H2 \def (match H1 in eq return (\lambda
486 (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (TLRef (plus n h))) \to (ex3_2 T
487 T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead (Bind b) y z))))
488 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
489 T).(\lambda (z: T).(eq T t (lift h (S d) z)))))))) with [refl_equal
490 \Rightarrow (\lambda (H2: (eq T (THead (Bind b) u t) (TLRef (plus n
491 h)))).(let H3 \def (eq_ind T (THead (Bind b) u t) (\lambda (e: T).(match e in
492 T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _)
493 \Rightarrow False | (THead _ _ _) \Rightarrow True])) I (TLRef (plus n h))
494 H2) in (False_ind (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n)
495 (THead (Bind b) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d
496 y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (S d) z))))) H3)))]) in
497 (H2 (refl_equal T (TLRef (plus n h)))))))))))) (\lambda (k: K).(\lambda (t0:
498 T).(\lambda (_: ((\forall (h: nat).(\forall (d: nat).((eq T (THead (Bind b) u
499 t) (lift h d t0)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t0
500 (THead (Bind b) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d
501 y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (S d)
502 z)))))))))).(\lambda (t1: T).(\lambda (_: ((\forall (h: nat).(\forall (d:
503 nat).((eq T (THead (Bind b) u t) (lift h d t1)) \to (ex3_2 T T (\lambda (y:
504 T).(\lambda (z: T).(eq T t1 (THead (Bind b) y z)))) (\lambda (y: T).(\lambda
505 (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift
506 h (S d) z)))))))))).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H1: (eq T
507 (THead (Bind b) u t) (lift h d (THead k t0 t1)))).(let H2 \def (eq_ind T
508 (lift h d (THead k t0 t1)) (\lambda (t2: T).(eq T (THead (Bind b) u t) t2))
509 H1 (THead k (lift h d t0) (lift h (s k d) t1)) (lift_head k t0 t1 h d)) in
510 (let H3 \def (match H2 in eq return (\lambda (t2: T).(\lambda (_: (eq ? ?
511 t2)).((eq T t2 (THead k (lift h d t0) (lift h (s k d) t1))) \to (ex3_2 T T
512 (\lambda (y: T).(\lambda (z: T).(eq T (THead k t0 t1) (THead (Bind b) y z))))
513 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
514 T).(\lambda (z: T).(eq T t (lift h (S d) z)))))))) with [refl_equal
515 \Rightarrow (\lambda (H3: (eq T (THead (Bind b) u t) (THead k (lift h d t0)
516 (lift h (s k d) t1)))).(let H4 \def (f_equal T T (\lambda (e: T).(match e in
517 T return (\lambda (_: T).T) with [(TSort _) \Rightarrow t | (TLRef _)
518 \Rightarrow t | (THead _ _ t2) \Rightarrow t2])) (THead (Bind b) u t) (THead
519 k (lift h d t0) (lift h (s k d) t1)) H3) in ((let H5 \def (f_equal T T
520 (\lambda (e: T).(match e in T return (\lambda (_: T).T) with [(TSort _)
521 \Rightarrow u | (TLRef _) \Rightarrow u | (THead _ t2 _) \Rightarrow t2]))
522 (THead (Bind b) u t) (THead k (lift h d t0) (lift h (s k d) t1)) H3) in ((let
523 H6 \def (f_equal T K (\lambda (e: T).(match e in T return (\lambda (_: T).K)
524 with [(TSort _) \Rightarrow (Bind b) | (TLRef _) \Rightarrow (Bind b) |
525 (THead k0 _ _) \Rightarrow k0])) (THead (Bind b) u t) (THead k (lift h d t0)
526 (lift h (s k d) t1)) H3) in (eq_ind K (Bind b) (\lambda (k0: K).((eq T u
527 (lift h d t0)) \to ((eq T t (lift h (s k0 d) t1)) \to (ex3_2 T T (\lambda (y:
528 T).(\lambda (z: T).(eq T (THead k0 t0 t1) (THead (Bind b) y z)))) (\lambda
529 (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
530 T).(eq T t (lift h (S d) z)))))))) (\lambda (H7: (eq T u (lift h d
531 t0))).(eq_ind T (lift h d t0) (\lambda (t2: T).((eq T t (lift h (s (Bind b)
532 d) t1)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (THead (Bind b)
533 t0 t1) (THead (Bind b) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T t2 (lift
534 h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (S d) z)))))))
535 (\lambda (H8: (eq T t (lift h (s (Bind b) d) t1))).(eq_ind T (lift h (s (Bind
536 b) d) t1) (\lambda (t2: T).(ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T
537 (THead (Bind b) t0 t1) (THead (Bind b) y z)))) (\lambda (y: T).(\lambda (_:
538 T).(eq T (lift h d t0) (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T
539 t2 (lift h (S d) z)))))) (ex3_2_intro T T (\lambda (y: T).(\lambda (z: T).(eq
540 T (THead (Bind b) t0 t1) (THead (Bind b) y z)))) (\lambda (y: T).(\lambda (_:
541 T).(eq T (lift h d t0) (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T
542 (lift h (s (Bind b) d) t1) (lift h (S d) z)))) t0 t1 (refl_equal T (THead
543 (Bind b) t0 t1)) (refl_equal T (lift h d t0)) (refl_equal T (lift h (S d)
544 t1))) t (sym_eq T t (lift h (s (Bind b) d) t1) H8))) u (sym_eq T u (lift h d
545 t0) H7))) k H6)) H5)) H4)))]) in (H3 (refl_equal T (THead k (lift h d t0)
546 (lift h (s k d) t1)))))))))))))) x)))).
548 theorem lift_gen_flat:
549 \forall (f: F).(\forall (u: T).(\forall (t: T).(\forall (x: T).(\forall (h:
550 nat).(\forall (d: nat).((eq T (THead (Flat f) u t) (lift h d x)) \to (ex3_2 T
551 T (\lambda (y: T).(\lambda (z: T).(eq T x (THead (Flat f) y z)))) (\lambda
552 (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
553 T).(eq T t (lift h d z)))))))))))
555 \lambda (f: F).(\lambda (u: T).(\lambda (t: T).(\lambda (x: T).(T_ind
556 (\lambda (t0: T).(\forall (h: nat).(\forall (d: nat).((eq T (THead (Flat f) u
557 t) (lift h d t0)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t0
558 (THead (Flat f) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d
559 y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h d z))))))))) (\lambda
560 (n: nat).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H: (eq T (THead (Flat
561 f) u t) (lift h d (TSort n)))).(let H0 \def (match H in eq return (\lambda
562 (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (lift h d (TSort n))) \to (ex3_2
563 T T (\lambda (y: T).(\lambda (z: T).(eq T (TSort n) (THead (Flat f) y z))))
564 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
565 T).(\lambda (z: T).(eq T t (lift h d z)))))))) with [refl_equal \Rightarrow
566 (\lambda (H0: (eq T (THead (Flat f) u t) (lift h d (TSort n)))).(let H1 \def
567 (eq_ind T (THead (Flat f) u t) (\lambda (e: T).(match e in T return (\lambda
568 (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False
569 | (THead _ _ _) \Rightarrow True])) I (lift h d (TSort n)) H0) in (False_ind
570 (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (TSort n) (THead (Flat f) y
571 z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
572 T).(\lambda (z: T).(eq T t (lift h d z))))) H1)))]) in (H0 (refl_equal T
573 (lift h d (TSort n))))))))) (\lambda (n: nat).(\lambda (h: nat).(\lambda (d:
574 nat).(\lambda (H: (eq T (THead (Flat f) u t) (lift h d (TLRef n)))).(lt_le_e
575 n d (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead (Flat
576 f) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda
577 (_: T).(\lambda (z: T).(eq T t (lift h d z))))) (\lambda (H0: (lt n d)).(let
578 H1 \def (eq_ind T (lift h d (TLRef n)) (\lambda (t0: T).(eq T (THead (Flat f)
579 u t) t0)) H (TLRef n) (lift_lref_lt n h d H0)) in (let H2 \def (match H1 in
580 eq return (\lambda (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (TLRef n)) \to
581 (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead (Flat f) y
582 z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
583 T).(\lambda (z: T).(eq T t (lift h d z)))))))) with [refl_equal \Rightarrow
584 (\lambda (H2: (eq T (THead (Flat f) u t) (TLRef n))).(let H3 \def (eq_ind T
585 (THead (Flat f) u t) (\lambda (e: T).(match e in T return (\lambda (_:
586 T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False |
587 (THead _ _ _) \Rightarrow True])) I (TLRef n) H2) in (False_ind (ex3_2 T T
588 (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead (Flat f) y z))))
589 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
590 T).(\lambda (z: T).(eq T t (lift h d z))))) H3)))]) in (H2 (refl_equal T
591 (TLRef n)))))) (\lambda (H0: (le d n)).(let H1 \def (eq_ind T (lift h d
592 (TLRef n)) (\lambda (t0: T).(eq T (THead (Flat f) u t) t0)) H (TLRef (plus n
593 h)) (lift_lref_ge n h d H0)) in (let H2 \def (match H1 in eq return (\lambda
594 (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (TLRef (plus n h))) \to (ex3_2 T
595 T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead (Flat f) y z))))
596 (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
597 T).(\lambda (z: T).(eq T t (lift h d z)))))))) with [refl_equal \Rightarrow
598 (\lambda (H2: (eq T (THead (Flat f) u t) (TLRef (plus n h)))).(let H3 \def
599 (eq_ind T (THead (Flat f) u t) (\lambda (e: T).(match e in T return (\lambda
600 (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False
601 | (THead _ _ _) \Rightarrow True])) I (TLRef (plus n h)) H2) in (False_ind
602 (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead (Flat f) y
603 z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
604 T).(\lambda (z: T).(eq T t (lift h d z))))) H3)))]) in (H2 (refl_equal T
605 (TLRef (plus n h)))))))))))) (\lambda (k: K).(\lambda (t0: T).(\lambda (_:
606 ((\forall (h: nat).(\forall (d: nat).((eq T (THead (Flat f) u t) (lift h d
607 t0)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t0 (THead (Flat f)
608 y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
609 T).(\lambda (z: T).(eq T t (lift h d z)))))))))).(\lambda (t1: T).(\lambda
610 (_: ((\forall (h: nat).(\forall (d: nat).((eq T (THead (Flat f) u t) (lift h
611 d t1)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t1 (THead (Flat
612 f) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda
613 (_: T).(\lambda (z: T).(eq T t (lift h d z)))))))))).(\lambda (h:
614 nat).(\lambda (d: nat).(\lambda (H1: (eq T (THead (Flat f) u t) (lift h d
615 (THead k t0 t1)))).(let H2 \def (eq_ind T (lift h d (THead k t0 t1)) (\lambda
616 (t2: T).(eq T (THead (Flat f) u t) t2)) H1 (THead k (lift h d t0) (lift h (s
617 k d) t1)) (lift_head k t0 t1 h d)) in (let H3 \def (match H2 in eq return
618 (\lambda (t2: T).(\lambda (_: (eq ? ? t2)).((eq T t2 (THead k (lift h d t0)
619 (lift h (s k d) t1))) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T
620 (THead k t0 t1) (THead (Flat f) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T
621 u (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h d z))))))))
622 with [refl_equal \Rightarrow (\lambda (H3: (eq T (THead (Flat f) u t) (THead
623 k (lift h d t0) (lift h (s k d) t1)))).(let H4 \def (f_equal T T (\lambda (e:
624 T).(match e in T return (\lambda (_: T).T) with [(TSort _) \Rightarrow t |
625 (TLRef _) \Rightarrow t | (THead _ _ t2) \Rightarrow t2])) (THead (Flat f) u
626 t) (THead k (lift h d t0) (lift h (s k d) t1)) H3) in ((let H5 \def (f_equal
627 T T (\lambda (e: T).(match e in T return (\lambda (_: T).T) with [(TSort _)
628 \Rightarrow u | (TLRef _) \Rightarrow u | (THead _ t2 _) \Rightarrow t2]))
629 (THead (Flat f) u t) (THead k (lift h d t0) (lift h (s k d) t1)) H3) in ((let
630 H6 \def (f_equal T K (\lambda (e: T).(match e in T return (\lambda (_: T).K)
631 with [(TSort _) \Rightarrow (Flat f) | (TLRef _) \Rightarrow (Flat f) |
632 (THead k0 _ _) \Rightarrow k0])) (THead (Flat f) u t) (THead k (lift h d t0)
633 (lift h (s k d) t1)) H3) in (eq_ind K (Flat f) (\lambda (k0: K).((eq T u
634 (lift h d t0)) \to ((eq T t (lift h (s k0 d) t1)) \to (ex3_2 T T (\lambda (y:
635 T).(\lambda (z: T).(eq T (THead k0 t0 t1) (THead (Flat f) y z)))) (\lambda
636 (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
637 T).(eq T t (lift h d z)))))))) (\lambda (H7: (eq T u (lift h d t0))).(eq_ind
638 T (lift h d t0) (\lambda (t2: T).((eq T t (lift h (s (Flat f) d) t1)) \to
639 (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (THead (Flat f) t0 t1)
640 (THead (Flat f) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T t2 (lift h d
641 y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h d z))))))) (\lambda
642 (H8: (eq T t (lift h (s (Flat f) d) t1))).(eq_ind T (lift h (s (Flat f) d)
643 t1) (\lambda (t2: T).(ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (THead
644 (Flat f) t0 t1) (THead (Flat f) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T
645 (lift h d t0) (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t2 (lift
646 h d z)))))) (ex3_2_intro T T (\lambda (y: T).(\lambda (z: T).(eq T (THead
647 (Flat f) t0 t1) (THead (Flat f) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T
648 (lift h d t0) (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T (lift h
649 (s (Flat f) d) t1) (lift h d z)))) t0 t1 (refl_equal T (THead (Flat f) t0
650 t1)) (refl_equal T (lift h d t0)) (refl_equal T (lift h d t1))) t (sym_eq T t
651 (lift h (s (Flat f) d) t1) H8))) u (sym_eq T u (lift h d t0) H7))) k H6))
652 H5)) H4)))]) in (H3 (refl_equal T (THead k (lift h d t0) (lift h (s k d)
653 t1)))))))))))))) x)))).