src/HOL/BNF/Tools/bnf_comp_tactics.ML
changeset 51782 84e7225f5ab6
parent 51766 f19a4d0ab1bf
child 51798 ad3a241def73
equal deleted inserted replaced
51781:0504e286d66d 51782:84e7225f5ab6
   203      rtac @{thm Cinfinite_cexp} THEN'
   203      rtac @{thm Cinfinite_cexp} THEN'
   204      (rtac ordLeq_csum2 ORELSE' rtac @{thm ordLeq_refl}) THEN'
   204      (rtac ordLeq_csum2 ORELSE' rtac @{thm ordLeq_refl}) THEN'
   205      rtac Card_order_ctwo THEN'
   205      rtac Card_order_ctwo THEN'
   206      (TRY o (rtac @{thm Cinfinite_csum} THEN' rtac disjI1) THEN' rtac (hd Fbd_Cinfs) ORELSE'
   206      (TRY o (rtac @{thm Cinfinite_csum} THEN' rtac disjI1) THEN' rtac (hd Fbd_Cinfs) ORELSE'
   207        rtac (hd Fbd_Cinfs)) THEN'
   207        rtac (hd Fbd_Cinfs)) THEN'
   208      rtac disjI1 THEN'
       
   209      TRY o rtac csum_Cnotzero2 THEN'
       
   210      rtac ctwo_Cnotzero THEN'
       
   211      rtac Gbd_Card_order THEN'
   208      rtac Gbd_Card_order THEN'
   212      rtac @{thm cexp_cprod} THEN'
   209      rtac @{thm cexp_cprod} THEN'
   213      TRY o rtac csum_Cnotzero2 THEN'
   210      rtac @{thm Card_order_csum}) 1
   214      rtac ctwo_Cnotzero) 1
       
   215   end;
   211   end;
   216 
   212 
   217 val comp_wit_thms = @{thms Union_empty_conv o_apply collect_def SUP_def
   213 val comp_wit_thms = @{thms Union_empty_conv o_apply collect_def SUP_def
   218   Union_image_insert Union_image_empty};
   214   Union_image_insert Union_image_empty};
   219 
   215 
   298     rtac @{thm ordIso_refl} THEN'
   294     rtac @{thm ordIso_refl} THEN'
   299     (rtac card_of_Card_order ORELSE' rtac Card_order_csum)) 1
   295     (rtac card_of_Card_order ORELSE' rtac Card_order_csum)) 1
   300   else all_tac) THEN
   296   else all_tac) THEN
   301   (rtac @{thm csum_com} THEN'
   297   (rtac @{thm csum_com} THEN'
   302   rtac bd_Card_order THEN'
   298   rtac bd_Card_order THEN'
   303   rtac disjI1 THEN'
       
   304   rtac csum_Cnotzero2 THEN'
       
   305   rtac ctwo_Cnotzero THEN'
       
   306   rtac disjI1 THEN'
       
   307   rtac csum_Cnotzero2 THEN'
       
   308   TRY o rtac csum_Cnotzero1 THEN'
       
   309   rtac Cnotzero_UNIV THEN'
       
   310   rtac @{thm ordLeq_ordIso_trans} THEN'
   299   rtac @{thm ordLeq_ordIso_trans} THEN'
   311   rtac @{thm cexp_mono1} THEN'
   300   rtac @{thm cexp_mono1} THEN'
   312   rtac ctrans THEN'
   301   rtac ctrans THEN'
   313   rtac @{thm csum_mono2} THEN'
   302   rtac @{thm csum_mono2} THEN'
   314   rtac @{thm ordLeq_cprod1} THEN'
   303   rtac @{thm ordLeq_cprod1} THEN'
   320   rtac Cnotzero_UNIV THEN'
   309   rtac Cnotzero_UNIV THEN'
   321   rtac bd_Cinfinite THEN'
   310   rtac bd_Cinfinite THEN'
   322   ((rtac Card_order_ctwo THEN' rtac @{thm ordLeq_refl}) ORELSE'
   311   ((rtac Card_order_ctwo THEN' rtac @{thm ordLeq_refl}) ORELSE'
   323     (rtac Card_order_csum THEN' rtac ordLeq_csum2)) THEN'
   312     (rtac Card_order_csum THEN' rtac ordLeq_csum2)) THEN'
   324   rtac Card_order_ctwo THEN'
   313   rtac Card_order_ctwo THEN'
   325   rtac disjI1 THEN'
       
   326   rtac csum_Cnotzero2 THEN'
       
   327   TRY o rtac csum_Cnotzero1 THEN'
       
   328   rtac Cnotzero_UNIV THEN'
       
   329   rtac bd_Card_order THEN'
   314   rtac bd_Card_order THEN'
   330   rtac @{thm cexp_cprod_ordLeq} THEN'
   315   rtac @{thm cexp_cprod_ordLeq} THEN'
   331   TRY o rtac csum_Cnotzero2 THEN'
   316   resolve_tac @{thms Card_order_csum Card_order_ctwo} THEN'
   332   rtac ctwo_Cnotzero THEN'
       
   333   rtac @{thm Cinfinite_cprod2} THEN'
   317   rtac @{thm Cinfinite_cprod2} THEN'
   334   TRY o rtac csum_Cnotzero1 THEN'
   318   TRY o rtac csum_Cnotzero1 THEN'
   335   rtac Cnotzero_UNIV THEN'
   319   rtac Cnotzero_UNIV THEN'
   336   rtac bd_Cinfinite THEN'
   320   rtac bd_Cinfinite THEN'
   337   rtac bd_Cnotzero THEN'
   321   rtac bd_Cnotzero THEN'
   372     rtac ordLeq_csum2 THEN'
   356     rtac ordLeq_csum2 THEN'
   373     (rtac Card_order_csum ORELSE' rtac card_of_Card_order)) 1) THEN
   357     (rtac Card_order_csum ORELSE' rtac card_of_Card_order)) 1) THEN
   374   (rtac ordLeq_csum2 THEN'
   358   (rtac ordLeq_csum2 THEN'
   375   (rtac Card_order_csum ORELSE' rtac card_of_Card_order)) 1) ORELSE
   359   (rtac Card_order_csum ORELSE' rtac card_of_Card_order)) 1) ORELSE
   376   (rtac ordLeq_csum2 THEN' rtac Card_order_ctwo) 1) THEN
   360   (rtac ordLeq_csum2 THEN' rtac Card_order_ctwo) 1) THEN
   377   (rtac disjI1 THEN' TRY o rtac csum_Cnotzero2 THEN' rtac ctwo_Cnotzero
   361   (rtac bd_Card_order) 1;
   378    THEN' rtac bd_Card_order) 1;
       
   379 
   362 
   380 
   363 
   381 
   364 
   382 (* Permute operation *)
   365 (* Permute operation *)
   383 
   366 
   397   mk_rotate_eq_tac
   380   mk_rotate_eq_tac
   398     (rtac @{thm ordIso_refl} THEN'
   381     (rtac @{thm ordIso_refl} THEN'
   399       FIRST' [rtac card_of_Card_order, rtac Card_order_csum])
   382       FIRST' [rtac card_of_Card_order, rtac Card_order_csum])
   400     ordIso_transitive @{thm csum_assoc} @{thm csum_com} @{thm csum_cong}
   383     ordIso_transitive @{thm csum_assoc} @{thm csum_com} @{thm csum_cong}
   401     src dest THEN'
   384     src dest THEN'
   402   rtac bd_Card_order THEN'
   385   rtac bd_Card_order) 1;
   403   rtac disjI1 THEN'
       
   404   TRY o rtac csum_Cnotzero2 THEN'
       
   405   rtac ctwo_Cnotzero THEN'
       
   406   rtac disjI1 THEN'
       
   407   TRY o rtac csum_Cnotzero2 THEN'
       
   408   rtac ctwo_Cnotzero) 1;
       
   409 
   386 
   410 fun mk_map_wpull_tac comp_in_alt inner_map_wpulls outer_map_wpull =
   387 fun mk_map_wpull_tac comp_in_alt inner_map_wpulls outer_map_wpull =
   411   (rtac (@{thm wpull_cong} OF (replicate 3 comp_in_alt)) THEN' rtac outer_map_wpull) 1 THEN
   388   (rtac (@{thm wpull_cong} OF (replicate 3 comp_in_alt)) THEN' rtac outer_map_wpull) 1 THEN
   412   WRAP (fn thm => rtac thm 1 THEN REPEAT_DETERM (atac 1)) (K all_tac) inner_map_wpulls all_tac THEN
   389   WRAP (fn thm => rtac thm 1 THEN REPEAT_DETERM (atac 1)) (K all_tac) inner_map_wpulls all_tac THEN
   413   TRY (REPEAT_DETERM (atac 1 ORELSE rtac @{thm wpull_id} 1));
   390   TRY (REPEAT_DETERM (atac 1 ORELSE rtac @{thm wpull_id} 1));