123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362 |
- \documentstyle[11pt,reduce]{article}
- \newcommand{\nl}{\hfill\newline}
- \newcommand{\bq}{\begin{quotation}}
- \newcommand{\eq}{\end{quotation}}
- \newcommand{\bi}{\begin{itemize}}
- \newcommand{\ei}{\end{itemize}}
- \date{}
- \title{{\bf ASSIST}\ :\\[2pt]
- A General Purpose Facility~for~\REDUCE \\[5pt]
- \mbox{\hfill Version 2.0\hfil}}
- \author{Hubert Caprasse \\
- D\'epartement d'Astronomie et d'Astrophysique \\
- Institut de Physique, B--5, Sart Tilman \\
- B--4000 LIEGE 1 \\[3pt]
- E--mail: caprasse@vm1.ulg.ac.be}
- \begin{document}
- \maketitle
- \index{ASSIST package}
- \section{Introduction}
- ASSIST contains
- an appreciable number of additional general purpose functions which allow
- to better adapt \REDUCE\ to various calculational strategies,
- to make the programming task more straightforward and more efficient.
- Contrary to all other packages, ASSIST does not aim to provide neither a new
- facility to compute a definite class of mathematical objects nor to extend
- the base of mathematical knowledge of \REDUCE\ .
- The functions it contains should be
- useful independently of the nature of the application which is considered.
- They were initially written while doing specific applications of
- \REDUCE\ to problems in theoretical physics. Most them were designed
- in such a way that their applicability range is broad. Though it was not
- the primary goal, efficiency has been sought whenever possible.
- The source code in ASSIST contains many comments concerning
- the meaaning and the use of the supplementary functions available
- in the algebraic mode. These comments, hopefully, makes the code transparent
- and allow a thorough exploitation of the package. The present documentation
- contains a non--technical description of it and describes the
- various new facilities it provides.
- \section{ Survey of the Available New Facilities}
- The package contains several modules. Their content reflects closely
- the various categories of facilities quoted below. Some functions do
- already exist inside the KERNEL of \REDUCE\ . However, their range
- of applicability is {\em extended}.
- \begin{itemize}
- \item{Control of Switches:}
- \begin{quotation}
- \noindent
- \f{SWITCHES SWITCHORG}
- \end{quotation}
- \item{Operations on Lists and Bags:}
- \begin{quotation}
- \noindent
- \f{MKLIST KERNLIST FREQUENCY SEQUENCES \nl
- INSERT INSERT\_KEEP\_ORDER MERGE\_LIST \nl
- REMOVE DELETE DELETE\_ALL DELPAIR \nl
- FIRST SECOND THIRD REST REVERSE LAST \nl
- BELAST CONS ( . ) APPEND APPENDN \nl
- LENGTH REMOVE DELETE DELPAIR \nl
- MEMBER ELMULT PAIR DEPTH POSITION \nl
- REPFIRST REPREST ASFIRST ASLAST ASREST \nl
- ASFLIST ASSLIST RESTASLIST SUBSTITUTE \nl
- BAGPROP PUTBAG CLEARBAG BAGP BAGLISTP \nl
- ALISTP ABAGLISTP LISTBAG }
- \end{quotation}
- \item{Operations on Sets:}
- \begin{quotation}
- \noindent
- \f{MKSET SETP UNION INTERSECT DIFFSET SYMDIFF}
- \end{quotation}
- \item{General Purpose Utility Functions:}
- \begin{quotation}
- \noindent
- \f{LIST\_TO\_IDS MKIDN MKIDNEW DELLASTDIGIT DETIDNUM \\
- ODDP FOLLOWLINE == RANDOMLIST \\
- PERMUTATIONS CYCLICPERMLIST COMBNUM COMBINATIONS \\
- SYMMETRIZE REMSYM SORTNUMLIST SORTLIST EXTREMUM \\
- DEPATOM FUNCVAR IMPLICIT EXPLICIT KORDERLIST \\
- SIMPLIFY CHECKPROPLIST EXTRACTLIST}
- \end{quotation}
- \item{ Properties and Flags:}
- \begin{quotation}
- \noindent
- \f{PUTFLAG PUTPROP DISPLAYPROP DISPLAYFLAG \\
- CLEARFLAG CLEARPROP }
- \end{quotation}
- \item{ Control Statements, Control of Environment:}
- \begin{quotation}
- \noindent
- \f{NORDP DEPVARP ALATOMP ALKERNP PRECP \\
- SHOW SUPPRESS CLEAROP CLEARFUNCTIONS }
- \end{quotation}
- \item{Handling of Polynomials:}
- \begin{quotation}
- \noindent
- \f{ALG\_TO\_SYMB SYMB\_TO\_ALG \\
- DISTRIBUTE LEADTERM REDEXPR MONOM\\
- LOWESTDEG DIVPOL SPLITTERMS SPLITPLUSMINUS}
- \end{quotation}
- % \vfill\pagebreak
- \item{Handling of Transcendental Functions:}
- \begin{quotation}
- \noindent
- \f{TRIGEXPAND HYPEXPAND TRIGREDUCE HYPREDUCE \\
- PLUSLOG CONCSUMLOG}
- \end{quotation}
- \item{Handling of n-dimensional Vectors:}
- \begin{quotation}
- \noindent
- \f{SUMVECT MINVECT SCALVECT CROSSVECT MPVECT }
- \end{quotation}
- {\item Handling of Grassmann Operators:}
- \begin{quotation}
- \noindent
- \f{PUTGRASS REMGRASS GRASSP GRASSPARITY GHOSTFACTOR }
- \end{quotation}
- \item{Handling of Matrices:}
- \begin{quotation}
- \noindent
- \f{UNITMAT MKIDM BAGLMAT COERCEMAT \\
- SUBMAT MATSUBR MATSUBC RMATEXTR RMATEXTC \\
- HCONCMAT VCONCMAT TPMAT HERMAT \\
- SETELTMAT GETELTMAT}
- \end{quotation}
- \end{itemize}
- In the following each group of functions is, successively, described.
- \section{Control of Switches}
- The two available functions i.e. \f{SWITCHES, SWITCHORG} have
- no argument and are called as if they were mere identifiers.
- \f{SWITCHES} displays the actual status of the most often used switches
- when manipulating rational functions. The chosen switches are
- \begin{quotation}
- \noindent
- {\tt EXP, DIV, MCD, GCD, ALLFAC, INTSTR,\\ RAT, RATIONAL, FACTOR }
- \end{quotation}
- The switch {\tt DISTRIBUTE} which controls the handling
- of distributed polynomials is added to them (see below the description of
- the new functions for manipulating polynomials ).
- The selection is somewhat arbitrary but it may be changed in a trivial
- fashion by the user.
- Most of the symbolic variables {\tt !*EXP, !*DIV, $\ldots$}
- which have either the value T or the value NIL are made available in the
- algebraic mode so that it becomes possible to write conditional
- statements of the kind
- \begin{verbatim}
- IF !*EXP THEN DO ......
- IF !*GCD THEN OFF GCD;
- \end{verbatim}
- \f{SWITCHORG} resets (almost) {\em all} switches in the status
- they have when {\bf entering} into \REDUCE\ .
- The new switch {\tt DISTRIBUTE} allows to put polynomials in a
- distributed form.
- \section{Manipulation of the List Structure}
- Additional functions for list manipulations are provided and some already
- defined functions in the kernel of \REDUCE\ are modified to properly
- generalize them to the available new structure {\tt BAG}.
- \begin{itemize}
- \item[i.]
- Generation of a list of length n with all its elements initialized to 0
- and possibility to append to a list $l$ a certain number of zero's to
- make it of length $n$:
- \begin{verbatim}
- MKLIST n ; n is an INTEGER
- MKLIST(l,n); l is List-like, n is an INTEGER
- \end{verbatim}
- \item[ii.]
- Generation of a list of sublists of length n containing p elements
- equal to 0 and q elements equal to 1 such that $$p+q=n .$$
- The function \f{SEQUENCES} works both in the algebraic and
- symbolic modes. Here is an example:
- \begin{verbatim}
- SEQUENCES 2 ; ==> {{0,0},{0,1},{1,0},{1,1}}
- \end{verbatim}
- The function \f{KERNLIST} transforms any prefix of a kernel into the
- {\bf \verb+list+} prefix. The output list is a copy:
- \begin{verbatim}
- KERNLIST (<kernel>); ==> {<kernel arguments>}
- \end{verbatim}
- Four functions to delete elements are \f{DELETE, REMOVE, DELETE\_ALL} and
- \f{DELPAIR}. The first two act as in symbolic mode, the third
- eliminates from a given list {\em all}
- elements equal to its first argument. The fourth act on list of pairs
- and eliminates from it the {\em first} pair whose first element is equal to
- its first argument :
- \begin{verbatim}
- DELETE(x,{a,b,x,f,x}); ==> {a,b,f,x}
- REMOVE({a,b,x,f,x},3); ==> {a,b,f,x}
- DELETE_ALL(x,{a,b,x,f,x}); ==> {a,b,f}
- DELPAIR(a,{{a,1},{b,2},{c,3}}; ==> {{b,2},{c,3}}
- \end{verbatim}
- \item[iv.]
- The function \f{ELMULT} returns an {\em integer} which is the
- {\em multiplicity} of its first argument inside the list which is its
- second argument.
- The function \f{FREQUENCY} gives a list of pairs
- whose second element indicates the number of times the first element
- appears inside the original list:
- \begin{verbatim}
- ELMULT(x,{a,b,x,f,x}) ==> 2
- FREQUENCY({a,b,c,a}); ==> {{a,2},{b,1},{c,1}}
- \end{verbatim}
- \item[v.]
- The function \f{INSERT} allows to insert a given object into a list
- at the wanted position.
- The functions \f{INSERT\_KEEP\_ORDER} and \f{MERGE\_LIST} allow to
- keep a given ordering when inserting one element inside a list or
- when merging two lists. Both have 3 arguments. The last one is
- the name of a binary boolean ordering function:
- \begin{verbatim}
- ll:={1,2,3}$
- INSERT(x,ll,3); ==> {1,2,x,3}
- INSERT_KEEP_ORDER(5,ll,lessp); ==> {1,2,3,5}
- MERGE_LIST(ll,ll,lessp); ==> {1,1,2,2,3,3}
- \end{verbatim}
- \item[vi.]
- Algebraic lists can be read from right to left or left to right.
- They {\em look} symmetrical. One would like to dispose of manipulation
- functions which reflect this.
- So, to the already defined functions \f{FIRST} and \f{REST} are
- added the functions \f{LAST} and \f{BELAST}. \f{LAST} gives the last
- element of the list while \f{BELAST} gives the list {\em without} its
- last element. \\
- Various additional functions are provided. They are:
- \bq
- \f{ CONS (.), POSITION, DEPTH, PAIR, \\
- APPENDN, REPFIRST, REPLAST}
- \eq
- The token ``dot'' needs a special comment. It corresponds to
- several different operations.
- \begin{enumerate}
- \item If one applies it on the left of a list, it acts as the \f{CONS}
- function. Be careful, blank spaces are required around the dot:
- \begin{verbatim}
- 4 . {a,b}; ==> {4,a,b}
- \end{verbatim}
- \item If one applies it on the right of a list, it has the same
- effect as the \f{PART} operator:
- \begin{verbatim}
- {a,b,c}.2; ==> b
- \end{verbatim}
- \item If one applies it on 4--dimensional vectors, it acts as in the
- HEPHYS packge.
- \end{enumerate}
- \f{POSITION} returns the POSITION of the first occurrence of x in
- a list or a message if x is not present in it.
- \f{DEPTH} returns an {\em integer} equal to the number of levels where a
- list is found if and only if this number is the {\em same} for each
- element of the list otherwise it returns a message telling the user
- that list is of {\em unequal depth}.
- \f{PAIR} has two arguments which must be lists. It returns a list
- whose elements are {\em lists of two elements.}
- The $n^{th}$ sublist contains the $n^{th}$ element of the first list
- and the $n^{th}$ element of the second list. These types of lists are called
- {\em association lists} or ALISTS in the following.
- To test for these type of lists a boolean function \f{ABAGLISTP}
- is provided. It will be discussed below.\\
- \f{APPENDN} has {\em any} fixed number of lists as arguments. It
- generalizes the already existing function \f{APPEND} which accepts
- only two lists as arguments. \\
- \f{REPFIRST} has two arguments. The first one is any object, the second one
- is a list. It replaces the first element of the list by tho object. It
- works like the symbolic function \f{REPLACA} except that the
- original list is not destroyed.\\
- \f{REPREST} has also two arguments. It replaces the rest of the list by
- its first argument and returns the new list without destroying the
- original list. It is analogous to the symbolic function \f{REPLACD}.
- Here are examples:
- \begin{verbatim}
- ll:={{a,b}}$
- ll1:=ll.1; ==> {a,b}
- ll.0; ==> list
- 0 . ll; ==> {0,{a,b}}
- DEPTH ll; ==> 2
- PAIR(ll1,ll1); ==> {{a,a},{b,b}}
- REPFIRST{new,ll); ==> {new}
- ll3:=APPENDN(ll1,ll1,ll1); ==> {a,b,a,b,a,b}
- POSITION(b,ll3); ==> 2
- REPREST(new,ll3); ==> {a,new}
- \end{verbatim}
- \item[vii.]
- The functions \f{ASFIRST, ASLAST, ASREST, ASFLIST, ASSLIST, \\RESTASLIST}
- act on ALISTS or on list of lists of well defined depths
- and have two arguments. The first is the key object
- which one seeks to associate in some way to an element of the association
- list which is the second argument.\\
- \f{ASFIRST} returns the pair whose first element is equal to the
- first argument.\\
- \f{ASLAST} returns the pair whose last element is equal to the first
- argument.\\
- \f{ASREST} needs a {\em list} as its first argument. The function
- seeks the first sublist of a list of lists (which is its second argument)
- equal to its first argument and returns it.\\
- \f{RESTASLIST} has a {\em list of keys} as its first arguments. It
- returns the collection of pairs which meet the criterium of \f{ASREST}.\\
- \f{ASFLIST} returns a list containing {\em all pairs} which
- satisfy to the criteria of the function \f{ASFIRST}. So the output
- is also an ALIST or a list of lists.\\
- \f{ASSLIST} returns a list which contains {\em all pairs} which have
- their second element equal to the first argument.\\
- Here are a few examples:
- \begin{verbatim}
- lp:={{a,1},{b,2},{c,3}}$
- ASFIRST(a,lp); ==> {a,1}
- ASLAST(1,lp); ==> {a,1}
- ASREST({1},lp); ==> {a,1}
- RESTASLIST({a,b},lp); ==> {{1},{2}}
- lpp:=APPEND(lp,lp)$
- ASFLIST(a,lpp); ==> {{a,1},{a,1}}
- ASSLIST(1,lpp); ==> {{a,1},{a,1}}
- \end{verbatim}
- \item[vii.] The function \f{SUBSTITUTE} has three arguments. The first
- is the object to substitute, the second is the object which must be
- replaced by the first, the third is a list. Substitution is made to
- all levels. It is a more elementary function than \f{SUB} but its
- capabilities are less. When dealing with algebraic quantities, it is
- important to make sure that {\em all} objects involved in the function
- have either the prefix lisp or the standard quotient representation
- otherwise it will not properly work.
- \end{itemize}
- \section{ The Bag Structure and its Associated Functions}
- The LIST structure of \REDUCE\ is very convenient to manipulate
- groups of objects which are, a priori, unknown. This structure is
- endowed with other properties such as ``mapping'' i.e. the fact that
- if \verb+OP+ is an operator one gets, by default,
- \begin{verbatim}
- OP({x,y}); ==> {OP(x),OP(y)}
- \end{verbatim}
- It is not permitted to submit lists to the operations valid on rings
- so that lists cannot be indeterminates of polynomials.\\
- Very frequently too, procedure arguments cannot be lists.
- At the other extreme, so to say, one has the \verb+KERNEL+
- structure associated
- to the algebraic declaration \verb+operator+ . This structure behaves as
- an ``unbrokable'' one and, for that reason, behaves
- like an ordinary identifier.
- It may generally be bound to all non-numeric procedure parameters
- and it may appear
- as an ordinary indeterminate inside polynomials. \\
- The \verb+BAG+ structure is intermediate between a list and an operator.
- From the operator it borrows the property to be a \verb+KERNEL+ and,
- therefore, may be an indeterminate of a polynomial. From the list structure
- it borrows the property to be a {\em composite} object.\\[5pt]
- \mbox{\underline{{\bf Definition}:\hfill}}\\[4pt]
- A bag is an object endowed with the following properties:
- \begin{enumerate}
- \item It is a \verb+KERNEL+ composed of an atomic prefix (its
- envelope) and
- its content (miscellaneous objects).
- \item Its content may be changed in an analogous way as the content of a
- list. During these manipulations the name of the bag is {\em conserved}.
- \item Properties may be given to the envelope. For instance, one may
- declare it \verb+NONCOM+ or \verb+SYMMETRIC+ etc.\ $\ldots$
- \end{enumerate}
- \vspace{5pt}
- \mbox{\underline{{\bf Available Functions}:\hfill}}
- \bi
- \item[i.] A default bag envelope \verb+BAG+ is defined.
- It is a reserved identifier.
- An identifier other than \verb+LIST+ or one which is already associated
- with a boolean function may be defined as a bag envelope through the
- command \f{PUTBAG}. In particular, any operator may also be declared
- to be a bag. {\bf When and only when} the identifier is not an already defined
- function does \f{PUTBAG} puts on it the property of an OPERATOR PREFIX.
- The command:
- \begin{verbatim}
- PUTBAG id1,id2,....idn;
- \end{verbatim}
- declares \verb+id1,.....,idn+ as bag envelopes.
- Analoguously, the command
- \begin{verbatim}
- CLEARBAG id1,...idn;
- \end{verbatim}
- eliminates the bag property on \verb+id1,...,idn+.
- \item[ii.] The boolean function \f{BAGP} detects the bag property.
- Here is an example:
- \begin{verbatim}
- aa:=bag(x,y,z)$
- if BAGP aa then "ok"; ==> ok
- \end{verbatim}
- \item[iii.] Almost all functions defined above for lists
- do also work for bags.
- Moreover, functions subsequently defined for SETS do also work.
- Here is a list of the main ones:
- \begin{quotation}
- \f{FIRST, SECOND, LAST, REST, BELAST, DEPTH,\\
- LENGTH, APPEND, CONS (.), REPFIRST, REPREST} $\ldots$
- \end{quotation}
- However, because of the conservation of the envelope, they act
- somewhat differently. Here are a few examples (more examples are
- given inside the test file):
- \begin{verbatim}
- PUTBAG op; ==> T
- aa:=op(x,y,z)$
- FIRST op(x,y,z); ==> op(x)
- REST op(x,y,z); ==> op(y,z)
- BELAST op(x,y,z); ==> op(x,y)
- APPEND(aa,aa); ==> op(x,y,z,x,y,z)
- LENGTH aa; ==> 3
- DEPTH aa; ==> 1
- \end{verbatim}
- When ``appending'' two bags with {\em different} envelopes, the resulting bag
- gets the name of the one bound to the first parameter of \f{APPEND}.\\
- The function \f{LENGTH} gives the actual number of variables on which
- the operator (or the function) depends.
- \vspace{5pt}
- \begin{center}
- The NAME of the ENVELOPE is KEPT by the functions \\[3pt]
- \f{FIRST, SECOND, LAST, BELAST }.
- \end{center}
- \vspace{5pt}
- \item[iv.]
- The connection between the list and the bag structures is made easy
- thanks to \f{KERNLIST} which transforms a bag into a list and thanks to
- the coercion function \f{LISTBAG}. This function has 2 arguments
- and is used as follows:
- \begin{verbatim}
- LISTBAG(<list>,<id>); ==> <id>(<arg_list>)
- \end{verbatim}
- The identifier \verb+<id>+, if allowed, is automatically declared as a bag
- envelope or an error message is generated. \\[3pt]
- Finally, two boolean functions which work both for bags and lists are
- provided. They are \f{BAGLISTP} and \f{ABAGLISTP}.
- They return t or nil (in a conditional statement) if their argument
- is a bag or a list for the first one, if their argument is a list of
- sublists or a bag containing bags for the second one .
- \end{itemize}
- \section{Sets and their Manipulation Functions}
- Functions for sets do exist on the level of the symbolic mode. The
- package make them available in the algebraic mode but also {\em generalizes}
- them so that they can be applied on bag--like objects as well.
- \bi
- \item[i.]
- The constructor \f{MKSET} transforms a list or bag into a set by eliminating
- duplicates.
- \begin{verbatim}
- MKSET({1,a,a1}); ==> {1,a}
- MKSET bag(1,a,a1); ==> bag(1,a)
- \end{verbatim}
- \f{SETP} is a boolean function which recognizes set--like objects.
- \begin{verbatim}
- if SETP {1,2,3} then ... ;
- \end{verbatim}
- \item[ii.]
- The available functions are
- \begin{center}
- \f{UNION, INTERSECT, DIFFSET, SYMDIFF}.
- \end{center}
- They have two arguments which must be sets otherwise an error message
- is issued.
- Their meaning is transparent from their name. They respectively give the
- union, the intersection, the difference and the symmetric difference of two
- sets.
- \ei
- \section{General Purpose Utility Functions}
- Functions in this sections have various purposes. They have all been used
- many times in applications under some form or another. The form given
- to them in this package is adjusted to maximize their range of applications.
- \bi
- \item[i.]
- The functions \f{MKIDNEW DELLASTDIGIT DETIDNUM LIST\_TO\_IDS}
- handle identifiers. \f{MKIDNEW} is a variant of \f{MKID}.
- \f{MKIDNEW} has either 0 or 1 argument. It generates an identifier which
- has not yet been used before.
- \begin{verbatim}
- MKIDNEW(); ==> g0001
- MKIDNEW(a); ==> ag0002
- \end{verbatim}
- \f{DELLASTDIGIT} takes an integer as argument, it strips it from its last
- digit.
- \begin{verbatim}
- DELLASTDIGIT 45; ==> 4
- \end{verbatim}
- \f{DETIDNUM}, deletes the last digit from an
- identifier. It is a very convenient when one wants to make a do loop
- starting from a set of indices $ a_1, \ldots , a_{n} $.
- \begin{verbatim}
- DETIDNUM a23; ==> 23
- \end{verbatim}
- \f{LIST\_to\_IDS} generalizes the function \f{MKID} to a list of
- atoms. It creates and intern an identifier from the concatenation of
- the atoms. The first atom cannot be an integer.
- \begin{verbatim}
- LIST_TO_IDS {a,1,id,10}; ==> a1id10
- \end{verbatim}
- The function \f{ODDP} detects odd integers.
- The function \f{FOLLOWLINE} is convenient when using the function \f{PRIN2}.
- It allows to format an output text in a much more flexible way than with
- the function \f{WRITE}. \\
- Try the following examples :
- \begin{verbatim}
- <<prin2 2; prin2 5>>$ ==> ?
- <<prin2 2; followline(5); prin2 5;>>; ==> ?
- \end{verbatim}
- The function \f{==} is a short and convenient notation for the \f{SET}
- function. In fact it is a {\em generalization} of it to allow to
- deal also with KERNELS:
- \begin{verbatim}
- operator op;
- op(x):=abs(x)$
- op(x) == x; ==> x
- op(x); ==> x
- abs(x); ==> x
- \end{verbatim}
- The function \f{RANDOMLIST} generates a list of random numbers. It takes
- two arguments which are both integers. The first one indicates the range
- inside which the random numbers are chosen. The second one indicates how
- many numbers are to be generated. It is also the length of the list which
- is generated.
- \begin{verbatim}
- RANDOMLIST(10,5); ==> {2,1,3,9,6}
- \end{verbatim}
- \f{COMBNUM} gives the number of combinations of $n$ objects
- taken $p$ to $p$. It has the two integer arguments $n$ and $p$.
- \f{PERMUTATIONS} gives the list of permutations on $n$ objects.
- Each permutation is itself a list. \f{CYCLICPERMLIST} gives the list of
- {\em cyclic} permutations. For both functions, the argument may
- also be a {\tt bag}.
- \begin{verbatim}
- PERMUTATIONS {1,2} ==> {{1,2},{2,1}}
- CYCLICPERMLIST {1,2,3} ==>
- {{1,2,3},{2,3,1},{3,1,2}}
- \end{verbatim}
- \f{COMBINATIONS} gives a list of combinations on $n$ objects taken $p$
- to $p$. It has two arguments. The first one is a list (or a bag) and
- the second one is the integer $p$.
- \begin{verbatim}
- COMBINATIONS({1,2,3},2) ==> {{2,3},{1,3},{1,2}}
- \end{verbatim}
- \f{REMSYM} is a command that erases the \REDUCE\ commands
- \verb+symmetric+ or \verb+antisymmetric+ .
- \f{SYMMETRIZE} is a powerful function which generate a symmetric expression.
- It has 3 arguments. The first is a list (or a list of list) containing
- the expressions which will appear as variables for a kernel. The second
- argument is the kernel-name and the third is a permutation function
- which either exist in the algebraic or in the symbolic mode. This
- function may have been constructed by the user. Within this package
- the two functions \f{PERMUTATIONS} and \f{CYCLICPERMLIST} may be used.
- Here are two examples:
- \begin{verbatim}
- ll:={a,b,c}$
- SYMMETRIZE(ll,op,cyclicpermlist); ==>
- OP(A,B,C) + OP(B,C,A) + OP(C,A,B)
- SYMMETRIZE(list ll,op,cyclicpermlist); ==>
- OP({A,B,C}) + OP({B,C,A}) + OP({C,A,B})
- \end{verbatim}
- Notice that, taking for the first argument a list of list gives rise to
- an expression where each kernel has a {\em list as argument}. Another
- peculiarity of this function is the fact that, unless a pattern maching is
- made on the operator \verb+OP+, it needs to be reevaluated. This peculiarity
- is induced by the need to maximize efficiency when \verb+OP+ is an abstract
- operator. Here is an illustration:
- \begin{verbatim}
- op(a,b,c):=a*b*c$
- SYMMETRIZE(ll,op,cyclicpermlist); ==>
- OP(A,B,C) + OP(B,C,A) + OP(C,A,B)
- for all x let op(x,a,b)=sin(x*a*b);
- SYMMETRIZE(ll,op,cyclicpermlist); ==>
- OP(B,C,A) + SIN(A*B*C) + OP(A,B,C)
- \end{verbatim}
- The functions \f{SORTNUMLIST} and \f{SORTLIST} are functions which sort
- lists. They use {\em bubblesort} and {\em quicksort} algorithms.
- \f{SORTNUMLIST} takes as argument a list of numbers. It sorts it in
- increasing order.
- \f{SORTLIST} is a generalization of the above function.
- It sorts the list according
- to any well defined ordering. Its first argument is the list and its
- second argument is the ordering function. The content of the list
- is not necessary numbers but must be such that the ordering function has
- a meaning.
- \begin{verbatim}
- l:={1,3,4,0}$ SORTNUMLIST l; ==> {0,1,3,4}
- ll:={1,a,tt,z}$ SORTLIST(ll,ordp); ==> {a,z,tt,1}
- \end{verbatim}
- One must know that using these functions for kernels or bags may be
- dangerous since they are destructive. If it is needed, it is recommended
- to first apply \f{KERNLIST} on them.
- The function \f{EXTREMUM} is a generalization of the already defined functions
- \f{MIN, MAX} to include general orderings. It is a 2 arguments function.
- The first is the list and the second is the ordering function.
- With the list \verb+ll+ defined in the last example, one gets
- \begin{verbatim}
- EXTREMUM(ll,ordp); ==> 1
- \end{verbatim}
- \item[iii.] There are four functions to identify dependencies.
- \f{FUNCVAR} takes any expression as argument and returns the set of
- variables of which it depends. Constants are eliminated.
- \begin{verbatim}
- FUNCVAR(e+pi+sin(log(y)); ==> {y}
- \end{verbatim}
- \f{DEPATOM} has an {\bf atom} as argument. It returns it if it is
- a number or if no dependency has previously been declared. Otherwise,
- it returns the list of variables which the various depend declarations
- imply.
- \begin{verbatim}
- depend a,x,y;
- DEPATOM a; ==> {x,y}
- \end{verbatim}
- The functions \f{EXPLICIT} and \f{IMPLICIT} make explicit or
- implicit the dependencies. This example show how they work:
- \begin{verbatim}
- depend a,x; depend x,y,z;
- EXPLICIT a; ==> a(x(y,z))
- IMPLICIT ws; ==> a
- \end{verbatim}
- These are useful when one does not know the names of the variables
- and (or) the nature of the dependencies.
- \f{KORDERLIST} is a zero argument function which display the actual
- ordering.
- \begin{verbatim}
- korder x,y,z;
- KORDERLIST; ==> (x,y,z)
- \end{verbatim}
- \item[iv.] A function \f{SIMPLIFY} which takes an arbitrary expression
- is available which {\em forces} down-to-the-botttom simplification of
- an expression. It is usefull with \f{SYMMETRIZE}. It has also proved
- usefull to simplify some output expressions of the package
- EXCALC\ (E. Schruefer). Here is an example:
- \begin{verbatim}
- l:=op(x,y,z)$
- op(x,y,z):=x*y*z$
- SYMMETRIZE(l,op,cyclicpermlist); ==>
- op(x,y,z)+op(y,z,x)+op(z,x,y)
- SIMPLIFY ws; ==> op(y,z,x)+op(z,x,y)+x*y*z
- \end{verbatim}
- \item[v.] Filtering functions for lists.
- \f{CHECKPROLIST} is a boolean function which checks if the
- elements of a list have a definite property. Its first argument
- is the list, its second argument is a boolean function
- (\f{FIXP NUMBERP $\ldots$}) or an ordering function (as \f{ORDP}).
- \f{EXTRACTLIST} extracts from the list given as its first argument
- the elements which satisfy the boolean function given as its second
- argument. For example:
- \begin{verbatim}
- l:={1,a,b,"st")$
- EXTRACTLIST(l,fixp); ==> {1}
- EXTRACTLIST(l,stringp); ==> {st}
- \end{verbatim}
- \ei
- \section{Properties and Flags}
- In spite of the fact that many facets of the handling of
- property lists is easily accessible in the algebraic mode, it is useful to
- provide analogous functions {\em genuine} to the algebraic mode. The reason is
- that, altering property lists of objects, may easily destroy the integrity
- of the system. The functions, which are here described, {\bf do ignore}
- the property list and flags already defined by the system itself. They
- generate and track the {\em addtional properties and flags} that the user
- issues using them. They offer him
- the possibility to work on property lists so
- that he can design a programming style of the ``conceptual'' type.
- \bi
- \item[i.] We first consider ``flags''. \\
- To a given identifier, one may
- associates another one linked to it ``in the background''. The three
- functions \f{PUTFLAG, DISPLAYFLAG} and \f{CLEARFLAG} handle them.
- \f{PUTFLAG} has 3 arguments. The first is the identifier or a list
- of identifiers, the second is the name of the flag,
- the third is T (true) or 0 (zero).
- When the third argument is T, it creates the flag, when it is 0 it
- destroys it.
- \begin{verbatim}
- PUTFLAG(z1,flag_name,t); ==> flag_name
- PUTFLAG({z1,z2},flag1_name,t); ==> t
- PUTFLAG(z2,flag1_name,0) ==>
- \end{verbatim}
- \f{DISPLAYFLAG} allows to extract flags. The previous actions give:
- \begin{verbatim}
- DISPLAYFLAG z1; ==>{flag_name,flag1_name}
- DISPLAYFLAG z2 ; ==> {}
- \end{verbatim}
- \f{CLEARFLAG} is a command which clears {\em all} flags associated to
- the identifiers $id_1, \ldots , id_n .$
- \item[ii.] Properties are handled by similar functions.
- \f{PUTPROP} has four arguments. The second argument is, here, the
- {\em indicator} of the property. The third argument may be {\em any
- valid expression}. The fourth one is also T or 0.
- \begin{verbatim}
- PUTPROP(z1,property,x^2,t); ==> z1
- \end{verbatim}
- In general, one enter
- \begin{verbatim}
- PUTPROP(LIST(idp1,idp2,..),<propname>,<value>,T);
- \end{verbatim}
- To display a specific property, one uses
- \f{DISPLAYPROP} which takes two arguments. The first is the name of the
- identifier, the second is the indicator of the property.
- \begin{verbatim}
- 2
- DISPLAYPROP(z1,property); ==> {property,x }
- \end{verbatim}
- Finally, \f{CLEARPROP} is a nary commmand which clears {\em all}
- properties of the identifiers which appear as arguments.
- \ei
- \section{Control Functions}
- Here we describe additional functions which
- improve the user control on the environment.
- \bi
- \item[i.]
- The first set of functions is composed of unary and binary boolean functions.
- They are:
- \begin{verbatim}
- ALATOMP x; x is anything.
- ALKERNP x; x is anything.
- DEPVARP(x,v); x is anything.
- (v is an atom or a kernel)
- \end{verbatim}
- \f{ALATOMP} has the value T iff x is an integer or an identifier
- {\em after} it has been evaluated down to the bottom.
- \f{ALKERNP} has the value T iff x is a kernel {\em after}
- it has been evaluated down to the bottom.
- \f{DEPVARP} returns T iff the expression x depends on v at
- {\bf any level}.
- The above functions together with \f{PRECP} have
- been declared operator functions to ease the verification of
- their value.
- \f{NORDP} is essentially equivalent to \verb+not+\f{ ORDP}
- when inside a conditional statement. Otherwise, it can be used
- while \verb+not+\f{ ORDP} cannot.
- \item[ii.]
- The next functions allow one to {\em analyze} and to
- {\em clean} the environment
- of \REDUCE\ which is created by the user while he is working
- {\bf interactively}. To functions are provided:\\
- \f{SHOW} allows to get the various identifiers already
- assigned and to see their type. \f{SUPPRESS} selectively clears the
- used identifiers or clears them all. It is to be stressed that identifiers
- assigned from the input of files are {\bf ignored}.
- Both functions have one argument and the same options for this
- argument:
- \begin{verbatim}
- SHOW (SUPPRESS) all
- SHOW (SUPPRESS) scalars
- SHOW (SUPPRESS) lists
- SHOW (SUPPRESS) saveids (for saved expressions)
- SHOW (SUPPRESS) matrices
- SHOW (SUPPRESS) arrays
- SHOW (SUPPRESS) vectors
- (contains vector, index and tvector)
- SHOW (SUPPRESS) forms
- \end{verbatim}
- The option \verb+all+ is the most convenient for \f{SHOW} but,
- with it, it may
- takes time to get the answer after one has worked several hours.
- When entering \REDUCE\ the option \verb+all+ for \f{SHOW} gives:
- \begin{verbatim}
- SHOW all; ==>
- scalars are: NIL
- arrays are: NIL
- lists are: NIL
- matrices are: NIL
- vectors are: NIL
- forms are: NIL
- \end{verbatim}
- It is a convenient way to remember the various options. Here an example
- which is valid when one starts from a fresh environment:
- \begin{verbatim}
- a:=b:=1$
- SHOW scalars; ==> scalars are: (A B)
- SUPPRESS scalars; ==> t
- SHOW scalars; ==> scalars are: NIL
- \end{verbatim}
- \item[iii.]
- The \f{CLEAR} function of the system does not do a complete cleaning of
- \verb+OPERATORS+ and \verb+FUNCTIONS+ . The following two functions do a more
- complete cleaning and, also, takes automatically into account the
- {\em user} flag and properties that the functions
- \f{PUTFLAG} and \f{PUTPROP} may have introduced.
- Their names are \f{CLEAROP} and \f{CLEARFUNCTIONS}.
- \f{CLEAROP} takes one operator as its argument.\\
- \f{CLEARFUNCTIONS} is a nary command. If one issues
- \begin{verbatim}
- CLEARFUNCTIONS a1,a2, ... , an $
- \end{verbatim}
- The functions with names \verb+ a1,a2, ... ,an+ are cleared.
- One should be careful when using this facility since the
- only functions which cannot be erased are those which are
- protected with the \verb+lose+ flag.
- \ei
- \section{Handling of Polynomials}
- The module contains some utility functions to handle
- standard quotients and several new facilities to manipulate polynomials.
- \bi
- \item[i.] Two functions \f{ALG\_TO\_SYMB} and \f{SYMB\_TO\_ALG}
- allow to change an expression which is in the algebraic standard
- quotient form into a prefix lisp form and vice-versa. This is made
- in such a way that the symbol \verb+list+ which appears in the
- algebraic mode desappear in the symbolic form (there it becomes
- a parenthesis ``()'' ) and it is reintroduced in the translation
- from a symbolic prefix lisp expression to an algebraic one.
- Here, is an example, showing how the wellknown lisp function
- \f{FLATTENS} can be trivially transposed inside the algebraic mode:
- \begin{verbatim}
- algebraic procedure ecrase x;
- lisp symb_to_alg flattens1 alg_to_symb algebraic x;
- symbolic procedure flattens1 x;
- % ll; ==> ((A B) ((C D) E))
- % flattens1 ll; (A B C D E)
- if atom x then list x else
- if cdr x then
- append(flattens1 car x, flattens1 cdr x)
- else flattens1 car x;
- \end{verbatim}
- gives, for instance,
- \begin{verbatim}
- ll:={a,{b,{c},d,e},{{{z}}}}$
- ECRASE ll; ==> {A, B, C, D, E, Z}
- \end{verbatim}
- \item[ii.]
- \f{LEADTERM} and \f{REDEXPR} are the algebraic equivalent of the
- symbolic functions \f{LT} and \f{RED}. They give, respectively, the
- {\em leading term} and the {\em reductum} of a polynomial. They also work
- for rational functions. Their interest lies in the fact that they do not
- require to extract the main variable. They work according to the current
- ordering of the system:
- \begin{verbatim}
- pol:=x++y+z$
- LEADTERM pol; ==> x
- korder y,x,z;
- LEADTERM pol; ==> y
- REDEXPR pol; ==> x + z
- \end{verbatim}
- By default, the representation of multivariate polynomials is recursive.
- It is justified since it is the one which takes the least of memory.
- With such a representation, the function \f{LEADTERM} does not necessarily
- extract a true monom. It extracts a monom in the leading indeterminate
- multiplied by a polynomial in the other indeterminates. However, very often,
- one needs to handle true monoms separately. In that case, one needs a
- polynomial in {\em distributive} form. Such a form is provided by the
- package GROEBNER (H. Melenk et al.). The facility there is, however,
- much too involved and the necessity to load the package makes interesting
- an elementary facility to write polynomials in a distributive form. So,
- a new switch is created to handle {\em distributed} polynomials. It is
- called {\tt DISTRIBUTE} and a new function \f{DISTRIBUTE} puts a
- polynomial in distributive form. With the switch put to {\bf on},
- \f{LEADTERM} gives {\bf true} monoms.
- \f{MONOM} transforms a polynomial into a list of monoms. It works
- {\em whatever the position of the switch} {\tt DISTRIBUTE}.
- \f{SPLITTERMS} is analoguous to \f{MONOM} except that it gives
- a list of two lists. The first sublist contains the positive terms
- while the second sublist contains the negative terms.
- \f{SPLITPLUSMINUS} gives a list whose first element is the positive
- part of the polynomial and its second element is its negative part.
- \item[iii.]
- Two complementary functions \f{LOWESTDEG} and \f{DIVPOL} are provided.
- The first takes a polynomial as its first argument and the name of an
- indeterminate as its second argument. It returns the {\em lowest degree}
- in that indeterminate. The second function takes two polynomials and
- returns both the quotient and its remainder.
- \ei
- \section{Handling of Transcendental Functions}
- \bi
- \item[i.]
- The functions \f{TRIGREDUCE} and \f{TRIGEXPAND} and the equivalent
- one for hyperbolic functions \f{HYPREDUCE} and \f{HYPEXPAND}
- make the transformations to multiple arguments and from
- multiple arguments to elementary arguments. Here, a simple example:
- \begin{verbatim}
- aa:=sin(x+y)$
- TRIGEXPAND aa; ==> SIN(X)*COS(Y) + SIN(Y)*COS(X)
- TRIGREDUCE ws; ==> SIN(Y + X)
- \end{verbatim}
- When a trigonometric or hyperbolic expression is symmetric with
- respect to the interchange of {\tt SIN (SINH)} and {\tt COS (COSH)},
- the application of \f{TRIG-(HYP)-REDUCE} may often lead to great
- simplifications. However, if it is highly assymetric, the repeated
- application of \f{TRIG-(HYP)-REDUCE} followed by the use of
- \f{TRIG-(HYP)-EXPAND} will lead to {\em more} complicated
- but more symmetric expressions:
- \begin{verbatim}
- aa:=(sin(x)^2+cos(x)^2)^3$
- TRIGREDUCE aa; ==> 1
- \end{verbatim}
- \pagebreak
- \begin{verbatim}
- bb:=1+sin(x)^3$
- TRIGREDUCE bb; ==>
- - SIN(3*X) + 3*SIN(X) + 4
- ---------------------------
- 4
- TRIGEXPAND ws; ==>
- 3 2
- SIN(X) - 3*SIN(X)*COS(X) + 3*SIN(X) + 4
- -------------------------------------------
- 4
- \end{verbatim}
- \item[ii.]
- Two functions for the manipulation of logarithmic expression are
- available. They are \f{PLUSLOG} and \f{CONCSUMLOG}.
- Both function take an arbitrary expression as argument. The first one
- transforms products, ratios and exponentiations which appear under a
- \verb+log+ respectively into sums, differnces of log's and products
- of exponents with log's. The second one does the opposite job.
- \ei
- \section{Handling of n--dimensional Vectors}
- Explicit vectors in {\tt EUCLIDEAN} space may be represented by
- list-like or bag-like objects of depth 1.
- The components may be bags but may {\bf not} be lists.
- Functions are provided to do the sum, the difference and the
- scalar product. When, space-dimension is three, there are also functions
- for the cross and mixed products.
- \f{SUMVECT, MINVECT, SCALVECT, CROSSVECT} have two arguments.
- \f{MPVECT} has three arguments. The following example
- is sufficient to explain how they work:
- \begin{verbatim}
- l:={1,2,3}$
- ll:=list(a,b,c)$
- SUMVECT(l,ll); ==> {A + 1,B + 2,C + 3}
- MINVECT(l,ll); ==> { - A + 1, - B + 2, - C + 3}
- SCALVECT(l,ll); ==> A + 2*B + 3*C
- CROSSVECT(l,ll); ==> { - 3*B + 2*C,3*A - C, - 2*A + B}
- MPVECT(l,ll,l); ==> 0
- \end{verbatim}
- \section{Handling of Grassmann Operators}
- Grassman variables are often used in physics. For them the multiplication
- operation is associative, distributive but anticommutative. The
- {\tt KERNEL} of \REDUCE\ does not provide it. However, implementing
- it in full generality would almost
- certainly decrease the overall efficiency of the system. This small
- module together with the declaration of antisymmetry for operators is
- enough to deal with most calculations. The reason is, that a
- product of similar anticommuting kernels can easily be transformed
- into an antisymmetric operator with as many indices as the number of
- these kernels. Moreover, one may also issue pattern matching rules
- to implement the anticommutativity of the product.
- The functions in this module represent the minimum functionality
- required to identify them and to handle their specific features.
- \f{PUTGRASS} is a (nary) command which give identifiers the property
- to be the names of Grassmann kernels. \f{REMGRASS} removes this property.
- \f{GRASSP} is a boolean function which detects grassmann kernels.
- \f{GRASSPARITY} takes a {\bf monom} as argument and gives its parity.
- If the monom is a simple grassmann kernel it returns 1.
- \f{GHOSTFACTOR} has two arguments. Each one is a monom. It is equal to
- \begin{verbatim}
- (-1)**(GRASSPARITY u * GRASSPARITY v)
- \end{verbatim}
- Here is an illustration to show how the above functions work:
- \begin{verbatim}
- PUTGRASS eta; ==> t
- if GRASSP eta(1) then "grassmann kernel"; ==>
- grassmann kernel
- aa:=eta(1)*eta(2)-eta(2)*eta(1); ==>
- AA := - ETA(2)*ETA(1) + ETA(1)*ETA(2)
- GRASSPARITY eta(1); ==> 1
- GRASSPARITY (eta(1)*eta(2)); ==> 0
- GHOSTFACTOR(eta(1),eta(2)); ==> -1
- grasskernel:=
- {eta(~x)*eta(~y) => -eta y * eta x when nordp(x,y),
- (~x)*(~x) => 0 when grassp x};
- exp:=eta(1)^2$
- exp where grasskernel; ==> 0
- aa where grasskernel; ==> - 2*ETA(2)*ETA(1)
- \end{verbatim}
- \section{Handling of Matrices}
- This module provides functions for handling matrices more comfortably.
- \bi
- \item[i.]
- Often, one needs to construct some {\tt UNIT} matrix of
- a given dimension. This construction is done by the system thanks
- to the function \f{UNITMAT}. it is a nary function. The command is
- \begin{verbatim}
- UNITMAT M1(n1), M2(n2), .....Mi(ni) ;
- \end{verbatim}
- where \verb+M1,...Mi+ are names of matrices and
- \verb+ n1, n2, ..., ni+ are integers .
- \f{MKIDM} is a generalization of \f{MKID}. It allows to connect
- two or several matrices. If \verb+u+ and \verb+u1+ are two matrices,
- one can go from one to the other:
- \begin{verbatim}
- matrix u(2,2);$ unitmat u1(2)$
- u1; ==>
- [1 0]
- [ ]
- [0 1]
- mkidm(u,1); ==>
- [1 0]
- [ ]
- [0 1]
- \end{verbatim}
- This function allows to make loops on matrices like in the following
- illustration. If \verb+U, U1, U2,.., U5+ are matrices:
- \begin{verbatim}
- FOR I:=1:5 DO U:=U-MKIDM(U,I);
- \end{verbatim}
- can be issued.
- \item[ii.]
- The next functions map matrices on bag-like or list-like objects
- and conversely they generate matrices from bags or lists.
- \f{COERCEMAT} transforms the matrix \verb+U+ into a list of lists.
- The entry is
- \begin{verbatim}
- COERCEMAT(U,id)
- \end{verbatim}
- where \verb+id+ is equal to \verb+list+ othewise it transforms it into
- a bag of bags whose envelope is equal to \verb+id+.
- \f{BAGLMAT} does the opposite job. The {\bf first} argument is the
- bag-like or list-like object while the second argument is the matrix
- identifier. The entry is
- \begin{verbatim}
- BAGLMAT(bgl,U)
- \end{verbatim}
- \verb+bgl+ becomes the matrix \verb+U+ . The transformation is
- {\bf not} done if \verb+U+ is {\em already} the name of a
- previously defined matrix. This is to avoid ACCIDENTAL redefinition
- of that matrix.
- \item[ii.]
- The functions \f{SUBMAT, MATEXTR, MATEXTC} take parts of a given matrix.
- \f{SUBMAT} has three arguments. The entry is
- \begin{verbatim}
- SUBMAT(U,nr,nc)
- \end{verbatim}
- The first is the matrix name, and the other two are the row and column
- numbers . It gives the
- submatrix obtained from \verb+U+ deleting the row \verb+nr+ and
- the column \verb+nc+.
- When one of them is equal to zero only column \verb+nc+
- or row \verb+nr+ is deleted.
- \f{MATEXTR} and \f{MATEXTC} extract a row or a column and place it into
- a list-like or bag-like object.
- The entry are
- \begin{verbatim}
- MATEXTR(U,VN,nr)
- MATEXTC(U,VN,nc)
- \end{verbatim}
- where \verb+U+ is the matrix, \verb+VN+ is the ``vector name'',
- \verb+nr+ and \verb+nc+ are integers. If \verb+VN+ is equal
- to {\tt list} the vector is given as a list otherwise it is
- given as a bag.
- \item[iii.]
- Functions which manipulate matrices. They are
- \f{MATSUBR, MATSUBC, HCONCMAT, VCONCMAT, TPMAT, HERMAT}
- \f{MATSUBR MATSUBC} substitute rows and columns. They have three arguments.
- Entries are:
- \begin{verbatim}
- MATSUBR(U,bgl,nr)
- MATSUBC(U,bgl,nc)
- \end{verbatim}
- The meaning of the variables \verb+U, nr, nc+ is the same as above
- while \verb+bgl+ is a list-like or bag-like vector.
- Its length should be compatible with the dimensions of the matrix.
- \f{HCONCMAT VCONCMAT} concatenate two matrices. The entries are
- \begin{verbatim}
- HCONCMAT(U,V)
- VCONCMAT(U,V)
- \end{verbatim}
- The first function concatenates horizontally, the second one
- concatenates vertically. The dimensions must match.
- \f{TPMAT} makes the tensor product of two matrices. It is also an
- {\em infix} function. The entry is
- \begin{verbatim}
- TPMAT(U,V) or U TPMAT V
- \end{verbatim}
- \f{HERMAT} takes the hermitian conjuguate of a matrix
- The entry is
- \begin{verbatim}
- HERMAT(U,HU)
- \end{verbatim}
- where \verb+HU+ is the identifier for the hermitian matrix of \verb+U+.
- It should {\bf unassigned} for this function to work successfully.
- This is done on purpose to prevent accidental redefinition of an already
- used identifier .
- \item[iv.]
- \f{SETELMAT GETELMAT} are functions of two integers. The first one
- reset the element \verb+(i,j)+ while the second one extract an
- element identified by \verb+(i,j)+. They may be useful when
- dealing with matrices {\em inside procedures}.
- \ei
- %\input assist1
- %\input assist2
- %\input assist3
- %\input assist4
- %\input assist5
- %\input assist6
- %\input assist7
- %\input assist8
- \end{document}
|