123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- \documentstyle[11pt,reduce]{article}
- \title{Algebraic Number Fields}
- \date{}
- \author{Eberhard Schr\"{u}fer \\
- Institute SCAI.Alg \\
- German National Research Center for Information Technology (GMD) \\
- Schloss Birlinghoven \\
- D-53754 Sankt Augustin \\
- Germany \\[0.05in]
- Email: schruefer@gmd.de}
- \begin{document}
- \maketitle
- \index{algebraic number fields}
- \index{algebraic numbers}
- \index{ARNUM package}
- Algebraic numbers are the solutions of an irreducible polynomial over
- some ground domain. \index{i} The algebraic number $i$ (imaginary
- unit), \index{imaginary unit} for example, would be defined by the
- polynomial $i^2 + 1$. The arithmetic of algebraic number $s$ can be
- viewed as a polynomial arithmetic modulo the defining polynomial.
- Given a defining polynomial for an algebraic number $a$
- \begin{eqnarray*}
- a^n ~ + ~ {p _{n-1}} {a ^ {n -1}} ~ + ~ ... ~ + ~ {p_0}
- \end{eqnarray*}
- All algebraic numbers which can be built up from $a$ are then of the form:
- \begin{eqnarray*}
- {r_{n-1}} {a ^{n-1}} ~+~ {r_{n-2}} {a ^{n-2}} ~+~ ... ~+~ {r_0}
- \end{eqnarray*}
- where the $r_j$'s are rational numbers.
- \index{+ ! algebraic numbers}
- The operation of addition is defined by
- \begin{eqnarray*}
- ({r_{n-1}} {a ^{n-1}} ~+~ {r_{n-2}} {a ^{n-2}} ~+~ ...) ~ + ~
- ({s_{n-1}} {a ^{n-1}} ~+~ {s_{n-2}} {a ^{n-2}} ~+~ ...) ~ = \\
- ({r_{n-1}+s_{n-1}}) {a ^{n-1}} ~+~ ({r_{n-2}+s_{n-2}}) {a ^{n-2}} ~+~ ...
- \end{eqnarray*}
- \index{* ! algebraic numbers}
- Multiplication of two algebraic numbers can be performed by normal
- polynomial multiplication followed by a reduction of the result with the
- help of the defining polynomial.
- \begin{eqnarray*}
- ({r_{n-1}} {a ^{n-1}} + {r_{n-2}} {a ^{n-2}} + ...) ~ \times ~
- ({s_{n-1}} {a ^{n-1}} + {s_{n-2}} {a ^{n-2}} + ...) = \\
- {r_{n-1}} {s ^{n-1}}{a^{2n-2}} + ... ~ {\bf modulo} ~
- a^n ~ + ~ {p _{n-1}} {a ^ {n -1}} ~ + ~ ... ~ + ~ {p_0} \\
- = ~~~{q_{n-1}} a^{n-1} ~ + ~ {q _{n-2}} {a ^ {n -2}} ~ + ~ ...
- \end{eqnarray*}
- \index{/ ! algebraic numbers}
- Division of two algebraic numbers r and s yields another algebraic number q.
- $ \frac{r}{s} = q$ or $ r = q s $.
- The last equation written out explicitly reads
- \begin{eqnarray*}
- \lefteqn{({r_{n-1}} {a^{n-1}} + {r_{n-2}} {a^{n-2}} + \ldots)} \\
- & = & ({q_{n-1}} {a^{n-1}} + {q_{n-2}} {a^{n-2}} + \ldots) \times
- ({s_{n-1}} {a^{n-1}} + {s_{n-2}} {a^{n-2}} + \ldots) \\
- & & {\bf modulo} (a^n + {p _{n-1}} {a^{n -1}} + \ldots) \\
- & = & ({t_{n-1}} {a^{n-1}} + {t_{n-2}} {a^{n-2}} + \ldots)
- \end{eqnarray*}
- The $t_i$ are linear in the $q_j$. Equating equal powers of $a$ yields a
- linear system for the quotient coefficients $q_j$.
- With this, all field operations for the algebraic numbers are available. The
- translation into algorithms is straightforward. For an implementation we
- have to decide on a data structure for an algebraic number. We have chosen
- the representation REDUCE normally uses for polynomials, the so-called
- standard form. Since our polynomials have in general rational coefficients,
- we must allow for a rational number domain inside the algebraic number.
- \begin{tabbing}
- \s{algebraic number} ::= \\
- \hspace{.25in} \= {\tt :ar:} . \s{univariate polynomial over the rationals}
- \\[0.05in]
- \s{univariate polynomial over the rationals} ::= \\
- \> \s{variable} .** \s{ldeg} .* \s{rational} .+ \s{reductum} \\[0.05in]
- \s{ldeg} ::= integer \\[0.3in]
- \s{rational} ::= \\
- \> {\tt :rn:} . \s{integer numerator} . \s{integer denominator} :
- integer \\[0.05in]
- \s{reductum} ::= \s{univariate polynomial} : \s{rational} : nil
- \end{tabbing}
- This representation allows us to use the REDUCE functions for adding and
- multiplying polynomials on the tail of the tagged algebraic number. Also,
- the routines for solving linear equations can easily be used for the
- calculation of quotients. We are still left with the problem of
- introducing a particular algebraic number. In the current version this is
- done by giving the defining polynomial to the statement {\bf defpoly}. The
- \index{DEFPOLY statement}
- algebraic number sqrt(2), for example, can be introduced by
- \begin{verbatim}
- defpoly sqrt2**2 - 2;
- \end{verbatim}
- This statement associates a simplification function for the
- translation of the variable in the defining polynomial into its tagged
- internal form and also generates a power reduction rule used by the
- operations {\bf times} and {\bf quotient} for the reduction of their
- result modulo the defining polynomial. A basis for the representation
- of an algebraic number is also set up by the statement. In the
- working version, the basis is a list of powers of the indeterminate of
- the defining polynomial up to one less then its degree. Experiments
- with integral bases, however, have been very encouraging, and these
- bases might be available in a later version. If the defining
- polynomial is not monic, it will be made so by an appropriate
- substitution.
- \example \index{ARNUM package ! example}
- \begin{verbatim}
- defpoly sqrt2**2-2;
- 1/(sqrt2+1);
- sqrt2 - 1
- (x**2+2*sqrt2*x+2)/(x+sqrt2);
- x + sqrt2
- on gcd;
- (x**3+(sqrt2-2)*x**2-(2*sqrt2+3)*x-3*sqrt2)/(x**2-2);
- 2
- (x - 2*x - 3)/(x - sqrt2)
- off gcd;
- sqrt(x**2-2*sqrt2*x*y+2*y**2);
- abs(x - sqrt2*y)
- \end{verbatim}
- Until now we have dealt with only a single algebraic number. In practice
- this is not sufficient as very often several algebraic numbers appear in an
- expression. There are two possibilities for handling this: one can use
- multivariate extensions \cite{Davenport:81} or one can construct a defining
- polynomial that contains all specified extensions. This package implements
- the latter case (the so called primitive representation). The algorithm we
- use for the construction of the primitive element is the same as given by
- Trager \cite{Trager:76}. In the implementation, multiple extensions can be
- given as a list of equations to the statement {\bf defpoly}, which, among other
- things, adds the new extension to the previously defined one. All
- algebraic numbers are then expressed in terms of the primitive element.
- \example\index{ARNUM package ! example}
- \begin{verbatim}
- defpoly sqrt2**2-2,cbrt5**3-5;
- *** defining polynomial for primitive element:
- 6 4 3 2
- a1 - 6*a1 - 10*a1 + 12*a1 - 60*a1 + 17
- sqrt2;
- 5 4 3 2
- 48/1187*a1 + 45/1187*a1 - 320/1187*a1 - 780/1187*a1 +
- 735/1187*a1 - 1820/1187
- sqrt2**2;
- 2
- \end{verbatim}
- \newpage
- We can provide factorization of polynomials over the algebraic number
- domain by using Trager's algorithm. The polynomial to be factored is first
- mapped to a polynomial over the integers by computing the norm of the
- polynomial, which is the resultant with respect to the primitive element of
- the polynomial and the defining polynomial. After factoring over the
- integers, the factors over the algebraic number field are recovered by GCD
- calculations.
- \example\index{ARNUM package ! example}
- \begin{verbatim}
- defpoly a**2-5;
- on factor;
- x**2 + x - 1;
- (x + (1/2*a + 1/2))*(x - (1/2*a - 1/2))
- \end{verbatim}
- \index{SPLIT\_FIELD function}
- We have also incorporated a function {\bf split\_field} for the calculation
- of a primitive element of minimal degree for which a given polynomial splits
- into linear factors. The algorithm as described in Trager's article is
- essentially a repeated primitive element calculation.
- \example\index{ARNUM package ! example}
- \begin{verbatim}
- split_field(x**3-3*x+7);
- *** Splitting field is generated by:
- 6 4 2
- a2 - 18*a2 + 81*a2 + 1215
- 4 2
- {1/126*a2 - 5/42*a2 - 1/2*a2 + 2/7,
- 4 2
- - (1/63*a2 - 5/21*a2 + 4/7),
- 4 2
- 1/126*a2 - 5/42*a2 + 1/2*a2 + 2/7}
- for each j in ws product (x-j);
- 3
- x - 3*x + 7
- \end{verbatim}
- A more complete description can be found in \cite{Bradford:86}.
- \bibliography{arnum}
- \bibliographystyle{plain}
- \end{document}
|