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