Documentation

Pseudorandom.Bourgain

noncomputable def lapply {p : } [fpprm : Fact (Nat.Prime p)] (a : FinPMF (ZMod p)) (b : FinPMF (ZMod p × ZMod p × ZMod p)) :
Equations
Instances For
    theorem lapply_linear_combination {p : } [fpprm : Fact (Nat.Prime p)] {γ : Type u_1} {γ₂ : Type u_2} [Fintype γ] [Fintype γ₂] (a : FinPMF γ) (b : FinPMF γ₂) (f : γFinPMF (ZMod p)) (g : γ₂FinPMF (ZMod p × ZMod p × ZMod p)) :
    lapply (FinPMF.linear_combination a f) (FinPMF.linear_combination b g) = FinPMF.linear_combination (a * b) fun (x : γ × γ₂) => match x with | (x, y) => lapply (f x) (g y)
    theorem line_point_large_l2_aux {p : } [fpprm : Fact (Nat.Prime p)] (n : ℕ+) (β : ) (hβ : 0 < β) (hkl : p ^ β n) (hku : n p ^ (2 - β)) (a' : { x : Finset (ZMod p) // x.Nonempty }) (b' : { x : Finset (ZMod p × ZMod p × ZMod p) // x.Nonempty }) (hD : Set.InjOn Prod.snd b') (hbSz : (b').card n) :
    close_high_entropy (n) (1 / ((a').card * (b').card) * ST_C * n ^ (3 / 2 - ST_prime_field_eps β)) (lapply (Uniform a') (Uniform b'))
    theorem line_point_large_l2' {p : } [fpprm : Fact (Nat.Prime p)] (n : ℕ+) (β : ) (hβ : 0 < β) (hkl : p ^ β n) (hku : n p ^ (2 - β)) (a : FinPMF (ZMod p)) (b : FinPMF (ZMod p × ZMod p × ZMod p)) (m : ℕ+) (hm : m n) (hD : Set.InjOn Prod.snd (Function.support b)) (hbSz : max_val b 1 / m) :
    close_high_entropy (n) (1 / (1 / max_val a⌋₊ * m) * ST_C * n ^ (3 / 2 - ST_prime_field_eps β)) (lapply a b)
    theorem line_point_large_l2 {p : } [fpprm : Fact (Nat.Prime p)] (n : ) (β : ) (hβ : 0 < β) (hβ2 : β < 1) (hkl : p n) (hku : n p ^ (2 - β)) (a : FinPMF (ZMod p)) (b : FinPMF (ZMod p × ZMod p × ZMod p)) (m : ) (hm : m n) (hm₂ : 1 m) (hD : Set.InjOn Prod.snd (Function.support b)) (hbSz : max_val b 1 / m) :
    close_high_entropy n (1 / (1 / (2 * max_val a) * (m / 2)) * ST_C * n ^ (3 / 2 - ST_prime_field_eps β)) (lapply a b)
    def lmap {p : } [fpprm : Fact (Nat.Prime p)] (x : ZMod p × ZMod p) :
    Equations
    • lmap x = (x.1 + x.2, 2 * (x.1 + x.2), -((x.1 + x.2) ^ 2 + (x.1 ^ 2 + x.2 ^ 2)))
    Instances For
      def decoder {p : } [fpprm : Fact (Nat.Prime p)] :
      Equations
      Instances For
        theorem jurl {p : } [fpprm : Fact (Nat.Prime p)] (b : FinPMF (ZMod p)) :
        (FinPMF.apply (b * b * b) fun (x : (ZMod p × ZMod p) × ZMod p) => (x.1.1 + x.1.2 + x.2, x.1.1 ^ 2 + x.1.2 ^ 2 + x.2 ^ 2)) = FinPMF.apply (lapply b (FinPMF.apply (b * b) lmap)) decoder
        noncomputable def bourgainβ :
        Equations
        Instances For
          noncomputable def bourgainα :
          Equations
          Instances For
            theorem bα_val :
            noncomputable def bourgain_C :
            Equations
            Instances For
              theorem quadratic_not_many_roots {p : } [fpprm : Fact (Nat.Prime p)] (a : ZMod p) (b : ZMod p) :
              (Finset.filter (fun (x : ZMod p) => 1 * x * x + a * x + b = 0) Finset.univ).card 2
              theorem max_val_of_apply_lmap {p : } [fpprm : Fact (Nat.Prime p)] [pnot2 : Fact (p 2)] (b : FinPMF (ZMod p)) :
              max_val (FinPMF.apply (b * b) lmap) max_val b ^ 2 * 2
              theorem bourgain_extractor_aux₃ {p : } [fpprm : Fact (Nat.Prime p)] [pnot2 : Fact (p 2)] (b : FinPMF (ZMod p)) (hB : max_val b p ^ (-1 / 2 + 2 / 11 * bourgainα)) :
              close_high_entropy (p ^ (1 + 2 / 11 * bourgainα)) (8 * ST_C * p ^ (-2 / 11 * bourgainα)) (FinPMF.apply (lapply b (FinPMF.apply (b * b) lmap)) decoder)
              theorem bourgain_extractor {p : } [fpprm : Fact (Nat.Prime p)] [pnot2 : Fact (p 2)] (a : FinPMF (ZMod p)) (b : FinPMF (ZMod p)) (hA : max_val a p ^ (-1 / 2 + 2 / 11 * bourgainα)) (hB : max_val b p ^ (-1 / 2 + 2 / 11 * bourgainα)) (χ : AddChar (ZMod p) ) (h : AddChar.IsNontrivial χ) :
              Finset.sum Finset.univ fun (x : ZMod p) => (a x) * Finset.sum Finset.univ fun (y : ZMod p) => (b y) * χ (x * y + x ^ 2 * y ^ 2) bourgain_C * p ^ (-1 / 352 * bourgainα)
              theorem bourgain_extractor_final' {p : } [fpprm : Fact (Nat.Prime p)] [pnot2 : Fact (p 2)] (a : FinPMF (ZMod p)) (b : FinPMF (ZMod p)) (hA : max_val a p ^ (-1 / 2 + 2 / 11 * bourgainα)) (hB : max_val b p ^ (-1 / 2 + 2 / 11 * bourgainα)) (m : ℕ+) :
              SD (FinPMF.apply (a * b) fun (x : ZMod p × ZMod p) => match x with | (x, y) => (ZMod.val (x * y + x ^ 2 * y ^ 2))) (Uniform { val := Finset.univ, property := }) bourgain_C * p ^ (-1 / 352 * bourgainα) * m * (3 * Real.log p + 3) + m / (2 * p)
              theorem bourgain_extractor_final {p : } [fpprm : Fact (Nat.Prime p)] [pnot2 : Fact (p 2)] (m : ℕ+) :
              two_extractor (fun (x : ZMod p × ZMod p) => match x with | (x, y) => (ZMod.val (x * y + x ^ 2 * y ^ 2))) ((1 / 2 - 2 / 11 * bourgainα) * Real.logb 2 p) (bourgain_C * p ^ (-1 / 352 * bourgainα) * m * (3 * Real.log p + 3) + m / (2 * p))