Reduction into the executable finite field is a ring homomorphism.
The component facts live on the quotient-ring layer; this bundles them so that
Mathlib constructions needing a RingHom can be pointed at the executable
field.
Equations
- HexGFqMathlib.ofPolyHom f hf hp hirr = { toFun := Hex.GFqField.ofPoly f hf hp hirr, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
The constant embedding ZMod p →+* FpPoly p, routing Mathlib's coefficient
ring through the executable ZMod64 p.
Equations
- HexGFqMathlib.constPolyHom = { toFun := fun (c : ZMod p) => Hex.DensePoly.C (HexModArithMathlib.ZMod64.ofZMod c), map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Constants of the executable finite field, as a ring homomorphism from
Mathlib's coefficient ring. This is what instantiates
Polynomial.eval₂RingHom.
Equations
- HexGFqMathlib.constHom f hf hp hirr = (HexGFqMathlib.ofPolyHom f hf hp hirr).comp HexGFqMathlib.constPolyHom
Instances For
Substituting b and reducing agrees with evaluating at the reduction of
b, for every polynomial.
Substitution into the executable field, as a ring homomorphism out of the
executable polynomials: g ↦ g(b) in F_p[x] / (f).
Equations
- HexGFqMathlib.substHom f hf hp hirr b = (Polynomial.eval₂RingHom (HexGFqMathlib.constHom f hf hp hirr) ((HexGFqMathlib.ofPolyHom f hf hp hirr) b)).comp HexPolyFpMathlib.fpPolyEquiv.toRingHom
Instances For
Substitution is insensitive to reduction modulo a polynomial it kills.
This is the descent step: two representatives of the same residue differ by a multiple of the modulus, so if the modulus is sent to zero they have the same image.
The class of X in the Conway presentation of GFq p n.
Equations
- HexGFqMathlib.conwayX p n hn = (HexGFqMathlib.ofPolyHom (Hex.Conway.conwayPoly p n hn) ⋯ ⋯ ⋯) Hex.FpPoly.X
Instances For
The norm element of GFq p n, as a field element rather than a
representative: where the generator of the degree-m subfield goes.
Equations
- HexGFqMathlib.conwayGen p m n hn = (HexGFqMathlib.ofPolyHom (Hex.Conway.conwayPoly p n hn) ⋯ ⋯ ⋯) (Hex.Conway.normX (Hex.Conway.conwayPoly p n hn) ⋯ m (n / m))
Instances For
The computed Conway subfield generator is the explicit finite-field norm
power of the ambient class of X.
Substituting the norm element kills the smaller Conway polynomial.
This is Tier 2 compatibility, carried from the executable Bool check to the
statement a descent needs.
The canonical embedding of the degree-m Conway field into the degree-n one.
Given m ∣ n and compatibility of the two committed entries, this is a genuine
ring homomorphism GFq p m →+* GFq p n: substitute the norm element for the
generator. It is canonical because the target is the Conway norm rather than an
arbitrary root of C(p, m), so two callers embedding GF(p^m) into GF(p^n)
land on the same copy. That is the property the Conway table exists to provide,
and Tier 2 compatibility is what makes the substitution well defined.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The Conway embedding sends the source class of X to the computed subfield
generator. Together with conwayGen_eq_norm, this identifies its image
with the finite-field norm power in the target.
The Conway embedding sends the source class of X directly to the
explicit finite-field norm power of the target class of X.