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
.