src/HOL/Codatatype/Tools/bnf_fp_sugar_tactics.ML
changeset 50395 f4b0121b13ab
parent 50394 7860bd1429f4
child 50397 94e9583ea25d
     1.1 --- a/src/HOL/Codatatype/Tools/bnf_fp_sugar_tactics.ML	Fri Sep 14 22:23:11 2012 +0200
     1.2 +++ b/src/HOL/Codatatype/Tools/bnf_fp_sugar_tactics.ML	Fri Sep 14 22:23:11 2012 +0200
     1.3 @@ -96,11 +96,12 @@
     1.4    EVERY' [select_prem_tac n (rotate_tac 1) k, rotate_tac ~1, hyp_subst_tac,
     1.5      REPEAT_DETERM_N m o (dtac meta_spec THEN' rotate_tac ~1)] 1;
     1.6  
     1.7 -fun mk_induct_prepare_prem_prems_tac 0 = all_tac
     1.8 -  | mk_induct_prepare_prem_prems_tac r =
     1.9 -    REPEAT_DETERM_N r ((rotate_tac ~1) 1 THEN dtac meta_mp 1 THEN
    1.10 -      defer_tac 2 THEN PRIMITIVE (Thm.permute_prems 0 ~1) THEN rotate_tac 1 1) THEN
    1.11 -    PRIMITIVE Raw_Simplifier.norm_hhf;
    1.12 +(* FIXME: why not in "Pure"? *)
    1.13 +fun prefer_tac i = defer_tac i THEN PRIMITIVE (Thm.permute_prems 0 ~1);
    1.14 +
    1.15 +fun mk_induct_prepare_prem_prems_tac r =
    1.16 +  REPEAT_DETERM_N r (rotate_tac ~1 1 THEN dtac meta_mp 1 THEN rotate_tac 1 1 THEN prefer_tac 2) THEN
    1.17 +  PRIMITIVE Raw_Simplifier.norm_hhf;
    1.18  
    1.19  val induct_prem_prem_thms =
    1.20    @{thms SUP_empty Sup_empty Sup_insert UN_compreh_bex UN_insert Un_assoc[symmetric] Un_empty_left
    1.21 @@ -122,7 +123,7 @@
    1.22  (* TODO: Get rid of the "blast_tac" *)
    1.23  fun mk_induct_discharge_prem_prems_tac ctxt nn ixs set_natural's pre_set_defs =
    1.24    EVERY' (maps (fn ((pp, jj), (qq, kk)) =>
    1.25 -    [select_prem_tac nn (dtac meta_spec) (nn - kk + 1), rotate_tac ~1,(*###*) etac meta_mp,
    1.26 +    [rotate_tac (~ nn), select_prem_tac nn (dtac meta_spec) kk, rotate_tac ~1,(*###*) etac meta_mp,
    1.27       SELECT_GOAL (Local_Defs.unfold_tac ctxt pre_set_defs), (* ### why on a line of its own? *)
    1.28       SELECT_GOAL (Local_Defs.unfold_tac ctxt (set_natural's @ induct_prem_prem_thms)),
    1.29       SELECT_GOAL (Local_Defs.unfold_tac ctxt