login  home  contents  what's new  discussion  bug reports     help  links  subscribe  changes  refresh  edit

Ref:

http://en.wikipedia.org/wiki/Cayley%E2%80%93Dickson_construction

"The Cayley–Dickson construction, named after Arthur Cayley and Leonard Eugene Dickson, produces a sequence of algebras over the field of real numbers, each with twice the dimension of the previous one. The algebras produced by this process are known as Cayley–Dickson algebras; since they extend the complex numbers, ... "

complex numbers, quaternions, octonions, sedenions, ...

http://en.wikipedia.org/wiki/Hypercomplex_number

spad
)abbrev domain CALEY CaleyDickson
CaleyDickson(C:CommutativeRing,gen:Symbol,gamma:C):ComplexCategory(C) with
    hyper:List % -> %
      ++ convert a list of scalars to a hyper-comnplex number
    scalars: % -> List %
      ++ convert a hyper-complex number to a list of scalars
  == add
    Rep := Record(re:C, im:C)
    rep(x:%):Rep == x pretend Rep
    per(x:Rep):% == x pretend %
complex(x:C,y:C):% == per [x,y] real(x:%):C == rep(x).re imag(x:%):C == rep(x).im --mul(x:C,y:%):% == complex(x * real y, x * imag y) mul(x:C,y:%):% == per [x * rep(y).re, x * rep(y).im]
-- Many funtctions are inherited from ComplexCategory -- -- To Do: -- 1) Check which functions are still correct for higher-order algebras!
0:% == complex(0,0) --zero?(x:%):Boolean == zero? real x and zero? imag x zero?(x:%):Boolean == x = 0 1:% == complex(1,0) --one?(x:%):Boolean == one? real x and zero? imag x one?(x:%):Boolean == x = 1
if C has conjugate:C->C then -- In general we need conjugate (x:% * y:%):% == complex(real x * real y - gamma*conjugate imag y * imag x, imag y * real x + imag x * conjugate real y) conjugate(x:%):% == complex(conjugate(real x), -imag x) else -- If not complex then conjugate is identity (x:% * y:%):% == complex(real x * real y - gamma*imag y * imag x, imag y * real x + imag x * real y) conjugate(x:%):% == complex(real x, -imag x)
-- correct order norm(x:%):C == retract(conjugate(x)*x)
if C has Field then inv(x:%):% == mul(inv norm x, conjugate x) (x:% / y:%):% == x * inv(y)
if C has rank:()->PositiveInteger then rank():PositiveInteger == 2*rank()$C else rank():PositiveInteger == 2
if C has basis:()->Vector C then basis():Vector % == concat([complex(i,0) for i in entries basis()$C], [complex(0,i) for i in entries basis()$C]) else basis():Vector % == [1,imaginary()]
if C has scalars: C -> List C then scalars(x:%):List % == map(coerce,concat(scalars real x, scalars imag x))$ListFunctions2(C,%) else scalars(x:%):List % == [ coerce real x, coerce imag x ]
if C has hyper:List C -> C then hyper(x:List %):% == h:Integer := divide(#x,2).quotient complex(hyper([retract(x.i)@C for i in 1..h]),hyper([retract(x.i)@C for i in h+1..#x])) else hyper(x:List %):% == complex(retract x.1,retract x.2)
coerce(x:%):OutputForm == outr:=real(x)::OutputForm imag x = 0 => return outr outi := hconcat(imag(x)::OutputForm, gen::OutputForm) if imag x = 1 then outi := gen::OutputForm if imag x = -1 then outi := -(gen::OutputForm) if C has imaginary:()->C then if imag x = -imaginary()$C then outi := -hconcat(imaginary()$C::OutputForm,gen::OutputForm) real x = 0 => return outi return outr + outi
spad
   Compiling FriCAS source code from file 
      /var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/381330559998884003-25px001.spad
      using old system compiler.
   CALEY abbreviates domain CaleyDickson 
------------------------------------------------------------------------
   initializing NRLIB CALEY for CaleyDickson 
   compiling into NRLIB CALEY 
****** Domain: C already in scope
   compiling local rep : $ -> Rep
      CALEY;rep is replaced by x 
Time: 0.04 SEC.
compiling local per : Rep -> $ CALEY;per is replaced by x Time: 0 SEC.
compiling exported complex : (C,C) -> $ Time: 0 SEC.
compiling exported real : $ -> C Time: 0 SEC.
compiling exported imag : $ -> C Time: 0 SEC.
compiling local mul : (C,$) -> $ Time: 0.01 SEC.
compiling exported Zero : () -> $ Time: 0 SEC.
compiling exported zero? : $ -> Boolean Time: 0 SEC.
compiling exported One : () -> $ Time: 0 SEC.
compiling exported one? : $ -> Boolean Time: 0 SEC.
augmenting C: (SIGNATURE C conjugate (C C)) compiling exported * : ($,$) -> $ Time: 0 SEC.
compiling exported conjugate : $ -> $ Time: 0 SEC.
compiling exported * : ($,$) -> $ Time: 0.01 SEC.
compiling exported conjugate : $ -> $ Time: 0 SEC.
compiling exported norm : $ -> C Time: 0 SEC.
****** Domain: C already in scope augmenting C: (Field) compiling exported inv : $ -> $ Time: 0 SEC.
compiling exported / : ($,$) -> $ Time: 0 SEC.
augmenting C: (SIGNATURE C rank ((PositiveInteger))) compiling exported rank : () -> PositiveInteger Time: 0 SEC.
compiling exported rank : () -> PositiveInteger CALEY;rank;Pi;19 is replaced by 2 Time: 0 SEC.
augmenting C: (SIGNATURE C basis ((Vector C))) compiling exported basis : () -> Vector $ Time: 0.01 SEC.
compiling exported basis : () -> Vector $ Time: 0 SEC.
augmenting C: (SIGNATURE C scalars ((List C) C)) compiling exported scalars : $ -> List $ Time: 0.01 SEC.
compiling exported scalars : $ -> List $ Time: 0 SEC.
augmenting C: (SIGNATURE C hyper (C (List C))) compiling exported hyper : List $ -> $ Time: 0.02 SEC.
compiling exported hyper : List $ -> $ Time: 0.01 SEC.
compiling exported coerce : $ -> OutputForm augmenting C: (SIGNATURE C imaginary (C)) Time: 0 SEC.
****** Domain: C already in scope augmenting C: (EuclideanDomain) ****** Domain: C already in scope augmenting C: (PolynomialFactorizationExplicit) ****** Domain: C already in scope augmenting C: (RadicalCategory) ****** Domain: C already in scope augmenting C: (TranscendentalFunctionCategory) ****** Domain: C already in scope augmenting C: (RealNumberSystem) ****** Domain: C already in scope augmenting C: (TranscendentalFunctionCategory) ****** Domain: C already in scope augmenting C: (Comparable) ****** Domain: C already in scope augmenting C: (ConvertibleTo (InputForm)) ****** Domain: C already in scope augmenting C: (ConvertibleTo (Pattern (Float))) ****** Domain: C already in scope augmenting C: (ConvertibleTo (Pattern (Integer))) ****** Domain: C already in scope augmenting C: (DifferentialRing) ****** Domain: C already in scope augmenting C: (Eltable C C) ****** Domain: C already in scope augmenting C: (EuclideanDomain) ****** Domain: C already in scope augmenting C: (Evalable C) ****** Domain: C already in scope augmenting C: (Field) ****** Domain: C already in scope augmenting C: (Finite) ****** Domain: C already in scope augmenting C: (FiniteFieldCategory) ****** Domain: C already in scope augmenting C: (InnerEvalable (Symbol) C) ****** Domain: C already in scope augmenting C: (IntegerNumberSystem) ****** Domain: C already in scope augmenting C: (IntegralDomain) ****** Domain: C already in scope augmenting C: (LinearlyExplicitRingOver (Integer)) ****** Domain: C already in scope augmenting C: (PartialDifferentialRing (Symbol)) ****** Domain: C already in scope augmenting C: (PatternMatchable (Float)) ****** Domain: C already in scope augmenting C: (PatternMatchable (Integer)) ****** Domain: C already in scope augmenting C: (RealConstant) ****** Domain: C already in scope augmenting C: (RealNumberSystem) ****** Domain: C already in scope augmenting C: (RetractableTo (Fraction (Integer))) ****** Domain: C already in scope augmenting C: (RetractableTo (Integer)) ****** Domain: C already in scope augmenting C: (TranscendentalFunctionCategory) (time taken in buildFunctor: 220)
;;; *** |CaleyDickson| REDEFINED
;;; *** |CaleyDickson| REDEFINED Time: 0.26 SEC.
Warnings: [1] rep: pretendRep -- should replace by @ [2] per: pretend$ -- should replace by @ [3] real: re has no value [4] imag: im has no value [5] mul: re has no value [6] mul: im has no value [7] scalars: $$ has no value
Cumulative Statistics for Constructor CaleyDickson Time: 0.37 seconds
finalizing NRLIB CALEY Processing CaleyDickson for Browser database: --->-->CaleyDickson(constructor): Not documented!!!! --------(hyper (% (List %)))--------- --->-->CaleyDickson((hyper (% (List %)))): Improper first word in comments: convert "convert a list of scalars to a hyper-comnplex number" --------(scalars ((List %) %))--------- --->-->CaleyDickson((scalars ((List %) %))): Improper first word in comments: convert "convert a hyper-complex number to a list of scalars" --->-->CaleyDickson(): Missing Description ; compiling file "/var/aw/var/LatexWiki/CALEY.NRLIB/CALEY.lsp" (written 07 MAY 2016 12:58:57 PM):
; /var/aw/var/LatexWiki/CALEY.NRLIB/CALEY.fasl written ; compilation finished in 0:00:00.146 ------------------------------------------------------------------------ CaleyDickson is now explicitly exposed in frame initial CaleyDickson will be automatically loaded when needed from /var/aw/var/LatexWiki/CALEY.NRLIB/CALEY

Test

fricas
R := FRAC POLY Integer

\label{eq1}\hbox{\axiomType{Fraction}\ } (\hbox{\axiomType{Polynomial}\ } (\hbox{\axiomType{Integer}\ }))(1)
Type: Type

Complex Numbers

fricas
C := CaleyDickson(R,'i,1)

\label{eq2}\hbox{\axiomType{CaleyDickson}\ } (\hbox{\axiomType{Fraction}\ } (\hbox{\axiomType{Polynomial}\ } (\hbox{\axiomType{Integer}\ })) , i , 1)(2)
Type: Type
fricas
rank()$C

\label{eq3}2(3)
fricas
Ce:ILIST(C,0) := construct entries basis()$C

\label{eq4}\left[ 1, \: i \right](4)
Type: IndexedList?(CaleyDickson(Fraction(Polynomial(Integer)),i,1),0)
fricas
matrix [[Ce.i * Ce.j for j in 0..#Ce-1] for i in 0..#Ce-1]

\label{eq5}\left[ 
\begin{array}{cc}
1 & i 
\
i & - 1 
(5)
Type: Matrix(CaleyDickson(Fraction(Polynomial(Integer)),i,1))
fricas
--
-- compare
--
Cg:ILIST(Complex R,0) := construct map(x+-> complex(x.1,x.2),
           1$SquareMatrix(2,FRAC INT)::List List FRAC INT)

\label{eq6}\left[ 1, \: i \right](6)
Type: IndexedList?(Complex(Fraction(Polynomial(Integer))),0)
fricas
matrix [[Cg.i * Cg.j for j in 0..#Cg-1] for i in 0..#Cg-1]

\label{eq7}\left[ 
\begin{array}{cc}
1 & i 
\
i & - 1 
(7)
Type: Matrix(Complex(Fraction(Polynomial(Integer))))
fricas
-- normed?
c1:C := hyper [subscript('c1,[i]) for i in 1..2]

\label{eq8}{c 1_{1}}+{{c 1_{2}}i}(8)
Type: CaleyDickson(Fraction(Polynomial(Integer)),i,1)
fricas
c2:C := hyper [subscript('c2,[i]) for i in 1..2]

\label{eq9}{c 2_{1}}+{{c 2_{2}}i}(9)
Type: CaleyDickson(Fraction(Polynomial(Integer)),i,1)
fricas
c3:C := hyper [subscript('c3,[i]) for i in 1..8]

\label{eq10}{c 3_{1}}+{{c 3_{2}}i}(10)
Type: CaleyDickson(Fraction(Polynomial(Integer)),i,1)
fricas
-- Normed?
test(norm(c1*c2)=norm(c1)*norm(c2))

\label{eq11} \mbox{\rm true} (11)
Type: Boolean
fricas
-- Commutative?
test( c1 * c2 = c2 * c1 )

\label{eq12} \mbox{\rm true} (12)
Type: Boolean
fricas
-- Associative?
test((c1 * c2) * c3 = c1 * (c2 * c3))

\label{eq13} \mbox{\rm true} (13)
Type: Boolean
fricas
-- inverse
c1inv := inv c1

\label{eq14}{{c 1_{1}}\over{{{c 1_{2}}^{2}}+{{c 1_{1}}^{2}}}}+{-{{c 1_{2}}\over{{{c 1_{2}}^{2}}+{{c 1_{1}}^{2}}}}i}(14)
Type: CaleyDickson(Fraction(Polynomial(Integer)),i,1)
fricas
test(c1 * c1inv = 1)

\label{eq15} \mbox{\rm true} (15)
Type: Boolean

Quaternions

fricas
Q := CaleyDickson(C,'j,1)

\label{eq16}\hbox{\axiomType{CaleyDickson}\ } (\hbox{\axiomType{CaleyDickson}\ } (\hbox{\axiomType{Fraction}\ } (\hbox{\axiomType{Polynomial}\ } (\hbox{\axiomType{Integer}\ })) , i , 1) , j , 1)(16)
Type: Type
fricas
rank()$Q

\label{eq17}4(17)
fricas
Qe:ILIST(Q,0) := construct entries basis()$Q

\label{eq18}\left[ 1, \: i , \: j , \:{ij}\right](18)
Type: IndexedList?(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),0)
fricas
matrix [[Qe.i * Qe.j for j in 0..#Qe-1] for i in 0..#Qe-1]

\label{eq19}\left[ 
\begin{array}{cccc}
1 & i & j &{ij}
\
i & - 1 &{ij}& - j 
\
j & -{ij}& - 1 & i 
\
{ij}& j & - i & - 1 
(19)
Type: Matrix(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1))
fricas
--
-- compare
--
Qg:ILIST(Quaternion R,0) := construct map(x+-> quatern(x.1,x.2,x.3,x.4),
           1$SquareMatrix(4,FRAC INT)::List List FRAC INT)

\label{eq20}\left[ 1, \: i , \: j , \: k \right](20)
Type: IndexedList?(Quaternion(Fraction(Polynomial(Integer))),0)
fricas
matrix [[Qg.i * Qg.j for j in 0..#Qg-1] for i in 0..#Qg-1]

\label{eq21}\left[ 
\begin{array}{cccc}
1 & i & j & k 
\
i & - 1 & k & - j 
\
j & - k & - 1 & i 
\
k & j & - i & - 1 
(21)
Type: Matrix(Quaternion(Fraction(Polynomial(Integer))))
fricas
q1:Q := hyper [subscript('q1,[i]) for i in 1..4]

\label{eq22}{q 1_{1}}+{{q 1_{2}}i}+{{{q 1_{3}}+{{q 1_{4}}i}}j}(22)
Type: CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1)
fricas
q2:Q := hyper [subscript('q2,[i]) for i in 1..4]

\label{eq23}{q 2_{1}}+{{q 2_{2}}i}+{{{q 2_{3}}+{{q 2_{4}}i}}j}(23)
Type: CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1)
fricas
q3:Q := hyper [subscript('q3,[i]) for i in 1..8]

\label{eq24}{q 3_{1}}+{{q 3_{2}}i}+{{{q 3_{5}}+{{q 3_{6}}i}}j}(24)
Type: CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1)
fricas
-- Normed?
test( norm(q1*q2) = norm(q1)*norm(q2))

\label{eq25} \mbox{\rm true} (25)
Type: Boolean
fricas
-- Commutative?
test( q1 * q2 = q2 * q1 )

\label{eq26} \mbox{\rm false} (26)
Type: Boolean
fricas
-- Associative?
test((q1 * q2) * q3 = q1 * (q2 * q3))

\label{eq27} \mbox{\rm true} (27)
Type: Boolean
fricas
-- inverse
q1inv := inv q1

\label{eq28}\begin{array}{@{}l}
\displaystyle
{{q 1_{1}}\over{{{q 1_{4}}^{2}}+{{q 1_{3}}^{2}}+{{q 1_{2}}^{2}}+{{q 1_{1}}^{2}}}}+ 
\
\
\displaystyle
{-{{q 1_{2}}\over{{{q 1_{4}}^{2}}+{{q 1_{3}}^{2}}+{{q 1_{2}}^{2}}+{{q 1_{1}}^{2}}}}i}+ 
\
\
\displaystyle
{{-{{q 1_{3}}\over{{{q 1_{4}}^{2}}+{{q 1_{3}}^{2}}+{{q 1_{2}}^{2}}+{{q 1_{1}}^{2}}}}+{-{{q 1_{4}}\over{{{q 1_{4}}^{2}}+{{q 1_{3}}^{2}}+{{q 1_{2}}^{2}}+{{q 1_{1}}^{2}}}}i}}j}
(28)
Type: CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1)
fricas
test(q1 * q1inv = 1)

\label{eq29} \mbox{\rm true} (29)
Type: Boolean

Octonions

Ref: http://en.wikipedia.org/wiki/Octonion

fricas
O:=CaleyDickson(Q,'k,1)

\label{eq30}\hbox{\axiomType{CaleyDickson}\ } (\hbox{\axiomType{CaleyDickson}\ } (\hbox{\axiomType{CaleyDickson}\ } (\hbox{\axiomType{Fraction}\ } (\hbox{\axiomType{Polynomial}\ } (\hbox{\axiomType{Integer}\ })) , i , 1) , j , 1) , k , 1)(30)
Type: Type
fricas
rank()$O

\label{eq31}8(31)
fricas
Oe:ILIST(O,0) := construct entries basis()$O

\label{eq32}\left[ 1, \: i , \: j , \:{ij}, \: k , \:{ik}, \:{jk}, \:{{ij}k}\right](32)
Type: IndexedList?(CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),k,1),0)
fricas
matrix [[Oe.i * Oe.j for j in 0..#Oe-1] for i in 0..#Oe-1]

\label{eq33}\left[ 
\begin{array}{cccccccc}
1 & i & j &{ij}& k &{ik}&{jk}&{{ij}k}
\
i & - 1 &{ij}& - j &{ik}& - k &{-{ij}k}&{jk}
\
j & -{ij}& - 1 & i &{jk}&{{ij}k}& - k &{- ik}
\
{ij}& j & - i & - 1 &{{ij}k}& -{jk}&{ik}& - k 
\
k &{- ik}& -{jk}&{-{ij}k}& - 1 & i & j &{ij}
\
{ik}& k &{-{ij}k}&{jk}& - i & - 1 & -{ij}& j 
\
{jk}&{{ij}k}& k &{- ik}& - j &{ij}& - 1 & - i 
\
{{ij}k}& -{jk}&{ik}& k & -{ij}& - j & i & - 1 
(33)
Type: Matrix(CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),k,1))
fricas
--
-- compare
--
Og:ILIST(Octonion R,0):=map(x+-> octon(x.1,x.2,x.3,x.4,x.5,x.6,x.7,x.8),
           1$SquareMatrix(8,FRAC INT)::List List FRAC INT)

\label{eq34}\left[ 1, \: i , \: j , \: k , \: E , \: I , \: J , \: K \right](34)
Type: IndexedList?(Octonion(Fraction(Polynomial(Integer))),0)
fricas
matrix [[Og.i * Og.j for j in 0..#Og-1] for i in 0..#Og-1]

\label{eq35}\left[ 
\begin{array}{cccccccc}
1 & i & j & k & E & I & J & K 
\
i & - 1 & k & - j & I & - E & - K & J 
\
j & - k & - 1 & i & J & K & - E & - I 
\
k & j & - i & - 1 & K & - J & I & - E 
\
E & - I & - J & - K & - 1 & i & j & k 
\
I & E & - K & J & - i & - 1 & - k & j 
\
J & K & E & - I & - j & k & - 1 & - i 
\
K & - J & I & E & - k & - j & i & - 1 
(35)
Type: Matrix(Octonion(Fraction(Polynomial(Integer))))
fricas
o1:O := hyper [subscript('o1,[i]) for i in 1..8]

\label{eq36}{o 1_{1}}+{{o 1_{2}}i}+{{{o 1_{3}}+{{o 1_{4}}i}}j}+{{{o 1_{5}}+{{o 1_{6}}i}+{{{o 1_{7}}+{{o 1_{8}}i}}j}}k}(36)
Type: CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),k,1)
fricas
o2:O := hyper [subscript('o2,[i]) for i in 1..8]

\label{eq37}{o 2_{1}}+{{o 2_{2}}i}+{{{o 2_{3}}+{{o 2_{4}}i}}j}+{{{o 2_{5}}+{{o 2_{6}}i}+{{{o 2_{7}}+{{o 2_{8}}i}}j}}k}(37)
Type: CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),k,1)
fricas
o3:O := hyper [subscript('o3,[i]) for i in 1..8]

\label{eq38}{o 3_{1}}+{{o 3_{2}}i}+{{{o 3_{3}}+{{o 3_{4}}i}}j}+{{{o 3_{5}}+{{o 3_{6}}i}+{{{o 3_{7}}+{{o 3_{8}}i}}j}}k}(38)
Type: CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),k,1)
fricas
-- normed?
test(norm(o1*o2)=norm(o1)*norm(o2))

\label{eq39} \mbox{\rm true} (39)
Type: Boolean
fricas
-- Commutative?
test( o1 * o2 = o2 * o1 )

\label{eq40} \mbox{\rm false} (40)
Type: Boolean
fricas
-- Associative?
test((o1 * o2) * o3 = o1 * (o2 * o3))

\label{eq41} \mbox{\rm false} (41)
Type: Boolean
fricas
-- Alternative?
test((o1 * o2) * o1 = o1 * (o2 * o1))

\label{eq42} \mbox{\rm true} (42)
Type: Boolean

Split-Octonions

Ref: http://en.wikipedia.org/wiki/Split-octonion

Note: Our table below is not identical the one shown in the reference where a different convention is used to define multiplication.

fricas
sO:=CaleyDickson(Q,'ℓ,-1)

\label{eq43}\hbox{\axiomType{CaleyDickson}\ } (\hbox{\axiomType{CaleyDickson}\ } (\hbox{\axiomType{CaleyDickson}\ } (\hbox{\axiomType{Fraction}\ } (\hbox{\axiomType{Polynomial}\ } (\hbox{\axiomType{Integer}\ })) , i , 1) , j , 1) , � � , - 1)(43)
Type: Type
fricas
rank()$sO

\label{eq44}8(44)
fricas
sOe:ILIST(sO,0) := construct entries basis()$sO

\label{eq45}\left[ 1, \: i , \: j , \:{ij}, \: � � , \:{i � �}, \:{j � �}, \:{{ij}� �}\right](45)
Type: IndexedList?(CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),ℓ,-1),0)
fricas
matrix [[sOe.i * sOe.j for j in 0..#sOe-1] for i in 0..#sOe-1]

\label{eq46}\left[ 
\begin{array}{cccccccc}
1 & i & j &{ij}& � � &{i � �}&{j � �}&{{ij}� �}
\
i & - 1 &{ij}& - j &{i � �}& - � � &{-{ij}� �}&{j � �}
\
j & -{ij}& - 1 & i &{j � �}&{{ij}� �}& - � � &{- i � �}
\
{ij}& j & - i & - 1 &{{ij}� �}& -{j � �}&{i � �}& - � � 
\
� � &{- i � �}& -{j � �}&{-{ij}� �}& 1 & - i & - j & -{ij}
\
{i � �}& � � &{-{ij}� �}&{j � �}& i & 1 &{ij}& - j 
\
{j � �}&{{ij}� �}& � � &{- i � �}& j & -{ij}& 1 & i 
\
{{ij}� �}& -{j � �}&{i � �}& � � &{ij}& j & - i & 1 
(46)
Type: Matrix(CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),ℓ,-1))
fricas
so1:sO := hyper [subscript('so1,[i]) for i in 1..8]

\label{eq47}{so 1_{1}}+{{so 1_{2}}i}+{{{so 1_{3}}+{{so 1_{4}}i}}j}+{{{so 1_{5}}+{{so 1_{6}}i}+{{{so 1_{7}}+{{so 1_{8}}i}}j}}� �}(47)
Type: CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),ℓ,-1)
fricas
so2:sO := hyper [subscript('so2,[i]) for i in 1..8]

\label{eq48}{so 2_{1}}+{{so 2_{2}}i}+{{{so 2_{3}}+{{so 2_{4}}i}}j}+{{{so 2_{5}}+{{so 2_{6}}i}+{{{so 2_{7}}+{{so 2_{8}}i}}j}}� �}(48)
Type: CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),ℓ,-1)
fricas
so3:sO := hyper [subscript('so3,[i]) for i in 1..8]

\label{eq49}{so 3_{1}}+{{so 3_{2}}i}+{{{so 3_{3}}+{{so 3_{4}}i}}j}+{{{so 3_{5}}+{{so 3_{6}}i}+{{{so 3_{7}}+{{so 3_{8}}i}}j}}� �}(49)
Type: CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),ℓ,-1)
fricas
-- Normed?
test(norm(so1*so2)=norm(so1)*norm(so2))

\label{eq50} \mbox{\rm true} (50)
Type: Boolean
fricas
-- Commutative?
test( so1 * so2 = so2 * so1 )

\label{eq51} \mbox{\rm false} (51)
Type: Boolean
fricas
-- Associative?
test((so1 * so2) * so3 = so1 * (so2 * so3))

\label{eq52} \mbox{\rm false} (52)
Type: Boolean
fricas
-- Alternative?
test((so1 * so2) * so1 = so1 * (so2 * so1))

\label{eq53} \mbox{\rm true} (53)
Type: Boolean
fricas
-- inverse
so1inv := inv so1;
Type: CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),ℓ,-1)
fricas
test(so1 * so1inv = 1)

\label{eq54} \mbox{\rm true} (54)
Type: Boolean

Sedenions

Ref: http://en.wikipedia.org/wiki/Sedenion

fricas
S:=CaleyDickson(O,'l,1)

\label{eq55}\hbox{\axiomType{CaleyDickson}\ } (\hbox{\axiomType{CaleyDickson}\ } (\hbox{\axiomType{CaleyDickson}\ } (\hbox{\axiomType{CaleyDickson}\ } (\hbox{\axiomType{Fraction}\ } (\hbox{\axiomType{Polynomial}\ } (\hbox{\axiomType{Integer}\ })) , i , 1) , j , 1) , k , 1) , l , 1)(55)
Type: Type
fricas
rank()$S

\label{eq56}16(56)
fricas
Se:ILIST(S,0) := construct entries basis()$S

\label{eq57}\left[ 1, \: i , \: j , \:{ij}, \: k , \:{ik}, \:{jk}, \:{{ij}k}, \: l , \:{il}, \:{jl}, \:{{ij}l}, \:{kl}, \:{{ik}l}, \:{{jk}l}, \:{{{ij}k}l}\right](57)
Type: IndexedList?(CaleyDickson(CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),k,1),l,1),0)
fricas
matrix [[Se.i * Se.j for j in 0..#Se-1] for i in 0..#Se-1]

\label{eq58}\left[ 
\begin{array}{cccccccccccccccc}
1 & i & j &{ij}& k &{ik}&{jk}&{{ij}k}& l &{il}&{jl}&{{ij}l}&{kl}&{{ik}l}&{{jk}l}&{{{ij}k}l}
\
i & - 1 &{ij}& - j &{ik}& - k &{-{ij}k}&{jk}&{il}& - l &{-{ij}l}&{jl}&{{- ik}l}&{kl}&{{{ij}k}l}&{-{jk}l}
\
j & -{ij}& - 1 & i &{jk}&{{ij}k}& - k &{- ik}&{jl}&{{ij}l}& - l &{- il}&{-{jk}l}&{{-{ij}k}l}&{kl}&{{ik}l}
\
{ij}& j & - i & - 1 &{{ij}k}& -{jk}&{ik}& - k &{{ij}l}&{- jl}&{il}& - l &{{-{ij}k}l}&{{jk}l}&{{- ik}l}&{kl}
\
k &{- ik}& -{jk}&{-{ij}k}& - 1 & i & j &{ij}&{kl}&{{ik}l}&{{jk}l}&{{{ij}k}l}& - l &{- il}&{- jl}&{-{ij}l}
\
{ik}& k &{-{ij}k}&{jk}& - i & - 1 & -{ij}& j &{{ik}l}& -{kl}&{{{ij}k}l}&{-{jk}l}&{il}& - l &{{ij}l}&{- jl}
\
{jk}&{{ij}k}& k &{- ik}& - j &{ij}& - 1 & - i &{{jk}l}&{{-{ij}k}l}& -{kl}&{{ik}l}&{jl}&{-{ij}l}& - l &{il}
\
{{ij}k}& -{jk}&{ik}& k & -{ij}& - j & i & - 1 &{{{ij}k}l}&{{jk}l}&{{- ik}l}& -{kl}&{{ij}l}&{jl}&{- il}& - l 
\
l &{- il}&{- jl}&{-{ij}l}& -{kl}&{{- ik}l}&{-{jk}l}&{{-{ij}k}l}& - 1 & i & j &{ij}& k &{ik}&{jk}&{{ij}k}
\
{il}& l &{-{ij}l}&{jl}&{{- ik}l}&{kl}&{{{ij}k}l}&{-{jk}l}& - i & - 1 & -{ij}& j &{- ik}& k &{{ij}k}& -{jk}
\
{jl}&{{ij}l}& l &{- il}&{-{jk}l}&{{-{ij}k}l}&{kl}&{{ik}l}& - j &{ij}& - 1 & - i & -{jk}&{-{ij}k}& k &{ik}
\
{{ij}l}&{- jl}&{il}& l &{{-{ij}k}l}&{{jk}l}&{{- ik}l}&{kl}& -{ij}& - j & i & - 1 &{-{ij}k}&{jk}&{- ik}& k 
\
{kl}&{{ik}l}&{{jk}l}&{{{ij}k}l}& l &{- il}&{- jl}&{-{ij}l}& - k &{ik}&{jk}&{{ij}k}& - 1 & - i & - j & -{ij}
\
{{ik}l}& -{kl}&{{{ij}k}l}&{-{jk}l}&{il}& l &{{ij}l}&{- jl}&{- ik}& - k &{{ij}k}& -{jk}& i & - 1 &{ij}& - j 
\
{{jk}l}&{{-{ij}k}l}& -{kl}&{{ik}l}&{jl}&{-{ij}l}& l &{il}& -{jk}&{-{ij}k}& - k &{ik}& j & -{ij}& - 1 & i 
\
{{{ij}k}l}&{{jk}l}&{{- ik}l}& -{kl}&{{ij}l}&{jl}&{- il}& l &{-{ij}k}&{jk}&{- ik}& - k &{ij}& j & - i & - 1 
(58)
Type: Matrix(CaleyDickson(CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),k,1),l,1))
fricas
s1:S := hyper [subscript('s1,[i]) for i in 1..16]

\label{eq59}\begin{array}{@{}l}
\displaystyle
{s 1_{1}}+{{s 1_{2}}i}+{{{s 1_{3}}+{{s 1_{4}}i}}j}+{{{s 1_{5}}+{{s 1_{6}}i}+{{{s 1_{7}}+{{s 1_{8}}i}}j}}k}+ 
\
\
\displaystyle
{{{s 1_{9}}+{{s 1_{10}}i}+{{{s 1_{11}}+{{s 1_{12}}i}}j}+{{{s 1_{13}}+{{s 1_{14}}i}+{{{s 1_{15}}+{{s 1_{16}}i}}j}}k}}l}
(59)
Type: CaleyDickson(CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),k,1),l,1)
fricas
s2:S := hyper [subscript('s2,[i]) for i in 1..16]

\label{eq60}\begin{array}{@{}l}
\displaystyle
{s 2_{1}}+{{s 2_{2}}i}+{{{s 2_{3}}+{{s 2_{4}}i}}j}+{{{s 2_{5}}+{{s 2_{6}}i}+{{{s 2_{7}}+{{s 2_{8}}i}}j}}k}+ 
\
\
\displaystyle
{{{s 2_{9}}+{{s 2_{10}}i}+{{{s 2_{11}}+{{s 2_{12}}i}}j}+{{{s 2_{13}}+{{s 2_{14}}i}+{{{s 2_{15}}+{{s 2_{16}}i}}j}}k}}l}
(60)
Type: CaleyDickson(CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),k,1),l,1)
fricas
s3:S := hyper [subscript('s3,[i]) for i in 1..16]

\label{eq61}\begin{array}{@{}l}
\displaystyle
{s 3_{1}}+{{s 3_{2}}i}+{{{s 3_{3}}+{{s 3_{4}}i}}j}+{{{s 3_{5}}+{{s 3_{6}}i}+{{{s 3_{7}}+{{s 3_{8}}i}}j}}k}+ 
\
\
\displaystyle
{{{s 3_{9}}+{{s 3_{10}}i}+{{{s 3_{11}}+{{s 3_{12}}i}}j}+{{{s 3_{13}}+{{s 3_{14}}i}+{{{s 3_{15}}+{{s 3_{16}}i}}j}}k}}l}
(61)
Type: CaleyDickson(CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),k,1),l,1)
fricas
-- normed?
test(norm(s1*s2)=norm(s1)*norm(s2))

\label{eq62} \mbox{\rm false} (62)
Type: Boolean
fricas
-- Commutative
test( s1 * s2 = s2 * s1 )

\label{eq63} \mbox{\rm false} (63)
Type: Boolean
fricas
-- Associative?
test( (s1 * s2) * s3 =  s1 * (s2 * s3) )

\label{eq64} \mbox{\rm false} (64)
Type: Boolean
fricas
-- Alternative?
test((s1 * s2) * s1 = - s1 * (s2 * s1))

\label{eq65} \mbox{\rm false} (65)
Type: Boolean
fricas
-- zero divisor
(Se.3 + Se.10) * (Se.6 - Se.15)

\label{eq66}0(66)
Type: CaleyDickson(CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),k,1),l,1)
fricas
-- inverse
s1inv := inv s1;
Type: CaleyDickson(CaleyDickson(CaleyDickson(CaleyDickson(Fraction(Polynomial(Integer)),i,1),j,1),k,1),l,1)
fricas
test(s1 * s1inv = 1)

\label{eq67} \mbox{\rm true} (67)
Type: Boolean

Power Associative?

Algebra with associative powers

Ref: http://eom.springer.de/a/a011410.htm

fricas
test( s1^2 * s1 = s1 * s1^2 )

\label{eq68} \mbox{\rm true} (68)
Type: Boolean
fricas
test( (s1^2 * s1) * s1 = s1^2 * s1^2 )

\label{eq69} \mbox{\rm true} (69)
Type: Boolean

Conversions

fricas
test(s1=hyper scalars s1)

\label{eq70} \mbox{\rm true} (70)
Type: Boolean
fricas
scalars(s1)::List Symbol

\label{eq71}\begin{array}{@{}l}
\displaystyle
\left[{s 1_{1}}, \:{s 1_{2}}, \:{s 1_{3}}, \:{s 1_{4}}, \:{s 1_{5}}, \:{s 1_{6}}, \:{s 1_{7}}, \:{s 1_{8}}, \:{s 1_{9}}, \:{s 1_{10}}, \:{s 1_{11}}, \:{s 1_{12}}, \: \right.
\
\
\displaystyle
\left.{s 1_{13}}, \:{s 1_{14}}, \:{s 1_{15}}, \:{s 1_{16}}\right] (71)
Type: List(Symbol)




  Subject:   Be Bold !!
  ( 13 subscribers )  
Please rate this page: