# HG changeset patch # User paulson # Date 1493818744 -3600 # Node ID a68973661472906aa2ccac37bf5a98c26698cf7a # Parent 4a762cad298fe246be80e3abbee0a2dc3cb25639 two new theorems diff -r 4a762cad298f -r a68973661472 src/HOL/Groups_Big.thy --- a/src/HOL/Groups_Big.thy Tue May 02 18:27:51 2017 +0200 +++ b/src/HOL/Groups_Big.thy Wed May 03 14:39:04 2017 +0100 @@ -1116,6 +1116,41 @@ subsubsection \Properties in more restricted classes of structures\ +context linordered_nonzero_semiring +begin + +lemma prod_ge_1: "(\x. x \ A \ 1 \ f x) \ 1 \ prod f A" +proof (induct A rule: infinite_finite_induct) + case infinite + then show ?case by simp +next + case empty + then show ?case by simp +next + case (insert x F) + have "1 * 1 \ f x * prod f F" + by (rule mult_mono') (use insert in auto) + with insert show ?case by simp +qed + +lemma prod_le_1: + fixes f :: "'b \ 'a" + assumes "\x. x \ A \ 0 \ f x \ f x \ 1" + shows "prod f A \ 1" + using assms +proof (induct A rule: infinite_finite_induct) + case infinite + then show ?case by simp +next + case empty + then show ?case by simp +next + case (insert x F) + then show ?case by (force simp: mult.commute intro: dest: mult_le_one) +qed + +end + context comm_semiring_1 begin diff -r 4a762cad298f -r a68973661472 src/HOL/Library/Extended_Nonnegative_Real.thy --- a/src/HOL/Library/Extended_Nonnegative_Real.thy Tue May 02 18:27:51 2017 +0200 +++ b/src/HOL/Library/Extended_Nonnegative_Real.thy Wed May 03 14:39:04 2017 +0100 @@ -181,16 +181,17 @@ by (intro cSUP_upper bdd_above_image_mono assms) (auto simp: mono_def) qed +(*These generalise their counterparts in Nat.linordered_semidom_class*) lemma of_nat_less[simp]: - "i < j \ of_nat i < (of_nat j::'a::{linordered_nonzero_semiring, semiring_char_0})" + "m < n \ of_nat m < (of_nat n::'a::{linordered_nonzero_semiring, semiring_char_0})" by (auto simp: less_le) lemma of_nat_le_iff[simp]: - "of_nat i \ (of_nat j::'a::{linordered_nonzero_semiring, semiring_char_0}) \ i \ j" + "of_nat m \ (of_nat n::'a::{linordered_nonzero_semiring, semiring_char_0}) \ m \ n" proof (safe intro!: of_nat_mono) - assume "of_nat i \ (of_nat j::'a)" then show "i \ j" + assume "of_nat m \ (of_nat n::'a)" then show "m \ n" proof (intro leI notI) - assume "j < i" from less_le_trans[OF of_nat_less[OF this] \of_nat i \ of_nat j\] show False + assume "n < m" from less_le_trans[OF of_nat_less[OF this] \of_nat m \ of_nat n\] show False by blast qed qed