src/HOL/Groups_Big.thy
changeset 67511 a6f5a78712af
parent 67268 bdf25939a550
child 67673 c8caefb20564
equal deleted inserted replaced
67510:9624711ef2de 67511:a6f5a78712af
  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))"