# HG changeset patch # User huffman # Date 1243359099 25200 # Node ID 43a418a41317e1794c90ede7dde30a0381a0c244 # Parent 547bf9819d6cd5b6582a803d2f242d8b315ecfe6 listsum lemmas diff -r 547bf9819d6c -r 43a418a41317 src/HOL/List.thy --- a/src/HOL/List.thy Tue May 26 07:39:52 2009 -0700 +++ b/src/HOL/List.thy Tue May 26 10:31:39 2009 -0700 @@ -2212,6 +2212,36 @@ shows "- listsum (map f xs) = (listsum (map (uminus o f) xs))" by (induct xs) simp_all +lemma listsum_addf: + fixes f g :: "'a \ 'b::comm_monoid_add" + shows "(\x\xs. f x + g x) = listsum (map f xs) + listsum (map g xs)" +by (induct xs) (simp_all add: algebra_simps) + +lemma listsum_subtractf: + fixes f g :: "'a \ 'b::ab_group_add" + shows "(\x\xs. f x - g x) = listsum (map f xs) - listsum (map g xs)" +by (induct xs) simp_all + +lemma listsum_const_mult: + fixes f :: "'a \ 'b::semiring_0" + shows "(\x\xs. c * f x) = c * (\x\xs. f x)" +by (induct xs, simp_all add: algebra_simps) + +lemma listsum_mult_const: + fixes f :: "'a \ 'b::semiring_0" + shows "(\x\xs. f x * c) = (\x\xs. f x) * c" +by (induct xs, simp_all add: algebra_simps) + +lemma listsum_abs: + fixes xs :: "'a::pordered_ab_group_add_abs list" + shows "\listsum xs\ \ listsum (map abs xs)" +by (induct xs, simp, simp add: order_trans [OF abs_triangle_ineq]) + +lemma listsum_mono: + fixes f g :: "'a \ 'b::{comm_monoid_add, pordered_ab_semigroup_add}" + shows "(\x. x \ set xs \ f x \ g x) \ (\x\xs. f x) \ (\x\xs. g x)" +by (induct xs, simp, simp add: add_mono) + subsubsection {* @{text upt} *}