Skip to content

Commit a536f02

Browse files
authored
Lemma 7.5.11 (#238)
[[blueprint]](https://florisvandoorn.com/carleson/blueprint/treesection.html#lower-oscillation-bound) The proof is ready, can be merged. ### TODOs - [x] add `\leanok` - [x] refactor
1 parent 3936b56 commit a536f02

File tree

3 files changed

+166
-9
lines changed

3 files changed

+166
-9
lines changed

Carleson/Calculations.lean

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,84 @@ lemma calculation_9 [PseudoMetricSpace X] [ProofData a q K σ₁ σ₂ F G]
171171
apply (Real.rpow_le_rpow_left_iff (x := 2) (by linarith)).mp
172172
linarith
173173

174+
lemma calculation_11 [PseudoMetricSpace X] [ProofData a q K σ₁ σ₂ F G] (s : ℤ) :
175+
100 * (D : ℝ) ^ (s + 2) + 4 * D ^ (s + 1) < 128 * D^(s + 2) := by
176+
rw [show (128 : ℝ) = 100 + 28 by norm_num]
177+
rw [right_distrib]
178+
gcongr
179+
· linarith
180+
· exact one_lt_D (X := X)
181+
· linarith
182+
183+
lemma calculation_12 (s : ℝ) :
184+
128 * (D : ℝ)^(s + 2) = 2^(200 * a ^ 2 + 4) * (8 * D ^ s) := by
185+
simp only [defaultD]
186+
have leftSide := calc 128 * ((2 : ℝ) ^ (100 * a ^ 2)) ^ (s + 2)
187+
_ = 128 * 2^(100 * a^2 * (s + 2)) := by
188+
congrm 128 * ?_
189+
have fact := Real.rpow_mul (x := 2) (y := 100 * a ^ 2) (z := s + 2) (by positivity)
190+
rw_mod_cast [fact]
191+
_ = 128 * 2^((100 * a^2 * s) + (100 * a^2 * 2)) := by
192+
congrm 128 * (2 ^ ?_)
193+
ring
194+
_ = (2 ^ 7) * 2^((100 * a^2 * s) + (100 * a^2 * 2)) := by
195+
norm_num
196+
_ = 2 ^ (7 + ((100 * a^2 * s) + (100 * a^2 * 2))) := by
197+
have fact := Real.rpow_add (x := 2) (y := 7) (z := 100 * a^2 * s + 100 * a^2 * 2) (by positivity)
198+
rw_mod_cast [fact]
199+
have rightSide := calc 2 ^ (200 * a ^ 2 + 4) * (8 * ((2 : ℝ) ^ (100 * a ^ 2)) ^ s)
200+
_ = 2 ^ (200*a^2 + 4) * ((2^3)*((2 ^ (100 * a ^ 2)) ^ s)) := by
201+
norm_num
202+
_ = 2 ^ (200*a^2 + 4) * ( 2^3 * 2 ^ (100 * a ^ 2 * s) ) := by
203+
rw [Real.rpow_mul (x:=2) (by positivity)]
204+
norm_cast
205+
_ = 2 ^ (200*a^2 + 4) * 2 ^ (3 + 100 * a ^ 2 * s) := by
206+
have fact := Real.rpow_add (x:=2) (y:= 3) (z:= 100 * a ^ 2 * s) (by positivity)
207+
rw_mod_cast [fact]
208+
_ = 2^( 200*a^2 + 4 + (3 + 100 * a ^ 2 * s) ) := by
209+
have fact := Real.rpow_add (x:=2) (y:= 200*a^2 + 4) (z:= 3 + 100 * a ^ 2 * s) (by positivity)
210+
nth_rw 2 [Real.rpow_add]
211+
norm_cast
212+
positivity
213+
_ = 2^(7 + ((100 * a^2 * s) + (100 * a^2 * 2))) := by
214+
congrm 2 ^ ?_
215+
linarith
216+
rw_mod_cast [leftSide]
217+
rw_mod_cast [rightSide]
218+
219+
lemma calculation_13 : (2 : ℝ) ^ (200 * (a^3) + 4*a) = (defaultA a) ^ (200*a^2 + 4) := by
220+
simp only [defaultA, Nat.cast_pow, Nat.cast_ofNat]
221+
have fact := Real.rpow_mul (x := 2) (y := a) (z := 200 * a ^ 2 + 4) (by positivity)
222+
rw_mod_cast [← fact]
223+
ring
224+
225+
lemma calculation_14 [PseudoMetricSpace X] [ProofData a q K σ₁ σ₂ F G] (n: ℕ) :
226+
(2 : ℝ) ^ ((Z : ℝ) * n / 2 - 201 * a ^ 3) ≤ 2 ^ ((Z : ℝ) * n / 2 - (200 * a ^ 3 + 4 * a)) := by
227+
gcongr
228+
· linarith
229+
rw [show 201 * (a : ℝ) ^ 3 = 200 * (a : ℝ) ^ 3 + a ^ 3 by ring]
230+
gcongr 200 * (a : ℝ) ^ 3 + ?_
231+
rw [show (a : ℝ) ^ 3 = a ^ 2 * a by ring]
232+
gcongr
233+
suffices 4 ^ 2 ≤ (a : ℝ) ^ 2 by linarith
234+
apply pow_le_pow_left₀ (ha := by linarith)
235+
exact_mod_cast four_le_a X
236+
237+
lemma calculation_15 [PseudoMetricSpace X] [ProofData a q K σ₁ σ₂ F G]
238+
(dist: ℝ) (zon : ℝ)
239+
(h : 2 ^ zon ≤ 2 ^ (200 * a ^ 3 + 4 * a) * dist) :
240+
2 ^ (zon - (200 * a^3 + 4*a)) ≤ dist := by
241+
rw [Real.rpow_sub (hx := by linarith)]
242+
rw [show dist = 2 ^ (200 * a ^ 3 + 4 * a) * dist / 2 ^ (200 * a ^ 3 + 4 * a) by simp]
243+
have := (div_le_div_iff_of_pos_right (c := 2 ^ (200 * a ^ 3 + 4 * a)) (hc := by have aIsBig := four_le_a X; positivity)).mpr h
244+
exact_mod_cast this
245+
246+
lemma calculation_16 [PseudoMetricSpace X] [ProofData a q K σ₁ σ₂ F G] (s: ℤ) :
247+
4 * (D : ℝ) ^ s < 100 * D ^ (s + 1) := by
248+
gcongr
249+
· linarith
250+
· exact one_lt_D (X := X)
251+
· linarith
174252

175253
lemma calculation_7_7_4 [PseudoMetricSpace X] [ProofData a q K σ₁ σ₂ F G] {n : ℕ}:
176254
(1:ℝ) ≤ 2 ^ (Z * (n + 1)) - 4 := by
@@ -188,3 +266,4 @@ lemma calculation_7_7_4 [PseudoMetricSpace X] [ProofData a q K σ₁ σ₂ F G]
188266
· norm_num
189267
omega
190268
exact Nat.mul_le_mul this (Nat.le_add_left 1 n)
269+

Carleson/ForestOperator/LargeSeparation.lean

Lines changed: 86 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,14 @@ lemma IF_subset_THEN_distance_between_centers (subset : (J : Set X) ⊆ J') :
4949
apply Grid_subset_ball
5050
exact (subset (Grid.c_mem_Grid))
5151

52+
lemma IF_subset_THEN_not_disjoint {A : Grid X} {B: Grid X} (h : (A : Set X) ⊆ B) :
53+
¬ Disjoint (B : Set X) (A : Set X) := by
54+
rw [disjoint_comm]
55+
intro disjoint
56+
have nonempty := Grid.nonempty A
57+
rw [← Mathlib.Tactic.PushNeg.empty_ne_eq_nonempty] at nonempty
58+
exact nonempty (Eq.symm ((Set.disjoint_of_subset_iff_left_eq_empty h).mp disjoint))
59+
5260
lemma IF_disjoint_with_ball_THEN_distance_bigger_than_radius {J : X} {r : ℝ} {pSet : Set X} {p : X}
5361
(belongs : p ∈ pSet) (h : Disjoint (Metric.ball J r) pSet) :
5462
dist J p ≥ r := by
@@ -121,15 +129,9 @@ lemma union_𝓙₅ (hu₁ : u₁ ∈ t) (hu₂ : u₂ ∈ t) (hu : u₁ ≠ u
121129
_ ⊆ ball (c cube) (4 * D ^ s cube) := by
122130
exact Grid_subset_ball (i := cube)
123131
_ ⊆ ball (c cube) (100 * D ^ (s cube + 1)) := by
124-
unfold ball
125132
intro y xy
126-
rw [mem_setOf_eq] at xy ⊢
127-
have numbers : 4 * (D : ℝ) ^ s cube < 100 * D ^ (s cube + 1) := by
128-
gcongr
129-
linarith
130-
exact one_lt_D (X := X)
131-
linarith
132-
exact gt_trans numbers xy
133+
rw [ball, mem_setOf_eq] at xy ⊢
134+
exact gt_trans (calculation_16 (X := X) (s := s cube)) xy
133135
have black : ¬↑(𝓘 p) ⊆ ball (c cube) (100 * D ^ (s cube + 1)) := by
134136
have in_𝔖₀ := 𝔗_subset_𝔖₀ (hu₁ := hu₁) (hu₂ := hu₂) (hu := hu) (h2u := h2u)
135137
rw [subset_def] at in_𝔖₀
@@ -1069,7 +1071,82 @@ irreducible_def C7_5_11 (a n : ℕ) : ℝ≥0 := 2 ^ (Z * n / 2 - 201 * (a : ℝ
10691071
lemma lower_oscillation_bound (hu₁ : u₁ ∈ t) (hu₂ : u₂ ∈ t) (hu : u₁ ≠ u₂)
10701072
(h2u : 𝓘 u₁ ≤ 𝓘 u₂) (hJ : J ∈ 𝓙₅ t u₁ u₂) :
10711073
C7_5_11 a n ≤ dist_{c J, 8 * D ^ s J} (𝒬 u₁) (𝒬 u₂) := by
1072-
sorry
1074+
have existsBiggerThanJ : ∃ (J' : Grid X), J ≤ J' ∧ s J' = s J + 1 := by
1075+
apply Grid.exists_scale_succ
1076+
obtain ⟨⟨Jin𝓙₀, _⟩, ⟨jIsSubset : (J : Set X) ⊆ 𝓘 u₁, smaller : s J ≤ s (𝓘 u₁)⟩⟩ := hJ
1077+
obtain ⟨p, belongs⟩ := t.nonempty' hu₁
1078+
apply lt_of_le_of_ne smaller
1079+
by_contra! h
1080+
have u₁In𝓙₀ : 𝓘 u₁ ∈ 𝓙₀ (t.𝔖₀ u₁ u₂) := by
1081+
apply mem_of_eq_of_mem (h := Jin𝓙₀)
1082+
rw [eq_comm]
1083+
apply (eq_or_disjoint h).resolve_right
1084+
have notDisjoint := IF_subset_THEN_not_disjoint jIsSubset
1085+
rw [disjoint_comm] at notDisjoint
1086+
exact notDisjoint
1087+
cases u₁In𝓙₀ with
1088+
| inl min =>
1089+
have sameScale : s (𝓘 p) = s (𝓘 u₁) := by
1090+
linarith [
1091+
(scale_mem_Icc (i := 𝓘 p)).left,
1092+
show s (𝓘 p) ≤ s (𝓘 u₁) by exact (𝓘_le_𝓘 t hu₁ belongs).2
1093+
]
1094+
suffices s (𝓘 u₁) > s (𝓘 p) by linarith
1095+
by_contra! smaller
1096+
have pIsSubset := (𝓘_le_𝓘 t hu₁ belongs).1
1097+
apply HasSubset.Subset.not_ssubset ((fundamental_dyadic smaller).resolve_right (IF_subset_THEN_not_disjoint pIsSubset))
1098+
apply HasSubset.Subset.ssubset_of_ne pIsSubset
1099+
by_contra! sameSet
1100+
apply Forest.𝓘_ne_𝓘 (hu := hu₁) (hp := belongs)
1101+
exact Grid.inj (Prod.ext sameSet sameScale)
1102+
| inr avoidance =>
1103+
have pIn𝔖₀ : p ∈ t.𝔖₀ u₁ u₂ := 𝔗_subset_𝔖₀ (hu₁ := hu₁) (hu₂ := hu₂) (hu := hu) (h2u := h2u) belongs
1104+
apply avoidance p pIn𝔖₀
1105+
calc (𝓘 p : Set X)
1106+
_ ⊆ 𝓘 u₁ := (𝓘_le_𝓘 t hu₁ belongs).1
1107+
_ ⊆ ball (c (𝓘 u₁)) (4 * D ^ s (𝓘 u₁)) := by
1108+
exact Grid_subset_ball
1109+
_ ⊆ ball (c (𝓘 u₁)) (100 * D ^ (s (𝓘 u₁) + 1)) := by
1110+
intro x hx
1111+
exact gt_trans (calculation_16 (X := X) (s := s (𝓘 u₁))) hx
1112+
rcases existsBiggerThanJ with ⟨J', JleJ', scaleSmaller⟩
1113+
have notIn𝓙₀ : J' ∉ 𝓙₀ (t.𝔖₀ u₁ u₂) := by
1114+
apply bigger_than_𝓙_is_not_in_𝓙₀ (sle := by linarith) (le := JleJ')
1115+
exact mem_of_mem_inter_left hJ
1116+
unfold 𝓙₀ at notIn𝓙₀
1117+
simp only [mem_setOf_eq, not_or, not_forall, Classical.not_imp, Decidable.not_not] at notIn𝓙₀
1118+
push_neg at notIn𝓙₀
1119+
obtain ⟨_, ⟨ p, pIn, pSubset ⟩⟩ := notIn𝓙₀
1120+
have thus :=
1121+
calc 2 ^ ((Z : ℝ) * n / 2)
1122+
_ ≤ dist_{𝔠 p, D ^ 𝔰 p / 4} (𝒬 u₁) (𝒬 u₂) := pIn.2
1123+
_ ≤ dist_{c J, 128 * D^(s J + 2)} (𝒬 u₁) (𝒬 u₂) := by
1124+
apply cdist_mono
1125+
intro point pointIn
1126+
calc dist point (c J)
1127+
_ ≤ dist point (c J') + dist (c J') (c J) := dist_triangle ..
1128+
_ ≤ 100 * D ^ (s J' + 1) + dist (c J') (c J) := by
1129+
rw [ball, Set.subset_def] at pSubset
1130+
have := pSubset point (ball_subset_Grid pointIn)
1131+
rw [mem_setOf_eq] at this
1132+
gcongr
1133+
_ ≤ 100 * D ^ (s J' + 1) + 4 * D ^ (s J') := by
1134+
have : dist (c J) (c J') < 4 * D ^ (s J') := IF_subset_THEN_distance_between_centers (subset := JleJ'.1)
1135+
rw [dist_comm] at this
1136+
gcongr
1137+
_ = 100 * D ^ (s J + 2) + 4 * D ^ (s J + 1) := by
1138+
rw [scaleSmaller, add_assoc, show (1 : ℤ) + 1 = 2 by rfl]
1139+
_ < 128 * D^(s J + 2) := by
1140+
exact calculation_11 (s J) (X := X)
1141+
_ ≤ 2 ^ (200 * (a^3) + 4 * a) * dist_{c J, 8 * D ^ s J} (𝒬 u₁) (𝒬 u₂) := by
1142+
rw [show 128 * (D : ℝ)^(s J + 2) = 2^(200*a^2 + 4) * (8*D^(s J)) by exact_mod_cast calculation_12 (s := s J)]
1143+
rw [calculation_13]
1144+
apply cdist_le_iterate
1145+
have := defaultD_pos a
1146+
positivity
1147+
rw [C7_5_11]
1148+
push_cast
1149+
linarith [calculation_14 (X := X) (n := n), calculation_15 (X := X) (h := thus)]
10731150

10741151
/-- The constant used in `correlation_distant_tree_parts`.
10751152
Has value `2 ^ (541 * a ^ 3 - Z * n / (4 * a ^ 2 + 2 * a ^ 3))` in the blueprint. -/

blueprint/src/chapter/main.tex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5676,6 +5676,7 @@ \subsection{The van der Corput estimate}
56765676
\end{lemma}
56775677

56785678
\begin{proof}
5679+
\leanok
56795680
Since $\emptyset \ne \fT(\fu_1) \subset \mathfrak{S}$ by \Cref{overlap-implies-distance}, there exists at least one tile $\fp \in \mathcal{S}$ with $\scI(\fp) \subsetneq \scI(\fu_1)$. Thus $\scI(\fu_1) \notin \mathcal{J}'$, so $J \subsetneq \scI(\fu_1)$. Thus there exists a cube $J' \in \mathcal{D}$ with $J \subset J'$ and $s(J') = s(J) + 1$, by \eqref{coverdyadic} and \eqref{dyadicproperty}. By definition of $\mathcal{J'}$ and the triangle inequality, there exists $\fp \in \mathfrak{S}$ such that
56805681
$$
56815682
\scI(\fp) \subset B(c(J'), 100 D^{s(J') + 1}) \subset B(c(J), 128 D^{s(J)+2})\,.

0 commit comments

Comments
 (0)