src/HOL/Finite_Set.thy
changeset 15543 0024472afce7
parent 15542 ee6cd48cf840
child 15552 8ab8e425410b
equal deleted inserted replaced
15542:ee6cd48cf840 15543:0024472afce7
   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)"