src/HOL/Big_Operators.thy
changeset 36303 80e3f43306cf
parent 36079 fa0e354e6a39
child 36349 39be26d1bc28
equal deleted inserted replaced
36302:4e7f5b22dd7d 36303:80e3f43306cf
   553 next
   553 next
   554   case False thus ?thesis by (simp add: setsum_def)
   554   case False thus ?thesis by (simp add: setsum_def)
   555 qed
   555 qed
   556 
   556 
   557 lemma setsum_mono2:
   557 lemma setsum_mono2:
   558 fixes f :: "'a \<Rightarrow> 'b :: {ordered_ab_semigroup_add_imp_le,comm_monoid_add}"
   558 fixes f :: "'a \<Rightarrow> 'b :: ordered_comm_monoid_add"
   559 assumes fin: "finite B" and sub: "A \<subseteq> B" and nn: "\<And>b. b \<in> B-A \<Longrightarrow> 0 \<le> f b"
   559 assumes fin: "finite B" and sub: "A \<subseteq> B" and nn: "\<And>b. b \<in> B-A \<Longrightarrow> 0 \<le> f b"
   560 shows "setsum f A \<le> setsum f B"
   560 shows "setsum f A \<le> setsum f B"
   561 proof -
   561 proof -
   562   have "setsum f A \<le> setsum f A + setsum f (B-A)"
   562   have "setsum f A \<le> setsum f A + setsum f (B-A)"
   563     by(simp add: add_increasing2[OF setsum_nonneg] nn Ball_def)
   563     by(simp add: add_increasing2[OF setsum_nonneg] nn Ball_def)
  1028 by (subst setprod_Un_Int [symmetric], auto)
  1028 by (subst setprod_Un_Int [symmetric], auto)
  1029 
  1029 
  1030 lemma setprod_diff1: "finite A ==> f a \<noteq> 0 ==>
  1030 lemma setprod_diff1: "finite A ==> f a \<noteq> 0 ==>
  1031   (setprod f (A - {a}) :: 'a :: {field}) =
  1031   (setprod f (A - {a}) :: 'a :: {field}) =
  1032   (if a:A then setprod f A / f a else setprod f A)"
  1032   (if a:A then setprod f A / f a else setprod f A)"
  1033 by (erule finite_induct) (auto simp add: insert_Diff_if)
  1033   by (erule finite_induct) (auto simp add: insert_Diff_if)
  1034 
  1034 
  1035 lemma setprod_inversef: 
  1035 lemma setprod_inversef: 
  1036   fixes f :: "'b \<Rightarrow> 'a::{field,division_by_zero}"
  1036   fixes f :: "'b \<Rightarrow> 'a::{field,division_by_zero}"
  1037   shows "finite A ==> setprod (inverse \<circ> f) A = inverse (setprod f A)"
  1037   shows "finite A ==> setprod (inverse \<circ> f) A = inverse (setprod f A)"
  1038 by (erule finite_induct) auto
  1038 by (erule finite_induct) auto