@@ -5,7 +5,10 @@ Authors: David Loeffler
5
5
-/
6
6
import Mathlib.Analysis.Complex.Circle
7
7
import Mathlib.MeasureTheory.Group.Integral
8
+ import Mathlib.MeasureTheory.Integral.SetIntegral
8
9
import Mathlib.MeasureTheory.Measure.Haar.OfBasis
10
+ import Mathlib.MeasureTheory.Constructions.Prod.Integral
11
+ import Mathlib.MeasureTheory.Measure.Haar.InnerProductSpace
9
12
10
13
#align_import analysis.fourier.fourier_transform from "leanprover-community/mathlib" @"fd5edc43dc4f10b85abfe544b88f82cf13c5f844"
11
14
@@ -33,12 +36,17 @@ where `e [x]` is notational sugar for `(e (Multiplicative.ofAdd x) : β)` (avai
33
36
`fourier_transform`). This includes the cases `W` is the dual of `V` and `L` is the canonical
34
37
pairing, or `W = V` and `L` is a bilinear form (e.g. an inner product).
35
38
36
- In namespace `fourier `, we consider the more familiar special case when `V = W = π` and `L` is the
39
+ In namespace `Fourier `, we consider the more familiar special case when `V = W = π` and `L` is the
37
40
multiplication map (but still allowing `π` to be an arbitrary ring equipped with a measure).
38
41
39
42
The most familiar case of all is when `V = W = π = β`, `L` is multiplication, `ΞΌ` is volume, and
40
- `e` is `Real.fourierChar`, i.e. the character `fun x β¦ exp ((2 * Ο * x) * I)`. The Fourier integral
41
- in this case is defined as `Real.fourierIntegral`.
43
+ `e` is `Real.fourierChar`, i.e. the character `fun x β¦ exp ((2 * Ο * x) * I)` (for which we
44
+ introduce the notation `π` in the locale `FourierTransform`).
45
+
46
+ Another familiar case (which generalizes the previous one) is when `V = W` is an inner product space
47
+ over `β` and `L` is the scalar product. We introduce two notations `π` for the Fourier transform in
48
+ this case and `πβ» f (v) = π f (-v)` for the inverse Fourier transform. These notations make
49
+ in particular sense for `V = W = β`.
42
50
43
51
## Main results
44
52
@@ -56,6 +64,7 @@ open MeasureTheory Filter
56
64
open scoped Topology
57
65
58
66
-- To avoid messing around with multiplicative vs. additive characters, we make a notation.
67
+ /-- Notation for multiplicative character applied in an additive setting. -/
59
68
scoped [FourierTransform] notation e "[" x "]" => (e (Multiplicative.ofAdd x) : β)
60
69
61
70
open FourierTransform
@@ -66,7 +75,9 @@ open FourierTransform
66
75
namespace VectorFourier
67
76
68
77
variable {π : Type *} [CommRing π] {V : Type *} [AddCommGroup V] [Module π V] [MeasurableSpace V]
69
- {W : Type *} [AddCommGroup W] [Module π W] {E : Type *} [NormedAddCommGroup E] [NormedSpace β E]
78
+ {W : Type *} [AddCommGroup W] [Module π W]
79
+ {E F G : Type *} [NormedAddCommGroup E] [NormedSpace β E] [NormedAddCommGroup F] [NormedSpace β F]
80
+ [NormedAddCommGroup G] [NormedSpace β G]
70
81
71
82
section Defs
72
83
@@ -174,6 +185,63 @@ theorem fourierIntegral_continuous [FirstCountableTopology W] (he : Continuous e
174
185
175
186
end Continuous
176
187
188
+ section Fubini
189
+
190
+ variable [TopologicalSpace π] [TopologicalRing π] [TopologicalSpace V] [BorelSpace V]
191
+ [TopologicalSpace W] [MeasurableSpace W] [BorelSpace W]
192
+ {e : Multiplicative π β* π} {ΞΌ : Measure V} {L : V ββ[π] W ββ[π] π}
193
+ {Ξ½ : Measure W} [SigmaFinite ΞΌ] [SigmaFinite Ξ½] [SecondCountableTopology V]
194
+
195
+ variable [CompleteSpace E] [CompleteSpace F]
196
+
197
+ /-- The Fourier transform satisfies `β« π f * g = β« f * π g`, i.e., it is self-adjoint.
198
+ Version where the multiplication is replaced by a general bilinear form `M`. -/
199
+ theorem integral_bilin_fourierIntegral_eq_flip
200
+ {f : V β E} {g : W β F} (M : E βL[β] F βL[β] G) (he : Continuous e)
201
+ (hL : Continuous fun p : V Γ W => L p.1 p.2 ) (hf : Integrable f ΞΌ) (hg : Integrable g Ξ½) :
202
+ β« ΞΎ, M (fourierIntegral e ΞΌ L f ΞΎ) (g ΞΎ) βΞ½ =
203
+ β« x, M (f x) (fourierIntegral e Ξ½ L.flip g x) βΞΌ := by
204
+ by_cases hG : CompleteSpace G; swap; Β· simp [integral, hG]
205
+ calc
206
+ β« ΞΎ, M (fourierIntegral e ΞΌ L f ΞΎ) (g ΞΎ) βΞ½
207
+ = β« ΞΎ, M.flip (g ΞΎ) (β« x, e[-L x ΞΎ] β’ f x βΞΌ) βΞ½ := rfl
208
+ _ = β« ΞΎ, (β« x, M.flip (g ΞΎ) (e[-L x ΞΎ] β’ f x) βΞΌ) βΞ½ := by
209
+ congr with ΞΎ
210
+ apply (ContinuousLinearMap.integral_comp_comm _ _).symm
211
+ exact (fourier_integral_convergent_iff he hL _).1 hf
212
+ _ = β« x, (β« ΞΎ, M.flip (g ΞΎ) (e[-L x ΞΎ] β’ f x) βΞ½) βΞΌ := by
213
+ rw [integral_integral_swap]
214
+ have : Integrable (fun (p : W Γ V) β¦ βMβ * (βg p.1 β * βf p.2 β)) (Ξ½.prod ΞΌ) :=
215
+ (hg.norm.prod_mul hf.norm).const_mul _
216
+ apply this.mono
217
+ Β· have A : AEStronglyMeasurable (fun (p : W Γ V) β¦ e[-L p.2 p.1 ] β’ f p.2 ) (Ξ½.prod ΞΌ) := by
218
+ apply (Continuous.aestronglyMeasurable ?_).smul hf.1 .snd
219
+ refine (continuous_induced_rng.mp he).comp (continuous_ofAdd.comp ?_)
220
+ exact (hL.comp continuous_swap).neg
221
+ exact M.flip.continuousβ.comp_aestronglyMeasurable (hg.1 .fst.prod_mk A)
222
+ Β· apply eventually_of_forall
223
+ rintro β¨ΞΎ, xβ©
224
+ simp only [ofAdd_neg, map_inv, coe_inv_unitSphere, SMulHomClass.map_smul,
225
+ ContinuousLinearMap.flip_apply, Function.uncurry_apply_pair, norm_smul, norm_inv,
226
+ norm_eq_of_mem_sphere, inv_one, one_mul, norm_mul, norm_norm]
227
+ exact (M.le_opNormβ (f x) (g ΞΎ)).trans (le_of_eq (by ring))
228
+ _ = β« x, (β« ΞΎ, M (f x) (e[-L.flip ΞΎ x] β’ g ΞΎ) βΞ½) βΞΌ := by simp
229
+ _ = β« x, M (f x) (β« ΞΎ, e[-L.flip ΞΎ x] β’ g ΞΎ βΞ½) βΞΌ := by
230
+ congr with x
231
+ apply ContinuousLinearMap.integral_comp_comm
232
+ apply (fourier_integral_convergent_iff he _ _).1 hg
233
+ exact hL.comp continuous_swap
234
+
235
+ /-- The Fourier transform satisfies `β« π f * g = β« f * π g`, i.e., it is self-adjoint. -/
236
+ theorem integral_fourierIntegral_smul_eq_flip
237
+ {f : V β β} {g : W β F} (he : Continuous e)
238
+ (hL : Continuous fun p : V Γ W => L p.1 p.2 ) (hf : Integrable f ΞΌ) (hg : Integrable g Ξ½) :
239
+ β« ΞΎ, (fourierIntegral e ΞΌ L f ΞΎ) β’ (g ΞΎ) βΞ½ =
240
+ β« x, (f x) β’ (fourierIntegral e Ξ½ L.flip g x) βΞΌ :=
241
+ integral_bilin_fourierIntegral_eq_flip (ContinuousLinearMap.lsmul β β) he hL hf hg
242
+
243
+ end Fubini
244
+
177
245
end VectorFourier
178
246
179
247
/-! ## Fourier theory for functions on `π` -/
@@ -232,12 +300,14 @@ def fourierChar : Multiplicative β β* π where
232
300
map_mul' x y := by simp only; rw [toAdd_mul, mul_add, expMapCircle_add]
233
301
#align real.fourier_char Real.fourierChar
234
302
235
- theorem fourierChar_apply (x : β) : Real.fourierChar[x] = Complex.exp (β(2 * Ο * x) * Complex.I) :=
303
+ @[inherit_doc] scoped [FourierTransform] notation "π" => Real.fourierChar
304
+
305
+ theorem fourierChar_apply (x : β) : π[x] = Complex.exp (β(2 * Ο * x) * Complex.I) :=
236
306
by rfl
237
307
#align real.fourier_char_apply Real.fourierChar_apply
238
308
239
309
@[continuity]
240
- theorem continuous_fourierChar : Continuous Real.fourierChar :=
310
+ theorem continuous_fourierChar : Continuous π :=
241
311
(map_continuous expMapCircle).comp (continuous_const.mul continuous_toAdd)
242
312
#align real.continuous_fourier_char Real.continuous_fourierChar
243
313
@@ -251,23 +321,71 @@ theorem vector_fourierIntegral_eq_integral_exp_smul {V : Type*} [AddCommGroup V]
251
321
by simp_rw [VectorFourier.fourierIntegral, Real.fourierChar_apply, mul_neg, neg_mul]
252
322
#align real.vector_fourier_integral_eq_integral_exp_smul Real.vector_fourierIntegral_eq_integral_exp_smul
253
323
254
- /-- The Fourier integral for `f : β β E`, with respect to the standard additive character and
255
- measure on `β`. -/
256
- def fourierIntegral (f : β β E) (w : β) :=
257
- Fourier.fourierIntegral fourierChar volume f w
324
+
325
+ variable {E : Type *} [NormedAddCommGroup E] [NormedSpace β E]
326
+ {V : Type *} [NormedAddCommGroup V]
327
+ [InnerProductSpace β V] [MeasurableSpace V] [BorelSpace V] [FiniteDimensional β V]
328
+ {W : Type *} [NormedAddCommGroup W]
329
+ [InnerProductSpace β W] [MeasurableSpace W] [BorelSpace W] [FiniteDimensional β W]
330
+
331
+ open scoped RealInnerProductSpace
332
+
333
+ /-- The Fourier transform of a function on an inner product space, with respect to the standard
334
+ additive character `Ο β¦ exp (2 i Ο Ο)`. -/
335
+ def fourierIntegral (f : V β E) (w : V) : E :=
336
+ VectorFourier.fourierIntegral π volume (innerβ V) f w
258
337
#align real.fourier_integral Real.fourierIntegral
259
338
260
- theorem fourierIntegral_def (f : β β E) (w : β) :
261
- fourierIntegral f w = β« v : β, fourierChar[-(v * w)] β’ f v :=
262
- rfl
263
- #align real.fourier_integral_def Real.fourierIntegral_def
339
+ /-- The inverse Fourier transform of a function on an inner product space, defined as the Fourier
340
+ transform but with opposite sign in the exponential. -/
341
+ def fourierIntegralInv (f : V β E) (w : V) : E :=
342
+ VectorFourier.fourierIntegral π volume (-innerβ V) f w
264
343
265
344
@[inherit_doc] scoped [FourierTransform] notation "π" => Real.fourierIntegral
345
+ @[inherit_doc] scoped [FourierTransform] notation "πβ»" => Real.fourierIntegralInv
346
+
347
+ lemma fourierIntegral_eq (f : V β E) (w : V) :
348
+ π f w = β« v, π[-βͺv, wβ«] β’ f v := rfl
266
349
267
- theorem fourierIntegral_eq_integral_exp_smul {E : Type *} [NormedAddCommGroup E] [NormedSpace β E]
268
- (f : β β E) (w : β) :
350
+ lemma fourierIntegral_eq' (f : V β E) (w : V) :
351
+ π f w = β« v, Complex.exp ((β(-2 * Ο * βͺv, wβ«) * Complex.I)) β’ f v := by
352
+ simp_rw [fourierIntegral_eq, Real.fourierChar_apply, mul_neg, neg_mul]
353
+
354
+ lemma fourierIntegralInv_eq (f : V β E) (w : V) :
355
+ πβ» f w = β« v, π[βͺv, wβ«] β’ f v := by
356
+ simp [fourierIntegralInv, VectorFourier.fourierIntegral]
357
+
358
+ lemma fourierIntegralInv_eq' (f : V β E) (w : V) :
359
+ πβ» f w = β« v, Complex.exp ((β(2 * Ο * βͺv, wβ«) * Complex.I)) β’ f v := by
360
+ simp_rw [fourierIntegralInv_eq, Real.fourierChar_apply]
361
+
362
+ lemma fourierIntegralInv_eq_fourierIntegral_neg (f : V β E) (w : V) :
363
+ πβ» f w = π f (-w) := by
364
+ simp [fourierIntegral_eq, fourierIntegralInv_eq]
365
+
366
+ lemma fourierIntegral_comp_linearIsometry (A : W ββα΅’[β] V) (f : V β E) (w : W) :
367
+ π (f β A) w = (π f) (A w) := by
368
+ simp only [fourierIntegral_eq, ofAdd_neg, map_inv, coe_inv_unitSphere, Function.comp_apply,
369
+ β MeasurePreserving.integral_comp A.measurePreserving A.toHomeomorph.measurableEmbedding,
370
+ β A.inner_map_map]
371
+
372
+ lemma fourierIntegralInv_comp_linearIsometry (A : W ββα΅’[β] V) (f : V β E) (w : W) :
373
+ πβ» (f β A) w = (πβ» f) (A w) := by
374
+ simp [fourierIntegralInv_eq_fourierIntegral_neg, fourierIntegral_comp_linearIsometry]
375
+
376
+ theorem fourierIntegral_real_eq (f : β β E) (w : β) :
377
+ fourierIntegral f w = β« v : β, π[-(v * w)] β’ f v :=
378
+ rfl
379
+ #align real.fourier_integral_def Real.fourierIntegral_real_eq
380
+
381
+ @[deprecated] alias fourierIntegral_def := fourierIntegral_real_eq -- deprecated on 2024-02-21
382
+
383
+ theorem fourierIntegral_real_eq_integral_exp_smul (f : β β E) (w : β) :
269
384
π f w = β« v : β, Complex.exp (β(-2 * Ο * v * w) * Complex.I) β’ f v := by
270
- simp_rw [fourierIntegral_def, Real.fourierChar_apply, mul_neg, neg_mul, mul_assoc]
271
- #align real.fourier_integral_eq_integral_exp_smul Real.fourierIntegral_eq_integral_exp_smul
385
+ simp_rw [fourierIntegral_real_eq, Real.fourierChar_apply, mul_neg, neg_mul, mul_assoc]
386
+ #align real.fourier_integral_eq_integral_exp_smul Real.fourierIntegral_real_eq_integral_exp_smul
387
+
388
+ @[deprecated] alias fourierIntegral_eq_integral_exp_smul :=
389
+ fourierIntegral_real_eq_integral_exp_smul -- deprecated on 2024-02-21
272
390
273
391
end Real
0 commit comments