@@ -5,45 +5,106 @@ Authors: Sébastien Gouëzel
5
5
-/
6
6
import Mathlib.Analysis.Distribution.SchwartzSpace
7
7
import Mathlib.Analysis.Fourier.FourierTransformDeriv
8
+ import Mathlib.Analysis.Fourier.Inversion
8
9
9
10
/-!
10
11
# Fourier transform on Schwartz functions
11
12
12
- This file will construct the Fourier transform as a continuous linear map acting on Schwartz
13
- functions.
14
-
15
- For now, it only contains the fact that the Fourier transform of a Schwartz function is
16
- differentiable, with an explicit derivative given by a Fourier transform. See
17
- `SchwartzMap.hasFDerivAt_fourier`.
13
+ This file constructs the Fourier transform as a continuous linear map acting on Schwartz
14
+ functions, in `fourierTransformCLM`. It is also given as a continuous linear equiv, in
15
+ `fourierTransformCLE`.
18
16
-/
19
17
20
- open Real Complex TopologicalSpace SchwartzMap MeasureTheory MeasureTheory.Measure VectorFourier
21
-
22
- noncomputable section
23
-
24
- variable {D : Type *} [NormedAddCommGroup D] [NormedSpace ℝ D]
25
- {E : Type *} [NormedAddCommGroup E] [NormedSpace ℝ E]
26
- {V : Type *} [NormedAddCommGroup V] [NormedSpace ℂ V]
27
- (L : D →L[ℝ] E →L[ℝ] ℝ)
28
-
29
- /-- Multiplication by a linear map on Schwartz space: for `f : D → V` a Schwartz function and `L` a
30
- bilinear map from `D × E` to `ℝ`, we define a new Schwartz function on `D` taking values in the
31
- space of linear maps from `E` to `V`, given by
32
- `(VectorFourier.fourierSMulRightSchwartz L f) (v) = -(2 * π * I) • L (v, ⬝) • f v`.
33
- The point of this definition is that the derivative of the Fourier transform of `f` is the
34
- Fourier transform of `VectorFourier.fourierSMulRightSchwartz L f`. -/
35
- def VectorFourier.fourierSMulRightSchwartz : 𝓢(D, V) →L[ℝ] 𝓢(D, E →L[ℝ] V) :=
36
- -(2 * π * I) • (bilinLeftCLM (ContinuousLinearMap.smulRightL ℝ E V).flip L.hasTemperateGrowth)
37
-
38
- @[simp]
39
- lemma VectorFourier.fourierSMulRightSchwartz_apply (f : 𝓢(D, V)) (d : D) :
40
- VectorFourier.fourierSMulRightSchwartz L f d = -(2 * π * I) • (L d).smulRight (f d) := rfl
41
-
42
- /-- The Fourier transform of a Schwartz map `f` has a Fréchet derivative (everywhere in its domain)
43
- and its derivative is the Fourier transform of the Schwartz map `mul_L_schwartz L f`. -/
44
- theorem SchwartzMap.hasFDerivAt_fourierIntegral [MeasurableSpace D] [BorelSpace D]
45
- {μ : Measure D} [SecondCountableTopology D] [HasTemperateGrowth μ] (f : 𝓢(D, V)) (w : E) :
46
- HasFDerivAt (fourierIntegral fourierChar μ L.toLinearMap₂ f)
47
- (fourierIntegral fourierChar μ L.toLinearMap₂ (fourierSMulRightSchwartz L f) w) w :=
48
- VectorFourier.hasFDerivAt_fourierIntegral L f.integrable
49
- (by simpa using f.integrable_pow_mul μ 1 ) w
18
+ open Real Complex TopologicalSpace SchwartzMap MeasureTheory MeasureTheory.Measure
19
+
20
+ open scoped FourierTransform BigOperators
21
+
22
+ namespace SchwartzMap
23
+
24
+ variable
25
+ (𝕜 : Type *) [RCLike 𝕜]
26
+ {E : Type *} [NormedAddCommGroup E] [NormedSpace ℂ E] [NormedSpace 𝕜 E] [SMulCommClass ℂ 𝕜 E]
27
+ {V : Type *} [NormedAddCommGroup V] [InnerProductSpace ℝ V] [FiniteDimensional ℝ V]
28
+ [MeasurableSpace V] [BorelSpace V]
29
+
30
+ /-- The Fourier transform on a real inner product space, as a continuous linear map on the
31
+ Schwartz space. -/
32
+ noncomputable def fourierTransformCLM : 𝓢(V, E) →L[𝕜] 𝓢(V, E) := by
33
+ refine mkCLM (fun (f : V → E) ↦ 𝓕 f) ?_ ?_ ?_ ?_
34
+ · intro f g x
35
+ simp only [fourierIntegral_eq, Pi.add_apply, smul_add]
36
+ rw [integral_add]
37
+ · exact (fourierIntegral_convergent_iff _).2 f.integrable
38
+ · exact (fourierIntegral_convergent_iff _).2 g.integrable
39
+ · intro c f x
40
+ simp only [fourierIntegral_eq, Pi.smul_apply, RingHom.id_apply, smul_comm _ c, integral_smul]
41
+ · intro f
42
+ exact Real.contDiff_fourierIntegral (fun n _ ↦ integrable_pow_mul volume f n)
43
+ · rintro ⟨k, n⟩
44
+ refine ⟨Finset.range (n + integrablePower (volume : Measure V) + 1 ) ×ˢ Finset.range (k + 1 ),
45
+ (2 * π) ^ n * (2 * ↑n + 2 ) ^ k * (Finset.range (n + 1 ) ×ˢ Finset.range (k + 1 )).card
46
+ * 2 ^ integrablePower (volume : Measure V) *
47
+ (∫ (x : V), (1 + ‖x‖) ^ (- (integrablePower (volume : Measure V) : ℝ))) * 2 ,
48
+ ⟨by positivity, fun f x ↦ ?_⟩⟩
49
+ apply (pow_mul_norm_iteratedFDeriv_fourierIntegral_le (f.smooth ⊤)
50
+ (fun k n _hk _hn ↦ integrable_pow_mul_iteratedFDeriv _ f k n) le_top le_top x).trans
51
+ simp only [mul_assoc]
52
+ gcongr
53
+ calc
54
+ ∑ p in Finset.range (n + 1 ) ×ˢ Finset.range (k + 1 ),
55
+ ∫ (v : V), ‖v‖ ^ p.1 * ‖iteratedFDeriv ℝ p.2 (⇑f) v‖
56
+ ≤ ∑ p in Finset.range (n + 1 ) ×ˢ Finset.range (k + 1 ),
57
+ 2 ^ integrablePower (volume : Measure V) *
58
+ (∫ (x : V), (1 + ‖x‖) ^ (- (integrablePower (volume : Measure V) : ℝ))) * 2 *
59
+ ((Finset.range (n + integrablePower (volume : Measure V) + 1 ) ×ˢ Finset.range (k + 1 )).sup
60
+ (schwartzSeminormFamily 𝕜 V E)) f := by
61
+ apply Finset.sum_le_sum (fun p hp ↦ ?_)
62
+ simp only [Finset.mem_product, Finset.mem_range] at hp
63
+ apply (f.integral_pow_mul_iteratedFDeriv_le 𝕜 _ _ _).trans
64
+ simp only [mul_assoc]
65
+ rw [two_mul]
66
+ gcongr
67
+ · apply Seminorm.le_def.1
68
+ have : (0 , p.2 ) ∈ (Finset.range (n + integrablePower (volume : Measure V) + 1 )
69
+ ×ˢ Finset.range (k + 1 )) := by simp [hp.2 ]
70
+ apply Finset.le_sup this (f := fun p ↦ SchwartzMap.seminorm 𝕜 p.1 p.2 (E := V) (F := E))
71
+ · apply Seminorm.le_def.1
72
+ have : (p.1 + integrablePower (volume : Measure V), p.2 ) ∈ (Finset.range
73
+ (n + integrablePower (volume : Measure V) + 1 ) ×ˢ Finset.range (k + 1 )) := by
74
+ simp [hp.2 ]
75
+ linarith
76
+ apply Finset.le_sup this (f := fun p ↦ SchwartzMap.seminorm 𝕜 p.1 p.2 (E := V) (F := E))
77
+ _ = _ := by simp [mul_assoc]
78
+
79
+ @[simp] lemma fourierTransformCLM_apply (f : 𝓢(V, E)) :
80
+ fourierTransformCLM 𝕜 f = 𝓕 f := rfl
81
+
82
+ variable [CompleteSpace E]
83
+
84
+ /-- The Fourier transform on a real inner product space, as a continuous linear equiv on the
85
+ Schwartz space. -/
86
+ noncomputable def fourierTransformCLE : 𝓢(V, E) ≃L[𝕜] 𝓢(V, E) where
87
+ __ := fourierTransformCLM 𝕜
88
+ invFun := (compCLMOfContinuousLinearEquiv 𝕜 (LinearIsometryEquiv.neg ℝ (E := V)))
89
+ ∘L (fourierTransformCLM 𝕜)
90
+ left_inv := by
91
+ intro f
92
+ ext x
93
+ change 𝓕 (𝓕 f) (-x) = f x
94
+ rw [← fourierIntegralInv_eq_fourierIntegral_neg, Continuous.fourier_inversion f.continuous
95
+ f.integrable (fourierTransformCLM 𝕜 f).integrable]
96
+ right_inv := by
97
+ intro f
98
+ ext x
99
+ change 𝓕 (fun x ↦ (𝓕 f) (-x)) x = f x
100
+ simp_rw [← fourierIntegralInv_eq_fourierIntegral_neg, Continuous.fourier_inversion_inv
101
+ f.continuous f.integrable (fourierTransformCLM 𝕜 f).integrable]
102
+ continuous_invFun := ContinuousLinearMap.continuous _
103
+
104
+ @[simp] lemma fourierTransformCLE_apply (f : 𝓢(V, E)) :
105
+ fourierTransformCLE 𝕜 f = 𝓕 f := rfl
106
+
107
+ @[simp] lemma fourierTransformCLE_symm_apply (f : 𝓢(V, E)) :
108
+ (fourierTransformCLE 𝕜).symm f = 𝓕⁻ f := by
109
+ ext x
110
+ exact (fourierIntegralInv_eq_fourierIntegral_neg f x).symm
0 commit comments