ApCoCoA-1:Fundamentals Tutorial De Ring
Wo bin ich? (... und wie kann ich umziehen?)
In {\CoCoA} rechnet man üblicherweise in einem Polynomring, also idealerweise in Polynomen, welche über einem Körper definiert sind. Dieser Körper muss natürlich Computerverträglich sein: $\mathbb{R}$ ist zwar ein schöner Körper, aber für den Einsatz in der Computeralgebra total ungeeignet, da sich Elemente wie $\pi$ und $\sqrt{2}$ nun einfach nicht in endlich vielen Stellen abspeichern lassen. Jedoch wollen wir nicht so schnell aufgeben, symbolisch kann {\CoCoA} mit dem Objekt $\sqrt{2}$ ohne Probleme umgehen. \medskip
Im Gegensatz zu normalen Definitionen werden Ringe mit \texttt{::=} festgelegt, so wird der Polynomring $\mathbb{F}_5\left[x,y\right]:=\mathbb{Z}/\!\;\!_{\textstyle 5\mathbb{Z}}\left[x,y\right]$ mit \texttt{S::=Z/(5)[x,y];} unter dem Namen \texttt{S} bereitgestellt. \medskip
Mit \texttt{Use S;} wird dann bis auf weiteres auf den neuen Ring umgestellt. Wenn man nur für eine Berechnung umschalten möchte, so kann man das Befehlspaar \texttt{Using} und \texttt{EndUsing;} verwenden: \begin{center} \begin{tabular}{l} \texttt{Using S Do}\\ \quad \texttt{For I:= 1 To Characteristic(S) Do}\\ \qquad \texttt{I\textasciicircum 2;}\\ \qquad \texttt{PrintLn;}\\ \quad \texttt{EndFor;}\\ \texttt{EndUsing;} \end{tabular} \end{center} Wichtig ist hier, dass der Befehl eigentlich aus drei Teilen (\texttt{Using}, \texttt{Do} und \texttt{EndUsing}) besteht und nur ein Semikolon am Ende von \texttt{EndUsing} bedarf. \begin{center} \includegraphics[width=0.4\textwidth]{./../images/1To25} \end{center} Die Syntax der \texttt{For}-Schleife ist mit der von \texttt{Using} vergleichbar und der Befehl \texttt{PrintLn;} verursacht einen Zeilenumbruch. Ziemlich vorhersagbar ist der Befehl \texttt{Charakteristic(S)}, welcher uns die Charakteristik des Körpers $\mathbb{F}_5$, also $5$ liefert. \medskip
\pagebreak
Aber eigentlich wollten wir doch modulo rechnen. Das Problem ist nun, das das {\CoCoA} ja nicht ahnen kann, also müssen wir dies explizit angeben:
\begin{center}
\begin{tabular}{l}
\texttt{Using S Do}\\
\quad \texttt{For I:= 1 To Characteristic(S) Do}\\
\qquad \texttt{(I\textasciicircum 2){\%}Characteristic(S);}\\
\qquad \texttt{PrintLn;}\\
\quad \texttt{EndFor;}\\
\texttt{EndUsing;}
\end{tabular}
\end{center}
Ohne die runden Klammern um \texttt{I\textasciicircum 2} funktioniert die Rechnung nicht. Klar, wir wissen ja schon, dass {\CoCoA} nicht raten kann was wir meinen. Wie soll {\CoCoA} entscheiden, ob mit der Eingabe \texttt{I\textasciicircum 2{\%}Characteristic(S);} nun \texttt{(I\textasciicircum 2){\%}Characteristic(S);} oder \texttt{I\textasciicircum (2{\%}Characteristic(S));} gemeint ist.
\begin{center}
\includegraphics[width=0.4\textwidth]{./../images/1To25modulo}
\end{center}
{\CoCoA} gibt also immer den betragsmäßig kleinsten modulo-Wert aus.
\medskip
Nach einiger Zeit verliert man schon mal den Überblick, welche Ringe einem zur Verfügung stehen, hier schafft der Befehl \texttt{RingEnvs();} Abhilfe. \begin{center} \includegraphics[width=0.6\textwidth]{./../images/ringenvs} \end{center}