{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 } {CSTYLE "_cstyle66" -1 256 "Courier" 1 12 255 0 0 1 0 1 0 2 1 2 0 0 0 1 }{CSTYLE "" -1 257 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 258 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 259 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 260 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{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 "Text Ou tput" -1 6 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 2 1 3 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 "Maple Output" -1 12 1 {CSTYLE "" -1 -1 "Ti mes" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 3 0 0 0 0 1 0 1 0 2 2 0 1 } {PSTYLE "Normal" -1 256 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "_pstyle134" -1 257 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 2 0 2 0 2 2 0 1 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 7307 "# Date: March 3, 2 008\nrestart:\n#\n# This is the source code file of the \"GfG - Groebn er for Grassmann\" package\n# File: Groebner.for.Grassmann_03iii08_M12 .mws\n#\n# Copyright (c) Rafal Ablamowicz & Bertfried Fauser 2006-2009 , all rights reserved.\n#\n########################################### ####################################\n# \+ #\n# DISCLAIMER: \+ #\n# \+ # \n# THERE IS NO WARRANTY FOR THE GROEBNER FOR GRASSMANN PACKAGE TO TH E EXTENT #\n# PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STA TED IN WRITING THE #\n# COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROV IDE THE PROGRAM \"AS IS\" WITHOUT #\n# WARRANTY OF ANY KIND, EITHER E XPRESSED OR IMPLIED, INCLUDING, BUT NOT #\n# LIMITED TO, THE IMP LIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #\n# A PARTIC ULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE #\n # OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU #\n# ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CO RRECTION. #\n# \+ #\n##################################### ##########################################\n#\n# If you want to use t his code or parts of it under a GPL LICENCE, please\n# contact the au thors:\n# rablamowicz tntech.edu or \n# fauser \+ spock.physik.uni-konstanz.de\n#\n#\n# +++ The package extends the Clifford and Bigebra packages.\n# +++ It computes Groebner bases for \+ Grassmann algebras.\n#\n# +++ Main functions are:\n# --- Orders:\n# \+ -- Lex : Lexicographical ordering e1>e2, e1we3>e1we3we4 ... \n# -- InvLex : Inverse Lexicographical ordering\n# -- R evLex : Reverse Lexicographical ordering\n# -- InvRevLex \+ : Inverse Reverse Lexicographical ordering\n# -- Deg[] : De gree ordering, needs an argument to become a total order (admissible), for example Deg[Lex] and Deg[InvLex] are admissible orders.\n# -- InvDeg[...] : Inverse Degree ordering \n#\n# --- GDivide \+ : GDivide implements the Grassmann left division algorithm (an other name is LeftGDivide)\n#\n# --- LeftGDivide : LeftGDivide is another name for GDivide\n#\n# --- RightGDivide : RightGDivide im plements the Grassmann right division algorithm\n#\n# --- CommonFactor : CommonFactor extracts (including a sign) a common factor in \n# a pair of Grassmann monomials A=A' &w C, B= C \+ &w B' -> C\n# --- GLCM : GLCM (Grassmann Least Common Mult iple) takes as input a pair of \n# Grassmann monomials [A,B] and returns a (signed) list [A',C,B'] so that \n# \+ &w(A',C,B') <>0 and A=A' &w C and B=C &w B' \n# \n# --- GSpoly : GSpoly computes the Grassmann Spolynom of t wo Grassmann polynomials (same as left and right Spolynom)\n#\n# --- L eftGSpoly : LeftGSpoly computes left Grassmann Spolynom of two G rassmann polynomials \n#\n# --- RightGSpoly : RighGSpoly computes right Grassmann Spolynom of two Grassmann polynomials\n#\n# --- make_ rnd_list : makes a random list of N nonzero Clifford polynomials in dimension up to n\n#\n# --- make_rnd_polynomial_in_ideal : makes a ra ndom polynomial in left or right Grassmann or Clifford ideal\n#\n# --- SemiGroupS : makes a signed basis in Grassmann algebra (a la free alg ebra k over a free monoid basis in S)\n#\n# --- SemiGroupIdealT : m akes a Grassmann monomial basis in a semigroup ideal T(G) or T(I) in S generated by the leading terms T(g) of each g in G or in I\n# \+ where I is a left, right, or two-sided ideal in the alg ebra k (Grassmann algebra in our case) \n#\n# --- OrderIdealO : m akes a Grassmann monomial basis in a semigroup ideal T(G) in S generat ed by the leading terms T(g) of each g in G\n#\n# --- chooseg1 : finds , if possible, for the given polynomial f, a monic polynomial g in (le ft, right, two-sided) ideal I generated by polynomials specified \n# \+ in the list L such that LT(g) = LT(f) in the given mono mial order MonOrder. If such polynomial does not exist then the proced ure returns 0;\n# otherwise, it returns a monic polynom ial g with the specified property. Needed in CanForm. See also [Mora]. \n#\n# --- CanForm : decomposes polynomial f into two components phi a nd h such that phi belongs to an ideal I (left,right) generated by a l ist plst while h \n# belongs to Span_k(O(I)) (the span o f the order ideal O(I) = S \\ T(I) where S is a free semigroup (not qu ite) and T(I) is the ideal generated \n# by the leading \+ terms (with respect to the monomial order MonOrder). Here S is generat ed by e1,e2,...e_N where N is the larger of the maximum\n# \+ indices occuring in f and plst.\n#\n# --- leftidealmember : checks \+ whether given polynomial f belongs to a left ideal generated by polyno mials specified in the list L. If such polynomial does \n# \+ not exist then the procedure returns false; otherwise it re turns true. When used with a third optional argument, .e., 'c', it ret urns \n# a list of polynomial coefficients coe[i ] such that f = add(wedge(coe[i],L[i]),i=1..nops(L)); \n#\n# --- righ tidealmember : checks whether the given polynomial f belongs to a righ t ideal generated by polynomials specified in the list L. If such poly nomial \n# does not exist then the procedure re turns false; otherwise it returns true. When used with a third optiona l argument, .e., 'c', it\n# returns a list poly nomial coefficients coe[i] such that f = add(wedge(L[i],coe[i]),i=1..n ops(L));\n# --- chooseg2 : finds a polynomial g in a list G and l, r i n S - Grassmann signed monomial basis - such that wedge(l,T(g),r) = Th where Th is the given \n# basis monomial of type cliba smon, and T(g) is the leading term of g with respect to the monomial o rder specified as MonOrder. The procedure\n# returns a \+ sequence l,g,r, if l,g,r exist such that wedge(l,T(g),r) = Th, or, 0,0 ,0 if such elements could not be found. This procedure is \n# \+ needed by NormalForm. \n#\n# --- LeftNormalForm : computes left normal form of a polynomial f with respect to finite set G that gener ates a left ideal I and is a counterpart of \n# i ncomplete Gaussian reduction [Mora]. See his definition of normal form and Proposition 2.1 in [Mora] on page 6.\n#\n# --- RightNormalForm : \+ computes right normal form of a polynomial f with respect to finite se t G that generates a right ideal I and is a counterpart of \n# \+ incomplete Gaussian reduction [Mora]. See his definition of normal form and Proposition 2.1 in [Mora] on page 6.\n#\n# --- GRe duce : GReduce reduces a Grassmann polynomial w.r.t a list of Grassman n polynomials [OBSOLETE: DOES NOT WORK WELL! Replaced with LeftNormalF orm and\n# RightNormalForm\n#\n# --- GGbasis : \+ computes a Groebner basis?\n# --- minGGbasis : transforms a Groe bner basis into a minimal Groebner basis? \n#\n#\n#\n# +++ TYPES:\n# \+ --- no new types for this package... \n#\n#\n" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 741 "GfG:=module()\n############################## #####\n##\n## -- list of exports\n##\nexport version,\n tilde,m akealpha,leftmost,rightmost,\n Lex,InvLex,RevLex,InvRevLex,Deg,I nvDeg,\n isadmissible, \n LMon,LTerm,LCoeff,multideg,\n \+ GDivide,LeftGDivide,RightGDivide,\n CommonFactor,GLCM,GSpoly ,\n LeftGSpoly,RightGSpoly,\n SemiGroupS,SemiGroupIdealT, \n OrderIdealO,chooseg1,CanForm,\n leftidealmember,rightid ealmember,\n chooseg2,LeftNormalForm,RightNormalForm,\n GR educe,\n GGbasis,minGGbasis,\nmake_rnd_list,\nmake_rnd_polynomia l_in_ideal;\n###################################\n##\n## -- list of l ocal routines\n## \nlocal init,exit;\noption package, \n load=in it,\n unload=exit;\n" }}{PARA 0 "" 0 "" {TEXT -1 11 "0. Version \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1209 "version:= proc()\noptions ` Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried Fauser. All \+ rights reserved.`;\ndescription `Last revised: December 20, 2008`;\npr int(`+++++++++++++++++++++++++++++++++++++++++++`);\nprint(`GfG - Groe bner for Grassmann - A Maple 12 Package for Groebner Bases for Grassma nn Algebras`); \nprint(`Last revised: December 20, 2008 (Source file: \+ Groebner.for.Grassmann_03iii08_M12.mws)`);\nprint(`Copyright 2006-2009 by Rafal Ablamowicz (*) and Bertfried Fauser ($)`);\nprint(`with cont ributions from Troy Brachey (*)`);\nprint(``);\nprint(`(*) Department \+ of Mathematics, Box 5054`);\nprint(` Tennessee Technological Univer sity, Cookeville, TN 38505`);\nprint(` tel: USA (931) 372-3662, fax : USA (931) 372-6353`);\nprint(` rablamowicz@tntech.edu`);\nprint(` http://math.tntech.edu/rafal/`);\nprint(``);\nprint(`($) Universit \"at Konstanz, Fachbereich Physik, Fach M678`);\nprint(` 78457 Kons tanz, Germany`);\nprint(` Bertfried.Fauser@uni-konstanz.de`);\nprin t(` http://clifford.physik.uni-konstanz.de/~fauser/`); \nprint(` \+ http://math.tntech.edu/rafal/`);\nprint(``);\nprint(`++++++++++++Thi s is GfG - Groebner for Grassmann for Maple 12 version 0.5++++++++++++ `);\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 318 "1. Procedure 'tilde' takes a Grassmann polynomial X, that is, an expression of `type/clipo lynom`, or, `type/climon`, or `type/clibasmon` and returns a new polyn omial tilde(X) with the same monomial terms except that the coefficien ts got inverted. For example, if X = 2*e1 +32*e1we2, then tilde(X) = 1 /2*e1+1/32*e1we2.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 355 "tilde:=proc (f::\{clipolynom,climon,clibasmon\}) local p;\noptions `Copyright (c) \+ 2006-2009 by Rafal Ablamowicz and Bertfried Fauser. All rights reserve d.`;\nif type(f,clibasmon) then return f elif\n type(f,climon) then \+ \n p:=op(Clifford:-cliterms(f)):\n return coeff(f,p)^(-1)* p;\nelse\n return `+`(op(map('procname',[op(f)])))\nend if;\nend p roc:\n" }}{PARA 0 "" 0 "" {TEXT -1 251 "2. Procedure 'makealpha' assig ns to a 'climon' or 'clibasmon' a vector of length 9 with entries 0 an d 1. If a location i, 1<= i <= 9, has 1, then e_i is present in the 'c libasmon' or 'climon'. If that location has 0, then the generator e_i \+ is absent.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 348 "makealpha:=proc(m: :\{clibasmon,climon\}) local p,v,i;\noptions `Copyright (c) 2006-2009 \+ by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\nv:=V ector[row](9,0,datatype=integer):\np:=Clifford:-extract(m,'integers'); \nif p=[] then return v \nelse \n for i from 1 to nops(p) do\n \+ v[p[i]]:=1;\n end do;\nreturn v;\nend if;\nend proc:\n" }} {PARA 0 "" 0 "" {TEXT -1 163 "3. Procedure 'leftmost' finds and return s the first leftmost nonzero entry in a vector of length 9, if present , or, it returns 0 if the vector is the zero vector.\n" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 323 "leftmost:=proc(v::Vector) local i,flag:\nopti ons `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\nif LinearAlgebra:-Equal(v,Vector[row](9,0)) t hen return 0 end if:\nflag:=false:\nfor i from 1 to 9 while not flag d o\n if v[i]<>0 then flag:=true; return v[i] end if;\nend do;\nend p roc:\n" }}{PARA 0 "" 0 "" {TEXT -1 159 "4. Procedure 'rightmost' finds and returns the rightmost nonzero entry in a vector of length 9, if p resent, or, it returns 0 if the vector is the zero vector.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 330 "rightmost:=proc(v::Vector) local i,flag: \noptions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried F auser. All rights reserved.`;\nif LinearAlgebra:-Equal(v,Vector[row](9 ,0)) then return 0 end if:\nflag:=false:\nfor i from 9 to 1 by -1 whil e not flag do\n if v[i]<>0 then flag:=true; return v[i] end if;\nen d do;\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 197 "5. Procedures show n below provide various monomial orders on monomials in the Grassmann \+ algebra /\\ generated by non-commuting e1,e2,...,e9, where ei &w ej = \+ 0 if i = j and = - ej &w ei if i <>j. \n\n" }{TEXT 257 11 "Definition: " }{TEXT -1 1 " " }{TEXT 258 219 "We say that an order T on Grassmann \+ monomials is admissible if\n\n1. m > 1 for every monomial m in the Gra ssmann basis\n2. If m_2 > m_1 then m_l m_2 m_r > m_l m_1 m_r for every m_1, m_2, m_l, and m_r in the Grassmann basis" }{TEXT -1 3159 "\n\nNO TE: Not all of these orders below are admissible, for example, RevLex, InvRevLex, and InvDeg[Lex] orders are NOT admissible because they vio late the first condition that m > 1 for every m in the Grassmann basis . The remaining orders are admissible. Check procedure 'isadmissible' \n\nLet a monomial m = e^alpha = (e1^alpha1 &w e2^alpha2) &w (...) &w \+ (e9^alpha9) where alpha = [alpha1, alpha2, ..., alpha9]. Of course, ea ch alphai = 0 or 1 as ei^alphai = &w(ei,ei,...,ei) = 0 if alphai >=2. \+ We also agree that ei^0 = Id in the Grassmann algebra /\\. We will ref er to the list alpha also as a vector. \n\nIn the following let m1 = e ^alpha and m2 = e^beta.\n\n'Lex(m1,m2)' returns true if either the dif ference vector alpha - beta is the zero vector or the leftmost non-zer o entry in alpha - beta is positive, in which case we say m1 >= m2. Ot herwise it returns false, in which case we say that m1 < m2. For examp le, it gives a lexicographic order on generators e1>e2>...>e9 (NOT ADM ISSIBLE in general but admissible in Grassmann algebra).\n\n'InvLex(m1 ,m2)' returns true if either the difference vector alpha - beta is th e zero vector or the rightmost non-zero entry in alpha - beta is posit ive, in which case we say m1 >= m2. Otherwise it returns false, in whi ch case we say that m1 < m2. For example, it gives the inverse lexicog raphic order on generators e9>e8>...>e1 (NOT ADMISSIBLE in general and not admissible in Grassmann algebra) \n\n'RevLex(m1,m2)' returns tru e if either the difference vector alpha - beta is the zero vector or t he rightmost non-zero entry in alpha - beta is negative, in which case we say m1 >= m2. Otherwise it returns false, in which case we say tha t m1 < m2. For example, it gives the reverse lexicographic order on ge nerators e1>e2>...>e9 (NOT ADMISSIBLE in general and not admissible in Grassmann algebra) \n\n'InvRevLex(m1,m2)' returns true if either the difference vector alpha - beta is the zero vector or the leftmost non -zero entry in alpha - beta is negative, in which case we say m1 >= m2 . Otherwise it returns false, in which case we say that m1 < m2. For e xample, it gives the reverse lexicographic order on generators e1>e2>. ..>e9 (NOT ADMISSIBLE in general but admissible in Grassmann algebra) \n\n'Deg' procedure takes as index (parameter) any of the above monom ial orders T and uses that order to resolve total degree ties: It firs t computes a degree (grade) of two monomial terms m1, m2, and it retur ns true if the total degree |m1| > |m2|. When |m1| < |m2| it returns f alse, and when the degrees are equal |m1| = |m2|, it uses the order T \+ to determine the order. (NOT ADMISSIBLE in general but admissible in \+ Grassmann algebra)\n\n'InvDeg' procedure takes as index (parameter) an y of the above monomial orders T and uses that order to resolve total \+ degree ties: It first computes a degree (grade) of two monomial terms \+ m1, m2, and it returns false if the total degree |m1| > |m2|. When |m1 | < |m2| it returns true, and when the degrees are equal |m1| = |m2|, \+ it uses the order T to determine the order. (NOT ADMISSIBLE in genera l but admissible in Grassmann algebra for all orders T except InvDeg[L ex] is not admissible)\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1352 "Lex:= proc(m1::\{clibasmon,climon\},m2::\{clibasmon,climon\}) local a1,a2;\n options `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried Fau ser. All rights reserved.`;\na1,a2:=makealpha(m1),makealpha(m2);\nif L inearAlgebra:-Equal(a1,a2) then return true end if;\nif leftmost(a1-a2 )>0 then return true else return false end if;\nend proc:\n\nInvLex:=p roc(m1::\{clibasmon,climon\},m2::\{clibasmon,climon\}) local a1,a2;\no ptions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried Faus er. All rights reserved.`;\na1,a2:=makealpha(m1),makealpha(m2);\nif Li nearAlgebra:-Equal(a1,a2) then return true end if;\nif rightmost(a1-a2 )>0 then return true else return false end if;\nend proc:\n\nRevLex:=p roc(m1::\{clibasmon,climon\},m2::\{clibasmon,climon\}) local a1,a2;\no ptions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried Faus er. All rights reserved.`;\na1,a2:=makealpha(m1),makealpha(m2);\nif Li nearAlgebra:-Equal(a1,a2) then return true end if;\nif rightmost(a1-a2 )<0 then return true else return false end if;\nend proc:\n\nInvRevLex :=proc(m1::\{clibasmon,climon\},m2::\{clibasmon,climon\}) local a1,a2; \noptions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried F auser. All rights reserved.`;\na1,a2:=makealpha(m1),makealpha(m2);\nif LinearAlgebra:-Equal(a1,a2) then return true end if;\nif leftmost(a1- a2)<0 then return true else return false end if;\nend proc:" }{TEXT -1 0 "" }{MPLTEXT 1 0 1 "\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 814 "Deg :=proc(m1::\{clibasmon,climon\},m2::\{clibasmon,climon\}) local a1,a2, order;\noptions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertf ried Fauser. All rights reserved.`;\n a1,a2:=makealpha(m1),makealpha (m2);\n order:=op(1,procname);\n if add(a1[i],i=1..9) < add(a2[i], i=1..9) then return false end if;\n if add(a1[i],i=1..9) > add(a2[i] ,i=1..9) then return true end if;\n order(m1,m2);\nend proc:\n\nInvD eg:=proc(m1::\{clibasmon,climon\},m2::\{clibasmon,climon\}) local a1,a 2,order;\noptions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Ber tfried Fauser. All rights reserved.`;\n a1,a2:=makealpha(m1),makealp ha(m2);\n order:=op(1,procname);\n if add(a1[i],i=1..9) < add(a2[i ],i=1..9) then return true end if;\n if add(a1[i],i=1..9) > add(a2[i ],i=1..9) then return false end if;\n order(m1,m2);\nend proc:\n" }} {PARA 0 "" 0 "" {TEXT -1 591 "6. Procedure 'isadmissible' takes as inp ut a list of Grassmann monomials (in CLIFFORD, they are of type 'cliba smon', and one of the monomial orders. It returns true of the order as admissible and false if it is not admissible. Note, that this procedu re has a remember table to speed up computations but this remember tab le is forgotten when Maple is closed. A local function in this procedu re called 'Fwedge' is essentially the same as Clifford:-wedge except t hat it has a remember table and remembers products of Grassmann monomi als. Its remember table is also erased when Maple is closed.\n" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 1553 "isadmissible:=proc(cbas::list(cli basmon),morder) local Fwedge,L,flagM,m1,m2,flag12,flag,ml,mr,mlm1mr,ml m2mr;\noptions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfr ied Fauser. All rights reserved.`,\nremember;\n####################### ################\n# Checking condition m > Id for every m\n########### ############################\nL:=sort(cbas,morder);\nflagM:=evalb(L[no ps(L)]=Id);\nif flagM=false then return false end if;\n############### ###################################################################### \n# Checking condition if m1 < m2 then mlm1mr < mlm2mr for every m1,m2 ,ml,mr in /\\R^n.\n################################################### ##################################\nfor m1 in cbas while flagM do\nfor m2 in cbas while flagM do\n#############################\nflag12:=mor der(m1,m2);\nflag:=true:\n#############################\nFwedge:=proc( x,y,z) local p;\n option remember;\n Clifford:-wedge(x,y ,z);\nend proc:\n############################\nfor ml in cbas while fl ag do\n for mr in cbas while flag do\n mlm1mr:=Fwedg e(ml,m1,mr):\n if mlm1mr<>0 then\n mlm2mr:=Fw edge(ml,m2,mr):\n if mlm2mr<>0 then\n m lm1mr:=op(Clifford:-cliterms(mlm1mr)):\n mlm2mr:=op(C lifford:-cliterms(mlm2mr)):\n flag:=evalb(morder(mlm1 mr,mlm2mr)=flag12):\n end if;\n end if;\nend \+ do; end do;\nflagM:=flag;\n#############################\nend do; end \+ do;\nif flagM then \n return flagM else return flagM #,[ml,m1,m2,mr] \nend if;\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 192 "7. Procedure \+ 'LMon' gives the leading monomial in a Grassmann polynomial with respe ct to the order entered as a second argument. One possible order is 'L ex' (lexicographic lex e1>e2>...>en). \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 422 "LMon:=proc(f::\{clibasmon,climon,clipolynom\},morder ) local L,ff;\noptions `Copyright (c) 2006-2009 by Rafal Ablamowicz an d Bertfried Fauser. All rights reserved.`;\nif type(f,clibasmon) then \+ return f \n elif type(f,climon) then return op(Clifford:-cliterms(f) ) \n elif type(f,clipolynom) then\n ff:=Clifford:-clicollect( f):\n L:=sort([op(Clifford:-cliterms(ff))],morder);\n re turn L[1];\nend if;\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 189 "8. P rocedure 'LTerm' gives the leading term in a Grassmann polynomial with respect to the order entered as a second argument. One possible order is 'Lex' (lexicographic lex e1>e2>...>en). \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 401 "LTerm:=proc(f::\{clibasmon,climon,clipolynom\},morde r) local ff,L,c;\noptions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\nif type(f,\{clibasmon,c limon\}) then return f \n elif type(f,clipolynom) then\n ff:= Clifford:-clicollect(f):\n L:=sort([op(Clifford:-cliterms(ff))] ,morder);\n c:=coeff(ff,L[1]);\n return c*L[1];\nend if; \nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 209 "9. Procedure 'LCoeff' g ives the coefficient of the leading term in a Grassmann polynomial wit h respect to the order entered as a second argument. One possible orde r is 'Lex' (lexicographic lex e1>e2>...>en). \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 457 "LCoeff:=proc(f::\{clibasmon,climon,clipolynom\},mord er) local ff,L,c;\noptions `Copyright (c) 2006-2009 by Rafal Ablamowic z and Bertfried Fauser. All rights reserved.`;\nif type(f,clibasmon) t hen return 1\n elif type(f,climon) then return coeff(f,op(Clifford:- cliterms(f))) \n elif type(f,clipolynom) then\n ff:=Clifford: -clicollect(f):\n L:=sort([op(Clifford:-cliterms(ff))],morder); \n c:=coeff(ff,L[1]);\n return c\nend if;\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 961 "10. Procedure 'CommonFactor' finds a c ommon Grassmann factor in two Grassmann monomials x and y. If the over lap between the two monomials is empty, the procedure returns the iden tity element Id. Note that common factor of monomials x and y may diff er in sign from the common factor of y and x. \n\n'CommonFactor' is Gr assmann's original 'regressive' product, which he computed in his firs t extension theory A1 using the 'rule of the common factor'. Here 'Com monFactor makes use of two aspects of a Graded Hopf algebra, we can c ompute the meet (dual of join=wedge) in a Grassmann algebra using the \+ volume element. Thereby depending on the dimension. Common factor look s into the smallest Grassmann algebra which contains the monomials x a nd y and extracts the coefficient of the highest grade element (volume form). In this way, the common factor function becomes independent of an 'ambient dimension' and loses its weak dependence on the (weight o f) the metric. " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 575 "CommonFactor:=proc(x::\{clibasmon,climon\},y::\{clib asmon,climon\}) local f,f1,f2,term,maxdeg;\noptions `Copyright (c) 200 6-2009 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.` ,\nremember;\n f:=(x,y,z)->&t(x,z,y); \n term:=Bigebra:-`&map`(ev al(subs(`&t`=f,&t(Bigebra:-`&gco`(x),y))),2,Clifford:-wedge);\n f1:= (x,y)->x: f2:=(x,y)->y:\n maxdeg:=max(Clifford:-maxgrade(eval(subs(` &t`=f1,term))),\n Clifford:-maxgrade(eval(subs(`&t`=f2,t erm))));\n f:=(x,y)->if Clifford:-maxgrade(y) /\\^op.\n\nWhen extending Groebn er for Grassmann to Clifford algebras, all GDivide, GLCM, etc., functi ons will then need the correct (possibly containing antisymmetric) par ts either !\n\nThis procedure may be used with an optional fourth argu ment of type 'symbol': If used that way, it returns the remainder r an d the quotient q as a sequence r,q (that is, r first and q second).\n \+ " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1149 "GDivide:=proc(p1::\{clipolyno m,climon,clibasmon\},p2::\{clipolynom,climon,clibasmon\},MonOrder) loc al lst,cf,term,poslist,res,i,r,n,cbas,q,eq,sol,c,p1loc,p2loc;\noptions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried Fauser. Al l rights reserved.`;\np1loc,p2loc:=p1,p2:\n lst:=sort(convert(Cliff ord:-cliterms(p1loc),list),MonOrder);\n cf,term:=LCoeff(p2loc,MonOr der),LMon(p2loc,MonOrder); \nres:=[];\nfor i from 1 to nops(lst) do \n res:=[op(res),Clifford:-RC(lst[i],Clifford:-reversion(term,linal g[diag](1$9)),linalg[diag](1$9))];\nend do:\nr:=p1loc-add(coeff(p1loc, lst[i])/cf*Clifford:-wedge(res[i],p2loc),i=1..nops(lst));\nif nargs=3 \+ then return r end if:\nif not type(args[4],symbol) then error `fourth \+ optional argument must be of type symbol` end if:\n################### ##################\n#Compute the quotient q\n######################### ############\nn:=max(Clifford:-maxindex(p1loc),Clifford:-maxindex(p2lo c));\ncbas:=Clifford:-cbasis(n):\nq:=add(c[i]*cbas[i],i=1..nops(cbas)) ;\neq:=Clifford:-clicollect(p1loc-Clifford:-wedge(q,p2loc)-r);\nsol:=o p(Clifford:-clisolve(eq,[seq(c[i],i=1..nops(cbas))]));\nq:=subs(sol,q) ;\nreturn r,q;\nend proc:\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 240 "Lef tGDivide:=proc(p1::\{clipolynom,climon,clibasmon\},p2::\{clipolynom,cl imon,clibasmon\},MonOrder) local p;\noptions `Copyright (c) 2006-2009 \+ by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\nretu rn GfG:-GDivide(args);\nend proc:\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 796 "RightGDivide:=proc(p1::\{clipolynom,climon,clibasmon\},p2::\{clip olynom,climon,clibasmon\},MonOrder) local p1tilde,p2tilde,monorder,rL, qL;\noptions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfrie d Fauser. All rights reserved.`;\np1tilde:=Clifford:-reversion(p1,lina lg[diag](1$9));\np2tilde:=Clifford:-reversion(p2,linalg[diag](1$9));\n if nargs=3 then \n rL:=GfG:-GDivide(p1tilde,p2tilde,args[3]);\n re turn Clifford:-reversion(rL,linalg[diag](1$9));\nend if:\nif not type( args[4],symbol) then error `fourth optional argument must be of type s ymbol` end if:\nif nargs=4 then \n rL,qL:=GfG:-GDivide(p1tilde,p2til de,args[3],args[4]);\n return Clifford:-reversion(rL,linalg[diag](1$ 9)),Clifford:-reversion(qL,linalg[diag](1$9));\nend if:\nerror `only t hree or four arguments are expected`;\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 1067 "12. Procedure GLCM is the Grassmann LCM of two Grassman n monomials of type 'climon' or 'clibasmon'. It uses the fact that AP \+ = Clifford:-RC(A,reversion(C)), where Clifford:-RC is the right contra ction of A by C: It contracts out the right factor C, that is, A = AP \+ &w C. Similarly, it extracts in the same way the C factor from the lft in B, that is, B = C &w BP, where C is the common factor (overlap of \+ indices) of A and B. It returns a list [AP, C, BP]. In the special cas e of no overlap, it returns C = Id, that is, [A,Id,B].\n\nNote: We tem porarily set B = diag(1$9) so that each basis vector e_i would contact to 1, that is, LC(e_i,e_j) = RC(e_i,e_j) = 1, when i = j, and 0, when i <> j.\n\nWarning: GLCM returns signed factors of the least common m ultiple of monomials m1 and m2 \n\nActually a Grassmann algebra is a g raded commutative algebra! Hence a bimodule is graded commutative isom orphic to a left or right module. In this sense, a Grassmann algebra b ehaves like a (graded) commutative algebra. The sign accounts for the \+ right action written as left action! \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 389 "GLCM:=proc(A::\{clibasmon,climon\},B::\{clibasmon,climon\}) l ocal C,AP,BP;\noptions `Copyright (c) 2006-2009 by Rafal Ablamowicz an d Bertfried Fauser. All rights reserved.`;\n C:=GfG:-CommonFactor(A, B);\n AP:=Clifford:-RC(A,Clifford:-reversion(C,linalg[diag](1$9)),li nalg[diag](1$9));\n BP:=Clifford:-LC(Clifford:-reversion(C,linalg[di ag](1$9)),B,linalg[diag](1$9));\n [AP,C,BP];\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 2284 "13. Procedure 'GSpoly' computes a monic S-pol ynomial of two Grassmann polynomials w.r.t. the monomial order MonOrde r given as the third argument. We make use of the fact that Grassmann \+ algebra is almost commutative and we can act (up to a sign) by multipl ication from one side only. We will, therefore, get only one S-polynom ial. Output is 0 (one polynomial is a factor of the other or the two p olynomials are monomials) otherwise it returns the nonzero part where \+ the leading monomials are cancelled.\n\nHowever, in preparation for ex panding this package to Clifford algebras, we introduce LeftGSpoly and RightGSpoly for the left and the right S-polynomials.\n\nLeftGSpoly c omputes a left S-polynomial for two Grassmann polynomials p1 and p2 fo r the stated monomial order MonOrder. That is, the left S-polynomial o f p1 and belongs to a left ideal LI generated by p1 and p2.\n\ncf1,lm1 :=LCoeff(p1,MonOrder),LMon(p1,MonOrder);\ncf2,lm2:=LCoeff(p2,MonOrder) ,LMon(p2,MonOrder);\nAP,C,BP:=op(GLCM(lm1,lm2));\nk,l :=nops(Clifford: -extract(lm1)),nops(Clifford:-extract(BP));\n\nThus, k = grade of the \+ leading monomial lm1 of p1; l = grade of the monomial BP where monomia ls AP,C, BP are as follows:\n\nlm1 = AP &w C;\nlm2 = C &w BP\n\nThus, \+ the product \n\nlm1 &w BP = AP &w lm2 \n\nbecause\n\nlm1 &w BP = AP &w C &w BP = AP &w lm2. \n\nThen, the left S-polynomial is \n\n(-1)^(k* l)*Clifford:-wedge(BP,p1)/cf1-Clifford:-wedge(AP,p2)/cf2.\n\nRightGSpo ly computes a right S-polynomial for two Grassmann polynomials p1 and \+ p2 for the stated monomial order MonOrder. That is, the right S-polyno mial of p1 and belongs to a right ideal RI generated by p1 and p2.\n\n cf1,lm1:=LCoeff(p1,MonOrder),LMon(p1,MonOrder);\ncf2,lm2:=LCoeff(p2,Mo nOrder),LMon(p2,MonOrder);\nAP,C,BP:=op(GLCM(lm1,lm2));\nk,l :=nops(Cl ifford:-extract(lm2)),nops(Clifford:-extract(AP));\n\nThus, k = grade \+ of the leading monomial lm2 of p2; l = grade of the monomial AP where \+ monomials AP,C, BP are as follows:\n\nlm1 = AP &w C;\nlm2 = C &w BP\n \nThus, the product \n\nlm1 &w BP = AP &w lm2 \n\nbecause\n\nlm1 &w BP = AP &w C &w BP = AP &w lm2. \n\nThen, the right S-polynomial is \n \nClifford:-wedge(p1,BP)/cf1-(-1)^(k*l)*Clifford:-wedge(p2,AP)/cf2.\n \n\nNOTE: There is no need for left and right S-polynomials as they al l equal S-polynomial returned by the procedure GSpoly.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 542 "GSpoly:=proc(p1::\{clipolynom,climon,clibasm on\},p2::\{clipolynom,climon,clibasmon\},MonOrder) local lm1,lm2,lst,c f1,cf2,sp;\noptions `Copyright (c) 2006-2009 by Rafal Ablamowicz and B ertfried Fauser. All rights reserved.`;\n cf1,lm1:=GfG:-LCoeff(p1,Mo nOrder),GfG:-LMon(p1,MonOrder);\n cf2,lm2:=GfG:-LCoeff(p2,MonOrder), GfG:-LMon(p2,MonOrder);\n lst:=GfG:-GLCM(lm1,lm2);\n sp:=Clifford: -wedge(p1,lst[3])/cf1-Clifford:-wedge(lst[1],p2)/cf2;\n if sp=0 then return 0 else\n return sp/GfG:-LCoeff(sp,MonOrder);\n \+ end if:\nend proc:\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 695 "LeftGSpo ly:=proc(p1::\{clipolynom,climon,clibasmon\},p2::\{clipolynom,climon,c libasmon\},MonOrder) local lm1,lm2,AP,C,BP,cf1,cf2,k,l,p1loc,p2loc,sp; \noptions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried F auser. All rights reserved.`;\n p1loc,p2loc:=p1,p2:\n cf1,lm1:=GfG :-LCoeff(p1loc,MonOrder),GfG:-LMon(p1loc,MonOrder);\n cf2,lm2:=GfG:- LCoeff(p2loc,MonOrder),GfG:-LMon(p2loc,MonOrder);\n AP,C,BP:=op(GfG: -GLCM(lm1,lm2));\n k,l:=nops(Clifford:-extract(lm1)),nops(Clifford:- extract(BP));\n sp:=simplify((-1)^(k*l)*Clifford:-wedge(BP,p1loc)/cf 1-Clifford:-wedge(AP,p2loc)/cf2);\n if sp=0 then return 0 else\n \+ return sp/GfG:-LCoeff(sp,MonOrder);\n end if: \nend proc :\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 671 "RightGSpoly:=proc(p1::\{cli polynom,climon,clibasmon\},p2::\{clipolynom,climon,clibasmon\},MonOrde r) local lm1,lm2,AP,C,BP,cf1,cf2,k,l,p1loc,p2loc,sp;\noptions `Copyrig ht (c) 2006-2009 by Rafal Ablamowicz and Bertfried Fauser. All rights \+ reserved.`;\n p1loc,p2loc:=p1,p2:\n cf1,lm1:=LCoeff(p1loc,MonOrder ),LMon(p1loc,MonOrder);\n cf2,lm2:=LCoeff(p2loc,MonOrder),LMon(p2loc ,MonOrder);\n AP,C,BP:=op(GLCM(lm1,lm2));\n k,l:=nops(Clifford:-ex tract(lm2)),nops(Clifford:-extract(AP));\n sp:=simplify(Clifford:-we dge(p1loc,BP)/cf1-(-1)^(k*l)*Clifford:-wedge(p2loc,AP)/cf2);\n if sp =0 then return 0 else\n return sp/GfG:-LCoeff(sp,MonOrd er);\n end if: \nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 377 "14. Pr ocedure \"make_rnd_list\" makes a random list of N Clifford polynomial s of type clibasmon, climon, or clipolynom in a Clifford or Grassmann \+ algebra over a space of dimension n. The procedure does not return a z ero polynomial. If one of its randomly generated polynomials happens t o be zero, it recursively calls itself until it returns exactly N nonz ero such polynomials. \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 286 "make_r nd_list:=proc(N::posint,n::posint) local F,k;\noptions `Copyright (c) \+ 2006-2009 by Rafal Ablamowicz and Bertfried Fauser. All rights reserve d.`;\nF:=remove(member,[seq(Clifford:-rd_clipolynom(n),k=1..N)],[0]); \nif nops(F) " 0 "" {MPLTEXT 1 0 2051 "make_ rnd_polynomial_in_ideal:=proc(F::list(\{clibasmon,climon,clipolynom\}) ) local FF,N,prod,side,coef;\noptions `Copyright (c) 2006-2009 by Rafa l Ablamowicz and Bertfried Fauser. All rights reserved.`;\nFF:=convert (convert(F,set),list):\n############################################## ######################################################\nif nargs=2 or \+ nargs=3 or nargs=4 then\n if not type(args[2],posint) then \n e rror `second argument, when used, must be a positive integer N that gi ves maximum index (dimension) that may appear in the output polynomial ` end if:\nend if: \nif nargs=3 or nargs=4 then\n if not member(arg s[3],\{\"cmul\",\"wedge\"\}) then \n error `third argument, when \+ used, must be \"wedge\" (the wedge product) or \"cmul\" (the Clifford \+ product)` end if:\nend if:\nif nargs=4 then\n if not member(args[4], \{left,'left',right,'right'\}) then \n error `fourth argument, wh en used, must be left, 'left', right, or 'right'` end if:\nend if:\n## ###################################################################### ############################\nif nargs=2 or nargs=3 or nargs=4 then N: =args[2] else N:=Clifford:-maxindex(FF) end if:\nif nargs=3 or nargs=4 then \n if nargs[3]=\"cmul\" then prod:=Clifford:-cmul else prod:=C lifford:-wedge end if:\n else prod:=Clifford:-wedge \nend if:\nif na rgs=4 then side:=args[4] else side:=left end if:\n#################### ###################################################################### ##########\nif N. It contains all possible monomials in th e generators (with a1a2 <> a2a1). Then, k denotes a free algebra ov er a field k spanned by the monomials in S. For us, instead of S we ta ke all signed basis monomials in the Grassmann algebra in dimension n, while for k we take instead the Grassmann algebra in n dimensions. \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 225 "SemiGroupS:=proc(n::posint ,MonOrder) local L,m;\noptions `Copyright (c) 2006-2009 by Rafal Ablam owicz and Bertfried Fauser. All rights reserved.`;\nL:=sort(Clifford:- cbasis(n),MonOrder):\n[seq(m,m=L),seq((-1)*m,m=L)];\nend proc:\n" }} {PARA 0 "" 0 "" {TEXT -1 788 "17. Procedure 'SemiGroupIdealT' finds a \+ monomial basis for a semigroup ideal T(G) in the semigroup (monoid) S \+ (signed Grassmann monomials in N dimensions) generated by the leading \+ terms T(g) of polynomials g in the list G that are maximal with respec t to the (admissible) monomial order MonOrder. This procedure returns \+ basis monomials for this ideal obtained by taking products of all sign ed basis monomials returned by SemiGroupS and the leading monomials T( g), g in G. Notation and definition from [Mora]. \n\nSame notation in \+ [Mora] is used to denote T(I) for each left, right, or two-sided ideal I in k, where T(I) denotes likewise left, right, or two sided semi group ideal of S generated by the leading monomials of polynomials f i n I with respect to the monomial order MonOrder.\n " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 574 "SemiGroupIdealT:=proc(G::list(\{clipolynom,climon ,clibasmon\}),N::posint,MonOrder) local cbas,maxind,maxterms,m,n;\nopt ions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried Fauser . All rights reserved.`;\ndescription `Uses Mora's definition and algo rithm in [Mora] on page 2`;\ncbas:=GfG:-SemiGroupS(N,MonOrder);\nmaxin d:=Clifford:-maxindex(G):\nif N. \n\nRecall tha t O(I) is a (left, right, two-sided) order ideal in S (we should proba bly say k due to zero being included) such that (see [Mora]):\n\n- \+ for each l,r,t in S (signed Grassmann monomial basis), wedge(l,t,r) in O(I) implies t in O(I) (two-sided case)\n\n- for each l,t in S (signe d Grassmann monomial basis), wedge(l,t) in O(I) implies t in O(I) (lef t case) \n\n Thus, the `union`(SemiGroupIdealT(G,N), OrderIdealO(G,N)) = S (signed Grassmann monomial basis in Grassmann algebra in N dimens ions) and `intersect`(SemiGroupIdealT(G,N), OrderIdealO(G,N)) = empty \+ set. \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 445 "OrderIdealO:=proc(plst: :list(\{clipolynom,climon,clibasmon\}),N::posint,MonOrder) local m,n,l ocmons,maxterms,mindex,cbas,locT;\noptions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\ndescri ption `Uses Mora's definition and algorithm in [Mora] on page 4`;\ncba s:=convert(GfG:-SemiGroupS(N,MonOrder),set);\nlocT:=convert(GfG:-SemiG roupIdealT(plst,N,MonOrder),set);\nconvert(`minus`(cbas,locT),list);\n end proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 1022 "19. Procedure 'chooseg1' finds, if possible, for the given polynomial f, a monic polynomial g \+ in (left, right, two-sided) ideal I generated by polynomials specifie d in the list L such that LT(g) = LT(f) in the given monomial order Mo nOrder. If such polynomial does not exist then the procedure returns 0 ; otherwise, it returns a monic polynomial g with the specified proper ty. Everything is computed in the Grassmann algebra k in dimension \+ equal to the maximum index in f and the list L. It is needed in the pr ocedure CanForm that follows algorithm in [Mora].\n\nWhen used with th ree arguments, I by default is assumed to be a left ideal. Polynomial coefficients on the left.\n\nWhen used with an optional fourth argume nt left or 'left', I is assumed to be a left ideal (same result as not using elft at all). Polynomial coefficients on the left.\n\nWhen used with an optional fourth argument right or 'right', I is assumed to be a right ideal (same result as not using elft at all). Polynomial coe fficients on the right.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1314 "choo seg1:=proc(f::\{clipolynom,climon,clibasmon\},L::list(\{clipolynom,cli mon,clibasmon\}),MonOrder) local mL,mf,cli,i,j,c,d,eq,g,sol,mgf,m;\nop tions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried Fause r. All rights reserved.`;\nmL,mf:=Clifford:-maxindex(L),Clifford:-maxi ndex(f):\nm:=max(mL,mf);\ncli:=Clifford:-cbasis(m):\nfor i from 1 to n ops(L) do\n c[i]:=add(d[i,j]*cli[j],j=1..nops(cli)):\nend do:\n###### ###################################################################### ########################\nif nargs=3 then\n g:=Clifford:-clicollect( add(Clifford:-wedge(c[i],L[i]),i=1..nops(L))): #left ideal I\nelif nar gs=4 and member(args[4],\{left,'left'\}) then\n g:=Clifford:-clicoll ect(add(Clifford:-wedge(c[i],L[i]),i=1..nops(L))): #left ideal I\nelif nargs=4 and member(args[4],\{right,'right'\}) then\n g:=Clifford:- clicollect(add(Clifford:-wedge(L[i],c[i]),i=1..nops(L))): #right ideal I\nelse error `three or four arguments needed with 'left' or 'right' \+ being the optional fourth argument`\nend if:\n######################## ###################################################################### ######\neq:=Clifford:-clicollect(f-g);\nsol:=Clifford:-clisolve(eq,[se q(seq(d[i,j],i=1..nops(L)),j=1..nops(cli))]);\nif sol=[] then return 0 end if;\ng:=subs(sol[1],g);\ng:=g/GfG:-LCoeff(g,MonOrder);\nreturn g; \nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 942 "20. Procedure 'CanForm' decomposes a polynomial f into two components phi and h such that phi belongs to an ideal I (left, right) generated by a list plst while h \+ belongs to Span_k(O(I)) (the span of the order ideal O(I) = S \\ T(I) \+ where S is a free semigroup (not quite) and T(I) is the ideal generate d by the leading terms (with respect to the monomial order MonOrder). \+ Here S is generated by e1,e2,...e_N where N is the larger of the maxim um indices occuring in f and plst. It follows algorithm in [Mora] on p age 3.\n\n- When used with three arguments, ideal I is assumed to be a left ideal (default).\n\n- When used with the fourth optional argumen t 'left' or left, ideal I is assumed to be a left ideal. It calls pro cedure 'chooseg1' with the optional fourth argument.\n\n- When used wi th the fourth optional argument 'right' or right, ideal I is assumed t o be a right ideal. It calls procedure 'chooseg1' with the optional fo urth argument. \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 2118 "CanForm:=pro c(f::\{clipolynom,climon,clibasmon\},plst::list(\{clipolynom,climon,cl ibasmon\}),MonOrder) \n local p,ff,i,phi,h,ltermf,t,tg,g,flag, j,pos,termmemberposition,TI,N;\noptions `Copyright (c) 2006-2009 by Ra fal Ablamowicz and Bertfried Fauser. All rights reserved.`;\ndescripti on `Uses Mora's definition and algorithm in [Mora] on page 3`;\n###### ######################################################\ntermmemberposi tion:=proc(m::\{climon,clibasmon\},L::list(\{climon,clibasmon\}),MonOr der) local flag,i,TI,tm:\ntm:=GfG:-LMon(m,MonOrder):\nflag:=member(tm, map(GfG:-LMon,L,MonOrder)):\nif flag=false then return 0 end if:\nflag :=false:\nfor i from 1 to nops(L) while not flag do\n if tm=GfG:- LMon(L[i],MonOrder) then flag:=true end if:\nend do:\nreturn i-1;\nend :\n############################################################\nN:=ma x(Clifford:-maxindex(f),Clifford:-maxindex(plst)):\nTI:=GfG:-SemiGroup IdealT(plst,N,MonOrder):\ni:=0:\nh[0]:=0:\nphi[0]:=0:\nff[0]:=f:\nwhil e ff[i]<>0 do\n pos:=termmemberposition(GfG:-LMon(ff[i],MonOrder),TI ,MonOrder):\n ##return pos;##unremark for testing\n if pos=0 then \n phi[i+1]:=phi[i]:\n t:=GfG:-LCoeff(ff[i],MonOrder)*GfG:- LMon(ff[i],MonOrder);\n h[i+1]:=h[i]+t;\n ff[i+1]:=ff[i]-t; \n else\n ##t:=GfG:-LMon(ff[i],MonOrder);##not needed below\n \+ ##return(t,plst);##unremark for testing\n if nargs=3 then \n \+ tg:=GfG:-chooseg1(ff[i],plst,MonOrder):#finds a polynomial g i n left ideal I= such that T(g) = T(f[i]), lc(g) = 1\n elif \+ nargs=4 then\n tg:=GfG:-chooseg1(ff[i],plst,MonOrder,args[4]): #finds a polynomial g in left or right ideal I= such that T(g) = T(f[i]), lc(g) = 1\n else error `three or four arguments needed \+ with 'left' or 'right' being the optional fourth argument`\n end \+ if:\n ##return here;##unremark for testing\n if tg=0 then er ror `there is no g in I such that T(g) = T(f[i])` end if:\n g[i]: =tg;\n phi[i+1]:=phi[i]+GfG:-LCoeff(ff[i],MonOrder)*g[i];\n \+ h[i+1]:=h[i];\n ff[i+1]:=ff[i]-GfG:-LCoeff(ff[i],MonOrder)*g[i]; \n end if: \ni:=i+1:\nend do:\nreturn phi[i],h[i];\nend proc: \n" }} {PARA 0 "" 0 "" {TEXT -1 620 "21. Procedure 'leftidealmember' checks w hether the given polynomial f belongs to a left ideal generated by pol ynomials specified in the list L. If such polynomial does not exist th en the procedure returns false; otherwise it returns true. When used w ith a third optional argument, .e., 'c', it returns a list of polynomi al coefficients coe[i] such that f = add(wedge(coe[i],L[i]),i=1..nops (L)); \n\nNOTE: leftidealmember and rightidealmember use Clifford:-cli solve to determine whether the given polynomial belongs to the left or right ideal or not: That is, they do not use Groebner bases to determ ine ideal membership.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 912 "leftide almember:=proc(f,L::list(\{clipolynom,climon,clibasmon\})) local mL,mf ,cli,i,j,c,d,eq,g,sol,m;\noptions `Copyright (c) 2006-2009 by Rafal Ab lamowicz and Bertfried Fauser. All rights reserved.`;\nif f=0 then ret urn true end if:\nif not type(f,\{clipolynom,climon,clibasmon\}) then \+ error `f must be of type clipolynom, climon, or clibasmon` end if;\nmL ,mf:=Clifford:-maxindex(L),Clifford:-maxindex(f):\nm:=max(mL,mf);\ncli :=Clifford:-cbasis(m):\nfor i from 1 to nops(L) do\n c[i]:=add(d[i,j] *cli[j],j=1..nops(cli)):\nend do:\ng:=add(Clifford:-wedge(Clifford:-re order(c[i]),L[i]),i=1..nops(L)):###coefficients c[i] on the left\neq:= Clifford:-clicollect(Clifford:-reorder(f)-g);\nsol:=Clifford:-clisolve (eq,[seq(seq(d[i,j],i=1..nops(L)),j=1..nops(cli))]);\nif sol=[] then\n return(false);\nelse\n if nargs=2 then return(true);\n elif nar gs=3 then return([seq(subs(sol[1],c[i]),i=1..nops(L))]);\n end if;\n end if;\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 621 "22. Procedure 'r ightidealmember' checks whether the given polynomial f belongs to a ri ght ideal generated by polynomials specified in the list L. If such po lynomial does not exist then the procedure returns false; otherwise it returns true. When used with a third optional argument, .e., 'c', it \+ returns a list 'coe' of polynomial coefficients such that f = add(wed ge(L[i],coe[i]),i=1..nops(L)); \n\nNOTE: leftidealmember and rightidea lmember use Clifford:-clisolve to determine whether the given polynomi al belongs to the left or right ideal or not: That is, they do not use Groebner bases to determine ideal membership.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 914 "rightidealmember:=proc(f,L::list(\{clipolynom,climon ,clibasmon\})) local mL,mf,cli,i,j,c,d,eq,g,sol,m;\noptions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried Fauser. All rights re served.`;\nif f=0 then return true end if:\nif not type(f,\{clipolynom ,climon,clibasmon\}) then error `f must be of type clipolynom, climon, or clibasmon` end if;\nmL,mf:=Clifford:-maxindex(L),Clifford:-maxinde x(f):\nm:=max(mL,mf);\ncli:=Clifford:-cbasis(m):\nfor i from 1 to nops (L) do\n c[i]:=add(d[i,j]*cli[j],j=1..nops(cli)):\nend do:\ng:=add(Cl ifford:-wedge(Clifford:-reorder(L[i]),c[i]),i=1..nops(L)):###coefficie nts c[i] on the right\neq:=Clifford:-clicollect(Clifford:-reorder(f)-g );\nsol:=Clifford:-clisolve(eq,[seq(seq(d[i,j],i=1..nops(L)),j=1..nops (cli))]);\nif sol=[] then\n return(false);\nelse\n if nargs=2 then return(true);\n elif nargs=3 then return([seq(subs(sol[1],c[i]),i=1 ..nops(L))]);\n end if;\nend if;\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 464 "23. Procedure 'chooseg2' finds a polynomial g in the lis t G and l, r in S - Grassmann signed monomial basis - such that wedge( l,T(g),r) = Th where Th is the given basis monomial of type clibasmon, and T(g) is the leading term of g with respect to the monomial order \+ \nspecified as MonOrder. The procedure returns a sequence l,g,r, if l, g,r exist such that wedge(l,T(g),r) = Th, or, 0,0,0 if such elements c ould not be found. This procedure is needed by NormalForm.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 807 "chooseg2:=proc(Th::\{clibasmon\},G::list (\{clipolynom,climon,clibasmon\}),S::list(\{climon,clibasmon\}),MonOrd er) \nlocal mG,mTh,cli,i,j,c,d,eq,g,sol,mgf,flag1,flag2,Tg,l,r,ll,rr,g g;\noptions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\nmTh,mG:=Clifford:-maxindex(Th),Cliffo rd:-maxindex(G);\nflag1:=false:\nfor i from 1 to nops(G) while not fla g1 do\n g:=G[i]:\n Tg:=GfG:-LMon(g,MonOrder):\n flag2:=false: \n for l in S while not flag2 do\n for r in S while not flag 2 do\n ##print(l,Tg,r,Th);##unremark for testing\n \+ flag2:=evalb(Clifford:-wedge(l,Tg,r)=Th):\n if flag2 the n ll,gg,rr:=l,g,r end if:\n end do:\n end do:\n flag1:= flag2:\nend do;\nif flag1=false then return(0,0,0) else return(ll,gg,r r) end if;\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 269 "24. The follo wing procedure computes left normal form of a polynomial f with respec t to finite set G that generates a left ideal I and is a counterpart o f incomplete Gaussian reduction [Mora]. See his definition of normal f orm and Proposition 2.1 in [Mora] on page 6.\n\n" }{TEXT 260 11 "Defin ition:" }{TEXT -1 439 " Let G subset of k (free algebra - in our ca se it will be Grassmann algebra) and let I be the ideal (left, right) \+ generated by G, and let f be a polynomial in k. A normal form of f \+ w.r.t. G si an element h in k such that:\n\n(a) f - h belongs to I; \n(b) either h = 0 or T(h) does not belong to T(G), that is, the leadi ng term of h does not belong to the ideal T(G) in k that is being g enerated by the leading terms of the set G.\n\n" }{TEXT 259 22 "Propos ition 2.1 [Mora]" }{TEXT -1 179 "\nG is a Groebner basis of I if and o nly if for every f in k, and for every h, the normal form of f:\n\n - if h = 0 then f belongs to I;\n- if h <> 0 then f does not belong to I.\n\n " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 2014 "LeftNormalForm:=proc( f::\{cliscalar,clipolynom,climon,clibasmon\},G::list(\{clipolynom,clim on,clibasmon\}),MonOrder) \nlocal termmemberposition,S1,S2,h,pos,lch,T h,l,g,r,lcg,mf,mG,m,flag,RR;\noptions `Copyright (c) 2006-2009 by Rafa l Ablamowicz and Bertfried Fauser. All rights reserved.`;\ndescription `Uses Mora's definition and Mora's algorithm in [Mora] on page 6 modi fied by R.A.`;\n###################################################### ######\nRR:=map2(GfG:-LeftGDivide,f,G,MonOrder);\nif member(0,RR) then return 0 end if:\n################################################### #########\n##return(RR);##unremark for testing\n###################### ######################################\ntermmemberposition:=proc(m::\{ climon,clibasmon\},L::list(\{climon,clibasmon\}),MonOrder) local flag, i,TI,tm:\ntm:=GfG:-LMon(m,MonOrder):\nflag:=member(tm,map(GfG:-LMon,L, MonOrder)):\nif flag=false then return 0 end if:\nflag:=false:\nfor i \+ from 1 to nops(L) while not flag do\n if tm=GfG:-LMon(L[i],MonOrd er) then flag:=true end if:\nend do:\nreturn i-1;\nend:\n############# ###############################################\nmf,mG:=Clifford:-maxi ndex(f),Clifford:-maxindex(G);\nm:=max(mf,mG):\nS1:=GfG:-SemiGroupIdea lT(G,m,MonOrder):\n##return(S1);##unremark for testing\nS2:=GfG:-SemiG roupS(m,MonOrder):\nh:=f:\npos:=termmemberposition(GfG:-LMon(h,MonOrde r),S2,MonOrder):\n##return pos;##unremark for testing\nflag:=true:\nwh ile h<>0 and pos<>0 and flag do\n if pos<>0 then\n pos:=t ermmemberposition(GfG:-LMon(h,MonOrder),S2,MonOrder);\n lch,Th :=GfG:-LCoeff(h,MonOrder),GfG:-LMon(h,MonOrder);\n l,g,r:=GfG: -chooseg2(Th,G,S2,MonOrder):\n ##print(l,g,r);##unremark for t esting\n if g=0 then flag:=false \n else \n \+ lcg:=GfG:-LCoeff(g,MonOrder); \n h:=h-lch*lcg^(-1)*Clif ford:-wedge(l,g,r);\n ##print(newh,h);##unremark for testin g\n end if:\n if h <> 0 then pos:=termmemberposition(G fG:-LMon(h,MonOrder),S2,MonOrder) end if:\n end if;\nend do:\nretu rn h;\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 270 "25. The following \+ procedure computes right normal form of a polynomial f with respect to finite set G that generates a right ideal I and is a counterpart of i ncomplete Gaussian reduction [Mora]. See his definition of normal form and Proposition 2.1 in [Mora] on page 6.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1968 "RightNormalForm:=proc(f::\{cliscalar,clipolynom,cli mon,clibasmon\},G::list(\{clipolynom,climon,clibasmon\}),MonOrder) \nl ocal termmemberposition,S1,S2,h,pos,lch,Th,l,g,r,lcg,mf,mG,m,flag,RL; \noptions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried F auser. All rights reserved.`;\ndescription `Uses Mora's definition and algorithm in [Mora] on page 6`;\n#################################### ########################\nRL:=map2(GfG:-RightGDivide,f,G,MonOrder);\ni f member(0,RL) then return 0 end if:\n################################ ############################\n#return(RL);\n########################## ##################################\ntermmemberposition:=proc(m::\{clim on,clibasmon\},L::list(\{climon,clibasmon\}),MonOrder) local flag,i,TI ,tm:\ntm:=GfG:-LMon(m,MonOrder):\nflag:=member(tm,map(GfG:-LMon,L,MonO rder)):\nif flag=false then return 0 end if:\nflag:=false:\nfor i from 1 to nops(L) while not flag do\n if tm=GfG:-LMon(L[i],MonOrder) \+ then flag:=true end if:\nend do:\nreturn i-1;\nend:\n################# ###########################################\nmf,mG:=Clifford:-maxindex (f),Clifford:-maxindex(G);\nm:=max(mf,mG):\nS1:=GfG:-SemiGroupIdealT(G ,m,MonOrder):\n##return(S1);##unremark for testing\nS2:=GfG:-SemiGroup S(m,MonOrder):\nh:=f:\npos:=termmemberposition(GfG:-LMon(h,MonOrder),S 2,MonOrder):\n##return pos;##unremark for testing\nflag:=true:\nwhile \+ h<>0 and pos<>0 and flag do\n if pos<>0 then\n pos:=termm emberposition(GfG:-LMon(h,MonOrder),S2,MonOrder);\n lch,Th:=Gf G:-LCoeff(h,MonOrder),GfG:-LMon(h,MonOrder);\n l,g,r:=GfG:-cho oseg2(Th,G,S2,MonOrder):\n ##print(l,g,r);##unremark for testi ng\n if g=0 then flag:=false \n else \n \+ lcg:=GfG:-LCoeff(g,MonOrder); \n h:=h-lch*lcg^(-1)*Clifford :-wedge(l,g,r);\n ##print(newh,h);##unremark for testing\n \+ end if:\n if h <> 0 then pos:=termmemberposition(GfG:- LMon(h,MonOrder),S2,MonOrder) end if:\n end if;\nend do:\nreturn h ;\nend proc:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 367 "26.[OLD and OBSOLETE] (Replaced by LeftNormalForm and RightNor malForm) Procedure 'GReduce' takes a Grassmann polynomial p and divide d it by a list of polynomials [p1,...,pn], in that order, for the mono mial order MonOrder given as the third argument. It is a recursive app lication of GDivide. It returns the remainder of the division of p by \+ the list [p1,p2,...,pn].\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 529 "GRed uce:=proc(p::\{cliscalar,clipolynom,climon,clibasmon\},plst::list(\{cl ipolynom,climon,clibasmon\}),MonOrder) local i,r;\noptions `Copyright \+ (c) 2006-2009 by Rafal Ablamowicz and Bertfried Fauser. All rights res erved.`;\nWARNING(\"procedure GReduce is obsolete and produces wrong r esults. Use GfG:-CanForm, GfG:-LeftNormalForm, or GfG:-RightNormalForm \");\n if p=0 then return 0 end if;\n if nops(plst)=0 then return p \+ end if;\n r:=p:\n for i from 1 to nops(plst) while r<>0 do\n r:= GDivide(r,plst[i],MonOrder)\n end do:\nend proc:\n" }}{PARA 0 "" 0 " " {TEXT -1 245 "27. Procedure 'GGbasis' computes a Groebner basis for \+ the ideal generated by the elements of the list F of Grassmann polynom ials with respect to a monomial order MonOrder which has to be admissi ble, say Deg[Lex]. Check procedure 'isadmissible'.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 894 "GGbasis:=proc(F::list(\{clipolynom,climon,cliba smon\}),MonOrder) local Floc,N,N2,i,j,flag1,flag2,spoly,f;\noptions `C opyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried Fauser. All r ights reserved.`;\n#-- normalize the LMons in the list F\n#-- since no nzero coefficients make troubles in some comparisons....\nf:=(x)->x/LC oeff(x,MonOrder):\nFloc:=map(f,F):\nN:=nops(Floc);\nflag1:=evalb(N>1); \ni:=1:\nwhile flag1 do\n flag2:=true:\n N:=nops(Floc);\n for j fro m i+1 while flag2 do\n spoly:=GReduce(GSpoly(Floc[i],Floc[j],MonO rder),Floc,MonOrder);\n if spoly<>0 then\n spoly:=f(spoly ); \n if not member(+spoly,convert(Floc,set)) then \n \+ Floc:=[op(Floc),spoly]; \n end if;\n end if;\n N 2:=nops(Floc);\n flag2:=evalb(j " 0 "" {MPLTEXT 1 0 514 "minGGbasis:=proc(G::list(\{clipoly nom,climon,clibasmon\}),MonOrder) local keepinG,i,p,lp,Gp,lGp,r,co;\no ptions `Copyright (c) 2006-2009 by Rafal Ablamowicz and Bertfried Faus er. All rights reserved.`;\nkeepinG:=[]:\nfor i from 1 to nops(G) do\n p:=G[i];\n lp:=LMon(p,MonOrder);\n Gp:=remove(member,G,\{p\}):\n \+ lGp:=map(LMon,Gp,MonOrder);\n r:=map(GReduce,lp,lGp,MonOrder);\n if \+ r<>0 then \n co:=LCoeff(p,MonOrder);\n p:=p/co;\n \+ keepinG:=[op(keepinG),p] \n end if;\nend do:\nreturn keepinG; \nend proc:" }{TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 190 "29. Procedure 'multideg' returns the multidegree of a polynomial f with respect to the order specified by the second a rgument. One possible order is 'Lex' (lexicographic lex e1>e2>...>en) \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 215 "multideg:=proc(f::\{clibasm on,climon,clipolynom\},MonOrder) local p:\noptions `Copyright (c) 2006 -2009 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`; \n return makealpha(LMon(f,MonOrder)); \nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 45 "30. Procedure 'init' is automatically loaded." }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 1001 "init:=proc() \n# global `convert /set_to_pts`;\n local x,y,i,j;\n printf(\"GfG - Groebner for Grass mann 0.5 beta (December 20, 2008) says Hello...\\n\");\n printf(\"30 functions exported\\n\");\n printf(\"===>If you find this packages \+ useful, please let us know about your derived work.\\n\");\n printf( \"===>You can contact us at http://math.tntech.edu/rafal/ or http://cl ifford.physik.uni-konstanz.de/~fauser/\\n\");\n##\n# `convert/set_to _pts`:=proc(S) \n# local L,locsort:\n# L:=convert(S,list): \n# locsort:=(a,b)->lexorder(lhs(a),lhs(b));\n# L:=sort(L, locsort);\n# map(rhs,L);\n# end proc:\n##\nwith(Clifford):\npr intf(\"Clifford package with %d functions loaded...\\n\",nops(%));\n#w ith(Cliplus):\n#printf(\"Cliplus package with %d functions loaded...\\ n\",nops(%));\nwith(Bigebra):\nprintf(\"Bigebra package with %d functi ons loaded...\\n\",nops(%));\nend proc: \n\nexit:=proc()\n printf( \"GfG - Groebner for Grassmann 0.5 beta (December 20, 2008) says good \+ bye...\",%s\\n);\nend proc:\nend module:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "libname[1];" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "savelibname;" }}{PARA 0 "" 0 "" {TEXT -1 84 "Do not execute the ne xt command unless \"savelibname\" above returns \".../Cliffordlib\"" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "savelib('GfG');" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "with(LibraryTools);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "ShowContents(libname[1]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q 7C:\\Maple12/Cliffordlib6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q7C:\\M aple12/Cliffordlib6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#72%1Activatio nModuleG%1AddFromDirectoryG%'AuthorG%'BrowseG%3BuildFromDirectoryG%/Co nvertVersionG%'CreateG%'DeleteG%,FindLibraryG%,PrefixMatchG%)PriorityG %%SaveG%-ShowContentsG%*TimestampG%4UpdateFromDirectoryG%*WriteModeG" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#727&Q*Bigebra.m6\"7(\"%3?\"#7\"#?\"# ;\"#=\"#D\"'g&e&\"%_77&Q+Clifford.mF&7(F(F)F*\"#<\"#8\"#V\"'**fg\"%IC7 &Q*Cliplus.mF&7(F(F)F*F+F4\"#\\\"'x.a\"$l$7&Q/code_support.mF&7(F(F)F* F3\"#_\"#a\"'_:x\"$v%7&Q)Define.mF&7(F(F)F*F+\"#:F,\"'xJb\"$*[7&Q>P. mF&7(F(F)F*F+\"#K\"#c\"'b0e\"$!G7&Q&GfG.mF&7(F(F)F*F,\"\"'\"#C\"'s?y\" %187&Q<_implicitbezierpolynomial.mF&7(F(F)F*F3\"#F\"#`\"'Q\"R(\"&59\"7 &Q+matcompL.mF&7(F(F)F*F+\"#5\"#L\"'k#[$\"&=X(7&Q+matcompR.mF&F\\o\"'# yA%\"&^M(7&Q+matquatL.mF&F\\o\"'Li\\\"&9@#7&Q+matquatR.mF&F\\o\"'Z$=& \"&I?#7&Q+matrealL.mF&F\\o\"'1b6\"'9k67&Q+matrealR.mF&F\\o\"'?>B\"'Wj6 7&Q+Octonion.mF&7(F(F)F*F+\"#Q\"#P\"'`*)f\"$O%7&Q,RJgrobner.mF&7(F(F)F *F3Ffn\"#U\"'M4s\"%\\5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "with(code_support);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#%!G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #%inModule~code_cupport~ver.~1.03~for~CLIFFORD~et~al.~for~Maple~12G" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#%apCopyright~(c)~2002-2009~by~Rafal~A blamowicz~and~Bertfried~Fauser.~All~rights~reserved.G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%@Last~revised:~December~20,~2008G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%!G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7-%/NamesIn LibraryG%1change_helpfilesG%,change_nameG%*copy_fileG%)get_TEXTG%(get_ dirG%1insert_helppagesG%)makeLISTG%+modifyLISTG%0replace_in_fileG%&spl itG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "NamesInLibrary(libna me[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*Bi gebra.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q&GfG.m6\"" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#Q+matcompL.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q<_implicitbezierpolynomial.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #Q+matrealR.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+Octonion.m6\"" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#Q,RJgrobner.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q)Define.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+Clif ford.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+matrealL.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q/code_support.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q*Cliplus.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q>P .m6\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "restart:restart:" }}{PARA 6 "" 1 "" {TEXT -1 74 "GfG - Groebner for Grassmann 0.5 beta (December 20, 2008) says good bye..." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "with(G fG):" }}{PARA 6 "" 1 "" {TEXT -1 71 "GfG - Groebner for Grassmann 0.5 \+ beta (December 20, 2008) says Hello..." }}{PARA 6 "" 1 "" {TEXT -1 21 "30 functions exported" }}{PARA 6 "" 1 "" {TEXT -1 81 "===>If you find this packages useful, please let us know about your derived work." }} {PARA 6 "" 1 "" {TEXT -1 106 "===>You can contact us at http://math.tn tech.edu/rafal/ or http://clifford.physik.uni-konstanz.de/~fauser/" }} {PARA 6 "" 1 "" {TEXT -1 44 "Clifford package with 84 functions loaded ..." }}{PARA 6 "" 1 "" {TEXT -1 83 "Increase verbosity by infolevel[`f unction`]=val -- use online help > ?Bigebra[help]" }}{PARA 6 "" 1 "" {TEXT -1 43 "Bigebra package with 33 functions loaded..." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 89 "#test for Cliffords functionality\n cmul(e1,e2);\n#test for Bigebras functionality\n&gco(e1);" }}{PARA 6 " " 1 "" {TEXT -1 122 "Cliplus has been loaded. Definitions for type/cli mon and type/clipolynom now include &C and &C[K]. Type ?cliprod for he lp." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&%&e1we2G\"\"\"*&&%\"BG6$F%\" \"#F%%#IdGF%F%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&-%#&tG6$%#IdG%#e1G \"\"\"-F%6$F(F'F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 35 "Cookeville/Konstanz, March 05, 200 8" }}}}{MARK "9 0 0" 21 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 } {PAGENUMBERS 0 1 2 33 1 1 }