Documentation

MIPRE.Foundations.SAT.EffectiveSelfDual

Effective self-dualization of a supplied normal basis #

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

Apply a binary matrix to the columns of a supplied field basis.

Equations
Instances For
    theorem MIPRE.SAT.shoupChangedVectors_gram (k : ℕ) (hk : 1 ≤ k) (b : Module.Basis (Fin k) (ZMod 2) (shoupBinField k hk).carrier) (H : Matrix (Fin k) (Fin k) (ZMod 2)) :

    Basis changes transform the trace Gram matrix by the usual congruence.

    theorem MIPRE.SAT.shoupTraceGram_one_linearIndependent (k : ℕ) (hk : 1 ≤ k) (v : Fin k → (shoupBinField k hk).carrier) (hv : shoupTraceGram k hk v = 1) :

    An identity trace Gram matrix proves linear independence.

    theorem MIPRE.SAT.shoupChangedVectors_normal (k : ℕ) (hk : 1 ≤ k) [NeZero k] (b : Module.Basis (Fin k) (ZMod 2) (shoupBinField k hk).carrier) (hb : LowDegree.IsNormalBasis b) (h : Fin k → ZMod 2) :
    ∃ (a : (shoupBinField k hk).carrier), ∀ (i : Fin k), shoupChangedVectors k hk b (Matrix.circulant h) i = a ^ 2 ^ ↑i

    A circulant change of coordinates preserves the orbit form of a normal basis.

    noncomputable def MIPRE.SAT.shoupSelfDualVectors (k : ℕ) (hk : 1 ≤ k) [NeZero k] (b : Module.Basis (Fin k) (ZMod 2) (shoupBinField k hk).carrier) :

    The self-dualizing vectors computed from a supplied normal basis.

    Equations
    Instances For
      noncomputable def MIPRE.SAT.shoupSelfDualBasis (k : ℕ) (hk : 1 ≤ k) [NeZero k] (hodd : Odd k) (b : Module.Basis (Fin k) (ZMod 2) (shoupBinField k hk).carrier) (hb : LowDegree.IsNormalBasis b) :

      Self-dualization gives an actual basis with exactly the computed vectors.

      Equations
      Instances For
        theorem MIPRE.SAT.shoupSelfDualBasis_apply (k : ℕ) (hk : 1 ≤ k) [NeZero k] (hodd : Odd k) (b : Module.Basis (Fin k) (ZMod 2) (shoupBinField k hk).carrier) (hb : LowDegree.IsNormalBasis b) (i : Fin k) :
        (shoupSelfDualBasis k hk hodd b hb) i = shoupSelfDualVectors k hk b i

        Polynomial-basis coordinates of the changed family are the matrix product columns.

        Construct and apply the inverse Gram square root, returning the new basis vectors.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          theorem MIPRE.SAT.shoupSelfDualizeProg_correct (k : ℕ) (hk : 1 ≤ k) [NeZero k] (hodd : Odd k) (b : Module.Basis (Fin k) (ZMod 2) (shoupBinField k hk).carrier) (hb : LowDegree.IsNormalBasis b) :
          shoupSelfDualizeProg.toFun (Cost.unary k, List.ofFn fun (i : Fin k) => (shoupBinField k hk).toBits (b i)) = List.ofFn fun (i : Fin k) => (shoupBinField k hk).toBits ((shoupSelfDualBasis k hk hodd b hb) i)

          Every output vector is the canonical encoding of the constructed self-dual normal basis.

          The complete change of basis, including its Gram inverse, has polynomial runtime.