{VERSION 3 0 "IBM INTEL NT" "3.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 1 11 0 0 0 1 2 2 2 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "R3 Font 0" -1 256 1 {CSTYLE "" -1 -1 "Helvetica" 1 11 0 0 255 1 2 2 2 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "R3 Font 2" -1 257 1 {CSTYLE "" -1 -1 "Courier" 1 10 255 0 0 1 2 2 2 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "" 0 "" {TEXT -1 18 "This is octon3.mws" }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 27 "(Revised: October 27, 2001)" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 235 "This Maple worksheet creates an octonion package called \+ 'Octonion', version 4, and saves it in libname[1] `Octonion.m` file. \+ It runs under Maple V R. 5 provided that Maple package CLIFFORD versio n 5 has been loaded using with(Cliff5)." }}{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(Oct onion);" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 250 "The package requires that the CLIFFORD package be loaded first. I f the CLIFFORD package is not loaded, an error message will appear ind icating that it has to be loaded first. You can find the CLIFFORD pack age at http://math.tntech.edu/rafal/cliff5/ ." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 82 "Below you will find a des cription of commands available in the 'Octonion' package." }}{PARA 0 " " 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 44 "Any comments and b ug 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 Te chnological University" }}{PARA 0 "" 0 "" {TEXT -1 24 "Cookeville, TN \+ 38501 USA" }}{PARA 0 "" 0 "" {TEXT -1 30 "e-mail: rablamowicz@tntech.e du" }}{PARA 0 "" 0 "" {TEXT -1 24 "phone: USA(931) 372-3569" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 28 "Cookeville, Oct ober 27, 2001" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart:" }}{PARA 0 "" 0 "" {TEXT -1 90 "1. Name 'oversion' stores information about the c urrent 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 715 "Octonion[oversion]:= proc()\noptio ns `Copyright 1995-2001 by Rafal Ablamowicz, Tennessee Technological U niversity`;\nprint(`+++++++++++++++++++++++++++++++++++++++++++`);\npr int(`'Octonion' - A Maple V (Rel. 5.1) Package for Computations with O ctonions (version 4)`); \nprint(`Last revised: October 25, 2001`);\npr int(`Copyright 1995-2002, by Rafal Ablamowicz, Tennessee Technological University`);\nprint(`Department of Mathematics, Box 5054`);\nprint(` Tennessee Technological University, Cookeville, TN 38505`);\nprint(`ph one: USA (931) 372-3569, fax: USA (931) 372-6353`);\nprint(`e-mail: ra blamowicz@tntech.edu`);\nprint(`http://math.tntech.edu/rafal/cliff5/`) ;\nprint(`+++++++++++++++++++++++++++++++++++++++++++`);\nend:\n" }} {PARA 0 "" 0 "" {TEXT -1 452 "2. Defining octonion nonassociative mul tiplication 'omul'. Octonions are defined as the paravectors in Cl(0, 7) thus an octonion basis is \n[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 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 273 "NOTE: Oc tonion mutliplication is defined as in P. Lounesto, \"CLICAL User Manu al\", page 19. To display the default multiplication table, use proced ure 'omultable()' described below. To define your own octonion multipl ication table, use procedure 'def_omultable' (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 433 " Octonion[omul]:=proc(a1::octonion,a2::octonion) local expr,o1,o2,to1,t o2,coeffsa,coeffsb,i,j,p;\nglobal _pureoctbasis,_octbasis,Soct,_octgen ,`&c`,`&cQ`,`&w`,`&q`,`&o`;\noptions `Copyright 1995-1992 by Rafal Abl amowicz, Tennessee Technological University`,remember;\nif a1=0 or a2= 0 then RETURN(0) fi;\nif member(a1,\{`Id`,1\}) then RETURN(a2) fi;\nif member(a2,\{`Id`,1\}) then RETURN(a1) fi;\nif type(a1,\{`*`,`+`\}) or type(a2,\{`*`,`+`\}) then " }{TEXT -1 5 "\n " }{MPLTEXT 1 0 641 "o 1:=collect(Cliff5[displayid](a1),_octbasis);\n o2:=collect(Cliff5[dis playid](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])),i=1..nops(to1)),j=1..nops(to2))],`+`);\nif has(expr,'I d') then expr:=collect(simplify(expr),_octbasis) else\n \+ expr:=collect(simplify(expr),_pureoctbasis) \nfi;\nRETURN(expr );\nfi;\nRETURN(Cliff5[vectorpart](subs(Soct,args[1] &cQ args[2] &cQ _ octgen),0) +\n Cliff5[vectorpart](subs(Soct,args[1] &cQ args[2] \+ &cQ _octgen),1));\nend:\n" }}{PARA 0 "" 0 "" {TEXT -1 37 "3. Octonioni c 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 196 "Oc tonion[o_conjug]:=proc(a1::octonion) local p;\noptions `Copyright 1995 -2002 by Rafal Ablamowicz, Tennessee Technological University`,remembe r;\nRETURN(eval(a1 - 2*Cliff5[vectorpart](a1,1)));\nend:\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 247 "Octonion[onorm]:=proc(a1::octonion) \noptions `Copyr ight 1995-2002 by Rafal Ablamowicz, Tennessee Technological University `,remember;\nif args[1] = 0 then RETURN(0) fi;\nRETURN(sqrt(Cliff5[sca larpart](args[1] &o Octonion[o_conjug](args[1])))); \nend:\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 362 "Octonion[oinv]:=proc(a1::octonion) local N,ND; globa l _octbasis;\noptions `Copyright 1995-2002 by Rafal Ablamowicz, Tennes see Technological University`,remember;\nif args[1] <> 0 then \n N:= normal(args[1]); \n ND:=denom(N)*N;\n RETURN(expand(denom(N)*Octon ion[o_conjug](ND)/(Octonion[onorm](ND))^2))\nelse ERROR(`octonion `, a rgs[1], `has no inverse`) \nfi;\nend:\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 176 "Octonion[commutator]:=proc(o1::oct onion,o2::octonion)\noptions `Copyright 1995-2002 by Rafal Ablamowicz, Tennessee Technological University`;\n RETURN(o1 &o o2 - o2 &o o1) \n end:\n" }}{PARA 0 "" 0 "" {TEXT -1 69 "7. An associatotor [a,b,c] = (a b)c - a(bc) of three octonions a,b,c.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 207 "Octonion[associator]:=proc(o1::octonion,o2::octonion,o3::octo nion) \noptions `Copyright 1995-2002 by Rafal Ablamowicz, Tennessee Te chnological University`;\n RETURN((o1 &o o2) &o o3 - o1 &o (o2 &o o3)) \nend: \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 285 "Octonion[Phi]:=proc(o1::octo nion,o2::octonion,o3::octonion) local expr:\noptions `Copyright 1995-2 002 by Rafal Ablamowicz, Tennessee Technological University`;\n expr :=(1/2)*(o1 &o (Octonion[o_conjug](o2) &o o3) - o3 &o (Octonion[o_conj ug](o2) &o o1)):\n RETURN(coeff(expr,Id)) \nend:\n" }}{PARA 0 "" 0 " " {TEXT -1 44 "9. Real and imaginary parts of an octonion:\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 197 "Octonion[realpart]:=proc(o1::octonion) l ocal o11;\noptions `Copyright 1995-2002 by Rafal Ablamowicz, Tennessee Technological University`;\n o11:=Cliff5[displayid](o1):\n RETURN(c oeff(o11,Id)) \nend:\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 215 "Octonion [purevectorpart]:=proc(o1::octonion) local o11;\noptions `Copyright 19 95-2002 by Rafal Ablamowicz, Tennessee Technological University`;\n o 11:=Cliff5[displayid](o1):\n RETURN(Cliff5[vectorpart](o11,1)) \nend: \n" }}{PARA 0 "" 0 "" {TEXT -1 590 "10. Procedure 'omultable' display s current octonion multiplication table in a form of a 7 by 7 matrix w here in the (i,j)-entry it displays the octonion product between the i th and the jth basis element in the pure octonion basis. This means th at the (i,j)-entry will equal omul(ei,ej), i,j = 1,...,7. The table is automatically created using a set of default Fano triples. The defaul t Fano triples are stored in a global variable '_default_Fano_triples' . User can enter his/her own set of Fano triples and use procedure 'de f_omultable' to define 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 439 "Octonion[omultable]:=pro c() local i,j,M; global omul,_pureoctbasis;\noptions `Copyright 1995-2 002 by Rafal Ablamowicz, Tennessee Technological University`;\nif not \+ evalb(op(4,eval(Octonion[omul]))=NULL) then\n M:=linalg[matrix](7,7, (i,j)->Octonion[omul](_pureoctbasis[i],_pureoctbasis[j]));\n RETURN( evalm(M));\nelse \n RETURN(`Octonion multiplication table is not cur rently defined. Use 'def_omultable' to define a new table.`) \nfi;\nen d:\n" }}{PARA 0 "" 0 "" {TEXT -1 265 "11. Procedure 'def_omultable' al lows the user to define the octonion multiplication table in terms of \+ seven Fano triples which define seven lines in the Fano plane. The def ault 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 st ored 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 , 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) = -ei, omul(ei, ek) = -ej,\n\n(3) omul(ei, ei) = -Id, omul(ej, ej) = -Id, omul(ek, ek) = -Id.\n\nThe pr ocedure 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 argument, it will define octonio n 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-eleme nt list consisting of three integers between 1 and 7, then octonion mu ltiplication is defined as above." }}{PARA 0 "" 0 "" {TEXT -1 1 "\n" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 1170 "Octonion[def_omultable]:=proc() \+ local L,x,i;\noptions `Copyright 1995-2002 by Rafal Ablamowicz, Tennes see Technological University`;\n###################################### ####\nif nargs=0 then RETURN(def_omultable(_default_Fano_triples,_defa ult_squares)) fi;\n##########################################\nif nops (args[1])<>7 or not type(args[1],Fano_triples) then \n ERROR(`list e ntered does not contain seven Fano triples as required`) \nfi;\nsubsop (4=NULL,eval(Octonion[omul])): #erase current octonion multiplication \+ table\nfor i from 1 to 7 do\n L:=[seq(e.x,x=args[1][i])]:\n Octoni on[omul](L[1],L[2]):=L[3]:Octonion[omul](L[2],L[1]):=-L[3]:\n Octoni on[omul](L[2],L[3]):=L[1]:Octonion[omul](L[3],L[2]):=-L[1]:\n Octoni on[omul](L[3],L[1]):=L[2]:Octonion[omul](L[1],L[3]):=-L[2]:\nod:\nif n args=1 then \n for i from 1 to 7 do Octonion[omul](e.i,e.i):=_defaul t_squares[i] od;\n RETURN()\nfi;\n################################## ########\nif nargs=2 then\n if nops(args[2])<>7 then \n ERROR(`sec ond input,when used, must be a list of 7 elements which are squares of the pure octonion basis`) fi;\nfor i from 1 to 7 do Octonion[omul](e. i,e.i):=args[2][i] od;\nRETURN()\nfi;\nend:\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 0 "" 0 "" {TEXT -1 440 "12. Type `Fano_tripl es` is a list F consisting of seven lists f_i, i=1..7, each of which m ust 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 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 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 Fano triples in o rder to define different ocotonionic multiplication table. 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 547 "Octonion[`type/Fano_triples`]:=proc(F::list(list)) l ocal f,s,S,i,k:\noptions `Copyright 1995-2002 by Rafal Ablamowicz, Ten nessee Technological University`;\nif nops(F)<>7 then RETURN(false) fi ;\nfor f in F do \n if not type(f,list(posint)) or nops(f)<>3 then \+ RETURN(false) fi;\nod;\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 R ETURN(false) fi;\nfor i in S do\n k:=0:\n for f in F do if membe r(i,f) then k:=k+1 fi od;\n if k<>3 then RETURN(false) fi;\nod;\nRE TURN(true); \nend:\n" }}{PARA 0 "" 0 "" {TEXT -1 20 "13. Type 'oct onion'\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 385 "Octonion[`type/octonio n`]:=proc(a1::algebraic) local S, setoctbasis;\noptions `Copyright 199 5-2002 by Rafal Ablamowicz, Tennessee Technological University`;\nif t ype(a1,numeric) then RETURN(true) fi;\nif not type(a1,\{clibasmon,clim on,clipolynom\}) then RETURN(false) fi;\nS:=Cliff5[cliterms](args[1]); \nsetoctbasis:=\{Id,e.(1..7)\}:\nRETURN(evalb(S minus (S intersect set octbasis) = \{\}));\nend:\n" }}{PARA 0 "" 0 "" {TEXT -1 103 "14. Initi alization file for the 'Octonion' package. This file is loaded automa tically 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 676 "Octonion[init]:=proc() \nlocal x,y,i,j,E124,E235,E34 6,E457; \nglobal Foct,Soct,_octbasis,_pureoctbasis,_octgen,`&o`,def_om ultable,\n_default_Fano_triples,_default_squares,_default_Clifford_pro duct;\nif assigned(Cliff5)=false then \n ERROR(`You must load packag e 'Cliff5' before you can load package 'Octonion'`) \nfi;\n\n`&o`:=pro c() Octonion[omul](args) end:\n\nunprotect(_octbasis):\n_octbasis:=[Id ,e.(1..7)]; #standard octonion basis as Maple global variable\n_pure octbasis:=[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_default_Clifford_product:='c mulNUM':\n" }}{PARA 0 "" 0 "" {TEXT -1 124 "(1) Defining octonion mutl iplication which can be changed here, if necessary, or later in a work sheet using def_omultable. \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 225 "u nprotect(Foct);\nunprotect(Soct);\nFoct:=proc(a1::posint,a2::posint) i f args[1]=args[2] then RETURN(-1) else RETURN(0) fi end:\nSoct:=\{seq( seq(B[i,j]=Foct(i,j),i=1..7),j=1..7)\}: #regular octonion multiplica tion as in Cl(0,7)\n" }}{PARA 0 "" 0 "" {TEXT -1 59 "E124:=subs(Soct,e 1 &cQ e2 &cQ e4); #defined and computed\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "E124:=e1we2we4; #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 "E346:=subs(Soct,e3 &cQ e4 &cQ e6); #def ined and computed\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "E346:=e3we4w e6; #assigned\n" }}{PARA 0 "" 0 "" {TEXT -1 35 "E457:=subs(Soct,e4 &c Q 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-e4we5we7-e1we2we5we7-e2we4we5we6-e1we5we6-e3we4w e6+\n e1we2we3we6-e2we6we7+e1we4we6we7-e3we5we6we7-e1we2w e3we4we5we6we7-e2we3we5-\n e1we3we4we5+Id-e1we2we4; #assi gned\n" }}{PARA 0 "" 0 "" {TEXT -1 102 "Assigning a multiplication tab le for the octonion basis. This table has been computed using the abo ve" }}{PARA 0 "" 0 "" {TEXT -1 51 "definitions of Foct, Soct, E124, E2 35, E346, E457.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 54 "def_omultable( _default_Fano_triples,_default_squares);" }}{PARA 0 "" 0 "" {TEXT -1 33 "\n(2) Protecting procedure names.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 109 "protect('Soct','Foct','Squat','Fquat',omul,oinv,onorm,o_conju g,_default_Fano_triples,_default_squares);\nend:\n" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 264 "#save Octonion, `c:/maplev51/lib/Octonion.m`;\n#sa ve Octonion, `a:/Octonion.m`;\n#save Octonion, `c:/maplev51/clifford/w ww4/Octonion.m`;\n#save Octonion, `f:/clifford/www4/Octonion.m`;\n#sav e Octonion, `f:/www/rafal/cliff4/Octonion.m`;\n\nsavelib(Octonion,`Oct onion.m`):" }}{PARA 0 "" 0 "" {TEXT -1 24 "Last revised: 12-27-2001" } {MPLTEXT 1 0 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 23 0" 22 }{VIEWOPTS 1 1 0 1 1 1803 }