{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 7306 "# Date: June 22, 2 008\nrestart:\n#\n# This is the source code file of the \"GfG - Groebn er for Grassmann\" package\n# File: Groebner.for.Grassmann_22vi08_M11. mws\n#\n# Copyright (c) Rafal Ablamowicz & Bertfried Fauser 2006-2008, all rights reserved.\n#\n############################################ ###################################\n# \+ #\n# DISCLAIMER: \+ #\n# \+ #\n # THERE IS NO WARRANTY FOR THE GROEBNER FOR GRASSMANN PACKAGE TO THE \+ EXTENT #\n# PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATE D IN WRITING THE #\n# COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVID E THE PROGRAM \"AS IS\" WITHOUT #\n# WARRANTY OF ANY KIND, EITHER EXP RESSED OR IMPLIED, INCLUDING, BUT NOT #\n# LIMITED TO, THE IMPLI ED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #\n# A PARTICUL AR 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 CORR ECTION. #\n# \+ #\n####################################### ########################################\n#\n# If you want to use thi s code or parts of it under a GPL LICENCE, please\n# contact the auth ors:\n# rablamowicz tntech.edu or \n# fauser spock.physik.uni-konstanz.de\n#\n#\n# +++ The package extends the C lifford and Bigebra packages.\n# +++ It computes Groebner bases for Gr assmann algebras.\n#\n# +++ Main functions are:\n# --- Orders:\n# \+ -- Lex : Lexicographical ordering e1>e2, e1we3>e1we3we4 ...\n # -- InvLex : Inverse Lexicographical ordering\n# -- Rev Lex : Reverse Lexicographical ordering\n# -- InvRevLex : \+ Inverse Reverse Lexicographical ordering\n# -- Deg[] : Degr ee ordering, needs an argument to become a total order (admissible), f or example Deg[Lex] and Deg[InvLex] are admissible orders.\n# -- I nvDeg[...] : Inverse Degree ordering \n#\n# --- GDivide \+ : GDivide implements the Grassmann left division algorithm (anot her name is LeftGDivide)\n#\n# --- LeftGDivide : LeftGDivide is a nother name for GDivide\n#\n# --- RightGDivide : RightGDivide impl ements 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 Multip le) takes as input a pair of \n# Grassmann m onomials [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 two Grassmann polynomials (same as left and right Spolynom)\n#\n# --- Lef tGSpoly : LeftGSpoly computes left Grassmann Spolynom of two Gra ssmann polynomials \n#\n# --- RightGSpoly : RighGSpoly computes r ight Grassmann Spolynom of two Grassmann polynomials\n#\n# --- make_rn d_list : makes a random list of N nonzero Clifford polynomials in d imension up to n\n#\n# --- make_rnd_polynomial_in_ideal : makes a rand om polynomial in left or right Grassmann or Clifford ideal\n#\n# --- S emiGroupS : makes a signed basis in Grassmann algebra (a la free algeb ra k over a free monoid basis in S)\n#\n# --- SemiGroupIdealT : mak es a Grassmann monomial basis in a semigroup ideal T(G) or T(I) in S g enerated 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 algeb ra k (Grassmann algebra in our case) \n#\n# --- OrderIdealO : mak es a Grassmann monomial basis in a semigroup ideal T(G) in S generated 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 (left , right, two-sided) ideal I generated by polynomials specified \n# \+ in the list L such that LT(g) = LT(f) in the given monomi al order MonOrder. If such polynomial does not exist then the procedur e returns 0;\n# otherwise, it returns a monic polynomia l g with the specified property. Needed in CanForm. See also [Mora].\n #\n# --- CanForm : decomposes polynomial f into two components phi and h such that phi belongs to an ideal I (left,right) generated by a lis t plst while h \n# belongs to Span_k(O(I)) (the span of \+ the order ideal O(I) = S \\ T(I) where S is a free semigroup (not quit e) and T(I) is the ideal generated \n# by the leading te rms (with respect to the monomial order MonOrder). Here S is generated by e1,e2,...e_N where N is the larger of the maximum\n# \+ indices occuring in f and plst.\n#\n# --- leftidealmember : checks wh ether given polynomial f belongs to a left ideal generated by polynomi als specified in the list L. If such polynomial does \n# \+ not exist then the procedure returns false; otherwise it retu rns true. When used with a third optional argument, .e., 'c', it retur ns \n# a list of polynomial coefficients coe[i] \+ such that f = add(wedge(coe[i],L[i]),i=1..nops(L)); \n#\n# --- righti dealmember : checks whether the given polynomial f belongs to a right \+ ideal generated by polynomials specified in the list L. If such polyno mial \n# does not exist then the procedure retu rns false; otherwise it returns true. When used with a third optional \+ argument, .e., 'c', it\n# returns a list polyno mial coefficients coe[i] such that f = add(wedge(L[i],coe[i]),i=1..nop s(L));\n# --- chooseg2 : finds a polynomial g in a list G and l, r in \+ S - Grassmann signed monomial basis - such that wedge(l,T(g),r) = Th w here Th is the given \n# basis monomial of type clibasm on, and T(g) is the leading term of g with respect to the monomial ord er specified as MonOrder. The procedure\n# returns a se quence 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 n ormal form of a polynomial f with respect to finite set G that generat es a left ideal I and is a counterpart of \n# inc omplete Gaussian reduction [Mora]. See his definition of normal form a nd Proposition 2.1 in [Mora] on page 6.\n#\n# --- RightNormalForm : co mputes right normal form of a polynomial f with respect to finite set \+ G that generates a right ideal I and is a counterpart of \n# \+ incomplete Gaussian reduction [Mora]. See his definition o f normal form and Proposition 2.1 in [Mora] on page 6.\n#\n# --- GRedu ce : GReduce reduces a Grassmann polynomial w.r.t a list of Grassmann \+ polynomials [OBSOLETE: DOES NOT WORK WELL! Replaced with LeftNormalFor m and\n# RightNormalForm\n#\n# --- GGbasis : co mputes a Groebner basis?\n# --- minGGbasis : transforms a Groebn er 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,mak ealpha,leftmost,rightmost,\n Lex,InvLex,RevLex,InvRevLex,Deg,Inv Deg,\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,rightidea lmember,\n chooseg2,LeftNormalForm,RightNormalForm,\n GRed uce,\n GGbasis,minGGbasis,\nmake_rnd_list,\nmake_rnd_polynomial_ in_ideal;\n###################################\n##\n## -- list of loc al routines\n## \nlocal init,exit;\noption package, \n load=init ,\n unload=exit;\n" }}{PARA 0 "" 0 "" {TEXT -1 11 "0. Version\n " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1206 "version:= proc()\noptions `Co pyright (c) 2006-2008 by Rafal Ablamowicz and Bertfried Fauser. All ri ghts reserved.`;\ndescription `Last revised: June 22, 2008, 2008`;\npr int(`+++++++++++++++++++++++++++++++++++++++++++`);\nprint(`GfG - Groe bner for Grassmann - A Maple 11 Package for Groebner Bases for Grassma nn Algebras`); \nprint(`Last revised: June 22, 2008 (Source file: Groe bner.for.Grassmann_22vi08_M11.mws)`);\nprint(`Copyright 2006-2008 by R afal Ablamowicz (*) and Bertfried Fauser ($)`);\nprint(`with contribut ions from Troy Brachey (*)`);\nprint(``);\nprint(`(*) Department of Ma thematics, Box 5054`);\nprint(` Tennessee Technological University, Cookeville, TN 38505`);\nprint(` tel: USA (931) 372-3662, fax: USA (931) 372-6353`);\nprint(` rablamowicz@tntech.edu`);\nprint(` h ttp://math.tntech.edu/rafal/`);\nprint(``);\nprint(`($) Universit\"at \+ Konstanz, Fachbereich Physik, Fach M678`);\nprint(` 78457 Konstanz, Germany`);\nprint(` Bertfried.Fauser@uni-konstanz.de`);\nprint(` \+ http://clifford.physik.uni-konstanz.de/~fauser/`); \nprint(` htt p://math.tntech.edu/rafal/`);\nprint(``);\nprint(`++++++++++++This is \+ GfG - Groebner for Grassmann for Maple 11 version 0.6++++++++++++`);\n end proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 318 "1. Procedure 'tilde' take s a Grassmann polynomial X, that is, an expression of `type/clipolynom `, or, `type/climon`, or `type/clibasmon` and returns a new polynomial tilde(X) with the same monomial terms except that the coefficients go t 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 -2008 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`; \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;\n else\n return `+`(op(map('procname',[op(f)])))\nend if;\nend proc: \n" }}{PARA 0 "" 0 "" {TEXT -1 251 "2. Procedure 'makealpha' assigns t o a 'climon' or 'clibasmon' a vector of length 9 with entries 0 and 1. If a location i, 1<= i <= 9, has 1, then e_i is present in the 'cliba smon' or 'climon'. If that location has 0, then the generator e_i is a bsent.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 348 "makealpha:=proc(m::\{c libasmon,climon\}) local p,v,i;\noptions `Copyright (c) 2006-2008 by R afal Ablamowicz and Bertfried Fauser. All rights reserved.`;\nv:=Vecto r[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 returns 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:\noptions `Co pyright (c) 2006-2008 by Rafal Ablamowicz and Bertfried Fauser. All ri ghts reserved.`;\nif LinearAlgebra:-Equal(v,Vector[row](9,0)) then ret urn 0 end if:\nflag:=false:\nfor i from 1 to 9 while not flag do\n \+ if v[i]<>0 then flag:=true; return v[i] end if;\nend do;\nend proc:\n " }}{PARA 0 "" 0 "" {TEXT -1 159 "4. Procedure 'rightmost' finds and r eturns the rightmost 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 330 "rightmost:=proc(v::Vector) local i,flag:\nopt ions `Copyright (c) 2006-2008 by Rafal Ablamowicz and Bertfried Fauser . 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 while not flag do\n if v[i]<>0 then flag:=true; return v[i] end if;\nend do; \nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 197 "5. Procedures shown bel ow provide various monomial orders on monomials in the Grassmann algeb ra /\\ 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 mon omials is admissible if\n\n1. m > 1 for every monomial m in the Grassm ann 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\nNOTE: Not all of these orders below are admissible, for example, RevLex, In vRevLex, and InvDeg[Lex] orders are NOT admissible because they violat e the first condition that m > 1 for every m in the Grassmann basis. T he remaining orders are admissible. Check procedure 'isadmissible'\n\n Let a monomial m = e^alpha = (e1^alpha1 &w e2^alpha2) &w (...) &w (e9^ alpha9) where alpha = [alpha1, alpha2, ..., alpha9]. Of course, each a lphai = 0 or 1 as ei^alphai = &w(ei,ei,...,ei) = 0 if alphai >=2. We a lso agree that ei^0 = Id in the Grassmann algebra /\\. We will refer t o the list alpha also as a vector. \n\nIn the following let m1 = e^alp ha and m2 = e^beta.\n\n'Lex(m1,m2)' returns true if either the differe nce vector alpha - beta is the zero vector or the leftmost non-zero en try in alpha - beta is positive, in which case we say m1 >= m2. Otherw ise it returns false, in which case we say that m1 < m2. For example, \+ it gives a lexicographic order on generators e1>e2>...>e9 (NOT ADMISSI BLE in general but admissible in Grassmann algebra).\n\n'InvLex(m1,m2) ' returns true if either the difference vector alpha - beta is the ze ro vector or the rightmost non-zero entry in alpha - beta is positive, in which case we say m1 >= m2. Otherwise it returns false, in which c ase we say that m1 < m2. For example, it gives the inverse lexicograph ic order on generators e9>e8>...>e1 (NOT ADMISSIBLE in general and not admissible in Grassmann algebra) \n\n'RevLex(m1,m2)' returns true if either the difference vector alpha - beta is the zero vector or the r ightmost 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 example, it gives the reverse lexicographic order on genera tors e1>e2>...>e9 (NOT ADMISSIBLE in general and not admissible in Gra ssmann algebra) \n\n'InvRevLex(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 negative, 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 the reverse lexicographic order on generators e1>e2>...>e 9 (NOT ADMISSIBLE in general but admissible in Grassmann algebra) \n \n'Deg' procedure takes as index (parameter) any of the above monomial orders T and uses that order to resolve total degree ties: It first c omputes a degree (grade) of two monomial terms m1, m2, and it returns \+ true if the total degree |m1| > |m2|. When |m1| < |m2| it returns fals e, and when the degrees are equal |m1| = |m2|, it uses the order T to \+ determine the order. (NOT ADMISSIBLE in general but admissible in Gra ssmann algebra)\n\n'InvDeg' procedure takes as index (parameter) any o f the above monomial orders T and uses that order to resolve total deg ree 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 general b ut admissible in Grassmann algebra for all orders T except InvDeg[Lex] is not admissible)\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1352 "Lex:=pro c(m1::\{clibasmon,climon\},m2::\{clibasmon,climon\}) local a1,a2;\nopt ions `Copyright (c) 2006-2008 by Rafal Ablamowicz and Bertfried Fauser . All rights reserved.`;\na1,a2:=makealpha(m1),makealpha(m2);\nif Line arAlgebra:-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:=proc (m1::\{clibasmon,climon\},m2::\{clibasmon,climon\}) local a1,a2;\nopti ons `Copyright (c) 2006-2008 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\na1,a2:=makealpha(m1),makealpha(m2);\nif Linea rAlgebra:-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:=proc (m1::\{clibasmon,climon\},m2::\{clibasmon,climon\}) local a1,a2;\nopti ons `Copyright (c) 2006-2008 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\na1,a2:=makealpha(m1),makealpha(m2);\nif Linea rAlgebra:-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:=p roc(m1::\{clibasmon,climon\},m2::\{clibasmon,climon\}) local a1,a2;\no ptions `Copyright (c) 2006-2008 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 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:=pro c(m1::\{clibasmon,climon\},m2::\{clibasmon,climon\}) local a1,a2,order ;\noptions `Copyright (c) 2006-2008 by Rafal Ablamowicz and Bertfried \+ 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\nInvDeg:=p roc(m1::\{clibasmon,climon\},m2::\{clibasmon,climon\}) local a1,a2,ord er;\noptions `Copyright (c) 2006-2008 by Rafal Ablamowicz and Bertfrie d 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 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-2008 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-2008 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-2008 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-2008 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-2008 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-2008 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-2008 \+ 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-2008 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-2008 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-2008 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-2008 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-2008 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-2008 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-2008 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-2008 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-2008 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-2008 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-2008 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 2236 "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-2008 by Ra fal Ablamowicz and Bertfried Fauser. All rights reserved.`;\ndescripti on `Uses Mora's definition and algorithm in [Mora] on page 3`;\n###### ######################################################\nWARNING(\"proc edure CanForm may produce wrong results. It uses Mora's definition and algorithm in [Mora] on page 3.\");\ntermmemberposition:=proc(m::\{cli mon,clibasmon\},L::list(\{climon,clibasmon\}),MonOrder) local flag,i,T I,tm:\ntm:=GfG:-LMon(m,MonOrder):\nflag:=member(tm,map(GfG:-LMon,L,Mon Order)):\nif flag=false then return 0 end if:\nflag:=false:\nfor i fro m 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:=max(Clifford:-maxinde x(f),Clifford:-maxindex(plst)):\nTI:=GfG:-SemiGroupIdealT(plst,N,MonOr der):\ni:=0:\nh[0]:=0:\nphi[0]:=0:\nff[0]:=f:\nwhile ff[i]<>0 do\n p os:=termmemberposition(GfG:-LMon(ff[i],MonOrder),TI,MonOrder):\n ##r eturn 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:-cho oseg1(ff[i],plst,MonOrder):#finds a polynomial g in 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 'rig ht' being the optional fourth argument`\n end if:\n ##return here;##unremark for testing\n if tg=0 then error `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 whether the given polynomial f belongs to a left ideal generated by polynomials specifi ed in the list L. If such polynomial does not exist then the procedure returns false; otherwise it returns true. When used with a third opti onal argument, .e., 'c', it returns a list of polynomial coefficients \+ coe[i] such that f = add(wedge(coe[i],L[i]),i=1..nops(L)); \n\nNOTE: \+ leftidealmember and rightidealmember use Clifford:-clisolve to determi ne whether the given polynomial belongs to the left or right ideal or \+ not: That is, they do not use Groebner bases to determine ideal member ship.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 912 "leftidealmember:=proc(f ,L::list(\{clipolynom,climon,clibasmon\})) local mL,mf,cli,i,j,c,d,eq, g,sol,m;\noptions `Copyright (c) 2006-2008 by Rafal Ablamowicz and Ber tfried Fauser. All rights reserved.`;\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:-m axindex(L),Clifford:-maxindex(f):\nm:=max(mL,mf);\ncli:=Clifford:-cbas is(m):\nfor i from 1 to nops(L) do\n c[i]:=add(d[i,j]*cli[j],j=1..nop s(cli)):\nend do:\ng:=add(Clifford:-wedge(Clifford:-reorder(c[i]),L[i] ),i=1..nops(L)):###coefficients c[i] on the left\neq:=Clifford:-clicol lect(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 pro c:\n" }}{PARA 0 "" 0 "" {TEXT -1 621 "22. Procedure 'rightidealmember' checks whether the given polynomial f belongs to a right ideal genera ted by polynomials specified in the list L. If such polynomial does no t exist then the procedure returns false; otherwise it returns true. W hen used with a third optional argument, .e., 'c', it returns a list ' coe' of polynomial coefficients such that f = add(wedge(L[i],coe[i]), i=1..nops(L)); \n\nNOTE: leftidealmember and rightidealmember use Clif ford:-clisolve to determine whether the given polynomial belongs to th e 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-200 8 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\nif f=0 then return true end if:\nif not type(f,\{clipolynom,climon,cliba smon\}) 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:-reorder(L[i]),c[i]),i=1..nops(L)):###coefficients c[i] on t he right\neq:=Clifford:-clicollect(Clifford:-reorder(f)-g);\nsol:=Clif ford:-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 list G and l, r in \+ S - Grassmann signed monomial basis - such that wedge(l,T(g),r) = Th w here 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 M onOrder. The procedure returns a sequence l,g,r, if l,g,r exist such t hat wedge(l,T(g),r) = Th, or, 0,0,0 if such elements could not be foun d. This procedure is needed by NormalForm.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 807 "chooseg2:=proc(Th::\{clibasmon\},G::list(\{clipolyno m,climon,clibasmon\}),S::list(\{climon,clibasmon\}),MonOrder) \nlocal \+ mG,mTh,cli,i,j,c,d,eq,g,sol,mgf,flag1,flag2,Tg,l,r,ll,rr,gg;\noptions \+ `Copyright (c) 2006-2008 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\nmTh,mG:=Clifford:-maxindex(Th),Clifford:-maxindex (G);\nflag1:=false:\nfor i from 1 to nops(G) while not flag1 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 flag2 do\n \+ ##print(l,Tg,r,Th);##unremark for testing\n flag2:=ev alb(Clifford:-wedge(l,Tg,r)=Th):\n if flag2 then 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,rr) end if;\n end proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 269 "24. The following procedu re computes left normal form of a polynomial f with respect to finite \+ set G that generates a left ideal I and is a counterpart of incomplete Gaussian reduction [Mora]. See his definition of normal form and Prop osition 2.1 in [Mora] on page 6.\n\n" }{TEXT 260 11 "Definition:" } {TEXT -1 439 " Let G subset of k (free algebra - in our case it wil l 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) eit her h = 0 or T(h) does not belong to T(G), that is, the leading term o f h does not belong to the ideal T(G) in k that is being generated \+ by the leading terms of the set G.\n\n" }{TEXT 259 22 "Proposition 2.1 [Mora]" }{TEXT -1 179 "\nG is a Groebner basis of I if and only if fo r 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 2155 "LeftNormalForm:=proc(f::\{cli scalar,clipolynom,climon,clibasmon\},G::list(\{clipolynom,climon,cliba smon\}),MonOrder) \nlocal termmemberposition,S1,S2,h,pos,lch,Th,l,g,r, lcg,mf,mG,m,flag,RR;\noptions `Copyright (c) 2006-2008 by Rafal Ablamo wicz and Bertfried Fauser. All rights reserved.`;\ndescription `Uses M ora's definition and Mora's algorithm in [Mora] on page 6 modified by \+ R.A.`;\n############################################################\n WARNING(\"procedure LeftNormalForm may produce wrong results. It uses \+ Mora's definition and algorithm in [Mora] on page 6 modified by R.A.\" );\nRR:=map2(GfG:-LeftGDivide,f,G,MonOrder);\nif member(0,RR) then ret urn 0 end if:\n####################################################### #####\n##return(RR);##unremark for testing\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:\n" }}{PARA 0 "" 0 "" {TEXT -1 270 "25. The following proc edure computes right normal form of a polynomial f with respect to fin ite set G that generates a right ideal I and is a counterpart of incom plete 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 2110 "RightNormalForm:=proc(f::\{cliscalar,clipolynom,climon,cliba smon\},G::list(\{clipolynom,climon,clibasmon\}),MonOrder) \nlocal term memberposition,S1,S2,h,pos,lch,Th,l,g,r,lcg,mf,mG,m,flag,RL;\noptions \+ `Copyright (c) 2006-2008 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\ndescription `Uses Mora's definition and algorithm in [Mora] on page 6`;\n############################################## ##############\nWARNING(\"procedure RightNormalForm may produce wrong \+ results. It uses Mora's definition and algorithm in [Mora] on page 6 m odified by R.A.\");\nRL:=map2(GfG:-RightGDivide,f,G,MonOrder);\nif mem ber(0,RL) then return 0 end if:\n##################################### #######################\n#return(RL);\n############################### #############################\ntermmemberposition:=proc(m::\{climon,cl ibasmon\},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 t o 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,M onOrder):\n##return(S1);##unremark for testing\nS2:=GfG:-SemiGroupS(m, MonOrder):\nh:=f:\npos:=termmemberposition(GfG:-LMon(h,MonOrder),S2,Mo nOrder):\n##return pos;##unremark for testing\nflag:=true:\nwhile h<>0 and pos<>0 and flag do\n if pos<>0 then\n pos:=termmembe rposition(GfG:-LMon(h,MonOrder),S2,MonOrder);\n lch,Th:=GfG:-L Coeff(h,MonOrder),GfG:-LMon(h,MonOrder);\n l,g,r:=GfG:-chooseg 2(Th,G,S2,MonOrder):\n ##print(l,g,r);##unremark for testing\n if g=0 then flag:=false \n else \n lcg: =GfG:-LCoeff(g,MonOrder); \n h:=h-lch*lcg^(-1)*Clifford:-we dge(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;\ne nd proc:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 367 "26.[OLD and OBSOLETE] (Replaced by LeftNormalForm and RightNormal Form) Procedure 'GReduce' takes a Grassmann polynomial p and divided i t by a list of polynomials [p1,...,pn], in that order, for the monomia l order MonOrder given as the third argument. It is a recursive applic ation 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 "GReduce :=proc(p::\{cliscalar,clipolynom,climon,clibasmon\},plst::list(\{clipo lynom,climon,clibasmon\}),MonOrder) local i,r;\noptions `Copyright (c) 2006-2008 by Rafal Ablamowicz and Bertfried Fauser. All rights reserv ed.`;\nWARNING(\"procedure GReduce is obsolete and produces wrong resu lts. 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:=GDi vide(r,plst[i],MonOrder)\n end do:\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 245 "27. Procedure 'GGbasis' computes a Groebner basis for th e ideal generated by the elements of the list F of Grassmann polynomia ls with respect to a monomial order MonOrder which has to be admissibl e, say Deg[Lex]. Check procedure 'isadmissible'.\n" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 894 "GGbasis:=proc(F::list(\{clipolynom,climon,clibasmo n\}),MonOrder) local Floc,N,N2,i,j,flag1,flag2,spoly,f;\noptions `Copy right (c) 2006-2008 by Rafal Ablamowicz and Bertfried Fauser. All righ ts reserved.`;\n#-- normalize the LMons in the list F\n#-- since nonze ro coefficients make troubles in some comparisons....\nf:=(x)->x/LCoef f(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 from i +1 while flag2 do\n spoly:=GReduce(GSpoly(Floc[i],Floc[j],MonOrde r),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 N2:= nops(Floc);\n flag2:=evalb(j " 0 "" {MPLTEXT 1 0 514 "minGGbasis:=proc(G::list(\{clipolynom,clim on,clibasmon\}),MonOrder) local keepinG,i,p,lp,Gp,lGp,r,co;\noptions ` Copyright (c) 2006-2008 by Rafal Ablamowicz and Bertfried Fauser. 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 the n \n co:=LCoeff(p,MonOrder);\n p:=p/co;\n k eepinG:=[op(keepinG),p] \n end if;\nend do:\nreturn keepinG;\nend pro c:" }{TEXT -1 0 "" }}{PARA 0 "" 0 "" {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 s pecified by the second argument. One possible order is 'Lex' (lexicog raphic lex e1>e2>...>en) \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 215 "mul tideg:=proc(f::\{clibasmon,climon,clipolynom\},MonOrder) local p:\nopt ions `Copyright (c) 2006-2008 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 autom atically loaded." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1076 "init:=proc() \+ \n# global `convert/set_to_pts`;\n local x,y,i,j;\n printf(\"GfG \+ - Groebner for Grassmann 0.6 beta (June 22, 2008) says Hello...\\n\"); \nprintf(\"===>WARNING: This is purely experimental package at this ti me, i.e., it is likely to produce wrong results.\\n\"); \nprintf(\"= ==>If you find this packages useful, please let us know about your der ived work.\\n\");\n printf(\"===>You can contact us at http://math.t ntech.edu/rafal/ or http://clifford.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 p roc:\n##\nwith(Clifford):\nprintf(\"Clifford package with %d functions loaded...\\n\",nops(%));\n#with(Cliplus):\n#printf(\"Cliplus package \+ with %d functions loaded...\\n\",nops(%));\nwith(Bigebra):\nprintf(\"B igebra package with %d functions loaded...\\n\",nops(%));\nend proc: \+ \n\nexit:=proc()\n printf(\"GfG - Groebner for Grassmann 0.6 beta ( June 22, 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 next 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 6 "" 1 " " {TEXT -1 70 "GfG - Groebner for Grassmann 0.6 beta (June 22, 2008) s ays good bye..." }}{PARA 6 "" 1 "" {TEXT -1 67 "GfG - Groebner for Gra ssmann 0.6 beta (June 22, 2008) says Hello..." }}{PARA 6 "" 1 "" {TEXT -1 107 "===>WARNING: This is purely experimental package at this time, i.e., it is likely to produce wrong results." }}{PARA 6 "" 1 " " {TEXT -1 81 "===>If you find this packages useful, please let us kno w about your derived work." }}{PARA 6 "" 1 "" {TEXT -1 106 "===>You ca n contact us at http://math.tntech.edu/rafal/ or http://clifford.physi k.uni-konstanz.de/~fauser/" }}{PARA 6 "" 1 "" {TEXT -1 44 "Clifford pa ckage with 84 functions loaded..." }}{PARA 6 "" 1 "" {TEXT -1 83 "Incr ease verbosity by infolevel[`function`]=val -- use online help > ?Bige bra[help]" }}{PARA 6 "" 1 "" {TEXT -1 43 "Bigebra package with 33 func tions loaded..." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q7C:\\Maple11/Cliff ordlib6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q7C:\\Maple11/Cliffordlib 6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#72%1ActivationModuleG%1AddFromD irectoryG%'AuthorG%'BrowseG%3BuildFromDirectoryG%/ConvertVersionG%'Cre ateG%'DeleteG%,FindLibraryG%,PrefixMatchG%)PriorityG%%SaveG%-ShowConte ntsG%*TimestampG%4UpdateFromDirectoryG%*WriteModeG" }}{PARA 12 "" 1 " " {XPPMATH 20 "6#7;7&Q*Bigebra.m6\"7(\"%2?\"#7\"#?\"\")\"#&G\"\"%\"#\\\"'G]I\"$x$7&Q/code_support.mF&7(F2F3\"#@\"\"! \"#e\"#9\"'n$>%\"$*[7&Q)Define.mF&7(F(F)F*F+FF\"#d\"'nc>\"$$[7&Q>P.m F&7(F(F)F*F+\"#`FC\"'dKC\"$\"G7&Q&GfG.mF&7(F2F3\"#A\"#6\"#fF6\"(Ii2\" \"%[87&Q+matcompL.mF&7(F(F)F*F+\"#8FF\"'7_m\"&=X(7&Q+matquatR.mF&Fin\" '%yU(\"&I?#7&Q+matrealR.mF&Fin\"'`?U\"'Wj67&Q+Octonion.mF&7(F(F)F*F+FL \"\"%\"'fOm\"$P%7&Q,RJgrobner.mF&7(F2F3FXFD\"#I\"#Q\"'0\\$)\"%\"4\"7&Q 5SINGULARPLURALlink.mF&7(F2F4\"#:\"#;\"#S\"#C\"'v_AlternatingGroup_rem_table.mF&7(F2 F3FC\"\"\"F^p\"#V\"'_Y8\"%@77&Q:_FiniteGroups_rem_table.mF&Fdq\"'=PJ\" %eC7&Q6_Reynolds_rem_table.mF&Fdq\"')y$G\"$L%7&Q<_SymmetricGroup_rem_t able.mF&7(F2F3FCFeqF^p\"#U\"'6(e\"\"%%G#7&QA_generateGinvariants_rem_t able.mF&Fdq\"'whJ\"$#>7&Q<_implicitbezierpolynomial.mF&7(F2F3FXFDF^pFf q\"'g(\\)\"&e7\"7&Q+matcompR.mF&Fin\"'\"[<$\"&^M(7&Q+matquatL.mF&Fin\" '87E\"&9@#7&Q+matrealL.mF&Fin\"&!z6\"'9k67&Q%SP.mF&7(F(F)F*\"\"*F^p\"# G\"'ojJ\"%867&Q&TNB.mF&7(F2\"\"$F`tF,\"#HFep\"'$Q'R\"$,)" }}}{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~11G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%apCopyright~(c)~2002-2008~by~Rafal~Ablamowicz~and~Bertfried~Fauser .~All~rights~reserved.G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%=Last~revi sed:~March~10,~2007G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%!G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7-%/NamesInLibraryG%1change_helpfilesG%,chan ge_nameG%*copy_fileG%)get_TEXTG%(get_dirG%1insert_helppagesG%)makeLIST G%+modifyLISTG%0replace_in_fileG%&splitG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "NamesInLibrary(libname[1]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+matrealL.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+Cl ifford.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q>_AlternatingGroup_rem _table.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q<_SymmetricGroup_rem_t able.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q)Define.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q5SINGULARPLURALlink.m6\"" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#Q>P.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q<_impl icitbezierpolynomial.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q*Bigebra .m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+matquatL.m6\"" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#Q6_Reynolds_rem_table.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q*Cliplus.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+Sch urFkt.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q:_FiniteGroups_rem_tabl e.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#QA_generateGinvariants_rem_t able.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q%SP.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+matcompR.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #Q&TNB.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q/code_support.m6\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#Q+matrealR.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q,RJgrobner.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+O ctonion.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+matcompL.m6\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#Q&GfG.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+matquatR.m6\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "restart:restart: " }}{PARA 6 "" 1 "" {TEXT -1 70 "GfG - Groebner for Grassmann 0.6 beta (June 22, 2008) says good bye..." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "with(GfG):" }}{PARA 6 "" 1 "" {TEXT -1 67 "GfG - Groe bner for Grassmann 0.6 beta (June 22, 2008) says Hello..." }}{PARA 6 " " 1 "" {TEXT -1 107 "===>WARNING: This is purely experimental package \+ at this time, i.e., it is likely to produce wrong results." }}{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.tntech.edu/rafal/ or http://clifford .physik.uni-konstanz.de/~fauser/" }}{PARA 6 "" 1 "" {TEXT -1 44 "Cliff ord package with 84 functions loaded..." }}{PARA 6 "" 1 "" {TEXT -1 83 "Increase verbosity by infolevel[`function`]=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\ncmul(e1,e2);\n#test for Bigebras fu nctionality\n&gco(e1);" }}{PARA 6 "" 1 "" {TEXT -1 122 "Cliplus has be en loaded. Definitions for type/climon and type/clipolynom now include &C and &C[K]. Type ?cliprod for help." }}{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 34 "Cookeville/Konstanz, June 22, 2008" }}}}{MARK "0 81 0" 13 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }