5.5. Mathlib candidates: finite Fourier and Euclidean geometry
Finite Fourier inversion, the higher-codimension d-plane transform, diagonal changes of variables, and a triple-integral Fubini bridge.
Finite Fourier analysis
-
AddChar.map_finsetSum[complete] -
ZMod.sum_stdAddChar_mul[complete] -
ZMod.norm_stdAddChar[complete] -
ZMod.conj_stdAddChar[complete] -
ZMod.sum_dft_mul_dft_mul_stdAddChar[complete] -
ZMod.piDFT[complete] -
ZMod.piDFT_apply_zero[complete] -
ZMod.sum_stdAddChar_dotProduct[complete] -
ZMod.sum_stdAddChar_smul_piDFT[complete] -
ZMod.piDFT_inversion[complete]
The discrete Fourier transform on a product of cyclic groups. Mathlib's ZMod.dft covers a single cyclic group ZMod N together with its inversion formula, but neither the transform on \iota\to\mathbb Z/N\mathbb Z with the dot-product pairing, which is what one needs whenever (\mathbb Z/N\mathbb Z)^m stands in for a discretized Euclidean space, nor a convolution theorem for the one-dimensional transform. Both are proved here. Everything rests on orthogonality of characters on a product,
\sum_{\xi}\mathrm e(\xi\cdot t)=\begin{cases}N^{|\iota|}&t=0\\0&t\neq0,\end{cases}
which follows by factoring the character of a dot product over the coordinates — an additive character carries a finite sum to a finite product, the first declaration — and reducing to the one-dimensional statement, itself the public form of a computation Mathlib currently performs inline inside a private proof. Inversion is stated as \sum_\xi\mathrm e(\xi\cdot x)\widehat f(\xi)=N^{|\iota|}f(x), avoiding division. The convolution theorem takes the matching form \sum_\omega\widehat u(\omega)\widehat v(\omega)\mathrm e(\omega t)=N\sum_bu(b)v(t-b). Along the way the standard character is recorded as unimodular, so that conjugating it negates its argument.
Lean code for Theorem5.5.1●10 declarations
Associated Lean declarations
-
AddChar.map_finsetSum[complete]
-
ZMod.sum_stdAddChar_mul[complete]
-
ZMod.norm_stdAddChar[complete]
-
ZMod.conj_stdAddChar[complete]
-
ZMod.sum_dft_mul_dft_mul_stdAddChar[complete]
-
ZMod.piDFT[complete]
-
ZMod.piDFT_apply_zero[complete]
-
ZMod.sum_stdAddChar_dotProduct[complete]
-
ZMod.sum_stdAddChar_smul_piDFT[complete]
-
ZMod.piDFT_inversion[complete]
-
AddChar.map_finsetSum[complete] -
ZMod.sum_stdAddChar_mul[complete] -
ZMod.norm_stdAddChar[complete] -
ZMod.conj_stdAddChar[complete] -
ZMod.sum_dft_mul_dft_mul_stdAddChar[complete] -
ZMod.piDFT[complete] -
ZMod.piDFT_apply_zero[complete] -
ZMod.sum_stdAddChar_dotProduct[complete] -
ZMod.sum_stdAddChar_smul_piDFT[complete] -
ZMod.piDFT_inversion[complete]
-
theoremdefined in LeanRidgelet/ToMathlib/CyclicFourier.leancomplete
theorem AddChar.map_finsetSum.{u_1, u_2, u_3} {ι : Type u_1} {A : Type u_2} {M : Type u_3} [AddCommMonoid A] [CommMonoid M] (ψ : AddChar A M) (s : Finset ι) (f : ι → A) : ψ (∑ i ∈ s, f i) = ∏ i ∈ s, ψ (f i)
theorem AddChar.map_finsetSum.{u_1, u_2, u_3} {ι : Type u_1} {A : Type u_2} {M : Type u_3} [AddCommMonoid A] [CommMonoid M] (ψ : AddChar A M) (s : Finset ι) (f : ι → A) : ψ (∑ i ∈ s, f i) = ∏ i ∈ s, ψ (f i)
An additive character carries a finite sum to a finite product. The two-term case is `AddChar.map_add_eq_mul`.
-
theoremdefined in LeanRidgelet/ToMathlib/CyclicFourier.leancomplete
theorem ZMod.sum_stdAddChar_mul {N : ℕ} [NeZero N] (t : ZMod N) : ∑ c, ZMod.stdAddChar (c * t) = if t = 0 then ↑N else 0
theorem ZMod.sum_stdAddChar_mul {N : ℕ} [NeZero N] (t : ZMod N) : ∑ c, ZMod.stdAddChar (c * t) = if t = 0 then ↑N else 0
Orthogonality of the standard additive character on `ZMod N`: summing `e(c t)` over `c` gives `N` at `t = 0` and cancels otherwise.
-
theoremdefined in LeanRidgelet/ToMathlib/CyclicFourier.leancomplete
theorem ZMod.norm_stdAddChar {N : ℕ} [NeZero N] (z : ZMod N) : ‖ZMod.stdAddChar z‖ = 1
theorem ZMod.norm_stdAddChar {N : ℕ} [NeZero N] (z : ZMod N) : ‖ZMod.stdAddChar z‖ = 1
The standard additive character takes values on the unit circle.
-
theoremdefined in LeanRidgelet/ToMathlib/CyclicFourier.leancomplete
theorem ZMod.conj_stdAddChar {N : ℕ} [NeZero N] (z : ZMod N) : (starRingEnd ℂ) (ZMod.stdAddChar z) = ZMod.stdAddChar (-z)
theorem ZMod.conj_stdAddChar {N : ℕ} [NeZero N] (z : ZMod N) : (starRingEnd ℂ) (ZMod.stdAddChar z) = ZMod.stdAddChar (-z)
Conjugating the standard additive character negates its argument.
-
theoremdefined in LeanRidgelet/ToMathlib/CyclicFourier.leancomplete
theorem ZMod.sum_dft_mul_dft_mul_stdAddChar {N : ℕ} [NeZero N] (u v : ZMod N → ℂ) (t : ZMod N) : ∑ ω, ZMod.dft u ω * ZMod.dft v ω * ZMod.stdAddChar (ω * t) = ↑N * ∑ b, u b * v (t - b)
theorem ZMod.sum_dft_mul_dft_mul_stdAddChar {N : ℕ} [NeZero N] (u v : ZMod N → ℂ) (t : ZMod N) : ∑ ω, ZMod.dft u ω * ZMod.dft v ω * ZMod.stdAddChar (ω * t) = ↑N * ∑ b, u b * v (t - b)
**Convolution theorem on `ZMod N`**, in the inverted form that avoids dividing: the inverse transform of the product `û v̂` is `N` times the cyclic convolution of `u` and `v`. Mathlib has `ZMod.dft` and its inversion formula but no convolution theorem for it.
-
defdefined in LeanRidgelet/ToMathlib/CyclicFourier.leancomplete
def ZMod.piDFT.{u_1, u_2} {N : ℕ} [NeZero N] {ι : Type u_1} [Fintype ι] [DecidableEq ι] {E : Type u_2} [AddCommGroup E] [Module ℂ E] (f : (ι → ZMod N) → E) (ξ : ι → ZMod N) : E
def ZMod.piDFT.{u_1, u_2} {N : ℕ} [NeZero N] {ι : Type u_1} [Fintype ι] [DecidableEq ι] {E : Type u_2} [AddCommGroup E] [Module ℂ E] (f : (ι → ZMod N) → E) (ξ : ι → ZMod N) : E
Implementation after
:=:= ∑ x : ι → ZMod N, stdAddChar (-(ξ ⬝ᵥ x)) • f x
The discrete Fourier transform on `ι → ZMod N` with the dot-product pairing: `f̂(ξ) = ∑ₓ e(-ξ·x) f(x)`, the `|ι|`-dimensional counterpart of `ZMod.dft`.
-
theoremdefined in LeanRidgelet/ToMathlib/CyclicFourier.leancomplete
theorem ZMod.piDFT_apply_zero.{u_1, u_2} {N : ℕ} [NeZero N] {ι : Type u_1} [Fintype ι] [DecidableEq ι] {E : Type u_2} [AddCommGroup E] [Module ℂ E] (f : (ι → ZMod N) → E) : ZMod.piDFT f 0 = ∑ x, f x
theorem ZMod.piDFT_apply_zero.{u_1, u_2} {N : ℕ} [NeZero N] {ι : Type u_1} [Fintype ι] [DecidableEq ι] {E : Type u_2} [AddCommGroup E] [Module ℂ E] (f : (ι → ZMod N) → E) : ZMod.piDFT f 0 = ∑ x, f x
The zero frequency of the transform is the total sum.
-
theoremdefined in LeanRidgelet/ToMathlib/CyclicFourier.leancomplete
theorem ZMod.sum_stdAddChar_dotProduct.{u_1} {N : ℕ} [NeZero N] {ι : Type u_1} [Fintype ι] [DecidableEq ι] (t : ι → ZMod N) : ∑ ξ, ZMod.stdAddChar (ξ ⬝ᵥ t) = if t = 0 then ↑N ^ Fintype.card ι else 0
theorem ZMod.sum_stdAddChar_dotProduct.{u_1} {N : ℕ} [NeZero N] {ι : Type u_1} [Fintype ι] [DecidableEq ι] (t : ι → ZMod N) : ∑ ξ, ZMod.stdAddChar (ξ ⬝ᵥ t) = if t = 0 then ↑N ^ Fintype.card ι else 0
Orthogonality of characters on `ι → ZMod N`. Factoring `e(ξ·t)` over the coordinates turns the sum into a product of one-dimensional sums, each given by `ZMod.sum_stdAddChar_mul`.
-
theoremdefined in LeanRidgelet/ToMathlib/CyclicFourier.leancomplete
theorem ZMod.sum_stdAddChar_smul_piDFT.{u_1, u_2} {N : ℕ} [NeZero N] {ι : Type u_1} [Fintype ι] [DecidableEq ι] {E : Type u_2} [AddCommGroup E] [Module ℂ E] (f : (ι → ZMod N) → E) (x : ι → ZMod N) : ∑ ξ, ZMod.stdAddChar (ξ ⬝ᵥ x) • ZMod.piDFT f ξ = ↑N ^ Fintype.card ι • f x
theorem ZMod.sum_stdAddChar_smul_piDFT.{u_1, u_2} {N : ℕ} [NeZero N] {ι : Type u_1} [Fintype ι] [DecidableEq ι] {E : Type u_2} [AddCommGroup E] [Module ℂ E] (f : (ι → ZMod N) → E) (x : ι → ZMod N) : ∑ ξ, ZMod.stdAddChar (ξ ⬝ᵥ x) • ZMod.piDFT f ξ = ↑N ^ Fintype.card ι • f x
Fourier inversion on `ι → ZMod N`, in the form that avoids dividing: `∑_ξ e(ξ·x) f̂(ξ) = N^{|ι|} • f(x)`. -
theoremdefined in LeanRidgelet/ToMathlib/CyclicFourier.leancomplete
theorem ZMod.piDFT_inversion.{u_1, u_2} {N : ℕ} [NeZero N] {ι : Type u_1} [Fintype ι] [DecidableEq ι] {E : Type u_2} [AddCommGroup E] [Module ℂ E] (f : (ι → ZMod N) → E) (x : ι → ZMod N) : f x = (↑N ^ Fintype.card ι)⁻¹ • ∑ ξ, ZMod.stdAddChar (ξ ⬝ᵥ x) • ZMod.piDFT f ξ
theorem ZMod.piDFT_inversion.{u_1, u_2} {N : ℕ} [NeZero N] {ι : Type u_1} [Fintype ι] [DecidableEq ι] {E : Type u_2} [AddCommGroup E] [Module ℂ E] (f : (ι → ZMod N) → E) (x : ι → ZMod N) : f x = (↑N ^ Fintype.card ι)⁻¹ • ∑ ξ, ZMod.stdAddChar (ξ ⬝ᵥ x) • ZMod.piDFT f ξ
Fourier inversion in the form solved for `f`.
-
MeasureTheory.planeOrthogonalSplit[complete] -
MeasureTheory.measurePreserving_planeOrthogonalSplit[complete] -
MeasureTheory.inner_planeOrthogonalSplit[complete] -
MeasureTheory.dPlaneTransform[complete] -
MeasureTheory.integrable_comp_planeOrthogonalSplit[complete] -
MeasureTheory.ae_integrable_dPlaneTransform_section[complete] -
MeasureTheory.integrable_dPlaneTransform[complete] -
MeasureTheory.integral_dPlaneTransform[complete] -
MeasureTheory.fourier_slice_dPlaneTransform[complete] -
MeasureTheory.frameVectorCodimOne[complete] -
MeasureTheory.norm_frameVectorCodimOne[complete] -
MeasureTheory.eq_smul_single_fin_one[complete] -
MeasureTheory.apply_eq_smul_frameVectorCodimOne[complete] -
MeasureTheory.range_eq_span_frameVectorCodimOne[complete] -
MeasureTheory.dPlaneTransform_codimOne[complete] -
MeasureTheory.norm_eq_abs_apply_fin_one[complete] -
MeasureTheory.frameOfUnitVector[complete] -
MeasureTheory.frameOfUnitVector_apply[complete] -
MeasureTheory.frameVectorCodimOne_frameOfUnitVector[complete] -
MeasureTheory.frameOfUnitVector_frameVectorCodimOne[complete] -
MeasureTheory.unitVectorFinOne[complete] -
MeasureTheory.coe_unitVectorFinOne[complete] -
MeasureTheory.integral_euclideanSpace_fin_one[complete]
The d-plane transform and its Fourier slice theorem. The d-plane transform integrates over a d-dimensional affine subspace, parametrized by an orthonormal k-frame presented as a linear isometry L:\mathbb R^k\to E with k=m-d:
P_d[f](L,\boldsymbol b)=\int_{(\operatorname{range}L)^\perp}f(L\boldsymbol b+y)\,\mathrm dy.
At k=1 it is the Radon transform above — a codimension-one frame is a unit vector, its range is the line through that vector, and the last declaration is the resulting identity dPlaneTransform f L b = radonTransform f (L e₀) (b 0) — and at k=m-1 it is the X-ray transform; Mathlib has neither it nor its slice theorem in any codimension. Both are proved here exactly as in the k=1 case: the parametrization (\boldsymbol b,y)\mapsto L\boldsymbol b+y of E by the range of the frame and its orthogonal complement is a linear isometry equivalence, hence measure preserving, and the rest is Fubini. The L¹ theory and the Fubini corollary \int P_d[f](L,\boldsymbol b)\,\mathrm d\boldsymbol b=\int f come with it, and the Fourier slice theorem reads
\mathcal Ff(L\boldsymbol\omega)=\mathcal F\bigl(P_d[f](L,\cdot)\bigr)(\boldsymbol\omega).
It needs no measure on the space of frames, being a statement at a fixed frame; an invariant measure on the Stiefel manifold is needed only for the inversion formula.
Lean code for Theorem5.5.2●23 declarations
Associated Lean declarations
-
MeasureTheory.planeOrthogonalSplit[complete]
-
MeasureTheory.measurePreserving_planeOrthogonalSplit[complete]
-
MeasureTheory.inner_planeOrthogonalSplit[complete]
-
MeasureTheory.dPlaneTransform[complete]
-
MeasureTheory.integrable_comp_planeOrthogonalSplit[complete]
-
MeasureTheory.ae_integrable_dPlaneTransform_section[complete]
-
MeasureTheory.integrable_dPlaneTransform[complete]
-
MeasureTheory.integral_dPlaneTransform[complete]
-
MeasureTheory.fourier_slice_dPlaneTransform[complete]
-
MeasureTheory.frameVectorCodimOne[complete]
-
MeasureTheory.norm_frameVectorCodimOne[complete]
-
MeasureTheory.eq_smul_single_fin_one[complete]
-
MeasureTheory.apply_eq_smul_frameVectorCodimOne[complete]
-
MeasureTheory.range_eq_span_frameVectorCodimOne[complete]
-
MeasureTheory.dPlaneTransform_codimOne[complete]
-
MeasureTheory.norm_eq_abs_apply_fin_one[complete]
-
MeasureTheory.frameOfUnitVector[complete]
-
MeasureTheory.frameOfUnitVector_apply[complete]
-
MeasureTheory.frameVectorCodimOne_frameOfUnitVector[complete]
-
MeasureTheory.frameOfUnitVector_frameVectorCodimOne[complete]
-
MeasureTheory.unitVectorFinOne[complete]
-
MeasureTheory.coe_unitVectorFinOne[complete]
-
MeasureTheory.integral_euclideanSpace_fin_one[complete]
-
MeasureTheory.planeOrthogonalSplit[complete] -
MeasureTheory.measurePreserving_planeOrthogonalSplit[complete] -
MeasureTheory.inner_planeOrthogonalSplit[complete] -
MeasureTheory.dPlaneTransform[complete] -
MeasureTheory.integrable_comp_planeOrthogonalSplit[complete] -
MeasureTheory.ae_integrable_dPlaneTransform_section[complete] -
MeasureTheory.integrable_dPlaneTransform[complete] -
MeasureTheory.integral_dPlaneTransform[complete] -
MeasureTheory.fourier_slice_dPlaneTransform[complete] -
MeasureTheory.frameVectorCodimOne[complete] -
MeasureTheory.norm_frameVectorCodimOne[complete] -
MeasureTheory.eq_smul_single_fin_one[complete] -
MeasureTheory.apply_eq_smul_frameVectorCodimOne[complete] -
MeasureTheory.range_eq_span_frameVectorCodimOne[complete] -
MeasureTheory.dPlaneTransform_codimOne[complete] -
MeasureTheory.norm_eq_abs_apply_fin_one[complete] -
MeasureTheory.frameOfUnitVector[complete] -
MeasureTheory.frameOfUnitVector_apply[complete] -
MeasureTheory.frameVectorCodimOne_frameOfUnitVector[complete] -
MeasureTheory.frameOfUnitVector_frameVectorCodimOne[complete] -
MeasureTheory.unitVectorFinOne[complete] -
MeasureTheory.coe_unitVectorFinOne[complete] -
MeasureTheory.integral_euclideanSpace_fin_one[complete]
-
defdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
def MeasureTheory.planeOrthogonalSplit.{u_1} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) : EuclideanSpace ℝ (Fin k) × ↥L.rangeᗮ ≃ᵐ E
def MeasureTheory.planeOrthogonalSplit.{u_1} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) : EuclideanSpace ℝ (Fin k) × ↥L.rangeᗮ ≃ᵐ E
Implementation after
:=:= (MeasurableEquiv.toLp 2 (EuclideanSpace ℝ (Fin k) × ((LinearMap.range L.toLinearMap)ᗮ : Submodule ℝ E))).trans (((LinearIsometryEquiv.withLpProdCongr 2 L.equivRange (LinearIsometryEquiv.refl ℝ ((LinearMap.range L.toLinearMap)ᗮ : Submodule ℝ E))).trans (LinearMap.range L.toLinearMap).orthogonalDecomposition.symm).toMeasurableEquiv)The parametrization `(b, y) ↦ L b + y` of `E` by the range of the frame `L` and its orthogonal complement, as a measurable equivalence. For `k = 1` this is `MeasureTheory.lineOrthogonalSplit`.
-
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.measurePreserving_planeOrthogonalSplit.{u_1} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) : MeasureTheory.MeasurePreserving (⇑(MeasureTheory.planeOrthogonalSplit L)) MeasureTheory.volume MeasureTheory.volume
theorem MeasureTheory.measurePreserving_planeOrthogonalSplit.{u_1} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) : MeasureTheory.MeasurePreserving (⇑(MeasureTheory.planeOrthogonalSplit L)) MeasureTheory.volume MeasureTheory.volume
The plane–complement parametrization preserves Lebesgue measure.
-
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.inner_planeOrthogonalSplit.{u_1} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) (b ω : EuclideanSpace ℝ (Fin k)) (y : ↥L.rangeᗮ) : inner ℝ (L b + ↑y) (L ω) = inner ℝ b ω
theorem MeasureTheory.inner_planeOrthogonalSplit.{u_1} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) (b ω : EuclideanSpace ℝ (Fin k)) (y : ↥L.rangeᗮ) : inner ℝ (L b + ↑y) (L ω) = inner ℝ b ω
Under the splitting, pairing against a vector of the range of `L` only sees the coordinate along the frame: `⟪L b + y, L ω⟫ = ⟪b, ω⟫`.
-
defdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
def MeasureTheory.dPlaneTransform.{u_1, u_2} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] {F : Type u_2} [NormedAddCommGroup F] [NormedSpace ℝ F] (f : E → F) (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) (b : EuclideanSpace ℝ (Fin k)) : F
def MeasureTheory.dPlaneTransform.{u_1, u_2} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] {F : Type u_2} [NormedAddCommGroup F] [NormedSpace ℝ F] (f : E → F) (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) (b : EuclideanSpace ℝ (Fin k)) : F
Implementation after
:=:= ∫ y : ((LinearMap.range L.toLinearMap)ᗮ : Submodule ℝ E), f (L b + (y : E))
The `d`-plane transform `P_d[f](L, b) = ∫_{(range L)ᗮ} f (L b + y) dy`, the integral of `f` over the `d`-plane through `L b` parallel to the orthogonal complement of the frame. -
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.integrable_comp_planeOrthogonalSplit.{u_1, u_2} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] {F : Type u_2} [NormedAddCommGroup F] {f : E → F} (hf : MeasureTheory.Integrable f MeasureTheory.volume) (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) : MeasureTheory.Integrable (fun by_ ↦ f (L by_.1 + ↑by_.2)) MeasureTheory.volume
theorem MeasureTheory.integrable_comp_planeOrthogonalSplit.{u_1, u_2} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] {F : Type u_2} [NormedAddCommGroup F] {f : E → F} (hf : MeasureTheory.Integrable f MeasureTheory.volume) (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) : MeasureTheory.Integrable (fun by_ ↦ f (L by_.1 + ↑by_.2)) MeasureTheory.volume
Transport of integrability through the plane–complement parametrization.
-
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.ae_integrable_dPlaneTransform_section.{u_1, u_2} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] {F : Type u_2} [NormedAddCommGroup F] {f : E → F} (hf : MeasureTheory.Integrable f MeasureTheory.volume) (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) : ∀ᵐ (b : EuclideanSpace ℝ (Fin k)), MeasureTheory.Integrable (fun y ↦ f (L b + ↑y)) MeasureTheory.volume
theorem MeasureTheory.ae_integrable_dPlaneTransform_section.{u_1, u_2} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] {F : Type u_2} [NormedAddCommGroup F] {f : E → F} (hf : MeasureTheory.Integrable f MeasureTheory.volume) (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) : ∀ᵐ (b : EuclideanSpace ℝ (Fin k)), MeasureTheory.Integrable (fun y ↦ f (L b + ↑y)) MeasureTheory.volume
For integrable `f`, almost every `d`-plane section is integrable, so the transform is an absolutely convergent integral at almost every offset.
-
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.integrable_dPlaneTransform.{u_1, u_2} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] {F : Type u_2} [NormedAddCommGroup F] [NormedSpace ℝ F] {f : E → F} (hf : MeasureTheory.Integrable f MeasureTheory.volume) (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) : MeasureTheory.Integrable (MeasureTheory.dPlaneTransform f L) MeasureTheory.volume
theorem MeasureTheory.integrable_dPlaneTransform.{u_1, u_2} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] {F : Type u_2} [NormedAddCommGroup F] [NormedSpace ℝ F] {f : E → F} (hf : MeasureTheory.Integrable f MeasureTheory.volume) (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) : MeasureTheory.Integrable (MeasureTheory.dPlaneTransform f L) MeasureTheory.volume
The `d`-plane transform of an integrable function is integrable in the offset.
-
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.integral_dPlaneTransform.{u_1, u_2} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] {F : Type u_2} [NormedAddCommGroup F] [NormedSpace ℝ F] {f : E → F} (hf : MeasureTheory.Integrable f MeasureTheory.volume) (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) : ∫ (b : EuclideanSpace ℝ (Fin k)), MeasureTheory.dPlaneTransform f L b = ∫ (x : E), f x
theorem MeasureTheory.integral_dPlaneTransform.{u_1, u_2} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] {F : Type u_2} [NormedAddCommGroup F] [NormedSpace ℝ F] {f : E → F} (hf : MeasureTheory.Integrable f MeasureTheory.volume) (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) : ∫ (b : EuclideanSpace ℝ (Fin k)), MeasureTheory.dPlaneTransform f L b = ∫ (x : E), f x
The Fubini corollary `∫ b, P_d[f](L, b) db = ∫ x, f x dx`.
-
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.fourier_slice_dPlaneTransform.{u_1, u_3} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] {F' : Type u_3} [NormedAddCommGroup F'] [NormedSpace ℂ F'] {f : E → F'} (hf : MeasureTheory.Integrable f MeasureTheory.volume) (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) (ω : EuclideanSpace ℝ (Fin k)) : FourierTransform.fourier f (L ω) = FourierTransform.fourier (MeasureTheory.dPlaneTransform f L) ω
theorem MeasureTheory.fourier_slice_dPlaneTransform.{u_1, u_3} {k : ℕ} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] {F' : Type u_3} [NormedAddCommGroup F'] [NormedSpace ℂ F'] {f : E → F'} (hf : MeasureTheory.Integrable f MeasureTheory.volume) (L : EuclideanSpace ℝ (Fin k) →ₗᵢ[ℝ] E) (ω : EuclideanSpace ℝ (Fin k)) : FourierTransform.fourier f (L ω) = FourierTransform.fourier (MeasureTheory.dPlaneTransform f L) ω
**Fourier slice theorem for the `d`-plane transform** (the projection-slice theorem in codimension `k`): the `k`-dimensional Fourier transform of the transform in the offset is the `m`-dimensional Fourier transform of `f` restricted to the range of the frame, `𝓕 f (L ω) = 𝓕(P_d[f](L,·))(ω)`. For `k = 1` this is `MeasureTheory.fourier_slice_radonTransform`.
-
defdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
def MeasureTheory.frameVectorCodimOne.{u_1} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (L : EuclideanSpace ℝ (Fin 1) →ₗᵢ[ℝ] E) : E
def MeasureTheory.frameVectorCodimOne.{u_1} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (L : EuclideanSpace ℝ (Fin 1) →ₗᵢ[ℝ] E) : E
Implementation after
:=:= L (EuclideanSpace.single (0 : Fin 1) (1 : ℝ))
The unit vector that a codimension-one frame is: an orthonormal `1`-frame in `E` is a unit vector, namely the image of the standard basis vector of `ℝ^1`.
-
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.norm_frameVectorCodimOne.{u_1} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (L : EuclideanSpace ℝ (Fin 1) →ₗᵢ[ℝ] E) : ‖MeasureTheory.frameVectorCodimOne L‖ = 1
theorem MeasureTheory.norm_frameVectorCodimOne.{u_1} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (L : EuclideanSpace ℝ (Fin 1) →ₗᵢ[ℝ] E) : ‖MeasureTheory.frameVectorCodimOne L‖ = 1
-
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.eq_smul_single_fin_one (b : EuclideanSpace ℝ (Fin 1)) : b = b.ofLp 0 • EuclideanSpace.single 0 1
theorem MeasureTheory.eq_smul_single_fin_one (b : EuclideanSpace ℝ (Fin 1)) : b = b.ofLp 0 • EuclideanSpace.single 0 1
A vector of `ℝ^1` is its only coordinate times the standard basis vector.
-
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.apply_eq_smul_frameVectorCodimOne.{u_1} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (L : EuclideanSpace ℝ (Fin 1) →ₗᵢ[ℝ] E) (b : EuclideanSpace ℝ (Fin 1)) : L b = b.ofLp 0 • MeasureTheory.frameVectorCodimOne L
theorem MeasureTheory.apply_eq_smul_frameVectorCodimOne.{u_1} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (L : EuclideanSpace ℝ (Fin 1) →ₗᵢ[ℝ] E) (b : EuclideanSpace ℝ (Fin 1)) : L b = b.ofLp 0 • MeasureTheory.frameVectorCodimOne L
A codimension-one frame acts by scaling its unit vector.
-
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.range_eq_span_frameVectorCodimOne.{u_1} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (L : EuclideanSpace ℝ (Fin 1) →ₗᵢ[ℝ] E) : L.range = ℝ ∙ MeasureTheory.frameVectorCodimOne L
theorem MeasureTheory.range_eq_span_frameVectorCodimOne.{u_1} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (L : EuclideanSpace ℝ (Fin 1) →ₗᵢ[ℝ] E) : L.range = ℝ ∙ MeasureTheory.frameVectorCodimOne L
The `d`-plane of a codimension-one frame is a hyperplane: the range of the frame is the line through its unit vector.
-
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.dPlaneTransform_codimOne.{u_1, u_2} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] {F : Type u_2} [NormedAddCommGroup F] [NormedSpace ℝ F] (f : E → F) (L : EuclideanSpace ℝ (Fin 1) →ₗᵢ[ℝ] E) (b : EuclideanSpace ℝ (Fin 1)) : MeasureTheory.dPlaneTransform f L b = MeasureTheory.radonTransform f (MeasureTheory.frameVectorCodimOne L) (b.ofLp 0)
theorem MeasureTheory.dPlaneTransform_codimOne.{u_1, u_2} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] [FiniteDimensional ℝ E] [MeasurableSpace E] [BorelSpace E] {F : Type u_2} [NormedAddCommGroup F] [NormedSpace ℝ F] (f : E → F) (L : EuclideanSpace ℝ (Fin 1) →ₗᵢ[ℝ] E) (b : EuclideanSpace ℝ (Fin 1)) : MeasureTheory.dPlaneTransform f L b = MeasureTheory.radonTransform f (MeasureTheory.frameVectorCodimOne L) (b.ofLp 0)
**At codimension one the `d`-plane transform is the Radon transform.** The frame is a unit vector, its range is the line through it, and the `d`-plane is the hyperplane orthogonal to that line. So `MeasureTheory.radonTransform` is the `k = 1` case of `MeasureTheory.dPlaneTransform`, as is the Fourier slice theorem of each.
-
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.norm_eq_abs_apply_fin_one (b : EuclideanSpace ℝ (Fin 1)) : ‖b‖ = |b.ofLp 0|
theorem MeasureTheory.norm_eq_abs_apply_fin_one (b : EuclideanSpace ℝ (Fin 1)) : ‖b‖ = |b.ofLp 0|
The norm of a vector of `ℝ^1` is the absolute value of its only coordinate.
-
defdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
def MeasureTheory.frameOfUnitVector.{u_1} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (u : ↑(Metric.sphere 0 1)) : EuclideanSpace ℝ (Fin 1) →ₗᵢ[ℝ] E
def MeasureTheory.frameOfUnitVector.{u_1} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (u : ↑(Metric.sphere 0 1)) : EuclideanSpace ℝ (Fin 1) →ₗᵢ[ℝ] E
Implementation after
:=:= b 0 • (u : E) map_add' b b' := by simp [add_smul] map_smul' c b := by simp [mul_smul] norm_map' b := by simp [norm_smul, mem_sphere_zero_iff_norm.1 u.2, norm_eq_abs_apply_fin_one]The codimension-one frame that a unit vector is: the inverse of `MeasureTheory.frameVectorCodimOne`, sending `u` to the isometry `b ↦ b 0 • u` of `ℝ^1` into `E`.
-
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.frameOfUnitVector_apply.{u_1} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (u : ↑(Metric.sphere 0 1)) (b : EuclideanSpace ℝ (Fin 1)) : (MeasureTheory.frameOfUnitVector u) b = b.ofLp 0 • ↑u
theorem MeasureTheory.frameOfUnitVector_apply.{u_1} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (u : ↑(Metric.sphere 0 1)) (b : EuclideanSpace ℝ (Fin 1)) : (MeasureTheory.frameOfUnitVector u) b = b.ofLp 0 • ↑u
-
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.frameVectorCodimOne_frameOfUnitVector.{u_1} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (u : ↑(Metric.sphere 0 1)) : MeasureTheory.frameVectorCodimOne (MeasureTheory.frameOfUnitVector u) = ↑u
theorem MeasureTheory.frameVectorCodimOne_frameOfUnitVector.{u_1} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (u : ↑(Metric.sphere 0 1)) : MeasureTheory.frameVectorCodimOne (MeasureTheory.frameOfUnitVector u) = ↑u
-
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.frameOfUnitVector_frameVectorCodimOne.{u_1} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (L : EuclideanSpace ℝ (Fin 1) →ₗᵢ[ℝ] E) (hL : ‖MeasureTheory.frameVectorCodimOne L‖ = 1) : MeasureTheory.frameOfUnitVector ⟨MeasureTheory.frameVectorCodimOne L, ⋯⟩ = L
theorem MeasureTheory.frameOfUnitVector_frameVectorCodimOne.{u_1} {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace ℝ E] (L : EuclideanSpace ℝ (Fin 1) →ₗᵢ[ℝ] E) (hL : ‖MeasureTheory.frameVectorCodimOne L‖ = 1) : MeasureTheory.frameOfUnitVector ⟨MeasureTheory.frameVectorCodimOne L, ⋯⟩ = L
**A codimension-one frame is exactly a unit vector.** Together with `MeasureTheory.frameVectorCodimOne_frameOfUnitVector` this identifies the Stiefel manifold `V_{m,1}` with the sphere `𝕊^{m-1}`. -
defdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
def MeasureTheory.unitVectorFinOne : ↑(Metric.sphere 0 1)
def MeasureTheory.unitVectorFinOne : ↑(Metric.sphere 0 1)
Implementation after
:=:= ⟨EuclideanSpace.single (0 : Fin 1) (1 : ℝ), by rw [mem_sphere_zero_iff_norm, PiLp.norm_single, norm_one]⟩The unit vector of `ℝ^1` that a codimension-one frame is applied to.
-
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.coe_unitVectorFinOne : ↑MeasureTheory.unitVectorFinOne = EuclideanSpace.single 0 1
theorem MeasureTheory.coe_unitVectorFinOne : ↑MeasureTheory.unitVectorFinOne = EuclideanSpace.single 0 1
-
theoremdefined in LeanRidgelet/ToMathlib/DPlaneTransform.leancomplete
theorem MeasureTheory.integral_euclideanSpace_fin_one.{u_3} {G : Type u_3} [NormedAddCommGroup G] [NormedSpace ℝ G] (g : ℝ → G) : ∫ (b : EuclideanSpace ℝ (Fin 1)), g (b.ofLp 0) = ∫ (t : ℝ), g t
theorem MeasureTheory.integral_euclideanSpace_fin_one.{u_3} {G : Type u_3} [NormedAddCommGroup G] [NormedSpace ℝ G] (g : ℝ → G) : ∫ (b : EuclideanSpace ℝ (Fin 1)), g (b.ofLp 0) = ∫ (t : ℝ), g t
**Integration over `ℝ^1` is integration over `ℝ`.** The only coordinate is a measure-preserving equivalence `ℝ^1 ≃ᵐ ℝ`.
The identification at k=1 is recorded in both directions: a codimension-one frame is a unit vector, and a unit vector is the frame \boldsymbol b\mapsto b_0\boldsymbol u that scales it. So the Stiefel manifold V_{m,1} is the sphere \mathbb S^{m-1} as a set; that it is the sphere as a measure space is mathlib_stiefel_codim_one. The bias space of a codimension-one frame is \mathbb R^1, and integration over it is integration over \mathbb R — the only coordinate is a measure-preserving equivalence, obtained by composing Mathlib's identification of \mathbb R^1 with \iota\to\mathbb R at |\iota|=1 with the projection out of a singleton product.
-
MeasureTheory.diagScale[complete] -
MeasureTheory.diagScale_apply[complete] -
MeasureTheory.det_diagScale[complete] -
MeasureTheory.diagScaleEquiv[complete] -
MeasureTheory.diagScaleMeasurableEquiv[complete] -
MeasureTheory.coe_diagScaleMeasurableEquiv[complete] -
MeasureTheory.integral_comp_diagScale[complete]
Coordinatewise scaling of \mathbb R^k. Mathlib has the one-dimensional change of variables x\mapsto cx and, at the level of measures, the rescaling of an additive Haar measure by an arbitrary linear map; what is missing is the integral form of the change of variables in all k coordinates at once,
\int_{\mathbb R^k}G(w_1d_1,\ldots,w_kd_k)\,\mathrm d\boldsymbol d=\Bigl(\prod_i|w_i|\Bigr)^{-1}\int_{\mathbb R^k}G(\boldsymbol y)\,\mathrm d\boldsymbol y.
That is what a k-fold scale parameter produces — the diagonal factor of a singular value decomposition, where the k singular values are traded against the k coordinates of a frequency. The proof composes the two facts above: the diagonal map is a linear equivalence when no entry vanishes, its determinant is \prod_iw_i, and the Haar rescaling transports the integral. There is no hypothesis on the integrand, the substitution being along a measurable equivalence.
Lean code for Theorem5.5.3●7 declarations
Associated Lean declarations
-
MeasureTheory.diagScale[complete]
-
MeasureTheory.diagScale_apply[complete]
-
MeasureTheory.det_diagScale[complete]
-
MeasureTheory.diagScaleEquiv[complete]
-
MeasureTheory.diagScaleMeasurableEquiv[complete]
-
MeasureTheory.coe_diagScaleMeasurableEquiv[complete]
-
MeasureTheory.integral_comp_diagScale[complete]
-
MeasureTheory.diagScale[complete] -
MeasureTheory.diagScale_apply[complete] -
MeasureTheory.det_diagScale[complete] -
MeasureTheory.diagScaleEquiv[complete] -
MeasureTheory.diagScaleMeasurableEquiv[complete] -
MeasureTheory.coe_diagScaleMeasurableEquiv[complete] -
MeasureTheory.integral_comp_diagScale[complete]
-
defdefined in LeanRidgelet/ToMathlib/DiagonalScaling.leancomplete
def MeasureTheory.diagScale {k : ℕ} (w : Fin k → ℝ) : EuclideanSpace ℝ (Fin k) →ₗ[ℝ] EuclideanSpace ℝ (Fin k)
def MeasureTheory.diagScale {k : ℕ} (w : Fin k → ℝ) : EuclideanSpace ℝ (Fin k) →ₗ[ℝ] EuclideanSpace ℝ (Fin k)
Implementation after
:=:= WithLp.toLp 2 fun i => w i * d i map_add' d d' := by ext i simp [mul_add] map_smul' c d := by ext i simp [mul_left_comm]Coordinatewise scaling of `ℝ^k`: the diagonal linear map with entries `w`.
-
theoremdefined in LeanRidgelet/ToMathlib/DiagonalScaling.leancomplete
theorem MeasureTheory.diagScale_apply {k : ℕ} (w : Fin k → ℝ) (d : EuclideanSpace ℝ (Fin k)) (i : Fin k) : ((MeasureTheory.diagScale w) d).ofLp i = w i * d.ofLp i
theorem MeasureTheory.diagScale_apply {k : ℕ} (w : Fin k → ℝ) (d : EuclideanSpace ℝ (Fin k)) (i : Fin k) : ((MeasureTheory.diagScale w) d).ofLp i = w i * d.ofLp i
-
theoremdefined in LeanRidgelet/ToMathlib/DiagonalScaling.leancomplete
theorem MeasureTheory.det_diagScale {k : ℕ} (w : Fin k → ℝ) : LinearMap.det (MeasureTheory.diagScale w) = ∏ i, w i
theorem MeasureTheory.det_diagScale {k : ℕ} (w : Fin k → ℝ) : LinearMap.det (MeasureTheory.diagScale w) = ∏ i, w i
The determinant of a coordinatewise scaling is the product of its entries.
-
defdefined in LeanRidgelet/ToMathlib/DiagonalScaling.leancomplete
def MeasureTheory.diagScaleEquiv {k : ℕ} {w : Fin k → ℝ} (hw : ∀ (i : Fin k), w i ≠ 0) : EuclideanSpace ℝ (Fin k) ≃ₗ[ℝ] EuclideanSpace ℝ (Fin k)
def MeasureTheory.diagScaleEquiv {k : ℕ} {w : Fin k → ℝ} (hw : ∀ (i : Fin k), w i ≠ 0) : EuclideanSpace ℝ (Fin k) ≃ₗ[ℝ] EuclideanSpace ℝ (Fin k)
Implementation after
:=:= diagScale w invFun v := WithLp.toLp 2 fun i => (w i)⁻¹ * v i left_inv d := by ext i simp [inv_mul_cancel_left₀ (hw i)] right_inv v := by ext i simp [mul_inv_cancel_left₀ (hw i)]Coordinatewise scaling as a linear equivalence, available when no coordinate vanishes.
-
defdefined in LeanRidgelet/ToMathlib/DiagonalScaling.leancomplete
def MeasureTheory.diagScaleMeasurableEquiv {k : ℕ} {w : Fin k → ℝ} (hw : ∀ (i : Fin k), w i ≠ 0) : EuclideanSpace ℝ (Fin k) ≃ᵐ EuclideanSpace ℝ (Fin k)
def MeasureTheory.diagScaleMeasurableEquiv {k : ℕ} {w : Fin k → ℝ} (hw : ∀ (i : Fin k), w i ≠ 0) : EuclideanSpace ℝ (Fin k) ≃ᵐ EuclideanSpace ℝ (Fin k)
Implementation after
:=:= (diagScaleEquiv hw).toContinuousLinearEquiv.toHomeomorph.toMeasurableEquiv
Coordinatewise scaling as a measurable equivalence.
-
theoremdefined in LeanRidgelet/ToMathlib/DiagonalScaling.leancomplete
theorem MeasureTheory.coe_diagScaleMeasurableEquiv {k : ℕ} {w : Fin k → ℝ} (hw : ∀ (i : Fin k), w i ≠ 0) (d : EuclideanSpace ℝ (Fin k)) : (MeasureTheory.diagScaleMeasurableEquiv hw) d = (MeasureTheory.diagScale w) d
theorem MeasureTheory.coe_diagScaleMeasurableEquiv {k : ℕ} {w : Fin k → ℝ} (hw : ∀ (i : Fin k), w i ≠ 0) (d : EuclideanSpace ℝ (Fin k)) : (MeasureTheory.diagScaleMeasurableEquiv hw) d = (MeasureTheory.diagScale w) d
-
theoremdefined in LeanRidgelet/ToMathlib/DiagonalScaling.leancomplete
theorem MeasureTheory.integral_comp_diagScale.{u_1} {k : ℕ} {G : Type u_1} [NormedAddCommGroup G] [NormedSpace ℝ G] {w : Fin k → ℝ} (hw : ∀ (i : Fin k), w i ≠ 0) (G' : EuclideanSpace ℝ (Fin k) → G) : ∫ (d : EuclideanSpace ℝ (Fin k)), G' ((MeasureTheory.diagScale w) d) = (∏ i, |w i|)⁻¹ • ∫ (y : EuclideanSpace ℝ (Fin k)), G' y
theorem MeasureTheory.integral_comp_diagScale.{u_1} {k : ℕ} {G : Type u_1} [NormedAddCommGroup G] [NormedSpace ℝ G] {w : Fin k → ℝ} (hw : ∀ (i : Fin k), w i ≠ 0) (G' : EuclideanSpace ℝ (Fin k) → G) : ∫ (d : EuclideanSpace ℝ (Fin k)), G' ((MeasureTheory.diagScale w) d) = (∏ i, |w i|)⁻¹ • ∫ (y : EuclideanSpace ℝ (Fin k)), G' y
**The coordinatewise change of variables.** Scaling the `k` coordinates by `w` divides the integral by `∏ |w i|`. There is no hypothesis on the integrand: the change of variables is along a measurable equivalence, so both sides are junk values simultaneously.
Fubini for triple iterated integrals. Mathlib's integral_integral_swap exchanges the two integrals of a doubly iterated Bochner integral; nothing there covers the triply iterated case, where the outer variable has to pass both inner ones at once. Both directions are proved here from the two-variable statement, by treating the two inner variables as a single variable of the product and unfolding again on each side. The hypothesis is integrability of the whole integrand against the triple product measure, which is what Fubini needs and what a statement of this kind has to carry.
Lean code for Lemma5.5.4●2 theorems
Associated Lean declarations
-
theoremdefined in LeanRidgelet/ToMathlib/IteratedFubini.leancomplete
theorem MeasureTheory.integral_integral_integral_swap_left.{u_1, u_2, u_3, u_4} {α : Type u_1} {β : Type u_2} {γ : Type u_3} [MeasurableSpace α] [MeasurableSpace β] [MeasurableSpace γ] {E : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] (μ : MeasureTheory.Measure α) (ν : MeasureTheory.Measure β) (ρ : MeasureTheory.Measure γ) [MeasureTheory.SFinite μ] [MeasureTheory.SFinite ν] [MeasureTheory.SFinite ρ] (f : α → β → γ → E) (hf : MeasureTheory.Integrable (fun p ↦ f p.1 p.2.1 p.2.2) (μ.prod (ν.prod ρ))) : ∫ (a : α), ∫ (b : β), ∫ (c : γ), f a b c ∂ρ ∂ν ∂μ = ∫ (b : β), ∫ (c : γ), ∫ (a : α), f a b c ∂μ ∂ρ ∂ν
theorem MeasureTheory.integral_integral_integral_swap_left.{u_1, u_2, u_3, u_4} {α : Type u_1} {β : Type u_2} {γ : Type u_3} [MeasurableSpace α] [MeasurableSpace β] [MeasurableSpace γ] {E : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] (μ : MeasureTheory.Measure α) (ν : MeasureTheory.Measure β) (ρ : MeasureTheory.Measure γ) [MeasureTheory.SFinite μ] [MeasureTheory.SFinite ν] [MeasureTheory.SFinite ρ] (f : α → β → γ → E) (hf : MeasureTheory.Integrable (fun p ↦ f p.1 p.2.1 p.2.2) (μ.prod (ν.prod ρ))) : ∫ (a : α), ∫ (b : β), ∫ (c : γ), f a b c ∂ρ ∂ν ∂μ = ∫ (b : β), ∫ (c : γ), ∫ (a : α), f a b c ∂μ ∂ρ ∂ν
**Moving the outermost integral of a triple iterated integral to the innermost position.** Mathlib's `MeasureTheory.integral_integral_swap` does this for two variables; here the outer variable passes both inner ones at once.
-
theoremdefined in LeanRidgelet/ToMathlib/IteratedFubini.leancomplete
theorem MeasureTheory.integral_integral_integral_swap_right.{u_1, u_2, u_3, u_4} {α : Type u_1} {β : Type u_2} {γ : Type u_3} [MeasurableSpace α] [MeasurableSpace β] [MeasurableSpace γ] {E : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] (μ : MeasureTheory.Measure α) (ν : MeasureTheory.Measure β) (ρ : MeasureTheory.Measure γ) [MeasureTheory.SFinite μ] [MeasureTheory.SFinite ν] [MeasureTheory.SFinite ρ] (f : α → β → γ → E) (hf : MeasureTheory.Integrable (fun p ↦ f p.1 p.2.1 p.2.2) (μ.prod (ν.prod ρ))) : ∫ (b : β), ∫ (c : γ), ∫ (a : α), f a b c ∂μ ∂ρ ∂ν = ∫ (a : α), ∫ (b : β), ∫ (c : γ), f a b c ∂ρ ∂ν ∂μ
theorem MeasureTheory.integral_integral_integral_swap_right.{u_1, u_2, u_3, u_4} {α : Type u_1} {β : Type u_2} {γ : Type u_3} [MeasurableSpace α] [MeasurableSpace β] [MeasurableSpace γ] {E : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] (μ : MeasureTheory.Measure α) (ν : MeasureTheory.Measure β) (ρ : MeasureTheory.Measure γ) [MeasureTheory.SFinite μ] [MeasureTheory.SFinite ν] [MeasureTheory.SFinite ρ] (f : α → β → γ → E) (hf : MeasureTheory.Integrable (fun p ↦ f p.1 p.2.1 p.2.2) (μ.prod (ν.prod ρ))) : ∫ (b : β), ∫ (c : γ), ∫ (a : α), f a b c ∂μ ∂ρ ∂ν = ∫ (a : α), ∫ (b : β), ∫ (c : γ), f a b c ∂ρ ∂ν ∂μ
**Moving the innermost integral of a triple iterated integral to the outermost position**, the reverse of `MeasureTheory.integral_integral_integral_swap_left`.