-
Notifications
You must be signed in to change notification settings - Fork 26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Proof of Young's convolution inequality #231
Open
js2357
wants to merge
13
commits into
fpvandoorn:master
Choose a base branch
from
js2357:Young
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+672
−0
Open
Changes from all commits
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
9d76798
Proof of Young's convolution inequality
js2357 39298c7
Minor fix
js2357 b261abb
Merge branch 'fpvandoorn:master' into Young
js2357 984ad87
Change ennnorms to enorms
js2357 c2c6dbc
Remove unused import
js2357 0ad4068
Use enorm_ne_top
js2357 836ad3b
Use ENNReal.IsConjExponent
js2357 a4017bb
Generalize Young's convolution inequality
js2357 4640f80
Generalize Young's convolution inequality using ‖L‖ₑ
js2357 f120b62
Remove unnecessary assumption [SecondCountableTopology E']
js2357 2e93e23
Typo fixes
js2357 ea9d315
Split proof into multiple files
js2357 6de5b7e
Shorten proof of eLpNorm_convolution_le''
js2357 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
import Mathlib.Analysis.Convolution | ||
|
||
open scoped Convolution | ||
|
||
namespace MeasureTheory | ||
|
||
universe u𝕜 uG uE uE' uF | ||
|
||
variable {𝕜 : Type u𝕜} {G : Type uG} {E : Type uE} {E' : Type uE'} {F : Type uF} | ||
|
||
variable [NormedAddCommGroup E] [NormedAddCommGroup E'] [NormedAddCommGroup F] | ||
{f : G → E} {g : G → E'} | ||
|
||
variable [NontriviallyNormedField 𝕜] | ||
|
||
variable [NormedSpace 𝕜 E] [NormedSpace 𝕜 E'] [NormedSpace 𝕜 F] | ||
variable {L : E →L[𝕜] E' →L[𝕜] F} | ||
|
||
variable [MeasurableSpace G] | ||
|
||
/-- Special case of ``convolution_flip` when `L` is symmetric. -/ | ||
theorem convolution_symm {f : G → E} {g : G → E} (L : E →L[𝕜] E →L[𝕜] F) | ||
(hL : ∀ (x y : E), L x y = L y x) [NormedSpace ℝ F] [AddCommGroup G] | ||
{μ : Measure G} [μ.IsAddLeftInvariant] [μ.IsNegInvariant] [MeasurableNeg G] [MeasurableAdd G] : | ||
f ⋆[L, μ] g = g ⋆[L, μ] f := by | ||
suffices L.flip = L by rw [← convolution_flip, this] | ||
ext x y | ||
exact hL y x | ||
|
||
/-- The convolution of two a.e. strongly measurable functions is a.e. strongly measurable. -/ | ||
theorem aestronglyMeasurable_convolution [NormedSpace ℝ F] [AddGroup G] [MeasurableAdd₂ G] | ||
[MeasurableNeg G] {μ : Measure G} [SigmaFinite μ] [μ.IsAddRightInvariant] | ||
(hf : AEStronglyMeasurable f μ) (hg : AEStronglyMeasurable g μ) : | ||
AEStronglyMeasurable (f ⋆[L, μ] g) μ := by | ||
suffices AEStronglyMeasurable (fun ⟨x, t⟩ ↦ g (x - t)) (μ.prod μ) from | ||
(L.aestronglyMeasurable_comp₂ hf.snd this).integral_prod_right' | ||
refine hg.comp_quasiMeasurePreserving <| QuasiMeasurePreserving.prod_of_left measurable_sub ?_ | ||
apply Filter.Eventually.of_forall (fun x ↦ ?_) | ||
exact ⟨measurable_sub_const x, by rw [map_sub_right_eq_self μ x]⟩ | ||
|
||
/-- This implies both of the following theorems `convolutionExists_of_memℒp_memℒp` and | ||
`enorm_convolution_le_eLpNorm_mul_eLpNorm`. -/ | ||
lemma lintegral_enorm_convolution_integrand_le_eLpNorm_mul_eLpNorm [NormedSpace ℝ F] [AddGroup G] | ||
[MeasurableAdd₂ G] [MeasurableNeg G] {μ : Measure G} [SFinite μ] [μ.IsNegInvariant] | ||
[μ.IsAddLeftInvariant] {p q : ENNReal} (hpq : p.IsConjExponent q) | ||
(hL : ∀ (x y : G), ‖L (f x) (g y)‖ ≤ ‖f x‖ * ‖g y‖) | ||
(hf : AEStronglyMeasurable f μ) (hg : AEStronglyMeasurable g μ) (x₀ : G) : | ||
∫⁻ (a : G), ‖(L (f a)) (g (x₀ - a))‖ₑ ∂μ ≤ eLpNorm f p μ * eLpNorm g q μ := by | ||
rw [eLpNorm_comp_measurePreserving (p := q) hg (μ.measurePreserving_sub_left x₀) |>.symm] | ||
replace hpq : 1 / 1 = 1 / p + 1 /q := by simpa using hpq.inv_add_inv_conj.symm | ||
have hg' : AEStronglyMeasurable (g <| x₀ - ·) μ := | ||
hg.comp_quasiMeasurePreserving <| quasiMeasurePreserving_sub_left μ x₀ | ||
have hL' : ∀ᵐ (x : G) ∂μ, ‖L (f x) (g (x₀ - x))‖ ≤ ‖f x‖ * ‖g (x₀ - x)‖ := | ||
Filter.Eventually.of_forall (fun x ↦ hL x (x₀ - x)) | ||
simpa [eLpNorm, eLpNorm'] using eLpNorm_le_eLpNorm_mul_eLpNorm'_of_norm hf hg' (L ·) hL' hpq | ||
|
||
/-- If `Memℒp f p μ` and `Memℒp g q μ`, where `p` and `q` are Hölder conjugates, then the | ||
convolution of `f` and `g` exists everywhere. -/ | ||
theorem convolutionExists_of_memℒp_memℒp [NormedSpace ℝ F] [AddGroup G] [MeasurableAdd₂ G] | ||
[MeasurableNeg G] (μ : Measure G) [SFinite μ] [μ.IsNegInvariant] [μ.IsAddLeftInvariant] | ||
[μ.IsAddRightInvariant] {p q : ENNReal} (hpq : p.IsConjExponent q) | ||
(hL : ∀ (x y : G), ‖L (f x) (g y)‖ ≤ ‖f x‖ * ‖g y‖) (hf : AEStronglyMeasurable f μ) | ||
(hg : AEStronglyMeasurable g μ) (hfp : Memℒp f p μ) (hgq : Memℒp g q μ) : | ||
ConvolutionExists f g L μ := by | ||
refine fun x ↦ ⟨AEStronglyMeasurable.convolution_integrand_snd L hf hg x, ?_⟩ | ||
apply lt_of_le_of_lt (lintegral_enorm_convolution_integrand_le_eLpNorm_mul_eLpNorm hpq hL hf hg x) | ||
exact ENNReal.mul_lt_top hfp.eLpNorm_lt_top hgq.eLpNorm_lt_top | ||
|
||
/-- If `p` and `q` are Hölder conjugates, then the convolution of `f` and `g` is bounded everywhere | ||
by `eLpNorm f p μ * eLpNorm g q μ`. -/ | ||
theorem enorm_convolution_le_eLpNorm_mul_eLpNorm [NormedSpace ℝ F] [AddGroup G] | ||
[MeasurableAdd₂ G] [MeasurableNeg G] (μ : Measure G) [SFinite μ] [μ.IsNegInvariant] | ||
[μ.IsAddLeftInvariant] [μ.IsAddRightInvariant] {p q : ENNReal} (hpq : p.IsConjExponent q) | ||
(hL : ∀ (x y : G), ‖L (f x) (g y)‖ ≤ ‖f x‖ * ‖g y‖) | ||
(hf : AEStronglyMeasurable f μ) (hg : AEStronglyMeasurable g μ) (x₀ : G) : | ||
‖(f ⋆[L, μ] g) x₀‖ₑ ≤ eLpNorm f p μ * eLpNorm g q μ := | ||
(enorm_integral_le_lintegral_enorm _).trans <| | ||
lintegral_enorm_convolution_integrand_le_eLpNorm_mul_eLpNorm hpq hL hf hg x₀ | ||
|
||
end MeasureTheory |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
import Mathlib.Data.Real.ConjExponents | ||
|
||
open scoped ENNReal | ||
|
||
namespace ENNReal | ||
namespace IsConjExponent | ||
|
||
variable {p q : ℝ≥0∞} (h : p.IsConjExponent q) | ||
|
||
section | ||
include h | ||
|
||
lemma conjExponent_toReal (hp : p ≠ ∞) (hq : q ≠ ∞) : p.toReal.IsConjExponent q.toReal := by | ||
constructor | ||
· rw [← ENNReal.ofReal_lt_iff_lt_toReal one_pos.le hp, ofReal_one] | ||
exact h.one_le.lt_of_ne (fun p_eq_1 ↦ hq (by simpa [p_eq_1] using h.conj_eq)) | ||
· rw [← toReal_inv, ← toReal_inv, ← toReal_add, h.inv_add_inv_conj, ENNReal.toReal_eq_one_iff] | ||
· exact ENNReal.inv_ne_top.mpr h.ne_zero | ||
· exact ENNReal.inv_ne_top.mpr h.symm.ne_zero | ||
|
||
end | ||
end IsConjExponent | ||
end ENNReal |
41 changes: 41 additions & 0 deletions
41
Carleson/ToMathlib/MeasureTheory/Function/LpSeminorm/Basic.lean
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
import Mathlib.MeasureTheory.Function.LpSeminorm.Basic | ||
import Mathlib.MeasureTheory.Constructions.BorelSpace.Basic | ||
import Mathlib.Analysis.Normed.Group.Basic | ||
|
||
open MeasureTheory | ||
open scoped ENNReal | ||
|
||
variable {α ε E F G : Type*} {m m0 : MeasurableSpace α} {p : ℝ≥0∞} {q : ℝ} {μ ν : Measure α} | ||
[NormedAddCommGroup E] [NormedAddCommGroup F] [NormedAddCommGroup G] [ENorm ε] | ||
|
||
namespace MeasureTheory | ||
|
||
section MapMeasure | ||
|
||
variable {β : Type*} {mβ : MeasurableSpace β} {f : α → β} {g : β → E} | ||
|
||
theorem eLpNormEssSup_map_measure' [MeasurableSpace E] [OpensMeasurableSpace E] | ||
(hg : AEMeasurable g (Measure.map f μ)) (hf : AEMeasurable f μ) : | ||
eLpNormEssSup g (Measure.map f μ) = eLpNormEssSup (g ∘ f) μ := | ||
essSup_map_measure hg.enorm hf | ||
|
||
theorem eLpNorm_map_measure' [MeasurableSpace E] [OpensMeasurableSpace E] | ||
(hg : AEMeasurable g (Measure.map f μ)) (hf : AEMeasurable f μ) : | ||
eLpNorm g p (Measure.map f μ) = eLpNorm (g ∘ f) p μ := by | ||
by_cases hp_zero : p = 0 | ||
· simp only [hp_zero, eLpNorm_exponent_zero] | ||
by_cases hp_top : p = ∞ | ||
· simp_rw [hp_top, eLpNorm_exponent_top] | ||
exact eLpNormEssSup_map_measure' hg hf | ||
simp_rw [eLpNorm_eq_lintegral_rpow_enorm hp_zero hp_top] | ||
rw [lintegral_map' (hg.enorm.pow_const p.toReal) hf] | ||
rfl | ||
|
||
theorem eLpNorm_comp_measurePreserving' {ν : MeasureTheory.Measure β} [MeasurableSpace E] | ||
[OpensMeasurableSpace E] (hg : AEMeasurable g ν) (hf : MeasurePreserving f μ ν) : | ||
eLpNorm (g ∘ f) p μ = eLpNorm g p ν := | ||
Eq.symm <| hf.map_eq ▸ eLpNorm_map_measure' (hf.map_eq ▸ hg) hf.aemeasurable | ||
|
||
end MapMeasure | ||
|
||
end MeasureTheory |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
import Mathlib.MeasureTheory.Group.LIntegral | ||
|
||
namespace MeasureTheory | ||
|
||
open Measure | ||
open scoped ENNReal | ||
|
||
variable {G : Type*} [MeasurableSpace G] {μ : Measure G} | ||
|
||
section MeasurableInv | ||
variable [Group G] [MeasurableInv G] | ||
|
||
/-- If `μ` is invariant under inversion, then `∫⁻ x, f x ∂μ` is unchanged by replacing | ||
`x` with `x⁻¹` -/ | ||
@[to_additive | ||
"If `μ` is invariant under negation, then `∫⁻ x, f x ∂μ` is unchanged by replacing `x` with `-x`"] | ||
theorem lintegral_inv_eq_self [μ.IsInvInvariant] (f : G → ℝ≥0∞) : | ||
∫⁻ (x : G), f x⁻¹ ∂μ = ∫⁻ (x : G), f x ∂μ := by | ||
simpa using (lintegral_map_equiv f (μ := μ) <| MeasurableEquiv.inv G).symm | ||
|
||
end MeasurableInv | ||
|
||
section MeasurableMul | ||
|
||
variable [Group G] [MeasurableMul G] | ||
|
||
@[to_additive] | ||
theorem lintegral_div_left_eq_self [IsMulLeftInvariant μ] [MeasurableInv G] [IsInvInvariant μ] | ||
(f : G → ℝ≥0∞) (g : G) : (∫⁻ x, f (g / x) ∂μ) = ∫⁻ x, f x ∂μ := by | ||
simp_rw [div_eq_mul_inv, lintegral_inv_eq_self (f <| g * ·), lintegral_mul_left_eq_self] | ||
|
||
end MeasurableMul | ||
|
||
end MeasureTheory |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
import Mathlib.MeasureTheory.Integral.Lebesgue | ||
|
||
open ENNReal | ||
|
||
namespace MeasureTheory | ||
|
||
open SimpleFunc | ||
|
||
/-- Generalization of `MeasureTheory.lintegral_eq_iSup_eapprox_lintegral` assuming a.e. | ||
measurability of `f` -/ | ||
theorem lintegral_eq_iSup_eapprox_lintegral' {α : Type*} {m : MeasurableSpace α} {μ : Measure α} | ||
{f : α → ENNReal} (hf : AEMeasurable f μ) : | ||
∫⁻ (a : α), f a ∂μ = ⨆ (n : ℕ), (eapprox (hf.mk f) n).lintegral μ := calc | ||
_ = ∫⁻ a, hf.mk f a ∂μ := lintegral_congr_ae hf.ae_eq_mk | ||
_ = ∫⁻ a, ⨆ n, (eapprox (hf.mk f) n : α → ℝ≥0∞) a ∂μ := by | ||
congr; ext a; rw [iSup_eapprox_apply hf.measurable_mk] | ||
_ = ⨆ n, ∫⁻ a, eapprox (hf.mk f) n a ∂μ := | ||
lintegral_iSup (fun _ ↦ SimpleFunc.measurable _) (fun _ _ h ↦ monotone_eapprox (hf.mk f) h) | ||
_ = ⨆ n, (eapprox (hf.mk f) n).lintegral μ := by simp_rw [lintegral_eq_lintegral] | ||
|
||
/-- Generalization of `MeasureTheory.lintegral_comp` assuming a.e. measurability of `f` and `g` -/ | ||
theorem lintegral_comp' {α : Type*} {β : Type*} {m : MeasurableSpace α} {μ : Measure α} | ||
[MeasurableSpace β] {f : β → ENNReal} {g : α → β} (hf : AEMeasurable f (μ.map g)) | ||
(hg : AEMeasurable g μ) : lintegral μ (f ∘ g) = ∫⁻ a, f a ∂μ.map g := by | ||
rw [μ.map_congr hg.ae_eq_mk] at hf ⊢ | ||
calc ∫⁻ a, (f ∘ g) a ∂μ | ||
_ = ∫⁻ a, (hf.mk f ∘ hg.mk g) a ∂μ := by | ||
rw [lintegral_congr_ae (hg.ae_eq_mk.fun_comp f)] | ||
exact lintegral_congr_ae (ae_of_ae_map hg.measurable_mk.aemeasurable hf.ae_eq_mk) | ||
_ = ∫⁻ a, hf.mk f a ∂μ.map (hg.mk g) := lintegral_comp hf.measurable_mk hg.measurable_mk | ||
_ = ∫⁻ a, f a ∂μ.map (hg.mk g) := lintegral_congr_ae hf.ae_eq_mk.symm | ||
|
||
end MeasureTheory |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.