# HG changeset patch # User nipkow # Date 1244486637 -7200 # Node ID 00ede188c5d6cded86581ddf300f2fcaa918cd84 # Parent 1ea1c70aba00d6d7a9b61f49419ece49ad623f98 more lemmas diff -r 1ea1c70aba00 -r 00ede188c5d6 src/HOL/SetInterval.thy --- a/src/HOL/SetInterval.thy Mon Jun 08 18:34:02 2009 +0200 +++ b/src/HOL/SetInterval.thy Mon Jun 08 20:43:57 2009 +0200 @@ -859,6 +859,43 @@ (if m <= n then f m - f(n + 1) else 0)" by (induct n, auto simp add: algebra_simps not_le le_Suc_eq) +lemmas setsum_restrict_set' = setsum_restrict_set[unfolded Int_def] + +lemma setsum_setsum_restrict: + "finite S \ finite T \ setsum (\x. setsum (\y. f x y) {y. y\ T \ R x y}) S = setsum (\y. setsum (\x. f x y) {x. x \ S \ R x y}) T" + by (simp add: setsum_restrict_set'[unfolded mem_def] mem_def) + (rule setsum_commute) + +lemma setsum_image_gen: assumes fS: "finite S" + shows "setsum g S = setsum (\y. setsum g {x. x \ S \ f x = y}) (f ` S)" +proof- + { fix x assume "x \ S" then have "{y. y\ f`S \ f x = y} = {f x}" by auto } + hence "setsum g S = setsum (\x. setsum (\y. g x) {y. y\ f`S \ f x = y}) S" + by simp + also have "\ = setsum (\y. setsum g {x. x \ S \ f x = y}) (f ` S)" + by (rule setsum_setsum_restrict[OF fS finite_imageI[OF fS]]) + finally show ?thesis . +qed + +lemma setsum_multicount_gen: + assumes "finite s" "finite t" "\j\t. (card {i\s. R i j} = k j)" + shows "setsum (\i. (card {j\t. R i j})) s = setsum k t" (is "?l = ?r") +proof- + have "?l = setsum (\i. setsum (\x.1) {j\t. R i j}) s" by auto + also have "\ = ?r" unfolding setsum_setsum_restrict[OF assms(1-2)] + using assms(3) by auto + finally show ?thesis . +qed + +lemma setsum_multicount: + assumes "finite S" "finite T" "\j\T. (card {i\S. R i j} = k)" + shows "setsum (\i. card {j\T. R i j}) S = k * card T" (is "?l = ?r") +proof- + have "?l = setsum (\i. k) T" by(rule setsum_multicount_gen)(auto simp:assms) + also have "\ = ?r" by(simp add: setsum_constant mult_commute) + finally show ?thesis by auto +qed + subsection{* Shifting bounds *}