6.3. Constructions of various pseudorandom functions
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.1●2 definitions
Associated Lean declarations
-
FABL.IsSignValued[complete]
-
FABL.IsBent[complete]
-
FABL.IsSignValued[complete] -
FABL.IsBent[complete]
-
defdefined in FABL/Chapter06/Constructions/BentFunctions.leancomplete
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.leancomplete
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.
-
FABL.sum_sq_vectorFourierCoeff_eq_one[complete] -
FABL.exists_inv_card_le_sq_vectorFourierCoeff[complete] -
FABL.exists_bent_extremal_coefficient[complete] -
FABL.affineSignFunction[complete] -
FABL.relativeHammingDist_affineSignFunction[complete] -
FABL.distanceToAffineSigns[complete] -
FABL.distanceToAffineSigns_eq[complete] -
FABL.distanceToAffineSigns_le_bentBound[complete] -
FABL.isBent_iff_distanceToAffineSigns_eq[complete]
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.2●9 declarations
Associated Lean declarations
-
FABL.sum_sq_vectorFourierCoeff_eq_one[complete]
-
FABL.exists_inv_card_le_sq_vectorFourierCoeff[complete]
-
FABL.exists_bent_extremal_coefficient[complete]
-
FABL.affineSignFunction[complete]
-
FABL.relativeHammingDist_affineSignFunction[complete]
-
FABL.distanceToAffineSigns[complete]
-
FABL.distanceToAffineSigns_eq[complete]
-
FABL.distanceToAffineSigns_le_bentBound[complete]
-
FABL.isBent_iff_distanceToAffineSigns_eq[complete]
-
FABL.sum_sq_vectorFourierCoeff_eq_one[complete] -
FABL.exists_inv_card_le_sq_vectorFourierCoeff[complete] -
FABL.exists_bent_extremal_coefficient[complete] -
FABL.affineSignFunction[complete] -
FABL.relativeHammingDist_affineSignFunction[complete] -
FABL.distanceToAffineSigns[complete] -
FABL.distanceToAffineSigns_eq[complete] -
FABL.distanceToAffineSigns_le_bentBound[complete] -
FABL.isBent_iff_distanceToAffineSigns_eq[complete]
-
theoremdefined in FABL/Chapter06/Constructions/BentFunctions.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.
-
FABL.isSignValued_innerProductModTwo[complete] -
FABL.isBent_innerProductModTwo[complete] -
FABL.isSignValued_completeQuadratic[complete] -
FABL.isBent_completeQuadratic[complete]
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.3●4 theorems
Associated Lean declarations
-
FABL.isSignValued_innerProductModTwo[complete]
-
FABL.isBent_innerProductModTwo[complete]
-
FABL.isSignValued_completeQuadratic[complete]
-
FABL.isBent_completeQuadratic[complete]
-
FABL.isSignValued_innerProductModTwo[complete] -
FABL.isBent_innerProductModTwo[complete] -
FABL.isSignValued_completeQuadratic[complete] -
FABL.isBent_completeQuadratic[complete]
-
theoremdefined in FABL/Chapter06/Constructions/BentFunctions.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.
-
FABL.bentDirectProduct[complete] -
FABL.IsSignValued.directProduct[complete] -
FABL.IsBent.directProduct[complete]
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.4●3 declarations
Associated Lean declarations
-
FABL.bentDirectProduct[complete]
-
FABL.IsSignValued.directProduct[complete]
-
FABL.IsBent.directProduct[complete]
-
FABL.bentDirectProduct[complete] -
FABL.IsSignValued.directProduct[complete] -
FABL.IsBent.directProduct[complete]
-
defdefined in FABL/Chapter06/Constructions/BentFunctions.leancomplete
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.leancomplete
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.leancomplete
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.
-
FABL.bentAffineModulation[complete] -
FABL.vectorFourierCoeff_bentAffineModulation[complete] -
FABL.IsSignValued.affineModulation[complete] -
FABL.IsBent.affineModulation[complete] -
FABL.bentLinearReindex[complete] -
FABL.vectorFourierCoeff_bentLinearReindex[complete] -
FABL.IsSignValued.linearReindex[complete] -
FABL.IsBent.linearReindex[complete]
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.5●8 declarations
Associated Lean declarations
-
FABL.bentAffineModulation[complete]
-
FABL.vectorFourierCoeff_bentAffineModulation[complete]
-
FABL.IsSignValued.affineModulation[complete]
-
FABL.IsBent.affineModulation[complete]
-
FABL.bentLinearReindex[complete]
-
FABL.vectorFourierCoeff_bentLinearReindex[complete]
-
FABL.IsSignValued.linearReindex[complete]
-
FABL.IsBent.linearReindex[complete]
-
FABL.bentAffineModulation[complete] -
FABL.vectorFourierCoeff_bentAffineModulation[complete] -
FABL.IsSignValued.affineModulation[complete] -
FABL.IsBent.affineModulation[complete] -
FABL.bentLinearReindex[complete] -
FABL.vectorFourierCoeff_bentLinearReindex[complete] -
FABL.IsSignValued.linearReindex[complete] -
FABL.IsBent.linearReindex[complete]
-
defdefined in FABL/Chapter06/Constructions/BentFunctions.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.
-
FABL.maioranaMcFarland[complete] -
FABL.maioranaMcFarland_joinF₂CubeBlocks[complete] -
FABL.vectorFourierCoeff_maioranaMcFarland_joinF₂CubeBlocks[complete] -
FABL.isSignValued_maioranaMcFarland[complete] -
FABL.isBent_maioranaMcFarland[complete]
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.6●5 declarations
Associated Lean declarations
-
FABL.maioranaMcFarland[complete]
-
FABL.maioranaMcFarland_joinF₂CubeBlocks[complete]
-
FABL.vectorFourierCoeff_maioranaMcFarland_joinF₂CubeBlocks[complete]
-
FABL.isSignValued_maioranaMcFarland[complete]
-
FABL.isBent_maioranaMcFarland[complete]
-
FABL.maioranaMcFarland[complete] -
FABL.maioranaMcFarland_joinF₂CubeBlocks[complete] -
FABL.vectorFourierCoeff_maioranaMcFarland_joinF₂CubeBlocks[complete] -
FABL.isSignValued_maioranaMcFarland[complete] -
FABL.isBent_maioranaMcFarland[complete]
-
defdefined in FABL/Chapter06/Constructions/BentFunctions.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.
-
FABL.BinaryExtensionField[complete] -
FABL.binaryExtensionField_finrank[complete] -
FABL.binaryExtensionField_natCard[complete] -
FABL.binaryExtensionBasis[complete] -
FABL.binaryExtensionEncode[complete] -
FABL.ExecutableBinaryFieldModel[complete] -
FABL.buildExecutableBinaryFieldModel[complete] -
FABL.buildExecutableBinaryFieldModel_complete[complete] -
FABL.binaryArithmeticWork_isBigO[complete] -
FABL.binaryFieldPreprocessingWork_isBigO[complete] -
FABL.buildExecutableBinaryFieldModel_resource_bounds[complete]
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.7●11 declarations
Associated Lean declarations
-
FABL.BinaryExtensionField[complete]
-
FABL.binaryExtensionField_finrank[complete]
-
FABL.binaryExtensionField_natCard[complete]
-
FABL.binaryExtensionBasis[complete]
-
FABL.binaryExtensionEncode[complete]
-
FABL.ExecutableBinaryFieldModel[complete]
-
FABL.buildExecutableBinaryFieldModel[complete]
-
FABL.buildExecutableBinaryFieldModel_complete[complete]
-
FABL.binaryArithmeticWork_isBigO[complete]
-
FABL.binaryFieldPreprocessingWork_isBigO[complete]
-
FABL.buildExecutableBinaryFieldModel_resource_bounds[complete]
-
FABL.BinaryExtensionField[complete] -
FABL.binaryExtensionField_finrank[complete] -
FABL.binaryExtensionField_natCard[complete] -
FABL.binaryExtensionBasis[complete] -
FABL.binaryExtensionEncode[complete] -
FABL.ExecutableBinaryFieldModel[complete] -
FABL.buildExecutableBinaryFieldModel[complete] -
FABL.buildExecutableBinaryFieldModel_complete[complete] -
FABL.binaryArithmeticWork_isBigO[complete] -
FABL.binaryFieldPreprocessingWork_isBigO[complete] -
FABL.buildExecutableBinaryFieldModel_resource_bounds[complete]
-
abbrevdefined in FABL/Chapter06/Constructions/FiniteFields.leancomplete
abbrev FABL.BinaryExtensionField (ℓ : ℕ) : Type
abbrev FABL.BinaryExtensionField (ℓ : ℕ) : Type
The canonical field with `2 ^ ℓ` elements supplied by Mathlib.
-
theoremdefined in FABL/Chapter06/Constructions/FiniteFields.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.
-
structuredefined in FABL/Chapter06/Constructions/ExecutableFiniteFields.leancomplete
structure FABL.ExecutableBinaryFieldModel (ℓ : ℕ) : Type
structure FABL.ExecutableBinaryFieldModel (ℓ : ℕ) : Type
A deterministic binary-field representation with its full ordered operation tables.
Fields
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.
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.8●1 theorem
Associated Lean declarations
-
FABL.ncard_rootSet_le_natDegree[complete]
-
FABL.ncard_rootSet_le_natDegree[complete]
-
theoremdefined in FABL/Chapter06/Constructions/FiniteFields.leancomplete
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.
-
FABL.smallBiasPolynomial[complete] -
FABL.smallBiasPolynomial_eval[complete] -
FABL.smallBiasPolynomial_ne_zero[complete] -
FABL.smallBiasPolynomial_natDegree_le[complete] -
FABL.smallBiasGenerator[complete] -
FABL.smallBiasGenerator_characterExpectation_eq_rootProbability[complete] -
FABL.smallBiasGenerator_characterExpectation_nonneg[complete] -
FABL.smallBiasGenerator_characterExpectation_le[complete]
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.9●8 declarations
Associated Lean declarations
-
FABL.smallBiasPolynomial[complete]
-
FABL.smallBiasPolynomial_eval[complete]
-
FABL.smallBiasPolynomial_ne_zero[complete]
-
FABL.smallBiasPolynomial_natDegree_le[complete]
-
FABL.smallBiasGenerator[complete]
-
FABL.smallBiasGenerator_characterExpectation_eq_rootProbability[complete]
-
FABL.smallBiasGenerator_characterExpectation_nonneg[complete]
-
FABL.smallBiasGenerator_characterExpectation_le[complete]
-
FABL.smallBiasPolynomial[complete] -
FABL.smallBiasPolynomial_eval[complete] -
FABL.smallBiasPolynomial_ne_zero[complete] -
FABL.smallBiasPolynomial_natDegree_le[complete] -
FABL.smallBiasGenerator[complete] -
FABL.smallBiasGenerator_characterExpectation_eq_rootProbability[complete] -
FABL.smallBiasGenerator_characterExpectation_nonneg[complete] -
FABL.smallBiasGenerator_characterExpectation_le[complete]
-
defdefined in FABL/Chapter06/Constructions/SmallBiasGenerator.leancomplete
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.leancomplete
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.leancomplete
theorem FABL.smallBiasPolynomial_ne_zero {n ℓ : ℕ} {γ : FABL.F₂Cube n} (hγ : γ ≠ 0) : FABL.smallBiasPolynomial ℓ γ ≠ 0
theorem FABL.smallBiasPolynomial_ne_zero {n ℓ : ℕ} {γ : FABL.F₂Cube n} (hγ : γ ≠ 0) : FABL.smallBiasPolynomial ℓ γ ≠ 0
A nonzero binary frequency gives a nonzero polynomial.
-
theoremdefined in FABL/Chapter06/Constructions/SmallBiasGenerator.leancomplete
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.leancomplete
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.leancomplete
theorem FABL.smallBiasGenerator_characterExpectation_eq_rootProbability {n ℓ : ℕ} (hℓ : ℓ ≠ 0) {γ : FABL.F₂Cube n} (hγ : γ ≠ 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} (hγ : γ ≠ 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.leancomplete
theorem FABL.smallBiasGenerator_characterExpectation_nonneg {n ℓ : ℕ} (hℓ : ℓ ≠ 0) {γ : FABL.F₂Cube n} (hγ : γ ≠ 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} (hγ : γ ≠ 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.leancomplete
theorem FABL.smallBiasGenerator_characterExpectation_le {n ℓ : ℕ} (hℓ : ℓ ≠ 0) {γ : FABL.F₂Cube n} (hγ : γ ≠ 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} (hγ : γ ≠ 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).
-
FABL.binaryLowPolynomial_injective[complete] -
FABL.binaryAdjoinRootEncode_injective[complete] -
FABL.binaryAdjoinRootLinearMap[complete] -
FABL.binaryPowMod[complete] -
FABL.binaryAdjoinRootEncode_binaryPowMod[complete] -
FABL.executableSmallBiasGenerator[complete] -
FABL.executableSmallBiasGeneratorList[complete] -
FABL.executableSmallBiasGeneratorMultiset[complete] -
FABL.length_executableSmallBiasGeneratorList[complete] -
FABL.executableSmallBiasGeneratorMultiset_card[complete] -
FABL.executableSmallBiasGeneratorDensity[complete] -
FABL.executableSmallBiasPolynomial[complete] -
FABL.executableSmallBiasPolynomial_eval[complete] -
FABL.executableSmallBiasPolynomial_ne_zero[complete] -
FABL.executableSmallBiasPolynomial_natDegree_le[complete] -
FABL.executableSmallBiasPowerSum[complete] -
FABL.binaryAdjoinRootEncode_executableSmallBiasPowerSum[complete] -
FABL.ncard_executableSmallBiasPowerSum_zero_le[complete] -
FABL.executableSmallBiasGenerator_characterExpectation_eq_rootProbability[complete] -
FABL.executableSmallBiasGenerator_characterExpectation_nonneg[complete] -
FABL.executableSmallBiasGenerator_characterExpectation_le[complete] -
FABL.vectorFourierCoeff_executableSmallBiasGeneratorDensity[complete] -
FABL.executableSmallBiasGeneratorDensity_isBiased[complete] -
FABL.executableSmallBiasGenerator_core[complete] -
FABL.executableSmallBiasPowerWork[complete] -
FABL.executableSmallBiasPowerWork_eq[complete] -
FABL.executableSmallBiasRowWork[complete] -
FABL.executableSmallBiasRowWork_le[complete] -
FABL.executableSmallBiasConstructionWork[complete] -
FABL.executableSmallBiasConstructionWork_eq[complete] -
FABL.ExecutableSmallBiasConstruction[complete] -
FABL.buildExecutableSmallBiasConstruction[complete] -
FABL.buildExecutableSmallBiasConstruction_resource_bounds[complete] -
FABL.SmallBiasInput[complete] -
FABL.SmallBiasInput.epsilon[complete] -
FABL.SmallBiasInput.scale[complete] -
FABL.SmallBiasInput.fieldDegree[complete] -
FABL.SmallBiasInput.fieldDegree_pos[complete] -
FABL.deterministicSmallBiasAlgorithm[complete] -
FABL.deterministicSmallBiasMultiset[complete] -
FABL.deterministicSmallBiasDensity[complete] -
FABL.deterministicSmallBiasWork[complete] -
FABL.deterministicSmallBiasMultiset_card[complete] -
FABL.SmallBiasInput.epsilon_pos[complete] -
FABL.SmallBiasInput.epsilon_le_half[complete] -
FABL.SmallBiasInput.one_lt_scale[complete] -
FABL.SmallBiasInput.fieldDegree_eq_clog[complete] -
FABL.SmallBiasInput.scale_le_fieldSize[complete] -
FABL.SmallBiasInput.fieldSize_le_two_scale[complete] -
FABL.SmallBiasInput.dimension_le_epsilon_mul_fieldSize[complete] -
FABL.SmallBiasInput.fieldSize_mul_numerator_le[complete] -
FABL.SmallBiasInput.fieldSize_le_four_dimension_div_epsilon[complete] -
FABL.SmallBiasInput.n_le_scale[complete] -
FABL.SmallBiasInput.fieldDegree_succ_le[complete] -
FABL.SmallBiasInput.polynomialBudget[complete] -
FABL.deterministicSmallBiasWork_le_polynomialBudget[complete] -
FABL.deterministicSmallBiasWork_isBigO[complete] -
FABL.deterministicSmallBiasAlgorithm_spec[complete] -
FABL.exists_smallBiasGenerator_of_real[complete] -
FABL.SmallBiasInput.fieldDegree_eq_of_dyadic[complete] -
FABL.smallBiasGenerator_core_powerOfTwo[complete]
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.10●61 declarations
Associated Lean declarations
-
FABL.binaryLowPolynomial_injective[complete]
-
FABL.binaryAdjoinRootEncode_injective[complete]
-
FABL.binaryAdjoinRootLinearMap[complete]
-
FABL.binaryPowMod[complete]
-
FABL.binaryAdjoinRootEncode_binaryPowMod[complete]
-
FABL.executableSmallBiasGenerator[complete]
-
FABL.executableSmallBiasGeneratorList[complete]
-
FABL.executableSmallBiasGeneratorMultiset[complete]
-
FABL.length_executableSmallBiasGeneratorList[complete]
-
FABL.executableSmallBiasGeneratorMultiset_card[complete]
-
FABL.executableSmallBiasGeneratorDensity[complete]
-
FABL.executableSmallBiasPolynomial[complete]
-
FABL.executableSmallBiasPolynomial_eval[complete]
-
FABL.executableSmallBiasPolynomial_ne_zero[complete]
-
FABL.executableSmallBiasPolynomial_natDegree_le[complete]
-
FABL.executableSmallBiasPowerSum[complete]
-
FABL.binaryAdjoinRootEncode_executableSmallBiasPowerSum[complete]
-
FABL.ncard_executableSmallBiasPowerSum_zero_le[complete]
-
FABL.executableSmallBiasGenerator_characterExpectation_eq_rootProbability[complete]
-
FABL.executableSmallBiasGenerator_characterExpectation_nonneg[complete]
-
FABL.executableSmallBiasGenerator_characterExpectation_le[complete]
-
FABL.vectorFourierCoeff_executableSmallBiasGeneratorDensity[complete]
-
FABL.executableSmallBiasGeneratorDensity_isBiased[complete]
-
FABL.executableSmallBiasGenerator_core[complete]
-
FABL.executableSmallBiasPowerWork[complete]
-
FABL.executableSmallBiasPowerWork_eq[complete]
-
FABL.executableSmallBiasRowWork[complete]
-
FABL.executableSmallBiasRowWork_le[complete]
-
FABL.executableSmallBiasConstructionWork[complete]
-
FABL.executableSmallBiasConstructionWork_eq[complete]
-
FABL.ExecutableSmallBiasConstruction[complete]
-
FABL.buildExecutableSmallBiasConstruction[complete]
-
FABL.buildExecutableSmallBiasConstruction_resource_bounds[complete]
-
FABL.SmallBiasInput[complete]
-
FABL.SmallBiasInput.epsilon[complete]
-
FABL.SmallBiasInput.scale[complete]
-
FABL.SmallBiasInput.fieldDegree[complete]
-
FABL.SmallBiasInput.fieldDegree_pos[complete]
-
FABL.deterministicSmallBiasAlgorithm[complete]
-
FABL.deterministicSmallBiasMultiset[complete]
-
FABL.deterministicSmallBiasDensity[complete]
-
FABL.deterministicSmallBiasWork[complete]
-
FABL.deterministicSmallBiasMultiset_card[complete]
-
FABL.SmallBiasInput.epsilon_pos[complete]
-
FABL.SmallBiasInput.epsilon_le_half[complete]
-
FABL.SmallBiasInput.one_lt_scale[complete]
-
FABL.SmallBiasInput.fieldDegree_eq_clog[complete]
-
FABL.SmallBiasInput.scale_le_fieldSize[complete]
-
FABL.SmallBiasInput.fieldSize_le_two_scale[complete]
-
FABL.SmallBiasInput.dimension_le_epsilon_mul_fieldSize[complete]
-
FABL.SmallBiasInput.fieldSize_mul_numerator_le[complete]
-
FABL.SmallBiasInput.fieldSize_le_four_dimension_div_epsilon[complete]
-
FABL.SmallBiasInput.n_le_scale[complete]
-
FABL.SmallBiasInput.fieldDegree_succ_le[complete]
-
FABL.SmallBiasInput.polynomialBudget[complete]
-
FABL.deterministicSmallBiasWork_le_polynomialBudget[complete]
-
FABL.deterministicSmallBiasWork_isBigO[complete]
-
FABL.deterministicSmallBiasAlgorithm_spec[complete]
-
FABL.exists_smallBiasGenerator_of_real[complete]
-
FABL.SmallBiasInput.fieldDegree_eq_of_dyadic[complete]
-
FABL.smallBiasGenerator_core_powerOfTwo[complete]
-
FABL.binaryLowPolynomial_injective[complete] -
FABL.binaryAdjoinRootEncode_injective[complete] -
FABL.binaryAdjoinRootLinearMap[complete] -
FABL.binaryPowMod[complete] -
FABL.binaryAdjoinRootEncode_binaryPowMod[complete] -
FABL.executableSmallBiasGenerator[complete] -
FABL.executableSmallBiasGeneratorList[complete] -
FABL.executableSmallBiasGeneratorMultiset[complete] -
FABL.length_executableSmallBiasGeneratorList[complete] -
FABL.executableSmallBiasGeneratorMultiset_card[complete] -
FABL.executableSmallBiasGeneratorDensity[complete] -
FABL.executableSmallBiasPolynomial[complete] -
FABL.executableSmallBiasPolynomial_eval[complete] -
FABL.executableSmallBiasPolynomial_ne_zero[complete] -
FABL.executableSmallBiasPolynomial_natDegree_le[complete] -
FABL.executableSmallBiasPowerSum[complete] -
FABL.binaryAdjoinRootEncode_executableSmallBiasPowerSum[complete] -
FABL.ncard_executableSmallBiasPowerSum_zero_le[complete] -
FABL.executableSmallBiasGenerator_characterExpectation_eq_rootProbability[complete] -
FABL.executableSmallBiasGenerator_characterExpectation_nonneg[complete] -
FABL.executableSmallBiasGenerator_characterExpectation_le[complete] -
FABL.vectorFourierCoeff_executableSmallBiasGeneratorDensity[complete] -
FABL.executableSmallBiasGeneratorDensity_isBiased[complete] -
FABL.executableSmallBiasGenerator_core[complete] -
FABL.executableSmallBiasPowerWork[complete] -
FABL.executableSmallBiasPowerWork_eq[complete] -
FABL.executableSmallBiasRowWork[complete] -
FABL.executableSmallBiasRowWork_le[complete] -
FABL.executableSmallBiasConstructionWork[complete] -
FABL.executableSmallBiasConstructionWork_eq[complete] -
FABL.ExecutableSmallBiasConstruction[complete] -
FABL.buildExecutableSmallBiasConstruction[complete] -
FABL.buildExecutableSmallBiasConstruction_resource_bounds[complete] -
FABL.SmallBiasInput[complete] -
FABL.SmallBiasInput.epsilon[complete] -
FABL.SmallBiasInput.scale[complete] -
FABL.SmallBiasInput.fieldDegree[complete] -
FABL.SmallBiasInput.fieldDegree_pos[complete] -
FABL.deterministicSmallBiasAlgorithm[complete] -
FABL.deterministicSmallBiasMultiset[complete] -
FABL.deterministicSmallBiasDensity[complete] -
FABL.deterministicSmallBiasWork[complete] -
FABL.deterministicSmallBiasMultiset_card[complete] -
FABL.SmallBiasInput.epsilon_pos[complete] -
FABL.SmallBiasInput.epsilon_le_half[complete] -
FABL.SmallBiasInput.one_lt_scale[complete] -
FABL.SmallBiasInput.fieldDegree_eq_clog[complete] -
FABL.SmallBiasInput.scale_le_fieldSize[complete] -
FABL.SmallBiasInput.fieldSize_le_two_scale[complete] -
FABL.SmallBiasInput.dimension_le_epsilon_mul_fieldSize[complete] -
FABL.SmallBiasInput.fieldSize_mul_numerator_le[complete] -
FABL.SmallBiasInput.fieldSize_le_four_dimension_div_epsilon[complete] -
FABL.SmallBiasInput.n_le_scale[complete] -
FABL.SmallBiasInput.fieldDegree_succ_le[complete] -
FABL.SmallBiasInput.polynomialBudget[complete] -
FABL.deterministicSmallBiasWork_le_polynomialBudget[complete] -
FABL.deterministicSmallBiasWork_isBigO[complete] -
FABL.deterministicSmallBiasAlgorithm_spec[complete] -
FABL.exists_smallBiasGenerator_of_real[complete] -
FABL.SmallBiasInput.fieldDegree_eq_of_dyadic[complete] -
FABL.smallBiasGenerator_core_powerOfTwo[complete]
-
theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
theorem FABL.executableSmallBiasPolynomial_ne_zero {n ℓ : ℕ} (implementation : FABL.CertifiedBinaryFieldImplementation ℓ) {γ : FABL.F₂Cube n} (hγ : γ ≠ 0) : FABL.executableSmallBiasPolynomial implementation γ ≠ 0
theorem FABL.executableSmallBiasPolynomial_ne_zero {n ℓ : ℕ} (implementation : FABL.CertifiedBinaryFieldImplementation ℓ) {γ : FABL.F₂Cube n} (hγ : γ ≠ 0) : FABL.executableSmallBiasPolynomial implementation γ ≠ 0
A nonzero frequency gives a nonzero polynomial in the certified quotient field.
-
theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
theorem FABL.ncard_executableSmallBiasPowerSum_zero_le {n ℓ : ℕ} (hℓ : 0 < ℓ) (implementation : FABL.CertifiedBinaryFieldImplementation ℓ) {γ : FABL.F₂Cube n} (hγ : γ ≠ 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} (hγ : γ ≠ 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.leancomplete
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.leancomplete
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.leancomplete
theorem FABL.executableSmallBiasGenerator_characterExpectation_le {n ℓ : ℕ} (hℓ : 0 < ℓ) (implementation : FABL.CertifiedBinaryFieldImplementation ℓ) {γ : FABL.F₂Cube n} (hγ : γ ≠ 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} (hγ : γ ≠ 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.leancomplete
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.leancomplete
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.leancomplete
theorem FABL.executableSmallBiasGenerator_core (n : ℕ) (hn : 1 ≤ n) {ℓ : ℕ} (hℓ : 0 < ℓ) (implementation : FABL.CertifiedBinaryFieldImplementation ℓ) {ε : ℝ} (hε : 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 ℓ) {ε : ℝ} (hε : 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.leancomplete
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.leancomplete
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.leancomplete
def FABL.executableSmallBiasRowWork (ℓ : ℕ) : ℕ → ℕ
def FABL.executableSmallBiasRowWork (ℓ : ℕ) : ℕ → ℕ
Work for materializing all `n` coordinates of one generator output.
-
theoremdefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.leancomplete
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.leancomplete
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.leancomplete
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.
-
structuredefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.leancomplete
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.
Fields
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.leancomplete
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.leancomplete
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.
-
structuredefined in FABL/Chapter06/Constructions/SmallBiasAlgorithm.leancomplete
structure FABL.SmallBiasInput : Type
structure FABL.SmallBiasInput : Type
Finite input for Theorem 6.30, encoding the bias as `numerator / denominator`.
Fields
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
theorem FABL.exists_smallBiasGenerator_of_real (n : ℕ) (hn : 1 ≤ n) {ε : ℝ} (hε : 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) {ε : ℝ} (hε : 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.leancomplete
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.leancomplete
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.
-
FABL.matrixRowSpan[complete] -
FABL.matrixRowSpan_eq_span_rows[complete] -
FABL.matrixColumnSum[complete] -
FABL.HasNonzeroColumnSumsUpTo[complete] -
FABL.matrixRowSpanDensity[complete] -
FABL.vectorFourierCoeff_matrixRowSpanDensity[complete] -
FABL.matrixRowSpanDensity_isKWiseIndependent_iff[complete]
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.11●7 declarations
Associated Lean declarations
-
FABL.matrixRowSpan[complete]
-
FABL.matrixRowSpan_eq_span_rows[complete]
-
FABL.matrixColumnSum[complete]
-
FABL.HasNonzeroColumnSumsUpTo[complete]
-
FABL.matrixRowSpanDensity[complete]
-
FABL.vectorFourierCoeff_matrixRowSpanDensity[complete]
-
FABL.matrixRowSpanDensity_isKWiseIndependent_iff[complete]
-
FABL.matrixRowSpan[complete] -
FABL.matrixRowSpan_eq_span_rows[complete] -
FABL.matrixColumnSum[complete] -
FABL.HasNonzeroColumnSumsUpTo[complete] -
FABL.matrixRowSpanDensity[complete] -
FABL.vectorFourierCoeff_matrixRowSpanDensity[complete] -
FABL.matrixRowSpanDensity_isKWiseIndependent_iff[complete]
-
defdefined in FABL/Chapter06/Constructions/KWiseIndependence.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.
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.12●3 theorems
Associated Lean declarations
-
theoremdefined in FABL/Chapter06/Constructions/FiniteFields.leancomplete
theorem FABL.det_vandermonde_ne_zero_of_injective.{u_1} {K : Type u_1} [Field K] {k : ℕ} (α : Fin k → K) (hα : 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) (hα : Function.Injective α) : (Matrix.vandermonde α).det ≠ 0
Distinct evaluation points give a nonsingular Vandermonde matrix.
-
theoremdefined in FABL/Chapter06/Constructions/FiniteFields.leancomplete
theorem FABL.eq_zero_of_vandermonde_mulVec_eq_zero.{u_1} {K : Type u_1} [Field K] {k : ℕ} (α : Fin k → K) (hα : 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) (hα : 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.leancomplete
theorem FABL.vandermondeBinaryMatrixOfPoints_hasNonzeroColumnSumsUpTo (k : ℕ) {ℓ n : ℕ} (hℓ : ℓ ≠ 0) (α : Fin n → FABL.BinaryExtensionField ℓ) (hα : Function.Injective α) : FABL.HasNonzeroColumnSumsUpTo (FABL.vandermondeBinaryMatrixOfPoints k hℓ α) k
theorem FABL.vandermondeBinaryMatrixOfPoints_hasNonzeroColumnSumsUpTo (k : ℕ) {ℓ n : ℕ} (hℓ : ℓ ≠ 0) (α : Fin n → FABL.BinaryExtensionField ℓ) (hα : 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.
-
FABL.vandermondeBinaryMatrix[complete] -
FABL.vandermondeBinaryMatrix_hasNonzeroColumnSumsUpTo[complete] -
FABL.exists_vandermondeBinaryMatrix[complete]
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.13●3 declarations
Associated Lean declarations
-
FABL.vandermondeBinaryMatrix[complete]
-
FABL.vandermondeBinaryMatrix_hasNonzeroColumnSumsUpTo[complete]
-
FABL.exists_vandermondeBinaryMatrix[complete]
-
FABL.vandermondeBinaryMatrix[complete] -
FABL.vandermondeBinaryMatrix_hasNonzeroColumnSumsUpTo[complete] -
FABL.exists_vandermondeBinaryMatrix[complete]
-
defdefined in FABL/Chapter06/Constructions/VandermondeConstruction.leancomplete
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.leancomplete
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.leancomplete
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.
-
FABL.exists_kWiseIndependentSubspace_card_le[complete] -
FABL.ExecutableVandermondeInput[complete] -
FABL.ExecutableVandermondeInput.n_pos[complete] -
FABL.ExecutableVandermondeInput.fieldDegree[complete] -
FABL.ExecutableVandermondeInput.fieldDegree_pos[complete] -
FABL.ExecutableVandermondeInput.n_le_fieldSize[complete] -
FABL.ExecutableVandermondeInput.fieldSize_le_two_n[complete] -
FABL.ExecutableVandermondeInput.fieldDegree_succ_le[complete] -
FABL.ExecutableVandermondeInput.fieldImplementation[complete] -
FABL.executableVandermondePoint[complete] -
FABL.executableVandermondePoint_injective[complete] -
FABL.executableVandermondeRowEquiv[complete] -
FABL.executableVandermondeMatrix[complete] -
FABL.executableBinaryField_finrank[complete] -
FABL.executableVandermondeFieldEquiv[complete] -
FABL.executableVandermondeFieldPoint[complete] -
FABL.executableVandermondeFieldPoint_power[complete] -
FABL.executableVandermondeFieldPoint_injective[complete] -
FABL.executableVandermondeMatrix_hasNonzeroColumnSumsUpTo[complete] -
FABL.executableVandermondeSubspace[complete] -
FABL.executableVandermondeDensity[complete] -
FABL.executableVandermondeDensity_isKWiseIndependent[complete] -
FABL.card_matrixRowSpan_le_two_pow[complete] -
FABL.executableVandermondeRowCount_cardBound[complete] -
FABL.executableVandermondeSubspace_card_le[complete] -
FABL.executableVandermondePowerRowsWork[complete] -
FABL.executableVandermondePowerRowsWork_eq_sum[complete] -
FABL.executableVandermondePowerRowsWork_le[complete] -
FABL.executableVandermondeConstructionWork[complete] -
FABL.executableVandermondeConstructionWork_eq[complete] -
FABL.executableVandermondeConstructionWork_eq_sum[complete] -
FABL.ExecutableVandermondeInput.scale[complete] -
FABL.ExecutableVandermondeInput.polynomialBudget[complete] -
FABL.executableVandermondeConstructionWork_le_polynomialBudget[complete] -
FABL.executableVandermondeConstructionWork_isBigO[complete] -
FABL.executableVandermondeAlgorithm_spec[complete]
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.14●36 declarations
Associated Lean declarations
-
FABL.exists_kWiseIndependentSubspace_card_le[complete]
-
FABL.ExecutableVandermondeInput[complete]
-
FABL.ExecutableVandermondeInput.n_pos[complete]
-
FABL.ExecutableVandermondeInput.fieldDegree[complete]
-
FABL.ExecutableVandermondeInput.fieldDegree_pos[complete]
-
FABL.ExecutableVandermondeInput.n_le_fieldSize[complete]
-
FABL.ExecutableVandermondeInput.fieldSize_le_two_n[complete]
-
FABL.ExecutableVandermondeInput.fieldDegree_succ_le[complete]
-
FABL.ExecutableVandermondeInput.fieldImplementation[complete]
-
FABL.executableVandermondePoint[complete]
-
FABL.executableVandermondePoint_injective[complete]
-
FABL.executableVandermondeRowEquiv[complete]
-
FABL.executableVandermondeMatrix[complete]
-
FABL.executableBinaryField_finrank[complete]
-
FABL.executableVandermondeFieldEquiv[complete]
-
FABL.executableVandermondeFieldPoint[complete]
-
FABL.executableVandermondeFieldPoint_power[complete]
-
FABL.executableVandermondeFieldPoint_injective[complete]
-
FABL.executableVandermondeMatrix_hasNonzeroColumnSumsUpTo[complete]
-
FABL.executableVandermondeSubspace[complete]
-
FABL.executableVandermondeDensity[complete]
-
FABL.executableVandermondeDensity_isKWiseIndependent[complete]
-
FABL.card_matrixRowSpan_le_two_pow[complete]
-
FABL.executableVandermondeRowCount_cardBound[complete]
-
FABL.executableVandermondeSubspace_card_le[complete]
-
FABL.executableVandermondePowerRowsWork[complete]
-
FABL.executableVandermondePowerRowsWork_eq_sum[complete]
-
FABL.executableVandermondePowerRowsWork_le[complete]
-
FABL.executableVandermondeConstructionWork[complete]
-
FABL.executableVandermondeConstructionWork_eq[complete]
-
FABL.executableVandermondeConstructionWork_eq_sum[complete]
-
FABL.ExecutableVandermondeInput.scale[complete]
-
FABL.ExecutableVandermondeInput.polynomialBudget[complete]
-
FABL.executableVandermondeConstructionWork_le_polynomialBudget[complete]
-
FABL.executableVandermondeConstructionWork_isBigO[complete]
-
FABL.executableVandermondeAlgorithm_spec[complete]
-
FABL.exists_kWiseIndependentSubspace_card_le[complete] -
FABL.ExecutableVandermondeInput[complete] -
FABL.ExecutableVandermondeInput.n_pos[complete] -
FABL.ExecutableVandermondeInput.fieldDegree[complete] -
FABL.ExecutableVandermondeInput.fieldDegree_pos[complete] -
FABL.ExecutableVandermondeInput.n_le_fieldSize[complete] -
FABL.ExecutableVandermondeInput.fieldSize_le_two_n[complete] -
FABL.ExecutableVandermondeInput.fieldDegree_succ_le[complete] -
FABL.ExecutableVandermondeInput.fieldImplementation[complete] -
FABL.executableVandermondePoint[complete] -
FABL.executableVandermondePoint_injective[complete] -
FABL.executableVandermondeRowEquiv[complete] -
FABL.executableVandermondeMatrix[complete] -
FABL.executableBinaryField_finrank[complete] -
FABL.executableVandermondeFieldEquiv[complete] -
FABL.executableVandermondeFieldPoint[complete] -
FABL.executableVandermondeFieldPoint_power[complete] -
FABL.executableVandermondeFieldPoint_injective[complete] -
FABL.executableVandermondeMatrix_hasNonzeroColumnSumsUpTo[complete] -
FABL.executableVandermondeSubspace[complete] -
FABL.executableVandermondeDensity[complete] -
FABL.executableVandermondeDensity_isKWiseIndependent[complete] -
FABL.card_matrixRowSpan_le_two_pow[complete] -
FABL.executableVandermondeRowCount_cardBound[complete] -
FABL.executableVandermondeSubspace_card_le[complete] -
FABL.executableVandermondePowerRowsWork[complete] -
FABL.executableVandermondePowerRowsWork_eq_sum[complete] -
FABL.executableVandermondePowerRowsWork_le[complete] -
FABL.executableVandermondeConstructionWork[complete] -
FABL.executableVandermondeConstructionWork_eq[complete] -
FABL.executableVandermondeConstructionWork_eq_sum[complete] -
FABL.ExecutableVandermondeInput.scale[complete] -
FABL.ExecutableVandermondeInput.polynomialBudget[complete] -
FABL.executableVandermondeConstructionWork_le_polynomialBudget[complete] -
FABL.executableVandermondeConstructionWork_isBigO[complete] -
FABL.executableVandermondeAlgorithm_spec[complete]
-
theoremdefined in FABL/Chapter06/Constructions/VandermondeConstruction.leancomplete
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)`.
-
structuredefined in FABL/Chapter06/Constructions/ExecutableVandermonde.leancomplete
structure FABL.ExecutableVandermondeInput : Type
structure FABL.ExecutableVandermondeInput : Type
Finite input for the deterministic conclusion of Corollary 6.33.
Fields
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
def FABL.executableVandermondePowerRowsWork (ℓ : ℕ) : ℕ → ℕ
def FABL.executableVandermondePowerRowsWork (ℓ : ℕ) : ℕ → ℕ
Exact work for materializing the `p` nonconstant power blocks of one column.
-
theoremdefined in FABL/Chapter06/Constructions/ExecutableVandermonde.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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`.
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.15●5 declarations
Associated Lean declarations
-
defdefined in FABL/Chapter01/ProbabilityDensityPushforward.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.
-
FABL.AlmostKWiseInput[complete] -
FABL.AlmostKWiseInput.n_pos[complete] -
FABL.AlmostKWiseInput.vandermondeInput[complete] -
FABL.AlmostKWiseInput.rowCount[complete] -
FABL.AlmostKWiseInput.rowCount_pos[complete] -
FABL.AlmostKWiseInput.smallBiasInput[complete] -
FABL.AlmostKWiseInput.epsilon[complete] -
FABL.AlmostKWiseInput.epsilon_pos[complete] -
FABL.AlmostKWiseInput.epsilon_le_half[complete] -
FABL.AlmostKWiseInput.sizeScale[complete] -
FABL.AlmostKWiseInput.rowCount_le_sizeScale[complete] -
FABL.AlmostKWiseInput.reciprocalScale[complete] -
FABL.AlmostKWiseInput.outputScale[complete] -
FABL.AlmostKWiseInput.scale[complete] -
FABL.AlmostKWiseInput.n_le_scale[complete] -
FABL.AlmostKWiseInput.smallBiasScale_le_outputScale[complete] -
FABL.AlmostKWiseInput.smallBiasScale_le_four_scale_sq[complete] -
FABL.AlmostKWiseInput.rowCount_le_four_scale_sq[complete] -
FABL.almostKWiseMatrix[complete] -
FABL.almostKWiseTransform[complete] -
FABL.almostKWiseOutputList[complete] -
FABL.almostKWiseOutputMultiset[complete] -
FABL.almostKWiseDensity[complete] -
FABL.almostKWiseSmallBiasOutputList_length[complete] -
FABL.almostKWiseOutputList_length[complete] -
FABL.almostKWiseOutputMultiset_card_eq_source[complete] -
FABL.almostKWiseRandomBits[complete] -
FABL.almostKWiseOutputMultiset_card_eq_two_pow_randomBits[complete] -
FABL.almostKWiseDensity_isApproximatelyKWiseIndependent[complete] -
FABL.almostKWiseOutputMultiset_card_le_realScale[complete] -
FABL.almostKWiseOutputMultiset_card_le_smallBiasScale[complete] -
FABL.almostKWiseOutputMultiset_card_le_naturalScale[complete] -
FABL.almostKWiseOutputMultiset_card_isBigO_realScale[complete] -
FABL.almostKWiseOutputMultiset_card_isBigO_naturalScale[complete] -
FABL.binaryClog_mul_le[complete] -
FABL.AlmostKWiseInput.randomBitLogScale[complete] -
FABL.almostKWiseRandomBits_le_logScale[complete] -
FABL.almostKWiseRandomBits_isBigO[complete] -
FABL.executableMatrixVecMulWork[complete] -
FABL.executableMatrixVecMulWork_eq[complete] -
FABL.almostKWiseConstructionWork[complete] -
FABL.almostKWiseConstructionWork_eq[complete] -
FABL.almostKWiseVandermondeWork_le[complete] -
FABL.almostKWiseMatrixVecMulWork_le[complete] -
FABL.AlmostKWiseInput.polynomialBudget[complete] -
FABL.almostKWiseConstructionWork_le_polynomialBudget[complete] -
FABL.almostKWiseConstructionWork_isBigO[complete] -
FABL.almostKWiseAlgorithm_spec[complete]
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.16●48 declarations
Associated Lean declarations
-
FABL.AlmostKWiseInput[complete]
-
FABL.AlmostKWiseInput.n_pos[complete]
-
FABL.AlmostKWiseInput.vandermondeInput[complete]
-
FABL.AlmostKWiseInput.rowCount[complete]
-
FABL.AlmostKWiseInput.rowCount_pos[complete]
-
FABL.AlmostKWiseInput.smallBiasInput[complete]
-
FABL.AlmostKWiseInput.epsilon[complete]
-
FABL.AlmostKWiseInput.epsilon_pos[complete]
-
FABL.AlmostKWiseInput.epsilon_le_half[complete]
-
FABL.AlmostKWiseInput.sizeScale[complete]
-
FABL.AlmostKWiseInput.rowCount_le_sizeScale[complete]
-
FABL.AlmostKWiseInput.reciprocalScale[complete]
-
FABL.AlmostKWiseInput.outputScale[complete]
-
FABL.AlmostKWiseInput.scale[complete]
-
FABL.AlmostKWiseInput.n_le_scale[complete]
-
FABL.AlmostKWiseInput.smallBiasScale_le_outputScale[complete]
-
FABL.AlmostKWiseInput.smallBiasScale_le_four_scale_sq[complete]
-
FABL.AlmostKWiseInput.rowCount_le_four_scale_sq[complete]
-
FABL.almostKWiseMatrix[complete]
-
FABL.almostKWiseTransform[complete]
-
FABL.almostKWiseOutputList[complete]
-
FABL.almostKWiseOutputMultiset[complete]
-
FABL.almostKWiseDensity[complete]
-
FABL.almostKWiseSmallBiasOutputList_length[complete]
-
FABL.almostKWiseOutputList_length[complete]
-
FABL.almostKWiseOutputMultiset_card_eq_source[complete]
-
FABL.almostKWiseRandomBits[complete]
-
FABL.almostKWiseOutputMultiset_card_eq_two_pow_randomBits[complete]
-
FABL.almostKWiseDensity_isApproximatelyKWiseIndependent[complete]
-
FABL.almostKWiseOutputMultiset_card_le_realScale[complete]
-
FABL.almostKWiseOutputMultiset_card_le_smallBiasScale[complete]
-
FABL.almostKWiseOutputMultiset_card_le_naturalScale[complete]
-
FABL.almostKWiseOutputMultiset_card_isBigO_realScale[complete]
-
FABL.almostKWiseOutputMultiset_card_isBigO_naturalScale[complete]
-
FABL.binaryClog_mul_le[complete]
-
FABL.AlmostKWiseInput.randomBitLogScale[complete]
-
FABL.almostKWiseRandomBits_le_logScale[complete]
-
FABL.almostKWiseRandomBits_isBigO[complete]
-
FABL.executableMatrixVecMulWork[complete]
-
FABL.executableMatrixVecMulWork_eq[complete]
-
FABL.almostKWiseConstructionWork[complete]
-
FABL.almostKWiseConstructionWork_eq[complete]
-
FABL.almostKWiseVandermondeWork_le[complete]
-
FABL.almostKWiseMatrixVecMulWork_le[complete]
-
FABL.AlmostKWiseInput.polynomialBudget[complete]
-
FABL.almostKWiseConstructionWork_le_polynomialBudget[complete]
-
FABL.almostKWiseConstructionWork_isBigO[complete]
-
FABL.almostKWiseAlgorithm_spec[complete]
-
FABL.AlmostKWiseInput[complete] -
FABL.AlmostKWiseInput.n_pos[complete] -
FABL.AlmostKWiseInput.vandermondeInput[complete] -
FABL.AlmostKWiseInput.rowCount[complete] -
FABL.AlmostKWiseInput.rowCount_pos[complete] -
FABL.AlmostKWiseInput.smallBiasInput[complete] -
FABL.AlmostKWiseInput.epsilon[complete] -
FABL.AlmostKWiseInput.epsilon_pos[complete] -
FABL.AlmostKWiseInput.epsilon_le_half[complete] -
FABL.AlmostKWiseInput.sizeScale[complete] -
FABL.AlmostKWiseInput.rowCount_le_sizeScale[complete] -
FABL.AlmostKWiseInput.reciprocalScale[complete] -
FABL.AlmostKWiseInput.outputScale[complete] -
FABL.AlmostKWiseInput.scale[complete] -
FABL.AlmostKWiseInput.n_le_scale[complete] -
FABL.AlmostKWiseInput.smallBiasScale_le_outputScale[complete] -
FABL.AlmostKWiseInput.smallBiasScale_le_four_scale_sq[complete] -
FABL.AlmostKWiseInput.rowCount_le_four_scale_sq[complete] -
FABL.almostKWiseMatrix[complete] -
FABL.almostKWiseTransform[complete] -
FABL.almostKWiseOutputList[complete] -
FABL.almostKWiseOutputMultiset[complete] -
FABL.almostKWiseDensity[complete] -
FABL.almostKWiseSmallBiasOutputList_length[complete] -
FABL.almostKWiseOutputList_length[complete] -
FABL.almostKWiseOutputMultiset_card_eq_source[complete] -
FABL.almostKWiseRandomBits[complete] -
FABL.almostKWiseOutputMultiset_card_eq_two_pow_randomBits[complete] -
FABL.almostKWiseDensity_isApproximatelyKWiseIndependent[complete] -
FABL.almostKWiseOutputMultiset_card_le_realScale[complete] -
FABL.almostKWiseOutputMultiset_card_le_smallBiasScale[complete] -
FABL.almostKWiseOutputMultiset_card_le_naturalScale[complete] -
FABL.almostKWiseOutputMultiset_card_isBigO_realScale[complete] -
FABL.almostKWiseOutputMultiset_card_isBigO_naturalScale[complete] -
FABL.binaryClog_mul_le[complete] -
FABL.AlmostKWiseInput.randomBitLogScale[complete] -
FABL.almostKWiseRandomBits_le_logScale[complete] -
FABL.almostKWiseRandomBits_isBigO[complete] -
FABL.executableMatrixVecMulWork[complete] -
FABL.executableMatrixVecMulWork_eq[complete] -
FABL.almostKWiseConstructionWork[complete] -
FABL.almostKWiseConstructionWork_eq[complete] -
FABL.almostKWiseVandermondeWork_le[complete] -
FABL.almostKWiseMatrixVecMulWork_le[complete] -
FABL.AlmostKWiseInput.polynomialBudget[complete] -
FABL.almostKWiseConstructionWork_le_polynomialBudget[complete] -
FABL.almostKWiseConstructionWork_isBigO[complete] -
FABL.almostKWiseAlgorithm_spec[complete]
-
structuredefined in FABL/Chapter06/Constructions/AlmostKWiseAlgorithm.leancomplete
structure FABL.AlmostKWiseInput : Type
structure FABL.AlmostKWiseInput : Type
Finite rational input for Theorem 6.35.
Fields
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.leancomplete
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.