Skip to content

Commit f0d5c2d

Browse files
sgouezelgrunweg
andauthored
feat: optimize the constants (#458)
Instead of letting `D = 2 ^ {100 * a^2}`, let `D = 2 ^ {c * a^2}` for some fixed natural `c`, and express all the constants in terms of `c` (still keeping all the relevant constants of the form `2 ^ {n * a^2}` for `n = n(c)`, because it wouldn't make sense to overoptimize). For `c = 100`, we should recover essentially the constants in the blueprint. However, we can take `c = 7`, which gives better constants in the end. --------- Co-authored-by: grunweg <rothgang@math.uni-bonn.de>
1 parent 3699526 commit f0d5c2d

23 files changed

+992
-822
lines changed

Carleson/Antichain/AntichainOperator.lean

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -226,17 +226,18 @@ lemma M14_bound (hg : MemLp g 2 volume) :
226226
exact C2_0_6_q₆_le a4
227227

228228
/-- Constant appearing in Lemma 6.1.4. -/
229-
irreducible_def C6_1_4 (a : ℕ) : ℝ≥0 := 2 ^ (128 * a ^ 3)
229+
irreducible_def C6_1_4 (a : ℕ) : ℝ≥0 := 2 ^ ((𝕔 + 5 + 𝕔 / 8) * a ^ 3)
230230

231231
lemma le_C6_1_4 (a4 : 4 ≤ a) :
232232
Tile.C6_1_5 a * 2 ^ (6 * a + 1) * Antichain.C6_1_6 a * 2 ^ (a + 2) ≤ C6_1_4 a ^ 2 := by
233233
simp only [Tile.C6_1_5, Antichain.C6_1_6, C6_1_4]
234234
simp_rw [← pow_add, ← pow_mul]; gcongr
235235
· exact one_le_two
236-
· calc
237-
_ ≤ 255 * a ^ 3 + 4 * 4 * a := by linarith
238-
_ ≤ 255 * a ^ 3 + a * a * a := by gcongr
239-
_ = _ := by ring
236+
· have : 𝕔 / 42 * (𝕔 / 8) + 1 := by omega
237+
have : (𝕔 / 4) * a ^ 32 * (𝕔 / 8) * a ^ 3 + a ^ 3 :=
238+
(mul_le_mul_of_nonneg_right this (Nat.zero_le _)).trans_eq (by ring)
239+
ring_nf
240+
linarith [sixteen_times_le_cube a4]
240241

241242
open Classical Antichain in
242243
lemma dens1_antichain_sq (h𝔄 : IsAntichain (· ≤ ·) 𝔄)
@@ -313,27 +314,29 @@ lemma dens1_antichain (h𝔄 : IsAntichain (· ≤ ·) 𝔄)
313314

314315
/-- The constant appearing in Proposition 2.0.3. -/
315316
-- Todo: define this recursively in terms of previous constants
316-
def C2_0_3 (a : ℕ) (q : ℝ≥0) : ℝ≥0 := 2 ^ (128 * a ^ 3) / (q - 1)
317+
def C2_0_3 (a : ℕ) (q : ℝ≥0) : ℝ≥0 := 2 ^ ((𝕔 + 8 + 𝕔 / 8) * a ^ 3) / (q - 1)
317318

318319
variable (X) in
319320
omit [TileStructure Q D κ S o] in
320321
private lemma ineq_aux_2_0_3 :
321-
((2 ^ (128 * a ^ 3) : ℝ≥0) : ℝ≥0∞) ^ (q - 1) *
322-
(((2 ^ (111 * a ^ 3) : ℝ≥0) : ℝ≥0∞) * (nnq - 1)⁻¹) ^ (2 - q) ≤
323-
(2 ^ (128 * a ^ 3) / (nnq - 1) : ℝ≥0) := by
322+
((2 ^ ((𝕔 + 5 + 𝕔 / 8 : ℕ) * a ^ 3) : ℝ≥0) : ℝ≥0∞) ^ (q - 1) *
323+
(((2 ^ ((𝕔 + 8) * a ^ 3) : ℝ≥0) : ℝ≥0∞) * (nnq - 1)⁻¹) ^ (2 - q) ≤
324+
(2 ^ ((𝕔 + 8 + 𝕔 / 8 : ℕ) * a ^ 3) / (nnq - 1) : ℝ≥0) := by
324325
have hq1 : 0 ≤ q - 1 := sub_nonneg.mpr (NNReal.coe_le_coe.mpr (nnq_mem_Ioc X).1.le)
325326
have hq2 : 02 - q := sub_nonneg.mpr (NNReal.coe_le_coe.mpr (nnq_mem_Ioc X).2)
326327
have h21 : (2 : ℝ) - 1 = 1 := by norm_num
327328
calc
328-
_ = ((2 ^ (128 * a ^ 3) : ℝ≥0) : ℝ≥0∞) ^ (q - 1) *
329-
(((2 ^ (111 * a ^ 3) : ℝ≥0) : ℝ≥0∞)) ^ (2 - q) * (nnq - 1)⁻¹ ^ (2 - q) := by
329+
_ = ((2 ^ ((𝕔 + 5 + 𝕔 / 8 : ℕ) * a ^ 3) : ℝ≥0) : ℝ≥0∞) ^ (q - 1) *
330+
(((2 ^ ((𝕔 + 8 + 0) * a ^ 3) : ℝ≥0) : ℝ≥0∞)) ^ (2 - q) * (nnq - 1)⁻¹ ^ (2 - q) := by
330331
rw [ENNReal.mul_rpow_of_nonneg _ _ hq2]; ring
331-
_ ≤ ((2 ^ (128 * a ^ 3) : ℝ≥0) : ℝ≥0∞) ^ (q - 1) *
332-
(((2 ^ (128 * a ^ 3) : ℝ≥0) : ℝ≥0∞)) ^ (2 - q) * (nnq - 1)⁻¹ := by
332+
_ ≤ ((2 ^ ((𝕔 + 8 + 𝕔 / 8 : ℕ) * a ^ 3) : ℝ≥0) : ℝ≥0∞) ^ (q - 1) *
333+
(((2 ^ ((𝕔 + 8 + 𝕔 / 8 : ℕ) * a ^ 3) : ℝ≥0) : ℝ≥0∞)) ^ (2 - q) * (nnq - 1)⁻¹ := by
333334
have h11 : (1 + 1 : ℝ≥0) = 2 := by norm_num
334335
gcongr
335336
· norm_num
336337
· norm_num
338+
· norm_num
339+
· simp
337340
· refine ENNReal.rpow_le_self_of_one_le ?_ (by linarith)
338341
rw [one_le_coe_iff, one_le_inv₀ (tsub_pos_iff_lt.mpr (nnq_mem_Ioc X).1), tsub_le_iff_right,
339342
h11]; exact (nnq_mem_Ioc X).2
@@ -364,8 +367,10 @@ theorem antichain_operator (h𝔄 : IsAntichain (· ≤ ·) 𝔄)
364367
by_cases hq2 : q = 2
365368
· have hnnq2 : nnq = 2 := by simp only [← NNReal.coe_inj, NNReal.coe_ofNat, ← hq2]; rfl
366369
simp only [hq2, h21, one_div, sub_self, ENNReal.rpow_zero, mul_one]
367-
convert dens1_antichain h𝔄 hf hf1 hg hg1
370+
apply (dens1_antichain h𝔄 hf hf1 hg hg1).trans
371+
gcongr
368372
simp only [C2_0_3, hnnq2, h21', div_one, C6_1_4]
373+
gcongr <;> norm_num
369374
· have hq2' : 0 < 2 - q :=
370375
sub_pos.mpr (lt_of_le_of_ne (NNReal.coe_le_coe.mpr (nnq_mem_Ioc X).2) hq2)
371376
-- Take the (2-q)-th power of 6.1.11

Carleson/Antichain/AntichainTileCount.lean

Lines changed: 32 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,14 @@ lemma tile_reach {ϑ : Θ X} {N : ℕ} {p p' : 𝔓 X} (hp : dist_(p) (𝒬 p)
9494
simp only [defaultD, Nat.cast_pow, Nat.cast_ofNat]
9595
rw [h4, ← zpow_natCast, ← zpow_add₀ two_ne_zero, ← zpow_add₀ two_ne_zero,
9696
← zpow_zero (2 : ℝ)]
97-
rw [Nat.cast_mul, Nat.cast_ofNat, Nat.cast_pow]
97+
rw [Nat.cast_mul, Nat.cast_pow]
9898
gcongr --uses h12
99-
ring_nf
100-
nlinarith only
99+
suffices (2 : ℤ) * a + 5 * a ^ 2 ≤ 𝕔 * a ^ 2 by linarith
100+
norm_cast
101+
calc 2 * a + 5 * a ^ 2
102+
_ ≤ a * a + 5 * a ^ 2 := by gcongr; linarith [four_le_a X]
103+
_ = 6 * a ^ 2 := by ring
104+
_ ≤ 𝕔 * a ^ 2 := by gcongr; linarith [seven_le_c]
101105
_ = (4 * 2 ^ (2 - 5 * (a : ℤ) ^ 2 - 2 * ↑a)) * (D * D ^ 𝔰 p) := by ring
102106
_ ≤ 4 * 2 ^ (2 - 5 * (a : ℤ) ^ 2 - 2 * ↑a) * D ^ 𝔰 p' := by
103107
have h1D : 1 ≤ (D : ℝ) := one_le_D
@@ -358,11 +362,11 @@ lemma local_antichain_density {𝔄 : Set (𝔓 X)} (h𝔄 : IsAntichain (· ≤
358362
rw [inter_assoc, inter_assoc]; exact (hE.inter_right _).inter_left _
359363

360364
/-- The constant appearing in Lemma 6.3.4. -/
361-
def C6_3_4 (a N : ℕ) : ℝ≥0 := 2^(101*a^3 + N*a)
365+
def C6_3_4 (a N : ℕ) : ℝ≥0 := 2 ^ ((𝕔 + 1) * a ^ 3 + N * a)
362366

363367
/-- Auxiliary constant for Lemma 6.3.4. -/
364368
def C6_3_4' (a N : ℕ) : ℝ≥0 :=
365-
(((2 : ℝ≥0)^(a * (N + 5)) + 2^(a * N + a * 3)) * 2 ^ (100*a^3 + 5*a))
369+
((2 ^ (a * (N + 5)) + 2 ^ (a * N + a * 3)) * 2 ^ (𝕔 * a^3 + 5 * a))
366370

367371
variable (𝔄 : Set (𝔓 X)) (ϑ : range (Q (X := X))) (N : ℕ)
368372

@@ -803,7 +807,7 @@ private lemma ineq_6_3_39 (h𝔄 : IsAntichain (· ≤ ·) 𝔄) {L : Grid X}
803807

804808
-- Ineq. 6.3.41
805809
private lemma volume_L'_le {L : Grid X} (hL : L ∈ 𝓛' 𝔄 ϑ N) :
806-
volume (L' hL : Set X) ≤ 2 ^ (100*a^3 + 5*a) * volume (L : Set X) := by
810+
volume (L' hL : Set X) ≤ 2 ^ (𝕔 * a^3 + 5*a) * volume (L : Set X) := by
807811
have hc : dist (c L) (c (L' hL)) + 4 * D ^ s (L' hL) ≤ 8 * D ^ s (L' hL) := by
808812
calc dist (c L) (c (L' hL)) + 4 * D ^ s (L' hL)
809813
_ ≤ 4 * ↑D ^ s (L' hL) + 4 * D ^ s (L' hL) := by grw [Grid.dist_c_le_of_subset (L_le_L' hL).1]
@@ -816,17 +820,17 @@ private lemma volume_L'_le {L : Grid X} (hL : L ∈ 𝓛' 𝔄 ϑ N) :
816820
_ = volume (ball (c L) ((32 * D) * (D ^ (s L))/4)) := by
817821
rw [s_L'_eq hL, zpow_add₀ (by simp), zpow_one]
818822
ring_nf
819-
_ = volume (ball (c L) ((2^(100*a^2 + 5)) * ((D ^ (s L))/4))) := by
823+
_ = volume (ball (c L) ((2 ^ (𝕔 * a^2 + 5)) * ((D ^ (s L))/4))) := by
820824
have h32 : (32 : ℝ) = (2^5 : ℕ) := by norm_num
821825
congr; simp only [defaultD, h32]; norm_cast; ring_nf
822-
_ ≤ 2 ^ (100*a^3 + 5*a) * volume (ball (c L) ((D ^ (s L))/4)) := by
823-
have : (2 : ℝ≥0∞) ^ (100*a^3 + 5*a) = (defaultA a)^(100*a^2 + 5) := by
826+
_ ≤ 2 ^ (𝕔 * a^3 + 5*a) * volume (ball (c L) ((D ^ (s L))/4)) := by
827+
have : (2 : ℝ≥0∞) ^ (𝕔 * a^3 + 5*a) = (defaultA a) ^ (𝕔 * a^2 + 5) := by
824828
simp only [defaultA, Nat.cast_pow, Nat.cast_ofNat, ← pow_mul]
825829
ring
826830
rw [this]
827831
exact DoublingMeasure.volume_ball_two_le_same_repeat (c L) ((D ^ (s L))/4)
828-
(100 * a ^ 2 + 5)
829-
_ ≤ 2 ^ (100*a^3 + 5*a) * volume (L : Set X) := by gcongr; exact ball_subset_Grid
832+
(𝕔 * a ^ 2 + 5)
833+
_ ≤ 2 ^ (𝕔 * a^3 + 5*a) * volume (L : Set X) := by gcongr; exact ball_subset_Grid
830834

831835
-- Ineq. 6.3.30
832836
open Classical in
@@ -866,11 +870,10 @@ lemma global_antichain_density_aux (h𝔄 : IsAntichain (· ≤ ·) 𝔄) {L : G
866870
gcongr
867871
exact ineq_6_3_38 hL
868872
_ ≤ (2^(a * (N + 5)) + 2^(a * N + a * 3)) * dens₁ (𝔄 : Set (𝔓 X)) *
869-
2 ^ (100*a^3 + 5*a) * volume (L : Set X) := by
870-
grw [mul_assoc _ (2 ^ (100*a^3 + 5*a)) _, volume_L'_le hL]
871-
_ = ((2^(a * (N + 5)) + 2^(a * N + a * 3)) * 2 ^ (100*a^3 + 5*a)) * dens₁ (𝔄 : Set (𝔓 X)) *
872-
volume (L : Set X) := by ring
873-
_ = ↑(C6_3_4' a N) * dens₁ (𝔄 : Set (𝔓 X)) * volume (L : Set X) := by rfl
873+
2 ^ (𝕔 * a^3 + 5*a) * volume (L : Set X) := by
874+
grw [mul_assoc _ (2 ^ (𝕔 * a^3 + 5*a)) _, volume_L'_le hL]
875+
_ = ((2^(a * (N + 5)) + 2^(a * N + a * 3)) * 2 ^ (𝕔 * a ^ 3 + 5 * a))
876+
* dens₁ (𝔄 : Set (𝔓 X)) * volume (L : Set X) := by ring
874877

875878
variable (𝔄 ϑ N)
876879

@@ -924,50 +927,12 @@ private lemma lhs : ∑ (p ∈ (𝔄_aux 𝔄 ϑ N).toFinset), volume (E p ∩ G
924927
∑ p ∈ (𝔄_min 𝔄 ϑ N).toFinset, volume (E p ∩ G) := by rw [lhs']
925928

926929
private lemma le_C6_3_4 (ha : 4 ≤ a) :
927-
(((2 : ℝ≥0∞) ^ (a * (N + 5)) + 2 ^ (a * N + a * 3)) * 2 ^ (100 * a ^ 3 + 5 * a)) +
928-
2 ^ (a * (N + 5)) ≤ (C6_3_4 a N) := by
929-
calc ((2 : ℝ≥0∞) ^ (a * (N + 5)) + 2 ^ (a * N + a * 3)) * 2 ^ (100 * a ^ 3 + 5 * a) +
930-
2 ^ (a * (N + 5))
931-
_ ≤ (2^(a * N + a * 5) + 2^(a * N + a * 5)) * 2 ^ (100*a^3 + 5*a) + 2 ^ (a * N + a* 5) * 1 := by
932-
have h12 : (1 : ℝ≥0∞) ≤ 2 := one_le_two
933-
have h35 : 35 := by omega
934-
gcongr <;> apply le_of_eq <;> ring
935-
_ = 2^(a * N + a * 5) * (2 * 2 ^ (100*a^3 + 5*a)) + 2 ^ (a * N + a* 5) * 1 := by
936-
rw [← two_mul]; ring
937-
_ = 2^(a * N + a * 5) * (2 * 2 ^ (100*a^3 + 5*a) + 1) := by ring
938-
_ ≤ 2^(a * N + a * 5) * (2^2 * 2 ^ (100*a^3 + 5*a)) := by
939-
gcongr
940-
norm_cast
941-
rw [pow_two, mul_assoc 2 2]
942-
conv_rhs => rw [two_mul]
943-
gcongr
944-
exact NeZero.one_le
945-
_ = 2^(100*a^3 + a * N + a * 10 + 2) := by
946-
rw [← pow_add, ← pow_add]
947-
congr 1
948-
ring
949-
_ ≤ ↑(C6_3_4 a N) := by
950-
have h101 : 101 * a ^ 3 = 100 * a ^ 3 + a ^ 3 := by ring
951-
have ha3 : a ^ 3 = a * (a^2 - 1) + a := by
952-
simp only [mul_tsub, mul_one]
953-
rw [tsub_add_cancel_of_le]
954-
· ring
955-
· nth_rewrite 1 [← mul_one a]
956-
have ha' : 1 ≤ a^1 := by linarith
957-
gcongr
958-
apply le_trans ha' (Nat.pow_le_pow_right (by linarith) one_le_two)
959-
rw [C6_3_4]
960-
norm_cast
961-
apply pow_le_pow (le_refl _) one_le_two
962-
rw [add_assoc, add_assoc, add_comm (a * N), ← add_assoc, ← add_assoc, mul_comm N]
963-
gcongr
964-
rw [add_assoc, h101]
965-
nth_rewrite 3 [ha3]
966-
gcongr
967-
· calc 10
968-
_ ≤ 4^2 - 1 := by norm_num
969-
_ ≤ a ^ 2 - 1 := by gcongr
970-
· linarith
930+
(((2 : ℝ≥0∞) ^ (a * (N + 5)) + 2 ^ (a * N + a * 3)) * 2 ^ (𝕔 * a ^ 3 + 5 * a)) +
931+
2 ^ (a * (N + 5)) ≤ C6_3_4 a N := by
932+
simp only [add_mul, ← pow_add, C6_3_4, one_mul, ENNReal.coe_pow, ENNReal.coe_ofNat]
933+
apply add_le_pow_two₃ le_rfl (by linarith) (by omega) ?_
934+
ring_nf
935+
linarith [sixteen_times_le_cube ha]
971936

972937
-- Lemma 6.3.4
973938
open Classical in
@@ -1083,7 +1048,7 @@ open Classical in
10831048
lemma tile_count_aux {𝔄 : Set (𝔓 X)} (h𝔄 : IsAntichain (· ≤ ·) 𝔄) (ϑ : range (Q (X := X)))
10841049
{n : ℕ} : eLpNorm (fun x ↦ ∑ p ∈ 𝔄_aux 𝔄 ϑ n, (2 : ℝ) ^ (-n * (2 * a ^ 2 + a ^ 3 : ℝ)⁻¹) *
10851050
(E p).indicator 1 x * G.indicator 1 x) (ENNReal.ofReal (p₆ a)) volume ≤
1086-
(2 ^ (101 * a ^ 3 - n : ℝ)) ^ (p₆ a)⁻¹ * dens₁ 𝔄 ^ (p₆ a)⁻¹ *
1051+
(2 ^ ((𝕔 + 1) * a ^ 3 - n : ℝ)) ^ (p₆ a)⁻¹ * dens₁ 𝔄 ^ (p₆ a)⁻¹ *
10871052
volume (⋃ p ∈ 𝔄, (𝓘 p : Set X)) ^ (p₆ a)⁻¹ := by
10881053
have a4 := four_le_a X
10891054
have p₆p := p₆_pos a4
@@ -1155,10 +1120,10 @@ lemma tile_count_aux {𝔄 : Set (𝔓 X)} (h𝔄 : IsAntichain (· ≤ ·) 𝔄
11551120
def C6_1_6 (a : ℕ) : ℝ≥0 := 2 ^ (5 * a)
11561121

11571122
lemma le_C6_1_6 (a4 : 4 ≤ a) :
1158-
(2 : ℝ≥0∞) ^ (101 * a ^ 3 / p₆ a) * ∑ n ∈ Finset.range N, (2 ^ (-(p₆ a)⁻¹)) ^ n ≤ C6_1_6 a := by
1123+
(2 : ℝ≥0∞) ^ ((𝕔 + 1) * a ^ 3 / p₆ a) * ∑ n ∈ Finset.range N, (2 ^ (-(p₆ a)⁻¹)) ^ n ≤ C6_1_6 a := by
11591124
have p₆p := p₆_pos a4
11601125
calc
1161-
_ ≤ (2 : ℝ≥0∞) ^ (101 * a ^ 3 / p₆ a) * (8 * a ^ 4) := by
1126+
_ ≤ (2 : ℝ≥0∞) ^ ((𝕔 + 1) * a ^ 3 / p₆ a) * (8 * a ^ 4) := by
11621127
gcongr
11631128
calc
11641129
_ ≤ _ := ENNReal.sum_le_tsum _
@@ -1172,7 +1137,8 @@ lemma le_C6_1_6 (a4 : 4 ≤ a) :
11721137
gcongr
11731138
· exact one_le_two
11741139
· rw [div_le_iff₀ p₆p, p₆]; norm_cast; rw [show 7 * (4 * a ^ 4) = 28 * a * a ^ 3 by ring]
1175-
gcongr; omega
1140+
gcongr
1141+
linarith [c_le_100]
11761142
· exact_mod_cast calculation_6_1_6 a4
11771143
_ ≤ _ := by
11781144
rw [C6_1_6]; norm_cast; rw [← pow_add]; gcongr
@@ -1219,10 +1185,10 @@ lemma tile_count {𝔄 : Set (𝔓 X)} (h𝔄 : IsAntichain (· ≤ ·) 𝔄) (
12191185
apply ENNReal.ofReal_le_ofReal
12201186
simp only [𝔄_aux, mem_toFinset] at mp
12211187
exact mp.2.1
1222-
_ ≤ ∑ n ∈ Finset.range N, (2 ^ (101 * a ^ 3 - n : ℝ)) ^ (p₆ a)⁻¹ * dens₁ 𝔄 ^ (p₆ a)⁻¹ *
1188+
_ ≤ ∑ n ∈ Finset.range N, (2 ^ ((𝕔 + 1) * a ^ 3 - n : ℝ)) ^ (p₆ a)⁻¹ * dens₁ 𝔄 ^ (p₆ a)⁻¹ *
12231189
volume (⋃ p ∈ 𝔄, (𝓘 p : Set X)) ^ (p₆ a)⁻¹ :=
12241190
Finset.sum_le_sum fun _ _ ↦ tile_count_aux h𝔄 ϑ
1225-
_ = 2 ^ (101 * a ^ 3 / p₆ a) * (∑ n ∈ Finset.range N, (2 ^ (-(p₆ a)⁻¹)) ^ n) *
1191+
_ = 2 ^ ((𝕔 + 1) * a ^ 3 / p₆ a) * (∑ n ∈ Finset.range N, (2 ^ (-(p₆ a)⁻¹)) ^ n) *
12261192
dens₁ 𝔄 ^ (p₆ a)⁻¹ * volume (⋃ p ∈ 𝔄, (𝓘 p : Set X)) ^ (p₆ a)⁻¹ := by
12271193
rw [← Finset.sum_mul, ← Finset.sum_mul, Finset.mul_sum]; congr! with n mn
12281194
rw [← ENNReal.rpow_natCast, ← ENNReal.rpow_mul, ← ENNReal.rpow_mul, neg_mul, ← div_eq_inv_mul,

0 commit comments

Comments
 (0)