@@ -67,27 +67,41 @@ lemma le_prod_max_one {M : Type*} [CommMonoidWithZero M] [LinearOrder M] [ZeroLE
6767 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)
71- (hf0 : ∀ i ∈ s, 0 ≤ f i)
72- (hf : ∀ i ∈ t, i ∉ s → 1 ≤ f i) : ∏ i ∈ s, f i ≤ ∏ i ∈ t, f i := by
70+ lemma prod_mono_of_subset_of_one_le₀ (h : s ⊆ t) (hf₀ : ∀ i ∈ s, 0 ≤ f i) (hfg : ∀ i ∈ s, f i ≤ g i)
71+ (hf : ∀ i ∈ t, i ∉ s → 1 ≤ g i) : ∏ i ∈ s, f i ≤ ∏ i ∈ t, g i := by
7372 have := posMulMono_iff_mulPosMono.1 ‹PosMulMono R›
7473 classical
7574 calc
76- ∏ 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]
78- _ = ∏ i ∈ t \ s ∪ s, f i := (prod_union sdiff_disjoint).symm
79- _ = ∏ i ∈ t, f i := by rw [sdiff_union_of_subset h]
80-
81- theorem prod_le_prod_of_subset_of_le_one (h : s ⊆ t) (hf0 : ∀ i ∈ t, 0 ≤ f i)
82- (hf : ∀ i ∈ t, i ∉ s → f i ≤ 1 ) :
83- ∏ i ∈ t, f i ≤ ∏ i ∈ s, f i := by
75+ ∏ i ∈ s, f i
76+ _ ≤ ∏ i ∈ s, g i := by gcongr with i hi; exacts [hf₀, hfg i hi]
77+ _ ≤ (∏ i ∈ t \ s, g i) * ∏ i ∈ s, g i :=
78+ le_mul_of_one_le_left (prod_nonneg fun i hi ↦ (hf₀ i hi).trans (hfg i hi)) <|
79+ one_le_prod <| by simpa only [mem_sdiff, and_imp]
80+ _ = ∏ i ∈ t \ s ∪ s, g i := (prod_union sdiff_disjoint).symm
81+ _ = ∏ i ∈ t, g i := by rw [sdiff_union_of_subset h]
82+
83+ lemma prod_mono_of_subset_of_le_one₀ (h : s ⊆ t) (hg₀ : ∀ i ∈ t, 0 ≤ g i) (hgf : ∀ i ∈ s, g i ≤ f i)
84+ (hf : ∀ i ∈ t, i ∉ s → g i ≤ 1 ) :
85+ ∏ i ∈ t, g i ≤ ∏ i ∈ s, f i := by
8486 have := posMulMono_iff_mulPosMono.1 ‹PosMulMono R›
8587 classical
8688 calc
87- ∏ i ∈ t, f i = ∏ i ∈ t \ s ∪ s, f i := by rw [sdiff_union_of_subset h]
88- _ = (∏ i ∈ t \ s, f i) * ∏ i ∈ s, f i := prod_union sdiff_disjoint
89- _ ≤ ∏ i ∈ s, f i :=
89+ ∏ i ∈ t, g i
90+ _ = ∏ i ∈ t \ s ∪ s, g i := by rw [sdiff_union_of_subset h]
91+ _ = (∏ i ∈ t \ s, g i) * ∏ i ∈ s, g i := prod_union sdiff_disjoint
92+ _ ≤ ∏ i ∈ s, g i :=
9093 mul_le_of_le_one_left (prod_nonneg (by grind)) (prod_le_one (by grind) (by grind))
94+ _ ≤ ∏ i ∈ s, f i := by gcongr with i hi; exacts [fun i hi ↦ hg₀ _ <| h hi, hgf i hi]
95+
96+ @[gcongr]
97+ lemma prod_le_prod_of_subset_of_one_le (h : s ⊆ t) (hf₀ : ∀ i ∈ s, 0 ≤ f i)
98+ (hf : ∀ i ∈ t, i ∉ s → 1 ≤ f i) : ∏ i ∈ s, f i ≤ ∏ i ∈ t, f i :=
99+ prod_mono_of_subset_of_one_le₀ h hf₀ (by simp) hf
100+
101+ lemma prod_le_prod_of_subset_of_le_one (h : s ⊆ t) (hf₀ : ∀ i ∈ t, 0 ≤ f i)
102+ (hf : ∀ i ∈ t, i ∉ s → f i ≤ 1 ) :
103+ ∏ i ∈ t, f i ≤ ∏ i ∈ s, f i :=
104+ prod_mono_of_subset_of_le_one₀ h hf₀ (by simp) hf
91105
92106theorem prod_mono_set_of_one_le (hf : ∀ x, 1 ≤ f x) :
93107 Monotone fun s ↦ ∏ x ∈ s, f x :=
0 commit comments