Skip to content

feat(Analysis/Fourier): the Plancherel theorem for the Clifford-Fourier transform#41922

Open
junjihashimoto wants to merge 5 commits into
leanprover-community:masterfrom
junjihashimoto:clifford-plancherel
Open

feat(Analysis/Fourier): the Plancherel theorem for the Clifford-Fourier transform#41922
junjihashimoto wants to merge 5 commits into
leanprover-community:masterfrom
junjihashimoto:clifford-plancherel

Conversation

@junjihashimoto

Copy link
Copy Markdown

The Clifford–Fourier transform (Ebling–Scheuermann, IEEE TVCG 2005; Brackx–De Schepper–Sommen, J. Fourier Anal. Appl. 2005) of f : ℝⁿ → Cl(n,0) replaces the imaginary unit in the Fourier kernel by the pseudoscalar ω:

ℱ f ξ = ∫ x, (cos (2π ⟪x, ξ⟫) - sin (2π ⟪x, ξ⟫) ω) * f x.

For n ≡ 2, 3 [MOD 4] the pseudoscalar squares to -1 (#41920), so left multiplication by the kernel is complex scalar multiplication for the pseudoscalar complex structure, and the Clifford–Fourier transform is literally the ordinary vector-valued Fourier transform (cliffordFourierIntegral_eq_fourier). Plancherel's theorem (integral_norm_sq_cliffordFourier), the Fourier inversion formula (cliffordFourierInv_cliffordFourier) and the isometry (cliffordFourierL2) are then inherited from the vector-valued Fourier theory. The case n = 3 is the transform used for 3D vector field analysis in visualization; n ≡ 2 [MOD 4] covers the two-dimensional (quaternionic-style) transform, where the pseudoscalar is not central.

…omplex structure

The pseudoscalar of the Clifford algebra of Euclidean n-space squares to
(-1)^(n.choose 2) and commutes with every element up to (-1)^(n-1); hence
for n = 2, 3 mod 4 left multiplication by it is a complex structure
(Module C via Complex.liftAux), and for n = 3 mod 4 the algebra is even a
complex algebra. This makes the Clifford-Fourier transform an instance of
the vector-valued Fourier transform (follow-up PR).
The Clifford-Fourier transform (Ebling-Scheuermann) replaces the imaginary
unit in the Fourier kernel by the pseudoscalar of Cl(n,0). For n = 2, 3
mod 4 the pseudoscalar squares to -1, so left multiplication by the kernel
is complex scalar multiplication for the pseudoscalar complex structure,
and Plancherel's theorem and the Fourier inversion formula follow from the
vector-valued L^2 Fourier theory.
@github-actions github-actions Bot added the new-contributor This PR was made by a contributor with at most 5 merged PRs. Welcome to the community! label Jul 19, 2026
@github-actions

Copy link
Copy Markdown

Welcome new contributor!

Thank you for contributing to Mathlib! If you haven't done so already, please review our contribution guidelines, as well as the style guide and naming conventions. In particular, we kindly remind contributors that we have guidelines regarding the use of AI when making pull requests.

We use a review queue to manage reviews. If your PR does not appear there, it is probably because it is not successfully building (i.e., it doesn't have a green checkmark), has the awaiting-author tag, or another reason described in the Lifecycle of a PR. The review dashboard has a dedicated webpage which shows whether your PR is on the review queue, and (if not), why.

If you haven't already done so, please come to https://leanprover.zulipchat.com/, introduce yourself, and mention your new PR.

Thank you again for joining our community.

@github-actions github-actions Bot added the t-analysis Analysis (normed *, calculus) label Jul 19, 2026
@github-actions

github-actions Bot commented Jul 19, 2026

Copy link
Copy Markdown

PR summary 5bebe42782

Import changes for modified files

No significant changes to the import graph

Import changes for all files
Files Import difference
Mathlib.Analysis.CliffordAlgebra.Euclidean (new file) 2206
Mathlib.Analysis.Fourier.CliffordPlancherel (new file) 2979

Declarations diff (regex)

+ (in
+ CliffordAlgebra.Euclidean.instModuleComplex
+ Q
+ Q_apply
+ Q_e
+ algebraComplex
+ cliffordFourierIntegral
+ cliffordFourierIntegral_coe
+ cliffordFourierIntegral_eq_fourier
+ cliffordFourierInvIntegral
+ cliffordFourierInvIntegral_eq_fourierInv
+ cliffordFourierInvKernel
+ cliffordFourierInv_cliffordFourier
+ cliffordFourierKernel
+ cliffordFourierL2
+ cliffordFourierL2_symm_apply_apply
+ cliffordFourierL2_toLp
+ cliffordFourier_cliffordFourierInv
+ commute_pseudoscalar
+ commute_pseudoscalar_γ
+ commute_pseudoscalar_ι
+ complexLift
+ complexLift_apply
+ complex_smul_def
+ complex_smul_eq_mul
+ e
+ exp_smul_eq_cliffordFourierInvKernel_mul
+ exp_smul_eq_cliffordFourierKernel_mul
+ factOr_of_factThree
+ factOr_of_factTwo
+ inner_e_e_of_ne
+ instance : Invertible (2 : ℝ) := invertibleOfNonzero two_ne_zero
+ instance : Module.Finite ℂ (CliffordAlgebra (Q n)) := by
+ integral_inner_cliffordFourier_cliffordFourier
+ integral_norm_sq_cliffordFourier
+ is
+ isOrtho_e
+ norm_cliffordFourierL2_eq
+ odd_choose_two
+ odd_of_fact_mod_four
+ prod_mul_γ
+ prod_sq
+ pseudoscalar
+ pseudoscalar_mul_pseudoscalar
+ pseudoscalar_mul_pseudoscalar'
+ toEuclidean
+ γ
+ γ_mul_prod
+ γ_mul_prod_mem
+ γ_mul_pseudoscalar
+ γ_mul_γ_cancel
+ γ_mul_γ_of_ne
+ γ_mul_γ_self

You can run this locally as follows
## from your `mathlib4` directory:
git clone https://github.com/leanprover-community/mathlib-ci.git ../mathlib-ci

## summary with just the declaration names:
../mathlib-ci/scripts/pr_summary/declarations_diff.sh <optional_commit>

## more verbose report:
../mathlib-ci/scripts/pr_summary/declarations_diff.sh long <optional_commit>

The doc-module for scripts/pr_summary/declarations_diff.sh in the mathlib-ci repository contains some details about this script.

Declarations diff (Lean)

Lean-aware diff — post-build, computed from the Lean environment (commit 5bebe42).

  • +57 new declarations
  • −0 removed declarations
+CliffordAlgebra.Euclidean.Q
+CliffordAlgebra.Euclidean.Q_apply
+CliffordAlgebra.Euclidean.Q_e
+CliffordAlgebra.Euclidean.algebraComplex
+CliffordAlgebra.Euclidean.cliffordFourierIntegral
+CliffordAlgebra.Euclidean.cliffordFourierIntegral.congr_simp
+CliffordAlgebra.Euclidean.cliffordFourierIntegral_coe
+CliffordAlgebra.Euclidean.cliffordFourierIntegral_eq_fourier
+CliffordAlgebra.Euclidean.cliffordFourierInvIntegral
+CliffordAlgebra.Euclidean.cliffordFourierInvIntegral_eq_fourierInv
+CliffordAlgebra.Euclidean.cliffordFourierInvKernel
+CliffordAlgebra.Euclidean.cliffordFourierInv_cliffordFourier
+CliffordAlgebra.Euclidean.cliffordFourierKernel
+CliffordAlgebra.Euclidean.cliffordFourierL2
+CliffordAlgebra.Euclidean.cliffordFourierL2_symm_apply_apply
+CliffordAlgebra.Euclidean.cliffordFourierL2_toLp
+CliffordAlgebra.Euclidean.cliffordFourier_cliffordFourierInv
+CliffordAlgebra.Euclidean.commute_pseudoscalar
+CliffordAlgebra.Euclidean.commute_pseudoscalar_γ
+CliffordAlgebra.Euclidean.commute_pseudoscalar_ι
+CliffordAlgebra.Euclidean.complexLift
+CliffordAlgebra.Euclidean.complexLift_apply
+CliffordAlgebra.Euclidean.complex_smul_def
+CliffordAlgebra.Euclidean.complex_smul_eq_mul
+CliffordAlgebra.Euclidean.e
+CliffordAlgebra.Euclidean.exp_smul_eq_cliffordFourierInvKernel_mul
+CliffordAlgebra.Euclidean.exp_smul_eq_cliffordFourierKernel_mul
+CliffordAlgebra.Euclidean.factOr_of_factThree
+CliffordAlgebra.Euclidean.factOr_of_factTwo
+CliffordAlgebra.Euclidean.inner_e_e_of_ne
+CliffordAlgebra.Euclidean.instCompleteSpace
+CliffordAlgebra.Euclidean.instFiniteComplexRealEuclideanSpaceFinQ
+CliffordAlgebra.Euclidean.instInnerProductSpace
+CliffordAlgebra.Euclidean.instInvertibleRealOfNat
+CliffordAlgebra.Euclidean.instIsScalarTowerRealComplexEuclideanSpaceFinQ
+CliffordAlgebra.Euclidean.instModuleComplex
+CliffordAlgebra.Euclidean.instNormedAddCommGroup
+CliffordAlgebra.Euclidean.instSMulCommClassComplexRealEuclideanSpaceFinQ
+CliffordAlgebra.Euclidean.integral_inner_cliffordFourier_cliffordFourier
+CliffordAlgebra.Euclidean.integral_norm_sq_cliffordFourier
+CliffordAlgebra.Euclidean.isOrtho_e
+CliffordAlgebra.Euclidean.norm_cliffordFourierL2_eq
+CliffordAlgebra.Euclidean.odd_choose_two
+CliffordAlgebra.Euclidean.odd_of_fact_mod_four
+CliffordAlgebra.Euclidean.prod_mul_γ
+CliffordAlgebra.Euclidean.prod_sq
+CliffordAlgebra.Euclidean.pseudoscalar
+CliffordAlgebra.Euclidean.pseudoscalar_mul_pseudoscalar
+CliffordAlgebra.Euclidean.pseudoscalar_mul_pseudoscalar'
+CliffordAlgebra.Euclidean.toEuclidean
+CliffordAlgebra.Euclidean.γ
+CliffordAlgebra.Euclidean.γ_mul_prod
+CliffordAlgebra.Euclidean.γ_mul_prod_mem
+CliffordAlgebra.Euclidean.γ_mul_pseudoscalar
+CliffordAlgebra.Euclidean.γ_mul_γ_cancel
+CliffordAlgebra.Euclidean.γ_mul_γ_of_ne
+CliffordAlgebra.Euclidean.γ_mul_γ_self

No changes to strong technical debt.

Increase in weak tech debt: (relative, absolute) = (2.00, 0.00)
Current number Change Type (weak)
5016 2 exposed public sections

Current commit 5bebe42782
Reference commit 8c79cb4f54

This script lives in the mathlib-ci repository. To run it locally, from your mathlib4 directory:

git clone https://github.com/leanprover-community/mathlib-ci.git ../mathlib-ci
../mathlib-ci/scripts/reporting/technical-debt-metrics.sh pr_summary
  • The relative value is the weighted sum of the differences with weight given by the inverse of the current value of the statistic.
  • The absolute value is the relative value divided by the total sum of the inverses of the current values (i.e. the weighted average of the differences).

@github-actions

github-actions Bot commented Jul 19, 2026

Copy link
Copy Markdown

✅ PR Title Formatted Correctly

The title of this PR has been updated to match our commit style conventions.
Thank you!

@mathlib-dependent-issues

Copy link
Copy Markdown

@mathlib-dependent-issues mathlib-dependent-issues Bot added the blocked-by-other-PR This PR depends on another PR (this label is automatically managed by a bot) label Jul 19, 2026
@junjihashimoto junjihashimoto changed the title feat(Analysis/Fourier): Plancherel for the Clifford-Fourier transform feat(Analysis/Fourier): the Plancherel theorem for the Clifford-Fourier transform Jul 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

blocked-by-other-PR This PR depends on another PR (this label is automatically managed by a bot) new-contributor This PR was made by a contributor with at most 5 merged PRs. Welcome to the community! t-analysis Analysis (normed *, calculus)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant