{VERSION 5 0 "IBM INTEL NT" "5.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 23 "This is octonion_M7.mws" } }{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 28 "(Revised : November 5, 2002)\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1091 "######## ##################################################################### \n# \+ #\n#DISCLAIMER: \+ #\n# \+ #\n#THERE IS NO WARRANTY FOR THE CLIFFORD, B IGEBRA, Cliplus, Octonion, GTP #\n#PACKAGES TO THE EXTENT PERMITTE D 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#IN CLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY #\n#AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY #\n#AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE #\n#DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSA RY 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 82 "Below you will find a description of comm ands available in the 'Octonion' package." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 44 "Any comments and bug reports pleas e 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 Un iversity" }}{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 "phone: USA(931) 372-3569" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 28 "Cookeville, November 5, 2 002" }}{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 abo ut 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 Ph i,associator,commutator,def_omultable,o_conjug,oinv,omul,omultable,ono rm,oversion,purevectorpart,realpart;\nlocal setup;\noption package, lo ad=setup:\n#############################\noversion:= proc()\noptions ` Copyright 1995-2003 by Rafal Ablamowicz, Tennessee Technological Unive rsity`;\nprint(`+++++++++++++++++++++++++++++++++++++++++++`);\nprint( `'Octonion' - A Maple 7 Package for Computations with Octonions (versi on 6)`); \nprint(`Last revised: November 5, 2002`);\nprint(`Copyright \+ 1995-2003, by Rafal Ablamowicz, Tennessee Technological University`); \nprint(`Department of Mathematics, Box 5054`);\nprint(`Tennessee Tech nological University, Cookeville, TN 38505`);\nprint(`phone: USA (931) 372-3569, fax: USA (931) 372-6353`);\nprint(`e-mail: rablamowicz@tnte ch.edu`);\nprint(`http://math.tntech.edu/rafal/cliff7/`);\nprint(`++++ +++++++++++++++++++++++++++++++++++++++`);\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 451 "2. Defining octonion nonassociative multiplication '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 is stored unde r a global variable '_octbasis'. Basis for pure octonions [e1, e2, e3, e4, e5, e6, e7] is stored under a global variable 'pure_octbasis'. An y element that belongs to 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 mutliplic ation is defined as in P. Lounesto, \"CLICAL User Manual\", page 19. T o display the default multiplication table, use procedure 'omultable() ' described below. To define your own octonion multiplication table, u se procedure 'def_omultable' (see below)." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 86 "Typical use: omul(Id + e1 + e2, e 1 + 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::o ctonion,a2::octonion) local expr,o1,o2,to1,to2,coeffsa,coeffsb,i,j,p; \nglobal _pureoctbasis,_octbasis,Soct,_octgen,`&c`,`&cQ`,`&w`,`&q`,`&o `;\noptions `Copyright 1995-2003 by Rafal Ablamowicz, Tennessee Techno logical University`,remember;\nif a1=0 or a2=0 then return 0 end if;\n if 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 665 "o1:=collect(Cliff ord:-displayid(a1),_octbasis);\n o2:=collect(Clifford:-displayid(a2), _octbasis);\n coeffsa:=[coeffs(o1,_octbasis,'to1')];\n coeffsb:=[coe ffs(o2,_octbasis,'to2')];\n to1:=[to1]:to2:=[to2]:\nexpr:=\nconvert([ seq(seq(coeffsa[i]*coeffsb[j]*'Octonion:-omul'(eval(to1[i]),eval(to2[j ])),i=1..nops(to1)),j=1..nops(to2))],`+`);\nif has(expr,'Id') then exp r:=collect(simplify(expr),_octbasis) else\n expr :=collect(simplify(expr),_pureoctbasis) \nend if;\nreturn eval(expr)\n end if;\nreturn Clifford:-vectorpart(subs(Soct,args[1] &cQ args[2] &cQ _octgen),0) + \n Clifford:-vectorpart(subs(Soct,args[1] &cQ arg s[2] &cQ _octgen),1)\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 37 "3. O ctonionic conjugation '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:=proc(a1::octonion) local p;\noptions `Copyright 1995-20 03 by Rafal Ablamowicz, 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 "onorm:=proc(a1::octonion) \noptions `Copyright 19 95-2003 by Rafal Ablamowicz, Tennessee Technological University`,remem ber;\nif args[1] = 0 then return 0 end if;\nreturn sqrt(Clifford:-scal arpart(args[1] &o Octonion:-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 "oinv:=proc(a1::octonion) local N,ND; global _octba sis;\noptions `Copyright 1995-2003 by Rafal Ablamowicz, Tennessee Tech nological University`,remember;\nif args[1] <> 0 then \n N:=normal(a rgs[1]); \n ND:=denom(N)*N;\n return expand(denom(N)*o_conjug(ND)/ (onorm(ND))^2)\nelse error \"octonion %1 has no inverse\",args[1] \nen d if;\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 58 "6. A commutator [a, b] = ab - ba of two octonions 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 Uni versity`;\n return o1 &o o2 - o2 &o o1; \nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 69 "7. An associatotor [a,b,c] = (ab)c - a(bc) of three oc tonions a,b,c.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 202 "associator:=pr oc(o1::octonion,o2::octonion,o3::octonion) \noptions `Copyright 1995-2 003 by Rafal Ablamowicz, Tennessee 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::octonion,o2::octonion,o3::octonion) lo cal expr:\noptions `Copyright 1995-2003 by Rafal Ablamowicz, Tennessee Technological University`;\n expr:=(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 o ctonion:\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 193 "realpart:=proc(o1::o ctonion) local o11;\noptions `Copyright 1995-2003 by Rafal Ablamowicz, Tennessee Technological University`;\n o11:=Clifford:-displayid(o1): \n return coeff(o11,Id) \nend proc:\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 214 "purevectorpart:=proc(o1::octonion) local o11;\noptions `Copyr ight 1995-2003 by Rafal Ablamowicz, 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 'om ultable' displays current octonion multiplication table in a form of a 7 by 7 matrix where in the (i,j)-entry it displays the octonion produ ct between the ith and the jth basis element in the pure octonion basi s. This means that the (i,j)-entry will equal omul(ei,ej), i,j = 1,... ,7. The table is automatically created using a set of default Fano tri ples. The default Fano triples are stored in a global variable '_defau lt_Fano_triples'. User can enter his/her own set of Fano triples and u se procedure 'def_omultable' to define his/her own octonion multiplica tion table.\n" }}{PARA 0 "" 0 "" {TEXT -1 13 ">omultable();" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 449 "omultabl e:=proc() local i,j,M; global omul,_pureoctbasis;\noptions `Copyright \+ 1995-2003 by Rafal Ablamowicz, Tennessee Technological University`;\ni f not evalb(op(4,eval(Octonion:-omul))=NULL) then\n M:=linalg[matrix ](7,7,(i,j)->Octonion:-omul(_pureoctbasis[i],_pureoctbasis[j]));\n r eturn evalm(M);\nelse\n printf(\"Octonion multiplication table is no t currently defined. Use 'def_omultable' 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 mult iplication table in terms of seven Fano triples which define seven lin es 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_Fa no_triples'." }}{PARA 0 "" 0 "" {TEXT -1 355 "\nIf [i,j,k] is a Fano t riple, where i,j,k = 1,..., 7, then 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) = -e i, omul(ei, 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 0 "" 0 "" {TEXT -1 24 "\n(1) def_omultable(); " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 363 "When used without any ar gument, it will define octonion multiplication using the default Fano \+ triples.\n\n(2) def_omultable(F);\n\nWhen used with one argument of ty pe 'list(list)', that is, when F is a list consisting of seven three-e lement lists, each three-element list consisting of three integers bet ween 1 and 7, then octonion multiplication 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 R afal Ablamowicz, Tennessee Technological University`;\n############### ###########################\nif nargs=0 then return def_omultable(_def ault_Fano_triples,_default_squares) end if;\n######################### #################\nif nops(args[1])<>7 or not type(args[1],Fano_triple s) then \n error \"list entered does not contain seven Fano triples \+ as required\" \nend if;\nsubsop(4=NULL,eval(Octonion:-omul)): #erase c urrent 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:-om ul(L[2],L[1]):=-L[3]:\n Octonion:-omul(L[2],L[3]):=L[1]:Octonion:-om ul(L[3],L[2]):=-L[1]:\n Octonion:-omul(L[3],L[1]):=L[2]:Octonion:-om ul(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):=_default_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 b asis\"\n end if;\nfor i from 1 to 7 do Octonion:-omul(e||i,e||i):=ar gs[2][i] end do:\nreturn\nend if;\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 103 "12. Initialization file for the 'Octonion' package. Thi s 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 "setup:=proc() \nlocal x,y,i,j, E124,E235,E346,E457; \nglobal Foct,Soct,_octbasis,_pureoctbasis,_octge n,`&o`,_default_Fano_triples,_default_squares,_default_Clifford_produc t,\n`type/Fano_triples`,`type/octonion`;\n############################ #############\nif assigned(Clifford)=false then \n #with(Clifford); \n error \"You must load package 'Clifford' before you can load pack age '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 thr ee 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 de fault 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 contained 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 co ntaining 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 Fano triples in order to \+ define different ocotonionic multiplication table. For example, the fo llowing 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:\nop tions `Copyright 1995-2003 by Rafal Ablamowicz, Tennessee Technologica l 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 return false end if;\nend do:\nS:=\{1,2,3,4,5,6,7\}:\ns:=`union`(seq(convert(F[i],set) ,i=1..7));\ns:=s minus (s intersect S):\nif nops(s)<>0 then return fal se 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 0 "" 0 "" {TEXT -1 19 "2. Type 'octonion'\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 443 "`type/octonion`:=proc(a1::algebraic) local S, setoctbasis;\noptions `Copyright 1995-2003 by Rafal Ablamowicz, Te nnessee Technological University`;\nif type(eval(a1),numeric) then ret urn true end if;\nif not type(eval(a1),\{clibasmon,climon,clipolynom\} ) then return false end if;\nS:=Clifford:-cliterms(eval(a1));\nsetoctb asis:=\{Id,e||(1..7)\}:\nreturn evalb(S minus (S intersect setoctbasis ) = \{\});\nend proc:\n##########################################" }} {PARA 0 "" 0 "" {TEXT -1 40 "3. Ampersand form of Clifford product:\n \+ " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 416 "`&o`:=proc() eval(omul(args)) \+ end proc:\n##########################################\nunprotect(_octb asis):\n_octbasis:=[Id,e||(1..7)]; #standard octonion 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_squares:=[-Id$7]:\n_defa ult_Clifford_product:='Clifford:-cmulNUM':\n" }}{PARA 0 "" 0 "" {TEXT -1 123 "4. Defining octonion mutliplication which can be changed here, if necessary, or later in a worksheet using def_omultable. \n" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 228 "unprotect(Foct);\nunprotect(Soct); \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); #defined a nd computed\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "E124:=e1we2we4; #a ssigned\n" }}{PARA 0 "" 0 "" {TEXT -1 59 "E235:=subs(Soct,e2 &cQ e3 &c Q e5); #defined and computed\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "E235:=e2we3we5; #assigned\n" }}{PARA 0 "" 0 "" {TEXT -1 59 "E346:=su bs(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 - E23 5)) &cQ subs(Soct, (Id - E346) &cQ (Id - E457))); #defined\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 221 "_octgen:=e2we3we4we7-e1we3we7-e4we5we7-e 1we2we5we7-e2we4we5we6-e1we5we6-e3we4we6+\n e1we2we3we6-e 2we6we7+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 procedure n ames.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "protect(Octonion);\nend \+ proc:\n\nend module:\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "savelib(O ctonion):\n\n\n\n" }}{PARA 0 "" 0 "" {TEXT -1 23 "Last revised: 11-5-2 002" }{MPLTEXT 1 0 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 0 "" }}}}{MARK "1 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }