{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 } {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 Output" -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 "Times" 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 }} {SECT 0 {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart:" }}{PARA 6 " " 1 "" {TEXT -1 64 "SINGULARPLURALlink 0.3 beta (December 20, 2008) sa ys good bye..." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "libname;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&Q7C:\\Maple11/Cliffordlib6\"Q/C:\\Ma ple11/libF$Q4C:\\Brachey.Troy/TNBF$QAC:\\Maple11/SINGULARPLURALlinklib F$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 " " 0 "" {TEXT -1 1401 "Package SINGULARPLURALlink provides an interface between Maple and Singular with Plural for the purpose of computing c ommutative Groebner basis in Singular and non commutative Groebner bas es in non commutative algebras, e.g., Grassmann, Clifford, etc., in it s Plural extension. For now, the link permits only non commutative Gro ebner bases computation in Grassmann and Clifford algebras of a quadra tic form. Input from Maple is sent to Singular:Plural, and results are returned to Maple.\n\nNOTE: In order to compute with Grassmann or Cli fford algebras in Maple, download and install package CLIFFORD/Bigebra by Ablamowicz and Fauser from http://www.math.tntech.edu/rafal/\n\nNO TE: In order to compute with Grassmann or Clifford algebras in Singula r:Plural, make sure that your Singular:Plural library located in C:\\c ygwin\\usr\\share\\Singular\\LIB directory contains two Singular:Plura l libraries \"nctools.lib\" and \"clifford.\".\n\n-- Procedure SINGULA Rlink provides an interface between Maple and Singular for the purpose of computing commutative Groebner basis in Singular and returning res ult back to Maple. It has been succsessfully tested with Maple 8, 9, 9 .5, 10, 11; and 3-0-4. It can be easily modified for the use of other \+ commands in Singular than \"std\" and \"groebner\". This procedures is the same as the one posted on Singular's web page \n\nhttp://www.math ematik.uni-kl.de/ftp/pub/Math/Singular/misc/" }}{PARA 0 "" 0 "" {TEXT -1 1851 "\nas SINGULARlink2.mws, dated 05-Aug-2006. The only differenc e now is that this procedure that has been successfully tested, is now part of a package (Maple module) called \"SINGULARPLURALlink\".\n\nUs age: Procedure SINGULARlink uses the following input arguments:\n\nSIN GULARlink(Id,C,tord,elimorder,input_for_Singular,input_for_Maple,wait) ;\nSINGULARlink(Id,C,tord,elimorder,input_for_Singular,input_for_Maple ,wait,'p');\n\n- Id - type \"list(polynom) \" - a list of polynomials [f1, f2,..., fn] that generate ideal Id, th at is, Id = .\n- C - typ e \"nonnegint\" - non negative characteristic for the ground field of \+ polynomial coefficients, set 0 for the rationals\n- tord \+ - type \"symbol\" - one of total orders used by Singular/ Plural: lp, dp, rp, Dp, ls, ds, Ds. or drp.\n \+ NOTE: In this version of the link, tord can really be any thing as long as Singular:Plural can understand it. For example, in Ma ple we define a new order drp in n noncommutng variables (x(1..n)) as \+ (a(1:n),rp). \n This \+ will be then equivalent to Deg[InvLex] order or a degree order such th at x^\\alpha > x^\\beta if |\\alpha| > |\\beta|, or, in case of equali ty |\\alpha| = |\\beta|, if the right-most nonzero entry in $\\alpha - \\beta$ is positive.\n \+ This order has no special name in Singular:Plural, but we call it f or short 'drp'.\n- elimorder - type \"list\" - list \+ of polynomial variables that are to be eliminated in the order in whic h they appear in the list. This list must be identical to the list of \+ polynomial variables. \n- input_for_Singular - type \"string\" - \+ path to a directory where input file In.txt for Singular will be writt en to" }}{PARA 0 "" 0 "" {TEXT -1 7393 "- input_for_Maple - typ e \"string\" - path to a directory where output file Out.txt from Sing ular for Maple will be written to\n- wait - \+ type \"nonnegint\" or \"symbol\" - when used with a positive integer i t will pass on that integer to \"groebner(Id,wait)\" as its wait param eter; when used as symbol 'infty', procedure \+ \+ \"groebner(Id)\" will be invoked\n'p' \+ - (optional) type symbol 'd' - for saving files to t he disk; 't' for displaying In.txt to the terminal only (see examples \+ below)\n\n-- Procedure PLURALforGlink provides an interface between M aple and Plural for the purpose of computing non commutative Groebner \+ basis in Grassmann algebra using Plural and returning result back to M aple. It has been succsessfully tested with Maple 11; and Singular 3-0 -4. \n\nUsage: Procedure PLURALforGlink uses the following input argu ments:\n\nPLURALforGlink(G,C,tord,vars,input_for_Singular,input_for_Ma ple,wait);\nPLURALforGlink(G,C,tord,vars,input_for_Singular,input_for_ Maple,wait,'p');\n\n- G - type \"list::(\{ clipolynom,climon,clibasmom\})\" - a list of Clifford or Grassmann pol ynomials [f1, f2,..., fn] that generate ideal G that is, G = , in a Grassmann algebra.\n- C - \+ type \"nonnegint\" - non negative characteristic for the ground field \+ of polynomial coefficients, set 0 for the rationals\n- tord \+ - type \"symbol\" - one of total orders used by Singul ar/Plural: lp, dp, rp, Dp, ls, ds, Ds, or drp.\n \+ NOTE: In this version of the link, tord can really be \+ anything as long as Singular:Plural can understand it. For example, in Maple we define a new order drp in n noncommutng variables (x(1..n)) \+ as (a(1:n),rp). \n Th is will be then equivalent to Deg[InvLex] order or a degree order such that x^\\alpha > x^\\beta if |\\alpha| > |\\beta|, or, in case of equ ality |\\alpha| = |\\beta|, if the right-most nonzero entry in $\\alph a - \\beta$ is positive.\n \+ This order has no special name in Singular:Plural, but we call i t for short 'drp'.\n- vars - type \"list\" - list of generators eg, eq,e2,e3,..., e9, of the Grassmann algebra. Th is list must be identical or larder than the list of variables appeari ng in the polynomials generating G. \n- input_for_Singular - type \"string\" - path to a directory where input file In.txt for Singular will be written to\n- input_for_Maple - type \"string\" - path to a directory where output file Out.txt from Singular for Maple will be written to\n- wait - type \"nonnegint\" \+ or \"symbol\" - when used with a positive integer it will pass on that integer to \"groebner(Id,wait)\" as its wait parameter; when used as \+ symbol 'infty', procedure \+ \+ \"groebner(Id)\" will be invoked\n'p' - (optional) type symbol 'd' - for saving files to the disk; 't' for di splaying In.txt to the terminal only (see examples below)\n\n-- Proce dure PLURALforClink provides an interface between Maple and Plural for the purpose of computing non commutative Groebner basis in Clifford a lgebra Cl(Q) of a quadratic form which could be degenerate, using Plur al and returning result back to Maple. It has been succsessfully teste d with Maple 11 and Singular 3-0-4. \n\nUsage: Procedure PLURALforCli nk uses the following input arguments:\n\nPLURALforClink(G,C,tord,vars ,B,input_for_Singular,input_for_Maple,wait);\nPLURALforClink(G,C,tord, vars,B,input_for_Singular,input_for_Maple,wait,'p');\n\n- G \+ - type \"list::(\{clipolynom,climon,clibasmom\})\" - a list of Clifford or Grassmann polynomials [f1, f2,..., fn] that gen erate ideal G that is, G = , in a Grassmann algebra. \n- C - type \"nonnegint\" - non negative characteristic for the ground field of polynomial coefficients, set 0 for the rationals\n- tord - type \"symbol\" - one of total orders used by Singular/Plural: lp, dp, rp, Dp, ls, ds , Ds, drp\n NOTE: In this version of the link, tord can really be anything as long as Singular:Plural c an understand it. For example, in Maple we define a new order drp in n noncommutng variables (x(1..n)) as (a(1:n),rp). \n \+ This will be then equivalent to Deg[Inv Lex] order or a degree order such that x^\\alpha > x^\\beta if |\\alph a| > |\\beta|, or, in case of equality |\\alpha| = |\\beta|, if the ri ght-most nonzero entry in $\\alpha - \\beta$ is positive.\n \+ This order has no special name \+ in Singular:Plural, but we call it for short 'drp'.\n- vars \+ - type \"list\" - list of generators eg, eq,e2,e3,..., e9, of the Grassmann algebra. This list must be identical or larder t han the list of variables appearing in the polynomials generating G.\n - B - type \"diagmatrix\", a diagonal ma trix that defines a quadratic form Q for Cl(Q). The size of this matri x must but at least equal to the largest index in generators appearing in the list vars \n- input_for_Singular - type \"string\" - path to a directory where input file In.txt for Singular will be written t o\n- input_for_Maple - type \"string\" - path to a directory wh ere output file Out.txt from Singular for Maple will be written to\n- \+ wait - type \"nonnegint\" or \"symbol\" - wh en used with a positive integer it will pass on that integer to \"groe bner(Id,wait)\" as its wait parameter; when used as symbol 'infty', pr ocedure \+ \"groebner(Id)\" w ill be invoked\n'p' - (optional) type s ymbol 'd' - for saving files to the disk; 't' for displaying In.txt to the terminal only (see examples below) \n\nComments:\n\n1. Global var iable \"dirpathSexe\" must be defined (see below) with a path to bash. exe (version 3-0-4) to execute Singular 3-0-4.\n2. The transfer direct ories \"input_for_Singular\" and \"input_for_Maple\" need not be the s ame. If either one does not exist, it will be created. These directori es are not automatically deleted when Singular is finished computing u nless appropriate lines system(cat(\"rm -r \",pathS)); and system(cat (\"rm -r \",pathM)); are unremarked. Be VERY CAREFUL when you unremar k these lines as you may accidently delete directories you wanted to k eep!\n3. The eighth parameter 'p' is optional and can only take values 't' and 'd'. When 't' is used, the input script for Singular is displ ayed to the terminal only: No transfer directory is created and nothin g is written to the hard disk. When 'd' is used, the input file In.txt is created, written to the hard disk, then Singular is invoked to exe cute it and write its output as file Out.txt. Then, Out.txt file is re ad in and displayed to the terminal/screen. When this parameter is not used, the procedure behaves like if it were used with the parameter ' d'." }}{PARA 0 "" 0 "" {TEXT -1 333 "4.The output of this procedure is the Groebner basis returned by Singular's \"groebner\" command. One c an easily use \"std\" command instead. \n5. Some error messaging is b uilt in.\n6. No warranties of any kind can be made. Permission is gran ted to use this procedure and modify it at will, although I would appr eciate an acknowledgment. " }}{PARA 0 "" 0 "" {TEXT -1 317 "7. A compl ete interface module allowing a Maple user to use other command from \+ Singular could easily be written.\n\nRafal Ablamowicz\nDepartment of M athematics\nTennessee Technological University\nCookeville, TN 38501\n Email: rablamowicz@tntech.edu\nTel: (931) 372-3569\nFax: (931) 372-635 3\n \nCookeville, December 20, 2008" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 45 "First, we def ine some paths and directories:\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 4661 "# Date: December 20, 2008\nrestart:\n#\n# This is t he source code file of the \"SINGULARPLURALlink\" package\n# File: SIN GULAR.PLURAL.link_0515_M12.mws\n#\n# Copyright (c) Rafal Ablamowicz & \+ Bertfried Fauser 2008-2009, all rights reserved.\n#\n################# ##############################################################\n# \+ \+ #\n# DISCLAIMER: \+ #\n# \+ #\n# THERE IS NO WARRANTY FOR THE GROEBNER FO R GRASSMANN PACKAGE TO THE EXTENT #\n# PERMITTED BY APPLICABLE LAW. \+ EXCEPT WHEN OTHERWISE STATED IN WRITING THE #\n# COPYRIGHT HOLDERS \+ AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT #\n# WARRA NTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT \+ #\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNES S FOR #\n# A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALI TY AND PERFORMANCE #\n# OF THE PROGRAM IS WITH YOU. SHOULD THE PRO GRAM PROVE DEFECTIVE, YOU #\n# ASSUME THE COST OF ALL NECESSAR Y SERVICING, REPAIR OR CORRECTION. #\n# \+ #\n############ ###################################################################\n# \n# If you want to use this code or parts of it under a GPL LICENCE, \+ please\n# contact the authors:\n# rablamowicz tntech.edu \+ or \n# fauser spock.physik.uni-konstanz.de\n#\n# +++ T he package extends the Clifford and Bigebra packages.\n# +++ It comput es Groebner bases in Grassmann and Clifford algebras by providing a li nk with PLURAL, part of Singular.\n# +++ See http://www.singular.uni-k l.de/download.html for downloading Singular.\n#\n# +++ See package GfG that computes Groebner bases in Grassmann and Clifford algebras in Ma ple directly.\n#\n# +++ Main functions are:\n#\n# --- SINGULARlink \+ : provides a link with Singular to compute commutative Groebner bases in multivariable polynomial ring k[x1,x2,x3,...,xn]\n# \+ for a specific field k and monomial order\n#\n# --- PLURALfor Glink : provides a link with Plural to compute non commutative Groeb ner bases in a Grassmann algebra G generated by n anticommuting \n# \+ variables e1,e2,e3,...,en where n <=9. The variab les satisfy relations \n#\n# wedge(ei,ej) = 0, \+ i=j, and wedge(ei,ej) = - wedge(ej,ei), i <>j, 1 <=i,j<= 9,\n#\n# \+ where 'wedge' is the wedge product in G. The wedge \+ product is implemented in CLIFFORD/Bigebra package as Clifford:-wedge( p1,p2)\n# and &w(p1,p2) where p1,p2 are Grassma nn (or Clifford) polynomials. Note that Grassmann basis is used as def ault in the\n# Clifford algebra Cl(B) of a bili near form. For more information download Clifford/Bigebra from http:// www.math.tntech.edu/rafal/\n# and type ?Cliffor d at Maple prompt. In Clifford/Bigebra, the Grassmann algebra is imple mented as the Clifford algebra Cl(B)\n# where t he form B is identically a square zero matrix of appropriate size (max size is 9 x 9).\n#\n# --- PLURALforClink : provides a link with Plu ral to compute non commutative Groebner bases in a Clifford algebra Cl (Q) of a quadratic form Q. Cl(Q) is\n# generate d by n non commuting variables e1,e2,e3,...,en where n <=9. The variab les satisfy relations \n#\n# cmul(ei,ej) = Q(ei ,ej)*Id = Q(i,j)*Id, i=j, and cmul(ei,ej) = -cmul(ej,ei) = wedge(ei,ej ) = - wedge(ej,ei), i <>j, 1 <=i,j<= 9,\n#\n# w here 'cmul' is the Clifford product in Cl(Q), Id is is the identity el ement in Cl(B), and `*` is just a product between scalars and \n# \+ elements in Cl(B). The Clifford product is implemen ted in CLIFFORD/Bigebra package as Clifford:-cmul(p1,p2) and &c(p1,p2) where p1,p2 \n# are Grassmann (or Clifford) po lynomials. Note that Grassmann basis is used as default in the Cliffor d algebra Cl(B) of any bilinear \n# form. For m ore information download Clifford/Bigebra from http://www.math.tntech. edu/rafal/ and type ?Clifford at Maple prompt.\n#\n# \+ NOTE: At present, PLURAL cannot compute in Cl(B) for arbitrary f orm B unless the form B = Q is diagonal. However, Q need not be\n# \+ nondegenerate. That is, PLURAL accepts Q(ei,ei) = \+ 0, -2, +2, 1<=i<=9 (perhaps higher dimensions as well). \n#\n# +++ TYP ES:\n# --- no new types for this package... \n#\n#\n" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 326 "SINGULARPLURALlink:=module()\n#### ###############################\n##\n## -- list of exports\n##\nexpor t linkversion,\n SINGULARlink,\n PLURALforGlink,\n P LURALforClink;\n###################################\n##\n## -- list o f local routines\n## \nlocal init,exit;\noption package, \n load =init,\n unload=exit;\n" }}{PARA 0 "" 0 "" {TEXT -1 11 "0. Versi on\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1379 "linkversion:= proc()\nopt ions `Copyright (c) 2008 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\ndescription `Last revised: December 20, 2008`;\np rint(`+++++++++++++++++++++++++++++++++++++++++++`);\nprint(`SINGULARP LURALlink - A Maple 12 Package for Linking Maple with Singular and Plu ral`); \nprint(`Last revised: December 20, 2008 (Source file: SINGULAR PLURALlink_0515_M12.mws)`);\nprint(`Copyright 2008 by Rafal Ablamowicz (*) and Bertfried Fauser ($)`);\nprint(``);\nprint(`(*) Department of Mathematics, Box 5054`);\nprint(` Tennessee Technological Universi ty, 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 Konsta nz, Germany`);\nprint(` Bertfried.Fauser@uni-konstanz.de`);\nprint( ` http://clifford.physik.uni-konstanz.de/~fauser/`); \nprint(` \+ http://math.tntech.edu/rafal/`);\nprint(``);\nprint(`This package requ ires CLIFFORD/Bigebra for Maple available from http://math.tntech.edu/ rafal/`);\nprint(`Singular:Plural requires nctools.lib and clifford.li b libraries to be installed. Consult http://www.singular.uni-kl.de`); \nprint(``);\nprint(`++++++++++++This is SINGULARPLURALlink for Maple \+ 12 version 0.3 with drp++++++++++++`);\nend proc:\n" }}{PARA 0 "" 0 " " {TEXT -1 29 "1. Procedure 'SINGULARlink' \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 12165 "SINGULARlink:=\nproc(Id::list(polynom),C::nonnegin t,tord::symbol,elimorder::list,\ninput_for_Singular::string,input_for_ Maple::string,wait::\{nonnegint,symbol\}) \nlocal i,j,pathS,pathS2,pat hM,pathM2,vars,varsfound,F,p,ele,s,N,pathS_filename,\n pathM_file name,executeinputfile,first,line,last,fseq,dirpathSexeloc,direction;\n global dirpathSexe;\n################################################# ##################################################\ndescription `Last \+ revised: December 20, 2008`;\n######################################## ###########################################################\n#Input ar guments are as follows:\n#Id - a list with polynomials that generate a polynomial ideal Id\n#C - non negative characteristic for the gr ound field of polynomial coefficients, set 0 for the rationals\n#elimo rder a list of variables in elimination order\n#tord - total order acc epted by Singular: \n# lp = lex order\n# dp = degrevlex or der but is known as grevlex in Cox\n# rp = \"reverse lex order\" in Singular:Plural, also known as inverse lex order\n# Dp = deg lex order \n# ls = negative lex order\n# ds = negative deg ree reverse lex order\n# Ds = negative degree lex order\n# \+ NOTE: In this version, for added flexibility, tord can really be anyt hing as long as \n# Singular:Plural will recognize it\n#in put_for_Singular - path where input file In.txt for Singular will be s aved by Maple\n#input_for_Maple - path where output file Out.txt fo r Maple will be saved by Singular\n#wait - number of seconds Singular \+ will compute at most or 'infty' for infinite number of seconds\n###### ###################################################################### ########################\n#if not member(tord,\{lp,dp,rp,Dp,ls,ds,Ds\} ) then\n# error `third argument total order must be one of lp, dp, r p, Dp, ls, ds, or Ds`\n#end if;\nif not member(tord,\{lp,dp,rp,Dp,ls,d s,Ds\}) then\n WARNING(\"third argument, total order, must be one of lp, dp, rp, Dp, ls, ds, or Ds. Order drp only makes sense with noncom muting variables! Proceeding anyway...\")\nend if;\n################## ###################################################################### ############\nF:=map(expand,Id);\nvarsfound:=sort(convert(indets(F),li st));\nvars:=elimorder;\nN:=nops(vars):\nif nops(varsfound)<>N then \n error `number of variables found in polynomials is different from t he number of variables in elimination list` end if;\nif convert(varsfo und,set) minus convert(vars,set) <> \{\} then \n error `extra variab les found in polynomials that do not appear in elimination list`\nend \+ if;\nif convert(vars,set) minus convert(varsfound,set) <> \{\} then \n error `extra variables found in elimination list that do not appear in polynomials`\nend if;\n########################################### ##########################################################\nif C>0 the n p:=C else p:=0 end if; #reassigning C to p\n######################## ###################################################################### #######\n#Path and filename where input file for Singular will be save d to\n################################################################ #####################################\npathS:=input_for_Singular; \+ #path where input file In.txt for Singular will be saved\npathS _filename:=cat(pathS,\"/In.txt\"); #path w/filename where input file f or Singular will be saved\n########################################### ##########################################################\npathM:=inp ut_for_Maple; #path where input file Out.txt for Maple w ill be saved\npathM_filename:=cat(pathM,\"/Out.txt\");#path w/filename where input file for Maple will be saved\n########################### ###################################################################### ####\ndirection:=0:\nif nargs=8 then direction:=args[nargs] end if; #s witch for error messages\n############################################ #########################################################\n#Changing t he name of the input_for_Maple directory so that it could be created, \+ if needed:\nif SearchText(\"C:/\",pathM)=0 then pathM2:=pathM \nelif\n SearchText(\"C:/\",pathM)=1 then pathM2:=cat(\"C:\\\\\",substring(p athM,4..-1)); #directory to create\nelse error `write directory to cre ate for Maple input as, for example, \"C:/transferM\" `\nend if:\n#### ###################################################################### ###################################\n#Changing the name of the input_f or_Singular directory so that it could be created, if needed:\n####### ###################################################################### ################################\nif SearchText(\"C:/\",pathS)=0 then \+ pathS2:=pathS \nelif\n SearchText(\"C:/\",pathS)=1 then pathS2:=cat( \"C:\\\\\",substring(pathS,4..-1)); #directory to create\nelse error ` write directory to create for Singular as, for example, \"C:/transferS \" `\nend if:\n####################################################### #######################################################\n#NOTE: If you don't like these messages to appear, remark the next fourteen lines. \n#################################################################### ##########################################\nif direction='d' or direct ion=0 then\n if system(cat(\"mkdir \",pathM2))=0 then\n print(` Transfer directory for Maple has been made ... proceeding... waiting f or Singular results...`)\n else\n print(`Transfer directory for Maple already exists... proceeding... waiting for Singular results... `)\n end if;\n if system(cat(\"mkdir \",pathS2))=0 then\n pri nt(`Transfer directory for Singular has been made ... proceeding... wa iting for Singular results...`)\n else\n print(`Transfer direct ory for Singular already exists... proceeding... waiting for Singular \+ results...`)\n end if;\nelif direction='t' then\n print(`Trying \+ to create and display input file for Singular... proceeding...`)\nend \+ if;\n################################################################# ##############################################\n#Produce input file fo r Singular ...\n###################################################### ######################################################### \nif nargs=8 then \n if evalb(args[nargs]='t') then writeto(terminal) elif\n \+ evalb(args[nargs]='d') then writeto(pathS_filename) else \n err or `last optional argument needs to be 't' (for displaying to terminal ) or 'd' (for saving to disk)`\n end if;\nelse writeto(pathS_filenam e) #redirect Maple output to input file for Singular as default\nend i f:\n################################################################## #############################################\n# Define the ring (with term order)\n###############################################\nprintf( `ring R =`);\nprintf(cat(` `,p,`,`));\ns:=cat(`(`,seq(cat(vars[i],`,`) ,i=1..(N-1)),vars[N],`)`);\nprintf(\"%Q\",s);\nprintf(`,`);\nprintf(\" %q\",tord);\nprintf(\"%A\\n\",`;`);\n################################# ##############\n# Define the ideal . . . \n########################### ####################\nprintf(\"%Q\\n\",`ideal I =`) ; \nfor i to nops( F) do\nele:=F[i];\nif type(ele,monomial) then \n if i 't' ...\n###### ###################################################################\ni f direction='t' then return NULL end if;\nif assigned(dirpathSexe) the n\n dirpathSexeloc:=dirpathSexe: #assign global path to Singular.exe \n else\n ######################################################## #####\n #try a standard path under a typical Windows installation\n \+ #################################################################### ########\n #For version 2-0-3 use: \n #dirpathSexeloc:=\"C:/cygw in/usr/local/Singular/2-0-3/ix86-Win/Singular.exe\":\n ############# ###############################################################\n #F or version 3-0-4 use:\n dirpathSexeloc:=\"C:/cygwin/bin/bash -l C:/c ygwin/bin/Singular\": \nend if;\n############################# ############################################\nexecuteinputfile:=cat(di rpathSexeloc,\" < \", pathS_filename);\nsystem(executeinputfile);\nif \+ %<>0 then\n ######################################################## ######################################\n #If you want to delete path S directory in case of the error, unremark the following line but \n \+ #BE CAREFUL WHAT YOU DELETE as you may need this directory for checki ng file In.txt:\n #system(cat(\"rm -r \",pathS)); ##to remove the di rectory pathS: BE CAREFUL!!!!\n #################################### ##########################################################\n error ` something went wrong while executing Singular:\ncould not find a path \+ on your system to Singular.exe. The path must be \nassigned to a globa l variable dirpathSexe, for example,\n#dirpathSexe:=\"C:/cygwin/usr/lo cal/Singular/2-0-3/ix86-Win/Singular.exe\": for version 2-0-3, or\ndir pathSexe:=\"C:/cygwin/bin/bash -l C:/cygwin/bin/Singular\" for version 3-0-4` \nfi;\n####################################################### #####################\n# Retrieve results from Out.txt created by Sing ular line by line as strings\n######################################## ####################################\n#read(pathM_filename); #this DOE S NOT work yet due to [] in Out.txt\n################################# ###########################################\nfirst := readline(pathM_f ilename);\nline := readline(pathM_filename);\nwhile line <> 0 do\n l ast := line;\n line := readline(pathM_filename)\nend do;\n########## ##################################################################\nfs eq:=parse(first); #changing text input from Singular into Maple algebr aic\n################################################################# ########### \nF:=[fseq];\nif F=[] then \n print(`Singular has not re turned any results... increase 'wait' time or make it 'infty'`)\nend i f;\n################################################################## #######################\n#If you want to delete pathS directory, unrem ark the following line but BE CAREFUL \n#WHAT YOU DELETE as you may ne ed this directory for checking file In.txt:\n####system(cat(\"rm -r \+ \",pathS)); #To remove pathS directory: BE CAREFUL WHAT YOU DELETE!\n# ###################################################################### ##################\n################################################## #######################################\n#If you want to delete pathM \+ directory, unremark the following line but BE CAREFUL \n#WHAT YOU DELE TE as you may need this directory for checking file Out.txt:\n####syst em(cat(\"rm -r \",pathM)); #To remove pathM directory: BE CAREFUL WHA T YOU DELETE!\n####################################################### ##################################\nF:=map(expand,F);\nreturn F; \nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 101 "2. Procedure 'PLURALforGlink ' connects with Plural to compute Groebner bases in Grassmann algebras . \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15202 "PLURALforGlink:=\nproc(G ::list(\{climon, clibasmon, clipolynom\}),C::nonnegint,tord::symbol,el imorder::list(\{clibasmon\}),\ninput_for_Singular::string,input_for_Ma ple::string,wait::\{nonnegint,symbol\}) \nlocal i,j,pathS,pathS2,pathM ,pathM2,vars,varsfound,F,p,ele,s,sa,N,pathS_filename,maxG,maxelimorder ,\n pathM_filename,executeinputfile,first,line,last,fseq,dirpathS exeloc,direction,convertmontoS,convertstarstowedges;\nglobal dirpathSe xe;\n################################################################# ##################################\ndescription `Created: March 9, 200 8. Last revised: December 20, 2008`;\n################################ ###################################################################\n# Input arguments are as follows:\n#G - a list with polynomials that \+ generate a polynomial ideal G in Grassmann algebra\n#C - non negati ve characteristic for the ground field of polynomial coefficients, set 0 for the rationals\n#elimorder - a list of variables, e.g., e1,e2,e3 ,e4,...,e9\n#tord - total order accepted by Singular: \n# lp = l ex order \n# dp = degrevlex order but is known as grevlex in Cox \n# rp = \"reverse lex order\" in Singular:Plural, also known as inverse lex order\n# drp = NO NAME in Plural, the same as (a(1: n),rp) in Plural, or as Deg[InvLex] in CLIFFORD/Bigebra\n# Dp = \+ deglex order\n# ls = negative lex order\n# ds = negative d egree reverse lex order\n# Ds = negative degree lex order\n# \+ NOTE: In this version, for added flexibility, tord can really be an ything as long as \n# Singular:Plural will recognize it\n# input_for_Singular - path where input file In.txt for Singular will be saved by Maple\n#input_for_Maple - path where output file Out.txt \+ for Maple will be saved by Singular\n#wait - number of seconds Singula r will compute at most or 'infty' for infinite number of seconds\n#### ###################################################################### ##########################\n#if not member(tord,\{lp,dp,rp,Dp,ls,ds,Ds \}) then\n# error `third argument total order must be one of lp, dp, rp, Dp, ls, ds, or Ds`\n#end if;\nif not member(tord,\{lp,dp,rp,drp,D p,ls,ds,Ds\}) then\n WARNING(\"third argument, total order, must be \+ one of lp, dp, rp, drp, Dp, ls, ds, or Ds. Proceeding anyway...\")\nen d if;\n############################################################### #####################################\nF:=map(expand,G);\nF:=map(Cliff ord:-displayid,F):\nvars:=elimorder;\nN:=nops(vars):\n################ ###################################################################### ##############\n###Testing lists G and elimorder for correct input\n## ###################################################################### ############################\nmaxG,maxelimorder:=Clifford:-maxindex(F) ,Clifford:-maxindex(vars);\nif maxG>maxelimorder then \n error `maxi mum index found in the list of polynomials is greater than the maximum index found in the list of generators` end if;\nif not evalb(`minus`( convert(vars,set),\{e1,e2,e3,e4,e5,e6,e7,e8,e9\})=\{\}) then \n erro r `only 1-vectors, e.g., e1, e2,..., e9, are expected in the list of g enerators` end if;\nif not `subset`(\{seq(e||i,i=1..maxG)\},\{op(vars) \}) then \n error `generators e1,e2,... in the list of polynomials m ust be a subset of the list of generators and they are not!` end if;\n #return here1;\n###################################################### ###############################################\nif C>0 then p:=C else p:=0 end if; #reassigning C to p\n################################### ##################################################################\n#P ath and filename where input file for Singular will be saved to\n##### ###################################################################### ##########################\npathS:=input_for_Singular; #pat h where input file In.txt for Singular will be saved\npathS_filename:= cat(pathS,\"/In.txt\"); #path w/filename where input file for Singular will be saved\n###################################################### ###############################################\npathM:=input_for_Mapl e; #path where input file Out.txt for Maple will be save d\npathM_filename:=cat(pathM,\"/Out.txt\");#path w/filename where inpu t file for Maple will be saved\n###################################### ###############################################################\ndirec tion:=0:\nif nargs=8 then direction:=args[nargs] end if; #switch for e rror messages\n####################################################### ##############################################\n#Changing the name of \+ the input_for_Maple directory so that it could be created, if needed: \n#################################################################### #################################\nif SearchText(\"C:/\",pathM)=0 then pathM2:=pathM \nelif\n SearchText(\"C:/\",pathM)=1 then pathM2:=cat (\"C:\\\\\",substring(pathM,4..-1)); #directory to create\nelse error \+ `write directory to create for Maple input as, for example, \"C:/trans ferM\" `\nend if:\n################################################### #################################################\n#Changing the name \+ of the input_for_Singular directory so that it could be created, if ne eded:\n############################################################### #####################################\nif SearchText(\"C:/\",pathS)=0 \+ then pathS2:=pathS \nelif\n SearchText(\"C:/\",pathS)=1 then pathS2: =cat(\"C:\\\\\",substring(pathS,4..-1)); #directory to create\nelse er ror `write directory to create for Singular as, for example, \"C:/tran sferS\" `\nend if:\n################################################## ###################################################\n#NOTE: If you don 't like these messages to appear, remark the next fourteen lines.\n### ###################################################################### ############################\nif direction='d' or direction=0 then\n \+ if system(cat(\"mkdir \",pathM2))=0 then\n print(`Transfer direc tory for Maple has been made ... proceeding... waiting for Singular re sults...`)\n else\n print(`Transfer directory for Maple already exists... proceeding... waiting for Singular results...`)\n end if; \n if system(cat(\"mkdir \",pathS2))=0 then\n print(`Transfer d irectory for Singular has been made ... proceeding... waiting for Sing ular results...`)\n else\n print(`Transfer directory for Singul ar already exists... proceeding... waiting for Singular results...`)\n end if;\nelif direction='t' then\n print(`Trying to create and \+ display input file for Singular... proceeding...`)\nend if;\n######### ###################################################################### ################################\n#return here1;\n#Produce input file \+ for Singular ...\n#################################################### ########################################################### \nif nargs =8 then \n if evalb(args[nargs]='t') then writeto(terminal) elif\n \+ evalb(args[nargs]='d') then writeto(pathS_filename) else \n e rror `last optional argument needs to be 't' (for displaying to termin al) or 'd' (for saving to disk)`\n end if;\nelse writeto(pathS_filen ame) #redirect Maple output to input file for Singular as default\nend if:\n################################################################ ################################################\n# Define the base ri ng (with term order)\n############################################### \nprintf(`LIB \"nctools.lib\"`);\nprintf(\"%A\\n\",`;`);## end of line and go to next line\nprintf(`ring R =`);\nprintf(cat(` `,p,`,`));\ns: =cat(`(`,seq(cat(vars[i],`,`),i=1..(N-1)),vars[N],`)`);\nprintf(\"%Q\" ,s);\nprintf(`,`);\nsa:=cat(`(`,`a(1:`,N,`),rp)`);\nif member(tord,\{d rp\}) then printf(\"%Q\",sa) else printf(\"%q\",tord) end if;\nprintf( \"%A\\n\",`;`);\n#return here2;\n##################################### ##########\n# Define Grassmann algebra . . . \n####################### ########################\nprintf(`def ER = Exterior()`);\nprintf(\"%A \\n\",`;`);## end of line and go to next line\nprintf(`setring ER`);\n printf(\"%A\\n\",`;`);## end of line and go to next line\n#return here 3;\n###############################################\n# Define polynomi als in Plural . . . \n############################################### \n#Procedure convertmontoS converts Clifford basis monomials\n#of type clibasmon and climon to strings used by Singular\n#\nconvertmontoS:=p roc(m::\{clibasmon,climon\}) local coe,pp,r,mS1,mS2,mS,k,nr;\nif type( m,climon) then do\n pp:=op(Clifford:-cliterms(m));\n coe:=convert( coeff(m,pp),string);\n return cat(coe,\"*\",procname(pp));\n end d o;\nend if; \nif m=Id then return(\"1\") end if:\nr:=Clifford:-extract (m,'integers'):\nnr:=nops(r):\nif nr=1 then return convert(cat(\"e\",r [1]),string) end if:\nmS1:=seq(convert(cat(\"e\",r[k],\"*\"),string),k =1..(nr-1));\nmS2:=convert(cat(\"e\",r[nr]),string);\nmS:=cat(mS1,mS2) :\nreturn mS;\nend proc:\n#return here4;\n############################ ###################\n# Define the ideal . . . \n###################### #########################\nprintf(\"%Q\\n\",`ideal I =`) ; \nfor i to \+ nops(F) do\nele:=F[i];\n#if type(ele,monomial) then\nif type(ele,\{cli basmon,climon\}) then \n if i 't' ...\n####### ##################################################################\nif direction='t' then return NULL end if;\nif assigned(dirpathSexe) then \n dirpathSexeloc:=dirpathSexe: #assign global path to Singular.exe \n else\n ######################################################## #####\n #try a standard path under a typical Windows installation\n \+ #################################################################### ########\n #For version 2-0-3 use: \n #dirpathSexeloc:=\"C:/cygw in/usr/local/Singular/2-0-3/ix86-Win/Singular.exe\":\n ############# ###############################################################\n #F or version 3-0-4 use:\n dirpathSexeloc:=\"C:/cygwin/bin/bash -l C:/c ygwin/bin/Singular\": \nend if;\n############################# ############################################\nexecuteinputfile:=cat(di rpathSexeloc,\" < \", pathS_filename);\nsystem(executeinputfile);\nif \+ %<>0 then\n ######################################################## ######################################\n #If you want to delete path S directory in case of the error, unremark the following line but \n \+ #BE CAREFUL WHAT YOU DELETE as you may need this directory for checki ng file In.txt:\n #system(cat(\"rm -r \",pathS)); ##to remove the di rectory pathS: BE CAREFUL!!!!\n #################################### ##########################################################\n error ` something went wrong while executing Singular:\ncould not find a path \+ on your system to Singular.exe. The path must be \nassigned to a globa l variable dirpathSexe, for example,\n#dirpathSexe:=\"C:/cygwin/usr/lo cal/Singular/2-0-3/ix86-Win/Singular.exe\": for version 2-0-3, or\ndir pathSexe:=\"C:/cygwin/bin/bash -l C:/cygwin/bin/Singular\" for version 3-0-4` \nfi;\n####################################################### #####################\n# Retrieve results from Out.txt created by Sing ular line by line as strings\n######################################## ####################################\n#read(pathM_filename); #this DOE S NOT work yet due to [] in Out.txt\n################################# ###########################################\nfirst := readline(pathM_f ilename);\nline := readline(pathM_filename);\nwhile line <> 0 do\n l ast := line;\n line := readline(pathM_filename)\nend do;\n########## ###################################################################### #####\n###first contains the output string from Singular\n###it needs \+ to be converted back to Maple algebraic input as follows:\n###--- prod ucts like e1*e2, e3*e4*e5, etc... need to be converted to e1we2, e3we4 we5,\n### this is done with the procedure 'convertstarstowedges' in first\n###\n###--- then, the string first needs to be parsed to Maple input with 'parse'\n################################################# ####################################\nconvertstarstowedges:=proc(ss::s tring) local i,FROM,TO,locss;\nFROM:=[\"e1*e\",\"e2*e\",\"e3*e\",\"e4* e\",\"e5*e\",\"e6*e\",\"e7*e\",\"e8*e\",\"e9*e\"]:\nTO:=[\"e1we\",\"e2 we\",\"e3we\",\"e4we\",\"e5we\",\"e6we\",\"e7we\",\"e8we\",\"e9we\"]: \nlocss:=ss:\nfor i from 1 to nops(FROM) do\n locss:=StringTools: -SubstituteAll(locss,FROM[i],TO[i]);\nend do;\nend proc:\n###lprint(fi rst);###unremark for testing\nfirst:=convertstarstowedges(first); #cha nging text input from Singular into Maple algebraic\n###lprint(first); ###unremark for testing\nfseq:=parse(first); #changing text input from Singular into Maple algebraic\n###################################### ###################################### \nF:=[fseq];\nif F=[] then \n \+ print(`Plural has not returned any results... increase 'wait' time or make it 'infty'`)\nend if;\n######################################### ################################################\n#If you want to dele te pathS directory, unremark the following line but BE CAREFUL \n#WHAT YOU DELETE as you may need this directory for checking file In.txt:\n ####system(cat(\"rm -r \",pathS)); #To remove pathS directory: BE CAR EFUL WHAT YOU DELETE!\n############################################### ##########################################\n########################## ###############################################################\n#If y ou want to delete pathM directory, unremark the following line but BE \+ CAREFUL \n#WHAT YOU DELETE as you may need this directory for checking file Out.txt:\n####system(cat(\"rm -r \",pathM)); #To remove pathM d irectory: BE CAREFUL WHAT YOU DELETE!\n############################### ##########################################################\nF:=map(exp and,F);\nF:=map(Clifford:-displayid,F);\nreturn F; \nend proc:\n" }} {PARA 0 "" 0 "" {TEXT -1 99 "3. Procedure 'PLURALforClink' connects wi th Plural to compute Groebner bases in Clifford algebras.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20211 "PLURALforClink:=\nproc(G::list(\{climo n, clibasmon, clipolynom\}),C::nonnegint,tord::symbol,elimorder::list( \{clibasmon\}),BB::diagmatrix,\ninput_for_Singular::string,input_for_M aple::string,wait::\{nonnegint,symbol\}) \nlocal i,j,pathS,pathS2,path M,pathM2,vars,varsfound,F,p,ele,s,sa,N,pathS_filename,maxG,maxelimorde r,msize,\n pathM_filename,executeinputfile,first,line,last,fseq,d irpathSexeloc,direction,\n convertmontoS,convertmontoSCliff,conve rtpowerstoproducts,convertstarstowedges,convertstarstoC;\nglobal dirpa thSexe;\n############################################################# #######################################\ndescription `Created: March 8 , 2008. Last revised: December 20, 2008`;\n########################### ###################################################################### ###\n#Input arguments are as follows:\n#G - a list with polynomials that generate a polynomial ideal G in Grassmann algebra\n#C - non \+ negative characteristic for the ground field of polynomial coefficient s, set 0 for the rationals\n#elimorder - a list of variables, e.g., e1 ,e2,e3,...,e9\n#tord - total order accepted by Singular: \n# lp \+ = lex order \n# dp = degrevlex order but is known as grevlex in \+ Cox\n# rp = \"reverse lex order\" in Singular:Plural, also known as inverse lex order\n# drp = NO NAME in Plural, the same as (a (1:n),rp) in Plural, or as Deg[InvLex] in CLIFFORD/Bigebra\n# Dp = deglex order\n# ls = negative lex order\n# ds = negativ e degree reverse lex order\n# Ds = negative degree lex order\n# \+ NOTE: In this version, for added flexibility, tord can really be anything as long as \n# Singular:Plural will recognize it \n#BB - diagonal matrix that defines a quadratic form Q for Cl(Q), BB \+ can be degenerate\n#input_for_Singular - path where input file In.txt \+ for Singular will be saved by Maple\n#input_for_Maple - path where \+ output file Out.txt for Maple will be saved by Singular\n#wait - numbe r of seconds Singular will compute at most or 'infty' for infinite num ber of seconds\n###################################################### ##############################################\n#if not member(tord,\{ lp,dp,rp,Dp,ls,ds,Ds\}) then\n# error `third argument total order mu st be one of lp, dp, rp, Dp, ls, ds, or Ds`\n#end if;\nif not member(t ord,\{lp,dp,rp,drp,Dp,ls,ds,Ds\}) then\n WARNING(\"third argument, t otal order, must be one of lp, dp, rp, drp, Dp, ls, ds, or Ds. Proceed ing anyway...\")\nend if;\n########################################### #########################################################\nF:=map(expa nd,G);\nvars:=elimorder;\nN:=nops(vars):\n############################ ###################################################################### ##\n###Testing lists G and elimorder for correct input\n############## ###################################################################### ################\nmaxG,maxelimorder:=Clifford:-maxindex(F),Clifford:-m axindex(vars);\nif maxG>maxelimorder then \n error `maximum index fo und in the list of polynomials is greater than the maximum index found in the list of generators` end if;\nif not evalb(`minus`(convert(vars ,set),\{e1,e2,e3,e4,e5,e6,e7,e8,e9\})=\{\}) then \n error `only 1-ve ctors, e.g., e1, e2,..., e9, are expected in the list of generators` e nd if;\nif not `subset`(\{seq(e||i,i=1..maxG)\},\{op(vars)\}) then \n \+ error `generators e1,e2,... in the list of polynomials must be a sub set of the list of generators and they are not!` end if;\nmsize:=linal g:-rowdim(evalm(BB)):\nif msize<>nops(vars) then\n error `size of th e square matrix must equal to the number of generators` end if; \n#### ###################################################################### ###########################\nif C>0 then p:=C else p:=0 end if; #reass igning C to p\n####################################################### ##############################################\n#Path and filename whe re input file for Singular will be saved to\n######################### ###################################################################### ######\npathS:=input_for_Singular; #path where input file I n.txt for Singular will be saved\npathS_filename:=cat(pathS,\"/In.txt \"); #path w/filename where input file for Singular will be saved\n### ###################################################################### ############################\npathM:=input_for_Maple; #p ath where input file Out.txt for Maple will be saved\npathM_filename:= cat(pathM,\"/Out.txt\");#path w/filename where input file for Maple wi ll be saved\n######################################################### ############################################\ndirection:=0:\nif nargs= 9 then direction:=args[nargs] end if; #switch for error messages\n#### ###################################################################### ###########################\n#Changing the name of the input_for_Maple directory so that it could be created, if needed:\n################## ###################################################################### #############\nif SearchText(\"C:/\",pathM)=0 then pathM2:=pathM \neli f\n SearchText(\"C:/\",pathM)=1 then pathM2:=cat(\"C:\\\\\",substrin g(pathM,4..-1)); #directory to create\nelse error `write directory to \+ create for Maple input as, for example, \"C:/transferM\" `\nend if:\n# ###################################################################### ###############################\n#Changing the name of the input_for_S ingular directory so that it could be created, if needed:\n########### ###################################################################### #####################\nif SearchText(\"C:/\",pathS)=0 then pathS2:=pat hS \nelif\n SearchText(\"C:/\",pathS)=1 then pathS2:=cat(\"C:\\\\\", substring(pathS,4..-1)); #directory to create\nelse error `write direc tory to create for Singular as, for example, \"C:/transferS\" `\nend i f:\n################################################################## ####################################\n#NOTE: If you don't like these m essages to appear, remark the next fourteen lines.\n################## ###################################################################### ##############\nif direction='d' or direction=0 then\n if system(cat (\"mkdir \",pathM2))=0 then\n print(`Transfer directory for Maple has been made ... proceeding... waiting for Singular results...`)\n \+ else\n print(`Transfer directory for Maple already exists... pro ceeding... waiting for Singular results...`)\n end if;\n if system (cat(\"mkdir \",pathS2))=0 then\n print(`Transfer directory for S ingular has been made ... proceeding... waiting for Singular results.. .`)\n else\n print(`Transfer directory for Singular already exi sts... proceeding... waiting for Singular results...`)\n end if;\nel if direction='t' then\n print(`Trying to create and display input \+ file for Singular... proceeding...`)\nend if;\n####################### ###################################################################### ##########\n#Produce input file for Singular ...\n#################### ###################################################################### ############# \nif nargs=9 then \n if evalb(args[nargs]='t') then wr iteto(terminal) elif\n evalb(args[nargs]='d') then writeto(pathS_ filename) else \n error `last optional argument needs to be 't' ( for displaying to terminal) or 'd' (for saving to disk)`\n end if;\n else writeto(pathS_filename) #redirect Maple output to input file for \+ Singular as default\nend if:\n######################################## ###############################################################\n# Def ine the base ring (with term order)\n################################# ###################################################################### \nprintf(`LIB \"clifford.lib\"`);\nprintf(\"%A\\n\",`;`);## end of lin e and go to next line\nprintf(`ring R =`);\nprintf(cat(` `,p,`,`));\ns :=cat(`(`,seq(cat(vars[i],`,`),i=1..(N-1)),vars[N],`)`);\nprintf(\"%Q \",s);\nprintf(`,`);\nsa:=cat(`(`,`a(1:`,N,`),rp)`);\nif member(tord, \{drp\}) then printf(\"%Q\",sa) else printf(\"%q\",tord) end if;\nprin tf(\"%A\\n\",`;`);\n################################################## #####################################################\n# Define option s\n################################################################### ####################################\nprintf(`option(redSB)`);\nprintf (\"%A\\n\",`;`);## end of line and go to next line\nprintf(`option(red Tail)`);\nprintf(\"%A\\n\",`;`);## end of line and go to next line\n## ###################################################################### ###############################\n# Define Clifford algebra . . . \n### ###################################################################### ##############################\nprintf(cat(`matrix M[`,msize,`][`,msiz e,`]`));\nprintf(\"%A\\n\",`;`);## end of line and go to next line\ns: =cat(`(`,seq(cat(vars[i],`,`),i=1..(N-1)),vars[N],`)`):\nprintf(cat( s eq(cat(`M[`,i,`,`,i,`]=`,2*BB[i,i],`;`),i=1..(msize-1)),cat(`M[`,msize ,`,`,msize,`]=`,2*BB[msize,msize])));\nprintf(\"%A\\n\",`;`);## end of line and go to next line\nprintf(`clifAlgebra(M)`);\nprintf(\"%A\\n\" ,`;`);## end of line and go to next line\nprintf(`qring Q =twostd(clQu ot)`);\nprintf(\"%A\\n\",`;`);## end of line and go to next line\n#### ###################################################################### #############################\n# Define polynomials in Plural . . . \n ###################################################################### #################################\n#Procedure convertmontoS converts C lifford basis monomials\n#of type clibasmon and climon to strings used by Singular\n######################################################## ###############################################\nconvertmontoS:=proc(m ::\{clibasmon,climon\}) local coe,pp,r,mS1,mS2,mS,k,nr;\nif type(m,cli mon) then do\n pp:=op(Clifford:-cliterms(m));\n coe:=convert(coeff (m,pp),string);\n return cat(coe,\"*\",procname(pp));\n end do;\ne nd if; \nif m=Id then return(\"1\") end if:\nr:=Clifford:-extract(m,'i ntegers'):\nnr:=nops(r):\nif nr=1 then return convert(cat(\"e\",r[1]), string) end if:\nmS1:=seq(convert(cat(\"e\",r[k],\"*\"),string),k=1..( nr-1));\nmS2:=convert(cat(\"e\",r[nr]),string);\nmS:=cat(mS1,mS2):\nre turn mS;\nend proc:\nconvertmontoSCliff:=proc(m::\{clibasmon,climon,cl iprod,`&*`(cliscalar,cliprod)\}) local coe,pp,la,r,nr,mS1,mS2,mS,k,fla g;\nif type(m,climon) then do\n pp:=op(Clifford:-cliterms(m));\n c oe:=convert(coeff(m,pp),string);\n return cat(coe,\"*\",procname(pp) );\n end do;\nend if; \nif type(m,`&*`(cliscalar,cliprod)) then \nfl ag:=patmatch(m,coe::cliscalar*pp::cliprod,'la');\ncoe,pp:=rhs(la[1]),r hs(la[2]);\ncoe:=convert(coe,string);\nreturn cat(coe,\"*\",procname(p p));\nend if; \nif m=Id then return(\"1\") end if:\nif type(m,clibasmo n) then return(cat(`m`)) end if:\nif type(m,cliprod) then\n r:=[op(m )]:\n nr:=nops(r):\n mS1:=seq(convert(cat(r[k],\"*\"),string),k=1. .(nr-1));\n mS2:=convert(cat(r[nr]),string);\n mS:=cat(mS1,mS2):\n return mS;\nend if;\nend proc:\n################################### #################################################################\n##C onverting polynomials in G from Grassmann basis to Clifford basis w.r. t. default B form\n################################################### #################################################\nF:=map(Clifford:-di splayid,F):\nF:=map(Cliplus:-cliexpand,F,B);\n######################## #######################\n# Define the ideal . . . \n################## #############################\nprintf(\"%Q\\n\",`ideal I =`) ; \nfor i to nops(F) do\nele:=F[i];\nif type(ele,\{clibasmon,climon\}) then \n \+ if i=1)\{int j=1; for ( j=1; j <= siz e(GB); j++) \{GB[j]=NF(GB[j],std(0));\}\};`);\ns:=cat(\"\\\":w \",path M_filename,\"\\\"\",`,`,\"GB\");\ns:=cat(`write(`,s,`);`);\nprintf(\"% A\\n\",s);\nprintf(\"%Q\\n\",`quit;`); #quit Singular when finished\n# ###################################################\n# Finished writin g input file for Singular\n########################################### #########\nwriteto(terminal); #redirect Maple output to terminal\n#### ##################################################################### \n## Call Singular and execute its input file if direction <> 't' ... \n#################################################################### #####\nif direction='t' then return NULL end if;\nif assigned(dirpathS exe) then\n dirpathSexeloc:=dirpathSexe: #assign global path to Sing ular.exe\n else\n ################################################ ############################\n #try a standard path under a typical \+ Windows installation\n ############################################# ###############################\n #For version 2-0-3 use: \n #di rpathSexeloc:=\"C:/cygwin/usr/local/Singular/2-0-3/ix86-Win/Singular.e xe\":\n ############################################################ ################\n #For version 3-0-4 use:\n dirpathSexeloc:=\"C:/ cygwin/bin/bash -l C:/cygwin/bin/Singular\": \nend if;\n###### ###################################################################### ###\nexecuteinputfile:=cat(dirpathSexeloc,\" < \", pathS_filename);\ns ystem(executeinputfile);\nif %<>0 then\n ########################### ###################################################################\n \+ #If you want to delete pathS directory in case of the error, unremar k the following line but \n #BE CAREFUL WHAT YOU DELETE as you may n eed this directory for checking file In.txt:\n #system(cat(\"rm -r \+ \",pathS)); ##to remove the directory pathS: BE CAREFUL!!!!\n ###### ###################################################################### ##################\n error `something went wrong while executing Sin gular:\ncould not find a path on your system to Singular.exe. The path must be \nassigned to a global variable dirpathSexe, for example,\n#d irpathSexe:=\"C:/cygwin/usr/local/Singular/2-0-3/ix86-Win/Singular.exe \": for version 2-0-3, or\ndirpathSexe:=\"C:/cygwin/bin/bash -l C:/cyg win/bin/Singular\" for version 3-0-4` \nfi;\n######################### ###################################################\n# Retrieve result s from Out.txt created by Singular line by line as strings\n########## ##################################################################\n#r ead(pathM_filename); #this DOES NOT work yet due to [] in Out.txt\n### ###################################################################### ###\nfirst := readline(pathM_filename);\nline := readline(pathM_filena me);\nwhile line <> 0 do\n last := line;\n line := readline(pathM_ filename)\nend do;\n################################################## ###################################\n###first contains the output stri ng from Singular\n###it needs to be converted back to Maple algebraic \+ input as follows:\n###\n###--- powers like 2*e2^3*e3^4 need to be conv erted to plain products\n### this is done with the procedure conver tpowerstoproducts\n###\n###--- products like e1*e2, e3*e4*e5, etc... n eed to be converted to e1we2, e3we4we5,\n### this is done with the \+ procedure 'convertstarstowedges' in first\n###\n###--- then, the strin g first needs to be parsed to Maple input with 'parse'\n############## ###################################################################### #\nconvertpowerstoproducts:=proc(ss::string) local le,patlist,L,i,k,st r,flag,FROM,TO,locss,powertoproduct;\nif not StringTools:-Has(ss,\"^\" ) then return args[1] end if;\nlocss:=ss:\nle:=StringTools:-Length(loc ss);\npatlist:=[\"e1^\",\"e2^\",\"e3^\",\"e4^\",\"e5^\",\"e6^\",\"e7^ \",\"e8^\",\"e9^\"];\nL:=[StringTools:-SearchAll(patlist,locss)];\n### #####################################\nFROM:=[]:\nfor i from 1 to nops (L) do\nstr:=patlist[L[i][2]];\nk:=3:\nflag:=StringTools:-IsDigit(Stri ngTools:-SubString(locss,L[i][1]+k..L[i][1]+k)):\nwhile flag do\n \+ str:=cat(str,StringTools:-SubString(locss,L[i][1]+k..L[i][1]+k)):\n \+ k:=k+1:\n if k <= le then \n flag:=StringTools:- IsDigit(StringTools:-SubString(locss,L[i][1]+k..L[i][1]+k));\n \+ else\n flag:=false\n end if:\nend do:\nFROM :=[op(FROM),str];\nend do:\n########################################\n powertoproduct:=proc(ss::string) local a,p,as:\na:=parse(ss):\nif not \+ type(a,`^`) then return convert(a,string) end if:\na,p:=op(parse(ss)); \nif p=1 then return convert(a,string) end if:\na:=convert(a,string); \nas:=cat(a,\"*\");\nreturn(cat(StringTools:-Repeat(as,p-1),a));\nend \+ proc:\n########################################\nTO:=map(powertoproduc t,FROM);\n########################################\nfor i from 1 to no ps(FROM) do\n locss:=StringTools:-SubstituteAll(locss,FROM[i],TO[ i]);\nend do;\nreturn locss;\nend proc:\n############################# ########################################################\nconvertstars towedges:=proc(ss::string) local i,FROM,TO,locss;\nFROM:=[\"e1*e\",\"e 2*e\",\"e3*e\",\"e4*e\",\"e5*e\",\"e6*e\",\"e7*e\",\"e8*e\",\"e9*e\"]: \nTO:=[\"e1we\",\"e2we\",\"e3we\",\"e4we\",\"e5we\",\"e6we\",\"e7we\", \"e8we\",\"e9we\"]:\nlocss:=ss:\nfor i from 1 to nops(FROM) do\n \+ locss:=StringTools:-SubstituteAll(locss,FROM[i],TO[i]);\nend do;\nend \+ proc:\n############################################################### ####################################\nconvertstarstoC:=proc(ss::string ) local i,FROM,TO,locss;\nFROM:=[\"e1*e\",\"e2*e\",\"e3*e\",\"e4*e\", \"e5*e\",\"e6*e\",\"e7*e\",\"e8*e\",\"e9*e\"]:\nTO:=[\"e1 &C e\",\"e2 \+ &C e\",\"e3 &C e\",\"e4 &C e\",\"e5 &C e\",\"e6 &C e\",\"e7 &C e\",\"e 8 &C e\",\"e9 &C e\"]:\nlocss:=ss:\nfor i from 1 to nops(FROM) do\n \+ locss:=StringTools:-SubstituteAll(locss,FROM[i],TO[i]);\nend do;\ne nd proc:\n##print(first);###unremark for testing\n#################### ###################################################################### ##########\n## First, we make sure to convert powers to products `*`: \nfirst:=convertpowerstoproducts(first):\n############################ ###################################################################### ##\n## Second, we convert products `*` to Clifford products `&C`: \nfi rst:=convertstarstoC(first); #changing text input from Singular into M aple algebraic\n###lprint(first);###unremark for testing\nfseq:=parse( first); #changing text input from Singular into Maple algebraic\n##### ###################################################################### ######################### \nF:=[fseq];\nif F=[] then \n print(`Plura l has not returned any results... increase 'wait' time or make it 'inf ty'`)\nend if;\n###################################################### ##############################################\n#If you want to delete pathS directory, unremark the following line but BE CAREFUL \n#WHAT Y OU DELETE as you may need this directory for checking file In.txt:\n## ##system(cat(\"rm -r \",pathS)); #To remove pathS directory: BE CAREF UL WHAT YOU DELETE!\n################################################# ########################################\n############################ #############################################################\n#If you want to delete pathM directory, unremark the following line but BE CA REFUL \n#WHAT YOU DELETE as you may need this directory for checking f ile Out.txt:\n####system(cat(\"rm -r \",pathM)); #To remove pathM dir ectory: BE CAREFUL WHAT YOU DELETE!\n################################# ########################################################\nF:=map(Clipl us:-clieval,F);\n###print(map(Cliplus:-cliexpand,F,B));###unremark for testing\nF:=map(Clifford:-displayid,F);\nreturn F; \nend proc:\n" }} {PARA 0 "" 0 "" {TEXT -1 45 "30. Procedure 'init' is automatically loa ded." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1030 "init:=proc() \n global ` convert/set_to_pts`;\n local x,y,i,j;\n printf(\"SINGULARPLURALlin k 0.3 beta (December 20, 2008) says Hello...\\n\");\n printf(\"3 fun ction(s) exported\\n\");\n printf(\"===>If you find this packages us eful, please let us know about your derived work.\\n\");\n printf(\" ===>You can contact us at http://math.tntech.edu/rafal/ or http://clif ford.physik.uni-konstanz.de/~fauser/\\n\");\n printf(\"===>This pack age requires CLIFFORD/Bigebra for Maple available from http://math.tnt ech.edu/rafal/\\n\");\n printf(\"===>Singular:Plural requires nctool s.lib and clifford.lib libraries to be installed. Consult http://www.s ingular.uni-kl.de/\\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(Big ebra):\nprintf(\"Bigebra package with %d functions loaded...\\n\",nops (%));\nend proc: \n\nexit:=proc()\n printf(\"SINGULARPLURALlink 0.3 beta (December 20, 2008) says good bye...\",%s\\n);\nend proc:\nend m odule:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "libname;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$Q7C:\\Maple12/Cliffor dlib6\"Q/C:\\Maple12/libF$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "SingularPlurallibname:=libname[1];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "savelibname:=SingularPlurallibname;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%6SingularPlurallibnameGQ7C:\\Maple12/Cliffordlib6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,savelibnameGQ7C:\\Maple12/Cliffor dlib6\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "#march('create', savelibname,500);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 140 "savel ib('SINGULARPLURALlink');\n########################################### ##################################################################" }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "SingularPlurallibname:=libn ame[1];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "savelibname:=SingularPlu rallibname;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%6SingularPlurallibnam eGQ7C:\\Maple12/Cliffordlib6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,s avelibnameGQ7C:\\Maple12/Cliffordlib6\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "#march('create',savelibname,500);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 140 "savelib('SINGULARPLURALlink');\n########## ###################################################################### #############################" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "restart:restart:" }}{PARA 6 "" 1 "" {TEXT -1 64 "SINGULARPLURALlink 0.3 beta (December 2 0, 2008) says good bye..." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "with(SINGULARPLURALlink);" }}{PARA 6 "" 1 "" {TEXT -1 61 "SINGULAR PLURALlink 0.3 beta (December 20, 2008) says Hello..." }}{PARA 6 "" 1 "" {TEXT -1 22 "3 function(s) exported" }}{PARA 6 "" 1 "" {TEXT -1 81 "===>If you find this packages useful, please let us know about your d erived work." }}{PARA 6 "" 1 "" {TEXT -1 106 "===>You can contact us a t http://math.tntech.edu/rafal/ or http://clifford.physik.uni-konstanz .de/~fauser/" }}{PARA 6 "" 1 "" {TEXT -1 97 "===>This package requires CLIFFORD/Bigebra for Maple available from http://math.tntech.edu/rafa l/" }}{PARA 6 "" 1 "" {TEXT -1 123 "===>Singular:Plural requires nctoo ls.lib and clifford.lib libraries to be installed. Consult http://www. singular.uni-kl.de/" }}{PARA 6 "" 1 "" {TEXT -1 44 "Clifford package w ith 84 functions loaded..." }}{PARA 6 "" 1 "" {TEXT -1 83 "Increase ve rbosity by infolevel[`function`]=val -- use online help > ?Bigebra[hel p]" }}{PARA 6 "" 1 "" {TEXT -1 43 "Bigebra package with 33 functions l oaded..." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&%/PLURALforClinkG%/PLURA LforGlinkG%-SINGULARlinkG%,linkversionG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "linkversion():" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%L+ ++++++++++++++++++++++++++++++++++++++++++G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%]pSINGULARPLURALlink~-~A~Maple~12~Package~for~Linking~ Maple~with~Singular~and~PluralG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%io Last~revised:~December~20,~2008~(Source~file:~SINGULARPLURALlink_0515_ M12.mws)G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%jnCopyright~2008~by~Rafa l~Ablamowicz~(*)~and~Bertfried~Fauser~($)G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%!G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%H(*)~Department ~of~Mathematics,~Box~5054G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%gn~~~~T ennessee~Technological~University,~Cookeville,~TN~38505G" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#%U~~~~tel:~USA~(931)~372-3662,~fax:~USA~(931)~37 2-6353G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%;~~~~rablamowicz@tntech.ed uG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%B~~~~http://math.tntech.edu/raf al/G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%!G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%Y($)~Universit\"at~Konstanz,~Fachbereich~Physik,~Fach~ M678G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%<~~~~78457~Konstanz,~Germany G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%E~~~~Bertfried.Fauser@uni-konsta nz.deG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%T~~~~http://clifford.physik .uni-konstanz.de/|irfauser/G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%B~~~~ http://math.tntech.edu/rafal/G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%!G " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%hpThis~package~requires~CLIFFORD/ Bigebra~for~Maple~available~from~http://math.tntech.edu/rafal/G" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#%arSingular:Plural~requires~nctools.li b~and~clifford.lib~libraries~to~be~installed.~Consult~http://www.singu lar.uni-kl.deG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%!G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%_p++++++++++++This~is~SINGULARPLURALlink~for~Mapl e~12~version~0.3~with~drp++++++++++++G" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "with(LibraryTools);" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#72%1ActivationModuleG%1AddFromDirectoryG%'AuthorG%'BrowseG%3BuildFro mDirectoryG%/ConvertVersionG%'CreateG%'DeleteG%,FindLibraryG%,PrefixMa tchG%)PriorityG%%SaveG%-ShowContentsG%*TimestampG%4UpdateFromDirectory G%*WriteModeG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "libname;" } }{PARA 11 "" 1 "" {XPPMATH 20 "6$Q7C:\\Maple12/Cliffordlib6\"Q/C:\\Map le12/libF$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "ShowContents( libname[1]);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#747&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_suppo rt.mF&7(F(F)F*F3\"#_\"#a\"'_:x\"$v%7&Q)Define.mF&7(F(F)F*F+\"#:F,\"'xJ b\"$*[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+matc ompR.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\"'Wj67&Q+Octonion.mF&7(F(F)F*F+\"#Q\"#P\"'`*)f\"$O%7&Q,RJgro bner.mF&7(F(F)F*F3Ffn\"#U\"'M4s\"%\\57&Q5SINGULARPLURALlink.mF&7(F(F)F *F*\"\"#FO\"'>m))\"$&H7&Q+SchurFkt.mF&7(F(F)F*\"#>\"#N\"#d\"']c!)\"%DU " }}}{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#Q5SINGULARPLURALlink.m6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q+SchurFkt.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 64 "SINGULARPLURALlink 0 .3 beta (December 20, 2008) says good bye..." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "with(SINGULARPLURALlink);" }}{PARA 6 "" 1 "" {TEXT -1 61 "SINGULARPLURALlink 0.3 beta (December 20, 2008) says Hell o..." }}{PARA 6 "" 1 "" {TEXT -1 22 "3 function(s) exported" }}{PARA 6 "" 1 "" {TEXT -1 81 "===>If you find this packages useful, please le t us know about your derived work." }}{PARA 6 "" 1 "" {TEXT -1 106 "== =>You can contact us at http://math.tntech.edu/rafal/ or http://cliffo rd.physik.uni-konstanz.de/~fauser/" }}{PARA 6 "" 1 "" {TEXT -1 97 "=== >This package requires CLIFFORD/Bigebra for Maple available from http: //math.tntech.edu/rafal/" }}{PARA 6 "" 1 "" {TEXT -1 123 "===>Singular :Plural requires nctools.lib and clifford.lib libraries to be installe d. Consult http://www.singular.uni-kl.de/" }}{PARA 6 "" 1 "" {TEXT -1 44 "Clifford package with 84 functions loaded..." }}{PARA 6 "" 1 "" {TEXT -1 83 "Increase verbosity by infolevel[`function`]=val -- use on line help > ?Bigebra[help]" }}{PARA 6 "" 1 "" {TEXT -1 43 "Bigebra pac kage with 33 functions loaded..." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7& %/PLURALforClinkG%/PLURALforGlinkG%-SINGULARlinkG%,linkversionG" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "#test for functionality\nlin kversion();" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%L+++++++++++++++++++++ ++++++++++++++++++++++G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%]pSINGULAR PLURALlink~-~A~Maple~12~Package~for~Linking~Maple~with~Singular~and~Pl uralG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%ioLast~revised:~December~20, ~2008~(Source~file:~SINGULARPLURALlink_0515_M12.mws)G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%jnCopyright~2008~by~Rafal~Ablamowicz~(*)~and~Bert fried~Fauser~($)G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%!G" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#%H(*)~Department~of~Mathematics,~Box~5054G" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#%gn~~~~Tennessee~Technological~Univers ity,~Cookeville,~TN~38505G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%U~~~~te l:~USA~(931)~372-3662,~fax:~USA~(931)~372-6353G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%;~~~~rablamowicz@tntech.eduG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%B~~~~http://math.tntech.edu/rafal/G" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#%!G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%Y($)~Universi t\"at~Konstanz,~Fachbereich~Physik,~Fach~M678G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%<~~~~78457~Konstanz,~GermanyG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%E~~~~Bertfried.Fauser@uni-konstanz.deG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%T~~~~http://clifford.physik.uni-konstanz.de/|irfa user/G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%B~~~~http://math.tntech.edu /rafal/G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%!G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%hpThis~package~requires~CLIFFORD/Bigebra~for~Maple~ava ilable~from~http://math.tntech.edu/rafal/G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%arSingular:Plural~requires~nctools.lib~and~clifford.li b~libraries~to~be~installed.~Consult~http://www.singular.uni-kl.deG" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#%!G" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#%_p++++++++++++This~is~SINGULARPLURALlink~for~Maple~12~version~0.3~w ith~drp++++++++++++G" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 38 "Cookeville/ Konstanz, December 20, 2008" }}}}{MARK "30 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }