Skip to content

feat(Analysis/Fourier): the Plancherel theorem for hypercomplex Fourier transforms#41921

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

feat(Analysis/Fourier): the Plancherel theorem for hypercomplex Fourier transforms#41921
junjihashimoto wants to merge 5 commits into
leanprover-community:masterfrom
junjihashimoto:cayley-dickson-plancherel

Conversation

@junjihashimoto

Copy link
Copy Markdown

The (left-sided) hypercomplex Fourier transform of f : V → CayleyDickson A replaces the imaginary unit in the Fourier kernel by the Cayley–Dickson doubling unit :

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

Cayley–Dickson algebras beyond the quaternions are not associative — the sedenions are not even alternative and have zero divisors — but the Fourier theory only needs a complex module structure on the codomain: ℓ * (ℓ * x) = -x holds at every level of the tower, so Complex.liftAux into Module.End ℝ (CayleyDickson A) (where associativity lives) makes every Cayley–Dickson algebra a complex vector space. Equipping it with a compatible complex Hilbert space structure, Plancherel's theorem (CayleyDickson.integral_norm_sq_fourierIntegral) and the Fourier inversion formula (CayleyDickson.fourierInvIntegral_fourierIntegral) are inherited from the vector-valued Fourier theory (#24063-style Lp.fourierTransformₗᵢ), on any finite-dimensional real inner product space domain.

Taking A = ℍ[ℝ] gives the octonion Fourier transform (Hahn–Snopek; Błaszczyk, J. Fourier Anal. Appl. 2020); A = Octonion ℝ gives the sedenion one, recorded explicitly as Sedenion.integral_norm_sq_fourierIntegral.

Define the Cayley-Dickson double of a (possibly non-associative) star
ring, and show that it preserves NonAssocRing and StarRing, so the
construction iterates: quaternions -> octonions -> sedenions -> ...

The doubling unit l = (0, 1) satisfies l * (l * x) = -x at every level
of the tower, by a computation using only that star is an involution
(no alternativity is developed). Left multiplication by l is therefore
a complex structure on every Cayley-Dickson algebra.
…s on the Cayley-Dickson tower

Cayley-Dickson algebras beyond the quaternions are not associative, but
the Fourier theory only needs a complex module structure on the codomain:
left multiplication by the doubling unit squares to -1 at every level of
the tower, so Complex.liftAux into the endomorphism algebra makes every
Cayley-Dickson algebra a complex vector space. Plancherel's theorem and
the Fourier inversion formula for the left-sided hypercomplex Fourier
transform then follow from the vector-valued L^2 theory, at every level
of the tower, including the sedenions.
@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 commented Jul 19, 2026

Copy link
Copy Markdown

PR summary 617900d3e2

Import changes for modified files

No significant changes to the import graph

Import changes for all files
Files Import difference
Mathlib.Algebra.CayleyDickson (new file) 1335
Mathlib.Algebra.Octonion (new file) 1336
Mathlib.Analysis.Fourier.CayleyDicksonPlancherel (new file) 2951

Declarations diff (regex)

+ CayleyDickson
+ Octonion
+ Quaternion.instStarModule
+ Sedenion
+ Sedenion.fourierInvIntegral_fourierIntegral
+ Sedenion.integral_norm_sq_fourierIntegral
+ Trigintaduonion
+ add_fst
+ add_snd
+ complexLift
+ complex_smul_def
+ complex_smul_mk
+ exp_smul_eq_fourierInvKernel_mul
+ exp_smul_eq_fourierKernel_mul
+ fourierIntegral
+ fourierIntegral_coe
+ fourierIntegral_eq_fourier
+ fourierIntegral_fourierInvIntegral
+ fourierInvIntegral
+ fourierInvIntegral_eq_fourierInv
+ fourierInvIntegral_fourierIntegral
+ fourierInvKernel
+ fourierKernel
+ fourierL2
+ instModule
+ instance : Add (CayleyDickson A) := ⟨fun x y => ⟨x.fst + y.fst, x.snd + y.snd⟩⟩
+ instance : AddCommGroup (CayleyDickson A)
+ instance : IntCast (CayleyDickson A) := ⟨fun n => ⟨n, 0⟩⟩
+ instance : Mul (CayleyDickson A)
+ instance : NatCast (CayleyDickson A) := ⟨fun n => ⟨n, 0⟩⟩
+ instance : Neg (CayleyDickson A) := ⟨fun x => ⟨-x.fst, -x.snd⟩⟩
+ instance : NonAssocRing (CayleyDickson A)
+ instance : NonUnitalNonAssocRing (CayleyDickson A)
+ instance : One (CayleyDickson A) := ⟨⟨1, 0⟩⟩
+ instance : Star (CayleyDickson A) := ⟨fun x => ⟨star x.fst, -x.snd⟩⟩
+ instance : StarRing (CayleyDickson A)
+ instance : Sub (CayleyDickson A) := ⟨fun x y => ⟨x.fst - y.fst, x.snd - y.snd⟩⟩
+ instance : Zero (CayleyDickson A) := ⟨⟨0, 0⟩⟩
+ instance [Module.Finite ℝ A] : Module.Finite ℂ (CayleyDickson A) := by
+ instance [Monoid S] [DistribMulAction S A]
+ instance [Monoid S] [DistribMulAction S A] [Star S] [TrivialStar S] [StarModule S A] :
+ instance [Monoid S] [Star S] [TrivialStar S] [DistribMulAction S A] [StarModule S A]
+ instance [SMul S A] : SMul S (CayleyDickson A)
+ instance [Semiring S] [Module S A] [Module.Finite S A] :
+ intCast_fst
+ intCast_snd
+ integral_inner_fourierIntegral_fourierIntegral
+ integral_norm_sq_fourierIntegral
+ mul_def
+ mul_fst
+ mul_smul_comm'
+ mul_snd
+ natCast_fst
+ natCast_snd
+ neg_fst
+ neg_snd
+ norm_fourierL2_eq
+ one_fst
+ one_snd
+ smul_fst
+ smul_mul_assoc'
+ smul_snd
+ star_fst
+ star_snd
+ sub_fst
+ sub_snd
+ toEuclidean
+ toProd
+ toProdHom
+ toProdLinearEquiv
+ toProd_injective
+ unit
+ unitMulHom
+ unitMulHom_apply
+ unitMulHom_mul_unitMulHom
+ unit_fst
+ unit_mul
+ unit_mul_unit
+ unit_mul_unit_mul
+ unit_snd
+ zero_fst
+ zero_snd

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 617900d).

  • +106 new declarations
  • −0 removed declarations
+CayleyDickson
+CayleyDickson.add_fst
+CayleyDickson.add_snd
+CayleyDickson.casesOn
+CayleyDickson.complexLift
+CayleyDickson.complex_smul_def
+CayleyDickson.complex_smul_mk
+CayleyDickson.ctorIdx
+CayleyDickson.exp_smul_eq_fourierInvKernel_mul
+CayleyDickson.exp_smul_eq_fourierKernel_mul
+CayleyDickson.ext
+CayleyDickson.ext_iff
+CayleyDickson.fourierIntegral
+CayleyDickson.fourierIntegral.congr_simp
+CayleyDickson.fourierIntegral_coe
+CayleyDickson.fourierIntegral_eq_fourier
+CayleyDickson.fourierIntegral_fourierInvIntegral
+CayleyDickson.fourierInvIntegral
+CayleyDickson.fourierInvIntegral_eq_fourierInv
+CayleyDickson.fourierInvIntegral_fourierIntegral
+CayleyDickson.fourierInvKernel
+CayleyDickson.fourierKernel
+CayleyDickson.fourierL2
+CayleyDickson.fst
+CayleyDickson.instAdd
+CayleyDickson.instAddCommGroup
+CayleyDickson.instCompleteSpace
+CayleyDickson.instFinite
+CayleyDickson.instFiniteComplexOfReal
+CayleyDickson.instInnerProductSpace
+CayleyDickson.instIntCast
+CayleyDickson.instIsScalarTowerOfSMulCommClass
+CayleyDickson.instIsScalarTowerRealComplex
+CayleyDickson.instModule
+CayleyDickson.instModuleComplex
+CayleyDickson.instMul
+CayleyDickson.instNatCast
+CayleyDickson.instNeg
+CayleyDickson.instNonAssocRing
+CayleyDickson.instNonUnitalNonAssocRing
+CayleyDickson.instNormedAddCommGroup
+CayleyDickson.instOne
+CayleyDickson.instSMul
+CayleyDickson.instSMulCommClassComplex
+CayleyDickson.instSMulCommClassOfTrivialStarOfStarModuleOfIsScalarTower
+CayleyDickson.instStar
+CayleyDickson.instStarModuleOfTrivialStar
+CayleyDickson.instStarRing
+CayleyDickson.instSub
+CayleyDickson.instZero
+CayleyDickson.intCast_fst
+CayleyDickson.intCast_snd
+CayleyDickson.integral_inner_fourierIntegral_fourierIntegral
+CayleyDickson.integral_norm_sq_fourierIntegral
+CayleyDickson.mk
+CayleyDickson.mk.inj
+CayleyDickson.mk.injEq
+CayleyDickson.mk.noConfusion
+CayleyDickson.mk.sizeOf_spec
+CayleyDickson.mul_def
+CayleyDickson.mul_fst
+CayleyDickson.mul_smul_comm'
+CayleyDickson.mul_snd
+CayleyDickson.natCast_fst
+CayleyDickson.natCast_snd
+CayleyDickson.neg_fst
+CayleyDickson.neg_snd
+CayleyDickson.noConfusion
+CayleyDickson.noConfusionType
+CayleyDickson.norm_fourierL2_eq
+CayleyDickson.one_fst
+CayleyDickson.one_snd
+CayleyDickson.rec
+CayleyDickson.recOn
+CayleyDickson.smul_fst
+CayleyDickson.smul_mul_assoc'
+CayleyDickson.smul_snd
+CayleyDickson.snd
+CayleyDickson.star_fst
+CayleyDickson.star_snd
+CayleyDickson.sub_fst
+CayleyDickson.sub_snd
+CayleyDickson.toEuclidean
+CayleyDickson.toProd
+CayleyDickson.toProdHom
+CayleyDickson.toProdLinearEquiv
+CayleyDickson.toProdLinearEquiv_apply
+CayleyDickson.toProd_injective
+CayleyDickson.unit
+CayleyDickson.unitMulHom
+CayleyDickson.unitMulHom.congr_simp
+CayleyDickson.unitMulHom_apply
+CayleyDickson.unitMulHom_mul_unitMulHom
+CayleyDickson.unit_fst
+CayleyDickson.unit_mul
+CayleyDickson.unit_mul_unit
+CayleyDickson.unit_mul_unit_mul
+CayleyDickson.unit_snd
+CayleyDickson.zero_fst
+CayleyDickson.zero_snd
+Octonion
+Quaternion.instStarModule
+Sedenion
+Sedenion.fourierInvIntegral_fourierIntegral
+Sedenion.integral_norm_sq_fourierIntegral
+Trigintaduonion

No changes to strong technical debt.

Increase in weak tech debt: (relative, absolute) = (3.00, 0.00)
Current number Change Type (weak)
5017 3 exposed public sections

Current commit 617900d3e2
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 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
@mathlib-dependent-issues

Copy link
Copy Markdown

This PR/issue depends on:

@junjihashimoto junjihashimoto changed the title feat(Analysis/Fourier): Plancherel for hypercomplex Fourier transforms on the Cayley-Dickson tower feat(Analysis/Fourier): the Plancherel theorem for hypercomplex Fourier transforms 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!

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant