Goto Chapter: Top 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 Bib Ind

A *division ring* is a ring (see Chapter?56) 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?59) and abelian number fields (see Chapter?60), in particular the field of rationals (see Chapter?17).

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?61). 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`

(58.1-2)), thus each field is in fact a field extension in a natural way, which is used by functions such as `Norm`

(58.3-4) and `Trace`

(58.3-5) (see?58.3).

`‣ IsDivisionRing` ( D ) | ( category ) |

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 the value of the attribute `LeftActingDomain`

(57.1-11) of `D`.

`‣ IsField` ( D ) | ( filter ) |

A *field* is a commutative division ring (see?`IsDivisionRing`

(58.1-1) and?`IsCommutative`

(35.4-9)).

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

`‣ Field` ( z, ... ) | ( function ) |

`‣ Field` ( [F, ]list ) | ( function ) |

`Field`

returns the smallest field K that contains all the elements `z`, ..., 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. Called with a field `F` and a list `list`, `Field`

constructs the field generated by `F` and the elements in `list`, as a vector space over `F`.

`‣ DefaultField` ( z, ... ) | ( function ) |

`‣ DefaultField` ( list ) | ( function ) |

`DefaultField`

returns a field K that contains all the elements `z`, ..., 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`

(58.1-3). 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.

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

`‣ DefaultFieldByGenerators` ( [z, ...] ) | ( operation ) |

returns the default field containing the elements `z`, .... This field may be bigger than the smallest field containing these elements.

`‣ GeneratorsOfDivisionRing` ( D ) | ( attribute ) |

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

`‣ GeneratorsOfField` ( F ) | ( attribute ) |

generators with respect to addition, multiplication, and taking inverses. This attribute is the same as `GeneratorsOfDivisionRing`

(58.1-6).

`‣ DivisionRingByGenerators` ( [F, ]gens ) | ( operation ) |

`‣ FieldByGenerators` ( [F, ]gens ) | ( operation ) |

Called with a field `F` and a list `gens` of scalars, `DivisionRingByGenerators`

returns the division ring over `F` generated by `gens`. The unary version returns the division ring as vector space over `FieldOverItselfByGenerators( `

.`gens` )

`FieldByGenerators`

is just a synonym for `DivisionRingByGenerators`

.

`‣ AsDivisionRing` ( [F, ]C ) | ( operation ) |

`‣ AsField` ( [F, ]C ) | ( operation ) |

If the collection `C` can be regarded as a division ring then `AsDivisionRing( `

is the division ring that consists of the elements of `C` )`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`

.

`‣ Subfield` ( F, gens ) | ( function ) |

`‣ SubfieldNC` ( F, gens ) | ( function ) |

Constructs the subfield of `F` generated by `gens`.

`‣ FieldOverItselfByGenerators` ( [z, ...] ) | ( operation ) |

This operation is needed for the call of `Field`

(58.1-3) or `FieldByGenerators`

(58.1-8) without explicitly given subfield, in order to construct a left acting domain for such a field.

`‣ PrimitiveElement` ( D ) | ( attribute ) |

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

`‣ PrimeField` ( D ) | ( attribute ) |

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 ) | ( property ) |

A division ring is a prime field if it is equal to its prime field (see?`PrimeField`

(58.2-4)).

`‣ DegreeOverPrimeField` ( F ) | ( attribute ) |

is the degree of the field `F` over its prime field (see?`PrimeField`

(58.2-4)).

`‣ DefiningPolynomial` ( F ) | ( attribute ) |

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`

(58.2-8).

`‣ RootOfDefiningPolynomial` ( F ) | ( attribute ) |

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`

(58.2-7).

`‣ FieldExtension` ( F, poly ) | ( operation ) |

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

`‣ Subfields` ( F ) | ( attribute ) |

is the set of all subfields of the field `F`.

Let L > K be a field extension of finite degree. Then to each element α ∈ L, we can associate a K-linear mapping φ_α on L, and for a fixed K-basis of L, we can associate to α the matrix M_α (over K) of this mapping.

The *norm* of α is defined as the determinant of M_α, the *trace* of α is defined as the trace of M_α, the *minimal polynomial* μ_α and the *trace polynomial* χ_α of α are defined as the minimal polynomial (see?58.3-2) and the characteristic polynomial (see?`CharacteristicPolynomial`

(24.13-1) and `TracePolynomial`

(58.3-3)) of M_α. (Note that μ_α depends only on K whereas χ_α depends on both L and K.)

Thus norm and trace of α are elements of K, and μ_α and χ_α are polynomials over K, χ_α being a power of μ_α, and the degree of χ_α equals the degree of the field extension L > K.

The *conjugates* of α in L are those roots of χ_α (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 α are all roots of χ_α (with multiplicity), the set of conjugates equals the roots of μ_α, the norm of α equals the product and the trace of α equals the sum of the conjugates of α, and the Galois group in the sense of the above definition equals the usual Galois group,

Note that `MinimalPolynomial( `

is a polynomial `F`, `z` )*over* `F`, whereas `Norm( `

is the norm of the element `F`, `z` )`z` *in* `F` w.r.t.?the field extension

.`F` > LeftActingDomain( `F` )

The default methods for field elements are as follows. `MinimalPolynomial`

(66.8-1) solves a system of linear equations, `TracePolynomial`

(58.3-3) computes the appropriate power of the minimal polynomial, `Norm`

(58.3-4) and `Trace`

(58.3-5) values are obtained as coefficients of the characteristic polynomial, and `Conjugates`

(58.3-6) 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`

(58.3-6) returns the sorted list of images (with multiplicity) of the element under the Galois group, `Norm`

(58.3-4) computes the product of the conjugates, `Trace`

(58.3-5) computes the sum of the conjugates, `TracePolynomial`

(58.3-3) and `MinimalPolynomial`

(66.8-1) compute the product of linear factors x - c with c ranging over the conjugates and the set of conjugates, respectively.

`‣ GaloisGroup` ( F ) | ( attribute ) |

The *Galois group* of a field `F` is the group of all field automorphisms of `F` that fix the subfield K =`LeftActingDomain( `

pointwise.`F` )

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

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

`‣ MinimalPolynomial` ( F, z[, ind] ) | ( operation ) |

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`

(66.8-1) for rings.)

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))

`‣ TracePolynomial` ( L, K, z[, inum] ) | ( operation ) |

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`

(24.13-1) that call `TracePolynomial`

in the case of field extensions.

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

`‣ Norm` ( [L[, K, ]]z ) | ( attribute ) |

`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( `

is taken as default for the subfield `L` )`K`, and if no field is given then `DefaultField( `

is taken as default for `z` )`L`.

`‣ Trace` ( [L[, K, ]]z ) | ( attribute ) |

`‣ Trace` ( mat ) | ( attribute ) |

`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( `

is taken as default for the subfield `L` )`K`, and if no field is given then `DefaultField( `

is taken as default for `z` )`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` ( [L[, K, ]]z ) | ( attribute ) |

`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( `

is taken as default for the subfield `L` )`K`, and if no field is given then `DefaultField( `

is taken as default for `z` )`L`.

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

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 ]

`‣ NormalBase` ( F[, elm] ) | ( attribute ) |

Let `F` be a field that is a Galois extension of its subfield `LeftActingDomain( `

. Then `F` )`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`

(58.3-1)) 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?[Art73].

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) ] gap> NormalBase( GF(3^6) ); [ Z(3^6)^2, Z(3^6)^6, Z(3^6)^18, Z(3^6)^54, Z(3^6)^162, Z(3^6)^486 ] gap> NormalBase( GF( GF(8), 2 ) ); [ Z(2^6), Z(2^6)^8 ]

Goto Chapter: Top 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 Bib Ind

generated by GAPDoc2HTML

王中王中特免费公开资料选料