Plain-language statement
In the function-distance space used for the real-line Carleson argument, every ball of radius can be covered by at most three balls of radius .
Exact Lean statement
lemma integer_ball_cover {x : ℝ} {R R' : ℝ} {f : WithFunctionDistance x R} :
CoveredByBalls (ball f (2 * R')) 3 R'Formal artifact
Lean source
lemma integer_ball_cover {x : ℝ} {R R' : ℝ} {f : WithFunctionDistance x R} : CoveredByBalls (ball f (2 * R')) 3 R' := by unfold WithFunctionDistance at f rw [coveredByBalls_iff] by_cases! R'pos : 0 ≥ R' · -- trivial case refine ⟨{f}, Finset.card_singleton f ▸ by norm_num, ?_⟩ have hunion : (⋃ x_1 ∈ ({f} : Finset (WithFunctionDistance x R)), ball_{x, R} x_1 R') = ball_{x, R} f R' := by ext y simp only [Set.mem_iUnion, exists_prop] constructor · rintro ⟨i, hi, hb⟩; rwa [Finset.mem_singleton.mp hi] at hb · intro h; exact ⟨f, Finset.mem_singleton_self f, h⟩ rw [hunion, Metric.ball_eq_empty.mpr R'pos, Set.subset_empty_iff, Metric.ball_eq_empty] linarith by_cases! Rpos : 0 ≥ R · -- trivial case refine ⟨{f}, Finset.card_singleton f ▸ by norm_num, ?_⟩ have hunion : (⋃ x_1 ∈ ({f} : Finset (WithFunctionDistance x R)), ball_{x, R} x_1 R') = ball_{x, R} f R' := by ext y simp only [Set.mem_iUnion, exists_prop] constructor · rintro ⟨i, hi, hb⟩; rwa [Finset.mem_singleton.mp hi] at hb · intro h; exact ⟨f, Finset.mem_singleton_self f, h⟩ rw [hunion] convert Set.subset_univ _ ext g refine ⟨by simp, ?_⟩ simp only [Set.mem_univ, mem_ball, true_implies, dist_integer_linear_eq] convert! R'pos simpa using Or.inl Rpos set m₁ := Int.floor (f - R' / (2 * R)) with m₁def set! m₂ := f with m₂def set m₃ := Int.ceil (f + R' / (2 * R)) with m₃def /- classical is necessary to be able to build a Finset of WithFunctionDistance. -/ classical set balls : Finset (WithFunctionDistance x R) := {m₁, m₂, m₃} with balls_def use balls constructor · rw [balls_def] apply Finset.card_le_three intro φ hφ unfold WithFunctionDistance at φ rw [mem_ball, dist_comm] at hφ /- m₁, m₂, m₃ each correspond to one case. -/ simp only [Set.mem_iUnion, mem_ball, exists_prop] by_cases! h : φ ≤ f - R' / (2 * R) · use m₁ constructor · apply Finset.mem_insert_self rw [dist_integer_linear_eq] calc 2 * max R 0 * |↑φ - ↑m₁| _ = 2 * R * |↑φ - ↑m₁| := by congr rw [max_eq_left_iff] exact Rpos.le _ = 2 * R * (m₁ - ↑φ) := by rw [abs_of_nonpos] on_goal 1 => simp only [neg_sub] norm_cast simp only [tsub_le_iff_right, zero_add] rwa [m₁def, Int.le_floor] _ = 2 * R * (m₁ - f) + 2 * R * (f - φ) := by ring _ < - R' + 2 * R' := by apply add_lt_add_of_le_of_lt · rw [m₁def] calc 2 * R * (⌊f - R' / (2 * R)⌋ - f) _ ≤ 2 * R * (f - R' / (2 * R) - f) := by gcongr apply Int.floor_le _ = -R' := by ring_nf rw [mul_comm, ←mul_assoc, inv_mul_cancel₀ Rpos.ne.symm, one_mul] · calc 2 * R * (↑f - ↑φ) _ ≤ 2 * R * |↑f - ↑φ| := by gcongr apply le_abs_self _ < 2 * R' := by convert hφ rw [dist_integer_linear_eq] congr symm rw [max_eq_left_iff] exact Rpos.le _ = R' := by ring by_cases! h' : φ < f + R' / (2 * R) · use m₂ constructor · exact Finset.mem_insert.mpr (Or.inr (Finset.mem_insert_self m₂ _)) rw [m₂def, dist_comm] rw [dist_integer_linear_eq] calc 2 * max R 0 * |↑f - ↑φ| _ = 2 * R * |↑f - ↑φ| := by congr rw [max_eq_left_iff] exact Rpos.le _ < 2 * R * (R' / (2 * R)) := by gcongr rw [abs_sub_lt_iff] constructor <;> linarith _ = R' := by field_simp use m₃ constructor · apply Finset.mem_insert.mpr; right apply Finset.mem_insert.mpr; right exact Finset.mem_singleton.mpr m₃def rw [dist_integer_linear_eq] calc 2 * max R 0 * |↑φ - ↑m₃| _ = 2 * R * (↑φ - ↑m₃) := by rw [abs_of_nonneg] · congr rw [max_eq_left_iff] exact Rpos.le simp only [sub_nonneg, Int.cast_le] rwa [m₃def, Int.ceil_le] _ = 2 * R * (φ - f) + 2 * R * (f - m₃) := by ring _ < 2 * R' - R' := by apply add_lt_add_of_lt_of_le · calc 2 * R * (↑φ - ↑f) _ ≤ 2 * R * |↑φ - ↑f| := by gcongr exact le_abs_self _ _ = 2 * R * |↑f - ↑φ| := by congr 1 exact abs_sub_comm _ _ _ < 2 * R' := by convert hφ rw [dist_integer_linear_eq] congr symm rw [max_eq_left_iff] exact Rpos.le · rw [m₃def] calc 2 * R * (f - ⌈f + R' / (2 * R)⌉) _ ≤ 2 * R * (f - (f + R' / (2 * R))) := by gcongr exact Int.le_ceil _ _ = -R' := by ring_nf rw [mul_comm, ←mul_assoc, inv_mul_cancel₀ Rpos.ne.symm, one_mul] _ = R' := by ring- Project
- Carleson formalization
- License
- Apache-2.0
- Commit
- 74ef907d6bdb
- Source
- Carleson/Classical/CarlesonOnTheRealLineBasic.lean:219-359
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
Adjoint Carleson adjoint
adjointCarleson_adjoint
Plain-language statement
adjointCarleson is the adjoint of carlesonOn.
Source project: Carleson formalization
Person-level attribution pending.
Ae tendsto zero of distribution le
ae_tendsto_zero_of_distribution_le
Plain-language statement
Suppose that, for every error threshold and every measure tolerance , one can choose so that the set where exceeds has measure at most . Then converges to for almost every .
Source project: Carleson formalization
Person-level attribution pending.
Antichain operator
antichain_operator
Plain-language statement
For an antichain of pairwise incomparable tiles, and measurable functions and bounded by the indicators of and , the pairing of with the Carleson sum over is controlled by the norms of and and by positive powers of the two tile-density parameters. Concretely, the bound is
Source project: Carleson formalization
Person-level attribution pending.