src/HOL/BNF/Tools/bnf_gfp_rec_sugar_tactics.ML
changeset 54905 2fdec6c29eb7
parent 54900 136fe16e726a
child 54907 f48ec7a80668
equal deleted inserted replaced
54904:5d965f17b0e4 54905:2fdec6c29eb7
    34 val split_if_asm = @{thm split_if_asm};
    34 val split_if_asm = @{thm split_if_asm};
    35 val split_connectI = @{thms allI impI conjI};
    35 val split_connectI = @{thms allI impI conjI};
    36 
    36 
    37 fun mk_primcorec_exhaust_tac n nchotomy =
    37 fun mk_primcorec_exhaust_tac n nchotomy =
    38   let val ks = 1 upto n in
    38   let val ks = 1 upto n in
    39     HEADGOAL (cut_tac nchotomy THEN'
    39     HEADGOAL (atac ORELSE'
    40      EVERY' (map (fn k =>
    40       cut_tac nchotomy THEN'
    41         (if k < n then etac disjE else K all_tac) THEN'
    41       EVERY' (map (fn k =>
    42         REPEAT o (etac conjE THEN' dtac meta_mp THEN' atac) THEN'
    42           (if k < n then etac disjE else K all_tac) THEN'
    43         dtac meta_mp THEN' atac THEN' atac)
    43           REPEAT o (etac conjE THEN' dtac meta_mp THEN' atac) THEN'
    44       ks))
    44           dtac meta_mp THEN' atac THEN' atac)
       
    45         ks))
    45   end;
    46   end;
    46 
    47 
    47 fun mk_primcorec_assumption_tac ctxt discIs =
    48 fun mk_primcorec_assumption_tac ctxt discIs =
    48   SELECT_GOAL (unfold_thms_tac ctxt
    49   SELECT_GOAL (unfold_thms_tac ctxt
    49       @{thms not_not not_False_eq_True not_True_eq_False de_Morgan_conj de_Morgan_disj} THEN
    50       @{thms not_not not_False_eq_True not_True_eq_False de_Morgan_conj de_Morgan_disj} THEN