# Finite Fields

- [Introduction](introduction.md)

  - [Representation of Finite Fields](introduction.md#representation-of-finite-fields)

  - [Conway Polynomials](introduction.md#conway-polynomials)

  - [Ground Field and Relationships](introduction.md#ground-field-and-relationships)

- [Creation Functions](creation.md)

  - [Creation of Structures](creation.md#creation-of-structures)

    - [`FiniteField(q): RngIntElt → FldFin`](creation.md#function-finitefield-rngintelt)

    - [`GaloisField(q): RngIntElt → FldFin`](creation.md#function-galoisfield-rngintelt)

    - [`GF(q): RngIntElt → FldFin`](creation.md#function-gf-rngintelt)

    - [`FiniteField(p, n): RngIntElt, RngIntElt → FldFin`](creation.md#function-finitefield-rngintelt-rngintelt)

    - [`GaloisField(p, n): RngIntElt, RngIntElt → FldFin`](creation.md#function-galoisfield-rngintelt-rngintelt)

    - [`GF(p, n): RngIntElt, RngIntElt → FldFin`](creation.md#function-gf-rngintelt-rngintelt)

    - [`ext<F | n>: FldFin, RngIntElt → FldFin, Map`](creation.md#constructor-constructor-ext-fldfin-rngintelt-fldfin-map)

    - [`ext<F | P>: FldFin, RngUPolElt[FldFin] → FldFin, Map`](creation.md#constructor-constructor-ext-fldfin-rngupolelt-fldfin-fldfin-map)

    - [`ExtensionField<F, x | P>: FldFin, ... → FldFin, Map`](creation.md#constructor-constructor-extensionfield-fldfin-fldfin-map)

    - [`RandomExtension(F, n): FldFin, RngIntElt → FldFin`](creation.md#function-randomextension-fldfin-rngintelt)

    - [`SplittingField(P): RngUPolElt[FldFin] → FldFin`](creation.md#function-splittingfield-rngupolelt-fldfin)

    - [`SplittingField(S): { RngUPolElt[FldFin] } → FldFin`](creation.md#function-splittingfield-rngupolelt-fldfin-2)

    - [`sub<F | d>: FldFin, RngIntElt → FldFin, Map`](creation.md#constructor-constructor-sub-fldfin-rngintelt-fldfin-map)

    - [`sub<F | f>: FldFin, FldFinElt → FldFin, Map`](creation.md#constructor-constructor-sub-fldfin-fldfinelt-fldfin-map)

    - [`GroundField(F): FldFin → FldFin`](creation.md#function-groundfield-fldfin)

    - [`BaseField(F): FldFin → FldFin`](creation.md#function-basefield-fldfin)

    - [`PrimeField(F): FldFin → FldFin`](creation.md#function-primefield-fldfin)

    - [`IsPrimeField(F): Fld → BoolElt`](creation.md#function-isprimefield-fld)

    - [`F meet G: FldFin, FldFin → FldFin`](creation.md#operation-op-meet-fldfin-fldfin)

    - [`CommonOverfield(K, L): FldFin, FldFin → FldFin`](creation.md#function-commonoverfield-fldfin-fldfin)

    - [`Example: Extensions`](creation.md#example-ex-591238)

  - [Creating Relations](creation.md#creating-relations)

    - [`Embed(E, F): FldFin, FldFin`](creation.md#function-embed-fldfin-fldfin)

    - [`Embed(E, F, x): FldFin, FldFin, FldFinElt`](creation.md#function-embed-fldfin-fldfin-fldfinelt)

    - [`IsIsomorphic(E, F): FldFin, FldFin → BoolElt, Map[FldFin, FldFin]`](creation.md#function-isisomorphic-fldfin-fldfin)

  - [Special Options](creation.md#special-options)

    - [`AssertAttribute({FldFin, }{"PowerPrinting", l}): Cat, MonStgElt, BoolElt`](creation.md#function-assertattribute-cat-monstgelt-boolelt)

    - [`SetPowerPrinting(F, l): FldFin, BoolElt`](creation.md#function-setpowerprinting-fldfin-boolelt)

    - [`AssertAttribute({F, }{"PowerPrinting", l}): FldFin, MonStgElt, BoolElt`](creation.md#function-assertattribute-fldfin-monstgelt-boolelt)

    - [`HasAttribute({FldFin, }{"PowerPrinting", l}): Cat, MonStgElt, BoolElt`](creation.md#function-hasattribute-cat-monstgelt-boolelt)

    - [`HasAttribute(F, "PowerPrinting"): FldFin, MonStgElt → BoolElt, BoolElt`](creation.md#function-hasattribute-fldfin-monstgelt)

    - [`AssignNames(~F, [f]): FldFin, [ MonStgElt ])`](creation.md#function-assignnames-fldfin-monstgelt-ref)

    - [`Name(F, 1): FldFin, RngIntElt → FldFinElt`](creation.md#function-name-fldfin-rngintelt)

  - [Homomorphisms](creation.md#homomorphisms)

    - [`hom< F -> G | x >: FldFin, Rng → Map`](creation.md#constructor-constructor-hom-fldfin-rng-map)

  - [Creation of Elements](creation.md#creation-of-elements)

    - [`F . 1: FldFin → FldFinElt`](creation.md#operation-operation-fldfin-fldfinelt)

    - [`elt<F | a>: FldFin, RngElt → FldFinElt`](creation.md#constructor-constructor-elt-fldfin-rngelt-fldfinelt)

    - [`F ! a: FldFin, RngElt → FldFinElt`](creation.md#operation-op-fldfin-rngelt)

    - [`elt<F | a₀, ..., aₙ₋₁>: FldFin, [FldFinElt] → FldFinElt`](creation.md#constructor-constructor-elt-fldfin-fldfinelt-fldfinelt)

    - [`One(F): FldFin → FldFinElt`](creation.md#function-one-fldfin)

    - [`Identity(F): FldFin → FldFinElt`](creation.md#function-identity-fldfin)

    - [`Zero(F): FldFin → FldFinElt`](creation.md#function-zero-fldfin)

    - [`Representative(F): FldFin → FldFinElt`](creation.md#function-representative-fldfin)

    - [`Random(F): FldFin → FldFinElt`](creation.md#function-random-fldfin)

  - [Special Elements](creation.md#special-elements)

    - [`F . 1: FldFin, RngIntElt → FldFinElt`](creation.md#operation-operation-fldfin-rngintelt-fldfinelt)

    - [`Generator(F): FldFin → FldFinElt`](creation.md#function-generator-fldfin)

    - [`Generator(F, E): FldFin, FldFin → FldFinElt`](creation.md#function-generator-fldfin-fldfin)

    - [`PrimitiveElement(F): FldFin → FldFinElt`](creation.md#function-primitiveelement-fldfin)

    - [`SetPrimitiveElement(F, x): FldFin, FldFinElt`](creation.md#function-ff-setprimitiveelement)

    - [`NormalElement(F): FldFin → FldFinElt`](creation.md#function-normalelement-fldfin)

    - [`NormalElement(F, E): FldFin, FldFin → FldFinElt`](creation.md#function-normalelement-fldfin-fldfin)

  - [Sequence Conversions](creation.md#sequence-conversions)

    - [`SequenceToElement(s, F): [ FldFinElt ] → FldFinElt`](creation.md#function-sequencetoelement-fldfinelt)

    - [`Seqelt(s, F): [ FldFinElt ] → FldFinElt`](creation.md#function-seqelt-fldfinelt)

    - [`ElementToSequence(a): FldFinElt → [ FldFinElt ]`](creation.md#function-elementtosequence-fldfinelt)

    - [`Eltseq(a): FldFinElt → [ FldFinElt ]`](creation.md#function-eltseq-fldfinelt)

    - [`ElementToSequence(a, E): FldFinElt, FldFin → [ FldFinElt ]`](creation.md#function-elementtosequence-fldfinelt-fldfin)

    - [`Eltseq(a, E): FldFinElt, FldFin → [ FldFinElt ]`](creation.md#function-eltseq-fldfinelt-fldfin)

- [Structure Operations](operation.md)

  - [Related Structures](operation.md#related-structures)

    - [`Category(F): FldFin → Cat`](operation.md#function-category-fldfin)

    - [`Parent(F): FldFin → PowerStructure`](operation.md#function-parent-fldfin)

    - [`Centre(F): FldFin → FldFin`](operation.md#function-centre-fldfin)

    - [`PrimeRing(F): FldFin → FldFin`](operation.md#function-primering-fldfin)

    - [`PrimeField(F): FldFin → FldFin`](operation.md#function-primefield-fldfin-2)

    - [`FieldOfFractions(F): FldFin → FldFin`](operation.md#function-fieldoffractions-fldfin)

    - [`AdditiveGroup(F): FldFin → GrpAb, Map`](operation.md#function-additivegroup-fldfin)

    - [`MultiplicativeGroup(F): FldFin → GrpAb, Map`](operation.md#function-multiplicativegroup-fldfin)

    - [`UnitGroup(F): FldFin → GrpAb, Map`](operation.md#function-unitgroup-fldfin)

    - [`Set(F): FldFin → SetEnum`](operation.md#function-set-fldfin)

    - [`VectorSpace(F, E): FldFin, FldFin → ModTupFld, Map`](operation.md#function-vectorspace-fldfin-fldfin)

    - [`VectorSpace(F, E, B): FldFin, FldFin, [ FldFinElt ] → ModTupFld, Map`](operation.md#function-vectorspace-fldfin-fldfin-fldfinelt)

    - [`MatrixAlgebra(F, E): FldFin, FldFin → AlgMat, Map`](operation.md#function-matrixalgebra-fldfin-fldfin)

    - [`MatrixAlgebra(A, E): AlgMat, FldFin → AlgMat, Map`](operation.md#function-matrixalgebra-algmat-fldfin)

    - [`Example: Vector Space`](operation.md#example-ex-c6682e)

    - [`GaloisGroup(K, k): FldFin, FldFin → GrpPerm, [FldFinElt]`](operation.md#function-galoisgroup-fldfin-fldfin)

    - [`AutomorphismGroup(K, k): FldFin, FldFin → GrpPerm, [Map], Map`](operation.md#function-automorphismgroup-fldfin-fldfin)

  - [Numerical Invariants](operation.md#numerical-invariants)

    - [`Characteristic(F): FldFin → RngIntElt`](operation.md#function-characteristic-fldfin)

    - [`# F: FldFin → FldFinElt`](operation.md#operation-operation-fldfin-fldfinelt)

    - [`Degree(F): FldFin → RngIntElt`](operation.md#function-degree-fldfin)

    - [`Degree(F, E): FldFin, FldFin → RngIntElt`](operation.md#function-degree-fldfin-fldfin)

  - [Defining Polynomial](operation.md#defining-polynomial)

    - [`DefiningPolynomial(F): FldFin → RngUPolElt`](operation.md#function-definingpolynomial-fldfin)

    - [`DefiningPolynomial(F, E): FldFin → RngUPolElt`](operation.md#function-definingpolynomial-fldfin-2)

  - [Ring Predicates and Booleans](operation.md#ring-predicates-and-booleans)

    - [`IsConway(F): FldFin → BoolElt`](operation.md#function-isconway-fldfin)

    - [`IsDefault(F): FldFin → BoolElt`](operation.md#function-isdefault-fldfin)

    - [`IsCommutative(F): FldFin → BoolElt`](operation.md#function-iscommutative-fldfin)

    - [`IsUnitary(F): FldFin → BoolElt`](operation.md#function-isunitary-fldfin)

    - [`IsFinite(F): FldFin → BoolElt`](operation.md#function-isfinite-fldfin)

    - [`IsOrdered(F): FldFin → BoolElt`](operation.md#function-isordered-fldfin)

    - [`IsField(F): FldFin → BoolElt`](operation.md#function-isfield-fldfin)

    - [`IsEuclideanDomain(F): FldFin → BoolElt`](operation.md#function-iseuclideandomain-fldfin)

    - [`IsPID(F): FldFin → BoolElt`](operation.md#function-ispid-fldfin)

    - [`IsUFD(F): FldFin → BoolElt`](operation.md#function-isufd-fldfin)

    - [`IsDivisionRing(F): FldFin → BoolElt`](operation.md#function-isdivisionring-fldfin)

    - [`IsEuclideanRing(F): FldFin → BoolElt`](operation.md#function-iseuclideanring-fldfin)

    - [`IsPrincipalIdealRing(F): FldFin → BoolElt`](operation.md#function-isprincipalidealring-fldfin)

    - [`IsDomain(F): FldFin → BoolElt`](operation.md#function-isdomain-fldfin)

    - [`F eq G: FldFin, Rng → BoolElt`](operation.md#operation-op-eq-fldfin-rng)

    - [`F ne G: FldFin, Rng → BoolElt`](operation.md#operation-op-ne-fldfin-rng)

  - [Roots](operation.md#roots)

    - [`Roots(f): RngUPolElt → [ < FldFinElt, RngIntElt> ]`](operation.md#function-roots-rngupolelt)

    - [`RootsInSplittingField(f): RngUPolElt[FldFin] → [<RngUPolElt, RngIntElt>], FldFin`](operation.md#function-rootsinsplittingfield-rngupolelt-fldfin)

    - [`FactorizationOverSplittingField(f): RngUPolElt[FldFin] → [<RngUPolElt, RngIntElt>], FldFin`](operation.md#function-factorizationoversplittingfield-rngupolelt-fldfin)

    - [`FactorisationOverSplittingField(f): RngUPolElt[FldFin] → [<RngUPolElt, RngIntElt>], FldFin`](operation.md#function-factorisationoversplittingfield-rngupolelt-fldfin)

    - [`RootOfUnity(n, K): RngIntElt, FldFin → FldFinElt`](operation.md#function-rootofunity-rngintelt-fldfin)

    - [`Example: Functions`](operation.md#example-ex-f06af7)

- [Element Operations](operation-element.md)

  - [Arithmetic Operators](operation-element.md#arithmetic-operators)

    - [`+ a: FldFinElt → FldFinElt`](operation-element.md#operation-operation-fldfinelt-fldfinelt)

    - [`- a: FldFinElt → FldFinElt`](operation-element.md#operation-operation-fldfinelt-fldfinelt-2)

    - [`a + b: FldFinElt, FldFinElt → FldFinElt`](operation-element.md#operation-op-plus-fldfinelt-fldfinelt)

    - [`a - b: FldFinElt, FldFinElt → FldFinElt`](operation-element.md#operation-op-minus-fldfinelt-fldfinelt)

    - [`a * b: FldFinElt, FldFinElt → FldFinElt`](operation-element.md#operation-op-times-fldfinelt-fldfinelt)

    - [`a / b: FldFinElt, FldFinElt → FldFinElt`](operation-element.md#operation-op-div-fldfinelt-fldfinelt)

    - [`a ^ k: FldFinElt, RngIntElt → FldFinElt`](operation-element.md#operation-op-pow-fldfinelt-rngintelt)

    - [`a +:= b: FldFinElt, FldFinElt → FldFinElt`](operation-element.md#operation-operation-fldfinelt-fldfinelt-fldfinelt)

    - [`a -:= b: FldFinElt, FldFinElt → FldFinElt`](operation-element.md#operation-operation-fldfinelt-fldfinelt-fldfinelt-2)

    - [`a *:= b: FldFinElt, FldFinElt → FldFinElt`](operation-element.md#operation-operation-fldfinelt-fldfinelt-fldfinelt-3)

  - [Equality and Membership](operation-element.md#equality-and-membership)

    - [`a eq b: FldFinElt, FldFinElt → BoolElt`](operation-element.md#operation-op-eq-fldfinelt-fldfinelt)

    - [`a ne b: FldFinElt, FldFinElt → BoolElt`](operation-element.md#operation-op-ne-fldfinelt-fldfinelt)

    - [`a in F: FldFinElt, Rng → BoolElt`](operation-element.md#operation-op-in-fldfinelt-rng)

    - [`a notin F: FldFinElt, Rng → BoolElt`](operation-element.md#operation-op-notin-fldfinelt-rng)

  - [Parent and Category](operation-element.md#parent-and-category)

    - [`Parent(a): FldFinElt → FldFin`](operation-element.md#function-parent-fldfinelt)

    - [`Category(a): FldFinElt → Cat`](operation-element.md#function-category-fldfinelt)

  - [Predicates on Ring Elements](operation-element.md#predicates-on-ring-elements)

    - [`IsZero(a): FldFinElt → BoolElt`](operation-element.md#function-iszero-fldfinelt)

    - [`IsOne(a): FldFinElt → BoolElt`](operation-element.md#function-isone-fldfinelt)

    - [`IsMinusOne(a): FldFinElt → BoolElt`](operation-element.md#function-isminusone-fldfinelt)

    - [`IsNilpotent(a): FldFinElt → BoolElt`](operation-element.md#function-isnilpotent-fldfinelt)

    - [`IsIdempotent(a): FldFinElt → BoolElt`](operation-element.md#function-isidempotent-fldfinelt)

    - [`IsUnit(a): FldFinElt → BoolElt`](operation-element.md#function-isunit-fldfinelt)

    - [`IsZeroDivisor(a): FldFinElt → BoolElt`](operation-element.md#function-iszerodivisor-fldfinelt)

    - [`IsRegular(a): FldFin → BoolElt`](operation-element.md#function-isregular-fldfin)

    - [`IsIrreducible(a): FldFinElt → BoolElt`](operation-element.md#function-isirreducible-fldfinelt)

    - [`IsPrime(a): FldFinElt → BoolElt`](operation-element.md#function-isprime-fldfinelt)

    - [`IsPrimitive(a): FldFinElt → BoolElt`](operation-element.md#function-isprimitive-fldfinelt)

    - [`IsPrimitive(f): RngUPolElt → BoolElt`](operation-element.md#function-isprimitive-rngupolelt)

    - [`IsNormal(a): FldFinElt → BoolElt`](operation-element.md#function-isnormal-fldfinelt)

    - [`IsNormal(a, E): FldFinElt → BoolElt`](operation-element.md#function-isnormal-fldfinelt-2)

    - [`IsSquare(a): FldFinElt → BoolElt`](operation-element.md#function-issquare-fldfinelt)

  - [Minimal and Characteristic Polynomial](operation-element.md#minimal-and-characteristic-polynomial)

    - [`MinimalPolynomial(a): FldFinElt → RngUPolElt`](operation-element.md#function-minimalpolynomial-fldfinelt)

    - [`MinimalPolynomial(a, E): FldFinElt, FldFin → RngUPolElt`](operation-element.md#function-minimalpolynomial-fldfinelt-fldfin)

    - [`CharacteristicPolynomial(a): FldFinElt → RngUPolElt`](operation-element.md#function-characteristicpolynomial-fldfinelt)

    - [`CharacteristicPolynomial(a, E): FldFinElt, FldFin → RngUPolElt`](operation-element.md#function-characteristicpolynomial-fldfinelt-fldfin)

  - [Norm, Trace and Frobenius](operation-element.md#norm-trace-and-frobenius)

    - [`Norm(a): FldFinElt → FldFinElt`](operation-element.md#function-norm-fldfinelt)

    - [`Norm(a, E): FldFinElt, FldFin → FldFinElt`](operation-element.md#function-norm-fldfinelt-fldfin)

    - [`AbsoluteNorm(a): FldFinElt → FldFinElt`](operation-element.md#function-absolutenorm-fldfinelt)

    - [`NormAbs(a): FldFinElt → FldFinElt`](operation-element.md#function-normabs-fldfinelt)

    - [`Trace(a): FldFinElt → FldFinElt`](operation-element.md#function-trace-fldfinelt)

    - [`Trace(a, E): FldFinElt, FldFin → FldFinElt`](operation-element.md#function-trace-fldfinelt-fldfin)

    - [`AbsoluteTrace(a): FldFinElt → FldFinElt`](operation-element.md#function-absolutetrace-fldfinelt)

    - [`TraceAbs(a): FldFinElt → FldFinElt`](operation-element.md#function-traceabs-fldfinelt)

    - [`Frobenius(a): FldFinElt → FldFinElt`](operation-element.md#function-frobenius-fldfinelt)

    - [`Frobenius(a, r): FldFinElt, RngIntElt → FldFinElt`](operation-element.md#function-frobenius-fldfinelt-rngintelt)

    - [`Frobenius(a, E): FldFinElt, FldFin → FldFinElt`](operation-element.md#function-frobenius-fldfinelt-fldfin)

    - [`Frobenius(a, E, r): FldFinElt, FldFin, RngIntElt → FldFinElt`](operation-element.md#function-frobenius-fldfinelt-fldfin-rngintelt)

    - [`NormEquation(K, y): FldFin, FldFin → BoolElt, FldFinElt`](operation-element.md#function-normequation-fldfin-fldfin)

    - [`Hilbert90(a, q): FldFinElt, RngIntElt → FldFinElt`](operation-element.md#function-hilbert90-fldfinelt-rngintelt)

    - [`AdditiveHilbert90(a, q): FldFinElt, RngIntElt → FldFinElt`](operation-element.md#function-additivehilbert90-fldfinelt-rngintelt)

  - [Order and Roots](operation-element.md#order-and-roots)

    - [`Order(a): FldFinElt → RngIntElt`](operation-element.md#function-order-fldfinelt)

    - [`FactoredOrder(a): FldFinElt → RngIntElt`](operation-element.md#function-factoredorder-fldfinelt)

    - [`SquareRoot(a): FldFinElt → FldFinElt`](operation-element.md#function-squareroot-fldfinelt)

    - [`Sqrt(a): FldFinElt → FldFinElt`](operation-element.md#function-sqrt-fldfinelt)

    - [`Root(a, n): FldFinElt, RngIntElt → FldFinElt`](operation-element.md#function-root-fldfinelt-rngintelt)

    - [`IsPower(a, n): FldFinElt, RngIntElt → BoolElt, FldFinElt`](operation-element.md#function-ispower-fldfinelt-rngintelt)

    - [`AllRoots(a, n): FldFinElt, RngIntElt → SeqEnum`](operation-element.md#function-allroots-fldfinelt-rngintelt)

    - [`Example: Functions`](operation-element.md#example-ex-ead4e7)

- [Polynomials for Finite Fields](polynomial.md)

  - [`IrreduciblePolynomial(F, n): FldFin, RngIntElt → RngUPolElt`](polynomial.md#function-irreduciblepolynomial-fldfin-rngintelt)

  - [`RandomIrreduciblePolynomial(F, n): FldFin, RngIntElt → RngUPolElt`](polynomial.md#function-randomirreduciblepolynomial-fldfin-rngintelt)

  - [`IrreducibleLowTermGF2Polynomial(n): RngIntElt → RngUPolElt`](polynomial.md#function-irreduciblelowtermgf2polynomial)

  - [`IrreducibleSparseGF2Polynomial(n): RngIntElt → RngUPolElt`](polynomial.md#function-irreduciblesparsegf2polynomial)

  - [`PrimitivePolynomial(F, m): FldFin, RngIntElt → RngUPolElt`](polynomial.md#function-primitivepolynomial-fldfin-rngintelt)

  - [`AllIrreduciblePolynomials(F, m): FldFin, RngIntElt → { RngUPolElt }`](polynomial.md#function-allirreduciblepolynomials-fldfin-rngintelt)

  - [`ConwayPolynomial(p, n): RngIntElt, RngIntElt → RngUPolElt`](polynomial.md#function-conwaypolynomial-rngintelt-rngintelt)

  - [`ExistsConwayPolynomial(p, n): RngIntElt, RngIntElt → BoolElt, RngUPolElt`](polynomial.md#function-existsconwaypolynomial-rngintelt-rngintelt)

- [Discrete Logarithms](log.md)

  - [`Log(x): FldFinElt → RngIntElt`](log.md#function-log-fldfinelt)

  - [`Log(b, x): FldFinElt, FldFinElt → RngIntElt`](log.md#function-log-fldfinelt-fldfinelt)

  - [`ZechLog(K, n): FldFin, RngIntElt → RngIntElt`](log.md#function-zechlog-fldfin-rngintelt)

  - [`Sieve(K): FldFin`](log.md#function-ff-sieve)

  - [`SetVerbose("FFLog", v): MonStgElt, RngIntElt`](log.md#function-setverbose-monstgelt-rngintelt)

  - [`Example: Log`](log.md#example-ex-e6dfa5)

- [Permutation Polynomials](permutation-polynomials.md)

  - [`DicksonFirst(n, a): RngIntElt, RngElt → RngUPolElt`](permutation-polynomials.md#function-dicksonfirst-rngintelt-rngelt)

  - [`DicksonSecond(n, a): RngIntElt, RngElt → RngUPolElt`](permutation-polynomials.md#function-dicksonsecond-rngintelt-rngelt)

  - [`IsProbablyPermutationPolynomial(p): RngUPolElt → BoolElt`](permutation-polynomials.md#function-isprobablypermutationpolynomial-rngupolelt)

  - [`Example: Dickson`](permutation-polynomials.md#example-ex-41c38e)
