Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 5e1854624d3bc613bdd0dd13d1ef9ac7 > files > 700

gap-system-4.4.12-5mdv2010.0.i586.rpm

<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&gt; x := Indeterminate( Rationals, "x" );;
gap&gt; 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&gt; L := FieldByPolynomial( x^3-4 );
&lt;algebraic extension over the Rationals of degree 3&gt;
gap&gt; y := Indeterminate( L, "y" );;
gap&gt; 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>