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