1 (**************************************************************************)
4 (* ||A|| A project by Andrea Asperti *)
6 (* ||I|| Developers: *)
7 (* ||T|| The HELM team. *)
8 (* ||A|| http://helm.cs.unibo.it *)
10 (* \ / This file is distributed under the terms of the *)
11 (* v GNU General Public License Version 2 *)
13 (**************************************************************************)
15 (* This file was automatically generated: do not edit *********************)
17 set "baseuri" "cic:/matita/LAMBDA-TYPES/LambdaDelta-1/drop/fwd".
19 include "drop/defs.ma".
21 theorem drop_gen_sort:
22 \forall (n: nat).(\forall (h: nat).(\forall (d: nat).(\forall (x: C).((drop
23 h d (CSort n) x) \to (and3 (eq C x (CSort n)) (eq nat h O) (eq nat d O))))))
25 \lambda (n: nat).(\lambda (h: nat).(\lambda (d: nat).(\lambda (x:
26 C).(\lambda (H: (drop h d (CSort n) x)).(insert_eq C (CSort n) (\lambda (c:
27 C).(drop h d c x)) (and3 (eq C x (CSort n)) (eq nat h O) (eq nat d O))
28 (\lambda (y: C).(\lambda (H0: (drop h d y x)).(drop_ind (\lambda (n0:
29 nat).(\lambda (n1: nat).(\lambda (c: C).(\lambda (c0: C).((eq C c (CSort n))
30 \to (and3 (eq C c0 (CSort n)) (eq nat n0 O) (eq nat n1 O))))))) (\lambda (c:
31 C).(\lambda (H1: (eq C c (CSort n))).(let H2 \def (f_equal C C (\lambda (e:
32 C).e) c (CSort n) H1) in (eq_ind_r C (CSort n) (\lambda (c0: C).(and3 (eq C
33 c0 (CSort n)) (eq nat O O) (eq nat O O))) (and3_intro (eq C (CSort n) (CSort
34 n)) (eq nat O O) (eq nat O O) (refl_equal C (CSort n)) (refl_equal nat O)
35 (refl_equal nat O)) c H2)))) (\lambda (k: K).(\lambda (h0: nat).(\lambda (c:
36 C).(\lambda (e: C).(\lambda (_: (drop (r k h0) O c e)).(\lambda (_: (((eq C c
37 (CSort n)) \to (and3 (eq C e (CSort n)) (eq nat (r k h0) O) (eq nat O
38 O))))).(\lambda (u: T).(\lambda (H3: (eq C (CHead c k u) (CSort n))).(let H4
39 \def (eq_ind C (CHead c k u) (\lambda (ee: C).(match ee in C return (\lambda
40 (_: C).Prop) with [(CSort _) \Rightarrow False | (CHead _ _ _) \Rightarrow
41 True])) I (CSort n) H3) in (False_ind (and3 (eq C e (CSort n)) (eq nat (S h0)
42 O) (eq nat O O)) H4)))))))))) (\lambda (k: K).(\lambda (h0: nat).(\lambda
43 (d0: nat).(\lambda (c: C).(\lambda (e: C).(\lambda (_: (drop h0 (r k d0) c
44 e)).(\lambda (_: (((eq C c (CSort n)) \to (and3 (eq C e (CSort n)) (eq nat h0
45 O) (eq nat (r k d0) O))))).(\lambda (u: T).(\lambda (H3: (eq C (CHead c k
46 (lift h0 (r k d0) u)) (CSort n))).(let H4 \def (eq_ind C (CHead c k (lift h0
47 (r k d0) u)) (\lambda (ee: C).(match ee in C return (\lambda (_: C).Prop)
48 with [(CSort _) \Rightarrow False | (CHead _ _ _) \Rightarrow True])) I
49 (CSort n) H3) in (False_ind (and3 (eq C (CHead e k u) (CSort n)) (eq nat h0
50 O) (eq nat (S d0) O)) H4))))))))))) h d y x H0))) H))))).
52 theorem drop_gen_refl:
53 \forall (x: C).(\forall (e: C).((drop O O x e) \to (eq C x e)))
55 \lambda (x: C).(\lambda (e: C).(\lambda (H: (drop O O x e)).(insert_eq nat O
56 (\lambda (n: nat).(drop n O x e)) (eq C x e) (\lambda (y: nat).(\lambda (H0:
57 (drop y O x e)).(insert_eq nat O (\lambda (n: nat).(drop y n x e)) ((eq nat y
58 O) \to (eq C x e)) (\lambda (y0: nat).(\lambda (H1: (drop y y0 x
59 e)).(drop_ind (\lambda (n: nat).(\lambda (n0: nat).(\lambda (c: C).(\lambda
60 (c0: C).((eq nat n0 O) \to ((eq nat n O) \to (eq C c c0))))))) (\lambda (c:
61 C).(\lambda (_: (eq nat O O)).(\lambda (_: (eq nat O O)).(refl_equal C c))))
62 (\lambda (k: K).(\lambda (h: nat).(\lambda (c: C).(\lambda (e0: C).(\lambda
63 (_: (drop (r k h) O c e0)).(\lambda (_: (((eq nat O O) \to ((eq nat (r k h)
64 O) \to (eq C c e0))))).(\lambda (u: T).(\lambda (_: (eq nat O O)).(\lambda
65 (H5: (eq nat (S h) O)).(let H6 \def (eq_ind nat (S h) (\lambda (ee:
66 nat).(match ee in nat return (\lambda (_: nat).Prop) with [O \Rightarrow
67 False | (S _) \Rightarrow True])) I O H5) in (False_ind (eq C (CHead c k u)
68 e0) H6))))))))))) (\lambda (k: K).(\lambda (h: nat).(\lambda (d:
69 nat).(\lambda (c: C).(\lambda (e0: C).(\lambda (H2: (drop h (r k d) c
70 e0)).(\lambda (H3: (((eq nat (r k d) O) \to ((eq nat h O) \to (eq C c
71 e0))))).(\lambda (u: T).(\lambda (H4: (eq nat (S d) O)).(\lambda (H5: (eq nat
72 h O)).(let H6 \def (f_equal nat nat (\lambda (e1: nat).e1) h O H5) in (let H7
73 \def (eq_ind nat h (\lambda (n: nat).((eq nat (r k d) O) \to ((eq nat n O)
74 \to (eq C c e0)))) H3 O H6) in (let H8 \def (eq_ind nat h (\lambda (n:
75 nat).(drop n (r k d) c e0)) H2 O H6) in (eq_ind_r nat O (\lambda (n: nat).(eq
76 C (CHead c k (lift n (r k d) u)) (CHead e0 k u))) (let H9 \def (eq_ind nat (S
77 d) (\lambda (ee: nat).(match ee in nat return (\lambda (_: nat).Prop) with [O
78 \Rightarrow False | (S _) \Rightarrow True])) I O H4) in (False_ind (eq C
79 (CHead c k (lift O (r k d) u)) (CHead e0 k u)) H9)) h H6)))))))))))))) y y0 x
82 theorem drop_gen_drop:
83 \forall (k: K).(\forall (c: C).(\forall (x: C).(\forall (u: T).(\forall (h:
84 nat).((drop (S h) O (CHead c k u) x) \to (drop (r k h) O c x))))))
86 \lambda (k: K).(\lambda (c: C).(\lambda (x: C).(\lambda (u: T).(\lambda (h:
87 nat).(\lambda (H: (drop (S h) O (CHead c k u) x)).(insert_eq C (CHead c k u)
88 (\lambda (c0: C).(drop (S h) O c0 x)) (drop (r k h) O c x) (\lambda (y:
89 C).(\lambda (H0: (drop (S h) O y x)).(insert_eq nat O (\lambda (n: nat).(drop
90 (S h) n y x)) ((eq C y (CHead c k u)) \to (drop (r k h) O c x)) (\lambda (y0:
91 nat).(\lambda (H1: (drop (S h) y0 y x)).(insert_eq nat (S h) (\lambda (n:
92 nat).(drop n y0 y x)) ((eq nat y0 O) \to ((eq C y (CHead c k u)) \to (drop (r
93 k h) O c x))) (\lambda (y1: nat).(\lambda (H2: (drop y1 y0 y x)).(drop_ind
94 (\lambda (n: nat).(\lambda (n0: nat).(\lambda (c0: C).(\lambda (c1: C).((eq
95 nat n (S h)) \to ((eq nat n0 O) \to ((eq C c0 (CHead c k u)) \to (drop (r k
96 h) O c c1)))))))) (\lambda (c0: C).(\lambda (H3: (eq nat O (S h))).(\lambda
97 (_: (eq nat O O)).(\lambda (_: (eq C c0 (CHead c k u))).(let H6 \def (match
98 H3 in eq return (\lambda (n: nat).(\lambda (_: (eq ? ? n)).((eq nat n (S h))
99 \to (drop (r k h) O c c0)))) with [refl_equal \Rightarrow (\lambda (H6: (eq
100 nat O (S h))).(let H7 \def (eq_ind nat O (\lambda (e: nat).(match e in nat
101 return (\lambda (_: nat).Prop) with [O \Rightarrow True | (S _) \Rightarrow
102 False])) I (S h) H6) in (False_ind (drop (r k h) O c c0) H7)))]) in (H6
103 (refl_equal nat (S h)))))))) (\lambda (k0: K).(\lambda (h0: nat).(\lambda
104 (c0: C).(\lambda (e: C).(\lambda (H3: (drop (r k0 h0) O c0 e)).(\lambda (_:
105 (((eq nat (r k0 h0) (S h)) \to ((eq nat O O) \to ((eq C c0 (CHead c k u)) \to
106 (drop (r k h) O c e)))))).(\lambda (u0: T).(\lambda (H5: (eq nat (S h0) (S
107 h))).(\lambda (_: (eq nat O O)).(\lambda (H7: (eq C (CHead c0 k0 u0) (CHead c
108 k u))).(let H8 \def (match H5 in eq return (\lambda (n: nat).(\lambda (_: (eq
109 ? ? n)).((eq nat n (S h)) \to (drop (r k h) O c e)))) with [refl_equal
110 \Rightarrow (\lambda (H8: (eq nat (S h0) (S h))).(let H9 \def (f_equal nat
111 nat (\lambda (e0: nat).(match e0 in nat return (\lambda (_: nat).nat) with [O
112 \Rightarrow h0 | (S n) \Rightarrow n])) (S h0) (S h) H8) in (eq_ind nat h
113 (\lambda (_: nat).(drop (r k h) O c e)) (let H10 \def (match H7 in eq return
114 (\lambda (c1: C).(\lambda (_: (eq ? ? c1)).((eq C c1 (CHead c k u)) \to (drop
115 (r k h) O c e)))) with [refl_equal \Rightarrow (\lambda (H10: (eq C (CHead c0
116 k0 u0) (CHead c k u))).(let H11 \def (f_equal C T (\lambda (e0: C).(match e0
117 in C return (\lambda (_: C).T) with [(CSort _) \Rightarrow u0 | (CHead _ _ t)
118 \Rightarrow t])) (CHead c0 k0 u0) (CHead c k u) H10) in ((let H12 \def
119 (f_equal C K (\lambda (e0: C).(match e0 in C return (\lambda (_: C).K) with
120 [(CSort _) \Rightarrow k0 | (CHead _ k1 _) \Rightarrow k1])) (CHead c0 k0 u0)
121 (CHead c k u) H10) in ((let H13 \def (f_equal C C (\lambda (e0: C).(match e0
122 in C return (\lambda (_: C).C) with [(CSort _) \Rightarrow c0 | (CHead c1 _
123 _) \Rightarrow c1])) (CHead c0 k0 u0) (CHead c k u) H10) in (eq_ind C c
124 (\lambda (_: C).((eq K k0 k) \to ((eq T u0 u) \to (drop (r k h) O c e))))
125 (\lambda (H14: (eq K k0 k)).(eq_ind K k (\lambda (_: K).((eq T u0 u) \to
126 (drop (r k h) O c e))) (\lambda (H15: (eq T u0 u)).(eq_ind T u (\lambda (_:
127 T).(drop (r k h) O c e)) (eq_ind nat h0 (\lambda (n: nat).(drop (r k n) O c
128 e)) (eq_ind C c0 (\lambda (c1: C).(drop (r k h0) O c1 e)) (eq_ind K k0
129 (\lambda (k1: K).(drop (r k1 h0) O c0 e)) H3 k H14) c H13) h H9) u0 (sym_eq T
130 u0 u H15))) k0 (sym_eq K k0 k H14))) c0 (sym_eq C c0 c H13))) H12)) H11)))])
131 in (H10 (refl_equal C (CHead c k u)))) h0 (sym_eq nat h0 h H9))))]) in (H8
132 (refl_equal nat (S h)))))))))))))) (\lambda (k0: K).(\lambda (h0:
133 nat).(\lambda (d: nat).(\lambda (c0: C).(\lambda (e: C).(\lambda (_: (drop h0
134 (r k0 d) c0 e)).(\lambda (_: (((eq nat h0 (S h)) \to ((eq nat (r k0 d) O) \to
135 ((eq C c0 (CHead c k u)) \to (drop (r k h) O c e)))))).(\lambda (u0:
136 T).(\lambda (_: (eq nat h0 (S h))).(\lambda (H6: (eq nat (S d) O)).(\lambda
137 (_: (eq C (CHead c0 k0 (lift h0 (r k0 d) u0)) (CHead c k u))).(let H8 \def
138 (match H6 in eq return (\lambda (n: nat).(\lambda (_: (eq ? ? n)).((eq nat n
139 O) \to (drop (r k h) O c (CHead e k0 u0))))) with [refl_equal \Rightarrow
140 (\lambda (H8: (eq nat (S d) O)).(let H9 \def (eq_ind nat (S d) (\lambda (e0:
141 nat).(match e0 in nat return (\lambda (_: nat).Prop) with [O \Rightarrow
142 False | (S _) \Rightarrow True])) I O H8) in (False_ind (drop (r k h) O c
143 (CHead e k0 u0)) H9)))]) in (H8 (refl_equal nat O)))))))))))))) y1 y0 y x
144 H2))) H1))) H0))) H)))))).
146 theorem drop_gen_skip_r:
147 \forall (c: C).(\forall (x: C).(\forall (u: T).(\forall (h: nat).(\forall
148 (d: nat).(\forall (k: K).((drop h (S d) x (CHead c k u)) \to (ex2 C (\lambda
149 (e: C).(eq C x (CHead e k (lift h (r k d) u)))) (\lambda (e: C).(drop h (r k
152 \lambda (c: C).(\lambda (x: C).(\lambda (u: T).(\lambda (h: nat).(\lambda
153 (d: nat).(\lambda (k: K).(\lambda (H: (drop h (S d) x (CHead c k u))).(let H0
154 \def (match H in drop return (\lambda (n: nat).(\lambda (n0: nat).(\lambda
155 (c0: C).(\lambda (c1: C).(\lambda (_: (drop n n0 c0 c1)).((eq nat n h) \to
156 ((eq nat n0 (S d)) \to ((eq C c0 x) \to ((eq C c1 (CHead c k u)) \to (ex2 C
157 (\lambda (e: C).(eq C x (CHead e k (lift h (r k d) u)))) (\lambda (e:
158 C).(drop h (r k d) e c)))))))))))) with [(drop_refl c0) \Rightarrow (\lambda
159 (H0: (eq nat O h)).(\lambda (H1: (eq nat O (S d))).(\lambda (H2: (eq C c0
160 x)).(\lambda (H3: (eq C c0 (CHead c k u))).(eq_ind nat O (\lambda (n:
161 nat).((eq nat O (S d)) \to ((eq C c0 x) \to ((eq C c0 (CHead c k u)) \to (ex2
162 C (\lambda (e: C).(eq C x (CHead e k (lift n (r k d) u)))) (\lambda (e:
163 C).(drop n (r k d) e c))))))) (\lambda (H4: (eq nat O (S d))).(let H5 \def
164 (eq_ind nat O (\lambda (e: nat).(match e in nat return (\lambda (_:
165 nat).Prop) with [O \Rightarrow True | (S _) \Rightarrow False])) I (S d) H4)
166 in (False_ind ((eq C c0 x) \to ((eq C c0 (CHead c k u)) \to (ex2 C (\lambda
167 (e: C).(eq C x (CHead e k (lift O (r k d) u)))) (\lambda (e: C).(drop O (r k
168 d) e c))))) H5))) h H0 H1 H2 H3))))) | (drop_drop k0 h0 c0 e H0 u0)
169 \Rightarrow (\lambda (H1: (eq nat (S h0) h)).(\lambda (H2: (eq nat O (S
170 d))).(\lambda (H3: (eq C (CHead c0 k0 u0) x)).(\lambda (H4: (eq C e (CHead c
171 k u))).(eq_ind nat (S h0) (\lambda (n: nat).((eq nat O (S d)) \to ((eq C
172 (CHead c0 k0 u0) x) \to ((eq C e (CHead c k u)) \to ((drop (r k0 h0) O c0 e)
173 \to (ex2 C (\lambda (e0: C).(eq C x (CHead e0 k (lift n (r k d) u))))
174 (\lambda (e0: C).(drop n (r k d) e0 c)))))))) (\lambda (H5: (eq nat O (S
175 d))).(let H6 \def (eq_ind nat O (\lambda (e0: nat).(match e0 in nat return
176 (\lambda (_: nat).Prop) with [O \Rightarrow True | (S _) \Rightarrow False]))
177 I (S d) H5) in (False_ind ((eq C (CHead c0 k0 u0) x) \to ((eq C e (CHead c k
178 u)) \to ((drop (r k0 h0) O c0 e) \to (ex2 C (\lambda (e0: C).(eq C x (CHead
179 e0 k (lift (S h0) (r k d) u)))) (\lambda (e0: C).(drop (S h0) (r k d) e0
180 c)))))) H6))) h H1 H2 H3 H4 H0))))) | (drop_skip k0 h0 d0 c0 e H0 u0)
181 \Rightarrow (\lambda (H1: (eq nat h0 h)).(\lambda (H2: (eq nat (S d0) (S
182 d))).(\lambda (H3: (eq C (CHead c0 k0 (lift h0 (r k0 d0) u0)) x)).(\lambda
183 (H4: (eq C (CHead e k0 u0) (CHead c k u))).(eq_ind nat h (\lambda (n:
184 nat).((eq nat (S d0) (S d)) \to ((eq C (CHead c0 k0 (lift n (r k0 d0) u0)) x)
185 \to ((eq C (CHead e k0 u0) (CHead c k u)) \to ((drop n (r k0 d0) c0 e) \to
186 (ex2 C (\lambda (e0: C).(eq C x (CHead e0 k (lift h (r k d) u)))) (\lambda
187 (e0: C).(drop h (r k d) e0 c)))))))) (\lambda (H5: (eq nat (S d0) (S
188 d))).(let H6 \def (f_equal nat nat (\lambda (e0: nat).(match e0 in nat return
189 (\lambda (_: nat).nat) with [O \Rightarrow d0 | (S n) \Rightarrow n])) (S d0)
190 (S d) H5) in (eq_ind nat d (\lambda (n: nat).((eq C (CHead c0 k0 (lift h (r
191 k0 n) u0)) x) \to ((eq C (CHead e k0 u0) (CHead c k u)) \to ((drop h (r k0 n)
192 c0 e) \to (ex2 C (\lambda (e0: C).(eq C x (CHead e0 k (lift h (r k d) u))))
193 (\lambda (e0: C).(drop h (r k d) e0 c))))))) (\lambda (H7: (eq C (CHead c0 k0
194 (lift h (r k0 d) u0)) x)).(eq_ind C (CHead c0 k0 (lift h (r k0 d) u0))
195 (\lambda (c1: C).((eq C (CHead e k0 u0) (CHead c k u)) \to ((drop h (r k0 d)
196 c0 e) \to (ex2 C (\lambda (e0: C).(eq C c1 (CHead e0 k (lift h (r k d) u))))
197 (\lambda (e0: C).(drop h (r k d) e0 c)))))) (\lambda (H8: (eq C (CHead e k0
198 u0) (CHead c k u))).(let H9 \def (f_equal C T (\lambda (e0: C).(match e0 in C
199 return (\lambda (_: C).T) with [(CSort _) \Rightarrow u0 | (CHead _ _ t)
200 \Rightarrow t])) (CHead e k0 u0) (CHead c k u) H8) in ((let H10 \def (f_equal
201 C K (\lambda (e0: C).(match e0 in C return (\lambda (_: C).K) with [(CSort _)
202 \Rightarrow k0 | (CHead _ k1 _) \Rightarrow k1])) (CHead e k0 u0) (CHead c k
203 u) H8) in ((let H11 \def (f_equal C C (\lambda (e0: C).(match e0 in C return
204 (\lambda (_: C).C) with [(CSort _) \Rightarrow e | (CHead c1 _ _) \Rightarrow
205 c1])) (CHead e k0 u0) (CHead c k u) H8) in (eq_ind C c (\lambda (c1: C).((eq
206 K k0 k) \to ((eq T u0 u) \to ((drop h (r k0 d) c0 c1) \to (ex2 C (\lambda
207 (e0: C).(eq C (CHead c0 k0 (lift h (r k0 d) u0)) (CHead e0 k (lift h (r k d)
208 u)))) (\lambda (e0: C).(drop h (r k d) e0 c))))))) (\lambda (H12: (eq K k0
209 k)).(eq_ind K k (\lambda (k1: K).((eq T u0 u) \to ((drop h (r k1 d) c0 c) \to
210 (ex2 C (\lambda (e0: C).(eq C (CHead c0 k1 (lift h (r k1 d) u0)) (CHead e0 k
211 (lift h (r k d) u)))) (\lambda (e0: C).(drop h (r k d) e0 c)))))) (\lambda
212 (H13: (eq T u0 u)).(eq_ind T u (\lambda (t: T).((drop h (r k d) c0 c) \to
213 (ex2 C (\lambda (e0: C).(eq C (CHead c0 k (lift h (r k d) t)) (CHead e0 k
214 (lift h (r k d) u)))) (\lambda (e0: C).(drop h (r k d) e0 c))))) (\lambda
215 (H14: (drop h (r k d) c0 c)).(let H15 \def (eq_ind T u0 (\lambda (t: T).(eq C
216 (CHead c0 k0 (lift h (r k0 d) t)) x)) H7 u H13) in (let H16 \def (eq_ind K k0
217 (\lambda (k1: K).(eq C (CHead c0 k1 (lift h (r k1 d) u)) x)) H15 k H12) in
218 (let H17 \def (eq_ind_r C x (\lambda (c1: C).(drop h (S d) c1 (CHead c k u)))
219 H (CHead c0 k (lift h (r k d) u)) H16) in (ex_intro2 C (\lambda (e0: C).(eq C
220 (CHead c0 k (lift h (r k d) u)) (CHead e0 k (lift h (r k d) u)))) (\lambda
221 (e0: C).(drop h (r k d) e0 c)) c0 (refl_equal C (CHead c0 k (lift h (r k d)
222 u))) H14))))) u0 (sym_eq T u0 u H13))) k0 (sym_eq K k0 k H12))) e (sym_eq C e
223 c H11))) H10)) H9))) x H7)) d0 (sym_eq nat d0 d H6)))) h0 (sym_eq nat h0 h
224 H1) H2 H3 H4 H0)))))]) in (H0 (refl_equal nat h) (refl_equal nat (S d))
225 (refl_equal C x) (refl_equal C (CHead c k u)))))))))).
227 theorem drop_gen_skip_l:
228 \forall (c: C).(\forall (x: C).(\forall (u: T).(\forall (h: nat).(\forall
229 (d: nat).(\forall (k: K).((drop h (S d) (CHead c k u) x) \to (ex3_2 C T
230 (\lambda (e: C).(\lambda (v: T).(eq C x (CHead e k v)))) (\lambda (_:
231 C).(\lambda (v: T).(eq T u (lift h (r k d) v)))) (\lambda (e: C).(\lambda (_:
232 T).(drop h (r k d) c e))))))))))
234 \lambda (c: C).(\lambda (x: C).(\lambda (u: T).(\lambda (h: nat).(\lambda
235 (d: nat).(\lambda (k: K).(\lambda (H: (drop h (S d) (CHead c k u) x)).(let H0
236 \def (match H in drop return (\lambda (n: nat).(\lambda (n0: nat).(\lambda
237 (c0: C).(\lambda (c1: C).(\lambda (_: (drop n n0 c0 c1)).((eq nat n h) \to
238 ((eq nat n0 (S d)) \to ((eq C c0 (CHead c k u)) \to ((eq C c1 x) \to (ex3_2 C
239 T (\lambda (e: C).(\lambda (v: T).(eq C x (CHead e k v)))) (\lambda (_:
240 C).(\lambda (v: T).(eq T u (lift h (r k d) v)))) (\lambda (e: C).(\lambda (_:
241 T).(drop h (r k d) c e))))))))))))) with [(drop_refl c0) \Rightarrow (\lambda
242 (H0: (eq nat O h)).(\lambda (H1: (eq nat O (S d))).(\lambda (H2: (eq C c0
243 (CHead c k u))).(\lambda (H3: (eq C c0 x)).(eq_ind nat O (\lambda (n:
244 nat).((eq nat O (S d)) \to ((eq C c0 (CHead c k u)) \to ((eq C c0 x) \to
245 (ex3_2 C T (\lambda (e: C).(\lambda (v: T).(eq C x (CHead e k v)))) (\lambda
246 (_: C).(\lambda (v: T).(eq T u (lift n (r k d) v)))) (\lambda (e: C).(\lambda
247 (_: T).(drop n (r k d) c e)))))))) (\lambda (H4: (eq nat O (S d))).(let H5
248 \def (eq_ind nat O (\lambda (e: nat).(match e in nat return (\lambda (_:
249 nat).Prop) with [O \Rightarrow True | (S _) \Rightarrow False])) I (S d) H4)
250 in (False_ind ((eq C c0 (CHead c k u)) \to ((eq C c0 x) \to (ex3_2 C T
251 (\lambda (e: C).(\lambda (v: T).(eq C x (CHead e k v)))) (\lambda (_:
252 C).(\lambda (v: T).(eq T u (lift O (r k d) v)))) (\lambda (e: C).(\lambda (_:
253 T).(drop O (r k d) c e)))))) H5))) h H0 H1 H2 H3))))) | (drop_drop k0 h0 c0 e
254 H0 u0) \Rightarrow (\lambda (H1: (eq nat (S h0) h)).(\lambda (H2: (eq nat O
255 (S d))).(\lambda (H3: (eq C (CHead c0 k0 u0) (CHead c k u))).(\lambda (H4:
256 (eq C e x)).(eq_ind nat (S h0) (\lambda (n: nat).((eq nat O (S d)) \to ((eq C
257 (CHead c0 k0 u0) (CHead c k u)) \to ((eq C e x) \to ((drop (r k0 h0) O c0 e)
258 \to (ex3_2 C T (\lambda (e0: C).(\lambda (v: T).(eq C x (CHead e0 k v))))
259 (\lambda (_: C).(\lambda (v: T).(eq T u (lift n (r k d) v)))) (\lambda (e0:
260 C).(\lambda (_: T).(drop n (r k d) c e0))))))))) (\lambda (H5: (eq nat O (S
261 d))).(let H6 \def (eq_ind nat O (\lambda (e0: nat).(match e0 in nat return
262 (\lambda (_: nat).Prop) with [O \Rightarrow True | (S _) \Rightarrow False]))
263 I (S d) H5) in (False_ind ((eq C (CHead c0 k0 u0) (CHead c k u)) \to ((eq C e
264 x) \to ((drop (r k0 h0) O c0 e) \to (ex3_2 C T (\lambda (e0: C).(\lambda (v:
265 T).(eq C x (CHead e0 k v)))) (\lambda (_: C).(\lambda (v: T).(eq T u (lift (S
266 h0) (r k d) v)))) (\lambda (e0: C).(\lambda (_: T).(drop (S h0) (r k d) c
267 e0))))))) H6))) h H1 H2 H3 H4 H0))))) | (drop_skip k0 h0 d0 c0 e H0 u0)
268 \Rightarrow (\lambda (H1: (eq nat h0 h)).(\lambda (H2: (eq nat (S d0) (S
269 d))).(\lambda (H3: (eq C (CHead c0 k0 (lift h0 (r k0 d0) u0)) (CHead c k
270 u))).(\lambda (H4: (eq C (CHead e k0 u0) x)).(eq_ind nat h (\lambda (n:
271 nat).((eq nat (S d0) (S d)) \to ((eq C (CHead c0 k0 (lift n (r k0 d0) u0))
272 (CHead c k u)) \to ((eq C (CHead e k0 u0) x) \to ((drop n (r k0 d0) c0 e) \to
273 (ex3_2 C T (\lambda (e0: C).(\lambda (v: T).(eq C x (CHead e0 k v))))
274 (\lambda (_: C).(\lambda (v: T).(eq T u (lift h (r k d) v)))) (\lambda (e0:
275 C).(\lambda (_: T).(drop h (r k d) c e0))))))))) (\lambda (H5: (eq nat (S d0)
276 (S d))).(let H6 \def (f_equal nat nat (\lambda (e0: nat).(match e0 in nat
277 return (\lambda (_: nat).nat) with [O \Rightarrow d0 | (S n) \Rightarrow n]))
278 (S d0) (S d) H5) in (eq_ind nat d (\lambda (n: nat).((eq C (CHead c0 k0 (lift
279 h (r k0 n) u0)) (CHead c k u)) \to ((eq C (CHead e k0 u0) x) \to ((drop h (r
280 k0 n) c0 e) \to (ex3_2 C T (\lambda (e0: C).(\lambda (v: T).(eq C x (CHead e0
281 k v)))) (\lambda (_: C).(\lambda (v: T).(eq T u (lift h (r k d) v))))
282 (\lambda (e0: C).(\lambda (_: T).(drop h (r k d) c e0)))))))) (\lambda (H7:
283 (eq C (CHead c0 k0 (lift h (r k0 d) u0)) (CHead c k u))).(let H8 \def
284 (f_equal C T (\lambda (e0: C).(match e0 in C return (\lambda (_: C).T) with
285 [(CSort _) \Rightarrow ((let rec lref_map (f: ((nat \to nat))) (d1: nat) (t:
286 T) on t: T \def (match t with [(TSort n) \Rightarrow (TSort n) | (TLRef i)
287 \Rightarrow (TLRef (match (blt i d1) with [true \Rightarrow i | false
288 \Rightarrow (f i)])) | (THead k1 u1 t0) \Rightarrow (THead k1 (lref_map f d1
289 u1) (lref_map f (s k1 d1) t0))]) in lref_map) (\lambda (x0: nat).(plus x0 h))
290 (r k0 d) u0) | (CHead _ _ t) \Rightarrow t])) (CHead c0 k0 (lift h (r k0 d)
291 u0)) (CHead c k u) H7) in ((let H9 \def (f_equal C K (\lambda (e0: C).(match
292 e0 in C return (\lambda (_: C).K) with [(CSort _) \Rightarrow k0 | (CHead _
293 k1 _) \Rightarrow k1])) (CHead c0 k0 (lift h (r k0 d) u0)) (CHead c k u) H7)
294 in ((let H10 \def (f_equal C C (\lambda (e0: C).(match e0 in C return
295 (\lambda (_: C).C) with [(CSort _) \Rightarrow c0 | (CHead c1 _ _)
296 \Rightarrow c1])) (CHead c0 k0 (lift h (r k0 d) u0)) (CHead c k u) H7) in
297 (eq_ind C c (\lambda (c1: C).((eq K k0 k) \to ((eq T (lift h (r k0 d) u0) u)
298 \to ((eq C (CHead e k0 u0) x) \to ((drop h (r k0 d) c1 e) \to (ex3_2 C T
299 (\lambda (e0: C).(\lambda (v: T).(eq C x (CHead e0 k v)))) (\lambda (_:
300 C).(\lambda (v: T).(eq T u (lift h (r k d) v)))) (\lambda (e0: C).(\lambda
301 (_: T).(drop h (r k d) c e0))))))))) (\lambda (H11: (eq K k0 k)).(eq_ind K k
302 (\lambda (k1: K).((eq T (lift h (r k1 d) u0) u) \to ((eq C (CHead e k1 u0) x)
303 \to ((drop h (r k1 d) c e) \to (ex3_2 C T (\lambda (e0: C).(\lambda (v:
304 T).(eq C x (CHead e0 k v)))) (\lambda (_: C).(\lambda (v: T).(eq T u (lift h
305 (r k d) v)))) (\lambda (e0: C).(\lambda (_: T).(drop h (r k d) c e0))))))))
306 (\lambda (H12: (eq T (lift h (r k d) u0) u)).(eq_ind T (lift h (r k d) u0)
307 (\lambda (t: T).((eq C (CHead e k u0) x) \to ((drop h (r k d) c e) \to (ex3_2
308 C T (\lambda (e0: C).(\lambda (v: T).(eq C x (CHead e0 k v)))) (\lambda (_:
309 C).(\lambda (v: T).(eq T t (lift h (r k d) v)))) (\lambda (e0: C).(\lambda
310 (_: T).(drop h (r k d) c e0))))))) (\lambda (H13: (eq C (CHead e k u0)
311 x)).(eq_ind C (CHead e k u0) (\lambda (c1: C).((drop h (r k d) c e) \to
312 (ex3_2 C T (\lambda (e0: C).(\lambda (v: T).(eq C c1 (CHead e0 k v))))
313 (\lambda (_: C).(\lambda (v: T).(eq T (lift h (r k d) u0) (lift h (r k d)
314 v)))) (\lambda (e0: C).(\lambda (_: T).(drop h (r k d) c e0)))))) (\lambda
315 (H14: (drop h (r k d) c e)).(let H15 \def (eq_ind_r T u (\lambda (t: T).(drop
316 h (S d) (CHead c k t) x)) H (lift h (r k d) u0) H12) in (let H16 \def
317 (eq_ind_r C x (\lambda (c1: C).(drop h (S d) (CHead c k (lift h (r k d) u0))
318 c1)) H15 (CHead e k u0) H13) in (ex3_2_intro C T (\lambda (e0: C).(\lambda
319 (v: T).(eq C (CHead e k u0) (CHead e0 k v)))) (\lambda (_: C).(\lambda (v:
320 T).(eq T (lift h (r k d) u0) (lift h (r k d) v)))) (\lambda (e0: C).(\lambda
321 (_: T).(drop h (r k d) c e0))) e u0 (refl_equal C (CHead e k u0)) (refl_equal
322 T (lift h (r k d) u0)) H14)))) x H13)) u H12)) k0 (sym_eq K k0 k H11))) c0
323 (sym_eq C c0 c H10))) H9)) H8))) d0 (sym_eq nat d0 d H6)))) h0 (sym_eq nat h0
324 h H1) H2 H3 H4 H0)))))]) in (H0 (refl_equal nat h) (refl_equal nat (S d))
325 (refl_equal C (CHead c k u)) (refl_equal C x))))))))).