All proofs
Project-declaredLean 4.32.0 · mathlib@81a5d257c8e4

Di in ff

di_in_ff

Project documentation

A finite-field density-increment lemma. If the normalized additive correlation of AA with a set CC of density at least γ\gamma differs from its random value by at least ε\varepsilon, then there is a subspace VV of explicitly bounded codimension. Averaging 1A1_A over VV raises its LL^\infty density to at least (1+ε/32)α(1+\varepsilon/32)\alpha, where α\alpha is the density of AA.

Exact Lean statement

public lemma di_in_ff [DecidableEq G] [MeasurableSpace G] [DiscreteMeasurableSpace G] (hq : q.Prime)
    (hε₀ : 0 < ε) (hε₁ : ε < 1) (hγC : γ ≤ C.dens) (hγ : 0 < γ)
    (hAC : ε ≤ |card G * ⟪μ_[ℝ] A ∗ᵈ μ A, μ C⟫_[ℝ] - 1|) :
    ∃ (V : Submodule (ZMod q) G) (_ : DecidablePred (· ∈ V)),
        ↑(finrank (ZMod q) G - finrank (ZMod q) V) ≤
            2 ^ 128 * 𝓛 A.dens ^ 4 * 𝓛 γ ^ 4 / ε ^ 12 ∧
          (1 + ε / 32) * A.dens ≤ ‖𝟭_[(A : Set G), ℝ] ∗ᵈ μ (Set.toFinset V)‖_[∞]

Formal artifact

Lean source

Canonical source
Full Lean sourceLean 4
public lemma di_in_ff [DecidableEq G] [MeasurableSpace G] [DiscreteMeasurableSpace G] (hq : q.Prime)    (hε₀ : 0 < ε) (hε₁ : ε < 1) (hγC : γ  C.dens) (hγ : 0 < γ)    (hAC : ε  |card G * ⟪μ_[] A ∗ᵈ μ A, μ C⟫_[] - 1|) :     (V : Submodule (ZMod q) G) (_ : DecidablePred (·  V)),        ↑(finrank (ZMod q) G - finrank (ZMod q) V)             2 ^ 128 * 𝓛 A.dens ^ 4 * 𝓛 γ ^ 4 / ε ^ 12           (1 + ε / 32) * A.dens  ‖𝟭_[(A : Set G), ] ∗ᵈ μ (Set.toFinset V)‖_[∞] := by  have hγ₁ : γ  1 := hγC.trans (by norm_cast; exact dens_le_one)  obtain rfl | hA₀ := A.eq_empty_or_nonempty  · refine ⊤, Classical.decPred _, ?_, by simp    simp only [finrank_top, tsub_self, CharP.cast_eq_zero, dens_empty, NNRat.cast_zero, inv_zero,      log_zero, add_zero, one_pow, mul_one]    positivity  have hε₁' : 1  ε⁻¹ := (one_le_inv₀ hε₀).2 hε₁.le  let α :  := A.dens  have hα₀ : 0 < α := by positivity  have hα₁ : α  1 := by unfold α; exact mod_cast A.dens_le_one  have : 0  log γ⁻¹ := log_nonneg <| (one_le_inv₀ hγ).2 hγ₁  have : 0 < 𝓛 γ := curlog_pos hγ.le hγ₁  have : 1  𝓛 γ := one_le_curlog hγ.le hγ₁  let p :  := 2 * ⌈𝓛 γ⌉₊  have hpupper : p  4 * 𝓛 γ := by    unfold p; push_cast; grw [Nat.ceil_le_two_mul (by linarith)]; grind  have : 0 < p := by positivity  let f : G   := balance (μ A)  obtain p', hp'upper, unbalancing :     p' : , p'  2 ^ 10 */ 2)⁻¹ ^ 2 * p       1 + ε / 2 / 2  ‖card G • (f ○ᵈ f) + 1‖_[p', μ univ] := by    refine unbalancing _ (mul_ne_zero two_ne_zero (Nat.ceil_pos.2 <| curlog_pos hγ.le hγ₁).ne')/ 2) (by positivity) (div_le_one_of_le₀ (hε₁.le.trans <| by norm_num) <| by norm_num)      (card G • (balance (μ A) ○ᵈ balance (μ A))) (sqrt (card G) • balance (μ A)) (μ univ) ?_ ?_ ?_    · ext a : 1      simp [smul_dddconv, dddconv_smul,  mul_assoc,  sq,  Complex.ofReal_pow]    · simp    · have global_dichotomy := global_dichotomy hA₀ hγC hγ hAC      simpa [wLpNorm_nsmul,  nsmul_eq_mul, div_le_iff₀' (show (0 : ) < card G by positivity),         div_div, rpow_neg, inv_rpow] using global_dichotomy  have : 0 < p' := pos_iff_ne_zero.2 <| by rintro rfl; simp at unbalancing; linarith  let q' :  := max (2 * p') (2 ^ 4 * ⌈ε⁻¹ * log (64 / ε)⌉₊)  have : 0 < q' := by positivity  have hq'even : Even q' := by grind  have hp'q' : p'  q' := by unfold q'; grw [ le_max_left]; lia  have hq'lower : 2 ^ 4 * ε⁻¹ * log (64 / ε)  q' := by    unfold q'; grw [mul_assoc,  le_max_right]; push_cast; grw [ Nat.le_ceil]; norm_num  have hq'upper : q'  2 ^ 16 * 𝓛 γ / ε ^ 2 := by    unfold q'    push_cast    grw [hp'upper, hpupper, max_le_add_of_nonneg (by positivity) (by positivity),      (64 / ε).log_le_self (by positivity)]    ring_nf    grw [Nat.ceil_le_two_mul <| by grw [ hε₁']; norm_num]    ring_nf    bound  have : 0 < log (6 / ε) := log_pos <| (one_lt_div hε₀).2 (by linarith)  have : 0 < log (64 / ε) := log_pos <| (one_lt_div hε₀).2 (by linarith)  obtain A₁, A₂, hA, hA₁, hA₂ :  (A₁ A₂ : Finset G),      1 - ε / 32  ∑ x  s q' (ε / 16) univ univ A, (μ A₁ ○ᵈ μ A₂) x         (4⁻¹ : ) * A.dens ^ (2 * q')  A₁.dens  (4⁻¹ : ) * A.dens ^ (2 * q')  A₂.dens := by    refine sifting_cor (by positivity) (by linarith) (by positivity)      hq'even (by positivity) ?_ hA₀    calc/ 16)⁻¹ * log (2 // 32)) = 2 ^ 4 * ε⁻¹ * log (64 / ε) := by ring_nf      _  q' := hq'lower  have : card G • (f ○ᵈ f) + 1 = card G • (μ A ○ᵈ μ A) := by    unfold f    rw [ balance_dddconv, balance, smul_sub, smul_const, Fintype.card_smul_expect]    simp [sum_dddconv, hA₀]  have := calc    1 + ε / 4 = 1 + ε / 2 / 2 := by ring    _  ‖card G • (f ○ᵈ f) + 1‖_[p', μ univ] := unbalancing    _ = card G • ‖(μ_[] A ○ᵈ μ A)‖_[p', μ univ] := by simp [this, wLpNorm_nsmul, -nsmul_eq_mul]    _  card G • ‖(μ_[] A ○ᵈ μ A)‖_[q', μ univ] := by      have : Nonempty G := hA₀.to_type      gcongr      exact mod_cast sum_mu 0 univ_nonempty  let s' : Finset G := {x | 1 + ε / 8  card G • (μ A ○ᵈ μ A) x}  have hss' : s q' (ε / 16) univ univ A  s' := by    simp only [subset_iff, mem_s', ENNReal.coe_natCast, mu_univ_dddconv_mu_univ,      mem_filter, mem_univ, true_and, s']    rintro x hx    calc      1 + ε / 8  (1 - ε / 16) * (1 + ε / 4) := one_add_le_one_sub_mul_one_add <| calc          ε / 8 + ε / 16 + ε / 16 */ 4)  ε / 8 + ε / 16 + ε / 16 * (1 / 4) := by gcongr          _  ε / 4 := by linarith      _  (1 - ε / 16) * card G • ‖μ_[] A ○ᵈ μ A‖_[q', μ univ] := by gcongr; linarith      _ = card G • ((1 - ε / 16) * ‖μ_[] A ○ᵈ μ A‖_[q', μ univ]) := mul_smul_comm ..      _  card G • (μ A ○ᵈ μ A) x := by gcongr  obtain V, _, hVdim, hV :  (V : Submodule (ZMod q) G) (_ : DecidablePred (·  V)),    ↑(finrank (ZMod q) G - finrank (ZMod q) V)         2 ^ 32 * 𝓛 (4⁻¹ * α ^ (2 * q')) ^ 2 * 𝓛 (ε / 32 * (4⁻¹ * α ^ (2 * q'))) ^ 2 */ 32)⁻¹ ^ 2           |∑ x  s', (μ (Set.toFinset V) ∗ᵈ μ A₁ ○ᵈ μ A₂) x -            ∑ x  s', (μ A₁ ○ᵈ μ A₂) x|  ε / 32 :=    ap_in_ff' _ hq (by positivity)    (calc      4⁻¹ * (A.dens : ) ^ (2 * q')  4⁻¹ * 1 := by        gcongr; exact pow_le_one₀ (by positivity) <| mod_cast A.dens_le_one      _  2⁻¹ := by norm_num) (by positivity) (by linarith) hA₁ hA₂  replace hV :=    calc      1 - ε / 16 = 1 - ε / 32 - ε / 32 := by ring      _  ∑ x  s q' (ε / 16) univ univ A, (μ A₁ ○ᵈ μ A₂) x -        |∑ x  s', (μ (Set.toFinset V) ∗ᵈ μ A₁ ○ᵈ μ A₂) x - ∑ x  s', (μ A₁ ○ᵈ μ A₂) x| := by gcongr      _  ∑ x  s', (μ A₁ ○ᵈ μ A₂) x -        -(∑ x  s', (μ (Set.toFinset V) ∗ᵈ μ A₁ ○ᵈ μ A₂) x - ∑ x  s', (μ A₁ ○ᵈ μ A₂) x) := by        gcongr        · have : 0  μ_[] A₁ ○ᵈ μ A₂ := dddconv_nonneg mu_nonneg mu_nonneg          exact fun _ _ _  this _        · exact neg_le_abs _      _ = ∑ x  s', (μ (Set.toFinset V) ∗ᵈ μ A₁ ○ᵈ μ A₂) x := by ring  refine V, inferInstance, ?_, ?_  · calc      ↑(finrank (ZMod q) G - finrank (ZMod q) V)         2 ^ 32 * 𝓛 (4⁻¹ * α ^ (2 * q')) ^ 2 *          𝓛 (ε / 32 * (4⁻¹ * α ^ (2 * q'))) ^ 2 */ 32)⁻¹ ^ 2 := hVdim      _  2 ^ 32 * (8 * q' * 𝓛 α) ^ 2 *          (2 ^ 8 * q' * 𝓛 α / ε) ^ 2 */ 32)⁻¹ ^ 2 := by        have : α ^ (2 * q')  1 := by bound        have : 4⁻¹ * α ^ (2 * q')  1 := by bound        have : ε / 32 * (4⁻¹ * α ^ (2 * q'))  1 := by bound        have : 0  log (ε / 32 * (4⁻¹ * α ^ (2 * q')))⁻¹ := by bound        have : 0  log (4⁻¹ * α ^ (2 * q'))⁻¹ := by bound        have : 0  log (α ^ (2 * q'))⁻¹ := by bound        have := calc          𝓛 (4⁻¹ * α ^ (2 * q'))  4⁻¹⁻¹ * 𝓛 (α ^ (2 * q')) :=            curlog_mul_le (by norm_num) (by norm_num) (by positivity) ‹_›          _  4⁻¹⁻¹ * (↑(2 * q') *  𝓛 α) := by gcongr; exact curlog_pow_le hα₀ (by positivity)          _ = 8 * q' * 𝓛 α := by push_cast; ring        gcongr        calc          𝓛 (ε / 32 * (4⁻¹ * α ^ (2 * q'))) / 32)⁻¹ * 𝓛 (4⁻¹ *^ (2 * q'))) :=            curlog_mul_le (by positivity) (by linarith) (by positivity) ‹_›          _ / 32)⁻¹ * (8 * q' * 𝓛 α) := by gcongr          _ = 2 ^ 8 * q' * 𝓛 α / ε := by ring      _ = 2 ^ 64 * q' ^ 4 * 𝓛 α ^ 4 / ε ^ 4 := by ring      _  2 ^ 64 * (2 ^ 16 * 𝓛 γ / ε ^ 2) ^ 4 * 𝓛 α ^ 4 / ε ^ 4 := by gcongr      _ = 2 ^ 128 * 𝓛 α ^ 4 * 𝓛 γ ^ 4 / ε ^ 12 := by ring  · rw [ le_div_iff₀ (by positivity)]    have : 0  μ_[] (Set.toFinset V) ∗ᵈ μ A₁ ○ᵈ μ A₂ :=      dddconv_nonneg (ddconv_nonneg mu_nonneg mu_nonneg) mu_nonneg    calc      1 + ε / 32  (1 + ε / 8) * (1 - ε / 16) := one_add_le_one_add_mul_one_sub <|        calc          ε / 32 + ε / 16 + ε / 8 */ 16)  ε / 32 + ε / 16 + ε / 8 * (1 / 16) := by gcongr          _  ε / 8 := by linarith      _  (1 + ε / 8) * ∑ x  s', (μ (Set.toFinset V) ∗ᵈ μ A₁ ○ᵈ μ A₂) x := by gcongr      _ = ∑ x  s', (1 + ε / 8) * (μ (Set.toFinset V) ∗ᵈ μ A₁ ○ᵈ μ A₂) x := mul_sum ..      _  ∑ x  s', card G • (μ A ○ᵈ μ A) x * (μ (Set.toFinset V) ∗ᵈ μ A₁ ○ᵈ μ A₂) x := by        gcongr with x hx        · exact this _        · exact (mem_filter.1 hx).2      _  ∑ x, card G • (μ A ○ᵈ μ A) x * (μ (Set.toFinset V) ∗ᵈ μ A₁ ○ᵈ μ A₂) x := by        gcongr        · rintro x - -          have : (0 : )  _ := this x          have : 0  μ_[] A ○ᵈ μ A := dddconv_nonneg mu_nonneg mu_nonneg          have : (0 : )  _ := this x          positivity        · exact subset_univ _      _ = card G • ⟪μ_[] (Set.toFinset V) ∗ᵈ μ A, μ A ∗ᵈ μ A₂ ○ᵈ μ A₁⟫_[] := by        rw [ wInner_one_dddconv_eq_ddconv_wInner_one, dddconv_right_comm,          ddconv_dddconv_right_comm (μ A), wInner_one_dddconv_eq_ddconv_wInner_one,           dddconv_wInner_one_eq_wInner_one_ddconv,  conj_wInner_symm]        simp only [nsmul_eq_mul, mul_assoc, wInner_one_eq_sum, inner_apply, conj_trivial, map_sum,          smul_sum]      _  card G • (‖μ_[] (Set.toFinset V) ∗ᵈ μ A‖_[∞] * ‖μ_[] A ∗ᵈ μ A₂ ○ᵈ μ A₁‖_[1]) := by        gcongr; exact wInner_one_le_dLpNorm_mul_dLpNorm _ _      _ = _ := by        have : 0 < (4 : )⁻¹ * A.dens ^ (2 * q') := by positivity        replace hA₁ : A₁.Nonempty := by simpa using this.trans_le hA₁        replace hA₂ : A₂.Nonempty := by simpa using this.trans_le hA₂        rw [dL1Norm_dddconv, dL1Norm_ddconv]        · simp [eq_div_iff, hA₀.dens_ne_zero, hA₀, hA₁, hA₂,  card_smul_mu, smul_ddconv,            dLpNorm_nsmul, -nsmul_eq_mul]          simp [ mul_assoc, mul_comm, ddconv_comm]        · exact mu_nonneg        · exact mu_nonneg        · exact ddconv_nonneg mu_nonneg mu_nonneg        · exact mu_nonneg
Project
Arithmetic Progressions Almost Periodicity
License
Apache-2.0
Commit
afafc42a5326
Source
APAP/FiniteField.lean:333-510

Reuse this declaration

Bring the exact result into your workflow

The import identifies the source module. Your project still needs the pinned package dependency shown on this page.

What this badge means

This completion status comes from the project or community source. It has not yet been represented here as an independent rebuild and axiom audit.

Continue in this project

Related declarations

Project-declaredLean 4.32.0

Add Dissociated boring Energy le

AddDissociated.boringEnergy_le

Project documentation

If a finite set ss is additively dissociated, then its order-nn additive energy is at most CnnnsnC^n n^n |s|^n, where CC is the project's Chang constant. This is the quantitative dissociated-set estimate used in the proof of Chang's lemma.

additive combinatoricsarithmetic progressionsFourier analysis

Source project: Arithmetic Progressions Almost Periodicity

Person-level attribution pending.

View proof record
Project-declaredLean 4.32.0

Linfty almost periodicity

AlmostPeriodicity.linfty_almost_periodicity

Project documentation

An LL^\infty almost-periodicity theorem. Under the small-growth hypothesis σ[A,S]K\sigma[A,S]\le K, and for nonempty finite sets B,CB,C, there is a set of translations TT with TK4096L(C/B)/ε2S|T|\ge K^{-4096\lceil\mathcal L(|C|/|B|)\rceil/\varepsilon^2}|S|. Every tTt\in T changes the normalized convolution μA1BμC\mu_A*1_B*\mu_C by at most ε\varepsilon in LL^\infty.

additive combinatoricsarithmetic progressionsFourier analysis

Source project: Arithmetic Progressions Almost Periodicity

Person-level attribution pending.

View proof record
Project-declaredLean 4.32.0

Linfty almost periodicity boosted

AlmostPeriodicity.linfty_almost_periodicity_boosted

Plain-language statement

A boosted LL^\infty almost-periodicity estimate. Under σ[A,S]K\sigma[A,S]\le K, it finds a large set TT, with the stated lower bound TK4096L(C/B)k2/ε2S|T|\ge K^{-4096\lceil\mathcal L(|C|/|B|)\rceil k^2/\varepsilon^2}|S|, such that averaging the target convolution against the kk-fold convolution of μT\mu_T changes it by at most ε\varepsilon in LL^\infty.

additive combinatoricsarithmetic progressionsFourier analysis

Source project: Arithmetic Progressions Almost Periodicity

Person-level attribution pending.

View proof record