Trait scuttlebutt::field::IsSubFieldOf
source · [−]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
- When $
A$ and $B$ are written in the $\textsf{GF}(p^r)$ form, their primes are equal. - $
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
sourcetype DegreeModulo: ArrayLength<Self> + AnyArrayLength
type DegreeModulo: ArrayLength<Self> + AnyArrayLength
The value $n$ from above.
Required Methods
sourcefn decompose_superfield(fe: &FE) -> GenericArray<Self, Self::DegreeModulo>
fn decompose_superfield(fe: &FE) -> GenericArray<Self, Self::DegreeModulo>
Turn FE into an array of Self, a subfield of FE.
sourcefn form_superfield(components: &GenericArray<Self, Self::DegreeModulo>) -> FE
fn form_superfield(components: &GenericArray<Self, Self::DegreeModulo>) -> FE
Homomorphically lift an array of Self into an FE.