equal
deleted
inserted
replaced
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 |