Skip to content

Commit 5fdef41

Browse files
committed
feat: expand basic API around Fourier integrals (#12153)
The statements in this PR are mostly straightforward variations around already existing statements, which have proved useful down the road.
1 parent f3368d8 commit 5fdef41

File tree

2 files changed

+104
-7
lines changed

2 files changed

+104
-7
lines changed

β€ŽMathlib/Analysis/Fourier/FourierTransform.leanβ€Ž

Lines changed: 86 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ section Continuous
120120

121121
/-! In this section we assume π•œ, `V`, `W` have topologies,
122122
and `L`, `e` are continuous (but `f` needn't be).
123-
This is used to ensure that `e [-L v w]` is (a.e. strongly) measurable. We could get away with
123+
This is used to ensure that `e (-L v w)` is (a.e. strongly) measurable. We could get away with
124124
imposing only a measurable-space structure on π•œ (it doesn't have to be the Borel sigma-algebra of
125125
a topology); but it seems hard to imagine cases where this extra generality would be useful, and
126126
allowing it would complicate matters in the most important use cases.
@@ -241,6 +241,38 @@ end Fubini
241241

242242
end VectorFourier
243243

244+
namespace VectorFourier
245+
246+
variable {π•œ ΞΉ E F V W : Type*} [Fintype ΞΉ] [NontriviallyNormedField π•œ]
247+
[NormedAddCommGroup V] [NormedSpace π•œ V] [MeasurableSpace V] [BorelSpace V]
248+
[NormedAddCommGroup W] [NormedSpace π•œ W] [MeasurableSpace W] [BorelSpace W]
249+
{e : AddChar π•œ π•Š} {ΞΌ : Measure V} {L : V β†’L[π•œ] W β†’L[π•œ] π•œ}
250+
[NormedAddCommGroup F] [NormedSpace ℝ F]
251+
[NormedAddCommGroup E] [NormedSpace β„‚ E]
252+
{M : ΞΉ β†’ Type*} [βˆ€ i, NormedAddCommGroup (M i)] [βˆ€ i, NormedSpace ℝ (M i)]
253+
254+
theorem fourierIntegral_continuousLinearMap_apply
255+
{f : V β†’ (F β†’L[ℝ] E)} {a : F} {w : W} (he : Continuous e) (hf : Integrable f ΞΌ) :
256+
fourierIntegral e ΞΌ L.toLinearMapβ‚‚ f w a =
257+
fourierIntegral e ΞΌ L.toLinearMapβ‚‚ (fun x ↦ f x a) w := by
258+
rw [fourierIntegral, ContinuousLinearMap.integral_apply]
259+
Β· rfl
260+
Β· apply (fourierIntegral_convergent_iff he _ _).2 hf
261+
exact L.continuousβ‚‚
262+
263+
theorem fourierIntegral_continuousMultilinearMap_apply
264+
{f : V β†’ (ContinuousMultilinearMap ℝ M E)} {m : (i : ΞΉ) β†’ M i} {w : W} (he : Continuous e)
265+
(hf : Integrable f ΞΌ) :
266+
fourierIntegral e ΞΌ L.toLinearMapβ‚‚ f w m =
267+
fourierIntegral e ΞΌ L.toLinearMapβ‚‚ (fun x ↦ f x m) w := by
268+
rw [fourierIntegral, ContinuousMultilinearMap.integral_apply]
269+
Β· rfl
270+
Β· apply (fourierIntegral_convergent_iff he _ _).2 hf
271+
exact L.continuousβ‚‚
272+
273+
end VectorFourier
274+
275+
244276
/-! ## Fourier theory for functions on `π•œ` -/
245277

246278

@@ -333,8 +365,31 @@ theorem fourierIntegral_convergent_iff' {V W : Type*} [NormedAddCommGroup V] [No
333365
VectorFourier.fourierIntegral_convergent_iff (E := E) (L := L.toLinearMapβ‚‚)
334366
continuous_fourierChar L.continuousβ‚‚ _
335367

336-
variable {E : Type*} [NormedAddCommGroup E] [NormedSpace β„‚ E]
337-
{V : Type*} [NormedAddCommGroup V]
368+
section Apply
369+
370+
variable {ΞΉ F V W : Type*} [Fintype ΞΉ]
371+
[NormedAddCommGroup V] [NormedSpace ℝ V] [MeasurableSpace V] [BorelSpace V]
372+
[NormedAddCommGroup W] [NormedSpace ℝ W] [MeasurableSpace W] [BorelSpace W]
373+
{ΞΌ : Measure V} {L : V β†’L[ℝ] W β†’L[ℝ] ℝ}
374+
[NormedAddCommGroup F] [NormedSpace ℝ F]
375+
[NormedAddCommGroup E] [NormedSpace β„‚ E]
376+
{M : ΞΉ β†’ Type*} [βˆ€ i, NormedAddCommGroup (M i)] [βˆ€ i, NormedSpace ℝ (M i)]
377+
378+
theorem fourierIntegral_continuousLinearMap_apply'
379+
{f : V β†’ (F β†’L[ℝ] E)} {a : F} {w : W} (hf : Integrable f ΞΌ) :
380+
VectorFourier.fourierIntegral 𝐞 ΞΌ L.toLinearMapβ‚‚ f w a =
381+
VectorFourier.fourierIntegral 𝐞 ΞΌ L.toLinearMapβ‚‚ (fun x ↦ f x a) w :=
382+
VectorFourier.fourierIntegral_continuousLinearMap_apply continuous_fourierChar hf
383+
384+
theorem fourierIntegral_continuousMultilinearMap_apply'
385+
{f : V β†’ ContinuousMultilinearMap ℝ M E} {m : (i : ΞΉ) β†’ M i} {w : W} (hf : Integrable f ΞΌ) :
386+
VectorFourier.fourierIntegral 𝐞 ΞΌ L.toLinearMapβ‚‚ f w m =
387+
VectorFourier.fourierIntegral 𝐞 ΞΌ L.toLinearMapβ‚‚ (fun x ↦ f x m) w :=
388+
VectorFourier.fourierIntegral_continuousMultilinearMap_apply continuous_fourierChar hf
389+
390+
end Apply
391+
392+
variable {V : Type*} [NormedAddCommGroup V]
338393
[InnerProductSpace ℝ V] [MeasurableSpace V] [BorelSpace V] [FiniteDimensional ℝ V]
339394
{W : Type*} [NormedAddCommGroup W]
340395
[InnerProductSpace ℝ W] [MeasurableSpace W] [BorelSpace W] [FiniteDimensional ℝ W]
@@ -370,15 +425,27 @@ lemma fourierIntegralInv_eq' (f : V β†’ E) (w : V) :
370425
𝓕⁻ f w = ∫ v, Complex.exp ((↑(2 * Ο€ * βŸͺv, w⟫) * Complex.I)) β€’ f v := by
371426
simp_rw [fourierIntegralInv_eq, Submonoid.smul_def, Real.fourierChar_apply]
372427

373-
lemma fourierIntegralInv_eq_fourierIntegral_neg (f : V β†’ E) (w : V) :
374-
𝓕⁻ f w = 𝓕 f (-w) := by
375-
simp [fourierIntegral_eq, fourierIntegralInv_eq]
376-
377428
lemma fourierIntegral_comp_linearIsometry (A : W ≃ₗᡒ[ℝ] V) (f : V β†’ E) (w : W) :
378429
𝓕 (f ∘ A) w = (𝓕 f) (A w) := by
379430
simp only [fourierIntegral_eq, ← A.inner_map_map, Function.comp_apply, ←
380431
MeasurePreserving.integral_comp A.measurePreserving A.toHomeomorph.measurableEmbedding]
381432

433+
lemma fourierIntegralInv_eq_fourierIntegral_neg (f : V β†’ E) (w : V) :
434+
𝓕⁻ f w = 𝓕 f (-w) := by
435+
simp [fourierIntegral_eq, fourierIntegralInv_eq]
436+
437+
lemma fourierIntegralInv_eq_fourierIntegral_comp_neg (f : V β†’ E) :
438+
𝓕⁻ f = 𝓕 (fun x ↦ f (-x)) := by
439+
ext y
440+
rw [fourierIntegralInv_eq_fourierIntegral_neg]
441+
change 𝓕 f (LinearIsometryEquiv.neg ℝ y) = 𝓕 (f ∘ LinearIsometryEquiv.neg ℝ) y
442+
exact (fourierIntegral_comp_linearIsometry _ _ _).symm
443+
444+
lemma fourierIntegralInv_comm (f : V β†’ E) :
445+
𝓕 (𝓕⁻ f) = 𝓕⁻ (𝓕 f) := by
446+
conv_rhs => rw [fourierIntegralInv_eq_fourierIntegral_comp_neg]
447+
simp_rw [← fourierIntegralInv_eq_fourierIntegral_neg]
448+
382449
lemma fourierIntegralInv_comp_linearIsometry (A : W ≃ₗᡒ[ℝ] V) (f : V β†’ E) (w : W) :
383450
𝓕⁻ (f ∘ A) w = (𝓕⁻ f) (A w) := by
384451
simp [fourierIntegralInv_eq_fourierIntegral_neg, fourierIntegral_comp_linearIsometry]
@@ -403,4 +470,16 @@ theorem fourierIntegral_real_eq_integral_exp_smul (f : ℝ β†’ E) (w : ℝ) :
403470
Integrable (fun v : V ↦ 𝐞 (- βŸͺv, w⟫) β€’ f v) ΞΌ ↔ Integrable f ΞΌ :=
404471
fourierIntegral_convergent_iff' (innerSL ℝ) w
405472

473+
theorem fourierIntegral_continuousLinearMap_apply
474+
{F : Type*} [NormedAddCommGroup F] [NormedSpace ℝ F]
475+
{f : V β†’ (F β†’L[ℝ] E)} {a : F} {v : V} (hf : Integrable f) :
476+
𝓕 f v a = 𝓕 (fun x ↦ f x a) v :=
477+
fourierIntegral_continuousLinearMap_apply' (L := innerSL ℝ) hf
478+
479+
theorem fourierIntegral_continuousMultilinearMap_apply {ΞΉ : Type*} [Fintype ΞΉ]
480+
{M : ΞΉ β†’ Type*} [βˆ€ i, NormedAddCommGroup (M i)] [βˆ€ i, NormedSpace ℝ (M i)]
481+
{f : V β†’ ContinuousMultilinearMap ℝ M E} {m : (i : ΞΉ) β†’ M i} {v : V} (hf : Integrable f) :
482+
𝓕 f v m = 𝓕 (fun x ↦ f x m) v :=
483+
fourierIntegral_continuousMultilinearMap_apply' (L := innerSL ℝ) hf
484+
406485
end Real

β€ŽMathlib/Analysis/Fourier/Inversion.leanβ€Ž

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,3 +170,21 @@ theorem Continuous.fourier_inversion (h : Continuous f)
170170
𝓕⁻ (𝓕 f) = f := by
171171
ext v
172172
exact hf.fourier_inversion h'f h.continuousAt
173+
174+
/-- **Fourier inversion formula**: If a function `f` on a finite-dimensional real inner product
175+
space is integrable, and its Fourier transform `𝓕 f` is also integrable, then `𝓕 (𝓕⁻ f) = f` at
176+
continuity points of `f`. -/
177+
theorem MeasureTheory.Integrable.fourier_inversion_inv
178+
(hf : Integrable f) (h'f : Integrable (𝓕 f)) {v : V}
179+
(hv : ContinuousAt f v) : 𝓕 (𝓕⁻ f) v = f v := by
180+
rw [fourierIntegralInv_comm]
181+
exact fourier_inversion hf h'f hv
182+
183+
/-- **Fourier inversion formula**: If a function `f` on a finite-dimensional real inner product
184+
space is continuous, integrable, and its Fourier transform `𝓕 f` is also integrable,
185+
then `𝓕 (𝓕⁻ f) = f`. -/
186+
theorem Continuous.fourier_inversion_inv (h : Continuous f)
187+
(hf : Integrable f) (h'f : Integrable (𝓕 f)) :
188+
𝓕 (𝓕⁻ f) = f := by
189+
ext v
190+
exact hf.fourier_inversion_inv h'f h.continuousAt

0 commit comments

Comments
Β (0)