17 val mk_comp_set_alt_tac: Proof.context -> thm -> tactic |
17 val mk_comp_set_alt_tac: Proof.context -> thm -> tactic |
18 val mk_comp_set_bd_tac: Proof.context -> thm -> thm list -> tactic |
18 val mk_comp_set_bd_tac: Proof.context -> thm -> thm list -> tactic |
19 val mk_comp_set_natural_tac: thm -> thm -> thm -> thm list -> tactic |
19 val mk_comp_set_natural_tac: thm -> thm -> thm -> thm list -> tactic |
20 val mk_comp_wit_tac: Proof.context -> thm list -> thm -> thm list -> tactic |
20 val mk_comp_wit_tac: Proof.context -> thm list -> thm -> thm list -> tactic |
21 |
21 |
22 val mk_killN_bd_card_order_tac: int -> thm -> tactic |
22 val mk_kill_bd_card_order_tac: int -> thm -> tactic |
23 val mk_killN_bd_cinfinite_tac: thm -> tactic |
23 val mk_kill_bd_cinfinite_tac: thm -> tactic |
24 val killN_in_alt_tac: tactic |
24 val kill_in_alt_tac: tactic |
25 val mk_killN_in_bd_tac: int -> bool -> thm -> thm -> thm -> thm -> thm -> tactic |
25 val mk_kill_in_bd_tac: int -> bool -> thm -> thm -> thm -> thm -> thm -> tactic |
26 val mk_killN_map_cong_tac: Proof.context -> int -> int -> thm -> tactic |
26 val mk_kill_map_cong_tac: Proof.context -> int -> int -> thm -> tactic |
27 val mk_killN_set_bd_tac: thm -> thm -> tactic |
27 val mk_kill_set_bd_tac: thm -> thm -> tactic |
28 |
28 |
29 val empty_natural_tac: tactic |
29 val empty_natural_tac: tactic |
30 val liftN_in_alt_tac: tactic |
30 val lift_in_alt_tac: tactic |
31 val mk_liftN_in_bd_tac: int -> thm -> thm -> thm -> tactic |
31 val mk_lift_in_bd_tac: int -> thm -> thm -> thm -> tactic |
32 val mk_liftN_set_bd_tac: thm -> tactic |
32 val mk_lift_set_bd_tac: thm -> tactic |
33 |
33 |
34 val mk_permute_in_alt_tac: ''a list -> ''a list -> tactic |
34 val mk_permute_in_alt_tac: ''a list -> ''a list -> tactic |
35 val mk_permute_in_bd_tac: ''a list -> ''a list -> thm -> thm -> thm -> tactic |
35 val mk_permute_in_bd_tac: ''a list -> ''a list -> thm -> thm -> thm -> tactic |
36 |
36 |
37 val mk_map_wpull_tac: thm -> thm list -> thm -> tactic |
37 val mk_map_wpull_tac: thm -> thm list -> thm -> tactic |
218 |
218 |
219 |
219 |
220 |
220 |
221 (* Kill operation *) |
221 (* Kill operation *) |
222 |
222 |
223 fun mk_killN_map_cong_tac ctxt n m map_cong = |
223 fun mk_kill_map_cong_tac ctxt n m map_cong = |
224 (rtac map_cong THEN' EVERY' (replicate n (rtac refl)) THEN' |
224 (rtac map_cong THEN' EVERY' (replicate n (rtac refl)) THEN' |
225 EVERY' (replicate m (Goal.assume_rule_tac ctxt))) 1; |
225 EVERY' (replicate m (Goal.assume_rule_tac ctxt))) 1; |
226 |
226 |
227 fun mk_killN_bd_card_order_tac n bd_card_order = |
227 fun mk_kill_bd_card_order_tac n bd_card_order = |
228 (rtac @{thm card_order_cprod} THEN' |
228 (rtac @{thm card_order_cprod} THEN' |
229 K (REPEAT_DETERM_N (n - 1) |
229 K (REPEAT_DETERM_N (n - 1) |
230 ((rtac @{thm card_order_csum} THEN' |
230 ((rtac @{thm card_order_csum} THEN' |
231 rtac @{thm card_of_card_order_on}) 1)) THEN' |
231 rtac @{thm card_of_card_order_on}) 1)) THEN' |
232 rtac @{thm card_of_card_order_on} THEN' |
232 rtac @{thm card_of_card_order_on} THEN' |
233 rtac bd_card_order) 1; |
233 rtac bd_card_order) 1; |
234 |
234 |
235 fun mk_killN_bd_cinfinite_tac bd_Cinfinite = |
235 fun mk_kill_bd_cinfinite_tac bd_Cinfinite = |
236 (rtac @{thm cinfinite_cprod2} THEN' |
236 (rtac @{thm cinfinite_cprod2} THEN' |
237 TRY o rtac @{thm csum_Cnotzero1} THEN' |
237 TRY o rtac @{thm csum_Cnotzero1} THEN' |
238 rtac @{thm Cnotzero_UNIV} THEN' |
238 rtac @{thm Cnotzero_UNIV} THEN' |
239 rtac bd_Cinfinite) 1; |
239 rtac bd_Cinfinite) 1; |
240 |
240 |
241 fun mk_killN_set_bd_tac bd_Card_order set_bd = |
241 fun mk_kill_set_bd_tac bd_Card_order set_bd = |
242 (rtac ctrans THEN' |
242 (rtac ctrans THEN' |
243 rtac set_bd THEN' |
243 rtac set_bd THEN' |
244 rtac @{thm ordLeq_cprod2} THEN' |
244 rtac @{thm ordLeq_cprod2} THEN' |
245 TRY o rtac @{thm csum_Cnotzero1} THEN' |
245 TRY o rtac @{thm csum_Cnotzero1} THEN' |
246 rtac @{thm Cnotzero_UNIV} THEN' |
246 rtac @{thm Cnotzero_UNIV} THEN' |
247 rtac bd_Card_order) 1 |
247 rtac bd_Card_order) 1 |
248 |
248 |
249 val killN_in_alt_tac = |
249 val kill_in_alt_tac = |
250 ((rtac @{thm Collect_cong} THEN' rtac @{thm iffI}) 1 THEN |
250 ((rtac @{thm Collect_cong} THEN' rtac @{thm iffI}) 1 THEN |
251 REPEAT_DETERM (CHANGED (etac conjE 1)) THEN |
251 REPEAT_DETERM (CHANGED (etac conjE 1)) THEN |
252 REPEAT_DETERM (CHANGED ((etac conjI ORELSE' |
252 REPEAT_DETERM (CHANGED ((etac conjI ORELSE' |
253 rtac conjI THEN' rtac @{thm subset_UNIV}) 1)) THEN |
253 rtac conjI THEN' rtac @{thm subset_UNIV}) 1)) THEN |
254 (rtac @{thm subset_UNIV} ORELSE' atac) 1 THEN |
254 (rtac @{thm subset_UNIV} ORELSE' atac) 1 THEN |
255 REPEAT_DETERM (CHANGED (etac conjE 1)) THEN |
255 REPEAT_DETERM (CHANGED (etac conjE 1)) THEN |
256 REPEAT_DETERM (CHANGED ((etac conjI ORELSE' atac) 1))) ORELSE |
256 REPEAT_DETERM (CHANGED ((etac conjI ORELSE' atac) 1))) ORELSE |
257 ((rtac @{thm UNIV_eq_I} THEN' rtac CollectI) 1 THEN |
257 ((rtac @{thm UNIV_eq_I} THEN' rtac CollectI) 1 THEN |
258 REPEAT_DETERM (TRY (rtac conjI 1) THEN rtac @{thm subset_UNIV} 1)); |
258 REPEAT_DETERM (TRY (rtac conjI 1) THEN rtac @{thm subset_UNIV} 1)); |
259 |
259 |
260 fun mk_killN_in_bd_tac n nontrivial_killN_in in_alt in_bd bd_Card_order bd_Cinfinite bd_Cnotzero = |
260 fun mk_kill_in_bd_tac n nontrivial_kill_in in_alt in_bd bd_Card_order bd_Cinfinite bd_Cnotzero = |
261 (rtac @{thm ordIso_ordLeq_trans} THEN' |
261 (rtac @{thm ordIso_ordLeq_trans} THEN' |
262 rtac @{thm card_of_ordIso_subst} THEN' |
262 rtac @{thm card_of_ordIso_subst} THEN' |
263 rtac in_alt THEN' |
263 rtac in_alt THEN' |
264 rtac ctrans THEN' |
264 rtac ctrans THEN' |
265 rtac in_bd THEN' |
265 rtac in_bd THEN' |
266 rtac @{thm ordIso_ordLeq_trans} THEN' |
266 rtac @{thm ordIso_ordLeq_trans} THEN' |
267 rtac @{thm cexp_cong1}) 1 THEN |
267 rtac @{thm cexp_cong1}) 1 THEN |
268 (if nontrivial_killN_in then |
268 (if nontrivial_kill_in then |
269 rtac @{thm ordIso_transitive} 1 THEN |
269 rtac @{thm ordIso_transitive} 1 THEN |
270 REPEAT_DETERM_N (n - 1) |
270 REPEAT_DETERM_N (n - 1) |
271 ((rtac @{thm csum_cong1} THEN' |
271 ((rtac @{thm csum_cong1} THEN' |
272 rtac @{thm ordIso_symmetric} THEN' |
272 rtac @{thm ordIso_symmetric} THEN' |
273 rtac @{thm csum_assoc} THEN' |
273 rtac @{thm csum_assoc} THEN' |
331 |
331 |
332 (* Lift operation *) |
332 (* Lift operation *) |
333 |
333 |
334 val empty_natural_tac = rtac @{thm empty_natural} 1; |
334 val empty_natural_tac = rtac @{thm empty_natural} 1; |
335 |
335 |
336 fun mk_liftN_set_bd_tac bd_Card_order = (rtac @{thm Card_order_empty} THEN' rtac bd_Card_order) 1; |
336 fun mk_lift_set_bd_tac bd_Card_order = (rtac @{thm Card_order_empty} THEN' rtac bd_Card_order) 1; |
337 |
337 |
338 val liftN_in_alt_tac = |
338 val lift_in_alt_tac = |
339 ((rtac @{thm Collect_cong} THEN' rtac @{thm iffI}) 1 THEN |
339 ((rtac @{thm Collect_cong} THEN' rtac @{thm iffI}) 1 THEN |
340 REPEAT_DETERM (CHANGED (etac conjE 1)) THEN |
340 REPEAT_DETERM (CHANGED (etac conjE 1)) THEN |
341 REPEAT_DETERM (CHANGED ((etac conjI ORELSE' atac) 1)) THEN |
341 REPEAT_DETERM (CHANGED ((etac conjI ORELSE' atac) 1)) THEN |
342 REPEAT_DETERM (CHANGED (etac conjE 1)) THEN |
342 REPEAT_DETERM (CHANGED (etac conjE 1)) THEN |
343 REPEAT_DETERM (CHANGED ((etac conjI ORELSE' |
343 REPEAT_DETERM (CHANGED ((etac conjI ORELSE' |
344 rtac conjI THEN' rtac @{thm empty_subsetI}) 1)) THEN |
344 rtac conjI THEN' rtac @{thm empty_subsetI}) 1)) THEN |
345 (rtac @{thm empty_subsetI} ORELSE' atac) 1) ORELSE |
345 (rtac @{thm empty_subsetI} ORELSE' atac) 1) ORELSE |
346 ((rtac sym THEN' rtac @{thm UNIV_eq_I} THEN' rtac CollectI) 1 THEN |
346 ((rtac sym THEN' rtac @{thm UNIV_eq_I} THEN' rtac CollectI) 1 THEN |
347 REPEAT_DETERM (TRY (rtac conjI 1) THEN rtac @{thm empty_subsetI} 1)); |
347 REPEAT_DETERM (TRY (rtac conjI 1) THEN rtac @{thm empty_subsetI} 1)); |
348 |
348 |
349 fun mk_liftN_in_bd_tac n in_alt in_bd bd_Card_order = |
349 fun mk_lift_in_bd_tac n in_alt in_bd bd_Card_order = |
350 (rtac @{thm ordIso_ordLeq_trans} THEN' |
350 (rtac @{thm ordIso_ordLeq_trans} THEN' |
351 rtac @{thm card_of_ordIso_subst} THEN' |
351 rtac @{thm card_of_ordIso_subst} THEN' |
352 rtac in_alt THEN' |
352 rtac in_alt THEN' |
353 rtac ctrans THEN' |
353 rtac ctrans THEN' |
354 rtac in_bd THEN' |
354 rtac in_bd THEN' |