% from 8.6.96 hk
% user packages, buchberger with factoriz + sugar 

\section{Buchberger algorithm with sugar strategy} %------

The programs were implemented by \cite{Rose95}, we cite from 
this technical report: 

``The basic ideas for the implementation of the Buchberger algorithm in 
the MAS module DIPAGB originate from the algorithms GR\"OBNERNEW2
(\cite{Becker93}, p. 232) and its subalgorithm UPDATE
(\cite{Becker93}, p. 230). Given a finite subset $F$ of a
multivariate polynomial ring $K[X_1,...,X_n]$ over a computable field $K$
GR\"OBNERNEW2 finds a Gr\"obner basis $G$ of the ideal in $K[X_1,...,X_n]$
generated by $F$. The algorithm eliminates superfluous critical pairs according
to Buchberger's criteria as implemented by Gebauer and M\"oller
(\cite{GM88}). A call of the function {\tt DIPAGB} with parameter $F$
in the DIPAGB module performs the computation of $G$ as given by GR\"OBNERNEW2
with the exception that the algorithm stops with the ideal basis $G=\{1\}$ if a
constant non-zero polynomial would be added to the computed ideal basis.

Besides the choice of the term order relative to which the Gr\"obner basis $G$
is computed one of the main points of big influence on the time complexity of
the algorithm is the {\em selection strategy}, i.e. the strategy to choose one
of the critical pairs for the process of reduction. In the DIPAGB module Rev.
1.3 there are two selection strategies supported: the {\em normal strategy}
that chooses a critical pair $(f,g)$ if the least common multiple of the
leading terms of $f$ and $g$ is minimal in the current term order, and the {\em
normal with sugar strategy} that chooses a critical pair $(f,g)$ if the sugar
of the S-polynomial of $f$ and $g$ is minimal and, in order to break ties, if
the least common multiple of the leading terms of $f$ and $g$ is minimal in the
current term order among all critical pairs with the same sugar of their S-
polynomial. The {\em sugar} $S_f$ of a polynomial $f \in K[X_1, ..., X_n]$ is
defined as follows:

Let $W=(w_1,....,w_n)$ be an $n$-tuple of rational numbers where $w_i$,
$i=1,...,n$, is the weight of the variable $X_i$, and $f = \sum_{j=0}^k \, a_j
\, X_1^{\nu_{j,1}} \cdot ... \cdot X_n^{\nu_{j,n}} \in K[X_1,...,X_n]$. Then
the {\em rational-weighted total degree} $\deg_W(f)$ of $f$ is defined by
\begin{equation}
    \deg_W(f) := \max_{0 \le j \le k} \, \sum_{i=1}^n \, w_i \,
    \nu_{j,i}.
\end{equation}
Furthermore, for the initial $f \in F$, let $S_f = \deg_W(f)$. \\
If $g,h \in K[X_1,...,X_n]$ are polynomials with sugar $S_g$, $S_h$ and $t \in
K[X_1,...,X_n]$ is a term, then $S_{t \cdot g} = \deg_W(t) + S_g$ and $S_{g+h}
= \max \, \{S_g,S_h\}$.

The motivation for the sugar definition of polynomials and a comprehensive
description in the special case $W=(1,...,1)$ can be found in \cite{Sugar91}.


\subsection{DIPAGB procedures in the interpreter} %-----------------

The main data structures used in the DIPAGB module are given by the MAS system.
The {\tt DIPAGB} function takes a list $F$ of polynomials in distributive
representation and produces a list $G$ of polynomials in distributive
representation. Whenever the normal strategy is used, this data structure for
the polynomials handled during the Gr\"obner basis computation is sufficient.
The normal with sugar strategy option, however, makes it necessary to carry
along the sugar with each polynomial. This fact leads to a new data structure
called {\em extended distributive polynomial}. In case of the normal strategy
an extended distributive polynomial simply is the same as a distributive
polynomial; in case of the normal with sugar strategy an extended distributive
polynomial is a pair $(f,S_f)$ of a polynomial $f$ in distributive
representation and its sugar $S_f$. 

Furthermore it is advantageous in practice to store frequently used data of a
critical pair of polynomials together with each critical pair. Accordingly in
case of the normal strategy an {\em extended critical pair} is a triple
$(f,g,lcm)$ of two (extended) distributive polynomials $f,g$ and the least
common multiple $lcm$ of the leading terms of $f$ and $g$, whenever $(f,g)$
defines a critical pair of polynomials. 

Since in case of the normal with sugar strategy it is also necessary to keep
the sugar of the S-polynomial of each critical pair in mind, an {\em extended
critical pair} is then given by a quadruple $((f,S_f), (g,S_g), lcm, S_{f,g})$
where $(f,g)$ is a critical pair, $lcm$ is the least common multiple of the
leading terms of $f$ and $g$ and $S_{f,g}$ is the sugar of the S-polynomial of
$f$ and $g$. 

In the DIPAGB module Rev. 1.3 tuples of data are represented by lists of
appropriate length. The names of procedures which handle with extended
distributive polynomials, start with ''{\tt EDIP}'', procedures which take
extended critical pairs are denoted ''{\tt ECP}...''.

\subsubsection{The function {\tt DIPAGB}}
\label{FunctionDIPAGB}%
The main function in the DIPAGB module is the {\tt DIPAGB} function. As
described above, it takes one input parameter, namely a finite list $F$ of
polynomials in distributive representation. Since {\tt DIPAGB} works over
arbitrary domains, the coefficients of these polynomials are allowed to be
taken from every domain supported in the arbitrary domain system of MAS. Look
at the MAS documentation for details on the arbitrary domain system. The output
of {\tt DIPAGB} is a list $G$ of polynomials in distributive representation
such that $G$ is a Gr\"obner basis of the ideal generated by $F$. Whenever the
reduced and sorted Groebner basis is to be calculated, the user should
subsequently apply the {\tt DIPLIR} function from the DIPADOM module.

\subsubsection{The option set procedures}
\label{OptionSetProcedures}%
The following option set procedures are at the user's disposal:
\begin{tt}
\begin{tabbing}
\hspace{1cm} \= \kill
\> SetDIPAGBStrategy \\
\> SetDIPAGBVariableWeight \\
\> SetDIPAGBTraceFlag \\
\> SetDIPAGBOptions
\end{tabbing}
\end{tt}
\par \vspace{2ex}

{\tt SetDIPAGBStrategy($st$)}, $st \in \{0,1\}$, chooses the selection strategy
($st=0$: normal, $st=1$: normal with sugar). The selection strategy is set to
$0$ by default. The MAS system will use the chosen strategy for each run of
{\tt DIPAGB} until a new selection strategy is set by the user.
\par \vspace{2ex}

With the command {\tt SetDIPAGBVariableWeight($W$)} the variable weight list
used during any computation of the rational-weighted total degree of a
polynomial $f$ in $n$ variables in case of the normal with sugar strategy is
set. $W=(W_1,...,W_n)$ is a list of rational numbers where $n$ is the length of
the variable list {\tt VALIS} and $W_i$, $1 \le i \le n$, is the weight of the
$i$th variable in {\tt VALIS}. If no variable weight list is set by the user,
the default weight list $(1,...,1)$ is used in all degree calculations while
the Gr\"obner basis $G$ is computed. The variable weight list remains $W$ until
it is reset by the user. If the actual variable weight list is different from
the default weight list and of a length different to the length of {\tt VALIS}
the message
\begin{verbatim}
   DIPAGB: no valid variable weight list
\end{verbatim}
will occur.
\par \vspace{2ex}

The {\em trace flag}, a non-negative integer level for interactive
documentations, is very useful for solving diagnostic problems. With the {\tt
SetDIPAGBTraceFlag($tf$)} command, $tf \in \{0,1,2,...\}$, you can set the
trace flag to $tf$. The following operations are documented in the output
stream:
\begin{list}{}{\leftmargin2cm \labelwidth1.4cm \labelsep2mm}
\item[$tf=0$:] No computation steps
\item[$tf \ge 1$:] The total execution time and the number of cells needed to
perform the Gr\"obner basis computation
\item[$tf \ge 2$:] The number and execution time of the normalform computations
\item[$tf \ge 3$:] The changes of selection strategy, variable weight and trace
flag
\item[$tf \ge 4$:] The polynomials to be reduced to normalform
\item[$tf \ge 5$:] The results of the normalform computations
\item[$tf \ge 6$:] The results of the rational-weighted total degree
calculations
\item[$tf \ge 7$:] The insert operations of an extended critical pair into the
extended critical pair list
\item[$tf \ge 8$:] The extensions of the distributive polynomials and the
critical pairs of distributive polynomials
\item[$tf \ge 9$:] The results of all S-polynomial computations
\end{list}
The default value of the trace flag is $0$. The trace flag is unchanged until
it is reset by the user.
\par \vspace{2ex}

Finally, all above options can be set with the single {\tt
SetDIPAGBOptions($O$)} command where $O$ is a list of options. Let $O$ be the
list $(O_1,...,O_L)$. Then {\tt SetDIPAGBOptions($O$)} works as a macro of the
following operations:
\par \vspace{2ex}

\begin{tt}
\begin{tabbing}
\hspace{5mm} \= \kill
\> {\bf if} $L \ge 1$ {\bf then} SetDIPAGBTraceFlag($O_1$) {\bf end}; \\
\> {\bf if} $L \ge 2$ {\bf then} SetDIPAGBStrategy($O_2$) {\bf end}; \\
\> {\bf if} $L \ge 3$ {\bf then} SetDIPAGBVariableWeight($O_3$) {\bf end};
\end{tabbing}
\end{tt}

\subsubsection{The option write procedures}
In analogy to section \ref{OptionSetProcedures} the following option write
procedures exist:
\begin{tt}
\begin{tabbing}
\hspace{1cm} \= \kill
\> WriteDIPAGBStrategy \\
\> WriteDIPAGBVariableWeight \\
\> WriteDIPAGBTraceFlag \\
\> WriteDIPAGBOptions
\end{tabbing}
\end{tt}
\par \vspace{2ex}

With these commands the appropriate current options can be shown in the output
stream. Each of these procedures takes no parameters.

\subsubsection{Further procedures}
One procedure of the DIPAGB module available in the MAS interpreter remains to
be mentioned. It's the operation {\tt LRNWRIT($L$)} (list of rational numbers
write) where $L$ is a finite list of rational numbers. With this procedure for
example a variable weight list can be shown in the output stream.


\subsection{Examples} %-----------------------

The following example demonstrates the interactive documentation handling
during a run of DIPAGB when using trace flag $9$.

{\footnotesize
\begin{verbatim}
    DomainDescriptor := ADDDREAD(). RN.
    VariableList := LIST("X","Y").
    V := DIPVDEF(VariableList).
    TermOrder := DIPTODEF(2).

    F := DILRD(VariableList,DomainDescriptor).
         ( ( 3/2 X**2 Y - 4 ) ( - X Y + 2/5 X ) )
    DILWR(F,VariableList).

    SetDIPAGBTraceFlag(9).
       WX:=RNREAD(). 1/2.
       WY:=RNREAD(). 1.
    SetDIPAGBVariableWeight(LIST(WX,WY)).
    SetDIPAGBStrategy(1).

    DILWR(DIPAGB(F),VariableList).
\end{verbatim}
}

{\footnotesize
\begin{verbatim}
       ANS: (8 0 -1)
       
       ANS: ((57) (59))
       
       ANS: ((57) (59))
       
       ANS: 2
       
       ANS: (((1 2) (8 (3 2) -1) (0 0) (8 (-4 1) -1)) ((1 1) 
            (8 (-1 1) -1) (0 1) (8 (25) -1)))
       
       ( 3/2 X**2 Y -4 )
       ( -1 X Y +2/5 X )
       
       New documentation level: 9
       ...
       New variable weight list: (1/2,1)
       
       New strategy: 1  (= normal with sugar)
       
       The rational-weighted total degree of the polynomial
         ( 3/2 X**2 Y -4 )
       w.r.t. the variable list
         (X,Y)
       and the variable weight list
         (1/2,1)
       is 2.
       
       Extending the polynomial
           ( 3/2 X**2 Y -4 )
       with sugar 2.
       
       The rational-weighted total degree of the polynomial
         ( -1 X Y +2/5 X )
       w.r.t. the variable list
         (X,Y)
       and the variable weight list
         (1/2,1)
       is 3/2.
       
       Extending the polynomial
           ( -1 X Y +2/5 X )
       with sugar 3/2.
       
       Extending the following critical pair:
       1st polynomial: ( -1 X Y +2/5 X )
           with sugar 3/2
       2nd polynomial: ( 3/2 X**2 Y -4 )
           with sugar 2
       LCM of their leading terms:  X**2 Y
       Sugar of their S-polynomial: 2
       
       Inserting the following extended critical pair:
       1st polynomial: ( -1 X Y +2/5 X )
           with sugar 3/2
       2nd polynomial: ( 3/2 X**2 Y -4 )
           with sugar 2
       LCM of their leading terms:  X**2 Y
       Sugar of their S-polynomial: 2
       
       ==> New extended critical pair list:
       1st critical pair:
       1st polynomial: ( -1 X Y +2/5 X )
           with sugar 3/2
       2nd polynomial: ( 3/2 X**2 Y -4 )
           with sugar 2
       LCM of their leading terms:  X**2 Y
       Sugar of their S-polynomial: 2
       
       Computing the S-polynomial of the following two distributive polynomials:
       f = ( -1 X Y +2/5 X )
       with sugar 3/2.
       
       g = ( 3/2 X**2 Y -4 )
       with sugar 2.
       
       ==> Spol(f,g) = ( 3/5 X**2 -4 )
       with sugar 2.
       
       1st polynomial to reduce to normalform:
         ( 3/5 X**2 -4 )
       
       The normalform is
         ( 3/5 X**2 -4 )
       with sugar 2.
       
       ...
       
       Extending the following critical pair:
       1st polynomial: ( 4 Y -8/5 )
           with sugar 3
       2nd polynomial: ( -1 X Y +2/5 X )
           with sugar 3/2
       LCM of their leading terms:  X Y
       Sugar of their S-polynomial: 7/2
       
       Inserting the following extended critical pair:
       1st polynomial: ( 4 Y -8/5 )
           with sugar 3
       2nd polynomial: ( -1 X Y +2/5 X )
           with sugar 3/2
       LCM of their leading terms:  X Y
       Sugar of their S-polynomial: 7/2
       
       ==> New extended critical pair list:
       1st critical pair:
       1st polynomial: ( 4 Y -8/5 )
           with sugar 3
       2nd polynomial: ( -1 X Y +2/5 X )
           with sugar 3/2
       LCM of their leading terms:  X Y
       Sugar of their S-polynomial: 7/2
       
       2nd critical pair:
       1st polynomial: ( 4 Y -8/5 )
           with sugar 3
       2nd polynomial: ( 3/5 X**2 -4 )
           with sugar 2
       LCM of their leading terms:  X**2 Y
       Sugar of their S-polynomial: 4
       
       Computing the S-polynomial of the following two distributive polynomials:
       f = ( 4 Y -8/5 )
       with sugar 3.
       
       g = ( -1 X Y +2/5 X )
       with sugar 3/2.
       
       ==> Spol(f,g) = 0
       with sugar 7/2.
       
       3rd polynomial to reduce to normalform:
         0
       
       The normalform is
         0
       with sugar 7/2.
       
       3 normalform computations in 60 milliseconds.
       
       Total time: 770 milliseconds.
            Cells: 781.
       
       ( 3/5 X**2 -4 )
       ( 4 Y -8/5 )
\end{verbatim}
}

\subsubsection{Hairer, Runge-Kutta} %------

This example is taken from \cite{BGK86}.
%\label{HairerRungeKutta}%

\begin{tabbing}
Polynomial list: \hspace{2mm} \= \hspace{3mm} \= \kill
Domain: \> {\tt RN} \\
Variable list: \> {\tt LIST("C2","C3","B3","B2","B1","A21","A32","A31")} \\
[2mm]
Polynomial list:
\> {\tt ( ( + C2 - A21 )} \\
\> \> {\tt ( + C3 - A31 - A32 )} \\
\> \> {\tt ( + B1 + B2 + B3 - 1)} \\
\> \> {\tt ( + B2 C2 + B3 C3 - 1/2 )} \\
\> \> {\tt ( + B2 C2**2 + B3 C3**2 - 1/3 )} \\
\> \> {\tt ( + B3 A32 C2 - 1/6 ) )} \\ [2mm]
\end{tabbing}

Results with the inverse lexicographical term order {\tt INVLEX}:
\begin{center}
   \begin{tabular}{|l||r|r||r||r|}
   \hline
   & \multicolumn{2}{c||}{Normalform computations} & Time & Space
   \\ \cline{2-3}
   \raisebox{1.5ex}[-1.5ex]{Strategy} & total number & time in ms
   & in ms & in cells \\ \hline
   normal & 14 & 430 & 620 & 17015 \\ \hline
   \parbox[t]{5.1cm}{normal with sugar, \\ variable weight list
   $(0,...,0)$} & 14 & 550 & 750 & 19723 \\ \hline
   \parbox[t]{5.1cm}{normal with sugar, \\ variable weight list
   $(1,...,1)$} & 17 & 670 & 970 & 26591 \\ \hline
   DIPGB & & & 640 & 13889  \\ \hline
   \end{tabular}
\end{center}

Results with the Buchberger term order {\tt REVITDG}:
\begin{center}
   \begin{tabular}{|l||r|r||r||r|}
   \hline
   & \multicolumn{2}{c||}{Normalform computations} & Time & Space
   \\ \cline{2-3}
   \raisebox{1.5ex}[-1.5ex]{Strategy} & total number & time in ms
   & in ms & in cells \\ \hline
   normal & 15 & 180 & 360 & 14541 \\ \hline
   \parbox[t]{5.1cm}{normal with sugar, \\ variable weight list
   $(0,...,0)$} & 15 & 190 & 480 & 16626 \\ \hline
   \parbox[t]{5.1cm}{normal with sugar, \\ variable weight list
   $(1,...,1)$} & 15 & 220 & 540 & 19409 \\ \hline
   DIPGB & & & 620 & 15880  \\ \hline
   \end{tabular}
\end{center}

For the complete set of examples with many more comparisons 
see the technical report \cite{Rose95}. 


\section{Buchberger algorithm with polynomial factorization} %--------------

The programs were implemented by \cite{Pfeil94}.
The module DIPDCGB has been extented to allow several ways to 
compute factored Gr\"obner bases. 

\subsection{Optionen} %----------
%
In diesem Abschnitt werden vier Optionen erl\"autert, die beiden 
Varianten gemeinsam sind, eine Option f\"ur die Variante nach 
\cite{MMN89} und zwei Optionen f\"ur die Variante nach \cite{GL94}. 
Diese Optionen k\"onnen durch die Prozeduren 
{\sl SetTraceLevel, SetDecompProc, SetUpdateProc, SetVarOrdOpt, 
SetFacSugar, SetReduceExp, SetBranchProc und SetDCGBopt} 
gesetzt werden (vergl. Abschnitt \ref{sec2}).

\subsubsection{Trace-Level}\label{subsec1}
Das Trace-Level gibt an, wieviel Information w\"ahrend der 
Berechnung ausgegeben wird. Der Wert kann zwischen 0 und 4 
(jeweils einschlie\"slich) liegen, wobei ein h\"oherer Wert 
mehr Ausgaben bedeutet und jeweils die Ausgaben der niedrigeren 
Trace-Level-Werte mit einschlie\"st.

\subsubsection{Faktorisierungs-Prozedur}\label{subsec2}
Statt der in Definition \cite{Pfeil94} eingef\"uhrten Faktorisierung 
-- im folgenden als vollst\"andige Faktorisierung bezeichnet -- 
kann auch die quadratfreie Zerlegung (vgl. \cite{Becker93}, S.100) 
benutzt werden. Die quadratfreie Zerlegung (Prozedur {\sl DIPSFF}, 
vgl. \cite{Pfeil94}, Anhang A.1) hat gegen\"uber der 
vollst\"andigen Faktorisierung (Prozedur {\sl DIPFAC}, 
vgl. \cite{Pfeil94}, Anhang A.1) i.a. den Vorteil der geringeren 
Rechenzeit welcher durch den Nachteil der geringeren Zerlegung 
des Problems relativiert wird.

\subsubsection{Aktualisierungs-Prozedur}\label{subsec3}
Durch diese Option wird die Prozedur zur Aktualisierung der 
kritischen Paare und der Polynommenge gew\"ahlt. Wird diese 
Option nicht angegeben, so wird standardm\"a\"sig die 
Prozedur {\sl UPDATE} aus dem Modul {\sl DIPAGB} 
von K.~Rose benutzt. Soll hierzu eine andere Prozedur benutzt 
werden k\"onnen, mu\"s diese in dem Modul {\sl DIPDCGB} 
importiert werden und die Prozeduren {\sl SetUpdateProc} 
und {\sl SetDCGBopt} m\"ussen dementsprechend erweitert werden.

\subsubsection{Optimierung der Variablenordnung}\label{subsec4}
Die Variablenordnung gibt die Ordnung auf den Variablen an und ist 
von der Termordnung zu unterscheiden. Zur Optimierung wird die 
Variablenordnung so ge\"andert, da\"s die Faktorisierung 
m\"oglichst schnell berechnet werde kann. Um die urspr\"ungliche 
Variablenordnung wiederherzustellen mu\"s dann die Variablenordnung 
zur\"uck ge\"andert werden. Es wurden zwei Arten der Optimierung 
der Variablenordnung implementiert:
\begin{enumerate}
\item Optimierung der Variablenordnung zu Beginn des Algorithmus 
      und Wiederherstellung der urspr\"unglichen Variablenordnung 
      am Ende des Algorithmus, im folgenden mit VOOB bezeichnet.
\item Optimierung der Variablenordnung unmittelbar vor jeder 
      Faktorisierung und \\ Wiederherstellung der urspr\"unglichen 
      Variablenordnung unmittelbar nach der Faktorisierung, im 
      folgenden mit VOOF bezeichnet.
\end{enumerate}

Bei VOOB ist der Verwaltungsaufwand gegen\"uber VOOF wesentlich 
geringer, aber die erhaltenen Polynommengen bilden i.a. 
keine Gr\"obner-Basis bzgl. der urspr\"unglichen Variablenordnung.
Die Option VOOB wurde in der Prozedur {\sl GroebnerBases1} bzw. 
{\sl GroebnerBases2} implementiert, w\"ahrend die Option VOOF 
in den Prozeduren zur Faktorisierung implementiert wurde. 
Da sich VOOB und VOOF nicht gegenseitig beeinflu\"sen, k\"onnen 
auch beide gleichzeitig benutzt werden.

\subsubsection{Faktor-Sugar}\label{subsec5}
Diese Option bezieht sich nur auf die Prozedur {\sl GroebnerBases1} 
und gibt an, ob die Sugar-Strategie (vergl. \cite{Sugar91}) benutzt 
wird und wenn ja, welchen Sugar die bei einer Faktorisierung 
entstehenden Faktoren bekommen. Entweder ist der neue Sugar der 
des Ausgangspolynoms oder der Totalgrad des Faktors.

\subsubsection{Reduktions-Exponent}\label{subsec6}
Diese Option bezieht sich nur auf die Prozedur {\sl GroebnerBases2} 
und gibt an, von welcher Potenz $u^{e}$ in Prozedur {\sl TEII} 
eine Normalform berechnet wird (vergl. \cite{Pfeil94}, Abschnitt 4.2). 
Wenn $e=1$ ist, wird nur die Optimierung nach \cite{Pfeil94}, Satz 3.2.11 
verwendet, f\"ur $e>1$ wird entsprechend \cite{Pfeil94}, Satz 3.2.13 
verfahren.

\subsubsection{Verzweigungs-Prozedur}\label{subsec7}
Diese Option bezieht sich nur auf die Prozedur {\sl GroebnerBases2} 
und gibt an, welche Prozedur benutzt wird, um die neuen Zweige aus 
den Faktoren zu konstruieren. Die Prozedur {\sl SSCO} konstruiert 
f\"ur jede nichtleere Teilmenge der Faktoren einen neuen Zweig 
(vergl. \cite{Pfeil94}, Abschnitt 3.2), w\"ahrend die Prozedur {\sl EQIEQ} 
nur einen neuen Zweig je Faktor konstruiert (vergl. \cite{GL94}).

In {\sl EQIEQ} werden die Gleichungen $G_{i}$ und Ungleichungen 
$U_{i}$ f\"ur einen Zweig $i$ aus den 
Faktoren $F=\{f_{1},\ldots,f_{r}\}$ folgenderma\"sen konstruiert:
\begin{enumerate}
\item $G_{1}:=\{f_{1}\},\ U_{1}:=\emptyset$
\item $G_{i}:=\{f_{i}\},\ U_{i}:=\{f_{1},\ldots,f_{i-1}\},\ 2\leq i\leq r$
\end{enumerate}

\subsection{Benutzung der Prozeduren im MAS-Interpreter}\label{sec2}
In diesem Abschnitt wird die Benutzung der vorgestellten 
Prozeduren erl\"au\-tert. Im weiteren sind mit Polynomen stets 
Polynome in distributiver Darstellung gemeint. 
F\"ur einen Benutzer des MAS-Interpreters 
sind die folgenden Prozeduren zug\"anglich:

\subsubsection{Prozedur {\sl GroebnerBases1}}
Diese Prozedur implementiert, wie bereits in den vorangegangenen 
Kapiteln erl\"au\-tert, die Variante nach \cite{MMN89} und wird im 
MAS-Interpreter mit {\sl GB1} aufgerufen. Diese Prozedur hat als 
Eingabeparameter eine Liste von Polynomen $F$ und liefert als 
Ergebnis eine Liste von Polynommengen $\{F_{1},\ldots,F_{k}\}$.

\subsubsection{Prozedur {\sl GroebnerBases2}}
Diese Prozedur implementiert, wie bereits in den vorangegangenen 
Kapiteln erl\"au\-tert, die Variante nach \cite{GL94} und wird im 
MAS-Interpreter mit {\sl GB2} aufgerufen. Diese Prozedur hat als 
Eingabeparameter zwei Listen von Polynomen $F$ und $U$ und liefert 
als Ergebnis eine Liste von Paaren von 
Polynommengen $\{(F_{1},U_{1}),\ldots,(F_{k},U_{k})\}$.

\subsubsection{Prozedur {\sl SetTraceLevel}}
Diese Prozedur setzt die in Abschnitt \ref{subsec1} 
erl\"auterte Option. Hierzu wird als Parameter eine ganze Zahl 
angegeben, deren Wert zwischen 0 und 4 
(jeweils einschlie\"slich) liegt. Dabei bedeutet:

\begin{enumerate}
\item[0 :] (default) keine Ausgabe, au\"ser mit Option VOOB, 
           um darauf hinzuweisen,\\
           da\"s das Ergebnis i.a. keine Gr\"obner-Basis darstellt
\item[$>0$ :] Ausgabe der Rechenzeit und der Ergebnisse nach der Berechnung
\item[$>1$ :] Ausgabe von Meldungen \"uber den Berechnungsbaum:\\
           Anzahl der abgeschnittenen Zweige, 
           ``cancel factor'', ``cancel branch'', 
           ``groebner base'', ``branch w.o. zeros''.
\item[$>2$ :] Ausgabe von S-Polynomen und Normalformen
\item[$>3$ :] Ausgabe der Parameter der 
           Prozeduren {\sl RECGB1, RECGB2, REC1, REC2},\\
           der Rechenzeit und der Gr\"obner-Basen w\"ahrend der Berechnung
\end{enumerate}

\subsubsection{Prozedur {\sl SetDecompProc}}
Diese Prozedur setzt die in Abschnitt \ref{subsec2} 
erl\"auterte Option. Hierzu wird als Parameter eine ganze Zahl 
angegeben, deren Wert zwischen 1 und 2 
(jeweils einschlie\"slich) liegt. Dabei bedeutet:
\begin{enumerate}
\item[1 :] (default) vollst\"andige Faktorisierung (mit Prozedur {\sl DIPFAC})
\item[2 :] quadratfreie Zerlegung (mit Prozedur {\sl DIPSFF})
\end{enumerate}

\subsubsection{Prozedur {\sl SetUpdateProc}}
Diese Prozedur setzt die in Abschnitt \ref{subsec3} 
erl\"auterte Option. Hierzu wird als Parameter eine ganze Zahl 
angegeben, deren Wert 1 ist. Dabei bedeutet:
\begin{enumerate}
\item[1 :] (default) Update nach K.~Rose (mit Prozedur {\sl UPDATE})
\end{enumerate}

\subsubsection{Prozedur {\sl SetVarOrdOpt}}
Diese Prozedur setzt die in Abschnitt \ref{subsec4} 
erl\"auterte Option. Hierzu wird als Parameter eine ganze Zahl 
angegeben, deren Wert zwischen 0 und 3 
(jeweils einschlie\"slich) liegt. Dabei bedeutet:
\begin{enumerate}
\item[0 :] (default) keine Optimierung der Variablenordnung
\item[1 :] VOOB
\item[2 :] VOOF
\item[3 :] VOOB und VOOF
\end{enumerate}

\subsubsection{Prozedur {\sl SetFacSugar}}
Diese Prozedur setzt die in Abschnitt \ref{subsec5} 
erl\"auterte Option. Hierzu wird als Parameter eine 
ganze Zahl angegeben, deren Wert zwischen 0 und 2 
(jeweils einschlie\"slich) liegt. Dabei bedeutet:
\begin{enumerate}
\item[0 :] (default) keine Sugar-Strategie
\item[1 :] Faktoren erhalten als Sugar ihren Totalgrad
\item[2 :] Faktoren erhalten als Sugar den Sugar des faktorisierten Polynoms
\end{enumerate}

\subsubsection{Prozedur {\sl SetReduceExp}}
Diese Prozedur setzt die in Abschnitt \ref{subsec6} 
erl\"auterte Option. Hierzu wird als Parameter eine 
ganze Zahl angegeben, deren Wert gr\"o\"ser gleich 1 ist. 
Dabei bedeutet:
\begin{enumerate}
\item[1 :] (default) Optimierung nach \cite{Pfeil94}, Satz 3.2.11
\item[$>1$ :] Optimierung nach \cite{Pfeil94}, Satz 3.2.13 
         mit diesem Wert als Exponent $e$
\end{enumerate}

\subsubsection{Prozedur {\sl SetBranchProc}}
Diese Prozedur setzt die in Abschnitt \ref{subsec7} 
erl\"auterte Option. Hierzu wird als Parameter eine ganze 
Zahl angegeben, deren Wert zwischen 1 und 2 
(jeweils einschlie\"slich) liegt. Dabei bedeutet:
\begin{enumerate}
\item[1 :] (default) ein Zweig f\"ur jede nichtleere Teilmenge 
      der Faktoren (mit Prozedur {\sl SSCO})
\item[2 :] ein Zweig f\"ur jeden Faktor (mit Prozedur {\sl EQIEQ})
\end{enumerate}

\subsubsection{Prozedur {\sl SetDCGBopt}}
Mit dieser Prozedur k\"onnen alle, in den vorangegangenen 
Abschnitten erl\"auterten Optionen gesetzt werden. 
Hierzu wird als Parameter eine Liste von ganzen Zahlen angegeben. 
Diese Liste mu\"s mindestens ein Element haben und kann 
h\"ochstens sieben Elemente haben. Hierbei werden diese 
Zahlen in folgender Reihenfolge den Optionen zugeordnet:
\begin{enumerate}
\item Trace-Level
\item Nr. der Faktorisierungs-Prozedur
\item Nr. der Aktualisierungs-Prozedur 
\item Optimierung der Variablenordnung
\item Faktor-Sugar 
\item Reduktions-Exponent
\item Nr. der Verzweigungs-Prozedur
\end{enumerate}

\subsubsection{Prozedur {\sl WriteDCGBopt}}
Mit dieser Prozedur k\"onnen die aktuellen Werte der 
Optionen ausgegeben werden. Diese Prozedur hat keinen Parameter.


\subsection{Beispiel} %----------------------

Das Beispiel und die Beschreibung (mit leichten Anpassungen) 
sind \cite{Pfeil94} entnommen; weitere Beispiele sind ebendort 
zufinden. 

In diesem Abschnitt wird f\"ur ein Beispiel die Rechenzeit und 
Ergebnisse f\"ur jeweils mehrere Optionen angegeben. 
Hierbei gibt die Zahl hinter TO die gew\"ahlte Termordnung an 
(vgl. \ref{diptodef}). 
Zum Vergleich ist au\"serdem jeweils die Zeit f\"ur den 
Buchberger-Algorithmus ohne Faktorisierung 
(DIPGB, vgl. \ref{adip.alg}) angegeben. 
In der Tabelle gibt die obere Zeile eines 
Tabelleneintrages die Rechenzeit an. In der unteren Zeile 
gibt der Kleinbuchstabe an, welche L\"osungsmenge zu diesem 
Eintrag geh\"ort, wobei verschiedene L\"osungsmengen, deren Polynome 
sich nur durch Einheiten unterscheiden und daher dieselben 
Nullstellen beschreiben, zusammengefa\"st wurden. 
Die Zahl in der unteren Zeile gibt in den Spalten GB1 die Anzahl der 
durch Algorithmus \verb/GB1/ (nach \cite{MMN89}) berechneten $F_{i}$,
in den Spalten GB2 die Anzahl der durch Algorithmus \verb/GB2/ 
(nach \cite{GL94}) berechneten $(F_{i},U_{i})$ und in der Spalte 
DIPGB die Anzahl der Polynome in der mit DIPGB berechneten 
L\"osungsmenge an. 
Alle Beispiele wurden mit der Standardeinstellung von 4 MByte 
f\"ur den Speicherplatz berechnet.

%
% f1
%
Dieses Beispiel wurde \cite{Buchb70} entnommen. 
Die Polynommenge $F_{1}$ besteht aus drei Polynomen 
in drei Variablen $X>Y>Z$:
\begin{eqnarray*}
F_{1} & = \{ & X^{3}YZ-XZ^{2}, \\
 & & XY^{2}Z-XYZ, \\
 & & X^{2}Y^{2}-Z\quad \} 
\end{eqnarray*}
\begin{table}\label{58:t1}
\begin{center}
\begin{tabular}[h]{|ll|r|r|r|r||r|}\hline
& & \multicolumn{2}{|c|}{vollst\"andige Fakt.} & \multicolumn{2}{|c||}{quadratfreie Zerl.} & \\
& & GB1 & GB2 & GB1 & GB2 & DIPGB \\ \hline
TO=2 & & 690 & 820 & 230 & 290 & 140 \\
& ohne & a 3 & f 5 & b 2 & d 3 & c 5 \\ \cline{2-7}
& & 140 & 210 & 100 & 120 & \\
& VOOB & a 3 & g 5 & b 2 & e 3 & \\ \cline{2-6}
& & 180 & 270 & 200 & 220 & \\
& VOOF & a 3 & f 5 & b 2 & d 3 & \\ \cline{2-6}
& & 100 & 140 & 90 & 120 & \\
& beide & a 3 & g 5 & b 2 & e 3 & \\ \hline
TO=8 & & 650 & 800 & 240 & 290 & 120 \\
& ohne & a 3 & f 5 & b 2 & d 3 & c 5 \\ \cline{2-7}
& & 260 & 390 & 180 & 240 & \\
& VOOB & a 3 & f 5 & b 2 & d 3 & \\ \cline{2-6}
& & 180 & 280 & 190 & 230 & \\
& VOOF & a 3 & f 5 & b 2 & d 3 & \\ \cline{2-6}
& & 200 & 280 & 190 & 230 & \\
& beide & a 3 & f 5 & b 2 & d 3 & \\ \hline
\end{tabular}
\end{center}
\caption{Ergebnisse zu $F_{1}$, Zeiten in ms}
\end{table}
L\"osungsmengen (vgl. Tabelle \ref{58:t1}):
\begin{enumerate}
\baselineskip20pt
\item[a)] $\{X,Z\},\ \{X^{2}-Z,Y-1\},\ \{Z,Y\}$
\item[b)] $\{Y-1,X^{2}-Z\},\ \{XY,Z\}$
\item[c)] $\{YZ^{2}-Z^{2},XY^{2}Z-XYZ,X^{2}Z^{2}-Z^{3},X^{2}YZ-Z^{2},X^{2}Y^{2}-Z\}$
\item[d)] $(\{Y-1,X^{2}-Z\},\{Z\}),\ (\{Y-1,Z,X\},\{\}),\ (\{XY,Z\},\{Y-1\})$
\item[e)] $(\{Y-1,X^{2}-Z\},\{XY\}),\ (\{Y-1,Z,X\},\{\}),\ (\{XY,Z\},\{Y-1\})$
\item[f)] $(\{Y,Z\},\{X,Y-1\}),\ (\{X,Y,Z\},\{Y-1\}),\ (\{X,Z\},\{Y,Y-1\}),\\
(\{Y-1,X,Z\},\{Y\}),\ (\{X^{2}-Z,Y-1\},\{X,Y,Z\})$
\item[g)] $(\{Y,Z\},\{X,Y-1\}),\ (\{X,Y,Z\},\{Y-1\}),\ (\{X,Z\},\{Y,Y-1\}),\\
(\{Y-1,X,Z\},\{Y\}),\ (\{X^{2}-Z,Y-1\},\{X,Y\})$
\end{enumerate}


\subsubsection{Katsura, Laurent Series case 3}  %------------------

Dieses Beispiel stammt aus \cite{BGK86}.

{\footnotesize %-------------------------
\begin{verbatim} 
       dp:=ADDDREAD(). RN.
       V:=LIST("Z","Y","X","W"). xx:=DIPVDEF(V).
       F10:=DILRD(V,dp).       
       ( ( W**2 - W + 2 X**2 + 2 Y**2 + 2 Z**2)
       ( 2 W X + 2 X Y + 2 Y Z - X )
       ( 2 W Y + X**2 + 2 X Z - Y )
       ( W + 2 X + 2 Y + 2 Z - 1 ) )
       
       DILWR(F10,V).
       SetTraceLevel(2).
       SetFacSugar(1).
       SetDecompProc(2).
       SetVarOrdOpt(3).
       WriteDCGBopt.
       
       gbl:=GB1(F10).
\end{verbatim}
}

Die Ausgabe sieht wie folgt aus.

{\footnotesize %-------------------------
\begin{verbatim} 
       ANS: (8 0 -1)
       ANS: ()
       ANS: ((61) (59) (57) (55))
       ANS: ((61) (59) (57) (55))
       ANS: (((2 0 0 0) (8 (1 1) -1) (1 0 0 0) (8 (-1 1) -1) (0 2 0 0) 
       (8 (2 1) -1) (0 0 2 0) (8 (2 1) -1) (0 0 0 2) (8 (2 1) -1)) 
       ((1 1 0 0) (8 (2 1) -1) (0 1 1 0) (8 (2 1) -1) (0 1 0 0) 
       (8 (-1 1) -1) (0 0 1 1) (8 (2 1) -1)) ((1 0 1 0) (8 (2 1) -1) 
       (0 2 0 0) (8 (1 1) -1) (0 1 0 1) (8 (2 1) -1) (0 0 1 0) 
       (8 (-1 1) -1)) ((1 0 0 0) (8 (1 1) -1) (0 1 0 0) 
       (8 (2 1) -1) (0 0 1 0) (8 (2 1) -1) (0 0 0 1) (8 (2 1) -1) 
       (0 0 0 0) (8 (-1 1) -1)))
        
       MAS: 
       (  W**2 - W +2 X**2 +2 Y**2 +2 Z**2 )
        
       ( 2 X W +2 Y X - X +2 Z Y )
        
       ( 2 Y W + X**2 +2 Z X - Y )
        
       (  W +2 X +2 Y +2 Z -1 )
        
        
       MAS: TraceLevel : 2
       DecompProc : DIPSFF
       UpdateProc : UPDATE
       VarOrdOpt  : 3
       FacSugar   : 1
       ReduceExp  : 1
       BranchProc : SSCO
 
 
       = groebner base =
 
       = changed variable order =
       Number of canceled branches/factors : 0
        
       Time : 6984 ms with program GB1 :
        
       1. GB with 5 equation(s)
        ( -697038804/54935 X**6 +71721504/54935 X**5 +80905692/54935 X**4 
          -14887832/164805 X**3 -1487501/32961 X**2 +400672/164805 X + Y )
        (  X W -28598724/54935 X**6 +15827184/54935 X**5 +3421752/54935 X**4 
          -4828462/164805 X**3 -82840/32961 X**2 +24707/164805 X )
        (  X**7 -26/77 X**6 -53/693 X**5 +184/6237 X**4 +2/2079 X**3 
          -1/1386 X**2 +1/24948 X )
        (  W +1394077608/54935 X**6 -143443008/54935 X**5 
          -161811384/54935 X**4 +29775664/164805 X**3 +2975002/32961 X**2 
          -471734/164805 X +2 Z -1 )
        (  W**2 -4/3 W +550774224/54935 X**6 -136900224/54935 X**5 
          -55289632/54935 X**4 +101348336/494415 X**3 +3030680/98883 X**2 
          -2285476/494415 X +1/3 )
\end{verbatim}
}



%\section{} %----------

%{\footnotesize %-------------------------
%\begin{verbatim} 
%\end{verbatim}
%}
%{\footnotesize %-------------------------
%\begin{verbatim} 
%\end{verbatim}
%}
