home *** CD-ROM | disk | FTP | other *** search
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%
- %A field.tex GAP documentation Martin Schoenert
- %%
- %A @(#)$Id: field.tex,v 3.10 1993/02/19 10:48:42 gap Exp $
- %%
- %Y Copyright 1990-1992, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany
- %%
- %% This file describes the operators and functions of finite field elements.
- %%
- %H $Log: field.tex,v $
- %H Revision 3.10 1993/02/19 10:48:42 gap
- %H adjustments in line length and spelling
- %H
- %H Revision 3.9 1993/02/15 09:49:57 felsch
- %H another example fixed
- %H
- %H Revision 3.8 1993/02/13 08:49:49 felsch
- %H error messages in examples fixed
- %H
- %H Revision 3.7 1993/02/12 17:19:25 felsch
- %H examples adjusted to line length 72
- %H
- %H Revision 3.6 1992/05/25 18:13:25 martin
- %H fixed a typo in "Field Homomorphisms"
- %H
- %H Revision 3.5 1992/04/06 15:19:57 martin
- %H fixed some more typos
- %H
- %H Revision 3.4 1992/03/25 15:37:32 martin
- %H added new sections for field homomorphisms
- %H
- %H Revision 3.3 1992/03/11 15:50:48 sam
- %H renamed chapter "Number Fields" to "Subfields of Cyclotomic Fields"
- %H
- %H Revision 3.2 1991/12/30 12:07:53 martin
- %H fixed a few incorrect references
- %H
- %H Revision 3.1 1991/12/30 11:45:29 martin
- %H changed incorrect reference to "CyclotomicField"
- %H
- %H Revision 3.0 1991/12/27 16:10:27 martin
- %H initial revision under RCS
- %H
- %%
- \Chapter{Fields}
-
- Fields are important algebraic domains. Mathematically a *field* is a
- commutative ring $F$ (see chapter "Rings"), such that every element
- except $0$ has a multiplicative inverse. Thus $F$ has two operations '+'
- and '\*' called addition and multiplication. $(F,+)$ must be an abelian
- group, whose identity is called $0_F$. $(F-\{0_F\},\*)$ must be an
- abelian group, whose identity element is called $1_F$.
-
- {\GAP} supports the field of rationals (see "Rationals"), subfields of
- cyclotomic fields (see "Subfields of Cyclotomic Fields"), and finite
- fields (see "Finite Fields").
-
- This chapter begins with sections that describe how to test whether a
- domain is a field (see "IsField"), how to find the smallest field and the
- default field in which a list of elements lies (see "Field" and
- "DefaultField"), and how to view a field over a subfield (see "Fields
- over Subfields").
-
- The next sections describes the operation applicable to field elements
- (see "Comparisons of Field Elements" and "Operations for Field
- Elements").
-
- The next sections describe the functions that are applicable to fields
- (see "GaloisGroup") and their elements (see "Conjugates", "Norm",
- "Trace", "CharPol", and "MinPol").
-
- The following sections describe homomorphisms of fields (see "Field
- Homomorphisms", "IsFieldHomomorphism", "KernelFieldHomomorphism",
- "Mapping Functions for Field Homomorphisms").
-
- The last section describes how fields are represented internally (see
- "Field Records").
-
- Fields are domains, so all functions that are applicable to all domains
- are also applicable to fields (see chapter "Domains").
-
- All functions for fields are in 'LIBNAME/\"field.g\"'.
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \Section{IsField}
-
- 'IsField( <D> )'
-
- 'IsField' returns 'true' if the object <D> is a field and 'false'
- otherwise.
-
- More precisely 'IsField' tests whether <D> is a field record (see "Field
- Records"). So, for example, a matrix group may in fact be a field, yet
- 'IsField' would return 'false'.
-
- | gap> IsField( GaloisField(16) );
- true
- gap> IsField( CyclotomicField(9) );
- true
- gap> IsField( rec( isDomain := true, isField := true ) );
- true # it is possible to fool 'IsField'
- gap> IsField( AsRing( Rationals ) );
- false # though this ring is, as a set, still 'Rationals' |
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \Section{Field}
-
- 'Field( <z>,.. )'
- 'Field( <list> )'
-
- In the first form 'Field' returns the smallest field that contains all
- the elements <z>,.. etc. In the second form 'Field' returns the smallest
- field that contains all the elements in the list <list>. If any element
- is not an element of a field or the elements lie in no common field an
- error is raised.
-
- | gap> Field( Z(4) );
- GF(2^2)
- gap> Field( E(9) );
- CF(9)
- gap> Field( [ Z(4), Z(9) ] );
- Error, CharFFE: <z> must be a finite field element, vector, or matrix
- gap> Field( [ E(4), E(9) ] );
- CF(36) |
-
- 'Field' differs from 'DefaultField' (see "DefaultField") in that it
- returns the smallest field in which the elements lie, while
- 'DefaultField' may return a larger field if that makes sense.
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \Section{DefaultField}
-
- 'DefaultField( <z>,.. )'
- 'DefaultField( <list> )'
-
- In the first form 'DefaultField' returns the default field that contains
- all the elements <z>,.. etc. In the second form 'DefaultField' returns
- the default field that contains all the elements in the list <list>. If
- any element is not an element of a field or the elements lie in no common
- field an error is raised.
-
- The field returned by 'DefaultField' need not be the smallest field in
- which the elements lie. For example for elements from cyclotomic fields
- 'DefaultField' may return the smallest cyclotomic field in which the
- elements lie, which need not be the smallest field overall, because the
- elements may in fact lie in a smaller number field which is not a
- cyclotomic field.
-
- For the exact definition of the default field of a certain type of
- elements read the chapter describing this type (see "Finite Fields" and
- "Subfields of Cyclotomic Fields").
-
- 'DefaultField' is used by 'Conjugates', 'Norm', 'Trace', 'CharPol', and
- 'MinPol' (see "Conjugates", "Norm", "Trace", "CharPol", and "MinPol") if
- no explicit field is given.
-
- | gap> DefaultField( Z(4) );
- GF(2^2)
- gap> DefaultField( E(9) );
- CF(9)
- gap> DefaultField( [ Z(4), Z(9) ] );
- Error, CharFFE: <z> must be a finite field element, vector, or matrix
- gap> DefaultField( [ E(4), E(9) ] );
- CF(36) |
-
- 'Field' (see "Field") differs from 'DefaultField' in that it returns the
- smallest field in which the elements lie, while 'DefaultField' may return
- a larger field if that makes sense.
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \Section{Fields over Subfields}
-
- '<F> / <G>'
-
- The quotient operator '/' evaluates to a new field <H>. This field has
- the same elements as <F>, i.e., is a domain equal to <F>. However <H> is
- viewed as a field over the field <G>, which must be a subfield of <F>.
-
- What subfield a field is viewed over determines its Galois group. As
- described in "GaloisGroup" the Galois group is the group of field
- automorphisms that leave the subfield fixed. It also influences the
- results of "Norm", "Trace", "CharPol", and "MinPol", because they are
- defined in terms of the Galois group.
-
- | gap> F := GF(2^12);
- GF(2^12)
- gap> G := GF(2^2);
- GF(2^2)
- gap> Q := F / G;
- GF(2^12)/GF(2^2)
- gap> Norm( F, Z(2^6) );
- Z(2)^0
- gap> Norm( Q, Z(2^6) );
- Z(2^2)^2 |
-
- The operator '/' calls '<G>.operations./( <F>, <G> )'.
-
- The default function called this way is 'FieldOps./', which simply makes
- a copy of <F> and enters <G> into the record component '<F>.field' (see
- "Field Records").
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \Section{Comparisons of Field Elements}
-
- '<f> = <g>' \\
- '<f> \<> <g>'
-
- The equality operator '=' evaluates to 'true' if the two field elements
- <f> and <g> are equal, and to 'false' otherwise. The inequality operator
- '\<>' evaluates to 'true' if the two field elements <f> and <g> are not
- equal, and to 'false' otherwise. Note that any two field elements can be
- compared, even if they do not lie in compatible fields. In this case
- they cn, of course, never be equal. For each type of fields the equality
- of those field elements is given in the respective chapter.
-
- Note that you can compare field elements with elements of other types; of
- course they are never equal.
-
- '<f> \<\ <g>' \\
- '<f> \<= <g>' \\
- '<f> > <g>' \\
- '<f> >= <g>'
-
- The operators '\<', '\<=', '>', and '>=' evaluate to 'true' if the field
- element <f> is less than, less than or equal to, greater than, or greater
- than or equal to the field element <g>. For each type of fields the
- definition of the ordering of those field elements is given in the
- respective chapter. The ordering of field elements is as follows.
- Rationals are smallest, next are cyclotomics, followed by finite field
- elements.
-
- Note that you can compare field elements with elements of other types;
- they are smaller than everything else.
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \Section{Operations for Field Elements}
-
- The following operations are always available for field elements. Of
- course the operands must lie in compatible fields, i.e., the fields must
- be equal, or at least have a common superfield.
-
- '<f> + <g>'
-
- The operator '+' evaluates to the sum of the two field elements <f> and
- <g>, which must lie in compatible fields.
-
- '<f> - <g>'
-
- The operator '-' evaluates to the difference of the two field elements
- <f> and <g>, which must lie in compatible fields.
-
- '<f> \*\ <g>'
-
- The operator '\*' evaluates to the product of the two field elements <f>
- and <g>, which must lie in compatible fields.
-
- '<f> / <g>'
-
- The operator '/' evaluates to the quotient of the two field elements <f>
- and <g>, which must lie in compatible fields. If the divisor is 0 an
- error is signalled.
-
- '<f> \^\ <n>'
-
- The operator '\^' evaluates to the <n>-th power of the field element <f>.
- If <n> is a positive integer then '<f>\^<n>' is '<f>\*<f>\*..\*<f>'
- (<n> factors). If <n> is a negative integer '<f>\^<n>' is defined as
- $1 / {<f>^{-<n>}}$. If 0 is raised to a negative power an error is
- signalled. Any field element, even 0, raised to the 0-th power yields 1.
-
- For the precedence of the operators see "Operations".
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \Section{GaloisGroup}
- \index{Galois group!of a field}
- \index{automorphism group!of a field}
-
- 'GaloisGroup( <F> )'
-
- 'GaloisGroup' returns the Galois group of the field <F> as a group (see
- "Groups") of field automorphisms (see "Field Homomorphisms").
-
- The Galois group of a field <F> over a subfield '<F>.field' is the group
- of automorphisms of <F> that leave the subfield '<F>.field' fixed. This
- group can be interpreted as a permutation group permuting the zeroes of
- the characteristic polynomial of a primitive element of <F>. The degree
- of this group is equal to the number of zeroes, i.e., to the dimension of
- <F> as a vector space over the subfield '<F>.field'. It operates
- transitively on those zeroes. The normal divisors of the Galois group
- correspond to the subfields between '<F>' and '<F>.field'.
-
- | gap> G := GaloisGroup( GF(4096)/GF(4) );;
- gap> Size( G );
- 6
- gap> IsCyclic( G );
- true # the Galois group of every finite field is
- # generated by the Frobenius automorphism
- gap> H := GaloisGroup( CF(60) );;
- gap> Size( H );
- 16
- gap> IsAbelian( H );
- true |
-
- The default function 'FieldOps.GaloisGroup' just raises an error, since
- there is no general method to compute the Galois group of a field. This
- default function is overlaid by more specific functions for special types
- of domains (see "Field Functions for Finite Fields" and "GaloisGroup for
- Number Fields").
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \Section{Conjugates}
- \index{Galois conjugates!of a field element}
- \index{conjugates!of a field element, Galois}
-
- 'Conjugates( <z> )' \\
- 'Conjugates( <F>, <z> )'
-
- In the first form 'Conjugates' returns the list of conjugates of the
- field element <z> in its default field over its prime field (see
- "DefaultField"). In the second form 'Conjugates' returns the list of
- conjugates of the field element <z> in the field <F> over the subfield
- '<F>.field'. In either case the list may contain duplicates if <z> lies
- in a proper subfield of its default field, respectively of <F>.
-
- The *conjugates* of an element $z$ in a field $F$ over a subfield $S$ of
- are the images of $z$ under the automorphisms in the Galois group of $F$
- over $S$ (see "GaloisGroup"), i.e., those automorphisms of $F$ that leave
- $S$ fixed. The number of different conjugates of $z$ is given by the
- degree of the smallest extension of $S$ in which $z$ lies.
-
- 'Norm' (see "Norm") computes the product, 'Trace' (see "Trace") the sum
- of all conjugates. 'CharPol' (see "CharPol") computes the polynomial
- that has precisely the conjugates with their corresponding multiplicities
- as roots, 'MinPol' (see "MinPol") the squarefree polynomial that has
- precisely the conjugates as roots.
-
- | gap> Conjugates( Z(2^6) );
- [ Z(2^6), Z(2^6)^2, Z(2^6)^4, Z(2^6)^8, Z(2^6)^16, Z(2^6)^32 ]
- gap> Conjugates( GF(2^12), Z(2^6) );
- [ Z(2^6), Z(2^6)^2, Z(2^6)^4, Z(2^6)^8, Z(2^6)^16, Z(2^6)^32, Z(2^6),
- Z(2^6)^2, Z(2^6)^4, Z(2^6)^8, Z(2^6)^16, Z(2^6)^32 ]
- gap> Conjugates( GF(2^12)/GF(2^2), Z(2^6) );
- [ Z(2^6), Z(2^6)^4, Z(2^6)^16, Z(2^6), Z(2^6)^4, Z(2^6)^16 ] |
-
- The default function 'FieldOps.Conjugates' applies the automorphisms of
- the Galois group of <F> (see "GaloisGroup") to <z> and returns the list
- of images. This is overlaid by more efficient functions for most fields.
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \Section{Norm}
- \index{norm!of a field element}
-
- 'Norm( <z> )' \\
- 'Norm( <F>, <z> )'
-
- In the first form 'Norm' returns the norm of the field element <z> in its
- default field over its prime field (see "DefaultField"). In the second
- form 'Norm' returns the norm of <z> in the field <F> over the subfield
- '<F>.field'.
-
- The *norm* of an element $z$ in a field $F$ over a subfield $S$ is the
- product of all conjugates of $z$ in $F$ over $S$ (see "Conjugates"). As
- the set of conjugates is fixed under the Galois group of $F$ over $S$
- (see "GaloisGroup"), so is the product. Thus the norm lies in $S$. The
- norm is $(-1)^{F.degree/S.degree}$ times the constant term of the
- characteristic polynomial of $z$ (see "CharPol").
-
- | gap> Norm( Z(2^6) );
- Z(2)^0
- gap> Norm( GF(2^12), Z(2^6) );
- Z(2)^0
- gap> Norm( GF(2^12)/GF(2^2), Z(2^6) );
- Z(2^2)^2 |
-
- The default function 'FieldOps.Norm' multiplies the conjugates of <z> in
- <F> (see "Conjugates"). This is seldom overlaid by more efficient
- functions for specific fields.
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \Section{Trace}
- \index{trace!of a field element}
-
- 'Trace( <z> )' \\
- 'Trace( <F>, <z> )'
-
- In the first form 'Trace' returns the trace of the field element <z> in
- its default field over its prime field (see "DefaultField"). In the
- second form 'Trace' returns the trace of the element <z> in the field <F>
- over the subfield '<F>.field'.
-
- The *trace* of an element $z$ in a field $F$ over a subfield $S$ is the
- sum over all conjugates of $z$ in $F$ over $S$ (see "Conjugates").
- Because the set of conjugates is fixed under the Galois group of $F$ over
- $S$ (see "GaloisGroup"), so is the sum. Thus the trace lies in $S$. The
- trace is the negative of the coefficient of the second highest degree
- term of the characteristic polynomial of $z$ (see "CharPol").
-
- | gap> Trace( Z(2^6) );
- 0*Z(2)
- gap> Trace( GF(2^12), Z(2^6) );
- 0*Z(2)
- gap> Trace( GF(2^12)/GF(2^2), Z(2^6) );
- 0*Z(2) |
-
- The default function 'FieldOps.Trace' adds the conjugates of <z> in <F>
- (see "Conjugates"). This is seldom overlaid by more efficient functions
- for specific fields.
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \Section{CharPol}
- \index{characteristic polynom!of a field element}
-
- 'CharPol( <z> )' \\
- 'CharPol( <F>, <z> )'
-
- In the first form 'CharPol' returns the characteristic polynomial of the
- element <z> in its default field over its prime field (see
- "DefaultField"). In the second form 'CharPol' returns the characteristic
- polynomial of the element <z> in the field <F> over the subfield
- '<F>.field'. The characteristic polynomial is returned as a list of
- coefficients, the <i>-th entry is the coefficient of $x^{i-1}$.
-
- The *characteristic polynomial* of an element $z$ in a field $F$ over a
- subfield $S$ is the product of the factors $x-c$, where $c$ ranges over
- all the conjugates of $z$ in $F$ over $S$ (see "Conjugates"). Therefore
- the characteristic polynomial of $z$ in $F$ over $S$ is the monic
- polynomial whose roots are precisely the conjugates of $z$ with the
- corresponding multiplicities. Because the set of conjugates is fixed
- under the Galois group of $F$ over $S$ (see "GaloisGroup"), so is the
- polynomial. Thus all the coefficients of the characteristic polynomial
- lie in $S$. The constant term is $(-1)^{F.degree/S.degree}$ times the
- norm of $z$ (see "Norm"), and the coefficient of the second highest
- degree term is the negative of the trace of $z$ (see "Trace"). The
- minimal polynomial of $z$ (see "MinPol") is the squarefree polynomial
- whose roots are precisely the conjugates of $z$.
-
- | gap> CharPol( Z(2^6) );
- [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ]
- gap> CharPol( GF(2^12), Z(2^6) );
- [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2),
- Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ]
- gap> CharPol( GF(2^12)/GF(2^2), Z(2^6) );
- [ Z(2^2)^2, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] |
-
- The default function 'FieldOps.CharPol' multiplies the binomials $x - c$
- with <c> ranging over the conjugates of <z> in <F> (see "Conjugates").
- This is seldom overlaid by more efficient functions for specific fields.
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \Section{MinPol}
- \index{minimal polynom!of a field element}
-
- 'MinPol( <z> )' \\
- 'MinPol( <F>, <z> )'
-
- In the first form 'MinPol' returns the minimal polynomial of the element
- <z> in its default field over its prime field (see "DefaultField"). In
- the second form 'MinPol' returns the minimal polynomial of the element
- <z> in the field <F> over the subfield '<F>.field'. The minimal
- polynomial is returned as a list of coefficients, the <i>-th entry is the
- coefficient of $x^{i-1}$.
-
- The *minimal polynomial* of an element $z$ in a field $F$ over a subfield
- $S$ is the product of the factors $x-c$, where $c$ ranges over the set of
- all conjugates of $z$ in $F$ over $S$ (see "Conjugates"). Therefore the
- minimal polynomial of $z$ in $F$ over $S$ is the squarefree polynomial
- whose roots are precisely the conjugates of $z$. Because the set of
- conjugates is fixed under the Galois group of $F$ over $S$ (see
- "GaloisGroup"), so is the polynomial. Thus all the coefficients of the
- minimal polynomial lie in $S$. The characteristic polynomial of $z$ (see
- "CharPol") is the polynomial whose roots are precisely the conjugates of
- $z$ with the corresponding multiplicities.
-
- | gap> MinPol( Z(2^6) );
- [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ]
- gap> MinPol( GF(2^12), Z(2^6) );
- [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ]
- gap> MinPol( GF(2^12)/GF(2^2), Z(2^6) );
- [ Z(2^2), Z(2)^0, Z(2)^0, Z(2)^0 ] |
-
- The default function 'FieldOps.MinPol' multiplies the binomials $x - c$
- with <c> ranging over the set of conjugates of <z> in <F> (see
- "Conjugates"). This is seldom overlaid by more efficient functions for
- specific fields.
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \Section{Field Homomorphisms}%
- \index{homomorphisms!of fields}
-
- Field homomorphisms are an important class of homomorphisms in {\GAP}
- (see chapter "Homomorphisms").
-
- A *field homomorphism* $\phi$ is a mapping that maps each element of a
- field $F$, called the source of $\phi$, to an element of another field
- $G$, called the range of $\phi$, such that for each pair $x,y \in F$ we
- have $(x+y)^\phi = x^\phi + y^\phi$ and $(xy)^\phi = x^\phi y^\phi$. We
- also require that $\phi$ maps the one of $F$ to the one of $G$ (that
- $\phi$ maps the zero of $F$ to the zero of $G$ is implied by the above
- relations).
-
- An Example of a field homomorphism is the Frobinius automorphism of a
- finite field (see "FrobeniusAutomorphism"). Look under *field
- homomorphisms* in the index for a list of all available field
- homomorphisms.
-
- Since field homomorphisms are just a special case of homomorphisms, all
- functions described in chapter "Homomorphisms" are applicable to all
- field homomorphisms, e.g., the function to test if a homomorphism is a an
- automorphism (see "IsAutomorphism"). More general, since field
- homomorphisms are just a special case of mappings all functions described
- in chapter "Mappings" are also applicable, e.g., the function to compute
- the image of an element under a field homomorphism (see "Image").
-
- The following sections describe the functions that test whether a mapping
- is a field homomorphism (see "IsFieldHomomorphism"), compute the kernel
- of a field homomorphism (see "KernelFieldHomomorphism"), and how the
- general mapping functions are implemented for field homomorphisms.
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \Section{IsFieldHomomorphism}%
- \index{IsHomomorphism!for fields}
-
- 'IsFieldHomomorphism( <map> )'
-
- 'IsFieldHomomorphism' returns 'true' if the mapping <map> is a field
- homomorphism and 'false' otherwise. Signals an error if <map> is a multi
- valued mapping.
-
- A mapping $map$ is a field homomorphism if its source $F$ and range $G$
- are both fields and if for each pair of elements $x, y \in F$ we have
- $(x+y)^{map} = x^{map} + y^{map}$ and $(xy)^{map} = x^{map} y^{map}$. We
- also require that $1_F^{map} = 1_G$.
-
- | gap> f := GF( 16 );
- GF(2^4)
- gap> fun := FrobeniusAutomorphism( f );
- FrobeniusAutomorphism( GF(2^4) )
- gap> IsFieldHomomorphism( fun );
- true |
-
- 'IsFieldHomomorphism' first tests if the flag '<map>.isFieldHomomorphism'
- is bound. If the flag is bound, 'IsFieldHomomorphism' returns its value.
- Otherwise it calls \\
- '<map>.source.operations.IsFieldHomomorphism( <map> )', remembers the
- returned value in '<map>.isFieldHomomorphism', and returns it. Note that
- of course all functions that create field homomorphism set the flag
- '<map>.isFieldHomomorphism' to 'true', so that no function is called for
- those field homomorphisms.
-
- The default function called this way is 'MappingOps.IsFieldHomomorphism'.
- It computes all the elements of the source of <map> and for each pair of
- elements $x, y$ tests whether $(x+y)^{map} = x^{map} + y^{map}$ and
- $(xy)^{map} = x^{map} y^{map}$. Look under *IsHomomorphism* in the index
- to see for which mappings this function is overlaid.
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \Section{KernelFieldHomomorphism}%
- \index{Kernel!for fields}
-
- 'KernelFieldHomomorphism( <hom> )'
-
- 'KernelFieldHomomorphism' returns the kernel of the field homomorphism
- <hom>.
-
- Because the kernel must be a ideal in the source and it can not be the
- full source (because we require that the one of the source is mapped to
- the one of the range), it must be the trivial ideal. Therefor the kernel
- of every field homomorphism is the set containing only the zero of the
- source.
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \Section{Mapping Functions for Field Homomorphisms}%
- \index{IsInjective!for field homomorphisms}%
- \index{IsSurjective!for field homomorphisms}%
- \index{equality!for field homomorphisms}%
- \index{Image!for field homomorphisms}%
- \index{Images!for field homomorphisms}%
- \index{PreImage!for field homomorphisms}%
- \index{PreImages!for field homomorphisms}
-
- This section describes how the mapping functions defined in chapter
- "Mappings" are implemented for field homomorphisms. Those functions not
- mentioned here are implemented by the default functions described in the
- respective sections.
-
- \vspace{5mm}
- 'IsInjective( <hom> )'
-
- Always returns 'true' (see "KernelFieldHomomorphism").
-
- \vspace{5mm}
- 'IsSurjective( <hom> )'
-
- The field homomorphism <hom> is surjective if the size of the image
- 'Size( Image( <hom> ) )' is equal to the size of the range 'Size(
- <hom>.range )'.
-
- \vspace{5mm}
- '<hom1> = <hom2>'
-
- The two field homomorphism <hom1> and <hom2> are are equal if the have
- the same source and range and if the images of the generators of the
- source under <hom1> and <hom2> are equal.
-
- \vspace{5mm}
- 'Image( <hom> )' \\
- 'Image( <hom>, <H> )' \\
- 'Images( <hom>, <H> )'
-
- The image of a subfield under a field homomorphism is computed by
- computing the images of a set of generators of the subfield, and the
- result is the subfield generated by those images.
-
- \vspace{5mm}
- 'PreImage( <hom> )' \\
- 'PreImage( <hom>, <H> )' \\
- 'PreImages( <hom>, <H> )'
-
- The preimages of a subfield under a field homomorphism are computed by
- computing the preimages of all the generators of the subfield, and the
- result is the subfield generated by those elements.
-
- Look in the index under *IsInjective*, *IsSurjective*, *equality*,
- *Image*, *Images*, *PreImage*, and *PreImages* to see for which field
- homomorphisms these functions are overlaid.
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \Section{Field Records}
-
- A field is represented by a record that contains important information
- about this field. The {\GAP} library predefines some field records, for
- example 'Rationals' (see "Rationals"). Field constructors construct
- others, for example 'Field' (see "Field"), and 'GaloisField' (see
- "GaloisField"). Of course you may also create such a record by hand.
-
- All field records contain the components 'isDomain', 'isField', 'char',
- 'degree', 'generators', 'zero', 'one', 'field', 'base', and 'dimension'.
- They may also contain the optional components 'isFinite', 'size',
- 'galoisGroup'. The contents of all components of a field <F> are
- described below.
-
- 'isDomain': \\
- is always 'true'. This indicates that <F> is a domain.
-
- 'isField': \\
- is always 'true'. This indicates that <F> is a field.
-
- 'char': \\
- is the characteristic of <F>. For finite fields this is always a
- prime, for infinite fields this is 0.
-
- 'degree': \\
- is the degree of <F> *as extension of the prime field*, not as
- extension of the subfield <S>. For finite fields the order of
- <F> is given by '<F>.char\^ <F>.degree'.
-
- 'generators': \\
- a list of elements that together generate <F>. That is <F> is
- the smallest field over the prime field given by '<F>.char' that
- contains the elements of '<F>.generators'.
-
- 'zero': \\
- is the additive neutral element of the finite field.
-
- 'one': \\
- is the multiplicative neutral element of the finite field.
-
- 'field': \\
- is the subfield <S> over which <F> was constructed. This is
- either a field record for <S>, or the same value as '<F>.char',
- denoting the prime field (see "Fields over Subfields").
-
- 'base': \\
- is a list of elements of <F> forming a base for <F> as vector
- space over the subfield <S>.
-
- 'dimension': \\
- is the dimension of <F> as vector space over the subfield <S>.
-
- 'isFinite': \\
- if present this is 'true' if the field <F> is finite and 'false'
- otherwise.
-
- 'size': \\
- if present this is the size of the field <F>. If <F> is infinite
- this holds the string \"infinity\".
-
- 'galoisGroup': \\
- if present this holds the Galois group of <F> (see
- "GaloisGroup").
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%
- %E Emacs . . . . . . . . . . . . . . . . . . . . . local Emacs variables
- %%
- %% Local Variables:
- %% mode: outline
- %% outline-regexp: "\\\\Chapter\\|\\\\Section"
- %% fill-column: 73
- %% eval: (hide-body)
- %% End:
- %%
-
-
-
-