File: fields.tex

package info (click to toggle)
gap 4r4p4-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 25,972 kB
  • ctags: 6,672
  • sloc: ansic: 95,121; sh: 3,137; makefile: 219; perl: 11; awk: 6
file content (473 lines) | stat: -rw-r--r-- 14,790 bytes parent folder | download
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
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
% This file was created automatically from fields.msk.
% DO NOT EDIT!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%A  fields.msk                   GAP documentation              Thomas Breuer
%%
%A  @(#)$Id: fields.msk,v 1.17 2002/06/24 18:39:03 gap Exp $
%%
%Y  (C) 1998 School Math and Comp. Sci., University of St.  Andrews, Scotland
%Y  Copyright (C) 2002 The GAP Group
%%
\Chapter{Fields and Division Rings}

\index{fields}
\index{division rings}

A *division ring* is a ring (see Chapter~"Rings") in which every non-zero
element has an inverse.
The most important class of division rings are the commutative ones,
which are called *fields*.

{\GAP} supports finite fields (see Chapter~"Finite Fields") and
abelian number fields (see Chapter~"Abelian Number Fields"),
in particular the field of rationals (see Chapter~"Rational Numbers").

This chapter describes the general {\GAP} functions for fields and
division rings.

If a field <F> is a subfield of a commutative ring <C>,
<C> can be considered as a vector space over the (left) acting domain
<F> (see Chapter~"Vector Spaces").
In this situation, we call <F> the *field of definition* of <C>.

Each field in {\GAP} is represented as a vector space over a subfield
(see~"IsField"), thus each field is in fact a field extension in a
natural way, which is used by functions such as `Norm' and `Trace'
(see~"Galois Action").



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Generating Fields}

\>IsDivisionRing( <D> ) C

A *division ring* in {\GAP} is a nontrivial associative algebra <D>
with a multiplicative inverse for each nonzero element.
In {\GAP} every division ring is a vector space over a division ring
(possibly over itself).
Note that being a division ring is thus not a property that a ring can
get, because a ring is usually not represented as a vector space.

The field of coefficients is stored as `LeftActingDomain( <D> )'.


\>IsField( <D> ) P

A *field* is a commutative division ring
(see~"IsDivisionRing" and~"IsCommutative").



\beginexample
gap> IsField( GaloisField(16) );           # the field with 16 elements
true
gap> IsField( Rationals );                 # the field of rationals
true
gap> q:= QuaternionAlgebra( Rationals );;  # a noncommutative division ring
gap> IsField( q );  IsDivisionRing( q );
false
true
gap> mat:= [ [ 1 ] ];;  a:= Algebra( Rationals, [ mat ] );;
gap> IsDivisionRing( a );   # an algebra not constructed as a division ring
false
\endexample

\>Field( <z>, ... ) F
\>Field( <list> ) F
\>Field( <F>, <list> ) F

`Field' returns the smallest field $K$ that contains all the elements
$<z>, \ldots$,
or the smallest field $K$ that contains all elements in the list <list>.
If no subfield <F> is given, $K$ is constructed as a field over itself,
i.e. the left acting domain of $K$ is $K$.
In the third form, `Field' constructs the field generated by the
field <F> and the elements in the list <list>,
as a vector space over <F>.


\>DefaultField( <z>, ... ) F
\>DefaultField( <list> ) F

`DefaultField' returns a field $K$ that contains all the elements
$<z>, \ldots$,
or a field $K$ that contains all elements in the list <list>.

This field need not be the smallest field in which the elements lie,
cf.~`Field' (see~"Field").
For example, for elements from cyclotomic fields `DefaultField' returns
the smallest cyclotomic field in which the elements lie,
but the elements may lie in a smaller number field
which is not a cyclotomic field.



\beginexample
gap> Field( Z(4) );  Field( [ Z(4), Z(8) ] );  # finite fields
GF(2^2)
GF(2^6)
gap> Field( E(9) );  Field( CF(4), [ E(9) ] ); # abelian number fields
CF(9)
AsField( GaussianRationals, CF(36) )
gap> f1:= Field( EB(5) );  f2:= DefaultField( EB(5) );
NF(5,[ 1, 4 ])
CF(5)
gap> f1 = f2;  IsSubset( f2, f1 );
false
true
\endexample

\>DefaultFieldByGenerators( [ <z>, ... ] ) O

returns the default field containing the elements <z>,$\ldots$.
This field may be bigger than the smallest field containing these
elements.


\>GeneratorsOfDivisionRing( <D> ) A

generators with respect to addition, multiplication, and taking inverses
(the identity cannot be omitted ...)


\>GeneratorsOfField( <F> ) A

generators with respect to addition, multiplication, and taking
inverses. This attribute is the same as `GeneratorsOfDivisionRing'
(see~"GeneratorsOfDivisionRing").


\>DivisionRingByGenerators( [ <z>, ... ] ) O
\>DivisionRingByGenerators( <F>, [ <z>, ... ] ) O

The first version returns a division ring as vector space over
`FieldOverItselfByGenerators( <gens> )'.


\>AsDivisionRing( <C> ) O
\>AsDivisionRing( <F>, <C> ) O
\>AsField( <C> ) O
\>AsField( <F>, <C> ) O

If the collection <C> can be regarded as a division ring then
`AsDivisionRing( <C> )' is the division ring that consists of the
elements of <C>, viewed as a vector space over its prime field;
otherwise `fail' is returned.

In the second form, if <F> is a division ring contained in <C> then
the returned division ring is viewed as a vector space over <F>.

`AsField' is just a synonym for `AsDivisionRing'.




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Subfields of Fields}

\>Subfield( <F>, <gens> ) F
\>SubfieldNC( <F>, <gens> ) F

Constructs the subfield of <F> generated by <gens>.


\>FieldOverItselfByGenerators( [ <z>, ... ] ) O

This  operation is  needed for  the  call of `Field' or
`FieldByGenerators'
without  explicitly given subfield, in  order to construct  a left acting
domain for such a field.


\>PrimitiveElement( <D> ) A

is an element of <D> that generates <D> as a division ring together with
the left acting domain.


\>PrimeField( <D> ) A

The *prime field* of a division ring <D> is the smallest field which is
contained in <D>.
For example, the prime field of any field in characteristic zero
is isomorphic to the field of rational numbers.


\>IsPrimeField( <D> ) P

A division ring is a prime field if it is equal to its prime field
(see~"PrimeField").


\>DegreeOverPrimeField( <F> ) A

is the degree of the field <F> over its prime field (see~"PrimeField").


\>DefiningPolynomial( <F> ) A

is the defining polynomial of the field <F> as a field extension
over the left acting domain of <F>.
A root of the defining polynomial can be computed with
`RootOfDefiningPolynomial' (see~"RootOfDefiningPolynomial").


\>RootOfDefiningPolynomial( <F> ) A

is a root in the field <F> of its defining polynomial as a field
extension over the left acting domain of <F>.
The defining polynomial can be computed with
`DefiningPolynomial' (see~"DefiningPolynomial").


\>FieldExtension( <F>, <poly> ) O

is the field obtained on adjoining a root of the irreducible polynomial
<poly> to the field <F>.


\>Subfields( <F> ) A

is the set of all subfields of the field <F>.



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Galois Action}

Let $L > K$ be a field extension of finite degree.
Then to each element $\alpha \in L$, we can associate a $K$-linear
mapping $\varphi_{\alpha}$ on $L$, and for a fixed $K$-basis of $L$,
we can associate to $\alpha$ the matrix $M_{\alpha}$ (over $K$)
of this mapping.

The *norm* of $\alpha$ is defined as the determinant of $M_{\alpha}$,
the *trace* of $\alpha$ is defined as the trace of $M_{\alpha}$,
the *minimal polynomial* $\mu_{\alpha}$ and the
*trace polynomial* $\chi_{\alpha}$ of $\alpha$
are defined as the minimal polynomial (see~"MinimalPolynomial!over a field")
and the characteristic polynomial (see~"CharacteristicPolynomial" and
"TracePolynomial") of $M_{\alpha}$.
(Note that $\mu_{\alpha}$ depends only on $K$ whereas $\chi_{\alpha}$
depends on both $L$ and $K$.)

Thus norm and trace of $\alpha$ are elements of $K$,
and $\mu_{\alpha}$ and $\chi_{\alpha}$ are polynomials over $K$,
$\chi_{\alpha}$ being a power of $\mu_{\alpha}$,
and the degree of $\chi_{\alpha}$ equals the degree of the field
extension $L > K$.

The *conjugates* of $\alpha$ in $L$ are those roots of $\chi_{\alpha}$
(with multiplicity) that lie in $L$;
note that if only $L$ is given, there is in general no way to access
the roots outside $L$.

Analogously, the *Galois group* of the extension $L > K$ is defined as
the group of all those field automorphisms of $L$ that fix $K$
pointwise.

If $L > K$ is a Galois extension then the conjugates of $\alpha$ are
all roots of $\chi_{\alpha}$ (with multiplicity),
the set of conjugates equals the roots of $\mu_{\alpha}$,
the norm of $\alpha$ equals the product and the trace of $\alpha$
equals the sum of the conjugates of $\alpha$,
and the Galois group in the sense of the above definition equals
the usual Galois group,

Note that `MinimalPolynomial( <F>, <z> )' is a polynomial *over* <F>,
whereas `Norm( <F>, <z> )' is the norm of the element <z> *in* <F>
w.r.t.~the field extension $<F> > `LeftActingDomain( <F> )'$.



\indextt{IsFieldControlledByGaloisGroup}

\>GaloisGroup( <F> )!{of field} A

The *Galois group* of a field <F> is the group of all field automorphisms
of <F> that fix the subfield $K = `LeftActingDomain( <F> )'$ pointwise.

Note that the field extension $<F> > K$ need *not* be a Galois extension.



\beginexample
gap> g:= GaloisGroup( AsField( GF(2^2), GF(2^12) ) );;
gap> Size( g );  IsCyclic( g );
6
true
gap> h:= GaloisGroup( CF(60) );;
gap> Size( h );  IsAbelian( h );
16
true
\endexample

\>MinimalPolynomial( <F>, <z>[, <ind>] )!{over a field} O

returns the minimal polynomial of <z> over the field <F>.
This is a generator of the ideal in $<F>[x]$ of all polynomials
which vanish on <z>.
(This definition is consistent with the general definition of
`MinimalPolynomial' for rings, see~"MinimalPolynomial".)

\beginexample
gap> MinimalPolynomial( Rationals, E(8) );
x_1^4+1
gap> MinimalPolynomial( CF(4), E(8) );
x_1^2+-E(4)
gap> MinimalPolynomial( CF(8), E(8) );
x_1+-E(8)
\endexample

\>TracePolynomial( <L>, <K>, <z>[, <inum>] ) O

returns the polynomial that is the product of $(X - c)$ where $c$ runs
over the conjugates of <z> in the field extension <L> over <K>.
The polynomial is returned as a univariate polynomial over <K> in the
indeterminate number <inum> (defaulting to 1).

This polynomial is sometimes also called the *characteristic polynomial*
of <z> w.r.t.~the field extension $<L> > <K>$.
Therefore methods are installed for `CharacteristicPolynomial'
(see~"CharacteristicPolynomial")
that call `TracePolynomial' in the case of field extensions.



\index{characteristic polynomial!for field elements}

\beginexample
gap> TracePolynomial( CF(8), Rationals, E(8) );
x_1^4+1
gap> TracePolynomial( CF(16), Rationals, E(8) );
x_1^8+2*x_1^4+1
\endexample

\>Norm( <z> ) A
\>Norm( <L>, <z> ) O
\>Norm( <L>, <K>, <z> ) O

`Norm' returns the norm of the field element <z>.
If two fields <L> and <K> are given then the norm is computed
w.r.t.~the field extension $<L> > <K>$,
if only one field <L> is given then `LeftActingDomain( <L> )' is taken as
default for the subfield <K>,
and if no field is given then `DefaultField( <z> )' is taken as default
for <L>.


\>Trace( <z> )!{for field elements} A
\>Trace( <mat> )!{for field elements} A
\>Trace( <L>, <z> )!{for field elements} O
\>Trace( <L>, <K>, <z> )!{for field elements} O

`Trace' returns the trace of the field element <z>.
If two fields <L> and <K> are given then the trace is computed
w.r.t.~the field extension $<L> > <K>$,
if only one field <L> is given then `LeftActingDomain( <L> )' is taken as
default for the subfield <K>,
and if no field is given then `DefaultField( <z> )' is taken as default
for <L>.

The *trace of a matrix* is the sum of its diagonal entries.
Note that this is *not* compatible with the definition of `Trace' for
field elements,
so the one-argument version is not suitable when matrices shall be
regarded as field elements.


\>Conjugates( <z> ) A
\>Conjugates( <L>, <z> ) O
\>Conjugates( <L>, <K>, <z> ) O

`Conjugates' returns the list of *conjugates* of the field element <z>.
If two fields <L> and <K> are given then the conjugates are computed
w.r.t.~the field extension $<L> > <K>$,
if only one field <L> is given then `LeftActingDomain( <L> )' is taken as
default for the subfield <K>,
and if no field is given then `DefaultField( <z> )' is taken as default
for <L>.

The result list will contain duplicates if <z> lies in a proper subfield
of <L>, respectively of the default field of <z>.
The result list need not be sorted.



\beginexample
gap> Norm( E(8) );  Norm( CF(8), E(8) );
1
1
gap> Norm( CF(8), CF(4), E(8) );
-E(4)
gap> Norm( AsField( CF(4), CF(8) ), E(8) );
-E(4)
gap> Trace( E(8) );  Trace( CF(8), CF(8), E(8) );
0
E(8)
gap> Conjugates( CF(8), E(8) );
[ E(8), E(8)^3, -E(8), -E(8)^3 ]
gap> Conjugates( CF(8), CF(4), E(8) );
[ E(8), -E(8) ]
gap> Conjugates( CF(16), E(8) );
[ E(8), E(8)^3, -E(8), -E(8)^3, E(8), E(8)^3, -E(8), -E(8)^3 ]
\endexample

The default methods for field elements are as follows.
`MinimalPolynomial' solves a system of linear equations,
`TracePolynomial' computes the appropriate power of the minimal
polynomial,
`Norm' and `Trace' values are obtained as coefficients of the
characteristic polynomial,
and `Conjugates' uses the factorization of the characteristic polynomial.

For elements in finite fields and cyclotomic fields, one wants to do the
computations in a different way since the field extensions in question
are Galois extensions, and the Galois groups are well-known in these
cases.
More general,
if a field is in the category `IsFieldControlledByGaloisGroup' then
the default methods are the following.
`Conjugates' returns the sorted list of images (with multiplicity) of the
element under the Galois group,
`Norm' computes the product of the conjugates,
`Trace' computes the sum of the conjugates,
`TracePolynomial' and `MinimalPolynomial' compute the product of
linear factors $x - c$ with $c$ ranging over the conjugates and the set
of conjugates, respectively.



\>NormalBase( <F> ) A
\>NormalBase( <F>, <elm> ) O

Let <F> be a field that is a Galois extension of its subfield
`LeftActingDomain( <F> )'.
Then `NormalBase' returns a list of elements in <F> that form a normal
basis of <F>, that is, a vector space basis that is closed under the
action of the Galois group (see~"GaloisGroup!of field") of <F>.

If a second argument <elm> is given,
it is used as a hint for the algorithm to find a normal basis with the
algorithm described in~\cite{Art68}.



\beginexample
gap> NormalBase( CF(5) );
[ -E(5), -E(5)^2, -E(5)^3, -E(5)^4 ]
gap> NormalBase( CF(4) );
[ 1/2-1/2*E(4), 1/2+1/2*E(4) ]
\endexample


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\Section{Field Homomorphisms}
%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%E