Macaulay2 » Documentation
Packages » Macaulay2Doc » rings » finite fields
next | previous | forward | backward | up | index | toc

# finite fields

Two basic finite fields are:

- ZZ/p
- GF(p^n)

Create a finite field with $q = p^n$ elements using

    i1 : F = GF(81,Variable=>a)

    o1 = F

    o1 : GaloisField

This creates the ring of characteristic 3, having 3^4 = 81 elements. The elements of this ring are 0, a, a^2, a^3, ..., a^80.

    i2 : a^80

    o2 = 1

    o2 : F

    i3 : a^40

    o3 = -1

    o3 : F

Use ambient to see the quotient ring the field is made from.

    i4 : ambient F

            ZZ
            --[a]
             3
    o4 = -----------
          4    3
         a  - a  - 1

    o4 : QuotientRing

Now check that a satisfies this equation.

    i5 : a^4 + a - 1

          3
    o5 = a  + a

    o5 : F

It is often preferable to view elements of F as polynomials in a rather than as powers of a. This can be accomplished by lifting the elements back to this ambient ring.

    i6 : lift(a^20, ambient F)

            3    2
    o6 = - a  - a  - 1

            ZZ
            --[a]
             3
    o6 : -----------
          4    3
         a  - a  - 1

    i7 : apply({20,40,80}, i -> lift(a^i, ambient F))

             3    2
    o7 = {- a  - a  - 1, -1, 1}

    o7 : List

(for more details on lift, see working with multiple rings).

Finite fields can be used as base rings for polynomial rings.

    i8 : R = F[x,y,z]

    o8 = R

    o8 : PolynomialRing

    i9 : f = random(2,R)

             3      2    2          3    2          2     3                 3
    o9 = (- a  + a)x  + a x*y + (- a  - a  - a - 1)y  + (a  + a + 1)x*z + (a  -
         ------------------------------------------------------------------------
          2               3    2          2
         a  - a)y*z + (- a  - a  + a - 1)z

    o9 : R

    i10 : f = (leadCoefficient f)^(-1) * f

           2       2                 3    2      2       3             2
    o10 = x  + (- a  + a - 1)x*y + (a  + a  + 1)y  + (- a  - a)x*z + (a  - a)y*z
          -----------------------------------------------------------------------
                3      2
          + (- a  + a)z

    o10 : R

Gröbner bases, and all related computations work in these rings.

The prime finite fields can be made easily as quotient rings of ZZ.

    i11 : ZZ/101

           ZZ
    o11 = ---
          101

    o11 : QuotientRing

In general, to make a finite field with q elements, we use GF.

    i12 : k = GF 81

    o12 = k

    o12 : GaloisField

The generator of the field is available as the variable a or it can be obtained as usual.

    i13 : a

    o13 = a

    o13 : k

    i14 : k_0

    o14 = a

    o14 : k

You may use ambient to see the quotient ring the field is made from.

    i15 : ambient k

             ZZ
             --[a]
              3
    o15 = -----------
           4    3
          a  - a  - 1

    o15 : QuotientRing

Use ideal to see the ideal that defined that quotient ring.

    i16 : ideal oo

                 4    3
    o16 = ideal(a  - a  - 1)

                   ZZ
    o16 : Ideal of --[a]
                    3

Finally, you may use _ to recover the generator of the ideal.

    i17 : oo_0

           4    3
    o17 = a  - a  - 1

          ZZ
    o17 : --[a]
           3

To specify a different name for the generator when the field is created, use the Variable option.

    i18 : F = GF(16, Variable => b)

    o18 = F

    o18 : GaloisField

    i19 : b^20 + 1

           2
    o19 = b  + b + 1

    o19 : F

    i20 : random F

    o20 = 0

    o20 : F

Finite fields can be used as base rings for polynomial rings.

    i21 : R = F[x,y,z]

    o21 = R

    o21 : PolynomialRing

    i22 : random(2,R)

            3          2     3    2             2          2     2
    o22 = (b  + b + 1)x  + (b  + b  + 1)x*y + (b  + b + 1)y  + (b  + b + 1)x*z +
          -----------------------------------------------------------------------
                    3    2      2
          b*y*z + (b  + b  + b)z

    o22 : R

If you have a quotient ring that you know is a finite field, then you can convert it to ring that is known by the system to be a finite field.

    i23 : GF (ZZ/2[T]/(T^9+T+1), Variable => T)

    o23 = GF 512

    o23 : GaloisField

You may also provide your own choice of primitive element. Internally, elements of the finite field are stored as powers of the primitive element. First we assign our quotient ring to a global variable to ensure that T gets set to a value in the quotient ring, and then we call GF.

    i24 : A = ZZ/2[T]/(T^9+T+1)

    o24 = A

    o24 : QuotientRing

    i25 : k = GF (A, PrimitiveElement => T^3+1)

    o25 = k

    o25 : GaloisField

Notice that T is now recorded as an element of this finite field.

    i26 : T

    o26 = T

    o26 : k

The generator of A can be obtained this way:

    i27 : A_0

    o27 = T

    o27 : A

Use substitute to map it to an element of the finite field.

    i28 : substitute(A_0,k)

    o28 = T

    o28 : k

Conversely, a given element of the finite field can be transferred back to the quotient ring with lift.

    i29 : lift(k_0, ring T)

    o29 = T

    o29 : k

We can even lift it back to the polynomial ring.

    i30 : lift(k_0, ambient ring T)

    o30 = T

    o30 : A

For more information see GaloisField.

### Menu

- isFinitePrimeField -- whether a ring is a finite prime field

The source of this document is in /build/macaulay2-88fgJW/macaulay2-1.25.11+ds/M2/Macaulay2/packages/Macaulay2Doc/ov_rings.m2:612:0.