Skip to main content
fpvandoorn/carleson
Source indexedlemma · leanprover/lean4:v4.32.0

ball_covering'

Carleson.TwoSidedCarleson.WeakCalderonZygmund · Carleson/TwoSidedCarleson/WeakCalderonZygmund.lean:318 to 357

Source documentation

Lemma 10.2.4, but following the blueprint exactly (with a countable set of centres rather than functions from ).

Exact Lean statement

lemma ball_covering' (hO : IsOpen O ∧ O ≠ univ) :
    ∃ (U : Set X) (r : X → ℝ), U.Countable ∧ (U.PairwiseDisjoint fun c ↦ ball c (r c)) ∧
      ⋃ c ∈ U, ball c (3 * r c) = O ∧ (∀ c ∈ U, ¬Disjoint (ball c (7 * r c)) Oᶜ) ∧
      ∀ x ∈ O, {c ∈ U | x ∈ ball c (3 * r c)}.encard ≤ (2 ^ (6 * a) : ℕ)

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
lemma ball_covering' (hO : IsOpen O  O  univ) :     (U : Set X) (r : X  ), U.Countable  (U.PairwiseDisjoint fun c  ball c (r c))       ⋃ c  U, ball c (3 * r c) = O  ( c  U, ¬Disjoint (ball c (7 * r c)) Oᶜ)        x  O, {c  U | x  ball c (3 * r c)}.encard  (2 ^ (6 * a) : ) := by  let W : Set (Set X) := {U | U  O  U.PairwiseDisjoint fun c  ball c ((depth O c).toReal / 6)}  obtain U, maxU :  U, Maximal (·  W) U := by    refine zorn_subset _ fun U sU cU  ⋃₀ U, ?_, fun _  subset_sUnion_of_mem    simp only [W, sUnion_subset_iff, mem_setOf_eq]    exact fun u hu  (sU hu).1, (pairwiseDisjoint_sUnion cU.directedOn).2 fun u hu  (sU hu).2  have countU : U.Countable := by    refine maxU.1.2.countable_of_isOpen (fun _ _  isOpen_ball) (fun u mu  ?_)    rw [nonempty_ball]; refine div_pos (toReal_pos ?_ ?_) (by norm_num)    · rw [ EReal.coe_ennreal_pos_iff_ne_zero, EReal.coe_ennreal_pos, depth_pos_iff_mem hO.1]      exact maxU.1.1 mu    · rw [ lt_top_iff_ne_top, depth_lt_top_iff_ne_univ]; exact hO.2  refine U, fun c  (depth O c).toReal / 6, countU, maxU.1.2, ?_, fun c mc  ?_, fun x mx  ?_  · refine subset_antisymm (fun x mx  ?_) (fun x mx  ?_)    · simp only [mem_iUnion₂] at mx; obtain c, mc, mx := mx      refine (le_depth_iff_subset.mp ?_) mx      rw [ mul_comm_div, ENNReal.ofReal_mul (by norm_num),        ENNReal.ofReal_toReal (depth_lt_top_iff_ne_univ.mpr hO.2).ne]      nth_rw 2 [ one_mul (depth O _)]; gcongr; norm_num    · rw [mem_iUnion₂]      by_cases mxU : x  U      · refine x, mxU, mem_ball_self ?_        simp only [Nat.ofNat_pos, mul_pos_iff_of_pos_left, div_pos_iff_of_pos_right, toReal_pos_iff]        rw [depth_pos_iff_mem hO.1, depth_lt_top_iff_ne_univ]; exact mx, hO.2      obtain i, mi, hi :  i  U,          ¬Disjoint (ball x ((depth O x).toReal / 6)) (ball i ((depth O i).toReal / 6)) := by        by_contra! h; apply absurd maxU; simp_rw [not_maximal_iff maxU.1]        exact insert x U, insert_subset mx maxU.1.1, maxU.1.2.insert_of_notMem mxU h,          ssubset_insert mxU      use i, mi, depth_bound_1 hO.2 hi  · rw [ depth_lt_iff_not_disjoint,  mul_comm_div, ENNReal.ofReal_mul (by norm_num),      ENNReal.ofReal_toReal (depth_lt_top_iff_ne_univ.mpr hO.2).ne]    nth_rw 1 [ one_mul (depth O _)]    have dpos := (depth_pos_iff_mem hO.1).mpr (maxU.1.1 mc)    have dlt := (depth_lt_top_iff_ne_univ (x := c)).mpr hO.2    exact ENNReal.mul_lt_mul_left dpos.ne' dlt.ne (by norm_num)  · exact ball_covering_bounded_intersection hO countU maxU.1.2 mx