@@ -80,45 +80,32 @@ variable [CommMonoid α] [CommMonoid β] [PartialOrder β] [IsOrderedMonoid β]
8080
8181@[to_additive le_sum_of_subadditive_on_pred]
8282lemma le_prod_of_submultiplicative_on_pred (f : α → β)
83- (p : α → Prop ) (h_one : f 1 = 1 ) (hp_one : p 1 )
83+ (p : α → Prop ) (h_one : f 1 ≤ 1 ) (hp_one : p 1 )
8484 (h_mul : ∀ a b, p a → p b → f (a * b) ≤ f a * f b) (hp_mul : ∀ a b, p a → p b → p (a * b))
8585 (s : Multiset α) (hps : ∀ a, a ∈ s → p a) : f s.prod ≤ (s.map f).prod := by
86- revert s
87- refine Multiset.induction ?_ ?_
88- · simp [le_of_eq h_one]
89- intro a s hs hpsa
90- have hps : ∀ x, x ∈ s → p x := fun x hx => hpsa x (mem_cons_of_mem hx)
91- have hp_prod : p s.prod := prod_induction p s hp_mul hp_one hps
92- grw [prod_cons, map_cons, prod_cons, h_mul a s.prod (hpsa a (mem_cons_self a s)) hp_prod,
93- hs hps]
86+ induction s using Quotient.inductionOn with
87+ | h l => simp [l.le_prod_of_submultiplicative_on_pred f p h_one hp_one h_mul hp_mul (by simpa)]
9488
9589@[to_additive le_sum_of_subadditive]
96- lemma le_prod_of_submultiplicative (f : α → β) (h_one : f 1 = 1 )
97- (h_mul : ∀ a b, f (a * b) ≤ f a * f b) (s : Multiset α) : f s.prod ≤ (s.map f).prod :=
98- le_prod_of_submultiplicative_on_pred f ( fun _ => True) h_one trivial ( fun x y _ _ => h_mul x y)
99- ( by simp) s ( by simp)
90+ lemma le_prod_of_submultiplicative (f : α → β) (h_one : f 1 ≤ 1 )
91+ (h_mul : ∀ a b, f (a * b) ≤ f a * f b) (s : Multiset α) : f s.prod ≤ (s.map f).prod := by
92+ induction s using Quotient.inductionOn with
93+ | h l => simp [l.le_prod_of_submultiplicative f h_one h_mul]
10094
10195@[to_additive le_sum_nonempty_of_subadditive_on_pred]
10296lemma le_prod_nonempty_of_submultiplicative_on_pred (f : α → β) (p : α → Prop )
10397 (h_mul : ∀ a b, p a → p b → f (a * b) ≤ f a * f b) (hp_mul : ∀ a b, p a → p b → p (a * b))
10498 (s : Multiset α) (hs_nonempty : s ≠ ∅) (hs : ∀ a, a ∈ s → p a) : f s.prod ≤ (s.map f).prod := by
105- revert s
106- refine Multiset.induction ?_ ?_
107- · simp
108- rintro a s hs - hsa_prop
109- rw [prod_cons, map_cons, prod_cons]
110- by_cases hs_empty : s = ∅
111- · simp [hs_empty]
112- have hsa_restrict : ∀ x, x ∈ s → p x := fun x hx => hsa_prop x (mem_cons_of_mem hx)
113- have hp_sup : p s.prod := prod_induction_nonempty p hp_mul hs_empty hsa_restrict
114- have hp_a : p a := hsa_prop a (mem_cons_self a s)
115- grw [h_mul a _ hp_a hp_sup, ← hs hs_empty hsa_restrict]
99+ induction s using Quotient.inductionOn with
100+ | h l =>
101+ simp [l.le_prod_nonempty_of_submultiplicative_on_pred f p h_mul hp_mul
102+ (by simpa using hs_nonempty) (by simpa)]
116103
117104@[to_additive le_sum_nonempty_of_subadditive]
118105lemma le_prod_nonempty_of_submultiplicative (f : α → β) (h_mul : ∀ a b, f (a * b) ≤ f a * f b)
119- (s : Multiset α) (hs_nonempty : s ≠ ∅) : f s.prod ≤ (s.map f).prod :=
120- le_prod_nonempty_of_submultiplicative_on_pred f ( fun _ => True) ( by simp [h_mul]) ( by simp) s
121- hs_nonempty (by simp)
106+ (s : Multiset α) (hs_nonempty : s ≠ ∅) : f s.prod ≤ (s.map f).prod := by
107+ induction s using Quotient.inductionOn with
108+ | h l => simp [l.le_prod_nonempty_of_submultiplicative f h_mul (by simpa using hs_nonempty)]
122109
123110end
124111
@@ -176,6 +163,6 @@ lemma prod_min_le [CommMonoid α] [LinearOrder α] [IsOrderedMonoid α]
176163
177164lemma abs_sum_le_sum_abs [AddCommGroup α] [LinearOrder α] [IsOrderedAddMonoid α] {s : Multiset α} :
178165 |s.sum| ≤ (s.map abs).sum :=
179- le_sum_of_subadditive _ abs_zero abs_add_le s
166+ le_sum_of_subadditive _ abs_zero.le abs_add_le s
180167
181168end Multiset
0 commit comments