The split octonions #
The split octonions over a commutative ring R are realized here as Zorn vector matrices: an
element is a formal 2 × 2 matrix
⟨a, b, v, w⟩ = [[a, v], [w, b]]
with scalar diagonal a b : R and vector off-diagonal v w : Fin 3 → R, multiplied by
[[a, v], [w, b]] * [[a', v'], [w', b']] =
[[a * a' + v ⬝ᵥ w', a • v' + b' • v - w ⨯₃ w'], [a' • w + b • w' + v ⨯₃ v', b * b' + w ⬝ᵥ v']]
using the dot and cross products of Fin 3 → R. This is an 8-dimensional unital R-algebra
carrying the multiplicative norm N ⟨a, b, v, w⟩ = a * b - v ⬝ᵥ w, the determinant of the vector
matrix: it is the split Cayley algebra, the split form of the octonions. It is alternative, and the
worked examples at the end of the file exhibit an R — namely ℤ — over which it is neither
commutative nor associative; no such failure is claimed for every base ring, since over the zero
ring Octonion R is trivial and hence both.
Zorn's model is used rather than a Cayley--Dickson doubling of the split quaternions because the two
produce the same algebra while the vector matrices carry the norm form on their sleeve: N is a
determinant, and its multiplicativity reduces to Mathlib's scalar quadruple product identity
Matrix.cross_dot_cross.
The algebra structure, the conjugation, and the norm are stated over a commutative ring; no field,
characteristic or closedness hypothesis is needed for them. The additive and module structures
and the coordinate isomorphism need only an additive commutative monoid of coefficients. Only the
two dimension counts TauCeti.Octonion.finrank_eq_eight and TauCeti.Octonion.finrank_imaginary
ask for a base over which ranks are well behaved, and each asks for it as StrongRankCondition and
nothing more.
Main definitions #
TauCeti.Octonion: the split octonions overR, as Zorn vector matrices, with theirNonAssocRingandModule Rstructure and the two scalar towers.TauCeti.Octonion.conj: octonion conjugation⟨a, b, v, w⟩ ↦ ⟨b, a, -v, -w⟩, anR-linear involution.TauCeti.Octonion.traceandTauCeti.Octonion.norm: the tracea + band the norma * b - v ⬝ᵥ wof the composition algebra.TauCeti.Octonion.imaginary: the imaginary octonions, the kernel of the trace.
Main results #
TauCeti.Octonion.finrank_eq_eight: the split octonions are8-dimensional.TauCeti.Octonion.self_mul_conjandTauCeti.Octonion.conj_mul_self:x * conj x = conj x * x = N x • 1.TauCeti.Octonion.norm_mul: the norm is multiplicative, so𝕆is a composition algebra.TauCeti.Octonion.normQuadraticForm: the norm, bundled as aQuadraticForm, so that Mathlib'sQuadraticMap.polarAPI supplies the associated symmetric bilinear form. That form is visible inside the algebra asTauCeti.Octonion.mul_conj_add_mul_conj,x * conj y + y * conj x = QuadraticMap.polar (normQuadraticForm R) x y • 1, and it is the trace form of the composition algebra,TauCeti.Octonion.trace_mul_conj.TauCeti.Octonion.left_alternative,TauCeti.Octonion.right_alternativeandTauCeti.Octonion.flexible:𝕆is alternative and flexible.TauCeti.Octonion.moufang_left,TauCeti.Octonion.moufang_rightandTauCeti.Octonion.moufang_middle: the three Moufang identities.TauCeti.Octonion.mul_self: every octonion satisfies its rank-two equationx * x = trace x • x - norm x • 1.TauCeti.Octonion.finrank_imaginary: the imaginary octonions, the trace-zero subspace, are7-dimensional. The derivation algebraDer 𝕆isTauCeti.derivationLieAlgebra R (Octonion R)(TauCeti/Algebra/Lie/Derivation/Basic.lean), of rank14byTauCeti.Octonion.finrank_derivationLieAlgebra. Over a field in which2is nonzero the imaginary octonions are an irreducible representation ofDer 𝕆(TauCeti.Octonion.isIrreducible_imaginaryLieSubmodule, inTauCeti/Algebra/Octonion/Fundamental.lean), so there they are its7-dimensional fundamental representation; only the isomorphism ofDer 𝕆withLieAlgebra.g₂still waits.
Implementation notes #
Almost every identity below is proved without ever looking at a coordinate: Octonion.ext splits an
equation of octonions into its four entries, a file-local simp set pushes the dot and cross products
of Fin 3 → R through the linear combinations that make up an entry of a product and reduces the
compound products that survive by Mathlib's Matrix.cross_dot_cross,
Matrix.cross_cross_eq_smul_sub_smul and Matrix.cross_cross_eq_smul_sub_smul', and module or
ring finishes. The two Moufang identities proved directly are the exception: they need relations
special to three coordinates that Mathlib does not name, so they — and the worked examples — expand
the vector entries into coordinates through Matrix.vec3_dotProduct and Matrix.cross_apply, with
a private coordinate extensionality lemma splitting an equation of octonions into its eight scalar
coordinates.
No definition here is exposed: consumers work through the projection simp lemmas rather than
through any definition body. The additive and module structures are transported from
R × R × (Fin 3 → R) × (Fin 3 → R) along the injective map to the four entries, and
TauCeti.Octonion.linearEquivProd packages a vector matrix as the tuple of those entries, a
linear isomorphism over any semiring acting on the coefficients; the dimension count runs through
it with R acting on itself.
The norm is available both as the bare map Octonion R → R and, through
TauCeti.Octonion.normQuadraticForm, as a QuadraticForm R (Octonion R); the bundled form is what
gives its polarization Mathlib's bilinearity and symmetry API for free. The derivation algebra
Der 𝕆 is
TauCeti.derivationLieAlgebra R (Octonion R), built in TauCeti/Algebra/Lie/Derivation/Basic.lean.
References #
The model is M. Zorn, Alternativkörper und quadratische Systeme, Abh. Math. Sem. Univ. Hamburg 9 (1933); see also T. A. Springer and F. D. Veldkamp, Octonions, Jordan Algebras and Exceptional Groups, §1.8, and J. C. Baez, The octonions, Bull. Amer. Math. Soc. 39 (2002), §2.
The split octonions over R, as Zorn vector matrices: the element ⟨a, b, v, w⟩ is the
formal matrix [[a, v], [w, b]] with scalar diagonal and vector off-diagonal entries.
- a : R
The top-left, scalar entry of the vector matrix.
- b : R
The bottom-right, scalar entry of the vector matrix.
- v : Fin 3 → R
The top-right, vector entry of the vector matrix.
- w : Fin 3 → R
The bottom-left, vector entry of the vector matrix.
Instances For
The additive and module structure #
Equations
- TauCeti.Octonion.instInhabitedOfZero = { default := 0 }
Equations
- TauCeti.Octonion.instAddCommMonoid = Function.Injective.addCommMonoid (fun (x : TauCeti.Octonion R) => (x.a, x.b, x.v, x.w)) ⋯ ⋯ ⋯ ⋯
Equations
- TauCeti.Octonion.instAddCommGroup = Function.Injective.addCommGroup (fun (x : TauCeti.Octonion R) => (x.a, x.b, x.v, x.w)) ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- TauCeti.Octonion.instDistribMulAction = Function.Injective.distribMulAction { toFun := fun (x : TauCeti.Octonion R) => (x.a, x.b, x.v, x.w), map_zero' := ⋯, map_add' := ⋯ } ⋯ ⋯
Equations
- TauCeti.Octonion.instModule = Function.Injective.module S { toFun := fun (x : TauCeti.Octonion R) => (x.a, x.b, x.v, x.w), map_zero' := ⋯, map_add' := ⋯ } ⋯ ⋯
Equations
- One or more equations did not get rendered due to their size.
The components of a vector matrix, as a linear isomorphism with the tuple of its four entries, over any semiring acting on the coefficients.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The split octonions are 8-dimensional: two scalar and two vector entries.
The multiplication #
The Zorn vector-matrix product: the matrix product of [[a, v], [w, b]] and
[[a', v'], [w', b']], with the vector entries paired by the dot product and corrected by a cross
product.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Conjugation, trace and norm #
Octonion conjugation ⟨a, b, v, w⟩ ↦ ⟨b, a, -v, -w⟩: it exchanges the two diagonal entries
and negates the two vector entries, so it fixes 1 and negates the imaginary part.
Equations
Instances For
The trace ⟨a, b, v, w⟩ ↦ a + b of a vector matrix, the coefficient of the rank-two
equation TauCeti.Octonion.mul_self.
Equations
- TauCeti.Octonion.trace = { toFun := fun (x : TauCeti.Octonion R) => x.a + x.b, map_add' := ⋯, map_smul' := ⋯ }
Instances For
The trace of 1 is 2, not 1: the identity vector matrix has two diagonal entries. Not a
simp lemma, because TauCeti.Octonion.trace_apply already takes its left-hand side apart.
Conjugation preserves the trace: it only exchanges the two diagonal entries. Not a simp
lemma, for the same reason as TauCeti.Octonion.trace_one.
The trace is symmetric in a product: trace (x * y) = trace (y * x), since the two dot
products of a Zorn product are exchanged when the factors are. Not a simp lemma, for the same
reason as TauCeti.Octonion.trace_one.
The norm as a quadratic form #
The norm is a quadratic form. Its companion is the bilinear map
(x, y) ↦ a b' + a' b - v ⬝ᵥ w' - v' ⬝ᵥ w, the polarization of the determinant of a vector matrix.
Packaging the norm this way makes Mathlib's QuadraticMap.polar API — symmetry, bilinearity in each
argument, and QuadraticMap.polar_self — available for the associated symmetric form, which is what
the Hermitian matrix algebras over 𝕆 are built from.
Equations
Instances For
The polar form of the norm, read off the entries of the two vector matrices. Stated for
QuadraticMap.polar rather than for QuadraticMap.polarBilin, which simp unfolds to it. Not a
simp lemma: the polar form and its half QuadraticMap.associated are the interface the Hermitian
matrix algebras are stated against, and simp should not take it apart into coordinates behind
their backs.
The polar form of the norm is unchanged by conjugating both arguments: conjugation is additive and preserves the norm.
The polar form of the norm is visible inside the algebra: x * conj y + y * conj x is the
scalar QuadraticMap.polar (normQuadraticForm R) x y · 1. Together with
TauCeti.Octonion.self_mul_conj, which is the case y = x up to a factor of 2, this is what
makes the symmetric form of a composition algebra an algebraic, not merely a quadratic, datum.
The mirror form conj x * y + conj y * x is this identity at (conj x, conj y), read through
TauCeti.Octonion.conj_conj and TauCeti.Octonion.polar_normQuadraticForm_conj:
simpa [polar_normQuadraticForm_conj] using mul_conj_add_mul_conj (conj x) (conj y).
Alternativity #
The Moufang identities #
The two Moufang identities proved directly are the one place where the vector simp set above does
not suffice. Reducing them with it leaves obligations that hold only because the vector entries have
three coordinates and that Mathlib does not name: the vanishing of v ⬝ᵥ u ⨯₃ w + w ⬝ᵥ u ⨯₃ v at
the scalar entries, and a relation between a triple product and the entries themselves at the vector
entries. Both are therefore proved in coordinates: dot
products are expanded by Mathlib's Matrix.vec3_dotProduct, cross products by Mathlib's
Matrix.cross_apply. The latter rewrites u ⨯₃ t to a ![…] literal, and such a literal meeting
the generic vector entries of a product fires Matrix.sub_cons, Matrix.head_add and
Matrix.dotProduct_cons, which re-express the coordinates as vecHead/vecTail towers; unfolding
those two definitions turns the towers back into the coordinates u 0, u 1, u 2, so that ring
sees one atom per coordinate.
Worked examples: Octonion ℤ is neither commutative nor associative #
Alternativity is as much associativity as 𝕆 has, and the two vector entries are what break the
rest: [[0, e₀], [0, 0]] · [[0, e₁], [0, 0]] picks up the cross product e₀ ⨯₃ e₁ = e₂ in its
bottom-left entry, and the opposite product picks up e₁ ⨯₃ e₀ = -e₂. The two examples below run
this over ℤ, so they witness both failures for that base ring rather than for every R; over the
zero ring Octonion R is of course commutative and associative.
The imaginary octonions #
The imaginary octonions, the trace-zero subspace of 𝕆. It is 7-dimensional
(TauCeti.Octonion.finrank_imaginary) and, over a field in which 2 is nonzero, an irreducible
representation of G₂ = Der 𝕆 by TauCeti.Octonion.isIrreducible_imaginaryLieSubmodule -- where
Der 𝕆 is TauCeti.derivationLieAlgebra R (Octonion R), of rank 14 by
TauCeti.Octonion.finrank_derivationLieAlgebra. The isomorphism of Der 𝕆 with LieAlgebra.g₂ is
not proved in the repository.
Equations
Instances For
Conjugation negates exactly the imaginary octonions: conj x = -x if and only if x has
vanishing trace. Not a simp lemma, because TauCeti.Octonion.mem_imaginary already takes its
left-hand side apart.
The trace is a surjection onto the base ring: it already is on the scalar diagonal.
The imaginary split octonions are 7-dimensional: a vanishing trace pins the second
diagonal entry to b = -a, leaving the entries a, v and w free.