equal
deleted
inserted
replaced
903 lemma setsum_0[simp]: "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:A. f a = 0 ==> setsum f A = 0" |
909 apply (subgoal_tac "setsum f F = setsum (%x. 0) F") |
909 by(simp add:setsum_cong) |
910 apply (erule ssubst, rule setsum_0) |
|
911 apply (rule setsum_cong, auto) |
|
912 done |
|
913 |
910 |
914 lemma setsum_Un_Int: "finite A ==> finite B ==> |
911 lemma setsum_Un_Int: "finite A ==> finite B ==> |
915 setsum g (A Un B) + setsum g (A Int B) = setsum g A + setsum g B" |
912 setsum g (A Un B) + setsum g (A Int B) = setsum g A + setsum g B" |
916 -- {* The reversed orientation looks more natural, but LOOPS as a simprule! *} |
913 -- {* The reversed orientation looks more natural, but LOOPS as a simprule! *} |
917 by(simp add: setsum_def ACe.fold_Un_Int[OF ACe_add,symmetric]) |
914 by(simp add: setsum_def ACe.fold_Un_Int[OF ACe_add,symmetric]) |
952 "(\<Sum>x\<in>A. (\<Sum>y\<in>B. f x y)) = (\<Sum>z\<in>A <*> B. f (fst z) (snd z))" |
949 "(\<Sum>x\<in>A. (\<Sum>y\<in>B. f x y)) = (\<Sum>z\<in>A <*> B. f (fst z) (snd z))" |
953 apply (cases "finite A") |
950 apply (cases "finite A") |
954 apply (cases "finite B") |
951 apply (cases "finite B") |
955 apply (simp add: setsum_Sigma) |
952 apply (simp add: setsum_Sigma) |
956 apply (cases "A={}", simp) |
953 apply (cases "A={}", simp) |
957 apply (simp add: setsum_0) |
954 apply (simp) |
958 apply (auto simp add: setsum_def |
955 apply (auto simp add: setsum_def |
959 dest: finite_cartesian_productD1 finite_cartesian_productD2) |
956 dest: finite_cartesian_productD1 finite_cartesian_productD2) |
960 done |
957 done |
961 |
958 |
962 lemma setsum_addf: "setsum (%x. f x + g x) A = (setsum f A + setsum g A)" |
959 lemma setsum_addf: "setsum (%x. f x + g x) A = (setsum f A + setsum g A)" |