Documentation

CompPoly.Fields.Binary.AdditiveNTT.Algorithm

Additive NTT Algorithm #

Core Additive NTT data flow: evaluation points, twiddle factors, stage/update definitions, coefficient tiling, and the stage invariant.

noncomputable def AdditiveNTT.evaluationPointω {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] (𝔽q : Type u) [Field 𝔽q] [Algebra 𝔽q L] (β : Fin rL) {R_rate : } (h_ℓ_add_R_rate : + R_rate < r) (i : Fin ( + 1)) (x : Fin (2 ^ ( + R_rate - i))) :
L
Instances For
    noncomputable def AdditiveNTT.twiddleFactor {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] (𝔽q : Type u) [Field 𝔽q] [Algebra 𝔽q L] (β : Fin rL) {R_rate : } (h_ℓ_add_R_rate : + R_rate < r) (i : Fin ) (u : Fin (2 ^ ( + R_rate - i - 1))) :
    L
    Instances For
      theorem AdditiveNTT.evaluationPointω_eq_twiddleFactor_of_div_2 {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] (𝔽q : Type u) [Field 𝔽q] [Algebra 𝔽q L] (β : Fin rL) {R_rate : } (h_ℓ_add_R_rate : + R_rate < r) (i : Fin ) (x : Fin (2 ^ ( + R_rate - i))) :
      evaluationPointω 𝔽q β h_ℓ_add_R_rate i, x = twiddleFactor 𝔽q β h_ℓ_add_R_rate i, x / 2, + ↑(x % 2) * Polynomial.eval (β i, ) (normalizedW 𝔽q β i, )
      theorem AdditiveNTT.eval_point_ω_eq_next_twiddleFactor_comp_qmap {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] [DecidableEq L] (𝔽q : Type u) [Field 𝔽q] [Fintype 𝔽q] [h_Fq_char_prime : Fact (Nat.Prime (ringChar 𝔽q))] [Algebra 𝔽q L] (β : Fin rL) [hβ_lin_indep : Fact (LinearIndependent 𝔽q β)] {R_rate : } (h_ℓ_add_R_rate : + R_rate < r) (i : Fin ) (x : Fin (2 ^ ( + R_rate - (i + 1)))) :
      evaluationPointω 𝔽q β h_ℓ_add_R_rate i + 1, x = Polynomial.eval (twiddleFactor 𝔽q β h_ℓ_add_R_rate i, x, ) (qMap 𝔽q β i, )
      def AdditiveNTT.tileCoeffs {L : Type u} {R_rate : } (a : Fin (2 ^ )L) :
      Fin (2 ^ ( + R_rate))L
      Instances For
        noncomputable def AdditiveNTT.NTTStage {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] (𝔽q : Type u) [Field 𝔽q] [Algebra 𝔽q L] (β : Fin rL) {R_rate : } (h_ℓ_add_R_rate : + R_rate < r) (i : Fin ) (b : Fin (2 ^ ( + R_rate))L) :
        Fin (2 ^ ( + R_rate))L
        Instances For
          noncomputable def AdditiveNTT.additiveNTT {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] (𝔽q : Type u) [Field 𝔽q] [Algebra 𝔽q L] (β : Fin rL) {R_rate : } (h_ℓ_add_R_rate : + R_rate < r) (a : Fin (2 ^ )L) :
          Fin (2 ^ ( + R_rate))L
          Instances For
            def AdditiveNTT.coeffsBySuffix {r : } {L : Type u} {R_rate : } (a : Fin (2 ^ )L) (i : Fin ( + 1)) (v : Fin (2 ^ i)) :
            Fin (2 ^ ( - i))L
            Instances For
              theorem AdditiveNTT.base_coeffsBySuffix {r : } {L : Type u} {R_rate : } (a : Fin (2 ^ )L) :
              theorem AdditiveNTT.evenRefinement_eq_novel_poly_of_0_leading_suffix {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] (𝔽q : Type u) [Field 𝔽q] [Fintype 𝔽q] [Algebra 𝔽q L] (β : Fin rL) {R_rate : } (h_ℓ_add_R_rate : + R_rate < r) (i : Fin ) (v : Fin (2 ^ i)) (original_coeffs : Fin (2 ^ )L) :
              have h_v := ; evenRefinement 𝔽q β h_ℓ_add_R_rate i (coeffsBySuffix original_coeffs i, v) = intermediateEvaluationPoly 𝔽q β h_ℓ_add_R_rate i + 1, (coeffsBySuffix original_coeffs i + 1, v, h_v)
              theorem AdditiveNTT.oddRefinement_eq_novel_poly_of_1_leading_suffix {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] (𝔽q : Type u) [Field 𝔽q] [Fintype 𝔽q] [Algebra 𝔽q L] (β : Fin rL) {R_rate : } (h_ℓ_add_R_rate : + R_rate < r) (i : Fin ) (v : Fin (2 ^ i)) (original_coeffs : Fin (2 ^ )L) :
              have h_v := ; oddRefinement 𝔽q β h_ℓ_add_R_rate i (coeffsBySuffix original_coeffs i, v) = intermediateEvaluationPoly 𝔽q β h_ℓ_add_R_rate i + 1, (coeffsBySuffix original_coeffs i + 1, v ||| 1 <<< i, h_v)
              def AdditiveNTT.additiveNTTInvariant {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] (𝔽q : Type u) [Field 𝔽q] [Fintype 𝔽q] [Algebra 𝔽q L] (β : Fin rL) {R_rate : } (h_ℓ_add_R_rate : + R_rate < r) (evaluation_buffer : Fin (2 ^ ( + R_rate))L) (original_coeffs : Fin (2 ^ )L) (i : Fin ( + 1)) :
              Instances For