210 |
208 |
211 (* ------------------------------------------------------------------------ *) |
209 (* ------------------------------------------------------------------------ *) |
212 (* optimize lemmas about less_ssum *) |
210 (* optimize lemmas about less_ssum *) |
213 (* ------------------------------------------------------------------------ *) |
211 (* ------------------------------------------------------------------------ *) |
214 |
212 |
215 qed_goal "less_ssum2a" thy |
213 Goal "(Isinl x) << (Isinl y) = (x << y)"; |
216 "(Isinl x) << (Isinl y) = (x << y)" |
214 by (rtac less_ssum1a 1); |
217 (fn prems => |
215 by (rtac refl 1); |
218 [ |
216 by (rtac refl 1); |
219 (rtac less_ssum1a 1), |
217 qed "less_ssum2a"; |
220 (rtac refl 1), |
218 |
221 (rtac refl 1) |
219 Goal "(Isinr x) << (Isinr y) = (x << y)"; |
222 ]); |
220 by (rtac less_ssum1b 1); |
223 |
221 by (rtac refl 1); |
224 qed_goal "less_ssum2b" thy |
222 by (rtac refl 1); |
225 "(Isinr x) << (Isinr y) = (x << y)" |
223 qed "less_ssum2b"; |
226 (fn prems => |
224 |
227 [ |
225 Goal "(Isinl x) << (Isinr y) = (x = UU)"; |
228 (rtac less_ssum1b 1), |
226 by (rtac less_ssum1c 1); |
229 (rtac refl 1), |
227 by (rtac refl 1); |
230 (rtac refl 1) |
228 by (rtac refl 1); |
231 ]); |
229 qed "less_ssum2c"; |
232 |
230 |
233 qed_goal "less_ssum2c" thy |
231 Goal "(Isinr x) << (Isinl y) = (x = UU)"; |
234 "(Isinl x) << (Isinr y) = (x = UU)" |
232 by (rtac less_ssum1d 1); |
235 (fn prems => |
233 by (rtac refl 1); |
236 [ |
234 by (rtac refl 1); |
237 (rtac less_ssum1c 1), |
235 qed "less_ssum2d"; |
238 (rtac refl 1), |
|
239 (rtac refl 1) |
|
240 ]); |
|
241 |
|
242 qed_goal "less_ssum2d" thy |
|
243 "(Isinr x) << (Isinl y) = (x = UU)" |
|
244 (fn prems => |
|
245 [ |
|
246 (rtac less_ssum1d 1), |
|
247 (rtac refl 1), |
|
248 (rtac refl 1) |
|
249 ]); |
|
250 |
236 |
251 |
237 |
252 (* ------------------------------------------------------------------------ *) |
238 (* ------------------------------------------------------------------------ *) |
253 (* less_ssum is a partial order on ++ *) |
239 (* less_ssum is a partial order on ++ *) |
254 (* ------------------------------------------------------------------------ *) |
240 (* ------------------------------------------------------------------------ *) |
255 |
241 |
256 qed_goal "refl_less_ssum" thy "(p::'a++'b) << p" |
242 Goal "(p::'a++'b) << p"; |
257 (fn prems => |
243 by (res_inst_tac [("p","p")] IssumE2 1); |
258 [ |
244 by (hyp_subst_tac 1); |
259 (res_inst_tac [("p","p")] IssumE2 1), |
245 by (rtac (less_ssum2a RS iffD2) 1); |
260 (hyp_subst_tac 1), |
246 by (rtac refl_less 1); |
261 (rtac (less_ssum2a RS iffD2) 1), |
247 by (hyp_subst_tac 1); |
262 (rtac refl_less 1), |
248 by (rtac (less_ssum2b RS iffD2) 1); |
263 (hyp_subst_tac 1), |
249 by (rtac refl_less 1); |
264 (rtac (less_ssum2b RS iffD2) 1), |
250 qed "refl_less_ssum"; |
265 (rtac refl_less 1) |
251 |
266 ]); |
252 Goal "[|(p1::'a++'b) << p2; p2 << p1|] ==> p1=p2"; |
267 |
253 by (res_inst_tac [("p","p1")] IssumE2 1); |
268 qed_goal "antisym_less_ssum" thy |
254 by (hyp_subst_tac 1); |
269 "[|(p1::'a++'b) << p2; p2 << p1|] ==> p1=p2" |
255 by (res_inst_tac [("p","p2")] IssumE2 1); |
270 (fn prems => |
256 by (hyp_subst_tac 1); |
271 [ |
257 by (res_inst_tac [("f","Isinl")] arg_cong 1); |
272 (cut_facts_tac prems 1), |
258 by (rtac antisym_less 1); |
273 (res_inst_tac [("p","p1")] IssumE2 1), |
259 by (etac (less_ssum2a RS iffD1) 1); |
274 (hyp_subst_tac 1), |
260 by (etac (less_ssum2a RS iffD1) 1); |
275 (res_inst_tac [("p","p2")] IssumE2 1), |
261 by (hyp_subst_tac 1); |
276 (hyp_subst_tac 1), |
262 by (etac (less_ssum2d RS iffD1 RS ssubst) 1); |
277 (res_inst_tac [("f","Isinl")] arg_cong 1), |
263 by (etac (less_ssum2c RS iffD1 RS ssubst) 1); |
278 (rtac antisym_less 1), |
264 by (rtac strict_IsinlIsinr 1); |
279 (etac (less_ssum2a RS iffD1) 1), |
265 by (hyp_subst_tac 1); |
280 (etac (less_ssum2a RS iffD1) 1), |
266 by (res_inst_tac [("p","p2")] IssumE2 1); |
281 (hyp_subst_tac 1), |
267 by (hyp_subst_tac 1); |
282 (etac (less_ssum2d RS iffD1 RS ssubst) 1), |
268 by (etac (less_ssum2c RS iffD1 RS ssubst) 1); |
283 (etac (less_ssum2c RS iffD1 RS ssubst) 1), |
269 by (etac (less_ssum2d RS iffD1 RS ssubst) 1); |
284 (rtac strict_IsinlIsinr 1), |
270 by (rtac (strict_IsinlIsinr RS sym) 1); |
285 (hyp_subst_tac 1), |
271 by (hyp_subst_tac 1); |
286 (res_inst_tac [("p","p2")] IssumE2 1), |
272 by (res_inst_tac [("f","Isinr")] arg_cong 1); |
287 (hyp_subst_tac 1), |
273 by (rtac antisym_less 1); |
288 (etac (less_ssum2c RS iffD1 RS ssubst) 1), |
274 by (etac (less_ssum2b RS iffD1) 1); |
289 (etac (less_ssum2d RS iffD1 RS ssubst) 1), |
275 by (etac (less_ssum2b RS iffD1) 1); |
290 (rtac (strict_IsinlIsinr RS sym) 1), |
276 qed "antisym_less_ssum"; |
291 (hyp_subst_tac 1), |
277 |
292 (res_inst_tac [("f","Isinr")] arg_cong 1), |
278 Goal "[|(p1::'a++'b) << p2; p2 << p3|] ==> p1 << p3"; |
293 (rtac antisym_less 1), |
279 by (res_inst_tac [("p","p1")] IssumE2 1); |
294 (etac (less_ssum2b RS iffD1) 1), |
280 by (hyp_subst_tac 1); |
295 (etac (less_ssum2b RS iffD1) 1) |
281 by (res_inst_tac [("p","p3")] IssumE2 1); |
296 ]); |
282 by (hyp_subst_tac 1); |
297 |
283 by (rtac (less_ssum2a RS iffD2) 1); |
298 qed_goal "trans_less_ssum" thy |
284 by (res_inst_tac [("p","p2")] IssumE2 1); |
299 "[|(p1::'a++'b) << p2; p2 << p3|] ==> p1 << p3" |
285 by (hyp_subst_tac 1); |
300 (fn prems => |
286 by (rtac trans_less 1); |
301 [ |
287 by (etac (less_ssum2a RS iffD1) 1); |
302 (cut_facts_tac prems 1), |
288 by (etac (less_ssum2a RS iffD1) 1); |
303 (res_inst_tac [("p","p1")] IssumE2 1), |
289 by (hyp_subst_tac 1); |
304 (hyp_subst_tac 1), |
290 by (etac (less_ssum2c RS iffD1 RS ssubst) 1); |
305 (res_inst_tac [("p","p3")] IssumE2 1), |
291 by (rtac minimal 1); |
306 (hyp_subst_tac 1), |
292 by (hyp_subst_tac 1); |
307 (rtac (less_ssum2a RS iffD2) 1), |
293 by (rtac (less_ssum2c RS iffD2) 1); |
308 (res_inst_tac [("p","p2")] IssumE2 1), |
294 by (res_inst_tac [("p","p2")] IssumE2 1); |
309 (hyp_subst_tac 1), |
295 by (hyp_subst_tac 1); |
310 (rtac trans_less 1), |
296 by (rtac UU_I 1); |
311 (etac (less_ssum2a RS iffD1) 1), |
297 by (rtac trans_less 1); |
312 (etac (less_ssum2a RS iffD1) 1), |
298 by (etac (less_ssum2a RS iffD1) 1); |
313 (hyp_subst_tac 1), |
299 by (rtac (antisym_less_inverse RS conjunct1) 1); |
314 (etac (less_ssum2c RS iffD1 RS ssubst) 1), |
300 by (etac (less_ssum2c RS iffD1) 1); |
315 (rtac minimal 1), |
301 by (hyp_subst_tac 1); |
316 (hyp_subst_tac 1), |
302 by (etac (less_ssum2c RS iffD1) 1); |
317 (rtac (less_ssum2c RS iffD2) 1), |
303 by (hyp_subst_tac 1); |
318 (res_inst_tac [("p","p2")] IssumE2 1), |
304 by (res_inst_tac [("p","p3")] IssumE2 1); |
319 (hyp_subst_tac 1), |
305 by (hyp_subst_tac 1); |
320 (rtac UU_I 1), |
306 by (rtac (less_ssum2d RS iffD2) 1); |
321 (rtac trans_less 1), |
307 by (res_inst_tac [("p","p2")] IssumE2 1); |
322 (etac (less_ssum2a RS iffD1) 1), |
308 by (hyp_subst_tac 1); |
323 (rtac (antisym_less_inverse RS conjunct1) 1), |
309 by (etac (less_ssum2d RS iffD1) 1); |
324 (etac (less_ssum2c RS iffD1) 1), |
310 by (hyp_subst_tac 1); |
325 (hyp_subst_tac 1), |
311 by (rtac UU_I 1); |
326 (etac (less_ssum2c RS iffD1) 1), |
312 by (rtac trans_less 1); |
327 (hyp_subst_tac 1), |
313 by (etac (less_ssum2b RS iffD1) 1); |
328 (res_inst_tac [("p","p3")] IssumE2 1), |
314 by (rtac (antisym_less_inverse RS conjunct1) 1); |
329 (hyp_subst_tac 1), |
315 by (etac (less_ssum2d RS iffD1) 1); |
330 (rtac (less_ssum2d RS iffD2) 1), |
316 by (hyp_subst_tac 1); |
331 (res_inst_tac [("p","p2")] IssumE2 1), |
317 by (rtac (less_ssum2b RS iffD2) 1); |
332 (hyp_subst_tac 1), |
318 by (res_inst_tac [("p","p2")] IssumE2 1); |
333 (etac (less_ssum2d RS iffD1) 1), |
319 by (hyp_subst_tac 1); |
334 (hyp_subst_tac 1), |
320 by (etac (less_ssum2d RS iffD1 RS ssubst) 1); |
335 (rtac UU_I 1), |
321 by (rtac minimal 1); |
336 (rtac trans_less 1), |
322 by (hyp_subst_tac 1); |
337 (etac (less_ssum2b RS iffD1) 1), |
323 by (rtac trans_less 1); |
338 (rtac (antisym_less_inverse RS conjunct1) 1), |
324 by (etac (less_ssum2b RS iffD1) 1); |
339 (etac (less_ssum2d RS iffD1) 1), |
325 by (etac (less_ssum2b RS iffD1) 1); |
340 (hyp_subst_tac 1), |
326 qed "trans_less_ssum"; |
341 (rtac (less_ssum2b RS iffD2) 1), |
327 |
342 (res_inst_tac [("p","p2")] IssumE2 1), |
328 |
343 (hyp_subst_tac 1), |
329 |
344 (etac (less_ssum2d RS iffD1 RS ssubst) 1), |
|
345 (rtac minimal 1), |
|
346 (hyp_subst_tac 1), |
|
347 (rtac trans_less 1), |
|
348 (etac (less_ssum2b RS iffD1) 1), |
|
349 (etac (less_ssum2b RS iffD1) 1) |
|
350 ]); |
|
351 |
|
352 |
|
353 |
|