{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 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 "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 }{PSTYLE "Normal" -1 258 1 {CSTYLE "" -1 -1 "Tim es" 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 26 "This is octonion_M8_03.m ws" }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 27 "(Revised: January 5, 2003)\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 27 "Cookeville, January 5, 2003" }} {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 a bout the current version of the OCTONION package. " }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "" 0 "" {TEXT -1 26 "Typical use: oversio n(); " }}{PARA 258 "" 0 "" {TEXT -1 0 "" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 906 "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-2003 by Rafal Ablamowicz, Tennessee Te chnological University`;\nprint(`+++++++++++++++++++++++++++++++++++++ ++++++`);\nprint(`'Octonion' - A Maple 8 Package for Computations with Octonions (version 8)`); \nprint(`Last revised: December 30, 2003`); \nprint(`Copyright 1995-2003, by Rafal Ablamowicz, Tennessee Technolog ical University`);\nprint(`Department of Mathematics, Box 5054`);\npri nt(`Tennessee Technological University, Cookeville, 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/cliff 8/`);\nprint(`+++++++++++++++++++++++++++++++++++++++++++`);\nend proc :\n" }}{PARA 258 "" 0 "" {TEXT -1 451 "2. Defining octonion nonassoci ative 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 under a global variable '_octbasis'. Basis for pure oc tonions [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 type '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 U ser Manual\", page 19. To display the default multiplication table, us e procedure 'omultable()' described below. To define your own octonion multiplication 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-2003 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-2003 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-2003 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-2003 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-2003 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-2003 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-2003 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-2003 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-2003 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-2003 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-2003 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-2003 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-2003 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" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 22 "savelib( Octonion):\n\n\n\n" }}{PARA 258 "" 0 "" {TEXT -1 22 "Last revised: 1-5 -2003" }{MPLTEXT 1 0 0 "" }}{PARA 258 "> " 0 "" {MPLTEXT 1 0 0 "" }}} {EXCHG {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 }