home *** CD-ROM | disk | FTP | other *** search
/ Math Solutions 1995 October / Math_Solutions_CD-ROM_Walnut_Creek_October_1995.iso / pc / mac / discrete / doc / field.tex < prev    next >
Encoding:
Text File  |  1993-05-05  |  27.9 KB  |  707 lines

  1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2. %%
  3. %A  field.tex                   GAP documentation            Martin Schoenert
  4. %%
  5. %A  @(#)$Id: field.tex,v 3.10 1993/02/19 10:48:42 gap Exp $
  6. %%
  7. %Y  Copyright 1990-1992,  Lehrstuhl D fuer Mathematik,  RWTH Aachen,  Germany
  8. %%
  9. %%  This file describes the operators and functions of finite field elements.
  10. %%
  11. %H  $Log: field.tex,v $
  12. %H  Revision 3.10  1993/02/19  10:48:42  gap
  13. %H  adjustments in line length and spelling
  14. %H
  15. %H  Revision 3.9  1993/02/15  09:49:57  felsch
  16. %H  another example fixed
  17. %H
  18. %H  Revision 3.8  1993/02/13  08:49:49  felsch
  19. %H  error messages in examples fixed
  20. %H
  21. %H  Revision 3.7  1993/02/12  17:19:25  felsch
  22. %H  examples adjusted to line length 72
  23. %H
  24. %H  Revision 3.6  1992/05/25  18:13:25  martin
  25. %H  fixed a typo in "Field Homomorphisms"
  26. %H
  27. %H  Revision 3.5  1992/04/06  15:19:57  martin
  28. %H  fixed some more typos
  29. %H
  30. %H  Revision 3.4  1992/03/25  15:37:32  martin
  31. %H  added new sections for field homomorphisms
  32. %H
  33. %H  Revision 3.3  1992/03/11  15:50:48  sam
  34. %H  renamed chapter "Number Fields" to "Subfields of Cyclotomic Fields"
  35. %H
  36. %H  Revision 3.2  1991/12/30  12:07:53  martin
  37. %H  fixed a few incorrect references
  38. %H
  39. %H  Revision 3.1  1991/12/30  11:45:29  martin
  40. %H  changed incorrect reference to "CyclotomicField"
  41. %H
  42. %H  Revision 3.0  1991/12/27  16:10:27  martin
  43. %H  initial revision under RCS
  44. %H
  45. %%
  46. \Chapter{Fields}
  47.  
  48. Fields  are important algebraic  domains.  Mathematically a *field*  is a
  49. commutative  ring  $F$  (see  chapter  "Rings"), such that  every element
  50. except $0$ has a multiplicative inverse.  Thus $F$ has two operations '+'
  51. and '\*' called addition  and multiplication.  $(F,+)$ must be an abelian
  52. group,  whose identity  is called  $0_F$.   $(F-\{0_F\},\*)$  must  be an
  53. abelian group, whose identity element is called $1_F$.
  54.  
  55. {\GAP} supports  the field  of rationals (see "Rationals"),  subfields of
  56. cyclotomic  fields  (see  "Subfields of Cyclotomic Fields"),  and  finite
  57. fields (see "Finite Fields").
  58.  
  59. This chapter begins with sections  that describe how  to  test whether  a
  60. domain is a field (see "IsField"), how to find the smallest field and the
  61. default  field  in  which  a  list  of  elements lies  (see  "Field"  and
  62. "DefaultField"),  and how  to view a field  over  a subfield (see "Fields
  63. over Subfields").
  64.  
  65. The next sections describes  the operation applicable  to field  elements
  66. (see  "Comparisons  of  Field  Elements"   and   "Operations  for   Field
  67. Elements").
  68.  
  69. The next sections  describe the  functions that are applicable  to fields
  70. (see   "GaloisGroup")  and their   elements  (see   "Conjugates", "Norm",
  71. "Trace", "CharPol",  and  "MinPol").
  72.  
  73. The  following  sections  describe  homomorphisms  of fields  (see "Field
  74. Homomorphisms",     "IsFieldHomomorphism",     "KernelFieldHomomorphism",
  75. "Mapping Functions for Field Homomorphisms").
  76.  
  77. The  last  section  describes how  fields are represented internally (see
  78. "Field Records").
  79.  
  80. Fields  are domains, so all functions  that are applicable to all domains
  81. are also applicable to fields (see chapter "Domains").
  82.  
  83. All functions for fields are in 'LIBNAME/\"field.g\"'.
  84.  
  85. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  86. \Section{IsField}
  87.  
  88. 'IsField( <D> )'
  89.  
  90. 'IsField'   returns  'true' if the   object <D>  is  a field  and 'false'
  91. otherwise.
  92.  
  93. More precisely 'IsField' tests whether <D>  is a field record (see "Field
  94. Records").  So, for example, a matrix group  may in fact be a field,  yet
  95. 'IsField' would return 'false'.
  96.  
  97. |    gap> IsField( GaloisField(16) );
  98.     true
  99.     gap> IsField( CyclotomicField(9) );
  100.     true
  101.     gap> IsField( rec( isDomain := true, isField := true ) );
  102.     true    # it is possible to fool 'IsField'
  103.     gap> IsField( AsRing( Rationals ) );
  104.     false    # though this ring is, as a set, still 'Rationals' |
  105.  
  106. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  107. \Section{Field}
  108.  
  109. 'Field( <z>,.. )'
  110. 'Field( <list> )'
  111.  
  112. In the first  form 'Field' returns  the smallest field  that contains all
  113. the elements <z>,.. etc.  In the second form 'Field' returns the smallest
  114. field that contains all the elements in  the list <list>.  If any element
  115. is not an element of a  field or the  elements lie in no common  field an
  116. error is raised.
  117.  
  118. |    gap> Field( Z(4) );
  119.     GF(2^2)
  120.     gap> Field( E(9) );
  121.     CF(9)
  122.     gap> Field( [ Z(4), Z(9) ] );
  123.     Error, CharFFE: <z> must be a finite field element, vector, or matrix
  124.     gap> Field( [ E(4), E(9) ] );
  125.     CF(36) |
  126.  
  127. 'Field' differs from  'DefaultField'   (see "DefaultField") in    that it
  128. returns the     smallest  field  in  which   the   elements    lie, while
  129. 'DefaultField' may return a larger field if that makes sense.
  130.  
  131. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  132. \Section{DefaultField}
  133.  
  134. 'DefaultField( <z>,.. )'
  135. 'DefaultField( <list> )'
  136.  
  137. In the first form 'DefaultField' returns the  default field that contains
  138. all the elements <z>,.. etc.  In the  second form 'DefaultField' returns
  139. the default field that contains all the elements in  the list <list>.  If
  140. any element is not an element of a field or the elements lie in no common
  141. field an error is raised.
  142.  
  143. The field returned by  'DefaultField'  need not be the  smallest field in
  144. which the elements lie.  For example for elements  from cyclotomic fields
  145. 'DefaultField' may  return the  smallest  cyclotomic field  in  which the
  146. elements lie, which need not be the  smallest field overall,  because the
  147. elements may  in  fact lie  in  a  smaller number field which   is  not a
  148. cyclotomic field.
  149.  
  150. For the exact   definition of  the default field  of a   certain type  of
  151. elements read  the chapter describing  this type (see "Finite Fields" and
  152. "Subfields of Cyclotomic Fields").
  153.  
  154. 'DefaultField' is used  by 'Conjugates', 'Norm', 'Trace',  'CharPol', and
  155. 'MinPol' (see "Conjugates", "Norm",  "Trace", "CharPol", and "MinPol") if
  156. no explicit field is given.
  157.  
  158. |    gap> DefaultField( Z(4) );
  159.     GF(2^2)
  160.     gap> DefaultField( E(9) );
  161.     CF(9)
  162.     gap> DefaultField( [ Z(4), Z(9) ] );
  163.     Error, CharFFE: <z> must be a finite field element, vector, or matrix
  164.     gap> DefaultField( [ E(4), E(9) ] );
  165.     CF(36) |
  166.  
  167. 'Field' (see "Field") differs from  'DefaultField' in that it returns the
  168. smallest field in which the elements lie, while 'DefaultField' may return
  169. a larger field if that makes sense.
  170.  
  171. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  172. \Section{Fields over Subfields}
  173.  
  174. '<F> / <G>'
  175.  
  176. The quotient operator '/' evaluates to a new  field  <H>.  This field has
  177. the same elements as <F>, i.e., is a domain equal to <F>.  However <H> is
  178. viewed as a field over the field <G>, which must be a subfield of <F>.
  179.  
  180. What subfield a field  is viewed over  determines  its Galois  group.  As
  181. described in    "GaloisGroup" the Galois group  is   the group   of field
  182. automorphisms  that  leave the subfield   fixed.  It also  influences the
  183. results of "Norm",  "Trace",  "CharPol", and  "MinPol", because they  are
  184. defined in terms of the Galois group.
  185.  
  186. |    gap> F := GF(2^12);
  187.     GF(2^12)
  188.     gap> G := GF(2^2);
  189.     GF(2^2)
  190.     gap> Q := F / G;
  191.     GF(2^12)/GF(2^2)
  192.     gap> Norm( F, Z(2^6) );
  193.     Z(2)^0
  194.     gap> Norm( Q, Z(2^6) );
  195.     Z(2^2)^2 |
  196.  
  197. The operator '/' calls '<G>.operations./( <F>, <G> )'.
  198.  
  199. The default function called this  way is 'FieldOps./', which simply makes
  200. a copy  of <F> and enters <G>  into the record component '<F>.field' (see
  201. "Field Records").
  202.  
  203. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  204. \Section{Comparisons of Field Elements}
  205.  
  206. '<f> =   <g>' \\
  207. '<f> \<> <g>'
  208.  
  209. The equality operator  '=' evaluates to 'true' if the  two field elements
  210. <f> and <g> are equal, and to 'false' otherwise.  The inequality operator
  211. '\<>' evaluates to 'true' if the two field  elements <f> and <g>  are not
  212. equal, and to 'false' otherwise.  Note that any two field elements can be
  213. compared, even  if they  do  not lie in compatible fields.   In this case
  214. they cn, of course, never be equal.  For each type of fields the equality
  215. of those field elements is given in the respective chapter.
  216.  
  217. Note that you can compare field elements with elements of other types; of
  218. course they are never equal.
  219.  
  220. '<f> \<\ <g>' \\
  221. '<f> \<= <g>' \\
  222. '<f> >   <g>' \\
  223. '<f> >=  <g>'
  224.  
  225. The  operators '\<', '\<=', '>', and '>=' evaluate to 'true' if the field
  226. element <f> is less than, less than or equal to, greater than, or greater
  227. than  or equal to the field  element  <g>.  For each  type of fields  the
  228. definition of  the ordering of  those  field  elements is  given  in  the
  229. respective  chapter.   The  ordering  of  field  elements is as  follows.
  230. Rationals are smallest, next  are  cyclotomics, followed by  finite field
  231. elements.
  232.  
  233. Note that  you can compare field elements with elements of  other  types;
  234. they are smaller than everything else.
  235.  
  236. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  237. \Section{Operations for Field Elements}
  238.  
  239. The following operations  are always available for   field elements.   Of
  240. course the operands must lie in compatible fields,  i.e., the fields must
  241. be equal, or at least have a common superfield.
  242.  
  243. '<f> + <g>'
  244.  
  245. The operator '+' evaluates to  the sum of  the two field elements <f> and
  246. <g>, which must lie in compatible fields.
  247.  
  248. '<f> - <g>'
  249.  
  250. The operator  '-'  evaluates to the difference of  the two field elements
  251. <f> and <g>, which must lie in compatible fields.
  252.  
  253. '<f> \*\ <g>'
  254.  
  255. The operator '\*' evaluates to the product  of the two field elements <f>
  256. and <g>, which must lie in compatible fields.
  257.  
  258. '<f> / <g>'
  259.  
  260. The operator '/' evaluates to the quotient of the two field  elements <f>
  261. and <g>, which must  lie  in compatible fields.  If the  divisor is  0 an
  262. error is signalled.
  263.  
  264. '<f> \^\ <n>'
  265.  
  266. The operator '\^' evaluates to the <n>-th power of the field element <f>.
  267. If <n> is a  positive  integer  then  '<f>\^<n>'  is  '<f>\*<f>\*..\*<f>'
  268. (<n> factors).  If <n> is a negative integer  '<f>\^<n>'  is  defined  as
  269. $1 / {<f>^{-<n>}}$.   If 0 is  raised  to  a negative power   an error is
  270. signalled.  Any field element, even 0, raised to the 0-th power yields 1.
  271.  
  272. For the precedence of the operators see "Operations".
  273.  
  274. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  275. \Section{GaloisGroup}
  276. \index{Galois group!of a field}
  277. \index{automorphism group!of a field}
  278.  
  279. 'GaloisGroup( <F> )'
  280.  
  281. 'GaloisGroup' returns the Galois group of  the field <F>  as a group (see
  282. "Groups") of field automorphisms (see "Field Homomorphisms").
  283.  
  284. The Galois group of a field <F> over a subfield '<F>.field' is the  group
  285. of automorphisms of <F> that  leave the subfield '<F>.field' fixed.  This
  286. group can be interpreted as a permutation group  permuting  the zeroes of
  287. the characteristic polynomial of a primitive  element of <F>.  The degree
  288. of this group is equal to the number of zeroes, i.e., to the dimension of
  289. <F>  as  a vector  space  over  the subfield  '<F>.field'.   It  operates
  290. transitively on those  zeroes.   The normal divisors of the  Galois group
  291. correspond to the subfields between '<F>' and '<F>.field'.
  292.  
  293. |    gap> G := GaloisGroup( GF(4096)/GF(4) );;
  294.     gap> Size( G );
  295.     6
  296.     gap> IsCyclic( G );
  297.     true    # the Galois group of every finite field is
  298.             # generated by the Frobenius automorphism
  299.     gap> H := GaloisGroup( CF(60) );;
  300.     gap> Size( H );
  301.     16
  302.     gap> IsAbelian( H );
  303.     true |
  304.  
  305. The default function 'FieldOps.GaloisGroup'  just raises  an error, since
  306. there is no general method to compute the Galois  group of a field.  This
  307. default function is overlaid by more specific functions for special types
  308. of domains (see "Field Functions  for Finite Fields" and "GaloisGroup for
  309. Number Fields").
  310.  
  311. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  312. \Section{Conjugates}
  313. \index{Galois conjugates!of a field element}
  314. \index{conjugates!of a field element, Galois}
  315.  
  316. 'Conjugates( <z> )' \\
  317. 'Conjugates( <F>, <z> )'
  318.  
  319. In the  first form 'Conjugates'   returns the list   of conjugates of the
  320. field element  <z>  in  its  default  field   over its prime   field (see
  321. "DefaultField").  In the second  form  'Conjugates'  returns the list  of
  322. conjugates of  the field element <z>  in the field <F> over  the subfield
  323. '<F>.field'.  In either case the list may contain  duplicates if <z> lies
  324. in a proper subfield of its default field, respectively of <F>.
  325.  
  326. The *conjugates* of an element $z$ in a field  $F$ over a subfield $S$ of
  327. are the images of $z$ under the automorphisms in the  Galois group of $F$
  328. over $S$ (see "GaloisGroup"), i.e., those automorphisms of $F$ that leave
  329. $S$  fixed.  The number of  different conjugates of  $z$  is given by the
  330. degree of the smallest extension of $S$ in which $z$ lies.
  331.  
  332. 'Norm' (see "Norm") computes the product,  'Trace' (see "Trace") the  sum
  333. of  all  conjugates.  'CharPol' (see "CharPol")  computes the  polynomial
  334. that has precisely the conjugates with their corresponding multiplicities
  335. as roots,  'MinPol' (see  "MinPol") the  squarefree  polynomial  that has
  336. precisely the conjugates as roots.
  337.  
  338. |    gap> Conjugates( Z(2^6) );
  339.     [ Z(2^6), Z(2^6)^2, Z(2^6)^4, Z(2^6)^8, Z(2^6)^16, Z(2^6)^32 ]
  340.     gap> Conjugates( GF(2^12), Z(2^6) );
  341.     [ 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),
  342.       Z(2^6)^2, Z(2^6)^4, Z(2^6)^8, Z(2^6)^16, Z(2^6)^32 ]
  343.     gap> Conjugates( GF(2^12)/GF(2^2), Z(2^6) );
  344.     [ Z(2^6), Z(2^6)^4, Z(2^6)^16, Z(2^6), Z(2^6)^4, Z(2^6)^16 ] |
  345.  
  346. The  default  function 'FieldOps.Conjugates' applies the automorphisms of
  347. the Galois group of <F> (see "GaloisGroup")  to  <z> and returns the list
  348. of images.  This is overlaid by more efficient functions for most fields.
  349.  
  350. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  351. \Section{Norm}
  352. \index{norm!of a field element}
  353.  
  354. 'Norm( <z> )' \\
  355. 'Norm( <F>, <z> )'
  356.  
  357. In the first form 'Norm' returns the norm of the field element <z> in its
  358. default field over  its prime field  (see "DefaultField").  In the second
  359. form 'Norm' returns the norm  of  <z> in the field  <F> over the subfield
  360. '<F>.field'.
  361.  
  362. The  *norm* of an element $z$ in  a field $F$ over a subfield  $S$ is the
  363. product of all conjugates of $z$  in $F$ over $S$ (see "Conjugates").  As
  364. the set of conjugates is  fixed  under  the Galois  group of $F$ over $S$
  365. (see "GaloisGroup"), so is  the product.  Thus the norm lies in $S$.  The
  366. norm  is  $(-1)^{F.degree/S.degree}$  times  the  constant  term  of  the
  367. characteristic polynomial of $z$ (see "CharPol").
  368.  
  369. |    gap> Norm( Z(2^6) );
  370.     Z(2)^0
  371.     gap> Norm( GF(2^12), Z(2^6) );
  372.     Z(2)^0
  373.     gap> Norm( GF(2^12)/GF(2^2), Z(2^6) );
  374.     Z(2^2)^2 |
  375.  
  376. The default function 'FieldOps.Norm'  multiplies the conjugates of <z> in
  377. <F>  (see  "Conjugates").   This  is  seldom  overlaid by more  efficient
  378. functions for specific fields.
  379.  
  380. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  381. \Section{Trace}
  382. \index{trace!of a field element}
  383.  
  384. 'Trace( <z> )' \\
  385. 'Trace( <F>, <z> )'
  386.  
  387. In the first form 'Trace' returns the trace  of the  field element <z> in
  388. its  default field over   its prime field (see  "DefaultField").   In the
  389. second form 'Trace' returns the trace of the element <z> in the field <F>
  390. over the subfield '<F>.field'.
  391.  
  392. The  *trace* of an element $z$ in a field $F$ over a  subfield $S$ is the
  393. sum  over  all  conjugates  of $z$  in $F$  over  $S$ (see "Conjugates").
  394. Because the set of conjugates is fixed under the Galois group of $F$ over
  395. $S$ (see "GaloisGroup"), so is the sum.  Thus the trace lies in $S$.  The
  396. trace is the negative  of the coefficient of  the  second  highest degree
  397. term of the characteristic polynomial of $z$ (see "CharPol").
  398.  
  399. |    gap> Trace( Z(2^6) );
  400.     0*Z(2)
  401.     gap> Trace( GF(2^12), Z(2^6) );
  402.     0*Z(2)
  403.     gap> Trace( GF(2^12)/GF(2^2), Z(2^6) );
  404.     0*Z(2) |
  405.  
  406. The default function 'FieldOps.Trace' adds the conjugates  of <z>  in <F>
  407. (see "Conjugates").  This  is seldom overlaid by more efficient functions
  408. for specific fields.
  409.  
  410. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  411. \Section{CharPol}
  412. \index{characteristic polynom!of a field element}
  413.  
  414. 'CharPol( <z> )' \\
  415. 'CharPol( <F>, <z> )'
  416.  
  417. In the first form 'CharPol'  returns the characteristic polynomial of the
  418. element  <z>   in   its  default  field   over  its   prime   field  (see
  419. "DefaultField").  In the second form 'CharPol' returns the characteristic
  420. polynomial of  the  element  <z>  in  the  field  <F>  over the  subfield
  421. '<F>.field'.  The characteristic polynomial  is  returned  as  a  list of
  422. coefficients, the <i>-th entry is the coefficient of $x^{i-1}$.
  423.  
  424. The *characteristic polynomial*  of an element  $z$ in a field $F$ over a
  425. subfield $S$  is the product of the  factors $x-c$, where $c$ ranges over
  426. all the conjugates of $z$ in $F$ over $S$ (see "Conjugates").   Therefore
  427. the  characteristic polynomial  of  $z$  in  $F$ over  $S$  is  the monic
  428. polynomial  whose  roots are  precisely  the conjugates  of $z$ with  the
  429. corresponding  multiplicities.   Because the  set of  conjugates is fixed
  430. under the Galois  group  of $F$  over $S$ (see  "GaloisGroup"), so is the
  431. polynomial.  Thus all  the coefficients  of the characteristic polynomial
  432. lie in  $S$.  The constant  term is $(-1)^{F.degree/S.degree}$ times  the
  433. norm of  $z$ (see  "Norm"), and the  coefficient  of  the  second highest
  434. degree  term  is  the negative of the  trace of $z$  (see  "Trace").  The
  435. minimal polynomial  of $z$  (see  "MinPol")  is the squarefree polynomial
  436. whose roots are precisely the conjugates of $z$.
  437.  
  438. |    gap> CharPol( Z(2^6) );
  439.     [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ]
  440.     gap> CharPol( GF(2^12), Z(2^6) );
  441.     [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
  442.       Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ]
  443.     gap> CharPol( GF(2^12)/GF(2^2), Z(2^6) );
  444.     [ Z(2^2)^2, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ] |
  445.  
  446. The default  function 'FieldOps.CharPol' multiplies the binomials $x - c$
  447. with <c>  ranging over  the conjugates of <z> in <F>  (see "Conjugates").
  448. This is seldom overlaid by more efficient functions for specific fields.
  449.  
  450. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  451. \Section{MinPol}
  452. \index{minimal polynom!of a field element}
  453.  
  454. 'MinPol( <z> )' \\
  455. 'MinPol( <F>, <z> )'
  456.  
  457. In the first form 'MinPol' returns the minimal polynomial  of the element
  458. <z> in its default field over its prime field  (see  "DefaultField").  In
  459. the  second form 'MinPol' returns  the minimal polynomial of  the element
  460. <z>  in the field <F>  over   the  subfield  '<F>.field'.    The  minimal
  461. polynomial is returned as a list of coefficients, the <i>-th entry is the
  462. coefficient of $x^{i-1}$.
  463.  
  464. The *minimal polynomial* of an element $z$ in a field $F$ over a subfield
  465. $S$ is the product of the factors $x-c$, where $c$ ranges over the set of
  466. all  conjugates of $z$ in $F$ over $S$ (see "Conjugates").  Therefore the
  467. minimal polynomial of $z$ in $F$  over $S$  is the squarefree  polynomial
  468. whose roots  are precisely  the  conjugates of  $z$.  Because  the set of
  469. conjugates  is  fixed  under  the Galois  group  of  $F$  over  $S$  (see
  470. "GaloisGroup"),  so is the polynomial.  Thus all  the coefficients of the
  471. minimal polynomial lie in $S$.  The characteristic polynomial of $z$ (see
  472. "CharPol") is the polynomial whose roots are  precisely the conjugates of
  473. $z$ with the corresponding multiplicities.
  474.  
  475. |    gap> MinPol( Z(2^6) );
  476.     [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ]
  477.     gap> MinPol( GF(2^12), Z(2^6) );
  478.     [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ]
  479.     gap> MinPol( GF(2^12)/GF(2^2), Z(2^6) );
  480.     [ Z(2^2), Z(2)^0, Z(2)^0, Z(2)^0 ] |
  481.  
  482. The default function 'FieldOps.MinPol' multiplies  the  binomials $x - c$
  483. with  <c>  ranging  over  the  set  of  conjugates  of  <z> in  <F>  (see
  484. "Conjugates").  This is seldom overlaid by more  efficient  functions for
  485. specific fields.
  486.  
  487. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  488. \Section{Field Homomorphisms}%
  489. \index{homomorphisms!of fields}
  490.  
  491. Field homomorphisms  are an  important  class  of homomorphisms in {\GAP}
  492. (see chapter "Homomorphisms").
  493.  
  494. A *field  homomorphism* $\phi$ is a mapping that maps  each element of  a
  495. field $F$,  called the  source of $\phi$, to  an element of another field
  496. $G$, called the range of $\phi$, such that for each pair  $x,y \in F$  we
  497. have $(x+y)^\phi =  x^\phi + y^\phi$ and $(xy)^\phi = x^\phi y^\phi$.  We
  498. also  require  that  $\phi$ maps the one of $F$ to  the  one of $G$ (that
  499. $\phi$  maps the zero of $F$  to the zero of $G$  is implied by the above
  500. relations).
  501.  
  502. An  Example of a field  homomorphism  is the Frobinius automorphism of  a
  503. finite   field   (see   "FrobeniusAutomorphism").    Look   under  *field
  504. homomorphisms*   in  the  index   for  a  list  of  all  available  field
  505. homomorphisms.
  506.  
  507. Since field homomorphisms are just a  special case of  homomorphisms, all
  508. functions described  in  chapter  "Homomorphisms"  are applicable  to all
  509. field homomorphisms, e.g., the function to test if a homomorphism is a an
  510. automorphism   (see   "IsAutomorphism").    More   general,  since  field
  511. homomorphisms are just a special case of mappings all functions described
  512. in chapter "Mappings" are also applicable,  e.g., the function to compute
  513. the image of an element under a field homomorphism (see "Image").
  514.  
  515. The following sections describe the functions that test whether a mapping
  516. is a field homomorphism (see  "IsFieldHomomorphism"), compute the  kernel
  517. of  a  field  homomorphism  (see  "KernelFieldHomomorphism"), and how the
  518. general mapping functions are implemented for field homomorphisms.
  519.  
  520. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  521. \Section{IsFieldHomomorphism}%
  522. \index{IsHomomorphism!for fields}
  523.  
  524. 'IsFieldHomomorphism( <map> )'
  525.  
  526. 'IsFieldHomomorphism' returns  'true'  if  the  mapping <map> is a  field
  527. homomorphism and 'false' otherwise.  Signals an error if <map> is a multi
  528. valued mapping.
  529.  
  530. A mapping $map$ is a field homomorphism if  its source  $F$ and range $G$
  531. are both fields and  if  for each  pair of elements $x, y  \in F$ we have
  532. $(x+y)^{map} = x^{map} + y^{map}$ and $(xy)^{map} = x^{map} y^{map}$.  We
  533. also require that $1_F^{map} = 1_G$.
  534.  
  535. |    gap> f := GF( 16 );
  536.     GF(2^4)
  537.     gap> fun := FrobeniusAutomorphism( f );
  538.     FrobeniusAutomorphism( GF(2^4) )
  539.     gap> IsFieldHomomorphism( fun );
  540.     true |
  541.  
  542. 'IsFieldHomomorphism' first tests if the flag '<map>.isFieldHomomorphism'
  543. is bound.  If the flag is bound, 'IsFieldHomomorphism' returns its value.
  544. Otherwise it calls \\
  545. '<map>.source.operations.IsFieldHomomorphism(  <map>  )',  remembers  the
  546. returned value in '<map>.isFieldHomomorphism', and returns it.  Note that
  547. of course all  functions  that create  field  homomorphism  set  the flag
  548. '<map>.isFieldHomomorphism'  to 'true', so that no function is called for
  549. those field homomorphisms.
  550.  
  551. The default function called this way is 'MappingOps.IsFieldHomomorphism'.
  552. It computes all the elements of the source of <map> and  for each pair of
  553. elements  $x, y$ tests whether $(x+y)^{map}  =  x^{map}  +  y^{map}$  and
  554. $(xy)^{map} = x^{map} y^{map}$.  Look under *IsHomomorphism* in the index
  555. to see for which mappings this function is overlaid.
  556.  
  557. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  558. \Section{KernelFieldHomomorphism}%
  559. \index{Kernel!for fields}
  560.  
  561. 'KernelFieldHomomorphism( <hom> )'
  562.  
  563. 'KernelFieldHomomorphism' returns  the  kernel  of the field homomorphism
  564. <hom>.
  565.  
  566. Because the kernel must be a  ideal in the source  and it can not  be the
  567. full source  (because we  require that the one of the source is mapped to
  568. the one of the range), it must be the trivial ideal.  Therefor the kernel
  569. of  every field homomorphism is the set  containing  only the zero of the
  570. source.
  571.  
  572. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  573. \Section{Mapping Functions for Field Homomorphisms}%
  574. \index{IsInjective!for field homomorphisms}%
  575. \index{IsSurjective!for field homomorphisms}%
  576. \index{equality!for field homomorphisms}%
  577. \index{Image!for field homomorphisms}%
  578. \index{Images!for field homomorphisms}%
  579. \index{PreImage!for field homomorphisms}%
  580. \index{PreImages!for field homomorphisms}
  581.  
  582. This  section describes how  the mapping  functions  defined  in  chapter
  583. "Mappings" are implemented for field homomorphisms.  Those  functions not
  584. mentioned here are implemented by the default functions described in  the
  585. respective sections.
  586.  
  587. \vspace{5mm}
  588. 'IsInjective( <hom> )'
  589.  
  590. Always returns 'true' (see "KernelFieldHomomorphism").
  591.  
  592. \vspace{5mm}
  593. 'IsSurjective( <hom> )'
  594.  
  595. The  field  homomorphism  <hom> is surjective if  the  size  of the image
  596. 'Size(  Image( <hom> ) )' is equal  to  the  size  of  the  range  'Size(
  597. <hom>.range )'.
  598.  
  599. \vspace{5mm}
  600. '<hom1> = <hom2>'
  601.  
  602. The  two field homomorphism <hom1> and <hom2> are are equal  if  the have
  603. the  same  source and range and  if the images of the generators  of  the
  604. source under <hom1> and <hom2> are equal.
  605.  
  606. \vspace{5mm}
  607. 'Image( <hom> )' \\
  608. 'Image( <hom>, <H> )' \\
  609. 'Images( <hom>, <H> )'
  610.  
  611. The  image  of  a  subfield  under a  field homomorphism  is computed  by
  612. computing the images  of  a  set of  generators of the  subfield, and the
  613. result is the subfield generated by those images.
  614.  
  615. \vspace{5mm}
  616. 'PreImage( <hom> )' \\
  617. 'PreImage( <hom>, <H> )' \\
  618. 'PreImages( <hom>, <H> )'
  619.  
  620. The preimages of a subfield  under a  field  homomorphism are computed by
  621. computing the  preimages of all the generators  of  the subfield, and the
  622. result is the subfield generated by those elements.
  623.  
  624. Look  in  the  index  under  *IsInjective*,  *IsSurjective*,  *equality*,
  625. *Image*,  *Images*,  *PreImage*,  and *PreImages* to see for which  field
  626. homomorphisms these functions are overlaid.
  627.  
  628. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  629. \Section{Field Records}
  630.  
  631. A field is represented by  a record  that contains important  information
  632. about this field.  The {\GAP} library predefines some  field records, for
  633. example  'Rationals'  (see  "Rationals").  Field  constructors  construct
  634. others,  for  example  'Field'  (see  "Field"),  and  'GaloisField'  (see
  635. "GaloisField").  Of course you may also create such a record by hand.
  636.  
  637. All field  records contain the  components 'isDomain', 'isField', 'char',
  638. 'degree', 'generators', 'zero',  'one', 'field', 'base', and 'dimension'.
  639. They  may  also   contain the  optional  components  'isFinite',  'size',
  640. 'galoisGroup'.   The  contents  of  all  components of   a field <F>  are
  641. described below.
  642.  
  643. 'isDomain': \\
  644.         is always 'true'.  This indicates that <F> is a domain.
  645.  
  646. 'isField': \\
  647.         is always 'true'.  This indicates that <F> is a field.
  648.  
  649. 'char': \\
  650.         is the characteristic of <F>.  For finite fields this is always a
  651.         prime, for infinite fields this is 0.
  652.  
  653. 'degree': \\
  654.         is the degree of  <F> *as extension of the  prime field*,  not as
  655.         extension of  the subfield <S>.   For finite fields the  order of
  656.         <F> is given by '<F>.char\^ <F>.degree'.
  657.  
  658. 'generators': \\
  659.         a list of elements  that together generate <F>.   That is  <F> is
  660.         the smallest field over the prime  field given by '<F>.char' that
  661.         contains the elements of '<F>.generators'.
  662.  
  663. 'zero': \\
  664.         is the additive neutral element of the finite field.
  665.  
  666. 'one': \\
  667.         is the multiplicative neutral element of the finite field.
  668.  
  669. 'field': \\
  670.         is  the subfield  <S> over which   <F> was constructed.  This  is
  671.         either a field  record for <S>, or the  same value as '<F>.char',
  672.         denoting the prime field (see "Fields over Subfields").
  673.  
  674. 'base': \\
  675.         is a list of elements  of <F> forming a  base  for <F> as  vector
  676.         space over the subfield <S>.
  677.  
  678. 'dimension': \\
  679.         is the dimension of <F> as vector space over the subfield <S>.
  680.  
  681. 'isFinite': \\
  682.         if present this is 'true' if the field  <F> is finite and 'false'
  683.         otherwise.
  684.  
  685. 'size': \\
  686.         if present this is the size of the field <F>.  If <F> is infinite
  687.         this holds the string \"infinity\".
  688.  
  689. 'galoisGroup': \\
  690.         if    present   this holds  the     Galois    group of  <F>  (see
  691.         "GaloisGroup").
  692.  
  693. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  694. %%
  695. %E  Emacs . . . . . . . . . . . . . . . . . . . . . local Emacs variables
  696. %%
  697. %%  Local Variables:
  698. %%  mode:               outline
  699. %%  outline-regexp:     "\\\\Chapter\\|\\\\Section"
  700. %%  fill-column:        73
  701. %%  eval:               (hide-body)
  702. %%  End:
  703. %%
  704.  
  705.  
  706.  
  707.