equal
deleted
inserted
replaced
33 by (excluded_middle_tac "a:A" 2); |
33 by (excluded_middle_tac "a:A" 2); |
34 by (etac (insert_absorb RS ssubst) 3 THEN assume_tac 3); (*backtracking!*) |
34 by (etac (insert_absorb RS ssubst) 3 THEN assume_tac 3); (*backtracking!*) |
35 by (REPEAT (ares_tac prems 1)); |
35 by (REPEAT (ares_tac prems 1)); |
36 qed "finite_induct"; |
36 qed "finite_induct"; |
37 |
37 |
38 val major::prems = goal Finite.thy |
38 val major::subs::prems = goal Finite.thy |
39 "[| finite F; \ |
|
40 \ P({}); \ |
|
41 \ !!F a. [| finite F; a:A; a ~: F; P(F) |] ==> P(insert a F) \ |
|
42 \ |] ==> F <= A --> P(F)"; |
|
43 by (rtac (major RS finite_induct) 1); |
|
44 by (ALLGOALS (blast_tac (claset() addIs prems))); |
|
45 val lemma = result(); |
|
46 |
|
47 val prems = goal Finite.thy |
|
48 "[| finite F; F <= A; \ |
39 "[| finite F; F <= A; \ |
49 \ P({}); \ |
40 \ P({}); \ |
50 \ !!F a. [| finite F; a:A; a ~: F; P(F) |] ==> P(insert a F) \ |
41 \ !!F a. [| finite F; a:A; a ~: F; P(F) |] ==> P(insert a F) \ |
51 \ |] ==> P(F)"; |
42 \ |] ==> P(F)"; |
52 by (blast_tac (HOL_cs addIs ((lemma RS mp)::prems)) 1); |
43 by (rtac (subs RS rev_mp) 1); |
|
44 by (rtac (major RS finite_induct) 1); |
|
45 by (ALLGOALS (blast_tac (claset() addIs prems))); |
53 qed "finite_subset_induct"; |
46 qed "finite_subset_induct"; |
54 |
47 |
55 Addsimps Finites.intrs; |
48 Addsimps Finites.intrs; |
56 AddSIs Finites.intrs; |
49 AddSIs Finites.intrs; |
57 |
50 |