{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 59 "SINGULARPLURALlink 0.3 beta (May 15, 2008) says go od bye..." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "libname;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6&Q7C:\\Maple11/Cliffordlib6\"Q/C:\\Mapl e11/libF$Q4C:\\Brachey.Troy/TNBF$QAC:\\Maple11/SINGULARPLURALlinklibF$ " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 1401 "Package SINGULARPLURALlink provides an interface b etween Maple and Singular with Plural for the purpose of computing com mutative Groebner basis in Singular and non commutative Groebner bases in non commutative algebras, e.g., Grassmann, Clifford, etc., in its \+ Plural extension. For now, the link permits only non commutative Groeb ner bases computation in Grassmann and Clifford algebras of a quadrati c form. Input from Maple is sent to Singular:Plural, and results are r eturned to Maple.\n\nNOTE: In order to compute with Grassmann or Cliff ord algebras in Maple, download and install package CLIFFORD/Bigebra b y Ablamowicz and Fauser from http://www.math.tntech.edu/rafal/\n\nNOTE : In order to compute with Grassmann or Clifford algebras in Singular: Plural, make sure that your Singular:Plural library located in C:\\cyg win\\usr\\share\\Singular\\LIB directory contains two Singular:Plural \+ libraries \"nctools.lib\" and \"clifford.\".\n\n-- Procedure SINGULARl ink provides an interface between Maple and Singular for the purpose o f computing commutative Groebner basis in Singular and returning resul t 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 co mmands in Singular than \"std\" and \"groebner\". This procedures is t he same as the one posted on Singular's web page \n\nhttp://www.mathem atik.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 312 "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, May 15, 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 4651 "# Date: May 15, 2008\nrestart:\n#\n# This is the so urce code file of the \"SINGULARPLURALlink\" package\n# File: SINGULAR .PLURAL.link_M11_0515.mws\n#\n# Copyright (c) Rafal Ablamowicz & Bertf ried Fauser 2008, all rights reserved.\n#\n########################### ####################################################\n# \+ #\n# DI SCLAIMER: \+ #\n# \+ #\n# THERE IS NO WARRANTY FOR THE GROEBNER FOR GRASSMAN N PACKAGE TO THE EXTENT #\n# PERMITTED BY APPLICABLE LAW. EXCEPT WHE N OTHERWISE STATED IN WRITING THE #\n# COPYRIGHT HOLDERS AND/OR OTH ER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT #\n# WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT #\n# LIMI TED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \+ #\n# A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PER FORMANCE #\n# OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU #\n# ASSUME THE COST OF ALL NECESSARY SERVICIN G, REPAIR OR CORRECTION. #\n# \+ #\n###################### #########################################################\n#\n# If yo u 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# +++ The package extends the Clifford and Bigebra packages.\n# +++ It computes Groebne r bases in Grassmann and Clifford algebras by providing a link with PL URAL, part of Singular.\n# +++ See http://www.singular.uni-kl.de/downl oad.html for downloading Singular.\n#\n# +++ See package GfG that comp utes Groebner bases in Grassmann and Clifford algebras in Maple direct ly.\n#\n# +++ Main functions are:\n#\n# --- SINGULARlink : provide s a link with Singular to compute commutative Groebner bases in multiv ariable polynomial ring k[x1,x2,x3,...,xn]\n# f or a specific field k and monomial order\n#\n# --- PLURALforGlink : \+ provides a link with Plural to compute non commutative Groebner bases \+ in a Grassmann algebra G generated by n anticommuting \n# \+ variables e1,e2,e3,...,en where n <=9. The variables satisf y relations \n#\n# wedge(ei,ej) = 0, i=j, and w edge(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 Grassmann (or Cli fford) polynomials. Note that Grassmann basis is used as default in th e\n# Clifford algebra Cl(B) of a bilinear form. For more information download Clifford/Bigebra from http://www.math.t ntech.edu/rafal/\n# and type ?Clifford at Maple prompt. In Clifford/Bigebra, the Grassmann algebra is implemented as \+ the Clifford algebra Cl(B)\n# where the form B \+ is identically a square zero matrix of appropriate size (max size is 9 x 9).\n#\n# --- PLURALforClink : provides a link with Plural to com pute non commutative Groebner bases in a Clifford algebra Cl(Q) of a q uadratic form Q. Cl(Q) is\n# generated by n non commuting variables e1,e2,e3,...,en where n <=9. The variables satisf y 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) = - wedg e(ej,ei), i <>j, 1 <=i,j<= 9,\n#\n# where 'cmul ' is the Clifford product in Cl(Q), Id is is the identity element in C l(B), and `*` is just a product between scalars and \n# \+ elements in Cl(B). The Clifford product is implemented in CLI FFORD/Bigebra package as Clifford:-cmul(p1,p2) and &c(p1,p2) where p1, p2 \n# are Grassmann (or Clifford) polynomials. Note that Grassmann basis is used as default in the Clifford algebra \+ Cl(B) of any bilinear \n# form. For more inform ation 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 form B unle ss 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# +++ TYPES:\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##\nexport linkversion, \n SINGULARlink,\n PLURALforGlink,\n PLURALforClink; \n###################################\n##\n## -- list of local routin es\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 1369 "linkversion:= proc()\noptions `Copyrigh t (c) 2008 by Rafal Ablamowicz and Bertfried Fauser. All rights reserv ed.`;\ndescription `Last revised: May 15, 2008`;\nprint(`+++++++++++++ ++++++++++++++++++++++++++++++`);\nprint(`SINGULARPLURALlink - A Maple 11 Package for Linking Maple with Singular and Plural`); \nprint(`Las t revised: May 15, 2008 (Source file: SINGULARPLURALlink_M11_0515.mws) `);\nprint(`Copyright 2008 by Rafal Ablamowicz (*) and Bertfried Fause r ($)`);\nprint(``);\nprint(`(*) Department of Mathematics, Box 5054`) ;\nprint(` Tennessee Technological University, Cookeville, TN 38505 `);\nprint(` tel: USA (931) 372-3662, fax: USA (931) 372-6353`);\np rint(` rablamowicz@tntech.edu`);\nprint(` http://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.phy sik.uni-konstanz.de/~fauser/`); \nprint(` http://math.tntech.edu/r afal/`);\nprint(``);\nprint(`This package requires CLIFFORD/Bigebra fo r Maple available from http://math.tntech.edu/rafal/`);\nprint(`Singul ar:Plural requires nctools.lib and clifford.lib libraries to be instal led. Consult http://www.singular.uni-kl.de`);\nprint(``);\nprint(`++++ ++++++++This is SINGULARPLURALlink for Maple 11 version 0.3 with drp++ ++++++++++`);\nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 29 "1. Procedur e 'SINGULARlink' \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 12160 "SINGULARl ink:=\nproc(Id::list(polynom),C::nonnegint,tord::symbol,elimorder::lis t,\ninput_for_Singular::string,input_for_Maple::string,wait::\{nonnegi nt,symbol\}) \nlocal i,j,pathS,pathS2,pathM,pathM2,vars,varsfound,F,p, ele,s,N,pathS_filename,\n pathM_filename,executeinputfile,first,l ine,last,fseq,dirpathSexeloc,direction;\nglobal dirpathSexe;\n######## ###################################################################### #####################\ndescription `Last revised: May 15, 2008`;\n#### ###################################################################### #########################\n#Input arguments are as follows:\n#Id - a list with polynomials that generate a polynomial ideal Id\n#C - no n negative characteristic for the ground field of polynomial coefficie nts, set 0 for the rationals\n#elimorder a list of variables in elimin ation order\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# Dp = deglex order \n# ls = negative \+ lex order\n# ds = negative 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# Si ngular:Plural will recognize it\n#input_for_Singular - path where inpu t 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 Singular will compute at most or 'infty' f or 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;\n if not member(tord,\{lp,dp,rp,Dp,ls,ds,Ds\}) then\n WARNING(\"third \+ argument, total order, must be one of lp, dp, rp, Dp, ls, ds, or Ds. O rder drp only makes sense with noncommuting variables! Proceeding anyw ay...\")\nend if;\n################################################### #################################################\nF:=map(expand,Id); \nvarsfound:=sort(convert(indets(F),list));\nvars:=elimorder;\nN:=nops (vars):\nif nops(varsfound)<>N then \n error `number of variables fo und in polynomials is different from the number of variables in elimin ation list` end if;\nif convert(varsfound,set) minus convert(vars,set) <> \{\} then \n error `extra variables 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 then p:=C else p:=0 end if; #reassi gning C to p\n######################################################## #############################################\n#Path and filename wher e input file for Singular will be saved 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 for Singular will be saved\n##### ###################################################################### ##########################\npathM:=input_for_Maple; #pat h where input file Out.txt for Maple will be saved\npathM_filename:=ca t(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; #switch for error messages\n###### ###################################################################### #########################\n#Changing the name of the input_for_Maple d irectory 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(pathM,4..-1)); #directory to cre ate\nelse error `write directory to create for Maple input as, for exa mple, \"C:/transferM\" `\nend if:\n################################### ###################################################################### ####\n#Changing the name of the input_for_Singular directory so that i t could be created, if needed:\n###################################### ###################################################################### #\nif SearchText(\"C:/\",pathS)=0 then pathS2:=pathS \nelif\n Search Text(\"C:/\",pathS)=1 then pathS2:=cat(\"C:\\\\\",substring(pathS,4..- 1)); #directory to create\nelse error `write directory to create for S ingular as, for example, \"C:/transferS\" `\nend if:\n################ ###################################################################### ########################\n#NOTE: If you don't like these messages to a ppear, remark the next fourteen lines.\n############################## ###################################################################### ##########\nif direction='d' or direction=0 then\n if system(cat(\"m kdir \",pathM2))=0 then\n print(`Transfer directory for Maple has been made ... proceeding... waiting for Singular results...`)\n els e\n print(`Transfer directory for Maple already exists... proceed ing... waiting for Singular results...`)\n end if;\n if system(cat (\"mkdir \",pathS2))=0 then\n print(`Transfer directory for Singu lar has been made ... proceeding... waiting for Singular results...`) \n else\n print(`Transfer directory for Singular already exists ... proceeding... waiting for Singular results...`)\n end if;\nelif \+ direction='t' then\n print(`Trying to create and display input fil e for Singular... proceeding...`)\nend if;\n########################## ###################################################################### ###############\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 w riteto(pathS_filename) else \n error `last optional argument need s to be 't' (for displaying to terminal) or 'd' (for saving to disk)` \n end if;\nelse writeto(pathS_filename) #redirect Maple output to i nput file for Singular as default\nend if:\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],`)`);\npr intf(\"%Q\",s);\nprintf(`,`);\nprintf(\"%q\",tord);\nprintf(\"%A\\n\", `;`);\n###############################################\n# Define the i deal . . . \n###############################################\nprintf( \"%Q\\n\",`ideal I =`) ; \nfor i to nops(F) do\nele:=F[i];\nif type(el e,monomial) then \n if i 't' ...\n##################################### ####################################\nif direction='t' then return NUL L end if;\nif assigned(dirpathSexe) then\n dirpathSexeloc:=dirpathSe xe: #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:/cygwin/usr/local/Singular/2-0-3/ix8 6-Win/Singular.exe\":\n ############################################ ################################\n #For version 3-0-4 use:\n dirpa thSexeloc:=\"C:/cygwin/bin/bash -l C:/cygwin/bin/Singular\": \+ \nend if;\n########################################################### ##############\nexecuteinputfile:=cat(dirpathSexeloc,\" < \", pathS_fi lename);\nsystem(executeinputfile);\nif %<>0 then\n ################ ###################################################################### ########\n #If you want to delete pathS directory in case of the err or, unremark the following line but \n #BE CAREFUL WHAT YOU DELETE a s you may need this directory for checking file In.txt:\n #system(ca t(\"rm -r \",pathS)); ##to remove the directory pathS: BE CAREFUL!!!! \n ################################################################# #############################\n error `something went wrong while ex ecuting Singular:\ncould not find a path on your system to Singular.ex e. The path must be \nassigned to a global variable dirpathSexe, for e xample,\n#dirpathSexe:=\"C:/cygwin/usr/local/Singular/2-0-3/ix86-Win/S ingular.exe\": for version 2-0-3, or\ndirpathSexe:=\"C:/cygwin/bin/bas h -l C:/cygwin/bin/Singular\" for version 3-0-4` \nfi;\n############## ##############################################################\n# Retr ieve results from Out.txt created by Singular line by line as strings \n#################################################################### ########\n#read(pathM_filename); #this DOES NOT work yet due to [] in \+ Out.txt\n############################################################# ###############\nfirst := readline(pathM_filename);\nline := readline( pathM_filename);\nwhile line <> 0 do\n last := line;\n line := rea dline(pathM_filename)\nend do;\n###################################### ######################################\nfseq:=parse(first); #changing \+ text input from Singular into Maple algebraic\n####################### ##################################################### \nF:=[fseq];\nif F=[] then \n print(`Singular has not returned any results... increa se 'wait' time or make it 'infty'`)\nend if;\n######################## #################################################################\n#If you want to delete pathS directory, unremark the following line but B E CAREFUL \n#WHAT YOU DELETE as you may need this directory for checki ng 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 follo wing line but BE CAREFUL \n#WHAT YOU DELETE as you may need this direc tory for checking file Out.txt:\n####system(cat(\"rm -r \",pathM)); # To remove pathM directory: BE CAREFUL WHAT 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 co mpute Groebner bases in Grassmann algebras. \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15197 "PLURALforGlink:=\nproc(G::list(\{climon, clibasmon , clipolynom\}),C::nonnegint,tord::symbol,elimorder::list(\{clibasmon \}),\ninput_for_Singular::string,input_for_Maple::string,wait::\{nonne gint,symbol\}) \nlocal i,j,pathS,pathS2,pathM,pathM2,vars,varsfound,F, p,ele,s,sa,N,pathS_filename,maxG,maxelimorder,\n pathM_filename,e xecuteinputfile,first,line,last,fseq,dirpathSexeloc,direction,convertm ontoS,convertstarstowedges;\nglobal dirpathSexe;\n#################### ###################################################################### #########\ndescription `Created: March 9, 2008. Last revised: May 15, \+ 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 grou nd field of polynomial coefficients, set 0 for the rationals\n#elimord er - a list of variables, e.g., e1,e2,e3,e4,...,e9\n#tord - total orde r accepted by Singular: \n# lp = lex order \n# dp = degrev lex order but is known as grevlex in Cox\n# rp = \"reverse lex o rder\" in Singular:Plural, also known as inverse lex order\n# dr p = NO NAME in Plural, the same as (a(1:n),rp) in Plural, or as Deg[In vLex] in CLIFFORD/Bigebra\n# Dp = deglex order\n# ls = neg ative lex order\n# ds = negative 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#input_for_Singular - path wher e input file In.txt for Singular will be saved by Maple\n#input_for_Ma ple - path where output file Out.txt for Maple will be saved by Sin gular\n#wait - number of seconds Singular will compute at most or 'inf ty' for infinite number of seconds\n################################## ##################################################################\n#i f not member(tord,\{lp,dp,rp,Dp,ls,ds,Ds\}) then\n# error `third arg ument 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,Dp,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...\")\nend if;\n####################### ###################################################################### #######\nF:=map(expand,G);\nF:=map(Clifford:-displayid,F):\nvars:=elim order;\nN:=nops(vars):\n############################################## ######################################################\n###Testing lis ts G and elimorder for correct input\n################################ ####################################################################\n maxG,maxelimorder:=Clifford:-maxindex(F),Clifford:-maxindex(vars);\nif maxG>maxelimorder then \n error `maximum index found in the list of polynomials is greater than the maximum index found in the list of ge nerators` end if;\nif not evalb(`minus`(convert(vars,set),\{e1,e2,e3,e 4,e5,e6,e7,e8,e9\})=\{\}) then \n error `only 1-vectors, e.g., e1, e 2,..., e9, are expected in the list of generators` end if;\nif not `su bset`(\{seq(e||i,i=1..maxG)\},\{op(vars)\}) then \n error `generator s e1,e2,... in the list of polynomials must 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 t o p\n################################################################# ####################################\n#Path and filename where input f ile for Singular will be saved to\n################################### ##################################################################\npa thS:=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 for Singular will be saved\n############## ###################################################################### #################\npathM:=input_for_Maple; #path where i nput file Out.txt for Maple will be saved\npathM_filename:=cat(pathM, \"/Out.txt\");#path w/filename where input file for Maple will be save d\n################################################################### ##################################\ndirection:=0:\nif nargs=8 then dir ection:=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 \nelif\n Sear chText(\"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:/transferM\" `\nend if:\n########### ###################################################################### ###################\n#Changing the name of the input_for_Singular dire ctory 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(path S,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 appe ar, remark the next fourteen lines.\n################################# ####################################################################\n if direction='d' or direction=0 then\n if system(cat(\"mkdir \",path M2))=0 then\n print(`Transfer directory for Maple has been made . .. proceeding... waiting for Singular results...`)\n else\n pri nt(`Transfer directory for Maple already exists... proceeding... waiti ng for Singular results...`)\n end if;\n if system(cat(\"mkdir \", pathS2))=0 then\n print(`Transfer directory for Singular has been made ... proceeding... waiting for Singular results...`)\n else\n \+ print(`Transfer directory for Singular already exists... proceedin g... waiting for Singular results...`)\n end if;\nelif direction='t' then\n print(`Trying to create and display input file for Singula r... proceeding...`)\nend if;\n####################################### ###################################################################### ##\n#return here1;\n#Produce input file for Singular ...\n############ ###################################################################### ############################# \nif nargs=8 then \n if evalb(args[nar gs]='t') then writeto(terminal) elif\n evalb(args[nargs]='d') the n writeto(pathS_filename) else \n error `last optional argument n eeds to be 't' (for displaying to terminal) or 'd' (for saving to disk )`\n end if;\nelse writeto(pathS_filename) #redirect Maple output to input file for Singular as default\nend if:\n######################## ###################################################################### ##################\n# Define the base ring (with term order)\n######## #######################################\nprintf(`LIB \"nctools.lib\"`) ;\nprintf(\"%A\\n\",`;`);## end of line and go to next line\nprintf(`r ing 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) el se printf(\"%q\",tord) end if;\nprintf(\"%A\\n\",`;`);\n#return here2; \n###############################################\n# Define Grassmann \+ algebra . . . \n###############################################\nprint f(`def ER = Exterior()`);\nprintf(\"%A\\n\",`;`);## end of line and go to next line\nprintf(`setring ER`);\nprintf(\"%A\\n\",`;`);## end of \+ line and go to next line\n#return here3;\n############################ ###################\n# Define polynomials in Plural . . . \n########## #####################################\n#Procedure convertmontoS conver ts Clifford basis monomials\n#of type clibasmon and climon to strings \+ used by Singular\n#\nconvertmontoS:=proc(m::\{clibasmon,climon\}) loca l coe,pp,r,mS1,mS2,mS,k,nr;\nif type(m,climon) then do\n pp:=op(Clif ford:-cliterms(m));\n coe:=convert(coeff(m,pp),string);\n return c at(coe,\"*\",procname(pp));\n end do;\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(co nvert(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,\{clibasmon,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:/cygwin/usr/local/Singular/2-0-3/ix86-Win /Singular.exe\":\n ################################################# ###########################\n #For version 3-0-4 use:\n dirpathSex eloc:=\"C:/cygwin/bin/bash -l C:/cygwin/bin/Singular\": \nend \+ if;\n################################################################# ########\nexecuteinputfile:=cat(dirpathSexeloc,\" < \", pathS_filename );\nsystem(executeinputfile);\nif %<>0 then\n ###################### ###################################################################### ##\n #If you want to delete pathS directory in case of the error, un remark the following line but \n #BE CAREFUL WHAT YOU DELETE as you \+ may need 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 Singular:\ncould not find a path on your system to Singular.exe. The \+ path must be \nassigned to a global variable dirpathSexe, for example, \n#dirpathSexe:=\"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: /cygwin/bin/Singular\" for version 3-0-4` \nfi;\n##################### #######################################################\n# Retrieve re sults from Out.txt created by Singular line by line as strings\n###### ###################################################################### \n#read(pathM_filename); #this DOES NOT work yet due to [] in Out.txt \n#################################################################### ########\nfirst := readline(pathM_filename);\nline := readline(pathM_f ilename);\nwhile line <> 0 do\n last := line;\n line := readline(p athM_filename)\nend do;\n############################################# ########################################\n###first contains the output string from Singular\n###it needs to be converted back to Maple algeb raic input as follows:\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############## ###################################################################### #\nconvertstarstowedges:=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:=[\"e1we\",\"e2we\",\"e3we\",\"e4we\",\"e5we\",\"e 6we\",\"e7we\",\"e8we\",\"e9we\"]:\nlocss:=ss:\nfor i from 1 to nops(F ROM) do\n locss:=StringTools:-SubstituteAll(locss,FROM[i],TO[i]); \nend do;\nend proc:\n###lprint(first);###unremark for testing\nfirst: =convertstarstowedges(first); #changing 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 delete pathS directory, unremark the fol lowing line but BE CAREFUL \n#WHAT YOU DELETE as you may need this dir ectory 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, u nremark the following line but BE CAREFUL \n#WHAT YOU DELETE as you ma y need this directory for checking file Out.txt:\n####system(cat(\"rm \+ -r \",pathM)); #To remove pathM directory: BE CAREFUL WHAT YOU DELETE !\n################################################################### ######################\nF:=map(expand,F);\nF:=map(Clifford:-displayid, F);\nreturn F; \nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 99 "3. Proced ure 'PLURALforClink' connects with Plural to compute Groebner bases in Clifford algebras.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20206 "PLURALf orClink:=\nproc(G::list(\{climon, clibasmon, clipolynom\}),C::nonnegin t,tord::symbol,elimorder::list(\{clibasmon\}),BB::diagmatrix,\ninput_f or_Singular::string,input_for_Maple::string,wait::\{nonnegint,symbol\} ) \nlocal i,j,pathS,pathS2,pathM,pathM2,vars,varsfound,F,p,ele,s,sa,N, pathS_filename,maxG,maxelimorder,msize,\n pathM_filename,executei nputfile,first,line,last,fseq,dirpathSexeloc,direction,\n convert montoS,convertmontoSCliff,convertpowerstoproducts,convertstarstowedges ,convertstarstoC;\nglobal dirpathSexe;\n############################## ###################################################################### \ndescription `Created: March 8, 2008. Last revised: May 15, 2008`;\n# ###################################################################### #############################\n#Input arguments are as follows:\n#G \+ - a list with polynomials that generate a polynomial ideal G in Grass mann algebra\n#C - non negative characteristic for the ground field of polynomial coefficients, set 0 for the rationals\n#elimorder - a l ist of variables, e.g., e1,e2,e3,...,e9\n#tord - total order accepted \+ by Singular: \n# lp = lex order \n# dp = degrevlex order b ut is known as grevlex in Cox\n# rp = \"reverse lex order\" in S ingular: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 CL IFFORD/Bigebra\n# Dp = deglex order\n# ls = negative lex o rder\n# ds = negative degree reverse lex order\n# Ds = neg ative degree lex order\n# NOTE: In this version, for added flexi bility, tord can really be anything as long as \n# Singula r:Plural will recognize it\n#BB - diagonal matrix that defines a quadr atic form Q for Cl(Q), BB can be degenerate\n#input_for_Singular - pat h 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 Singular will compute at most o r 'infty' for infinite number of seconds\n############################ ###################################################################### ##\n#if not member(tord,\{lp,dp,rp,Dp,ls,ds,Ds\}) then\n# error `thi rd 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,Dp,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...\")\nend if;\n################ ###################################################################### ##############\nF:=map(expand,G);\nvars:=elimorder;\nN:=nops(vars):\n# ###################################################################### #############################\n###Testing lists G and elimorder for co rrect input\n######################################################### ###########################################\nmaxG,maxelimorder:=Cliffo rd:-maxindex(F),Clifford:-maxindex(vars);\nif maxG>maxelimorder then \+ \n error `maximum index found in the list of polynomials is greater \+ than the maximum index found in the list of generators` end if;\nif no t evalb(`minus`(convert(vars,set),\{e1,e2,e3,e4,e5,e6,e7,e8,e9\})=\{\} ) then \n error `only 1-vectors, e.g., e1, e2,..., e9, are expected \+ in the list of generators` end if;\nif not `subset`(\{seq(e||i,i=1..ma xG)\},\{op(vars)\}) then \n error `generators e1,e2,... in the list \+ of polynomials must be a subset of the list of generators and they are not!` end if;\nmsize:=linalg:-rowdim(evalm(BB)):\nif msize<>nops(vars ) then\n error `size of the square matrix must equal to the number o f generators` end if; \n############################################## #######################################################\nif C>0 then p :=C else p:=0 end if; #reassigning C to p\n########################### ###################################################################### ####\n#Path and filename where input file for Singular will be saved t o\n################################################################### ##################################\npathS:=input_for_Singular; \+ #path where input file In.txt for Singular will be saved\npathS_fi lename:=cat(pathS,\"/In.txt\"); #path w/filename where input file for \+ Singular will be saved\n############################################## #######################################################\npathM:=input_ for_Maple; #path where input file Out.txt for Maple will be saved\npathM_filename:=cat(pathM,\"/Out.txt\");#path w/filename wh ere input file for Maple will be saved\n############################## ###################################################################### #\ndirection:=0:\nif nargs=9 then direction:=args[nargs] end if; #swit ch 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 \nelif\n SearchText(\"C:/\",pathM)=1 then path M2:=cat(\"C:\\\\\",substring(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_Singular directory so that it could be creat ed, 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 cre ate\nelse error `write directory to create for Singular as, for exampl e, \"C:/transferS\" `\nend if:\n###################################### ################################################################\n#NOT E: If you don't like these messages to appear, remark the next fourtee n 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 for Singul ar ...\n############################################################## ######################################### \nif nargs=9 then \n if ev alb(args[nargs]='t') then writeto(terminal) elif\n evalb(args[nar gs]='d') then writeto(pathS_filename) else \n error `last optiona l argument needs to be 't' (for displaying to terminal) or 'd' (for sa ving to disk)`\n end if;\nelse writeto(pathS_filename) #redirect Map le output to input file for Singular as default\nend if:\n############ ###################################################################### #####################\n# Define the base ring (with term order)\n##### ###################################################################### ############################\nprintf(`LIB \"clifford.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,\{drp\}) then printf(\"%Q\",sa) else printf( \"%q\",tord) end if;\nprintf(\"%A\\n\",`;`);\n######################## ###################################################################### #########\n# Define options\n######################################### ##############################################################\nprintf (`option(redSB)`);\nprintf(\"%A\\n\",`;`);## end of line and go to nex t line\nprintf(`option(redTail)`);\nprintf(\"%A\\n\",`;`);## end of li ne and go to next line\n############################################## #########################################################\n# Define Cl ifford algebra . . . \n############################################### ########################################################\nprintf(cat(` matrix M[`,msize,`][`,msize,`]`));\nprintf(\"%A\\n\",`;`);## end of li ne and go to next line\ns:=cat(`(`,seq(cat(vars[i],`,`),i=1..(N-1)),va rs[N],`)`):\nprintf(cat( seq(cat(`M[`,i,`,`,i,`]=`,2*BB[i,i],`;`),i=1. .(msize-1)),cat(`M[`,msize,`,`,msize,`]=`,2*BB[msize,msize])));\nprint f(\"%A\\n\",`;`);## end of line and go to next line\nprintf(`clifAlgeb ra(M)`);\nprintf(\"%A\\n\",`;`);## end of line and go to next line\npr intf(`qring Q =twostd(clQuot)`);\nprintf(\"%A\\n\",`;`);## end of line and go to next line\n################################################ #######################################################\n# Define poly nomials in Plural . . . \n############################################ ###########################################################\n#Procedur e convertmontoS converts Clifford basis monomials\n#of type clibasmon \+ and climon to strings used by Singular\n############################## ###################################################################### ###\nconvertmontoS:=proc(m::\{clibasmon,climon\}) local coe,pp,r,mS1,m S2,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,\"*\",pro cname(pp));\n end do;\nend if; \nif m=Id then return(\"1\") end if: \nr:=Clifford:-extract(m,'integers'):\nnr:=nops(r):\nif nr=1 then retu rn 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]),stri ng);\nmS:=cat(mS1,mS2):\nreturn mS;\nend proc:\nconvertmontoSCliff:=pr oc(m::\{clibasmon,climon,cliprod,`&*`(cliscalar,cliprod)\}) local coe, pp,la,r,nr,mS1,mS2,mS,k,flag;\nif type(m,climon) then do\n pp:=op(Cl ifford:-cliterms(m));\n coe:=convert(coeff(m,pp),string);\n return cat(coe,\"*\",procname(pp));\n end do;\nend if; \nif type(m,`&*`(cl iscalar,cliprod)) then \nflag:=patmatch(m,coe::cliscalar*pp::cliprod,' la');\ncoe,pp:=rhs(la[1]),rhs(la[2]);\ncoe:=convert(coe,string);\nretu rn cat(coe,\"*\",procname(pp));\nend if; \nif m=Id then return(\"1\") \+ end if:\nif type(m,clibasmon) then return(cat(`m`)) end if:\nif type(m ,cliprod) then\n r:=[op(m)]:\n nr:=nops(r):\n mS1:=seq(convert(c at(r[k],\"*\"),string),k=1..(nr-1));\n mS2:=convert(cat(r[nr]),strin g);\n mS:=cat(mS1,mS2):\n return mS;\nend if;\nend proc:\n######## ###################################################################### ######################\n##Converting polynomials in G from Grassmann b asis to Clifford basis w.r.t. default B form\n######################## ###################################################################### ######\nF:=map(Clifford:-displayid,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 <= size(GB); j++) \{GB[j]=NF(GB[j],std(0));\} \};`);\ns:=cat(\"\\\":w \",pathM_filename,\"\\\"\",`,`,\"GB\");\ns:=ca t(`write(`,s,`);`);\nprintf(\"%A\\n\",s);\nprintf(\"%Q\\n\",`quit;`); \+ #quit Singular when finished\n######################################## ############\n# Finished writing 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(dirpathSexe) then\n dirpathSexeloc:=dirpathSexe : #assign global path to Singular.exe\n else\n ################### #########################################################\n #try a s tandard path under a typical Windows installation\n ################ ############################################################\n #For \+ version 2-0-3 use: \n #dirpathSexeloc:=\"C:/cygwin/usr/local/Singu lar/2-0-3/ix86-Win/Singular.exe\":\n ############################### #############################################\n #For version 3-0-4 u se:\n dirpathSexeloc:=\"C:/cygwin/bin/bash -l C:/cygwin/bin/Singular \": \nend if;\n############################################### ################################\nexecuteinputfile:=cat(dirpathSexeloc ,\" < \", pathS_filename);\nsystem(executeinputfile);\nif %<>0 then\n \+ #################################################################### ##########################\n #If you want to delete pathS directory \+ in case of the error, unremark the following line but \n #BE CAREFUL WHAT YOU DELETE as you may need this directory for checking file In.t xt:\n #system(cat(\"rm -r \",pathS)); ##to remove the directory path S: BE CAREFUL!!!!\n ################################################ ##############################################\n error `something we nt wrong while executing Singular:\ncould not find a path on your syst em to Singular.exe. The path must be \nassigned to a global variable d irpathSexe, for example,\n#dirpathSexe:=\"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:/cygwin/bin/Singular\" for version 3-0-4` \nfi ;\n################################################################### #########\n# Retrieve results from Out.txt created by Singular line by line as strings\n#################################################### ########################\n#read(pathM_filename); #this DOES NOT work y et due to [] in Out.txt\n############################################# ###############################\nfirst := readline(pathM_filename);\nl ine := readline(pathM_filename);\nwhile line <> 0 do\n last := line; \n line := readline(pathM_filename)\nend do;\n###################### ###############################################################\n###fi rst contains the output string from Singular\n###it needs to be conver ted back to Maple algebraic input as follows:\n###\n###--- powers like 2*e2^3*e3^4 need to be converted to plain products\n### this is do ne with the procedure convertpowerstoproducts\n###\n###--- products li ke e1*e2, e3*e4*e5, etc... need to be converted to e1we2, e3we4we5,\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####################################################### ##############################\nconvertpowerstoproducts:=proc(ss::stri ng) local le,patlist,L,i,k,str,flag,FROM,TO,locss,powertoproduct;\nif \+ not StringTools:-Has(ss,\"^\") then return args[1] end if;\nlocss:=ss: \nle:=StringTools:-Length(locss);\npatlist:=[\"e1^\",\"e2^\",\"e3^\", \"e4^\",\"e5^\",\"e6^\",\"e7^\",\"e8^\",\"e9^\"];\nL:=[StringTools:-Se archAll(patlist,locss)];\n########################################\nFR OM:=[]:\nfor i from 1 to nops(L) do\nstr:=patlist[L[i][2]];\nk:=3:\nfl ag:=StringTools:-IsDigit(StringTools:-SubString(locss,L[i][1]+k..L[i][ 1]+k)):\nwhile flag do\n str:=cat(str,StringTools:-SubString(locs s,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############ ############################\npowertoproduct:=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) e nd if:\na:=convert(a,string);\nas:=cat(a,\"*\");\nreturn(cat(StringToo ls:-Repeat(as,p-1),a));\nend proc:\n################################## ######\nTO:=map(powertoproduct,FROM);\n############################### #########\nfor i from 1 to nops(FROM) do\n locss:=StringTools:-Su bstituteAll(locss,FROM[i],TO[i]);\nend do;\nreturn locss;\nend proc:\n ###################################################################### ###############\nconvertstarstowedges:=proc(ss::string) local i,FROM,T O,locss;\nFROM:=[\"e1*e\",\"e2*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 f rom 1 to nops(FROM) do\n locss:=StringTools:-SubstituteAll(locss, FROM[i],TO[i]);\nend do;\nend proc:\n################################# ##################################################################\nco nvertstarstoC:=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\",\"e8 &C e\",\"e9 &C e\"]:\nlocss:=ss:\nfor \+ i from 1 to nops(FROM) do\n locss:=StringTools:-SubstituteAll(loc ss,FROM[i],TO[i]);\nend do;\nend proc:\n##print(first);###unremark for testing\n############################################################ ########################################\n## First, we make sure to co nvert powers to products `*`:\nfirst:=convertpowerstoproducts(first): \n#################################################################### ################################\n## Second, we convert products `*` t o Clifford products `&C`: \nfirst:=convertstarstoC(first); #changing t ext input from Singular into Maple algebraic\n###lprint(first);###unre mark for testing\nfseq:=parse(first); #changing text input from Singul ar into Maple algebraic\n############################################# ####################################################### \nF:=[fseq];\n if F=[] then \n print(`Plural has not returned any results... increa se 'wait' time or make it 'infty'`)\nend if;\n######################## ###################################################################### ######\n#If you want to delete 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 re move pathS directory: BE CAREFUL WHAT YOU DELETE!\n################### ###################################################################### \n#################################################################### #####################\n#If you want to delete pathM directory, unremar k 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 directory: BE CAREFUL WHAT YOU DELETE!\n### ###################################################################### ################\nF:=map(Cliplus:-clieval,F);\n###print(map(Cliplus:-c liexpand,F,B));###unremark for testing\nF:=map(Clifford:-displayid,F); \nreturn F; \nend proc:\n" }}{PARA 0 "" 0 "" {TEXT -1 45 "30. Procedur e 'init' is automatically loaded." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1020 "init:=proc() \n global `convert/set_to_pts`;\n local x,y,i,j; \n printf(\"SINGULARPLURALlink 0.3 beta (May 15, 2008) says Hello... \\n\");\n printf(\"3 function(s) exported\\n\");\n printf(\"===>If you find this packages useful, please let us know about your derived \+ work.\\n\");\n printf(\"===>You can contact us at http://math.tntech .edu/rafal/ or http://clifford.physik.uni-konstanz.de/~fauser/\\n\"); \n printf(\"===>This package requires CLIFFORD/Bigebra for Maple ava ilable from http://math.tntech.edu/rafal/\\n\");\n printf(\"===>Sing ular:Plural requires nctools.lib and clifford.lib libraries to be inst alled. Consult http://www.singular.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(Bigebra):\nprintf(\"Bigebra package with %d fu nctions loaded...\\n\",nops(%));\nend proc: \n\nexit:=proc()\n prin tf(\"SINGULARPLURALlink 0.3 beta (May 15, 2008) says good bye...\",%s \\n);\nend proc:\nend module:" }}{PARA 6 "" 1 "" {TEXT -1 56 "SINGULAR PLURALlink 0.3 beta (May 15, 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 deri ved work." }}{PARA 6 "" 1 "" {TEXT -1 106 "===>You can contact us at h ttp://math.tntech.edu/rafal/ or http://clifford.physik.uni-konstanz.de /~fauser/" }}{PARA 6 "" 1 "" {TEXT -1 97 "===>This package requires CL IFFORD/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 installed. Consult http://www.si ngular.uni-kl.de/" }}{PARA 6 "" 1 "" {TEXT -1 44 "Clifford package wit h 84 functions loaded..." }}{PARA 6 "" 1 "" {TEXT -1 83 "Increase verb osity by infolevel[`function`]=val -- use online help > ?Bigebra[help] " }}{PARA 6 "" 1 "" {TEXT -1 43 "Bigebra package with 33 functions loa ded..." }}}{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:\\Maple11/Cliffor dlib6\"Q/C:\\Maple11/libF$Q4C:\\Brachey.Troy/TNBF$QAC:\\Maple11/SINGUL ARPLURALlinklibF$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "Singul arPlurallibname:=libname[4];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "sav elibname:=SingularPlurallibname;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% 6SingularPlurallibnameGQAC:\\Maple11/SINGULARPLURALlinklib6\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%,savelibnameGQAC:\\Maple11/SINGULARP LURALlinklib6\"" }}}{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 34 "SingularPlurallib name:=libname[1];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "savelibname:=S ingularPlurallibname;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%6SingularPl urallibnameGQ7C:\\Maple11/Cliffordlib6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,savelibnameGQ7C:\\Maple11/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 "re start:restart:" }}{PARA 6 "" 1 "" {TEXT -1 59 "SINGULARPLURALlink 0.3 \+ beta (May 15, 2008) says good bye..." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "with(SINGULARPLURALlink);" }}{PARA 6 "" 1 "" {TEXT -1 56 "SINGULARPLURALlink 0.3 beta (May 15, 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 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 97 "===>This pa ckage requires CLIFFORD/Bigebra for Maple available from http://math.t ntech.edu/rafal/" }}{PARA 6 "" 1 "" {TEXT -1 123 "===>Singular:Plural \+ requires nctools.lib and clifford.lib libraries to be installed. Consu lt http://www.singular.uni-kl.de/" }}{PARA 6 "" 1 "" {TEXT -1 44 "Clif ford 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..." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&%/PLURALf orClinkG%/PLURALforGlinkG%-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~11~Pac kage~for~Linking~Maple~with~Singular~and~PluralG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%doLast~revised:~May~15,~2008~(Source~file:~SINGULARPLU RALlink_M11_0515.mws)G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%jnCopyright ~2008~by~Rafal~Ablamowicz~(*)~and~Bertfried~Fauser~($)G" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#%!G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%H(*)~Dep artment~of~Mathematics,~Box~5054G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#% gn~~~~Tennessee~Technological~University,~Cookeville,~TN~38505G" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#%U~~~~tel:~USA~(931)~372-3662,~fax:~US A~(931)~372-6353G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%;~~~~rablamowicz @tntech.eduG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%B~~~~http://math.tnte ch.edu/rafal/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,~Ge rmanyG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%E~~~~Bertfried.Fauser@uni-k onstanz.deG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%T~~~~http://clifford.p hysik.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~CLIFF ORD/Bigebra~for~Maple~available~from~http://math.tntech.edu/rafal/G" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#%arSingular:Plural~requires~nctools.l ib~and~clifford.lib~libraries~to~be~installed.~Consult~http://www.sing ular.uni-kl.deG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%!G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%_p++++++++++++This~is~SINGULARPLURALlink~for~Mapl e~11~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:\\Maple11/Cliffordlib6\"Q/C:\\Map le11/libF$Q4C:\\Brachey.Troy/TNBF$QAC:\\Maple11/SINGULARPLURALlinklibF $" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "ShowContents(libname[4 ]);\nShowContents(libname[1]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7#7& Q5SINGULARPLURALlink.m6\"7(\"%3?\"\"&\"#:\"#;\"#S\"#C\"&@\"=\"$'H" }} {PARA 12 "" 1 "" {XPPMATH 20 "6#7;7&Q*Bigebra.m6\"7(\"%2?\"#7\"#?\"\") \"#\"#\\\"')z+%\"$x$7&Q/code_support.mF &7(F(F)F*F+\"#X\"#J\"'B[a\"$w%7&Q)Define.mF&7(F(F)F*F+F5\"#d\"'T$*>\"$ $[7&Q>P.mF&7(F(F)F*F+\"#`\"#@\"'OkG\"$\"G7&Q&GfG.mF&7(F2\"\"$\"\"(\" \"&F4\"#P\"'Y]$)\"%[87&Q+matcompL.mF&7(F(F)F*F+\"#8F5\"'.nl\"&=X(7&Q+m atquatR.mF&Fin\"'A_i\"&I?#7&Q+matrealR.mF&Fin\"'8eU\"'Wj67&Q+Octonion. mF&7(F(F)F*F+FJ\"\"%\"'PBt\"$P%7&Q,RJgrobner.mF&7(F(F)F*F+\"#f\"#]\"'g je\"%]57&Q5SINGULARPLURALlink.mF&7(F2FY\"#:\"#;\"#S\"#C\"(Fv9\"\"$-$7& Q+SchurFkt.mF&7(F(F)F*\"\"*\"#6\"#F\"'L]R\"%DQ7&Q>_AlternatingGroup_re m_table.mF&7(F(F)F*F^q\"#IFhp\"%'3'FS7&Q:_FiniteGroups_rem_table.mF&7( F(F)F*F^qFfq\"#D\"'nTP\"$)=7&Q6_Reynolds_rem_table.mF&Fjq\"'ugB\"$L%7& Q<_SymmetricGroup_rem_table.mF&Feq\"'S=;\"%%G#7&QA_generateGinvariants _rem_table.mF&Fjq\"'t+P\"$#>7&Q<_implicitbezierpolynomial.mF&7(F(F)F*F ^q\"\"!FQ\"'dKE\"&@7\"7&Q+matcompR.mF&Fin\"'PXH\"&^M(7&Q+matquatL.mF&F in\"'#)yB\"&9@#7&Q+matrealL.mF&Fin\"&$R=\"'9k67&Q%SP.mF&7(F(F)F*F^qFfq \"#G\"'O&o$\"%867&Q&TNB.mF&7(F2FWF_tF,\"#HFep\"'?(e)\"$,)" }}}{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~c ode_cupport~ver.~1.03~for~CLIFFORD~et~al.~for~Maple~11G" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#%apCopyright~(c)~2002-2008~by~Rafal~Ablamowicz~a nd~Bertfried~Fauser.~All~rights~reserved.G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%@Last~revised:~December~20,~2007G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%!G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7-%/NamesInLibra ryG%1change_helpfilesG%,change_nameG%*copy_fileG%)get_TEXTG%(get_dirG% 1insert_helppagesG%)makeLISTG%+modifyLISTG%0replace_in_fileG%&splitG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 55 "NamesInLibrary(libname[4] );\nNamesInLibrary(libname[1]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#Q5S INGULARPLURALlink.m6\"" }}{PARA 12 "" 1 "" {XPPMATH 20 "6;Q*Bigebra.m6 \"Q+Clifford.mF$Q*Cliplus.mF$Q)Define.mF$Q>P.mF$Q&GfG.mF$Q+Octonion. mF$Q,RJgrobner.mF$Q5SINGULARPLURALlink.mF$Q%SP.mF$Q+SchurFkt.mF$Q&TNB. mF$Q>_AlternatingGroup_rem_table.mF$Q:_FiniteGroups_rem_table.mF$Q6_Re ynolds_rem_table.mF$Q<_SymmetricGroup_rem_table.mF$QA_generateGinvaria nts_rem_table.mF$Q<_implicitbezierpolynomial.mF$Q/code_support.mF$Q+ma tcompL.mF$Q+matcompR.mF$Q+matquatL.mF$Q+matquatR.mF$Q+matrealL.mF$Q+ma trealR.mF$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "restart:restart:" }}{PARA 6 "" 1 " " {TEXT -1 59 "SINGULARPLURALlink 0.3 beta (May 15, 2008) says good by e..." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "with(SINGULARPLURAL link);" }}{PARA 6 "" 1 "" {TEXT -1 56 "SINGULARPLURALlink 0.3 beta (Ma y 15, 2008) says Hello..." }}{PARA 6 "" 1 "" {TEXT -1 22 "3 function(s ) exported" }}{PARA 6 "" 1 "" {TEXT -1 81 "===>If you find this packag es useful, please let us know about your derived work." }}{PARA 6 "" 1 "" {TEXT -1 106 "===>You can contact us at http://math.tntech.edu/ra fal/ 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/rafal/" }}{PARA 6 "" 1 "" {TEXT -1 123 "===>Singular:Plural requires nctools.lib and clifford.li b libraries to be installed. Consult http://www.singular.uni-kl.de/" } }{PARA 6 "" 1 "" {TEXT -1 44 "Clifford package with 84 functions loade d..." }}{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..." }}{PARA 11 " " 1 "" {XPPMATH 20 "6#7&%/PLURALforClinkG%/PLURALforGlinkG%-SINGULARli nkG%,linkversionG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "#test \+ for functionality\nlinkversion();" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#% L+++++++++++++++++++++++++++++++++++++++++++G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%]pSINGULARPLURALlink~-~A~Maple~11~Package~for~Linking~ Maple~with~Singular~and~PluralG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%do Last~revised:~May~15,~2008~(Source~file:~SINGULARPLURALlink_M11_0515.m ws)G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%jnCopyright~2008~by~Rafal~Abl amowicz~(*)~and~Bertfried~Fauser~($)G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%!G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%H(*)~Department~of~Mathemat ics,~Box~5054G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%gn~~~~Tennessee~Tec hnological~University,~Cookeville,~TN~38505G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%U~~~~tel:~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($)~Universit\"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.de G" }}{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/Bige bra~for~Maple~available~from~http://math.tntech.edu/rafal/G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%arSingular:Plural~requires~nctools.lib~and~ clifford.lib~libraries~to~be~installed.~Consult~http://www.singular.un i-kl.deG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%!G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%_p++++++++++++This~is~SINGULARPLURALlink~for~Maple~11~ version~0.3~with~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 33 "Cookeville/Konstanz, May 15, 2008" }}}}{MARK "29 0 0" 0 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }