Skip to content

Commit 9fb833b

Browse files
committed
feat: Fourier inversion formula (#10810)
We show the Fourier inversion formula on finite-dimensional real inner product spaces: if `f` and its Fourier transform are both integrable, then `𝓕⁻ (𝓕 f) = f` at continuity points of `f`.
1 parent 6dcd9f8 commit 9fb833b

File tree

5 files changed

+186
-1
lines changed

5 files changed

+186
-1
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -779,6 +779,7 @@ import Mathlib.Analysis.Distribution.SchwartzSpace
779779
import Mathlib.Analysis.Fourier.AddCircle
780780
import Mathlib.Analysis.Fourier.FourierTransform
781781
import Mathlib.Analysis.Fourier.FourierTransformDeriv
782+
import Mathlib.Analysis.Fourier.Inversion
782783
import Mathlib.Analysis.Fourier.PoissonSummation
783784
import Mathlib.Analysis.Fourier.RiemannLebesgueLemma
784785
import Mathlib.Analysis.Hofer

Mathlib/Analysis/Complex/Basic.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,10 @@ theorem continuous_ofReal : Continuous ((↑) : ℝ → ℂ) :=
400400
ofRealLI.continuous
401401
#align complex.continuous_of_real Complex.continuous_ofReal
402402

403+
lemma _root_.Filter.Tendsto.ofReal {α : Type*} {l : Filter α} {f : α → ℝ} {x : ℝ}
404+
(hf : Tendsto f l (𝓝 x)) : Tendsto (fun x ↦ (f x : ℂ)) l (𝓝 (x : ℂ)) :=
405+
(continuous_ofReal.tendsto _).comp hf
406+
403407
/-- The only continuous ring homomorphism from `ℝ` to `ℂ` is the identity. -/
404408
theorem ringHom_eq_ofReal_of_continuous {f : ℝ →+* ℂ} (h : Continuous f) : f = Complex.ofReal := by
405409
convert congr_arg AlgHom.toRingHom <| Subsingleton.elim (AlgHom.mk' f <| map_real_smul f h)
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
/-
2+
Copyright (c) 2024 Sébastien Gouëzel. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Sébastien Gouëzel
5+
-/
6+
import Mathlib.Analysis.SpecialFunctions.Gaussian
7+
import Mathlib.MeasureTheory.Integral.PeakFunction
8+
9+
/-!
10+
# Fourier inversion formula
11+
12+
In a finite-dimensional real inner product space, we show the Fourier inversion formula, i.e.,
13+
`𝓕⁻ (𝓕 f) v = f v` if `f` and `𝓕 f` are integrable, and `f` is continuous at `v`. This is proved
14+
in `MeasureTheory.Integrable.fourier_inversion`. See also `Continuous.fourier_inversion`
15+
giving `𝓕⁻ (𝓕 f) = f` under an additional continuity assumption for `f`.
16+
17+
We use the following proof. A naïve computation gives
18+
`𝓕⁻ (𝓕 f) v
19+
= ∫_w exp (2 I π ⟪w, v⟫) 𝓕 f (w) dw
20+
= ∫_w exp (2 I π ⟪w, v⟫) ∫_x, exp (-2 I π ⟪w, x⟫) f x dx) dw
21+
= ∫_x (∫_ w, exp (2 I π ⟪w, v - x⟫ dw) f x dx `
22+
23+
However, the Fubini step does not make sense for lack of integrability, and the middle integral
24+
`∫_ w, exp (2 I π ⟪w, v - x⟫ dw` (which one would like to be a Dirac at `v - x`) is not defined.
25+
To gain integrability, one multiplies with a Gaussian function `exp (-c⁻¹ ‖w‖^2)`, with a large
26+
(but finite) `c`. As this function converges pointwise to `1` when `c → ∞`, we get
27+
`∫_w exp (2 I π ⟪w, v⟫) 𝓕 f (w) dw = lim_c ∫_w exp (-c⁻¹ ‖w‖^2 + 2 I π ⟪w, v⟫) 𝓕 f (w) dw`.
28+
One can perform Fubini on the right hand side for fixed `c`, writing the integral as
29+
`∫_x (∫_w exp (-c⁻¹‖w‖^2 + 2 I π ⟪w, v - x⟫ dw)) f x dx`.
30+
The middle factor is the Fourier transform of a more and more flat function
31+
(converging to the constant `1`), hence it becomes more and more concentrated, around the
32+
point `v`. (Morally, it converges to the Dirac at `v`). Moreover, it has integral one.
33+
Therefore, multiplying by `f` and integrating, one gets a term converging to `f v` as `c → ∞`.
34+
Since it also converges to `𝓕⁻ (𝓕 f) v`, this proves the result.
35+
36+
To check the concentration property of the middle factor and the fact that it has integral one, we
37+
rely on the explicit computation of the Fourier transform of Gaussians.
38+
-/
39+
40+
open Filter MeasureTheory Complex FiniteDimensional Metric Real Bornology
41+
42+
open scoped Topology FourierTransform RealInnerProductSpace Complex
43+
44+
variable {V E : Type*} [NormedAddCommGroup V] [InnerProductSpace ℝ V]
45+
[MeasurableSpace V] [BorelSpace V] [FiniteDimensional ℝ V]
46+
[NormedAddCommGroup E] [NormedSpace ℂ E] {f : V → E}
47+
48+
namespace Real
49+
50+
lemma tendsto_integral_cexp_sq_smul (hf : Integrable f) :
51+
Tendsto (fun (c : ℝ) ↦ (∫ v : V, cexp (- c⁻¹ * ‖v‖^2) • f v))
52+
atTop (𝓝 (∫ v : V, f v)) := by
53+
apply tendsto_integral_filter_of_dominated_convergence _ _ _ hf.norm
54+
· apply eventually_of_forall (fun v ↦ ?_)
55+
nth_rewrite 2 [show f v = cexp (- (0 : ℝ) * ‖v‖^2) • f v by simp]
56+
apply (Tendsto.cexp _).smul_const
57+
exact tendsto_inv_atTop_zero.ofReal.neg.mul_const _
58+
· apply eventually_of_forall (fun c ↦ ?_)
59+
exact AEStronglyMeasurable.smul (Continuous.aestronglyMeasurable (by continuity)) hf.1
60+
· filter_upwards [Ici_mem_atTop (0 : ℝ)] with c (hc : 0 ≤ c)
61+
apply eventually_of_forall (fun v ↦ ?_)
62+
simp only [ofReal_inv, neg_mul, norm_smul, Complex.norm_eq_abs]
63+
norm_cast
64+
conv_rhs => rw [← one_mul (‖f v‖)]
65+
gcongr
66+
simp only [abs_exp, exp_le_one_iff, Left.neg_nonpos_iff]
67+
positivity
68+
69+
variable [CompleteSpace E]
70+
71+
lemma tendsto_integral_gaussian_smul (hf : Integrable f) (h'f : Integrable (𝓕 f)) (v : V) :
72+
Tendsto (fun (c : ℝ) ↦
73+
∫ w : V, ((π * c) ^ (finrank ℝ V / 2 : ℂ) * cexp (-π ^ 2 * c * ‖v - w‖ ^ 2)) • f w)
74+
atTop (𝓝 (𝓕⁻ (𝓕 f) v)) := by
75+
have A : Tendsto (fun (c : ℝ) ↦ (∫ w : V, cexp (- c⁻¹ * ‖w‖^2 + 2 * π * I * ⟪v, w⟫)
76+
• (𝓕 f) w)) atTop (𝓝 (𝓕⁻ (𝓕 f) v)) := by
77+
have : Integrable (fun w ↦ 𝐞[⟪w, v⟫] • (𝓕 f) w) := by
78+
have B : Continuous fun p : V × V => (- innerₗ V) p.1 p.2 := continuous_inner.neg
79+
simpa using
80+
(VectorFourier.fourier_integral_convergent_iff Real.continuous_fourierChar B v).1 h'f
81+
convert tendsto_integral_cexp_sq_smul this using 4 with c w
82+
· rw [Real.fourierChar_apply, smul_smul, ← Complex.exp_add, real_inner_comm]
83+
congr 3
84+
simp only [ofReal_mul, ofReal_ofNat]
85+
ring
86+
· simp [fourierIntegralInv_eq]
87+
have B : Tendsto (fun (c : ℝ) ↦ (∫ w : V,
88+
𝓕 (fun w ↦ cexp (- c⁻¹ * ‖w‖^2 + 2 * π * I * ⟪v, w⟫)) w • f w)) atTop
89+
(𝓝 (𝓕⁻ (𝓕 f) v)) := by
90+
apply A.congr'
91+
filter_upwards [Ioi_mem_atTop 0] with c (hc : 0 < c)
92+
have J : Integrable (fun w ↦ cexp (- c⁻¹ * ‖w‖^2 + 2 * π * I * ⟪v, w⟫)) :=
93+
GaussianFourier.integrable_cexp_neg_mul_sq_norm_add (by simpa) _ _
94+
simpa using (VectorFourier.integral_fourierIntegral_smul_eq_flip (L := innerₗ V)
95+
Real.continuous_fourierChar continuous_inner J hf).symm
96+
apply B.congr'
97+
filter_upwards [Ioi_mem_atTop 0] with c (hc : 0 < c)
98+
congr with w
99+
rw [fourierIntegral_gaussian_innerProductSpace' (by simpa)]
100+
congr
101+
· simp
102+
· simp; ring
103+
104+
lemma tendsto_integral_gaussian_smul' (hf : Integrable f) {v : V} (h'f : ContinuousAt f v) :
105+
Tendsto (fun (c : ℝ) ↦
106+
∫ w : V, ((π * c : ℂ) ^ (finrank ℝ V / 2 : ℂ) * cexp (-π ^ 2 * c * ‖v - w‖ ^ 2)) • f w)
107+
atTop (𝓝 (f v)) := by
108+
let φ : V → ℝ := fun w ↦ π ^ (finrank ℝ V / 2 : ℝ) * Real.exp (-π^2 * ‖w‖^2)
109+
have A : Tendsto (fun (c : ℝ) ↦ ∫ w : V, (c ^ finrank ℝ V * φ (c • (v - w))) • f w)
110+
atTop (𝓝 (f v)) := by
111+
apply tendsto_integral_comp_smul_smul_of_integrable'
112+
· exact fun x ↦ by positivity
113+
· rw [integral_mul_left, GaussianFourier.integral_rexp_neg_mul_sq_norm (by positivity)]
114+
nth_rewrite 2 [← pow_one π]
115+
rw [← rpow_nat_cast, ← rpow_nat_cast, ← rpow_sub pi_pos, ← rpow_mul pi_nonneg,
116+
← rpow_add pi_pos]
117+
ring_nf
118+
exact rpow_zero _
119+
· have A : Tendsto (fun (w : V) ↦ π^2 * ‖w‖^2) (cobounded V) atTop := by
120+
rw [tendsto_const_mul_atTop_of_pos (by positivity)]
121+
apply (tendsto_pow_atTop two_ne_zero).comp tendsto_norm_cobounded_atTop
122+
have B := tendsto_rpow_mul_exp_neg_mul_atTop_nhds_zero (finrank ℝ V / 2) 1
123+
zero_lt_one |>.comp A |>.const_mul (π ^ (-finrank ℝ V / 2 : ℝ))
124+
rw [mul_zero] at B
125+
convert B using 2 with x
126+
simp only [neg_mul, one_mul, Function.comp_apply, ← mul_assoc, ← rpow_nat_cast, φ]
127+
congr 1
128+
rw [mul_rpow (by positivity) (by positivity), ← rpow_mul pi_nonneg,
129+
← rpow_mul (norm_nonneg _), ← mul_assoc, ← rpow_add pi_pos, mul_comm]
130+
congr <;> ring
131+
· exact hf
132+
· exact h'f
133+
have B : Tendsto
134+
(fun (c : ℝ) ↦ ∫ w : V, ((c^(1/2:ℝ)) ^ finrank ℝ V * φ ((c^(1/2:ℝ)) • (v - w))) • f w)
135+
atTop (𝓝 (f v)) :=
136+
A.comp (tendsto_rpow_atTop (by norm_num))
137+
apply B.congr'
138+
filter_upwards [Ioi_mem_atTop 0] with c (hc : 0 < c)
139+
congr with w
140+
rw [← coe_smul]
141+
congr
142+
rw [ofReal_mul, ofReal_mul, ofReal_exp, ← mul_assoc]
143+
congr
144+
· rw [mul_cpow_ofReal_nonneg pi_nonneg hc.le, ← rpow_nat_cast, ← rpow_mul hc.le, mul_comm,
145+
ofReal_cpow pi_nonneg, ofReal_cpow hc.le]
146+
simp [div_eq_inv_mul]
147+
· norm_cast
148+
simp only [one_div, norm_smul, Real.norm_eq_abs, mul_pow, _root_.sq_abs, neg_mul, neg_inj,
149+
← rpow_nat_cast, ← rpow_mul hc.le, mul_assoc]
150+
norm_num
151+
152+
end Real
153+
154+
variable [CompleteSpace E]
155+
156+
/-- **Fourier inversion formula**: If a function `f` on a finite-dimensional real inner product
157+
space is integrable, and its Fourier transform `𝓕 f` is also integrable, then `𝓕⁻ (𝓕 f) = f` at
158+
continuity points of `f`. -/
159+
theorem MeasureTheory.Integrable.fourier_inversion
160+
(hf : Integrable f) (h'f : Integrable (𝓕 f)) {v : V}
161+
(hv : ContinuousAt f v) : 𝓕⁻ (𝓕 f) v = f v :=
162+
tendsto_nhds_unique (Real.tendsto_integral_gaussian_smul hf h'f v)
163+
(Real.tendsto_integral_gaussian_smul' hf hv)
164+
165+
/-- **Fourier inversion formula**: If a function `f` on a finite-dimensional real inner product
166+
space is continuous, integrable, and its Fourier transform `𝓕 f` is also integrable,
167+
then `𝓕⁻ (𝓕 f) = f`. -/
168+
theorem Continuous.fourier_inversion (h : Continuous f)
169+
(hf : Integrable f) (h'f : Integrable (𝓕 f)) :
170+
𝓕⁻ (𝓕 f) = f := by
171+
ext v
172+
exact hf.fourier_inversion h'f h.continuousAt

docs/overview.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,12 @@ Analysis:
362362
Distribution theory:
363363
Schwartz space: 'SchwartzMap'
364364

365+
Fourier analysis:
366+
Fourier transform as an integral: 'Real.fourierIntegral'
367+
inversion formula: 'Continuous.fourier_inversion'
368+
Riemann-Lebesgue lemma: 'tendsto_integral_exp_inner_smul_cocompact'
369+
Parseval formula for Fourier series: 'tsum_sq_fourierCoeff'
370+
365371
Probability Theory:
366372
Definitions in probability theory:
367373
probability measure: 'MeasureTheory.IsProbabilityMeasure'

docs/undergrad.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -532,8 +532,10 @@ Measures and integral calculus:
532532
Dirichlet theorem: ''
533533
Fejer theorem: ''
534534
Parseval theorem: 'tsum_sq_fourierCoeff'
535-
Fourier transforms on $\mathrm{L}^1(\R^d)$ and $\mathrm{L}^2(\R^d)$: ''
535+
Fourier transform on $\mathrm{L}^1(\R^d)$: 'Real.fourierIntegral'
536+
Fourier transform on $\mathrm{L}^2(\R^d)$: ''
536537
Plancherel’s theorem: ''
538+
Fourier inversion formula: 'Continuous.fourier_inversion'
537539

538540
# 11.
539541
Probability Theory:

0 commit comments

Comments
 (0)