Skip to content

Commit 8137ca9

Browse files
dennjReemMelamed
authored andcommitted
refactor(Analysis/Fourier/Convolution): drop continuity hypotheses from the convolution theorems (leanprover-community#40583)
drop continuity hypotheses from the convolution theorems
1 parent 756e9ca commit 8137ca9

2 files changed

Lines changed: 23 additions & 54 deletions

File tree

Mathlib/Analysis/Fourier/Convolution.lean

Lines changed: 22 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -41,35 +41,19 @@ variable [NontriviallyNormedField 𝕜] [NormedAddCommGroup E]
4141
[InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E]
4242
[NormedSpace 𝕜 F₁] [NormedSpace 𝕜 F₂] [NormedSpace 𝕜 F₃]
4343

44-
/-- The norm of the integrant of the convolution is integrable if the functions are integrable
45-
and continuous. -/
44+
/-- The norm of the integrand of the convolution is integrable if the functions are integrable. -/
4645
theorem integrable_prod_sub (B : F₁ →L[𝕜] F₂ →L[𝕜] F₃) {f₁ : E → F₁} {f₂ : E → F₂}
47-
(hf₁ : Integrable f₁) (hf₂ : Integrable f₂) (hf₁' : Continuous f₁) (hf₂' : Continuous f₂) :
46+
(hf₁ : Integrable f₁) (hf₂ : Integrable f₂) :
4847
Integrable (fun (p : E × E) ↦ ‖B‖ * (‖f₁ (p.1 - p.2)‖ * ‖f₂ p.2‖)) (volume.prod volume) := by
49-
apply Integrable.const_mul
50-
rw [integrable_prod_iff' (by fun_prop)]
51-
constructor
52-
· filter_upwards with x
53-
exact (hf₁.comp_sub_right x).norm.mul_const _
54-
have : Integrable (fun x ↦ ((∫ y, ‖f₁ y‖) * ‖f₂ x‖)) := by
55-
apply hf₂.norm.bdd_mul (by fun_prop) (c := ‖(∫ y, ‖f₁ y‖)‖)
56-
filter_upwards with; rfl
57-
convert! this using 1
58-
ext x
59-
simp_rw [norm_mul, norm_norm]
60-
rw [integral_mul_const]
61-
congr 1
62-
convert! integral_sub_right_eq_self _ x (μ := volume)
63-
rfl
48+
simpa [mul_comm] using (hf₂.norm.convolution_integrand (.mul ℝ ℝ) hf₁.norm).const_mul ‖B‖
6449

6550
open FourierTransform
6651

6752
variable [NormedSpace ℂ F₃]
6853

6954
/-- Calculate the Fourier transform of the convolution as a symmetric integral. -/
7055
theorem fourier_bilin_convolution_eq_integral (B : F₁ →L[𝕜] F₂ →L[𝕜] F₃) {f₁ : E → F₁} {f₂ : E → F₂}
71-
(hf₁ : Integrable f₁) (hf₂ : Integrable f₂) (hf₁' : Continuous f₁) (hf₂' : Continuous f₂)
72-
(ξ : E) :
56+
(hf₁ : Integrable f₁) (hf₂ : Integrable f₂) (ξ : E) :
7357
𝓕 (f₁ ⋆[B] f₂) ξ = ∫ y, ∫ x, 𝐞 (-inner ℝ (y + x) ξ) • B (f₁ x) (f₂ y) := calc
7458
_ = 𝓕 (f₂ ⋆[B.flip] f₁) ξ := by
7559
rw [convolution_flip]
@@ -80,11 +64,11 @@ theorem fourier_bilin_convolution_eq_integral (B : F₁ →L[𝕜] F₂ →L[
8064
simp_rw [Circle.smul_def, integral_smul]
8165
_ = ∫ y, ∫ x, 𝐞 (-inner ℝ x ξ) • B (f₁ (x - y)) (f₂ y) := by
8266
refine integral_integral_swap ?_
83-
apply (integrable_prod_sub B hf₁ hf₂ hf₁' hf₂').mono (by measurability)
84-
filter_upwards with ⟨y, x⟩
85-
have : ‖(B (f₁ (y - x))) (f₂ x)‖ ≤ ‖B‖ * (‖f₁ (y - x)‖ * ‖f₂ x‖) := by
86-
grw [B.le_opNorm₂ (f₁ (y - x)) (f₂ x), mul_assoc]
87-
simpa
67+
have hB := hf₂.convolution_integrand B.flip hf₁
68+
refine hB.mono ?_ ?_
69+
· exact continuous_fourierChar.comp (by fun_prop) |>.aestronglyMeasurable.smul
70+
hB.aestronglyMeasurable
71+
· filter_upwards with ⟨x, y⟩ using by simp
8872
_ = ∫ y, ∫ x, 𝐞 (-inner ℝ (y + x) ξ) • B (f₁ x) (f₂ y) := by
8973
congr
9074
ext y
@@ -101,31 +85,18 @@ open ContinuousLinearMap
10185
/-- The Fourier transform of the convolution is given by the bilinear map applied to the Fourier
10286
transform of the individual functions. -/
10387
theorem fourier_bilin_convolution_eq (B : F₁ →L[ℂ] F₂ →L[ℂ] F₃) {f₁ : E → F₁} {f₂ : E → F₂}
104-
(hf₁ : Integrable f₁) (hf₂ : Integrable f₂) (hf₁' : Continuous f₁) (hf₂' : Continuous f₂)
105-
(ξ : E) :
88+
(hf₁ : Integrable f₁) (hf₂ : Integrable f₂) (ξ : E) :
10689
𝓕 (f₁ ⋆[B] f₂) ξ = B (𝓕 f₁ ξ) (𝓕 f₂ ξ) := calc
10790
_ = ∫ y, ∫ x, 𝐞 (-inner ℝ (y + x) ξ) • B (f₁ x) (f₂ y) :=
108-
fourier_bilin_convolution_eq_integral B hf₁ hf₂ hf₁' hf₂' _
91+
fourier_bilin_convolution_eq_integral B hf₁ hf₂ _
10992
_ = ∫ y, ∫ x, 𝐞 (-inner ℝ y ξ) • 𝐞 (-inner ℝ x ξ) • B (f₁ x) (f₂ y) := by
110-
congr
111-
ext y
112-
congr
113-
ext x
114-
rw [smul_smul, ← AddChar.map_add_eq_mul, inner_add_left]
115-
congr
116-
grind
93+
simp_rw [inner_add_left, neg_add, AddChar.map_add_eq_mul, smul_smul]
11794
_ = ∫ y, (∫ x, B (𝐞 (-inner ℝ x ξ) • f₁ x)) (𝐞 (-inner ℝ y ξ) • f₂ y) := by
118-
congr
119-
ext y
120-
simp_rw [Circle.smul_def, map_smul, MeasureTheory.integral_smul]
121-
congr
122-
rw [integral_apply ?_ (f₂ y)]
123-
· simp
124-
have : MeasureTheory.Integrable (fun x ↦ ‖B‖ * ‖f₁ x‖) MeasureTheory.volume :=
125-
hf₁.norm.const_mul _
126-
apply this.mono (by fun_prop)
127-
filter_upwards with x
128-
simpa [← Circle.smul_def] using le_opNorm B (f₁ x)
95+
congr with y
96+
have : Integrable (fun x ↦ (𝐞 (-inner ℝ x ξ) : ℂ) • B (f₁ x)) volume := by
97+
simpa [Circle.smul_def] using
98+
(Real.fourierIntegral_convergent_iff ξ).2 (B.integrable_comp hf₁)
99+
simp [Circle.smul_def, MeasureTheory.integral_smul, integral_apply this (f₂ y)]
129100
_ = B (∫ x, 𝐞 (-inner ℝ x ξ) • f₁ x) (∫ y, 𝐞 (-inner ℝ y ξ) • f₂ y) := by
130101
rw [← integral_comp_comm _ (by simpa using hf₂), ← integral_comp_comm _ (by simpa using hf₁)]
131102

@@ -134,10 +105,9 @@ of the individual functions.
134105
135106
Version for scalar multiplication. -/
136107
theorem fourier_smul_convolution_eq {f₁ : E → ℂ} {f₂ : E → F₁}
137-
(hf₁ : Integrable f₁) (hf₂ : Integrable f₂) (hf₁' : Continuous f₁) (hf₂' : Continuous f₂)
138-
(ξ : E) :
108+
(hf₁ : Integrable f₁) (hf₂ : Integrable f₂) (ξ : E) :
139109
𝓕 (f₁ ⋆[lsmul ℂ ℂ] f₂) ξ = (𝓕 f₁ ξ) • (𝓕 f₂ ξ) :=
140-
fourier_bilin_convolution_eq (lsmul ℂ ℂ) hf₁ hf₂ hf₁' hf₂' ξ
110+
fourier_bilin_convolution_eq (lsmul ℂ ℂ) hf₁ hf₂ ξ
141111

142112
variable [NormedRing R] [NormedSpace ℂ R] [IsScalarTower ℂ R R] [SMulCommClass ℂ R R]
143113
[CompleteSpace R]
@@ -147,10 +117,9 @@ of the individual functions.
147117
148118
Version for multiplication. -/
149119
theorem fourier_mul_convolution_eq {f₁ : E → R} {f₂ : E → R}
150-
(hf₁ : Integrable f₁) (hf₂ : Integrable f₂) (hf₁' : Continuous f₁) (hf₂' : Continuous f₂)
151-
(ξ : E) :
120+
(hf₁ : Integrable f₁) (hf₂ : Integrable f₂) (ξ : E) :
152121
𝓕 (f₁ ⋆[mul ℂ R] f₂) ξ = (𝓕 f₁ ξ) * (𝓕 f₂ ξ) :=
153-
fourier_bilin_convolution_eq (mul ℂ R) hf₁ hf₂ hf₁' hf₂' ξ
122+
fourier_bilin_convolution_eq (mul ℂ R) hf₁ hf₂ ξ
154123

155124
end Real
156125

@@ -198,7 +167,7 @@ open MeasureTheory
198167
theorem fourier_convolution_apply (B : F₁ →L[ℂ] F₂ →L[ℂ] F₃) (f : 𝓢(E, F₁)) (g : 𝓢(E, F₂)) (x : E) :
199168
𝓕 (convolution B f g) x = 𝓕 (f ⋆[B] g) x := by
200169
simp [fourier_convolution, fourier_coe,
201-
Real.fourier_bilin_convolution_eq B f.integrable g.integrable f.continuous g.continuous]
170+
Real.fourier_bilin_convolution_eq B f.integrable g.integrable]
202171

203172
/-- The convolution on Schwartz functions is equal to the convolution on functions. -/
204173
theorem convolution_apply (B : F₁ →L[ℂ] F₂ →L[ℂ] F₃) (f : 𝓢(E, F₁)) (g : 𝓢(E, F₂)) (x : E) :

Mathlib/Analysis/Fourier/FourierTransform.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ section Fubini
177177
variable [TopologicalSpace 𝕜] [IsTopologicalRing 𝕜] [TopologicalSpace V] [BorelSpace V]
178178
[TopologicalSpace W] [MeasurableSpace W] [BorelSpace W]
179179
{e : AddChar 𝕜 𝕊} {μ : Measure V} {L : V →ₗ[𝕜] W →ₗ[𝕜] 𝕜}
180-
{ν : Measure W} [SigmaFinite μ] [SigmaFinite ν] [SecondCountableTopology V]
180+
{ν : Measure W} [SigmaFinite μ] [SigmaFinite ν] [SecondCountableTopologyEither W V]
181181

182182
variable {σ : ℂ →+* ℂ} [RingHomIsometric σ]
183183

0 commit comments

Comments
 (0)