Documentation

LeanPool.CompositionAlgebras.Octonions

The Octonion Algebra #

The octonions O are the unique 8-dimensional normed division algebra (Hurwitz 1898). They are non-associative and non-commutative.

Role in the program #

The Jordan-von Neumann-Wigner classification (1934) says all simple formally real Jordan algebras are built from the four normed division algebras R, C, H, O plus spin factors. The exceptional Jordan algebra h_3(O) is the unique Jordan algebra that:

Main definitions #

Main results #

Hurwitz's classification, Aut(š•†) = Gā‚‚, and S⁶ = Gā‚‚/SU(3) are not stated here: they were carried as custom axiom declarations in the source tree and were dropped on the way in, since this tree admits no custom axioms and nothing consumed them. ā˜… Of those three, Hurwitz's classification is since 2026-08-23 a theorem of this tree (Composition/Classification.lean, hurwitz_classification, axioms []) rather than a dropped axiom. The other two remain unstated.

References #

structure Octonion :

The octonion algebra, represented as R^8. Basis: e_0 = 1 (real unit), e_1 through e_7 (imaginary units).

  • coords : Fin 8 → ā„

    The 8 real components.

Instances For
    @[instance_reducible]
    Equations
    @[instance_reducible]
    Equations
    @[instance_reducible]
    Equations
    @[instance_reducible]
    Equations
    theorem Octonion.ext {a b : Octonion} (h : āˆ€ (i : Fin 8), a.coords i = b.coords i) :
    a = b
    theorem Octonion.ext_iff {a b : Octonion} :
    a = b ↔ āˆ€ (i : Fin 8), a.coords i = b.coords i
    @[simp]
    theorem Octonion.zero_coords (i : Fin 8) :
    coords 0 i = 0
    @[simp]
    theorem Octonion.add_coords (a b : Octonion) (i : Fin 8) :
    (a + b).coords i = a.coords i + b.coords i
    @[simp]
    theorem Octonion.smul_coords (r : ā„) (a : Octonion) (i : Fin 8) :
    (r • a).coords i = r * a.coords i
    @[simp]
    theorem Octonion.neg_coords (a : Octonion) (i : Fin 8) :
    (-a).coords i = -a.coords i

    The real unit octonion e_0 = (1, 0, 0, 0, 0, 0, 0, 0).

    Equations
    Instances For

      The i-th basis octonion e_i.

      Equations
      Instances For

        Octonionic multiplication. Non-associative, non-commutative. Defined via the Fano plane multiplication table (Baez convention). Triples: (1,2,4), (2,3,5), (3,4,6), (4,5,7), (5,6,1), (6,7,2), (7,1,3). For each triple (i,j,k): e_i * e_j = e_k (cyclic positive), e_j * e_i = -e_k. e_0 is the two-sided identity; e_i^2 = -e_0 for i > 0. Extended bilinearly: (sum a_i e_i) * (sum b_j e_j) = sum a_i b_j (e_i * e_j).

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          @[instance_reducible]
          Equations

          Octonionic conjugation: a* = 2 Re(a) - a. Equivalently: conjugate flips the sign of all imaginary components.

          Equations
          Instances For

            The real part of an octonion.

            Equations
            Instances For

              The norm-squared: N(a) = a * a* = sum of squares of components.

              Equations
              Instances For

                The 7 imaginary unit octonions e_1, ..., e_7.

                Equations
                Instances For
                  theorem Octonion.mul_one' (a : Octonion) :
                  a.mul one = a

                  Octonionic multiplication has a two-sided identity.

                  theorem Octonion.non_associative :
                  ∃ (a : Octonion) (b : Octonion) (c : Octonion), (a.mul b).mul c ≠ a.mul (b.mul c)

                  Octonions are NOT associative. There exist a, b, c with (ab)c != a(bc).

                  The norm is multiplicative: N(ab) = N(a) N(b). This supplies the concrete octonion example used in Hurwitz's classification.

                  theorem Octonion.mul_eq_zero_iff (a b : Octonion) :
                  a.mul b = 0 ↔ a = 0 ∨ b = 0

                  Octonions form a division algebra: ab = 0 implies a = 0 or b = 0.

                  theorem Octonion.conj_mul (a b : Octonion) :
                  (a.mul b).conj = b.conj.mul a.conj

                  Conjugation is an anti-involution: (ab)* = b* a*.

                  Conjugation is involutive: a** = a.

                  a * a* = N(a) * 1.

                  theorem Octonion.mul_add' (a b c : Octonion) :
                  a.mul (b + c) = a.mul b + a.mul c
                  theorem Octonion.add_mul' (a b c : Octonion) :
                  (a + b).mul c = a.mul c + b.mul c
                  theorem Octonion.smul_mul (r : ā„) (a b : Octonion) :
                  (r • a).mul b = r • a.mul b
                  theorem Octonion.mul_smul' (r : ā„) (a b : Octonion) :
                  a.mul (r • b) = r • a.mul b