@@ -32,10 +32,10 @@ lemma prod_nonneg (h0 : ∀ i ∈ s, 0 ≤ f i) : 0 ≤ ∏ i ∈ s, f i :=
3232 prod_induction f (fun i ↦ 0 ≤ i) (fun _ _ ha hb ↦ mul_nonneg ha hb) zero_le_one h0
3333
3434/-- If all `f i`, `i ∈ s`, are nonnegative and each `f i` is less than or equal to `g i`, then the
35- product of `f i` is less than or equal to the product of `g i`. See also `Finset.prod_le_prod' ` for
35+ product of `f i` is less than or equal to the product of `g i`. See also `Finset.prod_le_prod` for
3636the case of an ordered commutative multiplicative monoid. -/
3737@[gcongr]
38- lemma prod_le_prod (h0 : ∀ i ∈ s, 0 ≤ f i) (h1 : ∀ i ∈ s, f i ≤ g i) :
38+ lemma prod_le_prod₀ (h0 : ∀ i ∈ s, 0 ≤ f i) (h1 : ∀ i ∈ s, f i ≤ g i) :
3939 ∏ i ∈ s, f i ≤ ∏ i ∈ s, g i := by
4040 induction s using Finset.cons_induction with
4141 | empty => simp
@@ -46,14 +46,14 @@ lemma prod_le_prod (h0 : ∀ i ∈ s, 0 ≤ f i) (h1 : ∀ i ∈ s, f i ≤ g i)
4646 exacts [prod_nonneg h0.2 , h0.1 .trans h1.1 , h1.1 , ih h0.2 h1.2 ]
4747
4848/-- If each `f i`, `i ∈ s` belongs to `[0, 1]`, then their product is less than or equal to one.
49- See also `Finset.prod_le_one' ` for the case of an ordered commutative multiplicative monoid. -/
50- lemma prod_le_one (h0 : ∀ i ∈ s, 0 ≤ f i) (h1 : ∀ i ∈ s, f i ≤ 1 ) : ∏ i ∈ s, f i ≤ 1 := by
51- convert! ← prod_le_prod h0 h1
49+ See also `Finset.prod_le_one` for the case of an ordered commutative multiplicative monoid. -/
50+ lemma prod_le_one₀ (h0 : ∀ i ∈ s, 0 ≤ f i) (h1 : ∀ i ∈ s, f i ≤ 1 ) : ∏ i ∈ s, f i ≤ 1 := by
51+ convert ← prod_le_prod₀ h0 h1
5252 exact Finset.prod_const_one
5353
54- /-- A version of `Finset.one_le_prod' ` for `PosMulMono` in place of `MulLeftMono`. -/
55- lemma one_le_prod (hf : ∀ i ∈ s, 1 ≤ f i) : 1 ≤ ∏ i ∈ s, f i := by
56- simpa using prod_le_prod (by simp) hf
54+ /-- A version of `Finset.one_le_prod` for `PosMulMono` in place of `MulLeftMono`. -/
55+ lemma one_le_prod₀ (hf : ∀ i ∈ s, 1 ≤ f i) : 1 ≤ ∏ i ∈ s, f i := by
56+ simpa using prod_le_prod₀ (by simp) hf
5757
5858lemma le_prod_max_one {M : Type *} [CommMonoidWithZero M] [LinearOrder M] [ZeroLEOneClass M]
5959 [PosMulMono M] {i : ι} (hi : i ∈ s) (f : ι → M) :
@@ -64,21 +64,21 @@ lemma le_prod_max_one {M : Type*} [CommMonoidWithZero M] [LinearOrder M] [ZeroLE
6464 have : f i = ∏ j ∈ s, if i = j then f i else 1 := by
6565 rw [prod_eq_single_of_mem i hi fun _ _ _ ↦ by grind]
6666 simp
67- exact this ▸ prod_le_prod (fun _ _ ↦ by grind [zero_le_one]) fun _ _ ↦ by grind
67+ exact this ▸ prod_le_prod₀ (fun _ _ ↦ by grind [zero_le_one]) fun _ _ ↦ by grind
6868
6969@[gcongr]
70- theorem prod_le_prod_of_subset_of_one_le (h : s ⊆ t)
70+ theorem prod_le_prod_of_subset_of_one_le₀ (h : s ⊆ t)
7171 (hf0 : ∀ i ∈ s, 0 ≤ f i)
7272 (hf : ∀ i ∈ t, i ∉ s → 1 ≤ f i) : ∏ i ∈ s, f i ≤ ∏ i ∈ t, f i := by
7373 have := posMulMono_iff_mulPosMono.1 ‹PosMulMono R›
7474 classical
7575 calc
7676 ∏ i ∈ s, f i ≤ (∏ i ∈ t \ s, f i) * ∏ i ∈ s, f i :=
77- le_mul_of_one_le_left (prod_nonneg hf0) <| one_le_prod <| by simpa only [mem_sdiff, and_imp]
77+ le_mul_of_one_le_left (prod_nonneg hf0) <| one_le_prod₀ <| by simpa only [mem_sdiff, and_imp]
7878 _ = ∏ i ∈ t \ s ∪ s, f i := (prod_union sdiff_disjoint).symm
7979 _ = ∏ i ∈ t, f i := by rw [sdiff_union_of_subset h]
8080
81- theorem prod_le_prod_of_subset_of_le_one (h : s ⊆ t) (hf0 : ∀ i ∈ t, 0 ≤ f i)
81+ theorem prod_le_prod_of_subset_of_le_one₀ (h : s ⊆ t) (hf0 : ∀ i ∈ t, 0 ≤ f i)
8282 (hf : ∀ i ∈ t, i ∉ s → f i ≤ 1 ) :
8383 ∏ i ∈ t, f i ≤ ∏ i ∈ s, f i := by
8484 have := posMulMono_iff_mulPosMono.1 ‹PosMulMono R›
@@ -87,16 +87,16 @@ theorem prod_le_prod_of_subset_of_le_one (h : s ⊆ t) (hf0 : ∀ i ∈ t, 0 ≤
8787 ∏ i ∈ t, f i = ∏ i ∈ t \ s ∪ s, f i := by rw [sdiff_union_of_subset h]
8888 _ = (∏ i ∈ t \ s, f i) * ∏ i ∈ s, f i := prod_union sdiff_disjoint
8989 _ ≤ ∏ i ∈ s, f i :=
90- mul_le_of_le_one_left (prod_nonneg (by grind)) (prod_le_one (by grind) (by grind))
90+ mul_le_of_le_one_left (prod_nonneg (by grind)) (prod_le_one₀ (by grind) (by grind))
9191
92- theorem prod_mono_set_of_one_le (hf : ∀ x, 1 ≤ f x) :
92+ theorem prod_mono_set_of_one_le₀ (hf : ∀ x, 1 ≤ f x) :
9393 Monotone fun s ↦ ∏ x ∈ s, f x :=
94- fun _ _ hst ↦ prod_le_prod_of_subset_of_one_le hst
94+ fun _ _ hst ↦ prod_le_prod_of_subset_of_one_le₀ hst
9595 (fun i _ ↦ zero_le_one.trans (hf i)) (fun x _ _ ↦ hf x)
9696
97- theorem prod_anti_set_of_le_one (hf0 : ∀ (x : ι), 0 ≤ f x) (hf : ∀ (x : ι), f x ≤ 1 ) :
97+ theorem prod_anti_set_of_le_one₀ (hf0 : ∀ (x : ι), 0 ≤ f x) (hf : ∀ (x : ι), f x ≤ 1 ) :
9898 Antitone fun (s : Finset ι) => ∏ x ∈ s, f x :=
99- fun _ _ hst ↦ prod_le_prod_of_subset_of_le_one hst (by grind) (by simp [hf])
99+ fun _ _ hst ↦ prod_le_prod_of_subset_of_le_one₀ hst (by grind) (by simp [hf])
100100
101101end PosMulMono
102102
@@ -107,23 +107,23 @@ variable [PartialOrder R] [ZeroLEOneClass R] [PosMulStrictMono R] [Nontrivial R]
107107lemma prod_pos (h0 : ∀ i ∈ s, 0 < f i) : 0 < ∏ i ∈ s, f i :=
108108 prod_induction f (fun x ↦ 0 < x) (fun _ _ ha hb ↦ mul_pos ha hb) zero_lt_one h0
109109
110- lemma prod_lt_prod (hf : ∀ i ∈ s, 0 < f i) (hfg : ∀ i ∈ s, f i ≤ g i)
110+ lemma prod_lt_prod₀ (hf : ∀ i ∈ s, 0 < f i) (hfg : ∀ i ∈ s, f i ≤ g i)
111111 (hlt : ∃ i ∈ s, f i < g i) :
112112 ∏ i ∈ s, f i < ∏ i ∈ s, g i := by
113113 classical
114114 obtain ⟨i, hi, hilt⟩ := hlt
115115 rw [← insert_erase hi, prod_insert (notMem_erase _ _), prod_insert (notMem_erase _ _)]
116116 have := posMulStrictMono_iff_mulPosStrictMono.1 ‹PosMulStrictMono R›
117117 refine mul_lt_mul_of_pos_of_nonneg' hilt ?_ ?_ ?_
118- · exact prod_le_prod (fun j hj => le_of_lt (hf j (mem_of_mem_erase hj)))
118+ · exact prod_le_prod₀ (fun j hj => (hf j (mem_of_mem_erase hj)).le )
119119 (fun _ hj ↦ hfg _ <| mem_of_mem_erase hj)
120120 · exact prod_pos fun j hj => hf j (mem_of_mem_erase hj)
121121 · exact (hf i hi).le.trans hilt.le
122122
123- lemma prod_lt_prod_of_nonempty (hf : ∀ i ∈ s, 0 < f i) (hfg : ∀ i ∈ s, f i < g i)
123+ lemma prod_lt_prod_of_nonempty₀ (hf : ∀ i ∈ s, 0 < f i) (hfg : ∀ i ∈ s, f i < g i)
124124 (h_ne : s.Nonempty) :
125125 ∏ i ∈ s, f i < ∏ i ∈ s, g i := by
126- apply prod_lt_prod hf fun i hi => le_of_lt (hfg i hi)
126+ apply prod_lt_prod₀ hf fun i hi => le_of_lt (hfg i hi)
127127 obtain ⟨i, hi⟩ := h_ne
128128 exact ⟨i, hi, hfg i hi⟩
129129
0 commit comments