Analysis of Boolean Functions in Lean

6.3. Constructions of various pseudorandom functions🔗

Definition6.3.1
Group: Chapter 6: Pseudorandomness and F₂-polynomials (115)
Group member previews
Preview
Proposition 6.1.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
uses 1
Used by 11
Reverse dependency previews
Preview
Lemma 6.2.18
Loading preview
Reverse dependency preview content is loaded from the rendered-fragment cache.
L∃∀N

Definition 6.26. Let n be even. A function f:\mathbb F_2^n\to\{-1,1\} is bent if |\widehat f(\gamma)|=2^{-n/2} \qquad\text{for every }\gamma\in\widehat{\mathbb F_2^n}.

Lean code for Definition6.3.12 definitions
  • defdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    def FABL.IsSignValued {n : } (f : FABL.F₂Cube n  ) : Prop
    def FABL.IsSignValued {n : }
      (f : FABL.F₂Cube n  ) : Prop
    A real-valued function on the binary cube takes only sign values. 
  • defdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    def FABL.IsBent {n : } (f : FABL.F₂Cube n  ) : Prop
    def FABL.IsBent {n : }
      (f : FABL.F₂Cube n  ) : Prop
    O'Donnell, Definition 6.26: every normalized Fourier coefficient has magnitude
    `2⁻ⁿᐟ²`. The book applies this predicate in even dimension to sign-valued functions. 
Lemma6.3.2
Group: Chapter 6: Pseudorandomness and F₂-polynomials (115)
Group member previews
Preview
Proposition 6.1.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
Statement uses 4
Statement dependency previews
Preview
Theorem 1.4.2
Loading preview
Statement dependency preview content is loaded from the rendered-fragment cache.
used by 0L∃∀N

Extremality of bent functions. For every f:\mathbb F_2^n\to\{-1,1\}, Parseval's Theorem implies \max_{\gamma}|\widehat f(\gamma)|\ge 2^{-n/2}. Moreover, \min_{\substack{\gamma\in\widehat{\mathbb F_2^n}\\ \sigma\in\{-1,1\}}} \operatorname{dist}(f,\sigma\chi_\gamma) =\frac12-\frac12\max_\gamma|\widehat f(\gamma)|. Consequently, bent functions are exactly the Boolean functions that attain the largest possible distance \frac12-2^{-n/2-1} from the class of affine sign functions.

Lean code for Lemma6.3.29 declarations
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.sum_sq_vectorFourierCoeff_eq_one {n : } {f : FABL.F₂Cube n  }
      (hf : FABL.IsSignValued f) :  γ, FABL.vectorFourierCoeff f γ ^ 2 = 1
    theorem FABL.sum_sq_vectorFourierCoeff_eq_one
      {n : } {f : FABL.F₂Cube n  }
      (hf : FABL.IsSignValued f) :
       γ, FABL.vectorFourierCoeff f γ ^ 2 = 1
    Parseval gives unit Fourier square mass for a sign-valued function. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.exists_inv_card_le_sq_vectorFourierCoeff {n : }
      {f : FABL.F₂Cube n  } (hf : FABL.IsSignValued f) :
       γ, (2 ^ n)⁻¹  FABL.vectorFourierCoeff f γ ^ 2
    theorem FABL.exists_inv_card_le_sq_vectorFourierCoeff
      {n : } {f : FABL.F₂Cube n  }
      (hf : FABL.IsSignValued f) :
       γ,
        (2 ^ n)⁻¹ 
          FABL.vectorFourierCoeff f γ ^ 2
    Some Fourier coefficient of a sign-valued function has squared magnitude at least
    the reciprocal of the number of cube points. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.exists_bent_extremal_coefficient {n : } {f : FABL.F₂Cube n  }
      (hn : Even n) (hf : FABL.IsSignValued f) :
       γ, (2 ^ (n / 2))⁻¹  |FABL.vectorFourierCoeff f γ|
    theorem FABL.exists_bent_extremal_coefficient
      {n : } {f : FABL.F₂Cube n  }
      (hn : Even n)
      (hf : FABL.IsSignValued f) :
       γ,
        (2 ^ (n / 2))⁻¹ 
          |FABL.vectorFourierCoeff f γ|
    Bent functions attain the Parseval lower bound for the largest Fourier magnitude. 
  • defdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    def FABL.affineSignFunction {n : } (σ : FABL.Sign) (γ : FABL.F₂Cube n) :
      FABL.F₂Cube n  
    def FABL.affineSignFunction {n : }
      (σ : FABL.Sign) (γ : FABL.F₂Cube n) :
      FABL.F₂Cube n  
    A real-valued affine sign `σ χ_γ` on the binary cube. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.relativeHammingDist_affineSignFunction {n : }
      {f : FABL.F₂Cube n  } (hf : FABL.IsSignValued f) (σ : FABL.Sign)
      (γ : FABL.F₂Cube n) :
      FABL.relativeHammingDist f (FABL.affineSignFunction σ γ) =
        1 / 2 - FABL.signValue σ * FABL.vectorFourierCoeff f γ / 2
    theorem FABL.relativeHammingDist_affineSignFunction
      {n : } {f : FABL.F₂Cube n  }
      (hf : FABL.IsSignValued f)
      (σ : FABL.Sign) (γ : FABL.F₂Cube n) :
      FABL.relativeHammingDist f
          (FABL.affineSignFunction σ γ) =
        1 / 2 -
          FABL.signValue σ *
              FABL.vectorFourierCoeff f γ /
            2
    Distance from a sign-valued function to an affine sign is one half minus one
    half of the corresponding signed Fourier coefficient. 
  • defdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    def FABL.distanceToAffineSigns {n : } (f : FABL.F₂Cube n  ) : 
    def FABL.distanceToAffineSigns {n : }
      (f : FABL.F₂Cube n  ) : 
    The least relative Hamming distance from a real-valued function to an affine sign. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.distanceToAffineSigns_eq {n : } {f : FABL.F₂Cube n  }
      (hf : FABL.IsSignValued f) :
      FABL.distanceToAffineSigns f = 1 / 2 - FABL.spectralInfinityNorm f / 2
    theorem FABL.distanceToAffineSigns_eq {n : }
      {f : FABL.F₂Cube n  }
      (hf : FABL.IsSignValued f) :
      FABL.distanceToAffineSigns f =
        1 / 2 -
          FABL.spectralInfinityNorm f / 2
    The closest affine sign is determined by a largest Fourier coefficient and its
    optimizing global sign. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.distanceToAffineSigns_le_bentBound {n : } {f : FABL.F₂Cube n  }
      (hn : Even n) (hf : FABL.IsSignValued f) :
      FABL.distanceToAffineSigns f  1 / 2 - (2 ^ (n / 2))⁻¹ / 2
    theorem FABL.distanceToAffineSigns_le_bentBound
      {n : } {f : FABL.F₂Cube n  }
      (hn : Even n)
      (hf : FABL.IsSignValued f) :
      FABL.distanceToAffineSigns f 
        1 / 2 - (2 ^ (n / 2))⁻¹ / 2
    No sign-valued function is farther from all affine signs than the bent
    distance. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.isBent_iff_distanceToAffineSigns_eq {n : } {f : FABL.F₂Cube n  }
      (hn : Even n) (hf : FABL.IsSignValued f) :
      FABL.IsBent f 
        FABL.distanceToAffineSigns f = 1 / 2 - (2 ^ (n / 2))⁻¹ / 2
    theorem FABL.isBent_iff_distanceToAffineSigns_eq
      {n : } {f : FABL.F₂Cube n  }
      (hn : Even n)
      (hf : FABL.IsSignValued f) :
      FABL.IsBent f 
        FABL.distanceToAffineSigns f =
          1 / 2 - (2 ^ (n / 2))⁻¹ / 2
    Bent functions are exactly the sign-valued functions attaining the largest
    possible distance from the affine signs. 
Lemma6.3.3
Group: Chapter 6: Pseudorandomness and F₂-polynomials (115)
Group member previews
Preview
Proposition 6.1.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
Statement uses 4
Statement dependency previews
Preview
Lemma 5.1.3
Loading preview
Statement dependency preview content is loaded from the rendered-fragment cache.
used by 0L∃∀N

Canonical bent functions. The inner-product-mod-2 function \operatorname{IP}_{2m}(x,y)=(-1)^{x\cdot y}, \qquad x,y\in\mathbb F_2^m, is bent. For m=1 this is the two-bit AND function in the sign encoding. The complete quadratic function \operatorname{CQ}_n(x) =(-1)^{\sum_{1\le i<j\le n}x_ix_j} is also bent when n is even; it is obtained from the inner-product function by an invertible linear change of variables and multiplication by an affine sign.

Lean code for Lemma6.3.34 theorems
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.isSignValued_innerProductModTwo (n : ) :
      FABL.IsSignValued (FABL.innerProductModTwo n)
    theorem FABL.isSignValued_innerProductModTwo
      (n : ) :
      FABL.IsSignValued
        (FABL.innerProductModTwo n)
    The inner-product-mod-two construction has sign-valued real outputs. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.isBent_innerProductModTwo (n : ) :
      FABL.IsBent (FABL.innerProductModTwo n)
    theorem FABL.isBent_innerProductModTwo (n : ) :
      FABL.IsBent (FABL.innerProductModTwo n)
    The inner-product-mod-two function is bent in its naturally even dimension. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.isSignValued_completeQuadratic (n : ) :
      FABL.IsSignValued (FABL.completeQuadratic n)
    theorem FABL.isSignValued_completeQuadratic
      (n : ) :
      FABL.IsSignValued
        (FABL.completeQuadratic n)
    The complete quadratic construction has sign-valued real outputs. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.isBent_completeQuadratic {n : } (hn : Even n) :
      FABL.IsBent (FABL.completeQuadratic n)
    theorem FABL.isBent_completeQuadratic {n : }
      (hn : Even n) :
      FABL.IsBent (FABL.completeQuadratic n)
    The complete quadratic function is bent in every even dimension. 
Proposition6.3.4
Group: Chapter 6: Pseudorandomness and F₂-polynomials (115)
Group member previews
Preview
Proposition 6.1.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
Statement uses 2
Statement dependency previews
Preview
Lemma 6.2.18
Loading preview
Statement dependency preview content is loaded from the rendered-fragment cache.
used by 0L∃∀N

Proposition 6.27. If f:\mathbb F_2^n\to\{-1,1\} and g:\mathbb F_2^{n'}\to\{-1,1\} are bent, then (f\oplus g)(x,x')=f(x)g(x') defines a bent function on \mathbb F_2^{n+n'}.

Lean code for Proposition6.3.43 declarations
  • defdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    def FABL.bentDirectProduct {n m : } (f : FABL.F₂Cube n  )
      (g : FABL.F₂Cube m  ) : FABL.F₂Cube (n + m)  
    def FABL.bentDirectProduct {n m : }
      (f : FABL.F₂Cube n  )
      (g : FABL.F₂Cube m  ) :
      FABL.F₂Cube (n + m)  
    O'Donnell, Proposition 6.27: the direct product of functions on two binary cubes. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.IsSignValued.directProduct {n m : } {f : FABL.F₂Cube n  }
      {g : FABL.F₂Cube m  } (hf : FABL.IsSignValued f)
      (hg : FABL.IsSignValued g) :
      FABL.IsSignValued (FABL.bentDirectProduct f g)
    theorem FABL.IsSignValued.directProduct {n m : }
      {f : FABL.F₂Cube n  }
      {g : FABL.F₂Cube m  }
      (hf : FABL.IsSignValued f)
      (hg : FABL.IsSignValued g) :
      FABL.IsSignValued
        (FABL.bentDirectProduct f g)
    Direct products preserve sign-valuedness. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.IsBent.directProduct {n m : } {f : FABL.F₂Cube n  }
      {g : FABL.F₂Cube m  } (hn : Even n) (hm : Even m)
      (hf : FABL.IsBent f) (hg : FABL.IsBent g) :
      FABL.IsBent (FABL.bentDirectProduct f g)
    theorem FABL.IsBent.directProduct {n m : }
      {f : FABL.F₂Cube n  }
      {g : FABL.F₂Cube m  } (hn : Even n)
      (hm : Even m) (hf : FABL.IsBent f)
      (hg : FABL.IsBent g) :
      FABL.IsBent (FABL.bentDirectProduct f g)
    O'Donnell, Proposition 6.27: direct products preserve bentness. 
Proposition6.3.5
Group: Chapter 6: Pseudorandomness and F₂-polynomials (115)
Group member previews
Preview
Proposition 6.1.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
Statement uses 3
Statement dependency previews
Preview
Theorem 1.2.3
Loading preview
Statement dependency preview content is loaded from the rendered-fragment cache.
Used by 2
Reverse dependency previews
Preview
Lemma 6.3.3
Loading preview
Reverse dependency preview content is loaded from the rendered-fragment cache.
L∃∀N

Proposition 6.28. Let f:\mathbb F_2^n\to\{-1,1\} be bent. For every \gamma\in\widehat{\mathbb F_2^n}, each function \pm\chi_\gamma f is bent. If M:\mathbb F_2^n\to\mathbb F_2^n is an invertible linear transformation, then f\circ M is bent.

Lean code for Proposition6.3.58 declarations
  • defdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    def FABL.bentAffineModulation {n : } (σ : FABL.Sign) (a : FABL.F₂Cube n)
      (f : FABL.F₂Cube n  ) : FABL.F₂Cube n  
    def FABL.bentAffineModulation {n : }
      (σ : FABL.Sign) (a : FABL.F₂Cube n)
      (f : FABL.F₂Cube n  ) :
      FABL.F₂Cube n  
    The affine-sign modulation `σ χₐ f`. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.vectorFourierCoeff_bentAffineModulation {n : } (σ : FABL.Sign)
      (a γ : FABL.F₂Cube n) (f : FABL.F₂Cube n  ) :
      FABL.vectorFourierCoeff (FABL.bentAffineModulation σ a f) γ =
        FABL.signValue σ * FABL.vectorFourierCoeff f (a + γ)
    theorem FABL.vectorFourierCoeff_bentAffineModulation
      {n : } (σ : FABL.Sign)
      (a γ : FABL.F₂Cube n)
      (f : FABL.F₂Cube n  ) :
      FABL.vectorFourierCoeff
          (FABL.bentAffineModulation σ a f)
          γ =
        FABL.signValue σ *
          FABL.vectorFourierCoeff f (a + γ)
    Fourier coefficients of an affine-sign modulation are translated and multiplied
    by the global sign. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.IsSignValued.affineModulation {n : } {f : FABL.F₂Cube n  }
      (hf : FABL.IsSignValued f) (σ : FABL.Sign) (a : FABL.F₂Cube n) :
      FABL.IsSignValued (FABL.bentAffineModulation σ a f)
    theorem FABL.IsSignValued.affineModulation {n : }
      {f : FABL.F₂Cube n  }
      (hf : FABL.IsSignValued f)
      (σ : FABL.Sign) (a : FABL.F₂Cube n) :
      FABL.IsSignValued
        (FABL.bentAffineModulation σ a f)
    Affine-sign modulation preserves sign-valuedness. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.IsBent.affineModulation {n : } {f : FABL.F₂Cube n  }
      (_hn : Even n) (hf : FABL.IsBent f) (σ : FABL.Sign)
      (a : FABL.F₂Cube n) : FABL.IsBent (FABL.bentAffineModulation σ a f)
    theorem FABL.IsBent.affineModulation {n : }
      {f : FABL.F₂Cube n  } (_hn : Even n)
      (hf : FABL.IsBent f) (σ : FABL.Sign)
      (a : FABL.F₂Cube n) :
      FABL.IsBent
        (FABL.bentAffineModulation σ a f)
    O'Donnell, Proposition 6.28: multiplication by either sign and a Walsh character
    preserves bentness. 
  • defdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    def FABL.bentLinearReindex {n : }
      (M : FABL.F₂Cube n ≃ₗ[FABL.𝔽₂] FABL.F₂Cube n)
      (f : FABL.F₂Cube n  ) : FABL.F₂Cube n  
    def FABL.bentLinearReindex {n : }
      (M :
        FABL.F₂Cube n ≃ₗ[FABL.𝔽₂]
          FABL.F₂Cube n)
      (f : FABL.F₂Cube n  ) :
      FABL.F₂Cube n  
    Precomposition by an invertible linear map on the binary cube. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.vectorFourierCoeff_bentLinearReindex {n : }
      (M : FABL.F₂Cube n ≃ₗ[FABL.𝔽₂] FABL.F₂Cube n) (f : FABL.F₂Cube n  )
      (γ : FABL.F₂Cube n) :
      FABL.vectorFourierCoeff (FABL.bentLinearReindex M f) γ =
        FABL.vectorFourierCoeff f (FABL.bentDualFrequency M γ)
    theorem FABL.vectorFourierCoeff_bentLinearReindex
      {n : }
      (M :
        FABL.F₂Cube n ≃ₗ[FABL.𝔽₂]
          FABL.F₂Cube n)
      (f : FABL.F₂Cube n  )
      (γ : FABL.F₂Cube n) :
      FABL.vectorFourierCoeff
          (FABL.bentLinearReindex M f) γ =
        FABL.vectorFourierCoeff f
          (FABL.bentDualFrequency M γ)
    Fourier coefficients under an invertible linear reindexing are indexed by the
    corresponding dual frequency. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.IsSignValued.linearReindex {n : } {f : FABL.F₂Cube n  }
      (hf : FABL.IsSignValued f)
      (M : FABL.F₂Cube n ≃ₗ[FABL.𝔽₂] FABL.F₂Cube n) :
      FABL.IsSignValued (FABL.bentLinearReindex M f)
    theorem FABL.IsSignValued.linearReindex {n : }
      {f : FABL.F₂Cube n  }
      (hf : FABL.IsSignValued f)
      (M :
        FABL.F₂Cube n ≃ₗ[FABL.𝔽₂]
          FABL.F₂Cube n) :
      FABL.IsSignValued
        (FABL.bentLinearReindex M f)
    Invertible linear reindexing preserves sign-valuedness. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.IsBent.linearReindex {n : } {f : FABL.F₂Cube n  } (_hn : Even n)
      (hf : FABL.IsBent f) (M : FABL.F₂Cube n ≃ₗ[FABL.𝔽₂] FABL.F₂Cube n) :
      FABL.IsBent (FABL.bentLinearReindex M f)
    theorem FABL.IsBent.linearReindex {n : }
      {f : FABL.F₂Cube n  } (_hn : Even n)
      (hf : FABL.IsBent f)
      (M :
        FABL.F₂Cube n ≃ₗ[FABL.𝔽₂]
          FABL.F₂Cube n) :
      FABL.IsBent (FABL.bentLinearReindex M f)
    O'Donnell, Proposition 6.28: precomposition by an invertible linear
    transformation preserves bentness. 
Proposition6.3.6
Group: Chapter 6: Pseudorandomness and F₂-polynomials (115)
Group member previews
Preview
Proposition 6.1.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
Statement uses 3
Statement dependency previews
Preview
Lemma 1.3.5
Loading preview
Statement dependency preview content is loaded from the rendered-fragment cache.
used by 1L∃∀N

Proposition 6.29 (Maiorana--McFarland family). Let g:\mathbb F_2^n\to\{-1,1\} be arbitrary and define f:\mathbb F_2^{2n}\to\{-1,1\}, \qquad f(x,y)=\operatorname{IP}_{2n}(x,y)g(y). Then f is bent. More precisely, for every (\gamma_1,\gamma_2)\in\widehat{\mathbb F_2^{2n}}, \widehat f(\gamma_1,\gamma_2) =2^{-n}g(\gamma_1)\chi_{\gamma_2}(\gamma_1), so every Fourier coefficient has absolute value 2^{-n}.

Lean code for Proposition6.3.65 declarations
  • defdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    def FABL.maioranaMcFarland {n : } (g : FABL.F₂Cube n  FABL.Sign) :
      FABL.F₂Cube (n + n)  
    def FABL.maioranaMcFarland {n : }
      (g : FABL.F₂Cube n  FABL.Sign) :
      FABL.F₂Cube (n + n)  
    O'Donnell, Proposition 6.29: the Maiorana--McFarland function
    `(x, y) ↦ IP(x, y) g(y)`. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.maioranaMcFarland_joinF₂CubeBlocks {n : }
      (g : FABL.F₂Cube n  FABL.Sign) (x y : FABL.F₂Cube n) :
      FABL.maioranaMcFarland g (FABL.joinF₂CubeBlocks x y) =
        FABL.binarySign (FABL.f₂DotProduct x y) * FABL.signValue (g y)
    theorem FABL.maioranaMcFarland_joinF₂CubeBlocks
      {n : } (g : FABL.F₂Cube n  FABL.Sign)
      (x y : FABL.F₂Cube n) :
      FABL.maioranaMcFarland g
          (FABL.joinF₂CubeBlocks x y) =
        FABL.binarySign
            (FABL.f₂DotProduct x y) *
          FABL.signValue (g y)
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.vectorFourierCoeff_maioranaMcFarland_joinF₂CubeBlocks {n : }
      (g : FABL.F₂Cube n  FABL.Sign) (a b : FABL.F₂Cube n) :
      FABL.vectorFourierCoeff (FABL.maioranaMcFarland g)
          (FABL.joinF₂CubeBlocks a b) =
        (2 ^ n)⁻¹ * FABL.signValue (g a) * (FABL.vectorWalshCharacter b) a
    theorem FABL.vectorFourierCoeff_maioranaMcFarland_joinF₂CubeBlocks
      {n : } (g : FABL.F₂Cube n  FABL.Sign)
      (a b : FABL.F₂Cube n) :
      FABL.vectorFourierCoeff
          (FABL.maioranaMcFarland g)
          (FABL.joinF₂CubeBlocks a b) =
        (2 ^ n)⁻¹ * FABL.signValue (g a) *
          (FABL.vectorWalshCharacter b) a
    O'Donnell, Proposition 6.29: the exact normalized Fourier coefficient of a
    Maiorana--McFarland function. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.isSignValued_maioranaMcFarland {n : }
      (g : FABL.F₂Cube n  FABL.Sign) :
      FABL.IsSignValued (FABL.maioranaMcFarland g)
    theorem FABL.isSignValued_maioranaMcFarland
      {n : }
      (g : FABL.F₂Cube n  FABL.Sign) :
      FABL.IsSignValued
        (FABL.maioranaMcFarland g)
    Every Maiorana--McFarland function is sign-valued. 
  • theoremdefined in FABL/Chapter06/Constructions/BentFunctions.lean
    complete
    theorem FABL.isBent_maioranaMcFarland {n : } (g : FABL.F₂Cube n  FABL.Sign) :
      FABL.IsBent (FABL.maioranaMcFarland g)
    theorem FABL.isBent_maioranaMcFarland {n : }
      (g : FABL.F₂Cube n  FABL.Sign) :
      FABL.IsBent (FABL.maioranaMcFarland g)
    O'Donnell, Proposition 6.29: every Maiorana--McFarland function is bent. 
Lemma6.3.7
Group: Chapter 6: Pseudorandomness and F₂-polynomials (115)
Group member previews
Preview
Proposition 6.1.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
uses 0
Used by 5
Reverse dependency previews
Preview
Lemma 6.3.9
Loading preview
Reverse dependency preview content is loaded from the rendered-fragment cache.
L∃∀N

Binary extension-field model used by the constructions. For every \ell\in\mathbb N^+ there is a finite field \mathbb F_{2^\ell} with exactly 2^\ell elements and a linear encoding \operatorname{enc}:\mathbb F_{2^\ell}\longrightarrow\mathbb F_2^\ell satisfying \operatorname{enc}(0)=0, \qquad \operatorname{enc}(a+b)=\operatorname{enc}(a)+\operatorname{enc}(b). An explicit representation, including complete addition and multiplication tables, can be constructed deterministically in time 2^{O(\ell)}. Field arithmetic can in fact be performed in deterministic \operatorname{poly}(\ell) time.

Lean code for Lemma6.3.711 declarations
  • abbrevdefined in FABL/Chapter06/Constructions/FiniteFields.lean
    complete
    abbrev FABL.BinaryExtensionField ( : ) : Type
    abbrev FABL.BinaryExtensionField ( : ) : Type
    The canonical field with `2 ^ ℓ` elements supplied by Mathlib. 
  • theoremdefined in FABL/Chapter06/Constructions/FiniteFields.lean
    complete
    theorem FABL.binaryExtensionField_finrank { : } (hℓ :   0) :
      Module.finrank FABL.𝔽₂ (FABL.BinaryExtensionField ) = 
    theorem FABL.binaryExtensionField_finrank { : }
      (hℓ :   0) :
      Module.finrank FABL.𝔽₂
          (FABL.BinaryExtensionField ) =
        
    A positive-degree binary extension field has dimension `ℓ` over `𝔽₂`. 
  • theoremdefined in FABL/Chapter06/Constructions/FiniteFields.lean
    complete
    theorem FABL.binaryExtensionField_natCard { : } (hℓ :   0) :
      Nat.card (FABL.BinaryExtensionField ) = 2 ^ 
    theorem FABL.binaryExtensionField_natCard { : }
      (hℓ :   0) :
      Nat.card (FABL.BinaryExtensionField ) =
        2 ^ 
    A positive-degree binary extension field has exactly `2 ^ ℓ` elements. 
  • defdefined in FABL/Chapter06/Constructions/FiniteFields.lean
    complete
    def FABL.binaryExtensionBasis { : } (hℓ :   0) :
      Module.Basis (Fin ) FABL.𝔽₂ (FABL.BinaryExtensionField )
    def FABL.binaryExtensionBasis { : }
      (hℓ :   0) :
      Module.Basis (Fin ) FABL.𝔽₂
        (FABL.BinaryExtensionField )
    A basis of the binary extension field indexed by its `ℓ` binary coordinates. 
  • defdefined in FABL/Chapter06/Constructions/FiniteFields.lean
    complete
    def FABL.binaryExtensionEncode { : } (hℓ :   0) :
      FABL.BinaryExtensionField  ≃ₗ[FABL.𝔽₂] FABL.F₂Cube 
    def FABL.binaryExtensionEncode { : }
      (hℓ :   0) :
      FABL.BinaryExtensionField  ≃ₗ[FABL.𝔽₂]
        FABL.F₂Cube 
    The coordinate encoding of a binary extension field as the additive binary cube. 
  • structure(4 fields)defined in FABL/Chapter06/Constructions/ExecutableFiniteFields.lean
    complete
    structure FABL.ExecutableBinaryFieldModel ( : ) : Type
    structure FABL.ExecutableBinaryFieldModel ( : ) :
      Type
    A deterministic binary-field representation with its full ordered operation tables. 
    implementation : FABL.CertifiedBinaryFieldImplementation 
    The certified modulus used by modular multiplication. 
    elements : List (FABL.F₂Cube )
    Every field element in the fixed binary-vector order. 
    additionTable : List (FABL.F₂Cube  × FABL.F₂Cube  × FABL.F₂Cube )
    The complete ordered addition table. 
    multiplicationTable : List (FABL.F₂Cube  × FABL.F₂Cube  × FABL.F₂Cube )
    The complete ordered multiplication table. 
  • defdefined in FABL/Chapter06/Constructions/ExecutableFiniteFields.lean
    complete
    def FABL.buildExecutableBinaryFieldModel ( : ) (hℓ : 0 < ) :
      FABL.ExecutableBinaryFieldModel 
    def FABL.buildExecutableBinaryFieldModel
      ( : ) (hℓ : 0 < ) :
      FABL.ExecutableBinaryFieldModel 
    Construct the certified representation and both complete operation tables. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableFiniteFields.lean
    complete
    theorem FABL.buildExecutableBinaryFieldModel_complete ( : ) (hℓ : 0 < )
      (x y : FABL.F₂Cube ) :
      x  (FABL.buildExecutableBinaryFieldModel  hℓ).elements 
        (x, y, FABL.binaryAdd x y) 
            (FABL.buildExecutableBinaryFieldModel  hℓ).additionTable 
          (x, y,
              FABL.binaryMulMod hℓ
                (FABL.buildExecutableBinaryFieldModel  hℓ).implementation x
                y) 
            (FABL.buildExecutableBinaryFieldModel  hℓ).multiplicationTable
    theorem FABL.buildExecutableBinaryFieldModel_complete
      ( : ) (hℓ : 0 < )
      (x y : FABL.F₂Cube ) :
      x 
          (FABL.buildExecutableBinaryFieldModel
               hℓ).elements 
        (x, y, FABL.binaryAdd x y) 
            (FABL.buildExecutableBinaryFieldModel
                 hℓ).additionTable 
          (x, y,
              FABL.binaryMulMod hℓ
                (FABL.buildExecutableBinaryFieldModel
                     hℓ).implementation
                x y) 
            (FABL.buildExecutableBinaryFieldModel
                 hℓ).multiplicationTable
    The constructed model exposes every element and both operation rows for every input pair. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableFiniteFields.lean
    complete
    theorem FABL.binaryArithmeticWork_isBigO :
      (fun  => (FABL.binaryArithmeticWork )) =O[Filter.atTop] fun  =>
        (( + 1) ^ 2)
    theorem FABL.binaryArithmeticWork_isBigO :
      (fun  =>
          (FABL.binaryArithmeticWork
              )) =O[Filter.atTop]
        fun  => (( + 1) ^ 2)
    Single executable field arithmetic is `O((ℓ + 1)^2)`. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableFiniteFields.lean
    complete
    theorem FABL.binaryFieldPreprocessingWork_isBigO :
      (fun  => (FABL.binaryFieldPreprocessingWork )) =O[Filter.atTop]
        fun  => (2 ^ (8 * ))
    theorem FABL.binaryFieldPreprocessingWork_isBigO :
      (fun  =>
          (FABL.binaryFieldPreprocessingWork
              )) =O[Filter.atTop]
        fun  => (2 ^ (8 * ))
    Full deterministic preprocessing is `O(2 ^ (8 * ℓ))`, hence `2^{O(ℓ)}`. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableFiniteFields.lean
    complete
    theorem FABL.buildExecutableBinaryFieldModel_resource_bounds ( : )
      (hℓ : 0 < ) :
      (FABL.buildExecutableBinaryFieldModel  hℓ).elements.length = 2 ^  
        (FABL.buildExecutableBinaryFieldModel  hℓ).additionTable.length =
            2 ^ (2 * ) 
          (FABL.buildExecutableBinaryFieldModel 
                    hℓ).multiplicationTable.length =
              2 ^ (2 * ) 
            FABL.binaryFieldRepresentationBits  
                FABL.binaryFieldPreprocessingWork  
              FABL.binaryFieldPreprocessingWork   2 ^ (8 * ( + 1)) 
                FABL.binaryArithmeticWork   8 * ( + 1) ^ 2
    theorem FABL.buildExecutableBinaryFieldModel_resource_bounds
      ( : ) (hℓ : 0 < ) :
      (FABL.buildExecutableBinaryFieldModel 
                hℓ).elements.length =
          2 ^  
        (FABL.buildExecutableBinaryFieldModel
                   hℓ).additionTable.length =
            2 ^ (2 * ) 
          (FABL.buildExecutableBinaryFieldModel
                    
                    hℓ).multiplicationTable.length =
              2 ^ (2 * ) 
            FABL.binaryFieldRepresentationBits
                   
                FABL.binaryFieldPreprocessingWork
                   
              FABL.binaryFieldPreprocessingWork
                     
                  2 ^ (8 * ( + 1)) 
                FABL.binaryArithmeticWork  
                  8 * ( + 1) ^ 2
    Exact table scales together with the concrete and asymptotic resource guarantees. 
Lemma6.3.8
Group: Chapter 6: Pseudorandomness and F₂-polynomials (115)
Group member previews
Preview
Proposition 6.1.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
uses 0
Used by 2
Reverse dependency previews
Preview
Lemma 6.3.9
Loading preview
Reverse dependency preview content is loaded from the rendered-fragment cache.
L∃∀N

Finite-field root bound. If \mathbb F is a field and p\in\mathbb F[X] is a nonzero polynomial of degree at most d, then p has at most d roots in \mathbb F.

Lean code for Lemma6.3.81 theorem
  • theoremdefined in FABL/Chapter06/Constructions/FiniteFields.lean
    complete
    theorem FABL.ncard_rootSet_le_natDegree.{u_1} {K : Type u_1} [Field K]
      (p : Polynomial K) : (p.rootSet K).ncard  p.natDegree
    theorem FABL.ncard_rootSet_le_natDegree.{u_1}
      {K : Type u_1} [Field K]
      (p : Polynomial K) :
      (p.rootSet K).ncard  p.natDegree
    A nonzero polynomial over a field has at most its degree many roots. 
Lemma6.3.9
Group: Chapter 6: Pseudorandomness and F₂-polynomials (115)
Group member previews
Preview
Proposition 6.1.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
Statement uses 4
Statement dependency previews
Preview
Lemma 1.3.5
Loading preview
Statement dependency preview content is loaded from the rendered-fragment cache.
Used by 2
Reverse dependency previews
Preview
Theorem 6.3.10
Loading preview
Reverse dependency preview content is loaded from the rendered-fragment cache.
L∃∀N

Equation (6.5) (small-bias character calculation). Let r,s be independent and uniform in \mathbb F_{2^\ell}, and set y_i=\left\langle\operatorname{enc}(r^i), \operatorname{enc}(s)\right\rangle, \qquad i\in[n]. For 0\ne\gamma\in\mathbb F_2^n, define the nonzero polynomial p_\gamma(a)=\gamma_1a+\gamma_2a^2+\cdots+\gamma_na^n. Then \mathbb E[\chi_\gamma(y)] =\mathbb E_r\!\left[ \mathbb E_s \left[(-1)^{ \langle\operatorname{enc}(p_\gamma(r)),\operatorname{enc}(s)\rangle} \right]\right] =\Pr_r[p_\gamma(r)=0]. \tag{6.5} In particular, 0\le\mathbb E[\chi_\gamma(y)] \le\frac{n}{2^\ell}.

Lean code for Lemma6.3.98 declarations
  • defdefined in FABL/Chapter06/Constructions/SmallBiasGenerator.lean
    complete
    def FABL.smallBiasPolynomial {n : } ( : ) (γ : FABL.F₂Cube n) :
      Polynomial (FABL.BinaryExtensionField )
    def FABL.smallBiasPolynomial {n : } ( : )
      (γ : FABL.F₂Cube n) :
      Polynomial (FABL.BinaryExtensionField )
    The polynomial
    `p_γ(X) = ∑ i, γᵢ X^(i+1)` over the binary extension field. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasGenerator.lean
    complete
    theorem FABL.smallBiasPolynomial_eval {n  : } (γ : FABL.F₂Cube n)
      (r : FABL.BinaryExtensionField ) :
      Polynomial.eval r (FABL.smallBiasPolynomial  γ) =
         i, γ i  r ^ (i + 1)
    theorem FABL.smallBiasPolynomial_eval {n  : }
      (γ : FABL.F₂Cube n)
      (r : FABL.BinaryExtensionField ) :
      Polynomial.eval r
          (FABL.smallBiasPolynomial  γ) =
         i, γ i  r ^ (i + 1)
    Evaluation of `p_γ` is the field-valued sum with exponents starting at one. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasGenerator.lean
    complete
    theorem FABL.smallBiasPolynomial_ne_zero {n  : } {γ : FABL.F₂Cube n}
      ( : γ  0) : FABL.smallBiasPolynomial  γ  0
    theorem FABL.smallBiasPolynomial_ne_zero {n  : }
      {γ : FABL.F₂Cube n} ( : γ  0) :
      FABL.smallBiasPolynomial  γ  0
    A nonzero binary frequency gives a nonzero polynomial. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasGenerator.lean
    complete
    theorem FABL.smallBiasPolynomial_natDegree_le {n  : } (γ : FABL.F₂Cube n) :
      (FABL.smallBiasPolynomial  γ).natDegree  n
    theorem FABL.smallBiasPolynomial_natDegree_le
      {n  : } (γ : FABL.F₂Cube n) :
      (FABL.smallBiasPolynomial 
            γ).natDegree 
        n
    The degree of `p_γ` is at most the ambient output length `n`. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasGenerator.lean
    complete
    def FABL.smallBiasGenerator (n : ) { : } (hℓ :   0)
      (r s : FABL.BinaryExtensionField ) : FABL.F₂Cube n
    def FABL.smallBiasGenerator (n : ) { : }
      (hℓ :   0)
      (r s : FABL.BinaryExtensionField ) :
      FABL.F₂Cube n
    The book's pair-seeded generator:
    `yᵢ = ⟨enc(r^(i+1)), enc(s)⟩`. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasGenerator.lean
    complete
    theorem FABL.smallBiasGenerator_characterExpectation_eq_rootProbability
      {n  : } (hℓ :   0) {γ : FABL.F₂Cube n} ( : γ  0) :
      (Finset.univ.expect fun rs =>
          (FABL.vectorWalshCharacter γ)
            (FABL.smallBiasGenerator n hℓ rs.1 rs.2)) =
        ((FABL.smallBiasPolynomial  γ).rootSet
                (FABL.BinaryExtensionField )).ncard /
          2 ^ 
    theorem FABL.smallBiasGenerator_characterExpectation_eq_rootProbability
      {n  : } (hℓ :   0)
      {γ : FABL.F₂Cube n} ( : γ  0) :
      (Finset.univ.expect fun rs =>
          (FABL.vectorWalshCharacter γ)
            (FABL.smallBiasGenerator n hℓ rs.1
              rs.2)) =
        ((FABL.smallBiasPolynomial 
                    γ).rootSet
                (FABL.BinaryExtensionField
                  )).ncard /
          2 ^ 
    O'Donnell, Equation (6.5): the nonzero-frequency character expectation is exactly the
    uniform root probability of `p_γ`. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasGenerator.lean
    complete
    theorem FABL.smallBiasGenerator_characterExpectation_nonneg {n  : }
      (hℓ :   0) {γ : FABL.F₂Cube n} ( : γ  0) :
      0 
        Finset.univ.expect fun rs =>
          (FABL.vectorWalshCharacter γ)
            (FABL.smallBiasGenerator n hℓ rs.1 rs.2)
    theorem FABL.smallBiasGenerator_characterExpectation_nonneg
      {n  : } (hℓ :   0)
      {γ : FABL.F₂Cube n} ( : γ  0) :
      0 
        Finset.univ.expect fun rs =>
          (FABL.vectorWalshCharacter γ)
            (FABL.smallBiasGenerator n hℓ rs.1
              rs.2)
    The character expectation in Equation (6.5) is nonnegative. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasGenerator.lean
    complete
    theorem FABL.smallBiasGenerator_characterExpectation_le {n  : } (hℓ :   0)
      {γ : FABL.F₂Cube n} ( : γ  0) :
      (Finset.univ.expect fun rs =>
          (FABL.vectorWalshCharacter γ)
            (FABL.smallBiasGenerator n hℓ rs.1 rs.2)) 
        n / 2 ^ 
    theorem FABL.smallBiasGenerator_characterExpectation_le
      {n  : } (hℓ :   0)
      {γ : FABL.F₂Cube n} ( : γ  0) :
      (Finset.univ.expect fun rs =>
          (FABL.vectorWalshCharacter γ)
            (FABL.smallBiasGenerator n hℓ rs.1
              rs.2)) 
        n / 2 ^ 
    The finite-field root bound gives the quantitative part of Equation (6.5). 
Theorem6.3.10
Group: Chapter 6: Pseudorandomness and F₂-polynomials (115)
Group member previews
Preview
Proposition 6.1.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
Statement uses 2
Statement dependency previews
Preview
Definition 6.1.5
Loading preview
Statement dependency preview content is loaded from the rendered-fragment cache.
Used by 7
Reverse dependency previews
Preview
Theorem 6.3.16
Loading preview
Reverse dependency preview content is loaded from the rendered-fragment cache.
L∃∀N

Theorem 6.30. There is a deterministic algorithm that, given n\ge1 and 0<\epsilon\le1/2, runs in \operatorname{poly}(n/\epsilon) time and outputs a multiset A\subseteq\mathbb F_2^n of cardinality at most 16(n/\epsilon)^2 such that its uniform density \varphi_A is \epsilon-biased.

In the power-of-two case \epsilon=2^{-t} and n=2^{\ell-t}, the construction enumerates the 2^{2\ell}=(n/\epsilon)^2 pairs (r,s)\in\mathbb F_{2^\ell}^2 and emits the string y_i=\left\langle\operatorname{enc}(r^i), \operatorname{enc}(s)\right\rangle.

The executable interface encodes \epsilon by a positive numerator and denominator, so its input is finite. The arbitrary-real quantitative statement is proved separately as a mathematical existence theorem, rather than as an algorithm which reads an exact real number. Both forms use the same field-degree bounds.

Lean code for Theorem6.3.1061 declarations
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.binaryLowPolynomial_injective { : } :
      Function.Injective FABL.binaryLowPolynomial
    theorem FABL.binaryLowPolynomial_injective
      { : } :
      Function.Injective
        FABL.binaryLowPolynomial
    Low-coefficient vectors have a unique polynomial representation. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.binaryAdjoinRootEncode_injective { : } (m : FABL.F₂Cube ) :
      Function.Injective (FABL.binaryAdjoinRootEncode m)
    theorem FABL.binaryAdjoinRootEncode_injective
      { : } (m : FABL.F₂Cube ) :
      Function.Injective
        (FABL.binaryAdjoinRootEncode m)
    Coefficient vectors of degree below the modulus degree embed injectively in `AdjoinRoot`. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.binaryAdjoinRootLinearMap { : } (m : FABL.F₂Cube ) :
      FABL.F₂Cube  →ₗ[FABL.𝔽₂] AdjoinRoot (FABL.binaryMonicPolynomial m)
    def FABL.binaryAdjoinRootLinearMap { : }
      (m : FABL.F₂Cube ) :
      FABL.F₂Cube  →ₗ[FABL.𝔽₂]
        AdjoinRoot
          (FABL.binaryMonicPolynomial m)
    The canonical quotient encoding as an injective binary linear map. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.binaryPowMod { : } (hℓ : 0 < )
      (implementation : FABL.CertifiedBinaryFieldImplementation )
      (r : FABL.F₂Cube ) :   FABL.F₂Cube 
    def FABL.binaryPowMod { : } (hℓ : 0 < )
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          )
      (r : FABL.F₂Cube ) :   FABL.F₂Cube 
    Repeated executable modular multiplication, starting from the explicit one-vector. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.binaryAdjoinRootEncode_binaryPowMod { : } (hℓ : 0 < )
      (implementation : FABL.CertifiedBinaryFieldImplementation )
      (r : FABL.F₂Cube ) (e : ) :
      FABL.binaryAdjoinRootEncode implementation.modulus
          (FABL.binaryPowMod hℓ implementation r e) =
        FABL.binaryAdjoinRootEncode implementation.modulus r ^ e
    theorem FABL.binaryAdjoinRootEncode_binaryPowMod
      { : } (hℓ : 0 < )
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          )
      (r : FABL.F₂Cube ) (e : ) :
      FABL.binaryAdjoinRootEncode
          implementation.modulus
          (FABL.binaryPowMod hℓ implementation
            r e) =
        FABL.binaryAdjoinRootEncode
            implementation.modulus r ^
          e
    `binaryPowMod` represents exponentiation in the certified polynomial quotient. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.executableSmallBiasGenerator (n : ) { : } (hℓ : 0 < )
      (implementation : FABL.CertifiedBinaryFieldImplementation )
      (r s : FABL.F₂Cube ) : FABL.F₂Cube n
    def FABL.executableSmallBiasGenerator (n : )
      { : } (hℓ : 0 < )
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          )
      (r s : FABL.F₂Cube ) : FABL.F₂Cube n
    The executable coefficient-vector version of the book's pair-seeded generator. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.executableSmallBiasGeneratorList (n : ) { : } (hℓ : 0 < )
      (implementation : FABL.CertifiedBinaryFieldImplementation ) :
      List (FABL.F₂Cube n)
    def FABL.executableSmallBiasGeneratorList
      (n : ) { : } (hℓ : 0 < )
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          ) :
      List (FABL.F₂Cube n)
    The explicit fixed-order list of all outputs, retaining repeated outputs. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.executableSmallBiasGeneratorMultiset (n : ) { : } (hℓ : 0 < )
      (implementation : FABL.CertifiedBinaryFieldImplementation ) :
      Multiset (FABL.F₂Cube n)
    def FABL.executableSmallBiasGeneratorMultiset
      (n : ) { : } (hℓ : 0 < )
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          ) :
      Multiset (FABL.F₂Cube n)
    The output multiset of the executable generator. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.length_executableSmallBiasGeneratorList (n : ) { : }
      (hℓ : 0 < )
      (implementation : FABL.CertifiedBinaryFieldImplementation ) :
      (FABL.executableSmallBiasGeneratorList n hℓ implementation).length =
        2 ^ (2 * )
    theorem FABL.length_executableSmallBiasGeneratorList
      (n : ) { : } (hℓ : 0 < )
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          ) :
      (FABL.executableSmallBiasGeneratorList n
            hℓ implementation).length =
        2 ^ (2 * )
    The executable enumerator emits exactly one row per ordered seed pair. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.executableSmallBiasGeneratorMultiset_card (n : ) { : }
      (hℓ : 0 < )
      (implementation : FABL.CertifiedBinaryFieldImplementation ) :
      (FABL.executableSmallBiasGeneratorMultiset n hℓ implementation).card =
        (2 ^ ) ^ 2
    theorem FABL.executableSmallBiasGeneratorMultiset_card
      (n : ) { : } (hℓ : 0 < )
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          ) :
      (FABL.executableSmallBiasGeneratorMultiset
            n hℓ implementation).card =
        (2 ^ ) ^ 2
    The executable output multiset has exactly `2^(2ℓ)` entries. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.executableSmallBiasGeneratorDensity (n : ) { : } (hℓ : 0 < )
      (implementation : FABL.CertifiedBinaryFieldImplementation ) :
      FABL.ProbabilityDensity n
    def FABL.executableSmallBiasGeneratorDensity
      (n : ) { : } (hℓ : 0 < )
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          ) :
      FABL.ProbabilityDensity n
    The density induced by uniform independent coefficient-vector seeds. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.executableSmallBiasPolynomial {n  : }
      (implementation : FABL.CertifiedBinaryFieldImplementation )
      (γ : FABL.F₂Cube n) :
      Polynomial
        (AdjoinRoot (FABL.binaryMonicPolynomial implementation.modulus))
    def FABL.executableSmallBiasPolynomial
      {n  : }
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          )
      (γ : FABL.F₂Cube n) :
      Polynomial
        (AdjoinRoot
          (FABL.binaryMonicPolynomial
            implementation.modulus))
    The polynomial attached to a frequency, now over the certified `AdjoinRoot` field. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.executableSmallBiasPolynomial_eval {n  : }
      (implementation : FABL.CertifiedBinaryFieldImplementation )
      (γ : FABL.F₂Cube n)
      (r : AdjoinRoot (FABL.binaryMonicPolynomial implementation.modulus)) :
      Polynomial.eval r
          (FABL.executableSmallBiasPolynomial implementation γ) =
         i, γ i  r ^ (i + 1)
    theorem FABL.executableSmallBiasPolynomial_eval
      {n  : }
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          )
      (γ : FABL.F₂Cube n)
      (r :
        AdjoinRoot
          (FABL.binaryMonicPolynomial
            implementation.modulus)) :
      Polynomial.eval r
          (FABL.executableSmallBiasPolynomial
            implementation γ) =
         i, γ i  r ^ (i + 1)
    Evaluation is the expected field-valued power sum. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.executableSmallBiasPolynomial_ne_zero {n  : }
      (implementation : FABL.CertifiedBinaryFieldImplementation )
      {γ : FABL.F₂Cube n} ( : γ  0) :
      FABL.executableSmallBiasPolynomial implementation γ  0
    theorem FABL.executableSmallBiasPolynomial_ne_zero
      {n  : }
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          )
      {γ : FABL.F₂Cube n} ( : γ  0) :
      FABL.executableSmallBiasPolynomial
          implementation γ 
        0
    A nonzero frequency gives a nonzero polynomial in the certified quotient field. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.executableSmallBiasPolynomial_natDegree_le {n  : }
      (implementation : FABL.CertifiedBinaryFieldImplementation )
      (γ : FABL.F₂Cube n) :
      (FABL.executableSmallBiasPolynomial implementation γ).natDegree  n
    theorem FABL.executableSmallBiasPolynomial_natDegree_le
      {n  : }
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          )
      (γ : FABL.F₂Cube n) :
      (FABL.executableSmallBiasPolynomial
            implementation γ).natDegree 
        n
    The executable-model polynomial has degree at most the output dimension. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.executableSmallBiasPowerSum {n  : } (hℓ : 0 < )
      (implementation : FABL.CertifiedBinaryFieldImplementation )
      (γ : FABL.F₂Cube n) (r : FABL.F₂Cube ) : FABL.F₂Cube 
    def FABL.executableSmallBiasPowerSum {n  : }
      (hℓ : 0 < )
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          )
      (γ : FABL.F₂Cube n)
      (r : FABL.F₂Cube ) : FABL.F₂Cube 
    The coefficient-vector power sum indexed by a Fourier frequency. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.binaryAdjoinRootEncode_executableSmallBiasPowerSum {n  : }
      (hℓ : 0 < )
      (implementation : FABL.CertifiedBinaryFieldImplementation )
      (γ : FABL.F₂Cube n) (r : FABL.F₂Cube ) :
      FABL.binaryAdjoinRootEncode implementation.modulus
          (FABL.executableSmallBiasPowerSum hℓ implementation γ r) =
        Polynomial.eval
          (FABL.binaryAdjoinRootEncode implementation.modulus r)
          (FABL.executableSmallBiasPolynomial implementation γ)
    theorem FABL.binaryAdjoinRootEncode_executableSmallBiasPowerSum
      {n  : } (hℓ : 0 < )
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          )
      (γ : FABL.F₂Cube n)
      (r : FABL.F₂Cube ) :
      FABL.binaryAdjoinRootEncode
          implementation.modulus
          (FABL.executableSmallBiasPowerSum hℓ
            implementation γ r) =
        Polynomial.eval
          (FABL.binaryAdjoinRootEncode
            implementation.modulus r)
          (FABL.executableSmallBiasPolynomial
            implementation γ)
    Encoding the vector power sum gives polynomial evaluation in `AdjoinRoot`. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.ncard_executableSmallBiasPowerSum_zero_le {n  : } (hℓ : 0 < )
      (implementation : FABL.CertifiedBinaryFieldImplementation )
      {γ : FABL.F₂Cube n} ( : γ  0) :
      {r |
            FABL.executableSmallBiasPowerSum hℓ implementation γ r =
              0}.ncard 
        n
    theorem FABL.ncard_executableSmallBiasPowerSum_zero_le
      {n  : } (hℓ : 0 < )
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          )
      {γ : FABL.F₂Cube n} ( : γ  0) :
      {r |
            FABL.executableSmallBiasPowerSum
                hℓ implementation γ r =
              0}.ncard 
        n
    Roots of the executable vector power sum inject into roots of its quotient-field polynomial. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.executableSmallBiasGenerator_characterExpectation_eq_rootProbability
      {n  : } (hℓ : 0 < )
      (implementation : FABL.CertifiedBinaryFieldImplementation )
      (γ : FABL.F₂Cube n) :
      (Finset.univ.expect fun rs =>
          (FABL.vectorWalshCharacter γ)
            (FABL.executableSmallBiasGenerator n hℓ implementation rs.1
              rs.2)) =
        {r |
                FABL.executableSmallBiasPowerSum hℓ implementation γ r =
                  0}.ncard /
          2 ^ 
    theorem FABL.executableSmallBiasGenerator_characterExpectation_eq_rootProbability
      {n  : } (hℓ : 0 < )
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          )
      (γ : FABL.F₂Cube n) :
      (Finset.univ.expect fun rs =>
          (FABL.vectorWalshCharacter γ)
            (FABL.executableSmallBiasGenerator
              n hℓ implementation rs.1
              rs.2)) =
        {r |
                FABL.executableSmallBiasPowerSum
                    hℓ implementation γ r =
                  0}.ncard /
          2 ^ 
    Exact character expectation of the executable generator as a vector-root probability. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.executableSmallBiasGenerator_characterExpectation_nonneg {n  : }
      (hℓ : 0 < )
      (implementation : FABL.CertifiedBinaryFieldImplementation )
      (γ : FABL.F₂Cube n) :
      0 
        Finset.univ.expect fun rs =>
          (FABL.vectorWalshCharacter γ)
            (FABL.executableSmallBiasGenerator n hℓ implementation rs.1
              rs.2)
    theorem FABL.executableSmallBiasGenerator_characterExpectation_nonneg
      {n  : } (hℓ : 0 < )
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          )
      (γ : FABL.F₂Cube n) :
      0 
        Finset.univ.expect fun rs =>
          (FABL.vectorWalshCharacter γ)
            (FABL.executableSmallBiasGenerator
              n hℓ implementation rs.1 rs.2)
    The executable generator's nonzero character expectations are nonnegative. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.executableSmallBiasGenerator_characterExpectation_le {n  : }
      (hℓ : 0 < )
      (implementation : FABL.CertifiedBinaryFieldImplementation )
      {γ : FABL.F₂Cube n} ( : γ  0) :
      (Finset.univ.expect fun rs =>
          (FABL.vectorWalshCharacter γ)
            (FABL.executableSmallBiasGenerator n hℓ implementation rs.1
              rs.2)) 
        n / 2 ^ 
    theorem FABL.executableSmallBiasGenerator_characterExpectation_le
      {n  : } (hℓ : 0 < )
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          )
      {γ : FABL.F₂Cube n} ( : γ  0) :
      (Finset.univ.expect fun rs =>
          (FABL.vectorWalshCharacter γ)
            (FABL.executableSmallBiasGenerator
              n hℓ implementation rs.1
              rs.2)) 
        n / 2 ^ 
    The finite-field root bound controls every nonzero executable-generator character. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.vectorFourierCoeff_executableSmallBiasGeneratorDensity {n  : }
      (hℓ : 0 < )
      (implementation : FABL.CertifiedBinaryFieldImplementation )
      (γ : FABL.F₂Cube n) :
      FABL.vectorFourierCoeff
          (FABL.executableSmallBiasGeneratorDensity n hℓ
              implementation).toFun
          γ =
        {r |
                FABL.executableSmallBiasPowerSum hℓ implementation γ r =
                  0}.ncard /
          2 ^ 
    theorem FABL.vectorFourierCoeff_executableSmallBiasGeneratorDensity
      {n  : } (hℓ : 0 < )
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          )
      (γ : FABL.F₂Cube n) :
      FABL.vectorFourierCoeff
          (FABL.executableSmallBiasGeneratorDensity
              n hℓ implementation).toFun
          γ =
        {r |
                FABL.executableSmallBiasPowerSum
                    hℓ implementation γ r =
                  0}.ncard /
          2 ^ 
    Fourier coefficients of the executable density are exact vector-root probabilities. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.executableSmallBiasGeneratorDensity_isBiased {n  : } (hℓ : 0 < )
      (implementation : FABL.CertifiedBinaryFieldImplementation ) {ε : }
      (hparameter : n / 2 ^   ε) :
      (FABL.executableSmallBiasGeneratorDensity n hℓ
            implementation).IsBiased
        ε
    theorem FABL.executableSmallBiasGeneratorDensity_isBiased
      {n  : } (hℓ : 0 < )
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          )
      {ε : } (hparameter : n / 2 ^   ε) :
      (FABL.executableSmallBiasGeneratorDensity
            n hℓ implementation).IsBiased
        ε
    The executable density is `ε`-biased whenever `n / 2^ℓ ≤ ε`. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.executableSmallBiasGenerator_core (n : ) (hn : 1  n) { : }
      (hℓ : 0 < )
      (implementation : FABL.CertifiedBinaryFieldImplementation ) {ε : }
      ( : 0 < ε) (hlower : n  ε * 2 ^ ) (hupper : 2 ^   4 * n / ε) :
      (FABL.executableSmallBiasGeneratorDensity n hℓ
              implementation).IsBiased
          ε 
        (FABL.executableSmallBiasGeneratorMultiset n hℓ
                implementation).card 
          16 * (n / ε) ^ 2
    theorem FABL.executableSmallBiasGenerator_core
      (n : ) (hn : 1  n) { : }
      (hℓ : 0 < )
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          )
      {ε : } ( : 0 < ε)
      (hlower : n  ε * 2 ^ )
      (hupper : 2 ^   4 * n / ε) :
      (FABL.executableSmallBiasGeneratorDensity
              n hℓ implementation).IsBiased
          ε 
        (FABL.executableSmallBiasGeneratorMultiset
                n hℓ implementation).card 
          16 * (n / ε) ^ 2
    The executable analogue of the mathematical core of Theorem 6.30. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.executableSmallBiasPowerWork ( e : ) : 
    def FABL.executableSmallBiasPowerWork
      ( e : ) : 
    Work charged by the visible exponentiation recursion, including the explicit one-vector. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.executableSmallBiasPowerWork_eq ( e : ) :
      FABL.executableSmallBiasPowerWork  e =
         + e * (FABL.binaryMulModWork  + 1)
    theorem FABL.executableSmallBiasPowerWork_eq
      ( e : ) :
      FABL.executableSmallBiasPowerWork  e =
         + e * (FABL.binaryMulModWork  + 1)
    Exact work recurrence for one executable power. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.executableSmallBiasRowWork ( : ) :   
    def FABL.executableSmallBiasRowWork ( : ) :
        
    Work for materializing all `n` coordinates of one generator output. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.executableSmallBiasRowWork_le (n  : ) :
      FABL.executableSmallBiasRowWork  n 
        n * ( + n * (FABL.binaryMulModWork  + 1) + 2 *  + 1)
    theorem FABL.executableSmallBiasRowWork_le
      (n  : ) :
      FABL.executableSmallBiasRowWork  n 
        n *
          ( +
                n *
                  (FABL.binaryMulModWork  +
                    1) +
              2 *  +
            1)
    Each coordinate exponent is at most `n`, giving a uniform row-work bound. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.executableSmallBiasConstructionWork (n  : ) : 
    def FABL.executableSmallBiasConstructionWork
      (n  : ) : 
    Total work for preprocessing the explicit field and materializing every output row. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.executableSmallBiasConstructionWork_eq (n  : ) :
      FABL.executableSmallBiasConstructionWork n  =
        FABL.binaryFieldPreprocessingWork  +
          2 ^ (2 * ) * (FABL.executableSmallBiasRowWork  n + 1)
    theorem FABL.executableSmallBiasConstructionWork_eq
      (n  : ) :
      FABL.executableSmallBiasConstructionWork
          n  =
        FABL.binaryFieldPreprocessingWork  +
          2 ^ (2 * ) *
            (FABL.executableSmallBiasRowWork 
                n +
              1)
    The construction cost is preprocessing plus exactly one charged traversal per seed pair. 
  • structure(4 fields)defined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    structure FABL.ExecutableSmallBiasConstruction (n : ) : Type
    structure FABL.ExecutableSmallBiasConstruction
      (n : ) : Type
    The complete result of an oracle-free small-bias construction at an explicit field degree. 
    fieldDegree : 
    The selected binary extension degree. 
    fieldDegree_pos : 0 < self.fieldDegree
    The field degree is positive. 
    fieldModel : FABL.ExecutableBinaryFieldModel self.fieldDegree
    The certified field representation and its complete arithmetic tables. 
    outputs : List (FABL.F₂Cube n)
    Every generator output in the fixed ordered-pair seed order. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.buildExecutableSmallBiasConstruction (n  : ) (hℓ : 0 < ) :
      FABL.ExecutableSmallBiasConstruction n
    def FABL.buildExecutableSmallBiasConstruction
      (n  : ) (hℓ : 0 < ) :
      FABL.ExecutableSmallBiasConstruction n
    Build the complete field model and enumerate the generator at a supplied positive degree. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.buildExecutableSmallBiasConstruction_resource_bounds (n  : )
      (hℓ : 0 < ) :
      have construction := FABL.buildExecutableSmallBiasConstruction n  hℓ;
      construction.outputs.length = 2 ^ (2 * ) 
        FABL.binaryFieldRepresentationBits  
            FABL.binaryFieldPreprocessingWork  
          FABL.binaryFieldPreprocessingWork   2 ^ (8 * ( + 1)) 
            FABL.executableSmallBiasConstructionWork n  =
              FABL.binaryFieldPreprocessingWork  +
                2 ^ (2 * ) * (FABL.executableSmallBiasRowWork  n + 1)
    theorem FABL.buildExecutableSmallBiasConstruction_resource_bounds
      (n  : ) (hℓ : 0 < ) :
      have construction :=
        FABL.buildExecutableSmallBiasConstruction
          n  hℓ;
      construction.outputs.length =
          2 ^ (2 * ) 
        FABL.binaryFieldRepresentationBits  
            FABL.binaryFieldPreprocessingWork
               
          FABL.binaryFieldPreprocessingWork
                 
              2 ^ (8 * ( + 1)) 
            FABL.executableSmallBiasConstructionWork
                n  =
              FABL.binaryFieldPreprocessingWork
                   +
                2 ^ (2 * ) *
                  (FABL.executableSmallBiasRowWork
                       n +
                    1)
    The explicit-degree builder returns the exact output count and its charged resources. 
  • structure(6 fields)defined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    structure FABL.SmallBiasInput : Type
    structure FABL.SmallBiasInput : Type
    Finite input for Theorem 6.30, encoding the bias as `numerator / denominator`. 
    n : 
    Output dimension. 
    numerator : 
    Numerator of the requested positive rational bias. 
    denominator : 
    Denominator of the requested positive rational bias. 
    n_pos : 0 < self.n
    The output dimension is nonzero. 
    numerator_pos : 0 < self.numerator
    The bias numerator is nonzero. 
    twice_numerator_le_denominator : 2 * self.numerator  self.denominator
    The encoded bias is at most one half. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.SmallBiasInput.epsilon (input : FABL.SmallBiasInput) : 
    def FABL.SmallBiasInput.epsilon
      (input : FABL.SmallBiasInput) : 
    The real-valued bias denoted by a finite input. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.SmallBiasInput.scale (input : FABL.SmallBiasInput) : 
    def FABL.SmallBiasInput.scale
      (input : FABL.SmallBiasInput) : 
    The integral construction scale `⌈n / ε⌉ = ⌈n denominator / numerator⌉`. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.SmallBiasInput.fieldDegree (input : FABL.SmallBiasInput) : 
    def FABL.SmallBiasInput.fieldDegree
      (input : FABL.SmallBiasInput) : 
    The least binary field degree covering the integral scale, guarded to remain positive. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.SmallBiasInput.fieldDegree_pos (input : FABL.SmallBiasInput) :
      0 < input.fieldDegree
    theorem FABL.SmallBiasInput.fieldDegree_pos
      (input : FABL.SmallBiasInput) :
      0 < input.fieldDegree
    The selected field degree is positive for every finite input. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.deterministicSmallBiasAlgorithm (input : FABL.SmallBiasInput) :
      FABL.ExecutableSmallBiasConstruction input.n
    def FABL.deterministicSmallBiasAlgorithm
      (input : FABL.SmallBiasInput) :
      FABL.ExecutableSmallBiasConstruction
        input.n
    The deterministic oracle-free construction on a finite rational input. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.deterministicSmallBiasMultiset (input : FABL.SmallBiasInput) :
      Multiset (FABL.F₂Cube input.n)
    def FABL.deterministicSmallBiasMultiset
      (input : FABL.SmallBiasInput) :
      Multiset (FABL.F₂Cube input.n)
    The output multiset of the deterministic rational-input algorithm. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.deterministicSmallBiasDensity (input : FABL.SmallBiasInput) :
      FABL.ProbabilityDensity input.n
    def FABL.deterministicSmallBiasDensity
      (input : FABL.SmallBiasInput) :
      FABL.ProbabilityDensity input.n
    The mathematical density of the deterministic algorithm's explicitly enumerated outputs. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.deterministicSmallBiasWork (input : FABL.SmallBiasInput) : 
    def FABL.deterministicSmallBiasWork
      (input : FABL.SmallBiasInput) : 
    Charged work of the deterministic rational-input algorithm. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.deterministicSmallBiasMultiset_card (input : FABL.SmallBiasInput) :
      (FABL.deterministicSmallBiasMultiset input).card =
        (2 ^ input.fieldDegree) ^ 2
    theorem FABL.deterministicSmallBiasMultiset_card
      (input : FABL.SmallBiasInput) :
      (FABL.deterministicSmallBiasMultiset
            input).card =
        (2 ^ input.fieldDegree) ^ 2
    The deterministic algorithm emits exactly the square of the selected field size. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.SmallBiasInput.epsilon_pos (input : FABL.SmallBiasInput) :
      0 < input.epsilon
    theorem FABL.SmallBiasInput.epsilon_pos
      (input : FABL.SmallBiasInput) :
      0 < input.epsilon
    The rational bias denoted by a finite input is positive. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.SmallBiasInput.epsilon_le_half (input : FABL.SmallBiasInput) :
      input.epsilon  2⁻¹
    theorem FABL.SmallBiasInput.epsilon_le_half
      (input : FABL.SmallBiasInput) :
      input.epsilon  2⁻¹
    The rational bias denoted by a valid finite input is at most one half. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.SmallBiasInput.one_lt_scale (input : FABL.SmallBiasInput) :
      1 < input.scale
    theorem FABL.SmallBiasInput.one_lt_scale
      (input : FABL.SmallBiasInput) :
      1 < input.scale
    The integral scale is at least two under the book's bias range. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.SmallBiasInput.fieldDegree_eq_clog (input : FABL.SmallBiasInput) :
      input.fieldDegree = Nat.clog 2 input.scale
    theorem FABL.SmallBiasInput.fieldDegree_eq_clog
      (input : FABL.SmallBiasInput) :
      input.fieldDegree =
        Nat.clog 2 input.scale
    For valid inputs the guard is inactive: the selected degree is the binary ceiling logarithm. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.SmallBiasInput.scale_le_fieldSize (input : FABL.SmallBiasInput) :
      input.scale  2 ^ input.fieldDegree
    theorem FABL.SmallBiasInput.scale_le_fieldSize
      (input : FABL.SmallBiasInput) :
      input.scale  2 ^ input.fieldDegree
    The selected field contains at least the integral scale. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.SmallBiasInput.fieldSize_le_two_scale
      (input : FABL.SmallBiasInput) :
      2 ^ input.fieldDegree  2 * input.scale
    theorem FABL.SmallBiasInput.fieldSize_le_two_scale
      (input : FABL.SmallBiasInput) :
      2 ^ input.fieldDegree  2 * input.scale
    The selected power of two is less than twice the integral scale. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.SmallBiasInput.dimension_le_epsilon_mul_fieldSize
      (input : FABL.SmallBiasInput) :
      input.n  input.epsilon * 2 ^ input.fieldDegree
    theorem FABL.SmallBiasInput.dimension_le_epsilon_mul_fieldSize
      (input : FABL.SmallBiasInput) :
      input.n 
        input.epsilon * 2 ^ input.fieldDegree
    Ceiling division gives the lower field-size inequality needed by the Fourier proof. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.SmallBiasInput.fieldSize_mul_numerator_le
      (input : FABL.SmallBiasInput) :
      2 ^ input.fieldDegree * input.numerator 
        4 * (input.n * input.denominator)
    theorem FABL.SmallBiasInput.fieldSize_mul_numerator_le
      (input : FABL.SmallBiasInput) :
      2 ^ input.fieldDegree *
          input.numerator 
        4 * (input.n * input.denominator)
    The selected field size satisfies the book's factor-four upper sandwich. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.SmallBiasInput.fieldSize_le_four_dimension_div_epsilon
      (input : FABL.SmallBiasInput) :
      2 ^ input.fieldDegree  4 * input.n / input.epsilon
    theorem FABL.SmallBiasInput.fieldSize_le_four_dimension_div_epsilon
      (input : FABL.SmallBiasInput) :
      2 ^ input.fieldDegree 
        4 * input.n / input.epsilon
    Real form of the factor-four upper sandwich. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.SmallBiasInput.n_le_scale (input : FABL.SmallBiasInput) :
      input.n  input.scale
    theorem FABL.SmallBiasInput.n_le_scale
      (input : FABL.SmallBiasInput) :
      input.n  input.scale
    The integral scale dominates the output dimension. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.SmallBiasInput.fieldDegree_succ_le (input : FABL.SmallBiasInput) :
      input.fieldDegree + 1  4 * (input.scale + 1)
    theorem FABL.SmallBiasInput.fieldDegree_succ_le
      (input : FABL.SmallBiasInput) :
      input.fieldDegree + 1 
        4 * (input.scale + 1)
    The selected degree plus one is linearly bounded by the integral scale. 
  • defdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    def FABL.SmallBiasInput.polynomialBudget (input : FABL.SmallBiasInput) : 
    def FABL.SmallBiasInput.polynomialBudget
      (input : FABL.SmallBiasInput) : 
    A fixed polynomial budget in the single scale parameter `⌈n / ε⌉`. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.deterministicSmallBiasWork_le_polynomialBudget
      (input : FABL.SmallBiasInput) :
      FABL.deterministicSmallBiasWork input  input.polynomialBudget
    theorem FABL.deterministicSmallBiasWork_le_polynomialBudget
      (input : FABL.SmallBiasInput) :
      FABL.deterministicSmallBiasWork input 
        input.polynomialBudget
    The charged deterministic construction work is bounded by an explicit
    degree-eight polynomial. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.deterministicSmallBiasWork_isBigO :
      (fun input =>
          (FABL.deterministicSmallBiasWork
              input)) =O[Filter.comap FABL.SmallBiasInput.scale
          Filter.atTop]
        fun input => ((input.scale + 1) ^ 8)
    theorem FABL.deterministicSmallBiasWork_isBigO :
      (fun input =>
          (FABL.deterministicSmallBiasWork
              input)) =O[Filter.comap
          FABL.SmallBiasInput.scale
          Filter.atTop]
        fun input => ((input.scale + 1) ^ 8)
    The runtime bound is polynomial in the book's single scale parameter `n / ε`. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.deterministicSmallBiasAlgorithm_spec
      (input : FABL.SmallBiasInput) :
      0 < input.epsilon 
        input.epsilon  2⁻¹ 
          (FABL.deterministicSmallBiasDensity input).IsBiased
              input.epsilon 
            (FABL.deterministicSmallBiasMultiset input).card 
                16 * (input.n / input.epsilon) ^ 2 
              (FABL.smallBiasGeneratorDensity input.n ).IsBiased
                  input.epsilon 
                (FABL.smallBiasGeneratorMultiset input.n ).card 
                    16 * (input.n / input.epsilon) ^ 2 
                  FABL.deterministicSmallBiasWork input 
                    input.polynomialBudget
    theorem FABL.deterministicSmallBiasAlgorithm_spec
      (input : FABL.SmallBiasInput) :
      0 < input.epsilon 
        input.epsilon  2⁻¹ 
          (FABL.deterministicSmallBiasDensity
                  input).IsBiased
              input.epsilon 
            (FABL.deterministicSmallBiasMultiset
                      input).card 
                16 *
                  (input.n / input.epsilon) ^
                    2 
              (FABL.smallBiasGeneratorDensity
                      input.n ).IsBiased
                  input.epsilon 
                (FABL.smallBiasGeneratorMultiset
                          input.n ).card 
                    16 *
                      (input.n /
                          input.epsilon) ^
                        2 
                  FABL.deterministicSmallBiasWork
                      input 
                    input.polynomialBudget
    Theorem 6.30 for finite rational input.  The same selected degree certifies both the actual
    coefficient-vector enumerator and the existing proof-only `GaloisField` formulation.
    
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.exists_smallBiasGenerator_of_real (n : ) (hn : 1  n) {ε : }
      ( : 0 < ε) (hεhalf : ε  2⁻¹) :
       ,
         (hℓ :   0),
          (FABL.smallBiasGeneratorDensity n hℓ).IsBiased ε 
            (FABL.smallBiasGeneratorMultiset n hℓ).card  16 * (n / ε) ^ 2
    theorem FABL.exists_smallBiasGenerator_of_real
      (n : ) (hn : 1  n) {ε : }
      ( : 0 < ε) (hεhalf : ε  2⁻¹) :
       ,
         (hℓ :   0),
          (FABL.smallBiasGeneratorDensity n
                  hℓ).IsBiased
              ε 
            (FABL.smallBiasGeneratorMultiset
                    n hℓ).card 
              16 * (n / ε) ^ 2
    For every real `0 < ε ≤ 1/2`, a suitable proof-layer generator satisfies Theorem 6.30. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.SmallBiasInput.fieldDegree_eq_of_dyadic
      (input : FABL.SmallBiasInput) (fieldDegree biasBits : )
      (hn : input.n = 2 ^ (fieldDegree - biasBits))
      (hnum : input.numerator = 1) (hden : input.denominator = 2 ^ biasBits)
      (hbits : biasBits  fieldDegree) : input.fieldDegree = fieldDegree
    theorem FABL.SmallBiasInput.fieldDegree_eq_of_dyadic
      (input : FABL.SmallBiasInput)
      (fieldDegree biasBits : )
      (hn :
        input.n =
          2 ^ (fieldDegree - biasBits))
      (hnum : input.numerator = 1)
      (hden :
        input.denominator = 2 ^ biasBits)
      (hbits : biasBits  fieldDegree) :
      input.fieldDegree = fieldDegree
    In the exact dyadic case, rational parameter selection recovers the supplied field degree. 
  • theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.lean
    complete
    theorem FABL.smallBiasGenerator_core_powerOfTwo (fieldDegree biasBits : )
      (hfield : 0 < fieldDegree) (hbits : biasBits  fieldDegree) :
      have n := 2 ^ (fieldDegree - biasBits);
      have ε := (↑(2 ^ biasBits))⁻¹;
      (FABL.smallBiasGeneratorDensity n ).IsBiased ε 
        (FABL.smallBiasGeneratorMultiset n ).card  16 * (n / ε) ^ 2
    theorem FABL.smallBiasGenerator_core_powerOfTwo
      (fieldDegree biasBits : )
      (hfield : 0 < fieldDegree)
      (hbits : biasBits  fieldDegree) :
      have n := 2 ^ (fieldDegree - biasBits);
      have ε := (↑(2 ^ biasBits))⁻¹;
      (FABL.smallBiasGeneratorDensity n
              ).IsBiased
          ε 
        (FABL.smallBiasGeneratorMultiset n
                ).card 
          16 * (n / ε) ^ 2
    The power-of-two special case delegates directly to the established mathematical core. 
Proposition6.3.11
Group: Chapter 6: Pseudorandomness and F₂-polynomials (115)
Group member previews
Preview
Proposition 6.1.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
Statement uses 3
Statement dependency previews
Preview
Lemma 3.2.5
Loading preview
Statement dependency preview content is loaded from the rendered-fragment cache.
used by 1L∃∀N

Proposition 6.31. Let H\in\mathbb F_2^{m\times n} and let A\le\mathbb F_2^n be the span of the rows of H. The density \varphi_A is k-wise independent if and only if every nonempty sum of at most k columns of H is nonzero in \mathbb F_2^m.

Lean code for Proposition6.3.117 declarations
  • defdefined in FABL/Chapter06/Constructions/KWiseIndependence.lean
    complete
    def FABL.matrixRowSpan {m n : } (H : Matrix (Fin m) (Fin n) FABL.𝔽₂) :
      Submodule FABL.𝔽₂ (FABL.F₂Cube n)
    def FABL.matrixRowSpan {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂) :
      Submodule FABL.𝔽₂ (FABL.F₂Cube n)
    The row space of `H`, represented as the range of its row-combination linear map. 
  • theoremdefined in FABL/Chapter06/Constructions/KWiseIndependence.lean
    complete
    theorem FABL.matrixRowSpan_eq_span_rows {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂) :
      FABL.matrixRowSpan H = Submodule.span FABL.𝔽₂ (Set.range H.row)
    theorem FABL.matrixRowSpan_eq_span_rows {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂) :
      FABL.matrixRowSpan H =
        Submodule.span FABL.𝔽₂
          (Set.range H.row)
    The range representation of `matrixRowSpan` is exactly the span of the rows. 
  • defdefined in FABL/Chapter06/Constructions/KWiseIndependence.lean
    complete
    def FABL.matrixColumnSum {m n : } (H : Matrix (Fin m) (Fin n) FABL.𝔽₂)
      (S : Finset (Fin n)) : FABL.F₂Cube m
    def FABL.matrixColumnSum {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂)
      (S : Finset (Fin n)) : FABL.F₂Cube m
    The sum of the columns indexed by `S`, expressed as multiplication by its indicator vector. 
  • defdefined in FABL/Chapter06/Constructions/KWiseIndependence.lean
    complete
    def FABL.HasNonzeroColumnSumsUpTo {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂) (k : ) : Prop
    def FABL.HasNonzeroColumnSumsUpTo {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂)
      (k : ) : Prop
    Every nonempty sum of at most `k` columns of `H` is nonzero. 
  • defdefined in FABL/Chapter06/Constructions/KWiseIndependence.lean
    complete
    def FABL.matrixRowSpanDensity {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂) : FABL.ProbabilityDensity n
    def FABL.matrixRowSpanDensity {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂) :
      FABL.ProbabilityDensity n
    The normalized uniform density on the row span of `H`. 
  • theoremdefined in FABL/Chapter06/Constructions/KWiseIndependence.lean
    complete
    theorem FABL.vectorFourierCoeff_matrixRowSpanDensity {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂) (γ : FABL.F₂Cube n) :
      FABL.vectorFourierCoeff (FABL.matrixRowSpanDensity H).toFun γ =
        if H.mulVec γ = 0 then 1 else 0
    theorem FABL.vectorFourierCoeff_matrixRowSpanDensity
      {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂)
      (γ : FABL.F₂Cube n) :
      FABL.vectorFourierCoeff
          (FABL.matrixRowSpanDensity H).toFun
          γ =
        if H.mulVec γ = 0 then 1 else 0
    The row-span density has coefficient one exactly on the kernel of `H`. 
  • theoremdefined in FABL/Chapter06/Constructions/KWiseIndependence.lean
    complete
    theorem FABL.matrixRowSpanDensity_isKWiseIndependent_iff {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂) (k : ) :
      FABL.IsLowDegreeFourierRegular 0 k
          (FABL.binaryFunctionOnSignCube
            (FABL.matrixRowSpanDensity H).toFun) 
        FABL.HasNonzeroColumnSumsUpTo H k
    theorem FABL.matrixRowSpanDensity_isKWiseIndependent_iff
      {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂)
      (k : ) :
      FABL.IsLowDegreeFourierRegular 0 k
          (FABL.binaryFunctionOnSignCube
            (FABL.matrixRowSpanDensity
                H).toFun) 
        FABL.HasNonzeroColumnSumsUpTo H k
    O'Donnell, Proposition 6.31: the row-span density is `k`-wise independent
    exactly when every nonempty sum of at most `k` columns is nonzero. 
Lemma6.3.12
Group: Chapter 6: Pseudorandomness and F₂-polynomials (115)
Group member previews
Preview
Proposition 6.1.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
uses 1used by 1L∃∀N

Vandermonde nonsingularity. If \alpha_1,\ldots,\alpha_k are distinct elements of a field, then \begin{bmatrix} 1&1&\cdots&1\\ \alpha_1&\alpha_2&\cdots&\alpha_k\\ \alpha_1^2&\alpha_2^2&\cdots&\alpha_k^2\\ \vdots&\vdots&\ddots&\vdots\\ \alpha_1^{k-1}&\alpha_2^{k-1}&\cdots&\alpha_k^{k-1} \end{bmatrix} is nonsingular. Consequently, in the matrix whose columns are (1,\alpha,\ldots,\alpha^{k-1})^{\mathsf T} as \alpha ranges over a field, every set of at most k columns is linearly independent.

Lean code for Lemma6.3.123 theorems
  • theoremdefined in FABL/Chapter06/Constructions/FiniteFields.lean
    complete
    theorem FABL.det_vandermonde_ne_zero_of_injective.{u_1} {K : Type u_1} [Field K]
      {k : } (α : Fin k  K) ( : Function.Injective α) :
      (Matrix.vandermonde α).det  0
    theorem FABL.det_vandermonde_ne_zero_of_injective.{u_1}
      {K : Type u_1} [Field K] {k : }
      (α : Fin k  K)
      ( : Function.Injective α) :
      (Matrix.vandermonde α).det  0
    Distinct evaluation points give a nonsingular Vandermonde matrix. 
  • theoremdefined in FABL/Chapter06/Constructions/FiniteFields.lean
    complete
    theorem FABL.eq_zero_of_vandermonde_mulVec_eq_zero.{u_1} {K : Type u_1}
      [Field K] {k : } (α : Fin k  K) ( : Function.Injective α)
      (v : Fin k  K) (hv : (Matrix.vandermonde α).mulVec v = 0) : v = 0
    theorem FABL.eq_zero_of_vandermonde_mulVec_eq_zero.{u_1}
      {K : Type u_1} [Field K] {k : }
      (α : Fin k  K)
      ( : Function.Injective α)
      (v : Fin k  K)
      (hv :
        (Matrix.vandermonde α).mulVec v = 0) :
      v = 0
    A vector annihilated by a Vandermonde matrix at distinct points is zero. 
  • theoremdefined in FABL/Chapter06/Constructions/VandermondeConstruction.lean
    complete
    theorem FABL.vandermondeBinaryMatrixOfPoints_hasNonzeroColumnSumsUpTo (k : )
      { n : } (hℓ :   0) (α : Fin n  FABL.BinaryExtensionField )
      ( : Function.Injective α) :
      FABL.HasNonzeroColumnSumsUpTo
        (FABL.vandermondeBinaryMatrixOfPoints k hℓ α) k
    theorem FABL.vandermondeBinaryMatrixOfPoints_hasNonzeroColumnSumsUpTo
      (k : ) { n : } (hℓ :   0)
      (α :
        Fin n  FABL.BinaryExtensionField )
      ( : Function.Injective α) :
      FABL.HasNonzeroColumnSumsUpTo
        (FABL.vandermondeBinaryMatrixOfPoints
          k hℓ α)
        k
    Distinct extension-field points give a binary matrix whose nonempty column
    sums of cardinality at most `k` are nonzero. 
Theorem6.3.13
Group: Chapter 6: Pseudorandomness and F₂-polynomials (115)
Group member previews
Preview
Proposition 6.1.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
Statement uses 2
Statement dependency previews
Preview
Lemma 6.3.7
Loading preview
Statement dependency preview content is loaded from the rendered-fragment cache.
Used by 4
Reverse dependency previews
Preview
Corollary 6.3.14
Loading preview
Reverse dependency preview content is loaded from the rendered-fragment cache.
L∃∀N

Theorem 6.32. Let k,\ell\in\mathbb N^+, assume n=2^\ell\ge k, and put m=(k-1)\ell+1. There is a matrix H\in\mathbb F_2^{m\times n} such that every nonempty sum of at most k columns of H is nonzero.

Explicitly, enumerate \mathbb F_{2^\ell} as \alpha_1,\ldots,\alpha_n, form the k\times n matrix over \mathbb F_{2^\ell} with jth column (1,\alpha_j,\alpha_j^2,\ldots,\alpha_j^{k-1})^{\mathsf T}, and replace each nonconstant field entry by its \ell-bit linear encoding.

Lean code for Theorem6.3.133 declarations
  • defdefined in FABL/Chapter06/Constructions/VandermondeConstruction.lean
    complete
    def FABL.vandermondeBinaryMatrix (k : ) { : } (hℓ :   0) :
      Matrix (Fin ((k - 1) *  + 1)) (Fin (2 ^ )) FABL.𝔽₂
    def FABL.vandermondeBinaryMatrix (k : )
      { : } (hℓ :   0) :
      Matrix (Fin ((k - 1) *  + 1))
        (Fin (2 ^ )) FABL.𝔽₂
    The full binary Vandermonde matrix obtained by enumerating the extension field. 
  • theoremdefined in FABL/Chapter06/Constructions/VandermondeConstruction.lean
    complete
    theorem FABL.vandermondeBinaryMatrix_hasNonzeroColumnSumsUpTo (k : ) { : }
      (hℓ :   0) :
      FABL.HasNonzeroColumnSumsUpTo (FABL.vandermondeBinaryMatrix k hℓ) k
    theorem FABL.vandermondeBinaryMatrix_hasNonzeroColumnSumsUpTo
      (k : ) { : } (hℓ :   0) :
      FABL.HasNonzeroColumnSumsUpTo
        (FABL.vandermondeBinaryMatrix k hℓ) k
    The explicitly enumerated binary Vandermonde matrix has the required
    nonzero-column-sum property. 
  • theoremdefined in FABL/Chapter06/Constructions/VandermondeConstruction.lean
    complete
    theorem FABL.exists_vandermondeBinaryMatrix {k  n : } (_hk : 1  k)
      (hℓ : 1  ) (hn : n = 2 ^ ) (hkn : k  n) :
       H, FABL.HasNonzeroColumnSumsUpTo H k
    theorem FABL.exists_vandermondeBinaryMatrix
      {k  n : } (_hk : 1  k) (hℓ : 1  )
      (hn : n = 2 ^ ) (hkn : k  n) :
       H, FABL.HasNonzeroColumnSumsUpTo H k
    O'Donnell, Theorem 6.32: when `n = 2 ^ ℓ ≥ k`, there is an
    `((k - 1) * ℓ + 1) × n` binary matrix in which every nonempty sum of at
    most `k` columns is nonzero. 
Corollary6.3.14
Group: Chapter 6: Pseudorandomness and F₂-polynomials (115)
Group member previews
Preview
Proposition 6.1.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
Statement uses 2
Statement dependency previews
Preview
Proposition 6.3.11
Loading preview
Statement dependency preview content is loaded from the rendered-fragment cache.
Used by 2
Reverse dependency previews
Preview
Lemma 6.6.21
Loading preview
Reverse dependency preview content is loaded from the rendered-fragment cache.
L∃∀N

Corollary 6.33. There is a deterministic algorithm that, given integers 1\le k\le n, runs in \operatorname{poly}(n^k) time and outputs a subspace A\le\mathbb F_2^n such that \varphi_A is k-wise independent and |A|\le 2^k n^{k-1}.

Lean code for Corollary6.3.1436 declarations
  • theoremdefined in FABL/Chapter06/Constructions/VandermondeConstruction.lean
    complete
    theorem FABL.exists_kWiseIndependentSubspace_card_le (k n : ) (hk : 1  k)
      (hkn : k  n) :
       A,
        FABL.IsLowDegreeFourierRegular 0 k
            (FABL.binaryFunctionOnSignCube
              (FABL.subsetDensity A ).toFun) 
          Nat.card A  2 ^ k * n ^ (k - 1)
    theorem FABL.exists_kWiseIndependentSubspace_card_le
      (k n : ) (hk : 1  k) (hkn : k  n) :
       A,
        FABL.IsLowDegreeFourierRegular 0 k
            (FABL.binaryFunctionOnSignCube
              (FABL.subsetDensity A
                  ).toFun) 
          Nat.card A  2 ^ k * n ^ (k - 1)
    O'Donnell, Corollary 6.33, pure mathematical conclusion: for
    `1 ≤ k ≤ n`, a `k`-wise independent binary subspace exists with cardinality
    at most `2 ^ k * n ^ (k - 1)`. 
  • structure(4 fields)defined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    structure FABL.ExecutableVandermondeInput : Type
    structure FABL.ExecutableVandermondeInput : Type
    Finite input for the deterministic conclusion of Corollary 6.33. 
    k : 
    Required independence order. 
    n : 
    Output dimension. 
    one_le_k : 1  self.k
    The independence order is positive. 
    k_le_n : self.k  self.n
    The independence order does not exceed the output dimension. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.ExecutableVandermondeInput.n_pos
      (input : FABL.ExecutableVandermondeInput) : 0 < input.n
    theorem FABL.ExecutableVandermondeInput.n_pos
      (input :
        FABL.ExecutableVandermondeInput) :
      0 < input.n
    A valid Vandermonde input has positive output dimension. 
  • defdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    def FABL.ExecutableVandermondeInput.fieldDegree
      (input : FABL.ExecutableVandermondeInput) : 
    def FABL.ExecutableVandermondeInput.fieldDegree
      (input :
        FABL.ExecutableVandermondeInput) :
      
    The guarded binary field degree used by Corollary 6.33. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.ExecutableVandermondeInput.fieldDegree_pos
      (input : FABL.ExecutableVandermondeInput) : 0 < input.fieldDegree
    theorem FABL.ExecutableVandermondeInput.fieldDegree_pos
      (input :
        FABL.ExecutableVandermondeInput) :
      0 < input.fieldDegree
    The selected binary field degree is positive. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.ExecutableVandermondeInput.n_le_fieldSize
      (input : FABL.ExecutableVandermondeInput) :
      input.n  2 ^ input.fieldDegree
    theorem FABL.ExecutableVandermondeInput.n_le_fieldSize
      (input :
        FABL.ExecutableVandermondeInput) :
      input.n  2 ^ input.fieldDegree
    The selected binary field contains at least `n` coefficient vectors. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.ExecutableVandermondeInput.fieldSize_le_two_n
      (input : FABL.ExecutableVandermondeInput) :
      2 ^ input.fieldDegree  2 * input.n
    theorem FABL.ExecutableVandermondeInput.fieldSize_le_two_n
      (input :
        FABL.ExecutableVandermondeInput) :
      2 ^ input.fieldDegree  2 * input.n
    The least covering binary field has size at most twice the output
    dimension. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.ExecutableVandermondeInput.fieldDegree_succ_le
      (input : FABL.ExecutableVandermondeInput) :
      input.fieldDegree + 1  4 * (input.n + 1)
    theorem FABL.ExecutableVandermondeInput.fieldDegree_succ_le
      (input :
        FABL.ExecutableVandermondeInput) :
      input.fieldDegree + 1 
        4 * (input.n + 1)
    A linear bound on the selected degree, used only to state the constructor
    work as a polynomial in the finite input. 
  • defdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    def FABL.ExecutableVandermondeInput.fieldImplementation
      (input : FABL.ExecutableVandermondeInput) :
      FABL.CertifiedBinaryFieldImplementation input.fieldDegree
    def FABL.ExecutableVandermondeInput.fieldImplementation
      (input :
        FABL.ExecutableVandermondeInput) :
      FABL.CertifiedBinaryFieldImplementation
        input.fieldDegree
    The certified modulus selected by the deterministic finite-field search. 
  • defdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    def FABL.executableVandermondePoint
      (input : FABL.ExecutableVandermondeInput) (j : Fin input.n) :
      FABL.F₂Cube input.fieldDegree
    def FABL.executableVandermondePoint
      (input :
        FABL.ExecutableVandermondeInput)
      (j : Fin input.n) :
      FABL.F₂Cube input.fieldDegree
    The `j`th point is the `j`th coefficient vector in the fixed recursive
    enumeration. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.executableVandermondePoint_injective
      (input : FABL.ExecutableVandermondeInput) :
      Function.Injective (FABL.executableVandermondePoint input)
    theorem FABL.executableVandermondePoint_injective
      (input :
        FABL.ExecutableVandermondeInput) :
      Function.Injective
        (FABL.executableVandermondePoint
          input)
    The selected prefix of the binary-vector enumeration has no repeated
    points. 
  • defdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    def FABL.executableVandermondeRowEquiv (k  : ) :
      FABL.VandermondeBinaryRow k   Fin ((k - 1) *  + 1)
    def FABL.executableVandermondeRowEquiv
      (k  : ) :
      FABL.VandermondeBinaryRow k  
        Fin ((k - 1) *  + 1)
    A computable reindexing of the constant row and the binary power rows by
    the row count `(k - 1) * ℓ + 1`. 
  • defdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    def FABL.executableVandermondeMatrix
      (input : FABL.ExecutableVandermondeInput) :
      Matrix (Fin ((input.k - 1) * input.fieldDegree + 1)) (Fin input.n)
        FABL.𝔽₂
    def FABL.executableVandermondeMatrix
      (input :
        FABL.ExecutableVandermondeInput) :
      Matrix
        (Fin
          ((input.k - 1) * input.fieldDegree +
            1))
        (Fin input.n) FABL.𝔽₂
    The executable binary Vandermonde matrix on the selected prefix of
    coefficient vectors. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.executableBinaryField_finrank { : }
      (implementation : FABL.CertifiedBinaryFieldImplementation ) :
      Module.finrank FABL.𝔽₂
          (AdjoinRoot (FABL.binaryMonicPolynomial implementation.modulus)) =
        
    theorem FABL.executableBinaryField_finrank { : }
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          ) :
      Module.finrank FABL.𝔽₂
          (AdjoinRoot
            (FABL.binaryMonicPolynomial
              implementation.modulus)) =
        
    The certified polynomial quotient has the degree of its monic binary
    modulus. 
  • defdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    def FABL.executableVandermondeFieldEquiv { : }
      (implementation : FABL.CertifiedBinaryFieldImplementation ) :
      AdjoinRoot
          (FABL.binaryMonicPolynomial implementation.modulus) ≃ₐ[FABL.𝔽₂]
        FABL.BinaryExtensionField 
    def FABL.executableVandermondeFieldEquiv
      { : }
      (implementation :
        FABL.CertifiedBinaryFieldImplementation
          ) :
      AdjoinRoot
          (FABL.binaryMonicPolynomial
            implementation.modulus) ≃ₐ[FABL.𝔽₂]
        FABL.BinaryExtensionField 
    The certified polynomial quotient is noncanonically identified with
    Mathlib's binary Galois field solely in the proof layer. 
  • defdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    def FABL.executableVandermondeFieldPoint
      (input : FABL.ExecutableVandermondeInput) (j : Fin input.n) :
      FABL.BinaryExtensionField input.fieldDegree
    def FABL.executableVandermondeFieldPoint
      (input :
        FABL.ExecutableVandermondeInput)
      (j : Fin input.n) :
      FABL.BinaryExtensionField
        input.fieldDegree
    The proof-layer extension-field point represented by one executable
    coefficient vector. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.executableVandermondeFieldPoint_power
      (input : FABL.ExecutableVandermondeInput) (q : Fin (input.k - 1))
      (j : Fin input.n) :
      (FABL.executableVandermondeFieldEquiv input.fieldImplementation)
          (FABL.binaryAdjoinRootEncode input.fieldImplementation.modulus
            (FABL.binaryPowMod  input.fieldImplementation
              (FABL.executableVandermondePoint input j) (q + 1))) =
        FABL.executableVandermondeFieldPoint input j ^ (q + 1)
    theorem FABL.executableVandermondeFieldPoint_power
      (input :
        FABL.ExecutableVandermondeInput)
      (q : Fin (input.k - 1))
      (j : Fin input.n) :
      (FABL.executableVandermondeFieldEquiv
            input.fieldImplementation)
          (FABL.binaryAdjoinRootEncode
            input.fieldImplementation.modulus
            (FABL.binaryPowMod 
              input.fieldImplementation
              (FABL.executableVandermondePoint
                input j)
              (q + 1))) =
        FABL.executableVandermondeFieldPoint
            input j ^
          (q + 1)
    Encoding one executable power and transporting it to the Galois-field
    model gives the corresponding power of the proof-layer point. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.executableVandermondeFieldPoint_injective
      (input : FABL.ExecutableVandermondeInput) :
      Function.Injective (FABL.executableVandermondeFieldPoint input)
    theorem FABL.executableVandermondeFieldPoint_injective
      (input :
        FABL.ExecutableVandermondeInput) :
      Function.Injective
        (FABL.executableVandermondeFieldPoint
          input)
    Distinct executable coefficient vectors give distinct proof-layer field
    points. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.executableVandermondeMatrix_hasNonzeroColumnSumsUpTo
      (input : FABL.ExecutableVandermondeInput) :
      FABL.HasNonzeroColumnSumsUpTo (FABL.executableVandermondeMatrix input)
        input.k
    theorem FABL.executableVandermondeMatrix_hasNonzeroColumnSumsUpTo
      (input :
        FABL.ExecutableVandermondeInput) :
      FABL.HasNonzeroColumnSumsUpTo
        (FABL.executableVandermondeMatrix
          input)
        input.k
    The executable matrix has the same nonzero-column-sum guarantee as the
    pure Vandermonde matrix.  Only the power coordinates are transported; the
    Vandermonde nonsingularity argument is reused from Theorem 6.32. 
  • defdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    def FABL.executableVandermondeSubspace
      (input : FABL.ExecutableVandermondeInput) :
      Submodule FABL.𝔽₂ (FABL.F₂Cube input.n)
    def FABL.executableVandermondeSubspace
      (input :
        FABL.ExecutableVandermondeInput) :
      Submodule FABL.𝔽₂ (FABL.F₂Cube input.n)
    The explicit binary subspace output by the deterministic construction. 
  • defdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    def FABL.executableVandermondeDensity
      (input : FABL.ExecutableVandermondeInput) :
      FABL.ProbabilityDensity input.n
    def FABL.executableVandermondeDensity
      (input :
        FABL.ExecutableVandermondeInput) :
      FABL.ProbabilityDensity input.n
    The uniform probability density on the explicit output subspace. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.executableVandermondeDensity_isKWiseIndependent
      (input : FABL.ExecutableVandermondeInput) :
      FABL.IsLowDegreeFourierRegular 0 input.k
        (FABL.binaryFunctionOnSignCube
          (FABL.executableVandermondeDensity input).toFun)
    theorem FABL.executableVandermondeDensity_isKWiseIndependent
      (input :
        FABL.ExecutableVandermondeInput) :
      FABL.IsLowDegreeFourierRegular 0 input.k
        (FABL.binaryFunctionOnSignCube
          (FABL.executableVandermondeDensity
              input).toFun)
    The output density is `k`-wise independent, by Proposition 6.31 and the
    transported Vandermonde certificate. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.card_matrixRowSpan_le_two_pow {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂) :
      Nat.card (FABL.matrixRowSpan H)  2 ^ m
    theorem FABL.card_matrixRowSpan_le_two_pow
      {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂) :
      Nat.card (FABL.matrixRowSpan H)  2 ^ m
    The row span of an `m`-row binary matrix has at most `2^m` elements. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.executableVandermondeRowCount_cardBound
      (input : FABL.ExecutableVandermondeInput) :
      2 ^ ((input.k - 1) * input.fieldDegree + 1) 
        2 ^ input.k * input.n ^ (input.k - 1)
    theorem FABL.executableVandermondeRowCount_cardBound
      (input :
        FABL.ExecutableVandermondeInput) :
      2 ^
          ((input.k - 1) * input.fieldDegree +
            1) 
        2 ^ input.k * input.n ^ (input.k - 1)
    The executable row count obeys the numerical bound in Corollary 6.33. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.executableVandermondeSubspace_card_le
      (input : FABL.ExecutableVandermondeInput) :
      Nat.card (FABL.executableVandermondeSubspace input) 
        2 ^ input.k * input.n ^ (input.k - 1)
    theorem FABL.executableVandermondeSubspace_card_le
      (input :
        FABL.ExecutableVandermondeInput) :
      Nat.card
          (FABL.executableVandermondeSubspace
              input) 
        2 ^ input.k * input.n ^ (input.k - 1)
    The explicit row span has the cardinality promised by Corollary 6.33. 
  • defdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    def FABL.executableVandermondePowerRowsWork ( : ) :   
    def FABL.executableVandermondePowerRowsWork
      ( : ) :   
    Exact work for materializing the `p` nonconstant power blocks of one
    column. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.executableVandermondePowerRowsWork_eq_sum ( p : ) :
      FABL.executableVandermondePowerRowsWork  p =
         q  Finset.range p,
          (FABL.executableSmallBiasPowerWork  (q + 1) +  + 1)
    theorem FABL.executableVandermondePowerRowsWork_eq_sum
      ( p : ) :
      FABL.executableVandermondePowerRowsWork
           p =
         q  Finset.range p,
          (FABL.executableSmallBiasPowerWork 
                (q + 1) +
               +
            1)
    The exact power-block work is the sum of the charges generated by its
    visible successor constructors. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.executableVandermondePowerRowsWork_le ( p : ) :
      FABL.executableVandermondePowerRowsWork  p 
        p * (2 *  + p * (FABL.binaryMulModWork  + 1) + 1)
    theorem FABL.executableVandermondePowerRowsWork_le
      ( p : ) :
      FABL.executableVandermondePowerRowsWork
           p 
        p *
          (2 *  +
              p *
                (FABL.binaryMulModWork  +
                  1) +
            1)
    Every exponent in the first `p` power rows is at most `p`. 
  • defdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    def FABL.executableVandermondeConstructionWork (k n : ) : 
    def FABL.executableVandermondeConstructionWork
      (k n : ) : 
    Total charged work: deterministic field preprocessing followed by one
    finite traversal for each matrix column. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.executableVandermondeConstructionWork_eq (k n : ) :
      FABL.executableVandermondeConstructionWork k n =
        have  := max 1 (Nat.clog 2 n);
        FABL.binaryFieldPreprocessingWork  +
          n * (FABL.executableVandermondePowerRowsWork  (k - 1) + 1)
    theorem FABL.executableVandermondeConstructionWork_eq
      (k n : ) :
      FABL.executableVandermondeConstructionWork
          k n =
        have  := max 1 (Nat.clog 2 n);
        FABL.binaryFieldPreprocessingWork  +
          n *
            (FABL.executableVandermondePowerRowsWork
                 (k - 1) +
              1)
    The constructor-derived work has this exact closed traversal form. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.executableVandermondeConstructionWork_eq_sum (k n : ) :
      FABL.executableVandermondeConstructionWork k n =
        have  := max 1 (Nat.clog 2 n);
        FABL.binaryFieldPreprocessingWork  +
          n *
            ( q  Finset.range (k - 1),
                (FABL.executableSmallBiasPowerWork  (q + 1) +  + 1) +
              1)
    theorem FABL.executableVandermondeConstructionWork_eq_sum
      (k n : ) :
      FABL.executableVandermondeConstructionWork
          k n =
        have  := max 1 (Nat.clog 2 n);
        FABL.binaryFieldPreprocessingWork  +
          n *
            ( q  Finset.range (k - 1),
                (FABL.executableSmallBiasPowerWork
                       (q + 1) +
                     +
                  1) +
              1)
    The exact work written entirely as the finite sum generated by the power
    row constructors. 
  • defdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    def FABL.ExecutableVandermondeInput.scale
      (input : FABL.ExecutableVandermondeInput) : 
    def FABL.ExecutableVandermondeInput.scale
      (input :
        FABL.ExecutableVandermondeInput) :
      
    The finite natural scale in the book's phrase `poly(n^k)`. 
  • defdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    def FABL.ExecutableVandermondeInput.polynomialBudget
      (input : FABL.ExecutableVandermondeInput) : 
    def FABL.ExecutableVandermondeInput.polynomialBudget
      (input :
        FABL.ExecutableVandermondeInput) :
      
    An explicit fixed polynomial budget in the finite scale `n^k`. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.executableVandermondeConstructionWork_le_polynomialBudget
      (input : FABL.ExecutableVandermondeInput) :
      FABL.executableVandermondeConstructionWork input.k input.n 
        input.polynomialBudget
    theorem FABL.executableVandermondeConstructionWork_le_polynomialBudget
      (input :
        FABL.ExecutableVandermondeInput) :
      FABL.executableVandermondeConstructionWork
          input.k input.n 
        input.polynomialBudget
    The complete deterministic construction work is bounded by a fixed
    polynomial in `n^k`. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.executableVandermondeConstructionWork_isBigO :
      (fun input =>
          (FABL.executableVandermondeConstructionWork input.k
              input.n)) =O[Filter.comap
          FABL.ExecutableVandermondeInput.scale Filter.atTop]
        fun input => ((input.scale + 1) ^ 8)
    theorem FABL.executableVandermondeConstructionWork_isBigO :
      (fun input =>
          (FABL.executableVandermondeConstructionWork
              input.k
              input.n)) =O[Filter.comap
          FABL.ExecutableVandermondeInput.scale
          Filter.atTop]
        fun input => ((input.scale + 1) ^ 8)
    The constructor work is `O((n^k + 1)^8)` over valid finite inputs. 
  • theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.lean
    complete
    theorem FABL.executableVandermondeAlgorithm_spec
      (input : FABL.ExecutableVandermondeInput) :
      FABL.HasNonzeroColumnSumsUpTo (FABL.executableVandermondeMatrix input)
          input.k 
        FABL.IsLowDegreeFourierRegular 0 input.k
            (FABL.binaryFunctionOnSignCube
              (FABL.executableVandermondeDensity input).toFun) 
          Nat.card (FABL.executableVandermondeSubspace input) 
              2 ^ input.k * input.n ^ (input.k - 1) 
            FABL.executableVandermondeConstructionWork input.k input.n =
                FABL.binaryFieldPreprocessingWork input.fieldDegree +
                  input.n *
                    ( q  Finset.range (input.k - 1),
                        (FABL.executableSmallBiasPowerWork input.fieldDegree
                              (q + 1) +
                            input.fieldDegree +
                          1) +
                      1) 
              FABL.executableVandermondeConstructionWork input.k input.n 
                input.polynomialBudget
    theorem FABL.executableVandermondeAlgorithm_spec
      (input :
        FABL.ExecutableVandermondeInput) :
      FABL.HasNonzeroColumnSumsUpTo
          (FABL.executableVandermondeMatrix
            input)
          input.k 
        FABL.IsLowDegreeFourierRegular 0
            input.k
            (FABL.binaryFunctionOnSignCube
              (FABL.executableVandermondeDensity
                  input).toFun) 
          Nat.card
                (FABL.executableVandermondeSubspace
                    input) 
              2 ^ input.k *
                input.n ^ (input.k - 1) 
            FABL.executableVandermondeConstructionWork
                  input.k input.n =
                FABL.binaryFieldPreprocessingWork
                    input.fieldDegree +
                  input.n *
                    (
                        q 
                          Finset.range
                            (input.k - 1),
                        (FABL.executableSmallBiasPowerWork
                              input.fieldDegree
                              (q + 1) +
                            input.fieldDegree +
                          1) +
                      1) 
              FABL.executableVandermondeConstructionWork
                  input.k input.n 
                input.polynomialBudget
    O'Donnell, Corollary 6.33, deterministic algorithmic conclusion: the
    visible finite construction returns a `k`-wise independent binary subspace of
    cardinality at most `2^k n^(k-1)`, within explicit polynomial work in `n^k`. 
Lemma6.3.15
Group: Chapter 6: Pseudorandomness and F₂-polynomials (115)
Group member previews
Preview
Proposition 6.1.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
Statement uses 3
Statement dependency previews
Preview
Lemma 1.3.5
Loading preview
Statement dependency preview content is loaded from the rendered-fragment cache.
used by 1L∃∀N

Lemma 6.34. Suppose H\in\mathbb F_2^{m\times n} has the property that every nonempty sum of at most k columns is nonzero. Let \varphi be an \epsilon-biased density on \mathbb F_2^m. Draw y\sim\varphi and set z=y^{\mathsf T}H\in\mathbb F_2^n. Then the density of z is (\epsilon,k)-wise independent.

Lean code for Lemma6.3.155 declarations
  • defdefined in FABL/Chapter01/ProbabilityDensityPushforward.lean
    complete
    def FABL.ProbabilityDensity.pushforward {m n : }
      (φ : FABL.ProbabilityDensity m) (L : FABL.F₂Cube m  FABL.F₂Cube n) :
      FABL.ProbabilityDensity n
    def FABL.ProbabilityDensity.pushforward
      {m n : }
      (φ : FABL.ProbabilityDensity m)
      (L : FABL.F₂Cube m  FABL.F₂Cube n) :
      FABL.ProbabilityDensity n
    The density of the pushforward of `φ` through a map between finite binary cubes. 
  • theoremdefined in FABL/Chapter01/ProbabilityDensityPushforward.lean
    complete
    theorem FABL.ProbabilityDensity.pushforward_expectation {m n : }
      (φ : FABL.ProbabilityDensity m) (L : FABL.F₂Cube m  FABL.F₂Cube n)
      (g : FABL.F₂Cube n  ) :
      (φ.pushforward L).expectation g = φ.expectation fun y => g (L y)
    theorem FABL.ProbabilityDensity.pushforward_expectation
      {m n : }
      (φ : FABL.ProbabilityDensity m)
      (L : FABL.F₂Cube m  FABL.F₂Cube n)
      (g : FABL.F₂Cube n  ) :
      (φ.pushforward L).expectation g =
        φ.expectation fun y => g (L y)
    Integration against a finite-density pushforward is integration after composition. 
  • defdefined in FABL/Chapter06/Constructions/KWiseIndependence.lean
    complete
    def FABL.matrixPushforwardDensity {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂) (φ : FABL.ProbabilityDensity m) :
      FABL.ProbabilityDensity n
    def FABL.matrixPushforwardDensity {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂)
      (φ : FABL.ProbabilityDensity m) :
      FABL.ProbabilityDensity n
    The density of `yᵀH` when `y` has density `φ`. 
  • theoremdefined in FABL/Chapter06/Constructions/KWiseIndependence.lean
    complete
    theorem FABL.vectorFourierCoeff_matrixPushforwardDensity {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂) (φ : FABL.ProbabilityDensity m)
      (γ : FABL.F₂Cube n) :
      FABL.vectorFourierCoeff (FABL.matrixPushforwardDensity H φ).toFun γ =
        FABL.vectorFourierCoeff φ.toFun (H.mulVec γ)
    theorem FABL.vectorFourierCoeff_matrixPushforwardDensity
      {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂)
      (φ : FABL.ProbabilityDensity m)
      (γ : FABL.F₂Cube n) :
      FABL.vectorFourierCoeff
          (FABL.matrixPushforwardDensity H
              φ).toFun
          γ =
        FABL.vectorFourierCoeff φ.toFun
          (H.mulVec γ)
    Fourier coefficients of the pushed density are the source coefficients at `Hγ`. 
  • theoremdefined in FABL/Chapter06/Constructions/KWiseIndependence.lean
    complete
    theorem FABL.matrixPushforwardDensity_isApproximatelyKWiseIndependent {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂) (φ : FABL.ProbabilityDensity m)
      (ε : ) (k : ) (hcolumns : FABL.HasNonzeroColumnSumsUpTo H k)
      (hbiased : φ.IsBiased ε) :
      FABL.IsLowDegreeFourierRegular ε k
        (FABL.binaryFunctionOnSignCube
          (FABL.matrixPushforwardDensity H φ).toFun)
    theorem FABL.matrixPushforwardDensity_isApproximatelyKWiseIndependent
      {m n : }
      (H : Matrix (Fin m) (Fin n) FABL.𝔽₂)
      (φ : FABL.ProbabilityDensity m) (ε : )
      (k : )
      (hcolumns :
        FABL.HasNonzeroColumnSumsUpTo H k)
      (hbiased : φ.IsBiased ε) :
      FABL.IsLowDegreeFourierRegular ε k
        (FABL.binaryFunctionOnSignCube
          (FABL.matrixPushforwardDensity H
              φ).toFun)
    O'Donnell, Lemma 6.34: pushing an `ε`-biased density through `y ↦ yᵀH`
    is `(ε,k)`-wise independent when all nonempty sums of at most `k` columns
    are nonzero. 
Theorem6.3.16
Group: Chapter 6: Pseudorandomness and F₂-polynomials (115)
Group member previews
Preview
Proposition 6.1.1
Loading preview
Group member preview content is loaded from the rendered-fragment cache.
Statement uses 3
Statement dependency previews
Preview
Theorem 6.3.10
Loading preview
Statement dependency preview content is loaded from the rendered-fragment cache.
used by 0L∃∀N

Theorem 6.35. There is a deterministic algorithm that, given 1\le k\le n and 0<\epsilon\le1/2, runs in \operatorname{poly}(n/\epsilon) time and outputs a multiset A\subseteq\mathbb F_2^n whose cardinality is a power of 2 and satisfies |A|=O\!\left(\left(\frac{k\log n}{\epsilon}\right)^2\right). The density \varphi_A is (\epsilon,k)-wise independent. Equivalently, the distribution can be sampled using O(\log k+\log\log n+\log(1/\epsilon)) independent random bits.

Lean code for Theorem6.3.1648 declarations
  • structure(8 fields)defined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    structure FABL.AlmostKWiseInput : Type
    structure FABL.AlmostKWiseInput : Type
    Finite rational input for Theorem 6.35. 
    k : 
    Required independence order. 
    n : 
    Output dimension. 
    numerator : 
    Numerator of the requested rational bias. 
    denominator : 
    Denominator of the requested rational bias. 
    one_le_k : 1  self.k
    The independence order is positive. 
    k_le_n : self.k  self.n
    The independence order does not exceed the output dimension. 
    numerator_pos : 0 < self.numerator
    The rational bias is positive. 
    twice_numerator_le_denominator : 2 * self.numerator  self.denominator
    The rational bias is at most one half. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.AlmostKWiseInput.n_pos (input : FABL.AlmostKWiseInput) :
      0 < input.n
    theorem FABL.AlmostKWiseInput.n_pos
      (input : FABL.AlmostKWiseInput) :
      0 < input.n
    A valid almost-wise input has positive ambient dimension. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.AlmostKWiseInput.vandermondeInput (input : FABL.AlmostKWiseInput) :
      FABL.ExecutableVandermondeInput
    def FABL.AlmostKWiseInput.vandermondeInput
      (input : FABL.AlmostKWiseInput) :
      FABL.ExecutableVandermondeInput
    The executable Vandermonde input determined by the finite parameters. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.AlmostKWiseInput.rowCount (input : FABL.AlmostKWiseInput) : 
    def FABL.AlmostKWiseInput.rowCount
      (input : FABL.AlmostKWiseInput) : 
    The number of binary rows in the executable Vandermonde matrix. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.AlmostKWiseInput.rowCount_pos (input : FABL.AlmostKWiseInput) :
      0 < input.rowCount
    theorem FABL.AlmostKWiseInput.rowCount_pos
      (input : FABL.AlmostKWiseInput) :
      0 < input.rowCount
    The row count is positive. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.AlmostKWiseInput.smallBiasInput (input : FABL.AlmostKWiseInput) :
      FABL.SmallBiasInput
    def FABL.AlmostKWiseInput.smallBiasInput
      (input : FABL.AlmostKWiseInput) :
      FABL.SmallBiasInput
    The finite rational small-bias input on the matrix row dimension. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.AlmostKWiseInput.epsilon (input : FABL.AlmostKWiseInput) : 
    def FABL.AlmostKWiseInput.epsilon
      (input : FABL.AlmostKWiseInput) : 
    The real bias denoted by the finite input. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.AlmostKWiseInput.epsilon_pos (input : FABL.AlmostKWiseInput) :
      0 < input.epsilon
    theorem FABL.AlmostKWiseInput.epsilon_pos
      (input : FABL.AlmostKWiseInput) :
      0 < input.epsilon
    The encoded bias is positive. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.AlmostKWiseInput.epsilon_le_half (input : FABL.AlmostKWiseInput) :
      input.epsilon  2⁻¹
    theorem FABL.AlmostKWiseInput.epsilon_le_half
      (input : FABL.AlmostKWiseInput) :
      input.epsilon  2⁻¹
    The encoded bias is at most one half. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.AlmostKWiseInput.sizeScale (input : FABL.AlmostKWiseInput) : 
    def FABL.AlmostKWiseInput.sizeScale
      (input : FABL.AlmostKWiseInput) : 
    The guarded logarithmic row scale in the size bound. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.AlmostKWiseInput.rowCount_le_sizeScale
      (input : FABL.AlmostKWiseInput) : input.rowCount  input.sizeScale
    theorem FABL.AlmostKWiseInput.rowCount_le_sizeScale
      (input : FABL.AlmostKWiseInput) :
      input.rowCount  input.sizeScale
    The Vandermonde row count is at most `k (ℓ + 1)`. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.AlmostKWiseInput.reciprocalScale (input : FABL.AlmostKWiseInput) :
      
    def FABL.AlmostKWiseInput.reciprocalScale
      (input : FABL.AlmostKWiseInput) : 
    The natural reciprocal-bias scale `⌈1/ε⌉`. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.AlmostKWiseInput.outputScale (input : FABL.AlmostKWiseInput) : 
    def FABL.AlmostKWiseInput.outputScale
      (input : FABL.AlmostKWiseInput) : 
    The natural `k log(n) / ε` scale. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.AlmostKWiseInput.scale (input : FABL.AlmostKWiseInput) : 
    def FABL.AlmostKWiseInput.scale
      (input : FABL.AlmostKWiseInput) : 
    The finite construction scale `⌈n/ε⌉` used by the polynomial runtime
    statement. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.AlmostKWiseInput.n_le_scale (input : FABL.AlmostKWiseInput) :
      input.n  input.scale
    theorem FABL.AlmostKWiseInput.n_le_scale
      (input : FABL.AlmostKWiseInput) :
      input.n  input.scale
    The ambient dimension is bounded by the finite runtime scale. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.AlmostKWiseInput.smallBiasScale_le_outputScale
      (input : FABL.AlmostKWiseInput) :
      input.smallBiasInput.scale  input.outputScale
    theorem FABL.AlmostKWiseInput.smallBiasScale_le_outputScale
      (input : FABL.AlmostKWiseInput) :
      input.smallBiasInput.scale 
        input.outputScale
    The small-bias scale on the row dimension is bounded by the natural
    `k log(n) / ε` scale. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.AlmostKWiseInput.smallBiasScale_le_four_scale_sq
      (input : FABL.AlmostKWiseInput) :
      input.smallBiasInput.scale  4 * (input.scale + 1) ^ 2
    theorem FABL.AlmostKWiseInput.smallBiasScale_le_four_scale_sq
      (input : FABL.AlmostKWiseInput) :
      input.smallBiasInput.scale 
        4 * (input.scale + 1) ^ 2
    The row-dimension small-bias scale is also polynomially bounded by the
    ambient finite scale `⌈n/ε⌉`. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.AlmostKWiseInput.rowCount_le_four_scale_sq
      (input : FABL.AlmostKWiseInput) :
      input.rowCount  4 * (input.scale + 1) ^ 2
    theorem FABL.AlmostKWiseInput.rowCount_le_four_scale_sq
      (input : FABL.AlmostKWiseInput) :
      input.rowCount 
        4 * (input.scale + 1) ^ 2
    The row count itself is quadratic in the ambient finite scale. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.almostKWiseMatrix (input : FABL.AlmostKWiseInput) :
      Matrix (Fin input.rowCount) (Fin input.n) FABL.𝔽₂
    def FABL.almostKWiseMatrix
      (input : FABL.AlmostKWiseInput) :
      Matrix (Fin input.rowCount)
        (Fin input.n) FABL.𝔽₂
    The executable Vandermonde matrix used by Theorem 6.35. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.almostKWiseTransform (input : FABL.AlmostKWiseInput)
      (y : FABL.F₂Cube input.rowCount) : FABL.F₂Cube input.n
    def FABL.almostKWiseTransform
      (input : FABL.AlmostKWiseInput)
      (y : FABL.F₂Cube input.rowCount) :
      FABL.F₂Cube input.n
    The pure transformation applied to every explicit small-bias output. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.almostKWiseOutputList (input : FABL.AlmostKWiseInput) :
      List (FABL.F₂Cube input.n)
    def FABL.almostKWiseOutputList
      (input : FABL.AlmostKWiseInput) :
      List (FABL.F₂Cube input.n)
    The fixed-order List of every transformed seed output, retaining
    multiplicity. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.almostKWiseOutputMultiset (input : FABL.AlmostKWiseInput) :
      Multiset (FABL.F₂Cube input.n)
    def FABL.almostKWiseOutputMultiset
      (input : FABL.AlmostKWiseInput) :
      Multiset (FABL.F₂Cube input.n)
    The output Multiset, retaining exactly the List multiplicities. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.almostKWiseDensity (input : FABL.AlmostKWiseInput) :
      FABL.ProbabilityDensity input.n
    def FABL.almostKWiseDensity
      (input : FABL.AlmostKWiseInput) :
      FABL.ProbabilityDensity input.n
    The proof-layer density of the same pure transformation. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseSmallBiasOutputList_length
      (input : FABL.AlmostKWiseInput) :
      (FABL.deterministicSmallBiasAlgorithm
              input.smallBiasInput).outputs.length =
        2 ^ (2 * input.smallBiasInput.fieldDegree)
    theorem FABL.almostKWiseSmallBiasOutputList_length
      (input : FABL.AlmostKWiseInput) :
      (FABL.deterministicSmallBiasAlgorithm
              input.smallBiasInput).outputs.length =
        2 ^
          (2 *
            input.smallBiasInput.fieldDegree)
    The source small-bias List has one output for each pair seed. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseOutputList_length (input : FABL.AlmostKWiseInput) :
      (FABL.almostKWiseOutputList input).length =
        2 ^ (2 * input.smallBiasInput.fieldDegree)
    theorem FABL.almostKWiseOutputList_length
      (input : FABL.AlmostKWiseInput) :
      (FABL.almostKWiseOutputList
            input).length =
        2 ^
          (2 *
            input.smallBiasInput.fieldDegree)
    Mapping every source output preserves the exact seed count. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseOutputMultiset_card_eq_source
      (input : FABL.AlmostKWiseInput) :
      (FABL.almostKWiseOutputMultiset input).card =
        (FABL.deterministicSmallBiasMultiset input.smallBiasInput).card
    theorem FABL.almostKWiseOutputMultiset_card_eq_source
      (input : FABL.AlmostKWiseInput) :
      (FABL.almostKWiseOutputMultiset
            input).card =
        (FABL.deterministicSmallBiasMultiset
            input.smallBiasInput).card
    Mapping preserves Multiset cardinality. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.almostKWiseRandomBits (input : FABL.AlmostKWiseInput) : 
    def FABL.almostKWiseRandomBits
      (input : FABL.AlmostKWiseInput) : 
    The exact number of independent random bits used to select a pair seed. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseOutputMultiset_card_eq_two_pow_randomBits
      (input : FABL.AlmostKWiseInput) :
      (FABL.almostKWiseOutputMultiset input).card =
        2 ^ FABL.almostKWiseRandomBits input
    theorem FABL.almostKWiseOutputMultiset_card_eq_two_pow_randomBits
      (input : FABL.AlmostKWiseInput) :
      (FABL.almostKWiseOutputMultiset
            input).card =
        2 ^ FABL.almostKWiseRandomBits input
    The output cardinality is exactly a power of two. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseDensity_isApproximatelyKWiseIndependent
      (input : FABL.AlmostKWiseInput) :
      FABL.IsLowDegreeFourierRegular input.epsilon input.k
        (FABL.binaryFunctionOnSignCube
          (FABL.almostKWiseDensity input).toFun)
    theorem FABL.almostKWiseDensity_isApproximatelyKWiseIndependent
      (input : FABL.AlmostKWiseInput) :
      FABL.IsLowDegreeFourierRegular
        input.epsilon input.k
        (FABL.binaryFunctionOnSignCube
          (FABL.almostKWiseDensity
              input).toFun)
    The pushed density is `(ε,k)`-wise independent. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseOutputMultiset_card_le_realScale
      (input : FABL.AlmostKWiseInput) :
      (FABL.almostKWiseOutputMultiset input).card 
        16 * (input.sizeScale / input.epsilon) ^ 2
    theorem FABL.almostKWiseOutputMultiset_card_le_realScale
      (input : FABL.AlmostKWiseInput) :
      (FABL.almostKWiseOutputMultiset
              input).card 
        16 *
          (input.sizeScale / input.epsilon) ^
            2
    Real-valued output-size bound in the book's
    `O((k log n / ε)^2)` form, with the guarded binary logarithm explicit. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseOutputMultiset_card_le_smallBiasScale
      (input : FABL.AlmostKWiseInput) :
      (FABL.almostKWiseOutputMultiset input).card 
        4 * input.smallBiasInput.scale ^ 2
    theorem FABL.almostKWiseOutputMultiset_card_le_smallBiasScale
      (input : FABL.AlmostKWiseInput) :
      (FABL.almostKWiseOutputMultiset
            input).card 
        4 * input.smallBiasInput.scale ^ 2
    Natural output-size bound at the exact small-bias scale. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseOutputMultiset_card_le_naturalScale
      (input : FABL.AlmostKWiseInput) :
      (FABL.almostKWiseOutputMultiset input).card 
        4 * input.outputScale ^ 2
    theorem FABL.almostKWiseOutputMultiset_card_le_naturalScale
      (input : FABL.AlmostKWiseInput) :
      (FABL.almostKWiseOutputMultiset
            input).card 
        4 * input.outputScale ^ 2
    Natural output-size bound in the explicit `k log(n) / ε` scale. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseOutputMultiset_card_isBigO_realScale :
      (fun input =>
          (FABL.almostKWiseOutputMultiset
                input).card) =O[Filter.comap
          (fun input => input.sizeScale / input.epsilon) Filter.atTop]
        fun input => (input.sizeScale / input.epsilon) ^ 2
    theorem FABL.almostKWiseOutputMultiset_card_isBigO_realScale :
      (fun input =>
          (FABL.almostKWiseOutputMultiset
                input).card) =O[Filter.comap
          (fun input =>
            input.sizeScale / input.epsilon)
          Filter.atTop]
        fun input =>
        (input.sizeScale / input.epsilon) ^ 2
    The real output cardinality is asymptotically quadratic in the explicit
    `k log(n) / ε` scale. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseOutputMultiset_card_isBigO_naturalScale :
      (fun input =>
          (FABL.almostKWiseOutputMultiset
                input).card) =O[Filter.comap
          FABL.AlmostKWiseInput.outputScale Filter.atTop]
        fun input => (input.outputScale ^ 2)
    theorem FABL.almostKWiseOutputMultiset_card_isBigO_naturalScale :
      (fun input =>
          (FABL.almostKWiseOutputMultiset
                input).card) =O[Filter.comap
          FABL.AlmostKWiseInput.outputScale
          Filter.atTop]
        fun input => (input.outputScale ^ 2)
    The natural output cardinality is asymptotically quadratic in the finite
    scale `k (max 1 (clog₂ n) + 1) ⌈1/ε⌉`. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.binaryClog_mul_le (a b : ) :
      Nat.clog 2 (a * b)  Nat.clog 2 a + Nat.clog 2 b
    theorem FABL.binaryClog_mul_le (a b : ) :
      Nat.clog 2 (a * b) 
        Nat.clog 2 a + Nat.clog 2 b
    Binary ceiling logarithms are subadditive on natural products. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.AlmostKWiseInput.randomBitLogScale
      (input : FABL.AlmostKWiseInput) : 
    def FABL.AlmostKWiseInput.randomBitLogScale
      (input : FABL.AlmostKWiseInput) : 
    The explicit logarithmic scale
    `log k + log log n + log ⌈1/ε⌉`. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseRandomBits_le_logScale (input : FABL.AlmostKWiseInput) :
      FABL.almostKWiseRandomBits input  2 * input.randomBitLogScale
    theorem FABL.almostKWiseRandomBits_le_logScale
      (input : FABL.AlmostKWiseInput) :
      FABL.almostKWiseRandomBits input 
        2 * input.randomBitLogScale
    The exact random-bit count has the promised guarded logarithmic bound. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseRandomBits_isBigO :
      (fun input =>
          (FABL.almostKWiseRandomBits
              input)) =O[Filter.comap
          FABL.AlmostKWiseInput.randomBitLogScale Filter.atTop]
        fun input => input.randomBitLogScale
    theorem FABL.almostKWiseRandomBits_isBigO :
      (fun input =>
          (FABL.almostKWiseRandomBits
              input)) =O[Filter.comap
          FABL.AlmostKWiseInput.randomBitLogScale
          Filter.atTop]
        fun input => input.randomBitLogScale
    The random-bit count is asymptotically bounded by its explicit sum of
    three guarded binary logarithms. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.executableMatrixVecMulWork (m n : ) : 
    def FABL.executableMatrixVecMulWork
      (m n : ) : 
    Work for one explicit row-vector/matrix multiplication: each of the `n`
    coordinates traverses all `m` rows. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.executableMatrixVecMulWork_eq (m n : ) :
      FABL.executableMatrixVecMulWork m n = n * (2 * m + 1)
    theorem FABL.executableMatrixVecMulWork_eq
      (m n : ) :
      FABL.executableMatrixVecMulWork m n =
        n * (2 * m + 1)
    Exact work for one explicit row-vector/matrix multiplication. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.almostKWiseConstructionWork (input : FABL.AlmostKWiseInput) : 
    def FABL.almostKWiseConstructionWork
      (input : FABL.AlmostKWiseInput) : 
    Total visible work: construct `H`, construct the small-bias List, then
    transform every List element. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseConstructionWork_eq (input : FABL.AlmostKWiseInput) :
      FABL.almostKWiseConstructionWork input =
        FABL.executableVandermondeConstructionWork input.k input.n +
            FABL.deterministicSmallBiasWork input.smallBiasInput +
          2 ^ FABL.almostKWiseRandomBits input *
            (FABL.executableMatrixVecMulWork input.rowCount input.n + 1)
    theorem FABL.almostKWiseConstructionWork_eq
      (input : FABL.AlmostKWiseInput) :
      FABL.almostKWiseConstructionWork input =
        FABL.executableVandermondeConstructionWork
              input.k input.n +
            FABL.deterministicSmallBiasWork
              input.smallBiasInput +
          2 ^
              FABL.almostKWiseRandomBits
                input *
            (FABL.executableMatrixVecMulWork
                input.rowCount input.n +
              1)
    Exact constructor work, including every transformed seed output. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseVandermondeWork_le (input : FABL.AlmostKWiseInput) :
      FABL.executableVandermondeConstructionWork input.k input.n 
        2 ^ 17 * (input.scale + 1) ^ 8
    theorem FABL.almostKWiseVandermondeWork_le
      (input : FABL.AlmostKWiseInput) :
      FABL.executableVandermondeConstructionWork
          input.k input.n 
        2 ^ 17 * (input.scale + 1) ^ 8
    The Vandermonde part has a fixed polynomial bound in the ambient finite
    scale. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseMatrixVecMulWork_le (input : FABL.AlmostKWiseInput) :
      FABL.executableMatrixVecMulWork input.rowCount input.n 
        9 * (input.scale + 1) ^ 3
    theorem FABL.almostKWiseMatrixVecMulWork_le
      (input : FABL.AlmostKWiseInput) :
      FABL.executableMatrixVecMulWork
          input.rowCount input.n 
        9 * (input.scale + 1) ^ 3
    One matrix transformation is cubic in the ambient finite scale. 
  • defdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    def FABL.AlmostKWiseInput.polynomialBudget (input : FABL.AlmostKWiseInput) :
      
    def FABL.AlmostKWiseInput.polynomialBudget
      (input : FABL.AlmostKWiseInput) : 
    Explicit degree-sixteen polynomial budget in the single finite scale
    `⌈n/ε⌉`. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseConstructionWork_le_polynomialBudget
      (input : FABL.AlmostKWiseInput) :
      FABL.almostKWiseConstructionWork input  input.polynomialBudget
    theorem FABL.almostKWiseConstructionWork_le_polynomialBudget
      (input : FABL.AlmostKWiseInput) :
      FABL.almostKWiseConstructionWork input 
        input.polynomialBudget
    The complete visible construction work is polynomial in `n/ε`. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseConstructionWork_isBigO :
      (fun input =>
          (FABL.almostKWiseConstructionWork
              input)) =O[Filter.comap FABL.AlmostKWiseInput.scale
          Filter.atTop]
        fun input => ((input.scale + 1) ^ 16)
    theorem FABL.almostKWiseConstructionWork_isBigO :
      (fun input =>
          (FABL.almostKWiseConstructionWork
              input)) =O[Filter.comap
          FABL.AlmostKWiseInput.scale
          Filter.atTop]
        fun input => ((input.scale + 1) ^ 16)
    The complete deterministic algorithm has polynomial work in the finite
    scale `⌈n/ε⌉`. 
  • theoremdefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.lean
    complete
    theorem FABL.almostKWiseAlgorithm_spec (input : FABL.AlmostKWiseInput) :
      0 < input.epsilon 
        input.epsilon  2⁻¹ 
          (FABL.almostKWiseOutputList input).length =
              2 ^ FABL.almostKWiseRandomBits input 
            (FABL.almostKWiseOutputMultiset input).card =
                2 ^ FABL.almostKWiseRandomBits input 
              (FABL.almostKWiseOutputMultiset input).card 
                  16 * (input.sizeScale / input.epsilon) ^ 2 
                (FABL.almostKWiseOutputMultiset input).card 
                    4 * input.outputScale ^ 2 
                  ((fun input =>
                        (FABL.almostKWiseOutputMultiset
                              input).card) =O[Filter.comap
                        (fun input => input.sizeScale / input.epsilon)
                        Filter.atTop]
                      fun input => (input.sizeScale / input.epsilon) ^ 2) 
                    ((fun input =>
                          (FABL.almostKWiseOutputMultiset
                                input).card) =O[Filter.comap
                          FABL.AlmostKWiseInput.outputScale Filter.atTop]
                        fun input => (input.outputScale ^ 2)) 
                      FABL.IsLowDegreeFourierRegular input.epsilon input.k
                          (FABL.binaryFunctionOnSignCube
                            (FABL.almostKWiseDensity input).toFun) 
                        FABL.almostKWiseRandomBits input 
                            2 * input.randomBitLogScale 
                          ((fun input =>
                                (FABL.almostKWiseRandomBits
                                    input)) =O[Filter.comap
                                FABL.AlmostKWiseInput.randomBitLogScale
                                Filter.atTop]
                              fun input => input.randomBitLogScale) 
                            FABL.almostKWiseConstructionWork input =
                                FABL.executableVandermondeConstructionWork
                                      input.k input.n +
                                    FABL.deterministicSmallBiasWork
                                      input.smallBiasInput +
                                  2 ^ FABL.almostKWiseRandomBits input *
                                    (FABL.executableMatrixVecMulWork
                                        input.rowCount input.n +
                                      1) 
                              FABL.almostKWiseConstructionWork input 
                                  input.polynomialBudget 
                                (fun input =>
                                    (FABL.almostKWiseConstructionWork
                                        input)) =O[Filter.comap
                                    FABL.AlmostKWiseInput.scale
                                    Filter.atTop]
                                  fun input => ((input.scale + 1) ^ 16)
    theorem FABL.almostKWiseAlgorithm_spec
      (input : FABL.AlmostKWiseInput) :
      0 < input.epsilon 
        input.epsilon  2⁻¹ 
          (FABL.almostKWiseOutputList
                  input).length =
              2 ^
                FABL.almostKWiseRandomBits
                  input 
            (FABL.almostKWiseOutputMultiset
                    input).card =
                2 ^
                  FABL.almostKWiseRandomBits
                    input 
              (FABL.almostKWiseOutputMultiset
                        input).card 
                  16 *
                    (input.sizeScale /
                        input.epsilon) ^
                      2 
                (FABL.almostKWiseOutputMultiset
                        input).card 
                    4 *
                      input.outputScale ^ 2 
                  ((fun input =>
                        (FABL.almostKWiseOutputMultiset
                              input).card) =O[Filter.comap
                        (fun input =>
                          input.sizeScale /
                            input.epsilon)
                        Filter.atTop]
                      fun input =>
                      (input.sizeScale /
                          input.epsilon) ^
                        2) 
                    ((fun input =>
                          (FABL.almostKWiseOutputMultiset
                                input).card) =O[Filter.comap
                          FABL.AlmostKWiseInput.outputScale
                          Filter.atTop]
                        fun input =>
                        (input.outputScale ^
                            2)) 
                      FABL.IsLowDegreeFourierRegular
                          input.epsilon
                          input.k
                          (FABL.binaryFunctionOnSignCube
                            (FABL.almostKWiseDensity
                                input).toFun) 
                        FABL.almostKWiseRandomBits
                              input 
                            2 *
                              input.randomBitLogScale 
                          ((fun input =>
                                (FABL.almostKWiseRandomBits
                                    input)) =O[Filter.comap
                                FABL.AlmostKWiseInput.randomBitLogScale
                                Filter.atTop]
                              fun input =>
                              input.randomBitLogScale) 
                            FABL.almostKWiseConstructionWork
                                  input =
                                FABL.executableVandermondeConstructionWork
                                      input.k
                                      input.n +
                                    FABL.deterministicSmallBiasWork
                                      input.smallBiasInput +
                                  2 ^
                                      FABL.almostKWiseRandomBits
                                        input *
                                    (FABL.executableMatrixVecMulWork
                                        input.rowCount
                                        input.n +
                                      1) 
                              FABL.almostKWiseConstructionWork
                                    input 
                                  input.polynomialBudget 
                                (fun input =>
                                    (FABL.almostKWiseConstructionWork
                                        input)) =O[Filter.comap
                                    FABL.AlmostKWiseInput.scale
                                    Filter.atTop]
                                  fun input =>
                                  ((input.scale +
                                        1) ^
                                      16)
    O'Donnell, Theorem 6.35, deterministic finite-input conclusion.