File: fields.tex

package info (click to toggle)
gap-alnuth 3.2.1-2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,000 kB
  • sloc: makefile: 117; sh: 13
file content (215 lines) | stat: -rw-r--r-- 8,000 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215

\Chapter{Methods for number fields}

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.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{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.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{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}
\cite{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.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{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
$<F>\backslash\{0\}$ generated by
<elms> and an isomorphism on this presentation. 
Note, that the method `IsomorphismPcpGroup' is defined in the
{\Polycyclic} package \cite{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=\{e_1,\dots,e_l\}$ be a finite subset of a field <F>.
The relation lattice for <elms> is 
$$
rl(elms):=\left\{(h_1,\dots,h_l) \in \Z^l | e_1^{h_1} \cdots
e_l^{h_l} = 1\right\} .
$$

\> RelationLattice( <F>, <elms> )

Determines a generating set 
for the relation lattice of the field elements <elms>.
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{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 
$U_1$ and $U_2$ of the unit group of <F>. This function determines 
the intersection of $U_1$ with $U_2$. The result is returned as a 
list of vectors generating the lattice $\{ e \in \Z^n \mid g_1^{e_1} 
\cdots g_n^{e_n} \in U_2 \}$ for <gen1> = $[g_1, \ldots, g_n]$.

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.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{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.

\beginexample
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>
\endexample

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{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.

\beginexample
                    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
\endexample