equal
deleted
inserted
replaced
898 lemma setsum_reindex_cong: |
898 lemma setsum_reindex_cong: |
899 "[|inj_on f A; B = f ` A; !!a. g a = h (f a)|] |
899 "[|inj_on f A; B = f ` A; !!a. g a = h (f a)|] |
900 ==> setsum h B = setsum g A" |
900 ==> setsum h B = setsum g A" |
901 by (simp add: setsum_reindex cong: setsum_cong) |
901 by (simp add: setsum_reindex cong: setsum_cong) |
902 |
902 |
903 lemma setsum_0: "setsum (%i. 0) A = 0" |
903 lemma setsum_0[simp]: "setsum (%i. 0) A = 0" |
904 apply (clarsimp simp: setsum_def) |
904 apply (clarsimp simp: setsum_def) |
905 apply (erule finite_induct, auto simp:ACf.fold_insert [OF ACf_add]) |
905 apply (erule finite_induct, auto simp:ACf.fold_insert [OF ACf_add]) |
906 done |
906 done |
907 |
907 |
908 lemma setsum_0': "ALL a:F. f a = 0 ==> setsum f F = 0" |
908 lemma setsum_0': "ALL a:F. f a = 0 ==> setsum f F = 0" |
1117 also have "\<dots> = setsum f (A \<union> (B-A))" using fin finite_subset[OF sub fin] |
1117 also have "\<dots> = setsum f (A \<union> (B-A))" using fin finite_subset[OF sub fin] |
1118 by (simp add:setsum_Un_disjoint del:Un_Diff_cancel) |
1118 by (simp add:setsum_Un_disjoint del:Un_Diff_cancel) |
1119 also have "A \<union> (B-A) = B" using sub by blast |
1119 also have "A \<union> (B-A) = B" using sub by blast |
1120 finally show ?thesis . |
1120 finally show ?thesis . |
1121 qed |
1121 qed |
1122 (* |
1122 |
1123 lemma setsum_mono2_nat: |
|
1124 assumes fin: "finite B" and sub: "A \<subseteq> B" |
|
1125 shows "setsum f A \<le> (setsum f B :: nat)" |
|
1126 proof - |
|
1127 have "setsum f A \<le> setsum f A + setsum f (B-A)" by arith |
|
1128 also have "\<dots> = setsum f (A \<union> (B-A))" using fin finite_subset[OF sub fin] |
|
1129 by (simp add:setsum_Un_disjoint del:Un_Diff_cancel) |
|
1130 also have "A \<union> (B-A) = B" using sub by blast |
|
1131 finally show ?thesis . |
|
1132 qed |
|
1133 *) |
|
1134 lemma setsum_mult: |
1123 lemma setsum_mult: |
1135 fixes f :: "'a => ('b::semiring_0_cancel)" |
1124 fixes f :: "'a => ('b::semiring_0_cancel)" |
1136 shows "r * setsum f A = setsum (%n. r * f n) A" |
1125 shows "r * setsum f A = setsum (%n. r * f n) A" |
1137 proof (cases "finite A") |
1126 proof (cases "finite A") |
1138 case True |
1127 case True |
1539 |
1528 |
1540 lemma setprod_constant: "finite A ==> (\<Prod>x: A. (y::'a::recpower)) = y^(card A)" |
1529 lemma setprod_constant: "finite A ==> (\<Prod>x: A. (y::'a::recpower)) = y^(card A)" |
1541 apply (erule finite_induct) |
1530 apply (erule finite_induct) |
1542 apply (auto simp add: power_Suc) |
1531 apply (auto simp add: power_Suc) |
1543 done |
1532 done |
|
1533 |
|
1534 lemma setsum_bounded: |
|
1535 assumes le: "\<And>i. i\<in>A \<Longrightarrow> f i \<le> (K::'a::{comm_semiring_1_cancel, pordered_ab_semigroup_add})" |
|
1536 shows "setsum f A \<le> of_nat(card A) * K" |
|
1537 proof (cases "finite A") |
|
1538 case True |
|
1539 thus ?thesis using le setsum_mono[where K=A and g = "%x. K"] by simp |
|
1540 next |
|
1541 case False thus ?thesis by (simp add: setsum_def) |
|
1542 qed |
1544 |
1543 |
1545 |
1544 |
1546 subsubsection {* Cardinality of unions *} |
1545 subsubsection {* Cardinality of unions *} |
1547 |
1546 |
1548 lemma of_nat_id[simp]: "(of_nat n :: nat) = n" |
1547 lemma of_nat_id[simp]: "(of_nat n :: nat) = n" |