The explicit odd-prime-power construction program #
The full binary modulus for Shoup's flat auxiliary extension.
Equations
Instances For
The lower coefficients used by quotient arithmetic.
Equations
Instances For
The trace generator in the explicitly represented flat extension.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Print the descended orbit polynomial of the trace generator.
Equations
- One or more equations did not get rendered due to their size.
Instances For
One total polynomial-time program takes unary prime and requested prime-power degree.
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem
MIPRE.LowDegree.BinaryPolynomial.polyOfBits_oddExtensionBits
(q r : ℕ)
(hr : 0 < r)
:
polyOfBits (oddExtensionBits (Cost.unary q) (Cost.unary r)) = (polyOfBits (nonresidueLiftBitsProg.toFun (Cost.unary q))).comp (Polynomial.X ^ r)
The flat printed modulus has the exact Kummer composition semantics.
theorem
MIPRE.LowDegree.BinaryPolynomial.oddExtensionBits_correct
(q e : ℕ)
(hq : Nat.Prime q)
(hq2 : q ≠ 2)
:
have a := oddExtensionBits (Cost.unary q) (Cost.unary (q ^ e));
List.getLastD a false = true ∧ (polyOfBits a).Monic ∧ Irreducible (polyOfBits a) ∧ (polyOfBits a).natDegree = (polyOfBits (cyclotomicSeedBits (Cost.unary q))).natDegree * q ^ e
Every requested odd-prime-power flat modulus is a canonical irreducible polynomial.
theorem
MIPRE.LowDegree.BinaryPolynomial.oddExtensionLowerBits_spec
(q e : ℕ)
(hq : Nat.Prime q)
(hq2 : q ≠ 2)
:
have a := oddExtensionBits (Cost.unary q) (Cost.unary (q ^ e));
have p := oddExtensionLowerBits (Cost.unary q) (Cost.unary (q ^ e));
List.length p = (polyOfBits a).natDegree ∧ polyOfBits a = polyOfBits (p ++ [true]) ∧ p ≠ []
Every lower extension representation has the correct modulus width and equation.
The trace vector has exactly the flat extension width.
theorem
MIPRE.LowDegree.BinaryPolynomial.evalBits_oddTraceBits_of_root
{R : Type u_1}
[CommRing R]
[CharP R 2]
(z : R)
(q e : ℕ)
(hq : Nat.Prime q)
(hq2 : q ≠ 2)
(hz :
z ^ List.length (oddExtensionLowerBits (Cost.unary q) (Cost.unary (q ^ e))) = evalBits z (oddExtensionLowerBits (Cost.unary q) (Cost.unary (q ^ e))))
:
evalBits z (oddTraceBits (Cost.unary q) (Cost.unary (q ^ e))) = ∑ i ∈ Finset.range (polyOfBits (cyclotomicSeedBits (Cost.unary q))).natDegree, z ^ 2 ^ (q ^ e * i)
Interpreting the printed trace vector gives Shoup's precise Frobenius-stride sum.