# OctaveAlgebra() from GAP gives a strange basis not containing 1 # K: base field # mu1, mu2, mu3: parameters OctonionAlgebra := function (K, mu1, mu2, mu3) local T; T := EmptySCTable (8, Zero(K)); # multiplication table as given in "octonion" paper, e8 is the unit SetEntrySCTable (T, 1, 1, [ mu1, 8]); # e1*e1 = mu1 e8 SetEntrySCTable (T, 1, 2, [-1, 3]); # e1*e2 = -e3 SetEntrySCTable (T, 1, 3, [-mu1, 2]); # e1*e3 = -mu1 e2 SetEntrySCTable (T, 1, 4, [-1, 5]); # e1*e4 = -e5 SetEntrySCTable (T, 1, 5, [-mu1, 4]); # e1*e5 = -mu1 e4 SetEntrySCTable (T, 1, 6, [ 1, 7]); # e1*e6 = e7 SetEntrySCTable (T, 1, 7, [ mu1, 6]); # e1*e7 = mu1 e6 SetEntrySCTable (T, 1, 8, [ 1, 1]); # e1*e8 = e1 SetEntrySCTable (T, 2, 1, [ 1, 3]); # e2*e1 = e3 SetEntrySCTable (T, 2, 2, [ mu2, 8]); # e2*e2 = mu2 e8 SetEntrySCTable (T, 2, 3, [ mu2, 1]); # e2*e3 = mu2 e1 SetEntrySCTable (T, 2, 4, [-1, 6]); # e2*e4 = -e6 SetEntrySCTable (T, 2, 5, [-1, 7]); # e2*e5 = -e7 SetEntrySCTable (T, 2, 6, [-mu2, 4]); # e2*e6 = -mu2 e4 SetEntrySCTable (T, 2, 7, [-mu2, 5]); # e2*e7 = -mu2 e5 SetEntrySCTable (T, 2, 8, [ 1, 2]); # e2*e8 = e2 SetEntrySCTable (T, 3, 1, [ mu1, 2]); # e3*e1 = mu1 e2 SetEntrySCTable (T, 3, 2, [-mu2, 1]); # e3*e2 = -mu2 e1 SetEntrySCTable (T, 3, 3, [-mu1*mu2, 8]); # e3*e3 = -mu1 mu2 e8 SetEntrySCTable (T, 3, 4, [-1, 7]); # e3*e4 = -e7 SetEntrySCTable (T, 3, 5, [-mu1, 6]); # e3*e5 = -mu1 e6 SetEntrySCTable (T, 3, 6, [ mu2, 5]); # e3*e6 = mu2 e5 SetEntrySCTable (T, 3, 7, [ mu1*mu2, 4]); # e3*e7 = mu1 mu2 e4 SetEntrySCTable (T, 3, 8, [ 1, 3]); # e3*e8 = e3 SetEntrySCTable (T, 4, 1, [1, 5]); # e4*e1 = e5 SetEntrySCTable (T, 4, 2, [1, 6]); # e4*e2 = e6 SetEntrySCTable (T, 4, 3, [1, 7]); # e4*e3 = e7 SetEntrySCTable (T, 4, 4, [mu3, 8]); # e4*e4 = mu3 e8 SetEntrySCTable (T, 4, 5, [mu3, 1]); # e4*e5 = mu3 e1 SetEntrySCTable (T, 4, 6, [mu3, 2]); # e4*e6 = mu3 e2 SetEntrySCTable (T, 4, 7, [mu3, 3]); # e4*e7 = mu3 e3 SetEntrySCTable (T, 4, 8, [1, 4]); # e4*e8 = e4 SetEntrySCTable (T, 5, 1, [mu1, 4]); # e5*e1 = mu1 e4 SetEntrySCTable (T, 5, 2, [1, 7]); # e5*e2 = e7 SetEntrySCTable (T, 5, 3, [mu1, 6]); # e5*e3 = mu1 e6 SetEntrySCTable (T, 5, 4, [-mu3, 1]); # e5*e4 = -mu3 e1 SetEntrySCTable (T, 5, 5, [-mu1*mu3, 8]); # e5*e5 = -mu1 mu3 e8 SetEntrySCTable (T, 5, 6, [-mu3, 3]); # e5*e6 = -mu3 e3 SetEntrySCTable (T, 5, 7, [-mu1*mu3, 2]); # e5*e7 = -mu1 mu3 e2 SetEntrySCTable (T, 5, 8, [1, 5]); # e5*e8 = e5 SetEntrySCTable (T, 6, 1, [-1, 7]); # e6*e1 = -e7 SetEntrySCTable (T, 6, 2, [ mu2, 4]); # e6*e2 = mu2 e4 SetEntrySCTable (T, 6, 3, [-mu2, 5]); # e6*e3 = -mu2 e5 SetEntrySCTable (T, 6, 4, [-mu3, 2]); # e6*e4 = -mu3 e2 SetEntrySCTable (T, 6, 5, [ mu3, 3]); # e6*e5 = mu3 e3 SetEntrySCTable (T, 6, 6, [-mu2*mu3, 8]); # e6*e6 = -mu2 mu3 e8 SetEntrySCTable (T, 6, 7, [ mu2*mu3, 1]); # e6*e7 = mu2 mu3 e1 SetEntrySCTable (T, 6, 8, [ 1, 6]); # e6*e8 = e6 SetEntrySCTable (T, 7, 1, [-mu1, 6]); # e7*e1 = -mu1 e6 SetEntrySCTable (T, 7, 2, [ mu2, 5]); # e7*e2 = mu2 e5 SetEntrySCTable (T, 7, 3, [-mu1*mu2, 4]); # e7*e3 = -mu1 mu2 e4 SetEntrySCTable (T, 7, 4, [-mu3, 3]); # e7*e4 = -mu3 e3 SetEntrySCTable (T, 7, 5, [ mu1*mu3, 2]); # e7*e5 = mu1 mu3 e2 SetEntrySCTable (T, 7, 6, [-mu2*mu3, 1]); # e7*e6 = -mu2 mu3 e1 SetEntrySCTable (T, 7, 7, [ mu1*mu2*mu3, 8]); # e7*e7 = mu1 mu2 mu3 e8 SetEntrySCTable (T, 7, 8, [ 1, 7]); # e7*e8 = e7 SetEntrySCTable (T, 8, 1, [1, 1]); # e8*e1 = e1 SetEntrySCTable (T, 8, 2, [1, 2]); # e8*e2 = e2 SetEntrySCTable (T, 8, 3, [1, 3]); # e8*e3 = e3 SetEntrySCTable (T, 8, 4, [1, 4]); # e8*e4 = e4 SetEntrySCTable (T, 8, 5, [1, 5]); # e8*e5 = e5 SetEntrySCTable (T, 8, 6, [1, 6]); # e8*e6 = e6 SetEntrySCTable (T, 8, 7, [1, 7]); # e8*e7 = e7 SetEntrySCTable (T, 8, 8, [1, 8]); # e8*e8 = e8 return (AsAlgebraWithOne (K, AlgebraByStructureConstants (K, T))); end; # returns the standard involution on the octonion algebra O OctonionInvolution := function (O) local b, images; b := CanonicalBasis (O); images := List ([1..7], i -> -b[i]); Add (images, b[8]); return (LeftModuleHomomorphismByImages (O, O, b, images)); end;