src/HOL/Groups_Big.thy
changeset 68361 20375f232f3b
parent 67969 83c8cafdebe8
child 68975 5ce4d117cea7
equal deleted inserted replaced
68360:0f19c98fa7be 68361:20375f232f3b
  1300     by (simp add: prod.union_inter [symmetric, of A B])
  1300     by (simp add: prod.union_inter [symmetric, of A B])
  1301   with assms show ?thesis
  1301   with assms show ?thesis
  1302     by simp
  1302     by simp
  1303 qed
  1303 qed
  1304 
  1304 
  1305 lemma (in linordered_semidom) prod_nonneg: "(\<forall>a\<in>A. 0 \<le> f a) \<Longrightarrow> 0 \<le> prod f A"
  1305 context linordered_semidom
       
  1306 begin
       
  1307 
       
  1308 lemma prod_nonneg: "(\<forall>a\<in>A. 0 \<le> f a) \<Longrightarrow> 0 \<le> prod f A"
  1306   by (induct A rule: infinite_finite_induct) simp_all
  1309   by (induct A rule: infinite_finite_induct) simp_all
  1307 
  1310 
  1308 lemma (in linordered_semidom) prod_pos: "(\<forall>a\<in>A. 0 < f a) \<Longrightarrow> 0 < prod f A"
  1311 lemma prod_pos: "(\<forall>a\<in>A. 0 < f a) \<Longrightarrow> 0 < prod f A"
  1309   by (induct A rule: infinite_finite_induct) simp_all
  1312   by (induct A rule: infinite_finite_induct) simp_all
  1310 
  1313 
  1311 lemma (in linordered_semidom) prod_mono:
  1314 lemma prod_mono:
  1312   "(\<And>i. i \<in> A \<Longrightarrow> 0 \<le> f i \<and> f i \<le> g i) \<Longrightarrow> prod f A \<le> prod g A"
  1315   "(\<And>i. i \<in> A \<Longrightarrow> 0 \<le> f i \<and> f i \<le> g i) \<Longrightarrow> prod f A \<le> prod g A"
  1313   by (induct A rule: infinite_finite_induct) (force intro!: prod_nonneg mult_mono)+
  1316   by (induct A rule: infinite_finite_induct) (force intro!: prod_nonneg mult_mono)+
  1314 
  1317 
  1315 lemma (in linordered_semidom) prod_mono_strict:
  1318 lemma prod_mono_strict:
  1316   assumes "finite A" "\<And>i. i \<in> A \<Longrightarrow> 0 \<le> f i \<and> f i < g i" "A \<noteq> {}"
  1319   assumes "finite A" "\<And>i. i \<in> A \<Longrightarrow> 0 \<le> f i \<and> f i < g i" "A \<noteq> {}"
  1317   shows "prod f A < prod g A"
  1320   shows "prod f A < prod g A"
  1318   using assms
  1321   using assms
  1319 proof (induct A rule: finite_induct)
  1322 proof (induct A rule: finite_induct)
  1320   case empty
  1323   case empty
  1321   then show ?case by simp
  1324   then show ?case by simp
  1322 next
  1325 next
  1323   case insert
  1326   case insert
  1324   then show ?case by (force intro: mult_strict_mono' prod_nonneg)
  1327   then show ?case by (force intro: mult_strict_mono' prod_nonneg)
       
  1328 qed
       
  1329 
       
  1330 end
       
  1331 
       
  1332 lemma prod_mono2:
       
  1333   fixes f :: "'a \<Rightarrow> 'b :: linordered_idom"
       
  1334   assumes fin: "finite B"
       
  1335     and sub: "A \<subseteq> B"
       
  1336     and nn: "\<And>b. b \<in> B-A \<Longrightarrow> 1 \<le> f b"
       
  1337     and A: "\<And>a. a \<in> A \<Longrightarrow> 0 \<le> f a"
       
  1338   shows "prod f A \<le> prod f B"
       
  1339 proof -
       
  1340   have "prod f A \<le> prod f A * prod f (B-A)"
       
  1341     by (metis prod_ge_1 A mult_le_cancel_left1 nn not_less prod_nonneg)
       
  1342   also from fin finite_subset[OF sub fin] have "\<dots> = prod f (A \<union> (B-A))"
       
  1343     by (simp add: prod.union_disjoint del: Un_Diff_cancel)
       
  1344   also from sub have "A \<union> (B-A) = B" by blast
       
  1345   finally show ?thesis .
       
  1346 qed
       
  1347 
       
  1348 lemma less_1_prod:
       
  1349   fixes f :: "'a \<Rightarrow> 'b::linordered_idom"
       
  1350   shows "finite I \<Longrightarrow> I \<noteq> {} \<Longrightarrow> (\<And>i. i \<in> I \<Longrightarrow> 1 < f i) \<Longrightarrow> 1 < prod f I"
       
  1351   by (induct I rule: finite_ne_induct) (auto intro: less_1_mult)
       
  1352 
       
  1353 lemma less_1_prod2:
       
  1354   fixes f :: "'a \<Rightarrow> 'b::linordered_idom"
       
  1355   assumes I: "finite I" "i \<in> I" "1 < f i" "\<And>i. i \<in> I \<Longrightarrow> 1 \<le> f i"
       
  1356   shows "1 < prod f I"
       
  1357 proof -
       
  1358   have "1 < f i * prod f (I - {i})"
       
  1359     using assms
       
  1360     by (meson DiffD1 leI less_1_mult less_le_trans mult_le_cancel_left1 prod_ge_1)
       
  1361   also have "\<dots> = prod f I"
       
  1362     using assms by (simp add: prod.remove)
       
  1363   finally show ?thesis .
  1325 qed
  1364 qed
  1326 
  1365 
  1327 lemma (in linordered_field) abs_prod: "\<bar>prod f A\<bar> = (\<Prod>x\<in>A. \<bar>f x\<bar>)"
  1366 lemma (in linordered_field) abs_prod: "\<bar>prod f A\<bar> = (\<Prod>x\<in>A. \<bar>f x\<bar>)"
  1328   by (induct A rule: infinite_finite_induct) (simp_all add: abs_mult)
  1367   by (induct A rule: infinite_finite_induct) (simp_all add: abs_mult)
  1329 
  1368