New theorems card_Diff_le and card_insert_le; tidied
authorpaulson
Thu, 02 Apr 1998 13:47:03 +0200
changeset 4768c342d63173e9
parent 4767 b9f3468c6ee2
child 4769 bb60149fe21b
New theorems card_Diff_le and card_insert_le; tidied
src/HOL/Finite.ML
     1.1 --- a/src/HOL/Finite.ML	Thu Apr 02 12:45:47 1998 +0200
     1.2 +++ b/src/HOL/Finite.ML	Thu Apr 02 13:47:03 1998 +0200
     1.3 @@ -10,20 +10,6 @@
     1.4  
     1.5  section "finite";
     1.6  
     1.7 -(*
     1.8 -goalw Finite.thy Fin.defs "!!A B. A<=B ==> Fin(A) <= Fin(B)";
     1.9 -by (rtac lfp_mono 1);
    1.10 -by (REPEAT (ares_tac basic_monos 1));
    1.11 -qed "Fin_mono";
    1.12 -
    1.13 -goalw Finite.thy Fin.defs "Fin(A) <= Pow(A)";
    1.14 -by (blast_tac (claset() addSIs [lfp_lowerbound]) 1);
    1.15 -qed "Fin_subset_Pow";
    1.16 -
    1.17 -(* A : Fin(B) ==> A <= B *)
    1.18 -val FinD = Fin_subset_Pow RS subsetD RS PowD;
    1.19 -*)
    1.20 -
    1.21  (*Discharging ~ x:y entails extra work*)
    1.22  val major::prems = goal Finite.thy 
    1.23      "[| finite F;  P({}); \
    1.24 @@ -323,6 +309,11 @@
    1.25  qed "card_insert_disjoint";
    1.26  Addsimps [card_insert_disjoint];
    1.27  
    1.28 +goal Finite.thy "!!A. finite A ==> card A <= card (insert x A)";
    1.29 +by (case_tac "x: A" 1);
    1.30 +by (ALLGOALS (asm_simp_tac (simpset() addsimps [insert_absorb])));
    1.31 +qed "card_insert_le";
    1.32 +
    1.33  goal Finite.thy  "!!A. finite A ==> !B. B <= A --> card(B) <= card(A)";
    1.34  by (etac finite_induct 1);
    1.35  by (Simp_tac 1);
    1.36 @@ -366,21 +357,18 @@
    1.37  by (asm_simp_tac (simpset() addsimps [card_Suc_Diff]) 1);
    1.38  qed "card_Diff";
    1.39  
    1.40 +goal Finite.thy "!!A. finite A ==> card(A-{x}) <= card A";
    1.41 +by (case_tac "x: A" 1);
    1.42 +by (ALLGOALS (asm_simp_tac (simpset() addsimps [card_Diff, less_imp_le])));
    1.43 +qed "card_Diff_le";
    1.44 +
    1.45  
    1.46  (*** Cardinality of the Powerset ***)
    1.47  
    1.48 -val [major] = goal Finite.thy
    1.49 -  "finite A ==> card(insert x A) = Suc(card(A-{x}))";
    1.50 +goal Finite.thy "!!A. finite A ==> card(insert x A) = Suc(card(A-{x}))";
    1.51  by (case_tac "x:A" 1);
    1.52 -by (asm_simp_tac (simpset() addsimps [insert_absorb]) 1);
    1.53 -by (dtac mk_disjoint_insert 1);
    1.54 -by (etac exE 1);
    1.55 -by (Asm_simp_tac 1);
    1.56 -by (rtac card_insert_disjoint 1);
    1.57 -by (rtac (major RSN (2,finite_subset)) 1);
    1.58 -by (Blast_tac 1);
    1.59 -by (Blast_tac 1);
    1.60 -by (asm_simp_tac (simpset() addsimps [major RS card_insert_disjoint]) 1);
    1.61 +by (ALLGOALS 
    1.62 +    (asm_simp_tac (simpset() addsimps [card_Suc_Diff, insert_absorb])));
    1.63  qed "card_insert";
    1.64  Addsimps [card_insert];
    1.65