]> matita.cs.unibo.it Git - helm.git/blob - matita/contribs/LAMBDA-TYPES/LambdaDelta-1/lift/fwd.ma
contribs should now compile
[helm.git] / matita / contribs / LAMBDA-TYPES / LambdaDelta-1 / lift / fwd.ma
1 (**************************************************************************)
2 (*       ___                                                              *)
3 (*      ||M||                                                             *)
4 (*      ||A||       A project by Andrea Asperti                           *)
5 (*      ||T||                                                             *)
6 (*      ||I||       Developers:                                           *)
7 (*      ||T||         The HELM team.                                      *)
8 (*      ||A||         http://helm.cs.unibo.it                             *)
9 (*      \   /                                                             *)
10 (*       \ /        This file is distributed under the terms of the       *)
11 (*        v         GNU General Public License Version 2                  *)
12 (*                                                                        *)
13 (**************************************************************************)
14
15 (* This file was automatically generated: do not edit *********************)
16
17
18
19 include "lift/defs.ma".
20
21 theorem lift_sort:
22  \forall (n: nat).(\forall (h: nat).(\forall (d: nat).(eq T (lift h d (TSort 
23 n)) (TSort n))))
24 \def
25  \lambda (n: nat).(\lambda (_: nat).(\lambda (_: nat).(refl_equal T (TSort 
26 n)))).
27
28 theorem lift_lref_lt:
29  \forall (n: nat).(\forall (h: nat).(\forall (d: nat).((lt n d) \to (eq T 
30 (lift h d (TLRef n)) (TLRef n)))))
31 \def
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)))))).
36
37 theorem lift_lref_ge:
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))))))
40 \def
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 
45 (le_bge d n H)))))).
46
47 theorem lift_head:
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) 
50 t)))))))
51 \def
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))))))).
54
55 theorem lift_bind:
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)))))))
59 \def
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))))))).
62
63 theorem lift_flat:
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) 
66 (lift h d t)))))))
67 \def
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))))))).
70
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))))))
74 \def
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)))).
113
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)))))))))
118 \def
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))))) 
171 H3)))))))))))) t).
172
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)))))))
176 \def
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 (lt_le_trans n0 (S (plus n0 h)) d (le_lt_n_Sm n0 (plus n0 h) (le_plus_l n0 
197 h)) (lt_le_S (plus n0 h) d H5))))) n (sym_eq nat n (plus n0 h) H4))))]) in 
198 (H3 (refl_equal T (TLRef (plus n0 h)))))))))) (\lambda (k: K).(\lambda (t0: 
199 T).(\lambda (_: (((eq T (TLRef n) (lift h d t0)) \to (eq T t0 (TLRef 
200 n))))).(\lambda (t1: T).(\lambda (_: (((eq T (TLRef n) (lift h d t1)) \to (eq 
201 T t1 (TLRef n))))).(\lambda (H2: (eq T (TLRef n) (lift h d (THead k t0 
202 t1)))).(let H3 \def (eq_ind T (lift h d (THead k t0 t1)) (\lambda (t2: T).(eq 
203 T (TLRef n) t2)) H2 (THead k (lift h d t0) (lift h (s k d) t1)) (lift_head k 
204 t0 t1 h d)) in (let H4 \def (match H3 in eq return (\lambda (t2: T).(\lambda 
205 (_: (eq ? ? t2)).((eq T t2 (THead k (lift h d t0) (lift h (s k d) t1))) \to 
206 (eq T (THead k t0 t1) (TLRef n))))) with [refl_equal \Rightarrow (\lambda 
207 (H4: (eq T (TLRef n) (THead k (lift h d t0) (lift h (s k d) t1)))).(let H5 
208 \def (eq_ind T (TLRef n) (\lambda (e: T).(match e in T return (\lambda (_: 
209 T).Prop) with [(TSort _) \Rightarrow False | (TLRef _) \Rightarrow True | 
210 (THead _ _ _) \Rightarrow False])) I (THead k (lift h d t0) (lift h (s k d) 
211 t1)) H4) in (False_ind (eq T (THead k t0 t1) (TLRef n)) H5)))]) in (H4 
212 (refl_equal T (THead k (lift h d t0) (lift h (s k d) t1)))))))))))) t))))).
213
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 
217 (P: Prop).P)))))))
218 \def
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))))))))))))) 
266 t)))))).
267
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)))))))
271 \def
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 (simpl_lt_plus_r h n d (lt_le_trans 
300 (plus n h) d (plus d h) H5 (le_plus_l d h)))))) n0 H4)))]) in (H3 (refl_equal 
301 T (TLRef n0)))))) (\lambda (H1: (le d n0)).(let H2 \def (eq_ind T (lift h d 
302 (TLRef n0)) (\lambda (t0: T).(eq T (TLRef (plus n h)) t0)) H0 (TLRef (plus n0 
303 h)) (lift_lref_ge n0 h d H1)) in (let H3 \def (match H2 in eq return (\lambda 
304 (t0: T).(\lambda (_: (eq ? ? t0)).((eq T t0 (TLRef (plus n0 h))) \to (eq T 
305 (TLRef n0) (TLRef n))))) with [refl_equal \Rightarrow (\lambda (H3: (eq T 
306 (TLRef (plus n h)) (TLRef (plus n0 h)))).(let H4 \def (f_equal T nat (\lambda 
307 (e: T).(match e in T return (\lambda (_: T).nat) with [(TSort _) \Rightarrow 
308 ((let rec plus (n1: nat) on n1: (nat \to nat) \def (\lambda (m: nat).(match 
309 n1 with [O \Rightarrow m | (S p) \Rightarrow (S (plus p m))])) in plus) n h) 
310 | (TLRef n1) \Rightarrow n1 | (THead _ _ _) \Rightarrow ((let rec plus (n1: 
311 nat) on n1: (nat \to nat) \def (\lambda (m: nat).(match n1 with [O 
312 \Rightarrow m | (S p) \Rightarrow (S (plus p m))])) in plus) n h)])) (TLRef 
313 (plus n h)) (TLRef (plus n0 h)) H3) in (eq_ind nat (plus n h) (\lambda (_: 
314 nat).(eq T (TLRef n0) (TLRef n))) (f_equal nat T TLRef n0 n (simpl_plus_r h 
315 n0 n (sym_eq nat (plus n h) (plus n0 h) H4))) (plus n0 h) H4)))]) in (H3 
316 (refl_equal T (TLRef (plus n0 h)))))))))) (\lambda (k: K).(\lambda (t0: 
317 T).(\lambda (_: (((eq T (TLRef (plus n h)) (lift h d t0)) \to (eq T t0 (TLRef 
318 n))))).(\lambda (t1: T).(\lambda (_: (((eq T (TLRef (plus n h)) (lift h d 
319 t1)) \to (eq T t1 (TLRef n))))).(\lambda (H2: (eq T (TLRef (plus n h)) (lift 
320 h d (THead k t0 t1)))).(let H3 \def (eq_ind T (lift h d (THead k t0 t1)) 
321 (\lambda (t2: T).(eq T (TLRef (plus n h)) t2)) H2 (THead k (lift h d t0) 
322 (lift h (s k d) t1)) (lift_head k t0 t1 h d)) in (let H4 \def (match H3 in eq 
323 return (\lambda (t2: T).(\lambda (_: (eq ? ? t2)).((eq T t2 (THead k (lift h 
324 d t0) (lift h (s k d) t1))) \to (eq T (THead k t0 t1) (TLRef n))))) with 
325 [refl_equal \Rightarrow (\lambda (H4: (eq T (TLRef (plus n h)) (THead k (lift 
326 h d t0) (lift h (s k d) t1)))).(let H5 \def (eq_ind T (TLRef (plus n h)) 
327 (\lambda (e: T).(match e in T return (\lambda (_: T).Prop) with [(TSort _) 
328 \Rightarrow False | (TLRef _) \Rightarrow True | (THead _ _ _) \Rightarrow 
329 False])) I (THead k (lift h d t0) (lift h (s k d) t1)) H4) in (False_ind (eq 
330 T (THead k t0 t1) (TLRef n)) H5)))]) in (H4 (refl_equal T (THead k (lift h d 
331 t0) (lift h (s k d) t1)))))))))))) t))))).
332
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)))))))))))
339 \def
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)))).
438
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)))))))))))
445 \def
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)))).
547
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)))))))))))
554 \def
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)))).
654