<html><head><title>[ALNUTH] 2 Methods for number fields</title></head> <body text="#000000" bgcolor="#ffffff"> [<a href = "chapters.htm">Up</a>] [<a href ="CHAP001.htm">Previous</a>] [<a href ="CHAP003.htm">Next</a>] [<a href = "theindex.htm">Index</a>] <h1>2 Methods for number fields</h1><p> <P> <H3>Sections</H3> <oL> <li> <A HREF="CHAP002.htm#SECT001">Creation of number fields</a> <li> <A HREF="CHAP002.htm#SECT002">Methods for number fields</a> <li> <A HREF="CHAP002.htm#SECT003">Presentations of multiplicative subgroups</a> <li> <A HREF="CHAP002.htm#SECT004">Methods to compute with subgroups of the unit group</a> <li> <A HREF="CHAP002.htm#SECT005">Factorisation of polynomials over a number field</a> <li> <A HREF="CHAP002.htm#SECT006">Examples</a> </ol><p> <p> An algebraic number field is a finite-dimensional extension of the rational numbers <var><font face="helvetica,arial">Q</font></var>. 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. <p> <p> <h2><a name="SECT001">2.1 Creation of number fields</a></h2> <p><p> We provide functions to create number fields defined by rational matrices or by rational polynomials. <p> <a name = "SSEC001.1"></a> <li><code>FieldByMatricesNC( </code><var>matrices</var><code> )</code> <a name = "SSEC001.1"></a> <li><code>FieldByMatrices( </code><var>matrices</var><code> )</code> <p> Creates a field generated by the rational matrices <var>matrices</var>. In the faster NC version, the function assumes that the input generates a field and there are no checks on this performed. <p> <a name = "SSEC001.2"></a> <li><code>FieldByMatrixBasisNC( </code><var>matrices</var><code> )</code> <a name = "SSEC001.2"></a> <li><code>FieldByMatrixBasis( </code><var>matrices</var><code> )</code> <p> Creates a field with basis <var>matrices</var>. The list <var>matrices</var> 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. <p> <a name = "SSEC001.3"></a> <li><code>FieldByPolynomialNC( </code><var>polynomial</var><code> )</code> <a name = "SSEC001.3"></a> <li><code>FieldByPolynomial( </code><var>polynomial</var><code> )</code> <p> Creates a field defined by <var>polynomial</var>. The polynomial <var>polynomial</var> must be an irreducible rational polynomial. In the faster NC version, no checks on the input are performed. <p> <p> <h2><a name="SECT002">2.2 Methods for number fields</a></h2> <p><p> We outline a number of functions for number fields. <p> <a name = "SSEC002.1"></a> <li><code>PrimitiveElement( </code><var>F</var><code> )</code> <a name = "SSEC002.1"></a> <li><code>DefiningPolynomial( </code><var>F</var><code> )</code> <p> 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 <var>F</var> contains various primitive elements, <code>PrimitiveElement</code> tries to find a primitive element which has a minimal polynomial with small coefficients. Via the global variable <var>PRIM_TEST</var> the user can decide how many primitive elements will be compared. The default value is 20. <p> <a name = "SSEC002.2"></a> <li><code>IsPrimitiveElement( </code><var>F</var><code>, </code><var>a</var><code> )</code> <p> Checks if the given element generates the field. <p> <a name = "SSEC002.3"></a> <li><code>DegreeOverPrimeField( </code><var>F</var><code> )</code> <p> Returns the degree of <var>F</var> over the rationals. <p> <a name = "SSEC002.4"></a> <li><code>EquationOrderBasis( </code><var>F</var><code> )</code> <a name = "SSEC002.4"></a> <li><code>MaximalOrderBasis( </code><var>F</var><code> )</code> <a name = "SSEC002.4"></a> <li><code>IsIntegerOfNumberField( </code><var>F</var><code>, </code><var>k</var><code> )</code> <p> These functions return bases for the equation order or the maximal order of the number field <var>F</var>. Also, they allow to check if a given element is an integer in the given number field. <p> <a name = "SSEC002.5"></a> <li><code>UnitGroup( </code><var>F</var><code> )</code> <li><code>IsomorphismPcpGroup( </code><var>U</var><code> )</code> <a name = "SSEC002.5"></a> <li><code>IsUnitOfNumberField( </code><var>F</var><code>, </code><var>k</var><code> )</code> <p> These functions determine the unit group of <var>F</var> and an isomorphism to a pcp group. (Recall that the unit group of <var>F</var> is a finitely generated abelian group.) The isomorphism can be used for various computations with the unit group. Also, the last function allows to check whether a given element is a unit in <var>F</var>. <p> <a name = "SSEC002.6"></a> <li><code>ExponentsOfUnits( </code><var>F</var><code>, </code><var>elms</var><code> )</code> <p> This function determines the exponent vectors of the elements in <var>elms</var> with respect to the generators of the unit group of <var>F</var>. If the unit group of <var>F</var> is not known, then the function computes this unit group also. <p> <a name = "SSEC002.7"></a> <li><code>IsCyclotomicField( </code><var>F</var><code> )</code> <p> Check whether <var>F</var> is cyclotomic. <p> <a name = "SSEC002.8"></a> <li><code>NormCosetsOfNumberField( </code><var>F</var><code>, </code><var>norm</var><code> )</code> <p> Returns a description for the set of all elements of norm <var>norm</var> in <var>F</var>. These elements can be written as a finite union of cosets of the unit group of <var>F</var>. The function returns coset representatives for these cosets. <p> <p> <h2><a name="SECT003">2.3 Presentations of multiplicative subgroups</a></h2> <p>labelsection_present <p> 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. <p> <a name = "SSEC003.1"></a> <li><code>PcpPresentationOfMultiplicativeSubgroup( </code><var>F</var><code>, </code><var>elms</var><code> )</code> <a name = "SSEC003.1"></a> <li><code>IsomorphismPcpGroup( </code><var>F</var><code>, </code><var>elms</var><code> )</code> <p> Determine a pcp presentation for the multiplicative group of <var><var>F</var>backslash{0}</var> generated by <var>elms</var> and an isomorphism on this presentation. Note, that the method <code>IsomorphismPcpGroup</code> is defined in the Polycyclic package <a href="biblio.htm#Polycyclic"><cite>Polycyclic</cite></a>. We refer to the manual of this package for further background. <p> <a name = "SSEC003.2"></a> <li><code>Kernel( </code><var>map</var><code> )</code> <a name = "SSEC003.2"></a> <li><code>ImagesSet( </code><var>map</var><code>, </code><var>fieldelms</var><code> )</code> <a name = "SSEC003.2"></a> <li><code>ImageElm( </code><var>map</var><code>, </code><var>fieldelm</var><code> )</code> <a name = "SSEC003.2"></a> <li><code>PreImagesRepresentative( </code><var>map</var><code>, </code><var>pcpelm</var><code> )</code> <p> These functions can be used to compute with an isomorphism to a pcp presented image. If <var>fieldelm</var> is not contained in the source of <var>map</var>, then the function <code>ImageElm</code> returns fail. <p> In the determination of the Pcp-presentation of a multiplicative subgroup generated by <var>elms</var> the relations between the elements in <var>elms</var> play an important role. Let <var>elms={e<sub>1</sub>,...,e<sub>l</sub>}</var> be a finite subset of a field <var>F</var>. The relation lattice for <var>elms</var> is <p><var> rl(elms):=left{(h<sub>1</sub>,...,h<sub>l</sub>) in<font face="helvetica,arial">Z</font><sup>l</sup> | e<sub>1</sub><sup>h_1</sup> cdots e<sub>l</sub><sup>h_l</sup> = 1right} . <p></var> <p> <a name = "SSEC003.3"></a> <li><code>RelationLattice( </code><var>F</var><code>, </code><var>elms</var><code> )</code> <p> Determines a generating set for the relation lattice of the field elements <var>elms</var>. <p> <p> <h2><a name="SECT004">2.4 Methods to compute with subgroups of the unit group</a></h2> <p><p> <a name = "SSEC004.1"></a> <li><code>RelationLatticeOfUnits( </code><var>F</var><code>, </code><var>elms</var><code> )</code> <p> Determines a basis for the relation lattice of the units <var>elms</var> in triangularized form. Note that this method is more efficient than the method <code>RelationLattice</code>. <p> <a name = "SSEC004.2"></a> <li><code>IntersectionOfUnitSubgroups( </code><var>F</var><code>, </code><var>gen1</var><code>, </code><var>gen2</var><code> )</code> <p> The lists <var>gen1</var> and <var>gen2</var> are supposed to generate two subgroups <var>U<sub>1</sub></var> and <var>U<sub>2</sub></var> of the unit group of <var>F</var>. This function determines the intersection of <var>U<sub>1</sub></var> with <var>U<sub>2</sub></var>. The result is returned as a list of vectors generating the lattice <var>{ e in<font face="helvetica,arial">Z</font><sup>n</sup> midg<sub>1</sub><sup>e_1</sup> cdotsg<sub>n</sub><sup>e_n</sup> inU<sub>2</sub> }</var> for <var>gen1</var> = <var>[g<sub>1</sub>, ..., g<sub>n</sub>]</var>. <p> This function does not check the input for efficiency reasons and it may return wrong results if the input generators do not fulfil the requirements. <p> <p> <h2><a name="SECT005">2.5 Factorisation of polynomials over a number field</a></h2> <p><p> <a name = "SSEC005.1"></a> <li><code>FactorsPolynomialKant( </code><var>F</var><code>, </code><var>pol</var><code> )</code> <p> embeds the rational polynomial <var>pol</var> into the polynomial ring over the number field <var>F</var>, which has to be constructed by <code>FieldByPolynomial</code> or <code>AlgebraicExtension</code>, and returns the factorization of the embedded polynomial. By default <var>a</var> denotes the primitive element of the field one can obtain from <code>PrimitiveElement(</code><var>F</var><code>)</code>, i. e. a root of the defining polynomial of <var>F</var>. <p> <pre> 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> FactorsPolynomialKant( L, pol ); [ !2*y, y, y+(a), y^2+!1, y^2+((-1*a))*y+(a^2) ] </pre> <p> <p> <h2><a name="SECT006">2.6 Examples</a></h2> <p><p> <a name = "SSEC006.1"></a> <li><code>ExampleMatField( </code><var>l</var><code> )</code> <p> 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 <var>l</var> to an integer between 1 and 9. Some of the properties of the examples are summarized in the following table. <p> <pre> 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 </pre> <p> <p> [<a href = "chapters.htm">Up</a>] [<a href ="CHAP001.htm">Previous</a>] [<a href ="CHAP003.htm">Next</a>] [<a href = "theindex.htm">Index</a>] <P> <address>ALNUTH manual<br>November 2006 </address></body></html>