src/HOL/Finite.ML
changeset 9399 effc8d44c89c
parent 9351 5d53e3f35152
child 9421 d8dfa816a368
equal deleted inserted replaced
9398:0ee9b2819155 9399:effc8d44c89c
    39 qed "finite_UnI";
    39 qed "finite_UnI";
    40 
    40 
    41 (*Every subset of a finite set is finite*)
    41 (*Every subset of a finite set is finite*)
    42 Goal "finite B ==> ALL A. A<=B --> finite A";
    42 Goal "finite B ==> ALL A. A<=B --> finite A";
    43 by (etac finite_induct 1);
    43 by (etac finite_induct 1);
    44  by (Simp_tac 1);
    44 by (ALLGOALS (simp_tac (simpset() addsimps [subset_insert_iff])));
    45 by (safe_tac (claset() addSDs [subset_insert_iff RS iffD1]));
    45 by Safe_tac;
    46 by (eres_inst_tac [("t","A")] (insert_Diff RS subst) 2);
    46  by (eres_inst_tac [("t","A")] (insert_Diff RS subst) 1);
    47 by (ALLGOALS Asm_simp_tac);
    47  by (ALLGOALS Blast_tac);
    48 val lemma = result();
    48 val lemma = result();
    49 
    49 
    50 Goal "[| A<=B;  finite B |] ==> finite A";
    50 Goal "[| A<=B;  finite B |] ==> finite A";
    51 by (dtac lemma 1);
    51 by (dtac lemma 1);
    52 by (Blast_tac 1);
    52 by (Blast_tac 1);
   782 by (case_tac "finite B" 1);
   782 by (case_tac "finite B" 1);
   783  by (asm_simp_tac (simpset() addsimps [setsum_def]@prems) 2); 
   783  by (asm_simp_tac (simpset() addsimps [setsum_def]@prems) 2); 
   784 by (simp_tac (simpset() addsimps prems) 1);
   784 by (simp_tac (simpset() addsimps prems) 1);
   785 by (subgoal_tac 
   785 by (subgoal_tac 
   786     "ALL C. C <= B --> (ALL x:C. f x = g x) --> setsum f C = setsum g C" 1);
   786     "ALL C. C <= B --> (ALL x:C. f x = g x) --> setsum f C = setsum g C" 1);
   787 by (asm_simp_tac (simpset() addsimps prems) 1); 
   787  by (asm_simp_tac (simpset() addsimps prems) 1); 
   788 by (etac finite_induct 1);
   788 by (etac finite_induct 1);
   789  by (Simp_tac 1);
   789  by (Simp_tac 1);
   790  by (asm_simp_tac (simpset() addsimps subset_insert_iff::prems) 1); 
   790 by (asm_simp_tac (simpset() addsimps subset_insert_iff::prems) 1); 
   791 by (Clarify_tac 1); 
   791 by (Clarify_tac 1); 
   792 by (subgoal_tac "finite C" 1);
   792 by (subgoal_tac "finite C" 1);
   793  by (blast_tac (claset() addDs [rotate_prems 1 finite_subset]) 2); 
   793  by (blast_tac (claset() addDs [rotate_prems 1 finite_subset]) 2); 
   794 by (subgoal_tac "C = insert x (C-{x})" 1); 
   794 by (subgoal_tac "C = insert x (C-{x})" 1); 
   795  by (Blast_tac 2); 
   795  by (Blast_tac 2); 
   796 by (etac ssubst 1); 
   796 by (etac ssubst 1); 
   797 by (dtac spec 1); 
   797 by (dtac spec 1); 
   798 by (mp_tac 1);
   798 by (mp_tac 1);
   799  by (asm_full_simp_tac (simpset() addsimps Ball_def::prems) 1); 
   799 by (asm_full_simp_tac (simpset() addsimps Ball_def::prems) 1); 
   800 qed "setsum_cong";
   800 qed "setsum_cong";
   801 
   801 
   802 
   802 
   803 (*** Basic theorem about "choose".  By Florian Kammueller, tidied by LCP ***)
   803 (*** Basic theorem about "choose".  By Florian Kammueller, tidied by LCP ***)
   804 
   804