measure_theory.covering.besicovitch
⟷
Mathlib.MeasureTheory.Covering.Besicovitch
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -647,7 +647,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
simp only [Finset.card_fin, Finset.sum_const, nsmul_eq_mul]
rw [ENNReal.mul_div_cancel']
· simp only [Npos, Ne.def, Nat.cast_eq_zero, not_false_iff]
- · exact ENNReal.nat_ne_top _
+ · exact ENNReal.natCast_ne_top _
_ ≤ ∑ i, μ (s ∩ v i) := by conv_lhs => rw [A]; apply measure_Union_fintype_le
-- choose an index `i` of a subfamily covering at least a proportion `1/N` of `s`.
obtain ⟨i, -, hi⟩ : ∃ (i : Fin N) (hi : i ∈ Finset.univ), μ s / N ≤ μ (s ∩ v i) :=
@@ -659,7 +659,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
apply (ENNReal.mul_lt_mul_left hμs.ne' (measure_lt_top μ s).Ne).2
rw [ENNReal.inv_lt_inv]
conv_lhs => rw [← add_zero (N : ℝ≥0∞)]
- exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) zero_lt_one
+ exact ENNReal.add_lt_add_left (ENNReal.natCast_ne_top N) zero_lt_one
have B : μ (o ∩ v i) = ∑' x : u i, μ (o ∩ closed_ball x (r x)) :=
by
have : o ∩ v i = ⋃ (x : s) (hx : x ∈ u i), o ∩ closed_ball x (r x) := by simp only [inter_Union]
@@ -868,9 +868,9 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
apply ENNReal.tendsto_pow_atTop_nhds_zero_of_lt_one
rw [ENNReal.div_lt_iff, one_mul]
· conv_lhs => rw [← add_zero (N : ℝ≥0∞)]
- exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) zero_lt_one
+ exact ENNReal.add_lt_add_left (ENNReal.natCast_ne_top N) zero_lt_one
· simp only [true_or_iff, add_eq_zero_iff, Ne.def, not_false_iff, one_ne_zero, and_false_iff]
- · simp only [ENNReal.nat_ne_top, Ne.def, not_false_iff, or_true_iff]
+ · simp only [ENNReal.natCast_ne_top, Ne.def, not_false_iff, or_true_iff]
rw [MulZeroClass.zero_mul] at C
apply le_bot_iff.1
exact le_of_tendsto_of_tendsto' tendsto_const_nhds C fun n => (A n).trans (B n)
@@ -1032,9 +1032,9 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
obtain ⟨v, s'v, v_open, μv⟩ : ∃ (v : _) (_ : v ⊇ s'), IsOpen v ∧ μ v ≤ μ s' + ε / 2 / N :=
Set.exists_isOpen_le_add _ _
(by
- simp only [hε, ENNReal.nat_ne_top, WithTop.mul_eq_top_iff, Ne.def, ENNReal.div_eq_zero_iff,
- ENNReal.one_ne_top, not_false_iff, and_false_iff, false_and_iff, or_self_iff,
- ENNReal.bit0_eq_top_iff])
+ simp only [hε, ENNReal.natCast_ne_top, WithTop.mul_eq_top_iff, Ne.def,
+ ENNReal.div_eq_zero_iff, ENNReal.one_ne_top, not_false_iff, and_false_iff, false_and_iff,
+ or_self_iff, ENNReal.bit0_eq_top_iff])
have : ∀ x ∈ s', ∃ r1 ∈ f x ∩ Ioo (0 : ℝ) 1, closed_ball x r1 ⊆ v :=
by
intro x hx
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -860,7 +860,8 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
μ (s \ ⋃ (p : α × ℝ) (hp : p ∈ u n.succ), closed_ball p.fst p.snd) ≤
N / (N + 1) * μ (s \ ⋃ (p : α × ℝ) (hp : p ∈ u n), closed_ball p.fst p.snd) :=
by rw [u_succ]; exact (hF (u n) (Pu n)).2.2
- _ ≤ (N / (N + 1)) ^ n.succ * μ s := by rw [pow_succ, mul_assoc]; exact mul_le_mul_left' IH _
+ _ ≤ (N / (N + 1)) ^ n.succ * μ s := by rw [pow_succ', mul_assoc];
+ exact mul_le_mul_left' IH _
have C : tendsto (fun n : ℕ => ((N : ℝ≥0∞) / (N + 1)) ^ n * μ s) at_top (𝓝 (0 * μ s)) :=
by
apply ENNReal.Tendsto.mul_const _ (Or.inr (measure_lt_top μ s).Ne)
@@ -985,8 +986,8 @@ theorem exists_disjoint_closedBall_covering_ae (μ : Measure α) [SigmaFinite μ
#align besicovitch.exists_disjoint_closed_ball_covering_ae Besicovitch.exists_disjoint_closedBall_covering_ae
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (U «expr ⊇ » s) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (v «expr ⊇ » s') -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (U «expr ⊇ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (v «expr ⊇ » s') -/
#print Besicovitch.exists_closedBall_covering_tsum_measure_le /-
/-- In a space with the Besicovitch property, any set `s` can be covered with balls whose measures
add up to at most `μ s + ε`, for any positive `ε`. This works even if one restricts the set of
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -156,8 +156,8 @@ instance {α : Type _} {τ : ℝ} [Inhabited α] [MetricSpace α] :
R := fun i => 1
rpos := fun i => zero_lt_one
h := fun i j hij => (hij (Subsingleton.elim i j)).elim
- hlast := fun i hi => by rw [Subsingleton.elim i (last 0)] at hi ; exact (lt_irrefl _ hi).elim
- inter := fun i hi => by rw [Subsingleton.elim i (last 0)] at hi ;
+ hlast := fun i hi => by rw [Subsingleton.elim i (last 0)] at hi; exact (lt_irrefl _ hi).elim
+ inter := fun i hi => by rw [Subsingleton.elim i (last 0)] at hi;
exact (lt_irrefl _ hi).elim }⟩
namespace Besicovitch
@@ -316,7 +316,7 @@ theorem lastStep_nonempty : {i | ¬∃ b : β, p.c b ∉ p.iUnionUpTo i ∧ p.R
· exact (this hxy.symm (le_of_not_le x_le_y)).symm
rcases eq_or_lt_of_le x_le_y with (rfl | H); · rfl
simp only [nonempty_def, not_exists, exists_prop, not_and, not_lt, not_le, mem_set_of_eq,
- Classical.not_forall] at h
+ Classical.not_forall] at h
specialize h y
have A : p.c (p.index y) ∉ p.Union_up_to y :=
by
@@ -326,9 +326,9 @@ theorem lastStep_nonempty : {i | ¬∃ b : β, p.c b ∉ p.iUnionUpTo i ∧ p.R
rw [this]
exact (Classical.epsilon_spec h).1
simp only [Union_up_to, not_exists, exists_prop, mem_Union, mem_closed_ball, not_and, not_le,
- Subtype.exists, Subtype.coe_mk] at A
+ Subtype.exists, Subtype.coe_mk] at A
specialize A x H
- simp [hxy] at A
+ simp [hxy] at A
exact (lt_irrefl _ ((p.rpos (p.index y)).trans_le A)).elim
#align besicovitch.tau_package.last_step_nonempty Besicovitch.TauPackage.lastStep_nonempty
-/
@@ -359,7 +359,7 @@ theorem mem_iUnionUpTo_lastStep (x : β) : p.c x ∈ p.iUnionUpTo p.lastStep :=
exact ⟨⟨_, h⟩, mem_univ _⟩
rcases A y with (Hy | Hy)
· exact hy1 Hy
- · rw [← div_eq_inv_mul] at hy2
+ · rw [← div_eq_inv_mul] at hy2
have := (div_le_iff' (_root_.zero_lt_one.trans p.one_lt_tau)).1 hy2.le
exact lt_irrefl _ (Hy.trans_le this)
#align besicovitch.tau_package.mem_Union_up_to_last_step Besicovitch.TauPackage.mem_iUnionUpTo_lastStep
@@ -406,11 +406,11 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
k = p.color j :=
by
intro k hk
- rw [← Inf_eq_N] at hk
+ rw [← Inf_eq_N] at hk
have : k ∈ A := by
simpa only [true_and_iff, mem_univ, Classical.not_not, mem_diff] using
Nat.not_mem_of_lt_sInf hk
- simp at this
+ simp at this
simpa only [exists_prop, mem_Union, mem_singleton_iff, mem_closed_ball, Subtype.exists,
Subtype.coe_mk]
choose! g hg using this
@@ -456,7 +456,7 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
constructor
· have := (fGn b hb).1
simp only [Union_up_to, not_exists, exists_prop, mem_Union, mem_closed_ball, not_and, not_le,
- Subtype.exists, Subtype.coe_mk] at this
+ Subtype.exists, Subtype.coe_mk] at this
simpa only [dist_comm, mem_ball, not_lt] using this (G a) G_lt
· apply le_trans _ (fGn a ha).2
have B : p.c (p.index (G b)) ∉ p.Union_up_to (G a) := by intro H;
@@ -464,7 +464,7 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
let b' : { t // p.c t ∉ p.Union_up_to (G a) } := ⟨p.index (G b), B⟩
apply @le_ciSup _ _ _ (fun t : { t // p.c t ∉ p.Union_up_to (G a) } => p.r t) _ b'
refine' ⟨p.r_bound, fun t ht => _⟩
- simp only [exists_prop, mem_range, Subtype.exists, Subtype.coe_mk] at ht
+ simp only [exists_prop, mem_range, Subtype.exists, Subtype.coe_mk] at ht
rcases ht with ⟨u, hu⟩
rw [← hu.2]
exact p.r_le _
@@ -480,7 +480,7 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
have G_lt : G a < G b := by
rcases G_le.lt_or_eq with (H | H); · exact H
have A : (a : ℕ) ≠ b := fin.coe_injective.ne a_ne_b
- rw [← color_G a (Nat.lt_succ_iff.1 a.2), ← color_G b (Nat.lt_succ_iff.1 b.2), H] at A
+ rw [← color_G a (Nat.lt_succ_iff.1 a.2), ← color_G b (Nat.lt_succ_iff.1 b.2), H] at A
exact (A rfl).elim
exact Or.inl (Gab a b G_lt)
hlast := by
@@ -555,7 +555,7 @@ theorem exist_disjoint_covering_families {N : ℕ} {τ : ℝ} (hτ : 1 < τ)
intro k hk H
exact (p.color_lt (hk.trans jy_lt) hN).ne'
simp only [not_exists, true_and_iff, exists_prop, mem_Union, mem_singleton_iff, not_and,
- mem_univ, mem_diff, Subtype.exists, Subtype.coe_mk] at this
+ mem_univ, mem_diff, Subtype.exists, Subtype.coe_mk] at this
specialize this jx jxy
contrapose! this
simpa only [jxi, jyi, and_true_iff, eq_self_iff_true, ← not_disjoint_iff_nonempty_inter]
@@ -602,7 +602,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
MulZeroClass.mul_zero]
· simp only [Finset.coe_empty, pairwise_disjoint_empty]
cases isEmpty_or_nonempty α
- · simp only [eq_empty_of_is_empty s, measure_empty] at hμs
+ · simp only [eq_empty_of_is_empty s, measure_empty] at hμs
exact (lt_irrefl _ hμs).elim
have Npos : N ≠ 0 := by
rintro rfl
@@ -715,7 +715,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
simpa only [mem_image, Finset.mem_coe, coe_coe, Finset.coe_image] using hk
obtain ⟨l', l'w, rfl⟩ : ∃ l' : u i, l' ∈ w ∧ ↑↑l' = l := by
simpa only [mem_image, Finset.mem_coe, coe_coe, Finset.coe_image] using hl
- have k'nel' : (k' : s) ≠ l' := by intro h; rw [h] at hkl ; exact hkl rfl
+ have k'nel' : (k' : s) ≠ l' := by intro h; rw [h] at hkl; exact hkl rfl
exact hu i k'.2 l'.2 k'nel'
#align besicovitch.exist_finset_disjoint_balls_large_measure Besicovitch.exist_finset_disjoint_balls_large_measure
-/
@@ -799,7 +799,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
rcases(mem_image _ _ _).1 hp with ⟨p', p'v, rfl⟩
rcases(mem_image _ _ _).1 hq with ⟨q', q'v, rfl⟩
refine' hv p'v q'v fun hp'q' => _
- rw [hp'q'] at hpq
+ rw [hp'q'] at hpq
exact hpq rfl
· intro p hp q hq hpq
rcases(mem_image _ _ _).1 hq with ⟨q', q'v, rfl⟩
@@ -870,7 +870,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) zero_lt_one
· simp only [true_or_iff, add_eq_zero_iff, Ne.def, not_false_iff, one_ne_zero, and_false_iff]
· simp only [ENNReal.nat_ne_top, Ne.def, not_false_iff, or_true_iff]
- rw [MulZeroClass.zero_mul] at C
+ rw [MulZeroClass.zero_mul] at C
apply le_bot_iff.1
exact le_of_tendsto_of_tendsto' tendsto_const_nhds C fun n => (A n).trans (B n)
· refine' (pairwise_disjoint_Union _).2 fun n => (Pu n).1
@@ -981,7 +981,7 @@ theorem exists_disjoint_closedBall_covering_ae (μ : Measure α) [SigmaFinite μ
· have A : inj_on (fun x : α => (x, r x)) t := by
simp (config := { contextual := true }) only [inj_on, Prod.mk.inj_iff, imp_true_iff,
eq_self_iff_true]
- rwa [← im_t, A.pairwise_disjoint_image] at v_disj
+ rwa [← im_t, A.pairwise_disjoint_image] at v_disj
#align besicovitch.exists_disjoint_closed_ball_covering_ae Besicovitch.exists_disjoint_closedBall_covering_ae
-/
@@ -1086,7 +1086,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
· rw [r_t0 x hx]
exact (hr0 _ hx).1
· have h'x : x ∈ s' := by
- simp only [mem_Union, mem_image] at hx
+ simp only [mem_Union, mem_image] at hx
rcases hx with ⟨i, y, ySi, rfl⟩
exact y.2
simp only [r, if_pos h'x, (hr1 x h'x).1.1]
@@ -1149,7 +1149,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
simp only [SetCoe.forall, Subtype.coe_mk, Union_subset_iff]
intro x xs' xSi
exact (hr1 x xs').2
- _ ≤ ε / 2 / N := by have : μ s' = 0 := μt0; rwa [this, zero_add] at μv
+ _ ≤ ε / 2 / N := by have : μ s' = 0 := μt0; rwa [this, zero_add] at μv
-- add up all these to prove the desired estimate
calc
∑' x : t0 ∪ ⋃ i : Fin N, (coe : s' → α) '' S i, μ (closed_ball x (r x)) ≤
@@ -1206,7 +1206,7 @@ protected def vitaliFamily (μ : Measure α) [SigmaFinite μ] : VitaliFamily μ
· exact ⟨r, ⟨rpos, tf⟩, ⟨rpos, H.trans_lt (half_lt_self δpos)⟩⟩
· have : closed_ball x r = closed_ball x (δ / 2) :=
subset.antisymm ht (closed_ball_subset_closed_ball H)
- rw [this] at tf
+ rw [this] at tf
refine' ⟨δ / 2, ⟨half_pos δpos, tf⟩, ⟨half_pos δpos, half_lt_self δpos⟩⟩
obtain ⟨t, r, t_count, ts, tg, μt, tdisj⟩ :
∃ (t : Set α) (r : α → ℝ),
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -139,7 +139,7 @@ structure Besicovitch.SatelliteConfig (α : Type _) [MetricSpace α] (N : ℕ) (
-/
#print HasBesicovitchCovering /-
-/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`no_satelliteConfig] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:400:30: infer kinds are unsupported in Lean 4: #[`no_satelliteConfig] [] -/
/-- A metric space has the Besicovitch covering property if there exist `N` and `τ > 1` such that
there are no satellite configuration of parameter `τ` with `N+1` points. This is the condition that
guarantees that the measurable Besicovitch covering theorem holds. It is satified by
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -864,7 +864,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
have C : tendsto (fun n : ℕ => ((N : ℝ≥0∞) / (N + 1)) ^ n * μ s) at_top (𝓝 (0 * μ s)) :=
by
apply ENNReal.Tendsto.mul_const _ (Or.inr (measure_lt_top μ s).Ne)
- apply ENNReal.tendsto_pow_atTop_nhds_0_of_lt_1
+ apply ENNReal.tendsto_pow_atTop_nhds_zero_of_lt_one
rw [ENNReal.div_lt_iff, one_mul]
· conv_lhs => rw [← add_zero (N : ℝ≥0∞)]
exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) zero_lt_one
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -139,7 +139,7 @@ structure Besicovitch.SatelliteConfig (α : Type _) [MetricSpace α] (N : ℕ) (
-/
#print HasBesicovitchCovering /-
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`no_satelliteConfig] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:404:30: infer kinds are unsupported in Lean 4: #[`no_satelliteConfig] [] -/
/-- A metric space has the Besicovitch covering property if there exist `N` and `τ > 1` such that
there are no satellite configuration of parameter `τ` with `N+1` points. This is the condition that
guarantees that the measurable Besicovitch covering theorem holds. It is satified by
mathlib commit https://github.com/leanprover-community/mathlib/commit/b1abe23ae96fef89ad30d9f4362c307f72a55010
@@ -316,7 +316,7 @@ theorem lastStep_nonempty : {i | ¬∃ b : β, p.c b ∉ p.iUnionUpTo i ∧ p.R
· exact (this hxy.symm (le_of_not_le x_le_y)).symm
rcases eq_or_lt_of_le x_le_y with (rfl | H); · rfl
simp only [nonempty_def, not_exists, exists_prop, not_and, not_lt, not_le, mem_set_of_eq,
- not_forall] at h
+ Classical.not_forall] at h
specialize h y
have A : p.c (p.index y) ∉ p.Union_up_to y :=
by
@@ -440,8 +440,8 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
by rw [index]; rfl
rw [this]
have : ∃ t, p.c t ∉ p.Union_up_to (G n) ∧ p.R (G n) ≤ p.τ * p.r t := by
- simpa only [not_exists, exists_prop, not_and, not_lt, not_le, mem_set_of_eq, not_forall] using
- not_mem_of_lt_csInf (G_lt_last n hn) (OrderBot.bddBelow _)
+ simpa only [not_exists, exists_prop, not_and, not_lt, not_le, mem_set_of_eq,
+ Classical.not_forall] using not_mem_of_lt_csInf (G_lt_last n hn) (OrderBot.bddBelow _)
exact Classical.epsilon_spec this
-- the balls with indices `G k` satisfy the characteristic property of satellite configurations.
have Gab :
@@ -1067,7 +1067,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
have : ¬x ∈ s' :=
by
simp only [not_exists, exists_prop, mem_Union, mem_closed_ball, not_and, not_lt, not_le,
- mem_diff, not_forall]
+ mem_diff, Classical.not_forall]
intro h'x
refine' ⟨x, hx, _⟩
rw [dist_self]
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,12 +3,12 @@ Copyright (c) 2021 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-/
-import Mathbin.MeasureTheory.Covering.Differentiation
-import Mathbin.MeasureTheory.Covering.VitaliFamily
-import Mathbin.MeasureTheory.Integral.Lebesgue
-import Mathbin.MeasureTheory.Measure.Regular
-import Mathbin.SetTheory.Ordinal.Arithmetic
-import Mathbin.Topology.MetricSpace.Basic
+import MeasureTheory.Covering.Differentiation
+import MeasureTheory.Covering.VitaliFamily
+import MeasureTheory.Integral.Lebesgue
+import MeasureTheory.Measure.Regular
+import SetTheory.Ordinal.Arithmetic
+import Topology.MetricSpace.Basic
#align_import measure_theory.covering.besicovitch from "leanprover-community/mathlib"@"6b31d1eebd64eab86d5bd9936bfaada6ca8b5842"
@@ -139,7 +139,7 @@ structure Besicovitch.SatelliteConfig (α : Type _) [MetricSpace α] (N : ℕ) (
-/
#print HasBesicovitchCovering /-
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`no_satelliteConfig] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`no_satelliteConfig] [] -/
/-- A metric space has the Besicovitch covering property if there exist `N` and `τ > 1` such that
there are no satellite configuration of parameter `τ` with `N+1` points. This is the condition that
guarantees that the measurable Besicovitch covering theorem holds. It is satified by
@@ -985,8 +985,8 @@ theorem exists_disjoint_closedBall_covering_ae (μ : Measure α) [SigmaFinite μ
#align besicovitch.exists_disjoint_closed_ball_covering_ae Besicovitch.exists_disjoint_closedBall_covering_ae
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (U «expr ⊇ » s) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (v «expr ⊇ » s') -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (U «expr ⊇ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (v «expr ⊇ » s') -/
#print Besicovitch.exists_closedBall_covering_tsum_measure_le /-
/-- In a space with the Besicovitch property, any set `s` can be covered with balls whose measures
add up to at most `μ s + ε`, for any positive `ε`. This works even if one restricts the set of
mathlib commit https://github.com/leanprover-community/mathlib/commit/442a83d738cb208d3600056c489be16900ba701d
@@ -766,7 +766,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
intro t ht
set B := ⋃ (p : α × ℝ) (hp : p ∈ t), closed_ball p.1 p.2 with hB
have B_closed : IsClosed B :=
- isClosed_biUnion (Finset.finite_toSet _) fun i hi => is_closed_ball
+ Set.Finite.isClosed_biUnion (Finset.finite_toSet _) fun i hi => is_closed_ball
set s' := s \ B with hs'
have : ∀ x ∈ s', ∃ r ∈ f x ∩ Ioo 0 1, Disjoint B (closed_ball x r) :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2021 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-
-! This file was ported from Lean 3 source module measure_theory.covering.besicovitch
-! leanprover-community/mathlib commit 6b31d1eebd64eab86d5bd9936bfaada6ca8b5842
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.MeasureTheory.Covering.Differentiation
import Mathbin.MeasureTheory.Covering.VitaliFamily
@@ -15,6 +10,8 @@ import Mathbin.MeasureTheory.Measure.Regular
import Mathbin.SetTheory.Ordinal.Arithmetic
import Mathbin.Topology.MetricSpace.Basic
+#align_import measure_theory.covering.besicovitch from "leanprover-community/mathlib"@"6b31d1eebd64eab86d5bd9936bfaada6ca8b5842"
+
/-!
# Besicovitch covering theorems
@@ -988,8 +985,8 @@ theorem exists_disjoint_closedBall_covering_ae (μ : Measure α) [SigmaFinite μ
#align besicovitch.exists_disjoint_closed_ball_covering_ae Besicovitch.exists_disjoint_closedBall_covering_ae
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (U «expr ⊇ » s) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (v «expr ⊇ » s') -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (U «expr ⊇ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (v «expr ⊇ » s') -/
#print Besicovitch.exists_closedBall_covering_tsum_measure_le /-
/-- In a space with the Besicovitch property, any set `s` can be covered with balls whose measures
add up to at most `μ s + ε`, for any positive `ε`. This works even if one restricts the set of
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -142,7 +142,7 @@ structure Besicovitch.SatelliteConfig (α : Type _) [MetricSpace α] (N : ℕ) (
-/
#print HasBesicovitchCovering /-
-/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`no_satelliteConfig] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`no_satelliteConfig] [] -/
/-- A metric space has the Besicovitch covering property if there exist `N` and `τ > 1` such that
there are no satellite configuration of parameter `τ` with `N+1` points. This is the condition that
guarantees that the measurable Besicovitch covering theorem holds. It is satified by
@@ -169,6 +169,7 @@ namespace SatelliteConfig
variable {α : Type _} [MetricSpace α] {N : ℕ} {τ : ℝ} (a : SatelliteConfig α N τ)
+#print Besicovitch.SatelliteConfig.inter' /-
theorem inter' (i : Fin N.succ) : dist (a.c i) (a.c (last N)) ≤ a.R i + a.R (last N) :=
by
rcases lt_or_le i (last N) with (H | H)
@@ -177,7 +178,9 @@ theorem inter' (i : Fin N.succ) : dist (a.c i) (a.c (last N)) ≤ a.R i + a.R (l
have := (a.rpos (last N)).le
simp only [I, add_nonneg this this, dist_self]
#align besicovitch.satellite_config.inter' Besicovitch.SatelliteConfig.inter'
+-/
+#print Besicovitch.SatelliteConfig.hlast' /-
theorem hlast' (i : Fin N.succ) (h : 1 ≤ τ) : a.R (last N) ≤ τ * a.R i :=
by
rcases lt_or_le i (last N) with (H | H)
@@ -186,6 +189,7 @@ theorem hlast' (i : Fin N.succ) (h : 1 ≤ τ) : a.R (last N) ≤ τ * a.R i :=
rw [this]
exact le_mul_of_one_le_left (a.rpos _).le h
#align besicovitch.satellite_config.hlast' Besicovitch.SatelliteConfig.hlast'
+-/
end SatelliteConfig
@@ -240,8 +244,6 @@ namespace TauPackage
variable [Nonempty β] (p : TauPackage β α)
-include p
-
#print Besicovitch.TauPackage.index /-
/-- Choose inductively large balls with centers that are not contained in the union of already
chosen balls. This is a transfinite induction. -/
@@ -268,12 +270,14 @@ def iUnionUpTo (i : Ordinal.{u}) : Set α :=
#align besicovitch.tau_package.Union_up_to Besicovitch.TauPackage.iUnionUpTo
-/
+#print Besicovitch.TauPackage.monotone_iUnionUpTo /-
theorem monotone_iUnionUpTo : Monotone p.iUnionUpTo :=
by
intro i j hij
simp only [Union_up_to]
exact Union_mono' fun r => ⟨⟨r, r.2.trans_le hij⟩, subset.rfl⟩
#align besicovitch.tau_package.monotone_Union_up_to Besicovitch.TauPackage.monotone_iUnionUpTo
+-/
#print Besicovitch.TauPackage.R /-
/-- Supremum of the radii of balls whose centers are not yet covered at step `i`. -/
@@ -305,6 +309,7 @@ def lastStep : Ordinal.{u} :=
#align besicovitch.tau_package.last_step Besicovitch.TauPackage.lastStep
-/
+#print Besicovitch.TauPackage.lastStep_nonempty /-
theorem lastStep_nonempty : {i | ¬∃ b : β, p.c b ∉ p.iUnionUpTo i ∧ p.R i ≤ p.τ * p.R b}.Nonempty :=
by
by_contra
@@ -329,7 +334,9 @@ theorem lastStep_nonempty : {i | ¬∃ b : β, p.c b ∉ p.iUnionUpTo i ∧ p.R
simp [hxy] at A
exact (lt_irrefl _ ((p.rpos (p.index y)).trans_le A)).elim
#align besicovitch.tau_package.last_step_nonempty Besicovitch.TauPackage.lastStep_nonempty
+-/
+#print Besicovitch.TauPackage.mem_iUnionUpTo_lastStep /-
/-- Every point is covered by chosen balls, before `p.last_step`. -/
theorem mem_iUnionUpTo_lastStep (x : β) : p.c x ∈ p.iUnionUpTo p.lastStep :=
by
@@ -359,7 +366,9 @@ theorem mem_iUnionUpTo_lastStep (x : β) : p.c x ∈ p.iUnionUpTo p.lastStep :=
have := (div_le_iff' (_root_.zero_lt_one.trans p.one_lt_tau)).1 hy2.le
exact lt_irrefl _ (Hy.trans_le this)
#align besicovitch.tau_package.mem_Union_up_to_last_step Besicovitch.TauPackage.mem_iUnionUpTo_lastStep
+-/
+#print Besicovitch.TauPackage.color_lt /-
/-- If there are no configurations of satellites with `N+1` points, one never uses more than `N`
distinct families in the Besicovitch inductive construction. -/
theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
@@ -491,11 +500,13 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
-- this is a contradiction
exact (hN.false : _) sc
#align besicovitch.tau_package.color_lt Besicovitch.TauPackage.color_lt
+-/
end TauPackage
open TauPackage
+#print Besicovitch.exist_disjoint_covering_families /-
/-- The topological Besicovitch covering theorem: there exist finitely many families of disjoint
balls covering all the centers in a package. More specifically, one can use `N` families if there
are no satellite configurations with `N+1` points. -/
@@ -561,6 +572,7 @@ theorem exist_disjoint_covering_families {N : ℕ} {τ : ℝ} (hτ : 1 < τ)
Union_exists, exists_and_left]
exact ⟨⟨p.color a, p.color_lt ha.1 hN⟩, a, rfl, ha⟩
#align besicovitch.exist_disjoint_covering_families Besicovitch.exist_disjoint_covering_families
+-/
/-!
### The measurable Besicovitch covering theorem
@@ -571,6 +583,7 @@ open scoped NNReal
variable [SecondCountableTopology α] [MeasurableSpace α] [OpensMeasurableSpace α]
+#print Besicovitch.exist_finset_disjoint_balls_large_measure /-
/-- Consider, for each `x` in a set `s`, a radius `r x ∈ (0, 1]`. Then one can find finitely
many disjoint balls of the form `closed_ball x (r x)` covering a proportion `1/(N+1)` of `s`, if
there are no satellite configurations with `N+1` points.
@@ -708,9 +721,11 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
have k'nel' : (k' : s) ≠ l' := by intro h; rw [h] at hkl ; exact hkl rfl
exact hu i k'.2 l'.2 k'nel'
#align besicovitch.exist_finset_disjoint_balls_large_measure Besicovitch.exist_finset_disjoint_balls_large_measure
+-/
variable [HasBesicovitchCovering α]
+#print Besicovitch.exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux /-
/-- The measurable Besicovitch covering theorem. Assume that, for any `x` in a set `s`,
one is given a set of admissible closed balls centered at `x`, with arbitrarily small radii.
Then there exists a disjoint covering of almost all `s` by admissible closed balls centered at some
@@ -866,7 +881,9 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
rw [u_succ]
exact (hF (u n) (Pu n)).1
#align besicovitch.exists_disjoint_closed_ball_covering_ae_of_finite_measure_aux Besicovitch.exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux
+-/
+#print Besicovitch.exists_disjoint_closedBall_covering_ae_aux /-
/-- The measurable Besicovitch covering theorem. Assume that, for any `x` in a set `s`,
one is given a set of admissible closed balls centered at `x`, with arbitrarily small radii.
Then there exists a disjoint covering of almost all `s` by admissible closed balls centered at some
@@ -893,7 +910,9 @@ theorem exists_disjoint_closedBall_covering_ae_aux (μ : Measure α) [SigmaFinit
⟨t, t_count, ts, tr, tν, tdisj⟩
exact ⟨t, t_count, ts, tr, hμν tν, tdisj⟩
#align besicovitch.exists_disjoint_closed_ball_covering_ae_aux Besicovitch.exists_disjoint_closedBall_covering_ae_aux
+-/
+#print Besicovitch.exists_disjoint_closedBall_covering_ae /-
/-- The measurable Besicovitch covering theorem. Assume that, for any `x` in a set `s`,
one is given a set of admissible closed balls centered at `x`, with arbitrarily small radii.
Then there exists a disjoint covering of almost all `s` by admissible closed balls centered at some
@@ -967,9 +986,11 @@ theorem exists_disjoint_closedBall_covering_ae (μ : Measure α) [SigmaFinite μ
eq_self_iff_true]
rwa [← im_t, A.pairwise_disjoint_image] at v_disj
#align besicovitch.exists_disjoint_closed_ball_covering_ae Besicovitch.exists_disjoint_closedBall_covering_ae
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (U «expr ⊇ » s) -/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (v «expr ⊇ » s') -/
+#print Besicovitch.exists_closedBall_covering_tsum_measure_le /-
/-- In a space with the Besicovitch property, any set `s` can be covered with balls whose measures
add up to at most `μ s + ε`, for any positive `ε`. This works even if one restricts the set of
allowed radii around a point `x` to a set `f x` which accumulates at `0`. -/
@@ -1153,6 +1174,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
simp only [Finset.card_fin, Finset.sum_const, nsmul_eq_mul, ENNReal.mul_div_le]
_ = μ s + ε := by rw [add_assoc, ENNReal.add_halves]
#align besicovitch.exists_closed_ball_covering_tsum_measure_le Besicovitch.exists_closedBall_covering_tsum_measure_le
+-/
/-! ### Consequences on differentiation of measures -/
@@ -1207,6 +1229,7 @@ protected def vitaliFamily (μ : Measure α) [SigmaFinite μ] : VitaliFamily μ
#align besicovitch.vitali_family Besicovitch.vitaliFamily
-/
+#print Besicovitch.tendsto_filterAt /-
/-- The main feature of the Besicovitch Vitali family is that its filter at a point `x` corresponds
to convergence along closed balls. We record one of the two implications here, which will enable us
to deduce specific statements on differentiation of measures in this context from the general
@@ -1226,10 +1249,12 @@ theorem tendsto_filterAt (μ : Measure α) [SigmaFinite μ] (x : α) :
· exact mem_image_of_mem _ hr.1
· exact closed_ball_subset_closed_ball hr.2
#align besicovitch.tendsto_filter_at Besicovitch.tendsto_filterAt
+-/
variable [MetricSpace β] [MeasurableSpace β] [BorelSpace β] [SecondCountableTopology β]
[HasBesicovitchCovering β]
+#print Besicovitch.ae_tendsto_rnDeriv /-
/-- In a space with the Besicovitch covering property, the ratio of the measure of balls converges
almost surely to to the Radon-Nikodym derivative. -/
theorem ae_tendsto_rnDeriv (ρ μ : Measure β) [IsLocallyFiniteMeasure μ] [IsLocallyFiniteMeasure ρ] :
@@ -1239,7 +1264,9 @@ theorem ae_tendsto_rnDeriv (ρ μ : Measure β) [IsLocallyFiniteMeasure μ] [IsL
filter_upwards [VitaliFamily.ae_tendsto_rnDeriv (Besicovitch.vitaliFamily μ) ρ] with x hx
exact hx.comp (tendsto_filter_at μ x)
#align besicovitch.ae_tendsto_rn_deriv Besicovitch.ae_tendsto_rnDeriv
+-/
+#print Besicovitch.ae_tendsto_measure_inter_div_of_measurableSet /-
/-- Given a measurable set `s`, then `μ (s ∩ closed_ball x r) / μ (closed_ball x r)` converges when
`r` tends to `0`, for almost every `x`. The limit is `1` for `x ∈ s` and `0` for `x ∉ s`.
This shows that almost every point of `s` is a Lebesgue density point for `s`.
@@ -1256,6 +1283,7 @@ theorem ae_tendsto_measure_inter_div_of_measurableSet (μ : Measure β) [IsLocal
intro x hx
exact hx.comp (tendsto_filter_at μ x)
#align besicovitch.ae_tendsto_measure_inter_div_of_measurable_set Besicovitch.ae_tendsto_measure_inter_div_of_measurableSet
+-/
#print Besicovitch.ae_tendsto_measure_inter_div /-
/-- Given an arbitrary set `s`, then `μ (s ∩ closed_ball x r) / μ (closed_ball x r)` converges
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3e83f0fa4391c8740f7d773a7a9b74e311ae2a3
@@ -630,9 +630,9 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
refine' mem_Union.2 ⟨i, ⟨hx, _⟩⟩
simp only [v, exists_prop, mem_Union, SetCoe.exists, exists_and_right, Subtype.coe_mk]
exact ⟨y, ⟨y.2, by simpa only [Subtype.coe_eta]⟩, ball_subset_closed_ball h'⟩
- have S : (∑ i : Fin N, μ s / N) ≤ ∑ i, μ (s ∩ v i) :=
+ have S : ∑ i : Fin N, μ s / N ≤ ∑ i, μ (s ∩ v i) :=
calc
- (∑ i : Fin N, μ s / N) = μ s :=
+ ∑ i : Fin N, μ s / N = μ s :=
by
simp only [Finset.card_fin, Finset.sum_const, nsmul_eq_mul]
rw [ENNReal.mul_div_cancel']
@@ -980,7 +980,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
t.Countable ∧
t ⊆ s ∧
(∀ x ∈ t, r x ∈ f x) ∧
- (s ⊆ ⋃ x ∈ t, closedBall x (r x)) ∧ (∑' x : t, μ (closedBall x (r x))) ≤ μ s + ε :=
+ (s ⊆ ⋃ x ∈ t, closedBall x (r x)) ∧ ∑' x : t, μ (closedBall x (r x)) ≤ μ s + ε :=
by
/- For the proof, first cover almost all `s` with disjoint balls thanks to the usual Besicovitch
theorem. Taking the balls included in a well-chosen open neighborhood `u` of `s`, one may
@@ -1092,9 +1092,9 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
rwa [r_t0 _ yt0]
-- the only nontrivial property is the measure control, which we check now
· -- the sets in the first step have measure at most `μ s + ε / 2`
- have A : (∑' x : t0, μ (closed_ball x (r x))) ≤ μ s + ε / 2 :=
+ have A : ∑' x : t0, μ (closed_ball x (r x)) ≤ μ s + ε / 2 :=
calc
- (∑' x : t0, μ (closed_ball x (r x))) = ∑' x : t0, μ (closed_ball x (r0 x)) := by congr 1;
+ ∑' x : t0, μ (closed_ball x (r x)) = ∑' x : t0, μ (closed_ball x (r0 x)) := by congr 1;
ext x; rw [r_t0 x x.2]
_ = μ (⋃ x : t0, closed_ball x (r0 x)) :=
by
@@ -1109,10 +1109,10 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
apply subset.trans (closed_ball_subset_ball (hr0 x hx).2.2) (hR x (t0s hx)).2
_ ≤ μ s + ε / 2 := μu
-- each subfamily in the second step has measure at most `ε / (2 N)`.
- have B : ∀ i : Fin N, (∑' x : (coe : s' → α) '' S i, μ (closed_ball x (r x))) ≤ ε / 2 / N :=
+ have B : ∀ i : Fin N, ∑' x : (coe : s' → α) '' S i, μ (closed_ball x (r x)) ≤ ε / 2 / N :=
fun i =>
calc
- (∑' x : (coe : s' → α) '' S i, μ (closed_ball x (r x))) =
+ ∑' x : (coe : s' → α) '' S i, μ (closed_ball x (r x)) =
∑' x : S i, μ (closed_ball x (r x)) :=
by
have : inj_on (coe : s' → α) (S i) := subtype.coe_injective.inj_on _
@@ -1134,12 +1134,12 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
_ ≤ ε / 2 / N := by have : μ s' = 0 := μt0; rwa [this, zero_add] at μv
-- add up all these to prove the desired estimate
calc
- (∑' x : t0 ∪ ⋃ i : Fin N, (coe : s' → α) '' S i, μ (closed_ball x (r x))) ≤
- (∑' x : t0, μ (closed_ball x (r x))) +
+ ∑' x : t0 ∪ ⋃ i : Fin N, (coe : s' → α) '' S i, μ (closed_ball x (r x)) ≤
+ ∑' x : t0, μ (closed_ball x (r x)) +
∑' x : ⋃ i : Fin N, (coe : s' → α) '' S i, μ (closed_ball x (r x)) :=
ENNReal.tsum_union_le (fun x => μ (closed_ball x (r x))) _ _
_ ≤
- (∑' x : t0, μ (closed_ball x (r x))) +
+ ∑' x : t0, μ (closed_ball x (r x)) +
∑ i : Fin N, ∑' x : (coe : s' → α) '' S i, μ (closed_ball x (r x)) :=
(add_le_add le_rfl (ENNReal.tsum_iUnion_le (fun x => μ (closed_ball x (r x))) _))
_ ≤ μ s + ε / 2 + ∑ i : Fin N, ε / 2 / N :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3e83f0fa4391c8740f7d773a7a9b74e311ae2a3
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module measure_theory.covering.besicovitch
-! leanprover-community/mathlib commit 5f6e827d81dfbeb6151d7016586ceeb0099b9655
+! leanprover-community/mathlib commit 6b31d1eebd64eab86d5bd9936bfaada6ca8b5842
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -18,6 +18,9 @@ import Mathbin.Topology.MetricSpace.Basic
/-!
# Besicovitch covering theorems
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
The topological Besicovitch covering theorem ensures that, in a nice metric space, there exists a
number `N` such that, from any family of balls with bounded radii, one can extract `N` families,
each made of disjoint balls, covering together all the centers of the initial family.
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -636,7 +636,6 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
· simp only [Npos, Ne.def, Nat.cast_eq_zero, not_false_iff]
· exact ENNReal.nat_ne_top _
_ ≤ ∑ i, μ (s ∩ v i) := by conv_lhs => rw [A]; apply measure_Union_fintype_le
-
-- choose an index `i` of a subfamily covering at least a proportion `1/N` of `s`.
obtain ⟨i, -, hi⟩ : ∃ (i : Fin N) (hi : i ∈ Finset.univ), μ s / N ≤ μ (s ∩ v i) :=
by
@@ -697,7 +696,6 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
exact this.mono fun k => inter_subset_right _ _
· intro b hb
apply omeas.inter measurableSet_closedBall
-
-- show that the balls are disjoint
· intro k hk l hl hkl
obtain ⟨k', k'w, rfl⟩ : ∃ k' : u i, k' ∈ w ∧ ↑↑k' = k := by
@@ -848,7 +846,6 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
N / (N + 1) * μ (s \ ⋃ (p : α × ℝ) (hp : p ∈ u n), closed_ball p.fst p.snd) :=
by rw [u_succ]; exact (hF (u n) (Pu n)).2.2
_ ≤ (N / (N + 1)) ^ n.succ * μ s := by rw [pow_succ, mul_assoc]; exact mul_le_mul_left' IH _
-
have C : tendsto (fun n : ℕ => ((N : ℝ≥0∞) / (N + 1)) ^ n * μ s) at_top (𝓝 (0 * μ s)) :=
by
apply ENNReal.Tendsto.mul_const _ (Or.inr (measure_lt_top μ s).Ne)
@@ -1108,7 +1105,6 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
intro x hx
apply subset.trans (closed_ball_subset_ball (hr0 x hx).2.2) (hR x (t0s hx)).2
_ ≤ μ s + ε / 2 := μu
-
-- each subfamily in the second step has measure at most `ε / (2 N)`.
have B : ∀ i : Fin N, (∑' x : (coe : s' → α) '' S i, μ (closed_ball x (r x))) ≤ ε / 2 / N :=
fun i =>
@@ -1133,7 +1129,6 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
intro x xs' xSi
exact (hr1 x xs').2
_ ≤ ε / 2 / N := by have : μ s' = 0 := μt0; rwa [this, zero_add] at μv
-
-- add up all these to prove the desired estimate
calc
(∑' x : t0 ∪ ⋃ i : Fin N, (coe : s' → α) '' S i, μ (closed_ball x (r x))) ≤
@@ -1154,7 +1149,6 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
refine' add_le_add le_rfl _
simp only [Finset.card_fin, Finset.sum_const, nsmul_eq_mul, ENNReal.mul_div_le]
_ = μ s + ε := by rw [add_assoc, ENNReal.add_halves]
-
#align besicovitch.exists_closed_ball_covering_tsum_measure_le Besicovitch.exists_closedBall_covering_tsum_measure_le
/-! ### Consequences on differentiation of measures -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -968,8 +968,8 @@ theorem exists_disjoint_closedBall_covering_ae (μ : Measure α) [SigmaFinite μ
rwa [← im_t, A.pairwise_disjoint_image] at v_disj
#align besicovitch.exists_disjoint_closed_ball_covering_ae Besicovitch.exists_disjoint_closedBall_covering_ae
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (U «expr ⊇ » s) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (v «expr ⊇ » s') -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (U «expr ⊇ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (v «expr ⊇ » s') -/
/-- In a space with the Besicovitch property, any set `s` can be covered with balls whose measures
add up to at most `μ s + ε`, for any positive `ε`. This works even if one restricts the set of
allowed radii around a point `x` to a set `f x` which accumulates at `0`. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/58a272265b5e05f258161260dd2c5d247213cbd3
@@ -113,6 +113,7 @@ open scoped Topology Classical BigOperators ENNReal MeasureTheory NNReal
-/
+#print Besicovitch.SatelliteConfig /-
/-- A satellite configuration is a configuration of `N+1` points that shows up in the inductive
construction for the Besicovitch covering theorem. It depends on some parameter `τ ≥ 1`.
@@ -135,7 +136,9 @@ structure Besicovitch.SatelliteConfig (α : Type _) [MetricSpace α] (N : ℕ) (
hlast : ∀ i < last N, r i ≤ dist (c i) (c (last N)) ∧ r (last N) ≤ τ * r i
inter : ∀ i < last N, dist (c i) (c (last N)) ≤ r i + r (last N)
#align besicovitch.satellite_config Besicovitch.SatelliteConfig
+-/
+#print HasBesicovitchCovering /-
/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`no_satelliteConfig] [] -/
/-- A metric space has the Besicovitch covering property if there exist `N` and `τ > 1` such that
there are no satellite configuration of parameter `τ` with `N+1` points. This is the condition that
@@ -144,6 +147,7 @@ finite-dimensional real vector spaces. -/
class HasBesicovitchCovering (α : Type _) [MetricSpace α] : Prop where
no_satelliteConfig : ∃ (N : ℕ) (τ : ℝ), 1 < τ ∧ IsEmpty (Besicovitch.SatelliteConfig α N τ)
#align has_besicovitch_covering HasBesicovitchCovering
+-/
/-- There is always a satellite configuration with a single point. -/
instance {α : Type _} {τ : ℝ} [Inhabited α] [MetricSpace α] :
@@ -185,28 +189,33 @@ end SatelliteConfig
/-! ### Extracting disjoint subfamilies from a ball covering -/
+#print Besicovitch.BallPackage /-
/-- A ball package is a family of balls in a metric space with positive bounded radii. -/
structure BallPackage (β : Type _) (α : Type _) where
c : β → α
R : β → ℝ
rpos : ∀ b, 0 < r b
- rBound : ℝ
+ r_bound : ℝ
r_le : ∀ b, r b ≤ r_bound
#align besicovitch.ball_package Besicovitch.BallPackage
+-/
+#print Besicovitch.unitBallPackage /-
/-- The ball package made of unit balls. -/
def unitBallPackage (α : Type _) : BallPackage α α
where
c := id
R _ := 1
rpos _ := zero_lt_one
- rBound := 1
+ r_bound := 1
r_le _ := le_rfl
#align besicovitch.unit_ball_package Besicovitch.unitBallPackage
+-/
instance (α : Type _) : Inhabited (BallPackage α α) :=
⟨unitBallPackage α⟩
+#print Besicovitch.TauPackage /-
/-- A Besicovitch tau-package is a family of balls in a metric space with positive bounded radii,
together with enough data to proceed with the Besicovitch greedy algorithm. We register this in
a single structure to make sure that all our constructions in this algorithm only depend on
@@ -215,6 +224,7 @@ structure TauPackage (β : Type _) (α : Type _) extends BallPackage β α where
τ : ℝ
one_lt_tau : 1 < τ
#align besicovitch.tau_package Besicovitch.TauPackage
+-/
instance (α : Type _) : Inhabited (TauPackage α α) :=
⟨{ unitBallPackage α with
@@ -229,6 +239,7 @@ variable [Nonempty β] (p : TauPackage β α)
include p
+#print Besicovitch.TauPackage.index /-
/-- Choose inductively large balls with centers that are not contained in the union of already
chosen balls. This is a transfinite induction. -/
noncomputable def index : Ordinal.{u} → β
@@ -245,24 +256,30 @@ noncomputable def index : Ordinal.{u} → β
fun b : β => p.c b ∉ Z ∧ R ≤ p.τ * p.R b
decreasing_by exact j.2
#align besicovitch.tau_package.index Besicovitch.TauPackage.index
+-/
+#print Besicovitch.TauPackage.iUnionUpTo /-
/-- The set of points that are covered by the union of balls selected at steps `< i`. -/
-def unionUpTo (i : Ordinal.{u}) : Set α :=
+def iUnionUpTo (i : Ordinal.{u}) : Set α :=
⋃ j : { j // j < i }, ball (p.c (p.index j)) (p.R (p.index j))
-#align besicovitch.tau_package.Union_up_to Besicovitch.TauPackage.unionUpTo
+#align besicovitch.tau_package.Union_up_to Besicovitch.TauPackage.iUnionUpTo
+-/
-theorem monotone_unionUpTo : Monotone p.unionUpTo :=
+theorem monotone_iUnionUpTo : Monotone p.iUnionUpTo :=
by
intro i j hij
simp only [Union_up_to]
exact Union_mono' fun r => ⟨⟨r, r.2.trans_le hij⟩, subset.rfl⟩
-#align besicovitch.tau_package.monotone_Union_up_to Besicovitch.TauPackage.monotone_unionUpTo
+#align besicovitch.tau_package.monotone_Union_up_to Besicovitch.TauPackage.monotone_iUnionUpTo
+#print Besicovitch.TauPackage.R /-
/-- Supremum of the radii of balls whose centers are not yet covered at step `i`. -/
-def r (i : Ordinal.{u}) : ℝ :=
- iSup fun b : { b : β // p.c b ∉ p.unionUpTo i } => p.R b
-#align besicovitch.tau_package.R Besicovitch.TauPackage.r
+def R (i : Ordinal.{u}) : ℝ :=
+ iSup fun b : { b : β // p.c b ∉ p.iUnionUpTo i } => p.R b
+#align besicovitch.tau_package.R Besicovitch.TauPackage.R
+-/
+#print Besicovitch.TauPackage.color /-
/-- Group the balls into disjoint families, by assigning to a ball the smallest color for which
it does not intersect any already chosen ball of this color. -/
noncomputable def color : Ordinal.{u} → ℕ
@@ -275,14 +292,17 @@ noncomputable def color : Ordinal.{u} → ℕ
sInf (univ \ A)
decreasing_by exact j.2
#align besicovitch.tau_package.color Besicovitch.TauPackage.color
+-/
+#print Besicovitch.TauPackage.lastStep /-
/-- `p.last_step` is the first ordinal where the construction stops making sense, i.e., `f` returns
garbage since there is no point left to be chosen. We will only use ordinals before this step. -/
def lastStep : Ordinal.{u} :=
- sInf {i | ¬∃ b : β, p.c b ∉ p.unionUpTo i ∧ p.r i ≤ p.τ * p.R b}
+ sInf {i | ¬∃ b : β, p.c b ∉ p.iUnionUpTo i ∧ p.R i ≤ p.τ * p.R b}
#align besicovitch.tau_package.last_step Besicovitch.TauPackage.lastStep
+-/
-theorem last_step_nonempty : {i | ¬∃ b : β, p.c b ∉ p.unionUpTo i ∧ p.r i ≤ p.τ * p.R b}.Nonempty :=
+theorem lastStep_nonempty : {i | ¬∃ b : β, p.c b ∉ p.iUnionUpTo i ∧ p.R i ≤ p.τ * p.R b}.Nonempty :=
by
by_contra
suffices H : Function.Injective p.index; exact not_injective_of_ordinal p.index H
@@ -305,10 +325,10 @@ theorem last_step_nonempty : {i | ¬∃ b : β, p.c b ∉ p.unionUpTo i ∧ p.r
specialize A x H
simp [hxy] at A
exact (lt_irrefl _ ((p.rpos (p.index y)).trans_le A)).elim
-#align besicovitch.tau_package.last_step_nonempty Besicovitch.TauPackage.last_step_nonempty
+#align besicovitch.tau_package.last_step_nonempty Besicovitch.TauPackage.lastStep_nonempty
/-- Every point is covered by chosen balls, before `p.last_step`. -/
-theorem mem_unionUpTo_lastStep (x : β) : p.c x ∈ p.unionUpTo p.lastStep :=
+theorem mem_iUnionUpTo_lastStep (x : β) : p.c x ∈ p.iUnionUpTo p.lastStep :=
by
have A : ∀ z : β, p.c z ∈ p.Union_up_to p.last_step ∨ p.τ * p.r z < p.R p.last_step :=
by
@@ -335,7 +355,7 @@ theorem mem_unionUpTo_lastStep (x : β) : p.c x ∈ p.unionUpTo p.lastStep :=
· rw [← div_eq_inv_mul] at hy2
have := (div_le_iff' (_root_.zero_lt_one.trans p.one_lt_tau)).1 hy2.le
exact lt_irrefl _ (Hy.trans_le this)
-#align besicovitch.tau_package.mem_Union_up_to_last_step Besicovitch.TauPackage.mem_unionUpTo_lastStep
+#align besicovitch.tau_package.mem_Union_up_to_last_step Besicovitch.TauPackage.mem_iUnionUpTo_lastStep
/-- If there are no configurations of satellites with `N+1` points, one never uses more than `N`
distinct families in the Besicovitch inductive construction. -/
@@ -585,7 +605,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
{ c := fun x => x
R := fun x => r x
rpos := fun x => rpos x x.2
- rBound := 1
+ r_bound := 1
r_le := fun x => rle x x.2 }
rcases exist_disjoint_covering_families hτ hN a with ⟨u, hu, hu'⟩
have u_count : ∀ i, (u i).Countable := by
@@ -701,7 +721,7 @@ For a version assuming that the measure is sigma-finite,
see `exists_disjoint_closed_ball_covering_ae_aux`.
For a version giving the conclusion in a nicer form, see `exists_disjoint_closed_ball_covering_ae`.
-/
-theorem exists_disjoint_closedBall_covering_ae_of_finite_measure_aux (μ : Measure α)
+theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measure α)
[IsFiniteMeasure μ] (f : α → Set ℝ) (s : Set α)
(hf : ∀ x ∈ s, ∀ δ > 0, (f x ∩ Ioo 0 δ).Nonempty) :
∃ t : Set (α × ℝ),
@@ -845,7 +865,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finite_measure_aux (μ : Measu
apply (monotone_nat_of_le_succ fun n => _).directed_le
rw [u_succ]
exact (hF (u n) (Pu n)).1
-#align besicovitch.exists_disjoint_closed_ball_covering_ae_of_finite_measure_aux Besicovitch.exists_disjoint_closedBall_covering_ae_of_finite_measure_aux
+#align besicovitch.exists_disjoint_closed_ball_covering_ae_of_finite_measure_aux Besicovitch.exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux
/-- The measurable Besicovitch covering theorem. Assume that, for any `x` in a set `s`,
one is given a set of admissible closed balls centered at `x`, with arbitrarily small radii.
@@ -1009,7 +1029,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
{ c := fun x => x
R := fun x => r1 x
rpos := fun x => (hr1 x.1 x.2).1.2.1
- rBound := 1
+ r_bound := 1
r_le := fun x => (hr1 x.1 x.2).1.2.2.le }
-- by Besicovitch, we cover `s'` with at most `N` families of disjoint balls, all included in
-- a suitable neighborhood `v` of `s'`.
@@ -1140,6 +1160,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
/-! ### Consequences on differentiation of measures -/
+#print Besicovitch.vitaliFamily /-
/-- In a space with the Besicovitch covering property, the set of closed balls with positive radius
forms a Vitali family. This is essentially a restatement of the measurable Besicovitch theorem. -/
protected def vitaliFamily (μ : Measure α) [SigmaFinite μ] : VitaliFamily μ
@@ -1187,6 +1208,7 @@ protected def vitaliFamily (μ : Measure α) [SigmaFinite μ] : VitaliFamily μ
· rintro - ⟨x, hx, rfl⟩; exact (tg x hx).1.2
· rwa [bUnion_image]
#align besicovitch.vitali_family Besicovitch.vitaliFamily
+-/
/-- The main feature of the Besicovitch Vitali family is that its filter at a point `x` corresponds
to convergence along closed balls. We record one of the two implications here, which will enable us
@@ -1238,6 +1260,7 @@ theorem ae_tendsto_measure_inter_div_of_measurableSet (μ : Measure β) [IsLocal
exact hx.comp (tendsto_filter_at μ x)
#align besicovitch.ae_tendsto_measure_inter_div_of_measurable_set Besicovitch.ae_tendsto_measure_inter_div_of_measurableSet
+#print Besicovitch.ae_tendsto_measure_inter_div /-
/-- Given an arbitrary set `s`, then `μ (s ∩ closed_ball x r) / μ (closed_ball x r)` converges
to `1` when `r` tends to `0`, for almost every `x` in `s`.
This shows that almost every point of `s` is a Lebesgue density point for `s`.
@@ -1251,6 +1274,7 @@ theorem ae_tendsto_measure_inter_div (μ : Measure β) [IsLocallyFiniteMeasure
filter_upwards [VitaliFamily.ae_tendsto_measure_inter_div (Besicovitch.vitaliFamily μ)] with x
hx using hx.comp (tendsto_filter_at μ x)
#align besicovitch.ae_tendsto_measure_inter_div Besicovitch.ae_tendsto_measure_inter_div
+-/
end Besicovitch
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -136,7 +136,7 @@ structure Besicovitch.SatelliteConfig (α : Type _) [MetricSpace α] (N : ℕ) (
inter : ∀ i < last N, dist (c i) (c (last N)) ≤ r i + r (last N)
#align besicovitch.satellite_config Besicovitch.SatelliteConfig
-/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`no_satelliteConfig] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:394:30: infer kinds are unsupported in Lean 4: #[`no_satelliteConfig] [] -/
/-- A metric space has the Besicovitch covering property if there exist `N` and `τ > 1` such that
there are no satellite configuration of parameter `τ` with `N+1` points. This is the condition that
guarantees that the measurable Besicovitch covering theorem holds. It is satified by
@@ -279,11 +279,10 @@ decreasing_by exact j.2
/-- `p.last_step` is the first ordinal where the construction stops making sense, i.e., `f` returns
garbage since there is no point left to be chosen. We will only use ordinals before this step. -/
def lastStep : Ordinal.{u} :=
- sInf { i | ¬∃ b : β, p.c b ∉ p.unionUpTo i ∧ p.r i ≤ p.τ * p.R b }
+ sInf {i | ¬∃ b : β, p.c b ∉ p.unionUpTo i ∧ p.r i ≤ p.τ * p.R b}
#align besicovitch.tau_package.last_step Besicovitch.TauPackage.lastStep
-theorem last_step_nonempty :
- { i | ¬∃ b : β, p.c b ∉ p.unionUpTo i ∧ p.r i ≤ p.τ * p.R b }.Nonempty :=
+theorem last_step_nonempty : {i | ¬∃ b : β, p.c b ∉ p.unionUpTo i ∧ p.r i ≤ p.τ * p.R b}.Nonempty :=
by
by_contra
suffices H : Function.Injective p.index; exact not_injective_of_ordinal p.index H
@@ -313,7 +312,7 @@ theorem mem_unionUpTo_lastStep (x : β) : p.c x ∈ p.unionUpTo p.lastStep :=
by
have A : ∀ z : β, p.c z ∈ p.Union_up_to p.last_step ∨ p.τ * p.r z < p.R p.last_step :=
by
- have : p.last_step ∈ { i | ¬∃ b : β, p.c b ∉ p.Union_up_to i ∧ p.R i ≤ p.τ * p.r b } :=
+ have : p.last_step ∈ {i | ¬∃ b : β, p.c b ∉ p.Union_up_to i ∧ p.R i ≤ p.τ * p.r b} :=
csInf_mem p.last_step_nonempty
simpa only [not_exists, mem_set_of_eq, not_and_or, not_le, not_not_mem]
by_contra
@@ -553,8 +552,8 @@ variable [SecondCountableTopology α] [MeasurableSpace α] [OpensMeasurableSpace
many disjoint balls of the form `closed_ball x (r x)` covering a proportion `1/(N+1)` of `s`, if
there are no satellite configurations with `N+1` points.
-/
-theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [FiniteMeasure μ] {N : ℕ} {τ : ℝ}
- (hτ : 1 < τ) (hN : IsEmpty (SatelliteConfig α N τ)) (s : Set α) (r : α → ℝ)
+theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMeasure μ] {N : ℕ}
+ {τ : ℝ} (hτ : 1 < τ) (hN : IsEmpty (SatelliteConfig α N τ)) (s : Set α) (r : α → ℝ)
(rpos : ∀ x ∈ s, 0 < r x) (rle : ∀ x ∈ s, r x ≤ 1) :
∃ t : Finset α,
↑t ⊆ s ∧
@@ -703,7 +702,7 @@ see `exists_disjoint_closed_ball_covering_ae_aux`.
For a version giving the conclusion in a nicer form, see `exists_disjoint_closed_ball_covering_ae`.
-/
theorem exists_disjoint_closedBall_covering_ae_of_finite_measure_aux (μ : Measure α)
- [FiniteMeasure μ] (f : α → Set ℝ) (s : Set α)
+ [IsFiniteMeasure μ] (f : α → Set ℝ) (s : Set α)
(hf : ∀ x ∈ s, ∀ δ > 0, (f x ∩ Ioo 0 δ).Nonempty) :
∃ t : Set (α × ℝ),
t.Countable ∧
@@ -1159,7 +1158,7 @@ protected def vitaliFamily (μ : Measure α) [SigmaFinite μ] : VitaliFamily μ
Nontrivial x ε εpos := ⟨closedBall x ε, mem_image_of_mem _ εpos, Subset.refl _⟩
covering := by
intro s f fsubset ffine
- let g : α → Set ℝ := fun x => { r | 0 < r ∧ closed_ball x r ∈ f x }
+ let g : α → Set ℝ := fun x => {r | 0 < r ∧ closed_ball x r ∈ f x}
have A : ∀ x ∈ s, ∀ δ > 0, (g x ∩ Ioo 0 δ).Nonempty :=
by
intro x xs δ δpos
@@ -1203,7 +1202,7 @@ theorem tendsto_filterAt (μ : Measure α) [SigmaFinite μ] (x : α) :
∀ a : Set α, a ∈ (Besicovitch.vitaliFamily μ).setsAt x → a ⊆ closed_ball x ε → a ∈ s :=
(VitaliFamily.mem_filterAt_iff _).1 hs
have : Ioc (0 : ℝ) ε ∈ 𝓝[>] (0 : ℝ) := Ioc_mem_nhdsWithin_Ioi ⟨le_rfl, εpos⟩
- filter_upwards [this]with _ hr
+ filter_upwards [this] with _ hr
apply hε
· exact mem_image_of_mem _ hr.1
· exact closed_ball_subset_closed_ball hr.2
@@ -1214,11 +1213,11 @@ variable [MetricSpace β] [MeasurableSpace β] [BorelSpace β] [SecondCountableT
/-- In a space with the Besicovitch covering property, the ratio of the measure of balls converges
almost surely to to the Radon-Nikodym derivative. -/
-theorem ae_tendsto_rnDeriv (ρ μ : Measure β) [LocallyFiniteMeasure μ] [LocallyFiniteMeasure ρ] :
+theorem ae_tendsto_rnDeriv (ρ μ : Measure β) [IsLocallyFiniteMeasure μ] [IsLocallyFiniteMeasure ρ] :
∀ᵐ x ∂μ,
Tendsto (fun r => ρ (closedBall x r) / μ (closedBall x r)) (𝓝[>] 0) (𝓝 (ρ.rnDeriv μ x)) :=
by
- filter_upwards [VitaliFamily.ae_tendsto_rnDeriv (Besicovitch.vitaliFamily μ) ρ]with x hx
+ filter_upwards [VitaliFamily.ae_tendsto_rnDeriv (Besicovitch.vitaliFamily μ) ρ] with x hx
exact hx.comp (tendsto_filter_at μ x)
#align besicovitch.ae_tendsto_rn_deriv Besicovitch.ae_tendsto_rnDeriv
@@ -1227,7 +1226,7 @@ theorem ae_tendsto_rnDeriv (ρ μ : Measure β) [LocallyFiniteMeasure μ] [Local
This shows that almost every point of `s` is a Lebesgue density point for `s`.
A version for non-measurable sets holds, but it only gives the first conclusion,
see `ae_tendsto_measure_inter_div`. -/
-theorem ae_tendsto_measure_inter_div_of_measurableSet (μ : Measure β) [LocallyFiniteMeasure μ]
+theorem ae_tendsto_measure_inter_div_of_measurableSet (μ : Measure β) [IsLocallyFiniteMeasure μ]
{s : Set β} (hs : MeasurableSet s) :
∀ᵐ x ∂μ,
Tendsto (fun r => μ (s ∩ closedBall x r) / μ (closedBall x r)) (𝓝[>] 0)
@@ -1245,12 +1244,12 @@ This shows that almost every point of `s` is a Lebesgue density point for `s`.
A stronger version holds for measurable sets, see `ae_tendsto_measure_inter_div_of_measurable_set`.
See also `is_unif_loc_doubling_measure.ae_tendsto_measure_inter_div`. -/
-theorem ae_tendsto_measure_inter_div (μ : Measure β) [LocallyFiniteMeasure μ] (s : Set β) :
+theorem ae_tendsto_measure_inter_div (μ : Measure β) [IsLocallyFiniteMeasure μ] (s : Set β) :
∀ᵐ x ∂μ.restrict s,
Tendsto (fun r => μ (s ∩ closedBall x r) / μ (closedBall x r)) (𝓝[>] 0) (𝓝 1) :=
by
- filter_upwards [VitaliFamily.ae_tendsto_measure_inter_div
- (Besicovitch.vitaliFamily μ)]with x hx using hx.comp (tendsto_filter_at μ x)
+ filter_upwards [VitaliFamily.ae_tendsto_measure_inter_div (Besicovitch.vitaliFamily μ)] with x
+ hx using hx.comp (tendsto_filter_at μ x)
#align besicovitch.ae_tendsto_measure_inter_div Besicovitch.ae_tendsto_measure_inter_div
end Besicovitch
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -142,7 +142,7 @@ there are no satellite configuration of parameter `τ` with `N+1` points. This i
guarantees that the measurable Besicovitch covering theorem holds. It is satified by
finite-dimensional real vector spaces. -/
class HasBesicovitchCovering (α : Type _) [MetricSpace α] : Prop where
- no_satelliteConfig : ∃ (N : ℕ)(τ : ℝ), 1 < τ ∧ IsEmpty (Besicovitch.SatelliteConfig α N τ)
+ no_satelliteConfig : ∃ (N : ℕ) (τ : ℝ), 1 < τ ∧ IsEmpty (Besicovitch.SatelliteConfig α N τ)
#align has_besicovitch_covering HasBesicovitchCovering
/-- There is always a satellite configuration with a single point. -/
@@ -152,8 +152,8 @@ instance {α : Type _} {τ : ℝ} [Inhabited α] [MetricSpace α] :
R := fun i => 1
rpos := fun i => zero_lt_one
h := fun i j hij => (hij (Subsingleton.elim i j)).elim
- hlast := fun i hi => by rw [Subsingleton.elim i (last 0)] at hi; exact (lt_irrefl _ hi).elim
- inter := fun i hi => by rw [Subsingleton.elim i (last 0)] at hi;
+ hlast := fun i hi => by rw [Subsingleton.elim i (last 0)] at hi ; exact (lt_irrefl _ hi).elim
+ inter := fun i hi => by rw [Subsingleton.elim i (last 0)] at hi ;
exact (lt_irrefl _ hi).elim }⟩
namespace Besicovitch
@@ -242,8 +242,8 @@ noncomputable def index : Ordinal.{u} → β
-- return an index `b` for which the center `c b` is not in `Z`, and the radius is at
-- least `R / τ`, if such an index exists (and garbage otherwise).
Classical.epsilon
- fun b : β => p.c b ∉ Z ∧ R ≤ p.τ * p.R b decreasing_by
- exact j.2
+ fun b : β => p.c b ∉ Z ∧ R ≤ p.τ * p.R b
+decreasing_by exact j.2
#align besicovitch.tau_package.index Besicovitch.TauPackage.index
/-- The set of points that are covered by the union of balls selected at steps `< i`. -/
@@ -272,8 +272,8 @@ noncomputable def color : Ordinal.{u} → ℕ
(closedBall (p.c (p.index j)) (p.R (p.index j)) ∩
closedBall (p.c (p.index i)) (p.R (p.index i))).Nonempty),
{color j}
- sInf (univ \ A)decreasing_by
- exact j.2
+ sInf (univ \ A)
+decreasing_by exact j.2
#align besicovitch.tau_package.color Besicovitch.TauPackage.color
/-- `p.last_step` is the first ordinal where the construction stops making sense, i.e., `f` returns
@@ -292,7 +292,7 @@ theorem last_step_nonempty :
· exact (this hxy.symm (le_of_not_le x_le_y)).symm
rcases eq_or_lt_of_le x_le_y with (rfl | H); · rfl
simp only [nonempty_def, not_exists, exists_prop, not_and, not_lt, not_le, mem_set_of_eq,
- not_forall] at h
+ not_forall] at h
specialize h y
have A : p.c (p.index y) ∉ p.Union_up_to y :=
by
@@ -302,9 +302,9 @@ theorem last_step_nonempty :
rw [this]
exact (Classical.epsilon_spec h).1
simp only [Union_up_to, not_exists, exists_prop, mem_Union, mem_closed_ball, not_and, not_le,
- Subtype.exists, Subtype.coe_mk] at A
+ Subtype.exists, Subtype.coe_mk] at A
specialize A x H
- simp [hxy] at A
+ simp [hxy] at A
exact (lt_irrefl _ ((p.rpos (p.index y)).trans_le A)).elim
#align besicovitch.tau_package.last_step_nonempty Besicovitch.TauPackage.last_step_nonempty
@@ -333,7 +333,7 @@ theorem mem_unionUpTo_lastStep (x : β) : p.c x ∈ p.unionUpTo p.lastStep :=
exact ⟨⟨_, h⟩, mem_univ _⟩
rcases A y with (Hy | Hy)
· exact hy1 Hy
- · rw [← div_eq_inv_mul] at hy2
+ · rw [← div_eq_inv_mul] at hy2
have := (div_le_iff' (_root_.zero_lt_one.trans p.one_lt_tau)).1 hy2.le
exact lt_irrefl _ (Hy.trans_le this)
#align besicovitch.tau_package.mem_Union_up_to_last_step Besicovitch.TauPackage.mem_unionUpTo_lastStep
@@ -378,11 +378,11 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
k = p.color j :=
by
intro k hk
- rw [← Inf_eq_N] at hk
+ rw [← Inf_eq_N] at hk
have : k ∈ A := by
simpa only [true_and_iff, mem_univ, Classical.not_not, mem_diff] using
Nat.not_mem_of_lt_sInf hk
- simp at this
+ simp at this
simpa only [exists_prop, mem_Union, mem_singleton_iff, mem_closed_ball, Subtype.exists,
Subtype.coe_mk]
choose! g hg using this
@@ -428,7 +428,7 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
constructor
· have := (fGn b hb).1
simp only [Union_up_to, not_exists, exists_prop, mem_Union, mem_closed_ball, not_and, not_le,
- Subtype.exists, Subtype.coe_mk] at this
+ Subtype.exists, Subtype.coe_mk] at this
simpa only [dist_comm, mem_ball, not_lt] using this (G a) G_lt
· apply le_trans _ (fGn a ha).2
have B : p.c (p.index (G b)) ∉ p.Union_up_to (G a) := by intro H;
@@ -436,7 +436,7 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
let b' : { t // p.c t ∉ p.Union_up_to (G a) } := ⟨p.index (G b), B⟩
apply @le_ciSup _ _ _ (fun t : { t // p.c t ∉ p.Union_up_to (G a) } => p.r t) _ b'
refine' ⟨p.r_bound, fun t ht => _⟩
- simp only [exists_prop, mem_range, Subtype.exists, Subtype.coe_mk] at ht
+ simp only [exists_prop, mem_range, Subtype.exists, Subtype.coe_mk] at ht
rcases ht with ⟨u, hu⟩
rw [← hu.2]
exact p.r_le _
@@ -452,7 +452,7 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
have G_lt : G a < G b := by
rcases G_le.lt_or_eq with (H | H); · exact H
have A : (a : ℕ) ≠ b := fin.coe_injective.ne a_ne_b
- rw [← color_G a (Nat.lt_succ_iff.1 a.2), ← color_G b (Nat.lt_succ_iff.1 b.2), H] at A
+ rw [← color_G a (Nat.lt_succ_iff.1 a.2), ← color_G b (Nat.lt_succ_iff.1 b.2), H] at A
exact (A rfl).elim
exact Or.inl (Gab a b G_lt)
hlast := by
@@ -525,7 +525,7 @@ theorem exist_disjoint_covering_families {N : ℕ} {τ : ℝ} (hτ : 1 < τ)
intro k hk H
exact (p.color_lt (hk.trans jy_lt) hN).ne'
simp only [not_exists, true_and_iff, exists_prop, mem_Union, mem_singleton_iff, not_and,
- mem_univ, mem_diff, Subtype.exists, Subtype.coe_mk] at this
+ mem_univ, mem_diff, Subtype.exists, Subtype.coe_mk] at this
specialize this jx jxy
contrapose! this
simpa only [jxi, jyi, and_true_iff, eq_self_iff_true, ← not_disjoint_iff_nonempty_inter]
@@ -570,7 +570,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [FiniteMeasu
MulZeroClass.mul_zero]
· simp only [Finset.coe_empty, pairwise_disjoint_empty]
cases isEmpty_or_nonempty α
- · simp only [eq_empty_of_is_empty s, measure_empty] at hμs
+ · simp only [eq_empty_of_is_empty s, measure_empty] at hμs
exact (lt_irrefl _ hμs).elim
have Npos : N ≠ 0 := by
rintro rfl
@@ -601,13 +601,13 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [FiniteMeasu
by
refine' subset.antisymm _ (Union_subset fun i => inter_subset_left _ _)
intro x hx
- obtain ⟨i, y, hxy, h'⟩ : ∃ (i : Fin N)(i_1 : ↥s)(i : i_1 ∈ u i), x ∈ ball (↑i_1) (r ↑i_1) :=
+ obtain ⟨i, y, hxy, h'⟩ : ∃ (i : Fin N) (i_1 : ↥s) (i : i_1 ∈ u i), x ∈ ball (↑i_1) (r ↑i_1) :=
by
have : x ∈ range a.c := by simpa only [Subtype.range_coe_subtype, set_of_mem_eq]
simpa only [mem_Union] using hu' this
refine' mem_Union.2 ⟨i, ⟨hx, _⟩⟩
simp only [v, exists_prop, mem_Union, SetCoe.exists, exists_and_right, Subtype.coe_mk]
- exact ⟨y, ⟨y.2, by simpa only [Subtype.coe_eta] ⟩, ball_subset_closed_ball h'⟩
+ exact ⟨y, ⟨y.2, by simpa only [Subtype.coe_eta]⟩, ball_subset_closed_ball h'⟩
have S : (∑ i : Fin N, μ s / N) ≤ ∑ i, μ (s ∩ v i) :=
calc
(∑ i : Fin N, μ s / N) = μ s :=
@@ -619,7 +619,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [FiniteMeasu
_ ≤ ∑ i, μ (s ∩ v i) := by conv_lhs => rw [A]; apply measure_Union_fintype_le
-- choose an index `i` of a subfamily covering at least a proportion `1/N` of `s`.
- obtain ⟨i, -, hi⟩ : ∃ (i : Fin N)(hi : i ∈ Finset.univ), μ s / N ≤ μ (s ∩ v i) :=
+ obtain ⟨i, -, hi⟩ : ∃ (i : Fin N) (hi : i ∈ Finset.univ), μ s / N ≤ μ (s ∩ v i) :=
by
apply ENNReal.exists_le_of_sum_le _ S
exact ⟨⟨0, bot_lt_iff_ne_bot.2 Npos⟩, Finset.mem_univ _⟩
@@ -685,7 +685,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [FiniteMeasu
simpa only [mem_image, Finset.mem_coe, coe_coe, Finset.coe_image] using hk
obtain ⟨l', l'w, rfl⟩ : ∃ l' : u i, l' ∈ w ∧ ↑↑l' = l := by
simpa only [mem_image, Finset.mem_coe, coe_coe, Finset.coe_image] using hl
- have k'nel' : (k' : s) ≠ l' := by intro h; rw [h] at hkl; exact hkl rfl
+ have k'nel' : (k' : s) ≠ l' := by intro h; rw [h] at hkl ; exact hkl rfl
exact hu i k'.2 l'.2 k'nel'
#align besicovitch.exist_finset_disjoint_balls_large_measure Besicovitch.exist_finset_disjoint_balls_large_measure
@@ -767,7 +767,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finite_measure_aux (μ : Measu
rcases(mem_image _ _ _).1 hp with ⟨p', p'v, rfl⟩
rcases(mem_image _ _ _).1 hq with ⟨q', q'v, rfl⟩
refine' hv p'v q'v fun hp'q' => _
- rw [hp'q'] at hpq
+ rw [hp'q'] at hpq
exact hpq rfl
· intro p hp q hq hpq
rcases(mem_image _ _ _).1 hq with ⟨q', q'v, rfl⟩
@@ -839,7 +839,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finite_measure_aux (μ : Measu
exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) zero_lt_one
· simp only [true_or_iff, add_eq_zero_iff, Ne.def, not_false_iff, one_ne_zero, and_false_iff]
· simp only [ENNReal.nat_ne_top, Ne.def, not_false_iff, or_true_iff]
- rw [MulZeroClass.zero_mul] at C
+ rw [MulZeroClass.zero_mul] at C
apply le_bot_iff.1
exact le_of_tendsto_of_tendsto' tendsto_const_nhds C fun n => (A n).trans (B n)
· refine' (pairwise_disjoint_Union _).2 fun n => (Pu n).1
@@ -886,7 +886,7 @@ Besicovitch covering property (which is satisfied for instance by normed real ve
theorem exists_disjoint_closedBall_covering_ae (μ : Measure α) [SigmaFinite μ] (f : α → Set ℝ)
(s : Set α) (hf : ∀ x ∈ s, ∀ δ > 0, (f x ∩ Ioo 0 δ).Nonempty) (R : α → ℝ)
(hR : ∀ x ∈ s, 0 < R x) :
- ∃ (t : Set α)(r : α → ℝ),
+ ∃ (t : Set α) (r : α → ℝ),
t.Countable ∧
t ⊆ s ∧
(∀ x ∈ t, r x ∈ f x ∩ Ioo 0 (R x)) ∧
@@ -946,7 +946,7 @@ theorem exists_disjoint_closedBall_covering_ae (μ : Measure α) [SigmaFinite μ
· have A : inj_on (fun x : α => (x, r x)) t := by
simp (config := { contextual := true }) only [inj_on, Prod.mk.inj_iff, imp_true_iff,
eq_self_iff_true]
- rwa [← im_t, A.pairwise_disjoint_image] at v_disj
+ rwa [← im_t, A.pairwise_disjoint_image] at v_disj
#align besicovitch.exists_disjoint_closed_ball_covering_ae Besicovitch.exists_disjoint_closedBall_covering_ae
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (U «expr ⊇ » s) -/
@@ -957,7 +957,7 @@ allowed radii around a point `x` to a set `f x` which accumulates at `0`. -/
theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinite μ]
[Measure.OuterRegular μ] {ε : ℝ≥0∞} (hε : ε ≠ 0) (f : α → Set ℝ) (s : Set α)
(hf : ∀ x ∈ s, ∀ δ > 0, (f x ∩ Ioo 0 δ).Nonempty) :
- ∃ (t : Set α)(r : α → ℝ),
+ ∃ (t : Set α) (r : α → ℝ),
t.Countable ∧
t ⊆ s ∧
(∀ x ∈ t, r x ∈ f x) ∧
@@ -969,7 +969,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
`0`. Applying the other version of Besicovitch, one may cover it with at most `N` disjoint
subfamilies. Making sure that they are all included in a neighborhood `v` of `s'` of measure at
most `ε / (2 N)`, the sum of their measures is at most `ε / 2`, completing the proof. -/
- obtain ⟨u, su, u_open, μu⟩ : ∃ (U : _)(_ : U ⊇ s), IsOpen U ∧ μ U ≤ μ s + ε / 2 :=
+ obtain ⟨u, su, u_open, μu⟩ : ∃ (U : _) (_ : U ⊇ s), IsOpen U ∧ μ U ≤ μ s + ε / 2 :=
Set.exists_isOpen_le_add _ _
(by
simpa only [or_false_iff, Ne.def, ENNReal.div_eq_zero_iff, ENNReal.one_ne_top,
@@ -978,7 +978,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
Metric.mem_nhds_iff.1 (u_open.mem_nhds (su hx))
choose! R hR using this
obtain ⟨t0, r0, t0_count, t0s, hr0, μt0, t0_disj⟩ :
- ∃ (t0 : Set α)(r0 : α → ℝ),
+ ∃ (t0 : Set α) (r0 : α → ℝ),
t0.Countable ∧
t0 ⊆ s ∧
(∀ x ∈ t0, r0 x ∈ f x ∩ Ioo 0 (R x)) ∧
@@ -991,7 +991,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
have s's : s' ⊆ s := diff_subset _ _
obtain ⟨N, τ, hτ, H⟩ : ∃ N τ, 1 < τ ∧ IsEmpty (Besicovitch.SatelliteConfig α N τ) :=
HasBesicovitchCovering.no_satelliteConfig α
- obtain ⟨v, s'v, v_open, μv⟩ : ∃ (v : _)(_ : v ⊇ s'), IsOpen v ∧ μ v ≤ μ s' + ε / 2 / N :=
+ obtain ⟨v, s'v, v_open, μv⟩ : ∃ (v : _) (_ : v ⊇ s'), IsOpen v ∧ μ v ≤ μ s' + ε / 2 / N :=
Set.exists_isOpen_le_add _ _
(by
simp only [hε, ENNReal.nat_ne_top, WithTop.mul_eq_top_iff, Ne.def, ENNReal.div_eq_zero_iff,
@@ -1049,13 +1049,13 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
· rw [r_t0 x hx]
exact (hr0 _ hx).1
· have h'x : x ∈ s' := by
- simp only [mem_Union, mem_image] at hx
+ simp only [mem_Union, mem_image] at hx
rcases hx with ⟨i, y, ySi, rfl⟩
exact y.2
simp only [r, if_pos h'x, (hr1 x h'x).1.1]
· intro x hx
by_cases h'x : x ∈ s'
- · obtain ⟨i, y, ySi, xy⟩ : ∃ (i : Fin N)(y : ↥s')(ySi : y ∈ S i), x ∈ ball (y : α) (r1 y) :=
+ · obtain ⟨i, y, ySi, xy⟩ : ∃ (i : Fin N) (y : ↥s') (ySi : y ∈ S i), x ∈ ball (y : α) (r1 y) :=
by
have A : x ∈ range q.c := by
simpa only [not_exists, exists_prop, mem_Union, mem_closed_ball, not_and, not_le,
@@ -1113,7 +1113,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
simp only [SetCoe.forall, Subtype.coe_mk, Union_subset_iff]
intro x xs' xSi
exact (hr1 x xs').2
- _ ≤ ε / 2 / N := by have : μ s' = 0 := μt0; rwa [this, zero_add] at μv
+ _ ≤ ε / 2 / N := by have : μ s' = 0 := μt0; rwa [this, zero_add] at μv
-- add up all these to prove the desired estimate
calc
@@ -1163,17 +1163,17 @@ protected def vitaliFamily (μ : Measure α) [SigmaFinite μ] : VitaliFamily μ
have A : ∀ x ∈ s, ∀ δ > 0, (g x ∩ Ioo 0 δ).Nonempty :=
by
intro x xs δ δpos
- obtain ⟨t, tf, ht⟩ : ∃ (t : Set α)(H : t ∈ f x), t ⊆ closed_ball x (δ / 2) :=
+ obtain ⟨t, tf, ht⟩ : ∃ (t : Set α) (H : t ∈ f x), t ⊆ closed_ball x (δ / 2) :=
ffine x xs (δ / 2) (half_pos δpos)
obtain ⟨r, rpos, rfl⟩ : ∃ r : ℝ, 0 < r ∧ closed_ball x r = t := by simpa using fsubset x xs tf
rcases le_total r (δ / 2) with (H | H)
· exact ⟨r, ⟨rpos, tf⟩, ⟨rpos, H.trans_lt (half_lt_self δpos)⟩⟩
· have : closed_ball x r = closed_ball x (δ / 2) :=
subset.antisymm ht (closed_ball_subset_closed_ball H)
- rw [this] at tf
+ rw [this] at tf
refine' ⟨δ / 2, ⟨half_pos δpos, tf⟩, ⟨half_pos δpos, half_lt_self δpos⟩⟩
obtain ⟨t, r, t_count, ts, tg, μt, tdisj⟩ :
- ∃ (t : Set α)(r : α → ℝ),
+ ∃ (t : Set α) (r : α → ℝ),
t.Countable ∧
t ⊆ s ∧
(∀ x ∈ t, r x ∈ g x ∩ Ioo 0 1) ∧
@@ -1199,7 +1199,7 @@ theorem tendsto_filterAt (μ : Measure α) [SigmaFinite μ] (x : α) :
intro s hs
simp only [mem_map]
obtain ⟨ε, εpos, hε⟩ :
- ∃ (ε : ℝ)(H : ε > 0),
+ ∃ (ε : ℝ) (H : ε > 0),
∀ a : Set α, a ∈ (Besicovitch.vitaliFamily μ).setsAt x → a ⊆ closed_ball x ε → a ∈ s :=
(VitaliFamily.mem_filterAt_iff _).1 hs
have : Ioc (0 : ℝ) ε ∈ 𝓝[>] (0 : ℝ) := Ioc_mem_nhdsWithin_Ioi ⟨le_rfl, εpos⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -973,7 +973,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
Set.exists_isOpen_le_add _ _
(by
simpa only [or_false_iff, Ne.def, ENNReal.div_eq_zero_iff, ENNReal.one_ne_top,
- [anonymous]] using hε)
+ ENNReal.bit0_eq_top_iff] using hε)
have : ∀ x ∈ s, ∃ R > 0, ball x R ⊆ u := fun x hx =>
Metric.mem_nhds_iff.1 (u_open.mem_nhds (su hx))
choose! R hR using this
@@ -996,7 +996,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
(by
simp only [hε, ENNReal.nat_ne_top, WithTop.mul_eq_top_iff, Ne.def, ENNReal.div_eq_zero_iff,
ENNReal.one_ne_top, not_false_iff, and_false_iff, false_and_iff, or_self_iff,
- [anonymous]])
+ ENNReal.bit0_eq_top_iff])
have : ∀ x ∈ s', ∃ r1 ∈ f x ∩ Ioo (0 : ℝ) 1, closed_ball x r1 ⊆ v :=
by
intro x hx
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -106,7 +106,7 @@ universe u
open Metric Set Filter Fin MeasureTheory TopologicalSpace
-open Topology Classical BigOperators ENNReal MeasureTheory NNReal
+open scoped Topology Classical BigOperators ENNReal MeasureTheory NNReal
/-!
### Satellite configurations
@@ -545,7 +545,7 @@ theorem exist_disjoint_covering_families {N : ℕ} {τ : ℝ} (hτ : 1 < τ)
-/
-open NNReal
+open scoped NNReal
variable [SecondCountableTopology α] [MeasurableSpace α] [OpensMeasurableSpace α]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -152,11 +152,8 @@ instance {α : Type _} {τ : ℝ} [Inhabited α] [MetricSpace α] :
R := fun i => 1
rpos := fun i => zero_lt_one
h := fun i j hij => (hij (Subsingleton.elim i j)).elim
- hlast := fun i hi => by
- rw [Subsingleton.elim i (last 0)] at hi
- exact (lt_irrefl _ hi).elim
- inter := fun i hi => by
- rw [Subsingleton.elim i (last 0)] at hi
+ hlast := fun i hi => by rw [Subsingleton.elim i (last 0)] at hi; exact (lt_irrefl _ hi).elim
+ inter := fun i hi => by rw [Subsingleton.elim i (last 0)] at hi;
exact (lt_irrefl _ hi).elim }⟩
namespace Besicovitch
@@ -289,23 +286,19 @@ theorem last_step_nonempty :
{ i | ¬∃ b : β, p.c b ∉ p.unionUpTo i ∧ p.r i ≤ p.τ * p.R b }.Nonempty :=
by
by_contra
- suffices H : Function.Injective p.index
- exact not_injective_of_ordinal p.index H
+ suffices H : Function.Injective p.index; exact not_injective_of_ordinal p.index H
intro x y hxy
wlog x_le_y : x ≤ y generalizing x y
· exact (this hxy.symm (le_of_not_le x_le_y)).symm
- rcases eq_or_lt_of_le x_le_y with (rfl | H)
- · rfl
+ rcases eq_or_lt_of_le x_le_y with (rfl | H); · rfl
simp only [nonempty_def, not_exists, exists_prop, not_and, not_lt, not_le, mem_set_of_eq,
not_forall] at h
specialize h y
have A : p.c (p.index y) ∉ p.Union_up_to y :=
by
have :
- p.index y = Classical.epsilon fun b : β => p.c b ∉ p.Union_up_to y ∧ p.R y ≤ p.τ * p.r b :=
- by
- rw [tau_package.index]
- rfl
+ p.index y = Classical.epsilon fun b : β => p.c b ∉ p.Union_up_to y ∧ p.R y ≤ p.τ * p.r b := by
+ rw [tau_package.index]; rfl
rw [this]
exact (Classical.epsilon_spec h).1
simp only [Union_up_to, not_exists, exists_prop, mem_Union, mem_closed_ball, not_and, not_le,
@@ -324,8 +317,7 @@ theorem mem_unionUpTo_lastStep (x : β) : p.c x ∈ p.unionUpTo p.lastStep :=
csInf_mem p.last_step_nonempty
simpa only [not_exists, mem_set_of_eq, not_and_or, not_le, not_not_mem]
by_contra
- rcases A x with (H | H)
- · exact h H
+ rcases A x with (H | H); · exact h H
have Rpos : 0 < p.R p.last_step := by
apply lt_trans (mul_pos (_root_.zero_lt_one.trans p.one_lt_tau) (p.rpos _)) H
have B : p.τ⁻¹ * p.R p.last_step < p.R p.last_step :=
@@ -401,18 +393,14 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
by
intro n hn
rcases hn.eq_or_lt with (rfl | H)
- · simp only [G]
- simp only [color_i, Inf_eq_N, if_true, eq_self_iff_true]
- · simp only [G]
- simp only [H.ne, (hg n H).right.right.symm, if_false]
+ · simp only [G]; simp only [color_i, Inf_eq_N, if_true, eq_self_iff_true]
+ · simp only [G]; simp only [H.ne, (hg n H).right.right.symm, if_false]
have G_lt_last : ∀ n, n ≤ N → G n < p.last_step :=
by
intro n hn
rcases hn.eq_or_lt with (rfl | H)
- · simp only [G]
- simp only [hi, if_true, eq_self_iff_true]
- · simp only [G]
- simp only [H.ne, (hg n H).left.trans hi, if_false]
+ · simp only [G]; simp only [hi, if_true, eq_self_iff_true]
+ · simp only [G]; simp only [H.ne, (hg n H).left.trans hi, if_false]
have fGn :
∀ n,
n ≤ N → p.c (p.index (G n)) ∉ p.Union_up_to (G n) ∧ p.R (G n) ≤ p.τ * p.r (p.index (G n)) :=
@@ -421,9 +409,7 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
have :
p.index (G n) =
Classical.epsilon fun t => p.c t ∉ p.Union_up_to (G n) ∧ p.R (G n) ≤ p.τ * p.r t :=
- by
- rw [index]
- rfl
+ by rw [index]; rfl
rw [this]
have : ∃ t, p.c t ∉ p.Union_up_to (G n) ∧ p.R (G n) ≤ p.τ * p.r t := by
simpa only [not_exists, exists_prop, not_and, not_lt, not_le, mem_set_of_eq, not_forall] using
@@ -445,9 +431,7 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
Subtype.exists, Subtype.coe_mk] at this
simpa only [dist_comm, mem_ball, not_lt] using this (G a) G_lt
· apply le_trans _ (fGn a ha).2
- have B : p.c (p.index (G b)) ∉ p.Union_up_to (G a) :=
- by
- intro H
+ have B : p.c (p.index (G b)) ∉ p.Union_up_to (G a) := by intro H;
exact (fGn b hb).1 (p.monotone_Union_up_to G_lt.le H)
let b' : { t // p.c t ∉ p.Union_up_to (G a) } := ⟨p.index (G b), B⟩
apply @le_ciSup _ _ _ (fun t : { t // p.c t ∉ p.Union_up_to (G a) } => p.r t) _ b'
@@ -466,8 +450,7 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
wlog G_le : G a ≤ G b generalizing a b
· exact (this b a a_ne_b.symm (le_of_not_le G_le)).symm
have G_lt : G a < G b := by
- rcases G_le.lt_or_eq with (H | H)
- · exact H
+ rcases G_le.lt_or_eq with (H | H); · exact H
have A : (a : ℕ) ≠ b := fin.coe_injective.ne a_ne_b
rw [← color_G a (Nat.lt_succ_iff.1 a.2), ← color_G b (Nat.lt_succ_iff.1 b.2), H] at A
exact (A rfl).elim
@@ -475,19 +458,13 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
hlast := by
intro a ha
have I : (a : ℕ) < N := ha
- have : G a < G (Fin.last N) := by
- dsimp [G]
- simp [I.ne, (hg a I).1]
+ have : G a < G (Fin.last N) := by dsimp [G]; simp [I.ne, (hg a I).1]
exact Gab _ _ this
inter := by
intro a ha
have I : (a : ℕ) < N := ha
- have J : G (Fin.last N) = i := by
- dsimp [G]
- simp only [if_true, eq_self_iff_true]
- have K : G a = g a := by
- dsimp [G]
- simp [I.ne, (hg a I).1]
+ have J : G (Fin.last N) = i := by dsimp [G]; simp only [if_true, eq_self_iff_true]
+ have K : G a = g a := by dsimp [G]; simp [I.ne, (hg a I).1]
convert dist_le_add_of_nonempty_closed_ball_inter_closed_ball (hg _ I).2.1 }
-- this is a contradiction
exact (hN.false : _) sc
@@ -532,9 +509,7 @@ theorem exist_disjoint_covering_families {N : ℕ} {τ : ℝ} (hτ : 1 < τ)
wlog jxy : jx ≤ jy generalizing jx jy
· exact (this jy jy_lt jyi hy jx jx_lt jxi hx x_ne_y.symm (le_of_not_le jxy)).symm
replace jxy : jx < jy
- · rcases lt_or_eq_of_le jxy with (H | rfl)
- · exact H
- · exact (x_ne_y rfl).elim
+ · rcases lt_or_eq_of_le jxy with (H | rfl); · exact H; · exact (x_ne_y rfl).elim
let A : Set ℕ :=
⋃ (j : { j // j < jy }) (hj :
(closed_ball (p.c (p.index j)) (p.r (p.index j)) ∩
@@ -641,9 +616,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [FiniteMeasu
rw [ENNReal.mul_div_cancel']
· simp only [Npos, Ne.def, Nat.cast_eq_zero, not_false_iff]
· exact ENNReal.nat_ne_top _
- _ ≤ ∑ i, μ (s ∩ v i) := by
- conv_lhs => rw [A]
- apply measure_Union_fintype_le
+ _ ≤ ∑ i, μ (s ∩ v i) := by conv_lhs => rw [A]; apply measure_Union_fintype_le
-- choose an index `i` of a subfamily covering at least a proportion `1/N` of `s`.
obtain ⟨i, -, hi⟩ : ∃ (i : Fin N)(hi : i ∈ Finset.univ), μ s / N ≤ μ (s ∩ v i) :=
@@ -668,9 +641,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [FiniteMeasu
obtain ⟨w, hw⟩ :
∃ w : Finset (u i), μ s / (N + 1) < ∑ x : u i in w, μ (o ∩ closed_ball (x : α) (r (x : α))) :=
by
- have C : HasSum (fun x : u i => μ (o ∩ closed_ball x (r x))) (μ (o ∩ v i)) :=
- by
- rw [B]
+ have C : HasSum (fun x : u i => μ (o ∩ closed_ball x (r x))) (μ (o ∩ v i)) := by rw [B];
exact ennreal.summable.has_sum
have : μ s / (N + 1) < μ (o ∩ v i) := hi.trans_le (measure_mono (inter_subset_inter_left _ so))
exact ((tendsto_order.1 C).1 _ this).exists
@@ -703,9 +674,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [FiniteMeasu
rw [← Finset.set_biUnion_coe, inter_comm _ o, inter_Union₂, Finset.set_biUnion_coe,
measure_bUnion_finset]
· have : (w : Set (u i)).PairwiseDisjoint fun b : u i => closed_ball (b : α) (r (b : α)) :=
- by
- intro k hk l hl hkl
- exact hu i k.2 l.2 (subtype.coe_injective.ne hkl)
+ by intro k hk l hl hkl; exact hu i k.2 l.2 (subtype.coe_injective.ne hkl)
exact this.mono fun k => inter_subset_right _ _
· intro b hb
apply omeas.inter measurableSet_closedBall
@@ -716,10 +685,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [FiniteMeasu
simpa only [mem_image, Finset.mem_coe, coe_coe, Finset.coe_image] using hk
obtain ⟨l', l'w, rfl⟩ : ∃ l' : u i, l' ∈ w ∧ ↑↑l' = l := by
simpa only [mem_image, Finset.mem_coe, coe_coe, Finset.coe_image] using hl
- have k'nel' : (k' : s) ≠ l' := by
- intro h
- rw [h] at hkl
- exact hkl rfl
+ have k'nel' : (k' : s) ≠ l' := by intro h; rw [h] at hkl; exact hkl rfl
exact hu i k'.2 l'.2 k'nel'
#align besicovitch.exist_finset_disjoint_balls_large_measure Besicovitch.exist_finset_disjoint_balls_large_measure
@@ -861,13 +827,8 @@ theorem exists_disjoint_closedBall_covering_ae_of_finite_measure_aux (μ : Measu
calc
μ (s \ ⋃ (p : α × ℝ) (hp : p ∈ u n.succ), closed_ball p.fst p.snd) ≤
N / (N + 1) * μ (s \ ⋃ (p : α × ℝ) (hp : p ∈ u n), closed_ball p.fst p.snd) :=
- by
- rw [u_succ]
- exact (hF (u n) (Pu n)).2.2
- _ ≤ (N / (N + 1)) ^ n.succ * μ s :=
- by
- rw [pow_succ, mul_assoc]
- exact mul_le_mul_left' IH _
+ by rw [u_succ]; exact (hF (u n) (Pu n)).2.2
+ _ ≤ (N / (N + 1)) ^ n.succ * μ s := by rw [pow_succ, mul_assoc]; exact mul_le_mul_left' IH _
have C : tendsto (fun n : ℕ => ((N : ℝ≥0∞) / (N + 1)) ^ n * μ s) at_top (𝓝 (0 * μ s)) :=
by
@@ -1114,11 +1075,8 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
· -- the sets in the first step have measure at most `μ s + ε / 2`
have A : (∑' x : t0, μ (closed_ball x (r x))) ≤ μ s + ε / 2 :=
calc
- (∑' x : t0, μ (closed_ball x (r x))) = ∑' x : t0, μ (closed_ball x (r0 x)) :=
- by
- congr 1
- ext x
- rw [r_t0 x x.2]
+ (∑' x : t0, μ (closed_ball x (r x))) = ∑' x : t0, μ (closed_ball x (r0 x)) := by congr 1;
+ ext x; rw [r_t0 x x.2]
_ = μ (⋃ x : t0, closed_ball x (r0 x)) :=
by
haveI : Encodable t0 := t0_count.to_encodable
@@ -1142,11 +1100,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
have : inj_on (coe : s' → α) (S i) := subtype.coe_injective.inj_on _
let F : S i ≃ (coe : s' → α) '' S i := this.bij_on_image.equiv _
exact (F.tsum_eq fun x => μ (closed_ball x (r x))).symm
- _ = ∑' x : S i, μ (closed_ball x (r1 x)) :=
- by
- congr 1
- ext x
- have : (x : α) ∈ s' := x.1.2
+ _ = ∑' x : S i, μ (closed_ball x (r1 x)) := by congr 1; ext x; have : (x : α) ∈ s' := x.1.2;
simp only [r, if_pos this]
_ = μ (⋃ x : S i, closed_ball x (r1 x)) :=
by
@@ -1159,9 +1113,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
simp only [SetCoe.forall, Subtype.coe_mk, Union_subset_iff]
intro x xs' xSi
exact (hr1 x xs').2
- _ ≤ ε / 2 / N := by
- have : μ s' = 0 := μt0
- rwa [this, zero_add] at μv
+ _ ≤ ε / 2 / N := by have : μ s' = 0 := μt0; rwa [this, zero_add] at μv
-- add up all these to prove the desired estimate
calc
@@ -1230,12 +1182,10 @@ protected def vitaliFamily (μ : Measure α) [SigmaFinite μ] : VitaliFamily μ
exists_disjoint_closed_ball_covering_ae μ g s A (fun _ => 1) fun _ _ => zero_lt_one
let F : α → α × Set α := fun x => (x, closed_ball x (r x))
refine' ⟨F '' t, _, _, _, _⟩
- · rintro - ⟨x, hx, rfl⟩
- exact ts hx
+ · rintro - ⟨x, hx, rfl⟩; exact ts hx
· rintro p ⟨x, hx, rfl⟩ q ⟨y, hy, rfl⟩ hxy
exact tdisj hx hy (ne_of_apply_ne F hxy)
- · rintro - ⟨x, hx, rfl⟩
- exact (tg x hx).1.2
+ · rintro - ⟨x, hx, rfl⟩; exact (tg x hx).1.2
· rwa [bUnion_image]
#align besicovitch.vitali_family Besicovitch.vitaliFamily
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -240,7 +240,7 @@ noncomputable def index : Ordinal.{u} → β
let Z := ⋃ j : { j // j < i }, ball (p.c (index j)) (p.R (index j))
let
R :=-- `R` is the supremum of the radii of balls with centers not in `Z`
- supᵢ
+ iSup
fun b : { b : β // p.c b ∉ Z } => p.R b
-- return an index `b` for which the center `c b` is not in `Z`, and the radius is at
-- least `R / τ`, if such an index exists (and garbage otherwise).
@@ -263,7 +263,7 @@ theorem monotone_unionUpTo : Monotone p.unionUpTo :=
/-- Supremum of the radii of balls whose centers are not yet covered at step `i`. -/
def r (i : Ordinal.{u}) : ℝ :=
- supᵢ fun b : { b : β // p.c b ∉ p.unionUpTo i } => p.R b
+ iSup fun b : { b : β // p.c b ∉ p.unionUpTo i } => p.R b
#align besicovitch.tau_package.R Besicovitch.TauPackage.r
/-- Group the balls into disjoint families, by assigning to a ball the smallest color for which
@@ -275,14 +275,14 @@ noncomputable def color : Ordinal.{u} → ℕ
(closedBall (p.c (p.index j)) (p.R (p.index j)) ∩
closedBall (p.c (p.index i)) (p.R (p.index i))).Nonempty),
{color j}
- infₛ (univ \ A)decreasing_by
+ sInf (univ \ A)decreasing_by
exact j.2
#align besicovitch.tau_package.color Besicovitch.TauPackage.color
/-- `p.last_step` is the first ordinal where the construction stops making sense, i.e., `f` returns
garbage since there is no point left to be chosen. We will only use ordinals before this step. -/
def lastStep : Ordinal.{u} :=
- infₛ { i | ¬∃ b : β, p.c b ∉ p.unionUpTo i ∧ p.r i ≤ p.τ * p.R b }
+ sInf { i | ¬∃ b : β, p.c b ∉ p.unionUpTo i ∧ p.r i ≤ p.τ * p.R b }
#align besicovitch.tau_package.last_step Besicovitch.TauPackage.lastStep
theorem last_step_nonempty :
@@ -321,7 +321,7 @@ theorem mem_unionUpTo_lastStep (x : β) : p.c x ∈ p.unionUpTo p.lastStep :=
have A : ∀ z : β, p.c z ∈ p.Union_up_to p.last_step ∨ p.τ * p.r z < p.R p.last_step :=
by
have : p.last_step ∈ { i | ¬∃ b : β, p.c b ∉ p.Union_up_to i ∧ p.R i ≤ p.τ * p.r b } :=
- cinfₛ_mem p.last_step_nonempty
+ csInf_mem p.last_step_nonempty
simpa only [not_exists, mem_set_of_eq, not_and_or, not_le, not_not_mem]
by_contra
rcases A x with (H | H)
@@ -336,7 +336,7 @@ theorem mem_unionUpTo_lastStep (x : β) : p.c x ∈ p.unionUpTo p.lastStep :=
∃ y : β, p.c y ∉ p.Union_up_to p.last_step ∧ p.τ⁻¹ * p.R p.last_step < p.r y :=
by
simpa only [exists_prop, mem_range, exists_exists_and_eq_and, Subtype.exists,
- Subtype.coe_mk] using exists_lt_of_lt_csupₛ _ B
+ Subtype.coe_mk] using exists_lt_of_lt_csSup _ B
rw [← image_univ, nonempty_image_iff]
exact ⟨⟨_, h⟩, mem_univ _⟩
rcases A y with (Hy | Hy)
@@ -372,7 +372,7 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
exact (IH j ji (ji.trans hi)).ne'
suffices Inf (univ \ A) ≠ N
by
- rcases(cinfₛ_le (OrderBot.bddBelow (univ \ A)) N_mem).lt_or_eq with (H | H)
+ rcases(csInf_le (OrderBot.bddBelow (univ \ A)) N_mem).lt_or_eq with (H | H)
· exact H
· exact (this H).elim
intro Inf_eq_N
@@ -389,7 +389,7 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
rw [← Inf_eq_N] at hk
have : k ∈ A := by
simpa only [true_and_iff, mem_univ, Classical.not_not, mem_diff] using
- Nat.not_mem_of_lt_infₛ hk
+ Nat.not_mem_of_lt_sInf hk
simp at this
simpa only [exists_prop, mem_Union, mem_singleton_iff, mem_closed_ball, Subtype.exists,
Subtype.coe_mk]
@@ -427,7 +427,7 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
rw [this]
have : ∃ t, p.c t ∉ p.Union_up_to (G n) ∧ p.R (G n) ≤ p.τ * p.r t := by
simpa only [not_exists, exists_prop, not_and, not_lt, not_le, mem_set_of_eq, not_forall] using
- not_mem_of_lt_cinfₛ (G_lt_last n hn) (OrderBot.bddBelow _)
+ not_mem_of_lt_csInf (G_lt_last n hn) (OrderBot.bddBelow _)
exact Classical.epsilon_spec this
-- the balls with indices `G k` satisfy the characteristic property of satellite configurations.
have Gab :
@@ -450,7 +450,7 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
intro H
exact (fGn b hb).1 (p.monotone_Union_up_to G_lt.le H)
let b' : { t // p.c t ∉ p.Union_up_to (G a) } := ⟨p.index (G b), B⟩
- apply @le_csupᵢ _ _ _ (fun t : { t // p.c t ∉ p.Union_up_to (G a) } => p.r t) _ b'
+ apply @le_ciSup _ _ _ (fun t : { t // p.c t ∉ p.Union_up_to (G a) } => p.r t) _ b'
refine' ⟨p.r_bound, fun t ht => _⟩
simp only [exists_prop, mem_range, Subtype.exists, Subtype.coe_mk] at ht
rcases ht with ⟨u, hu⟩
@@ -543,7 +543,7 @@ theorem exist_disjoint_covering_families {N : ℕ} {τ : ℝ} (hτ : 1 < τ)
have color_j : p.color jy = Inf (univ \ A) := by rw [tau_package.color]
have : p.color jy ∈ univ \ A := by
rw [color_j]
- apply cinfₛ_mem
+ apply csInf_mem
refine' ⟨N, _⟩
simp only [not_exists, true_and_iff, exists_prop, mem_Union, mem_singleton_iff, not_and,
mem_univ, mem_diff, Subtype.exists, Subtype.coe_mk]
@@ -621,7 +621,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [FiniteMeasu
exact this.mono ball_subset_interior_closed_ball
let v : Fin N → Set α := fun i => ⋃ (x : s) (hx : x ∈ u i), closed_ball x (r x)
have : ∀ i, MeasurableSet (v i) := fun i =>
- MeasurableSet.bunionᵢ (u_count i) fun b hb => measurableSet_closedBall
+ MeasurableSet.biUnion (u_count i) fun b hb => measurableSet_closedBall
have A : s = ⋃ i : Fin N, s ∩ v i :=
by
refine' subset.antisymm _ (Union_subset fun i => inter_subset_left _ _)
@@ -684,14 +684,14 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [FiniteMeasu
-- use `s` (which might not be measurable), but its measurable superset `o`. Since their measures
-- are the same, this does not spoil the estimates
· suffices H : μ (o \ ⋃ x ∈ w, closed_ball (↑x) (r ↑x)) ≤ N / (N + 1) * μ s
- · rw [Finset.set_bunionᵢ_finset_image]
+ · rw [Finset.set_biUnion_finset_image]
exact le_trans (measure_mono (diff_subset_diff so (subset.refl _))) H
rw [← diff_inter_self_eq_diff,
measure_diff_le_iff_le_add _ (inter_subset_right _ _) (measure_lt_top μ _).Ne]
swap
· apply MeasurableSet.inter _ omeas
haveI : Encodable (u i) := (u_count i).toEncodable
- exact MeasurableSet.unionᵢ fun b => MeasurableSet.unionᵢ fun hb => measurableSet_closedBall
+ exact MeasurableSet.iUnion fun b => MeasurableSet.iUnion fun hb => measurableSet_closedBall
calc
μ o = 1 / (N + 1) * μ s + N / (N + 1) * μ s := by
rw [μo, ← add_mul, ENNReal.div_add_div_same, add_comm, ENNReal.div_self, one_mul] <;> simp
@@ -700,7 +700,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [FiniteMeasu
refine' add_le_add _ le_rfl
rw [div_eq_mul_inv, one_mul, mul_comm, ← div_eq_mul_inv]
apply hw.le.trans (le_of_eq _)
- rw [← Finset.set_bunionᵢ_coe, inter_comm _ o, inter_Union₂, Finset.set_bunionᵢ_coe,
+ rw [← Finset.set_biUnion_coe, inter_comm _ o, inter_Union₂, Finset.set_biUnion_coe,
measure_bUnion_finset]
· have : (w : Set (u i)).PairwiseDisjoint fun b : u i => closed_ball (b : α) (r (b : α)) :=
by
@@ -768,7 +768,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finite_measure_aux (μ : Measu
intro t ht
set B := ⋃ (p : α × ℝ) (hp : p ∈ t), closed_ball p.1 p.2 with hB
have B_closed : IsClosed B :=
- isClosed_bunionᵢ (Finset.finite_toSet _) fun i hi => is_closed_ball
+ isClosed_biUnion (Finset.finite_toSet _) fun i hi => is_closed_ball
set s' := s \ B with hs'
have : ∀ x ∈ s', ∃ r ∈ f x ∩ Ioo 0 1, Disjoint B (closed_ball x r) :=
by
@@ -806,7 +806,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finite_measure_aux (μ : Measu
· intro p hp q hq hpq
rcases(mem_image _ _ _).1 hq with ⟨q', q'v, rfl⟩
apply disjoint_of_subset_left _ (hr q' (vs' q'v)).2
- rw [hB, ← Finset.set_bunionᵢ_coe]
+ rw [hB, ← Finset.set_biUnion_coe]
exact subset_bUnion_of_mem hp
· intro p hp
rcases Finset.mem_union.1 hp with (h'p | h'p)
@@ -819,7 +819,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finite_measure_aux (μ : Measu
· rcases Finset.mem_image.1 h'p with ⟨p', p'v, rfl⟩
exact (hr p' (vs' p'v)).1.1
· convert hμv using 2
- rw [Finset.set_bunionᵢ_union, ← diff_diff, Finset.set_bunionᵢ_finset_image]
+ rw [Finset.set_biUnion_union, ← diff_diff, Finset.set_biUnion_finset_image]
/- Define `F` associating to a finite good covering the above enlarged good covering, covering
a proportion `1/(N+1)` of leftover points. Iterating `F`, one will get larger and larger good
coverings, missing in the end only a measure-zero set. -/
@@ -1172,7 +1172,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
_ ≤
(∑' x : t0, μ (closed_ball x (r x))) +
∑ i : Fin N, ∑' x : (coe : s' → α) '' S i, μ (closed_ball x (r x)) :=
- (add_le_add le_rfl (ENNReal.tsum_unionᵢ_le (fun x => μ (closed_ball x (r x))) _))
+ (add_le_add le_rfl (ENNReal.tsum_iUnion_le (fun x => μ (closed_ball x (r x))) _))
_ ≤ μ s + ε / 2 + ∑ i : Fin N, ε / 2 / N :=
by
refine' add_le_add A _
mathlib commit https://github.com/leanprover-community/mathlib/commit/d4437c68c8d350fc9d4e95e1e174409db35e30d7
@@ -578,8 +578,8 @@ variable [SecondCountableTopology α] [MeasurableSpace α] [OpensMeasurableSpace
many disjoint balls of the form `closed_ball x (r x)` covering a proportion `1/(N+1)` of `s`, if
there are no satellite configurations with `N+1` points.
-/
-theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMeasure μ] {N : ℕ}
- {τ : ℝ} (hτ : 1 < τ) (hN : IsEmpty (SatelliteConfig α N τ)) (s : Set α) (r : α → ℝ)
+theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [FiniteMeasure μ] {N : ℕ} {τ : ℝ}
+ (hτ : 1 < τ) (hN : IsEmpty (SatelliteConfig α N τ)) (s : Set α) (r : α → ℝ)
(rpos : ∀ x ∈ s, 0 < r x) (rle : ∀ x ∈ s, r x ≤ 1) :
∃ t : Finset α,
↑t ⊆ s ∧
@@ -737,7 +737,7 @@ see `exists_disjoint_closed_ball_covering_ae_aux`.
For a version giving the conclusion in a nicer form, see `exists_disjoint_closed_ball_covering_ae`.
-/
theorem exists_disjoint_closedBall_covering_ae_of_finite_measure_aux (μ : Measure α)
- [IsFiniteMeasure μ] (f : α → Set ℝ) (s : Set α)
+ [FiniteMeasure μ] (f : α → Set ℝ) (s : Set α)
(hf : ∀ x ∈ s, ∀ δ > 0, (f x ∩ Ioo 0 δ).Nonempty) :
∃ t : Set (α × ℝ),
t.Countable ∧
@@ -1264,7 +1264,7 @@ variable [MetricSpace β] [MeasurableSpace β] [BorelSpace β] [SecondCountableT
/-- In a space with the Besicovitch covering property, the ratio of the measure of balls converges
almost surely to to the Radon-Nikodym derivative. -/
-theorem ae_tendsto_rnDeriv (ρ μ : Measure β) [IsLocallyFiniteMeasure μ] [IsLocallyFiniteMeasure ρ] :
+theorem ae_tendsto_rnDeriv (ρ μ : Measure β) [LocallyFiniteMeasure μ] [LocallyFiniteMeasure ρ] :
∀ᵐ x ∂μ,
Tendsto (fun r => ρ (closedBall x r) / μ (closedBall x r)) (𝓝[>] 0) (𝓝 (ρ.rnDeriv μ x)) :=
by
@@ -1277,7 +1277,7 @@ theorem ae_tendsto_rnDeriv (ρ μ : Measure β) [IsLocallyFiniteMeasure μ] [IsL
This shows that almost every point of `s` is a Lebesgue density point for `s`.
A version for non-measurable sets holds, but it only gives the first conclusion,
see `ae_tendsto_measure_inter_div`. -/
-theorem ae_tendsto_measure_inter_div_of_measurableSet (μ : Measure β) [IsLocallyFiniteMeasure μ]
+theorem ae_tendsto_measure_inter_div_of_measurableSet (μ : Measure β) [LocallyFiniteMeasure μ]
{s : Set β} (hs : MeasurableSet s) :
∀ᵐ x ∂μ,
Tendsto (fun r => μ (s ∩ closedBall x r) / μ (closedBall x r)) (𝓝[>] 0)
@@ -1295,7 +1295,7 @@ This shows that almost every point of `s` is a Lebesgue density point for `s`.
A stronger version holds for measurable sets, see `ae_tendsto_measure_inter_div_of_measurable_set`.
See also `is_unif_loc_doubling_measure.ae_tendsto_measure_inter_div`. -/
-theorem ae_tendsto_measure_inter_div (μ : Measure β) [IsLocallyFiniteMeasure μ] (s : Set β) :
+theorem ae_tendsto_measure_inter_div (μ : Measure β) [LocallyFiniteMeasure μ] (s : Set β) :
∀ᵐ x ∂μ.restrict s,
Tendsto (fun r => μ (s ∩ closedBall x r) / μ (closedBall x r)) (𝓝[>] 0) (𝓝 1) :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/09079525fd01b3dda35e96adaa08d2f943e1648c
@@ -136,7 +136,7 @@ structure Besicovitch.SatelliteConfig (α : Type _) [MetricSpace α] (N : ℕ) (
inter : ∀ i < last N, dist (c i) (c (last N)) ≤ r i + r (last N)
#align besicovitch.satellite_config Besicovitch.SatelliteConfig
-/- ./././Mathport/Syntax/Translate/Command.lean:388:30: infer kinds are unsupported in Lean 4: #[`no_satelliteConfig] [] -/
+/- ./././Mathport/Syntax/Translate/Command.lean:393:30: infer kinds are unsupported in Lean 4: #[`no_satelliteConfig] [] -/
/-- A metric space has the Besicovitch covering property if there exist `N` and `τ > 1` such that
there are no satellite configuration of parameter `τ` with `N+1` points. This is the condition that
guarantees that the measurable Besicovitch covering theorem holds. It is satified by
mathlib commit https://github.com/leanprover-community/mathlib/commit/d95bef0d215ea58c0fd7bbc4b151bf3fe952c095
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module measure_theory.covering.besicovitch
-! leanprover-community/mathlib commit 57ac39bd365c2f80589a700f9fbb664d3a1a30c2
+! leanprover-community/mathlib commit 5f6e827d81dfbeb6151d7016586ceeb0099b9655
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -1294,7 +1294,7 @@ to `1` when `r` tends to `0`, for almost every `x` in `s`.
This shows that almost every point of `s` is a Lebesgue density point for `s`.
A stronger version holds for measurable sets, see `ae_tendsto_measure_inter_div_of_measurable_set`.
-See also `is_doubling_measure.ae_tendsto_measure_inter_div`. -/
+See also `is_unif_loc_doubling_measure.ae_tendsto_measure_inter_div`. -/
theorem ae_tendsto_measure_inter_div (μ : Measure β) [IsLocallyFiniteMeasure μ] (s : Set β) :
∀ᵐ x ∂μ.restrict s,
Tendsto (fun r => μ (s ∩ closedBall x r) / μ (closedBall x r)) (𝓝[>] 0) (𝓝 1) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -590,7 +590,9 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
rcases le_or_lt (μ s) 0 with (hμs | hμs)
· have : μ s = 0 := le_bot_iff.1 hμs
refine' ⟨∅, by simp only [Finset.coe_empty, empty_subset], _, _⟩
- · simp only [this, diff_empty, Union_false, Union_empty, nonpos_iff_eq_zero, mul_zero]
+ ·
+ simp only [this, diff_empty, Union_false, Union_empty, nonpos_iff_eq_zero,
+ MulZeroClass.mul_zero]
· simp only [Finset.coe_empty, pairwise_disjoint_empty]
cases isEmpty_or_nonempty α
· simp only [eq_empty_of_is_empty s, measure_empty] at hμs
@@ -876,7 +878,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finite_measure_aux (μ : Measu
exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) zero_lt_one
· simp only [true_or_iff, add_eq_zero_iff, Ne.def, not_false_iff, one_ne_zero, and_false_iff]
· simp only [ENNReal.nat_ne_top, Ne.def, not_false_iff, or_true_iff]
- rw [zero_mul] at C
+ rw [MulZeroClass.zero_mul] at C
apply le_bot_iff.1
exact le_of_tendsto_of_tendsto' tendsto_const_nhds C fun n => (A n).trans (B n)
· refine' (pairwise_disjoint_Union _).2 fun n => (Pu n).1
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -986,8 +986,8 @@ theorem exists_disjoint_closedBall_covering_ae (μ : Measure α) [SigmaFinite μ
rwa [← im_t, A.pairwise_disjoint_image] at v_disj
#align besicovitch.exists_disjoint_closed_ball_covering_ae Besicovitch.exists_disjoint_closedBall_covering_ae
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (U «expr ⊇ » s) -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (v «expr ⊇ » s') -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (U «expr ⊇ » s) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (v «expr ⊇ » s') -/
/-- In a space with the Besicovitch property, any set `s` can be covered with balls whose measures
add up to at most `μ s + ε`, for any positive `ε`. This works even if one restricts the set of
allowed radii around a point `x` to a set `f x` which accumulates at `0`. -/
@@ -1170,7 +1170,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
_ ≤
(∑' x : t0, μ (closed_ball x (r x))) +
∑ i : Fin N, ∑' x : (coe : s' → α) '' S i, μ (closed_ball x (r x)) :=
- add_le_add le_rfl (ENNReal.tsum_unionᵢ_le (fun x => μ (closed_ball x (r x))) _)
+ (add_le_add le_rfl (ENNReal.tsum_unionᵢ_le (fun x => μ (closed_ball x (r x))) _))
_ ≤ μ s + ε / 2 + ∑ i : Fin N, ε / 2 / N :=
by
refine' add_le_add A _
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module measure_theory.covering.besicovitch
-! leanprover-community/mathlib commit 92ca63f0fb391a9ca5f22d2409a6080e786d99f7
+! leanprover-community/mathlib commit 57ac39bd365c2f80589a700f9fbb664d3a1a30c2
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -653,7 +653,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
apply (ENNReal.mul_lt_mul_left hμs.ne' (measure_lt_top μ s).Ne).2
rw [ENNReal.inv_lt_inv]
conv_lhs => rw [← add_zero (N : ℝ≥0∞)]
- exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) ENNReal.zero_lt_one
+ exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) zero_lt_one
have B : μ (o ∩ v i) = ∑' x : u i, μ (o ∩ closed_ball x (r x)) :=
by
have : o ∩ v i = ⋃ (x : s) (hx : x ∈ u i), o ∩ closed_ball x (r x) := by simp only [inter_Union]
@@ -865,7 +865,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finite_measure_aux (μ : Measu
_ ≤ (N / (N + 1)) ^ n.succ * μ s :=
by
rw [pow_succ, mul_assoc]
- exact ENNReal.mul_le_mul le_rfl IH
+ exact mul_le_mul_left' IH _
have C : tendsto (fun n : ℕ => ((N : ℝ≥0∞) / (N + 1)) ^ n * μ s) at_top (𝓝 (0 * μ s)) :=
by
@@ -873,7 +873,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finite_measure_aux (μ : Measu
apply ENNReal.tendsto_pow_atTop_nhds_0_of_lt_1
rw [ENNReal.div_lt_iff, one_mul]
· conv_lhs => rw [← add_zero (N : ℝ≥0∞)]
- exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) ENNReal.zero_lt_one
+ exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) zero_lt_one
· simp only [true_or_iff, add_eq_zero_iff, Ne.def, not_false_iff, one_ne_zero, and_false_iff]
· simp only [ENNReal.nat_ne_top, Ne.def, not_false_iff, or_true_iff]
rw [zero_mul] at C
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -106,7 +106,7 @@ universe u
open Metric Set Filter Fin MeasureTheory TopologicalSpace
-open Topology Classical BigOperators Ennreal MeasureTheory NNReal
+open Topology Classical BigOperators ENNReal MeasureTheory NNReal
/-!
### Satellite configurations
@@ -636,9 +636,9 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
(∑ i : Fin N, μ s / N) = μ s :=
by
simp only [Finset.card_fin, Finset.sum_const, nsmul_eq_mul]
- rw [Ennreal.mul_div_cancel']
+ rw [ENNReal.mul_div_cancel']
· simp only [Npos, Ne.def, Nat.cast_eq_zero, not_false_iff]
- · exact Ennreal.nat_ne_top _
+ · exact ENNReal.nat_ne_top _
_ ≤ ∑ i, μ (s ∩ v i) := by
conv_lhs => rw [A]
apply measure_Union_fintype_le
@@ -646,14 +646,14 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
-- choose an index `i` of a subfamily covering at least a proportion `1/N` of `s`.
obtain ⟨i, -, hi⟩ : ∃ (i : Fin N)(hi : i ∈ Finset.univ), μ s / N ≤ μ (s ∩ v i) :=
by
- apply Ennreal.exists_le_of_sum_le _ S
+ apply ENNReal.exists_le_of_sum_le _ S
exact ⟨⟨0, bot_lt_iff_ne_bot.2 Npos⟩, Finset.mem_univ _⟩
replace hi : μ s / (N + 1) < μ (s ∩ v i)
· apply lt_of_lt_of_le _ hi
- apply (Ennreal.mul_lt_mul_left hμs.ne' (measure_lt_top μ s).Ne).2
- rw [Ennreal.inv_lt_inv]
+ apply (ENNReal.mul_lt_mul_left hμs.ne' (measure_lt_top μ s).Ne).2
+ rw [ENNReal.inv_lt_inv]
conv_lhs => rw [← add_zero (N : ℝ≥0∞)]
- exact Ennreal.add_lt_add_left (Ennreal.nat_ne_top N) Ennreal.zero_lt_one
+ exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) ENNReal.zero_lt_one
have B : μ (o ∩ v i) = ∑' x : u i, μ (o ∩ closed_ball x (r x)) :=
by
have : o ∩ v i = ⋃ (x : s) (hx : x ∈ u i), o ∩ closed_ball x (r x) := by simp only [inter_Union]
@@ -692,7 +692,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
exact MeasurableSet.unionᵢ fun b => MeasurableSet.unionᵢ fun hb => measurableSet_closedBall
calc
μ o = 1 / (N + 1) * μ s + N / (N + 1) * μ s := by
- rw [μo, ← add_mul, Ennreal.div_add_div_same, add_comm, Ennreal.div_self, one_mul] <;> simp
+ rw [μo, ← add_mul, ENNReal.div_add_div_same, add_comm, ENNReal.div_self, one_mul] <;> simp
_ ≤ μ ((⋃ x ∈ w, closed_ball (↑x) (r ↑x)) ∩ o) + N / (N + 1) * μ s :=
by
refine' add_le_add _ le_rfl
@@ -865,17 +865,17 @@ theorem exists_disjoint_closedBall_covering_ae_of_finite_measure_aux (μ : Measu
_ ≤ (N / (N + 1)) ^ n.succ * μ s :=
by
rw [pow_succ, mul_assoc]
- exact Ennreal.mul_le_mul le_rfl IH
+ exact ENNReal.mul_le_mul le_rfl IH
have C : tendsto (fun n : ℕ => ((N : ℝ≥0∞) / (N + 1)) ^ n * μ s) at_top (𝓝 (0 * μ s)) :=
by
- apply Ennreal.Tendsto.mul_const _ (Or.inr (measure_lt_top μ s).Ne)
- apply Ennreal.tendsto_pow_atTop_nhds_0_of_lt_1
- rw [Ennreal.div_lt_iff, one_mul]
+ apply ENNReal.Tendsto.mul_const _ (Or.inr (measure_lt_top μ s).Ne)
+ apply ENNReal.tendsto_pow_atTop_nhds_0_of_lt_1
+ rw [ENNReal.div_lt_iff, one_mul]
· conv_lhs => rw [← add_zero (N : ℝ≥0∞)]
- exact Ennreal.add_lt_add_left (Ennreal.nat_ne_top N) Ennreal.zero_lt_one
+ exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) ENNReal.zero_lt_one
· simp only [true_or_iff, add_eq_zero_iff, Ne.def, not_false_iff, one_ne_zero, and_false_iff]
- · simp only [Ennreal.nat_ne_top, Ne.def, not_false_iff, or_true_iff]
+ · simp only [ENNReal.nat_ne_top, Ne.def, not_false_iff, or_true_iff]
rw [zero_mul] at C
apply le_bot_iff.1
exact le_of_tendsto_of_tendsto' tendsto_const_nhds C fun n => (A n).trans (B n)
@@ -1009,8 +1009,8 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
obtain ⟨u, su, u_open, μu⟩ : ∃ (U : _)(_ : U ⊇ s), IsOpen U ∧ μ U ≤ μ s + ε / 2 :=
Set.exists_isOpen_le_add _ _
(by
- simpa only [or_false_iff, Ne.def, Ennreal.div_zero_iff, Ennreal.one_ne_top,
- Ennreal.bit0_eq_top_iff] using hε)
+ simpa only [or_false_iff, Ne.def, ENNReal.div_eq_zero_iff, ENNReal.one_ne_top,
+ [anonymous]] using hε)
have : ∀ x ∈ s, ∃ R > 0, ball x R ⊆ u := fun x hx =>
Metric.mem_nhds_iff.1 (u_open.mem_nhds (su hx))
choose! R hR using this
@@ -1031,9 +1031,9 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
obtain ⟨v, s'v, v_open, μv⟩ : ∃ (v : _)(_ : v ⊇ s'), IsOpen v ∧ μ v ≤ μ s' + ε / 2 / N :=
Set.exists_isOpen_le_add _ _
(by
- simp only [hε, Ennreal.nat_ne_top, WithTop.mul_eq_top_iff, Ne.def, Ennreal.div_zero_iff,
- Ennreal.one_ne_top, not_false_iff, and_false_iff, false_and_iff, or_self_iff,
- Ennreal.bit0_eq_top_iff])
+ simp only [hε, ENNReal.nat_ne_top, WithTop.mul_eq_top_iff, Ne.def, ENNReal.div_eq_zero_iff,
+ ENNReal.one_ne_top, not_false_iff, and_false_iff, false_and_iff, or_self_iff,
+ [anonymous]])
have : ∀ x ∈ s', ∃ r1 ∈ f x ∩ Ioo (0 : ℝ) 1, closed_ball x r1 ⊆ v :=
by
intro x hx
@@ -1166,11 +1166,11 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
(∑' x : t0 ∪ ⋃ i : Fin N, (coe : s' → α) '' S i, μ (closed_ball x (r x))) ≤
(∑' x : t0, μ (closed_ball x (r x))) +
∑' x : ⋃ i : Fin N, (coe : s' → α) '' S i, μ (closed_ball x (r x)) :=
- Ennreal.tsum_union_le (fun x => μ (closed_ball x (r x))) _ _
+ ENNReal.tsum_union_le (fun x => μ (closed_ball x (r x))) _ _
_ ≤
(∑' x : t0, μ (closed_ball x (r x))) +
∑ i : Fin N, ∑' x : (coe : s' → α) '' S i, μ (closed_ball x (r x)) :=
- add_le_add le_rfl (Ennreal.tsum_unionᵢ_le (fun x => μ (closed_ball x (r x))) _)
+ add_le_add le_rfl (ENNReal.tsum_unionᵢ_le (fun x => μ (closed_ball x (r x))) _)
_ ≤ μ s + ε / 2 + ∑ i : Fin N, ε / 2 / N :=
by
refine' add_le_add A _
@@ -1179,8 +1179,8 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
exact B i
_ ≤ μ s + ε / 2 + ε / 2 := by
refine' add_le_add le_rfl _
- simp only [Finset.card_fin, Finset.sum_const, nsmul_eq_mul, Ennreal.mul_div_le]
- _ = μ s + ε := by rw [add_assoc, Ennreal.add_halves]
+ simp only [Finset.card_fin, Finset.sum_const, nsmul_eq_mul, ENNReal.mul_div_le]
+ _ = μ s + ε := by rw [add_assoc, ENNReal.add_halves]
#align besicovitch.exists_closed_ball_covering_tsum_measure_le Besicovitch.exists_closedBall_covering_tsum_measure_le
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -766,7 +766,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
have Pu : ∀ n, P (u n) := by
intro n
induction' n with n IH
- · simp only [P, u, Prod.forall, id.def, Function.iterate_zero, Nat.zero_eq]
+ · simp only [P, u, Prod.forall, id, Function.iterate_zero, Nat.zero_eq]
simp only [Finset.not_mem_empty, IsEmpty.forall_iff, Finset.coe_empty, forall₂_true_iff,
and_self_iff, pairwiseDisjoint_empty]
· rw [u_succ]
@@ -792,7 +792,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
intro n
induction' n with n IH
· simp only [u, le_refl, diff_empty, one_mul, iUnion_false, iUnion_empty, pow_zero,
- Nat.zero_eq, Function.iterate_zero, id.def, Finset.not_mem_empty]
+ Nat.zero_eq, Function.iterate_zero, id, Finset.not_mem_empty]
calc
μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n.succ), closedBall p.fst p.snd) ≤
N / (N + 1) * μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) := by
@@ -599,7 +599,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
simp only [Finset.card_fin, Finset.sum_const, nsmul_eq_mul]
rw [ENNReal.mul_div_cancel']
· simp only [Npos, Ne, Nat.cast_eq_zero, not_false_iff]
- · exact ENNReal.nat_ne_top _
+ · exact ENNReal.natCast_ne_top _
_ ≤ ∑ i, μ (s ∩ v i) := by
conv_lhs => rw [A]
apply measure_iUnion_fintype_le
@@ -612,7 +612,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
apply (ENNReal.mul_lt_mul_left hμs.ne' (measure_lt_top μ s).ne).2
rw [ENNReal.inv_lt_inv]
conv_lhs => rw [← add_zero (N : ℝ≥0∞)]
- exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) zero_lt_one
+ exact ENNReal.add_lt_add_left (ENNReal.natCast_ne_top N) zero_lt_one
have B : μ (o ∩ v i) = ∑' x : u i, μ (o ∩ closedBall x (r x)) := by
have : o ∩ v i = ⋃ (x : s) (_ : x ∈ u i), o ∩ closedBall x (r x) := by
simp only [v, inter_iUnion]
@@ -804,9 +804,9 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
apply ENNReal.tendsto_pow_atTop_nhds_zero_of_lt_one
rw [ENNReal.div_lt_iff, one_mul]
· conv_lhs => rw [← add_zero (N : ℝ≥0∞)]
- exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) zero_lt_one
+ exact ENNReal.add_lt_add_left (ENNReal.natCast_ne_top N) zero_lt_one
· simp only [true_or_iff, add_eq_zero_iff, Ne, not_false_iff, one_ne_zero, and_false_iff]
- · simp only [ENNReal.nat_ne_top, Ne, not_false_iff, or_true_iff]
+ · simp only [ENNReal.natCast_ne_top, Ne, not_false_iff, or_true_iff]
rw [zero_mul] at C
apply le_bot_iff.1
exact le_of_tendsto_of_tendsto' tendsto_const_nhds C fun n => (A n).trans (B n)
@@ -904,9 +904,8 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
HasBesicovitchCovering.no_satelliteConfig
obtain ⟨v, s'v, v_open, μv⟩ : ∃ v, v ⊇ s' ∧ IsOpen v ∧ μ v ≤ μ s' + ε / 2 / N :=
Set.exists_isOpen_le_add _ _
- (by
- simp only [ne_eq, ENNReal.div_eq_zero_iff, hε, ENNReal.two_ne_top, or_self,
- ENNReal.nat_ne_top, not_false_eq_true])
+ (by simp only [ne_eq, ENNReal.div_eq_zero_iff, hε, ENNReal.two_ne_top, or_self,
+ ENNReal.natCast_ne_top, not_false_eq_true])
have : ∀ x ∈ s', ∃ r1 ∈ f x ∩ Ioo (0 : ℝ) 1, closedBall x r1 ⊆ v := by
intro x hx
rcases Metric.mem_nhds_iff.1 (v_open.mem_nhds (s'v hx)) with ⟨r, rpos, hr⟩
@@ -598,7 +598,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
∑ _i : Fin N, μ s / N = μ s := by
simp only [Finset.card_fin, Finset.sum_const, nsmul_eq_mul]
rw [ENNReal.mul_div_cancel']
- · simp only [Npos, Ne.def, Nat.cast_eq_zero, not_false_iff]
+ · simp only [Npos, Ne, Nat.cast_eq_zero, not_false_iff]
· exact ENNReal.nat_ne_top _
_ ≤ ∑ i, μ (s ∩ v i) := by
conv_lhs => rw [A]
@@ -805,8 +805,8 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
rw [ENNReal.div_lt_iff, one_mul]
· conv_lhs => rw [← add_zero (N : ℝ≥0∞)]
exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) zero_lt_one
- · simp only [true_or_iff, add_eq_zero_iff, Ne.def, not_false_iff, one_ne_zero, and_false_iff]
- · simp only [ENNReal.nat_ne_top, Ne.def, not_false_iff, or_true_iff]
+ · simp only [true_or_iff, add_eq_zero_iff, Ne, not_false_iff, one_ne_zero, and_false_iff]
+ · simp only [ENNReal.nat_ne_top, Ne, not_false_iff, or_true_iff]
rw [zero_mul] at C
apply le_bot_iff.1
exact le_of_tendsto_of_tendsto' tendsto_const_nhds C fun n => (A n).trans (B n)
@@ -887,7 +887,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
obtain ⟨u, su, u_open, μu⟩ : ∃ U, U ⊇ s ∧ IsOpen U ∧ μ U ≤ μ s + ε / 2 :=
Set.exists_isOpen_le_add _ _
(by
- simpa only [or_false, Ne.def, ENNReal.div_eq_zero_iff, ENNReal.two_ne_top] using hε)
+ simpa only [or_false, Ne, ENNReal.div_eq_zero_iff, ENNReal.two_ne_top] using hε)
have : ∀ x ∈ s, ∃ R > 0, ball x R ⊆ u := fun x hx =>
Metric.mem_nhds_iff.1 (u_open.mem_nhds (su hx))
choose! R hR using this
We change the following field in the definition of an additive commutative monoid:
nsmul_succ : ∀ (n : ℕ) (x : G),
- AddMonoid.nsmul (n + 1) x = x + AddMonoid.nsmul n x
+ AddMonoid.nsmul (n + 1) x = AddMonoid.nsmul n x + x
where the latter is more natural
We adjust the definitions of ^
in monoids, groups, etc.
Originally there was a warning comment about why this natural order was preferred
use
x * npowRec n x
and notnpowRec n x * x
in the definition to make sure that definitional unfolding ofnpowRec
is blocked, to avoid deep recursion issues.
but it seems to no longer apply.
Remarks on the PR :
pow_succ
and pow_succ'
have switched their meanings.Ideal.IsPrime.mul_mem_pow
which is defined in [Mathlib/RingTheory/DedekindDomain/Ideal.lean]. Changing the order of operation forced me to add the symmetric lemma Ideal.IsPrime.mem_pow_mul
.@@ -798,7 +798,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
N / (N + 1) * μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) := by
rw [u_succ]; exact (hF (u n) (Pu n)).2.2
_ ≤ (N / (N + 1) : ℝ≥0∞) ^ n.succ * μ s := by
- rw [pow_succ, mul_assoc]; exact mul_le_mul_left' IH _
+ rw [pow_succ', mul_assoc]; exact mul_le_mul_left' IH _
have C : Tendsto (fun n : ℕ => ((N : ℝ≥0∞) / (N + 1)) ^ n * μ s) atTop (𝓝 (0 * μ s)) := by
apply ENNReal.Tendsto.mul_const _ (Or.inr (measure_lt_top μ s).ne)
apply ENNReal.tendsto_pow_atTop_nhds_zero_of_lt_one
ball
and bex
from lemma names (#10816)
ball
for "bounded forall" and bex
for "bounded exists" are from experience very confusing abbreviations. This PR renames them to forall_mem
and exists_mem
in the few Set
lemma names that mention them.
Also deprecate ball_image_of_ball
, mem_image_elim
, mem_image_elim_on
since those lemmas are duplicates of the renamed lemmas (apart from argument order and implicitness, which I am also fixing by making the binder in the RHS of forall_mem_image
semi-implicit), have obscure names and are completely unused.
@@ -865,7 +865,7 @@ theorem exists_disjoint_closedBall_covering_ae (μ : Measure α) [SigmaFinite μ
refine fun x hx y hy heq ↦ v_disj.eq hx hy <| not_disjoint_iff.2 ⟨x.1, ?_⟩
simp [*]
have hinj : InjOn (fun x ↦ (x, r x)) t := LeftInvOn.injOn (f₁' := Prod.fst) fun _ _ ↦ rfl
- simp only [graphOn, ball_image_iff, biUnion_image, hinj.pairwiseDisjoint_image] at *
+ simp only [graphOn, forall_mem_image, biUnion_image, hinj.pairwiseDisjoint_image] at *
exact ⟨t, r, countable_of_injective_of_countable_image hinj v_count, vs, vg, μv, v_disj⟩
#align besicovitch.exists_disjoint_closed_ball_covering_ae Besicovitch.exists_disjoint_closedBall_covering_ae
@@ -1046,8 +1046,8 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
forms a Vitali family. This is essentially a restatement of the measurable Besicovitch theorem. -/
protected def vitaliFamily (μ : Measure α) [SigmaFinite μ] : VitaliFamily μ where
setsAt x := (fun r : ℝ => closedBall x r) '' Ioi (0 : ℝ)
- measurableSet _ := ball_image_iff.2 fun _ _ ↦ isClosed_ball.measurableSet
- nonempty_interior _ := ball_image_iff.2 fun r rpos ↦
+ measurableSet _ := forall_mem_image.2 fun _ _ ↦ isClosed_ball.measurableSet
+ nonempty_interior _ := forall_mem_image.2 fun r rpos ↦
(nonempty_ball.2 rpos).mono ball_subset_interior_closedBall
nontrivial x ε εpos := ⟨closedBall x ε, mem_image_of_mem _ εpos, Subset.rfl⟩
covering := by
@@ -360,8 +360,8 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
have color_i : p.color i = sInf (univ \ A) := by rw [color]
rw [color_i]
have N_mem : N ∈ univ \ A := by
- simp only [not_exists, true_and_iff, exists_prop, mem_iUnion, mem_singleton_iff, mem_closedBall,
- not_and, mem_univ, mem_diff, Subtype.exists, Subtype.coe_mk]
+ simp only [A, not_exists, true_and_iff, exists_prop, mem_iUnion, mem_singleton_iff,
+ mem_closedBall, not_and, mem_univ, mem_diff, Subtype.exists, Subtype.coe_mk]
intro j ji _
exact (IH j ji (ji.trans hi)).ne'
suffices sInf (univ \ A) ≠ N by
@@ -380,7 +380,7 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
Nat.not_mem_of_lt_sInf hk
simp only [mem_iUnion, mem_singleton_iff, exists_prop, Subtype.exists, exists_and_right,
and_assoc] at this
- simpa only [exists_prop, mem_iUnion, mem_singleton_iff, mem_closedBall, Subtype.exists,
+ simpa only [A, exists_prop, mem_iUnion, mem_singleton_iff, mem_closedBall, Subtype.exists,
Subtype.coe_mk]
choose! g hg using this
-- Choose for each `k < N` an ordinal `G k < i` giving a ball of color `k` intersecting
@@ -389,13 +389,13 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
have color_G : ∀ n, n ≤ N → p.color (G n) = n := by
intro n hn
rcases hn.eq_or_lt with (rfl | H)
- · simp only; simp only [color_i, Inf_eq_N, if_true, eq_self_iff_true]
- · simp only; simp only [H.ne, (hg n H).right.right.symm, if_false]
+ · simp only [G]; simp only [color_i, Inf_eq_N, if_true, eq_self_iff_true]
+ · simp only [G]; simp only [H.ne, (hg n H).right.right.symm, if_false]
have G_lt_last : ∀ n, n ≤ N → G n < p.lastStep := by
intro n hn
rcases hn.eq_or_lt with (rfl | H)
- · simp only; simp only [hi, if_true, eq_self_iff_true]
- · simp only; simp only [H.ne, (hg n H).left.trans hi, if_false]
+ · simp only [G]; simp only [hi, if_true, eq_self_iff_true]
+ · simp only [G]; simp only [H.ne, (hg n H).left.trans hi, if_false]
have fGn :
∀ n, n ≤ N →
p.c (p.index (G n)) ∉ p.iUnionUpTo (G n) ∧ p.R (G n) ≤ p.τ * p.r (p.index (G n)) := by
@@ -451,13 +451,13 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
hlast := by
intro a ha
have I : (a : ℕ) < N := ha
- have : G a < G (Fin.last N) := by dsimp; simp [I.ne, (hg a I).1]
+ have : G a < G (Fin.last N) := by dsimp; simp [G, I.ne, (hg a I).1]
exact Gab _ _ this
inter := by
intro a ha
have I : (a : ℕ) < N := ha
- have J : G (Fin.last N) = i := by dsimp; simp only [if_true, eq_self_iff_true]
- have K : G a = g a := by dsimp; simp [I.ne, (hg a I).1]
+ have J : G (Fin.last N) = i := by dsimp; simp only [G, if_true, eq_self_iff_true]
+ have K : G a = g a := by dsimp [G]; simp [I.ne, (hg a I).1]
convert dist_le_add_of_nonempty_closedBall_inter_closedBall (hg _ I).2.1 }
-- this is a contradiction
exact hN.false sc
@@ -494,10 +494,10 @@ theorem exist_disjoint_covering_families {N : ℕ} {τ : ℝ} (hτ : 1 < τ)
intro x hx y hy x_ne_y
obtain ⟨jx, jx_lt, jxi, rfl⟩ :
∃ jx : Ordinal, jx < p.lastStep ∧ p.color jx = i ∧ x = p.index jx := by
- simpa only [exists_prop, mem_iUnion, mem_singleton_iff] using hx
+ simpa only [s, exists_prop, mem_iUnion, mem_singleton_iff] using hx
obtain ⟨jy, jy_lt, jyi, rfl⟩ :
∃ jy : Ordinal, jy < p.lastStep ∧ p.color jy = i ∧ y = p.index jy := by
- simpa only [exists_prop, mem_iUnion, mem_singleton_iff] using hy
+ simpa only [s, exists_prop, mem_iUnion, mem_singleton_iff] using hy
wlog jxy : jx ≤ jy generalizing jx jy
· exact (this jy jy_lt jyi hy jx jx_lt jxi hx x_ne_y.symm (le_of_not_le jxy)).symm
replace jxy : jx < jy := by
@@ -512,11 +512,11 @@ theorem exist_disjoint_covering_families {N : ℕ} {τ : ℝ} (hτ : 1 < τ)
rw [color_j]
apply csInf_mem
refine' ⟨N, _⟩
- simp only [not_exists, true_and_iff, exists_prop, mem_iUnion, mem_singleton_iff, not_and,
+ simp only [A, not_exists, true_and_iff, exists_prop, mem_iUnion, mem_singleton_iff, not_and,
mem_univ, mem_diff, Subtype.exists, Subtype.coe_mk]
intro k hk _
exact (p.color_lt (hk.trans jy_lt) hN).ne'
- simp only [not_exists, true_and_iff, exists_prop, mem_iUnion, mem_singleton_iff, not_and,
+ simp only [A, not_exists, true_and_iff, exists_prop, mem_iUnion, mem_singleton_iff, not_and,
mem_univ, mem_diff, Subtype.exists, Subtype.coe_mk] at h
specialize h jx jxy
contrapose! h
@@ -527,8 +527,8 @@ theorem exist_disjoint_covering_families {N : ℕ} {τ : ℝ} (hτ : 1 < τ)
∃ a : Ordinal, a < p.lastStep ∧ dist (p.c b) (p.c (p.index a)) < p.r (p.index a) := by
simpa only [iUnionUpTo, exists_prop, mem_iUnion, mem_ball, Subtype.exists,
Subtype.coe_mk] using p.mem_iUnionUpTo_lastStep b
- simp only [exists_prop, mem_iUnion, mem_ball, mem_singleton_iff, biUnion_and', exists_eq_left,
- iUnion_exists, exists_and_left]
+ simp only [s, exists_prop, mem_iUnion, mem_ball, mem_singleton_iff, biUnion_and',
+ exists_eq_left, iUnion_exists, exists_and_left]
exact ⟨⟨p.color a, p.color_lt ha.1 hN⟩, a, rfl, ha⟩
#align besicovitch.exist_disjoint_covering_families Besicovitch.exist_disjoint_covering_families
@@ -591,7 +591,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
have : x ∈ range a.c := by simpa only [Subtype.range_coe_subtype, setOf_mem_eq]
simpa only [mem_iUnion, bex_def] using hu' this
refine' mem_iUnion.2 ⟨i, ⟨hx, _⟩⟩
- simp only [exists_prop, mem_iUnion, SetCoe.exists, exists_and_right, Subtype.coe_mk]
+ simp only [v, exists_prop, mem_iUnion, SetCoe.exists, exists_and_right, Subtype.coe_mk]
exact ⟨y, ⟨y.2, by simpa only [Subtype.coe_eta]⟩, ball_subset_closedBall h'⟩
have S : ∑ _i : Fin N, μ s / N ≤ ∑ i, μ (s ∩ v i) :=
calc
@@ -614,7 +614,8 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
conv_lhs => rw [← add_zero (N : ℝ≥0∞)]
exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) zero_lt_one
have B : μ (o ∩ v i) = ∑' x : u i, μ (o ∩ closedBall x (r x)) := by
- have : o ∩ v i = ⋃ (x : s) (_ : x ∈ u i), o ∩ closedBall x (r x) := by simp only [inter_iUnion]
+ have : o ∩ v i = ⋃ (x : s) (_ : x ∈ u i), o ∩ closedBall x (r x) := by
+ simp only [v, inter_iUnion]
rw [this, measure_biUnion (u_count i)]
· exact (hu i).mono fun k => inter_subset_right _ _
· exact fun b _ => omeas.inter measurableSet_closedBall
@@ -761,11 +762,11 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
choose! F hF using this
let u n := F^[n] ∅
have u_succ : ∀ n : ℕ, u n.succ = F (u n) := fun n => by
- simp only [Function.comp_apply, Function.iterate_succ']
+ simp only [u, Function.comp_apply, Function.iterate_succ']
have Pu : ∀ n, P (u n) := by
intro n
induction' n with n IH
- · simp only [Prod.forall, id.def, Function.iterate_zero, Nat.zero_eq]
+ · simp only [P, u, Prod.forall, id.def, Function.iterate_zero, Nat.zero_eq]
simp only [Finset.not_mem_empty, IsEmpty.forall_iff, Finset.coe_empty, forall₂_true_iff,
and_self_iff, pairwiseDisjoint_empty]
· rw [u_succ]
@@ -790,8 +791,8 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
(N / (N + 1) : ℝ≥0∞) ^ n * μ s := by
intro n
induction' n with n IH
- · simp only [le_refl, diff_empty, one_mul, iUnion_false, iUnion_empty, pow_zero, Nat.zero_eq,
- Function.iterate_zero, id.def, Finset.not_mem_empty]
+ · simp only [u, le_refl, diff_empty, one_mul, iUnion_false, iUnion_empty, pow_zero,
+ Nat.zero_eq, Function.iterate_zero, id.def, Finset.not_mem_empty]
calc
μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n.succ), closedBall p.fst p.snd) ≤
N / (N + 1) * μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) := by
@@ -936,13 +937,13 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
have r_t0 : ∀ x ∈ t0, r x = r0 x := by
intro x hx
have : ¬x ∈ s' := by
- simp only [not_exists, exists_prop, mem_iUnion, mem_closedBall, not_and, not_lt, not_le,
+ simp only [s', not_exists, exists_prop, mem_iUnion, mem_closedBall, not_and, not_lt, not_le,
mem_diff, not_forall]
intro _
refine' ⟨x, hx, _⟩
rw [dist_self]
exact (hr0 x hx).2.1.le
- simp only [if_neg this]
+ simp only [r, if_neg this]
-- the desired covering set is given by the union of the families constructed in the first and
-- second steps.
refine' ⟨t0 ∪ ⋃ i : Fin N, ((↑) : s' → α) '' S i, r, _, _, _, _, _⟩
@@ -961,7 +962,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
simp only [mem_iUnion, mem_image] at hx
rcases hx with ⟨i, y, _, rfl⟩
exact y.2
- simp only [if_pos h'x, (hr1 x h'x).1.1]
+ simp only [r, if_pos h'x, (hr1 x h'x).1.1]
· intro x hx
by_cases h'x : x ∈ s'
· obtain ⟨i, y, ySi, xy⟩ : ∃ (i : Fin N) (y : ↥s'), y ∈ S i ∧ x ∈ ball (y : α) (r1 y) := by
@@ -973,10 +974,10 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
· simp only [mem_iUnion, mem_image]
exact ⟨i, y, ySi, rfl⟩
· have : (y : α) ∈ s' := y.2
- simp only [if_pos this]
+ simp only [r, if_pos this]
exact ball_subset_closedBall xy
· obtain ⟨y, yt0, hxy⟩ : ∃ y : α, y ∈ t0 ∧ x ∈ closedBall y (r0 y) := by
- simpa [hx, -mem_closedBall] using h'x
+ simpa [s', hx, -mem_closedBall] using h'x
refine' mem_iUnion₂.2 ⟨y, Or.inl yt0, _⟩
rwa [r_t0 _ yt0]
-- the only nontrivial property is the measure control, which we check now
@@ -1006,7 +1007,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
let F : S i ≃ ((↑) : s' → α) '' S i := this.bijOn_image.equiv _
exact (F.tsum_eq fun x => μ (closedBall x (r x))).symm
_ = ∑' x : S i, μ (closedBall x (r1 x)) := by
- congr 1; ext x; have : (x : α) ∈ s' := x.1.2; simp only [if_pos this]
+ congr 1; ext x; have : (x : α) ∈ s' := x.1.2; simp only [s', r, if_pos this]
_ = μ (⋃ x : S i, closedBall x (r1 x)) := by
haveI : Encodable (S i) := (S_count i).toEncodable
rw [measure_iUnion]
refine
s (#10762)
I replaced a few "terminal" refine/refine'
s with exact
.
The strategy was very simple-minded: essentially any refine
whose following line had smaller indentation got replaced by exact
and then I cleaned up the mess.
This PR certainly leaves some further terminal refine
s, but maybe the current change is beneficial.
@@ -1062,7 +1062,7 @@ protected def vitaliFamily (μ : Measure α) [SigmaFinite μ] : VitaliFamily μ
· have : closedBall x r = closedBall x (δ / 2) :=
Subset.antisymm ht (closedBall_subset_closedBall H)
rw [this] at tf
- refine' ⟨δ / 2, ⟨half_pos δpos, tf⟩, ⟨half_pos δpos, half_lt_self δpos⟩⟩
+ exact ⟨δ / 2, ⟨half_pos δpos, tf⟩, ⟨half_pos δpos, half_lt_self δpos⟩⟩
obtain ⟨t, r, _, ts, tg, μt, tdisj⟩ :
∃ (t : Set α) (r : α → ℝ),
t.Countable ∧
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -294,7 +294,7 @@ def lastStep : Ordinal.{u} :=
theorem lastStep_nonempty :
{i | ¬∃ b : β, p.c b ∉ p.iUnionUpTo i ∧ p.R i ≤ p.τ * p.r b}.Nonempty := by
by_contra h
- suffices H : Function.Injective p.index; exact not_injective_of_ordinal p.index H
+ suffices H : Function.Injective p.index from not_injective_of_ordinal p.index H
intro x y hxy
wlog x_le_y : x ≤ y generalizing x y
· exact (this hxy.symm (le_of_not_le x_le_y)).symm
@@ -500,8 +500,8 @@ theorem exist_disjoint_covering_families {N : ℕ} {τ : ℝ} (hτ : 1 < τ)
simpa only [exists_prop, mem_iUnion, mem_singleton_iff] using hy
wlog jxy : jx ≤ jy generalizing jx jy
· exact (this jy jy_lt jyi hy jx jx_lt jxi hx x_ne_y.symm (le_of_not_le jxy)).symm
- replace jxy : jx < jy
- · rcases lt_or_eq_of_le jxy with (H | rfl); · { exact H }; · { exact (x_ne_y rfl).elim }
+ replace jxy : jx < jy := by
+ rcases lt_or_eq_of_le jxy with (H | rfl); · { exact H }; · { exact (x_ne_y rfl).elim }
let A : Set ℕ :=
⋃ (j : { j // j < jy })
(_ : (closedBall (p.c (p.index j)) (p.r (p.index j)) ∩
@@ -607,8 +607,8 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
obtain ⟨i, -, hi⟩ : ∃ (i : Fin N), i ∈ Finset.univ ∧ μ s / N ≤ μ (s ∩ v i) := by
apply ENNReal.exists_le_of_sum_le _ S
exact ⟨⟨0, bot_lt_iff_ne_bot.2 Npos⟩, Finset.mem_univ _⟩
- replace hi : μ s / (N + 1) < μ (s ∩ v i)
- · apply lt_of_lt_of_le _ hi
+ replace hi : μ s / (N + 1) < μ (s ∩ v i) := by
+ apply lt_of_lt_of_le _ hi
apply (ENNReal.mul_lt_mul_left hμs.ne' (measure_lt_top μ s).ne).2
rw [ENNReal.inv_lt_inv]
conv_lhs => rw [← add_zero (N : ℝ≥0∞)]
@@ -636,8 +636,8 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
-- show that it covers a large enough proportion of `s`. For measure computations, we do not
-- use `s` (which might not be measurable), but its measurable superset `o`. Since their measures
-- are the same, this does not spoil the estimates
- · suffices H : μ (o \ ⋃ x ∈ w, closedBall (↑x) (r ↑x)) ≤ N / (N + 1) * μ s
- · rw [Finset.set_biUnion_finset_image]
+ · suffices H : μ (o \ ⋃ x ∈ w, closedBall (↑x) (r ↑x)) ≤ N / (N + 1) * μ s by
+ rw [Finset.set_biUnion_finset_image]
exact le_trans (measure_mono (diff_subset_diff so (Subset.refl _))) H
rw [← diff_inter_self_eq_diff,
measure_diff_le_iff_le_add _ (inter_subset_right _ _) (measure_lt_top μ _).ne]
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Joachim Breitner <mail@joachim-breitner.de>
@@ -251,7 +251,7 @@ noncomputable def index : Ordinal.{u} → β
-- return an index `b` for which the center `c b` is not in `Z`, and the radius is at
-- least `R / τ`, if such an index exists (and garbage otherwise).
Classical.epsilon fun b : β => p.c b ∉ Z ∧ R ≤ p.τ * p.r b
- termination_by index i => i
+ termination_by i => i
decreasing_by exact j.2
#align besicovitch.tau_package.index Besicovitch.TauPackage.index
@@ -281,7 +281,7 @@ noncomputable def color : Ordinal.{u} → ℕ
(_ : (closedBall (p.c (p.index j)) (p.r (p.index j)) ∩
closedBall (p.c (p.index i)) (p.r (p.index i))).Nonempty), {color j}
sInf (univ \ A)
- termination_by color i => i
+ termination_by i => i
decreasing_by exact j.2
#align besicovitch.tau_package.color Besicovitch.TauPackage.color
@@ -800,7 +800,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
rw [pow_succ, mul_assoc]; exact mul_le_mul_left' IH _
have C : Tendsto (fun n : ℕ => ((N : ℝ≥0∞) / (N + 1)) ^ n * μ s) atTop (𝓝 (0 * μ s)) := by
apply ENNReal.Tendsto.mul_const _ (Or.inr (measure_lt_top μ s).ne)
- apply ENNReal.tendsto_pow_atTop_nhds_0_of_lt_1
+ apply ENNReal.tendsto_pow_atTop_nhds_zero_of_lt_one
rw [ENNReal.div_lt_iff, one_mul]
· conv_lhs => rw [← add_zero (N : ℝ≥0∞)]
exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) zero_lt_one
@@ -9,6 +9,7 @@ import Mathlib.MeasureTheory.Integral.Lebesgue
import Mathlib.MeasureTheory.Measure.Regular
import Mathlib.SetTheory.Ordinal.Arithmetic
import Mathlib.Topology.MetricSpace.Basic
+import Mathlib.Data.Set.Pairwise.Lattice
#align_import measure_theory.covering.besicovitch from "leanprover-community/mathlib"@"5f6e827d81dfbeb6151d7016586ceeb0099b9655"
Rename VitaliFamily.MeasurableSet'
→ VitaliFamily.measurableSet
and VitaliFamily.Nontrivial
→ VitaliFamily.nontrivial
.
Also add docstrings.
@@ -1044,10 +1044,10 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
forms a Vitali family. This is essentially a restatement of the measurable Besicovitch theorem. -/
protected def vitaliFamily (μ : Measure α) [SigmaFinite μ] : VitaliFamily μ where
setsAt x := (fun r : ℝ => closedBall x r) '' Ioi (0 : ℝ)
- MeasurableSet' _ := ball_image_iff.2 fun _ _ ↦ isClosed_ball.measurableSet
+ measurableSet _ := ball_image_iff.2 fun _ _ ↦ isClosed_ball.measurableSet
nonempty_interior _ := ball_image_iff.2 fun r rpos ↦
(nonempty_ball.2 rpos).mono ball_subset_interior_closedBall
- Nontrivial x ε εpos := ⟨closedBall x ε, mem_image_of_mem _ εpos, Subset.rfl⟩
+ nontrivial x ε εpos := ⟨closedBall x ε, mem_image_of_mem _ εpos, Subset.rfl⟩
covering := by
intro s f fsubset ffine
let g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
Set.graphOn
(#9497)
Also prove that s : Set (α × β)
is a graph of a function on a set
if and only if Prod.fst
is injective on s
.
@@ -852,57 +852,19 @@ theorem exists_disjoint_closedBall_covering_ae (μ : Measure α) [SigmaFinite μ
(∀ x ∈ t, r x ∈ f x ∩ Ioo 0 (R x)) ∧ μ (s \ ⋃ x ∈ t, closedBall x (r x)) = 0 ∧
t.PairwiseDisjoint fun x => closedBall x (r x) := by
let g x := f x ∩ Ioo 0 (R x)
- have hg : ∀ x ∈ s, ∀ δ > 0, (g x ∩ Ioo 0 δ).Nonempty := by
- intro x hx δ δpos
+ have hg : ∀ x ∈ s, ∀ δ > 0, (g x ∩ Ioo 0 δ).Nonempty := fun x hx δ δpos ↦ by
rcases hf x hx (min δ (R x)) (lt_min δpos (hR x hx)) with ⟨r, hr⟩
- exact
- ⟨r,
- ⟨⟨hr.1, hr.2.1, hr.2.2.trans_le (min_le_right _ _)⟩,
- ⟨hr.2.1, hr.2.2.trans_le (min_le_left _ _)⟩⟩⟩
+ exact ⟨r, ⟨⟨hr.1, hr.2.1, hr.2.2.trans_le (min_le_right _ _)⟩,
+ ⟨hr.2.1, hr.2.2.trans_le (min_le_left _ _)⟩⟩⟩
rcases exists_disjoint_closedBall_covering_ae_aux μ g s hg with ⟨v, v_count, vs, vg, μv, v_disj⟩
- let t := Prod.fst '' v
- have : ∀ x ∈ t, ∃ r : ℝ, (x, r) ∈ v := by
- intro x hx
- rcases (mem_image _ _ _).1 hx with ⟨⟨p, q⟩, hp, rfl⟩
- exact ⟨q, hp⟩
- choose! r hr using this
- have im_t : (fun x => (x, r x)) '' t = v := by
- have I : ∀ p : α × ℝ, p ∈ v → 0 ≤ p.2 := fun p hp => (vg p hp).2.1.le
- apply Subset.antisymm
- · simp only [image_subset_iff]
- rintro ⟨x, p⟩ hxp
- simp only [mem_preimage]
- exact hr _ (mem_image_of_mem _ hxp)
- · rintro ⟨x, p⟩ hxp
- have hxrx : (x, r x) ∈ v := hr _ (mem_image_of_mem _ hxp)
- have : p = r x := by
- by_contra h
- have A : (x, p) ≠ (x, r x) := by
- simpa only [true_and_iff, Prod.mk.inj_iff, eq_self_iff_true, Ne.def] using h
- have H := v_disj hxp hxrx A
- contrapose H
- rw [not_disjoint_iff_nonempty_inter]
- refine' ⟨x, by simp (config := { proj := false }) [I _ hxp, I _ hxrx]⟩
- rw [this]
- apply mem_image_of_mem
- exact mem_image_of_mem _ hxp
- refine' ⟨t, r, v_count.image _, _, _, _, _⟩
- · intro x hx
- rcases (mem_image _ _ _).1 hx with ⟨⟨p, q⟩, hp, rfl⟩
- exact vs _ hp
- · intro x hx
- rcases (mem_image _ _ _).1 hx with ⟨⟨p, q⟩, _, rfl⟩
- exact vg _ (hr _ hx)
- · have :
- ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) =
- ⋃ (p : α × ℝ) (_ : p ∈ (fun x => (x, r x)) '' t), closedBall p.1 p.2 :=
- by conv_rhs => rw [biUnion_image]
- rw [this, im_t]
- exact μv
- · have A : InjOn (fun x : α => (x, r x)) t := by
- simp (config := { contextual := true }) only [InjOn, Prod.mk.inj_iff, imp_true_iff,
- eq_self_iff_true]
- rwa [← im_t, A.pairwiseDisjoint_image] at v_disj
+ obtain ⟨r, t, rfl⟩ : ∃ (r : α → ℝ) (t : Set α), v = graphOn r t := by
+ have I : ∀ p ∈ v, 0 ≤ p.2 := fun p hp => (vg p hp).2.1.le
+ rw [exists_eq_graphOn]
+ refine fun x hx y hy heq ↦ v_disj.eq hx hy <| not_disjoint_iff.2 ⟨x.1, ?_⟩
+ simp [*]
+ have hinj : InjOn (fun x ↦ (x, r x)) t := LeftInvOn.injOn (f₁' := Prod.fst) fun _ _ ↦ rfl
+ simp only [graphOn, ball_image_iff, biUnion_image, hinj.pairwiseDisjoint_image] at *
+ exact ⟨t, r, countable_of_injective_of_countable_image hinj v_count, vs, vg, μv, v_disj⟩
#align besicovitch.exists_disjoint_closed_ball_covering_ae Besicovitch.exists_disjoint_closedBall_covering_ae
/-- In a space with the Besicovitch property, any set `s` can be covered with balls whose measures
@@ -547,10 +547,8 @@ there are no satellite configurations with `N+1` points.
theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMeasure μ] {N : ℕ}
{τ : ℝ} (hτ : 1 < τ) (hN : IsEmpty (SatelliteConfig α N τ)) (s : Set α) (r : α → ℝ)
(rpos : ∀ x ∈ s, 0 < r x) (rle : ∀ x ∈ s, r x ≤ 1) :
- ∃ t : Finset α,
- ↑t ⊆ s ∧
- μ (s \ ⋃ x ∈ t, closedBall x (r x)) ≤ N / (N + 1) * μ s ∧
- (t : Set α).PairwiseDisjoint fun x => closedBall x (r x) := by
+ ∃ t : Finset α, ↑t ⊆ s ∧ μ (s \ ⋃ x ∈ t, closedBall x (r x)) ≤ N / (N + 1) * μ s ∧
+ (t : Set α).PairwiseDisjoint fun x => closedBall x (r x) := by
-- exclude the trivial case where `μ s = 0`.
rcases le_or_lt (μ s) 0 with (hμs | hμs)
· have : μ s = 0 := le_bot_iff.1 hμs
@@ -687,12 +685,9 @@ For a version giving the conclusion in a nicer form, see `exists_disjoint_closed
theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measure α)
[IsFiniteMeasure μ] (f : α → Set ℝ) (s : Set α)
(hf : ∀ x ∈ s, ∀ δ > 0, (f x ∩ Ioo 0 δ).Nonempty) :
- ∃ t : Set (α × ℝ),
- t.Countable ∧
- (∀ p : α × ℝ, p ∈ t → p.1 ∈ s) ∧
- (∀ p : α × ℝ, p ∈ t → p.2 ∈ f p.1) ∧
- μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.1 p.2) = 0 ∧
- t.PairwiseDisjoint fun p => closedBall p.1 p.2 := by
+ ∃ t : Set (α × ℝ), t.Countable ∧ (∀ p ∈ t, p.1 ∈ s) ∧ (∀ p ∈ t, p.2 ∈ f p.1) ∧
+ μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.1 p.2) = 0 ∧
+ t.PairwiseDisjoint fun p => closedBall p.1 p.2 := by
rcases HasBesicovitchCovering.no_satelliteConfig (α := α) with ⟨N, τ, hτ, hN⟩
/- Introduce a property `P` on finsets saying that we have a nice disjoint covering of a
subset of `s` by admissible balls. -/
@@ -831,10 +826,9 @@ For a version giving the conclusion in a nicer form, see `exists_disjoint_closed
-/
theorem exists_disjoint_closedBall_covering_ae_aux (μ : Measure α) [SigmaFinite μ] (f : α → Set ℝ)
(s : Set α) (hf : ∀ x ∈ s, ∀ δ > 0, (f x ∩ Ioo 0 δ).Nonempty) :
- ∃ t : Set (α × ℝ), t.Countable ∧ (∀ p : α × ℝ, p ∈ t → p.1 ∈ s) ∧
- (∀ p : α × ℝ, p ∈ t → p.2 ∈ f p.1) ∧
- μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.1 p.2) = 0 ∧
- t.PairwiseDisjoint fun p => closedBall p.1 p.2 := by
+ ∃ t : Set (α × ℝ), t.Countable ∧ (∀ p ∈ t, p.1 ∈ s) ∧ (∀ p ∈ t, p.2 ∈ f p.1) ∧
+ μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.1 p.2) = 0 ∧
+ t.PairwiseDisjoint fun p => closedBall p.1 p.2 := by
/- This is deduced from the finite measure case, by using a finite measure with respect to which
the initial sigma-finite measure is absolutely continuous. -/
rcases exists_absolutelyContinuous_isFiniteMeasure μ with ⟨ν, hν, hμν⟩
@@ -1084,22 +1078,14 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
/-! ### Consequences on differentiation of measures -/
-
/-- In a space with the Besicovitch covering property, the set of closed balls with positive radius
forms a Vitali family. This is essentially a restatement of the measurable Besicovitch theorem. -/
protected def vitaliFamily (μ : Measure α) [SigmaFinite μ] : VitaliFamily μ where
setsAt x := (fun r : ℝ => closedBall x r) '' Ioi (0 : ℝ)
- MeasurableSet' := by
- intro x y hy
- obtain ⟨r, _, rfl⟩ : ∃ r : ℝ, 0 < r ∧ closedBall x r = y := by
- simpa only [mem_image, mem_Ioi] using hy
- exact isClosed_ball.measurableSet
- nonempty_interior := by
- intro x y hy
- obtain ⟨r, rpos, rfl⟩ : ∃ r : ℝ, 0 < r ∧ closedBall x r = y := by
- simpa only [mem_image, mem_Ioi] using hy
- simp only [Nonempty.mono ball_subset_interior_closedBall, rpos, nonempty_ball]
- Nontrivial x ε εpos := ⟨closedBall x ε, mem_image_of_mem _ εpos, Subset.refl _⟩
+ MeasurableSet' _ := ball_image_iff.2 fun _ _ ↦ isClosed_ball.measurableSet
+ nonempty_interior _ := ball_image_iff.2 fun r rpos ↦
+ (nonempty_ball.2 rpos).mono ball_subset_interior_closedBall
+ Nontrivial x ε εpos := ⟨closedBall x ε, mem_image_of_mem _ εpos, Subset.rfl⟩
covering := by
intro s f fsubset ffine
let g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
Nonempty
arguments (#9377)
Finset.Nonempty.image_iff
to Finset.image_nonempty
, deprecate the old version;Set.nonempty_image_iff
to Set.image_nonempty
, deprecate the old version;Finset.Nonempty
arguments here and there;Nonempty s
instead of Nonempty (s.image f)
or Nonempty (s.map f)
.@@ -328,12 +328,11 @@ theorem mem_iUnionUpTo_lastStep (x : β) : p.c x ∈ p.iUnionUpTo p.lastStep :=
have B : p.τ⁻¹ * p.R p.lastStep < p.R p.lastStep := by
conv_rhs => rw [← one_mul (p.R p.lastStep)]
exact mul_lt_mul (inv_lt_one p.one_lt_tau) le_rfl Rpos zero_le_one
- obtain ⟨y, hy1, hy2⟩ :
- ∃ y : β, p.c y ∉ p.iUnionUpTo p.lastStep ∧ p.τ⁻¹ * p.R p.lastStep < p.r y := by
+ obtain ⟨y, hy1, hy2⟩ : ∃ y, p.c y ∉ p.iUnionUpTo p.lastStep ∧ p.τ⁻¹ * p.R p.lastStep < p.r y := by
have := exists_lt_of_lt_csSup ?_ B
· simpa only [exists_prop, mem_range, exists_exists_and_eq_and, Subtype.exists,
Subtype.coe_mk]
- rw [← image_univ, nonempty_image_iff]
+ rw [← image_univ, image_nonempty]
exact ⟨⟨_, h⟩, mem_univ _⟩
rcases A y with (Hy | Hy)
· exact hy1 Hy
Pairwise
wherever possible (#9236)
Performed with a regex search for ∀ (.) (.), \1 ≠ \2 →
, and a few variants to catch implicit binders and explicit types.
I have deliberately avoided trying to make the analogous Set.Pairwise
transformation (or any Pairwise (foo on bar)
transformations) in this PR, to keep the diff small.
Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>
@@ -128,7 +128,8 @@ structure Besicovitch.SatelliteConfig (α : Type*) [MetricSpace α] (N : ℕ) (
c : Fin N.succ → α
r : Fin N.succ → ℝ
rpos : ∀ i, 0 < r i
- h : ∀ i j, i ≠ j → r i ≤ dist (c i) (c j) ∧ r j ≤ τ * r i ∨ r j ≤ dist (c j) (c i) ∧ r i ≤ τ * r j
+ h : Pairwise fun i j =>
+ r i ≤ dist (c i) (c j) ∧ r j ≤ τ * r i ∨ r j ≤ dist (c j) (c i) ∧ r i ≤ τ * r j
hlast : ∀ i < last N, r i ≤ dist (c i) (c (last N)) ∧ r (last N) ≤ τ * r i
inter : ∀ i < last N, dist (c i) (c (last N)) ≤ r i + r (last N)
#align besicovitch.satellite_config Besicovitch.SatelliteConfig
@@ -440,7 +441,7 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
h := by
intro a b a_ne_b
wlog G_le : G a ≤ G b generalizing a b
- · exact (this b a a_ne_b.symm (le_of_not_le G_le)).symm
+ · exact (this a_ne_b.symm (le_of_not_le G_le)).symm
have G_lt : G a < G b := by
rcases G_le.lt_or_eq with (H | H); · exact H
have A : (a : ℕ) ≠ b := Fin.val_injective.ne a_ne_b
@@ -310,7 +310,7 @@ theorem lastStep_nonempty :
simp only [iUnionUpTo, not_exists, exists_prop, mem_iUnion, mem_closedBall, not_and, not_le,
Subtype.exists, Subtype.coe_mk] at A
specialize A x H
- simp [hxy] at A
+ simp? [hxy] at A says simp only [hxy, mem_ball, dist_self, not_lt] at A
exact (lt_irrefl _ ((p.rpos (p.index y)).trans_le A)).elim
#align besicovitch.tau_package.last_step_nonempty Besicovitch.TauPackage.lastStep_nonempty
@@ -377,7 +377,8 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
have : k ∈ A := by
simpa only [true_and_iff, mem_univ, Classical.not_not, mem_diff] using
Nat.not_mem_of_lt_sInf hk
- simp [and_assoc, -exists_and_left] at this
+ simp only [mem_iUnion, mem_singleton_iff, exists_prop, Subtype.exists, exists_and_right,
+ and_assoc] at this
simpa only [exists_prop, mem_iUnion, mem_singleton_iff, mem_closedBall, Subtype.exists,
Subtype.coe_mk]
choose! g hg using this
@@ -672,7 +672,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
variable [HasBesicovitchCovering α]
-/-- The measurable Besicovitch covering theorem. Assume that, for any `x` in a set `s`,
+/-- The **measurable Besicovitch covering theorem**. Assume that, for any `x` in a set `s`,
one is given a set of admissible closed balls centered at `x`, with arbitrarily small radii.
Then there exists a disjoint covering of almost all `s` by admissible closed balls centered at some
points of `s`.
This is the supremum of
along with some minor fixes from failures on nightly-testing as Mathlib master
is merged into it.
Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.
I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0
branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.
In particular this includes adjustments for the Lean PRs
We can get rid of all the
local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)
macros across Mathlib (and in any projects that want to write natural number powers of reals).
Changes the default behaviour of simp
to (config := {decide := false})
. This makes simp
(and consequentially norm_num
) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp
or norm_num
to decide
or rfl
, or adding (config := {decide := true})
.
This changed the behaviour of simp
so that simp [f]
will only unfold "fully applied" occurrences of f
. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true })
. We may in future add a syntax for this, e.g. simp [!f]
; please provide feedback! In the meantime, we have made the following changes:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[eqns]
to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp
and Function.flip
.This change in Lean may require further changes down the line (e.g. adding the !f
syntax, and/or upstreaming the special treatment for Function.comp
and Function.flip
, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -928,7 +928,7 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
obtain ⟨u, su, u_open, μu⟩ : ∃ U, U ⊇ s ∧ IsOpen U ∧ μ U ≤ μ s + ε / 2 :=
Set.exists_isOpen_le_add _ _
(by
- simpa only [or_false_iff, Ne.def, ENNReal.div_eq_zero_iff, ENNReal.one_ne_top] using hε)
+ simpa only [or_false, Ne.def, ENNReal.div_eq_zero_iff, ENNReal.two_ne_top] using hε)
have : ∀ x ∈ s, ∃ R > 0, ball x R ⊆ u := fun x hx =>
Metric.mem_nhds_iff.1 (u_open.mem_nhds (su hx))
choose! R hR using this
@@ -946,8 +946,8 @@ theorem exists_closedBall_covering_tsum_measure_le (μ : Measure α) [SigmaFinit
obtain ⟨v, s'v, v_open, μv⟩ : ∃ v, v ⊇ s' ∧ IsOpen v ∧ μ v ≤ μ s' + ε / 2 / N :=
Set.exists_isOpen_le_add _ _
(by
- simp only [hε, ENNReal.nat_ne_top, WithTop.mul_eq_top_iff, Ne.def, ENNReal.div_eq_zero_iff,
- ENNReal.one_ne_top, not_false_iff, and_false_iff, false_and_iff, or_self_iff])
+ simp only [ne_eq, ENNReal.div_eq_zero_iff, hε, ENNReal.two_ne_top, or_self,
+ ENNReal.nat_ne_top, not_false_eq_true])
have : ∀ x ∈ s', ∃ r1 ∈ f x ∩ Ioo (0 : ℝ) 1, closedBall x r1 ⊆ v := by
intro x hx
rcases Metric.mem_nhds_iff.1 (v_open.mem_nhds (s'v hx)) with ⟨r, rpos, hr⟩
rcases
, convert
and congrm
(#7725)
Replace rcases(
with rcases (
. Same thing for convert(
and congrm(
. No other change.
@@ -364,7 +364,7 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
intro j ji _
exact (IH j ji (ji.trans hi)).ne'
suffices sInf (univ \ A) ≠ N by
- rcases(csInf_le (OrderBot.bddBelow (univ \ A)) N_mem).lt_or_eq with (H | H)
+ rcases (csInf_le (OrderBot.bddBelow (univ \ A)) N_mem).lt_or_eq with (H | H)
· exact H
· exact (this H).elim
intro Inf_eq_N
@@ -736,13 +736,13 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
· simp only [Finset.coe_union, pairwiseDisjoint_union, ht.1, true_and_iff, Finset.coe_image]
constructor
· intro p hp q hq hpq
- rcases(mem_image _ _ _).1 hp with ⟨p', p'v, rfl⟩
- rcases(mem_image _ _ _).1 hq with ⟨q', q'v, rfl⟩
+ rcases (mem_image _ _ _).1 hp with ⟨p', p'v, rfl⟩
+ rcases (mem_image _ _ _).1 hq with ⟨q', q'v, rfl⟩
refine' hv p'v q'v fun hp'q' => _
rw [hp'q'] at hpq
exact hpq rfl
· intro p hp q hq hpq
- rcases(mem_image _ _ _).1 hq with ⟨q', q'v, rfl⟩
+ rcases (mem_image _ _ _).1 hq with ⟨q', q'v, rfl⟩
apply disjoint_of_subset_left _ (hr q' (vs' q'v)).2
rw [hB, ← Finset.set_biUnion_coe]
exact subset_biUnion_of_mem (u := fun x : α × ℝ => closedBall x.1 x.2) hp
@@ -868,7 +868,7 @@ theorem exists_disjoint_closedBall_covering_ae (μ : Measure α) [SigmaFinite μ
let t := Prod.fst '' v
have : ∀ x ∈ t, ∃ r : ℝ, (x, r) ∈ v := by
intro x hx
- rcases(mem_image _ _ _).1 hx with ⟨⟨p, q⟩, hp, rfl⟩
+ rcases (mem_image _ _ _).1 hx with ⟨⟨p, q⟩, hp, rfl⟩
exact ⟨q, hp⟩
choose! r hr using this
have im_t : (fun x => (x, r x)) '' t = v := by
We define Alexandrov-discrete spaces as topological spaces where the intersection of a family of open sets is open.
This PR only gives a minimal API because the goal is to ensure that lemma names like isOpen_sInter
are free to use for AlexandrovDiscrete
. The existing lemmas are getting prefixed by Set.Finite
or suffixed by _of_finite
.
@@ -708,8 +708,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
N / (N + 1) * μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.1 p.2) := by
intro t ht
set B := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.1 p.2 with hB
- have B_closed : IsClosed B :=
- isClosed_biUnion (Finset.finite_toSet _) fun i _ => isClosed_ball
+ have B_closed : IsClosed B := isClosed_biUnion_finset fun i _ => isClosed_ball
set s' := s \ B
have : ∀ x ∈ s', ∃ r ∈ f x ∩ Ioo 0 1, Disjoint B (closedBall x r) := by
intro x hx
MulZeroClass.
in mul_zero
/zero_mul
(#6682)
Search&replace MulZeroClass.mul_zero
-> mul_zero
, MulZeroClass.zero_mul
-> zero_mul
.
These were introduced by Mathport, as the full name of mul_zero
is actually MulZeroClass.mul_zero
(it's exported with the short name).
@@ -555,7 +555,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
· have : μ s = 0 := le_bot_iff.1 hμs
refine' ⟨∅, by simp only [Finset.coe_empty, empty_subset], _, _⟩
· simp only [this, Finset.not_mem_empty, diff_empty, iUnion_false, iUnion_empty,
- nonpos_iff_eq_zero, MulZeroClass.mul_zero]
+ nonpos_iff_eq_zero, mul_zero]
· simp only [Finset.coe_empty, pairwiseDisjoint_empty]
cases isEmpty_or_nonempty α
· simp only [eq_empty_of_isEmpty s, measure_empty] at hμs
@@ -810,7 +810,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) zero_lt_one
· simp only [true_or_iff, add_eq_zero_iff, Ne.def, not_false_iff, one_ne_zero, and_false_iff]
· simp only [ENNReal.nat_ne_top, Ne.def, not_false_iff, or_true_iff]
- rw [MulZeroClass.zero_mul] at C
+ rw [zero_mul] at C
apply le_bot_iff.1
exact le_of_tendsto_of_tendsto' tendsto_const_nhds C fun n => (A n).trans (B n)
· refine' (pairwiseDisjoint_iUnion _).2 fun n => (Pu n).1
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -124,7 +124,7 @@ This is the condition `h`.
Finally, the last ball is chosen after all the other ones, meaning that `h` can be strengthened
by keeping only one side of the alternative in `hlast`.
-/
-structure Besicovitch.SatelliteConfig (α : Type _) [MetricSpace α] (N : ℕ) (τ : ℝ) where
+structure Besicovitch.SatelliteConfig (α : Type*) [MetricSpace α] (N : ℕ) (τ : ℝ) where
c : Fin N.succ → α
r : Fin N.succ → ℝ
rpos : ∀ i, 0 < r i
@@ -143,13 +143,13 @@ structure Besicovitch.SatelliteConfig (α : Type _) [MetricSpace α] (N : ℕ) (
there are no satellite configuration of parameter `τ` with `N+1` points. This is the condition that
guarantees that the measurable Besicovitch covering theorem holds. It is satisfied by
finite-dimensional real vector spaces. -/
-class HasBesicovitchCovering (α : Type _) [MetricSpace α] : Prop where
+class HasBesicovitchCovering (α : Type*) [MetricSpace α] : Prop where
no_satelliteConfig : ∃ (N : ℕ) (τ : ℝ), 1 < τ ∧ IsEmpty (Besicovitch.SatelliteConfig α N τ)
#align has_besicovitch_covering HasBesicovitchCovering
#align has_besicovitch_covering.no_satellite_config HasBesicovitchCovering.no_satelliteConfig
/-- There is always a satellite configuration with a single point. -/
-instance Besicovitch.SatelliteConfig.instInhabited {α : Type _} {τ : ℝ}
+instance Besicovitch.SatelliteConfig.instInhabited {α : Type*} {τ : ℝ}
[Inhabited α] [MetricSpace α] : Inhabited (Besicovitch.SatelliteConfig α 0 τ) :=
⟨{ c := default
r := fun _ => 1
@@ -165,7 +165,7 @@ namespace Besicovitch
namespace SatelliteConfig
-variable {α : Type _} [MetricSpace α] {N : ℕ} {τ : ℝ} (a : SatelliteConfig α N τ)
+variable {α : Type*} [MetricSpace α] {N : ℕ} {τ : ℝ} (a : SatelliteConfig α N τ)
theorem inter' (i : Fin N.succ) : dist (a.c i) (a.c (last N)) ≤ a.r i + a.r (last N) := by
rcases lt_or_le i (last N) with (H | H)
@@ -189,7 +189,7 @@ end SatelliteConfig
/-- A ball package is a family of balls in a metric space with positive bounded radii. -/
-structure BallPackage (β : Type _) (α : Type _) where
+structure BallPackage (β : Type*) (α : Type*) where
c : β → α
r : β → ℝ
rpos : ∀ b, 0 < r b
@@ -203,7 +203,7 @@ structure BallPackage (β : Type _) (α : Type _) where
#align besicovitch.ball_package.r_le Besicovitch.BallPackage.r_le
/-- The ball package made of unit balls. -/
-def unitBallPackage (α : Type _) : BallPackage α α where
+def unitBallPackage (α : Type*) : BallPackage α α where
c := id
r _ := 1
rpos _ := zero_lt_one
@@ -211,7 +211,7 @@ def unitBallPackage (α : Type _) : BallPackage α α where
r_le _ := le_rfl
#align besicovitch.unit_ball_package Besicovitch.unitBallPackage
-instance BallPackage.instInhabited (α : Type _) : Inhabited (BallPackage α α) :=
+instance BallPackage.instInhabited (α : Type*) : Inhabited (BallPackage α α) :=
⟨unitBallPackage α⟩
#align besicovitch.ball_package.inhabited Besicovitch.BallPackage.instInhabited
@@ -219,20 +219,20 @@ instance BallPackage.instInhabited (α : Type _) : Inhabited (BallPackage α α)
together with enough data to proceed with the Besicovitch greedy algorithm. We register this in
a single structure to make sure that all our constructions in this algorithm only depend on
one variable. -/
-structure TauPackage (β : Type _) (α : Type _) extends BallPackage β α where
+structure TauPackage (β : Type*) (α : Type*) extends BallPackage β α where
τ : ℝ
one_lt_tau : 1 < τ
#align besicovitch.tau_package Besicovitch.TauPackage
#align besicovitch.tau_package.τ Besicovitch.TauPackage.τ
#align besicovitch.tau_package.one_lt_tau Besicovitch.TauPackage.one_lt_tau
-instance TauPackage.instInhabited (α : Type _) : Inhabited (TauPackage α α) :=
+instance TauPackage.instInhabited (α : Type*) : Inhabited (TauPackage α α) :=
⟨{ unitBallPackage α with
τ := 2
one_lt_tau := one_lt_two }⟩
#align besicovitch.tau_package.inhabited Besicovitch.TauPackage.instInhabited
-variable {α : Type _} [MetricSpace α] {β : Type u}
+variable {α : Type*} [MetricSpace α] {β : Type u}
namespace TauPackage
@@ -1154,7 +1154,7 @@ variable [MetricSpace β] [MeasurableSpace β] [BorelSpace β] [SecondCountableT
[HasBesicovitchCovering β]
/-- In a space with the Besicovitch covering property, the ratio of the measure of balls converges
-almost surely to to the Radon-Nikodym derivative. -/
+almost surely to the Radon-Nikodym derivative. -/
theorem ae_tendsto_rnDeriv (ρ μ : Measure β) [IsLocallyFiniteMeasure μ] [IsLocallyFiniteMeasure ρ] :
∀ᵐ x ∂μ,
Tendsto (fun r => ρ (closedBall x r) / μ (closedBall x r)) (𝓝[>] 0) (𝓝 (ρ.rnDeriv μ x)) := by
@@ -2,11 +2,6 @@
Copyright (c) 2021 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-
-! This file was ported from Lean 3 source module measure_theory.covering.besicovitch
-! leanprover-community/mathlib commit 5f6e827d81dfbeb6151d7016586ceeb0099b9655
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.MeasureTheory.Covering.Differentiation
import Mathlib.MeasureTheory.Covering.VitaliFamily
@@ -15,6 +10,8 @@ import Mathlib.MeasureTheory.Measure.Regular
import Mathlib.SetTheory.Ordinal.Arithmetic
import Mathlib.Topology.MetricSpace.Basic
+#align_import measure_theory.covering.besicovitch from "leanprover-community/mathlib"@"5f6e827d81dfbeb6151d7016586ceeb0099b9655"
+
/-!
# Besicovitch covering theorems
@@ -384,7 +384,7 @@ theorem color_lt {i : Ordinal.{u}} (hi : i < p.lastStep) {N : ℕ}
simpa only [exists_prop, mem_iUnion, mem_singleton_iff, mem_closedBall, Subtype.exists,
Subtype.coe_mk]
choose! g hg using this
- -- Choose for each `k < N` an ordinal `G k < i` giving a ball of color `k` intersecting
+ -- Choose for each `k < N` an ordinal `G k < i` giving a ball of color `k` intersecting
-- the last ball.
let G : ℕ → Ordinal := fun n => if n = N then i else g n
have color_G : ∀ n, n ≤ N → p.color (G n) = n := by
This is the second half of the changes originally in #5699, removing all occurrences of ;
after a space and implementing a linter rule to enforce it.
In most cases this 2-character substring has a space after it, so the following command was run first:
find . -type f -name "*.lean" -exec sed -i -E 's/ ; /; /g' {} \;
The remaining cases were few enough in number that they were done manually.
@@ -669,7 +669,7 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
simpa only [mem_image, Finset.mem_coe, Finset.coe_image] using hk
obtain ⟨l', _, rfl⟩ : ∃ l' : u i, l' ∈ w ∧ ↑l' = l := by
simpa only [mem_image, Finset.mem_coe, Finset.coe_image] using hl
- have k'nel' : (k' : s) ≠ l' := by intro h; rw [h] at hkl ; exact hkl rfl
+ have k'nel' : (k' : s) ≠ l' := by intro h; rw [h] at hkl; exact hkl rfl
exact hu i k'.2 l'.2 k'nel'
#align besicovitch.exist_finset_disjoint_balls_large_measure Besicovitch.exist_finset_disjoint_balls_large_measure
∑'
precedence (#5615)
∑
, ∏
and variants).([^a-zA-Zα-ωΑ-Ω'𝓝ℳ₀𝕂ₛ)]) \(([∑∏][^()∑∏]*,[^()∑∏:]*)\) ([⊂⊆=<≤])
replaced by $1 $2 $3
@@ -596,9 +596,9 @@ theorem exist_finset_disjoint_balls_large_measure (μ : Measure α) [IsFiniteMea
refine' mem_iUnion.2 ⟨i, ⟨hx, _⟩⟩
simp only [exists_prop, mem_iUnion, SetCoe.exists, exists_and_right, Subtype.coe_mk]
exact ⟨y, ⟨y.2, by simpa only [Subtype.coe_eta]⟩, ball_subset_closedBall h'⟩
- have S : (∑ _i : Fin N, μ s / N) ≤ ∑ i, μ (s ∩ v i) :=
+ have S : ∑ _i : Fin N, μ s / N ≤ ∑ i, μ (s ∩ v i) :=
calc
- (∑ _i : Fin N, μ s / N) = μ s := by
+ ∑ _i : Fin N, μ s / N = μ s := by
simp only [Finset.card_fin, Finset.sum_const, nsmul_eq_mul]
rw [ENNReal.mul_div_cancel']
· simp only [Npos, Ne.def, Nat.cast_eq_zero, not_false_iff]
@@ -903,7 +903,7 @@ theorem exists_disjoint_closedBall_covering_ae (μ : Measure α) [SigmaFinite μ
rcases (mem_image _ _ _).1 hx with ⟨⟨p, q⟩, _, rfl⟩
exact vg _ (hr _ hx)
· have :
- (⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) =
+ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) =
⋃ (p : α × ℝ) (_ : p ∈ (fun x => (x, r x)) '' t), closedBall p.1 p.2 :=
by conv_rhs => rw [biUnion_image]
rw [this, im_t]
@@ -766,7 +766,7 @@ theorem exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux (μ : Measur
a proportion `1/(N+1)` of leftover points. Iterating `F`, one will get larger and larger good
coverings, missing in the end only a measure-zero set. -/
choose! F hF using this
- let u n := (F^[n]) ∅
+ let u n := F^[n] ∅
have u_succ : ∀ n : ℕ, u n.succ = F (u n) := fun n => by
simp only [Function.comp_apply, Function.iterate_succ']
have Pu : ∀ n, P (u n) := by
@@ -144,7 +144,7 @@ structure Besicovitch.SatelliteConfig (α : Type _) [MetricSpace α] (N : ℕ) (
/-- A metric space has the Besicovitch covering property if there exist `N` and `τ > 1` such that
there are no satellite configuration of parameter `τ` with `N+1` points. This is the condition that
-guarantees that the measurable Besicovitch covering theorem holds. It is satified by
+guarantees that the measurable Besicovitch covering theorem holds. It is satisfied by
finite-dimensional real vector spaces. -/
class HasBesicovitchCovering (α : Type _) [MetricSpace α] : Prop where
no_satelliteConfig : ∃ (N : ℕ) (τ : ℝ), 1 < τ ∧ IsEmpty (Besicovitch.SatelliteConfig α N τ)
The unported dependencies are
algebra.order.module
init.core
linear_algebra.free_module.finite.rank
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
linear_algebra.free_module.rank
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file