{VERSION 4 0 "IBM INTEL NT" "4.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 11 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 "R3 Fo nt 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 }} {SECT 0 {EXCHG {PARA 0 "" 0 "" {TEXT -1 21 "This is octonion6.mws" }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 28 "(Revised: October 29, 2002)\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1091 "######### ####################################################################\n # \+ #\n#DISCLAIMER: \+ #\n# \+ #\n#THERE IS NO WARRANTY FOR THE CLIFFORD, BIG EBRA, Cli<#>plus, Octonion, GTP #\n#PACKAGES TO THE EXTENT PERMITTED \+ BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE #\n#STATED IN WRITING THE CO PYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE #\n#PROGRAM \"AS IS \" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, #\n#INCL UDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY \+ #\n#AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE Q UALITY #\n#AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE P ROGRAM PROVE #\n#DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR #\n#CORRECTION. \+ #\n############################## ###############################################" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 232 "This Maple worksheet cre ates an octonion package called 'Octonion', version 6, and saves it in libname[1] `Octonion.m` file. It runs under Maple 6 provided that Ma ple package CLIFFORD version 6 has been loaded using with(Clifford)." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 28 "To load the package, execute" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 16 ">with(Octonion);" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "" 0 "" {TEXT -1 250 "The package requires that the CLIFFORD p ackage be loaded first. If the CLIFFORD package is not loaded, an erro r message will appear indicating that it has to be loaded first. You c an find the CLIFFORD package at http://math.tntech.edu/rafal/cliff6/ . " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 82 "Below you will find a description of commands available in the 'Octonion' p ackage." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 44 "Any comments and bug reports please send to:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 16 "Rafal Ablamowicz" }} {PARA 0 "" 0 "" {TEXT -1 25 "Department of Mathematics" }}{PARA 0 "" 0 "" {TEXT -1 34 "Tennessee Technological University" }}{PARA 0 "" 0 " " {TEXT -1 24 "Cookeville, TN 38501 USA" }}{PARA 0 "" 0 "" {TEXT -1 30 "e-mail: rablamowicz@tntech.edu" }}{PARA 0 "" 0 "" {TEXT -1 24 "pho ne: USA(931) 372-3569" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 28 "Cookeville, October 29, 2002" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "restart:unprotect(Octonion):" }}{PARA 0 "" 0 "" {TEXT -1 90 "1 . Name 'oversion' stores information about the current version of the \+ OCTONION package. " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 " " {TEXT -1 26 "Typical use: oversion(); " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 905 "Octonion:=module()\nexport Phi,associator,commutator ,def_omultable,o_conjug,oinv,omul,omultable,onorm,oversion,purevectorp art,realpart;\nlocal setup;\noption package, load=setup:\n############ #################\noversion:= proc()\noptions `Copyright 1995-2003 by \+ Rafal Ablamowicz, Tennessee Technological University`;\nprint(`+++++++ ++++++++++++++++++++++++++++++++++++`);\nprint(`'Octonion' - A Maple 6 Package for Computations with Octonions (version 6)`); \nprint(`Last \+ revised: October 27, 2002`);\nprint(`Copyright 1995-2003, by Rafal Abl amowicz, Tennessee Technological University`);\nprint(`Department of M athematics, Box 5054`);\nprint(`Tennessee Technological University, Co okeville, TN 38505`);\nprint(`phone: USA (931) 372-3569, fax: USA (931 ) 372-6353`);\nprint(`e-mail: rablamowicz@tntech.edu`);\nprint(`http:/ /math.tntech.edu/rafal/cliff6/`);\nprint(`++++++++++++++++++++++++++++ +++++++++++++++`);\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 451 "2. D efining octonion nonassociative multiplication 'omul'. Octonions are \+ defined as the paravectors in Cl(0,7) thus an octonion basis is [Id, e 1, e2, e3, e4, e5, e6, e7]. It is stored under a global variable '_oc tbasis'. Basis for pure octonions [e1, e2, e3, e4, e5, e6, e7] is stor ed under a global variable 'pure_octbasis'. Any element that belongs t o this vector space is now of type 'octonion'. The infix form of this \+ multiplication is `&o`. " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 273 "NOTE: Octonion mutliplication is defined as in P . Lounesto, \"CLICAL User Manual\", page 19. To display the default mu ltiplication table, use procedure 'omultable()' described below. To de fine your own octonion multiplication table, use procedure 'def_omulta ble' (see below)." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 86 "Typical use: omul(Id + e1 + e2, e1 + e3); or (Id + 2*e1 \+ + e2) &o (e2 + e3 + e1 + Id);" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 432 "omul:=proc(a1::octonion,a2::octoni on) local expr,o1,o2,to1,to2,coeffsa,coeffsb,i,j,p;\nglobal _pureoctba sis,_octbasis,Soct,_octgen,`&c`,`&cQ`,`&w`,`&q`,`&o`;\noptions `Copyri ght 1995-2003 by Rafal Ablamowicz, Tennessee 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 5 "\n " }{MPLTEXT 1 0 659 "o1:=collect(Clifford:-displayid (a1),_octbasis);\n o2:=collect(Clifford:-displayid(a2),_octbasis);\n \+ coeffsa:=[coeffs(o1,_octbasis,'to1')];\n coeffsb:=[coeffs(o2,_octbas is,'to2')];\n to1:=[to1]:to2:=[to2]:\nexpr:=\nconvert([seq(seq(coeffs a[i]*coeffsb[j]*'Octonion:-omul'(eval(to1[i]),eval(to2[j])),i=1..nops( to1)),j=1..nops(to2))],`+`);\nif has(expr,'Id') then expr:=collect(sim plify(expr),_octbasis) else\n expr:=collect(simp lify(expr),_pureoctbasis) \nend if;\nreturn expr\nend if;\nreturn Clif ford:-vectorpart(subs(Soct,args[1] &cQ args[2] &cQ _octgen),0) + \n \+ Clifford:-vectorpart(subs(Soct,args[1] &cQ args[2] &cQ _octgen),1) \nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 37 "3. Octonionic conjugatio n 'o_conjug'." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 43 "Typical use: o_conjug(Id + e1 + e2 + 4*e5);" }}{PARA 0 " " 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 191 "o_conjug:=p roc(a1::octonion) local p;\noptions `Copyright 1995-2003 by Rafal Abla mowicz, Tennessee Technological University`,remember;\nreturn eval(a1 \+ - 2*Clifford:-vectorpart(a1,1))\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 27 "4. Octonionic norm 'onorm'." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "" 0 "" {TEXT -1 37 "Typical use: onorm(Id - 2*e1 + 3*e3);" }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 245 "on orm:=proc(a1::octonion) \noptions `Copyright 1995-2003 by Rafal Ablamo wicz, Tennessee Technological University`,remember;\nif args[1] = 0 th en return 0 end if;\nreturn sqrt(Clifford:-scalarpart(args[1] &o Octon ion:-o_conjug(args[1]))) \nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 29 "5. Octonionic inverse 'oinv'." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "" 0 "" {TEXT -1 34 "Typical use: oinv(Id - 2*e1 + e2);" }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 337 "oi nv:=proc(a1::octonion) local N,ND; global _octbasis;\noptions `Copyrig ht 1995-2003 by Rafal Ablamowicz, Tennessee Technological University`, remember;\nif args[1] <> 0 then \n N:=normal(args[1]); \n ND:=deno m(N)*N;\n return expand(denom(N)*o_conjug(ND)/(onorm(ND))^2)\nelse e rror \"octonion %1 has no inverse\",args[1] \nend if;\nend proc:\n" }} {PARA 0 "" 0 "" {TEXT -1 58 "6. A commutator [a,b] = ab - ba of two oc tonions a and b.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 171 "commutator:= proc(o1::octonion,o2::octonion)\noptions `Copyright 1995-2003 by Rafal Ablamowicz, Tennessee Technological University`;\n return o1 &o o2 - \+ o2 &o o1; \nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 69 "7. An associat otor [a,b,c] = (ab)c - a(bc) of three octonions a,b,c.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 202 "associator:=proc(o1::octonion,o2::octonion,o 3::octonion) \noptions `Copyright 1995-2003 by Rafal Ablamowicz, Tenne ssee Technological University`;\n return (o1 &o o2) &o o3 - o1 &o (o2 \+ &o o3); \nend proc: \n" }}{PARA 0 "" 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 0 "> " 0 "" {MPLTEXT 1 0 259 "Phi:=proc(o1::oc tonion,o2::octonion,o3::octonion) local expr:\noptions `Copyright 1995 -2003 by Rafal Ablamowicz, Tennessee Technological University`;\n ex pr:=(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 0 "" 0 "" {TEXT -1 44 "9. Real and imaginary parts of an octonion:\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 193 "realpart:=proc(o1::octonion) local o11;\noptions `Co pyright 1995-2003 by Rafal Ablamowicz, Tennessee Technological Univers ity`;\n o11:=Clifford:-displayid(o1):\n return coeff(o11,Id) \nend p roc:\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 214 "purevectorpart:=proc(o1: :octonion) local o11;\noptions `Copyright 1995-2003 by Rafal Ablamowic z, Tennessee Technological University`;\n o11:=Clifford:-displayid(o1 ):\n return Clifford:-vectorpart(o11,1); \nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 590 "10. Procedure 'omultable' displays current octonio n multiplication table in a form of a 7 by 7 matrix where in the (i,j) -entry it displays the octonion product between the ith and the jth ba sis element in the pure octonion basis. This means that the (i,j)-entr y will equal omul(ei,ej), i,j = 1,...,7. The table is automatically cr eated using a set of default Fano triples. The default Fano triples ar e stored in a global variable '_default_Fano_triples'. User can enter \+ his/her own set of Fano triples and use procedure 'def_omultable' to d efine his/her own octonion multiplication table.\n" }}{PARA 0 "" 0 "" {TEXT -1 13 ">omultable();" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 449 "omultable:=proc() local i,j,M; global omul ,_pureoctbasis;\noptions `Copyright 1995-2003 by Rafal Ablamowicz, Ten nessee Technological University`;\nif not evalb(op(4,eval(Octonion:-om ul))=NULL) then\n M:=linalg[matrix](7,7,(i,j)->Octonion:-omul(_pureo ctbasis[i],_pureoctbasis[j]));\n return evalm(M);\nelse\n printf( \"Octonion multiplication table is not currently defined. Use 'def_omu ltable' to define a new table.\"); \n return \nend if;\nend proc:\n " }}{PARA 0 "" 0 "" {TEXT -1 265 "11. Procedure 'def_omultable' allows the user to define the octonion multiplication table in terms of seve n 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 0 "" 0 "" {TEXT -1 64 "They are stored under a global variable '_default_Fano_triples'." }}{PARA 0 "" 0 "" {TEXT -1 355 "\nIf [i,j,k] is a Fano triple, where i,j,k = 1,..., 7, t hen the octonion multiplication of [ei,ej,ek] is defined as follows: \+ \n\n(1) omul(ei, ej) = ek, omul(ej, ek) = ei, omul(ek, ei) = ej,\n\n(2 ) omul(ej, ei) = -ek, omul(ek, ej) = -ei, omul(ei, ek) = -ej,\n\n(3) o mul(ei, ei) = -Id, omul(ej, ej) = -Id, omul(ek, ek) = -Id.\n\nThe proc edure can be used as follows:" }}{PARA 0 "" 0 "" {TEXT -1 24 "\n(1) de f_omultable(); " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 363 "When used without any argument, it will define octonion \+ multiplication using the default Fano triples.\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-element lists, each three-element list consisting of three integers between 1 and 7, then octonion mult iplication is defined as above." }}{PARA 0 "" 0 "" {TEXT -1 1 "\n" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 1202 "def_omultable:=proc() local L,x,i ;\noptions `Copyright 1995-2003 by Rafal Ablamowicz, Tennessee Technol ogical University`;\n##########################################\nif na rgs=0 then return def_omultable(_default_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 current octonion multiplication tab le\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 do Octonion:-omul(e||i,e||i):=_de fault_squares[i] end do:\n return\nend if;\n######################## ##################\nif nargs=2 then\n if nops(args[2])<>7 then \n \+ error \"second input, when used, must be a list of 7 elements which are squares of the pure octonion basis\"\n end if;\nfor i from 1 to 7 do Octonion:-omul(e||i,e||i):=args[2][i] end do:\nreturn\nend if;\n end proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 103 "12. Initialization file f or the 'Octonion' package. This file is loaded automatically when the command" }}{PARA 0 "" 0 "" {TEXT -1 25 "with(Octonion); is given." }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 438 "se tup:=proc() \nlocal x,y,i,j,E124,E235,E346,E457; \nglobal Foct,Soct,_o ctbasis,_pureoctbasis,_octgen,`&o`,_default_Fano_triples,_default_squa res,_default_Clifford_product,\n`type/Fano_triples`,`type/octonion`;\n #########################################\nif assigned(Clifford)=false then \n #with(Clifford);\n error \"You must load package 'Cliffor d' before you can load package 'Octonion'\" \nend if;\n############### ##########################\n" }}{PARA 0 "" 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 such a way that each integer is contained in exactly three \+ lists. For example, 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 0 "" 0 "" {TEXT -1 86 "because 3 is cont ained four of the seven sublists (6 is also contained in 4 sublists). " }}{PARA 0 "" 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 lines, each containing three points, such that each point is on \+ three lines and each line is on three points in the Fano plane." }} {PARA 0 "" 0 "" {TEXT -1 236 "\nUser may define a different set of Fan o triples in order to define different ocotonionic multiplication tabl e. For example, 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 0 "> " 0 "" {MPLTEXT 1 0 606 "`type/Fano_triples`:=proc(F::list( list)) local f,s,S,i,k:\noptions `Copyright 1995-2003 by Rafal Ablamow icz, Tennessee Technological University`;\nif nops(F)<>7 then return f alse end if;\nfor f in F do \n if not type(f,list(posint)) or nops( f)<>3 then return false end if;\nend do:\nS:=\{1,2,3,4,5,6,7\}:\ns:=`u nion`(seq(convert(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 f or f in F do if member(i,f) then k:=k+1 fi end do:\n if k<>3 then r eturn false end if;\nend do:\nreturn true \nend proc:\n\n######### ################################" }}{PARA 0 "" 0 "" {TEXT -1 19 "2. Ty pe 'octonion'\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 430 "`type/octonion` :=proc(a1::algebraic) local S, setoctbasis;\noptions `Copyright 1995-2 003 by Rafal Ablamowicz, Tennessee Technological University`;\nif type (a1,numeric) then return true end if;\nif not type(a1,\{clibasmon,clim on,clipolynom\}) then return false end if;\nS:=Clifford:-cliterms(args [1]);\nsetoctbasis:=\{Id,e||(1..7)\}:\nreturn evalb(S minus (S interse ct setoctbasis) = \{\});\nend proc:\n################################# #########" }}{PARA 0 "" 0 "" {TEXT -1 40 "3. Ampersand form of Cliffor d product:\n " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 410 "`&o`:=proc() omul (args) end proc:\n##########################################\nunprotec t(_octbasis):\n_octbasis:=[Id,e||(1..7)]; #standard octonion basis a s Maple global variable\n_pureoctbasis:=[e||(1..7)]; #pure octonion b asis 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_squares:=[-Id$7]: \n_default_Clifford_product:='Clifford:-cmulNUM':\n" }}{PARA 0 "" 0 " " {TEXT -1 123 "4. Defining octonion mutliplication which can be chang ed here, if necessary, or later in a worksheet using def_omultable. \n " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 228 "unprotect(Foct);\nunprotect(So ct);\nFoct:=proc(a1::posint,a2::posint) if args[1]=args[2] then return -1 else return 0 fi end proc:\nSoct:=\{seq(seq(B[i,j]=Foct(i,j),i=1.. 7),j=1..7)\}: #regular octonion multiplication as in Cl(0,7)\n" }} {PARA 0 "" 0 "" {TEXT -1 59 "E124:=subs(Soct,e1 &cQ e2 &cQ e4); #def ined and computed\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "E124:=e1we2w e4; #assigned\n" }}{PARA 0 "" 0 "" {TEXT -1 59 "E235:=subs(Soct,e2 &cQ e3 &cQ e5); #defined and computed\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "E235:=e2we3we5; #assigned\n" }}{PARA 0 "" 0 "" {TEXT -1 59 "E 346:=subs(Soct,e3 &cQ e4 &cQ e6); #defined and computed\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "E346:=e3we4we6; #assigned\n" }}{PARA 0 " " 0 "" {TEXT -1 35 "E457:=subs(Soct,e4 &cQ e5 &cQ e7);\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "E457:=e4we5we7; #assigned\n" }}{PARA 0 "" 0 "" {TEXT -1 115 "_octgen:=subs(Soct, subs(Soct, (Id - E124) &cQ (Id - \+ E235)) &cQ subs(Soct, (Id - E346) &cQ (Id - E457))); #defined\n" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 221 "_octgen:=e2we3we4we7-e1we3we7-e4we 5we7-e1we2we5we7-e2we4we5we6-e1we5we6-e3we4we6+\n e1we2we 3we6-e2we6we7+e1we4we6we7-e3we5we6we7-e1we2we3we4we5we6we7-e2we3we5-\n e1we3we4we5+Id-e1we2we4; #assigned\n" }}{PARA 0 "" 0 "" {TEXT -1 102 "Assigning a multiplication table for the octonion basis. This table has been computed using the above" }}{PARA 0 "" 0 "" {TEXT -1 51 "definitions of Foct, Soct, E124, E235, E346, E457.\n" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 54 "def_omultable(_default_Fano_triples ,_default_squares);" }}{PARA 0 "" 0 "" {TEXT -1 33 "\n(5) Protecting p rocedure names.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "protect(Octoni on);\nend proc:\n\nend module:\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "savelib(Octonion):\n\n\n\n" }}{PARA 0 "" 0 "" {TEXT -1 24 "Last revis ed: 10-27-2002" }{MPLTEXT 1 0 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 3 0" 1091 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }