$SPAD/src/input octonion.input

Timothy Daly December 3, 2016

Abstract

Contents

2

1 License

— license —

--Copyright The Numerical Algorithms Group Limited 1991.

———-

— * —

)set break resume
)spool octonion.output
)set message test on
)set message auto off
)clear all
--S 1 of 39
e0:Octonion(Fraction(Integer)):=octon(1,0,0,0,0,0,0,0)
--R
--R
--R   (1)  1
--R                                            Type: Octonion(Fraction(Integer))
--E 1
--S 2 of 39
e1:Octonion(Fraction(Integer)):=octon(0,1,0,0,0,0,0,0)
--R
--R
--R   (2)  i
--R                                            Type: Octonion(Fraction(Integer))
--E 2
--S 3 of 39
e2:Octonion(Fraction(Integer)):=octon(0,0,1,0,0,0,0,0)
--R
--R
--R   (3)  j
--R                                            Type: Octonion(Fraction(Integer))
--E 3
--S 4 of 39
e3:Octonion(Fraction(Integer)):=octon(0,0,0,1,0,0,0,0)
--R
--R
--R   (4)  k
--R                                            Type: Octonion(Fraction(Integer))
--E 4
--S 5 of 39
e4:Octonion(Fraction(Integer)):=octon(0,0,0,0,1,0,0,0)

--R
--R
--R   (5)  E
--R                                            Type: Octonion(Fraction(Integer))
--E 5
--S 6 of 39
e5:Octonion(Fraction(Integer)):=octon(0,0,0,0,0,1,0,0)
--R
--R
--R   (6)  I
--R                                            Type: Octonion(Fraction(Integer))
--E 6
--S 7 of 39
e6:Octonion(Fraction(Integer)):=octon(0,0,0,0,0,0,1,0)
--R
--R
--R   (7)  J
--R                                            Type: Octonion(Fraction(Integer))
--E 7
--S 8 of 39
e7:Octonion(Fraction(Integer)):=octon(0,0,0,0,0,0,0,1)
--R
--R
--R   (8)  K
--R                                            Type: Octonion(Fraction(Integer))
--E 8
--S 9 of 39
[e0,e1,e2,e3,e4,e5,e6,e7]
--R
--R
--R   (9)  [1,i,j,k,E,I,J,K]
--R                                      Type: List(Octonion(Fraction(Integer)))
--E 9

———-

Given the above basis elements we can form the multiplication table for the Octonions. — * —

--S 10 of 39
for i in [e0,e1,e2,e3,e4,e5,e6,e7] repeat _
  print [ (i*e0),(i*e1),(i*e2),(i*e3),(i*e4),(i*e5),(i*e6),(i*e7) ]
--R
--R   [1,i,j,k,E,I,J,K]
--R   [i,- 1,k,- j,I,- E,- K,J]
--R   [j,- k,- 1,i,J,K,- E,- I]
--R   [k,j,- i,- 1,K,- J,I,- E]

--R   [E,- I,- J,- K,- 1,i,j,k]
--R   [I,E,- K,J,- i,- 1,- k,j]
--R   [J,K,E,- I,- j,k,- 1,- i]
--R   [K,- J,I,E,- k,- j,i,- 1]
--R                                                                   Type: Void
--E 10

———-

The octonions build a non-associative algebra:

— * —

--S 11 of 39
oci1 := octon(1,2,3,4,5,6,7,8)
--R
--R
--R   (11)  1 + 2i + 3j + 4k + 5E + 6I + 7J + 8K
--R                                                      Type: Octonion(Integer)
--E 11
--S 12 of 39
oci2 := octon(7,2,3,-4,5,6,-7,0)
--R
--R
--R   (12)  7 + 2i + 3j - 4k + 5E + 6I - 7J
--R                                                      Type: Octonion(Integer)
--E 12
--S 13 of 39
oci3 := octon(-7,-12,3,-10,5,6,9,0)
--R
--R
--R   (13)  - 7 - 12i + 3j - 10k + 5E + 6I + 9J
--R                                                      Type: Octonion(Integer)
--E 13
--S 14 of 39
oci := oci1 * oci2 * oci3
--R
--R
--R   (14)  - 324 + 2104i - 1100j - 2984k - 1444E + 528I - 44J + 128K
--R                                                      Type: Octonion(Integer)
--E 14
--S 15 of 39
(oci1 * oci2) * oci3 - oci1 * (oci2 * oci3)
--R
--R
--R   (15)  2696i - 2928j - 4072k + 16E - 1192I + 832J + 2616K
--R                                                      Type: Octonion(Integer)
--E 15

———-

The following elements, together with 1, build a basis over the ground ring — * —

--S 16 of 39
octon(1,0,0,0,0,0,0,0)
--R
--R
--R   (16)  1
--R                                                      Type: Octonion(Integer)
--E 16
--S 17 of 39
i := octon(0,1,0,0,0,0,0,0)
--R
--R
--R   (17)  i
--R                                                      Type: Octonion(Integer)
--E 17
--S 18 of 39
j := octon(0,0,1,0,0,0,0,0)
--R
--R
--R   (18)  j
--R                                                      Type: Octonion(Integer)
--E 18
--S 19 of 39
octon(0,0,0,1,0,0,0,0)
--R
--R
--R   (19)  k
--R                                                      Type: Octonion(Integer)
--E 19
--S 20 of 39
octon(0,0,0,0,1,0,0,0)
--R
--R
--R   (20)  E
--R                                                      Type: Octonion(Integer)
--E 20
--S 21 of 39
octon(0,0,0,0,0,1,0,0)
--R
--R

--R   (21)  I
--R                                                      Type: Octonion(Integer)
--E 21
--S 22 of 39
J := octon(0,0,0,0,0,0,1,0)
--R
--R
--R   (22)  J
--R                                                      Type: Octonion(Integer)
--E 22
--S 23 of 39
octon(0,0,0,0,0,0,0,1)
--R
--R
--R   (23)  K
--R                                                      Type: Octonion(Integer)
--E 23
--S 24 of 39
i*(j*J)
--R
--R
--R   (24)  - I
--R                                                      Type: Octonion(Integer)
--E 24
--S 25 of 39
(i*j)*J
--R
--R
--R   (25)  I
--R                                                      Type: Octonion(Integer)
--E 25

———-

We can extract the coefficient w.r.t. a basis element:

— * —

--S 26 of 39
imagi oci
--R
--R
--R   (26)  2104
--R                                                        Type: PositiveInteger
--E 26
--S 27 of 39

imagE oci
--R
--R
--R   (27)  - 1444
--R                                                                Type: Integer
--E 27

———-

The elements 1 and E build a basis with respect to the quaternions: but what are the commuting rules?

— * —

--S 28 of 39
qs := Quaternion Polynomial Integer
--R
--R
--R   (28)  Quaternion(Polynomial(Integer))
--R                                                                 Type: Domain
--E 28
--S 29 of 39
os := Octonion Polynomial Integer
--R
--R
--R   (29)  Octonion(Polynomial(Integer))
--R                                                                 Type: Domain
--E 29

———-

A general quaternion:

— * —

--S 30 of 39
q : qs := quatern(q1,qi,qj,qk)
--R
--R
--R   (30)  q1 + qi i + qj j + qk k
--R                                        Type: Quaternion(Polynomial(Integer))
--E 30
--S 31 of 39
E := octon(0,0,0,0,1,0,0,0)$os
--R
--R
--R   (31)  E
--R                                          Type: Octonion(Polynomial(Integer))
--E 31
--S 32 of 39

q * E
--R
--R
--R   (32)  q1 E + qi I + qj J + qk K
--R                                          Type: Octonion(Polynomial(Integer))
--E 32
--S 33 of 39
E * q
--R
--R
--R   (33)  q1 E - qi I - qj J - qk K
--R                                          Type: Octonion(Polynomial(Integer))
--E 33
--S 34 of 39
q * 1$os
--R
--R
--R   (34)  q1 + qi i + qj j + qk k
--R                                          Type: Octonion(Polynomial(Integer))
--E 34
--S 35 of 39
1$os * q
--R
--R
--R   (35)  q1 + qi i + qj j + qk k
--R                                          Type: Octonion(Polynomial(Integer))
--E 35

———-

Two general octonions:

— * —

--S 36 of 39
o : os := octon(o1,oi,oj,ok,oE,oI,oJ,oK)
--R
--R
--R   (36)  o1 + oi i + oj j + ok k + oE E + oI I + oJ J + oK K
--R                                          Type: Octonion(Polynomial(Integer))
--E 36
--S 37 of 39
p : os := octon(p1,pi,pj,pk,pE,pI,pJ,pK)
--R
--R
--R   (37)  p1 + pi i + pj j + pk k + pE E + pI I + pJ J + pK K
--R                                          Type: Octonion(Polynomial(Integer))

--E 37

———-

The norm of an octonion is defined as the sum of the squares of the coefficients: — * —

--S 38 of 39
norm o
--R
--R
--R           2     2     2     2     2     2     2     2
--R   (38)  ok  + oj  + oi  + oK  + oJ  + oI  + oE  + o1
--R                                                    Type: Polynomial(Integer)
--E 38

———-

And the norm is multiplicative:

— * —

--S 39 of 39
norm(o*p)-norm(p*o)
--R
--R
--R   (39)  0
--R                                                    Type: Polynomial(Integer)
--E 39
)spool
)lisp (bye)

———-

References^{[1] nothing}

11