Documentation

LeanPool.KaltonRoberts.PippengerProof

Pippenger expander construction proof #

Probabilistic counting argument proving existence of expanders for the rows needed by the Kalton-Roberts bound.

Counting constrained permutations #

theorem KaltonRoberts.card_perm_constrained_zero (n t : ) (_ht : t n) :
Fintype.card { σ : Equiv.Perm (Fin n) // ∀ (i : Fin n), i < 0(σ i) < t } = n.factorial
theorem KaltonRoberts.card_perm_constrained_step (n s t : ) (hs : s < t) (ht : t n) :
Fintype.card { σ : Equiv.Perm (Fin n) // ∀ (i : Fin n), i < s + 1(σ i) < t } * (n - s) = Fintype.card { σ : Equiv.Perm (Fin n) // ∀ (i : Fin n), i < s(σ i) < t } * (t - s)
theorem KaltonRoberts.card_perm_constrained (n s t : ) (hs : s t) (ht : t n) :
Fintype.card { σ : Equiv.Perm (Fin n) // ∀ (i : Fin n), i < s(σ i) < t } = t.descFactorial s * (n - s).factorial

The number of permutations of Fin n that map the first s elements into {0, …, t-1} is t.descFactorial s * (n - s)!.

Binomial coefficient bounds #

theorem KaltonRoberts.choose_le_exp_pow (n k : ) (hk : 0 < k) (_hkn : k n) :
(n.choose k) (Real.exp 1 * n / k) ^ k
theorem KaltonRoberts.choose_le_exp_h_entropy (n k : ) (hk : 0 < k) (hkn : k < n) :
(n.choose k) Real.exp (hEntropy n k)
theorem KaltonRoberts.choose_ge_exp_h_entropy_div (n k : ) (hk : 0 < k) (hkn : k < n) :
Real.exp (hEntropy n k) / (n + 1) (n.choose k)

Descending factorial ratio bound #

theorem KaltonRoberts.desc_fact_ratio_le (a b k : ) (hab : a b) (hka : k a) :
(a.descFactorial k) / (b.descFactorial k) (a / b) ^ k

Geometric and exponential tail bounds #

theorem KaltonRoberts.geom_sum_le (d : ) (q : ) (hq0 : 0 q) (hq1 : q < 1) :
iFinset.range d, q ^ (i + 1) q / (1 - q)
theorem KaltonRoberts.sum_Icc_one_pow_le_geom (D : ) (q : ) (hq0 : 0 q) (hq1 : q < 1) :
mFinset.Icc 1 D, q ^ m q / (1 - q)
theorem KaltonRoberts.bad_sum_split (A D N : ) (T : ) (q B : ) (hq0 : 0 q) (hq1 : q < 1) (hB0 : 0 B) (hcard_N : (Finset.Icc 1 A).card N) (hsmall : mFinset.Icc 1 A, m DT m q ^ m) (hmid : mFinset.Icc 1 A, D < mT m B) :
mFinset.Icc 1 A, T m q / (1 - q) + N * B
theorem KaltonRoberts.exp_decay_beats_poly (η : ) ( : 0 < η) :
∀ᶠ (N : ) in Filter.atTop, N ^ 2 * Real.exp (-η * N) < 1 / 2
theorem KaltonRoberts.exp_decay_beats_poly_const (C η : ) ( : 0 < η) :
∀ᶠ (N : ) in Filter.atTop, C * N ^ 2 * Real.exp (-η * N) < 1 / 2

Entropy bounds for Pippenger bad events #

theorem KaltonRoberts.h_entropy_scale (t a b : ) (ht : t 0) (ha : a 0) (hb : b 0) (hab : a - b 0) :
hEntropy (t * a) (t * b) = t * hEntropy a b
theorem KaltonRoberts.h_entropy_scale_nat (N A B : ) (a b : ) (hN : N 0) (ha : a 0) (hb : b 0) (hab : a - b 0) (hA : A = N * a) (hB : B = N * b) :
hEntropy A B = N * hEntropy a b
theorem KaltonRoberts.choose_ratio_le_entropy_bound (a b k : ) (hk : 0 < k) (hka : k < a) (hkb : k < b) :
(a.choose k) / (b.choose k) (b + 1) * Real.exp (hEntropy a k - hEntropy b k)
theorem KaltonRoberts.choose_ratio_le_pow (a b k : ) (hab : a b) (hk : k a) :
(a.choose k) / (b.choose k) (a / b) ^ k
theorem KaltonRoberts.pippenger_small_term_raw (N L r c m : ) (hm : 0 < m) (hmN : m N) (hmL : m L) (hrc : r c) (hcmN : c * m r * N) :
(N.choose m) * (L.choose m) * ((c * m).choose (r * m)) / ((r * N).choose (r * m)) (Real.exp 1 * N / m * (Real.exp 1 * L / m) * (↑(c * m) / ↑(r * N)) ^ r) ^ m
theorem KaltonRoberts.pippenger_term_le_entropy_bound (N L r c m : ) (hm : 0 < m) (hmN : m < N) (hmL : m < L) (hr : 0 < r) (hrc : r < c) :
(N.choose m) * (L.choose m) * ((c * m).choose (r * m)) / ((r * N).choose (r * m)) (↑(r * N) + 1) * Real.exp (hEntropy N m + hEntropy L m + hEntropy ↑(c * m) ↑(r * m) - hEntropy ↑(r * N) ↑(r * m))
theorem KaltonRoberts.pippenger_entropy_exponent_eq_phi (N L r c m : ) (θ : ) (hN : 0 < N) (hm : 0 < m) (hmN : m < N) (hmL : m < L) (hr : 0 < r) (hθ0 : 0 < θ) (hθ1 : θ < 1) (hLθ : L = θ * N) (hcθ : c = r / θ) :
hEntropy N m + hEntropy L m + hEntropy ↑(c * m) ↑(r * m) - hEntropy ↑(r * N) ↑(r * m) = N * Phi (↑r) θ (m / N)
theorem KaltonRoberts.pippenger_mid_term_le (N L r c m : ) (θ : ) (hN : 0 < N) (hm : 0 < m) (hmN : m < N) (hmL : m < L) (hr : 0 < r) (hrc : r < c) (hθ0 : 0 < θ) (hθ1 : θ < 1) (hLθ : L = θ * N) (hcθ : c = r / θ) (hphi : Phi (↑r) θ (m / N) -1 / 1000) :
(N.choose m) * (L.choose m) * ((c * m).choose (r * m)) / ((r * N).choose (r * m)) (↑(r * N) + 1) * Real.exp (-N / 1000)

Subset extension #

theorem KaltonRoberts.exists_superset_card_eq {α : Type u_1} [Fintype α] (B : Finset α) (m : ) (hBm : B.card m) (hmA : m Fintype.card α) :
∃ (T : Finset α), B T T.card = m

Counting constrained permutations with arbitrary subsets #

theorem KaltonRoberts.exists_perm_set_to_initial {n : } (A : Finset (Fin n)) :
∃ (π : Equiv.Perm (Fin n)), ∀ (x : Fin n), x A (π x) < A.card
theorem KaltonRoberts.card_constrained_perm_subsets {n : } (A B : Finset (Fin n)) (hs : A.card B.card) (ht : B.card n) :
Fintype.card { σ : Equiv.Perm (Fin n) // aA, σ a B } = B.card.descFactorial A.card * (n - A.card).factorial

Good matching existence #

theorem KaltonRoberts.right_coverage_of_equiv {N L r c : } (hc : 0 < c) (σ : Fin N × Fin r Fin L × Fin c) (w : Fin L) :
∃ (v : Fin N) (e : Fin r), (σ (v, e)).1 = w
theorem KaltonRoberts.first_moment_principle {n : } (hn : 0 < n.factorial) (weights : Finset (Finset (Fin n) × Finset (Fin n))) (hsum : pweights, (Fintype.card { σ : Equiv.Perm (Fin n) // ap.1, σ a p.2 }) / n.factorial < 1) :
∃ (σ : Equiv.Perm (Fin n)), pweights, ¬ap.1, σ a p.2
theorem KaltonRoberts.good_perm_of_sum_lt (M : ) (_hM : 0 < M) (pairs : Finset (Finset (Fin M) × Finset (Fin M))) (hsum : ppairs, (p.2.card.descFactorial p.1.card) * (M - p.1.card).factorial / M.factorial < 1) (hpairs : ppairs, p.1.card p.2.card p.2.card M) :
∃ (σ : Equiv.Perm (Fin M)), ppairs, ¬ap.1, σ a p.2
theorem KaltonRoberts.first_moment_principle_indexed {n : } {ι : Type u_1} (I : Finset ι) (A B : ιFinset (Fin n)) (hsum : iI, (Fintype.card { σ : Equiv.Perm (Fin n) // aA i, σ a B i }) / n.factorial < 1) :
∃ (σ : Equiv.Perm (Fin n)), iI, ¬aA i, σ a B i
theorem KaltonRoberts.good_perm_indexed_of_sum_lt {ι : Type u_1} (M : ) (I : Finset ι) (A B : ιFinset (Fin M)) (hsum : iI, ((B i).card.descFactorial (A i).card) * (M - (A i).card).factorial / M.factorial < 1) (hpairs : iI, (A i).card (B i).card (B i).card M) :
∃ (σ : Equiv.Perm (Fin M)), iI, ¬aA i, σ a B i
theorem KaltonRoberts.desc_factorial_ratio_eq_choose_ratio (M a k : ) (_hka : k a) (hkM : k M) :
(a.descFactorial k) * (M - k).factorial / M.factorial = (a.choose k) / (M.choose k)
theorem KaltonRoberts.good_matching_exists_of_ratio_sum_lt_one (N L r c A : ) (_hN : 0 < N) (hL : 0 < L) (hr : 0 < r) (hc : r < c) (hNL : r * N = c * L) (hA : A L) (hsum : mFinset.Icc 1 A, (N.choose m) * (L.choose m) * ((c * m).choose (r * m)) / ((r * N).choose (r * m)) < 1) :
∃ (edge : Fin NFin rFin L), (∀ (w : Fin L), ∃ (v : Fin N) (e : Fin r), edge v e = w) ∀ (S : Finset (Fin N)), S.card A(S.biUnion fun (v : Fin N) => Finset.image (edge v) Finset.univ).card S.card

If the expected number of bad sets is < 1, a good matching exists.

Constructing FiniteExpanderWitness from a good edge function #

noncomputable def KaltonRoberts.finiteExpanderOfGoodEdge (N L r A : ) (hN : 0 < N) (edge : Fin NFin rFin L) (hcov : ∀ (w : Fin L), ∃ (v : Fin N) (e : Fin r), edge v e = w) (hexp : ∀ (S : Finset (Fin N)), S.card A(S.biUnion fun (v : Fin N) => Finset.image (edge v) Finset.univ).card S.card) :

Package a good edge function into a FiniteExpanderWitness.

Equations
  • One or more equations did not get rendered due to their size.
Instances For