src/HOL/Codatatype/Tools/bnf_fp_sugar_tactics.ML
changeset 50441 6d05b8452cf3
parent 50406 3a96797fd53e
child 50442 b017e1dbc77c
     1.1 --- a/src/HOL/Codatatype/Tools/bnf_fp_sugar_tactics.ML	Mon Sep 17 16:57:22 2012 +0200
     1.2 +++ b/src/HOL/Codatatype/Tools/bnf_fp_sugar_tactics.ML	Mon Sep 17 21:13:30 2012 +0200
     1.3 @@ -97,10 +97,17 @@
     1.4         etac @{thm induct_set_step}) THEN'
     1.5      atac ORELSE' SELECT_GOAL (auto_tac ctxt);
     1.6  
     1.7 +fun gen_UN_comprehI_tac UnI = REPEAT_DETERM o resolve_tac @{thms mem_UN_comprehI} THEN' rtac UnI;
     1.8 +
     1.9 +fun gen_UnIN_tac 1 1 = REPEAT_DETERM o resolve_tac @{thms mem_UN_comprehI'}
    1.10 +  | gen_UnIN_tac _ 1 = gen_UN_comprehI_tac @{thm UnI1} THEN' gen_UnIN_tac 1 1
    1.11 +  | gen_UnIN_tac n k = gen_UN_comprehI_tac @{thm UnI2} THEN' gen_UnIN_tac (n - 1) (k - 1);
    1.12 +
    1.13  val induct_prem_prem_thms =
    1.14 -  @{thms SUP_empty Sup_empty Sup_insert UN_compreh_bex UN_insert Un_assoc[symmetric] Un_empty_left
    1.15 -      Un_empty_right Union_Un_distrib collect_def[abs_def] fst_conv image_def o_apply snd_conv
    1.16 -      snd_prod_fun sum.cases sup_bot_right fst_map_pair map_pair_simp sum_map.simps};
    1.17 +  @{thms SUP_empty Sup_empty Sup_insert UN_compreh_bex_eq_empty UN_compreh_bex_eq_singleton
    1.18 +      UN_insert Un_assoc Un_empty_left Un_empty_right Union_Un_distrib collect_def[abs_def] fst_conv
    1.19 +      image_def o_apply snd_conv snd_prod_fun sum.cases sup_bot_right fst_map_pair map_pair_simp
    1.20 +      sum_map.simps};
    1.21  
    1.22  (* These rules interfere with the "set_natural'" properties of "sum" and "prod", so we explicitly
    1.23     delay them. *)
    1.24 @@ -114,8 +121,7 @@
    1.25         (pre_set_defs @ set_natural's @ induct_prem_prem_thms)),
    1.26       SELECT_GOAL (Local_Defs.unfold_tac ctxt
    1.27         (induct_prem_prem_thms_delayed @ induct_prem_prem_thms)),
    1.28 -     rtac (mk_UnIN pp jj) THEN' mk_induct_prem_prem_endgame_tac ctxt qq ORELSE'
    1.29 -       SELECT_GOAL (auto_tac ctxt)]) (rev ppjjqqkks)) 1;
    1.30 +     gen_UnIN_tac pp jj THEN' mk_induct_prem_prem_endgame_tac ctxt qq]) (rev ppjjqqkks)) 1;
    1.31  
    1.32  fun mk_induct_discharge_prem_tac ctxt nn n set_natural's pre_set_defs m k ppjjqqkks =
    1.33    let val r = length ppjjqqkks in