|
| 1 | +/- |
| 2 | +Copyright (c) 2019 Yury Kudryashov. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Yury Kudryashov |
| 5 | +-/ |
| 6 | +import analysis.calculus.mean_value data.nat.parity analysis.complex.exponential |
| 7 | + analysis.convex.specific_functions |
| 8 | + |
| 9 | +/-! |
| 10 | +# Mean value inequalities |
| 11 | +
|
| 12 | +In this file we prove various inequalities between mean values: |
| 13 | +arithmetic mean, geometric mean, generalized mean (natural and integer |
| 14 | +cases). |
| 15 | +
|
| 16 | +For generalized means we only prove |
| 17 | +$\left( ∑_j w_j z_j \right)^n ≤ ∑_j w_j z_j^n$ because standard versions would |
| 18 | +require $\sqrt[n]{x}$ which is not implemented in `mathlib` yet. |
| 19 | +
|
| 20 | +Probably a better approach to the generalized means inequality is to |
| 21 | +prove `convex_on_rpow` in `analysis/convex/specific_functions` first, |
| 22 | +then apply it. |
| 23 | +
|
| 24 | +It is not yet clear which versions will be useful in the future, so we |
| 25 | +provide two different forms of most inequalities : for `ℝ` and for |
| 26 | +`ℝ≥0`. For the AM-GM inequality we also prove special cases for `n=2` |
| 27 | +and `n=3`. |
| 28 | +-/ |
| 29 | + |
| 30 | +universes u v |
| 31 | + |
| 32 | +open real finset |
| 33 | +open_locale classical nnreal |
| 34 | + |
| 35 | +variables {ι : Type u} (s : finset ι) |
| 36 | + |
| 37 | +/-- Geometric mean is less than or equal to the arithmetic mean, weighted version |
| 38 | +for functions on `finset`s. -/ |
| 39 | +theorem real.am_gm_weighted (w z : ι → ℝ) |
| 40 | + (hw : ∀ i ∈ s, 0 ≤ w i) (hw' : s.sum w = 1) (hz : ∀ i ∈ s, 0 ≤ z i) : |
| 41 | + s.prod (λ i, (z i) ^ (w i)) ≤ s.sum (λ i, w i * z i) := |
| 42 | +begin |
| 43 | + let s' := s.filter (λ i, w i ≠ 0), |
| 44 | + rw [← sum_filter_ne_zero] at hw', |
| 45 | + suffices : s'.prod (λ i, (z i) ^ (w i)) ≤ s'.sum (λ i, w i * z i), |
| 46 | + { have A : ∀ i ∈ s, i ∉ s' → w i = 0, |
| 47 | + { intros i hi hi', |
| 48 | + simpa only [hi, mem_filter, ne.def, true_and, not_not] using hi' }, |
| 49 | + have B : ∀ i ∈ s, i ∉ s' → (z i) ^ (w i) = 1, |
| 50 | + from λ i hi hi', by rw [A i hi hi', rpow_zero], |
| 51 | + have C : ∀ i ∈ s, i ∉ s' → w i * z i = 0, |
| 52 | + from λ i hi hi', by rw [A i hi hi', zero_mul], |
| 53 | + rwa [← prod_subset s.filter_subset B, ← sum_subset s.filter_subset C] }, |
| 54 | + have A : ∀ i ∈ s', i ∈ s ∧ w i ≠ 0, from λ i hi, mem_filter.1 hi, |
| 55 | + replace hz : ∀ i ∈ s', 0 ≤ z i := λ i hi, hz i (A i hi).1, |
| 56 | + replace hw : ∀ i ∈ s', 0 ≤ w i := λ i hi, hw i (A i hi).1, |
| 57 | + by_cases B : ∃ i ∈ s', z i = 0, |
| 58 | + { rcases B with ⟨i, imem, hzi⟩, |
| 59 | + rw [prod_eq_zero imem], |
| 60 | + { exact sum_nonneg (λ j hj, mul_nonneg (hw j hj) (hz j hj)) }, |
| 61 | + { rw hzi, exact zero_rpow (A i imem).2 } }, |
| 62 | + { replace hz : ∀ i ∈ s', 0 < z i, |
| 63 | + from λ i hi, lt_of_le_of_ne (hz _ hi) (λ h, B ⟨i, hi, h.symm⟩), |
| 64 | + have := convex_on_exp.map_sum_le hw hw' (λ i _, set.mem_univ $ log (z i)), |
| 65 | + simp only [exp_sum, (∘), smul_eq_mul, mul_comm (w _) (log _)] at this, |
| 66 | + convert this using 1, |
| 67 | + { exact prod_congr rfl (λ i hi, rpow_def_of_pos (hz i hi) _) }, |
| 68 | + { exact sum_congr rfl (λ i hi, congr_arg _ (exp_log $ hz i hi).symm) } } |
| 69 | +end |
| 70 | + |
| 71 | +theorem nnreal.am_gm_weighted (w z : ι → ℝ≥0) (hw' : s.sum w = 1) : |
| 72 | + s.prod (λ i, (z i:ℝ) ^ (w i:ℝ)) ≤ s.sum (λ i, w i * z i) := |
| 73 | +begin |
| 74 | + refine real.am_gm_weighted _ _ _ (λ i _, (w i).coe_nonneg) _ (λ i _, (z i).coe_nonneg), |
| 75 | + assumption_mod_cast |
| 76 | +end |
| 77 | + |
| 78 | +theorem nnreal.am_gm2_weighted (w₁ w₂ p₁ p₂ : ℝ≥0) (hw : w₁ + w₂ = 1) : |
| 79 | + (p₁:ℝ) ^ (w₁:ℝ) * p₂ ^ (w₂:ℝ) ≤ w₁ * p₁ + w₂ * p₂ := |
| 80 | +begin |
| 81 | + have := nnreal.am_gm_weighted (univ : finset (fin 2)) (fin.cons w₁ $ fin.cons w₂ fin_zero_elim) |
| 82 | + (fin.cons p₁ $ fin.cons p₂ $ fin_zero_elim), |
| 83 | + simp only [fin.prod_univ_succ, fin.sum_univ_succ, fin.prod_univ_zero, fin.sum_univ_zero, |
| 84 | + fin.cons_succ, fin.cons_zero, add_zero, mul_one] at this, |
| 85 | + exact this hw |
| 86 | +end |
| 87 | + |
| 88 | +theorem real.am_gm2_weighted {w₁ w₂ p₁ p₂ : ℝ} (hw₁ : 0 ≤ w₁) (hw₂ : 0 ≤ w₂) |
| 89 | + (hp₁ : 0 ≤ p₁) (hp₂ : 0 ≤ p₂) (hw : w₁ + w₂ = 1) : |
| 90 | + p₁ ^ w₁ * p₂ ^ w₂ ≤ w₁ * p₁ + w₂ * p₂ := |
| 91 | +nnreal.am_gm2_weighted ⟨w₁, hw₁⟩ ⟨w₂, hw₂⟩ ⟨p₁, hp₁⟩ ⟨p₂, hp₂⟩ $ nnreal.coe_eq.1 $ by assumption |
| 92 | + |
| 93 | +theorem nnreal.am_gm3_weighted (w₁ w₂ w₃ p₁ p₂ p₃ : ℝ≥0) (hw : w₁ + w₂ + w₃ = 1) : |
| 94 | + (p₁:ℝ) ^ (w₁:ℝ) * p₂ ^ (w₂:ℝ) * p₃ ^ (w₃:ℝ) ≤ w₁ * p₁ + w₂ * p₂ + w₃ * p₃:= |
| 95 | +begin |
| 96 | + have := nnreal.am_gm_weighted (univ : finset (fin 3)) |
| 97 | + (fin.cons w₁ $ fin.cons w₂ $ fin.cons w₃ fin_zero_elim) |
| 98 | + (fin.cons p₁ $ fin.cons p₂ $ fin.cons p₃ fin_zero_elim), |
| 99 | + simp only [fin.prod_univ_succ, fin.sum_univ_succ, fin.prod_univ_zero, fin.sum_univ_zero, |
| 100 | + fin.cons_succ, fin.cons_zero, add_zero, mul_one, (add_assoc _ _ _).symm, |
| 101 | + (mul_assoc _ _ _).symm] at this, |
| 102 | + exact this hw |
| 103 | +end |
| 104 | + |
| 105 | +/-- Young's inequality, `ℝ≥0` version -/ |
| 106 | +theorem nnreal.young_inequality (a b : ℝ≥0) {p q : ℝ≥0} (hp : 1 < p) (hq : 1 < q) |
| 107 | + (hpq : 1/p + 1/q = 1) : |
| 108 | + (a * b:ℝ) ≤ (a:ℝ)^(p:ℝ) / p + (b:ℝ)^(q:ℝ) / q := |
| 109 | +begin |
| 110 | + have := nnreal.am_gm2_weighted (1/p) (1/q) ⟨(a:ℝ)^(p:ℝ), rpow_nonneg_of_nonneg a.coe_nonneg _⟩ |
| 111 | + ⟨(b:ℝ)^(q:ℝ), rpow_nonneg_of_nonneg b.coe_nonneg _⟩ hpq, |
| 112 | + simp only [nnreal.coe_mk, nnreal.coe_div, nnreal.coe_one, one_div_eq_inv, |
| 113 | + (rpow_mul (nnreal.coe_nonneg _) _ _).symm, div_eq_inv_mul.symm] at this, |
| 114 | + rwa [mul_inv_cancel, mul_inv_cancel, rpow_one, rpow_one] at this; |
| 115 | + refine ne_of_gt (lt_trans zero_lt_one _); assumption |
| 116 | +end |
| 117 | + |
| 118 | +/-- Young's inequality, `ℝ` version -/ |
| 119 | +theorem real.young_inequality {a b : ℝ} (ha : 0 ≤ a) (hb : 0 ≤ b) |
| 120 | + {p q : ℝ} (hp : 1 < p) (hq : 1 < q) (hpq : 1/p + 1/q = 1) : |
| 121 | + a * b ≤ a^p / p + b^q / q := |
| 122 | +@nnreal.young_inequality ⟨a, ha⟩ ⟨b, hb⟩ ⟨p, le_trans zero_le_one (le_of_lt hp)⟩ |
| 123 | + ⟨q, le_trans zero_le_one (le_of_lt hq)⟩ hp hq (nnreal.coe_eq.1 hpq) |
| 124 | + |
| 125 | +theorem real.pow_am_le_am_pow (w z : ι → ℝ) (hw : ∀ i ∈ s, 0 ≤ w i) |
| 126 | + (hw' : s.sum w = 1) (hz : ∀ i ∈ s, 0 ≤ z i) (n : ℕ) : |
| 127 | + (s.sum (λ i, w i * z i)) ^ n ≤ s.sum (λ i, w i * z i ^ n) := |
| 128 | +(convex_on_pow n).map_sum_le hw hw' hz |
| 129 | + |
| 130 | +theorem nnreal.pow_am_le_am_pow (w z : ι → ℝ≥0) (hw' : s.sum w = 1) (n : ℕ) : |
| 131 | + (s.sum (λ i, w i * z i)) ^ n ≤ s.sum (λ i, w i * z i ^ n) := |
| 132 | +begin |
| 133 | + rw [← nnreal.coe_le], |
| 134 | + push_cast, |
| 135 | + refine (convex_on_pow n).map_sum_le (λ i _, (w i).coe_nonneg) _ (λ i _, (z i).coe_nonneg), |
| 136 | + assumption_mod_cast |
| 137 | +end |
| 138 | + |
| 139 | +theorem real.pow_am_le_am_pow_of_even (w z : ι → ℝ) (hw : ∀ i ∈ s, 0 ≤ w i) |
| 140 | + (hw' : s.sum w = 1) {n : ℕ} (hn : n.even) : |
| 141 | + (s.sum (λ i, w i * z i)) ^ n ≤ s.sum (λ i, w i * z i ^ n) := |
| 142 | +(convex_on_pow_of_even hn).map_sum_le hw hw' (λ _ _, trivial) |
| 143 | + |
| 144 | +theorem real.fpow_am_le_am_fpow (w z : ι → ℝ) (hw : ∀ i ∈ s, 0 ≤ w i) |
| 145 | + (hw' : s.sum w = 1) (hz : ∀ i ∈ s, 0 < z i) (m : ℤ) : |
| 146 | + (s.sum (λ i, w i * z i)) ^ m ≤ s.sum (λ i, w i * z i ^ m) := |
| 147 | +(convex_on_fpow m).map_sum_le hw hw' hz |
0 commit comments