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 include "LambdaDelta-1/lift/defs.ma".
20 \forall (n: nat).(\forall (h: nat).(\forall (d: nat).(eq T (lift h d (TSort
23 \lambda (n: nat).(\lambda (_: nat).(\lambda (_: nat).(refl_equal T (TSort
27 \forall (n: nat).(\forall (h: nat).(\forall (d: nat).((lt n d) \to (eq T
28 (lift h d (TLRef n)) (TLRef n)))))
30 \lambda (n: nat).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H: (lt n
31 d)).(eq_ind bool true (\lambda (b: bool).(eq T (TLRef (match b with [true
32 \Rightarrow n | false \Rightarrow (plus n h)])) (TLRef n))) (refl_equal T
33 (TLRef n)) (blt n d) (sym_eq bool (blt n d) true (lt_blt d n H)))))).
36 \forall (n: nat).(\forall (h: nat).(\forall (d: nat).((le d n) \to (eq T
37 (lift h d (TLRef n)) (TLRef (plus n h))))))
39 \lambda (n: nat).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H: (le d
40 n)).(eq_ind bool false (\lambda (b: bool).(eq T (TLRef (match b with [true
41 \Rightarrow n | false \Rightarrow (plus n h)])) (TLRef (plus n h))))
42 (refl_equal T (TLRef (plus n h))) (blt n d) (sym_eq bool (blt n d) false
46 \forall (k: K).(\forall (u: T).(\forall (t: T).(\forall (h: nat).(\forall
47 (d: nat).(eq T (lift h d (THead k u t)) (THead k (lift h d u) (lift h (s k d)
50 \lambda (k: K).(\lambda (u: T).(\lambda (t: T).(\lambda (h: nat).(\lambda
51 (d: nat).(refl_equal T (THead k (lift h d u) (lift h (s k d) t))))))).
54 \forall (b: B).(\forall (u: T).(\forall (t: T).(\forall (h: nat).(\forall
55 (d: nat).(eq T (lift h d (THead (Bind b) u t)) (THead (Bind b) (lift h d u)
56 (lift h (S d) t)))))))
58 \lambda (b: B).(\lambda (u: T).(\lambda (t: T).(\lambda (h: nat).(\lambda
59 (d: nat).(refl_equal T (THead (Bind b) (lift h d u) (lift h (S d) t))))))).
62 \forall (f: F).(\forall (u: T).(\forall (t: T).(\forall (h: nat).(\forall
63 (d: nat).(eq T (lift h d (THead (Flat f) u t)) (THead (Flat f) (lift h d u)
66 \lambda (f: F).(\lambda (u: T).(\lambda (t: T).(\lambda (h: nat).(\lambda
67 (d: nat).(refl_equal T (THead (Flat f) (lift h d u) (lift h d t))))))).
69 theorem lift_gen_sort:
70 \forall (h: nat).(\forall (d: nat).(\forall (n: nat).(\forall (t: T).((eq T
71 (TSort n) (lift h d t)) \to (eq T t (TSort n))))))
73 \lambda (h: nat).(\lambda (d: nat).(\lambda (n: nat).(\lambda (t: T).(T_ind
74 (\lambda (t0: T).((eq T (TSort n) (lift h d t0)) \to (eq T t0 (TSort n))))
75 (\lambda (n0: nat).(\lambda (H: (eq T (TSort n) (lift h d (TSort
76 n0)))).(sym_eq T (TSort n) (TSort n0) H))) (\lambda (n0: nat).(\lambda (H:
77 (eq T (TSort n) (lift h d (TLRef n0)))).(lt_le_e n0 d (eq T (TLRef n0) (TSort
78 n)) (\lambda (_: (lt n0 d)).(let H1 \def (eq_ind T (lift h d (TLRef n0))
79 (\lambda (t0: T).(eq T (TSort n) t0)) H (TLRef n0) (lift_lref_lt n0 h d (let
80 H1 \def (eq_ind T (TSort n) (\lambda (ee: T).(match ee in T return (\lambda
81 (_: T).Prop) with [(TSort _) \Rightarrow True | (TLRef _) \Rightarrow False |
82 (THead _ _ _) \Rightarrow False])) I (lift h d (TLRef n0)) H) in (False_ind
83 (lt n0 d) H1)))) in (let H2 \def (eq_ind T (TSort n) (\lambda (ee: T).(match
84 ee in T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow True |
85 (TLRef _) \Rightarrow False | (THead _ _ _) \Rightarrow False])) I (TLRef n0)
86 H1) in (False_ind (eq T (TLRef n0) (TSort n)) H2)))) (\lambda (_: (le d
87 n0)).(let H1 \def (eq_ind T (lift h d (TLRef n0)) (\lambda (t0: T).(eq T
88 (TSort n) t0)) H (TLRef (plus n0 h)) (lift_lref_ge n0 h d (let H1 \def
89 (eq_ind T (TSort n) (\lambda (ee: T).(match ee in T return (\lambda (_:
90 T).Prop) with [(TSort _) \Rightarrow True | (TLRef _) \Rightarrow False |
91 (THead _ _ _) \Rightarrow False])) I (lift h d (TLRef n0)) H) in (False_ind
92 (le d n0) H1)))) in (let H2 \def (eq_ind T (TSort n) (\lambda (ee: T).(match
93 ee in T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow True |
94 (TLRef _) \Rightarrow False | (THead _ _ _) \Rightarrow False])) I (TLRef
95 (plus n0 h)) H1) in (False_ind (eq T (TLRef n0) (TSort n)) H2))))))) (\lambda
96 (k: K).(\lambda (t0: T).(\lambda (_: (((eq T (TSort n) (lift h d t0)) \to (eq
97 T t0 (TSort n))))).(\lambda (t1: T).(\lambda (_: (((eq T (TSort n) (lift h d
98 t1)) \to (eq T t1 (TSort n))))).(\lambda (H1: (eq T (TSort n) (lift h d
99 (THead k t0 t1)))).(let H2 \def (eq_ind T (lift h d (THead k t0 t1)) (\lambda
100 (t2: T).(eq T (TSort n) t2)) H1 (THead k (lift h d t0) (lift h (s k d) t1))
101 (lift_head k t0 t1 h d)) in (let H3 \def (eq_ind T (TSort n) (\lambda (ee:
102 T).(match ee in T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow
103 True | (TLRef _) \Rightarrow False | (THead _ _ _) \Rightarrow False])) I
104 (THead k (lift h d t0) (lift h (s k d) t1)) H2) in (False_ind (eq T (THead k
105 t0 t1) (TSort n)) H3))))))))) t)))).
107 theorem lift_gen_lref:
108 \forall (t: T).(\forall (d: nat).(\forall (h: nat).(\forall (i: nat).((eq T
109 (TLRef i) (lift h d t)) \to (or (land (lt i d) (eq T t (TLRef i))) (land (le
110 (plus d h) i) (eq T t (TLRef (minus i h)))))))))
112 \lambda (t: T).(T_ind (\lambda (t0: T).(\forall (d: nat).(\forall (h:
113 nat).(\forall (i: nat).((eq T (TLRef i) (lift h d t0)) \to (or (land (lt i d)
114 (eq T t0 (TLRef i))) (land (le (plus d h) i) (eq T t0 (TLRef (minus i
115 h)))))))))) (\lambda (n: nat).(\lambda (d: nat).(\lambda (h: nat).(\lambda
116 (i: nat).(\lambda (H: (eq T (TLRef i) (lift h d (TSort n)))).(let H0 \def
117 (eq_ind T (lift h d (TSort n)) (\lambda (t0: T).(eq T (TLRef i) t0)) H (TSort
118 n) (lift_sort n h d)) in (let H1 \def (eq_ind T (TLRef i) (\lambda (ee:
119 T).(match ee in T return (\lambda (_: T).Prop) with [(TSort _) \Rightarrow
120 False | (TLRef _) \Rightarrow True | (THead _ _ _) \Rightarrow False])) I
121 (TSort n) H0) in (False_ind (or (land (lt i d) (eq T (TSort n) (TLRef i)))
122 (land (le (plus d h) i) (eq T (TSort n) (TLRef (minus i h))))) H1))))))))
123 (\lambda (n: nat).(\lambda (d: nat).(\lambda (h: nat).(\lambda (i:
124 nat).(\lambda (H: (eq T (TLRef i) (lift h d (TLRef n)))).(lt_le_e n d (or
125 (land (lt i d) (eq T (TLRef n) (TLRef i))) (land (le (plus d h) i) (eq T
126 (TLRef n) (TLRef (minus i h))))) (\lambda (H0: (lt n d)).(let H1 \def (eq_ind
127 T (lift h d (TLRef n)) (\lambda (t0: T).(eq T (TLRef i) t0)) H (TLRef n)
128 (lift_lref_lt n h d H0)) in (let H2 \def (f_equal T nat (\lambda (e:
129 T).(match e in T return (\lambda (_: T).nat) with [(TSort _) \Rightarrow i |
130 (TLRef n0) \Rightarrow n0 | (THead _ _ _) \Rightarrow i])) (TLRef i) (TLRef
131 n) H1) in (eq_ind_r nat n (\lambda (n0: nat).(or (land (lt n0 d) (eq T (TLRef
132 n) (TLRef n0))) (land (le (plus d h) n0) (eq T (TLRef n) (TLRef (minus n0
133 h)))))) (or_introl (land (lt n d) (eq T (TLRef n) (TLRef n))) (land (le (plus
134 d h) n) (eq T (TLRef n) (TLRef (minus n h)))) (conj (lt n d) (eq T (TLRef n)
135 (TLRef n)) H0 (refl_equal T (TLRef n)))) i H2)))) (\lambda (H0: (le d
136 n)).(let H1 \def (eq_ind T (lift h d (TLRef n)) (\lambda (t0: T).(eq T (TLRef
137 i) t0)) H (TLRef (plus n h)) (lift_lref_ge n h d H0)) in (let H2 \def
138 (f_equal T nat (\lambda (e: T).(match e in T return (\lambda (_: T).nat) with
139 [(TSort _) \Rightarrow i | (TLRef n0) \Rightarrow n0 | (THead _ _ _)
140 \Rightarrow i])) (TLRef i) (TLRef (plus n h)) H1) in (eq_ind_r nat (plus n h)
141 (\lambda (n0: nat).(or (land (lt n0 d) (eq T (TLRef n) (TLRef n0))) (land (le
142 (plus d h) n0) (eq T (TLRef n) (TLRef (minus n0 h)))))) (eq_ind_r nat n
143 (\lambda (n0: nat).(or (land (lt (plus n h) d) (eq T (TLRef n) (TLRef (plus n
144 h)))) (land (le (plus d h) (plus n h)) (eq T (TLRef n) (TLRef n0)))))
145 (or_intror (land (lt (plus n h) d) (eq T (TLRef n) (TLRef (plus n h)))) (land
146 (le (plus d h) (plus n h)) (eq T (TLRef n) (TLRef n))) (conj (le (plus d h)
147 (plus n h)) (eq T (TLRef n) (TLRef n)) (le_plus_plus d n h h H0 (le_n h))
148 (refl_equal T (TLRef n)))) (minus (plus n h) h) (minus_plus_r n h)) i
149 H2)))))))))) (\lambda (k: K).(\lambda (t0: T).(\lambda (_: ((\forall (d:
150 nat).(\forall (h: nat).(\forall (i: nat).((eq T (TLRef i) (lift h d t0)) \to
151 (or (land (lt i d) (eq T t0 (TLRef i))) (land (le (plus d h) i) (eq T t0
152 (TLRef (minus i h))))))))))).(\lambda (t1: T).(\lambda (_: ((\forall (d:
153 nat).(\forall (h: nat).(\forall (i: nat).((eq T (TLRef i) (lift h d t1)) \to
154 (or (land (lt i d) (eq T t1 (TLRef i))) (land (le (plus d h) i) (eq T t1
155 (TLRef (minus i h))))))))))).(\lambda (d: nat).(\lambda (h: nat).(\lambda (i:
156 nat).(\lambda (H1: (eq T (TLRef i) (lift h d (THead k t0 t1)))).(let H2 \def
157 (eq_ind T (lift h d (THead k t0 t1)) (\lambda (t2: T).(eq T (TLRef i) t2)) H1
158 (THead k (lift h d t0) (lift h (s k d) t1)) (lift_head k t0 t1 h d)) in (let
159 H3 \def (eq_ind T (TLRef i) (\lambda (ee: T).(match ee in T return (\lambda
160 (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow True |
161 (THead _ _ _) \Rightarrow False])) I (THead k (lift h d t0) (lift h (s k d)
162 t1)) H2) in (False_ind (or (land (lt i d) (eq T (THead k t0 t1) (TLRef i)))
163 (land (le (plus d h) i) (eq T (THead k t0 t1) (TLRef (minus i h)))))
166 theorem lift_gen_lref_lt:
167 \forall (h: nat).(\forall (d: nat).(\forall (n: nat).((lt n d) \to (\forall
168 (t: T).((eq T (TLRef n) (lift h d t)) \to (eq T t (TLRef n)))))))
170 \lambda (h: nat).(\lambda (d: nat).(\lambda (n: nat).(\lambda (H: (lt n
171 d)).(\lambda (t: T).(\lambda (H0: (eq T (TLRef n) (lift h d t))).(let H_x
172 \def (lift_gen_lref t d h n H0) in (let H1 \def H_x in (or_ind (land (lt n d)
173 (eq T t (TLRef n))) (land (le (plus d h) n) (eq T t (TLRef (minus n h)))) (eq
174 T t (TLRef n)) (\lambda (H2: (land (lt n d) (eq T t (TLRef n)))).(land_ind
175 (lt n d) (eq T t (TLRef n)) (eq T t (TLRef n)) (\lambda (_: (lt n
176 d)).(\lambda (H4: (eq T t (TLRef n))).(eq_ind_r T (TLRef n) (\lambda (t0:
177 T).(eq T t0 (TLRef n))) (refl_equal T (TLRef n)) t H4))) H2)) (\lambda (H2:
178 (land (le (plus d h) n) (eq T t (TLRef (minus n h))))).(land_ind (le (plus d
179 h) n) (eq T t (TLRef (minus n h))) (eq T t (TLRef n)) (\lambda (H3: (le (plus
180 d h) n)).(\lambda (H4: (eq T t (TLRef (minus n h)))).(eq_ind_r T (TLRef
181 (minus n h)) (\lambda (t0: T).(eq T t0 (TLRef n))) (le_false (plus d h) n (eq
182 T (TLRef (minus n h)) (TLRef n)) H3 (lt_le_S n (plus d h) (le_plus_trans (S
183 n) d h H))) t H4))) H2)) H1)))))))).
185 theorem lift_gen_lref_false:
186 \forall (h: nat).(\forall (d: nat).(\forall (n: nat).((le d n) \to ((lt n
187 (plus d h)) \to (\forall (t: T).((eq T (TLRef n) (lift h d t)) \to (\forall
190 \lambda (h: nat).(\lambda (d: nat).(\lambda (n: nat).(\lambda (H: (le d
191 n)).(\lambda (H0: (lt n (plus d h))).(\lambda (t: T).(\lambda (H1: (eq T
192 (TLRef n) (lift h d t))).(\lambda (P: Prop).(let H_x \def (lift_gen_lref t d
193 h n H1) in (let H2 \def H_x in (or_ind (land (lt n d) (eq T t (TLRef n)))
194 (land (le (plus d h) n) (eq T t (TLRef (minus n h)))) P (\lambda (H3: (land
195 (lt n d) (eq T t (TLRef n)))).(land_ind (lt n d) (eq T t (TLRef n)) P
196 (\lambda (H4: (lt n d)).(\lambda (_: (eq T t (TLRef n))).(le_false d n P H
197 H4))) H3)) (\lambda (H3: (land (le (plus d h) n) (eq T t (TLRef (minus n
198 h))))).(land_ind (le (plus d h) n) (eq T t (TLRef (minus n h))) P (\lambda
199 (H4: (le (plus d h) n)).(\lambda (_: (eq T t (TLRef (minus n h)))).(le_false
200 (plus d h) n P H4 H0))) H3)) H2)))))))))).
202 theorem lift_gen_lref_ge:
203 \forall (h: nat).(\forall (d: nat).(\forall (n: nat).((le d n) \to (\forall
204 (t: T).((eq T (TLRef (plus n h)) (lift h d t)) \to (eq T t (TLRef n)))))))
206 \lambda (h: nat).(\lambda (d: nat).(\lambda (n: nat).(\lambda (H: (le d
207 n)).(\lambda (t: T).(\lambda (H0: (eq T (TLRef (plus n h)) (lift h d
208 t))).(let H_x \def (lift_gen_lref t d h (plus n h) H0) in (let H1 \def H_x in
209 (or_ind (land (lt (plus n h) d) (eq T t (TLRef (plus n h)))) (land (le (plus
210 d h) (plus n h)) (eq T t (TLRef (minus (plus n h) h)))) (eq T t (TLRef n))
211 (\lambda (H2: (land (lt (plus n h) d) (eq T t (TLRef (plus n h))))).(land_ind
212 (lt (plus n h) d) (eq T t (TLRef (plus n h))) (eq T t (TLRef n)) (\lambda
213 (H3: (lt (plus n h) d)).(\lambda (H4: (eq T t (TLRef (plus n h)))).(eq_ind_r
214 T (TLRef (plus n h)) (\lambda (t0: T).(eq T t0 (TLRef n))) (le_false d n (eq
215 T (TLRef (plus n h)) (TLRef n)) H (lt_le_S n d (simpl_lt_plus_r h n d
216 (lt_le_trans (plus n h) d (plus d h) H3 (le_plus_l d h))))) t H4))) H2))
217 (\lambda (H2: (land (le (plus d h) (plus n h)) (eq T t (TLRef (minus (plus n
218 h) h))))).(land_ind (le (plus d h) (plus n h)) (eq T t (TLRef (minus (plus n
219 h) h))) (eq T t (TLRef n)) (\lambda (_: (le (plus d h) (plus n h))).(\lambda
220 (H4: (eq T t (TLRef (minus (plus n h) h)))).(eq_ind_r T (TLRef (minus (plus n
221 h) h)) (\lambda (t0: T).(eq T t0 (TLRef n))) (f_equal nat T TLRef (minus
222 (plus n h) h) n (minus_plus_r n h)) t H4))) H2)) H1)))))))).
224 theorem lift_gen_head:
225 \forall (k: K).(\forall (u: T).(\forall (t: T).(\forall (x: T).(\forall (h:
226 nat).(\forall (d: nat).((eq T (THead k u t) (lift h d x)) \to (ex3_2 T T
227 (\lambda (y: T).(\lambda (z: T).(eq T x (THead k y z)))) (\lambda (y:
228 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
229 T).(eq T t (lift h (s k d) z)))))))))))
231 \lambda (k: K).(\lambda (u: T).(\lambda (t: T).(\lambda (x: T).(T_ind
232 (\lambda (t0: T).(\forall (h: nat).(\forall (d: nat).((eq T (THead k u t)
233 (lift h d t0)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t0 (THead
234 k y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda
235 (_: T).(\lambda (z: T).(eq T t (lift h (s k d) z))))))))) (\lambda (n:
236 nat).(\lambda (h: nat).(\lambda (d: nat).(\lambda (H: (eq T (THead k u t)
237 (lift h d (TSort n)))).(let H0 \def (eq_ind T (lift h d (TSort n)) (\lambda
238 (t0: T).(eq T (THead k u t) t0)) H (TSort n) (lift_sort n h d)) in (let H1
239 \def (eq_ind T (THead k u t) (\lambda (ee: T).(match ee in T return (\lambda
240 (_: T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False
241 | (THead _ _ _) \Rightarrow True])) I (TSort n) H0) in (False_ind (ex3_2 T T
242 (\lambda (y: T).(\lambda (z: T).(eq T (TSort n) (THead k y z)))) (\lambda (y:
243 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
244 T).(eq T t (lift h (s k d) z))))) H1))))))) (\lambda (n: nat).(\lambda (h:
245 nat).(\lambda (d: nat).(\lambda (H: (eq T (THead k u t) (lift h d (TLRef
246 n)))).(lt_le_e n d (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n)
247 (THead k y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y))))
248 (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (s k d) z))))) (\lambda (H0:
249 (lt n d)).(let H1 \def (eq_ind T (lift h d (TLRef n)) (\lambda (t0: T).(eq T
250 (THead k u t) t0)) H (TLRef n) (lift_lref_lt n h d H0)) in (let H2 \def
251 (eq_ind T (THead k u t) (\lambda (ee: T).(match ee in T return (\lambda (_:
252 T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False |
253 (THead _ _ _) \Rightarrow True])) I (TLRef n) H1) in (False_ind (ex3_2 T T
254 (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead k y z)))) (\lambda (y:
255 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
256 T).(eq T t (lift h (s k d) z))))) H2)))) (\lambda (H0: (le d n)).(let H1 \def
257 (eq_ind T (lift h d (TLRef n)) (\lambda (t0: T).(eq T (THead k u t) t0)) H
258 (TLRef (plus n h)) (lift_lref_ge n h d H0)) in (let H2 \def (eq_ind T (THead
259 k u t) (\lambda (ee: T).(match ee in T return (\lambda (_: T).Prop) with
260 [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow False | (THead _ _ _)
261 \Rightarrow True])) I (TLRef (plus n h)) H1) in (False_ind (ex3_2 T T
262 (\lambda (y: T).(\lambda (z: T).(eq T (TLRef n) (THead k y z)))) (\lambda (y:
263 T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
264 T).(eq T t (lift h (s k d) z))))) H2))))))))) (\lambda (k0: K).(\lambda (t0:
265 T).(\lambda (H: ((\forall (h: nat).(\forall (d: nat).((eq T (THead k u t)
266 (lift h d t0)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t0 (THead
267 k y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda
268 (_: T).(\lambda (z: T).(eq T t (lift h (s k d) z)))))))))).(\lambda (t1:
269 T).(\lambda (H0: ((\forall (h: nat).(\forall (d: nat).((eq T (THead k u t)
270 (lift h d t1)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t1 (THead
271 k y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda
272 (_: T).(\lambda (z: T).(eq T t (lift h (s k d) z)))))))))).(\lambda (h:
273 nat).(\lambda (d: nat).(\lambda (H1: (eq T (THead k u t) (lift h d (THead k0
274 t0 t1)))).(let H2 \def (eq_ind T (lift h d (THead k0 t0 t1)) (\lambda (t2:
275 T).(eq T (THead k u t) t2)) H1 (THead k0 (lift h d t0) (lift h (s k0 d) t1))
276 (lift_head k0 t0 t1 h d)) in (let H3 \def (f_equal T K (\lambda (e: T).(match
277 e in T return (\lambda (_: T).K) with [(TSort _) \Rightarrow k | (TLRef _)
278 \Rightarrow k | (THead k1 _ _) \Rightarrow k1])) (THead k u t) (THead k0
279 (lift h d t0) (lift h (s k0 d) t1)) H2) in ((let H4 \def (f_equal T T
280 (\lambda (e: T).(match e in T return (\lambda (_: T).T) with [(TSort _)
281 \Rightarrow u | (TLRef _) \Rightarrow u | (THead _ t2 _) \Rightarrow t2]))
282 (THead k u t) (THead k0 (lift h d t0) (lift h (s k0 d) t1)) H2) in ((let H5
283 \def (f_equal T T (\lambda (e: T).(match e in T return (\lambda (_: T).T)
284 with [(TSort _) \Rightarrow t | (TLRef _) \Rightarrow t | (THead _ _ t2)
285 \Rightarrow t2])) (THead k u t) (THead k0 (lift h d t0) (lift h (s k0 d) t1))
286 H2) in (\lambda (H6: (eq T u (lift h d t0))).(\lambda (H7: (eq K k k0)).(let
287 H8 \def (eq_ind_r K k0 (\lambda (k1: K).(eq T t (lift h (s k1 d) t1))) H5 k
288 H7) in (eq_ind K k (\lambda (k1: K).(ex3_2 T T (\lambda (y: T).(\lambda (z:
289 T).(eq T (THead k1 t0 t1) (THead k y z)))) (\lambda (y: T).(\lambda (_:
290 T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift h (s
291 k d) z)))))) (let H9 \def (eq_ind T t (\lambda (t2: T).(\forall (h0:
292 nat).(\forall (d0: nat).((eq T (THead k u t2) (lift h0 d0 t1)) \to (ex3_2 T T
293 (\lambda (y: T).(\lambda (z: T).(eq T t1 (THead k y z)))) (\lambda (y:
294 T).(\lambda (_: T).(eq T u (lift h0 d0 y)))) (\lambda (_: T).(\lambda (z:
295 T).(eq T t2 (lift h0 (s k d0) z))))))))) H0 (lift h (s k d) t1) H8) in (let
296 H10 \def (eq_ind T t (\lambda (t2: T).(\forall (h0: nat).(\forall (d0:
297 nat).((eq T (THead k u t2) (lift h0 d0 t0)) \to (ex3_2 T T (\lambda (y:
298 T).(\lambda (z: T).(eq T t0 (THead k y z)))) (\lambda (y: T).(\lambda (_:
299 T).(eq T u (lift h0 d0 y)))) (\lambda (_: T).(\lambda (z: T).(eq T t2 (lift
300 h0 (s k d0) z))))))))) H (lift h (s k d) t1) H8) in (eq_ind_r T (lift h (s k
301 d) t1) (\lambda (t2: T).(ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T
302 (THead k t0 t1) (THead k y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u
303 (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t2 (lift h (s k d)
304 z)))))) (let H11 \def (eq_ind T u (\lambda (t2: T).(\forall (h0:
305 nat).(\forall (d0: nat).((eq T (THead k t2 (lift h (s k d) t1)) (lift h0 d0
306 t0)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t0 (THead k y z))))
307 (\lambda (y: T).(\lambda (_: T).(eq T t2 (lift h0 d0 y)))) (\lambda (_:
308 T).(\lambda (z: T).(eq T (lift h (s k d) t1) (lift h0 (s k d0) z))))))))) H10
309 (lift h d t0) H6) in (let H12 \def (eq_ind T u (\lambda (t2: T).(\forall (h0:
310 nat).(\forall (d0: nat).((eq T (THead k t2 (lift h (s k d) t1)) (lift h0 d0
311 t1)) \to (ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t1 (THead k y z))))
312 (\lambda (y: T).(\lambda (_: T).(eq T t2 (lift h0 d0 y)))) (\lambda (_:
313 T).(\lambda (z: T).(eq T (lift h (s k d) t1) (lift h0 (s k d0) z))))))))) H9
314 (lift h d t0) H6) in (eq_ind_r T (lift h d t0) (\lambda (t2: T).(ex3_2 T T
315 (\lambda (y: T).(\lambda (z: T).(eq T (THead k t0 t1) (THead k y z))))
316 (\lambda (y: T).(\lambda (_: T).(eq T t2 (lift h d y)))) (\lambda (_:
317 T).(\lambda (z: T).(eq T (lift h (s k d) t1) (lift h (s k d) z))))))
318 (ex3_2_intro T T (\lambda (y: T).(\lambda (z: T).(eq T (THead k t0 t1) (THead
319 k y z)))) (\lambda (y: T).(\lambda (_: T).(eq T (lift h d t0) (lift h d y))))
320 (\lambda (_: T).(\lambda (z: T).(eq T (lift h (s k d) t1) (lift h (s k d)
321 z)))) t0 t1 (refl_equal T (THead k t0 t1)) (refl_equal T (lift h d t0))
322 (refl_equal T (lift h (s k d) t1))) u H6))) t H8))) k0 H7))))) H4))
325 theorem lift_gen_bind:
326 \forall (b: B).(\forall (u: T).(\forall (t: T).(\forall (x: T).(\forall (h:
327 nat).(\forall (d: nat).((eq T (THead (Bind b) u t) (lift h d x)) \to (ex3_2 T
328 T (\lambda (y: T).(\lambda (z: T).(eq T x (THead (Bind b) y z)))) (\lambda
329 (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
330 T).(eq T t (lift h (S d) z)))))))))))
332 \lambda (b: B).(\lambda (u: T).(\lambda (t: T).(\lambda (x: T).(\lambda (h:
333 nat).(\lambda (d: nat).(\lambda (H: (eq T (THead (Bind b) u t) (lift h d
334 x))).(let H_x \def (lift_gen_head (Bind b) u t x h d H) in (let H0 \def H_x
335 in (ex3_2_ind T T (\lambda (y: T).(\lambda (z: T).(eq T x (THead (Bind b) y
336 z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
337 T).(\lambda (z: T).(eq T t (lift h (S d) z)))) (ex3_2 T T (\lambda (y:
338 T).(\lambda (z: T).(eq T x (THead (Bind b) y z)))) (\lambda (y: T).(\lambda
339 (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift
340 h (S d) z))))) (\lambda (x0: T).(\lambda (x1: T).(\lambda (H1: (eq T x (THead
341 (Bind b) x0 x1))).(\lambda (H2: (eq T u (lift h d x0))).(\lambda (H3: (eq T t
342 (lift h (S d) x1))).(eq_ind_r T (THead (Bind b) x0 x1) (\lambda (t0:
343 T).(ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T t0 (THead (Bind b) y
344 z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
345 T).(\lambda (z: T).(eq T t (lift h (S d) z)))))) (eq_ind_r T (lift h (S d)
346 x1) (\lambda (t0: T).(ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (THead
347 (Bind b) x0 x1) (THead (Bind b) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T
348 u (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t0 (lift h (S d)
349 z)))))) (eq_ind_r T (lift h d x0) (\lambda (t0: T).(ex3_2 T T (\lambda (y:
350 T).(\lambda (z: T).(eq T (THead (Bind b) x0 x1) (THead (Bind b) y z))))
351 (\lambda (y: T).(\lambda (_: T).(eq T t0 (lift h d y)))) (\lambda (_:
352 T).(\lambda (z: T).(eq T (lift h (S d) x1) (lift h (S d) z)))))) (ex3_2_intro
353 T T (\lambda (y: T).(\lambda (z: T).(eq T (THead (Bind b) x0 x1) (THead (Bind
354 b) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T (lift h d x0) (lift h d
355 y)))) (\lambda (_: T).(\lambda (z: T).(eq T (lift h (S d) x1) (lift h (S d)
356 z)))) x0 x1 (refl_equal T (THead (Bind b) x0 x1)) (refl_equal T (lift h d
357 x0)) (refl_equal T (lift h (S d) x1))) u H2) t H3) x H1)))))) H0))))))))).
359 theorem lift_gen_flat:
360 \forall (f: F).(\forall (u: T).(\forall (t: T).(\forall (x: T).(\forall (h:
361 nat).(\forall (d: nat).((eq T (THead (Flat f) u t) (lift h d x)) \to (ex3_2 T
362 T (\lambda (y: T).(\lambda (z: T).(eq T x (THead (Flat f) y z)))) (\lambda
363 (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
364 T).(eq T t (lift h d z)))))))))))
366 \lambda (f: F).(\lambda (u: T).(\lambda (t: T).(\lambda (x: T).(\lambda (h:
367 nat).(\lambda (d: nat).(\lambda (H: (eq T (THead (Flat f) u t) (lift h d
368 x))).(let H_x \def (lift_gen_head (Flat f) u t x h d H) in (let H0 \def H_x
369 in (ex3_2_ind T T (\lambda (y: T).(\lambda (z: T).(eq T x (THead (Flat f) y
370 z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_:
371 T).(\lambda (z: T).(eq T t (lift h d z)))) (ex3_2 T T (\lambda (y:
372 T).(\lambda (z: T).(eq T x (THead (Flat f) y z)))) (\lambda (y: T).(\lambda
373 (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T t (lift
374 h d z))))) (\lambda (x0: T).(\lambda (x1: T).(\lambda (H1: (eq T x (THead
375 (Flat f) x0 x1))).(\lambda (H2: (eq T u (lift h d x0))).(\lambda (H3: (eq T t
376 (lift h d x1))).(eq_ind_r T (THead (Flat f) x0 x1) (\lambda (t0: T).(ex3_2 T
377 T (\lambda (y: T).(\lambda (z: T).(eq T t0 (THead (Flat f) y z)))) (\lambda
378 (y: T).(\lambda (_: T).(eq T u (lift h d y)))) (\lambda (_: T).(\lambda (z:
379 T).(eq T t (lift h d z)))))) (eq_ind_r T (lift h d x1) (\lambda (t0:
380 T).(ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq T (THead (Flat f) x0 x1)
381 (THead (Flat f) y z)))) (\lambda (y: T).(\lambda (_: T).(eq T u (lift h d
382 y)))) (\lambda (_: T).(\lambda (z: T).(eq T t0 (lift h d z)))))) (eq_ind_r T
383 (lift h d x0) (\lambda (t0: T).(ex3_2 T T (\lambda (y: T).(\lambda (z: T).(eq
384 T (THead (Flat f) x0 x1) (THead (Flat f) y z)))) (\lambda (y: T).(\lambda (_:
385 T).(eq T t0 (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T (lift h d
386 x1) (lift h d z)))))) (ex3_2_intro T T (\lambda (y: T).(\lambda (z: T).(eq T
387 (THead (Flat f) x0 x1) (THead (Flat f) y z)))) (\lambda (y: T).(\lambda (_:
388 T).(eq T (lift h d x0) (lift h d y)))) (\lambda (_: T).(\lambda (z: T).(eq T
389 (lift h d x1) (lift h d z)))) x0 x1 (refl_equal T (THead (Flat f) x0 x1))
390 (refl_equal T (lift h d x0)) (refl_equal T (lift h d x1))) u H2) t H3) x
391 H1)))))) H0))))))))).