fpvandoorn/carleson
Source indexedlemma Β· leanprover/lean4:v4.32.0
boundary_exception
Carleson.Discrete.ExceptionalSet Β· Carleson/Discrete/ExceptionalSet.lean:682 to 830
Source documentation
Lemma 5.2.9
Exact Lean statement
lemma boundary_exception {u : π X} :
volume (β i β π (X := X) n u, (i : Set X)) β€ C5_2_9 X n * volume (π u : Set X)Complete declaration
Lean source
Full Lean sourceLean 4
lemma boundary_exception {u : π X} : volume (β i β π (X := X) n u, (i : Set X)) β€ C5_2_9 X n * volume (π u : Set X) := by by_cases h_π_n_u_non_empty : Set.Nonempty (π (X := X) n u) Β· set X_u := { x β GridStructure.coeGrid (π u) | Metric.infEDist x (GridStructure.coeGrid (π u))αΆ β€ 12 * (D ^ (π° u - Z * (n + 1) - 1 : β€) : ββ₯0β)} with h_X_u -- 5.2.25 calc volume (β i β π (X := X) n u, (i : Set X)) _ β€ volume X_u := by have i_subset_X_u : β i β π (X := X) n u, GridStructure.coeGrid i β X_u := by intro i β¨β¨i_subset_I_u, _β©, s_i_eq_stuff, I_not_contain_8_ballβ© ipt hipt refine β¨i_subset_I_u hipt, ?_β© rw [show π° u - Z * (n + 1) - 1 = s i by norm_cast; linarith] obtain β¨bpt, hbpt, h_bpt_not_in_I_uβ© : β b β ball (c i) (8 * βD ^ s i), b β β(π u) := not_subset.mp I_not_contain_8_ball -- triangle inequality between ipt, bpt, c i have ipt_bpt_triangle_ineq : dist ipt bpt β€ (12 * D ^ s i : β) := calc dist ipt bpt _ β€ dist ipt (c i) + dist (c i) bpt := dist_triangle ipt (c i) bpt _ β€ 4 * D ^ s i + dist (c i) bpt := by have dist_ipt_c_i_le : dist ipt (c i) < 4 * D ^ s i := by have ipt_in_ball_4 : ipt β ball (c i) (4 * D ^ s i) := Grid_subset_ball hipt simp_all rel [dist_ipt_c_i_le] _ β€ 4 * D ^ s i + dist bpt (c i) := by rw [dist_comm] _ β€ 4 * D ^ s i + 8 * D ^ s i := by have dist_bpt_c_i_le : dist bpt (c i) < 8 * D ^ s i := by simp_all rel [dist_bpt_c_i_le] _ β€ 12 * D ^ s i := by linarith -- show the the triangle inequality implies distance between ipt and (π u)αΆ <= 12 * D ^ s i calc Metric.infEDist ipt (GridStructure.coeGrid (π u))αΆ _ β€ edist ipt bpt := Metric.infEDist_le_edist_of_mem <| Set.mem_compl h_bpt_not_in_I_u _ β€ ENNReal.ofReal (12 * D ^ s i) := by rw [edist_dist] exact ENNReal.ofReal_le_ofReal ipt_bpt_triangle_ineq _ β€ ENNReal.ofNNReal (12 * D ^ s i) := le_of_eq <| congr_arg (ENNReal.ofNNReal) <| NNReal.coe_injective <| by simpa using zpow_nonneg (by simp) (s i) _ β€ 12 * (D ^ (s i : β€) : ββ₯0β) := by push_cast rw [ENNReal.coe_zpow] Β· push_cast rfl Β· simp exact measure_mono (Set.iUnionβ_subset i_subset_X_u) _ β€ 2 * (12 * D ^ (- Z * (n + 1) - 1 : β€) : ββ₯0) ^ ΞΊ * volume (π u : Set X) := by have small_boundary_observation : β i β π (X := X) n u, volume X_u β€ 2 * (12 * D ^ (- Z * (n + 1) - 1 : β€) : ββ₯0) ^ ΞΊ * volume (π u : Set X) := by intro i β¨_, s_i_eq_stuff, _β© -- choose t for small boundary property set t := 12 * (D ^ (- Z * (n + 1) - 1 : β€) : ββ₯0) with ht -- algebra useful in multiple steps of the proof have D_pow_algebra : 12 * (D ^ (- Z * (n + 1) - 1 : β€) : ββ₯0) * (D ^ (π° u : β€) : ββ₯0) = 12 * (D ^ ( π° u - Z * (n + 1) - 1 : β€) : ββ₯0) := by have : 12 * (D ^ (- Z * (n + 1) - 1 : β€) : ββ₯0) * (D ^ (π° u : β€) : ββ₯0) = 12 * (D ^ (- Z * (n + 1) - 1 + π° u : β€) : ββ₯0) := by rw [zpow_addβ (show (D : ββ₯0) β 0 by norm_num) _ _] ring rw [this] rw [show - Z * (n + 1) - 1 + π° u = π° u - Z * (n + 1) - 1 by linarith] -- small boundary property assumption for π u have small_boundary_h : D ^ ((- S - s (π u)) : β€) β€ t := by have one_le_nnreal_D : 1 β€ (D : ββ₯0) := by have h1 : 1 β€ (D : β) := one_le_realD _ assumption_mod_cast have small_boundary_h_intermediate : D ^ (- S : β€) β€ t * D ^ (π° u: β€) := by rw [ht, D_pow_algebra, show π° u - Z * (n + 1) - 1 = s i by rw [β s_i_eq_stuff]; norm_cast; linarith] have bound_i_neg_S : -S β€ s i := (mem_Icc.mp (range_s_subset β¨i, rflβ©)).1 exact le_mul_of_one_le_of_le (by simp) <| zpow_le_zpow_rightβ (one_le_nnreal_D) bound_i_neg_S apply (mul_inv_le_iffβ <| by positivity).mpr at small_boundary_h_intermediate rw [β NNReal.rpow_neg_one] at small_boundary_h_intermediate have : (D ^ (π° u : β€) : ββ₯0) ^ (-1 : β) = (D ^ (π° u * (-1)) : ββ₯0) := by rw [show (D ^ (π° u : β€) : ββ₯0) = (D ^ (π° u : β) : ββ₯0) by norm_cast, β NNReal.rpow_mul] norm_cast rwa [this, mul_neg_one, β zpow_addβ (show (D : ββ₯0) β 0 by norm_num), show π° u = s (π u) from rfl, add_comm, neg_add_eq_sub] at small_boundary_h_intermediate have small_b := GridStructure.small_boundary small_boundary_h have X_u_in_terms_of_t : X_u = { x β GridStructure.coeGrid (π u) | Metric.infEDist x (GridStructure.coeGrid (π u))αΆ β€ ((t * D ^ (s (π u))):ββ₯0β)} := by rw [ht, show s (π u) = π° u from rfl, show (D ^ π° u : ββ₯0β) = (D ^ π° u : ββ₯0) by simp] rw_mod_cast [D_pow_algebra, h_X_u] have : 12 * (D ^ (π° u - (Z * (n + 1) : β€) - 1) : ββ₯0β) = ((12 * (D ^ (π° u - (Z * (n + 1)) - 1) : ββ₯0)) : ββ₯0β) := by simp rw_mod_cast [this] rw [show s (π u) = GridStructure.s (π u) from rfl] at X_u_in_terms_of_t rw [β X_u_in_terms_of_t, measureReal_def, measureReal_def] at small_b rw [β ENNReal.toReal_le_toReal] -- this requires showing everything is finite Β· rw [ENNReal.toReal_mul] have : (2 * (t ^ ΞΊ : ββ₯0β)).toReal = 2 * t ^ ΞΊ := by norm_cast rw [ENNReal.toReal_mul, β ENNReal.toReal_rpow] rfl rwa [this] Β· apply LT.lt.ne rw [h_X_u] apply lt_of_le_of_lt <| volume.mono inter_subset_left simp [volume_coeGrid_lt_top] Β· apply LT.lt.ne have t_k_lt_top : 2 * (t : ββ₯0β) ^ ΞΊ < β€ := by rw [ht] exact WithTop.mul_lt_top (by apply WithTop.coe_lt_top) <| (ENNReal.rpow_lt_top_of_nonneg ΞΊ_nonneg) (lt_top_iff_ne_top.mp (by apply WithTop.coe_lt_top)) exact WithTop.mul_lt_top t_k_lt_top volume_coeGrid_lt_top obtain β¨i, hiβ© := h_π_n_u_non_empty exact small_boundary_observation i hi _ β€ C5_2_9 X n * volume (π u : Set X) := by -- choosing the right k and D have coeff_lt : 2 * (12 * D ^ (-Z * (n + 1) - 1 : β)) ^ ΞΊ β€ (D ^ (1 - ΞΊ * Z * (n + 1)) : ββ₯0) := by have twelve_le_D : 12 β€ D := by apply le_trans (by norm_num) (hundred_lt_D X).le have two_time_twelve_over_D_to_the_k_le_D : 2 * (12 / D) ^ ΞΊ β€ (D : ββ₯0) := by have two_le_D : 2 β€ D := by linarith have : 2 * (12 / D) ^ ΞΊ β€ (2 : ββ₯0) := by apply (MulLECancellable.mul_le_iff_le_one_right ?_).mpr Β· apply NNReal.rpow_le_one Β· apply div_le_one_of_leβ <| by norm_cast simp only [zero_le] Β· apply ΞΊ_nonneg Β· simp [MulLECancellable] exact this.trans <| by norm_cast have two_times_twelve_k_D_minus_k_le_D : 2 * 12 ^ ΞΊ * D ^ (-ΞΊ) β€ (D : ββ₯0) := by rwa [β inv_mul_eq_div, NNReal.mul_rpow, NNReal.inv_rpow, β NNReal.rpow_neg, mul_comm _ (12 ^ ΞΊ), β mul_assoc] at two_time_twelve_over_D_to_the_k_le_D have mul_by_D_to_the_k_Z : 2 * 12 ^ ΞΊ * D ^ (-1*ΞΊ) * D ^ (-1* ΞΊ * Z * (n + 1)) β€ (D : ββ₯0) * D ^ (-ΞΊ * Z * (n + 1)) := by have : 2 * 12 ^ ΞΊ * D ^ (-ΞΊ) * D ^ (-ΞΊ * Z * (n + 1)) β€ (D : ββ₯0) * D ^ (-ΞΊ * Z * (n + 1)) := mul_le_mul_of_nonneg_right two_times_twelve_k_D_minus_k_le_D (by positivity) rwa [β neg_eq_neg_one_mul] have rearrange_exponents : 2 * (12 : ββ₯0) ^ ΞΊ * (D ^ (-(1 : β))) ^ ΞΊ * (D ^ (-(1 : β) * Z * (n + 1)) : ββ₯0) ^ ΞΊ β€ (D : ββ₯0) ^ (1 : β) * D ^ (-ΞΊ * Z * (n + 1)) := by have : (-1* ΞΊ * Z * (n + 1) : β) = (-1 * Z * (n + 1)) * ΞΊ := by ring rw [this, NNReal.rpow_mul, NNReal.rpow_mul] at mul_by_D_to_the_k_Z rwa [NNReal.rpow_one] rwa [mul_assoc, β NNReal.mul_rpow, mul_assoc, β NNReal.mul_rpow, β NNReal.rpow_add (by positivity), β NNReal.rpow_add (by positivity), add_comm, β neg_eq_neg_one_mul, β Ring.sub_eq_add_neg, show 1 + -ΞΊ * Z * (n + 1) = 1 - ΞΊ * Z * (n + 1) by ring] at rearrange_exponents rw [C5_2_9] apply ENNReal.coe_le_coe.mpr at coeff_lt norm_cast have : 12 * (D ^ (-Z * (n + 1) - 1: β€ ) : ββ₯0) β 0 := by simp only [defaultD, Nat.cast_pow, Nat.cast_ofNat, defaultZ, neg_mul, ne_eq, mul_eq_zero, OfNat.ofNat_ne_zero, false_or] positivity rw [β ENNReal.coe_rpow_of_ne_zero (by exact this)] exact_mod_cast mul_le_mul_left coeff_lt (volume (π u : Set X)) Β· have : volume (β i β π (X := X) n u, (i : Set X)) = 0 := by have h1 : volume (β i β π (X := X) n u, (i : Set X)) β€ β' i : π (X := X) n u, volume (i : Set X) := measure_biUnion_le _ (π n u).to_countable _ have h2 : β' i : π (X := X) n u, volume (i : Set X) = 0 := by have : IsEmpty (π (X := X) n u) := by rw [Set.isEmpty_coe_sort] exact Set.not_nonempty_iff_eq_empty.mp h_π_n_u_non_empty exact tsum_empty exact (le_of_le_of_eq h1 h2).antisymm (by simp) simp only [this, zero_le]