{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 "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 "N ormal" -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_M10_02. mws" }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 25 "(Revised: July 22, 2006)\n" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 1091 "################################################################ #############\n# \+ #\n#DISCLAIMER: \+ #\n# \+ #\n#THERE IS NO WARRANTY FOR TH E CLIFFORD, BIGEBRA, Cliplus, Octonion, GTP #\n#PACKAGES TO THE EX TENT 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 IM PLIED, #\n#INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ME RCHANTABILITY #\n#AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE R ISK AS TO THE QUALITY #\n#AND PERFORMANCE OF THE PROGRAM IS WITH YO U. SHOULD THE PROGRAM PROVE #\n#DEFECTIVE, YOU ASSUME THE COST O F ALL NECESSARY SERVICING, REPAIR OR #\n#CORRECTION. \+ #\n############### ##############################################################" }} {PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 232 "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 provided that Maple package CLIFFORD version 8 has been loaded usi ng 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 "Below you will find a description of commands available in the 'Octonion' p ackage." }}{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 Ablamowicz" }} {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 22 "Leipzig, July 22, 2006" }}{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 information about t he current version of the OCTONION package. " }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 26 "Typical use: oversion() ; " }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 905 "Octonion:=module()\ne xport Phi,associator,commutator,def_omultable,o_conjug,oinv,omul,omult able,onorm,oversion,purevectorpart,realpart;\nlocal setup;\noption pac kage, load=setup:\n#############################\noversion:= proc()\no ptions `Copyright 1995-2006 by Rafal Ablamowicz, Tennessee Technologic al University`;\nprint(`+++++++++++++++++++++++++++++++++++++++++++`); \nprint(`'Octonion' - A Maple 10 Package for Computations with Octonio ns (version 10)`); \nprint(`Last revised: July 22, 2006`);\nprint(`Cop yright 1995-2006, by Rafal Ablamowicz, Tennessee Technological Univers ity`);\nprint(`Department of Mathematics, Box 5054`);\nprint(`Tennesse e Technological University, Cookeville, TN 38505`);\nprint(`phone: USA (931) 372-3569, fax: USA (931) 372-6353`);\nprint(`e-mail: rablamowic z@tntech.edu`);\nprint(`http://math.tntech.edu/rafal/cliff10/`);\nprin t(`+++++++++++++++++++++++++++++++++++++++++++`);\nend proc:\n" }} {PARA 258 "" 0 "" {TEXT -1 451 "2. Defining octonion nonassociative m ultiplication 'omul'. Octonions are defined as the paravectors in Cl( 0,7) thus an octonion basis is [Id, e1, e2, e3, e4, e5, e6, e7]. It i s stored under a global variable '_octbasis'. Basis for pure octonions [e1, e2, e3, e4, e5, e6, e7] is stored under a global variable 'pure_ octbasis'. Any element that belongs to this vector space is now of typ e '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-2006 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-2006 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-2006 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-2006 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-2006 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-2006 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-2006 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-2006 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-2006 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-2006 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-2006 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-2006 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-2006 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 42 "protect(Octonion);\nend p roc:\n\nend module:\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "savelib(Octonion):" }}} {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_c onjugG%%oinvG%%omulG%*omultableG%&onormG%)oversionG%/purevectorpartG%) realpartG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "with(code_supp ort);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%!G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%inModule~code_cupport~ver.~1.03~for~CLIFFORD~et~al.~fo r~Maple~10G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%apCopyright~(c)~2002-2 006~by~Rafal~Ablamowicz~and~Bertfried~Fauser.~All~rights~reserved.G" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#% " 0 "" {MPLTEXT 1 0 27 "NamesInL ibrary(libname[1]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+matquatR.m6\" " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+matcompR.m6\"" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#Q+matquatL.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q* Bigebra.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+matcompL.m6\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#Q,RJgrobner.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+matrealR.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+Oc tonion.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q)Define.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+Clifford.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+matrealL.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q/co de_support.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q*Cliplus.m6\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#Q>P.m6\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 3 "End" }}}}{MARK "7 0 0" 3 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }