[Up] [Previous] [Next] [Index]

# 2 Methods for number fields

### Sections

1. Creation of number fields
2. Methods for number fields
3. Presentations of multiplicative subgroups
4. Methods to compute with subgroups of the unit group
5. Factorisation of polynomials over a number field
6. Examples

An algebraic number field is a finite-dimensional extension of the rational numbers Q. Such a number field has a primitive element and it can be defined by the minimal polynomial of this primitive element. Another important way to define an algebraic number field is by a set of rational matrices which generate a number field.

## 2.1 Creation of number fields

We provide functions to create number fields defined by rational matrices or by rational polynomials.

- `FieldByMatricesNC(` matrices`)`
- `FieldByMatrices(` matrices`)`

  Creates a field generated by the rational matrices matrices. In the faster NC version, the function assumes that the input generates a field and there are no checks on this performed.

- `FieldByMatrixBasisNC(` matrices`)`
- `FieldByMatrixBasis(` matrices`)`

  Creates a field with basis matrices. The list matrices must consist of rational matrices which form a basis for a number field. In the faster NC version, the function assumes that the input is a matrix basis for a field and no checks are performed.

- `FieldByPolynomialNC(` polynomial`)`
- `FieldByPolynomial(` polynomial`)`

  Creates a field defined by polynomial. The polynomial polynomial must be an irreducible rational polynomial. In the faster NC version, no checks on the input are performed.

  ## 2.2 Methods for number fields

  We outline a number of functions for number fields.

- `PrimitiveElement(` F`)`
- `DefiningPolynomial(` F`)`

  Computes a primitive element and a defining polynomial for the given number field. The defining polynomial is the minimal polynomial of the primitive element. Since F contains various primitive elements, `PrimitiveElement` tries to find a primitive element which has a minimal polynomial with small coefficients. Via the global variable PRIM_TEST the user can decide how many primitive elements will be compared. The default value is 20.

- `IsPrimitiveElementOfNumberField(` F`,` a`)`

  Checks if the given element generates the field.

- `DegreeOverPrimeField(` F`)`

  Returns the degree of F over the rationals.

- `EquationOrderBasis(` F`)`
- `MaximalOrderBasis(` F`)`
- `IsIntegerOfNumberField(` F`,` k`)`

  These functions return bases for the equation order or the maximal order of the number field F. Also, they allow to check if a given element is an integer in the given number field.

- `UnitGroup(` F`)`

  determines the unit group of F.

  Recall that the unit group of F is a finitely generated abelian group. The function `IsomorphismPcpGroup` from the Polycyclic Polycyclic package gives an isomorphism to a pcp group which can be used for various computations with the unit group.

- `IsUnitOfNumberField(` F`,` k`)`

  checks whether the element k is a unit in F.

- `ExponentsOfUnits(` F`,` elms`)`

  This function determines the exponent vectors of the elements in elms with respect to the generators of the unit group of F. If the unit group of F is not known, then the function computes this unit group also.

- `IsCyclotomicField(` F`)`

  Check whether F is cyclotomic.

- `NormCosetsOfNumberField(` F`,` norm`)`

  Returns a description for the set of all elements of norm norm in F. These elements can be written as a finite union of cosets of the unit group of F. The function returns coset representatives for these cosets.

  ## 2.3 Presentations of multiplicative subgroups

  Suppose that a finite number of invertible elements of a number field are given. Then these elements generate a finitely generated abelian group. However, it is a non-trivial task to provide a presentation for this abelian group. The most useful representation for such groups is as pcp group.

- `PcpPresentationOfMultiplicativeSubgroup(` F`,` elms`)`
- `IsomorphismPcpGroup(` F`,` elms`)`

  Determine a pcp presentation for the multiplicative group of Fbackslash{0} generated by elms and an isomorphism on this presentation. Note, that the method `IsomorphismPcpGroup` is defined in the Polycyclic package Polycyclic. We refer to the manual of this package for further background.

  In the determination of the Pcp-presentation of a multiplicative subgroup generated by elms the relations between the elements in elms play an important role. Let elms={e1,...,el} be a finite subset of a field F. The relation lattice for elms is

  rl(elms):=left{(h1,...,hl) inZl | e1h_1 cdots elh_l = 1right} .

- `RelationLattice(` F`,` elms`)`

  Determines a generating set for the relation lattice of the field elements elms.

  ## 2.4 Methods to compute with subgroups of the unit group

- `RelationLatticeOfUnits(` F`,` elms`)`

  Determines a basis for the relation lattice of the units elms in triangularized form. Note that this method is more efficient than the method `RelationLattice`.

- `IntersectionOfUnitSubgroups(` F`,` gen1`,` gen2`)`

  The lists gen1 and gen2 are supposed to generate two subgroups U1 and U2 of the unit group of F. This function determines the intersection of U1 with U2. The result is returned as a list of vectors generating the lattice { e inZn midg1e_1 cdotsgne_n inU2 } for gen1 = [g1, ..., gn].

  For efficiency reasons this function does not check the input and it may return wrong results if the input generators do not fulfil the requirements.

  ## 2.5 Factorisation of polynomials over a number field

- `FactorsPolynomialAlgExt(` F`,` pol`)`

  embeds the rational polynomial pol into the polynomial ring over the number field F, which has to be constructed by `FieldByPolynomial` or `AlgebraicExtension`, and returns the factorization of the embedded polynomial. By default a denotes the primitive element of the field one can obtain from `PrimitiveElement(`F`)`, that is, a root of the defining polynomial of F.

- `FactorsPolynomialPari(` pol`)`

  takes a polynomial pol defined over an algebraic extension of the Rationals and factors it using PARI/GP.

      gap> x := Indeterminate( Rationals, "x" );;
      gap> pol := 2*x^7+2*x^5+8*x^4+8*x^2;
      2*x^7+2*x^5+8*x^4+8*x^2
      gap> L := FieldByPolynomial( x^3-4 );
      <algebraic extension over the Rationals of degree 3>
      gap> y := Indeterminate( L, "y" );;
      gap> FactorsPolynomialAlgExt( L, pol );
      [ !2*y, y, y+(a), y^2+!1, y^2+((-1*a))*y+(a^2) ]
      gap> FactorsPolynomialPari( last[5] );
      [ y^2+((-1*a))*y+(a^2) ]
      gap>

  ## 2.6 Examples

- `ExampleMatField(` l`)`

  This function returns some examples of fields generated by matrices. There are 9 such example fields provided and they can be obtained by assigning the input l to an integer between 1 and 9. Some of the properties of the examples are summarized in the following table.

                          degree over Q  number of generators  dim. of generators
      ExampleMatField(1)              4                     4                   4
      ExampleMatField(2)              4                     4                   4
      ExampleMatField(3)              4                     4                   4
      ExampleMatField(4)              4                    13                   4
      ExampleMatField(5)              4                    13                   4
      ExampleMatField(6)              4                     7                   4
      ExampleMatField(7)              4                    18                   4
      ExampleMatField(8)              4                    13                   4
      ExampleMatField(9)              4                     7                   4

  [Up] [Previous] [Next] [Index]