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