11/-
22Copyright (c) 2024 Sébastien Gouëzel. All rights reserved.
33Released under Apache 2.0 license as described in the file LICENSE.
4- Authors: Sébastien Gouëzel
4+ Authors: Sébastien Gouëzel, Moritz Doll
55-/
66import Mathlib.Analysis.Distribution.SchwartzSpace
77import Mathlib.Analysis.Fourier.FourierTransformDeriv
@@ -18,6 +18,8 @@ functions, in `fourierTransformCLM`. It is also given as a continuous linear equ
1818open Real MeasureTheory MeasureTheory.Measure
1919open scoped FourierTransform ComplexInnerProductSpace
2020
21+ noncomputable section
22+
2123namespace SchwartzMap
2224
2325variable
@@ -28,9 +30,11 @@ variable
2830 {V : Type *} [NormedAddCommGroup V] [InnerProductSpace ℝ V] [FiniteDimensional ℝ V]
2931 [MeasurableSpace V] [BorelSpace V]
3032
33+ section definition
34+
3135/-- The Fourier transform on a real inner product space, as a continuous linear map on the
3236Schwartz space. -/
33- noncomputable def fourierTransformCLM : 𝓢(V, E) →L[𝕜] 𝓢(V, E) := by
37+ def fourierTransformCLM : 𝓢(V, E) →L[𝕜] 𝓢(V, E) := by
3438 refine mkCLM ((𝓕 : (V → E) → (V → E)) ·) ?_ ?_ ?_ ?_
3539 · intro f g x
3640 simp only [fourierIntegral_eq, add_apply, smul_add]
@@ -77,99 +81,129 @@ noncomputable def fourierTransformCLM : 𝓢(V, E) →L[𝕜] 𝓢(V, E) := by
7781 apply Finset.le_sup this (f := fun p ↦ SchwartzMap.seminorm 𝕜 p.1 p.2 (E := V) (F := E))
7882 _ = _ := by simp [mul_assoc]
7983
80- @[simp] lemma fourierTransformCLM_apply (f : 𝓢(V, E)) :
81- fourierTransformCLM 𝕜 f = 𝓕 (f : V → E) := rfl
84+ instance instFourierTransform : FourierTransform 𝓢(V, E) 𝓢(V, E) where
85+ fourierTransform f := fourierTransformCLM ℂ f
86+
87+ lemma fourier_coe (f : 𝓢(V, E)) : 𝓕 f = 𝓕 (f : V → E) := rfl
88+
89+ instance instFourierModule : FourierModule 𝕜 𝓢(V, E) 𝓢(V, E) where
90+ fourier_add := ContinuousLinearMap.map_add _
91+ fourier_smul := (fourierTransformCLM 𝕜).map_smul
92+
93+ @[simp]
94+ theorem fourierTransformCLM_apply (f : 𝓢(V, E)) :
95+ fourierTransformCLM 𝕜 f = 𝓕 f := rfl
96+
97+ instance instFourierTransformInv : FourierTransformInv 𝓢(V, E) 𝓢(V, E) where
98+ fourierTransformInv := (compCLMOfContinuousLinearEquiv ℂ (LinearIsometryEquiv.neg ℝ (E := V)))
99+ ∘L (fourierTransformCLM ℂ)
100+
101+ lemma fourierInv_coe (f : 𝓢(V, E)) :
102+ 𝓕⁻ f = 𝓕⁻ (f : V → E) := by
103+ ext x
104+ exact (fourierIntegralInv_eq_fourierIntegral_neg f x).symm
105+
106+ instance instFourierInvModule : FourierInvModule 𝕜 𝓢(V, E) 𝓢(V, E) where
107+ fourierInv_add := ContinuousLinearMap.map_add _
108+ fourierInv_smul := ((compCLMOfContinuousLinearEquiv 𝕜 (D := V) (E := V) (F := E)
109+ (LinearIsometryEquiv.neg ℝ (E := V))) ∘L (fourierTransformCLM 𝕜)).map_smul
82110
83111variable [CompleteSpace E]
84112
113+ instance instFourierPair : FourierPair 𝓢(V, E) 𝓢(V, E) where
114+ inv_fourier := by
115+ intro f
116+ ext x
117+ rw [fourierInv_coe, fourier_coe, f.continuous.fourier_inversion f.integrable (𝓕 f).integrable]
118+
119+ instance instFourierInvPair : FourierInvPair 𝓢(V, E) 𝓢(V, E) where
120+ fourier_inv := by
121+ intro f
122+ ext x
123+ rw [fourier_coe, fourierInv_coe, f.continuous.fourier_inversion_inv f.integrable
124+ (𝓕 f).integrable]
125+
126+ @[deprecated (since := "2025-11-13")]
127+ alias fourier_inversion := FourierTransform.inv_fourier
128+
129+ @[deprecated (since := "2025-11-13")]
130+ alias fourier_inversion_inv := FourierTransform.fourier_inv
131+
132+ /-- The Fourier transform on a real inner product space, as a continuous linear equiv on the
133+ Schwartz space. -/
134+ def fourierTransformCLE : 𝓢(V, E) ≃L[𝕜] 𝓢(V, E) where
135+ __ := FourierTransform.fourierEquiv 𝕜 𝓢(V, E) 𝓢(V, E)
136+ continuous_toFun := (fourierTransformCLM 𝕜).continuous
137+ continuous_invFun := ContinuousLinearMap.continuous _
138+
85139@[simp]
86- theorem fourier_inversion (f : 𝓢(V, E)) (x : V) : 𝓕⁻ (𝓕 (f : V → E)) x = f x :=
87- Integrable.fourier_inversion f.integrable (fourierTransformCLM ℂ f).integrable
88- f.continuous.continuousAt
140+ lemma fourierTransformCLE_apply (f : 𝓢(V, E)) : fourierTransformCLE 𝕜 f = 𝓕 f := rfl
89141
90142@[simp]
91- theorem fourier_inversion_inv (f : 𝓢(V, E)) (x : V) : 𝓕 (𝓕⁻ (f : V → E)) x = f x :=
92- Integrable.fourier_inversion_inv f.integrable (fourierTransformCLM ℂ f).integrable
93- f.continuous.continuousAt
143+ lemma fourierTransformCLE_symm_apply (f : 𝓢(V, E)) : (fourierTransformCLE 𝕜).symm f = 𝓕⁻ f := rfl
144+
145+ end definition
146+
147+ section fubini
94148
95149variable
96- {F : Type *} [NormedAddCommGroup F] [NormedSpace ℂ F] [NormedSpace 𝕜 F] [SMulCommClass ℂ 𝕜 F]
150+ {F : Type *} [NormedAddCommGroup F] [NormedSpace ℂ F]
97151 {G : Type *} [NormedAddCommGroup G] [NormedSpace ℂ G]
98152
99- variable [CompleteSpace F]
153+ variable [CompleteSpace E] [CompleteSpace F]
100154
101155/-- The Fourier transform satisfies `∫ 𝓕 f * g = ∫ f * 𝓕 g`, i.e., it is self-adjoint.
102156Version where the multiplication is replaced by a general bilinear form `M`. -/
103157theorem integral_bilin_fourierIntegral_eq (f : 𝓢(V, E)) (g : 𝓢(V, F)) (M : E →L[ℂ] F →L[ℂ] G) :
104- ∫ ξ, M (𝓕 (f : V → E) ξ) (g ξ) = ∫ x, M (f x) (𝓕 (g : V → F) x) := by
105- have := VectorFourier.integral_bilin_fourierIntegral_eq_flip M (μ := volume) (ν := volume)
106- (L := (innerₗ V)) continuous_fourierChar continuous_inner f.integrable g.integrable
107- rwa [flip_innerₗ] at this
158+ ∫ ξ, M (𝓕 f ξ) (g ξ) = ∫ x, M (f x) (𝓕 g x) := by
159+ simpa using VectorFourier.integral_bilin_fourierIntegral_eq_flip M (L := (innerₗ V))
160+ continuous_fourierChar continuous_inner f.integrable g.integrable
108161
109162theorem integral_sesq_fourierIntegral_eq (f : 𝓢(V, E)) (g : 𝓢(V, F)) (M : E →L⋆[ℂ] F →L[ℂ] G) :
110- ∫ ξ, M (𝓕 (f : V → E) ξ) (g ξ) = ∫ x, M (f x) (𝓕⁻ (g : V → F) x) := by
111- have := VectorFourier.integral_sesq_fourierIntegral_eq_neg_flip M (μ := volume) (ν := volume)
163+ ∫ ξ, M (𝓕 f ξ) (g ξ) = ∫ x, M (f x) (𝓕⁻ g x) := by
164+ simpa [fourierInv_coe] using VectorFourier.integral_sesq_fourierIntegral_eq_neg_flip M
112165 (L := (innerₗ V)) continuous_fourierChar continuous_inner f.integrable g.integrable
113- rwa [flip_innerₗ] at this
114166
115167/-- Plancherel's theorem for Schwartz functions.
116168
117169Version where the multiplication is replaced by a general bilinear form `M`. -/
118170theorem integral_sesq_fourier_fourier (f : 𝓢(V, E)) (g : 𝓢(V, F)) (M : E →L⋆[ℂ] F →L[ℂ] G) :
119- ∫ ξ, M (𝓕 (f : V → E) ξ) (𝓕 (g : V → F) ξ) = ∫ x, M (f x) (g x) := by
120- simpa only [fourierTransformCLM_apply, fourier_inversion]
121- using integral_sesq_fourierIntegral_eq f (fourierTransformCLM ℂ g) M
171+ ∫ ξ, M (𝓕 f ξ) (𝓕 g ξ) = ∫ x, M (f x) (g x) := by
172+ simpa using integral_sesq_fourierIntegral_eq f (𝓕 g) M
173+
174+ end fubini
175+
176+ section L2
122177
123178variable {H : Type *} [NormedAddCommGroup H] [InnerProductSpace ℂ H] [CompleteSpace H]
124179
125180/-- Plancherel's theorem for Schwartz functions. -/
126181theorem integral_inner_fourier_fourier (f g : 𝓢(V, H)) :
127- ∫ ξ, ⟪𝓕 (f : V → H) ξ, 𝓕 (g : V → H) ξ⟫ = ∫ x, ⟪f x, g x⟫ :=
182+ ∫ ξ, ⟪𝓕 f ξ, 𝓕 g ξ⟫ = ∫ x, ⟪f x, g x⟫ :=
128183 integral_sesq_fourier_fourier f g (innerSL ℂ)
129184
130185theorem integral_norm_sq_fourier (f : 𝓢(V, H)) :
131- ∫ ξ, ‖𝓕 (f : V → H) ξ‖^2 = ∫ x, ‖f x‖^2 := by
186+ ∫ ξ, ‖𝓕 f ξ‖^2 = ∫ x, ‖f x‖^2 := by
132187 apply Complex.ofRealLI.injective
133- simp only [← LinearIsometry.integral_comp_comm]
134- convert integral_inner_fourier_fourier f f <;>
135- simp [inner_self_eq_norm_sq_to_K]
188+ simpa [← LinearIsometry.integral_comp_comm, inner_self_eq_norm_sq_to_K] using
189+ integral_inner_fourier_fourier f f
136190
137- theorem inner_fourierTransformCLM_toL2_eq (f : 𝓢(V, H)) :
138- ⟪(fourierTransformCLM ℂ f).toLp 2 , (fourierTransformCLM ℂ f).toLp 2 ⟫ =
191+ theorem inner_fourier_toL2_eq (f : 𝓢(V, H)) :
192+ ⟪(𝓕 f).toLp 2 , (𝓕 f).toLp 2 ⟫ =
139193 ⟪f.toLp 2 , f.toLp 2 ⟫ := by
140194 simp only [inner_toL2_toL2_eq]
141195 exact integral_sesq_fourier_fourier f f (innerSL ℂ)
142196
143- theorem norm_fourierTransformCLM_toL2_eq (f : 𝓢(V, H)) :
144- ‖(fourierTransformCLM ℂ f).toLp 2 ‖ = ‖f.toLp 2 ‖ := by
145- simp_rw [norm_eq_sqrt_re_inner (𝕜 := ℂ), inner_fourierTransformCLM_toL2_eq]
197+ @[deprecated (since := "2025-11-13")]
198+ alias inner_fourierTransformCLM_toL2_eq := inner_fourier_toL2_eq
146199
147- /-- The Fourier transform on a real inner product space, as a continuous linear equiv on the
148- Schwartz space. -/
149- noncomputable def fourierTransformCLE : 𝓢(V, E) ≃L[𝕜] 𝓢(V, E) where
150- __ := fourierTransformCLM 𝕜
151- invFun := (compCLMOfContinuousLinearEquiv 𝕜 (LinearIsometryEquiv.neg ℝ (E := V)))
152- ∘L (fourierTransformCLM 𝕜)
153- left_inv := by
154- intro f
155- ext x
156- change 𝓕 (𝓕 (f : V → E)) (-x) = f x
157- rw [← fourierIntegralInv_eq_fourierIntegral_neg, Continuous.fourier_inversion f.continuous
158- f.integrable (fourierTransformCLM 𝕜 f).integrable]
159- right_inv := by
160- intro f
161- ext x
162- change 𝓕 (fun (x : V) ↦ ((𝓕 (f : V → E)) (-x) : E)) x = f x
163- simp_rw [← fourierIntegralInv_eq_fourierIntegral_neg, Continuous.fourier_inversion_inv
164- f.continuous f.integrable (fourierTransformCLM 𝕜 f).integrable]
165- continuous_invFun := ContinuousLinearMap.continuous _
200+ @[simp] theorem norm_fourier_toL2_eq (f : 𝓢(V, H)) :
201+ ‖(𝓕 f).toLp 2 ‖ = ‖f.toLp 2 ‖ := by
202+ simp_rw [norm_eq_sqrt_re_inner (𝕜 := ℂ), inner_fourier_toL2_eq]
166203
167- @[simp] lemma fourierTransformCLE_apply (f : 𝓢(V, E)) :
168- fourierTransformCLE 𝕜 f = 𝓕 (f : V → E) := rfl
204+ @[deprecated (since := "2025-11-13")]
205+ alias norm_fourierTransformCLM_toL2_eq := norm_fourier_toL2_eq
169206
170- @[simp] lemma fourierTransformCLE_symm_apply (f : 𝓢(V, E)) :
171- (fourierTransformCLE 𝕜).symm f = 𝓕⁻ (f : V → E) := by
172- ext x
173- exact (fourierIntegralInv_eq_fourierIntegral_neg f x).symm
207+ end L2
174208
175209end SchwartzMap
0 commit comments