{VERSION 6 0 "IBM INTEL NT" "6.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Maple Output" -1 11 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 3 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Maple Output" -1 12 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 3 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "R3 Font 0" -1 256 1 {CSTYLE "" -1 -1 "Helvetica" 1 11 0 0 255 1 2 2 2 2 2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "R3 \+ Font 2" -1 257 1 {CSTYLE "" -1 -1 "Courier" 1 10 255 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Normal" -1 258 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }} {SECT 0 {EXCHG {PARA 258 "" 0 "" {TEXT -1 27 "This is octonion_M11_02. mws" }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 29 "(Revised: December 20, 2007)\n" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 1091 "############################################################## ###############\n# \+ #\n#DISCLAIMER: \+ #\n# \+ #\n#THERE IS NO WARRANTY FOR \+ THE CLIFFORD, BIGEBRA, Cliplus, Octonion, GTP #\n#PACKAGES TO THE \+ EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE #\n#STATED \+ IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE # \n#PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, #\n#INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY #\n#AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIR E RISK AS TO THE QUALITY #\n#AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE #\n#DEFECTIVE, YOU ASSUME THE COS T OF ALL NECESSARY SERVICING, REPAIR OR #\n#CORRECTION. \+ #\n############ #################################################################" }} {PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 239 "This Maple worksheet creates an octonion package called 'Octonion', versio n 6, and saves it in libname[1] `Octonion.m` file. It runs under Mapl e 6 through Maple 11 provided that Maple package CLIFFORD has been loa ded using with(Clifford)." }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 28 "To load the package, execute" }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 16 ">with(Octonion);" }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 82 "Bel ow you will find a description of commands available in the 'Octonion' package." }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 44 "Any comments and bug reports please send to:" }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 16 "Rafal Ablam owicz" }}{PARA 258 "" 0 "" {TEXT -1 25 "Department of Mathematics" }} {PARA 258 "" 0 "" {TEXT -1 34 "Tennessee Technological University" }} {PARA 258 "" 0 "" {TEXT -1 24 "Cookeville, TN 38501 USA" }}{PARA 258 " " 0 "" {TEXT -1 30 "e-mail: rablamowicz@tntech.edu" }}{PARA 258 "" 0 " " {TEXT -1 24 "phone: USA(931) 372-3569" }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 33 "Cookeville, TN, December 20, 200 7" }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 0 " " }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 28 "restart:unprotect(Octonion): " }}{PARA 258 "" 0 "" {TEXT -1 90 "1. Name 'oversion' stores informati on about the current version of the OCTONION package. " }}{PARA 258 " " 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 26 "Typical use: ove rsion(); " }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 901 "Octonion:=mo dule()\nexport Phi,associator,commutator,def_omultable,o_conjug,oinv,o mul,omultable,onorm,oversion,purevectorpart,realpart;\nlocal setup;\no ption package, load=setup:\n#############################\noversion:= \+ proc()\noptions `Copyright 1995-2008 by Rafal Ablamowicz, Tennessee Te chnological University`;\nprint(`+++++++++++++++++++++++++++++++++++++ ++++++`);\nprint(`'Octonion' - A Maple 11 Package for Computations wit h Octonions (version 11)`); \nprint(`Last revised: December 20, 2007`) ;\nprint(`Copyright 1995-2008, by Rafal Ablamowicz, Tennessee Technolo gical University`);\nprint(`Department of Mathematics, Box 5054`);\npr int(`Tennessee Technological University, Cookeville, TN 38505`);\nprin t(`phone: USA (931) 372-3569, fax: USA (931) 372-6353`);\nprint(`e-mai l: rablamowicz@tntech.edu`);\nprint(`http://math.tntech.edu/rafal/`); \nprint(`+++++++++++++++++++++++++++++++++++++++++++`);\nend proc:\n" }}{PARA 258 "" 0 "" {TEXT -1 451 "2. Defining octonion nonassociative multiplication 'omul'. Octonions are defined as the paravectors in C l(0,7) thus an octonion basis is [Id, e1, e2, e3, e4, e5, e6, e7]. It is stored under a global variable '_octbasis'. Basis for pure octonio ns [e1, e2, e3, e4, e5, e6, e7] is stored under a global variable 'pur e_octbasis'. Any element that belongs to this vector space is now of t ype 'octonion'. The infix form of this multiplication is `&o`. " }} {PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 273 "NOTE : Octonion mutliplication is defined as in P. Lounesto, \"CLICAL User \+ Manual\", page 19. To display the default multiplication table, use pr ocedure 'omultable()' described below. To define your own octonion mul tiplication table, use procedure 'def_omultable' (see below)." }} {PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 86 "Typic al use: omul(Id + e1 + e2, e1 + e3); or (Id + 2*e1 + e2) &o (e2 + e3 \+ + e1 + Id);" }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 410 "omul:=proc(a1::octonion,a2::octonion) local expr,o1, o2,to1,to2,coeffsa,coeffsb,i,j;\nglobal _pureoctbasis,_octbasis,_Soct, _octgen,_O,x;\noptions `Copyright 1995-2008 by Rafal Ablamowicz, Tenne ssee Technological University`,remember;\nif a1=0 or a2=0 then return \+ 0 end if;\nif member(a1,\{`Id`,1\}) then return a2 end if;\nif member( a2,\{`Id`,1\}) then return a1 end if;\nif type(a1,\{`*`,`+`\}) or type (a2,\{`*`,`+`\}) then " }{TEXT -1 6 "\n " }{MPLTEXT 1 0 888 "o1:=c ollect(Clifford:-displayid(a1),_octbasis);\n o2:=collect(Clifford:-di splayid(a2),_octbasis);\n coeffsa:=[coeffs(o1,_octbasis,'to1')];\n c oeffsb:=[coeffs(o2,_octbasis,'to2')];\n to1:=[to1]:to2:=[to2]:\nexpr: =\nconvert([seq(seq(coeffsa[i]*coeffsb[j]*'Octonion:-omul'(eval(to1[i] ),eval(to2[j])),\n i= 1..nops(to1)),j=1..nops(to2))],`+`);\nif has(expr,'Id') then expr:=col lect(simplify(expr),_octbasis) else\n expr:=coll ect(simplify(expr),_pureoctbasis) \nend if;\nreturn simplify(eval(expr ))\nend if;\n#return simplify(eval(Clifford:-vectorpart(subs(_Soct,arg s[1] &cQ args[2] &cQ _octgen),0) + \n# Clifford:-v ectorpart(subs(_Soct,args[1] &cQ args[2] &cQ _octgen),1)));\nx:=subs(_ Soct,cmul[_O](args[1],args[2],_octgen));\nreturn simplify(eval(Cliffor d:-vectorpart(x,0) + Clifford:-vectorpart(x,1)))\nend proc:\n" }} {PARA 258 "" 0 "" {TEXT -1 37 "3. Octonionic conjugation 'o_conjug'." }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 43 "Typ ical use: o_conjug(Id + e1 + e2 + 4*e5);" }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 191 "o_conjug:=proc(a1::oct onion) local p;\noptions `Copyright 1995-2008 by Rafal Ablamowicz, Ten nessee Technological University`,remember;\nreturn eval(a1 - 2*Cliffor d:-vectorpart(a1,1))\nend proc:\n" }}{PARA 258 "" 0 "" {TEXT -1 27 "4. Octonionic norm 'onorm'." }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 37 "Typical use: onorm(Id - 2*e1 + 3*e3);" }} {PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 245 "onorm:=proc(a1::octonion) \noptions `Copyright 1995-2008 by Rafal Ablamowicz, Tennessee Technological University`,remember;\nif args[1] = 0 then return 0 end if;\nreturn sqrt(Clifford:-scalarpart(args[1] & o Octonion:-o_conjug(args[1]))) \nend proc:\n" }}{PARA 258 "" 0 "" {TEXT -1 29 "5. Octonionic inverse 'oinv'." }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 34 "Typical use: oinv(Id - 2*e1 + e2);" }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 337 "oinv:=proc(a1::octonion) local N,ND; global _octbasi s;\noptions `Copyright 1995-2008 by Rafal Ablamowicz, Tennessee Techno logical University`,remember;\nif args[1] <> 0 then \n N:=normal(arg s[1]); \n ND:=denom(N)*N;\n return expand(denom(N)*o_conjug(ND)/(o norm(ND))^2)\nelse error \"octonion %1 has no inverse\",args[1] \nend \+ if;\nend proc:\n" }}{PARA 258 "" 0 "" {TEXT -1 58 "6. A commutator [a, b] = ab - ba of two octonions a and b.\n" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 177 "commutator:=proc(o1::octonion,o2::octonion)\noptions `Copyright 1995-2008 by Rafal Ablamowicz, Tennessee Technological Uni versity`;\n return eval(o1 &o o2 - o2 &o o1); \nend proc:\n" }}{PARA 258 "" 0 "" {TEXT -1 69 "7. An associatotor [a,b,c] = (ab)c - a(bc) of three octonions a,b,c.\n" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 208 "ass ociator:=proc(o1::octonion,o2::octonion,o3::octonion) \noptions `Copyr ight 1995-2008 by Rafal Ablamowicz, Tennessee Technological University `;\n return eval((o1 &o o2) &o o3 - o1 &o (o2 &o o3)); \nend proc: \n " }}{PARA 258 "" 0 "" {TEXT -1 98 "8. Associative 3-form Phi(a,b,c) = \+ (1/2)*Re(a (b_bar c) - c (b_bar a)) where b_bar = o_conjug(b) \n" }} {PARA 258 "> " 0 "" {MPLTEXT 1 0 265 "Phi:=proc(o1::octonion,o2::octon ion,o3::octonion) local expr:\noptions `Copyright 1995-2008 by Rafal A blamowicz, Tennessee Technological University`;\n expr:=eval((1/2)*( o1 &o (o_conjug(o2) &o o3) - o3 &o (o_conjug(o2) &o o1))):\n return \+ coeff(expr,Id) \nend proc:\n" }}{PARA 258 "" 0 "" {TEXT -1 44 "9. Real and imaginary parts of an octonion:\n" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 193 "realpart:=proc(o1::octonion) local o11;\noptions `Co pyright 1995-2008 by Rafal Ablamowicz, Tennessee Technological Univers ity`;\n o11:=Clifford:-displayid(o1):\n return coeff(o11,Id) \nend p roc:\n" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 214 "purevectorpart:=proc(o 1::octonion) local o11;\noptions `Copyright 1995-2008 by Rafal Ablamow icz, Tennessee Technological University`;\n o11:=Clifford:-displayid( o1):\n return Clifford:-vectorpart(o11,1); \nend proc:\n" }}{PARA 258 "" 0 "" {TEXT -1 590 "10. Procedure 'omultable' displays current \+ octonion multiplication table in a form of a 7 by 7 matrix where in th e (i,j)-entry it displays the octonion product between the ith and the jth basis element in the pure octonion basis. This means that the (i, j)-entry will equal omul(ei,ej), i,j = 1,...,7. The table is automatic ally created using a set of default Fano triples. The default Fano tri ples are stored in a global variable '_default_Fano_triples'. User can enter his/her own set of Fano triples and use procedure 'def_omultabl e' to define his/her own octonion multiplication table.\n" }}{PARA 258 "" 0 "" {TEXT -1 13 ">omultable();" }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 449 "omultable:=proc() local i ,j,M; global omul,_pureoctbasis;\noptions `Copyright 1995-2008 by Rafa l Ablamowicz, Tennessee Technological University`;\nif not evalb(op(4, eval(Octonion:-omul))=NULL) then\n M:=linalg[matrix](7,7,(i,j)->Octo nion:-omul(_pureoctbasis[i],_pureoctbasis[j]));\n return evalm(M);\n else\n printf(\"Octonion multiplication table is not currently defin ed. Use 'def_omultable' to define a new table.\"); \n return \nend \+ if;\nend proc:\n" }}{PARA 258 "" 0 "" {TEXT -1 265 "11. Procedure 'def _omultable' allows the user to define the octonion multiplication tabl e in terms of seven Fano triples which define seven lines in the Fano \+ plane. The default Fano triples are: \n\n[1,3,7], [1,2,4], [1,5,6], [2 ,3,5], [2,6,7], [3,4,6], and [4,5,7]. \n" }}{PARA 258 "" 0 "" {TEXT -1 64 "They are stored under a global variable '_default_Fano_triples' ." }}{PARA 258 "" 0 "" {TEXT -1 355 "\nIf [i,j,k] is a Fano triple, wh ere i,j,k = 1,..., 7, then the octonion multiplication of [ei,ej,ek] i s defined as follows: \n\n(1) omul(ei, ej) = ek, omul(ej, ek) = ei, om ul(ek, ei) = ej,\n\n(2) omul(ej, ei) = -ek, omul(ek, ej) = -ei, omul(e i, ek) = -ej,\n\n(3) omul(ei, ei) = -Id, omul(ej, ej) = -Id, omul(ek, \+ ek) = -Id.\n\nThe procedure can be used as follows:" }}{PARA 258 "" 0 "" {TEXT -1 24 "\n(1) def_omultable(); " }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 363 "When used without any argume nt, it will define octonion multiplication using the default Fano trip les.\n\n(2) def_omultable(F);\n\nWhen used with one argument of type ' list(list)', that is, when F is a list consisting of seven three-eleme nt lists, each three-element list consisting of three integers between 1 and 7, then octonion multiplication is defined as above." }}{PARA 258 "" 0 "" {TEXT -1 1 "\n" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 1202 "d ef_omultable:=proc() local L,x,i;\noptions `Copyright 1995-2008 by Raf al Ablamowicz, Tennessee Technological University`;\n################# #########################\nif nargs=0 then return def_omultable(_defau lt_Fano_triples,_default_squares) end if;\n########################### ###############\nif nops(args[1])<>7 or not type(args[1],Fano_triples) then \n error \"list entered does not contain seven Fano triples as required\" \nend if;\nsubsop(4=NULL,eval(Octonion:-omul)): #erase cur rent octonion multiplication table\nfor i from 1 to 7 do\n L:=[seq(e ||x,x=args[1][i])]:\n Octonion:-omul(L[1],L[2]):=L[3]:Octonion:-omul (L[2],L[1]):=-L[3]:\n Octonion:-omul(L[2],L[3]):=L[1]:Octonion:-omul (L[3],L[2]):=-L[1]:\n Octonion:-omul(L[3],L[1]):=L[2]:Octonion:-omul (L[1],L[3]):=-L[2]:\nend do:\nif nargs=1 then \n for i from 1 to 7 d o Octonion:-omul(e||i,e||i):=_default_squares[i] end do:\n return\ne nd if;\n##########################################\nif nargs=2 then\n \+ if nops(args[2])<>7 then \n error \"second input, when used, mu st be a list of 7 elements which are squares of the pure octonion basi s\"\n end if;\nfor i from 1 to 7 do Octonion:-omul(e||i,e||i):=args[ 2][i] end do:\nreturn\nend if;\nend proc:\n" }}{PARA 258 "" 0 "" {TEXT -1 103 "12. Initialization file for the 'Octonion' package. Thi s file is loaded automatically when the command" }}{PARA 258 "" 0 "" {TEXT -1 25 "with(Octonion); is given." }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 444 "setup:=proc() \nlocal x,y ,i,j,E124,E235,E346,E457; \nglobal _Foct,_Soct,_octbasis,_pureoctbasis ,_octgen,`&o`,_default_Fano_triples,\n_default_squares,_default_Cliffo rd_product,\n`type/Fano_triples`,`type/octonion`,_O;\n################ #########################\nif assigned(Clifford)=false then \n #with (Clifford);\n error \"You must load package 'Clifford' before you ca n load package 'Octonion'\" \nend if;\n############################### ##########\n" }}{PARA 258 "" 0 "" {TEXT -1 439 "1. Type `Fano_triples` is a list F consisting of seven lists f_i, i=1..7, each of which must contain three positive integers from the set \{1,2,3,4,5,6,7\} in suc h a way that each integer is contained in exactly three lists. For exa mple, the default Fano triples are:\n\n[[1,3,7],[1,2,4],[1,5,6],[2,3,5 ],[2,6,7],[3,4,6],[4,5,7]]\n\nHowever, the following is not a list of \+ Fano triples:\n\n[[1,3,7],[1,2,4],[1,5,6],[2,3,5],[2,6,7],[3,4,6],[3,5 ,6]]\n" }}{PARA 258 "" 0 "" {TEXT -1 86 "because 3 is contained four o f the seven sublists (6 is also contained in 4 sublists)." }}{PARA 258 "" 0 "" {TEXT -1 238 "\nValid Fano triples like [[1,3,7],[1,2,4],[ 1,5,6],[2,3,5],[2,6,7],[3,4,6],[4,5,7]] may be used to define seven li nes, each containing three points, such that each point is on three li nes and each line is on three points in the Fano plane." }}{PARA 258 " " 0 "" {TEXT -1 236 "\nUser may define a different set of Fano triples in order to define different ocotonionic multiplication table. For ex ample, the following is another set of valid Fano triples:\n\n[[1,2,5] ,[1,3,4],[1,7,6],[2,3,7],[3,6,5],[2,4,6],[4,5,7]]\n" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 606 "`type/Fano_triples`:=proc(F::list(list)) local \+ f,s,S,i,k:\noptions `Copyright 1995-2008 by Rafal Ablamowicz, Tennesse e Technological University`;\nif nops(F)<>7 then return false end if; \nfor f in F do \n if not type(f,list(posint)) or nops(f)<>3 then r eturn false end if;\nend do:\nS:=\{1,2,3,4,5,6,7\}:\ns:=`union`(seq(co nvert(F[i],set),i=1..7));\ns:=s minus (s intersect S):\nif nops(s)<>0 \+ then return false end if;\nfor i in S do\n k:=0:\n for f in F do if member(i,f) then k:=k+1 fi end do:\n if k<>3 then return false \+ end if;\nend do:\nreturn true \nend proc:\n\n##################### ####################" }}{PARA 258 "" 0 "" {TEXT -1 19 "2. Type 'octoni on'\n" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 443 "`type/octonion`:=proc(a 1::algebraic) local S, setoctbasis;\noptions `Copyright 1995-2008 by R afal Ablamowicz, Tennessee Technological University`;\nif type(eval(a1 ),numeric) then return true end if;\nif not type(eval(a1),\{clibasmon, climon,clipolynom\}) then return false end if;\nS:=Clifford:-cliterms( eval(a1));\nsetoctbasis:=\{Id,e||(1..7)\}:\nreturn evalb(S minus (S in tersect setoctbasis) = \{\});\nend proc:\n############################ ##############" }}{PARA 258 "" 0 "" {TEXT -1 40 "3. Ampersand form of \+ Clifford product:\n " }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 416 "`&o`:=pr oc() eval(omul(args)) end proc:\n##################################### #####\nunprotect(_octbasis):\n_octbasis:=[Id,e||(1..7)]; #standard o ctonion basis as Maple global variable\n_pureoctbasis:=[e||(1..7)]; # pure octonion basis as Maple global variable\n_default_Fano_triples:=[ [1,3,7],[1,2,4],[1,5,6],[2,3,5],[2,6,7],[3,4,6],[4,5,7]];\n_default_sq uares:=[-Id$7]:\n_default_Clifford_product:='Clifford:-cmulNUM':\n" }} {PARA 258 "" 0 "" {TEXT -1 123 "4. Defining octonion mutliplication wh ich can be changed here, if necessary, or later in a worksheet using d ef_omultable. \n" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 232 "unprotect(_F oct);\nunprotect(_Soct);\n_Foct:=proc(a1::posint,a2::posint) if args[1 ]=args[2] then return -1 else return 0 fi end proc:\n_Soct:=\{seq(seq( _O[i,j]=_Foct(i,j),i=1..7),j=1..7)\}: #regular octonion multiplication as in Cl(0,7)\n" }}{PARA 258 "" 0 "" {TEXT -1 60 "E124:=subs(_Soct,e1 &cQ e2 &cQ e4); #defined and computed\n" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 26 "E124:=e1we2we4; #assigned\n" }}{PARA 258 "" 0 "" {TEXT -1 60 "E235:=subs(_Soct,e2 &cQ e3 &cQ e5); #defined and comput ed\n" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 27 "E235:=e2we3we5; #assigne d\n" }}{PARA 258 "" 0 "" {TEXT -1 60 "E346:=subs(_Soct,e3 &cQ e4 &cQ e 6); #defined and computed\n" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 27 " E346:=e3we4we6; #assigned\n" }}{PARA 258 "" 0 "" {TEXT -1 36 "E457:=s ubs(_Soct,e4 &cQ e5 &cQ e7);\n" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 27 "E457:=e4we5we7; #assigned\n" }}{PARA 258 "" 0 "" {TEXT -1 118 "_octg en:=subs(_Soct, subs(_Soct, (Id - E124) &cQ (Id - E235)) &cQ subs(_Soc t, (Id - E346) &cQ (Id - E457))); #defined\n" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 221 "_octgen:=e2we3we4we7-e1we3we7-e4we5we7-e1we2we5we7-e 2we4we5we6-e1we5we6-e3we4we6+\n e1we2we3we6-e2we6we7+e1we 4we6we7-e3we5we6we7-e1we2we3we4we5we6we7-e2we3we5-\n e1we 3we4we5+Id-e1we2we4; #assigned\n" }}{PARA 258 "" 0 "" {TEXT -1 102 "As signing a multiplication table for the octonion basis. This table has been computed using the above" }}{PARA 258 "" 0 "" {TEXT -1 53 "defin itions of _Foct, _Soct, E124, E235, E346, E457.\n" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 54 "def_omultable(_default_Fano_triples,_default_squar es);" }}{PARA 258 "" 0 "" {TEXT -1 33 "\n(5) Protecting procedure name s.\n" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 41 "protect(Octonion);\nend p roc:\n\nend module:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "libn ame[1];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q7C:\\Maple11/Cliffordlib6 \"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "savelib(Octonion):" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "with(LibraryTools);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#72%1ActivationModuleG%1AddFromDirector yG%'AuthorG%'BrowseG%3BuildFromDirectoryG%/ConvertVersionG%'CreateG%'D eleteG%,FindLibraryG%,PrefixMatchG%)PriorityG%%SaveG%-ShowContentsG%*T imestampG%4UpdateFromDirectoryG%*WriteModeG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "ShowContents(libname[1]);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#707&Q*Bigebra.m6\"7(\"%2?\"#7\"#?\"#:\"#\"#\\\"'Ywc\"$x$7&Q/code_support.mF&7(F(F)F*F+\"#X\"#J\"'K5f\"$w%7&Q )Define.mF&7(F(F)F*F+\"#9\"#d\"'Q.a\"$$[7&Q>P.mF&7(F(F)F*F+\"#`\"#@ \"'%Q8'\"$\"G7&Q&GfG.mF&7(F(F)F*F+\"#^\"\"*\"'&e,'\"$:(7&Q+matcompL.mF &7(F(F)F*F+\"#8FG\"'D#[$\"&=X(7&Q+matcompR.mF&Fen\"'VFU\"&^M(7&Q+matqu atL.mF&Fen\"'%>'\\\"&9@#7&Q+matquatR.mF&Fen\"'3$=&\"&I?#7&Q+matrealL.m F&Fen\"'na6\"'9k67&Q+matrealR.mF&Fen\"'\")=B\"'Wj67&Q+Octonion.mF&7(F( F)F*F+FH\"\"%\"'J7i\"$P%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 " " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "restart:with(Octonion); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7.%$PhiG%+associatorG%+commutatorG %.def_omultableG%)o_conjugG%%oinvG%%omulG%*omultableG%&onormG%)oversio nG%/purevectorpartG%)realpartG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "with(LibraryTools);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#72%1Act ivationModuleG%1AddFromDirectoryG%'AuthorG%'BrowseG%3BuildFromDirector yG%/ConvertVersionG%'CreateG%'DeleteG%,FindLibraryG%,PrefixMatchG%)Pri orityG%%SaveG%-ShowContentsG%*TimestampG%4UpdateFromDirectoryG%*WriteM odeG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "ShowContents(libnam e[1]);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#707&Q*Bigebra.m6\"7(\"%2?\"# 7\"#?\"#:\"#\"#\\\"'Ywc\"$x$7&Q/code_support.mF&7(F(F )F*F+\"#X\"#J\"'K5f\"$w%7&Q)Define.mF&7(F(F)F*F+\"#9\"#d\"'Q.a\"$$[7&Q >P.mF&7(F(F)F*F+\"#`\"#@\"'%Q8'\"$\"G7&Q&GfG.mF&7(F(F)F*F+\"#^\"\"* \"'&e,'\"$:(7&Q+matcompL.mF&7(F(F)F*F+\"#8FG\"'D#[$\"&=X(7&Q+matcompR. mF&Fen\"'VFU\"&^M(7&Q+matquatL.mF&Fen\"'%>'\\\"&9@#7&Q+matquatR.mF&Fen \"'3$=&\"&I?#7&Q+matrealL.mF&Fen\"'na6\"'9k67&Q+matrealR.mF&Fen\"'\")= B\"'Wj67&Q+Octonion.mF&7(F(F)F*F+FH\"\"%\"'J7i\"$P%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "with(code_support);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%!G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%inModule~code_c upport~ver.~1.03~for~CLIFFORD~et~al.~for~Maple~11G" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#%apCopyright~(c)~2002-2008~by~Rafal~Ablamowicz~and~Be rtfried~Fauser.~All~rights~reserved.G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%@Last~revised:~December~20,~2007G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%!G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7-%/NamesInLibraryG%1change_ helpfilesG%,change_nameG%*copy_fileG%)get_TEXTG%(get_dirG%1insert_help pagesG%)makeLISTG%+modifyLISTG%0replace_in_fileG%&splitG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "NamesInLibrary(libname[1]);" }} {PARA 11 "" 1 "" {XPPMATH 20 "60Q*Bigebra.m6\"Q+Clifford.mF$Q*Cliplus. mF$Q)Define.mF$Q>P.mF$Q&GfG.mF$Q+Octonion.mF$Q/code_support.mF$Q+mat compL.mF$Q+matcompR.mF$Q+matquatL.mF$Q+matquatR.mF$Q+matrealL.mF$Q+mat realR.mF$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 3 "End" }}}}{MARK "11 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }