src/HOL/Tools/BNF/bnf_gfp_rec_sugar_tactics.ML
changeset 55341 3d2c97392e25
parent 55067 a452de24a877
child 55342 1bd9e637ac9f
equal deleted inserted replaced
55340:580abab41c8c 55341:3d2c97392e25
   128 
   128 
   129 fun mk_primcorec_sel_tac ctxt defs distincts splits split_asms mapsx map_idents map_comps fun_sel k
   129 fun mk_primcorec_sel_tac ctxt defs distincts splits split_asms mapsx map_idents map_comps fun_sel k
   130     m excludesss =
   130     m excludesss =
   131   prelude_tac ctxt defs (fun_sel RS trans) THEN
   131   prelude_tac ctxt defs (fun_sel RS trans) THEN
   132   cases_tac ctxt k m excludesss THEN
   132   cases_tac ctxt k m excludesss THEN
   133   HEADGOAL (REPEAT_DETERM o (rtac refl ORELSE' rtac ext ORELSE'
   133   HEADGOAL (REPEAT_DETERM o (rtac refl ORELSE'
   134     eresolve_tac falseEs ORELSE'
   134     eresolve_tac falseEs ORELSE'
   135     resolve_tac split_connectI ORELSE'
   135     resolve_tac split_connectI ORELSE'
   136     Splitter.split_asm_tac (split_if_asm :: split_asms) ORELSE'
   136     Splitter.split_asm_tac (split_if_asm :: split_asms) ORELSE'
   137     Splitter.split_tac (split_if :: splits) ORELSE'
   137     Splitter.split_tac (split_if :: splits) ORELSE'
   138     eresolve_tac (map (fn thm => thm RS neq_eq_eq_contradict) distincts) THEN' atac ORELSE'
   138     eresolve_tac (map (fn thm => thm RS neq_eq_eq_contradict) distincts) THEN' atac ORELSE'
   139     etac notE THEN' atac ORELSE'
   139     etac notE THEN' atac ORELSE'
   140     (CHANGED o SELECT_GOAL (unfold_thms_tac ctxt (@{thms fst_conv snd_conv id_def comp_def split_def
   140     (CHANGED o SELECT_GOAL (unfold_thms_tac ctxt (@{thms fst_conv snd_conv id_def comp_def split_def
   141        sum.cases} @ mapsx @ map_comps @ map_idents)))));
   141        sum.cases} @ mapsx @ map_comps @ map_idents))) ORELSE'
       
   142     fo_rtac @{thm cong} ctxt ORELSE'
       
   143     rtac ext));
   142 
   144 
   143 fun mk_primcorec_ctr_tac ctxt m collapse disc_fun_opt sel_funs =
   145 fun mk_primcorec_ctr_tac ctxt m collapse disc_fun_opt sel_funs =
   144   HEADGOAL (rtac ((if null sel_funs then collapse else collapse RS sym) RS trans) THEN'
   146   HEADGOAL (rtac ((if null sel_funs then collapse else collapse RS sym) RS trans) THEN'
   145     (the_default (K all_tac) (Option.map rtac disc_fun_opt)) THEN' REPEAT_DETERM_N m o atac) THEN
   147     (the_default (K all_tac) (Option.map rtac disc_fun_opt)) THEN' REPEAT_DETERM_N m o atac) THEN
   146   unfold_thms_tac ctxt (@{thm split_def} :: unfold_lets @ sel_funs) THEN HEADGOAL (rtac refl);
   148   unfold_thms_tac ctxt (@{thm split_def} :: unfold_lets @ sel_funs) THEN HEADGOAL (rtac refl);