From 61037c13a8d4988428aeb79b383f3b45dbad8778 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Mon, 1 Mar 2021 22:32:21 -0500 Subject: [PATCH] octonions: add Cayley-Dickson representation. --- mjo/octonions.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/mjo/octonions.py b/mjo/octonions.py index f6e222e..cd25f18 100644 --- a/mjo/octonions.py +++ b/mjo/octonions.py @@ -1,3 +1,4 @@ +from sage.algebras.quatalg.quaternion_algebra import QuaternionAlgebra from sage.combinat.free_module import CombinatorialFreeModule from sage.modules.with_basis.indexed_element import IndexedFreeModuleElement from sage.categories.magmatic_algebras import MagmaticAlgebras @@ -171,6 +172,52 @@ class Octonion(IndexedFreeModuleElement): raise ValueError("zero is not invertible") return self.conjugate()/self._norm_squared() + + def cayley_dickson(self, Q=None): + r""" + Return the Cayley-Dickson representation of this element in terms + of the quaternion algebra ``Q``. + + The Cayley-Dickson representation is an identification of + octionions `x` and `y` with pairs of quaternions `(a,b)` and + `(c,d)` respectively such that: + + * `x + y = (a+b, c+d)` + * `xy` = (ac - \bar{d}*b, da + b\bar{c})` + * `\bar{x} = (a,-b)` + + where `\bar{x}` denotes the conjugate of `x`. + + SETUP:: + + sage: from mjo.octonions import Octonions + + EXAMPLES:: + + sage: O = Octonions() + sage: x = sum(O.gens()) + sage: x.cayley_dickson() + (1 + i + j + k, 1 + i + j + k) + + """ + if Q is None: + Q = QuaternionAlgebra(self.base_ring(), -1, -1) + + i,j,k = Q.gens() + a = (self.coefficient(0)*Q.one() + + self.coefficient(1)*i + + self.coefficient(2)*j + + self.coefficient(3)*k ) + b = (self.coefficient(4)*Q.one() + + self.coefficient(5)*i + + self.coefficient(6)*j + + self.coefficient(7)*k ) + + from sage.categories.sets_cat import cartesian_product + P = cartesian_product([Q,Q]) + return P((a,b)) + + class Octonions(CombinatorialFreeModule): r""" SETUP:: -- 2.43.2