Documentation

CompPoly.Fields.Binary.AdditiveNTT.Domain

Additive NTT Domains #

Domain-level constructions for the Additive NTT: quotient maps, intermediate domains, and the finite-domain bijections used by the algorithm.

theorem AdditiveNTT.𝔽q_element_eq_zero_or_eq_one (𝔽q : Type u) [Field 𝔽q] [Fintype 𝔽q] [DecidableEq 𝔽q] [hF₂ : Fact (Fintype.card 𝔽q = 2)] (c : 𝔽q) :
c = 0 c = 1
noncomputable def AdditiveNTT.sDomain {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 r) :
Subspace 𝔽q L
Instances For
    noncomputable def AdditiveNTT.qMap {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] (𝔽q : Type u) [Field 𝔽q] [Fintype 𝔽q] [Algebra 𝔽q L] (β : Fin rL) (i : Fin r) :
    Instances For
      theorem AdditiveNTT.qMap_eval_𝔽q_eq_0 {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] (𝔽q : Type u) [Field 𝔽q] [Fintype 𝔽q] [Algebra 𝔽q L] (β : Fin rL) (i : Fin r) (c : 𝔽q) :
      Polynomial.eval ((algebraMap 𝔽q L) c) (qMap 𝔽q β i) = 0
      theorem AdditiveNTT.qMap_comp_normalizedW {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 β)] (i : Fin r) (h_i_add_1 : i + 1 < r) :
      (qMap 𝔽q β i).comp (normalizedW 𝔽q β i) = normalizedW 𝔽q β (i + 1)
      theorem AdditiveNTT.qMap_is_linear_map {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] (𝔽q : Type u) [Field 𝔽q] [Fintype 𝔽q] [h_Fq_char_prime : Fact (Nat.Prime (ringChar 𝔽q))] [Algebra 𝔽q L] (β : Fin rL) (i : Fin r) :
      IsLinearMap 𝔽q fun (inner_p : Polynomial L) => (qMap 𝔽q β i).comp inner_p
      theorem AdditiveNTT.qMap_maps_sDomain {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 r) (h_i_add_1 : i + 1 < r) :
      have q_comp_linear_map := ; have q_eval_linear_map := ; have q_i_map := polyEvalLinearMap (qMap 𝔽q β i) q_eval_linear_map; have S_i := sDomain 𝔽q β h_ℓ_add_R_rate i; have S_i_plus_1 := sDomain 𝔽q β h_ℓ_add_R_rate (i + 1); Submodule.map q_i_map S_i = S_i_plus_1
      @[irreducible]
      noncomputable def AdditiveNTT.qCompositionChain {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] (𝔽q : Type u) [Field 𝔽q] [Fintype 𝔽q] [Algebra 𝔽q L] (β : Fin rL) {R_rate : } (i : Fin r) :
      Instances For
        theorem AdditiveNTT.qCompositionChain_eq_foldl {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] (𝔽q : Type u) [Field 𝔽q] [Fintype 𝔽q] [Algebra 𝔽q L] (β : Fin rL) {R_rate : } (i : Fin r) :
        qCompositionChain 𝔽q β i = Fin.foldl (↑i) (fun (acc : Polynomial L) (j : Fin i) => (qMap 𝔽q β j, ).comp acc) Polynomial.X
        theorem AdditiveNTT.normalizedW_eq_qMap_composition {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 β)] [h_β₀_eq_1 : Fact (β 0 = 1)] (R_rate : ) (i : Fin r) :
        normalizedW 𝔽q β i = qCompositionChain 𝔽q β i
        noncomputable def AdditiveNTT.sDomainBasisVectors {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 r) :
        Fin ( + R_rate - i)L
        Instances For
          theorem AdditiveNTT.sDomainBasisVectors_mem_sDomain {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 r) (k : Fin ( + R_rate - i)) :
          sDomainBasisVectors 𝔽q β h_ℓ_add_R_rate i k sDomain 𝔽q β h_ℓ_add_R_rate i
          def AdditiveNTT.sBasis {r : } {L : Type u} (β : Fin rL) {R_rate : } (h_ℓ_add_R_rate : + R_rate < r) (i : Fin r) (h_i : i < + R_rate) :
          Fin ( + R_rate - i)L
          Instances For
            theorem AdditiveNTT.sBasis_range_eq {r : } {L : Type u} (β : Fin rL) {R_rate : } (h_ℓ_add_R_rate : + R_rate < r) (i : Fin r) (h_i : i < + R_rate) :
            β '' Set.Ico i + R_rate, h_ℓ_add_R_rate = Set.range (sBasis β h_ℓ_add_R_rate i h_i)
            theorem AdditiveNTT.sDomain_eq_image_of_upper_span {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 r) (h_i : i < + R_rate) :
            have V_i := Submodule.span 𝔽q (Set.range (sBasis β h_ℓ_add_R_rate i h_i)); have W_i_map := polyEvalLinearMap (normalizedW 𝔽q β i) ; sDomain 𝔽q β h_ℓ_add_R_rate i = Submodule.map W_i_map V_i
            noncomputable def AdditiveNTT.sDomain_basis {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 r) (h_i : i < + R_rate) :
            Module.Basis (Fin ( + R_rate - i)) 𝔽q (sDomain 𝔽q β h_ℓ_add_R_rate i)
            Instances For
              theorem AdditiveNTT.get_sDomain_basis {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 r) (h_i : i < + R_rate) (k : Fin ( + R_rate - i)) :
              ((sDomain_basis 𝔽q β h_ℓ_add_R_rate i h_i) k) = Polynomial.eval (β i + k, ) (normalizedW 𝔽q β i)
              theorem AdditiveNTT.get_sDomain_first_basis_eq_1 {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 r) (h_i : i < + R_rate) :
              ((sDomain_basis 𝔽q β h_ℓ_add_R_rate i h_i) 0, ) = 1
              @[implicit_reducible]
              noncomputable instance AdditiveNTT.fintype_sDomain {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 r) :
              Fintype (sDomain 𝔽q β h_ℓ_add_R_rate i)
              theorem AdditiveNTT.sDomain_card {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 r) (h_i : i < + R_rate) :
              Fintype.card (sDomain 𝔽q β h_ℓ_add_R_rate i) = Fintype.card 𝔽q ^ ( + R_rate - i)
              noncomputable def AdditiveNTT.splitPointIntoCoeffs {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] [DecidableEq L] (𝔽q : Type u) [Field 𝔽q] [Fintype 𝔽q] [DecidableEq 𝔽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 r) (h_i : i < + R_rate) (x : (sDomain 𝔽q β h_ℓ_add_R_rate i)) :
              Fin ( + R_rate - i)
              Instances For
                noncomputable def AdditiveNTT.sDomainToFin {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] [DecidableEq L] (𝔽q : Type u) [Field 𝔽q] [Fintype 𝔽q] [DecidableEq 𝔽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 r) (h_i : i < + R_rate) (x : (sDomain 𝔽q β h_ℓ_add_R_rate i)) :
                Fin (2 ^ ( + R_rate - i))
                Instances For
                  def AdditiveNTT.finToBinaryCoeffs {r : } (𝔽q : Type u) [Field 𝔽q] {R_rate : } (i : Fin r) (idx : Fin (2 ^ ( + R_rate - i))) :
                  Fin ( + R_rate - i)𝔽q
                  Instances For
                    theorem AdditiveNTT.finToBinaryCoeffs_sDomainToFin {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] [DecidableEq L] (𝔽q : Type u) [Field 𝔽q] [Fintype 𝔽q] [DecidableEq 𝔽q] [h_Fq_char_prime : Fact (Nat.Prime (ringChar 𝔽q))] [hF₂ : Fact (Fintype.card 𝔽q = 2)] [Algebra 𝔽q L] (β : Fin rL) [hβ_lin_indep : Fact (LinearIndependent 𝔽q β)] {R_rate : } (h_ℓ_add_R_rate : + R_rate < r) (i : Fin r) (h_i : i < + R_rate) (x : (sDomain 𝔽q β h_ℓ_add_R_rate i)) :
                    have pointFinIdx := sDomainToFin 𝔽q β h_ℓ_add_R_rate i h_i x; finToBinaryCoeffs 𝔽q i pointFinIdx = ((sDomain_basis 𝔽q β h_ℓ_add_R_rate i h_i).repr x)
                    noncomputable def AdditiveNTT.finToSDomain {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 r) (h_i : i < + R_rate) (idx : Fin (2 ^ ( + R_rate - i))) :
                    (sDomain 𝔽q β h_ℓ_add_R_rate i)
                    Instances For
                      noncomputable def AdditiveNTT.sDomainFinEquiv {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] [DecidableEq L] (𝔽q : Type u) [Field 𝔽q] [Fintype 𝔽q] [DecidableEq 𝔽q] [h_Fq_char_prime : Fact (Nat.Prime (ringChar 𝔽q))] [hF₂ : Fact (Fintype.card 𝔽q = 2)] [Algebra 𝔽q L] (β : Fin rL) [hβ_lin_indep : Fact (LinearIndependent 𝔽q β)] {R_rate : } (h_ℓ_add_R_rate : + R_rate < r) (i : Fin r) (h_i : i < + R_rate) :
                      (sDomain 𝔽q β h_ℓ_add_R_rate i) Fin (2 ^ ( + R_rate - i))
                      Instances For
                        theorem AdditiveNTT.sDomainFin_bijective {r : } [NeZero r] {L : Type u} [Field L] [Fintype L] [DecidableEq L] (𝔽q : Type u) [Field 𝔽q] [Fintype 𝔽q] [DecidableEq 𝔽q] [h_Fq_char_prime : Fact (Nat.Prime (ringChar 𝔽q))] [hF₂ : Fact (Fintype.card 𝔽q = 2)] [Algebra 𝔽q L] (β : Fin rL) [hβ_lin_indep : Fact (LinearIndependent 𝔽q β)] {R_rate : } (h_ℓ_add_R_rate : + R_rate < r) (i : Fin r) (h_i : i < + R_rate) :
                        Function.Bijective (sDomainFinEquiv 𝔽q β h_ℓ_add_R_rate i h_i)