1025 by (rule sum_multicount_gen) (auto simp: assms) |
1025 by (rule sum_multicount_gen) (auto simp: assms) |
1026 also have "\<dots> = ?r" by (simp add: mult.commute) |
1026 also have "\<dots> = ?r" by (simp add: mult.commute) |
1027 finally show ?thesis by auto |
1027 finally show ?thesis by auto |
1028 qed |
1028 qed |
1029 |
1029 |
|
1030 lemma sum_card_image: |
|
1031 assumes "finite A" |
|
1032 assumes "\<forall>s\<in>A. \<forall>t\<in>A. s \<noteq> t \<longrightarrow> (f s) \<inter> (f t) = {}" |
|
1033 shows "sum card (f ` A) = sum (\<lambda>a. card (f a)) A" |
|
1034 using assms |
|
1035 proof (induct A) |
|
1036 case empty |
|
1037 from this show ?case by simp |
|
1038 next |
|
1039 case (insert a A) |
|
1040 show ?case |
|
1041 proof cases |
|
1042 assume "f a = {}" |
|
1043 from this insert show ?case |
|
1044 by (subst sum.mono_neutral_right[where S="f ` A"]) auto |
|
1045 next |
|
1046 assume "f a \<noteq> {}" |
|
1047 from this have "sum card (insert (f a) (f ` A)) = card (f a) + sum card (f ` A)" |
|
1048 using insert by (subst sum.insert) auto |
|
1049 from this insert show ?case by simp |
|
1050 qed |
|
1051 qed |
|
1052 |
|
1053 lemma card_Union_image: |
|
1054 assumes "finite S" |
|
1055 assumes "\<forall>s\<in>f ` S. finite s" |
|
1056 assumes "\<forall>s\<in>S. \<forall>t\<in>S. s \<noteq> t \<longrightarrow> (f s) \<inter> (f t) = {}" |
|
1057 shows "card (\<Union>(f ` S)) = sum (\<lambda>x. card (f x)) S" |
|
1058 proof - |
|
1059 have "\<forall>A\<in>f ` S. \<forall>B\<in>f ` S. A \<noteq> B \<longrightarrow> A \<inter> B = {}" |
|
1060 using assms(3) by (metis image_iff) |
|
1061 from this have "card (\<Union>(f ` S)) = sum card (f ` S)" |
|
1062 using assms(1, 2) by (subst card_Union_disjoint) auto |
|
1063 also have "... = sum (\<lambda>x. card (f x)) S" |
|
1064 using assms(1, 3) by (auto simp add: sum_card_image) |
|
1065 finally show ?thesis . |
|
1066 qed |
1030 |
1067 |
1031 subsubsection \<open>Cardinality of products\<close> |
1068 subsubsection \<open>Cardinality of products\<close> |
1032 |
1069 |
1033 lemma card_SigmaI [simp]: |
1070 lemma card_SigmaI [simp]: |
1034 "finite A \<Longrightarrow> \<forall>a\<in>A. finite (B a) \<Longrightarrow> card (SIGMA x: A. B x) = (\<Sum>a\<in>A. card (B a))" |
1071 "finite A \<Longrightarrow> \<forall>a\<in>A. finite (B a) \<Longrightarrow> card (SIGMA x: A. B x) = (\<Sum>a\<in>A. card (B a))" |