@@ -167,9 +167,39 @@ variable [TopologicalSpace 𝕜] [IsTopologicalRing 𝕜] [TopologicalSpace V] [
167167 {e : AddChar 𝕜 𝕊} {μ : Measure V} {L : V →ₗ[𝕜] W →ₗ[𝕜] 𝕜}
168168 {ν : Measure W} [SigmaFinite μ] [SigmaFinite ν] [SecondCountableTopology V]
169169
170- variable [CompleteSpace E] [CompleteSpace F]
170+ variable {σ : ℂ →+* ℂ} [RingHomIsometric σ]
171+
172+ /-- Fubini's theorem for the Fourier integral.
171173
174+ This is the main technical step in proving both Parseval's identity and self-adjointness of the
175+ Fourier transform. -/
176+ theorem integral_fourierIntegral_swap
177+ {f : V → E} {g : W → F} (M : F →L[ℂ] E →SL[σ] G) (he : Continuous e)
178+ (hL : Continuous fun p : V × W ↦ L p.1 p.2 ) (hf : Integrable f μ) (hg : Integrable g ν) :
179+ ∫ ξ, (∫ x, M (g ξ) (e (-L x ξ) • f x) ∂μ) ∂ν =
180+ ∫ x, (∫ ξ, M (g ξ) (e (-L x ξ) • f x) ∂ν) ∂μ := by
181+ rw [integral_integral_swap]
182+ have : Integrable (fun (p : W × V) ↦ ‖M‖ * (‖g p.1 ‖ * ‖f p.2 ‖)) (ν.prod μ) :=
183+ (hg.norm.mul_prod hf.norm).const_mul _
184+ apply this.mono
185+ · change AEStronglyMeasurable (fun p : W × V ↦ (M (g p.1 ) (e (-(L p.2 ) p.1 ) • f p.2 ) )) _
186+ have A : AEStronglyMeasurable (fun (p : W × V) ↦ e (-L p.2 p.1 ) • f p.2 ) (ν.prod μ) := by
187+ refine (Continuous.aestronglyMeasurable ?_).smul hf.1 .comp_snd
188+ exact he.comp (hL.comp continuous_swap).neg
189+ have A' : AEStronglyMeasurable (fun p ↦ (g p.1 , e (-(L p.2 ) p.1 ) • f p.2 ) : W × V → F × E)
190+ (Measure.prod ν μ) := hg.1 .comp_fst.prodMk A
191+ have hM : Continuous (fun q ↦ M q.1 q.2 : F × E → G) :=
192+ -- There is no `Continuous.clm_apply` for semilinear continuous maps
193+ (M.flip.cont.comp continuous_snd).clm_apply continuous_fst
194+ apply hM.comp_aestronglyMeasurable A' -- `exact` works, but `apply` is 10x faster!
195+ · filter_upwards with ⟨ξ, x⟩
196+ simp only [Function.uncurry_apply_pair, norm_mul, norm_norm, ge_iff_le, ← mul_assoc]
197+ convert M.le_opNorm₂ (g ξ) (e (-L x ξ) • f x) using 2
198+ simp
199+
200+ variable [CompleteSpace E] [CompleteSpace F]
172201/-- The Fourier transform satisfies `∫ 𝓕 f * g = ∫ f * 𝓕 g`, i.e., it is self-adjoint.
202+
173203Version where the multiplication is replaced by a general bilinear form `M`. -/
174204theorem integral_bilin_fourierIntegral_eq_flip
175205 {f : V → E} {g : W → F} (M : E →L[ℂ] F →L[ℂ] G) (he : Continuous e)
@@ -178,33 +208,15 @@ theorem integral_bilin_fourierIntegral_eq_flip
178208 ∫ x, M (f x) (fourierIntegral e ν L.flip g x) ∂μ := by
179209 by_cases hG : CompleteSpace G; swap; · simp [integral, hG]
180210 calc
181- _ = ∫ ξ, M.flip (g ξ) (∫ x, e (-L x ξ) • f x ∂μ) ∂ν := rfl
182- _ = ∫ ξ, (∫ x, M.flip (g ξ) (e (-L x ξ) • f x) ∂μ) ∂ν := by
211+ ∫ ξ, M.flip (g ξ) (∫ x, e (-L x ξ) • f x ∂μ) ∂ν
212+ = ∫ ξ, (∫ x, M.flip (g ξ) (e (-L x ξ) • f x) ∂μ) ∂ν := by
183213 congr with ξ
184214 apply (ContinuousLinearMap.integral_comp_comm _ _).symm
185215 exact (fourierIntegral_convergent_iff he hL _).2 hf
186- _ = ∫ x, (∫ ξ, M.flip (g ξ) (e (-L x ξ) • f x) ∂ν) ∂μ := by
187- rw [integral_integral_swap]
188- have : Integrable (fun (p : W × V) ↦ ‖M‖ * (‖g p.1 ‖ * ‖f p.2 ‖)) (ν.prod μ) :=
189- (hg.norm.mul_prod hf.norm).const_mul _
190- apply this.mono
191- · -- This proof can be golfed but becomes very slow; breaking it up into steps
192- -- speeds up compilation.
193- change AEStronglyMeasurable (fun p : W × V ↦ (M (e (-(L p.2 ) p.1 ) • f p.2 ) (g p.1 ))) _
194- have A : AEStronglyMeasurable (fun (p : W × V) ↦ e (-L p.2 p.1 ) • f p.2 ) (ν.prod μ) := by
195- refine (Continuous.aestronglyMeasurable ?_).smul hf.1 .comp_snd
196- exact he.comp (hL.comp continuous_swap).neg
197- have A' : AEStronglyMeasurable (fun p ↦ (g p.1 , e (-(L p.2 ) p.1 ) • f p.2 ) : W × V → F × E)
198- (Measure.prod ν μ) := hg.1 .comp_fst.prodMk A
199- have B : Continuous (fun q ↦ M q.2 q.1 : F × E → G) := M.flip.continuous₂
200- apply B.comp_aestronglyMeasurable A' -- `exact` works, but `apply` is 10x faster!
201- · filter_upwards with ⟨ξ, x⟩
202- rw [Function.uncurry_apply_pair, Submonoid.smul_def, (M.flip (g ξ)).map_smul,
203- ← Submonoid.smul_def, Circle.norm_smul, ContinuousLinearMap.flip_apply,
204- norm_mul, norm_norm M, norm_mul, norm_norm, norm_norm, mul_comm (‖g _‖), ← mul_assoc]
205- exact M.le_opNorm₂ (f x) (g ξ)
216+ _ = ∫ x, (∫ ξ, M.flip (g ξ) (e (-L x ξ) • f x) ∂ν) ∂μ :=
217+ integral_fourierIntegral_swap M.flip he hL hf hg
206218 _ = ∫ x, (∫ ξ, M (f x) (e (-L.flip ξ x) • g ξ) ∂ν) ∂μ := by
207- simp only [ContinuousLinearMap.flip_apply, ContinuousLinearMap.map_smul_of_tower,
219+ simp only [ContinuousLinearMap.flip_apply, ContinuousLinearMap.map_smul_of_tower,
208220 ContinuousLinearMap.coe_smul', Pi.smul_apply, LinearMap.flip_apply]
209221 _ = ∫ x, M (f x) (∫ ξ, e (-L.flip ξ x) • g ξ ∂ν) ∂μ := by
210222 congr with x
@@ -220,6 +232,42 @@ theorem integral_fourierIntegral_smul_eq_flip
220232 ∫ x, (f x) • (fourierIntegral e ν L.flip g x) ∂μ :=
221233 integral_bilin_fourierIntegral_eq_flip (ContinuousLinearMap.lsmul ℂ ℂ) he hL hf hg
222234
235+ /-- The Fourier transform satisfies `∫ 𝓕 f * conj g = ∫ f * conj (𝓕⁻¹ g)`, which together
236+ with the Fourier inversion theorem yields Plancherel's theorem. The stated version is more
237+ convenient since it does only require integrability of `f` and `g`.
238+
239+ Version where the multiplication is replaced by a general bilinear form `M`. -/
240+ theorem integral_sesq_fourierIntegral_eq_neg_flip
241+ {f : V → E} {g : W → F} (M : E →L⋆[ℂ] F →L[ℂ] G) (he : Continuous e)
242+ (hL : Continuous fun p : V × W ↦ L p.1 p.2 ) (hf : Integrable f μ) (hg : Integrable g ν) :
243+ ∫ ξ, M (fourierIntegral e μ L f ξ) (g ξ) ∂ν =
244+ ∫ x, M (f x) (fourierIntegral e ν (-L.flip) g x) ∂μ := by
245+ by_cases hG : CompleteSpace G; swap; · simp [integral, hG]
246+ calc
247+ ∫ ξ, M.flip (g ξ) (∫ x, e (-L x ξ) • f x ∂μ) ∂ν
248+ = ∫ ξ, (∫ x, M.flip (g ξ) (e (-L x ξ) • f x) ∂μ) ∂ν := by
249+ congr with ξ
250+ apply (ContinuousLinearMap.integral_comp_commSL RCLike.conj_smul _ _).symm
251+ exact (fourierIntegral_convergent_iff he hL _).2 hf
252+ _ = ∫ x, (∫ ξ, M.flip (g ξ) (e (-L x ξ) • f x) ∂ν) ∂μ :=
253+ integral_fourierIntegral_swap M.flip he hL hf hg
254+ _ = ∫ x, (∫ ξ, M (f x) (e (L.flip ξ x) • g ξ) ∂ν) ∂μ := by
255+ congr with x
256+ congr with ξ
257+ rw [← smul_one_smul ℂ _ (f x), ← smul_one_smul ℂ _ (g ξ)]
258+ simp only [map_smulₛₗ, ContinuousLinearMap.flip_apply, LinearMap.flip_apply, RingHom.id_apply,
259+ Circle.smul_def, smul_eq_mul, mul_one, ← Circle.coe_inv_eq_conj, AddChar.map_neg_eq_inv,
260+ inv_inv]
261+ _ = ∫ x, (∫ ξ, M (f x) (e (-(-L.flip ξ) x) • g ξ) ∂ν) ∂μ := by
262+ simp only [LinearMap.flip_apply, ContinuousLinearMap.map_smul_of_tower, LinearMap.neg_apply,
263+ neg_neg]
264+ _ = ∫ x, M (f x) (∫ ξ, e (-(-L.flip ξ) x) • g ξ ∂ν) ∂μ := by
265+ congr with x
266+ apply ContinuousLinearMap.integral_comp_comm
267+ have hLflip : Continuous fun (p : W × V) => (-L.flip p.1 ) p.2 :=
268+ (continuous_neg.comp hL).comp continuous_swap
269+ exact (fourierIntegral_convergent_iff (L := -L.flip) he hLflip x).2 hg
270+
223271end Fubini
224272
225273lemma fourierIntegral_probChar {V W : Type *} {_ : MeasurableSpace V}
0 commit comments