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 "basic_1/ty3/fwd.ma".
19 include "basic_1/pc3/fwd.ma".
22 \forall (g: G).(\forall (e: C).(\forall (t1: T).(\forall (t2: T).((ty3 g e
23 t1 t2) \to (\forall (c: C).(\forall (d: nat).(\forall (h: nat).((drop h d c
24 e) \to (ty3 g c (lift h d t1) (lift h d t2))))))))))
26 \lambda (g: G).(\lambda (e: C).(\lambda (t1: T).(\lambda (t2: T).(\lambda
27 (H: (ty3 g e t1 t2)).(let TMP_3 \def (\lambda (c: C).(\lambda (t: T).(\lambda
28 (t0: T).(\forall (c0: C).(\forall (d: nat).(\forall (h: nat).((drop h d c0 c)
29 \to (let TMP_1 \def (lift h d t) in (let TMP_2 \def (lift h d t0) in (ty3 g
30 c0 TMP_1 TMP_2)))))))))) in (let TMP_11 \def (\lambda (c: C).(\lambda (t0:
31 T).(\lambda (t: T).(\lambda (_: (ty3 g c t0 t)).(\lambda (H1: ((\forall (c0:
32 C).(\forall (d: nat).(\forall (h: nat).((drop h d c0 c) \to (ty3 g c0 (lift h
33 d t0) (lift h d t)))))))).(\lambda (u: T).(\lambda (t3: T).(\lambda (_: (ty3
34 g c u t3)).(\lambda (H3: ((\forall (c0: C).(\forall (d: nat).(\forall (h:
35 nat).((drop h d c0 c) \to (ty3 g c0 (lift h d u) (lift h d
36 t3)))))))).(\lambda (H4: (pc3 c t3 t0)).(\lambda (c0: C).(\lambda (d:
37 nat).(\lambda (h: nat).(\lambda (H5: (drop h d c0 c)).(let TMP_4 \def (lift h
38 d t0) in (let TMP_5 \def (lift h d t) in (let TMP_6 \def (H1 c0 d h H5) in
39 (let TMP_7 \def (lift h d u) in (let TMP_8 \def (lift h d t3) in (let TMP_9
40 \def (H3 c0 d h H5) in (let TMP_10 \def (pc3_lift c0 c h d H5 t3 t0 H4) in
41 (ty3_conv g c0 TMP_4 TMP_5 TMP_6 TMP_7 TMP_8 TMP_9
42 TMP_10)))))))))))))))))))))) in (let TMP_31 \def (\lambda (c: C).(\lambda (m:
43 nat).(\lambda (c0: C).(\lambda (d: nat).(\lambda (h: nat).(\lambda (_: (drop
44 h d c0 c)).(let TMP_12 \def (TSort m) in (let TMP_16 \def (\lambda (t:
45 T).(let TMP_13 \def (next g m) in (let TMP_14 \def (TSort TMP_13) in (let
46 TMP_15 \def (lift h d TMP_14) in (ty3 g c0 t TMP_15))))) in (let TMP_17 \def
47 (next g m) in (let TMP_18 \def (TSort TMP_17) in (let TMP_20 \def (\lambda
48 (t: T).(let TMP_19 \def (TSort m) in (ty3 g c0 TMP_19 t))) in (let TMP_21
49 \def (ty3_sort g c0 m) in (let TMP_22 \def (next g m) in (let TMP_23 \def
50 (TSort TMP_22) in (let TMP_24 \def (lift h d TMP_23) in (let TMP_25 \def
51 (next g m) in (let TMP_26 \def (lift_sort TMP_25 h d) in (let TMP_27 \def
52 (eq_ind_r T TMP_18 TMP_20 TMP_21 TMP_24 TMP_26) in (let TMP_28 \def (TSort m)
53 in (let TMP_29 \def (lift h d TMP_28) in (let TMP_30 \def (lift_sort m h d)
54 in (eq_ind_r T TMP_12 TMP_16 TMP_27 TMP_29 TMP_30)))))))))))))))))))))) in
55 (let TMP_233 \def (\lambda (n: nat).(\lambda (c: C).(\lambda (d: C).(\lambda
56 (u: T).(\lambda (H0: (getl n c (CHead d (Bind Abbr) u))).(\lambda (t:
57 T).(\lambda (H1: (ty3 g d u t)).(\lambda (H2: ((\forall (c0: C).(\forall (d0:
58 nat).(\forall (h: nat).((drop h d0 c0 d) \to (ty3 g c0 (lift h d0 u) (lift h
59 d0 t)))))))).(\lambda (c0: C).(\lambda (d0: nat).(\lambda (h: nat).(\lambda
60 (H3: (drop h d0 c0 c)).(let TMP_32 \def (TLRef n) in (let TMP_33 \def (lift h
61 d0 TMP_32) in (let TMP_34 \def (S n) in (let TMP_35 \def (lift TMP_34 O t) in
62 (let TMP_36 \def (lift h d0 TMP_35) in (let TMP_37 \def (ty3 g c0 TMP_33
63 TMP_36) in (let TMP_159 \def (\lambda (H4: (lt n d0)).(let TMP_38 \def (S n)
64 in (let TMP_39 \def (S d0) in (let TMP_40 \def (S n) in (let TMP_41 \def (S
65 TMP_40) in (let TMP_42 \def (S d0) in (let TMP_43 \def (S n) in (let TMP_44
66 \def (le_n_S TMP_43 d0 H4) in (let TMP_45 \def (le_S TMP_41 TMP_42 TMP_44) in
67 (let TMP_46 \def (le_S_n TMP_38 TMP_39 TMP_45) in (let TMP_47 \def (le_S_n n
68 d0 TMP_46) in (let TMP_48 \def (Bind Abbr) in (let TMP_49 \def (CHead d
69 TMP_48 u) in (let H5 \def (drop_getl_trans_le n d0 TMP_47 c0 c h H3 TMP_49
70 H0) in (let TMP_50 \def (\lambda (e0: C).(\lambda (_: C).(drop n O c0 e0)))
71 in (let TMP_52 \def (\lambda (e0: C).(\lambda (e1: C).(let TMP_51 \def (minus
72 d0 n) in (drop h TMP_51 e0 e1)))) in (let TMP_55 \def (\lambda (_:
73 C).(\lambda (e1: C).(let TMP_53 \def (Bind Abbr) in (let TMP_54 \def (CHead d
74 TMP_53 u) in (clear e1 TMP_54))))) in (let TMP_56 \def (TLRef n) in (let
75 TMP_57 \def (lift h d0 TMP_56) in (let TMP_58 \def (S n) in (let TMP_59 \def
76 (lift TMP_58 O t) in (let TMP_60 \def (lift h d0 TMP_59) in (let TMP_61 \def
77 (ty3 g c0 TMP_57 TMP_60) in (let TMP_158 \def (\lambda (x0: C).(\lambda (x1:
78 C).(\lambda (H6: (drop n O c0 x0)).(\lambda (H7: (drop h (minus d0 n) x0
79 x1)).(\lambda (H8: (clear x1 (CHead d (Bind Abbr) u))).(let TMP_62 \def
80 (minus d0 n) in (let TMP_63 \def (\lambda (n0: nat).(drop h n0 x0 x1)) in
81 (let TMP_64 \def (S n) in (let TMP_65 \def (minus d0 TMP_64) in (let TMP_66
82 \def (S TMP_65) in (let TMP_67 \def (minus_x_Sy d0 n H4) in (let H9 \def
83 (eq_ind nat TMP_62 TMP_63 H7 TMP_66 TMP_67) in (let TMP_68 \def (S n) in (let
84 TMP_69 \def (minus d0 TMP_68) in (let H10 \def (drop_clear_S x1 x0 h TMP_69
85 H9 Abbr d u H8) in (let TMP_75 \def (\lambda (c1: C).(let TMP_70 \def (Bind
86 Abbr) in (let TMP_71 \def (S n) in (let TMP_72 \def (minus d0 TMP_71) in (let
87 TMP_73 \def (lift h TMP_72 u) in (let TMP_74 \def (CHead c1 TMP_70 TMP_73) in
88 (clear x0 TMP_74))))))) in (let TMP_78 \def (\lambda (c1: C).(let TMP_76 \def
89 (S n) in (let TMP_77 \def (minus d0 TMP_76) in (drop h TMP_77 c1 d)))) in
90 (let TMP_79 \def (TLRef n) in (let TMP_80 \def (lift h d0 TMP_79) in (let
91 TMP_81 \def (S n) in (let TMP_82 \def (lift TMP_81 O t) in (let TMP_83 \def
92 (lift h d0 TMP_82) in (let TMP_84 \def (ty3 g c0 TMP_80 TMP_83) in (let
93 TMP_157 \def (\lambda (x: C).(\lambda (H11: (clear x0 (CHead x (Bind Abbr)
94 (lift h (minus d0 (S n)) u)))).(\lambda (H12: (drop h (minus d0 (S n)) x
95 d)).(let TMP_85 \def (TLRef n) in (let TMP_89 \def (\lambda (t0: T).(let
96 TMP_86 \def (S n) in (let TMP_87 \def (lift TMP_86 O t) in (let TMP_88 \def
97 (lift h d0 TMP_87) in (ty3 g c0 t0 TMP_88))))) in (let TMP_90 \def (S n) in
98 (let TMP_91 \def (S n) in (let TMP_92 \def (minus d0 TMP_91) in (let TMP_93
99 \def (plus TMP_90 TMP_92) in (let TMP_98 \def (\lambda (n0: nat).(let TMP_94
100 \def (TLRef n) in (let TMP_95 \def (S n) in (let TMP_96 \def (lift TMP_95 O
101 t) in (let TMP_97 \def (lift h n0 TMP_96) in (ty3 g c0 TMP_94 TMP_97)))))) in
102 (let TMP_99 \def (S n) in (let TMP_100 \def (S n) in (let TMP_101 \def (minus
103 d0 TMP_100) in (let TMP_102 \def (lift h TMP_101 t) in (let TMP_103 \def
104 (lift TMP_99 O TMP_102) in (let TMP_105 \def (\lambda (t0: T).(let TMP_104
105 \def (TLRef n) in (ty3 g c0 TMP_104 t0))) in (let TMP_112 \def (\lambda (_:
106 nat).(let TMP_106 \def (TLRef n) in (let TMP_107 \def (S n) in (let TMP_108
107 \def (S n) in (let TMP_109 \def (minus d0 TMP_108) in (let TMP_110 \def (lift
108 h TMP_109 t) in (let TMP_111 \def (lift TMP_107 O TMP_110) in (ty3 g c0
109 TMP_106 TMP_111)))))))) in (let TMP_113 \def (S n) in (let TMP_114 \def
110 (minus d0 TMP_113) in (let TMP_115 \def (lift h TMP_114 u) in (let TMP_116
111 \def (Bind Abbr) in (let TMP_117 \def (S n) in (let TMP_118 \def (minus d0
112 TMP_117) in (let TMP_119 \def (lift h TMP_118 u) in (let TMP_120 \def (CHead
113 x TMP_116 TMP_119) in (let TMP_121 \def (getl_intro n c0 TMP_120 x0 H6 H11)
114 in (let TMP_122 \def (S n) in (let TMP_123 \def (minus d0 TMP_122) in (let
115 TMP_124 \def (lift h TMP_123 t) in (let TMP_125 \def (S n) in (let TMP_126
116 \def (minus d0 TMP_125) in (let TMP_127 \def (H2 x TMP_126 h H12) in (let
117 TMP_128 \def (ty3_abbr g n c0 x TMP_115 TMP_121 TMP_124 TMP_127) in (let
118 TMP_129 \def (S n) in (let TMP_130 \def (S n) in (let TMP_131 \def (minus d0
119 TMP_130) in (let TMP_132 \def (plus TMP_129 TMP_131) in (let TMP_133 \def (S
120 n) in (let TMP_134 \def (le_plus_minus TMP_133 d0 H4) in (let TMP_135 \def
121 (eq_ind nat d0 TMP_112 TMP_128 TMP_132 TMP_134) in (let TMP_136 \def (S n) in
122 (let TMP_137 \def (S n) in (let TMP_138 \def (minus d0 TMP_137) in (let
123 TMP_139 \def (plus TMP_136 TMP_138) in (let TMP_140 \def (S n) in (let
124 TMP_141 \def (lift TMP_140 O t) in (let TMP_142 \def (lift h TMP_139 TMP_141)
125 in (let TMP_143 \def (S n) in (let TMP_144 \def (S n) in (let TMP_145 \def
126 (minus d0 TMP_144) in (let TMP_146 \def (S n) in (let TMP_147 \def (minus d0
127 TMP_146) in (let TMP_148 \def (le_O_n TMP_147) in (let TMP_149 \def (lift_d t
128 h TMP_143 TMP_145 O TMP_148) in (let TMP_150 \def (eq_ind_r T TMP_103 TMP_105
129 TMP_135 TMP_142 TMP_149) in (let TMP_151 \def (S n) in (let TMP_152 \def
130 (le_plus_minus_r TMP_151 d0 H4) in (let TMP_153 \def (eq_ind nat TMP_93
131 TMP_98 TMP_150 d0 TMP_152) in (let TMP_154 \def (TLRef n) in (let TMP_155
132 \def (lift h d0 TMP_154) in (let TMP_156 \def (lift_lref_lt n h d0 H4) in
133 (eq_ind_r T TMP_85 TMP_89 TMP_153 TMP_155
134 TMP_156)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) in
135 (ex2_ind C TMP_75 TMP_78 TMP_84 TMP_157 H10))))))))))))))))))))))))) in
136 (ex3_2_ind C C TMP_50 TMP_52 TMP_55 TMP_61 TMP_158
137 H5))))))))))))))))))))))))) in (let TMP_232 \def (\lambda (H4: (le d0
138 n)).(let TMP_160 \def (plus n h) in (let TMP_161 \def (TLRef TMP_160) in (let
139 TMP_165 \def (\lambda (t0: T).(let TMP_162 \def (S n) in (let TMP_163 \def
140 (lift TMP_162 O t) in (let TMP_164 \def (lift h d0 TMP_163) in (ty3 g c0 t0
141 TMP_164))))) in (let TMP_166 \def (S n) in (let TMP_172 \def (\lambda (_:
142 nat).(let TMP_167 \def (plus n h) in (let TMP_168 \def (TLRef TMP_167) in
143 (let TMP_169 \def (S n) in (let TMP_170 \def (lift TMP_169 O t) in (let
144 TMP_171 \def (lift h d0 TMP_170) in (ty3 g c0 TMP_168 TMP_171))))))) in (let
145 TMP_173 \def (S n) in (let TMP_174 \def (plus h TMP_173) in (let TMP_175 \def
146 (lift TMP_174 O t) in (let TMP_178 \def (\lambda (t0: T).(let TMP_176 \def
147 (plus n h) in (let TMP_177 \def (TLRef TMP_176) in (ty3 g c0 TMP_177 t0))))
148 in (let TMP_179 \def (S n) in (let TMP_180 \def (plus TMP_179 h) in (let
149 TMP_184 \def (\lambda (n0: nat).(let TMP_181 \def (plus n h) in (let TMP_182
150 \def (TLRef TMP_181) in (let TMP_183 \def (lift n0 O t) in (ty3 g c0 TMP_182
151 TMP_183))))) in (let TMP_185 \def (plus n h) in (let TMP_186 \def (Bind Abbr)
152 in (let TMP_187 \def (CHead d TMP_186 u) in (let TMP_188 \def
153 (drop_getl_trans_ge n c0 c d0 h H3 TMP_187 H0 H4) in (let TMP_189 \def
154 (ty3_abbr g TMP_185 c0 d u TMP_188 t H1) in (let TMP_190 \def (S n) in (let
155 TMP_191 \def (plus h TMP_190) in (let TMP_192 \def (S n) in (let TMP_193 \def
156 (plus_sym h TMP_192) in (let TMP_194 \def (eq_ind_r nat TMP_180 TMP_184
157 TMP_189 TMP_191 TMP_193) in (let TMP_195 \def (S n) in (let TMP_196 \def
158 (lift TMP_195 O t) in (let TMP_197 \def (lift h d0 TMP_196) in (let TMP_198
159 \def (S n) in (let TMP_199 \def (S n) in (let TMP_200 \def (S d0) in (let
160 TMP_201 \def (S n) in (let TMP_202 \def (le_n_S d0 n H4) in (let TMP_203 \def
161 (le_S TMP_200 TMP_201 TMP_202) in (let TMP_204 \def (le_S_n d0 TMP_199
162 TMP_203) in (let TMP_205 \def (le_O_n d0) in (let TMP_206 \def (lift_free t
163 TMP_198 h O d0 TMP_204 TMP_205) in (let TMP_207 \def (eq_ind_r T TMP_175
164 TMP_178 TMP_194 TMP_197 TMP_206) in (let TMP_208 \def (S O) in (let TMP_209
165 \def (plus n TMP_208) in (let TMP_210 \def (S O) in (let TMP_211 \def (plus
166 TMP_210 n) in (let TMP_213 \def (\lambda (n0: nat).(let TMP_212 \def (S n) in
167 (eq nat TMP_212 n0))) in (let TMP_214 \def (S n) in (let TMP_215 \def (S O)
168 in (let TMP_216 \def (plus TMP_215 n) in (let TMP_217 \def (S O) in (let
169 TMP_218 \def (plus TMP_217 n) in (let TMP_219 \def (le_n TMP_218) in (let
170 TMP_220 \def (S n) in (let TMP_221 \def (le_n TMP_220) in (let TMP_222 \def
171 (le_antisym TMP_214 TMP_216 TMP_219 TMP_221) in (let TMP_223 \def (S O) in
172 (let TMP_224 \def (plus n TMP_223) in (let TMP_225 \def (S O) in (let TMP_226
173 \def (plus_sym n TMP_225) in (let TMP_227 \def (eq_ind_r nat TMP_211 TMP_213
174 TMP_222 TMP_224 TMP_226) in (let TMP_228 \def (eq_ind nat TMP_166 TMP_172
175 TMP_207 TMP_209 TMP_227) in (let TMP_229 \def (TLRef n) in (let TMP_230 \def
176 (lift h d0 TMP_229) in (let TMP_231 \def (lift_lref_ge n h d0 H4) in
177 (eq_ind_r T TMP_161 TMP_165 TMP_228 TMP_230
178 TMP_231)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) in
179 (lt_le_e n d0 TMP_37 TMP_159 TMP_232))))))))))))))))))))) in (let TMP_435
180 \def (\lambda (n: nat).(\lambda (c: C).(\lambda (d: C).(\lambda (u:
181 T).(\lambda (H0: (getl n c (CHead d (Bind Abst) u))).(\lambda (t: T).(\lambda
182 (H1: (ty3 g d u t)).(\lambda (H2: ((\forall (c0: C).(\forall (d0:
183 nat).(\forall (h: nat).((drop h d0 c0 d) \to (ty3 g c0 (lift h d0 u) (lift h
184 d0 t)))))))).(\lambda (c0: C).(\lambda (d0: nat).(\lambda (h: nat).(\lambda
185 (H3: (drop h d0 c0 c)).(let TMP_234 \def (TLRef n) in (let TMP_235 \def (lift
186 h d0 TMP_234) in (let TMP_236 \def (S n) in (let TMP_237 \def (lift TMP_236 O
187 u) in (let TMP_238 \def (lift h d0 TMP_237) in (let TMP_239 \def (ty3 g c0
188 TMP_235 TMP_238) in (let TMP_361 \def (\lambda (H4: (lt n d0)).(let TMP_240
189 \def (S n) in (let TMP_241 \def (S d0) in (let TMP_242 \def (S n) in (let
190 TMP_243 \def (S TMP_242) in (let TMP_244 \def (S d0) in (let TMP_245 \def (S
191 n) in (let TMP_246 \def (le_n_S TMP_245 d0 H4) in (let TMP_247 \def (le_S
192 TMP_243 TMP_244 TMP_246) in (let TMP_248 \def (le_S_n TMP_240 TMP_241
193 TMP_247) in (let TMP_249 \def (le_S_n n d0 TMP_248) in (let TMP_250 \def
194 (Bind Abst) in (let TMP_251 \def (CHead d TMP_250 u) in (let H5 \def
195 (drop_getl_trans_le n d0 TMP_249 c0 c h H3 TMP_251 H0) in (let TMP_252 \def
196 (\lambda (e0: C).(\lambda (_: C).(drop n O c0 e0))) in (let TMP_254 \def
197 (\lambda (e0: C).(\lambda (e1: C).(let TMP_253 \def (minus d0 n) in (drop h
198 TMP_253 e0 e1)))) in (let TMP_257 \def (\lambda (_: C).(\lambda (e1: C).(let
199 TMP_255 \def (Bind Abst) in (let TMP_256 \def (CHead d TMP_255 u) in (clear
200 e1 TMP_256))))) in (let TMP_258 \def (TLRef n) in (let TMP_259 \def (lift h
201 d0 TMP_258) in (let TMP_260 \def (S n) in (let TMP_261 \def (lift TMP_260 O
202 u) in (let TMP_262 \def (lift h d0 TMP_261) in (let TMP_263 \def (ty3 g c0
203 TMP_259 TMP_262) in (let TMP_360 \def (\lambda (x0: C).(\lambda (x1:
204 C).(\lambda (H6: (drop n O c0 x0)).(\lambda (H7: (drop h (minus d0 n) x0
205 x1)).(\lambda (H8: (clear x1 (CHead d (Bind Abst) u))).(let TMP_264 \def
206 (minus d0 n) in (let TMP_265 \def (\lambda (n0: nat).(drop h n0 x0 x1)) in
207 (let TMP_266 \def (S n) in (let TMP_267 \def (minus d0 TMP_266) in (let
208 TMP_268 \def (S TMP_267) in (let TMP_269 \def (minus_x_Sy d0 n H4) in (let H9
209 \def (eq_ind nat TMP_264 TMP_265 H7 TMP_268 TMP_269) in (let TMP_270 \def (S
210 n) in (let TMP_271 \def (minus d0 TMP_270) in (let H10 \def (drop_clear_S x1
211 x0 h TMP_271 H9 Abst d u H8) in (let TMP_277 \def (\lambda (c1: C).(let
212 TMP_272 \def (Bind Abst) in (let TMP_273 \def (S n) in (let TMP_274 \def
213 (minus d0 TMP_273) in (let TMP_275 \def (lift h TMP_274 u) in (let TMP_276
214 \def (CHead c1 TMP_272 TMP_275) in (clear x0 TMP_276))))))) in (let TMP_280
215 \def (\lambda (c1: C).(let TMP_278 \def (S n) in (let TMP_279 \def (minus d0
216 TMP_278) in (drop h TMP_279 c1 d)))) in (let TMP_281 \def (TLRef n) in (let
217 TMP_282 \def (lift h d0 TMP_281) in (let TMP_283 \def (S n) in (let TMP_284
218 \def (lift TMP_283 O u) in (let TMP_285 \def (lift h d0 TMP_284) in (let
219 TMP_286 \def (ty3 g c0 TMP_282 TMP_285) in (let TMP_359 \def (\lambda (x:
220 C).(\lambda (H11: (clear x0 (CHead x (Bind Abst) (lift h (minus d0 (S n))
221 u)))).(\lambda (H12: (drop h (minus d0 (S n)) x d)).(let TMP_287 \def (TLRef
222 n) in (let TMP_291 \def (\lambda (t0: T).(let TMP_288 \def (S n) in (let
223 TMP_289 \def (lift TMP_288 O u) in (let TMP_290 \def (lift h d0 TMP_289) in
224 (ty3 g c0 t0 TMP_290))))) in (let TMP_292 \def (S n) in (let TMP_293 \def (S
225 n) in (let TMP_294 \def (minus d0 TMP_293) in (let TMP_295 \def (plus TMP_292
226 TMP_294) in (let TMP_300 \def (\lambda (n0: nat).(let TMP_296 \def (TLRef n)
227 in (let TMP_297 \def (S n) in (let TMP_298 \def (lift TMP_297 O u) in (let
228 TMP_299 \def (lift h n0 TMP_298) in (ty3 g c0 TMP_296 TMP_299)))))) in (let
229 TMP_301 \def (S n) in (let TMP_302 \def (S n) in (let TMP_303 \def (minus d0
230 TMP_302) in (let TMP_304 \def (lift h TMP_303 u) in (let TMP_305 \def (lift
231 TMP_301 O TMP_304) in (let TMP_307 \def (\lambda (t0: T).(let TMP_306 \def
232 (TLRef n) in (ty3 g c0 TMP_306 t0))) in (let TMP_314 \def (\lambda (_:
233 nat).(let TMP_308 \def (TLRef n) in (let TMP_309 \def (S n) in (let TMP_310
234 \def (S n) in (let TMP_311 \def (minus d0 TMP_310) in (let TMP_312 \def (lift
235 h TMP_311 u) in (let TMP_313 \def (lift TMP_309 O TMP_312) in (ty3 g c0
236 TMP_308 TMP_313)))))))) in (let TMP_315 \def (S n) in (let TMP_316 \def
237 (minus d0 TMP_315) in (let TMP_317 \def (lift h TMP_316 u) in (let TMP_318
238 \def (Bind Abst) in (let TMP_319 \def (S n) in (let TMP_320 \def (minus d0
239 TMP_319) in (let TMP_321 \def (lift h TMP_320 u) in (let TMP_322 \def (CHead
240 x TMP_318 TMP_321) in (let TMP_323 \def (getl_intro n c0 TMP_322 x0 H6 H11)
241 in (let TMP_324 \def (S n) in (let TMP_325 \def (minus d0 TMP_324) in (let
242 TMP_326 \def (lift h TMP_325 t) in (let TMP_327 \def (S n) in (let TMP_328
243 \def (minus d0 TMP_327) in (let TMP_329 \def (H2 x TMP_328 h H12) in (let
244 TMP_330 \def (ty3_abst g n c0 x TMP_317 TMP_323 TMP_326 TMP_329) in (let
245 TMP_331 \def (S n) in (let TMP_332 \def (S n) in (let TMP_333 \def (minus d0
246 TMP_332) in (let TMP_334 \def (plus TMP_331 TMP_333) in (let TMP_335 \def (S
247 n) in (let TMP_336 \def (le_plus_minus TMP_335 d0 H4) in (let TMP_337 \def
248 (eq_ind nat d0 TMP_314 TMP_330 TMP_334 TMP_336) in (let TMP_338 \def (S n) in
249 (let TMP_339 \def (S n) in (let TMP_340 \def (minus d0 TMP_339) in (let
250 TMP_341 \def (plus TMP_338 TMP_340) in (let TMP_342 \def (S n) in (let
251 TMP_343 \def (lift TMP_342 O u) in (let TMP_344 \def (lift h TMP_341 TMP_343)
252 in (let TMP_345 \def (S n) in (let TMP_346 \def (S n) in (let TMP_347 \def
253 (minus d0 TMP_346) in (let TMP_348 \def (S n) in (let TMP_349 \def (minus d0
254 TMP_348) in (let TMP_350 \def (le_O_n TMP_349) in (let TMP_351 \def (lift_d u
255 h TMP_345 TMP_347 O TMP_350) in (let TMP_352 \def (eq_ind_r T TMP_305 TMP_307
256 TMP_337 TMP_344 TMP_351) in (let TMP_353 \def (S n) in (let TMP_354 \def
257 (le_plus_minus_r TMP_353 d0 H4) in (let TMP_355 \def (eq_ind nat TMP_295
258 TMP_300 TMP_352 d0 TMP_354) in (let TMP_356 \def (TLRef n) in (let TMP_357
259 \def (lift h d0 TMP_356) in (let TMP_358 \def (lift_lref_lt n h d0 H4) in
260 (eq_ind_r T TMP_287 TMP_291 TMP_355 TMP_357
261 TMP_358)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) in
262 (ex2_ind C TMP_277 TMP_280 TMP_286 TMP_359 H10))))))))))))))))))))))))) in
263 (ex3_2_ind C C TMP_252 TMP_254 TMP_257 TMP_263 TMP_360
264 H5))))))))))))))))))))))))) in (let TMP_434 \def (\lambda (H4: (le d0
265 n)).(let TMP_362 \def (plus n h) in (let TMP_363 \def (TLRef TMP_362) in (let
266 TMP_367 \def (\lambda (t0: T).(let TMP_364 \def (S n) in (let TMP_365 \def
267 (lift TMP_364 O u) in (let TMP_366 \def (lift h d0 TMP_365) in (ty3 g c0 t0
268 TMP_366))))) in (let TMP_368 \def (S n) in (let TMP_374 \def (\lambda (_:
269 nat).(let TMP_369 \def (plus n h) in (let TMP_370 \def (TLRef TMP_369) in
270 (let TMP_371 \def (S n) in (let TMP_372 \def (lift TMP_371 O u) in (let
271 TMP_373 \def (lift h d0 TMP_372) in (ty3 g c0 TMP_370 TMP_373))))))) in (let
272 TMP_375 \def (S n) in (let TMP_376 \def (plus h TMP_375) in (let TMP_377 \def
273 (lift TMP_376 O u) in (let TMP_380 \def (\lambda (t0: T).(let TMP_378 \def
274 (plus n h) in (let TMP_379 \def (TLRef TMP_378) in (ty3 g c0 TMP_379 t0))))
275 in (let TMP_381 \def (S n) in (let TMP_382 \def (plus TMP_381 h) in (let
276 TMP_386 \def (\lambda (n0: nat).(let TMP_383 \def (plus n h) in (let TMP_384
277 \def (TLRef TMP_383) in (let TMP_385 \def (lift n0 O u) in (ty3 g c0 TMP_384
278 TMP_385))))) in (let TMP_387 \def (plus n h) in (let TMP_388 \def (Bind Abst)
279 in (let TMP_389 \def (CHead d TMP_388 u) in (let TMP_390 \def
280 (drop_getl_trans_ge n c0 c d0 h H3 TMP_389 H0 H4) in (let TMP_391 \def
281 (ty3_abst g TMP_387 c0 d u TMP_390 t H1) in (let TMP_392 \def (S n) in (let
282 TMP_393 \def (plus h TMP_392) in (let TMP_394 \def (S n) in (let TMP_395 \def
283 (plus_sym h TMP_394) in (let TMP_396 \def (eq_ind_r nat TMP_382 TMP_386
284 TMP_391 TMP_393 TMP_395) in (let TMP_397 \def (S n) in (let TMP_398 \def
285 (lift TMP_397 O u) in (let TMP_399 \def (lift h d0 TMP_398) in (let TMP_400
286 \def (S n) in (let TMP_401 \def (S n) in (let TMP_402 \def (S d0) in (let
287 TMP_403 \def (S n) in (let TMP_404 \def (le_n_S d0 n H4) in (let TMP_405 \def
288 (le_S TMP_402 TMP_403 TMP_404) in (let TMP_406 \def (le_S_n d0 TMP_401
289 TMP_405) in (let TMP_407 \def (le_O_n d0) in (let TMP_408 \def (lift_free u
290 TMP_400 h O d0 TMP_406 TMP_407) in (let TMP_409 \def (eq_ind_r T TMP_377
291 TMP_380 TMP_396 TMP_399 TMP_408) in (let TMP_410 \def (S O) in (let TMP_411
292 \def (plus n TMP_410) in (let TMP_412 \def (S O) in (let TMP_413 \def (plus
293 TMP_412 n) in (let TMP_415 \def (\lambda (n0: nat).(let TMP_414 \def (S n) in
294 (eq nat TMP_414 n0))) in (let TMP_416 \def (S n) in (let TMP_417 \def (S O)
295 in (let TMP_418 \def (plus TMP_417 n) in (let TMP_419 \def (S O) in (let
296 TMP_420 \def (plus TMP_419 n) in (let TMP_421 \def (le_n TMP_420) in (let
297 TMP_422 \def (S n) in (let TMP_423 \def (le_n TMP_422) in (let TMP_424 \def
298 (le_antisym TMP_416 TMP_418 TMP_421 TMP_423) in (let TMP_425 \def (S O) in
299 (let TMP_426 \def (plus n TMP_425) in (let TMP_427 \def (S O) in (let TMP_428
300 \def (plus_sym n TMP_427) in (let TMP_429 \def (eq_ind_r nat TMP_413 TMP_415
301 TMP_424 TMP_426 TMP_428) in (let TMP_430 \def (eq_ind nat TMP_368 TMP_374
302 TMP_409 TMP_411 TMP_429) in (let TMP_431 \def (TLRef n) in (let TMP_432 \def
303 (lift h d0 TMP_431) in (let TMP_433 \def (lift_lref_ge n h d0 H4) in
304 (eq_ind_r T TMP_363 TMP_367 TMP_430 TMP_432
305 TMP_433)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) in
306 (lt_le_e n d0 TMP_239 TMP_361 TMP_434))))))))))))))))))))) in (let TMP_484
307 \def (\lambda (c: C).(\lambda (u: T).(\lambda (t: T).(\lambda (_: (ty3 g c u
308 t)).(\lambda (H1: ((\forall (c0: C).(\forall (d: nat).(\forall (h:
309 nat).((drop h d c0 c) \to (ty3 g c0 (lift h d u) (lift h d t)))))))).(\lambda
310 (b: B).(\lambda (t0: T).(\lambda (t3: T).(\lambda (_: (ty3 g (CHead c (Bind
311 b) u) t0 t3)).(\lambda (H3: ((\forall (c0: C).(\forall (d: nat).(\forall (h:
312 nat).((drop h d c0 (CHead c (Bind b) u)) \to (ty3 g c0 (lift h d t0) (lift h
313 d t3)))))))).(\lambda (c0: C).(\lambda (d: nat).(\lambda (h: nat).(\lambda
314 (H4: (drop h d c0 c)).(let TMP_436 \def (Bind b) in (let TMP_437 \def (lift h
315 d u) in (let TMP_438 \def (Bind b) in (let TMP_439 \def (s TMP_438 d) in (let
316 TMP_440 \def (lift h TMP_439 t0) in (let TMP_441 \def (THead TMP_436 TMP_437
317 TMP_440) in (let TMP_445 \def (\lambda (t4: T).(let TMP_442 \def (Bind b) in
318 (let TMP_443 \def (THead TMP_442 u t3) in (let TMP_444 \def (lift h d
319 TMP_443) in (ty3 g c0 t4 TMP_444))))) in (let TMP_446 \def (Bind b) in (let
320 TMP_447 \def (lift h d u) in (let TMP_448 \def (Bind b) in (let TMP_449 \def
321 (s TMP_448 d) in (let TMP_450 \def (lift h TMP_449 t3) in (let TMP_451 \def
322 (THead TMP_446 TMP_447 TMP_450) in (let TMP_458 \def (\lambda (t4: T).(let
323 TMP_452 \def (Bind b) in (let TMP_453 \def (lift h d u) in (let TMP_454 \def
324 (Bind b) in (let TMP_455 \def (s TMP_454 d) in (let TMP_456 \def (lift h
325 TMP_455 t0) in (let TMP_457 \def (THead TMP_452 TMP_453 TMP_456) in (ty3 g c0
326 TMP_457 t4)))))))) in (let TMP_459 \def (lift h d u) in (let TMP_460 \def
327 (lift h d t) in (let TMP_461 \def (H1 c0 d h H4) in (let TMP_462 \def (S d)
328 in (let TMP_463 \def (lift h TMP_462 t0) in (let TMP_464 \def (S d) in (let
329 TMP_465 \def (lift h TMP_464 t3) in (let TMP_466 \def (Bind b) in (let
330 TMP_467 \def (lift h d u) in (let TMP_468 \def (CHead c0 TMP_466 TMP_467) in
331 (let TMP_469 \def (S d) in (let TMP_470 \def (drop_skip_bind h d c0 c H4 b u)
332 in (let TMP_471 \def (H3 TMP_468 TMP_469 h TMP_470) in (let TMP_472 \def
333 (ty3_bind g c0 TMP_459 TMP_460 TMP_461 b TMP_463 TMP_465 TMP_471) in (let
334 TMP_473 \def (Bind b) in (let TMP_474 \def (THead TMP_473 u t3) in (let
335 TMP_475 \def (lift h d TMP_474) in (let TMP_476 \def (Bind b) in (let TMP_477
336 \def (lift_head TMP_476 u t3 h d) in (let TMP_478 \def (eq_ind_r T TMP_451
337 TMP_458 TMP_472 TMP_475 TMP_477) in (let TMP_479 \def (Bind b) in (let
338 TMP_480 \def (THead TMP_479 u t0) in (let TMP_481 \def (lift h d TMP_480) in
339 (let TMP_482 \def (Bind b) in (let TMP_483 \def (lift_head TMP_482 u t0 h d)
340 in (eq_ind_r T TMP_441 TMP_445 TMP_478 TMP_481
341 TMP_483)))))))))))))))))))))))))))))))))))))))))))))))))))))) in (let TMP_577
342 \def (\lambda (c: C).(\lambda (w: T).(\lambda (u: T).(\lambda (_: (ty3 g c w
343 u)).(\lambda (H1: ((\forall (c0: C).(\forall (d: nat).(\forall (h:
344 nat).((drop h d c0 c) \to (ty3 g c0 (lift h d w) (lift h d u)))))))).(\lambda
345 (v: T).(\lambda (t: T).(\lambda (_: (ty3 g c v (THead (Bind Abst) u
346 t))).(\lambda (H3: ((\forall (c0: C).(\forall (d: nat).(\forall (h:
347 nat).((drop h d c0 c) \to (ty3 g c0 (lift h d v) (lift h d (THead (Bind Abst)
348 u t))))))))).(\lambda (c0: C).(\lambda (d: nat).(\lambda (h: nat).(\lambda
349 (H4: (drop h d c0 c)).(let TMP_485 \def (Flat Appl) in (let TMP_486 \def
350 (lift h d w) in (let TMP_487 \def (Flat Appl) in (let TMP_488 \def (s TMP_487
351 d) in (let TMP_489 \def (lift h TMP_488 v) in (let TMP_490 \def (THead
352 TMP_485 TMP_486 TMP_489) in (let TMP_496 \def (\lambda (t0: T).(let TMP_491
353 \def (Flat Appl) in (let TMP_492 \def (Bind Abst) in (let TMP_493 \def (THead
354 TMP_492 u t) in (let TMP_494 \def (THead TMP_491 w TMP_493) in (let TMP_495
355 \def (lift h d TMP_494) in (ty3 g c0 t0 TMP_495))))))) in (let TMP_497 \def
356 (Flat Appl) in (let TMP_498 \def (lift h d w) in (let TMP_499 \def (Flat
357 Appl) in (let TMP_500 \def (s TMP_499 d) in (let TMP_501 \def (Bind Abst) in
358 (let TMP_502 \def (THead TMP_501 u t) in (let TMP_503 \def (lift h TMP_500
359 TMP_502) in (let TMP_504 \def (THead TMP_497 TMP_498 TMP_503) in (let TMP_511
360 \def (\lambda (t0: T).(let TMP_505 \def (Flat Appl) in (let TMP_506 \def
361 (lift h d w) in (let TMP_507 \def (Flat Appl) in (let TMP_508 \def (s TMP_507
362 d) in (let TMP_509 \def (lift h TMP_508 v) in (let TMP_510 \def (THead
363 TMP_505 TMP_506 TMP_509) in (ty3 g c0 TMP_510 t0)))))))) in (let TMP_512 \def
364 (Bind Abst) in (let TMP_513 \def (Flat Appl) in (let TMP_514 \def (s TMP_513
365 d) in (let TMP_515 \def (lift h TMP_514 u) in (let TMP_516 \def (Bind Abst)
366 in (let TMP_517 \def (Flat Appl) in (let TMP_518 \def (s TMP_517 d) in (let
367 TMP_519 \def (s TMP_516 TMP_518) in (let TMP_520 \def (lift h TMP_519 t) in
368 (let TMP_521 \def (THead TMP_512 TMP_515 TMP_520) in (let TMP_531 \def
369 (\lambda (t0: T).(let TMP_522 \def (Flat Appl) in (let TMP_523 \def (lift h d
370 w) in (let TMP_524 \def (Flat Appl) in (let TMP_525 \def (s TMP_524 d) in
371 (let TMP_526 \def (lift h TMP_525 v) in (let TMP_527 \def (THead TMP_522
372 TMP_523 TMP_526) in (let TMP_528 \def (Flat Appl) in (let TMP_529 \def (lift
373 h d w) in (let TMP_530 \def (THead TMP_528 TMP_529 t0) in (ty3 g c0 TMP_527
374 TMP_530))))))))))) in (let TMP_532 \def (lift h d w) in (let TMP_533 \def
375 (lift h d u) in (let TMP_534 \def (H1 c0 d h H4) in (let TMP_535 \def (lift h
376 d v) in (let TMP_536 \def (S d) in (let TMP_537 \def (lift h TMP_536 t) in
377 (let TMP_538 \def (Bind Abst) in (let TMP_539 \def (THead TMP_538 u t) in
378 (let TMP_540 \def (lift h d TMP_539) in (let TMP_542 \def (\lambda (t0:
379 T).(let TMP_541 \def (lift h d v) in (ty3 g c0 TMP_541 t0))) in (let TMP_543
380 \def (H3 c0 d h H4) in (let TMP_544 \def (Bind Abst) in (let TMP_545 \def
381 (lift h d u) in (let TMP_546 \def (S d) in (let TMP_547 \def (lift h TMP_546
382 t) in (let TMP_548 \def (THead TMP_544 TMP_545 TMP_547) in (let TMP_549 \def
383 (lift_bind Abst u t h d) in (let TMP_550 \def (eq_ind T TMP_540 TMP_542
384 TMP_543 TMP_548 TMP_549) in (let TMP_551 \def (ty3_appl g c0 TMP_532 TMP_533
385 TMP_534 TMP_535 TMP_537 TMP_550) in (let TMP_552 \def (Flat Appl) in (let
386 TMP_553 \def (s TMP_552 d) in (let TMP_554 \def (Bind Abst) in (let TMP_555
387 \def (THead TMP_554 u t) in (let TMP_556 \def (lift h TMP_553 TMP_555) in
388 (let TMP_557 \def (Bind Abst) in (let TMP_558 \def (Flat Appl) in (let
389 TMP_559 \def (s TMP_558 d) in (let TMP_560 \def (lift_head TMP_557 u t h
390 TMP_559) in (let TMP_561 \def (eq_ind_r T TMP_521 TMP_531 TMP_551 TMP_556
391 TMP_560) in (let TMP_562 \def (Flat Appl) in (let TMP_563 \def (Bind Abst) in
392 (let TMP_564 \def (THead TMP_563 u t) in (let TMP_565 \def (THead TMP_562 w
393 TMP_564) in (let TMP_566 \def (lift h d TMP_565) in (let TMP_567 \def (Flat
394 Appl) in (let TMP_568 \def (Bind Abst) in (let TMP_569 \def (THead TMP_568 u
395 t) in (let TMP_570 \def (lift_head TMP_567 w TMP_569 h d) in (let TMP_571
396 \def (eq_ind_r T TMP_504 TMP_511 TMP_561 TMP_566 TMP_570) in (let TMP_572
397 \def (Flat Appl) in (let TMP_573 \def (THead TMP_572 w v) in (let TMP_574
398 \def (lift h d TMP_573) in (let TMP_575 \def (Flat Appl) in (let TMP_576 \def
399 (lift_head TMP_575 w v h d) in (eq_ind_r T TMP_490 TMP_496 TMP_571 TMP_574
400 TMP_576)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
401 )))))))))))))) in (let TMP_624 \def (\lambda (c: C).(\lambda (t0: T).(\lambda
402 (t3: T).(\lambda (_: (ty3 g c t0 t3)).(\lambda (H1: ((\forall (c0:
403 C).(\forall (d: nat).(\forall (h: nat).((drop h d c0 c) \to (ty3 g c0 (lift h
404 d t0) (lift h d t3)))))))).(\lambda (t4: T).(\lambda (_: (ty3 g c t3
405 t4)).(\lambda (H3: ((\forall (c0: C).(\forall (d: nat).(\forall (h:
406 nat).((drop h d c0 c) \to (ty3 g c0 (lift h d t3) (lift h d
407 t4)))))))).(\lambda (c0: C).(\lambda (d: nat).(\lambda (h: nat).(\lambda (H4:
408 (drop h d c0 c)).(let TMP_578 \def (Flat Cast) in (let TMP_579 \def (lift h d
409 t3) in (let TMP_580 \def (Flat Cast) in (let TMP_581 \def (s TMP_580 d) in
410 (let TMP_582 \def (lift h TMP_581 t0) in (let TMP_583 \def (THead TMP_578
411 TMP_579 TMP_582) in (let TMP_587 \def (\lambda (t: T).(let TMP_584 \def (Flat
412 Cast) in (let TMP_585 \def (THead TMP_584 t4 t3) in (let TMP_586 \def (lift h
413 d TMP_585) in (ty3 g c0 t TMP_586))))) in (let TMP_588 \def (Flat Cast) in
414 (let TMP_589 \def (lift h d t4) in (let TMP_590 \def (Flat Cast) in (let
415 TMP_591 \def (s TMP_590 d) in (let TMP_592 \def (lift h TMP_591 t3) in (let
416 TMP_593 \def (THead TMP_588 TMP_589 TMP_592) in (let TMP_600 \def (\lambda
417 (t: T).(let TMP_594 \def (Flat Cast) in (let TMP_595 \def (lift h d t3) in
418 (let TMP_596 \def (Flat Cast) in (let TMP_597 \def (s TMP_596 d) in (let
419 TMP_598 \def (lift h TMP_597 t0) in (let TMP_599 \def (THead TMP_594 TMP_595
420 TMP_598) in (ty3 g c0 TMP_599 t)))))))) in (let TMP_601 \def (Flat Cast) in
421 (let TMP_602 \def (s TMP_601 d) in (let TMP_603 \def (lift h TMP_602 t0) in
422 (let TMP_604 \def (Flat Cast) in (let TMP_605 \def (s TMP_604 d) in (let
423 TMP_606 \def (lift h TMP_605 t3) in (let TMP_607 \def (Flat Cast) in (let
424 TMP_608 \def (s TMP_607 d) in (let TMP_609 \def (H1 c0 TMP_608 h H4) in (let
425 TMP_610 \def (lift h d t4) in (let TMP_611 \def (H3 c0 d h H4) in (let
426 TMP_612 \def (ty3_cast g c0 TMP_603 TMP_606 TMP_609 TMP_610 TMP_611) in (let
427 TMP_613 \def (Flat Cast) in (let TMP_614 \def (THead TMP_613 t4 t3) in (let
428 TMP_615 \def (lift h d TMP_614) in (let TMP_616 \def (Flat Cast) in (let
429 TMP_617 \def (lift_head TMP_616 t4 t3 h d) in (let TMP_618 \def (eq_ind_r T
430 TMP_593 TMP_600 TMP_612 TMP_615 TMP_617) in (let TMP_619 \def (Flat Cast) in
431 (let TMP_620 \def (THead TMP_619 t3 t0) in (let TMP_621 \def (lift h d
432 TMP_620) in (let TMP_622 \def (Flat Cast) in (let TMP_623 \def (lift_head
433 TMP_622 t3 t0 h d) in (eq_ind_r T TMP_583 TMP_587 TMP_618 TMP_621
434 TMP_623)))))))))))))))))))))))))))))))))))))))))))))))))) in (ty3_ind g TMP_3
435 TMP_11 TMP_31 TMP_233 TMP_435 TMP_484 TMP_577 TMP_624 e t1 t2 H))))))))))))).
438 \forall (g: G).(\forall (c: C).(\forall (t1: T).(\forall (t2: T).((ty3 g c
439 t1 t2) \to (ex T (\lambda (t: T).(ty3 g c t2 t)))))))
441 \lambda (g: G).(\lambda (c: C).(\lambda (t1: T).(\lambda (t2: T).(\lambda
442 (H: (ty3 g c t1 t2)).(let TMP_2 \def (\lambda (c0: C).(\lambda (_:
443 T).(\lambda (t0: T).(let TMP_1 \def (\lambda (t3: T).(ty3 g c0 t0 t3)) in (ex
444 T TMP_1))))) in (let TMP_4 \def (\lambda (c0: C).(\lambda (t0: T).(\lambda
445 (t: T).(\lambda (H0: (ty3 g c0 t0 t)).(\lambda (_: (ex T (\lambda (t3:
446 T).(ty3 g c0 t t3)))).(\lambda (u: T).(\lambda (t3: T).(\lambda (_: (ty3 g c0
447 u t3)).(\lambda (_: (ex T (\lambda (t4: T).(ty3 g c0 t3 t4)))).(\lambda (_:
448 (pc3 c0 t3 t0)).(let TMP_3 \def (\lambda (t4: T).(ty3 g c0 t0 t4)) in
449 (ex_intro T TMP_3 t H0)))))))))))) in (let TMP_13 \def (\lambda (c0:
450 C).(\lambda (m: nat).(let TMP_7 \def (\lambda (t: T).(let TMP_5 \def (next g
451 m) in (let TMP_6 \def (TSort TMP_5) in (ty3 g c0 TMP_6 t)))) in (let TMP_8
452 \def (next g m) in (let TMP_9 \def (next g TMP_8) in (let TMP_10 \def (TSort
453 TMP_9) in (let TMP_11 \def (next g m) in (let TMP_12 \def (ty3_sort g c0
454 TMP_11) in (ex_intro T TMP_7 TMP_10 TMP_12))))))))) in (let TMP_28 \def
455 (\lambda (n: nat).(\lambda (c0: C).(\lambda (d: C).(\lambda (u: T).(\lambda
456 (H0: (getl n c0 (CHead d (Bind Abbr) u))).(\lambda (t: T).(\lambda (_: (ty3 g
457 d u t)).(\lambda (H2: (ex T (\lambda (t0: T).(ty3 g d t t0)))).(let H3 \def
458 H2 in (let TMP_14 \def (\lambda (t0: T).(ty3 g d t t0)) in (let TMP_17 \def
459 (\lambda (t0: T).(let TMP_15 \def (S n) in (let TMP_16 \def (lift TMP_15 O t)
460 in (ty3 g c0 TMP_16 t0)))) in (let TMP_18 \def (ex T TMP_17) in (let TMP_27
461 \def (\lambda (x: T).(\lambda (H4: (ty3 g d t x)).(let TMP_21 \def (\lambda
462 (t0: T).(let TMP_19 \def (S n) in (let TMP_20 \def (lift TMP_19 O t) in (ty3
463 g c0 TMP_20 t0)))) in (let TMP_22 \def (S n) in (let TMP_23 \def (lift TMP_22
464 O x) in (let TMP_24 \def (S n) in (let TMP_25 \def (getl_drop Abbr c0 d u n
465 H0) in (let TMP_26 \def (ty3_lift g d t x H4 c0 O TMP_24 TMP_25) in (ex_intro
466 T TMP_21 TMP_23 TMP_26))))))))) in (ex_ind T TMP_14 TMP_18 TMP_27
467 H3)))))))))))))) in (let TMP_37 \def (\lambda (n: nat).(\lambda (c0:
468 C).(\lambda (d: C).(\lambda (u: T).(\lambda (H0: (getl n c0 (CHead d (Bind
469 Abst) u))).(\lambda (t: T).(\lambda (H1: (ty3 g d u t)).(\lambda (_: (ex T
470 (\lambda (t0: T).(ty3 g d t t0)))).(let TMP_31 \def (\lambda (t0: T).(let
471 TMP_29 \def (S n) in (let TMP_30 \def (lift TMP_29 O u) in (ty3 g c0 TMP_30
472 t0)))) in (let TMP_32 \def (S n) in (let TMP_33 \def (lift TMP_32 O t) in
473 (let TMP_34 \def (S n) in (let TMP_35 \def (getl_drop Abst c0 d u n H0) in
474 (let TMP_36 \def (ty3_lift g d u t H1 c0 O TMP_34 TMP_35) in (ex_intro T
475 TMP_31 TMP_33 TMP_36))))))))))))))) in (let TMP_52 \def (\lambda (c0:
476 C).(\lambda (u: T).(\lambda (t: T).(\lambda (H0: (ty3 g c0 u t)).(\lambda (_:
477 (ex T (\lambda (t0: T).(ty3 g c0 t t0)))).(\lambda (b: B).(\lambda (t0:
478 T).(\lambda (t3: T).(\lambda (_: (ty3 g (CHead c0 (Bind b) u) t0
479 t3)).(\lambda (H3: (ex T (\lambda (t4: T).(ty3 g (CHead c0 (Bind b) u) t3
480 t4)))).(let H4 \def H3 in (let TMP_40 \def (\lambda (t4: T).(let TMP_38 \def
481 (Bind b) in (let TMP_39 \def (CHead c0 TMP_38 u) in (ty3 g TMP_39 t3 t4))))
482 in (let TMP_43 \def (\lambda (t4: T).(let TMP_41 \def (Bind b) in (let TMP_42
483 \def (THead TMP_41 u t3) in (ty3 g c0 TMP_42 t4)))) in (let TMP_44 \def (ex T
484 TMP_43) in (let TMP_51 \def (\lambda (x: T).(\lambda (H5: (ty3 g (CHead c0
485 (Bind b) u) t3 x)).(let TMP_47 \def (\lambda (t4: T).(let TMP_45 \def (Bind
486 b) in (let TMP_46 \def (THead TMP_45 u t3) in (ty3 g c0 TMP_46 t4)))) in (let
487 TMP_48 \def (Bind b) in (let TMP_49 \def (THead TMP_48 u x) in (let TMP_50
488 \def (ty3_bind g c0 u t H0 b t3 x H5) in (ex_intro T TMP_47 TMP_49
489 TMP_50))))))) in (ex_ind T TMP_40 TMP_44 TMP_51 H4)))))))))))))))) in (let
490 TMP_99 \def (\lambda (c0: C).(\lambda (w: T).(\lambda (u: T).(\lambda (H0:
491 (ty3 g c0 w u)).(\lambda (H1: (ex T (\lambda (t: T).(ty3 g c0 u
492 t)))).(\lambda (v: T).(\lambda (t: T).(\lambda (_: (ty3 g c0 v (THead (Bind
493 Abst) u t))).(\lambda (H3: (ex T (\lambda (t0: T).(ty3 g c0 (THead (Bind
494 Abst) u t) t0)))).(let H4 \def H1 in (let TMP_53 \def (\lambda (t0: T).(ty3 g
495 c0 u t0)) in (let TMP_58 \def (\lambda (t0: T).(let TMP_54 \def (Flat Appl)
496 in (let TMP_55 \def (Bind Abst) in (let TMP_56 \def (THead TMP_55 u t) in
497 (let TMP_57 \def (THead TMP_54 w TMP_56) in (ty3 g c0 TMP_57 t0)))))) in (let
498 TMP_59 \def (ex T TMP_58) in (let TMP_98 \def (\lambda (x: T).(\lambda (_:
499 (ty3 g c0 u x)).(let H6 \def H3 in (let TMP_62 \def (\lambda (t0: T).(let
500 TMP_60 \def (Bind Abst) in (let TMP_61 \def (THead TMP_60 u t) in (ty3 g c0
501 TMP_61 t0)))) in (let TMP_67 \def (\lambda (t0: T).(let TMP_63 \def (Flat
502 Appl) in (let TMP_64 \def (Bind Abst) in (let TMP_65 \def (THead TMP_64 u t)
503 in (let TMP_66 \def (THead TMP_63 w TMP_65) in (ty3 g c0 TMP_66 t0)))))) in
504 (let TMP_68 \def (ex T TMP_67) in (let TMP_97 \def (\lambda (x0: T).(\lambda
505 (H7: (ty3 g c0 (THead (Bind Abst) u t) x0)).(let TMP_71 \def (\lambda (t3:
506 T).(\lambda (_: T).(let TMP_69 \def (Bind Abst) in (let TMP_70 \def (THead
507 TMP_69 u t3) in (pc3 c0 TMP_70 x0))))) in (let TMP_72 \def (\lambda (_:
508 T).(\lambda (t0: T).(ty3 g c0 u t0))) in (let TMP_75 \def (\lambda (t3:
509 T).(\lambda (_: T).(let TMP_73 \def (Bind Abst) in (let TMP_74 \def (CHead c0
510 TMP_73 u) in (ty3 g TMP_74 t t3))))) in (let TMP_80 \def (\lambda (t0:
511 T).(let TMP_76 \def (Flat Appl) in (let TMP_77 \def (Bind Abst) in (let
512 TMP_78 \def (THead TMP_77 u t) in (let TMP_79 \def (THead TMP_76 w TMP_78) in
513 (ty3 g c0 TMP_79 t0)))))) in (let TMP_81 \def (ex T TMP_80) in (let TMP_95
514 \def (\lambda (x1: T).(\lambda (x2: T).(\lambda (_: (pc3 c0 (THead (Bind
515 Abst) u x1) x0)).(\lambda (H9: (ty3 g c0 u x2)).(\lambda (H10: (ty3 g (CHead
516 c0 (Bind Abst) u) t x1)).(let TMP_86 \def (\lambda (t0: T).(let TMP_82 \def
517 (Flat Appl) in (let TMP_83 \def (Bind Abst) in (let TMP_84 \def (THead TMP_83
518 u t) in (let TMP_85 \def (THead TMP_82 w TMP_84) in (ty3 g c0 TMP_85 t0))))))
519 in (let TMP_87 \def (Flat Appl) in (let TMP_88 \def (Bind Abst) in (let
520 TMP_89 \def (THead TMP_88 u x1) in (let TMP_90 \def (THead TMP_87 w TMP_89)
521 in (let TMP_91 \def (Bind Abst) in (let TMP_92 \def (THead TMP_91 u t) in
522 (let TMP_93 \def (ty3_bind g c0 u x2 H9 Abst t x1 H10) in (let TMP_94 \def
523 (ty3_appl g c0 w u H0 TMP_92 x1 TMP_93) in (ex_intro T TMP_86 TMP_90
524 TMP_94))))))))))))))) in (let TMP_96 \def (ty3_gen_bind g Abst c0 u t x0 H7)
525 in (ex3_2_ind T T TMP_71 TMP_72 TMP_75 TMP_81 TMP_95 TMP_96)))))))))) in
526 (ex_ind T TMP_62 TMP_68 TMP_97 H6)))))))) in (ex_ind T TMP_53 TMP_59 TMP_98
527 H4))))))))))))))) in (let TMP_112 \def (\lambda (c0: C).(\lambda (t0:
528 T).(\lambda (t3: T).(\lambda (_: (ty3 g c0 t0 t3)).(\lambda (_: (ex T
529 (\lambda (t: T).(ty3 g c0 t3 t)))).(\lambda (t4: T).(\lambda (H2: (ty3 g c0
530 t3 t4)).(\lambda (H3: (ex T (\lambda (t: T).(ty3 g c0 t4 t)))).(let H4 \def
531 H3 in (let TMP_100 \def (\lambda (t: T).(ty3 g c0 t4 t)) in (let TMP_103 \def
532 (\lambda (t: T).(let TMP_101 \def (Flat Cast) in (let TMP_102 \def (THead
533 TMP_101 t4 t3) in (ty3 g c0 TMP_102 t)))) in (let TMP_104 \def (ex T TMP_103)
534 in (let TMP_111 \def (\lambda (x: T).(\lambda (H5: (ty3 g c0 t4 x)).(let
535 TMP_107 \def (\lambda (t: T).(let TMP_105 \def (Flat Cast) in (let TMP_106
536 \def (THead TMP_105 t4 t3) in (ty3 g c0 TMP_106 t)))) in (let TMP_108 \def
537 (Flat Cast) in (let TMP_109 \def (THead TMP_108 x t4) in (let TMP_110 \def
538 (ty3_cast g c0 t3 t4 H2 x H5) in (ex_intro T TMP_107 TMP_109 TMP_110)))))))
539 in (ex_ind T TMP_100 TMP_104 TMP_111 H4)))))))))))))) in (ty3_ind g TMP_2
540 TMP_4 TMP_13 TMP_28 TMP_37 TMP_52 TMP_99 TMP_112 c t1 t2 H))))))))))))).
543 \forall (g: G).(\forall (c: C).(\forall (u: T).(\forall (t1: T).((ty3 g c u
544 t1) \to (\forall (t2: T).((ty3 g c u t2) \to (pc3 c t1 t2)))))))
546 \lambda (g: G).(\lambda (c: C).(\lambda (u: T).(\lambda (t1: T).(\lambda (H:
547 (ty3 g c u t1)).(let TMP_1 \def (\lambda (c0: C).(\lambda (t: T).(\lambda
548 (t0: T).(\forall (t2: T).((ty3 g c0 t t2) \to (pc3 c0 t0 t2)))))) in (let
549 TMP_4 \def (\lambda (c0: C).(\lambda (t2: T).(\lambda (t: T).(\lambda (_:
550 (ty3 g c0 t2 t)).(\lambda (_: ((\forall (t3: T).((ty3 g c0 t2 t3) \to (pc3 c0
551 t t3))))).(\lambda (u0: T).(\lambda (t0: T).(\lambda (_: (ty3 g c0 u0
552 t0)).(\lambda (H3: ((\forall (t3: T).((ty3 g c0 u0 t3) \to (pc3 c0 t0
553 t3))))).(\lambda (H4: (pc3 c0 t0 t2)).(\lambda (t3: T).(\lambda (H5: (ty3 g
554 c0 u0 t3)).(let TMP_2 \def (pc3_s c0 t2 t0 H4) in (let TMP_3 \def (H3 t3 H5)
555 in (pc3_t t0 c0 t2 TMP_2 t3 TMP_3))))))))))))))) in (let TMP_5 \def (\lambda
556 (c0: C).(\lambda (m: nat).(\lambda (t2: T).(\lambda (H0: (ty3 g c0 (TSort m)
557 t2)).(ty3_gen_sort g c0 t2 m H0))))) in (let TMP_120 \def (\lambda (n:
558 nat).(\lambda (c0: C).(\lambda (d: C).(\lambda (u0: T).(\lambda (H0: (getl n
559 c0 (CHead d (Bind Abbr) u0))).(\lambda (t: T).(\lambda (_: (ty3 g d u0
560 t)).(\lambda (H2: ((\forall (t2: T).((ty3 g d u0 t2) \to (pc3 d t
561 t2))))).(\lambda (t2: T).(\lambda (H3: (ty3 g c0 (TLRef n) t2)).(let TMP_8
562 \def (\lambda (_: C).(\lambda (_: T).(\lambda (t0: T).(let TMP_6 \def (S n)
563 in (let TMP_7 \def (lift TMP_6 O t0) in (pc3 c0 TMP_7 t2)))))) in (let TMP_11
564 \def (\lambda (e: C).(\lambda (u1: T).(\lambda (_: T).(let TMP_9 \def (Bind
565 Abbr) in (let TMP_10 \def (CHead e TMP_9 u1) in (getl n c0 TMP_10)))))) in
566 (let TMP_12 \def (\lambda (e: C).(\lambda (u1: T).(\lambda (t0: T).(ty3 g e
567 u1 t0)))) in (let TMP_13 \def (ex3_3 C T T TMP_8 TMP_11 TMP_12) in (let
568 TMP_16 \def (\lambda (_: C).(\lambda (u1: T).(\lambda (_: T).(let TMP_14 \def
569 (S n) in (let TMP_15 \def (lift TMP_14 O u1) in (pc3 c0 TMP_15 t2)))))) in
570 (let TMP_19 \def (\lambda (e: C).(\lambda (u1: T).(\lambda (_: T).(let TMP_17
571 \def (Bind Abst) in (let TMP_18 \def (CHead e TMP_17 u1) in (getl n c0
572 TMP_18)))))) in (let TMP_20 \def (\lambda (e: C).(\lambda (u1: T).(\lambda
573 (t0: T).(ty3 g e u1 t0)))) in (let TMP_21 \def (ex3_3 C T T TMP_16 TMP_19
574 TMP_20) in (let TMP_22 \def (S n) in (let TMP_23 \def (lift TMP_22 O t) in
575 (let TMP_24 \def (pc3 c0 TMP_23 t2) in (let TMP_83 \def (\lambda (H4: (ex3_3
576 C T T (\lambda (_: C).(\lambda (_: T).(\lambda (t0: T).(pc3 c0 (lift (S n) O
577 t0) t2)))) (\lambda (e: C).(\lambda (u1: T).(\lambda (_: T).(getl n c0 (CHead
578 e (Bind Abbr) u1))))) (\lambda (e: C).(\lambda (u1: T).(\lambda (t0: T).(ty3
579 g e u1 t0)))))).(let TMP_27 \def (\lambda (_: C).(\lambda (_: T).(\lambda
580 (t0: T).(let TMP_25 \def (S n) in (let TMP_26 \def (lift TMP_25 O t0) in (pc3
581 c0 TMP_26 t2)))))) in (let TMP_30 \def (\lambda (e: C).(\lambda (u1:
582 T).(\lambda (_: T).(let TMP_28 \def (Bind Abbr) in (let TMP_29 \def (CHead e
583 TMP_28 u1) in (getl n c0 TMP_29)))))) in (let TMP_31 \def (\lambda (e:
584 C).(\lambda (u1: T).(\lambda (t0: T).(ty3 g e u1 t0)))) in (let TMP_32 \def
585 (S n) in (let TMP_33 \def (lift TMP_32 O t) in (let TMP_34 \def (pc3 c0
586 TMP_33 t2) in (let TMP_82 \def (\lambda (x0: C).(\lambda (x1: T).(\lambda
587 (x2: T).(\lambda (H5: (pc3 c0 (lift (S n) O x2) t2)).(\lambda (H6: (getl n c0
588 (CHead x0 (Bind Abbr) x1))).(\lambda (H7: (ty3 g x0 x1 x2)).(let TMP_35 \def
589 (Bind Abbr) in (let TMP_36 \def (CHead d TMP_35 u0) in (let TMP_37 \def
590 (\lambda (c1: C).(getl n c0 c1)) in (let TMP_38 \def (Bind Abbr) in (let
591 TMP_39 \def (CHead x0 TMP_38 x1) in (let TMP_40 \def (Bind Abbr) in (let
592 TMP_41 \def (CHead d TMP_40 u0) in (let TMP_42 \def (Bind Abbr) in (let
593 TMP_43 \def (CHead x0 TMP_42 x1) in (let TMP_44 \def (getl_mono c0 TMP_41 n
594 H0 TMP_43 H6) in (let H8 \def (eq_ind C TMP_36 TMP_37 H0 TMP_39 TMP_44) in
595 (let TMP_45 \def (\lambda (e: C).(match e with [(CSort _) \Rightarrow d |
596 (CHead c1 _ _) \Rightarrow c1])) in (let TMP_46 \def (Bind Abbr) in (let
597 TMP_47 \def (CHead d TMP_46 u0) in (let TMP_48 \def (Bind Abbr) in (let
598 TMP_49 \def (CHead x0 TMP_48 x1) in (let TMP_50 \def (Bind Abbr) in (let
599 TMP_51 \def (CHead d TMP_50 u0) in (let TMP_52 \def (Bind Abbr) in (let
600 TMP_53 \def (CHead x0 TMP_52 x1) in (let TMP_54 \def (getl_mono c0 TMP_51 n
601 H0 TMP_53 H6) in (let H9 \def (f_equal C C TMP_45 TMP_47 TMP_49 TMP_54) in
602 (let TMP_55 \def (\lambda (e: C).(match e with [(CSort _) \Rightarrow u0 |
603 (CHead _ _ t0) \Rightarrow t0])) in (let TMP_56 \def (Bind Abbr) in (let
604 TMP_57 \def (CHead d TMP_56 u0) in (let TMP_58 \def (Bind Abbr) in (let
605 TMP_59 \def (CHead x0 TMP_58 x1) in (let TMP_60 \def (Bind Abbr) in (let
606 TMP_61 \def (CHead d TMP_60 u0) in (let TMP_62 \def (Bind Abbr) in (let
607 TMP_63 \def (CHead x0 TMP_62 x1) in (let TMP_64 \def (getl_mono c0 TMP_61 n
608 H0 TMP_63 H6) in (let H10 \def (f_equal C T TMP_55 TMP_57 TMP_59 TMP_64) in
609 (let TMP_81 \def (\lambda (H11: (eq C d x0)).(let TMP_67 \def (\lambda (t0:
610 T).(let TMP_65 \def (Bind Abbr) in (let TMP_66 \def (CHead x0 TMP_65 t0) in
611 (getl n c0 TMP_66)))) in (let H12 \def (eq_ind_r T x1 TMP_67 H8 u0 H10) in
612 (let TMP_68 \def (\lambda (t0: T).(ty3 g x0 t0 x2)) in (let H13 \def
613 (eq_ind_r T x1 TMP_68 H7 u0 H10) in (let TMP_71 \def (\lambda (c1: C).(let
614 TMP_69 \def (Bind Abbr) in (let TMP_70 \def (CHead c1 TMP_69 u0) in (getl n
615 c0 TMP_70)))) in (let H14 \def (eq_ind_r C x0 TMP_71 H12 d H11) in (let
616 TMP_72 \def (\lambda (c1: C).(ty3 g c1 u0 x2)) in (let H15 \def (eq_ind_r C
617 x0 TMP_72 H13 d H11) in (let TMP_73 \def (S n) in (let TMP_74 \def (lift
618 TMP_73 O x2) in (let TMP_75 \def (S n) in (let TMP_76 \def (lift TMP_75 O t)
619 in (let TMP_77 \def (S n) in (let TMP_78 \def (getl_drop Abbr c0 d u0 n H14)
620 in (let TMP_79 \def (H2 x2 H15) in (let TMP_80 \def (pc3_lift c0 d TMP_77 O
621 TMP_78 t x2 TMP_79) in (pc3_t TMP_74 c0 TMP_76 TMP_80 t2 H5))))))))))))))))))
622 in (TMP_81 H9))))))))))))))))))))))))))))))))))))))))) in (ex3_3_ind C T T
623 TMP_27 TMP_30 TMP_31 TMP_34 TMP_82 H4))))))))) in (let TMP_118 \def (\lambda
624 (H4: (ex3_3 C T T (\lambda (_: C).(\lambda (u1: T).(\lambda (_: T).(pc3 c0
625 (lift (S n) O u1) t2)))) (\lambda (e: C).(\lambda (u1: T).(\lambda (_:
626 T).(getl n c0 (CHead e (Bind Abst) u1))))) (\lambda (e: C).(\lambda (u1:
627 T).(\lambda (t0: T).(ty3 g e u1 t0)))))).(let TMP_86 \def (\lambda (_:
628 C).(\lambda (u1: T).(\lambda (_: T).(let TMP_84 \def (S n) in (let TMP_85
629 \def (lift TMP_84 O u1) in (pc3 c0 TMP_85 t2)))))) in (let TMP_89 \def
630 (\lambda (e: C).(\lambda (u1: T).(\lambda (_: T).(let TMP_87 \def (Bind Abst)
631 in (let TMP_88 \def (CHead e TMP_87 u1) in (getl n c0 TMP_88)))))) in (let
632 TMP_90 \def (\lambda (e: C).(\lambda (u1: T).(\lambda (t0: T).(ty3 g e u1
633 t0)))) in (let TMP_91 \def (S n) in (let TMP_92 \def (lift TMP_91 O t) in
634 (let TMP_93 \def (pc3 c0 TMP_92 t2) in (let TMP_117 \def (\lambda (x0:
635 C).(\lambda (x1: T).(\lambda (x2: T).(\lambda (_: (pc3 c0 (lift (S n) O x1)
636 t2)).(\lambda (H6: (getl n c0 (CHead x0 (Bind Abst) x1))).(\lambda (_: (ty3 g
637 x0 x1 x2)).(let TMP_94 \def (Bind Abbr) in (let TMP_95 \def (CHead d TMP_94
638 u0) in (let TMP_96 \def (\lambda (c1: C).(getl n c0 c1)) in (let TMP_97 \def
639 (Bind Abst) in (let TMP_98 \def (CHead x0 TMP_97 x1) in (let TMP_99 \def
640 (Bind Abbr) in (let TMP_100 \def (CHead d TMP_99 u0) in (let TMP_101 \def
641 (Bind Abst) in (let TMP_102 \def (CHead x0 TMP_101 x1) in (let TMP_103 \def
642 (getl_mono c0 TMP_100 n H0 TMP_102 H6) in (let H8 \def (eq_ind C TMP_95
643 TMP_96 H0 TMP_98 TMP_103) in (let TMP_104 \def (Bind Abbr) in (let TMP_105
644 \def (CHead d TMP_104 u0) in (let TMP_106 \def (\lambda (ee: C).(match ee
645 with [(CSort _) \Rightarrow False | (CHead _ k _) \Rightarrow (match k with
646 [(Bind b) \Rightarrow (match b with [Abbr \Rightarrow True | Abst \Rightarrow
647 False | Void \Rightarrow False]) | (Flat _) \Rightarrow False])])) in (let
648 TMP_107 \def (Bind Abst) in (let TMP_108 \def (CHead x0 TMP_107 x1) in (let
649 TMP_109 \def (Bind Abbr) in (let TMP_110 \def (CHead d TMP_109 u0) in (let
650 TMP_111 \def (Bind Abst) in (let TMP_112 \def (CHead x0 TMP_111 x1) in (let
651 TMP_113 \def (getl_mono c0 TMP_110 n H0 TMP_112 H6) in (let H9 \def (eq_ind C
652 TMP_105 TMP_106 I TMP_108 TMP_113) in (let TMP_114 \def (S n) in (let TMP_115
653 \def (lift TMP_114 O t) in (let TMP_116 \def (pc3 c0 TMP_115 t2) in
654 (False_ind TMP_116 H9)))))))))))))))))))))))))))))))) in (ex3_3_ind C T T
655 TMP_86 TMP_89 TMP_90 TMP_93 TMP_117 H4))))))))) in (let TMP_119 \def
656 (ty3_gen_lref g c0 t2 n H3) in (or_ind TMP_13 TMP_21 TMP_24 TMP_83 TMP_118
657 TMP_119))))))))))))))))))))))))) in (let TMP_230 \def (\lambda (n:
658 nat).(\lambda (c0: C).(\lambda (d: C).(\lambda (u0: T).(\lambda (H0: (getl n
659 c0 (CHead d (Bind Abst) u0))).(\lambda (t: T).(\lambda (_: (ty3 g d u0
660 t)).(\lambda (_: ((\forall (t2: T).((ty3 g d u0 t2) \to (pc3 d t
661 t2))))).(\lambda (t2: T).(\lambda (H3: (ty3 g c0 (TLRef n) t2)).(let TMP_123
662 \def (\lambda (_: C).(\lambda (_: T).(\lambda (t0: T).(let TMP_121 \def (S n)
663 in (let TMP_122 \def (lift TMP_121 O t0) in (pc3 c0 TMP_122 t2)))))) in (let
664 TMP_126 \def (\lambda (e: C).(\lambda (u1: T).(\lambda (_: T).(let TMP_124
665 \def (Bind Abbr) in (let TMP_125 \def (CHead e TMP_124 u1) in (getl n c0
666 TMP_125)))))) in (let TMP_127 \def (\lambda (e: C).(\lambda (u1: T).(\lambda
667 (t0: T).(ty3 g e u1 t0)))) in (let TMP_128 \def (ex3_3 C T T TMP_123 TMP_126
668 TMP_127) in (let TMP_131 \def (\lambda (_: C).(\lambda (u1: T).(\lambda (_:
669 T).(let TMP_129 \def (S n) in (let TMP_130 \def (lift TMP_129 O u1) in (pc3
670 c0 TMP_130 t2)))))) in (let TMP_134 \def (\lambda (e: C).(\lambda (u1:
671 T).(\lambda (_: T).(let TMP_132 \def (Bind Abst) in (let TMP_133 \def (CHead
672 e TMP_132 u1) in (getl n c0 TMP_133)))))) in (let TMP_135 \def (\lambda (e:
673 C).(\lambda (u1: T).(\lambda (t0: T).(ty3 g e u1 t0)))) in (let TMP_136 \def
674 (ex3_3 C T T TMP_131 TMP_134 TMP_135) in (let TMP_137 \def (S n) in (let
675 TMP_138 \def (lift TMP_137 O u0) in (let TMP_139 \def (pc3 c0 TMP_138 t2) in
676 (let TMP_174 \def (\lambda (H4: (ex3_3 C T T (\lambda (_: C).(\lambda (_:
677 T).(\lambda (t0: T).(pc3 c0 (lift (S n) O t0) t2)))) (\lambda (e: C).(\lambda
678 (u1: T).(\lambda (_: T).(getl n c0 (CHead e (Bind Abbr) u1))))) (\lambda (e:
679 C).(\lambda (u1: T).(\lambda (t0: T).(ty3 g e u1 t0)))))).(let TMP_142 \def
680 (\lambda (_: C).(\lambda (_: T).(\lambda (t0: T).(let TMP_140 \def (S n) in
681 (let TMP_141 \def (lift TMP_140 O t0) in (pc3 c0 TMP_141 t2)))))) in (let
682 TMP_145 \def (\lambda (e: C).(\lambda (u1: T).(\lambda (_: T).(let TMP_143
683 \def (Bind Abbr) in (let TMP_144 \def (CHead e TMP_143 u1) in (getl n c0
684 TMP_144)))))) in (let TMP_146 \def (\lambda (e: C).(\lambda (u1: T).(\lambda
685 (t0: T).(ty3 g e u1 t0)))) in (let TMP_147 \def (S n) in (let TMP_148 \def
686 (lift TMP_147 O u0) in (let TMP_149 \def (pc3 c0 TMP_148 t2) in (let TMP_173
687 \def (\lambda (x0: C).(\lambda (x1: T).(\lambda (x2: T).(\lambda (_: (pc3 c0
688 (lift (S n) O x2) t2)).(\lambda (H6: (getl n c0 (CHead x0 (Bind Abbr)
689 x1))).(\lambda (_: (ty3 g x0 x1 x2)).(let TMP_150 \def (Bind Abst) in (let
690 TMP_151 \def (CHead d TMP_150 u0) in (let TMP_152 \def (\lambda (c1: C).(getl
691 n c0 c1)) in (let TMP_153 \def (Bind Abbr) in (let TMP_154 \def (CHead x0
692 TMP_153 x1) in (let TMP_155 \def (Bind Abst) in (let TMP_156 \def (CHead d
693 TMP_155 u0) in (let TMP_157 \def (Bind Abbr) in (let TMP_158 \def (CHead x0
694 TMP_157 x1) in (let TMP_159 \def (getl_mono c0 TMP_156 n H0 TMP_158 H6) in
695 (let H8 \def (eq_ind C TMP_151 TMP_152 H0 TMP_154 TMP_159) in (let TMP_160
696 \def (Bind Abst) in (let TMP_161 \def (CHead d TMP_160 u0) in (let TMP_162
697 \def (\lambda (ee: C).(match ee with [(CSort _) \Rightarrow False | (CHead _
698 k _) \Rightarrow (match k with [(Bind b) \Rightarrow (match b with [Abbr
699 \Rightarrow False | Abst \Rightarrow True | Void \Rightarrow False]) | (Flat
700 _) \Rightarrow False])])) in (let TMP_163 \def (Bind Abbr) in (let TMP_164
701 \def (CHead x0 TMP_163 x1) in (let TMP_165 \def (Bind Abst) in (let TMP_166
702 \def (CHead d TMP_165 u0) in (let TMP_167 \def (Bind Abbr) in (let TMP_168
703 \def (CHead x0 TMP_167 x1) in (let TMP_169 \def (getl_mono c0 TMP_166 n H0
704 TMP_168 H6) in (let H9 \def (eq_ind C TMP_161 TMP_162 I TMP_164 TMP_169) in
705 (let TMP_170 \def (S n) in (let TMP_171 \def (lift TMP_170 O u0) in (let
706 TMP_172 \def (pc3 c0 TMP_171 t2) in (False_ind TMP_172
707 H9)))))))))))))))))))))))))))))))) in (ex3_3_ind C T T TMP_142 TMP_145
708 TMP_146 TMP_149 TMP_173 H4))))))))) in (let TMP_228 \def (\lambda (H4: (ex3_3
709 C T T (\lambda (_: C).(\lambda (u1: T).(\lambda (_: T).(pc3 c0 (lift (S n) O
710 u1) t2)))) (\lambda (e: C).(\lambda (u1: T).(\lambda (_: T).(getl n c0 (CHead
711 e (Bind Abst) u1))))) (\lambda (e: C).(\lambda (u1: T).(\lambda (t0: T).(ty3
712 g e u1 t0)))))).(let TMP_177 \def (\lambda (_: C).(\lambda (u1: T).(\lambda
713 (_: T).(let TMP_175 \def (S n) in (let TMP_176 \def (lift TMP_175 O u1) in
714 (pc3 c0 TMP_176 t2)))))) in (let TMP_180 \def (\lambda (e: C).(\lambda (u1:
715 T).(\lambda (_: T).(let TMP_178 \def (Bind Abst) in (let TMP_179 \def (CHead
716 e TMP_178 u1) in (getl n c0 TMP_179)))))) in (let TMP_181 \def (\lambda (e:
717 C).(\lambda (u1: T).(\lambda (t0: T).(ty3 g e u1 t0)))) in (let TMP_182 \def
718 (S n) in (let TMP_183 \def (lift TMP_182 O u0) in (let TMP_184 \def (pc3 c0
719 TMP_183 t2) in (let TMP_227 \def (\lambda (x0: C).(\lambda (x1: T).(\lambda
720 (x2: T).(\lambda (H5: (pc3 c0 (lift (S n) O x1) t2)).(\lambda (H6: (getl n c0
721 (CHead x0 (Bind Abst) x1))).(\lambda (H7: (ty3 g x0 x1 x2)).(let TMP_185 \def
722 (Bind Abst) in (let TMP_186 \def (CHead d TMP_185 u0) in (let TMP_187 \def
723 (\lambda (c1: C).(getl n c0 c1)) in (let TMP_188 \def (Bind Abst) in (let
724 TMP_189 \def (CHead x0 TMP_188 x1) in (let TMP_190 \def (Bind Abst) in (let
725 TMP_191 \def (CHead d TMP_190 u0) in (let TMP_192 \def (Bind Abst) in (let
726 TMP_193 \def (CHead x0 TMP_192 x1) in (let TMP_194 \def (getl_mono c0 TMP_191
727 n H0 TMP_193 H6) in (let H8 \def (eq_ind C TMP_186 TMP_187 H0 TMP_189
728 TMP_194) in (let TMP_195 \def (\lambda (e: C).(match e with [(CSort _)
729 \Rightarrow d | (CHead c1 _ _) \Rightarrow c1])) in (let TMP_196 \def (Bind
730 Abst) in (let TMP_197 \def (CHead d TMP_196 u0) in (let TMP_198 \def (Bind
731 Abst) in (let TMP_199 \def (CHead x0 TMP_198 x1) in (let TMP_200 \def (Bind
732 Abst) in (let TMP_201 \def (CHead d TMP_200 u0) in (let TMP_202 \def (Bind
733 Abst) in (let TMP_203 \def (CHead x0 TMP_202 x1) in (let TMP_204 \def
734 (getl_mono c0 TMP_201 n H0 TMP_203 H6) in (let H9 \def (f_equal C C TMP_195
735 TMP_197 TMP_199 TMP_204) in (let TMP_205 \def (\lambda (e: C).(match e with
736 [(CSort _) \Rightarrow u0 | (CHead _ _ t0) \Rightarrow t0])) in (let TMP_206
737 \def (Bind Abst) in (let TMP_207 \def (CHead d TMP_206 u0) in (let TMP_208
738 \def (Bind Abst) in (let TMP_209 \def (CHead x0 TMP_208 x1) in (let TMP_210
739 \def (Bind Abst) in (let TMP_211 \def (CHead d TMP_210 u0) in (let TMP_212
740 \def (Bind Abst) in (let TMP_213 \def (CHead x0 TMP_212 x1) in (let TMP_214
741 \def (getl_mono c0 TMP_211 n H0 TMP_213 H6) in (let H10 \def (f_equal C T
742 TMP_205 TMP_207 TMP_209 TMP_214) in (let TMP_226 \def (\lambda (H11: (eq C d
743 x0)).(let TMP_217 \def (\lambda (t0: T).(let TMP_215 \def (Bind Abst) in (let
744 TMP_216 \def (CHead x0 TMP_215 t0) in (getl n c0 TMP_216)))) in (let H12 \def
745 (eq_ind_r T x1 TMP_217 H8 u0 H10) in (let TMP_218 \def (\lambda (t0: T).(ty3
746 g x0 t0 x2)) in (let H13 \def (eq_ind_r T x1 TMP_218 H7 u0 H10) in (let
747 TMP_221 \def (\lambda (t0: T).(let TMP_219 \def (S n) in (let TMP_220 \def
748 (lift TMP_219 O t0) in (pc3 c0 TMP_220 t2)))) in (let H14 \def (eq_ind_r T x1
749 TMP_221 H5 u0 H10) in (let TMP_224 \def (\lambda (c1: C).(let TMP_222 \def
750 (Bind Abst) in (let TMP_223 \def (CHead c1 TMP_222 u0) in (getl n c0
751 TMP_223)))) in (let H15 \def (eq_ind_r C x0 TMP_224 H12 d H11) in (let
752 TMP_225 \def (\lambda (c1: C).(ty3 g c1 u0 x2)) in (let H16 \def (eq_ind_r C
753 x0 TMP_225 H13 d H11) in H14))))))))))) in (TMP_226
754 H9))))))))))))))))))))))))))))))))))))))))) in (ex3_3_ind C T T TMP_177
755 TMP_180 TMP_181 TMP_184 TMP_227 H4))))))))) in (let TMP_229 \def
756 (ty3_gen_lref g c0 t2 n H3) in (or_ind TMP_128 TMP_136 TMP_139 TMP_174
757 TMP_228 TMP_229))))))))))))))))))))))))) in (let TMP_250 \def (\lambda (c0:
758 C).(\lambda (u0: T).(\lambda (t: T).(\lambda (_: (ty3 g c0 u0 t)).(\lambda
759 (_: ((\forall (t2: T).((ty3 g c0 u0 t2) \to (pc3 c0 t t2))))).(\lambda (b:
760 B).(\lambda (t0: T).(\lambda (t2: T).(\lambda (_: (ty3 g (CHead c0 (Bind b)
761 u0) t0 t2)).(\lambda (H3: ((\forall (t3: T).((ty3 g (CHead c0 (Bind b) u0) t0
762 t3) \to (pc3 (CHead c0 (Bind b) u0) t2 t3))))).(\lambda (t3: T).(\lambda (H4:
763 (ty3 g c0 (THead (Bind b) u0 t0) t3)).(let TMP_233 \def (\lambda (t4:
764 T).(\lambda (_: T).(let TMP_231 \def (Bind b) in (let TMP_232 \def (THead
765 TMP_231 u0 t4) in (pc3 c0 TMP_232 t3))))) in (let TMP_234 \def (\lambda (_:
766 T).(\lambda (t5: T).(ty3 g c0 u0 t5))) in (let TMP_237 \def (\lambda (t4:
767 T).(\lambda (_: T).(let TMP_235 \def (Bind b) in (let TMP_236 \def (CHead c0
768 TMP_235 u0) in (ty3 g TMP_236 t0 t4))))) in (let TMP_238 \def (Bind b) in
769 (let TMP_239 \def (THead TMP_238 u0 t2) in (let TMP_240 \def (pc3 c0 TMP_239
770 t3) in (let TMP_248 \def (\lambda (x0: T).(\lambda (x1: T).(\lambda (H5: (pc3
771 c0 (THead (Bind b) u0 x0) t3)).(\lambda (_: (ty3 g c0 u0 x1)).(\lambda (H7:
772 (ty3 g (CHead c0 (Bind b) u0) t0 x0)).(let TMP_241 \def (Bind b) in (let
773 TMP_242 \def (THead TMP_241 u0 x0) in (let TMP_243 \def (Bind b) in (let
774 TMP_244 \def (THead TMP_243 u0 t2) in (let TMP_245 \def (Bind b) in (let
775 TMP_246 \def (H3 x0 H7) in (let TMP_247 \def (pc3_head_2 c0 u0 t2 x0 TMP_245
776 TMP_246) in (pc3_t TMP_242 c0 TMP_244 TMP_247 t3 H5))))))))))))) in (let
777 TMP_249 \def (ty3_gen_bind g b c0 u0 t0 t3 H4) in (ex3_2_ind T T TMP_233
778 TMP_234 TMP_237 TMP_240 TMP_248 TMP_249))))))))))))))))))))) in (let TMP_283
779 \def (\lambda (c0: C).(\lambda (w: T).(\lambda (u0: T).(\lambda (_: (ty3 g c0
780 w u0)).(\lambda (_: ((\forall (t2: T).((ty3 g c0 w t2) \to (pc3 c0 u0
781 t2))))).(\lambda (v: T).(\lambda (t: T).(\lambda (_: (ty3 g c0 v (THead (Bind
782 Abst) u0 t))).(\lambda (H3: ((\forall (t2: T).((ty3 g c0 v t2) \to (pc3 c0
783 (THead (Bind Abst) u0 t) t2))))).(\lambda (t2: T).(\lambda (H4: (ty3 g c0
784 (THead (Flat Appl) w v) t2)).(let TMP_255 \def (\lambda (u1: T).(\lambda (t0:
785 T).(let TMP_251 \def (Flat Appl) in (let TMP_252 \def (Bind Abst) in (let
786 TMP_253 \def (THead TMP_252 u1 t0) in (let TMP_254 \def (THead TMP_251 w
787 TMP_253) in (pc3 c0 TMP_254 t2))))))) in (let TMP_258 \def (\lambda (u1:
788 T).(\lambda (t0: T).(let TMP_256 \def (Bind Abst) in (let TMP_257 \def (THead
789 TMP_256 u1 t0) in (ty3 g c0 v TMP_257))))) in (let TMP_259 \def (\lambda (u1:
790 T).(\lambda (_: T).(ty3 g c0 w u1))) in (let TMP_260 \def (Flat Appl) in (let
791 TMP_261 \def (Bind Abst) in (let TMP_262 \def (THead TMP_261 u0 t) in (let
792 TMP_263 \def (THead TMP_260 w TMP_262) in (let TMP_264 \def (pc3 c0 TMP_263
793 t2) in (let TMP_281 \def (\lambda (x0: T).(\lambda (x1: T).(\lambda (H5: (pc3
794 c0 (THead (Flat Appl) w (THead (Bind Abst) x0 x1)) t2)).(\lambda (H6: (ty3 g
795 c0 v (THead (Bind Abst) x0 x1))).(\lambda (_: (ty3 g c0 w x0)).(let TMP_265
796 \def (Flat Appl) in (let TMP_266 \def (Bind Abst) in (let TMP_267 \def (THead
797 TMP_266 x0 x1) in (let TMP_268 \def (THead TMP_265 w TMP_267) in (let TMP_269
798 \def (Flat Appl) in (let TMP_270 \def (Bind Abst) in (let TMP_271 \def (THead
799 TMP_270 u0 t) in (let TMP_272 \def (THead TMP_269 w TMP_271) in (let TMP_273
800 \def (Bind Abst) in (let TMP_274 \def (THead TMP_273 u0 t) in (let TMP_275
801 \def (Bind Abst) in (let TMP_276 \def (THead TMP_275 x0 x1) in (let TMP_277
802 \def (Bind Abst) in (let TMP_278 \def (THead TMP_277 x0 x1) in (let TMP_279
803 \def (H3 TMP_278 H6) in (let TMP_280 \def (pc3_thin_dx c0 TMP_274 TMP_276
804 TMP_279 w Appl) in (pc3_t TMP_268 c0 TMP_272 TMP_280 t2
805 H5)))))))))))))))))))))) in (let TMP_282 \def (ty3_gen_appl g c0 w v t2 H4)
806 in (ex3_2_ind T T TMP_255 TMP_258 TMP_259 TMP_264 TMP_281
807 TMP_282)))))))))))))))))))))) in (let TMP_301 \def (\lambda (c0: C).(\lambda
808 (t0: T).(\lambda (t2: T).(\lambda (_: (ty3 g c0 t0 t2)).(\lambda (_:
809 ((\forall (t3: T).((ty3 g c0 t0 t3) \to (pc3 c0 t2 t3))))).(\lambda (t3:
810 T).(\lambda (_: (ty3 g c0 t2 t3)).(\lambda (H3: ((\forall (t4: T).((ty3 g c0
811 t2 t4) \to (pc3 c0 t3 t4))))).(\lambda (t4: T).(\lambda (H4: (ty3 g c0 (THead
812 (Flat Cast) t2 t0) t4)).(let TMP_286 \def (\lambda (t5: T).(let TMP_284 \def
813 (Flat Cast) in (let TMP_285 \def (THead TMP_284 t5 t2) in (pc3 c0 TMP_285
814 t4)))) in (let TMP_287 \def (\lambda (_: T).(ty3 g c0 t0 t2)) in (let TMP_288
815 \def (\lambda (t5: T).(ty3 g c0 t2 t5)) in (let TMP_289 \def (Flat Cast) in
816 (let TMP_290 \def (THead TMP_289 t3 t2) in (let TMP_291 \def (pc3 c0 TMP_290
817 t4) in (let TMP_299 \def (\lambda (x0: T).(\lambda (H5: (pc3 c0 (THead (Flat
818 Cast) x0 t2) t4)).(\lambda (_: (ty3 g c0 t0 t2)).(\lambda (H7: (ty3 g c0 t2
819 x0)).(let TMP_292 \def (Flat Cast) in (let TMP_293 \def (THead TMP_292 x0 t2)
820 in (let TMP_294 \def (Flat Cast) in (let TMP_295 \def (THead TMP_294 t3 t2)
821 in (let TMP_296 \def (H3 x0 H7) in (let TMP_297 \def (Flat Cast) in (let
822 TMP_298 \def (pc3_head_1 c0 t3 x0 TMP_296 TMP_297 t2) in (pc3_t TMP_293 c0
823 TMP_295 TMP_298 t4 H5)))))))))))) in (let TMP_300 \def (ty3_gen_cast g c0 t0
824 t2 t4 H4) in (ex3_ind T TMP_286 TMP_287 TMP_288 TMP_291 TMP_299
825 TMP_300))))))))))))))))))) in (ty3_ind g TMP_1 TMP_4 TMP_5 TMP_120 TMP_230
826 TMP_250 TMP_283 TMP_301 c u t1 H))))))))))))).
828 theorem ty3_gen_abst_abst:
829 \forall (g: G).(\forall (c: C).(\forall (u: T).(\forall (t1: T).(\forall
830 (t2: T).((ty3 g c (THead (Bind Abst) u t1) (THead (Bind Abst) u t2)) \to (ex2
831 T (\lambda (w: T).(ty3 g c u w)) (\lambda (_: T).(ty3 g (CHead c (Bind Abst)
834 \lambda (g: G).(\lambda (c: C).(\lambda (u: T).(\lambda (t1: T).(\lambda
835 (t2: T).(\lambda (H: (ty3 g c (THead (Bind Abst) u t1) (THead (Bind Abst) u
836 t2))).(let TMP_3 \def (\lambda (t: T).(let TMP_1 \def (Bind Abst) in (let
837 TMP_2 \def (THead TMP_1 u t2) in (ty3 g c TMP_2 t)))) in (let TMP_4 \def
838 (\lambda (w: T).(ty3 g c u w)) in (let TMP_7 \def (\lambda (_: T).(let TMP_5
839 \def (Bind Abst) in (let TMP_6 \def (CHead c TMP_5 u) in (ty3 g TMP_6 t1
840 t2)))) in (let TMP_8 \def (ex2 T TMP_4 TMP_7) in (let TMP_48 \def (\lambda
841 (x: T).(\lambda (H0: (ty3 g c (THead (Bind Abst) u t2) x)).(let TMP_11 \def
842 (\lambda (t3: T).(\lambda (_: T).(let TMP_9 \def (Bind Abst) in (let TMP_10
843 \def (THead TMP_9 u t3) in (pc3 c TMP_10 x))))) in (let TMP_12 \def (\lambda
844 (_: T).(\lambda (t: T).(ty3 g c u t))) in (let TMP_15 \def (\lambda (t3:
845 T).(\lambda (_: T).(let TMP_13 \def (Bind Abst) in (let TMP_14 \def (CHead c
846 TMP_13 u) in (ty3 g TMP_14 t2 t3))))) in (let TMP_16 \def (\lambda (w:
847 T).(ty3 g c u w)) in (let TMP_19 \def (\lambda (_: T).(let TMP_17 \def (Bind
848 Abst) in (let TMP_18 \def (CHead c TMP_17 u) in (ty3 g TMP_18 t1 t2)))) in
849 (let TMP_20 \def (ex2 T TMP_16 TMP_19) in (let TMP_46 \def (\lambda (x0:
850 T).(\lambda (x1: T).(\lambda (_: (pc3 c (THead (Bind Abst) u x0) x)).(\lambda
851 (_: (ty3 g c u x1)).(\lambda (H3: (ty3 g (CHead c (Bind Abst) u) t2 x0)).(let
852 TMP_25 \def (\lambda (t3: T).(\lambda (_: T).(let TMP_21 \def (Bind Abst) in
853 (let TMP_22 \def (THead TMP_21 u t3) in (let TMP_23 \def (Bind Abst) in (let
854 TMP_24 \def (THead TMP_23 u t2) in (pc3 c TMP_22 TMP_24))))))) in (let TMP_26
855 \def (\lambda (_: T).(\lambda (t: T).(ty3 g c u t))) in (let TMP_29 \def
856 (\lambda (t3: T).(\lambda (_: T).(let TMP_27 \def (Bind Abst) in (let TMP_28
857 \def (CHead c TMP_27 u) in (ty3 g TMP_28 t1 t3))))) in (let TMP_30 \def
858 (\lambda (w: T).(ty3 g c u w)) in (let TMP_33 \def (\lambda (_: T).(let
859 TMP_31 \def (Bind Abst) in (let TMP_32 \def (CHead c TMP_31 u) in (ty3 g
860 TMP_32 t1 t2)))) in (let TMP_34 \def (ex2 T TMP_30 TMP_33) in (let TMP_42
861 \def (\lambda (x2: T).(\lambda (x3: T).(\lambda (H4: (pc3 c (THead (Bind
862 Abst) u x2) (THead (Bind Abst) u t2))).(\lambda (H5: (ty3 g c u x3)).(\lambda
863 (H6: (ty3 g (CHead c (Bind Abst) u) t1 x2)).(let H_y \def (pc3_gen_abst_shift
864 c u x2 t2 H4) in (let TMP_35 \def (\lambda (w: T).(ty3 g c u w)) in (let
865 TMP_38 \def (\lambda (_: T).(let TMP_36 \def (Bind Abst) in (let TMP_37 \def
866 (CHead c TMP_36 u) in (ty3 g TMP_37 t1 t2)))) in (let TMP_39 \def (Bind Abst)
867 in (let TMP_40 \def (CHead c TMP_39 u) in (let TMP_41 \def (ty3_conv g TMP_40
868 t2 x0 H3 t1 x2 H6 H_y) in (ex_intro2 T TMP_35 TMP_38 x3 H5 TMP_41))))))))))))
869 in (let TMP_43 \def (Bind Abst) in (let TMP_44 \def (THead TMP_43 u t2) in
870 (let TMP_45 \def (ty3_gen_bind g Abst c u t1 TMP_44 H) in (ex3_2_ind T T
871 TMP_25 TMP_26 TMP_29 TMP_34 TMP_42 TMP_45)))))))))))))))) in (let TMP_47 \def
872 (ty3_gen_bind g Abst c u t2 x H0) in (ex3_2_ind T T TMP_11 TMP_12 TMP_15
873 TMP_20 TMP_46 TMP_47))))))))))) in (let TMP_49 \def (Bind Abst) in (let
874 TMP_50 \def (THead TMP_49 u t1) in (let TMP_51 \def (Bind Abst) in (let
875 TMP_52 \def (THead TMP_51 u t2) in (let TMP_53 \def (ty3_correct g c TMP_50
876 TMP_52 H) in (ex_ind T TMP_3 TMP_8 TMP_48 TMP_53)))))))))))))))).
878 theorem ty3_typecheck:
879 \forall (g: G).(\forall (c: C).(\forall (t: T).(\forall (v: T).((ty3 g c t
880 v) \to (ex T (\lambda (u: T).(ty3 g c (THead (Flat Cast) v t) u)))))))
882 \lambda (g: G).(\lambda (c: C).(\lambda (t: T).(\lambda (v: T).(\lambda (H:
883 (ty3 g c t v)).(let TMP_1 \def (\lambda (t0: T).(ty3 g c v t0)) in (let TMP_4
884 \def (\lambda (u: T).(let TMP_2 \def (Flat Cast) in (let TMP_3 \def (THead
885 TMP_2 v t) in (ty3 g c TMP_3 u)))) in (let TMP_5 \def (ex T TMP_4) in (let
886 TMP_12 \def (\lambda (x: T).(\lambda (H0: (ty3 g c v x)).(let TMP_8 \def
887 (\lambda (u: T).(let TMP_6 \def (Flat Cast) in (let TMP_7 \def (THead TMP_6 v
888 t) in (ty3 g c TMP_7 u)))) in (let TMP_9 \def (Flat Cast) in (let TMP_10 \def
889 (THead TMP_9 x v) in (let TMP_11 \def (ty3_cast g c t v H x H0) in (ex_intro
890 T TMP_8 TMP_10 TMP_11))))))) in (let TMP_13 \def (ty3_correct g c t v H) in
891 (ex_ind T TMP_1 TMP_5 TMP_12 TMP_13)))))))))).
893 theorem ty3_getl_subst0:
894 \forall (g: G).(\forall (c: C).(\forall (t: T).(\forall (u: T).((ty3 g c t
895 u) \to (\forall (v0: T).(\forall (t0: T).(\forall (i: nat).((subst0 i v0 t
896 t0) \to (\forall (b: B).(\forall (d: C).(\forall (v: T).((getl i c (CHead d
897 (Bind b) v)) \to (ex T (\lambda (w: T).(ty3 g d v w)))))))))))))))
899 \lambda (g: G).(\lambda (c: C).(\lambda (t: T).(\lambda (u: T).(\lambda (H:
900 (ty3 g c t u)).(let TMP_2 \def (\lambda (c0: C).(\lambda (t0: T).(\lambda (_:
901 T).(\forall (v0: T).(\forall (t2: T).(\forall (i: nat).((subst0 i v0 t0 t2)
902 \to (\forall (b: B).(\forall (d: C).(\forall (v: T).((getl i c0 (CHead d
903 (Bind b) v)) \to (let TMP_1 \def (\lambda (w: T).(ty3 g d v w)) in (ex T
904 TMP_1))))))))))))) in (let TMP_3 \def (\lambda (c0: C).(\lambda (t2:
905 T).(\lambda (t0: T).(\lambda (_: (ty3 g c0 t2 t0)).(\lambda (_: ((\forall
906 (v0: T).(\forall (t1: T).(\forall (i: nat).((subst0 i v0 t2 t1) \to (\forall
907 (b: B).(\forall (d: C).(\forall (v: T).((getl i c0 (CHead d (Bind b) v)) \to
908 (ex T (\lambda (w: T).(ty3 g d v w))))))))))))).(\lambda (u0: T).(\lambda
909 (t1: T).(\lambda (_: (ty3 g c0 u0 t1)).(\lambda (H3: ((\forall (v0:
910 T).(\forall (t3: T).(\forall (i: nat).((subst0 i v0 u0 t3) \to (\forall (b:
911 B).(\forall (d: C).(\forall (v: T).((getl i c0 (CHead d (Bind b) v)) \to (ex
912 T (\lambda (w: T).(ty3 g d v w))))))))))))).(\lambda (_: (pc3 c0 t1
913 t2)).(\lambda (v0: T).(\lambda (t3: T).(\lambda (i: nat).(\lambda (H5:
914 (subst0 i v0 u0 t3)).(\lambda (b: B).(\lambda (d: C).(\lambda (v: T).(\lambda
915 (H6: (getl i c0 (CHead d (Bind b) v))).(H3 v0 t3 i H5 b d v
916 H6))))))))))))))))))) in (let TMP_6 \def (\lambda (c0: C).(\lambda (m:
917 nat).(\lambda (v0: T).(\lambda (t0: T).(\lambda (i: nat).(\lambda (H0:
918 (subst0 i v0 (TSort m) t0)).(\lambda (b: B).(\lambda (d: C).(\lambda (v:
919 T).(\lambda (_: (getl i c0 (CHead d (Bind b) v))).(let TMP_4 \def (\lambda
920 (w: T).(ty3 g d v w)) in (let TMP_5 \def (ex T TMP_4) in (subst0_gen_sort v0
921 t0 i m H0 TMP_5))))))))))))) in (let TMP_76 \def (\lambda (n: nat).(\lambda
922 (c0: C).(\lambda (d: C).(\lambda (u0: T).(\lambda (H0: (getl n c0 (CHead d
923 (Bind Abbr) u0))).(\lambda (t0: T).(\lambda (H1: (ty3 g d u0 t0)).(\lambda
924 (_: ((\forall (v0: T).(\forall (t1: T).(\forall (i: nat).((subst0 i v0 u0 t1)
925 \to (\forall (b: B).(\forall (d0: C).(\forall (v: T).((getl i d (CHead d0
926 (Bind b) v)) \to (ex T (\lambda (w: T).(ty3 g d0 v w))))))))))))).(\lambda
927 (v0: T).(\lambda (t1: T).(\lambda (i: nat).(\lambda (H3: (subst0 i v0 (TLRef
928 n) t1)).(\lambda (b: B).(\lambda (d0: C).(\lambda (v: T).(\lambda (H4: (getl
929 i c0 (CHead d0 (Bind b) v))).(let TMP_7 \def (eq nat n i) in (let TMP_8 \def
930 (S n) in (let TMP_9 \def (lift TMP_8 O v0) in (let TMP_10 \def (eq T t1
931 TMP_9) in (let TMP_11 \def (\lambda (w: T).(ty3 g d0 v w)) in (let TMP_12
932 \def (ex T TMP_11) in (let TMP_74 \def (\lambda (H5: (eq nat n i)).(\lambda
933 (_: (eq T t1 (lift (S n) O v0))).(let TMP_15 \def (\lambda (n0: nat).(let
934 TMP_13 \def (Bind b) in (let TMP_14 \def (CHead d0 TMP_13 v) in (getl n0 c0
935 TMP_14)))) in (let H7 \def (eq_ind_r nat i TMP_15 H4 n H5) in (let TMP_16
936 \def (Bind Abbr) in (let TMP_17 \def (CHead d TMP_16 u0) in (let TMP_18 \def
937 (\lambda (c1: C).(getl n c0 c1)) in (let TMP_19 \def (Bind b) in (let TMP_20
938 \def (CHead d0 TMP_19 v) in (let TMP_21 \def (Bind Abbr) in (let TMP_22 \def
939 (CHead d TMP_21 u0) in (let TMP_23 \def (Bind b) in (let TMP_24 \def (CHead
940 d0 TMP_23 v) in (let TMP_25 \def (getl_mono c0 TMP_22 n H0 TMP_24 H7) in (let
941 H8 \def (eq_ind C TMP_17 TMP_18 H0 TMP_20 TMP_25) in (let TMP_26 \def
942 (\lambda (e: C).(match e with [(CSort _) \Rightarrow d | (CHead c1 _ _)
943 \Rightarrow c1])) in (let TMP_27 \def (Bind Abbr) in (let TMP_28 \def (CHead
944 d TMP_27 u0) in (let TMP_29 \def (Bind b) in (let TMP_30 \def (CHead d0
945 TMP_29 v) in (let TMP_31 \def (Bind Abbr) in (let TMP_32 \def (CHead d TMP_31
946 u0) in (let TMP_33 \def (Bind b) in (let TMP_34 \def (CHead d0 TMP_33 v) in
947 (let TMP_35 \def (getl_mono c0 TMP_32 n H0 TMP_34 H7) in (let H9 \def
948 (f_equal C C TMP_26 TMP_28 TMP_30 TMP_35) in (let TMP_36 \def (\lambda (e:
949 C).(match e with [(CSort _) \Rightarrow Abbr | (CHead _ k _) \Rightarrow
950 (match k with [(Bind b0) \Rightarrow b0 | (Flat _) \Rightarrow Abbr])])) in
951 (let TMP_37 \def (Bind Abbr) in (let TMP_38 \def (CHead d TMP_37 u0) in (let
952 TMP_39 \def (Bind b) in (let TMP_40 \def (CHead d0 TMP_39 v) in (let TMP_41
953 \def (Bind Abbr) in (let TMP_42 \def (CHead d TMP_41 u0) in (let TMP_43 \def
954 (Bind b) in (let TMP_44 \def (CHead d0 TMP_43 v) in (let TMP_45 \def
955 (getl_mono c0 TMP_42 n H0 TMP_44 H7) in (let H10 \def (f_equal C B TMP_36
956 TMP_38 TMP_40 TMP_45) in (let TMP_46 \def (\lambda (e: C).(match e with
957 [(CSort _) \Rightarrow u0 | (CHead _ _ t2) \Rightarrow t2])) in (let TMP_47
958 \def (Bind Abbr) in (let TMP_48 \def (CHead d TMP_47 u0) in (let TMP_49 \def
959 (Bind b) in (let TMP_50 \def (CHead d0 TMP_49 v) in (let TMP_51 \def (Bind
960 Abbr) in (let TMP_52 \def (CHead d TMP_51 u0) in (let TMP_53 \def (Bind b) in
961 (let TMP_54 \def (CHead d0 TMP_53 v) in (let TMP_55 \def (getl_mono c0 TMP_52
962 n H0 TMP_54 H7) in (let H11 \def (f_equal C T TMP_46 TMP_48 TMP_50 TMP_55) in
963 (let TMP_72 \def (\lambda (H12: (eq B Abbr b)).(\lambda (H13: (eq C d
964 d0)).(let TMP_58 \def (\lambda (t2: T).(let TMP_56 \def (Bind b) in (let
965 TMP_57 \def (CHead d0 TMP_56 t2) in (getl n c0 TMP_57)))) in (let H14 \def
966 (eq_ind_r T v TMP_58 H8 u0 H11) in (let TMP_60 \def (\lambda (t2: T).(let
967 TMP_59 \def (\lambda (w: T).(ty3 g d0 t2 w)) in (ex T TMP_59))) in (let
968 TMP_63 \def (\lambda (c1: C).(let TMP_61 \def (Bind b) in (let TMP_62 \def
969 (CHead c1 TMP_61 u0) in (getl n c0 TMP_62)))) in (let H15 \def (eq_ind_r C d0
970 TMP_63 H14 d H13) in (let TMP_65 \def (\lambda (c1: C).(let TMP_64 \def
971 (\lambda (w: T).(ty3 g c1 u0 w)) in (ex T TMP_64))) in (let TMP_68 \def
972 (\lambda (b0: B).(let TMP_66 \def (Bind b0) in (let TMP_67 \def (CHead d
973 TMP_66 u0) in (getl n c0 TMP_67)))) in (let H16 \def (eq_ind_r B b TMP_68 H15
974 Abbr H12) in (let TMP_69 \def (\lambda (w: T).(ty3 g d u0 w)) in (let TMP_70
975 \def (ex_intro T TMP_69 t0 H1) in (let TMP_71 \def (eq_ind C d TMP_65 TMP_70
976 d0 H13) in (eq_ind T u0 TMP_60 TMP_71 v H11)))))))))))))) in (let TMP_73 \def
977 (TMP_72 H10) in (TMP_73 H9)))))))))))))))))))))))))))))))))))))))))))))))))))
978 in (let TMP_75 \def (subst0_gen_lref v0 t1 i n H3) in (land_ind TMP_7 TMP_10
979 TMP_12 TMP_74 TMP_75))))))))))))))))))))))))) in (let TMP_146 \def (\lambda
980 (n: nat).(\lambda (c0: C).(\lambda (d: C).(\lambda (u0: T).(\lambda (H0:
981 (getl n c0 (CHead d (Bind Abst) u0))).(\lambda (t0: T).(\lambda (H1: (ty3 g d
982 u0 t0)).(\lambda (_: ((\forall (v0: T).(\forall (t1: T).(\forall (i:
983 nat).((subst0 i v0 u0 t1) \to (\forall (b: B).(\forall (d0: C).(\forall (v:
984 T).((getl i d (CHead d0 (Bind b) v)) \to (ex T (\lambda (w: T).(ty3 g d0 v
985 w))))))))))))).(\lambda (v0: T).(\lambda (t1: T).(\lambda (i: nat).(\lambda
986 (H3: (subst0 i v0 (TLRef n) t1)).(\lambda (b: B).(\lambda (d0: C).(\lambda
987 (v: T).(\lambda (H4: (getl i c0 (CHead d0 (Bind b) v))).(let TMP_77 \def (eq
988 nat n i) in (let TMP_78 \def (S n) in (let TMP_79 \def (lift TMP_78 O v0) in
989 (let TMP_80 \def (eq T t1 TMP_79) in (let TMP_81 \def (\lambda (w: T).(ty3 g
990 d0 v w)) in (let TMP_82 \def (ex T TMP_81) in (let TMP_144 \def (\lambda (H5:
991 (eq nat n i)).(\lambda (_: (eq T t1 (lift (S n) O v0))).(let TMP_85 \def
992 (\lambda (n0: nat).(let TMP_83 \def (Bind b) in (let TMP_84 \def (CHead d0
993 TMP_83 v) in (getl n0 c0 TMP_84)))) in (let H7 \def (eq_ind_r nat i TMP_85 H4
994 n H5) in (let TMP_86 \def (Bind Abst) in (let TMP_87 \def (CHead d TMP_86 u0)
995 in (let TMP_88 \def (\lambda (c1: C).(getl n c0 c1)) in (let TMP_89 \def
996 (Bind b) in (let TMP_90 \def (CHead d0 TMP_89 v) in (let TMP_91 \def (Bind
997 Abst) in (let TMP_92 \def (CHead d TMP_91 u0) in (let TMP_93 \def (Bind b) in
998 (let TMP_94 \def (CHead d0 TMP_93 v) in (let TMP_95 \def (getl_mono c0 TMP_92
999 n H0 TMP_94 H7) in (let H8 \def (eq_ind C TMP_87 TMP_88 H0 TMP_90 TMP_95) in
1000 (let TMP_96 \def (\lambda (e: C).(match e with [(CSort _) \Rightarrow d |
1001 (CHead c1 _ _) \Rightarrow c1])) in (let TMP_97 \def (Bind Abst) in (let
1002 TMP_98 \def (CHead d TMP_97 u0) in (let TMP_99 \def (Bind b) in (let TMP_100
1003 \def (CHead d0 TMP_99 v) in (let TMP_101 \def (Bind Abst) in (let TMP_102
1004 \def (CHead d TMP_101 u0) in (let TMP_103 \def (Bind b) in (let TMP_104 \def
1005 (CHead d0 TMP_103 v) in (let TMP_105 \def (getl_mono c0 TMP_102 n H0 TMP_104
1006 H7) in (let H9 \def (f_equal C C TMP_96 TMP_98 TMP_100 TMP_105) in (let
1007 TMP_106 \def (\lambda (e: C).(match e with [(CSort _) \Rightarrow Abst |
1008 (CHead _ k _) \Rightarrow (match k with [(Bind b0) \Rightarrow b0 | (Flat _)
1009 \Rightarrow Abst])])) in (let TMP_107 \def (Bind Abst) in (let TMP_108 \def
1010 (CHead d TMP_107 u0) in (let TMP_109 \def (Bind b) in (let TMP_110 \def
1011 (CHead d0 TMP_109 v) in (let TMP_111 \def (Bind Abst) in (let TMP_112 \def
1012 (CHead d TMP_111 u0) in (let TMP_113 \def (Bind b) in (let TMP_114 \def
1013 (CHead d0 TMP_113 v) in (let TMP_115 \def (getl_mono c0 TMP_112 n H0 TMP_114
1014 H7) in (let H10 \def (f_equal C B TMP_106 TMP_108 TMP_110 TMP_115) in (let
1015 TMP_116 \def (\lambda (e: C).(match e with [(CSort _) \Rightarrow u0 | (CHead
1016 _ _ t2) \Rightarrow t2])) in (let TMP_117 \def (Bind Abst) in (let TMP_118
1017 \def (CHead d TMP_117 u0) in (let TMP_119 \def (Bind b) in (let TMP_120 \def
1018 (CHead d0 TMP_119 v) in (let TMP_121 \def (Bind Abst) in (let TMP_122 \def
1019 (CHead d TMP_121 u0) in (let TMP_123 \def (Bind b) in (let TMP_124 \def
1020 (CHead d0 TMP_123 v) in (let TMP_125 \def (getl_mono c0 TMP_122 n H0 TMP_124
1021 H7) in (let H11 \def (f_equal C T TMP_116 TMP_118 TMP_120 TMP_125) in (let
1022 TMP_142 \def (\lambda (H12: (eq B Abst b)).(\lambda (H13: (eq C d d0)).(let
1023 TMP_128 \def (\lambda (t2: T).(let TMP_126 \def (Bind b) in (let TMP_127 \def
1024 (CHead d0 TMP_126 t2) in (getl n c0 TMP_127)))) in (let H14 \def (eq_ind_r T
1025 v TMP_128 H8 u0 H11) in (let TMP_130 \def (\lambda (t2: T).(let TMP_129 \def
1026 (\lambda (w: T).(ty3 g d0 t2 w)) in (ex T TMP_129))) in (let TMP_133 \def
1027 (\lambda (c1: C).(let TMP_131 \def (Bind b) in (let TMP_132 \def (CHead c1
1028 TMP_131 u0) in (getl n c0 TMP_132)))) in (let H15 \def (eq_ind_r C d0 TMP_133
1029 H14 d H13) in (let TMP_135 \def (\lambda (c1: C).(let TMP_134 \def (\lambda
1030 (w: T).(ty3 g c1 u0 w)) in (ex T TMP_134))) in (let TMP_138 \def (\lambda
1031 (b0: B).(let TMP_136 \def (Bind b0) in (let TMP_137 \def (CHead d TMP_136 u0)
1032 in (getl n c0 TMP_137)))) in (let H16 \def (eq_ind_r B b TMP_138 H15 Abst
1033 H12) in (let TMP_139 \def (\lambda (w: T).(ty3 g d u0 w)) in (let TMP_140
1034 \def (ex_intro T TMP_139 t0 H1) in (let TMP_141 \def (eq_ind C d TMP_135
1035 TMP_140 d0 H13) in (eq_ind T u0 TMP_130 TMP_141 v H11)))))))))))))) in (let
1036 TMP_143 \def (TMP_142 H10) in (TMP_143
1037 H9))))))))))))))))))))))))))))))))))))))))))))))))))) in (let TMP_145 \def
1038 (subst0_gen_lref v0 t1 i n H3) in (land_ind TMP_77 TMP_80 TMP_82 TMP_144
1039 TMP_145))))))))))))))))))))))))) in (let TMP_205 \def (\lambda (c0:
1040 C).(\lambda (u0: T).(\lambda (t0: T).(\lambda (_: (ty3 g c0 u0 t0)).(\lambda
1041 (H1: ((\forall (v0: T).(\forall (t1: T).(\forall (i: nat).((subst0 i v0 u0
1042 t1) \to (\forall (b: B).(\forall (d: C).(\forall (v: T).((getl i c0 (CHead d
1043 (Bind b) v)) \to (ex T (\lambda (w: T).(ty3 g d v w))))))))))))).(\lambda (b:
1044 B).(\lambda (t1: T).(\lambda (t2: T).(\lambda (_: (ty3 g (CHead c0 (Bind b)
1045 u0) t1 t2)).(\lambda (H3: ((\forall (v0: T).(\forall (t3: T).(\forall (i:
1046 nat).((subst0 i v0 t1 t3) \to (\forall (b0: B).(\forall (d: C).(\forall (v:
1047 T).((getl i (CHead c0 (Bind b) u0) (CHead d (Bind b0) v)) \to (ex T (\lambda
1048 (w: T).(ty3 g d v w))))))))))))).(\lambda (v0: T).(\lambda (t3: T).(\lambda
1049 (i: nat).(\lambda (H4: (subst0 i v0 (THead (Bind b) u0 t1) t3)).(\lambda (b0:
1050 B).(\lambda (d: C).(\lambda (v: T).(\lambda (H5: (getl i c0 (CHead d (Bind
1051 b0) v))).(let TMP_149 \def (\lambda (u2: T).(let TMP_147 \def (Bind b) in
1052 (let TMP_148 \def (THead TMP_147 u2 t1) in (eq T t3 TMP_148)))) in (let
1053 TMP_150 \def (\lambda (u2: T).(subst0 i v0 u0 u2)) in (let TMP_151 \def (ex2
1054 T TMP_149 TMP_150) in (let TMP_154 \def (\lambda (t4: T).(let TMP_152 \def
1055 (Bind b) in (let TMP_153 \def (THead TMP_152 u0 t4) in (eq T t3 TMP_153))))
1056 in (let TMP_157 \def (\lambda (t4: T).(let TMP_155 \def (Bind b) in (let
1057 TMP_156 \def (s TMP_155 i) in (subst0 TMP_156 v0 t1 t4)))) in (let TMP_158
1058 \def (ex2 T TMP_154 TMP_157) in (let TMP_161 \def (\lambda (u2: T).(\lambda
1059 (t4: T).(let TMP_159 \def (Bind b) in (let TMP_160 \def (THead TMP_159 u2 t4)
1060 in (eq T t3 TMP_160))))) in (let TMP_162 \def (\lambda (u2: T).(\lambda (_:
1061 T).(subst0 i v0 u0 u2))) in (let TMP_165 \def (\lambda (_: T).(\lambda (t4:
1062 T).(let TMP_163 \def (Bind b) in (let TMP_164 \def (s TMP_163 i) in (subst0
1063 TMP_164 v0 t1 t4))))) in (let TMP_166 \def (ex3_2 T T TMP_161 TMP_162
1064 TMP_165) in (let TMP_167 \def (\lambda (w: T).(ty3 g d v w)) in (let TMP_168
1065 \def (ex T TMP_167) in (let TMP_176 \def (\lambda (H6: (ex2 T (\lambda (u2:
1066 T).(eq T t3 (THead (Bind b) u2 t1))) (\lambda (u2: T).(subst0 i v0 u0
1067 u2)))).(let TMP_171 \def (\lambda (u2: T).(let TMP_169 \def (Bind b) in (let
1068 TMP_170 \def (THead TMP_169 u2 t1) in (eq T t3 TMP_170)))) in (let TMP_172
1069 \def (\lambda (u2: T).(subst0 i v0 u0 u2)) in (let TMP_173 \def (\lambda (w:
1070 T).(ty3 g d v w)) in (let TMP_174 \def (ex T TMP_173) in (let TMP_175 \def
1071 (\lambda (x: T).(\lambda (_: (eq T t3 (THead (Bind b) x t1))).(\lambda (H8:
1072 (subst0 i v0 u0 x)).(H1 v0 x i H8 b0 d v H5)))) in (ex2_ind T TMP_171 TMP_172
1073 TMP_174 TMP_175 H6))))))) in (let TMP_191 \def (\lambda (H6: (ex2 T (\lambda
1074 (t4: T).(eq T t3 (THead (Bind b) u0 t4))) (\lambda (t4: T).(subst0 (s (Bind
1075 b) i) v0 t1 t4)))).(let TMP_179 \def (\lambda (t4: T).(let TMP_177 \def (Bind
1076 b) in (let TMP_178 \def (THead TMP_177 u0 t4) in (eq T t3 TMP_178)))) in (let
1077 TMP_182 \def (\lambda (t4: T).(let TMP_180 \def (Bind b) in (let TMP_181 \def
1078 (s TMP_180 i) in (subst0 TMP_181 v0 t1 t4)))) in (let TMP_183 \def (\lambda
1079 (w: T).(ty3 g d v w)) in (let TMP_184 \def (ex T TMP_183) in (let TMP_190
1080 \def (\lambda (x: T).(\lambda (_: (eq T t3 (THead (Bind b) u0 x))).(\lambda
1081 (H8: (subst0 (s (Bind b) i) v0 t1 x)).(let TMP_185 \def (S i) in (let TMP_186
1082 \def (Bind b) in (let TMP_187 \def (Bind b0) in (let TMP_188 \def (CHead d
1083 TMP_187 v) in (let TMP_189 \def (getl_head TMP_186 i c0 TMP_188 H5 u0) in (H3
1084 v0 x TMP_185 H8 b0 d v TMP_189))))))))) in (ex2_ind T TMP_179 TMP_182 TMP_184
1085 TMP_190 H6))))))) in (let TMP_202 \def (\lambda (H6: (ex3_2 T T (\lambda (u2:
1086 T).(\lambda (t4: T).(eq T t3 (THead (Bind b) u2 t4)))) (\lambda (u2:
1087 T).(\lambda (_: T).(subst0 i v0 u0 u2))) (\lambda (_: T).(\lambda (t4:
1088 T).(subst0 (s (Bind b) i) v0 t1 t4))))).(let TMP_194 \def (\lambda (u2:
1089 T).(\lambda (t4: T).(let TMP_192 \def (Bind b) in (let TMP_193 \def (THead
1090 TMP_192 u2 t4) in (eq T t3 TMP_193))))) in (let TMP_195 \def (\lambda (u2:
1091 T).(\lambda (_: T).(subst0 i v0 u0 u2))) in (let TMP_198 \def (\lambda (_:
1092 T).(\lambda (t4: T).(let TMP_196 \def (Bind b) in (let TMP_197 \def (s
1093 TMP_196 i) in (subst0 TMP_197 v0 t1 t4))))) in (let TMP_199 \def (\lambda (w:
1094 T).(ty3 g d v w)) in (let TMP_200 \def (ex T TMP_199) in (let TMP_201 \def
1095 (\lambda (x0: T).(\lambda (x1: T).(\lambda (_: (eq T t3 (THead (Bind b) x0
1096 x1))).(\lambda (H8: (subst0 i v0 u0 x0)).(\lambda (_: (subst0 (s (Bind b) i)
1097 v0 t1 x1)).(H1 v0 x0 i H8 b0 d v H5)))))) in (ex3_2_ind T T TMP_194 TMP_195
1098 TMP_198 TMP_200 TMP_201 H6)))))))) in (let TMP_203 \def (Bind b) in (let
1099 TMP_204 \def (subst0_gen_head TMP_203 v0 u0 t1 t3 i H4) in (or3_ind TMP_151
1100 TMP_158 TMP_166 TMP_168 TMP_176 TMP_191 TMP_202
1101 TMP_204)))))))))))))))))))))))))))))))))))) in (let TMP_263 \def (\lambda
1102 (c0: C).(\lambda (w: T).(\lambda (u0: T).(\lambda (_: (ty3 g c0 w
1103 u0)).(\lambda (H1: ((\forall (v0: T).(\forall (t0: T).(\forall (i:
1104 nat).((subst0 i v0 w t0) \to (\forall (b: B).(\forall (d: C).(\forall (v:
1105 T).((getl i c0 (CHead d (Bind b) v)) \to (ex T (\lambda (w0: T).(ty3 g d v
1106 w0))))))))))))).(\lambda (v: T).(\lambda (t0: T).(\lambda (_: (ty3 g c0 v
1107 (THead (Bind Abst) u0 t0))).(\lambda (H3: ((\forall (v0: T).(\forall (t1:
1108 T).(\forall (i: nat).((subst0 i v0 v t1) \to (\forall (b: B).(\forall (d:
1109 C).(\forall (v1: T).((getl i c0 (CHead d (Bind b) v1)) \to (ex T (\lambda
1110 (w0: T).(ty3 g d v1 w0))))))))))))).(\lambda (v0: T).(\lambda (t1:
1111 T).(\lambda (i: nat).(\lambda (H4: (subst0 i v0 (THead (Flat Appl) w v)
1112 t1)).(\lambda (b: B).(\lambda (d: C).(\lambda (v1: T).(\lambda (H5: (getl i
1113 c0 (CHead d (Bind b) v1))).(let TMP_208 \def (\lambda (u2: T).(let TMP_206
1114 \def (Flat Appl) in (let TMP_207 \def (THead TMP_206 u2 v) in (eq T t1
1115 TMP_207)))) in (let TMP_209 \def (\lambda (u2: T).(subst0 i v0 w u2)) in (let
1116 TMP_210 \def (ex2 T TMP_208 TMP_209) in (let TMP_213 \def (\lambda (t2:
1117 T).(let TMP_211 \def (Flat Appl) in (let TMP_212 \def (THead TMP_211 w t2) in
1118 (eq T t1 TMP_212)))) in (let TMP_216 \def (\lambda (t2: T).(let TMP_214 \def
1119 (Flat Appl) in (let TMP_215 \def (s TMP_214 i) in (subst0 TMP_215 v0 v t2))))
1120 in (let TMP_217 \def (ex2 T TMP_213 TMP_216) in (let TMP_220 \def (\lambda
1121 (u2: T).(\lambda (t2: T).(let TMP_218 \def (Flat Appl) in (let TMP_219 \def
1122 (THead TMP_218 u2 t2) in (eq T t1 TMP_219))))) in (let TMP_221 \def (\lambda
1123 (u2: T).(\lambda (_: T).(subst0 i v0 w u2))) in (let TMP_224 \def (\lambda
1124 (_: T).(\lambda (t2: T).(let TMP_222 \def (Flat Appl) in (let TMP_223 \def (s
1125 TMP_222 i) in (subst0 TMP_223 v0 v t2))))) in (let TMP_225 \def (ex3_2 T T
1126 TMP_220 TMP_221 TMP_224) in (let TMP_226 \def (\lambda (w0: T).(ty3 g d v1
1127 w0)) in (let TMP_227 \def (ex T TMP_226) in (let TMP_235 \def (\lambda (H6:
1128 (ex2 T (\lambda (u2: T).(eq T t1 (THead (Flat Appl) u2 v))) (\lambda (u2:
1129 T).(subst0 i v0 w u2)))).(let TMP_230 \def (\lambda (u2: T).(let TMP_228 \def
1130 (Flat Appl) in (let TMP_229 \def (THead TMP_228 u2 v) in (eq T t1 TMP_229))))
1131 in (let TMP_231 \def (\lambda (u2: T).(subst0 i v0 w u2)) in (let TMP_232
1132 \def (\lambda (w0: T).(ty3 g d v1 w0)) in (let TMP_233 \def (ex T TMP_232) in
1133 (let TMP_234 \def (\lambda (x: T).(\lambda (_: (eq T t1 (THead (Flat Appl) x
1134 v))).(\lambda (H8: (subst0 i v0 w x)).(H1 v0 x i H8 b d v1 H5)))) in (ex2_ind
1135 T TMP_230 TMP_231 TMP_233 TMP_234 H6))))))) in (let TMP_247 \def (\lambda
1136 (H6: (ex2 T (\lambda (t2: T).(eq T t1 (THead (Flat Appl) w t2))) (\lambda
1137 (t2: T).(subst0 (s (Flat Appl) i) v0 v t2)))).(let TMP_238 \def (\lambda (t2:
1138 T).(let TMP_236 \def (Flat Appl) in (let TMP_237 \def (THead TMP_236 w t2) in
1139 (eq T t1 TMP_237)))) in (let TMP_241 \def (\lambda (t2: T).(let TMP_239 \def
1140 (Flat Appl) in (let TMP_240 \def (s TMP_239 i) in (subst0 TMP_240 v0 v t2))))
1141 in (let TMP_242 \def (\lambda (w0: T).(ty3 g d v1 w0)) in (let TMP_243 \def
1142 (ex T TMP_242) in (let TMP_246 \def (\lambda (x: T).(\lambda (_: (eq T t1
1143 (THead (Flat Appl) w x))).(\lambda (H8: (subst0 (s (Flat Appl) i) v0 v
1144 x)).(let TMP_244 \def (Flat Appl) in (let TMP_245 \def (s TMP_244 i) in (H3
1145 v0 x TMP_245 H8 b d v1 H5)))))) in (ex2_ind T TMP_238 TMP_241 TMP_243 TMP_246
1146 H6))))))) in (let TMP_260 \def (\lambda (H6: (ex3_2 T T (\lambda (u2:
1147 T).(\lambda (t2: T).(eq T t1 (THead (Flat Appl) u2 t2)))) (\lambda (u2:
1148 T).(\lambda (_: T).(subst0 i v0 w u2))) (\lambda (_: T).(\lambda (t2:
1149 T).(subst0 (s (Flat Appl) i) v0 v t2))))).(let TMP_250 \def (\lambda (u2:
1150 T).(\lambda (t2: T).(let TMP_248 \def (Flat Appl) in (let TMP_249 \def (THead
1151 TMP_248 u2 t2) in (eq T t1 TMP_249))))) in (let TMP_251 \def (\lambda (u2:
1152 T).(\lambda (_: T).(subst0 i v0 w u2))) in (let TMP_254 \def (\lambda (_:
1153 T).(\lambda (t2: T).(let TMP_252 \def (Flat Appl) in (let TMP_253 \def (s
1154 TMP_252 i) in (subst0 TMP_253 v0 v t2))))) in (let TMP_255 \def (\lambda (w0:
1155 T).(ty3 g d v1 w0)) in (let TMP_256 \def (ex T TMP_255) in (let TMP_259 \def
1156 (\lambda (x0: T).(\lambda (x1: T).(\lambda (_: (eq T t1 (THead (Flat Appl) x0
1157 x1))).(\lambda (_: (subst0 i v0 w x0)).(\lambda (H9: (subst0 (s (Flat Appl)
1158 i) v0 v x1)).(let TMP_257 \def (Flat Appl) in (let TMP_258 \def (s TMP_257 i)
1159 in (H3 v0 x1 TMP_258 H9 b d v1 H5)))))))) in (ex3_2_ind T T TMP_250 TMP_251
1160 TMP_254 TMP_256 TMP_259 H6)))))))) in (let TMP_261 \def (Flat Appl) in (let
1161 TMP_262 \def (subst0_gen_head TMP_261 v0 w v t1 i H4) in (or3_ind TMP_210
1162 TMP_217 TMP_225 TMP_227 TMP_235 TMP_247 TMP_260
1163 TMP_262))))))))))))))))))))))))))))))))))) in (let TMP_319 \def (\lambda (c0:
1164 C).(\lambda (t1: T).(\lambda (t2: T).(\lambda (_: (ty3 g c0 t1 t2)).(\lambda
1165 (H1: ((\forall (v0: T).(\forall (t0: T).(\forall (i: nat).((subst0 i v0 t1
1166 t0) \to (\forall (b: B).(\forall (d: C).(\forall (v: T).((getl i c0 (CHead d
1167 (Bind b) v)) \to (ex T (\lambda (w: T).(ty3 g d v w))))))))))))).(\lambda
1168 (t0: T).(\lambda (_: (ty3 g c0 t2 t0)).(\lambda (H3: ((\forall (v0:
1169 T).(\forall (t3: T).(\forall (i: nat).((subst0 i v0 t2 t3) \to (\forall (b:
1170 B).(\forall (d: C).(\forall (v: T).((getl i c0 (CHead d (Bind b) v)) \to (ex
1171 T (\lambda (w: T).(ty3 g d v w))))))))))))).(\lambda (v0: T).(\lambda (t3:
1172 T).(\lambda (i: nat).(\lambda (H4: (subst0 i v0 (THead (Flat Cast) t2 t1)
1173 t3)).(\lambda (b: B).(\lambda (d: C).(\lambda (v: T).(\lambda (H5: (getl i c0
1174 (CHead d (Bind b) v))).(let TMP_266 \def (\lambda (u2: T).(let TMP_264 \def
1175 (Flat Cast) in (let TMP_265 \def (THead TMP_264 u2 t1) in (eq T t3
1176 TMP_265)))) in (let TMP_267 \def (\lambda (u2: T).(subst0 i v0 t2 u2)) in
1177 (let TMP_268 \def (ex2 T TMP_266 TMP_267) in (let TMP_271 \def (\lambda (t4:
1178 T).(let TMP_269 \def (Flat Cast) in (let TMP_270 \def (THead TMP_269 t2 t4)
1179 in (eq T t3 TMP_270)))) in (let TMP_274 \def (\lambda (t4: T).(let TMP_272
1180 \def (Flat Cast) in (let TMP_273 \def (s TMP_272 i) in (subst0 TMP_273 v0 t1
1181 t4)))) in (let TMP_275 \def (ex2 T TMP_271 TMP_274) in (let TMP_278 \def
1182 (\lambda (u2: T).(\lambda (t4: T).(let TMP_276 \def (Flat Cast) in (let
1183 TMP_277 \def (THead TMP_276 u2 t4) in (eq T t3 TMP_277))))) in (let TMP_279
1184 \def (\lambda (u2: T).(\lambda (_: T).(subst0 i v0 t2 u2))) in (let TMP_282
1185 \def (\lambda (_: T).(\lambda (t4: T).(let TMP_280 \def (Flat Cast) in (let
1186 TMP_281 \def (s TMP_280 i) in (subst0 TMP_281 v0 t1 t4))))) in (let TMP_283
1187 \def (ex3_2 T T TMP_278 TMP_279 TMP_282) in (let TMP_284 \def (\lambda (w:
1188 T).(ty3 g d v w)) in (let TMP_285 \def (ex T TMP_284) in (let TMP_293 \def
1189 (\lambda (H6: (ex2 T (\lambda (u2: T).(eq T t3 (THead (Flat Cast) u2 t1)))
1190 (\lambda (u2: T).(subst0 i v0 t2 u2)))).(let TMP_288 \def (\lambda (u2:
1191 T).(let TMP_286 \def (Flat Cast) in (let TMP_287 \def (THead TMP_286 u2 t1)
1192 in (eq T t3 TMP_287)))) in (let TMP_289 \def (\lambda (u2: T).(subst0 i v0 t2
1193 u2)) in (let TMP_290 \def (\lambda (w: T).(ty3 g d v w)) in (let TMP_291 \def
1194 (ex T TMP_290) in (let TMP_292 \def (\lambda (x: T).(\lambda (_: (eq T t3
1195 (THead (Flat Cast) x t1))).(\lambda (H8: (subst0 i v0 t2 x)).(H3 v0 x i H8 b
1196 d v H5)))) in (ex2_ind T TMP_288 TMP_289 TMP_291 TMP_292 H6))))))) in (let
1197 TMP_305 \def (\lambda (H6: (ex2 T (\lambda (t4: T).(eq T t3 (THead (Flat
1198 Cast) t2 t4))) (\lambda (t4: T).(subst0 (s (Flat Cast) i) v0 t1 t4)))).(let
1199 TMP_296 \def (\lambda (t4: T).(let TMP_294 \def (Flat Cast) in (let TMP_295
1200 \def (THead TMP_294 t2 t4) in (eq T t3 TMP_295)))) in (let TMP_299 \def
1201 (\lambda (t4: T).(let TMP_297 \def (Flat Cast) in (let TMP_298 \def (s
1202 TMP_297 i) in (subst0 TMP_298 v0 t1 t4)))) in (let TMP_300 \def (\lambda (w:
1203 T).(ty3 g d v w)) in (let TMP_301 \def (ex T TMP_300) in (let TMP_304 \def
1204 (\lambda (x: T).(\lambda (_: (eq T t3 (THead (Flat Cast) t2 x))).(\lambda
1205 (H8: (subst0 (s (Flat Cast) i) v0 t1 x)).(let TMP_302 \def (Flat Cast) in
1206 (let TMP_303 \def (s TMP_302 i) in (H1 v0 x TMP_303 H8 b d v H5)))))) in
1207 (ex2_ind T TMP_296 TMP_299 TMP_301 TMP_304 H6))))))) in (let TMP_316 \def
1208 (\lambda (H6: (ex3_2 T T (\lambda (u2: T).(\lambda (t4: T).(eq T t3 (THead
1209 (Flat Cast) u2 t4)))) (\lambda (u2: T).(\lambda (_: T).(subst0 i v0 t2 u2)))
1210 (\lambda (_: T).(\lambda (t4: T).(subst0 (s (Flat Cast) i) v0 t1 t4))))).(let
1211 TMP_308 \def (\lambda (u2: T).(\lambda (t4: T).(let TMP_306 \def (Flat Cast)
1212 in (let TMP_307 \def (THead TMP_306 u2 t4) in (eq T t3 TMP_307))))) in (let
1213 TMP_309 \def (\lambda (u2: T).(\lambda (_: T).(subst0 i v0 t2 u2))) in (let
1214 TMP_312 \def (\lambda (_: T).(\lambda (t4: T).(let TMP_310 \def (Flat Cast)
1215 in (let TMP_311 \def (s TMP_310 i) in (subst0 TMP_311 v0 t1 t4))))) in (let
1216 TMP_313 \def (\lambda (w: T).(ty3 g d v w)) in (let TMP_314 \def (ex T
1217 TMP_313) in (let TMP_315 \def (\lambda (x0: T).(\lambda (x1: T).(\lambda (_:
1218 (eq T t3 (THead (Flat Cast) x0 x1))).(\lambda (H8: (subst0 i v0 t2
1219 x0)).(\lambda (_: (subst0 (s (Flat Cast) i) v0 t1 x1)).(H3 v0 x0 i H8 b d v
1220 H5)))))) in (ex3_2_ind T T TMP_308 TMP_309 TMP_312 TMP_314 TMP_315 H6))))))))
1221 in (let TMP_317 \def (Flat Cast) in (let TMP_318 \def (subst0_gen_head
1222 TMP_317 v0 t2 t1 t3 i H4) in (or3_ind TMP_268 TMP_275 TMP_283 TMP_285 TMP_293
1223 TMP_305 TMP_316 TMP_318)))))))))))))))))))))))))))))))))) in (ty3_ind g TMP_2
1224 TMP_3 TMP_6 TMP_76 TMP_146 TMP_205 TMP_263 TMP_319 c t u H))))))))))))).