@@ -202,7 +202,7 @@ theorem prod_eq_one_iff_of_le_one' :
202
202
@[to_additive single_le_sum]
203
203
theorem single_le_prod' (hf : ∀ i ∈ s, 1 ≤ f i) {a} (h : a ∈ s) : f a ≤ ∏ x in s, f x :=
204
204
calc
205
- f a = ∏ i in {a}, f i := prod_singleton.symm
205
+ f a = ∏ i in {a}, f i := ( prod_singleton _ _) .symm
206
206
_ ≤ ∏ i in s, f i :=
207
207
prod_le_prod_of_subset_of_one_le' (singleton_subset_iff.2 h) fun i hi _ ↦ hf i hi
208
208
#align finset.single_le_prod' Finset.single_le_prod'
@@ -494,7 +494,7 @@ theorem prod_lt_prod_of_subset' (h : s ⊆ t) {i : ι} (ht : i ∈ t) (hs : i
494
494
theorem single_lt_prod' {i j : ι} (hij : j ≠ i) (hi : i ∈ s) (hj : j ∈ s) (hlt : 1 < f j)
495
495
(hle : ∀ k ∈ s, k ≠ i → 1 ≤ f k) : f i < ∏ k in s, f k :=
496
496
calc
497
- f i = ∏ k in {i}, f k := prod_singleton.symm
497
+ f i = ∏ k in {i}, f k := by rw [ prod_singleton]
498
498
_ < ∏ k in s, f k :=
499
499
prod_lt_prod_of_subset' (singleton_subset_iff.2 hi) hj (mt mem_singleton.1 hij) hlt
500
500
fun k hks hki ↦ hle k hks (mt mem_singleton.2 hki)
@@ -682,23 +682,60 @@ end CanonicallyOrderedCommSemiring
682
682
end Finset
683
683
684
684
namespace Fintype
685
-
686
- variable [Fintype ι]
685
+ section OrderedCommMonoid
686
+ variable [Fintype ι] [OrderedCommMonoid M] {f : ι → M}
687
687
688
688
@[to_additive (attr := mono) sum_mono]
689
- theorem prod_mono' [OrderedCommMonoid M] : Monotone fun f : ι → M ↦ ∏ i, f i := fun _ _ hfg ↦
689
+ theorem prod_mono' : Monotone fun f : ι → M ↦ ∏ i, f i := fun _ _ hfg ↦
690
690
Finset.prod_le_prod' fun x _ ↦ hfg x
691
691
#align fintype.prod_mono' Fintype.prod_mono'
692
692
#align fintype.sum_mono Fintype.sum_mono
693
693
694
+ @[to_additive sum_nonneg]
695
+ lemma one_le_prod (hf : 1 ≤ f) : 1 ≤ ∏ i, f i := Finset.one_le_prod' λ _ _ ↦ hf _
696
+
697
+ @[to_additive] lemma prod_le_one (hf : f ≤ 1 ) : ∏ i, f i ≤ 1 := Finset.prod_le_one' λ _ _ ↦ hf _
698
+
699
+ end OrderedCommMonoid
700
+
701
+ section OrderedCancelCommMonoid
702
+ variable [Fintype ι] [OrderedCancelCommMonoid M] {f : ι → M}
703
+
694
704
@[to_additive sum_strictMono]
695
- theorem prod_strictMono' [OrderedCancelCommMonoid M] : StrictMono fun f : ι → M ↦ ∏ x, f x :=
705
+ theorem prod_strictMono' : StrictMono fun f : ι → M ↦ ∏ x, f x :=
696
706
fun _ _ hfg ↦
697
707
let ⟨hle, i, hlt⟩ := Pi.lt_def.mp hfg
698
708
Finset.prod_lt_prod' (fun i _ ↦ hle i) ⟨i, Finset.mem_univ i, hlt⟩
699
709
#align fintype.prod_strict_mono' Fintype.prod_strictMono'
700
710
#align fintype.sum_strict_mono Fintype.sum_strictMono
701
711
712
+ @[to_additive sum_pos]
713
+ lemma one_lt_prod (hf : 1 < f) : 1 < ∏ i, f i :=
714
+ Finset.one_lt_prod' (λ _ _ ↦ hf.le _) $ by simpa using (Pi.lt_def.1 hf).2
715
+
716
+ @[to_additive]
717
+ lemma prod_lt_one (hf : f < 1 ) : ∏ i, f i < 1 :=
718
+ Finset.prod_lt_one' (λ _ _ ↦ hf.le _) $ by simpa using (Pi.lt_def.1 hf).2
719
+
720
+ @[to_additive sum_pos_iff_of_nonneg]
721
+ lemma one_lt_prod_iff_of_one_le (hf : 1 ≤ f) : 1 < ∏ i, f i ↔ 1 < f := by
722
+ obtain rfl | hf := hf.eq_or_lt <;> simp [*, one_lt_prod]
723
+
724
+ @[to_additive]
725
+ lemma prod_lt_one_iff_of_le_one (hf : f ≤ 1 ) : ∏ i, f i < 1 ↔ f < 1 := by
726
+ obtain rfl | hf := hf.eq_or_lt <;> simp [*, prod_lt_one]
727
+
728
+ @[to_additive]
729
+ lemma prod_eq_one_iff_of_one_le (hf : 1 ≤ f) : ∏ i, f i = 1 ↔ f = 1 := by
730
+ simpa only [(one_le_prod hf).not_gt_iff_eq, hf.not_gt_iff_eq]
731
+ using (one_lt_prod_iff_of_one_le hf).not
732
+
733
+ @[to_additive]
734
+ lemma prod_eq_one_iff_of_le_one (hf : f ≤ 1 ) : ∏ i, f i = 1 ↔ f = 1 := by
735
+ simpa only [(prod_le_one hf).not_gt_iff_eq, hf.not_gt_iff_eq, eq_comm]
736
+ using (prod_lt_one_iff_of_le_one hf).not
737
+
738
+ end OrderedCancelCommMonoid
702
739
end Fintype
703
740
704
741
namespace WithTop
0 commit comments