Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit f0ceb6b

Browse files
committed
feat(analysis/mean_inequalities): add young_inequality for nnreal and ennreal with real exponents (#5242)
The existing young_inequality for nnreal has nnreal exponents. This adds a version with real exponents with the is_conjugate_exponent property, and a similar version for ennreal with real exponents. Co-authored-by: Rémy Degenne <remydegenne@gmail.com>
1 parent 914d2b1 commit f0ceb6b

File tree

3 files changed

+55
-1
lines changed

3 files changed

+55
-1
lines changed

src/analysis/mean_inequalities.lean

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,15 @@ theorem young_inequality (a b : ℝ≥0) {p q : ℝ≥0} (hp : 1 < p) (hpq : 1 /
292292
a * b ≤ a^(p:ℝ) / p + b^(q:ℝ) / q :=
293293
real.young_inequality_of_nonneg a.coe_nonneg b.coe_nonneg ⟨hp, nnreal.coe_eq.2 hpq⟩
294294

295+
/-- Young's inequality, `ℝ≥0` version with real conjugate exponents. -/
296+
theorem young_inequality_real (a b : ℝ≥0) {p q : ℝ} (hpq : p.is_conjugate_exponent q) :
297+
a * b ≤ a ^ p / nnreal.of_real p + b ^ q / nnreal.of_real q :=
298+
begin
299+
nth_rewrite 0 ←coe_of_real p hpq.nonneg,
300+
nth_rewrite 0 ←coe_of_real q hpq.symm.nonneg,
301+
exact young_inequality a b hpq.one_lt_nnreal hpq.inv_add_inv_conj_nnreal,
302+
end
303+
295304
/-- Hölder inequality: the scalar product of two functions is bounded by the product of their
296305
`L^p` and `L^q` norms when `p` and `q` are conjugate exponents. Version for sums over finite sets,
297306
with `ℝ≥0`-valued functions. -/
@@ -444,6 +453,22 @@ end real
444453

445454
namespace ennreal
446455

456+
/-- Young's inequality, `ennreal` version with real conjugate exponents. -/
457+
theorem young_inequality (a b : ennreal) {p q : ℝ} (hpq : p.is_conjugate_exponent q) :
458+
a * b ≤ a ^ p / ennreal.of_real p + b ^ q / ennreal.of_real q :=
459+
begin
460+
by_cases h : a = ⊤ ∨ b = ⊤,
461+
{ refine le_trans le_top (le_of_eq _),
462+
repeat {rw ennreal.div_def},
463+
cases h; rw h; simp [h, hpq.pos, hpq.symm.pos], },
464+
push_neg at h, -- if a ≠ ⊤ and b ≠ ⊤, use the nnreal version: nnreal.young_inequality_real
465+
rw [←coe_to_nnreal h.left, ←coe_to_nnreal h.right, ←coe_mul,
466+
coe_rpow_of_nonneg _ hpq.nonneg, coe_rpow_of_nonneg _ hpq.symm.nonneg, ennreal.of_real,
467+
ennreal.of_real, ←@coe_div (nnreal.of_real p) _ (by simp [hpq.pos]),
468+
←@coe_div (nnreal.of_real q) _ (by simp [hpq.symm.pos]), ←coe_add, coe_le_coe],
469+
exact nnreal.young_inequality_real a.to_nnreal b.to_nnreal hpq,
470+
end
471+
447472
variables (f g : ι → ennreal) {p q : ℝ}
448473

449474
/-- Hölder inequality: the scalar product of two functions is bounded by the product of their

src/data/real/conjugate_exponents.lean

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ Copyright (c) 2020 Sébastien Gouëzel. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Sébastien Gouëzel, Yury Kudryashov
55
-/
6-
import data.real.basic
6+
import data.real.nnreal
77

88
/-!
99
# Real conjugate exponents
@@ -81,6 +81,16 @@ by simpa only [sub_mul, sub_eq_iff_eq_add, one_mul] using h.sub_one_mul_conj
8181
{ one_lt := by { rw [h.conj_eq], exact (one_lt_div h.sub_one_pos).mpr (sub_one_lt p) },
8282
inv_add_inv_conj := by simpa [add_comm] using h.inv_add_inv_conj }
8383

84+
lemma one_lt_nnreal : 1 < nnreal.of_real p :=
85+
begin
86+
rw [←nnreal.of_real_one, nnreal.of_real_lt_of_real_iff h.pos],
87+
exact h.one_lt,
88+
end
89+
90+
lemma inv_add_inv_conj_nnreal : 1 / nnreal.of_real p + 1 / nnreal.of_real q = 1 :=
91+
by rw [←nnreal.of_real_one, ←nnreal.of_real_div' h.nonneg, ←nnreal.of_real_div' h.symm.nonneg,
92+
←nnreal.of_real_add h.one_div_nonneg h.symm.one_div_nonneg, h.inv_add_inv_conj]
93+
8494
end is_conjugate_exponent
8595

8696
lemma is_conjugate_exponent_iff {p q : ℝ} (h : 1 < p) :

src/data/real/nnreal.lean

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,25 @@ by simpa using @div_eq_div_iff a b c 1 hb one_ne_zero
658658
@[field_simps] lemma eq_div_iff {a b c : ℝ≥0} (hb : b ≠ 0) : c = a / b ↔ c * b = a :=
659659
by simpa using @div_eq_div_iff c 1 a b one_ne_zero hb
660660

661+
lemma of_real_inv {x : ℝ} :
662+
nnreal.of_real x⁻¹ = (nnreal.of_real x)⁻¹ :=
663+
begin
664+
by_cases hx : 0 ≤ x,
665+
{ nth_rewrite 0 ← coe_of_real x hx,
666+
rw [←nnreal.coe_inv, of_real_coe], },
667+
{ have hx' := le_of_not_ge hx,
668+
rw [of_real_eq_zero.mpr hx', inv_zero, of_real_eq_zero.mpr (inv_nonpos.mpr hx')], },
669+
end
670+
671+
lemma of_real_div {x y : ℝ} (hx : 0 ≤ x) :
672+
nnreal.of_real (x / y) = nnreal.of_real x / nnreal.of_real y :=
673+
by rw [div_def, ←of_real_inv, ←of_real_mul hx, div_eq_mul_inv]
674+
675+
lemma of_real_div' {x y : ℝ} (hy : 0 ≤ y) :
676+
nnreal.of_real (x / y) = nnreal.of_real x / nnreal.of_real y :=
677+
by rw [div_def, ←of_real_inv, mul_comm, ←@of_real_mul y⁻¹ _ (by simp [hy]), mul_comm,
678+
div_eq_mul_inv]
679+
661680
end inv
662681

663682
section pow

0 commit comments

Comments
 (0)