Computing binary matrices of field maps and of Frobenius #
noncomputable def
MIPRE.SAT.fieldMapMatrixProg
(f : Cost.PolyTimeFun (Cost.Unary × Cost.BitStr) Cost.BitStr)
:
Compute a field map on the polynomial basis, then transpose the column list.
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
MIPRE.SAT.fieldMapMatrixProg_correct
(k : ℕ)
(hk : 1 ≤ k)
(L : (shoupBinField k hk).carrier →ₗ[ZMod 2] (shoupBinField k hk).carrier)
(f : Cost.PolyTimeFun (Cost.Unary × Cost.BitStr) Cost.BitStr)
(hf :
∀ (a : (shoupBinField k hk).carrier),
f.toFun (Cost.unary k, (shoupBinField k hk).toBits a) = (shoupBinField k hk).toBits (L a))
:
(fieldMapMatrixProg f).toFun (Cost.unary k) = LowDegree.BinaryLinear.matrixBits ((LinearMap.toMatrix (shoupPowerBasis k hk) (shoupPowerBasis k hk)) L)
A canonically encoded linear map gives its exact matrix in the effective basis.
Frobenius as a binary linear map on the concrete quotient field.
Equations
Instances For
@[simp]
theorem
MIPRE.SAT.shoupFrobeniusLinear_apply
(k : ℕ)
(hk : 1 ≤ k)
(a : (shoupBinField k hk).carrier)
:
Frobenius in the actual polynomial-basis coordinates.
Equations
- MIPRE.SAT.shoupFrobeniusMatrix k hk = (LinearMap.toMatrix (MIPRE.SAT.shoupPowerBasis k hk) (MIPRE.SAT.shoupPowerBasis k hk)) (MIPRE.SAT.shoupFrobeniusLinear k hk)
Instances For
One squaring, including uniform modulus construction.
Equations
Instances For
theorem
MIPRE.SAT.shoupSquareProg_correct
(k : ℕ)
(hk : 1 ≤ k)
(a : (shoupBinField k hk).carrier)
:
shoupSquareProg.toFun (Cost.unary k, (shoupBinField k hk).toBits a) = (shoupBinField k hk).toBits ((shoupFrobeniusLinear k hk) a)
One polynomial-time program constructs the full binary Frobenius matrix.
Equations
Instances For
The full field degree is the degree of Frobenius's minimal polynomial.
The matrix computed by the program has period dividing the field degree.
theorem
MIPRE.SAT.shoupFrobeniusMatrix_squarefree
(k : ℕ)
(hk : 1 ≤ k)
(hodd : Odd k)
:
Squarefree (minpoly (ZMod 2) (shoupFrobeniusMatrix k hk))
Odd degree makes the Frobenius minimal polynomial squarefree.
theorem
MIPRE.SAT.shoupFrobeniusMatrixProg_time_le :
∃ (R : Polynomial ℕ),
∀ (k : ℕ),
∃ t ≤ Polynomial.eval k R,
shoupFrobeniusMatrixProg.code.Runs (Cost.encode (Cost.unary k))
(Cost.encode (shoupFrobeniusMatrixProg.toFun (Cost.unary k))) t
On unary degree input the complete matrix construction has polynomial runtime.