Repository navigation
feat(CompositionAlgebrasOverRings): derive Euclidean Hurwitz theorems from the general theory - #722
Conversation
… from the general theory Add Composition/Fields/Euclidean.lean. A nontrivial Euclidean composition algebra of the CompositionAlgebras project is a conic algebra over ℝ with norm nf, and when finite-dimensional it is a composition algebra in the sense of GPR 19.5 with positive definite norm. From this the file deduces three of that project's main results: - finrank_eq_one_or_two_or_four_or_eight, from GPR 19.18; - hurwitz_classification, from GPR 23.13 (two Euclidean composition algebras of the same dimension are isomorphic); - the composition law of CD.instCompositionAlgebra, from GPR Exc. 18.18, since CD D is literally Cay(D, -1). The fourth, Octonion.nucleus_real, is a computation in the concrete octonions and is not addressed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Advisory cross-file review against Lean Pool's supervisory rubric. This is not by itself a significance, source-verification, or merge verdict. [Low impact] The PR adds theorem access within the Lean composition-algebra library. No blocking code issue was found; narrowing the import would remove an unnecessary dependency. Findings
SummaryAdds a bridge from Euclidean composition algebras to
Review covered the added module, related definitions and proofs, project cards, and import paths. External source texts, independent upstream license verification, and compile-time measurements were unavailable and remain unverified. No runtime or build verification was performed. Reviews (1) · Last reviewed commit: "feat(CompositionAlgebrasOverRings): deri..." · Reviewed by Greptile |
| -/ | ||
| module | ||
|
|
||
| public import LeanPool.CompositionAlgebras.Composition.Classification |
There was a problem hiding this comment.
Unused proofs become required imports
Euclidean.lean imports Classification, but its proofs only need the definitions and instances available through Isomorphisms. Classification also imports Hurwitz, bringing the original dimension proof and doubling chain into both public entry points of CompositionAlgebrasOverRings. This adds an avoidable dependency for users and future changes. Import LeanPool.CompositionAlgebras.Composition.Isomorphisms instead.
| public import LeanPool.CompositionAlgebras.Composition.Classification | |
| public import LeanPool.CompositionAlgebras.Composition.Isomorphisms |
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
Proof profile (new / modified Lean files)
This build covers the changed modules and their dependency cones on top of the restored cache. The serial per-file sums below are useful for ranking slow files, not as a build budget. A base→head comparison was attempted but its measurements are unavailable (see the run log); modified files are omitted from the tables below. Statement changes✅ No statements changed — all 0 tracked declarations across 2 modified files kept their type; only proofs / definition bodies changed. Statements are compared textually against the merge base (comments and whitespace ignored; Total heartbeats: 56,649 maxHeartbeats units across 1 valid file (201 added LOC). Sum of Count-heartbeats wall-clock total: 7.60 s. Repeated import cost inside Heartbeat values sum disjoint root command traces with LOC counts added lines in the profiled Lean files from this PR diff.
Aggregate phase totals
Slowest changed modules (from
|
| Changed module | Lake time |
|---|---|
LeanPool.CompositionAlgebrasOverRings.Composition.Fields.Euclidean |
2.70 s |
Per-file `lean --profile` output
LeanPool/CompositionAlgebrasOverRings/Composition/Fields/Euclidean.lean
import took 2.91s
cumulative profiling times:
attribute application 3.63ms
compilation (IR) 0.0901ms
compilation (LCNF base) 2.39ms
compilation (LCNF impure) 0.362ms
compilation (LCNF mono) 0.642ms
congr simp thm 3.63ms
elaboration 167ms
fix level params 1.72ms
import 2.91s
initialization 48.3ms
instantiate metavars 1.62ms
interpretation 328ms
let-to-have transformation 0.413ms
linting 17.9ms
module linting 0.00141ms
norm_num 2.93ms
overlappingInstancesLinter 13.8ms
parsing 9.94ms
process pre-definitions 11.7ms
ring 24.3ms
share common exprs 7.17ms
simp 64.6ms
tactic execution 201ms
tacticAnalysis 36.2ms
type checking 95.5ms
typeclass inference 928ms
real 5.07
user 3.04
sys 1.30
Advisory only — never blocks merge. Full log uploaded as the proof-profile artifact.
Follow-up to #665 and #674. This adds one file,
Composition/Fields/Euclidean.lean, connectingCompositionAlgebrasOverRingsto theCompositionAlgebrasproject (Hurwitz's theorem for Euclidean composition algebras). It changes onlyLeanPool/CompositionAlgebrasOverRings/**/*.lean. No existing statement, definition or card entry changes. The two import indexes gain the new module,Imports.leanvialake exe mk_all.The bridge. A Euclidean composition algebra in the sense of
CompositionAlgebrasis a real vector space with a unital bilinear product and a positive definite symmetric formBwithB(xy, xy) = B(x, x) B(y, y).CompositionAlgebra.toConicAlgebramakes a nontrivial one into aConicAlgebra ℝ Cwith normnf; the degree-two identity is that project'ssq_eq.isComposition_toConicAlgebrashows it is a composition algebra (GPR 19.5) when finite-dimensional. Multiplicativity is the composition law. Non-singularity follows fromisGPRNonsingular_iff_nondegenerateand anisotropy, since2is invertible overℝ.The three results. Each is stated exactly as in
CompositionAlgebras, in the namespaceCompositionAlgebra.ViaConic:CompositionAlgebrasmain resultCompositionAlgebra.finrank_eq_one_or_two_or_four_or_eightViaConic.finrank_eq_one_or_two_or_four_or_eightIsComposition.finrank_eq_one_or_two_or_four_or_eight(GPR 19.18)CompositionAlgebra.hurwitz_classificationViaConic.hurwitz_classificationIsComposition.isomorphic_of_anisotropic(GPR 23.13), via the newViaConic.exists_isCompIso_of_finrank_eqCompositionAlgebra.CD.instCompositionAlgebra(its composition law)ViaConic.cd_compisMultiplicative_cay(GPR Exc. 18.18)For the classification, two Euclidean composition algebras of the same dimension have positive definite norms of the same dimension, so
isomorphic_of_anisotropicgives an isometry preserving1and multiplication. That isIsCompIso. It is applied directly against that project's structures onℝ,ℂ,ℍ[ℝ]andOctonion. For the double,CompositionAlgebra.CD Dis literallyCay(D, -1): both areD × Dwith(a, b)(c, d) = (ac - (conj d) b, da + b (conj c)), andcstarisconj(conj_toConicAlgebra).cd_compis stated withCD.bilinrather thannfso that its statement does not pass throughCD.instCompositionAlgebra. It needs no finite-dimensionality, like the original.The fourth main result of
CompositionAlgebras,Octonion.nucleus_real, is a computation in the concrete octonions and has no counterpart here.What is and is not used from
CompositionAlgebras. The statements use its definitions, including its composition-algebra instances onℝ,ℂ,ℍ,𝕆and their dimensions. The proofs use its elementary identities (sq_eq,comp,nf_one, adjointness ofcstar). The proofs do not use its doubling chain or its Cayley–Dickson cross-term computation. This was checked mechanically: the transitive constant closure of each of the three theorems contains none ofCompositionAlgebra.finrank_eq_one_or_two_or_four_or_eight,CompositionAlgebra.hurwitz_classification,CompEmb.double,exists_unit_orthogonal,CD.compositionAlgebraOfAssocorCD.cross.Cross-project imports have precedent in the pool, e.g.
Superdiffusion→HighContrastHomogenizationandEscauriazaSereginSverak→CaffarelliKohnNirenberg.Validation, run locally against the pinned Lean and Mathlib:
lake build LeanPool.CompositionAlgebrasOverRings.Imports: no warnings.lake env lean --run scripts/ci/lint-project.leanon all 107 project modules: passed (2987 declarations).lake exe lint-styleon the new file,lake exe mk_all --check,lake exe mk_all --module --checkandgit diff --check: passed.lean_pool.quality --static-only: passed.#print axiomsfor the three theorems: onlypropext,Classical.choice,Quot.sound.example : type_of% @CompositionAlgebra.hurwitz_classification.{0} := @fun C _ _ _ _ _ _ _ => ViaConic.hurwitz_classification C. For the double:example : CompositionAlgebra.B (x * y) (x * y) = CompositionAlgebra.B x x * CompositionAlgebra.B y y := ViaConic.cd_comp x yatCD D.🤖 Generated with Claude Code