Algebraic Number Fields
Mathematica provides representation of algebraic numbers as
Root objects. A
Root object contains the minimal polynomial of the algebraic number and the root number—an integer indicating which of the roots of the minimal polynomial the
Root object represents. This allows for unique representation of arbitrary complex algebraic numbers. A disadvantage is that performing arithmetic operations in this representation is quite costly. That is why
Mathematica requires the use of an additional function,
RootReduce, in order to simplify arithmetic expressions. Restricting computations to be within a fixed finite algebraic extension of the rationals,

, allows a more convenient representation of its elements as polynomials in

.
Representation of algebraic numbers as elements of a finite extension of rationals.
| Out[1]= |  |
| Out[2]= |  |
For any algebraic number

and any list of rational numbers

, ...,

,
AlgebraicNumber
evaluates to
AlgebraicNumber
, where

is an
algebraic integer such that

for some factor

of the leading coefficient of the minimal polynomial of

,

is the degree of the minimal polynomial of

, and
AlgebraicNumber automatically makes the generator of the extension an algebraic integer and the coefficient list equal in length to the degree of the extension.
| Out[3]= |  |
AlgebraicNumber objects representing rational numbers reduce automatically to numbers.
| Out[4]= |  |
| Out[5]= |  |
| Out[6]= |  |
ToNumberField[a, ] | express the algebraic number a in the number field generated by  |
ToNumberField[{a1,a2,...}, ] | express the in the field generated by  |
| ToNumberField[{a1,a2,...}] | express the in a common extension field generated by a single algebraic number |
Representing arbitrary algebraic numbers as elements of algebraic number fields.
ToNumberField can be used to find a common finite extension of rationals containing the given algebraic numbers.
| Out[7]= |  |
This represents

as an element of the field generated by
Root
.
| Out[8]= |  |
Arithmetic within a fixed finite extension of rationals is much faster than arithmetic within the field of all complex algebraic numbers.
Suppose you need to find the value of rational function

with

replaced by algebraic numbers

.
A direct computation of the value of

at

using
RootReduce takes a rather long time.
| Out[10]= |  |
A faster alternative is to do the computation in a common algebraic number field containing

.
| Out[11]= |  |
Arithmetic within the common number field is much faster.
| Out[12]= |  |
| Out[13]= |  |
ToNumberField
is equivalent to
ToNumberField[{a1, a2, ...}, Automatic], and does not necessarily use the smallest common field extension.
ToNumberField[{a1, a2, ...}, All] always uses the smallest common field extension.
Here the first
AlgebraicNumber object is equal to

so it does not generate the 4

-degree field

(
Root
) it is represented in. However, the common field found by
ToNumberField contains the whole field

(
Root
).
| Out[14]= |  |
Specifying the second argument
All makes
ToNumberField find the smallest field possible.
| Out[15]= |  |
Functions for computing algebraic number properties.
The minimal polynomial of an algebraic number

is the lowest-degree polynomial

with integer coefficients and the smallest positive leading coefficient, such that

.
This gives the minimal polynomial of

expressed as a pure function.
| Out[16]= |  |
This gives the minimal polynomial of
Root[#15-2 #1+7&, 1]2+1 expressed as a polynomial in

.
| Out[17]= |  |
An algebraic number is an algebraic integer if and only if its
MinimalPolynomial is monic.
This shows that

is an algebraic integer.
| Out[18]= |  |
This shows that

is not an algebraic integer.
| Out[19]= |  |
This gives the smallest positive integer

for which

is an algebraic integer.
| Out[20]= |  |
The trace of an algebraic number

is the sum of all roots of
MinimalPolynomial[a].
This gives the trace of

.
| Out[21]= |  |
The norm of an algebraic number

is the product of all roots of
MinimalPolynomial[a].
This gives the norm of

.
| Out[22]= |  |
An algebraic number

is an algebraic unit if and only if both

and

are algebraic integers, or equivalently, if and only if
AlgebraicNumberNorm[a] is

or

.
| Out[23]= |  |
| Out[24]= |  |
An algebraic number

is a root of unity if and only if

for some integer

.
This shows that

is a root of unity.
| Out[25]= |  |
Functions for computing properties of elements of algebraic number fields.
If
a is
AlgebraicNumber
, then
MinimalPolynomial[a, x, Extension->Automatic] is equal to
MinimalPolynomial[a, x]d, where
d is the extension degree of

.
The characteristic polynomial of

, represented as an element of an extension of rationals of degree 4, is the square of
MinimalPolynomial of

.
| Out[26]= |  |
| Out[26]= |  |
The trace of an algebraic number is the sum of all roots of its characteristic polynomial. If
a is
AlgebraicNumber
, then
AlgebraicNumberTrace[a, Extension->Automatic] is equal to
d AlgebraicNumberTrace[a], where
d is the extension degree of

.
The trace of

, represented as an element of an extension of rationals of degree 4, is twice the
AlgebraicNumberTrace of

.
| Out[27]= |  |
| Out[27]= |  |
The norm of an algebraic number is the product of all roots of its characteristic polynomial. If
a is
AlgebraicNumber
, then
AlgebraicNumberNorm[a, Extension->Automatic] is equal to
AlgebraicNumberNorm[a]d, where
d is the extension degree of

.
The norm of

, represented as an element of an extension of rationals of degree 4, is the square of
AlgebraicNumberNorm of

.
| Out[28]= |  |
| Out[28]= |  |
Functions of computing properties of algebraic number fields.
An integral basis of an algebraic number field

is a list of algebraic numbers forming a basis of the

-module of the algebraic integers of

. The set

is an integral basis of an algebraic number field

if and only if

are algebraic integers, and every algebraic integer

can be uniquely represented as
with integer coefficients

.
Here is an integral basis of

.
| Out[29]= |  |
This gives an integral basis of the field generated by the first root of

.
| Out[30]= |  |
| Out[31]= |  |
This gives the roots of unity in the field generated by
Root
.
| Out[32]= |  |
Here are all roots of unity in the field

.
| Out[33]= |  |

is a list of fundamental units of an algebraic number field

if and only if

are algebraic units, and every algebraic unit

can be uniquely represented as
with a root of unity

and integer exponents

.
Here is a set of fundamental units of the field generated by the third root of

.
| Out[34]= |  |
This gives a fundamental unit of the quadratic field

.
| Out[35]= |  |
This gives a set of representatives of classes of elements of norm 9 in the field generated by the first root of

.
| Out[36]= |  |
Here is a set of representatives of classes of elements of norm 2 in the field

.
| Out[37]= |  |
This shows that the polynomial

has 1 real root and 2 conjugate pairs of complex roots.
| Out[38]= |  |
This shows that the field

has 12 real embeddings and 6 conjugate pairs of complex embeddings.
| Out[39]= |  |
The discriminant of a number field

is the discriminant of an integral basis

of

(i.e. the determinant of the matrix with elements
AlgebraicNumberTrace[ai aj, Extension->Automatic]). The value of the determinant does not depend on the choice of integral basis.
Here is the discriminant of

.
| Out[40]= |  |
This gives the discriminant of the field generated by a root of the polynomial

. The value of the discriminant does not depend on the choice of the root; hence,
NumberFieldDiscriminant allows specifying just the polynomial.
| Out[41]= |  |
The regulator of a number field

is the lattice volume of the image of the group of units of

under the logarithmic embedding
where

, ...,

are the real embeddings of

in

, and

, ...,

are one of each conjugate pair of the complex embeddings of

in

.
Here is the regulator of

.
| Out[42]= |  |
This gives the regulator of the field generated by a root of the polynomial

. The value of the regulator does not depend on the choice of the root; hence,
NumberFieldRegulator allows specifying just the polynomial.
| Out[43]= |  |
This gives the class number of

| Out[44]= |  |