src/HOL/Finite.ML
changeset 4386 b3cff8adc213
parent 4304 af2a2cd9fa51
child 4423 a129b817b58a
equal deleted inserted replaced
4385:f6d019eefa1e 4386:b3cff8adc213
    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