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: ist zwar ein schöner Körper, aber für den Einsatz in der Computeralgebra total ungeeignet, da sich Elemente wie und nun einfach nicht in endlich vielen Stellen abspeichern lassen. Jedoch wollen wir nicht so schnell aufgeben, symbolisch kann CoCoA}mit dem Objekt ohne Probleme umgehen.
Im Gegensatz zu normalen Definitionen werden Ringe mit ::= festgelegt, so wird der Polynomring mit S::=Z/(5)[x,y]; unter dem Namen S bereitgestellt.
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}