pub trait IsSubFieldOf<FE: FiniteField>: FiniteField + IsSubRingOf<FE> {
    type DegreeModulo: ArrayLength<Self> + AnyArrayLength;

    fn decompose_superfield(fe: &FE) -> GenericArray<Self, Self::DegreeModulo>;
    fn form_superfield(
        components: &GenericArray<Self, Self::DegreeModulo>
    ) -> FE; }
Expand description

Denotes that Self is a subfield of FE.

All finite fields can be written as $\textsf{GF}(p^r)$ where $p$ is prime.

Let the finite field $A$ denote Self and $B$ denote FE.

If $A$ is a subfield of $B$, it’s true that

  1. When $A$ and $B$ are written in the $\textsf{GF}(p^r)$ form, their primes are equal.
  2. $r_A \vert r_B$

Let $n$ be $\frac{r_B}{r_A}$.

$B$ is isomorphic to the set of polynomials of maximum degree $n$ where coefficients are taken from $A$. To put it another way, we can represent $B$ as vectors containing $n$ $A$ values.

Alternatives

These methods exist on the subfield type, which is not a natural API. You may prefer using FiniteField::decompose, FiniteField::from_subfield, or the type alias DegreeModulo.

Required Associated Types

The value $n$ from above.

Required Methods

Turn FE into an array of Self, a subfield of FE.

Homomorphically lift an array of Self into an FE.

Implementors