Documentation

MIPRE.Foundations.SAT.BasisTransport

Polynomial-time transport to any supplied binary field basis #

noncomputable def MIPRE.SAT.shoupBasisMatrix (k : ℕ) (hk : 1 ≤ k) (b : Module.Basis (Fin k) (ZMod 2) (shoupBinField k hk).carrier) :
Matrix (Fin k) (Fin k) (ZMod 2)

Columns of a new basis in the original, effective polynomial basis.

Equations
Instances For

    The supplied basis vectors are exactly the columns of the change-of-basis matrix.

    Matrix application sends the new coordinates to the original coordinates.

    Read a field element in an arbitrary basis supplied as polynomial-basis vectors.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For

      The computed coordinates are exactly the mathematical basis coordinates.

      All multiplication-table bits, with the two basis indices as the first two list indices.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        Table transport is correct for every supplied basis, including a self-dual normal basis.

        theorem MIPRE.SAT.esize_shoupBasis (k : ℕ) (hk : 1 ≤ k) (v : Fin k → (shoupBinField k hk).carrier) :
        Cost.esize (List.ofFn fun (i : Fin k) => (shoupBinField k hk).toBits (v i)) ≤ k * (4 * k + 2) + 1

        A k-vector field basis has quadratic encoded size.

        Printing all k³ table bits, including every solve, takes polynomial time in k.