|
| 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 |
0 commit comments