feat(LinearAlgebra/CliffordAlgebra): bivector Lie subalgebra#36917
feat(LinearAlgebra/CliffordAlgebra): bivector Lie subalgebra#36917iarnoldy wants to merge 7 commits intoleanprover-community:masterfrom
Conversation
Define the submodule of bivectors in a Clifford algebra (spanned by products `ι Q m₁ * ι Q m₂`) and show it forms a `LieSubalgebra` under the commutator bracket. This gives the standard construction of the orthogonal Lie algebra so(Q) from Cl(Q). Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Generalize bivector definition to nvector n Q (grade-n submodule), with bivector Q := nvector Q 2. Replace all noncomm_ring calls with direct rw chains (mul_assoc, sub_mul, Algebra.commutes). Close lie_ι_mul_ι with abel. Drop Tactic.NoncommRing import. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
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 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. |
PR summary 1f3cdaa7a7Import changes for modified filesNo significant changes to the import graph Import changes for all files
|
Register Mathlib.LinearAlgebra.CliffordAlgebra.Bivector in Mathlib.lean.
Mathlib requires `module` declaration and `public import` syntax.
Match current mathlib convention: all CliffordAlgebra files use @[expose] public section with noncomputable on individual defs where needed.
Use Algebra.algebraMap_eq_smul_one to convert algebraMap R _ r * x to r • (1 * x) = r • x before applying Submodule.smul_mem.
The simp linter reports that mem_bivector already simplifies the LHS, making this @[simp] attribute redundant.
Define the submodule of grade-n elements (n-vectors) in a Clifford algebra
and show that bivectors (n = 2) form a
LieSubalgebraunder the commutatorbracket. This gives the standard construction of so(Q) from Cl(Q).
Main definitions:
CliffordAlgebra.nvector— grade-n submodule, spanned by n-fold products of ιCliffordAlgebra.bivector— nvector 2 Q, the bivector submoduleCliffordAlgebra.bivectorLieSubalgebra— LieSubalgebra of bivectorsMain results:
CliffordAlgebra.lie_ι_mul_ι— explicit commutator formula for bivector generatorsCliffordAlgebra.lie_mem_bivector— bracket closure of the bivector submoduleCliffordAlgebra.bivector_le_evenOdd_zero— bivectors lie in the even partThe
LieModuleinstance forCliffordAlgebra Qacting on itself is providedexplicitly (
instLieModuleSelf) because automatic synthesis exceeds the defaultheartbeat limit.
AI disclosure: This code was generated with AI assistance (Claude, Anthropic).
The submitter directed the construction and QA but is not a Lean programmer.
The mathematical content is classical (Doran & Lasenby, Ch. 3). Extra review
scrutiny is welcomed.
Co-authored-by: Claude [email protected]
Open design questions for reviewers:
Naming: Is
nvectorthe right name? Eric Wieser suggested generalizingto n-vectors. Alternatives:
ιProd,grade, or following theexteriorPowerpattern via
equivExteriorpullback.Scalar contamination: The spanning set
{ι m₁ * ι m₂}includesι m * ι m = Q(m)(scalars). Eric suggested pulling backexteriorPowerthrough
equivExteriorfor pure grades (requiresInvertible (2 : R)).Happy to rework if that's preferred.
instLieModuleSelf: Should this be an upstream issue rather than a
local workaround? @ocfnash
ι_mul_ι_comm': This may duplicate existing API (
ι_mul_ι_comm b aplus
polar_comm). Happy to inline if reviewers prefer.Discussed on Zulip: https://leanprover.zulipchat.com (Is there code for X? thread)