[GOAL]
α : Type u_1
τ : ℝ
inst✝¹ : Inhabited α
inst✝ : MetricSpace α
i : Fin (0 + 1)
hi : i < last 0
⊢ (fun x => 1) i ≤ dist (default i) (default (last 0)) ∧ (fun x => 1) (last 0) ≤ τ * (fun x => 1) i
[PROOFSTEP]
rw [Subsingleton.elim (α := Fin 1) i (last 0)] at hi
[GOAL]
α : Type u_1
τ : ℝ
inst✝¹ : Inhabited α
inst✝ : MetricSpace α
i : Fin (0 + 1)
hi : last 0 < last 0
⊢ (fun x => 1) i ≤ dist (default i) (default (last 0)) ∧ (fun x => 1) (last 0) ≤ τ * (fun x => 1) i
[PROOFSTEP]
exact (lt_irrefl _ hi).elim
[GOAL]
α : Type u_1
τ : ℝ
inst✝¹ : Inhabited α
inst✝ : MetricSpace α
i : Fin (0 + 1)
hi : i < last 0
⊢ dist (default i) (default (last 0)) ≤ (fun x => 1) i + (fun x => 1) (last 0)
[PROOFSTEP]
rw [Subsingleton.elim (α := Fin 1) i (last 0)] at hi
[GOAL]
α : Type u_1
τ : ℝ
inst✝¹ : Inhabited α
inst✝ : MetricSpace α
i : Fin (0 + 1)
hi : last 0 < last 0
⊢ dist (default i) (default (last 0)) ≤ (fun x => 1) i + (fun x => 1) (last 0)
[PROOFSTEP]
exact (lt_irrefl _ hi).elim
[GOAL]
α : Type u_1
inst✝ : MetricSpace α
N : ℕ
τ : ℝ
a : SatelliteConfig α N τ
i : Fin (Nat.succ N)
⊢ dist (c a i) (c a (last N)) ≤ r a i + r a (last N)
[PROOFSTEP]
rcases lt_or_le i (last N) with (H | H)
[GOAL]
case inl
α : Type u_1
inst✝ : MetricSpace α
N : ℕ
τ : ℝ
a : SatelliteConfig α N τ
i : Fin (Nat.succ N)
H : i < last N
⊢ dist (c a i) (c a (last N)) ≤ r a i + r a (last N)
[PROOFSTEP]
exact a.inter i H
[GOAL]
case inr
α : Type u_1
inst✝ : MetricSpace α
N : ℕ
τ : ℝ
a : SatelliteConfig α N τ
i : Fin (Nat.succ N)
H : last N ≤ i
⊢ dist (c a i) (c a (last N)) ≤ r a i + r a (last N)
[PROOFSTEP]
have I : i = last N := top_le_iff.1 H
[GOAL]
case inr
α : Type u_1
inst✝ : MetricSpace α
N : ℕ
τ : ℝ
a : SatelliteConfig α N τ
i : Fin (Nat.succ N)
H : last N ≤ i
I : i = last N
⊢ dist (c a i) (c a (last N)) ≤ r a i + r a (last N)
[PROOFSTEP]
have := (a.rpos (last N)).le
[GOAL]
case inr
α : Type u_1
inst✝ : MetricSpace α
N : ℕ
τ : ℝ
a : SatelliteConfig α N τ
i : Fin (Nat.succ N)
H : last N ≤ i
I : i = last N
this : 0 ≤ r a (last N)
⊢ dist (c a i) (c a (last N)) ≤ r a i + r a (last N)
[PROOFSTEP]
simp only [I, add_nonneg this this, dist_self]
[GOAL]
α : Type u_1
inst✝ : MetricSpace α
N : ℕ
τ : ℝ
a : SatelliteConfig α N τ
i : Fin (Nat.succ N)
h : 1 ≤ τ
⊢ r a (last N) ≤ τ * r a i
[PROOFSTEP]
rcases lt_or_le i (last N) with (H | H)
[GOAL]
case inl
α : Type u_1
inst✝ : MetricSpace α
N : ℕ
τ : ℝ
a : SatelliteConfig α N τ
i : Fin (Nat.succ N)
h : 1 ≤ τ
H : i < last N
⊢ r a (last N) ≤ τ * r a i
[PROOFSTEP]
exact (a.hlast i H).2
[GOAL]
case inr
α : Type u_1
inst✝ : MetricSpace α
N : ℕ
τ : ℝ
a : SatelliteConfig α N τ
i : Fin (Nat.succ N)
h : 1 ≤ τ
H : last N ≤ i
⊢ r a (last N) ≤ τ * r a i
[PROOFSTEP]
have : i = last N := top_le_iff.1 H
[GOAL]
case inr
α : Type u_1
inst✝ : MetricSpace α
N : ℕ
τ : ℝ
a : SatelliteConfig α N τ
i : Fin (Nat.succ N)
h : 1 ≤ τ
H : last N ≤ i
this : i = last N
⊢ r a (last N) ≤ τ * r a i
[PROOFSTEP]
rw [this]
[GOAL]
case inr
α : Type u_1
inst✝ : MetricSpace α
N : ℕ
τ : ℝ
a : SatelliteConfig α N τ
i : Fin (Nat.succ N)
h : 1 ≤ τ
H : last N ≤ i
this : i = last N
⊢ r a (last N) ≤ τ * r a (last N)
[PROOFSTEP]
exact le_mul_of_one_le_left (a.rpos _).le h
[GOAL]
a✝ : Ordinal.{u}
i : Ordinal.{u} := a✝
j : { j // j < i }
⊢ (invImage (fun a => a) Ordinal.wellFoundedRelation).1 (↑j) a✝
[PROOFSTEP]
exact j.2
[GOAL]
a✝ : Ordinal.{u}
i : Ordinal.{u} := a✝
j : { j // j < i }
⊢ (invImage (fun a => a) Ordinal.wellFoundedRelation).1 (↑j) a✝
[PROOFSTEP]
exact j.2
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
⊢ Monotone (iUnionUpTo p)
[PROOFSTEP]
intro i j hij
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i j : Ordinal.{u}
hij : i ≤ j
⊢ iUnionUpTo p i ≤ iUnionUpTo p j
[PROOFSTEP]
simp only [iUnionUpTo]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i j : Ordinal.{u}
hij : i ≤ j
⊢ ⋃ (j : { j // j < i }),
      ball (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ≤
    ⋃ (j_1 : { j_1 // j_1 < j }),
      ball (BallPackage.c p.toBallPackage (index p ↑j_1)) (BallPackage.r p.toBallPackage (index p ↑j_1))
[PROOFSTEP]
exact iUnion_mono' fun r => ⟨⟨r, r.2.trans_le hij⟩, Subset.rfl⟩
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
a✝ : Ordinal.{u}
i : Ordinal.{u} := a✝
j : { j // j < i }
x✝ :
  Set.Nonempty
    (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
      closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))
⊢ (invImage (fun a => a) Ordinal.wellFoundedRelation).1 (↑j) a✝
[PROOFSTEP]
exact j.2
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
⊢ Set.Nonempty
    {i | ¬∃ b, ¬BallPackage.c p.toBallPackage b ∈ iUnionUpTo p i ∧ R p i ≤ p.τ * BallPackage.r p.toBallPackage b}
[PROOFSTEP]
by_contra h
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
h :
  ¬Set.Nonempty
      {i | ¬∃ b, ¬BallPackage.c p.toBallPackage b ∈ iUnionUpTo p i ∧ R p i ≤ p.τ * BallPackage.r p.toBallPackage b}
⊢ False
[PROOFSTEP]
suffices H : Function.Injective p.index
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
h :
  ¬Set.Nonempty
      {i | ¬∃ b, ¬BallPackage.c p.toBallPackage b ∈ iUnionUpTo p i ∧ R p i ≤ p.τ * BallPackage.r p.toBallPackage b}
H : Function.Injective (index p)
⊢ False
case H
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
h :
  ¬Set.Nonempty
      {i | ¬∃ b, ¬BallPackage.c p.toBallPackage b ∈ iUnionUpTo p i ∧ R p i ≤ p.τ * BallPackage.r p.toBallPackage b}
⊢ Function.Injective (index p)
[PROOFSTEP]
exact not_injective_of_ordinal p.index H
[GOAL]
case H
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
h :
  ¬Set.Nonempty
      {i | ¬∃ b, ¬BallPackage.c p.toBallPackage b ∈ iUnionUpTo p i ∧ R p i ≤ p.τ * BallPackage.r p.toBallPackage b}
⊢ Function.Injective (index p)
[PROOFSTEP]
intro x y hxy
[GOAL]
case H
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
h :
  ¬Set.Nonempty
      {i | ¬∃ b, ¬BallPackage.c p.toBallPackage b ∈ iUnionUpTo p i ∧ R p i ≤ p.τ * BallPackage.r p.toBallPackage b}
x y : Ordinal.{u}
hxy : index p x = index p y
⊢ x = y
[PROOFSTEP]
wlog x_le_y : x ≤ y generalizing x y
[GOAL]
case H.inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
h :
  ¬Set.Nonempty
      {i | ¬∃ b, ¬BallPackage.c p.toBallPackage b ∈ iUnionUpTo p i ∧ R p i ≤ p.τ * BallPackage.r p.toBallPackage b}
x y : Ordinal.{u}
hxy : index p x = index p y
this : ∀ ⦃x y : Ordinal.{u}⦄, index p x = index p y → x ≤ y → x = y
x_le_y : ¬x ≤ y
⊢ x = y
[PROOFSTEP]
exact (this hxy.symm (le_of_not_le x_le_y)).symm
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
h :
  ¬Set.Nonempty
      {i | ¬∃ b, ¬BallPackage.c p.toBallPackage b ∈ iUnionUpTo p i ∧ R p i ≤ p.τ * BallPackage.r p.toBallPackage b}
x y : Ordinal.{u}
hxy : index p x = index p y
x_le_y : x ≤ y
⊢ x = y
[PROOFSTEP]
rcases eq_or_lt_of_le x_le_y with (rfl | H)
[GOAL]
case inl
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
h :
  ¬Set.Nonempty
      {i | ¬∃ b, ¬BallPackage.c p.toBallPackage b ∈ iUnionUpTo p i ∧ R p i ≤ p.τ * BallPackage.r p.toBallPackage b}
x : Ordinal.{u}
hxy : index p x = index p x
x_le_y : x ≤ x
⊢ x = x
[PROOFSTEP]
rfl
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
h :
  ¬Set.Nonempty
      {i | ¬∃ b, ¬BallPackage.c p.toBallPackage b ∈ iUnionUpTo p i ∧ R p i ≤ p.τ * BallPackage.r p.toBallPackage b}
x y : Ordinal.{u}
hxy : index p x = index p y
x_le_y : x ≤ y
H : x < y
⊢ x = y
[PROOFSTEP]
simp only [nonempty_def, not_exists, exists_prop, not_and, not_lt, not_le, mem_setOf_eq, not_forall] at h
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x y : Ordinal.{u}
hxy : index p x = index p y
x_le_y : x ≤ y
H : x < y
h :
  ∀ (x : Ordinal.{u}),
    ∃ x_1, ¬BallPackage.c p.toBallPackage x_1 ∈ iUnionUpTo p x ∧ R p x ≤ p.τ * BallPackage.r p.toBallPackage x_1
⊢ x = y
[PROOFSTEP]
specialize h y
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x y : Ordinal.{u}
hxy : index p x = index p y
x_le_y : x ≤ y
H : x < y
h : ∃ x, ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p y ∧ R p y ≤ p.τ * BallPackage.r p.toBallPackage x
⊢ x = y
[PROOFSTEP]
have A : p.c (p.index y) ∉ p.iUnionUpTo y :=
  by
  have : p.index y = Classical.epsilon fun b : β => p.c b ∉ p.iUnionUpTo y ∧ p.R y ≤ p.τ * p.r b := by
    rw [TauPackage.index]; rfl
  rw [this]
  exact (Classical.epsilon_spec h).1
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x y : Ordinal.{u}
hxy : index p x = index p y
x_le_y : x ≤ y
H : x < y
h : ∃ x, ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p y ∧ R p y ≤ p.τ * BallPackage.r p.toBallPackage x
⊢ ¬BallPackage.c p.toBallPackage (index p y) ∈ iUnionUpTo p y
[PROOFSTEP]
have : p.index y = Classical.epsilon fun b : β => p.c b ∉ p.iUnionUpTo y ∧ p.R y ≤ p.τ * p.r b := by
  rw [TauPackage.index]; rfl
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x y : Ordinal.{u}
hxy : index p x = index p y
x_le_y : x ≤ y
H : x < y
h : ∃ x, ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p y ∧ R p y ≤ p.τ * BallPackage.r p.toBallPackage x
⊢ index p y =
    Classical.epsilon fun b =>
      ¬BallPackage.c p.toBallPackage b ∈ iUnionUpTo p y ∧ R p y ≤ p.τ * BallPackage.r p.toBallPackage b
[PROOFSTEP]
rw [TauPackage.index]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x y : Ordinal.{u}
hxy : index p x = index p y
x_le_y : x ≤ y
H : x < y
h : ∃ x, ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p y ∧ R p y ≤ p.τ * BallPackage.r p.toBallPackage x
⊢ (Classical.epsilon fun b =>
      ¬BallPackage.c p.toBallPackage b ∈
            ⋃ (j : { j // j < y }),
              ball (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∧
        ⨆ (b :
            { b //
              ¬BallPackage.c p.toBallPackage b ∈
                  ⋃ (j : { j // j < y }),
                    ball (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) }),
            BallPackage.r p.toBallPackage ↑b ≤
          p.τ * BallPackage.r p.toBallPackage b) =
    Classical.epsilon fun b =>
      ¬BallPackage.c p.toBallPackage b ∈ iUnionUpTo p y ∧ R p y ≤ p.τ * BallPackage.r p.toBallPackage b
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x y : Ordinal.{u}
hxy : index p x = index p y
x_le_y : x ≤ y
H : x < y
h : ∃ x, ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p y ∧ R p y ≤ p.τ * BallPackage.r p.toBallPackage x
this :
  index p y =
    Classical.epsilon fun b =>
      ¬BallPackage.c p.toBallPackage b ∈ iUnionUpTo p y ∧ R p y ≤ p.τ * BallPackage.r p.toBallPackage b
⊢ ¬BallPackage.c p.toBallPackage (index p y) ∈ iUnionUpTo p y
[PROOFSTEP]
rw [this]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x y : Ordinal.{u}
hxy : index p x = index p y
x_le_y : x ≤ y
H : x < y
h : ∃ x, ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p y ∧ R p y ≤ p.τ * BallPackage.r p.toBallPackage x
this :
  index p y =
    Classical.epsilon fun b =>
      ¬BallPackage.c p.toBallPackage b ∈ iUnionUpTo p y ∧ R p y ≤ p.τ * BallPackage.r p.toBallPackage b
⊢ ¬BallPackage.c p.toBallPackage
        (Classical.epsilon fun b =>
          ¬BallPackage.c p.toBallPackage b ∈ iUnionUpTo p y ∧ R p y ≤ p.τ * BallPackage.r p.toBallPackage b) ∈
      iUnionUpTo p y
[PROOFSTEP]
exact (Classical.epsilon_spec h).1
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x y : Ordinal.{u}
hxy : index p x = index p y
x_le_y : x ≤ y
H : x < y
h : ∃ x, ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p y ∧ R p y ≤ p.τ * BallPackage.r p.toBallPackage x
A : ¬BallPackage.c p.toBallPackage (index p y) ∈ iUnionUpTo p y
⊢ x = y
[PROOFSTEP]
simp only [iUnionUpTo, not_exists, exists_prop, mem_iUnion, mem_closedBall, not_and, not_le, Subtype.exists,
  Subtype.coe_mk] at A
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x y : Ordinal.{u}
hxy : index p x = index p y
x_le_y : x ≤ y
H : x < y
h : ∃ x, ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p y ∧ R p y ≤ p.τ * BallPackage.r p.toBallPackage x
A :
  ∀ (x : Ordinal.{u}),
    x < y →
      ¬BallPackage.c p.toBallPackage (index p y) ∈
          ball (BallPackage.c p.toBallPackage (index p x)) (BallPackage.r p.toBallPackage (index p x))
⊢ x = y
[PROOFSTEP]
specialize A x H
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x y : Ordinal.{u}
hxy : index p x = index p y
x_le_y : x ≤ y
H : x < y
h : ∃ x, ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p y ∧ R p y ≤ p.τ * BallPackage.r p.toBallPackage x
A :
  ¬BallPackage.c p.toBallPackage (index p y) ∈
      ball (BallPackage.c p.toBallPackage (index p x)) (BallPackage.r p.toBallPackage (index p x))
⊢ x = y
[PROOFSTEP]
simp [hxy] at A
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x y : Ordinal.{u}
hxy : index p x = index p y
x_le_y : x ≤ y
H : x < y
h : ∃ x, ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p y ∧ R p y ≤ p.τ * BallPackage.r p.toBallPackage x
A : BallPackage.r p.toBallPackage (index p y) ≤ 0
⊢ x = y
[PROOFSTEP]
exact (lt_irrefl _ ((p.rpos (p.index y)).trans_le A)).elim
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
⊢ BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
[PROOFSTEP]
have A : ∀ z : β, p.c z ∈ p.iUnionUpTo p.lastStep ∨ p.τ * p.r z < p.R p.lastStep :=
  by
  have : p.lastStep ∈ {i | ¬∃ b : β, p.c b ∉ p.iUnionUpTo i ∧ p.R i ≤ p.τ * p.r b} := csInf_mem p.lastStep_nonempty
  simpa only [not_exists, mem_setOf_eq, not_and_or, not_le, not_not_mem]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
⊢ ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
[PROOFSTEP]
have : p.lastStep ∈ {i | ¬∃ b : β, p.c b ∉ p.iUnionUpTo i ∧ p.R i ≤ p.τ * p.r b} := csInf_mem p.lastStep_nonempty
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
this :
  lastStep p ∈
    {i | ¬∃ b, ¬BallPackage.c p.toBallPackage b ∈ iUnionUpTo p i ∧ R p i ≤ p.τ * BallPackage.r p.toBallPackage b}
⊢ ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
[PROOFSTEP]
simpa only [not_exists, mem_setOf_eq, not_and_or, not_le, not_not_mem]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
⊢ BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
[PROOFSTEP]
by_contra h
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
⊢ False
[PROOFSTEP]
rcases A x with (H | H)
[GOAL]
case inl
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
⊢ False
[PROOFSTEP]
exact h H
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
⊢ False
[PROOFSTEP]
have Rpos : 0 < p.R p.lastStep := by apply lt_trans (mul_pos (_root_.zero_lt_one.trans p.one_lt_tau) (p.rpos _)) H
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
⊢ 0 < R p (lastStep p)
[PROOFSTEP]
apply lt_trans (mul_pos (_root_.zero_lt_one.trans p.one_lt_tau) (p.rpos _)) H
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
Rpos : 0 < R p (lastStep p)
⊢ False
[PROOFSTEP]
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
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
Rpos : 0 < R p (lastStep p)
⊢ p.τ⁻¹ * R p (lastStep p) < R p (lastStep p)
[PROOFSTEP]
conv_rhs => rw [← one_mul (p.R p.lastStep)]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
Rpos : 0 < R p (lastStep p)
| R p (lastStep p)
[PROOFSTEP]
rw [← one_mul (p.R p.lastStep)]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
Rpos : 0 < R p (lastStep p)
| R p (lastStep p)
[PROOFSTEP]
rw [← one_mul (p.R p.lastStep)]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
Rpos : 0 < R p (lastStep p)
| R p (lastStep p)
[PROOFSTEP]
rw [← one_mul (p.R p.lastStep)]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
Rpos : 0 < R p (lastStep p)
⊢ p.τ⁻¹ * R p (lastStep p) < 1 * R p (lastStep p)
[PROOFSTEP]
exact mul_lt_mul (inv_lt_one p.one_lt_tau) le_rfl Rpos zero_le_one
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
Rpos : 0 < R p (lastStep p)
B : p.τ⁻¹ * R p (lastStep p) < R p (lastStep p)
⊢ False
[PROOFSTEP]
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]
  exact ⟨⟨_, h⟩, mem_univ _⟩
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
Rpos : 0 < R p (lastStep p)
B : p.τ⁻¹ * R p (lastStep p) < R p (lastStep p)
⊢ ∃ y,
    ¬BallPackage.c p.toBallPackage y ∈ iUnionUpTo p (lastStep p) ∧
      p.τ⁻¹ * R p (lastStep p) < BallPackage.r p.toBallPackage y
[PROOFSTEP]
have := exists_lt_of_lt_csSup ?_ B
[GOAL]
case refine_2
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
Rpos : 0 < R p (lastStep p)
B : p.τ⁻¹ * R p (lastStep p) < R p (lastStep p)
this : ∃ a, (a ∈ range fun b => BallPackage.r p.toBallPackage ↑b) ∧ p.τ⁻¹ * R p (lastStep p) < a
⊢ ∃ y,
    ¬BallPackage.c p.toBallPackage y ∈ iUnionUpTo p (lastStep p) ∧
      p.τ⁻¹ * R p (lastStep p) < BallPackage.r p.toBallPackage y
[PROOFSTEP]
simpa only [exists_prop, mem_range, exists_exists_and_eq_and, Subtype.exists, Subtype.coe_mk]
[GOAL]
case refine_1
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
Rpos : 0 < R p (lastStep p)
B : p.τ⁻¹ * R p (lastStep p) < R p (lastStep p)
⊢ Set.Nonempty (range fun b => BallPackage.r p.toBallPackage ↑b)
[PROOFSTEP]
rw [← image_univ, nonempty_image_iff]
[GOAL]
case refine_1
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
Rpos : 0 < R p (lastStep p)
B : p.τ⁻¹ * R p (lastStep p) < R p (lastStep p)
⊢ Set.Nonempty univ
[PROOFSTEP]
exact ⟨⟨_, h⟩, mem_univ _⟩
[GOAL]
case inr.intro.intro
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
Rpos : 0 < R p (lastStep p)
B : p.τ⁻¹ * R p (lastStep p) < R p (lastStep p)
y : β
hy1 : ¬BallPackage.c p.toBallPackage y ∈ iUnionUpTo p (lastStep p)
hy2 : p.τ⁻¹ * R p (lastStep p) < BallPackage.r p.toBallPackage y
⊢ False
[PROOFSTEP]
rcases A y with (Hy | Hy)
[GOAL]
case inr.intro.intro.inl
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
Rpos : 0 < R p (lastStep p)
B : p.τ⁻¹ * R p (lastStep p) < R p (lastStep p)
y : β
hy1 : ¬BallPackage.c p.toBallPackage y ∈ iUnionUpTo p (lastStep p)
hy2 : p.τ⁻¹ * R p (lastStep p) < BallPackage.r p.toBallPackage y
Hy : BallPackage.c p.toBallPackage y ∈ iUnionUpTo p (lastStep p)
⊢ False
[PROOFSTEP]
exact hy1 Hy
[GOAL]
case inr.intro.intro.inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
Rpos : 0 < R p (lastStep p)
B : p.τ⁻¹ * R p (lastStep p) < R p (lastStep p)
y : β
hy1 : ¬BallPackage.c p.toBallPackage y ∈ iUnionUpTo p (lastStep p)
hy2 : p.τ⁻¹ * R p (lastStep p) < BallPackage.r p.toBallPackage y
Hy : p.τ * BallPackage.r p.toBallPackage y < R p (lastStep p)
⊢ False
[PROOFSTEP]
rw [← div_eq_inv_mul] at hy2
[GOAL]
case inr.intro.intro.inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
Rpos : 0 < R p (lastStep p)
B : p.τ⁻¹ * R p (lastStep p) < R p (lastStep p)
y : β
hy1 : ¬BallPackage.c p.toBallPackage y ∈ iUnionUpTo p (lastStep p)
hy2 : R p (lastStep p) / p.τ < BallPackage.r p.toBallPackage y
Hy : p.τ * BallPackage.r p.toBallPackage y < R p (lastStep p)
⊢ False
[PROOFSTEP]
have := (div_le_iff' (_root_.zero_lt_one.trans p.one_lt_tau)).1 hy2.le
[GOAL]
case inr.intro.intro.inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
x : β
A :
  ∀ (z : β),
    BallPackage.c p.toBallPackage z ∈ iUnionUpTo p (lastStep p) ∨
      p.τ * BallPackage.r p.toBallPackage z < R p (lastStep p)
h : ¬BallPackage.c p.toBallPackage x ∈ iUnionUpTo p (lastStep p)
H : p.τ * BallPackage.r p.toBallPackage x < R p (lastStep p)
Rpos : 0 < R p (lastStep p)
B : p.τ⁻¹ * R p (lastStep p) < R p (lastStep p)
y : β
hy1 : ¬BallPackage.c p.toBallPackage y ∈ iUnionUpTo p (lastStep p)
hy2 : R p (lastStep p) / p.τ < BallPackage.r p.toBallPackage y
Hy : p.τ * BallPackage.r p.toBallPackage y < R p (lastStep p)
this : R p (lastStep p) ≤ p.τ * BallPackage.r p.toBallPackage y
⊢ False
[PROOFSTEP]
exact lt_irrefl _ (Hy.trans_le this)
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i : Ordinal.{u}
hi : i < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
⊢ color p i < N
[PROOFSTEP]
induction' i using Ordinal.induction with i IH
[GOAL]
case h
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
⊢ color p i < N
[PROOFSTEP]
let A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    (closedBall (p.c (p.index j)) (p.r (p.index j)) ∩ closedBall (p.c (p.index i)) (p.r (p.index i))).Nonempty),
    {p.color j}
[GOAL]
case h
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
⊢ color p i < N
[PROOFSTEP]
have color_i : p.color i = sInf (univ \ A) := by rw [color]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
⊢ color p i = sInf (univ \ A)
[PROOFSTEP]
rw [color]
[GOAL]
case h
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
⊢ color p i < N
[PROOFSTEP]
rw [color_i]
[GOAL]
case h
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
⊢ sInf (univ \ A) < N
[PROOFSTEP]
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]
  intro j ji _
  exact (IH j ji (ji.trans hi)).ne'
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
⊢ N ∈ univ \ A
[PROOFSTEP]
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]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
⊢ ∀ (x : Ordinal.{u}),
    x < i →
      Set.Nonempty
          (closedBall (BallPackage.c p.toBallPackage (index p x)) (BallPackage.r p.toBallPackage (index p x)) ∩
            closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) →
        ¬N = color p x
[PROOFSTEP]
intro j ji _
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
j : Ordinal.{u}
ji : j < i
a✝ :
  Set.Nonempty
    (closedBall (BallPackage.c p.toBallPackage (index p j)) (BallPackage.r p.toBallPackage (index p j)) ∩
      closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))
⊢ ¬N = color p j
[PROOFSTEP]
exact (IH j ji (ji.trans hi)).ne'
[GOAL]
case h
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
⊢ sInf (univ \ A) < N
[PROOFSTEP]
suffices sInf (univ \ A) ≠ N
  by
  rcases(csInf_le (OrderBot.bddBelow (univ \ A)) N_mem).lt_or_eq with (H | H)
  · exact H
  · exact (this H).elim
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
this : sInf (univ \ A) ≠ N
⊢ sInf (univ \ A) < N
[PROOFSTEP]
rcases(csInf_le (OrderBot.bddBelow (univ \ A)) N_mem).lt_or_eq with (H | H)
[GOAL]
case inl
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
this : sInf (univ \ A) ≠ N
H : sInf (univ \ A) < N
⊢ sInf (univ \ A) < N
[PROOFSTEP]
exact H
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
this : sInf (univ \ A) ≠ N
H : sInf (univ \ A) = N
⊢ sInf (univ \ A) < N
[PROOFSTEP]
exact (this H).elim
[GOAL]
case h
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
⊢ sInf (univ \ A) ≠ N
[PROOFSTEP]
intro Inf_eq_N
[GOAL]
case h
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
⊢ False
[PROOFSTEP]
have :
  ∀ k,
    k < N →
      ∃ j,
        j < i ∧
          (closedBall (p.c (p.index j)) (p.r (p.index j)) ∩ closedBall (p.c (p.index i)) (p.r (p.index i))).Nonempty ∧
            k = p.color j :=
  by
  intro k 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 [and_assoc, -exists_and_left] at this
  simpa only [exists_prop, mem_iUnion, mem_singleton_iff, mem_closedBall, Subtype.exists, Subtype.coe_mk]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
⊢ ∀ (k : ℕ),
    k < N →
      ∃ j,
        j < i ∧
          Set.Nonempty
              (closedBall (BallPackage.c p.toBallPackage (index p j)) (BallPackage.r p.toBallPackage (index p j)) ∩
                closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
            k = color p j
[PROOFSTEP]
intro k hk
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
k : ℕ
hk : k < N
⊢ ∃ j,
    j < i ∧
      Set.Nonempty
          (closedBall (BallPackage.c p.toBallPackage (index p j)) (BallPackage.r p.toBallPackage (index p j)) ∩
            closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
        k = color p j
[PROOFSTEP]
rw [← Inf_eq_N] at hk
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
k : ℕ
hk : k < sInf (univ \ A)
⊢ ∃ j,
    j < i ∧
      Set.Nonempty
          (closedBall (BallPackage.c p.toBallPackage (index p j)) (BallPackage.r p.toBallPackage (index p j)) ∩
            closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
        k = color p j
[PROOFSTEP]
have : k ∈ A := by simpa only [true_and_iff, mem_univ, Classical.not_not, mem_diff] using Nat.not_mem_of_lt_sInf hk
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
k : ℕ
hk : k < sInf (univ \ A)
⊢ k ∈ A
[PROOFSTEP]
simpa only [true_and_iff, mem_univ, Classical.not_not, mem_diff] using Nat.not_mem_of_lt_sInf hk
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
k : ℕ
hk : k < sInf (univ \ A)
this : k ∈ A
⊢ ∃ j,
    j < i ∧
      Set.Nonempty
          (closedBall (BallPackage.c p.toBallPackage (index p j)) (BallPackage.r p.toBallPackage (index p j)) ∩
            closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
        k = color p j
[PROOFSTEP]
simp [and_assoc, -exists_and_left] at this
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
k : ℕ
hk : k < sInf (univ \ A)
this :
  ∃ a,
    a < i ∧
      Set.Nonempty
          (closedBall (BallPackage.c p.toBallPackage (index p a)) (BallPackage.r p.toBallPackage (index p a)) ∩
            closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
        k = color p a
⊢ ∃ j,
    j < i ∧
      Set.Nonempty
          (closedBall (BallPackage.c p.toBallPackage (index p j)) (BallPackage.r p.toBallPackage (index p j)) ∩
            closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
        k = color p j
[PROOFSTEP]
simpa only [exists_prop, mem_iUnion, mem_singleton_iff, mem_closedBall, Subtype.exists, Subtype.coe_mk]
[GOAL]
case h
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
this :
  ∀ (k : ℕ),
    k < N →
      ∃ j,
        j < i ∧
          Set.Nonempty
              (closedBall (BallPackage.c p.toBallPackage (index p j)) (BallPackage.r p.toBallPackage (index p j)) ∩
                closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
            k = color p j
⊢ False
[PROOFSTEP]
choose! g hg using this
[GOAL]
case h
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
⊢ False
[PROOFSTEP]
let G : ℕ → Ordinal := fun n => if n = N then i else g n
[GOAL]
case h
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
⊢ False
[PROOFSTEP]
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]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
⊢ ∀ (n : ℕ), n ≤ N → color p (G n) = n
[PROOFSTEP]
intro n hn
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
n : ℕ
hn : n ≤ N
⊢ color p (G n) = n
[PROOFSTEP]
rcases hn.eq_or_lt with (rfl | H)
[GOAL]
case inl
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
i : Ordinal.{u}
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
g : ℕ → Ordinal.{u}
n : ℕ
hN : IsEmpty (SatelliteConfig α n p.τ)
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < n
N_mem : n ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = n
hg :
  ∀ (k : ℕ),
    k < n →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n_1 => if n_1 = n then i else g n_1
hn : n ≤ n
⊢ color p (G n) = n
[PROOFSTEP]
simp only
[GOAL]
case inl
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
i : Ordinal.{u}
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
g : ℕ → Ordinal.{u}
n : ℕ
hN : IsEmpty (SatelliteConfig α n p.τ)
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < n
N_mem : n ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = n
hg :
  ∀ (k : ℕ),
    k < n →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n_1 => if n_1 = n then i else g n_1
hn : n ≤ n
⊢ color p (if True then i else g n) = n
[PROOFSTEP]
simp only [color_i, Inf_eq_N, if_true, eq_self_iff_true]
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
n : ℕ
hn : n ≤ N
H : n < N
⊢ color p (G n) = n
[PROOFSTEP]
simp only
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
n : ℕ
hn : n ≤ N
H : n < N
⊢ color p (if n = N then i else g n) = n
[PROOFSTEP]
simp only [H.ne, (hg n H).right.right.symm, if_false]
[GOAL]
case h
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
⊢ False
[PROOFSTEP]
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]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
⊢ ∀ (n : ℕ), n ≤ N → G n < lastStep p
[PROOFSTEP]
intro n hn
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
n : ℕ
hn : n ≤ N
⊢ G n < lastStep p
[PROOFSTEP]
rcases hn.eq_or_lt with (rfl | H)
[GOAL]
case inl
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
i : Ordinal.{u}
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
g : ℕ → Ordinal.{u}
n : ℕ
hN : IsEmpty (SatelliteConfig α n p.τ)
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < n
N_mem : n ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = n
hg :
  ∀ (k : ℕ),
    k < n →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n_1 => if n_1 = n then i else g n_1
color_G : ∀ (n_1 : ℕ), n_1 ≤ n → color p (G n_1) = n_1
hn : n ≤ n
⊢ G n < lastStep p
[PROOFSTEP]
simp only
[GOAL]
case inl
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
i : Ordinal.{u}
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
g : ℕ → Ordinal.{u}
n : ℕ
hN : IsEmpty (SatelliteConfig α n p.τ)
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < n
N_mem : n ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = n
hg :
  ∀ (k : ℕ),
    k < n →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n_1 => if n_1 = n then i else g n_1
color_G : ∀ (n_1 : ℕ), n_1 ≤ n → color p (G n_1) = n_1
hn : n ≤ n
⊢ (if True then i else g n) < lastStep p
[PROOFSTEP]
simp only [hi, if_true, eq_self_iff_true]
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
n : ℕ
hn : n ≤ N
H : n < N
⊢ G n < lastStep p
[PROOFSTEP]
simp only
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
n : ℕ
hn : n ≤ N
H : n < N
⊢ (if n = N then i else g n) < lastStep p
[PROOFSTEP]
simp only [H.ne, (hg n H).left.trans hi, if_false]
[GOAL]
case h
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
⊢ False
[PROOFSTEP]
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
  intro n hn
  have : p.index (G n) = Classical.epsilon fun t => p.c t ∉ p.iUnionUpTo (G n) ∧ p.R (G n) ≤ p.τ * p.r t := by
    rw [index]; rfl
  rw [this]
  have : ∃ t, p.c t ∉ p.iUnionUpTo (G n) ∧ p.R (G n) ≤ p.τ * p.r t := by
    simpa only [not_exists, exists_prop, not_and, not_lt, not_le, mem_setOf_eq, not_forall] using
      not_mem_of_lt_csInf (G_lt_last n hn) (OrderBot.bddBelow _)
  exact Classical.epsilon_spec this
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
⊢ ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
[PROOFSTEP]
intro n hn
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
n : ℕ
hn : n ≤ N
⊢ ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
    R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
[PROOFSTEP]
have : p.index (G n) = Classical.epsilon fun t => p.c t ∉ p.iUnionUpTo (G n) ∧ p.R (G n) ≤ p.τ * p.r t := by rw [index];
  rfl
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
n : ℕ
hn : n ≤ N
⊢ index p (G n) =
    Classical.epsilon fun t =>
      ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G n) ∧ R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage t
[PROOFSTEP]
rw [index]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
n : ℕ
hn : n ≤ N
⊢ (Classical.epsilon fun b =>
      ¬BallPackage.c p.toBallPackage b ∈
            ⋃ (j : { j // j < G n }),
              ball (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∧
        ⨆ (b :
            { b //
              ¬BallPackage.c p.toBallPackage b ∈
                  ⋃ (j : { j // j < G n }),
                    ball (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) }),
            BallPackage.r p.toBallPackage ↑b ≤
          p.τ * BallPackage.r p.toBallPackage b) =
    Classical.epsilon fun t =>
      ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G n) ∧ R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage t
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
n : ℕ
hn : n ≤ N
this :
  index p (G n) =
    Classical.epsilon fun t =>
      ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G n) ∧ R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage t
⊢ ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
    R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
[PROOFSTEP]
rw [this]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
n : ℕ
hn : n ≤ N
this :
  index p (G n) =
    Classical.epsilon fun t =>
      ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G n) ∧ R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage t
⊢ ¬BallPackage.c p.toBallPackage
          (Classical.epsilon fun t =>
            ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G n) ∧ R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage t) ∈
        iUnionUpTo p (G n) ∧
    R p (G n) ≤
      p.τ *
        BallPackage.r p.toBallPackage
          (Classical.epsilon fun t =>
            ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G n) ∧ R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage t)
[PROOFSTEP]
have : ∃ t, p.c t ∉ p.iUnionUpTo (G n) ∧ p.R (G n) ≤ p.τ * p.r t := by
  simpa only [not_exists, exists_prop, not_and, not_lt, not_le, mem_setOf_eq, not_forall] using
    not_mem_of_lt_csInf (G_lt_last n hn) (OrderBot.bddBelow _)
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
n : ℕ
hn : n ≤ N
this :
  index p (G n) =
    Classical.epsilon fun t =>
      ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G n) ∧ R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage t
⊢ ∃ t, ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G n) ∧ R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage t
[PROOFSTEP]
simpa only [not_exists, exists_prop, not_and, not_lt, not_le, mem_setOf_eq, not_forall] using
  not_mem_of_lt_csInf (G_lt_last n hn) (OrderBot.bddBelow _)
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
n : ℕ
hn : n ≤ N
this✝ :
  index p (G n) =
    Classical.epsilon fun t =>
      ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G n) ∧ R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage t
this : ∃ t, ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G n) ∧ R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage t
⊢ ¬BallPackage.c p.toBallPackage
          (Classical.epsilon fun t =>
            ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G n) ∧ R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage t) ∈
        iUnionUpTo p (G n) ∧
    R p (G n) ≤
      p.τ *
        BallPackage.r p.toBallPackage
          (Classical.epsilon fun t =>
            ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G n) ∧ R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage t)
[PROOFSTEP]
exact Classical.epsilon_spec this
[GOAL]
case h
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
⊢ False
[PROOFSTEP]
have Gab :
  ∀ a b : Fin (Nat.succ N),
    G a < G b →
      p.r (p.index (G a)) ≤ dist (p.c (p.index (G a))) (p.c (p.index (G b))) ∧
        p.r (p.index (G b)) ≤ p.τ * p.r (p.index (G a)) :=
  by
  intro a b G_lt
  have ha : (a : ℕ) ≤ N := Nat.lt_succ_iff.1 a.2
  have hb : (b : ℕ) ≤ N := Nat.lt_succ_iff.1 b.2
  constructor
  · have := (fGn b hb).1
    simp only [iUnionUpTo, not_exists, exists_prop, mem_iUnion, mem_closedBall, not_and, not_le, 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.iUnionUpTo (G a) := by intro H;
      exact (fGn b hb).1 (p.monotone_iUnionUpTo G_lt.le H)
    let b' : { t // p.c t ∉ p.iUnionUpTo (G a) } := ⟨p.index (G b), B⟩
    apply @le_ciSup _ _ _ (fun t : { t // p.c t ∉ p.iUnionUpTo (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⟩
    rw [← hu.2]
    exact
      p.r_le
        _
          -- therefore, one may use them to construct a satellite configuration with `N+1` points
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
⊢ ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
[PROOFSTEP]
intro a b G_lt
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
a b : Fin (Nat.succ N)
G_lt : G ↑a < G ↑b
⊢ BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
      dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
    BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
[PROOFSTEP]
have ha : (a : ℕ) ≤ N := Nat.lt_succ_iff.1 a.2
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
a b : Fin (Nat.succ N)
G_lt : G ↑a < G ↑b
ha : ↑a ≤ N
⊢ BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
      dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
    BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
[PROOFSTEP]
have hb : (b : ℕ) ≤ N := Nat.lt_succ_iff.1 b.2
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
a b : Fin (Nat.succ N)
G_lt : G ↑a < G ↑b
ha : ↑a ≤ N
hb : ↑b ≤ N
⊢ BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
      dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
    BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
[PROOFSTEP]
constructor
[GOAL]
case left
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
a b : Fin (Nat.succ N)
G_lt : G ↑a < G ↑b
ha : ↑a ≤ N
hb : ↑b ≤ N
⊢ BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
    dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b)))
[PROOFSTEP]
have := (fGn b hb).1
[GOAL]
case left
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
a b : Fin (Nat.succ N)
G_lt : G ↑a < G ↑b
ha : ↑a ≤ N
hb : ↑b ≤ N
this : ¬BallPackage.c p.toBallPackage (index p (G ↑b)) ∈ iUnionUpTo p (G ↑b)
⊢ BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
    dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b)))
[PROOFSTEP]
simp only [iUnionUpTo, not_exists, exists_prop, mem_iUnion, mem_closedBall, not_and, not_le, Subtype.exists,
  Subtype.coe_mk] at this
[GOAL]
case left
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
a b : Fin (Nat.succ N)
G_lt : G ↑a < G ↑b
ha : ↑a ≤ N
hb : ↑b ≤ N
this :
  ∀ (x : Ordinal.{u}),
    (x < if ↑b = N then i else g ↑b) →
      ¬BallPackage.c p.toBallPackage (index p (if ↑b = N then i else g ↑b)) ∈
          ball (BallPackage.c p.toBallPackage (index p x)) (BallPackage.r p.toBallPackage (index p x))
⊢ BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
    dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b)))
[PROOFSTEP]
simpa only [dist_comm, mem_ball, not_lt] using this (G a) G_lt
[GOAL]
case right
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
a b : Fin (Nat.succ N)
G_lt : G ↑a < G ↑b
ha : ↑a ≤ N
hb : ↑b ≤ N
⊢ BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
[PROOFSTEP]
apply le_trans _ (fGn a ha).2
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
a b : Fin (Nat.succ N)
G_lt : G ↑a < G ↑b
ha : ↑a ≤ N
hb : ↑b ≤ N
⊢ BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ R p (G ↑a)
[PROOFSTEP]
have B : p.c (p.index (G b)) ∉ p.iUnionUpTo (G a) := by intro H; exact (fGn b hb).1 (p.monotone_iUnionUpTo G_lt.le H)
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
a b : Fin (Nat.succ N)
G_lt : G ↑a < G ↑b
ha : ↑a ≤ N
hb : ↑b ≤ N
⊢ ¬BallPackage.c p.toBallPackage (index p (G ↑b)) ∈ iUnionUpTo p (G ↑a)
[PROOFSTEP]
intro H
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
a b : Fin (Nat.succ N)
G_lt : G ↑a < G ↑b
ha : ↑a ≤ N
hb : ↑b ≤ N
H : BallPackage.c p.toBallPackage (index p (G ↑b)) ∈ iUnionUpTo p (G ↑a)
⊢ False
[PROOFSTEP]
exact (fGn b hb).1 (p.monotone_iUnionUpTo G_lt.le H)
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
a b : Fin (Nat.succ N)
G_lt : G ↑a < G ↑b
ha : ↑a ≤ N
hb : ↑b ≤ N
B : ¬BallPackage.c p.toBallPackage (index p (G ↑b)) ∈ iUnionUpTo p (G ↑a)
⊢ BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ R p (G ↑a)
[PROOFSTEP]
let b' : { t // p.c t ∉ p.iUnionUpTo (G a) } := ⟨p.index (G b), B⟩
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
a b : Fin (Nat.succ N)
G_lt : G ↑a < G ↑b
ha : ↑a ≤ N
hb : ↑b ≤ N
B : ¬BallPackage.c p.toBallPackage (index p (G ↑b)) ∈ iUnionUpTo p (G ↑a)
b' : { t // ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G ↑a) } := { val := index p (G ↑b), property := B }
⊢ BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ R p (G ↑a)
[PROOFSTEP]
apply @le_ciSup _ _ _ (fun t : { t // p.c t ∉ p.iUnionUpTo (G a) } => p.r t) _ b'
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
a b : Fin (Nat.succ N)
G_lt : G ↑a < G ↑b
ha : ↑a ≤ N
hb : ↑b ≤ N
B : ¬BallPackage.c p.toBallPackage (index p (G ↑b)) ∈ iUnionUpTo p (G ↑a)
b' : { t // ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G ↑a) } := { val := index p (G ↑b), property := B }
⊢ BddAbove (range fun t => BallPackage.r p.toBallPackage ↑t)
[PROOFSTEP]
refine' ⟨p.r_bound, fun t ht => _⟩
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
a b : Fin (Nat.succ N)
G_lt : G ↑a < G ↑b
ha : ↑a ≤ N
hb : ↑b ≤ N
B : ¬BallPackage.c p.toBallPackage (index p (G ↑b)) ∈ iUnionUpTo p (G ↑a)
b' : { t // ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G ↑a) } := { val := index p (G ↑b), property := B }
t : ℝ
ht : t ∈ range fun t => BallPackage.r p.toBallPackage ↑t
⊢ t ≤ p.r_bound
[PROOFSTEP]
simp only [exists_prop, mem_range, Subtype.exists, Subtype.coe_mk] at ht
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
a b : Fin (Nat.succ N)
G_lt : G ↑a < G ↑b
ha : ↑a ≤ N
hb : ↑b ≤ N
B : ¬BallPackage.c p.toBallPackage (index p (G ↑b)) ∈ iUnionUpTo p (G ↑a)
b' : { t // ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G ↑a) } := { val := index p (G ↑b), property := B }
t : ℝ
ht :
  ∃ a_1,
    ¬BallPackage.c p.toBallPackage a_1 ∈ iUnionUpTo p (if ↑a = N then i else g ↑a) ∧
      BallPackage.r p.toBallPackage a_1 = t
⊢ t ≤ p.r_bound
[PROOFSTEP]
rcases ht with ⟨u, hu⟩
[GOAL]
case intro
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
a b : Fin (Nat.succ N)
G_lt : G ↑a < G ↑b
ha : ↑a ≤ N
hb : ↑b ≤ N
B : ¬BallPackage.c p.toBallPackage (index p (G ↑b)) ∈ iUnionUpTo p (G ↑a)
b' : { t // ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G ↑a) } := { val := index p (G ↑b), property := B }
t : ℝ
u : β
hu : ¬BallPackage.c p.toBallPackage u ∈ iUnionUpTo p (if ↑a = N then i else g ↑a) ∧ BallPackage.r p.toBallPackage u = t
⊢ t ≤ p.r_bound
[PROOFSTEP]
rw [← hu.2]
[GOAL]
case intro
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
a b : Fin (Nat.succ N)
G_lt : G ↑a < G ↑b
ha : ↑a ≤ N
hb : ↑b ≤ N
B : ¬BallPackage.c p.toBallPackage (index p (G ↑b)) ∈ iUnionUpTo p (G ↑a)
b' : { t // ¬BallPackage.c p.toBallPackage t ∈ iUnionUpTo p (G ↑a) } := { val := index p (G ↑b), property := B }
t : ℝ
u : β
hu : ¬BallPackage.c p.toBallPackage u ∈ iUnionUpTo p (if ↑a = N then i else g ↑a) ∧ BallPackage.r p.toBallPackage u = t
⊢ BallPackage.r p.toBallPackage u ≤ p.r_bound
[PROOFSTEP]
exact
  p.r_le
    _
      -- therefore, one may use them to construct a satellite configuration with `N+1` points
[GOAL]
case h
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
⊢ False
[PROOFSTEP]
let sc : SatelliteConfig α N p.τ :=
  { c := fun k => p.c (p.index (G k))
    r := fun k => p.r (p.index (G k))
    rpos := fun k => p.rpos (p.index (G k))
    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
      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
        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
      intro a ha
      have I : (a : ℕ) < N := ha
      have : G a < G (Fin.last N) := by dsimp; 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; simp only [if_true, eq_self_iff_true]
      have K : G a = g a := by dsimp; simp [I.ne, (hg a I).1]
      convert dist_le_add_of_nonempty_closedBall_inter_closedBall (hg _ I).2.1 }
    -- this is a contradiction
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
⊢ ∀ (i j : Fin (Nat.succ N)),
    i ≠ j →
      (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) i ≤
            dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) i)
              ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) j) ∧
          (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) j ≤
            p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) i ∨
        (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) j ≤
            dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) j)
              ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) i) ∧
          (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) i ≤
            p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) j
[PROOFSTEP]
intro a b a_ne_b
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a b : Fin (Nat.succ N)
a_ne_b : a ≠ b
⊢ (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ≤
        dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a)
          ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) b) ∧
      (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b ≤
        p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ∨
    (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b ≤
        dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) b)
          ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a) ∧
      (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ≤
        p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b
[PROOFSTEP]
wlog G_le : G a ≤ G b generalizing a b
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a b : Fin (Nat.succ N)
a_ne_b : a ≠ b
this :
  ∀ (a b : Fin (Nat.succ N)),
    a ≠ b →
      G ↑a ≤ G ↑b →
        (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ≤
              dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a)
                ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) b) ∧
            (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b ≤
              p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ∨
          (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b ≤
              dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) b)
                ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a) ∧
            (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ≤
              p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b
G_le : ¬G ↑a ≤ G ↑b
⊢ (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ≤
        dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a)
          ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) b) ∧
      (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b ≤
        p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ∨
    (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b ≤
        dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) b)
          ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a) ∧
      (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ≤
        p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b
[PROOFSTEP]
exact (this b a a_ne_b.symm (le_of_not_le G_le)).symm
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a b : Fin (Nat.succ N)
a_ne_b : a ≠ b
G_le : G ↑a ≤ G ↑b
⊢ (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ≤
        dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a)
          ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) b) ∧
      (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b ≤
        p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ∨
    (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b ≤
        dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) b)
          ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a) ∧
      (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ≤
        p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b
[PROOFSTEP]
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
  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
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a b : Fin (Nat.succ N)
a_ne_b : a ≠ b
G_le : G ↑a ≤ G ↑b
⊢ G ↑a < G ↑b
[PROOFSTEP]
rcases G_le.lt_or_eq with (H | H)
[GOAL]
case inl
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a b : Fin (Nat.succ N)
a_ne_b : a ≠ b
G_le : G ↑a ≤ G ↑b
H : G ↑a < G ↑b
⊢ G ↑a < G ↑b
[PROOFSTEP]
exact H
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a b : Fin (Nat.succ N)
a_ne_b : a ≠ b
G_le : G ↑a ≤ G ↑b
H : G ↑a = G ↑b
⊢ G ↑a < G ↑b
[PROOFSTEP]
have A : (a : ℕ) ≠ b := Fin.val_injective.ne a_ne_b
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A✝ : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A✝)
N_mem : N ∈ univ \ A✝
Inf_eq_N : sInf (univ \ A✝) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a b : Fin (Nat.succ N)
a_ne_b : a ≠ b
G_le : G ↑a ≤ G ↑b
H : G ↑a = G ↑b
A : ↑a ≠ ↑b
⊢ G ↑a < G ↑b
[PROOFSTEP]
rw [← color_G a (Nat.lt_succ_iff.1 a.2), ← color_G b (Nat.lt_succ_iff.1 b.2), H] at A
[GOAL]
case inr
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A✝ : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A✝)
N_mem : N ∈ univ \ A✝
Inf_eq_N : sInf (univ \ A✝) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a b : Fin (Nat.succ N)
a_ne_b : a ≠ b
G_le : G ↑a ≤ G ↑b
H : G ↑a = G ↑b
A : color p (G ↑b) ≠ color p (G ↑b)
⊢ G ↑a < G ↑b
[PROOFSTEP]
exact (A rfl).elim
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a b : Fin (Nat.succ N)
a_ne_b : a ≠ b
G_le : G ↑a ≤ G ↑b
G_lt : G ↑a < G ↑b
⊢ (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ≤
        dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a)
          ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) b) ∧
      (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b ≤
        p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ∨
    (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b ≤
        dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) b)
          ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a) ∧
      (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ≤
        p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b
[PROOFSTEP]
exact Or.inl (Gab a b G_lt)
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
⊢ ∀ (i : Fin (N + 1)),
    i < last N →
      (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) i ≤
          dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) i)
            ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) (last N)) ∧
        (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) (last N) ≤
          p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) i
[PROOFSTEP]
intro a ha
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a : Fin (N + 1)
ha : a < last N
⊢ (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ≤
      dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a)
        ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) (last N)) ∧
    (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) (last N) ≤
      p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a
[PROOFSTEP]
have I : (a : ℕ) < N := ha
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a : Fin (N + 1)
ha : a < last N
I : ↑a < N
⊢ (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ≤
      dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a)
        ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) (last N)) ∧
    (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) (last N) ≤
      p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a
[PROOFSTEP]
have : G a < G (Fin.last N) := by dsimp; simp [I.ne, (hg a I).1]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a : Fin (N + 1)
ha : a < last N
I : ↑a < N
⊢ G ↑a < G ↑(last N)
[PROOFSTEP]
dsimp
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a : Fin (N + 1)
ha : a < last N
I : ↑a < N
⊢ (if ↑a = N then i else g ↑a) < if N = N then i else g N
[PROOFSTEP]
simp [I.ne, (hg a I).1]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a : Fin (N + 1)
ha : a < last N
I : ↑a < N
this : G ↑a < G ↑(last N)
⊢ (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ≤
      dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a)
        ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) (last N)) ∧
    (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) (last N) ≤
      p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a
[PROOFSTEP]
exact Gab _ _ this
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
⊢ ∀ (i : Fin (N + 1)),
    i < last N →
      dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) i)
          ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) (last N)) ≤
        (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) i +
          (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) (last N)
[PROOFSTEP]
intro a ha
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a : Fin (N + 1)
ha : a < last N
⊢ dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a)
      ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) (last N)) ≤
    (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a +
      (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) (last N)
[PROOFSTEP]
have I : (a : ℕ) < N := ha
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a : Fin (N + 1)
ha : a < last N
I : ↑a < N
⊢ dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a)
      ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) (last N)) ≤
    (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a +
      (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) (last N)
[PROOFSTEP]
have J : G (Fin.last N) = i := by dsimp; simp only [if_true, eq_self_iff_true]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a : Fin (N + 1)
ha : a < last N
I : ↑a < N
⊢ G ↑(last N) = i
[PROOFSTEP]
dsimp
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a : Fin (N + 1)
ha : a < last N
I : ↑a < N
⊢ (if N = N then i else g N) = i
[PROOFSTEP]
simp only [if_true, eq_self_iff_true]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a : Fin (N + 1)
ha : a < last N
I : ↑a < N
J : G ↑(last N) = i
⊢ dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a)
      ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) (last N)) ≤
    (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a +
      (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) (last N)
[PROOFSTEP]
have K : G a = g a := by dsimp; simp [I.ne, (hg a I).1]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a : Fin (N + 1)
ha : a < last N
I : ↑a < N
J : G ↑(last N) = i
⊢ G ↑a = g ↑a
[PROOFSTEP]
dsimp
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a : Fin (N + 1)
ha : a < last N
I : ↑a < N
J : G ↑(last N) = i
⊢ (if ↑a = N then i else g ↑a) = g ↑a
[PROOFSTEP]
simp [I.ne, (hg a I).1]
[GOAL]
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
a : Fin (N + 1)
ha : a < last N
I : ↑a < N
J : G ↑(last N) = i
K : G ↑a = g ↑a
⊢ dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a)
      ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) (last N)) ≤
    (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a +
      (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) (last N)
[PROOFSTEP]
convert dist_le_add_of_nonempty_closedBall_inter_closedBall (hg _ I).2.1
[GOAL]
case h
α : Type u_1
inst✝¹ : MetricSpace α
β : Type u
inst✝ : Nonempty β
p : TauPackage β α
i✝ : Ordinal.{u}
hi✝ : i✝ < lastStep p
N : ℕ
hN : IsEmpty (SatelliteConfig α N p.τ)
i : Ordinal.{u}
IH : ∀ (k : Ordinal.{u}), k < i → k < lastStep p → color p k < N
hi : i < lastStep p
A : Set ℕ :=
  ⋃ (j : { j // j < i }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i)))),
    {color p ↑j}
color_i : color p i = sInf (univ \ A)
N_mem : N ∈ univ \ A
Inf_eq_N : sInf (univ \ A) = N
g : ℕ → Ordinal.{u}
hg :
  ∀ (k : ℕ),
    k < N →
      g k < i ∧
        Set.Nonempty
            (closedBall (BallPackage.c p.toBallPackage (index p (g k)))
                (BallPackage.r p.toBallPackage (index p (g k))) ∩
              closedBall (BallPackage.c p.toBallPackage (index p i)) (BallPackage.r p.toBallPackage (index p i))) ∧
          k = color p (g k)
G : ℕ → Ordinal.{u} := fun n => if n = N then i else g n
color_G : ∀ (n : ℕ), n ≤ N → color p (G n) = n
G_lt_last : ∀ (n : ℕ), n ≤ N → G n < lastStep p
fGn :
  ∀ (n : ℕ),
    n ≤ N →
      ¬BallPackage.c p.toBallPackage (index p (G n)) ∈ iUnionUpTo p (G n) ∧
        R p (G n) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G n))
Gab :
  ∀ (a b : Fin (Nat.succ N)),
    G ↑a < G ↑b →
      BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
          dist (BallPackage.c p.toBallPackage (index p (G ↑a))) (BallPackage.c p.toBallPackage (index p (G ↑b))) ∧
        BallPackage.r p.toBallPackage (index p (G ↑b)) ≤ p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))
sc : SatelliteConfig α N p.τ :=
  { c := fun k => BallPackage.c p.toBallPackage (index p (G ↑k)),
    r := fun k => BallPackage.r p.toBallPackage (index p (G ↑k)),
    rpos := (_ : ∀ (k : Fin (Nat.succ N)), 0 < BallPackage.r p.toBallPackage (index p (G ↑k))),
    h :=
      (_ :
        ∀ (a b : Fin (Nat.succ N)),
          a ≠ b →
            (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ≤
                  dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a)
                    ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) b) ∧
                (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b ≤
                  p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ∨
              (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b ≤
                  dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) b)
                    ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a) ∧
                (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a ≤
                  p.τ * (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) b),
    hlast :=
      (_ :
        ∀ (a : Fin (N + 1)),
          a < last N →
            BallPackage.r p.toBallPackage (index p (G ↑a)) ≤
                dist (BallPackage.c p.toBallPackage (index p (G ↑a)))
                  (BallPackage.c p.toBallPackage (index p (G ↑(last N)))) ∧
              BallPackage.r p.toBallPackage (index p (G ↑(last N))) ≤
                p.τ * BallPackage.r p.toBallPackage (index p (G ↑a))),
    inter :=
      (_ :
        ∀ (a : Fin (N + 1)),
          a < last N →
            dist ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) a)
                ((fun k => BallPackage.c p.toBallPackage (index p (G ↑k))) (last N)) ≤
              (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) a +
                (fun k => BallPackage.r p.toBallPackage (index p (G ↑k))) (last N)) }
⊢ False
[PROOFSTEP]
exact hN.false sc
[GOAL]
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
⊢ ∃ s,
    (∀ (i : Fin N), PairwiseDisjoint (s i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)) ∧
      range q.c ⊆ ⋃ (i : Fin N) (j : β) (_ : j ∈ s i), ball (BallPackage.c q j) (BallPackage.r q j)
[PROOFSTEP]
cases isEmpty_or_nonempty β
[GOAL]
case inl
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : IsEmpty β
⊢ ∃ s,
    (∀ (i : Fin N), PairwiseDisjoint (s i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)) ∧
      range q.c ⊆ ⋃ (i : Fin N) (j : β) (_ : j ∈ s i), ball (BallPackage.c q j) (BallPackage.r q j)
[PROOFSTEP]
refine' ⟨fun _ => ∅, fun _ => pairwiseDisjoint_empty, _⟩
[GOAL]
case inl
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : IsEmpty β
⊢ range q.c ⊆ ⋃ (i : Fin N) (j : β) (_ : j ∈ (fun x => ∅) i), ball (BallPackage.c q j) (BallPackage.r q j)
[PROOFSTEP]
rw [← image_univ, eq_empty_of_isEmpty (univ : Set β)]
[GOAL]
case inl
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : IsEmpty β
⊢ q.c '' ∅ ⊆ ⋃ (i : Fin N) (j : β) (_ : j ∈ (fun x => ∅) i), ball (BallPackage.c q j) (BallPackage.r q j)
[PROOFSTEP]
simp
  -- Now, assume `β` is nonempty.
[GOAL]
case inr
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
⊢ ∃ s,
    (∀ (i : Fin N), PairwiseDisjoint (s i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)) ∧
      range q.c ⊆ ⋃ (i : Fin N) (j : β) (_ : j ∈ s i), ball (BallPackage.c q j) (BallPackage.r q j)
[PROOFSTEP]
let p : TauPackage β α :=
  { q with
    τ
    one_lt_tau := hτ }
    -- we use for `s i` the balls of color `i`.
[GOAL]
case inr
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
⊢ ∃ s,
    (∀ (i : Fin N), PairwiseDisjoint (s i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)) ∧
      range q.c ⊆ ⋃ (i : Fin N) (j : β) (_ : j ∈ s i), ball (BallPackage.c q j) (BallPackage.r q j)
[PROOFSTEP]
let s := fun i : Fin N => ⋃ (k : Ordinal.{u}) (_ : k < p.lastStep) (_ : p.color k = i), ({p.index k} : Set β)
[GOAL]
case inr
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
⊢ ∃ s,
    (∀ (i : Fin N), PairwiseDisjoint (s i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)) ∧
      range q.c ⊆ ⋃ (i : Fin N) (j : β) (_ : j ∈ s i), ball (BallPackage.c q j) (BallPackage.r q j)
[PROOFSTEP]
refine' ⟨s, fun i => _, _⟩
[GOAL]
case inr.refine'_1
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
⊢ PairwiseDisjoint (s i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
[PROOFSTEP]
intro x hx y hy x_ne_y
[GOAL]
case inr.refine'_1
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
x : β
hx : x ∈ s i
y : β
hy : y ∈ s i
x_ne_y : x ≠ y
⊢ (Disjoint on fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)) x y
[PROOFSTEP]
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
[GOAL]
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
x : β
hx : x ∈ s i
y : β
hy : y ∈ s i
x_ne_y : x ≠ y
⊢ ∃ jx, jx < lastStep p ∧ color p jx = ↑i ∧ x = index p jx
[PROOFSTEP]
simpa only [exists_prop, mem_iUnion, mem_singleton_iff] using hx
[GOAL]
case inr.refine'_1.intro.intro.intro
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
y : β
hy : y ∈ s i
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
x_ne_y : index p jx ≠ y
⊢ (Disjoint on fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)) (index p jx) y
[PROOFSTEP]
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
[GOAL]
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
y : β
hy : y ∈ s i
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
x_ne_y : index p jx ≠ y
⊢ ∃ jy, jy < lastStep p ∧ color p jy = ↑i ∧ y = index p jy
[PROOFSTEP]
simpa only [exists_prop, mem_iUnion, mem_singleton_iff] using hy
[GOAL]
case inr.refine'_1.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
⊢ (Disjoint on fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)) (index p jx) (index p jy)
[PROOFSTEP]
wlog jxy : jx ≤ jy generalizing jx jy
[GOAL]
case inr.refine'_1.intro.intro.intro.intro.intro.intro.inr
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
this :
  ∀ (jx : Ordinal.{u}),
    jx < lastStep p →
      color p jx = ↑i →
        index p jx ∈ s i →
          ∀ (jy : Ordinal.{u}),
            jy < lastStep p →
              color p jy = ↑i →
                index p jy ∈ s i →
                  index p jx ≠ index p jy →
                    jx ≤ jy →
                      (Disjoint on fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)) (index p jx)
                        (index p jy)
jxy : ¬jx ≤ jy
⊢ (Disjoint on fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)) (index p jx) (index p jy)
[PROOFSTEP]
exact (this jy jy_lt jyi hy jx jx_lt jxi hx x_ne_y.symm (le_of_not_le jxy)).symm
[GOAL]
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx ≤ jy
⊢ (Disjoint on fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)) (index p jx) (index p jy)
[PROOFSTEP]
replace jxy : jx < jy
[GOAL]
case jxy
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx ≤ jy
⊢ jx < jy
[PROOFSTEP]
rcases lt_or_eq_of_le jxy with (H | rfl)
[GOAL]
case jxy.inl
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx ≤ jy
H : jx < jy
⊢ jx < jy
[PROOFSTEP]
{exact H
}
[GOAL]
case jxy.inl
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx ≤ jy
H : jx < jy
⊢ jx < jy
[PROOFSTEP]
exact H
[GOAL]
case jxy.inr
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy_lt : jx < lastStep p
jyi : color p jx = ↑i
hy : index p jx ∈ s i
x_ne_y : index p jx ≠ index p jx
jxy : jx ≤ jx
⊢ jx < jx
[PROOFSTEP]
{exact (x_ne_y rfl).elim
}
[GOAL]
case jxy.inr
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy_lt : jx < lastStep p
jyi : color p jx = ↑i
hy : index p jx ∈ s i
x_ne_y : index p jx ≠ index p jx
jxy : jx ≤ jx
⊢ jx < jx
[PROOFSTEP]
exact (x_ne_y rfl).elim
[GOAL]
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx < jy
⊢ (Disjoint on fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)) (index p jx) (index p jy)
[PROOFSTEP]
let A : Set ℕ :=
  ⋃ (j : { j // j < jy }) (_ :
    (closedBall (p.c (p.index j)) (p.r (p.index j)) ∩ closedBall (p.c (p.index jy)) (p.r (p.index jy))).Nonempty),
    {p.color j}
[GOAL]
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx < jy
A : Set ℕ :=
  ⋃ (j : { j // j < jy }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p jy)) (BallPackage.r p.toBallPackage (index p jy)))),
    {color p ↑j}
⊢ (Disjoint on fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)) (index p jx) (index p jy)
[PROOFSTEP]
have color_j : p.color jy = sInf (univ \ A) := by rw [TauPackage.color]
[GOAL]
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx < jy
A : Set ℕ :=
  ⋃ (j : { j // j < jy }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p jy)) (BallPackage.r p.toBallPackage (index p jy)))),
    {color p ↑j}
⊢ color p jy = sInf (univ \ A)
[PROOFSTEP]
rw [TauPackage.color]
[GOAL]
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx < jy
A : Set ℕ :=
  ⋃ (j : { j // j < jy }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p jy)) (BallPackage.r p.toBallPackage (index p jy)))),
    {color p ↑j}
color_j : color p jy = sInf (univ \ A)
⊢ (Disjoint on fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)) (index p jx) (index p jy)
[PROOFSTEP]
have h : p.color jy ∈ univ \ A := by
  rw [color_j]
  apply csInf_mem
  refine' ⟨N, _⟩
  simp only [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'
[GOAL]
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx < jy
A : Set ℕ :=
  ⋃ (j : { j // j < jy }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p jy)) (BallPackage.r p.toBallPackage (index p jy)))),
    {color p ↑j}
color_j : color p jy = sInf (univ \ A)
⊢ color p jy ∈ univ \ A
[PROOFSTEP]
rw [color_j]
[GOAL]
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx < jy
A : Set ℕ :=
  ⋃ (j : { j // j < jy }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p jy)) (BallPackage.r p.toBallPackage (index p jy)))),
    {color p ↑j}
color_j : color p jy = sInf (univ \ A)
⊢ sInf (univ \ A) ∈ univ \ A
[PROOFSTEP]
apply csInf_mem
[GOAL]
case hs
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx < jy
A : Set ℕ :=
  ⋃ (j : { j // j < jy }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p jy)) (BallPackage.r p.toBallPackage (index p jy)))),
    {color p ↑j}
color_j : color p jy = sInf (univ \ A)
⊢ Set.Nonempty (univ \ A)
[PROOFSTEP]
refine' ⟨N, _⟩
[GOAL]
case hs
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx < jy
A : Set ℕ :=
  ⋃ (j : { j // j < jy }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p jy)) (BallPackage.r p.toBallPackage (index p jy)))),
    {color p ↑j}
color_j : color p jy = sInf (univ \ A)
⊢ N ∈ univ \ A
[PROOFSTEP]
simp only [not_exists, true_and_iff, exists_prop, mem_iUnion, mem_singleton_iff, not_and, mem_univ, mem_diff,
  Subtype.exists, Subtype.coe_mk]
[GOAL]
case hs
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx < jy
A : Set ℕ :=
  ⋃ (j : { j // j < jy }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p jy)) (BallPackage.r p.toBallPackage (index p jy)))),
    {color p ↑j}
color_j : color p jy = sInf (univ \ A)
⊢ ∀ (x : Ordinal.{u}),
    x < jy →
      Set.Nonempty
          (closedBall
              (BallPackage.c q
                (index
                  {
                    toBallPackage :=
                      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                    τ := τ, one_lt_tau := hτ }
                  x))
              (BallPackage.r q
                (index
                  {
                    toBallPackage :=
                      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                    τ := τ, one_lt_tau := hτ }
                  x)) ∩
            closedBall
              (BallPackage.c q
                (index
                  {
                    toBallPackage :=
                      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                    τ := τ, one_lt_tau := hτ }
                  jy))
              (BallPackage.r q
                (index
                  {
                    toBallPackage :=
                      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                    τ := τ, one_lt_tau := hτ }
                  jy))) →
        ¬N =
            color
              {
                toBallPackage :=
                  { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                    r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                τ := τ, one_lt_tau := hτ }
              x
[PROOFSTEP]
intro k hk _
[GOAL]
case hs
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx < jy
A : Set ℕ :=
  ⋃ (j : { j // j < jy }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p jy)) (BallPackage.r p.toBallPackage (index p jy)))),
    {color p ↑j}
color_j : color p jy = sInf (univ \ A)
k : Ordinal.{u}
hk : k < jy
a✝ :
  Set.Nonempty
    (closedBall
        (BallPackage.c q
          (index
            {
              toBallPackage :=
                { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                  r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
              τ := τ, one_lt_tau := hτ }
            k))
        (BallPackage.r q
          (index
            {
              toBallPackage :=
                { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                  r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
              τ := τ, one_lt_tau := hτ }
            k)) ∩
      closedBall
        (BallPackage.c q
          (index
            {
              toBallPackage :=
                { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                  r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
              τ := τ, one_lt_tau := hτ }
            jy))
        (BallPackage.r q
          (index
            {
              toBallPackage :=
                { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                  r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
              τ := τ, one_lt_tau := hτ }
            jy)))
⊢ ¬N =
      color
        {
          toBallPackage :=
            { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
              r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
          τ := τ, one_lt_tau := hτ }
        k
[PROOFSTEP]
exact (p.color_lt (hk.trans jy_lt) hN).ne'
[GOAL]
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx < jy
A : Set ℕ :=
  ⋃ (j : { j // j < jy }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p jy)) (BallPackage.r p.toBallPackage (index p jy)))),
    {color p ↑j}
color_j : color p jy = sInf (univ \ A)
h : color p jy ∈ univ \ A
⊢ (Disjoint on fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)) (index p jx) (index p jy)
[PROOFSTEP]
simp only [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
[GOAL]
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx < jy
A : Set ℕ :=
  ⋃ (j : { j // j < jy }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p jy)) (BallPackage.r p.toBallPackage (index p jy)))),
    {color p ↑j}
color_j : color p jy = sInf (univ \ A)
h :
  ∀ (x : Ordinal.{u}),
    x < jy →
      Set.Nonempty
          (closedBall
              (BallPackage.c q
                (index
                  {
                    toBallPackage :=
                      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                    τ := τ, one_lt_tau := hτ }
                  x))
              (BallPackage.r q
                (index
                  {
                    toBallPackage :=
                      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                    τ := τ, one_lt_tau := hτ }
                  x)) ∩
            closedBall
              (BallPackage.c q
                (index
                  {
                    toBallPackage :=
                      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                    τ := τ, one_lt_tau := hτ }
                  jy))
              (BallPackage.r q
                (index
                  {
                    toBallPackage :=
                      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                    τ := τ, one_lt_tau := hτ }
                  jy))) →
        ¬color
              {
                toBallPackage :=
                  { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                    r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                τ := τ, one_lt_tau := hτ }
              jy =
            color
              {
                toBallPackage :=
                  { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                    r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                τ := τ, one_lt_tau := hτ }
              x
⊢ (Disjoint on fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)) (index p jx) (index p jy)
[PROOFSTEP]
specialize h jx jxy
[GOAL]
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx < jy
A : Set ℕ :=
  ⋃ (j : { j // j < jy }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p jy)) (BallPackage.r p.toBallPackage (index p jy)))),
    {color p ↑j}
color_j : color p jy = sInf (univ \ A)
h :
  Set.Nonempty
      (closedBall
          (BallPackage.c q
            (index
              {
                toBallPackage :=
                  { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                    r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                τ := τ, one_lt_tau := hτ }
              jx))
          (BallPackage.r q
            (index
              {
                toBallPackage :=
                  { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                    r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                τ := τ, one_lt_tau := hτ }
              jx)) ∩
        closedBall
          (BallPackage.c q
            (index
              {
                toBallPackage :=
                  { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                    r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                τ := τ, one_lt_tau := hτ }
              jy))
          (BallPackage.r q
            (index
              {
                toBallPackage :=
                  { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                    r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                τ := τ, one_lt_tau := hτ }
              jy))) →
    ¬color
          {
            toBallPackage :=
              { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
            τ := τ, one_lt_tau := hτ }
          jy =
        color
          {
            toBallPackage :=
              { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
            τ := τ, one_lt_tau := hτ }
          jx
⊢ (Disjoint on fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)) (index p jx) (index p jy)
[PROOFSTEP]
contrapose! h
[GOAL]
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
i : Fin N
jx : Ordinal.{u}
jx_lt : jx < lastStep p
jxi : color p jx = ↑i
hx : index p jx ∈ s i
jy : Ordinal.{u}
jy_lt : jy < lastStep p
jyi : color p jy = ↑i
hy : index p jy ∈ s i
x_ne_y : index p jx ≠ index p jy
jxy : jx < jy
A : Set ℕ :=
  ⋃ (j : { j // j < jy }) (_ :
    Set.Nonempty
      (closedBall (BallPackage.c p.toBallPackage (index p ↑j)) (BallPackage.r p.toBallPackage (index p ↑j)) ∩
        closedBall (BallPackage.c p.toBallPackage (index p jy)) (BallPackage.r p.toBallPackage (index p jy)))),
    {color p ↑j}
color_j : color p jy = sInf (univ \ A)
h :
  ¬(Disjoint on fun j => closedBall (BallPackage.c q j) (BallPackage.r q j))
      (index
        {
          toBallPackage :=
            { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
              r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
          τ := τ, one_lt_tau := hτ }
        jx)
      (index
        {
          toBallPackage :=
            { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
              r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
          τ := τ, one_lt_tau := hτ }
        jy)
⊢ Set.Nonempty
      (closedBall
          (BallPackage.c q
            (index
              {
                toBallPackage :=
                  { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                    r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                τ := τ, one_lt_tau := hτ }
              jx))
          (BallPackage.r q
            (index
              {
                toBallPackage :=
                  { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                    r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                τ := τ, one_lt_tau := hτ }
              jx)) ∩
        closedBall
          (BallPackage.c q
            (index
              {
                toBallPackage :=
                  { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                    r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                τ := τ, one_lt_tau := hτ }
              jy))
          (BallPackage.r q
            (index
              {
                toBallPackage :=
                  { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                    r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                τ := τ, one_lt_tau := hτ }
              jy))) ∧
    color
        {
          toBallPackage :=
            { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
              r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
          τ := τ, one_lt_tau := hτ }
        jy =
      color
        {
          toBallPackage :=
            { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
              r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
          τ := τ, one_lt_tau := hτ }
        jx
[PROOFSTEP]
simpa only [jxi, jyi, and_true_iff, eq_self_iff_true, ← not_disjoint_iff_nonempty_inter] using h
[GOAL]
case inr.refine'_2
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
⊢ range q.c ⊆ ⋃ (i : Fin N) (j : β) (_ : j ∈ s i), ball (BallPackage.c q j) (BallPackage.r q j)
[PROOFSTEP]
refine' range_subset_iff.2 fun b => _
[GOAL]
case inr.refine'_2
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
b : β
⊢ BallPackage.c q b ∈ ⋃ (i : Fin N) (j : β) (_ : j ∈ s i), ball (BallPackage.c q j) (BallPackage.r q j)
[PROOFSTEP]
obtain ⟨a, ha⟩ : ∃ 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
[GOAL]
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
b : β
⊢ ∃ a,
    a < lastStep p ∧
      dist (BallPackage.c p.toBallPackage b) (BallPackage.c p.toBallPackage (index p a)) <
        BallPackage.r p.toBallPackage (index p a)
[PROOFSTEP]
simpa only [iUnionUpTo, exists_prop, mem_iUnion, mem_ball, Subtype.exists, Subtype.coe_mk] using
  p.mem_iUnionUpTo_lastStep b
[GOAL]
case inr.refine'_2.intro
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
b : β
a : Ordinal.{u}
ha :
  a < lastStep p ∧
    dist (BallPackage.c p.toBallPackage b) (BallPackage.c p.toBallPackage (index p a)) <
      BallPackage.r p.toBallPackage (index p a)
⊢ BallPackage.c q b ∈ ⋃ (i : Fin N) (j : β) (_ : j ∈ s i), ball (BallPackage.c q j) (BallPackage.r q j)
[PROOFSTEP]
simp only [exists_prop, mem_iUnion, mem_ball, mem_singleton_iff, biUnion_and', exists_eq_left, iUnion_exists,
  exists_and_left]
[GOAL]
case inr.refine'_2.intro
α : Type u_1
inst✝ : MetricSpace α
β : Type u
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
q : BallPackage β α
h✝ : Nonempty β
p : TauPackage β α :=
  {
    toBallPackage :=
      { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
        r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
    τ := τ, one_lt_tau := hτ }
s : Fin N → Set β := fun i => ⋃ (k : Ordinal.{u}) (_ : k < lastStep p) (_ : color p k = ↑i), {index p k}
b : β
a : Ordinal.{u}
ha :
  a < lastStep p ∧
    dist (BallPackage.c p.toBallPackage b) (BallPackage.c p.toBallPackage (index p a)) <
      BallPackage.r p.toBallPackage (index p a)
⊢ ∃ i i_1,
    color
          {
            toBallPackage :=
              { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
            τ := τ, one_lt_tau := hτ }
          i_1 =
        ↑i ∧
      i_1 <
          lastStep
            {
              toBallPackage :=
                { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                  r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
              τ := τ, one_lt_tau := hτ } ∧
        dist (BallPackage.c q b)
            (BallPackage.c q
              (index
                {
                  toBallPackage :=
                    { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                      r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                  τ := τ, one_lt_tau := hτ }
                i_1)) <
          BallPackage.r q
            (index
              {
                toBallPackage :=
                  { c := q.c, r := q.r, rpos := (_ : ∀ (b : β), 0 < BallPackage.r q b), r_bound := q.r_bound,
                    r_le := (_ : ∀ (b : β), BallPackage.r q b ≤ q.r_bound) },
                τ := τ, one_lt_tau := hτ }
              i_1)
[PROOFSTEP]
exact ⟨⟨p.color a, p.color_lt ha.1 hN⟩, a, rfl, ha⟩
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
rcases le_or_lt (μ s) 0 with (hμs | hμs)
[GOAL]
case inl
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : ↑↑μ s ≤ 0
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
have : μ s = 0 := le_bot_iff.1 hμs
[GOAL]
case inl
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : ↑↑μ s ≤ 0
this : ↑↑μ s = 0
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
refine' ⟨∅, by simp only [Finset.coe_empty, empty_subset], _, _⟩
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : ↑↑μ s ≤ 0
this : ↑↑μ s = 0
⊢ ↑∅ ⊆ s
[PROOFSTEP]
simp only [Finset.coe_empty, empty_subset]
[GOAL]
case inl.refine'_1
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : ↑↑μ s ≤ 0
this : ↑↑μ s = 0
⊢ ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ ∅), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s
[PROOFSTEP]
simp only [this, Finset.not_mem_empty, diff_empty, iUnion_false, iUnion_empty, nonpos_iff_eq_zero, mul_zero]
[GOAL]
case inl.refine'_2
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : ↑↑μ s ≤ 0
this : ↑↑μ s = 0
⊢ PairwiseDisjoint ↑∅ fun x => closedBall x (r x)
[PROOFSTEP]
simp only [Finset.coe_empty, pairwiseDisjoint_empty]
[GOAL]
case inr
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
cases isEmpty_or_nonempty α
[GOAL]
case inr.inl
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : IsEmpty α
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
simp only [eq_empty_of_isEmpty s, measure_empty] at hμs
[GOAL]
case inr.inl
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
h✝ : IsEmpty α
hμs : 0 < 0
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
exact (lt_irrefl _ hμs).elim
[GOAL]
case inr.inr
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
have Npos : N ≠ 0 := by
  rintro rfl
  inhabit α
  exact not_isEmpty_of_nonempty _ hN
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
⊢ N ≠ 0
[PROOFSTEP]
rintro rfl
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
τ : ℝ
hτ : 1 < τ
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
hN : IsEmpty (SatelliteConfig α 0 τ)
⊢ False
[PROOFSTEP]
inhabit α
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
τ : ℝ
hτ : 1 < τ
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
hN : IsEmpty (SatelliteConfig α 0 τ)
inhabited_h : Inhabited α
⊢ False
[PROOFSTEP]
exact not_isEmpty_of_nonempty _ hN
[GOAL]
case inr.inr
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
obtain ⟨o, so, omeas, μo⟩ : ∃ o : Set α, s ⊆ o ∧ MeasurableSet o ∧ μ o = μ s := exists_measurable_superset μ s
[GOAL]
case inr.inr.intro.intro.intro
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
let a : BallPackage s α :=
  { c := fun x => x
    r := fun x => r x
    rpos := fun x => rpos x x.2
    r_bound := 1
    r_le := fun x => rle x x.2 }
[GOAL]
case inr.inr.intro.intro.intro
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
rcases exist_disjoint_covering_families hτ hN a with ⟨u, hu, hu'⟩
[GOAL]
case inr.inr.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
have u_count : ∀ i, (u i).Countable := by
  intro i
  refine' (hu i).countable_of_nonempty_interior fun j _ => _
  have : (ball (j : α) (r j)).Nonempty := nonempty_ball.2 (a.rpos _)
  exact this.mono ball_subset_interior_closedBall
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
⊢ ∀ (i : Fin N), Set.Countable (u i)
[PROOFSTEP]
intro i
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
i : Fin N
⊢ Set.Countable (u i)
[PROOFSTEP]
refine' (hu i).countable_of_nonempty_interior fun j _ => _
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
i : Fin N
j : ↑s
x✝ : j ∈ u i
⊢ Set.Nonempty (interior (closedBall (BallPackage.c a j) (BallPackage.r a j)))
[PROOFSTEP]
have : (ball (j : α) (r j)).Nonempty := nonempty_ball.2 (a.rpos _)
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
i : Fin N
j : ↑s
x✝ : j ∈ u i
this : Set.Nonempty (ball (↑j) (r ↑j))
⊢ Set.Nonempty (interior (closedBall (BallPackage.c a j) (BallPackage.r a j)))
[PROOFSTEP]
exact this.mono ball_subset_interior_closedBall
[GOAL]
case inr.inr.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
let v : Fin N → Set α := fun i => ⋃ (x : s) (_ : x ∈ u i), closedBall x (r x)
[GOAL]
case inr.inr.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
have A : s = ⋃ i : Fin N, s ∩ v i :=
  by
  refine' Subset.antisymm _ (iUnion_subset fun i => inter_subset_left _ _)
  intro x hx
  obtain ⟨i, y, hxy, h'⟩ : ∃ (i : Fin N) (i_1 : ↥s), i_1 ∈ u i ∧ x ∈ ball (↑i_1) (r ↑i_1) :=
    by
    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]
  exact ⟨y, ⟨y.2, by simpa only [Subtype.coe_eta]⟩, ball_subset_closedBall h'⟩
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
⊢ s = ⋃ (i : Fin N), s ∩ v i
[PROOFSTEP]
refine' Subset.antisymm _ (iUnion_subset fun i => inter_subset_left _ _)
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
⊢ s ⊆ ⋃ (i : Fin N), s ∩ v i
[PROOFSTEP]
intro x hx
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
x : α
hx : x ∈ s
⊢ x ∈ ⋃ (i : Fin N), s ∩ v i
[PROOFSTEP]
obtain ⟨i, y, hxy, h'⟩ : ∃ (i : Fin N) (i_1 : ↥s), i_1 ∈ u i ∧ x ∈ ball (↑i_1) (r ↑i_1) :=
  by
  have : x ∈ range a.c := by simpa only [Subtype.range_coe_subtype, setOf_mem_eq]
  simpa only [mem_iUnion, bex_def] using hu' this
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
x : α
hx : x ∈ s
⊢ ∃ i i_1, i_1 ∈ u i ∧ x ∈ ball (↑i_1) (r ↑i_1)
[PROOFSTEP]
have : x ∈ range a.c := by simpa only [Subtype.range_coe_subtype, setOf_mem_eq]
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
x : α
hx : x ∈ s
⊢ x ∈ range a.c
[PROOFSTEP]
simpa only [Subtype.range_coe_subtype, setOf_mem_eq]
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
x : α
hx : x ∈ s
this : x ∈ range a.c
⊢ ∃ i i_1, i_1 ∈ u i ∧ x ∈ ball (↑i_1) (r ↑i_1)
[PROOFSTEP]
simpa only [mem_iUnion, bex_def] using hu' this
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
x : α
hx : x ∈ s
i : Fin N
y : ↑s
hxy : y ∈ u i
h' : x ∈ ball (↑y) (r ↑y)
⊢ x ∈ ⋃ (i : Fin N), s ∩ v i
[PROOFSTEP]
refine' mem_iUnion.2 ⟨i, ⟨hx, _⟩⟩
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
x : α
hx : x ∈ s
i : Fin N
y : ↑s
hxy : y ∈ u i
h' : x ∈ ball (↑y) (r ↑y)
⊢ x ∈ v i
[PROOFSTEP]
simp only [exists_prop, mem_iUnion, SetCoe.exists, exists_and_right, Subtype.coe_mk]
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
x : α
hx : x ∈ s
i : Fin N
y : ↑s
hxy : y ∈ u i
h' : x ∈ ball (↑y) (r ↑y)
⊢ ∃ x_1, (∃ x, { val := x_1, property := (_ : x_1 ∈ s) } ∈ u i) ∧ x ∈ closedBall x_1 (r x_1)
[PROOFSTEP]
exact ⟨y, ⟨y.2, by simpa only [Subtype.coe_eta]⟩, ball_subset_closedBall h'⟩
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
x : α
hx : x ∈ s
i : Fin N
y : ↑s
hxy : y ∈ u i
h' : x ∈ ball (↑y) (r ↑y)
⊢ { val := ↑y, property := (_ : ↑y ∈ s) } ∈ u i
[PROOFSTEP]
simpa only [Subtype.coe_eta]
[GOAL]
case inr.inr.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
have S : ∑ _i : Fin N, μ s / N ≤ ∑ i, μ (s ∩ v i) :=
  calc
    ∑ _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]
      · exact ENNReal.nat_ne_top _
    _ ≤ ∑ i, μ (s ∩ v i) := by
      conv_lhs => rw [A]
      apply measure_iUnion_fintype_le
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
⊢ ∑ _i : Fin N, ↑↑μ s / ↑N = ↑↑μ s
[PROOFSTEP]
simp only [Finset.card_fin, Finset.sum_const, nsmul_eq_mul]
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
⊢ ↑N * (↑↑μ s / ↑N) = ↑↑μ s
[PROOFSTEP]
rw [ENNReal.mul_div_cancel']
[GOAL]
case h0
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
⊢ ↑N ≠ 0
[PROOFSTEP]
simp only [Npos, Ne.def, Nat.cast_eq_zero, not_false_iff]
[GOAL]
case hI
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
⊢ ↑N ≠ ⊤
[PROOFSTEP]
exact ENNReal.nat_ne_top _
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
⊢ ↑↑μ s ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
[PROOFSTEP]
conv_lhs => rw [A]
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
| ↑↑μ s
[PROOFSTEP]
rw [A]
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
| ↑↑μ s
[PROOFSTEP]
rw [A]
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
| ↑↑μ s
[PROOFSTEP]
rw [A]
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
⊢ ↑↑μ (⋃ (i : Fin N), s ∩ v i) ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
[PROOFSTEP]
apply measure_iUnion_fintype_le
[GOAL]
case inr.inr.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
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 _⟩
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
⊢ ∃ i, i ∈ Finset.univ ∧ ↑↑μ s / ↑N ≤ ↑↑μ (s ∩ v i)
[PROOFSTEP]
apply ENNReal.exists_le_of_sum_le _ S
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
⊢ Finset.Nonempty Finset.univ
[PROOFSTEP]
exact ⟨⟨0, bot_lt_iff_ne_bot.2 Npos⟩, Finset.mem_univ _⟩
[GOAL]
case inr.inr.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / ↑N ≤ ↑↑μ (s ∩ v i)
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
replace hi : μ s / (N + 1) < μ (s ∩ v i)
[GOAL]
case hi
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / ↑N ≤ ↑↑μ (s ∩ v i)
⊢ ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
[PROOFSTEP]
apply lt_of_lt_of_le _ hi
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / ↑N ≤ ↑↑μ (s ∩ v i)
⊢ ↑↑μ s / (↑N + 1) < ↑↑μ s / ↑N
[PROOFSTEP]
apply (ENNReal.mul_lt_mul_left hμs.ne' (measure_lt_top μ s).ne).2
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / ↑N ≤ ↑↑μ (s ∩ v i)
⊢ (↑N + 1)⁻¹ < (↑N)⁻¹
[PROOFSTEP]
rw [ENNReal.inv_lt_inv]
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / ↑N ≤ ↑↑μ (s ∩ v i)
⊢ ↑N < ↑N + 1
[PROOFSTEP]
conv_lhs => rw [← add_zero (N : ℝ≥0∞)]
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / ↑N ≤ ↑↑μ (s ∩ v i)
| ↑N
[PROOFSTEP]
rw [← add_zero (N : ℝ≥0∞)]
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / ↑N ≤ ↑↑μ (s ∩ v i)
| ↑N
[PROOFSTEP]
rw [← add_zero (N : ℝ≥0∞)]
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / ↑N ≤ ↑↑μ (s ∩ v i)
| ↑N
[PROOFSTEP]
rw [← add_zero (N : ℝ≥0∞)]
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / ↑N ≤ ↑↑μ (s ∩ v i)
⊢ ↑N + 0 < ↑N + 1
[PROOFSTEP]
exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) zero_lt_one
[GOAL]
case inr.inr.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
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]
  rw [this, measure_biUnion (u_count i)]
  · exact (hu i).mono fun k => inter_subset_right _ _
  · exact fun b _ => omeas.inter measurableSet_closedBall
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
⊢ ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
[PROOFSTEP]
have : o ∩ v i = ⋃ (x : s) (_ : x ∈ u i), o ∩ closedBall x (r x) := by simp only [inter_iUnion]
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
⊢ o ∩ v i = ⋃ (x : ↑s) (_ : x ∈ u i), o ∩ closedBall (↑x) (r ↑x)
[PROOFSTEP]
simp only [inter_iUnion]
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
this : o ∩ v i = ⋃ (x : ↑s) (_ : x ∈ u i), o ∩ closedBall (↑x) (r ↑x)
⊢ ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
[PROOFSTEP]
rw [this, measure_biUnion (u_count i)]
[GOAL]
case hd
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
this : o ∩ v i = ⋃ (x : ↑s) (_ : x ∈ u i), o ∩ closedBall (↑x) (r ↑x)
⊢ PairwiseDisjoint (u i) fun x => o ∩ closedBall (↑x) (r ↑x)
[PROOFSTEP]
exact (hu i).mono fun k => inter_subset_right _ _
[GOAL]
case h
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
this : o ∩ v i = ⋃ (x : ↑s) (_ : x ∈ u i), o ∩ closedBall (↑x) (r ↑x)
⊢ ∀ (b : ↑s), b ∈ u i → MeasurableSet (o ∩ closedBall (↑b) (r ↑b))
[PROOFSTEP]
exact fun b _ => omeas.inter measurableSet_closedBall
[GOAL]
case inr.inr.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
obtain ⟨w, hw⟩ : ∃ w : Finset (u i), μ s / (N + 1) < ∑ x : u i in w, μ (o ∩ closedBall (x : α) (r (x : α))) :=
  by
  have C : HasSum (fun x : u i => μ (o ∩ closedBall x (r x))) (μ (o ∩ v i)) := by rw [B]; exact ENNReal.summable.hasSum
  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
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ ∃ w, ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
[PROOFSTEP]
have C : HasSum (fun x : u i => μ (o ∩ closedBall x (r x))) (μ (o ∩ v i)) := by rw [B]; exact ENNReal.summable.hasSum
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ HasSum (fun x => ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))) (↑↑μ (o ∩ v i))
[PROOFSTEP]
rw [B]
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ HasSum (fun x => ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))) (∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x)))
[PROOFSTEP]
exact ENNReal.summable.hasSum
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
C : HasSum (fun x => ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))) (↑↑μ (o ∩ v i))
⊢ ∃ w, ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
[PROOFSTEP]
have : μ s / (N + 1) < μ (o ∩ v i) := hi.trans_le (measure_mono (inter_subset_inter_left _ so))
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
C : HasSum (fun x => ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))) (↑↑μ (o ∩ v i))
this : ↑↑μ s / (↑N + 1) < ↑↑μ (o ∩ v i)
⊢ ∃ w, ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
[PROOFSTEP]
exact ((tendsto_order.1 C).1 _ this).exists
[GOAL]
case inr.inr.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ ∃ t,
    ↑t ⊆ s ∧
      ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s ∧
        PairwiseDisjoint ↑t fun x => closedBall x (r x)
[PROOFSTEP]
refine'
  ⟨Finset.image (fun x : u i => x) w, _, _, _⟩
    -- show that the finset is included in `s`.
[GOAL]
case inr.inr.intro.intro.intro.intro.intro.intro.intro.intro.refine'_1
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ ↑(Finset.image (fun x => ↑↑x) w) ⊆ s
[PROOFSTEP]
simp only [image_subset_iff, Finset.coe_image]
[GOAL]
case inr.inr.intro.intro.intro.intro.intro.intro.intro.intro.refine'_1
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ ↑w ⊆ (fun x => ↑↑x) ⁻¹' s
[PROOFSTEP]
intro y _
[GOAL]
case inr.inr.intro.intro.intro.intro.intro.intro.intro.intro.refine'_1
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
y : ↑(u i)
a✝ : y ∈ ↑w
⊢ y ∈ (fun x => ↑↑x) ⁻¹' s
[PROOFSTEP]
simp only [Subtype.coe_prop, mem_preimage]
  -- 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
[GOAL]
case inr.inr.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ Finset.image (fun x => ↑↑x) w), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s
[PROOFSTEP]
suffices H : μ (o \ ⋃ x ∈ w, closedBall (↑x) (r ↑x)) ≤ N / (N + 1) * μ s
[GOAL]
case inr.inr.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
H : ↑↑μ (o \ ⋃ (x : ↑(u i)) (_ : x ∈ w), closedBall (↑↑x) (r ↑↑x)) ≤ ↑N / (↑N + 1) * ↑↑μ s
⊢ ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ Finset.image (fun x => ↑↑x) w), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s
[PROOFSTEP]
rw [Finset.set_biUnion_finset_image]
[GOAL]
case inr.inr.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
H : ↑↑μ (o \ ⋃ (x : ↑(u i)) (_ : x ∈ w), closedBall (↑↑x) (r ↑↑x)) ≤ ↑N / (↑N + 1) * ↑↑μ s
⊢ ↑↑μ (s \ ⋃ (y : ↑(u i)) (_ : y ∈ w), closedBall (↑↑y) (r ↑↑y)) ≤ ↑N / (↑N + 1) * ↑↑μ s
[PROOFSTEP]
exact le_trans (measure_mono (diff_subset_diff so (Subset.refl _))) H
[GOAL]
case H
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ ↑↑μ (o \ ⋃ (x : ↑(u i)) (_ : x ∈ w), closedBall (↑↑x) (r ↑↑x)) ≤ ↑N / (↑N + 1) * ↑↑μ s
[PROOFSTEP]
rw [← diff_inter_self_eq_diff, measure_diff_le_iff_le_add _ (inter_subset_right _ _) (measure_lt_top μ _).ne]
[GOAL]
case H
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ ↑↑μ o ≤ ↑↑μ ((⋃ (x : ↑(u i)) (_ : x ∈ w), closedBall (↑↑x) (r ↑↑x)) ∩ o) + ↑N / (↑N + 1) * ↑↑μ s
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ MeasurableSet ((⋃ (x : ↑(u i)) (_ : x ∈ w), closedBall (↑↑x) (r ↑↑x)) ∩ o)
[PROOFSTEP]
swap
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ MeasurableSet ((⋃ (x : ↑(u i)) (_ : x ∈ w), closedBall (↑↑x) (r ↑↑x)) ∩ o)
[PROOFSTEP]
apply MeasurableSet.inter _ omeas
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ MeasurableSet (⋃ (x : ↑(u i)) (_ : x ∈ w), closedBall (↑↑x) (r ↑↑x))
[PROOFSTEP]
haveI : Encodable (u i) := (u_count i).toEncodable
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
this : Encodable ↑(u i)
⊢ MeasurableSet (⋃ (x : ↑(u i)) (_ : x ∈ w), closedBall (↑↑x) (r ↑↑x))
[PROOFSTEP]
exact MeasurableSet.iUnion fun b => MeasurableSet.iUnion fun _ => measurableSet_closedBall
[GOAL]
case H
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ ↑↑μ o ≤ ↑↑μ ((⋃ (x : ↑(u i)) (_ : x ∈ w), closedBall (↑↑x) (r ↑↑x)) ∩ o) + ↑N / (↑N + 1) * ↑↑μ s
[PROOFSTEP]
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
  _ ≤ μ ((⋃ x ∈ w, closedBall (↑x) (r ↑x)) ∩ o) + N / (N + 1) * μ s :=
    by
    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_biUnion_coe, inter_comm _ o, inter_iUnion₂, Finset.set_biUnion_coe, measure_biUnion_finset]
    · have : (w : Set (u i)).PairwiseDisjoint fun b : u i => closedBall (b : α) (r (b : α)) := by intro k _ l _ hkl;
        exact hu i k.2 l.2 (Subtype.val_injective.ne hkl)
      exact this.mono fun k => inter_subset_right _ _
    · intro b _
      apply omeas.inter measurableSet_closedBall
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ ↑↑μ o = 1 / (↑N + 1) * ↑↑μ s + ↑N / (↑N + 1) * ↑↑μ s
[PROOFSTEP]
rw [μo, ← add_mul, ENNReal.div_add_div_same, add_comm, ENNReal.div_self, one_mul]
[GOAL]
case h0
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ ↑N + 1 ≠ 0
[PROOFSTEP]
simp
[GOAL]
case hI
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ ↑N + 1 ≠ ⊤
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ 1 / (↑N + 1) * ↑↑μ s + ↑N / (↑N + 1) * ↑↑μ s ≤
    ↑↑μ ((⋃ (x : ↑(u i)) (_ : x ∈ w), closedBall (↑↑x) (r ↑↑x)) ∩ o) + ↑N / (↑N + 1) * ↑↑μ s
[PROOFSTEP]
refine' add_le_add _ le_rfl
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ 1 / (↑N + 1) * ↑↑μ s ≤ ↑↑μ ((⋃ (x : ↑(u i)) (_ : x ∈ w), closedBall (↑↑x) (r ↑↑x)) ∩ o)
[PROOFSTEP]
rw [div_eq_mul_inv, one_mul, mul_comm, ← div_eq_mul_inv]
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ ↑↑μ s / (↑N + 1) ≤ ↑↑μ ((⋃ (x : ↑(u i)) (_ : x ∈ w), closedBall (↑↑x) (r ↑↑x)) ∩ o)
[PROOFSTEP]
apply hw.le.trans (le_of_eq _)
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x)) = ↑↑μ ((⋃ (x : ↑(u i)) (_ : x ∈ w), closedBall (↑↑x) (r ↑↑x)) ∩ o)
[PROOFSTEP]
rw [← Finset.set_biUnion_coe, inter_comm _ o, inter_iUnion₂, Finset.set_biUnion_coe, measure_biUnion_finset]
[GOAL]
case hd
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ PairwiseDisjoint ↑w fun x => o ∩ closedBall (↑↑x) (r ↑↑x)
[PROOFSTEP]
have : (w : Set (u i)).PairwiseDisjoint fun b : u i => closedBall (b : α) (r (b : α)) := by intro k _ l _ hkl;
  exact hu i k.2 l.2 (Subtype.val_injective.ne hkl)
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ PairwiseDisjoint ↑w fun b => closedBall (↑↑b) (r ↑↑b)
[PROOFSTEP]
intro k _ l _ hkl
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
k : ↑(u i)
a✝¹ : k ∈ ↑w
l : ↑(u i)
a✝ : l ∈ ↑w
hkl : k ≠ l
⊢ (Disjoint on fun b => closedBall (↑↑b) (r ↑↑b)) k l
[PROOFSTEP]
exact hu i k.2 l.2 (Subtype.val_injective.ne hkl)
[GOAL]
case hd
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
this : PairwiseDisjoint ↑w fun b => closedBall (↑↑b) (r ↑↑b)
⊢ PairwiseDisjoint ↑w fun x => o ∩ closedBall (↑↑x) (r ↑↑x)
[PROOFSTEP]
exact this.mono fun k => inter_subset_right _ _
[GOAL]
case hm
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ ∀ (b : ↑(u i)), b ∈ w → MeasurableSet (o ∩ closedBall (↑↑b) (r ↑↑b))
[PROOFSTEP]
intro b _
[GOAL]
case hm
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
b : ↑(u i)
a✝ : b ∈ w
⊢ MeasurableSet (o ∩ closedBall (↑↑b) (r ↑↑b))
[PROOFSTEP]
apply omeas.inter measurableSet_closedBall
[GOAL]
case inr.inr.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
⊢ PairwiseDisjoint ↑(Finset.image (fun x => ↑↑x) w) fun x => closedBall x (r x)
[PROOFSTEP]
intro k hk l hl hkl
[GOAL]
case inr.inr.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
k : α
hk : k ∈ ↑(Finset.image (fun x => ↑↑x) w)
l : α
hl : l ∈ ↑(Finset.image (fun x => ↑↑x) w)
hkl : k ≠ l
⊢ (Disjoint on fun x => closedBall x (r x)) k l
[PROOFSTEP]
obtain ⟨k', _, rfl⟩ : ∃ k' : u i, k' ∈ w ∧ ↑k' = k := by
  simpa only [mem_image, Finset.mem_coe, Finset.coe_image] using hk
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
k : α
hk : k ∈ ↑(Finset.image (fun x => ↑↑x) w)
l : α
hl : l ∈ ↑(Finset.image (fun x => ↑↑x) w)
hkl : k ≠ l
⊢ ∃ k', k' ∈ w ∧ ↑↑k' = k
[PROOFSTEP]
simpa only [mem_image, Finset.mem_coe, Finset.coe_image] using hk
[GOAL]
case inr.inr.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3.intro.intro
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
l : α
hl : l ∈ ↑(Finset.image (fun x => ↑↑x) w)
k' : ↑(u i)
left✝ : k' ∈ w
hk : ↑↑k' ∈ ↑(Finset.image (fun x => ↑↑x) w)
hkl : ↑↑k' ≠ l
⊢ (Disjoint on fun x => closedBall x (r x)) (↑↑k') l
[PROOFSTEP]
obtain ⟨l', _, rfl⟩ : ∃ l' : u i, l' ∈ w ∧ ↑l' = l := by
  simpa only [mem_image, Finset.mem_coe, Finset.coe_image] using hl
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
l : α
hl : l ∈ ↑(Finset.image (fun x => ↑↑x) w)
k' : ↑(u i)
left✝ : k' ∈ w
hk : ↑↑k' ∈ ↑(Finset.image (fun x => ↑↑x) w)
hkl : ↑↑k' ≠ l
⊢ ∃ l', l' ∈ w ∧ ↑↑l' = l
[PROOFSTEP]
simpa only [mem_image, Finset.mem_coe, Finset.coe_image] using hl
[GOAL]
case inr.inr.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3.intro.intro.intro.intro
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
k' : ↑(u i)
left✝¹ : k' ∈ w
hk : ↑↑k' ∈ ↑(Finset.image (fun x => ↑↑x) w)
l' : ↑(u i)
left✝ : l' ∈ w
hl : ↑↑l' ∈ ↑(Finset.image (fun x => ↑↑x) w)
hkl : ↑↑k' ≠ ↑↑l'
⊢ (Disjoint on fun x => closedBall x (r x)) ↑↑k' ↑↑l'
[PROOFSTEP]
have k'nel' : (k' : s) ≠ l' := by intro h; rw [h] at hkl ; exact hkl rfl
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
k' : ↑(u i)
left✝¹ : k' ∈ w
hk : ↑↑k' ∈ ↑(Finset.image (fun x => ↑↑x) w)
l' : ↑(u i)
left✝ : l' ∈ w
hl : ↑↑l' ∈ ↑(Finset.image (fun x => ↑↑x) w)
hkl : ↑↑k' ≠ ↑↑l'
⊢ ↑k' ≠ ↑l'
[PROOFSTEP]
intro h
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
k' : ↑(u i)
left✝¹ : k' ∈ w
hk : ↑↑k' ∈ ↑(Finset.image (fun x => ↑↑x) w)
l' : ↑(u i)
left✝ : l' ∈ w
hl : ↑↑l' ∈ ↑(Finset.image (fun x => ↑↑x) w)
hkl : ↑↑k' ≠ ↑↑l'
h : ↑k' = ↑l'
⊢ False
[PROOFSTEP]
rw [h] at hkl
[GOAL]
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
k' : ↑(u i)
left✝¹ : k' ∈ w
hk : ↑↑k' ∈ ↑(Finset.image (fun x => ↑↑x) w)
l' : ↑(u i)
left✝ : l' ∈ w
hl : ↑↑l' ∈ ↑(Finset.image (fun x => ↑↑x) w)
hkl : ↑↑l' ≠ ↑↑l'
h : ↑k' = ↑l'
⊢ False
[PROOFSTEP]
exact hkl rfl
[GOAL]
case inr.inr.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3.intro.intro.intro.intro
α : Type u_1
inst✝⁴ : MetricSpace α
β : Type u
inst✝³ : SecondCountableTopology α
inst✝² : MeasurableSpace α
inst✝¹ : OpensMeasurableSpace α
μ : Measure α
inst✝ : IsFiniteMeasure μ
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
s : Set α
r : α → ℝ
rpos : ∀ (x : α), x ∈ s → 0 < r x
rle : ∀ (x : α), x ∈ s → r x ≤ 1
hμs : 0 < ↑↑μ s
h✝ : Nonempty α
Npos : N ≠ 0
o : Set α
so : s ⊆ o
omeas : MeasurableSet o
μo : ↑↑μ o = ↑↑μ s
a : BallPackage (↑s) α :=
  { c := fun x => ↑x, r := fun x => r ↑x, rpos := (_ : ∀ (x : ↑s), 0 < r ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s), r ↑x ≤ 1) }
u : Fin N → Set ↑s
hu : ∀ (i : Fin N), PairwiseDisjoint (u i) fun j => closedBall (BallPackage.c a j) (BallPackage.r a j)
hu' : range a.c ⊆ ⋃ (i : Fin N) (j : ↑s) (_ : j ∈ u i), ball (BallPackage.c a j) (BallPackage.r a j)
u_count : ∀ (i : Fin N), Set.Countable (u i)
v : Fin N → Set α := fun i => ⋃ (x : ↑s) (_ : x ∈ u i), closedBall (↑x) (r ↑x)
A : s = ⋃ (i : Fin N), s ∩ v i
S : ∑ _i : Fin N, ↑↑μ s / ↑N ≤ ∑ i : Fin N, ↑↑μ (s ∩ v i)
i : Fin N
hi : ↑↑μ s / (↑N + 1) < ↑↑μ (s ∩ v i)
B : ↑↑μ (o ∩ v i) = ∑' (x : ↑(u i)), ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
w : Finset ↑(u i)
hw : ↑↑μ s / (↑N + 1) < ∑ x in w, ↑↑μ (o ∩ closedBall (↑↑x) (r ↑↑x))
k' : ↑(u i)
left✝¹ : k' ∈ w
hk : ↑↑k' ∈ ↑(Finset.image (fun x => ↑↑x) w)
l' : ↑(u i)
left✝ : l' ∈ w
hl : ↑↑l' ∈ ↑(Finset.image (fun x => ↑↑x) w)
hkl : ↑↑k' ≠ ↑↑l'
k'nel' : ↑k' ≠ ↑l'
⊢ (Disjoint on fun x => closedBall x (r x)) ↑↑k' ↑↑l'
[PROOFSTEP]
exact hu i k'.2 l'.2 k'nel'
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
⊢ ∃ t,
    Set.Countable t ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧
        (∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd) = 0 ∧
            PairwiseDisjoint t fun p => closedBall p.fst p.snd
[PROOFSTEP]
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. -/
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
⊢ ∃ t,
    Set.Countable t ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧
        (∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd) = 0 ∧
            PairwiseDisjoint t fun p => closedBall p.fst p.snd
[PROOFSTEP]
let P : Finset (α × ℝ) → Prop := fun t =>
  ((t : Set (α × ℝ)).PairwiseDisjoint fun p => closedBall p.1 p.2) ∧
    (∀ p : α × ℝ, p ∈ t → p.1 ∈ s) ∧
      ∀ p : α × ℝ,
        p ∈ t →
          p.2 ∈
            f
              p.1
                /- Given a finite good covering of a subset `s`, one can find a larger finite good covering,
                    covering additionally a proportion at least `1/(N+1)` of leftover points. This follows from
                    `exist_finset_disjoint_balls_large_measure` applied to balls not intersecting the initial
                    covering. -/
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
⊢ ∃ t,
    Set.Countable t ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧
        (∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd) = 0 ∧
            PairwiseDisjoint t fun p => closedBall p.fst p.snd
[PROOFSTEP]
have :
  ∀ t : Finset (α × ℝ),
    P t →
      ∃ u : Finset (α × ℝ),
        t ⊆ u ∧
          P u ∧
            μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u), closedBall p.1 p.2) ≤
              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
  set s' := s \ B
  have : ∀ x ∈ s', ∃ r ∈ f x ∩ Ioo 0 1, Disjoint B (closedBall x r) :=
    by
    intro x hx
    have xs : x ∈ s := ((mem_diff x).1 hx).1
    rcases eq_empty_or_nonempty B with (hB | hB)
    · rcases hf x xs 1 zero_lt_one with ⟨r, hr, h'r⟩
      exact ⟨r, ⟨hr, h'r⟩, by simp only [hB, empty_disjoint]⟩
    · let r := infDist x B
      have : 0 < min r 1 := lt_min ((B_closed.not_mem_iff_infDist_pos hB).1 ((mem_diff x).1 hx).2) zero_lt_one
      rcases hf x xs _ this with ⟨r, hr, h'r⟩
      refine' ⟨r, ⟨hr, ⟨h'r.1, h'r.2.trans_le (min_le_right _ _)⟩⟩, _⟩
      rw [disjoint_comm]
      exact disjoint_closedBall_of_lt_infDist (h'r.2.trans_le (min_le_left _ _))
  choose! r hr using this
  obtain ⟨v, vs', hμv, hv⟩ :
    ∃ v : Finset α,
      ↑v ⊆ s' ∧
        μ (s' \ ⋃ x ∈ v, closedBall x (r x)) ≤ N / (N + 1) * μ s' ∧
          (v : Set α).PairwiseDisjoint fun x : α => closedBall x (r x) :=
    haveI rI : ∀ x ∈ s', r x ∈ Ioo (0 : ℝ) 1 := fun x hx => (hr x hx).1.2
    exist_finset_disjoint_balls_large_measure μ hτ hN s' r (fun x hx => (rI x hx).1) fun x hx => (rI x hx).2.le
  refine' ⟨t ∪ Finset.image (fun x => (x, r x)) v, Finset.subset_union_left _ _, ⟨_, _, _⟩, _⟩
  · 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⟩
      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⟩
      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
  · intro p hp
    rcases Finset.mem_union.1 hp with (h'p | h'p)
    · exact ht.2.1 p h'p
    · rcases Finset.mem_image.1 h'p with ⟨p', p'v, rfl⟩
      exact ((mem_diff _).1 (vs' (Finset.mem_coe.2 p'v))).1
  · intro p hp
    rcases Finset.mem_union.1 hp with (h'p | h'p)
    · exact ht.2.2 p h'p
    · 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_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. -/
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
⊢ ∀ (t : Finset (α × ℝ)),
    P t →
      ∃ u,
        t ⊆ u ∧
          P u ∧
            ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u), closedBall p.fst p.snd) ≤
              ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
[PROOFSTEP]
intro t ht
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
⊢ ∃ u,
    t ⊆ u ∧
      P u ∧
        ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u), closedBall p.fst p.snd) ≤
          ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
[PROOFSTEP]
set B := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.1 p.2 with hB
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
⊢ ∃ u, t ⊆ u ∧ P u ∧ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u), closedBall p.fst p.snd) ≤ ↑N / (↑N + 1) * ↑↑μ (s \ B)
[PROOFSTEP]
have B_closed : IsClosed B := isClosed_biUnion (Finset.finite_toSet _) fun i _ => isClosed_ball
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
⊢ ∃ u, t ⊆ u ∧ P u ∧ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u), closedBall p.fst p.snd) ≤ ↑N / (↑N + 1) * ↑↑μ (s \ B)
[PROOFSTEP]
set s' := s \ B
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
⊢ ∃ u, t ⊆ u ∧ P u ∧ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u), closedBall p.fst p.snd) ≤ ↑N / (↑N + 1) * ↑↑μ s'
[PROOFSTEP]
have : ∀ x ∈ s', ∃ r ∈ f x ∩ Ioo 0 1, Disjoint B (closedBall x r) :=
  by
  intro x hx
  have xs : x ∈ s := ((mem_diff x).1 hx).1
  rcases eq_empty_or_nonempty B with (hB | hB)
  · rcases hf x xs 1 zero_lt_one with ⟨r, hr, h'r⟩
    exact ⟨r, ⟨hr, h'r⟩, by simp only [hB, empty_disjoint]⟩
  · let r := infDist x B
    have : 0 < min r 1 := lt_min ((B_closed.not_mem_iff_infDist_pos hB).1 ((mem_diff x).1 hx).2) zero_lt_one
    rcases hf x xs _ this with ⟨r, hr, h'r⟩
    refine' ⟨r, ⟨hr, ⟨h'r.1, h'r.2.trans_le (min_le_right _ _)⟩⟩, _⟩
    rw [disjoint_comm]
    exact disjoint_closedBall_of_lt_infDist (h'r.2.trans_le (min_le_left _ _))
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
⊢ ∀ (x : α), x ∈ s' → ∃ r, r ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x r)
[PROOFSTEP]
intro x hx
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
x : α
hx : x ∈ s'
⊢ ∃ r, r ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x r)
[PROOFSTEP]
have xs : x ∈ s := ((mem_diff x).1 hx).1
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
x : α
hx : x ∈ s'
xs : x ∈ s
⊢ ∃ r, r ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x r)
[PROOFSTEP]
rcases eq_empty_or_nonempty B with (hB | hB)
[GOAL]
case inl
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB✝ : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
x : α
hx : x ∈ s'
xs : x ∈ s
hB : B = ∅
⊢ ∃ r, r ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x r)
[PROOFSTEP]
rcases hf x xs 1 zero_lt_one with ⟨r, hr, h'r⟩
[GOAL]
case inl.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB✝ : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
x : α
hx : x ∈ s'
xs : x ∈ s
hB : B = ∅
r : ℝ
hr : r ∈ f x
h'r : r ∈ Ioo 0 1
⊢ ∃ r, r ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x r)
[PROOFSTEP]
exact ⟨r, ⟨hr, h'r⟩, by simp only [hB, empty_disjoint]⟩
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB✝ : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
x : α
hx : x ∈ s'
xs : x ∈ s
hB : B = ∅
r : ℝ
hr : r ∈ f x
h'r : r ∈ Ioo 0 1
⊢ Disjoint B (closedBall x r)
[PROOFSTEP]
simp only [hB, empty_disjoint]
[GOAL]
case inr
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB✝ : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
x : α
hx : x ∈ s'
xs : x ∈ s
hB : Set.Nonempty B
⊢ ∃ r, r ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x r)
[PROOFSTEP]
let r := infDist x B
[GOAL]
case inr
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB✝ : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
x : α
hx : x ∈ s'
xs : x ∈ s
hB : Set.Nonempty B
r : ℝ := infDist x B
⊢ ∃ r, r ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x r)
[PROOFSTEP]
have : 0 < min r 1 := lt_min ((B_closed.not_mem_iff_infDist_pos hB).1 ((mem_diff x).1 hx).2) zero_lt_one
[GOAL]
case inr
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB✝ : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
x : α
hx : x ∈ s'
xs : x ∈ s
hB : Set.Nonempty B
r : ℝ := infDist x B
this : 0 < min r 1
⊢ ∃ r, r ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x r)
[PROOFSTEP]
rcases hf x xs _ this with ⟨r, hr, h'r⟩
[GOAL]
case inr.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB✝ : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
x : α
hx : x ∈ s'
xs : x ∈ s
hB : Set.Nonempty B
r✝ : ℝ := infDist x B
this : 0 < min r✝ 1
r : ℝ
hr : r ∈ f x
h'r : r ∈ Ioo 0 (min r✝ 1)
⊢ ∃ r, r ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x r)
[PROOFSTEP]
refine' ⟨r, ⟨hr, ⟨h'r.1, h'r.2.trans_le (min_le_right _ _)⟩⟩, _⟩
[GOAL]
case inr.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB✝ : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
x : α
hx : x ∈ s'
xs : x ∈ s
hB : Set.Nonempty B
r✝ : ℝ := infDist x B
this : 0 < min r✝ 1
r : ℝ
hr : r ∈ f x
h'r : r ∈ Ioo 0 (min r✝ 1)
⊢ Disjoint B (closedBall x r)
[PROOFSTEP]
rw [disjoint_comm]
[GOAL]
case inr.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB✝ : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
x : α
hx : x ∈ s'
xs : x ∈ s
hB : Set.Nonempty B
r✝ : ℝ := infDist x B
this : 0 < min r✝ 1
r : ℝ
hr : r ∈ f x
h'r : r ∈ Ioo 0 (min r✝ 1)
⊢ Disjoint (closedBall x r) B
[PROOFSTEP]
exact disjoint_closedBall_of_lt_infDist (h'r.2.trans_le (min_le_left _ _))
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
this : ∀ (x : α), x ∈ s' → ∃ r, r ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x r)
⊢ ∃ u, t ⊆ u ∧ P u ∧ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u), closedBall p.fst p.snd) ≤ ↑N / (↑N + 1) * ↑↑μ s'
[PROOFSTEP]
choose! r hr using this
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
⊢ ∃ u, t ⊆ u ∧ P u ∧ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u), closedBall p.fst p.snd) ≤ ↑N / (↑N + 1) * ↑↑μ s'
[PROOFSTEP]
obtain ⟨v, vs', hμv, hv⟩ :
  ∃ v : Finset α,
    ↑v ⊆ s' ∧
      μ (s' \ ⋃ x ∈ v, closedBall x (r x)) ≤ N / (N + 1) * μ s' ∧
        (v : Set α).PairwiseDisjoint fun x : α => closedBall x (r x) :=
  haveI rI : ∀ x ∈ s', r x ∈ Ioo (0 : ℝ) 1 := fun x hx => (hr x hx).1.2
  exist_finset_disjoint_balls_large_measure μ hτ hN s' r (fun x hx => (rI x hx).1) fun x hx => (rI x hx).2.le
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
⊢ ∃ u, t ⊆ u ∧ P u ∧ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u), closedBall p.fst p.snd) ≤ ↑N / (↑N + 1) * ↑↑μ s'
[PROOFSTEP]
refine' ⟨t ∪ Finset.image (fun x => (x, r x)) v, Finset.subset_union_left _ _, ⟨_, _, _⟩, _⟩
[GOAL]
case intro.intro.intro.refine'_1
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
⊢ PairwiseDisjoint ↑(t ∪ Finset.image (fun x => (x, r x)) v) fun p => closedBall p.fst p.snd
[PROOFSTEP]
simp only [Finset.coe_union, pairwiseDisjoint_union, ht.1, true_and_iff, Finset.coe_image]
[GOAL]
case intro.intro.intro.refine'_1
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
⊢ (PairwiseDisjoint ((fun x => (x, r x)) '' ↑v) fun p => closedBall p.fst p.snd) ∧
    ∀ ⦃i : α × ℝ⦄,
      i ∈ ↑t →
        ∀ ⦃j : α × ℝ⦄,
          j ∈ (fun x => (x, r x)) '' ↑v → i ≠ j → Disjoint (closedBall i.fst i.snd) (closedBall j.fst j.snd)
[PROOFSTEP]
constructor
[GOAL]
case intro.intro.intro.refine'_1.left
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
⊢ PairwiseDisjoint ((fun x => (x, r x)) '' ↑v) fun p => closedBall p.fst p.snd
[PROOFSTEP]
intro p hp q hq hpq
[GOAL]
case intro.intro.intro.refine'_1.left
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
p : α × ℝ
hp : p ∈ (fun x => (x, r x)) '' ↑v
q : α × ℝ
hq : q ∈ (fun x => (x, r x)) '' ↑v
hpq : p ≠ q
⊢ (Disjoint on fun p => closedBall p.fst p.snd) p q
[PROOFSTEP]
rcases(mem_image _ _ _).1 hp with ⟨p', p'v, rfl⟩
[GOAL]
case intro.intro.intro.refine'_1.left.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
q : α × ℝ
hq : q ∈ (fun x => (x, r x)) '' ↑v
p' : α
p'v : p' ∈ ↑v
hp : (p', r p') ∈ (fun x => (x, r x)) '' ↑v
hpq : (p', r p') ≠ q
⊢ (Disjoint on fun p => closedBall p.fst p.snd) (p', r p') q
[PROOFSTEP]
rcases(mem_image _ _ _).1 hq with ⟨q', q'v, rfl⟩
[GOAL]
case intro.intro.intro.refine'_1.left.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
p' : α
p'v : p' ∈ ↑v
hp : (p', r p') ∈ (fun x => (x, r x)) '' ↑v
q' : α
q'v : q' ∈ ↑v
hq : (q', r q') ∈ (fun x => (x, r x)) '' ↑v
hpq : (p', r p') ≠ (q', r q')
⊢ (Disjoint on fun p => closedBall p.fst p.snd) (p', r p') (q', r q')
[PROOFSTEP]
refine' hv p'v q'v fun hp'q' => _
[GOAL]
case intro.intro.intro.refine'_1.left.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
p' : α
p'v : p' ∈ ↑v
hp : (p', r p') ∈ (fun x => (x, r x)) '' ↑v
q' : α
q'v : q' ∈ ↑v
hq : (q', r q') ∈ (fun x => (x, r x)) '' ↑v
hpq : (p', r p') ≠ (q', r q')
hp'q' : p' = (q', r q').fst
⊢ False
[PROOFSTEP]
rw [hp'q'] at hpq
[GOAL]
case intro.intro.intro.refine'_1.left.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
p' : α
p'v : p' ∈ ↑v
hp : (p', r p') ∈ (fun x => (x, r x)) '' ↑v
q' : α
q'v : q' ∈ ↑v
hq : (q', r q') ∈ (fun x => (x, r x)) '' ↑v
hpq : ((q', r q').fst, r (q', r q').fst) ≠ (q', r q')
hp'q' : p' = (q', r q').fst
⊢ False
[PROOFSTEP]
exact hpq rfl
[GOAL]
case intro.intro.intro.refine'_1.right
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
⊢ ∀ ⦃i : α × ℝ⦄,
    i ∈ ↑t →
      ∀ ⦃j : α × ℝ⦄, j ∈ (fun x => (x, r x)) '' ↑v → i ≠ j → Disjoint (closedBall i.fst i.snd) (closedBall j.fst j.snd)
[PROOFSTEP]
intro p hp q hq hpq
[GOAL]
case intro.intro.intro.refine'_1.right
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
p : α × ℝ
hp : p ∈ ↑t
q : α × ℝ
hq : q ∈ (fun x => (x, r x)) '' ↑v
hpq : p ≠ q
⊢ Disjoint (closedBall p.fst p.snd) (closedBall q.fst q.snd)
[PROOFSTEP]
rcases(mem_image _ _ _).1 hq with ⟨q', q'v, rfl⟩
[GOAL]
case intro.intro.intro.refine'_1.right.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
p : α × ℝ
hp : p ∈ ↑t
q' : α
q'v : q' ∈ ↑v
hq : (q', r q') ∈ (fun x => (x, r x)) '' ↑v
hpq : p ≠ (q', r q')
⊢ Disjoint (closedBall p.fst p.snd) (closedBall (q', r q').fst (q', r q').snd)
[PROOFSTEP]
apply disjoint_of_subset_left _ (hr q' (vs' q'v)).2
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
p : α × ℝ
hp : p ∈ ↑t
q' : α
q'v : q' ∈ ↑v
hq : (q', r q') ∈ (fun x => (x, r x)) '' ↑v
hpq : p ≠ (q', r q')
⊢ closedBall p.fst p.snd ⊆ B
[PROOFSTEP]
rw [hB, ← Finset.set_biUnion_coe]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
p : α × ℝ
hp : p ∈ ↑t
q' : α
q'v : q' ∈ ↑v
hq : (q', r q') ∈ (fun x => (x, r x)) '' ↑v
hpq : p ≠ (q', r q')
⊢ closedBall p.fst p.snd ⊆ ⋃ (x : α × ℝ) (_ : x ∈ ↑t), closedBall x.fst x.snd
[PROOFSTEP]
exact subset_biUnion_of_mem (u := fun x : α × ℝ => closedBall x.1 x.2) hp
[GOAL]
case intro.intro.intro.refine'_2
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
⊢ ∀ (p : α × ℝ), p ∈ t ∪ Finset.image (fun x => (x, r x)) v → p.fst ∈ s
[PROOFSTEP]
intro p hp
[GOAL]
case intro.intro.intro.refine'_2
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
p : α × ℝ
hp : p ∈ t ∪ Finset.image (fun x => (x, r x)) v
⊢ p.fst ∈ s
[PROOFSTEP]
rcases Finset.mem_union.1 hp with (h'p | h'p)
[GOAL]
case intro.intro.intro.refine'_2.inl
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
p : α × ℝ
hp : p ∈ t ∪ Finset.image (fun x => (x, r x)) v
h'p : p ∈ t
⊢ p.fst ∈ s
[PROOFSTEP]
exact ht.2.1 p h'p
[GOAL]
case intro.intro.intro.refine'_2.inr
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
p : α × ℝ
hp : p ∈ t ∪ Finset.image (fun x => (x, r x)) v
h'p : p ∈ Finset.image (fun x => (x, r x)) v
⊢ p.fst ∈ s
[PROOFSTEP]
rcases Finset.mem_image.1 h'p with ⟨p', p'v, rfl⟩
[GOAL]
case intro.intro.intro.refine'_2.inr.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
p' : α
p'v : p' ∈ v
hp : (p', r p') ∈ t ∪ Finset.image (fun x => (x, r x)) v
h'p : (p', r p') ∈ Finset.image (fun x => (x, r x)) v
⊢ (p', r p').fst ∈ s
[PROOFSTEP]
exact ((mem_diff _).1 (vs' (Finset.mem_coe.2 p'v))).1
[GOAL]
case intro.intro.intro.refine'_3
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
⊢ ∀ (p : α × ℝ), p ∈ t ∪ Finset.image (fun x => (x, r x)) v → p.snd ∈ f p.fst
[PROOFSTEP]
intro p hp
[GOAL]
case intro.intro.intro.refine'_3
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
p : α × ℝ
hp : p ∈ t ∪ Finset.image (fun x => (x, r x)) v
⊢ p.snd ∈ f p.fst
[PROOFSTEP]
rcases Finset.mem_union.1 hp with (h'p | h'p)
[GOAL]
case intro.intro.intro.refine'_3.inl
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
p : α × ℝ
hp : p ∈ t ∪ Finset.image (fun x => (x, r x)) v
h'p : p ∈ t
⊢ p.snd ∈ f p.fst
[PROOFSTEP]
exact ht.2.2 p h'p
[GOAL]
case intro.intro.intro.refine'_3.inr
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
p : α × ℝ
hp : p ∈ t ∪ Finset.image (fun x => (x, r x)) v
h'p : p ∈ Finset.image (fun x => (x, r x)) v
⊢ p.snd ∈ f p.fst
[PROOFSTEP]
rcases Finset.mem_image.1 h'p with ⟨p', p'v, rfl⟩
[GOAL]
case intro.intro.intro.refine'_3.inr.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
p' : α
p'v : p' ∈ v
hp : (p', r p') ∈ t ∪ Finset.image (fun x => (x, r x)) v
h'p : (p', r p') ∈ Finset.image (fun x => (x, r x)) v
⊢ (p', r p').snd ∈ f (p', r p').fst
[PROOFSTEP]
exact (hr p' (vs' p'v)).1.1
[GOAL]
case intro.intro.intro.refine'_4
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
⊢ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t ∪ Finset.image (fun x => (x, r x)) v), closedBall p.fst p.snd) ≤
    ↑N / (↑N + 1) * ↑↑μ s'
[PROOFSTEP]
convert hμv using 2
[GOAL]
case h.e'_3.h.e'_3
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
t : Finset (α × ℝ)
ht : P t
B : Set α := ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
hB : B = ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd
B_closed : IsClosed B
s' : Set α := s \ B
r : α → ℝ
hr : ∀ (x : α), x ∈ s' → r x ∈ f x ∩ Ioo 0 1 ∧ Disjoint B (closedBall x (r x))
v : Finset α
vs' : ↑v ⊆ s'
hμv : ↑↑μ (s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)) ≤ ↑N / (↑N + 1) * ↑↑μ s'
hv : PairwiseDisjoint ↑v fun x => closedBall x (r x)
⊢ s \ ⋃ (p : α × ℝ) (_ : p ∈ t ∪ Finset.image (fun x => (x, r x)) v), closedBall p.fst p.snd =
    s' \ ⋃ (x : α) (_ : x ∈ v), closedBall x (r x)
[PROOFSTEP]
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. -/
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
this :
  ∀ (t : Finset (α × ℝ)),
    P t →
      ∃ u,
        t ⊆ u ∧
          P u ∧
            ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u), closedBall p.fst p.snd) ≤
              ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
⊢ ∃ t,
    Set.Countable t ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧
        (∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd) = 0 ∧
            PairwiseDisjoint t fun p => closedBall p.fst p.snd
[PROOFSTEP]
choose! F hF using this
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
⊢ ∃ t,
    Set.Countable t ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧
        (∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd) = 0 ∧
            PairwiseDisjoint t fun p => closedBall p.fst p.snd
[PROOFSTEP]
let u n := F^[n] ∅
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
⊢ ∃ t,
    Set.Countable t ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧
        (∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd) = 0 ∧
            PairwiseDisjoint t fun p => closedBall p.fst p.snd
[PROOFSTEP]
have u_succ : ∀ n : ℕ, u n.succ = F (u n) := fun n => by simp only [Function.comp_apply, Function.iterate_succ']
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
n : ℕ
⊢ u (Nat.succ n) = F (u n)
[PROOFSTEP]
simp only [Function.comp_apply, Function.iterate_succ']
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
⊢ ∃ t,
    Set.Countable t ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧
        (∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd) = 0 ∧
            PairwiseDisjoint t fun p => closedBall p.fst p.snd
[PROOFSTEP]
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 [Finset.not_mem_empty, IsEmpty.forall_iff, Finset.coe_empty, forall₂_true_iff, and_self_iff,
      pairwiseDisjoint_empty]
  · rw [u_succ]
    exact (hF (u n) IH).2.1
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
⊢ ∀ (n : ℕ), P (u n)
[PROOFSTEP]
intro n
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
n : ℕ
⊢ P (u n)
[PROOFSTEP]
induction' n with n IH
[GOAL]
case zero
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
⊢ P (u Nat.zero)
[PROOFSTEP]
simp only [Prod.forall, id.def, Function.iterate_zero, Nat.zero_eq]
[GOAL]
case zero
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
⊢ (PairwiseDisjoint ↑∅ fun p => closedBall p.fst p.snd) ∧
    (∀ (a : α) (b : ℝ), (a, b) ∈ ∅ → a ∈ s) ∧ ∀ (a : α) (b : ℝ), (a, b) ∈ ∅ → b ∈ f a
[PROOFSTEP]
simp only [Finset.not_mem_empty, IsEmpty.forall_iff, Finset.coe_empty, forall₂_true_iff, and_self_iff,
  pairwiseDisjoint_empty]
[GOAL]
case succ
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
n : ℕ
IH : P (u n)
⊢ P (u (Nat.succ n))
[PROOFSTEP]
rw [u_succ]
[GOAL]
case succ
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
n : ℕ
IH : P (u n)
⊢ P (F (u n))
[PROOFSTEP]
exact (hF (u n) IH).2.1
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
⊢ ∃ t,
    Set.Countable t ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧
        (∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd) = 0 ∧
            PairwiseDisjoint t fun p => closedBall p.fst p.snd
[PROOFSTEP]
refine' ⟨⋃ n, u n, countable_iUnion fun n => (u n).countable_toSet, _, _, _, _⟩
[GOAL]
case intro.intro.intro.refine'_1
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
⊢ ∀ (p : α × ℝ), p ∈ ⋃ (n : ℕ), ↑(u n) → p.fst ∈ s
[PROOFSTEP]
intro p hp
[GOAL]
case intro.intro.intro.refine'_1
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
p : α × ℝ
hp : p ∈ ⋃ (n : ℕ), ↑(u n)
⊢ p.fst ∈ s
[PROOFSTEP]
rcases mem_iUnion.1 hp with ⟨n, hn⟩
[GOAL]
case intro.intro.intro.refine'_1.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
p : α × ℝ
hp : p ∈ ⋃ (n : ℕ), ↑(u n)
n : ℕ
hn : p ∈ ↑(u n)
⊢ p.fst ∈ s
[PROOFSTEP]
exact (Pu n).2.1 p (Finset.mem_coe.1 hn)
[GOAL]
case intro.intro.intro.refine'_2
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
⊢ ∀ (p : α × ℝ), p ∈ ⋃ (n : ℕ), ↑(u n) → p.snd ∈ f p.fst
[PROOFSTEP]
intro p hp
[GOAL]
case intro.intro.intro.refine'_2
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
p : α × ℝ
hp : p ∈ ⋃ (n : ℕ), ↑(u n)
⊢ p.snd ∈ f p.fst
[PROOFSTEP]
rcases mem_iUnion.1 hp with ⟨n, hn⟩
[GOAL]
case intro.intro.intro.refine'_2.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
p : α × ℝ
hp : p ∈ ⋃ (n : ℕ), ↑(u n)
n : ℕ
hn : p ∈ ↑(u n)
⊢ p.snd ∈ f p.fst
[PROOFSTEP]
exact (Pu n).2.2 p (Finset.mem_coe.1 hn)
[GOAL]
case intro.intro.intro.refine'_3
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
⊢ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) = 0
[PROOFSTEP]
have A :
  ∀ n,
    μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ n : ℕ, (u n : Set (α × ℝ))), closedBall p.fst p.snd) ≤
      μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) :=
  by
  intro n
  apply measure_mono
  apply diff_subset_diff (Subset.refl _)
  exact biUnion_subset_biUnion_left (subset_iUnion (fun i => (u i : Set (α × ℝ))) n)
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
⊢ ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
[PROOFSTEP]
intro n
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
n : ℕ
⊢ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
[PROOFSTEP]
apply measure_mono
[GOAL]
case h
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
n : ℕ
⊢ s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd ⊆
    s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd
[PROOFSTEP]
apply diff_subset_diff (Subset.refl _)
[GOAL]
case h
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
n : ℕ
⊢ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd ⊆
    ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd
[PROOFSTEP]
exact biUnion_subset_biUnion_left (subset_iUnion (fun i => (u i : Set (α × ℝ))) n)
[GOAL]
case intro.intro.intro.refine'_3
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
⊢ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) = 0
[PROOFSTEP]
have B : ∀ n, μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (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]
  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 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 _
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
⊢ ∀ (n : ℕ), ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
[PROOFSTEP]
intro n
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
n : ℕ
⊢ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
[PROOFSTEP]
induction' n with n IH
[GOAL]
case zero
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
⊢ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u Nat.zero), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ Nat.zero * ↑↑μ s
[PROOFSTEP]
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]
[GOAL]
case succ
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
n : ℕ
IH : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
⊢ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u (Nat.succ n)), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ Nat.succ n * ↑↑μ s
[PROOFSTEP]
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 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 _
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
n : ℕ
IH : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
⊢ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u (Nat.succ n)), closedBall p.fst p.snd) ≤
    ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
[PROOFSTEP]
rw [u_succ]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
n : ℕ
IH : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
⊢ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F (u n)), closedBall p.fst p.snd) ≤
    ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
[PROOFSTEP]
exact (hF (u n) (Pu n)).2.2
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
n : ℕ
IH : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
⊢ ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ Nat.succ n * ↑↑μ s
[PROOFSTEP]
rw [pow_succ, mul_assoc]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
n : ℕ
IH : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
⊢ ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤
    ↑N / (↑N + 1) * ((↑N / (↑N + 1)) ^ n * ↑↑μ s)
[PROOFSTEP]
exact mul_le_mul_left' IH _
[GOAL]
case intro.intro.intro.refine'_3
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
B : ∀ (n : ℕ), ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
⊢ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) = 0
[PROOFSTEP]
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
  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]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
B : ∀ (n : ℕ), ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
⊢ Tendsto (fun n => (↑N / (↑N + 1)) ^ n * ↑↑μ s) atTop (𝓝 (0 * ↑↑μ s))
[PROOFSTEP]
apply ENNReal.Tendsto.mul_const _ (Or.inr (measure_lt_top μ s).ne)
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
B : ∀ (n : ℕ), ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
⊢ Tendsto (fun x => (↑N / (↑N + 1)) ^ x) atTop (𝓝 0)
[PROOFSTEP]
apply ENNReal.tendsto_pow_atTop_nhds_0_of_lt_1
[GOAL]
case hr
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
B : ∀ (n : ℕ), ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
⊢ ↑N / (↑N + 1) < 1
[PROOFSTEP]
rw [ENNReal.div_lt_iff, one_mul]
[GOAL]
case hr
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
B : ∀ (n : ℕ), ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
⊢ ↑N < ↑N + 1
[PROOFSTEP]
conv_lhs => rw [← add_zero (N : ℝ≥0∞)]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
B : ∀ (n : ℕ), ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
| ↑N
[PROOFSTEP]
rw [← add_zero (N : ℝ≥0∞)]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
B : ∀ (n : ℕ), ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
| ↑N
[PROOFSTEP]
rw [← add_zero (N : ℝ≥0∞)]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
B : ∀ (n : ℕ), ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
| ↑N
[PROOFSTEP]
rw [← add_zero (N : ℝ≥0∞)]
[GOAL]
case hr
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
B : ∀ (n : ℕ), ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
⊢ ↑N + 0 < ↑N + 1
[PROOFSTEP]
exact ENNReal.add_lt_add_left (ENNReal.nat_ne_top N) zero_lt_one
[GOAL]
case hr.h0
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
B : ∀ (n : ℕ), ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
⊢ ↑N + 1 ≠ 0 ∨ ↑N ≠ 0
[PROOFSTEP]
simp only [true_or_iff, add_eq_zero_iff, Ne.def, not_false_iff, one_ne_zero, and_false_iff]
[GOAL]
case hr.ht
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
B : ∀ (n : ℕ), ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
⊢ ↑N + 1 ≠ ⊤ ∨ ↑N ≠ ⊤
[PROOFSTEP]
simp only [ENNReal.nat_ne_top, Ne.def, not_false_iff, or_true_iff]
[GOAL]
case intro.intro.intro.refine'_3
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
B : ∀ (n : ℕ), ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
C : Tendsto (fun n => (↑N / (↑N + 1)) ^ n * ↑↑μ s) atTop (𝓝 (0 * ↑↑μ s))
⊢ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) = 0
[PROOFSTEP]
rw [zero_mul] at C
[GOAL]
case intro.intro.intro.refine'_3
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
B : ∀ (n : ℕ), ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
C : Tendsto (fun n => (↑N / (↑N + 1)) ^ n * ↑↑μ s) atTop (𝓝 0)
⊢ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) = 0
[PROOFSTEP]
apply le_bot_iff.1
[GOAL]
case intro.intro.intro.refine'_3
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
A :
  ∀ (n : ℕ),
    ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤
      ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd)
B : ∀ (n : ℕ), ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ u n), closedBall p.fst p.snd) ≤ (↑N / (↑N + 1)) ^ n * ↑↑μ s
C : Tendsto (fun n => (↑N / (↑N + 1)) ^ n * ↑↑μ s) atTop (𝓝 0)
⊢ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ ⋃ (n : ℕ), ↑(u n)), closedBall p.fst p.snd) ≤ ⊥
[PROOFSTEP]
exact le_of_tendsto_of_tendsto' tendsto_const_nhds C fun n => (A n).trans (B n)
[GOAL]
case intro.intro.intro.refine'_4
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
⊢ PairwiseDisjoint (⋃ (n : ℕ), ↑(u n)) fun p => closedBall p.fst p.snd
[PROOFSTEP]
refine' (pairwiseDisjoint_iUnion _).2 fun n => (Pu n).1
[GOAL]
case intro.intro.intro.refine'_4
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
⊢ Directed (fun x x_1 => x ⊆ x_1) fun n => ↑(u n)
[PROOFSTEP]
apply (monotone_nat_of_le_succ fun n => ?_).directed_le
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
n : ℕ
⊢ ↑(u n) ≤ ↑(u (n + 1))
[PROOFSTEP]
rw [← Nat.succ_eq_add_one, u_succ]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : IsFiniteMeasure μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
N : ℕ
τ : ℝ
hτ : 1 < τ
hN : IsEmpty (SatelliteConfig α N τ)
P : Finset (α × ℝ) → Prop :=
  fun t =>
    (PairwiseDisjoint ↑t fun p => closedBall p.fst p.snd) ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧ ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
F : Finset (α × ℝ) → Finset (α × ℝ)
hF :
  ∀ (t : Finset (α × ℝ)),
    P t →
      t ⊆ F t ∧
        P (F t) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ F t), closedBall p.fst p.snd) ≤
            ↑N / (↑N + 1) * ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd)
u : ℕ → Finset (α × ℝ) := fun n => F^[n] ∅
u_succ : ∀ (n : ℕ), u (Nat.succ n) = F (u n)
Pu : ∀ (n : ℕ), P (u n)
n : ℕ
⊢ ↑(u n) ≤ ↑(F (u n))
[PROOFSTEP]
exact (hF (u n) (Pu n)).1
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
⊢ ∃ t,
    Set.Countable t ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧
        (∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd) = 0 ∧
            PairwiseDisjoint t fun p => closedBall p.fst p.snd
[PROOFSTEP]
rcases exists_absolutelyContinuous_isFiniteMeasure μ with ⟨ν, hν, hμν⟩
[GOAL]
case intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
ν : Measure α
hν : IsFiniteMeasure ν
hμν : μ ≪ ν
⊢ ∃ t,
    Set.Countable t ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧
        (∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd) = 0 ∧
            PairwiseDisjoint t fun p => closedBall p.fst p.snd
[PROOFSTEP]
rcases exists_disjoint_closedBall_covering_ae_of_finiteMeasure_aux ν f s hf with ⟨t, t_count, ts, tr, tν, tdisj⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
ν : Measure α
hν : IsFiniteMeasure ν
hμν : μ ≪ ν
t : Set (α × ℝ)
t_count : Set.Countable t
ts : ∀ (p : α × ℝ), p ∈ t → p.fst ∈ s
tr : ∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst
tν : ↑↑ν (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd) = 0
tdisj : PairwiseDisjoint t fun p => closedBall p.fst p.snd
⊢ ∃ t,
    Set.Countable t ∧
      (∀ (p : α × ℝ), p ∈ t → p.fst ∈ s) ∧
        (∀ (p : α × ℝ), p ∈ t → p.snd ∈ f p.fst) ∧
          ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ t), closedBall p.fst p.snd) = 0 ∧
            PairwiseDisjoint t fun p => closedBall p.fst p.snd
[PROOFSTEP]
exact ⟨t, t_count, ts, tr, hμν tν, tdisj⟩
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x ∩ Ioo 0 (R x)) ∧
          ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0 ∧ PairwiseDisjoint t fun x => closedBall x (r x)
[PROOFSTEP]
let g x := f x ∩ Ioo 0 (R x)
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x ∩ Ioo 0 (R x)) ∧
          ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0 ∧ PairwiseDisjoint t fun x => closedBall x (r x)
[PROOFSTEP]
have hg : ∀ x ∈ s, ∀ δ > 0, (g x ∩ Ioo 0 δ).Nonempty :=
  by
  intro x hx δ δpos
  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 _ _)⟩⟩⟩
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
⊢ ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
[PROOFSTEP]
intro x hx δ δpos
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
x : α
hx : x ∈ s
δ : ℝ
δpos : δ > 0
⊢ Set.Nonempty (g x ∩ Ioo 0 δ)
[PROOFSTEP]
rcases hf x hx (min δ (R x)) (lt_min δpos (hR x hx)) with ⟨r, hr⟩
[GOAL]
case intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
x : α
hx : x ∈ s
δ : ℝ
δpos : δ > 0
r : ℝ
hr : r ∈ f x ∩ Ioo 0 (min δ (R x))
⊢ Set.Nonempty (g x ∩ Ioo 0 δ)
[PROOFSTEP]
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 _ _)⟩⟩⟩
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x ∩ Ioo 0 (R x)) ∧
          ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0 ∧ PairwiseDisjoint t fun x => closedBall x (r x)
[PROOFSTEP]
rcases exists_disjoint_closedBall_covering_ae_aux μ g s hg with ⟨v, v_count, vs, vg, μv, v_disj⟩
[GOAL]
case intro.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x ∩ Ioo 0 (R x)) ∧
          ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0 ∧ PairwiseDisjoint t fun x => closedBall x (r x)
[PROOFSTEP]
let t := Prod.fst '' v
[GOAL]
case intro.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x ∩ Ioo 0 (R x)) ∧
          ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0 ∧ PairwiseDisjoint t fun x => closedBall x (r x)
[PROOFSTEP]
have : ∀ x ∈ t, ∃ r : ℝ, (x, r) ∈ v := by
  intro x hx
  rcases(mem_image _ _ _).1 hx with ⟨⟨p, q⟩, hp, rfl⟩
  exact ⟨q, hp⟩
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
⊢ ∀ (x : α), x ∈ t → ∃ r, (x, r) ∈ v
[PROOFSTEP]
intro x hx
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
x : α
hx : x ∈ t
⊢ ∃ r, (x, r) ∈ v
[PROOFSTEP]
rcases(mem_image _ _ _).1 hx with ⟨⟨p, q⟩, hp, rfl⟩
[GOAL]
case intro.mk.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
p : α
q : ℝ
hp : (p, q) ∈ v
hx : (p, q).fst ∈ t
⊢ ∃ r, ((p, q).fst, r) ∈ v
[PROOFSTEP]
exact ⟨q, hp⟩
[GOAL]
case intro.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
this : ∀ (x : α), x ∈ t → ∃ r, (x, r) ∈ v
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x ∩ Ioo 0 (R x)) ∧
          ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0 ∧ PairwiseDisjoint t fun x => closedBall x (r x)
[PROOFSTEP]
choose! r hr using this
[GOAL]
case intro.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x ∩ Ioo 0 (R x)) ∧
          ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0 ∧ PairwiseDisjoint t fun x => closedBall x (r x)
[PROOFSTEP]
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
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
⊢ (fun x => (x, r x)) '' t = v
[PROOFSTEP]
have I : ∀ p : α × ℝ, p ∈ v → 0 ≤ p.2 := fun p hp => (vg p hp).2.1.le
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
⊢ (fun x => (x, r x)) '' t = v
[PROOFSTEP]
apply Subset.antisymm
[GOAL]
case h₁
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
⊢ (fun x => (x, r x)) '' t ⊆ v
[PROOFSTEP]
simp only [image_subset_iff]
[GOAL]
case h₁
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
⊢ v ⊆ Prod.fst ⁻¹' ((fun x => (x, r x)) ⁻¹' v)
[PROOFSTEP]
rintro ⟨x, p⟩ hxp
[GOAL]
case h₁.mk
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
x : α
p : ℝ
hxp : (x, p) ∈ v
⊢ (x, p) ∈ Prod.fst ⁻¹' ((fun x => (x, r x)) ⁻¹' v)
[PROOFSTEP]
simp only [mem_preimage]
[GOAL]
case h₁.mk
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
x : α
p : ℝ
hxp : (x, p) ∈ v
⊢ (x, r x) ∈ v
[PROOFSTEP]
exact hr _ (mem_image_of_mem _ hxp)
[GOAL]
case h₂
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
⊢ v ⊆ (fun x => (x, r x)) '' t
[PROOFSTEP]
rintro ⟨x, p⟩ hxp
[GOAL]
case h₂.mk
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
x : α
p : ℝ
hxp : (x, p) ∈ v
⊢ (x, p) ∈ (fun x => (x, r x)) '' t
[PROOFSTEP]
have hxrx : (x, r x) ∈ v := hr _ (mem_image_of_mem _ hxp)
[GOAL]
case h₂.mk
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
x : α
p : ℝ
hxp : (x, p) ∈ v
hxrx : (x, r x) ∈ v
⊢ (x, p) ∈ (fun x => (x, r x)) '' t
[PROOFSTEP]
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]⟩
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
x : α
p : ℝ
hxp : (x, p) ∈ v
hxrx : (x, r x) ∈ v
⊢ p = r x
[PROOFSTEP]
by_contra h
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
x : α
p : ℝ
hxp : (x, p) ∈ v
hxrx : (x, r x) ∈ v
h : ¬p = r x
⊢ False
[PROOFSTEP]
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
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
x : α
p : ℝ
hxp : (x, p) ∈ v
hxrx : (x, r x) ∈ v
h : ¬p = r x
⊢ (x, p) ≠ (x, r x)
[PROOFSTEP]
simpa only [true_and_iff, Prod.mk.inj_iff, eq_self_iff_true, Ne.def] using h
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
x : α
p : ℝ
hxp : (x, p) ∈ v
hxrx : (x, r x) ∈ v
h : ¬p = r x
A : (x, p) ≠ (x, r x)
⊢ False
[PROOFSTEP]
have H := v_disj hxp hxrx A
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
x : α
p : ℝ
hxp : (x, p) ∈ v
hxrx : (x, r x) ∈ v
h : ¬p = r x
A : (x, p) ≠ (x, r x)
H : (Disjoint on fun p => closedBall p.fst p.snd) (x, p) (x, r x)
⊢ False
[PROOFSTEP]
contrapose H
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
x : α
p : ℝ
hxp : (x, p) ∈ v
hxrx : (x, r x) ∈ v
h : ¬p = r x
A : (x, p) ≠ (x, r x)
H : ¬False
⊢ ¬(Disjoint on fun p => closedBall p.fst p.snd) (x, p) (x, r x)
[PROOFSTEP]
rw [not_disjoint_iff_nonempty_inter]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
x : α
p : ℝ
hxp : (x, p) ∈ v
hxrx : (x, r x) ∈ v
h : ¬p = r x
A : (x, p) ≠ (x, r x)
H : ¬False
⊢ Set.Nonempty ((fun p => closedBall p.fst p.snd) (x, p) ∩ (fun p => closedBall p.fst p.snd) (x, r x))
[PROOFSTEP]
refine' ⟨x, by simp (config := { proj := false }) [I _ hxp, I _ hxrx]⟩
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
x : α
p : ℝ
hxp : (x, p) ∈ v
hxrx : (x, r x) ∈ v
h : ¬p = r x
A : (x, p) ≠ (x, r x)
H : ¬False
⊢ x ∈ (fun p => closedBall p.fst p.snd) (x, p) ∩ (fun p => closedBall p.fst p.snd) (x, r x)
[PROOFSTEP]
simp (config := { proj := false }) [I _ hxp, I _ hxrx]
[GOAL]
case h₂.mk
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
x : α
p : ℝ
hxp : (x, p) ∈ v
hxrx : (x, r x) ∈ v
this : p = r x
⊢ (x, p) ∈ (fun x => (x, r x)) '' t
[PROOFSTEP]
rw [this]
[GOAL]
case h₂.mk
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
x : α
p : ℝ
hxp : (x, p) ∈ v
hxrx : (x, r x) ∈ v
this : p = r x
⊢ (x, r x) ∈ (fun x => (x, r x)) '' t
[PROOFSTEP]
apply mem_image_of_mem
[GOAL]
case h₂.mk.h
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
I : ∀ (p : α × ℝ), p ∈ v → 0 ≤ p.snd
x : α
p : ℝ
hxp : (x, p) ∈ v
hxrx : (x, r x) ∈ v
this : p = r x
⊢ x ∈ t
[PROOFSTEP]
exact mem_image_of_mem _ hxp
[GOAL]
case intro.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
im_t : (fun x => (x, r x)) '' t = v
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x ∩ Ioo 0 (R x)) ∧
          ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0 ∧ PairwiseDisjoint t fun x => closedBall x (r x)
[PROOFSTEP]
refine' ⟨t, r, v_count.image _, _, _, _, _⟩
[GOAL]
case intro.intro.intro.intro.intro.refine'_1
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
im_t : (fun x => (x, r x)) '' t = v
⊢ t ⊆ s
[PROOFSTEP]
intro x hx
[GOAL]
case intro.intro.intro.intro.intro.refine'_1
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
im_t : (fun x => (x, r x)) '' t = v
x : α
hx : x ∈ t
⊢ x ∈ s
[PROOFSTEP]
rcases(mem_image _ _ _).1 hx with ⟨⟨p, q⟩, hp, rfl⟩
[GOAL]
case intro.intro.intro.intro.intro.refine'_1.intro.mk.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
im_t : (fun x => (x, r x)) '' t = v
p : α
q : ℝ
hp : (p, q) ∈ v
hx : (p, q).fst ∈ t
⊢ (p, q).fst ∈ s
[PROOFSTEP]
exact vs _ hp
[GOAL]
case intro.intro.intro.intro.intro.refine'_2
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
im_t : (fun x => (x, r x)) '' t = v
⊢ ∀ (x : α), x ∈ t → r x ∈ f x ∩ Ioo 0 (R x)
[PROOFSTEP]
intro x hx
[GOAL]
case intro.intro.intro.intro.intro.refine'_2
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
im_t : (fun x => (x, r x)) '' t = v
x : α
hx : x ∈ t
⊢ r x ∈ f x ∩ Ioo 0 (R x)
[PROOFSTEP]
rcases(mem_image _ _ _).1 hx with ⟨⟨p, q⟩, _, rfl⟩
[GOAL]
case intro.intro.intro.intro.intro.refine'_2.intro.mk.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
im_t : (fun x => (x, r x)) '' t = v
p : α
q : ℝ
left✝ : (p, q) ∈ v
hx : (p, q).fst ∈ t
⊢ r (p, q).fst ∈ f (p, q).fst ∩ Ioo 0 (R (p, q).fst)
[PROOFSTEP]
exact vg _ (hr _ hx)
[GOAL]
case intro.intro.intro.intro.intro.refine'_3
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
im_t : (fun x => (x, r x)) '' t = v
⊢ ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0
[PROOFSTEP]
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]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
im_t : (fun x => (x, r x)) '' t = v
⊢ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) = ⋃ (p : α × ℝ) (_ : p ∈ (fun x => (x, r x)) '' t), closedBall p.fst p.snd
[PROOFSTEP]
conv_rhs => rw [biUnion_image]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
im_t : (fun x => (x, r x)) '' t = v
| ⋃ (p : α × ℝ) (_ : p ∈ (fun x => (x, r x)) '' t), closedBall p.fst p.snd
[PROOFSTEP]
rw [biUnion_image]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
im_t : (fun x => (x, r x)) '' t = v
| ⋃ (p : α × ℝ) (_ : p ∈ (fun x => (x, r x)) '' t), closedBall p.fst p.snd
[PROOFSTEP]
rw [biUnion_image]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
im_t : (fun x => (x, r x)) '' t = v
| ⋃ (p : α × ℝ) (_ : p ∈ (fun x => (x, r x)) '' t), closedBall p.fst p.snd
[PROOFSTEP]
rw [biUnion_image]
[GOAL]
case intro.intro.intro.intro.intro.refine'_3
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
im_t : (fun x => (x, r x)) '' t = v
this :
  ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) = ⋃ (p : α × ℝ) (_ : p ∈ (fun x => (x, r x)) '' t), closedBall p.fst p.snd
⊢ ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0
[PROOFSTEP]
rw [this, im_t]
[GOAL]
case intro.intro.intro.intro.intro.refine'_3
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
im_t : (fun x => (x, r x)) '' t = v
this :
  ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) = ⋃ (p : α × ℝ) (_ : p ∈ (fun x => (x, r x)) '' t), closedBall p.fst p.snd
⊢ ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
[PROOFSTEP]
exact μv
[GOAL]
case intro.intro.intro.intro.intro.refine'_4
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
im_t : (fun x => (x, r x)) '' t = v
⊢ PairwiseDisjoint t fun x => closedBall x (r x)
[PROOFSTEP]
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]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
im_t : (fun x => (x, r x)) '' t = v
⊢ InjOn (fun x => (x, r x)) t
[PROOFSTEP]
simp (config := { contextual := true }) only [InjOn, Prod.mk.inj_iff, imp_true_iff, eq_self_iff_true]
[GOAL]
case intro.intro.intro.intro.intro.refine'_4
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
R : α → ℝ
hR : ∀ (x : α), x ∈ s → 0 < R x
g : α → Set ℝ := fun x => f x ∩ Ioo 0 (R x)
hg : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
v : Set (α × ℝ)
v_count : Set.Countable v
vs : ∀ (p : α × ℝ), p ∈ v → p.fst ∈ s
vg : ∀ (p : α × ℝ), p ∈ v → p.snd ∈ g p.fst
μv : ↑↑μ (s \ ⋃ (p : α × ℝ) (_ : p ∈ v), closedBall p.fst p.snd) = 0
v_disj : PairwiseDisjoint v fun p => closedBall p.fst p.snd
t : Set α := Prod.fst '' v
r : α → ℝ
hr : ∀ (x : α), x ∈ t → (x, r x) ∈ v
im_t : (fun x => (x, r x)) '' t = v
A : InjOn (fun x => (x, r x)) t
⊢ PairwiseDisjoint t fun x => closedBall x (r x)
[PROOFSTEP]
rwa [← im_t, A.pairwiseDisjoint_image] at v_disj
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x) ∧
          s ⊆ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) ∧ ∑' (x : ↑t), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
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ε)
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
⊢ ε / 2 ≠ 0
[PROOFSTEP]
simpa only [or_false_iff, Ne.def, ENNReal.div_eq_zero_iff, ENNReal.one_ne_top] using hε
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x) ∧
          s ⊆ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) ∧ ∑' (x : ↑t), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
have : ∀ x ∈ s, ∃ R > 0, ball x R ⊆ u := fun x hx => Metric.mem_nhds_iff.1 (u_open.mem_nhds (su hx))
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
this : ∀ (x : α), x ∈ s → ∃ R, R > 0 ∧ ball x R ⊆ u
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x) ∧
          s ⊆ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) ∧ ∑' (x : ↑t), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
choose! R hR using this
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x) ∧
          s ⊆ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) ∧ ∑' (x : ↑t), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
obtain ⟨t0, r0, t0_count, t0s, hr0, μt0, t0_disj⟩ :
  ∃ (t0 : Set α) (r0 : α → ℝ),
    t0.Countable ∧
      t0 ⊆ s ∧
        (∀ x ∈ t0, r0 x ∈ f x ∩ Ioo 0 (R x)) ∧
          μ (s \ ⋃ x ∈ t0, closedBall x (r0 x)) = 0 ∧ t0.PairwiseDisjoint fun x => closedBall x (r0 x) :=
  exists_disjoint_closedBall_covering_ae μ f s hf R fun x hx =>
    (hR x hx).1
      -- we have constructed an almost everywhere covering of `s` by disjoint balls. Let `s'` be the
        -- remaining set.
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x) ∧
          s ⊆ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) ∧ ∑' (x : ↑t), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
let s' := s \ ⋃ x ∈ t0, closedBall x (r0 x)
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x) ∧
          s ⊆ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) ∧ ∑' (x : ↑t), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
have s's : s' ⊆ s := diff_subset _ _
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x) ∧
          s ⊆ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) ∧ ∑' (x : ↑t), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
obtain ⟨N, τ, hτ, H⟩ : ∃ N τ, 1 < τ ∧ IsEmpty (Besicovitch.SatelliteConfig α N τ) :=
  HasBesicovitchCovering.no_satelliteConfig
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x) ∧
          s ⊆ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) ∧ ∑' (x : ↑t), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
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])
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
⊢ ε / 2 / ↑N ≠ 0
[PROOFSTEP]
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]
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x) ∧
          s ⊆ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) ∧ ∑' (x : ↑t), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
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 hf x (s's hx) (min r 1) (lt_min rpos zero_lt_one) with ⟨R', hR'⟩
  exact
    ⟨R', ⟨hR'.1, hR'.2.1, hR'.2.2.trans_le (min_le_right _ _)⟩,
      Subset.trans (closedBall_subset_ball (hR'.2.2.trans_le (min_le_left _ _))) hr⟩
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
⊢ ∀ (x : α), x ∈ s' → ∃ r1, r1 ∈ f x ∩ Ioo 0 1 ∧ closedBall x r1 ⊆ v
[PROOFSTEP]
intro x hx
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
x : α
hx : x ∈ s'
⊢ ∃ r1, r1 ∈ f x ∩ Ioo 0 1 ∧ closedBall x r1 ⊆ v
[PROOFSTEP]
rcases Metric.mem_nhds_iff.1 (v_open.mem_nhds (s'v hx)) with ⟨r, rpos, hr⟩
[GOAL]
case intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
x : α
hx : x ∈ s'
r : ℝ
rpos : r > 0
hr : ball x r ⊆ v
⊢ ∃ r1, r1 ∈ f x ∩ Ioo 0 1 ∧ closedBall x r1 ⊆ v
[PROOFSTEP]
rcases hf x (s's hx) (min r 1) (lt_min rpos zero_lt_one) with ⟨R', hR'⟩
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
x : α
hx : x ∈ s'
r : ℝ
rpos : r > 0
hr : ball x r ⊆ v
R' : ℝ
hR' : R' ∈ f x ∩ Ioo 0 (min r 1)
⊢ ∃ r1, r1 ∈ f x ∩ Ioo 0 1 ∧ closedBall x r1 ⊆ v
[PROOFSTEP]
exact
  ⟨R', ⟨hR'.1, hR'.2.1, hR'.2.2.trans_le (min_le_right _ _)⟩,
    Subset.trans (closedBall_subset_ball (hR'.2.2.trans_le (min_le_left _ _))) hr⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
this : ∀ (x : α), x ∈ s' → ∃ r1, r1 ∈ f x ∩ Ioo 0 1 ∧ closedBall x r1 ⊆ v
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x) ∧
          s ⊆ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) ∧ ∑' (x : ↑t), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
choose! r1 hr1 using this
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x) ∧
          s ⊆ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) ∧ ∑' (x : ↑t), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
let q : BallPackage s' α :=
  { c := fun x => x
    r := fun x => r1 x
    rpos := fun x => (hr1 x.1 x.2).1.2.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'`.
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x) ∧
          s ⊆ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) ∧ ∑' (x : ↑t), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
obtain ⟨S, S_disj, hS⟩ :
  ∃ S : Fin N → Set s',
    (∀ i : Fin N, (S i).PairwiseDisjoint fun j => closedBall (q.c j) (q.r j)) ∧
      range q.c ⊆ ⋃ i : Fin N, ⋃ j ∈ S i, ball (q.c j) (q.r j) :=
  exist_disjoint_covering_families hτ H q
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x) ∧
          s ⊆ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) ∧ ∑' (x : ↑t), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
have S_count : ∀ i, (S i).Countable := by
  intro i
  apply (S_disj i).countable_of_nonempty_interior fun j _ => ?_
  have : (ball (j : α) (r1 j)).Nonempty := nonempty_ball.2 (q.rpos _)
  exact this.mono ball_subset_interior_closedBall
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
⊢ ∀ (i : Fin N), Set.Countable (S i)
[PROOFSTEP]
intro i
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
i : Fin N
⊢ Set.Countable (S i)
[PROOFSTEP]
apply (S_disj i).countable_of_nonempty_interior fun j _ => ?_
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
i : Fin N
j : ↑s'
x✝ : j ∈ S i
⊢ Set.Nonempty (interior (closedBall (BallPackage.c q j) (BallPackage.r q j)))
[PROOFSTEP]
have : (ball (j : α) (r1 j)).Nonempty := nonempty_ball.2 (q.rpos _)
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
i : Fin N
j : ↑s'
x✝ : j ∈ S i
this : Set.Nonempty (ball (↑j) (r1 ↑j))
⊢ Set.Nonempty (interior (closedBall (BallPackage.c q j) (BallPackage.r q j)))
[PROOFSTEP]
exact this.mono ball_subset_interior_closedBall
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x) ∧
          s ⊆ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) ∧ ∑' (x : ↑t), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
let r x := if x ∈ s' then r1 x else r0 x
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x) ∧
          s ⊆ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) ∧ ∑' (x : ↑t), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
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, mem_diff, not_forall]
    intro _
    refine' ⟨x, hx, _⟩
    rw [dist_self]
    exact (hr0 x hx).2.1.le
  simp only [if_neg this]
    -- the desired covering set is given by the union of the families constructed in the first and
      -- second steps.
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
⊢ ∀ (x : α), x ∈ t0 → r x = r0 x
[PROOFSTEP]
intro x hx
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
x : α
hx : x ∈ t0
⊢ r x = r0 x
[PROOFSTEP]
have : ¬x ∈ s' :=
  by
  simp only [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
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
x : α
hx : x ∈ t0
⊢ ¬x ∈ s'
[PROOFSTEP]
simp only [not_exists, exists_prop, mem_iUnion, mem_closedBall, not_and, not_lt, not_le, mem_diff, not_forall]
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
x : α
hx : x ∈ t0
⊢ x ∈ s → ∃ x_1, x_1 ∈ t0 ∧ dist x x_1 ≤ r0 x_1
[PROOFSTEP]
intro _
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
x : α
hx : x ∈ t0
a✝ : x ∈ s
⊢ ∃ x_1, x_1 ∈ t0 ∧ dist x x_1 ≤ r0 x_1
[PROOFSTEP]
refine' ⟨x, hx, _⟩
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
x : α
hx : x ∈ t0
a✝ : x ∈ s
⊢ dist x x ≤ r0 x
[PROOFSTEP]
rw [dist_self]
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
x : α
hx : x ∈ t0
a✝ : x ∈ s
⊢ 0 ≤ r0 x
[PROOFSTEP]
exact (hr0 x hx).2.1.le
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
x : α
hx : x ∈ t0
this : ¬x ∈ s'
⊢ r x = r0 x
[PROOFSTEP]
simp only [if_neg this]
  -- the desired covering set is given by the union of the families constructed in the first and
    -- second steps.
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
⊢ ∃ t r,
    Set.Countable t ∧
      t ⊆ s ∧
        (∀ (x : α), x ∈ t → r x ∈ f x) ∧
          s ⊆ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x) ∧ ∑' (x : ↑t), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
refine'
  ⟨t0 ∪ ⋃ i : Fin N, ((↑) : s' → α) '' S i, r, _, _, _, _, _⟩
    -- it remains to check that they have the desired properties
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_1
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
⊢ Set.Countable (t0 ∪ ⋃ (i : Fin N), Subtype.val '' S i)
[PROOFSTEP]
exact t0_count.union (countable_iUnion fun i => (S_count i).image _)
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
⊢ t0 ∪ ⋃ (i : Fin N), Subtype.val '' S i ⊆ s
[PROOFSTEP]
simp only [t0s, true_and_iff, union_subset_iff, image_subset_iff, iUnion_subset_iff]
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
⊢ ∀ (i : Fin N), S i ⊆ (fun a => ↑a) ⁻¹' s
[PROOFSTEP]
intro i x _
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
i : Fin N
x : { x // x ∈ s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x) }
a✝ : x ∈ S i
⊢ x ∈ (fun a => ↑a) ⁻¹' s
[PROOFSTEP]
exact s's x.2
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
⊢ ∀ (x : α), x ∈ t0 ∪ ⋃ (i : Fin N), Subtype.val '' S i → r x ∈ f x
[PROOFSTEP]
intro x hx
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ t0 ∪ ⋃ (i : Fin N), Subtype.val '' S i
⊢ r x ∈ f x
[PROOFSTEP]
cases hx with
| inl hx =>
  rw [r_t0 x hx]
  exact (hr0 _ hx).1
|
  inr hx =>
  have h'x : x ∈ s' := by
    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]
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ t0 ∪ ⋃ (i : Fin N), Subtype.val '' S i
⊢ r x ∈ f x
[PROOFSTEP]
cases hx with
| inl hx =>
  rw [r_t0 x hx]
  exact (hr0 _ hx).1
|
  inr hx =>
  have h'x : x ∈ s' := by
    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]
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3.inl
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ t0
⊢ r x ∈ f x
[PROOFSTEP]

| inl hx =>
  rw [r_t0 x hx]
  exact (hr0 _ hx).1
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3.inl
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ t0
⊢ r x ∈ f x
[PROOFSTEP]
rw [r_t0 x hx]
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3.inl
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ t0
⊢ r0 x ∈ f x
[PROOFSTEP]
exact (hr0 _ hx).1
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3.inr
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ ⋃ (i : Fin N), Subtype.val '' S i
⊢ r x ∈ f x
[PROOFSTEP]

|
  inr hx =>
  have h'x : x ∈ s' := by
    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]
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3.inr
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ ⋃ (i : Fin N), Subtype.val '' S i
⊢ r x ∈ f x
[PROOFSTEP]
have h'x : x ∈ s' := by
  simp only [mem_iUnion, mem_image] at hx
  rcases hx with ⟨i, y, _, rfl⟩
  exact y.2
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ ⋃ (i : Fin N), Subtype.val '' S i
⊢ x ∈ s'
[PROOFSTEP]
simp only [mem_iUnion, mem_image] at hx
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : ∃ i x_1, x_1 ∈ S i ∧ ↑x_1 = x
⊢ x ∈ s'
[PROOFSTEP]
rcases hx with ⟨i, y, _, rfl⟩
[GOAL]
case intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
i : Fin N
y : { x // x ∈ s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x) }
left✝ : y ∈ S i
⊢ ↑y ∈ s'
[PROOFSTEP]
exact y.2
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_3.inr
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ ⋃ (i : Fin N), Subtype.val '' S i
h'x : x ∈ s'
⊢ r x ∈ f x
[PROOFSTEP]
simp only [if_pos h'x, (hr1 x h'x).1.1]
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_4
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
⊢ s ⊆ ⋃ (x : α) (_ : x ∈ t0 ∪ ⋃ (i : Fin N), Subtype.val '' S i), closedBall x (r x)
[PROOFSTEP]
intro x hx
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_4
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ s
⊢ x ∈ ⋃ (x : α) (_ : x ∈ t0 ∪ ⋃ (i : Fin N), Subtype.val '' S i), closedBall x (r x)
[PROOFSTEP]
by_cases h'x : x ∈ s'
[GOAL]
case pos
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ s
h'x : x ∈ s'
⊢ x ∈ ⋃ (x : α) (_ : x ∈ t0 ∪ ⋃ (i : Fin N), Subtype.val '' S i), closedBall x (r x)
[PROOFSTEP]
obtain ⟨i, y, ySi, xy⟩ : ∃ (i : Fin N) (y : ↥s'), y ∈ S i ∧ x ∈ ball (y : α) (r1 y) :=
  by
  have A : x ∈ range q.c := by
    simpa only [not_exists, exists_prop, mem_iUnion, mem_closedBall, not_and, not_le, mem_setOf_eq,
      Subtype.range_coe_subtype, mem_diff] using h'x
  simpa only [mem_iUnion, mem_image, bex_def] using hS A
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ s
h'x : x ∈ s'
⊢ ∃ i y, y ∈ S i ∧ x ∈ ball (↑y) (r1 ↑y)
[PROOFSTEP]
have A : x ∈ range q.c := by
  simpa only [not_exists, exists_prop, mem_iUnion, mem_closedBall, not_and, not_le, mem_setOf_eq,
    Subtype.range_coe_subtype, mem_diff] using h'x
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ s
h'x : x ∈ s'
⊢ x ∈ range q.c
[PROOFSTEP]
simpa only [not_exists, exists_prop, mem_iUnion, mem_closedBall, not_and, not_le, mem_setOf_eq,
  Subtype.range_coe_subtype, mem_diff] using h'x
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ s
h'x : x ∈ s'
A : x ∈ range q.c
⊢ ∃ i y, y ∈ S i ∧ x ∈ ball (↑y) (r1 ↑y)
[PROOFSTEP]
simpa only [mem_iUnion, mem_image, bex_def] using hS A
[GOAL]
case pos.intro.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ s
h'x : x ∈ s'
i : Fin N
y : ↑s'
ySi : y ∈ S i
xy : x ∈ ball (↑y) (r1 ↑y)
⊢ x ∈ ⋃ (x : α) (_ : x ∈ t0 ∪ ⋃ (i : Fin N), Subtype.val '' S i), closedBall x (r x)
[PROOFSTEP]
refine' mem_iUnion₂.2 ⟨y, Or.inr _, _⟩
[GOAL]
case pos.intro.intro.intro.refine'_1
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ s
h'x : x ∈ s'
i : Fin N
y : ↑s'
ySi : y ∈ S i
xy : x ∈ ball (↑y) (r1 ↑y)
⊢ ↑y ∈ ⋃ (i : Fin N), Subtype.val '' S i
[PROOFSTEP]
simp only [mem_iUnion, mem_image]
[GOAL]
case pos.intro.intro.intro.refine'_1
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ s
h'x : x ∈ s'
i : Fin N
y : ↑s'
ySi : y ∈ S i
xy : x ∈ ball (↑y) (r1 ↑y)
⊢ ∃ i x, x ∈ S i ∧ ↑x = ↑y
[PROOFSTEP]
exact ⟨i, y, ySi, rfl⟩
[GOAL]
case pos.intro.intro.intro.refine'_2
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ s
h'x : x ∈ s'
i : Fin N
y : ↑s'
ySi : y ∈ S i
xy : x ∈ ball (↑y) (r1 ↑y)
⊢ x ∈ closedBall (↑y) (r ↑y)
[PROOFSTEP]
have : (y : α) ∈ s' := y.2
[GOAL]
case pos.intro.intro.intro.refine'_2
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ s
h'x : x ∈ s'
i : Fin N
y : ↑s'
ySi : y ∈ S i
xy : x ∈ ball (↑y) (r1 ↑y)
this : ↑y ∈ s'
⊢ x ∈ closedBall (↑y) (r ↑y)
[PROOFSTEP]
simp only [if_pos this]
[GOAL]
case pos.intro.intro.intro.refine'_2
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ s
h'x : x ∈ s'
i : Fin N
y : ↑s'
ySi : y ∈ S i
xy : x ∈ ball (↑y) (r1 ↑y)
this : ↑y ∈ s'
⊢ x ∈ closedBall (↑y) (r1 ↑y)
[PROOFSTEP]
exact ball_subset_closedBall xy
[GOAL]
case neg
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ s
h'x : ¬x ∈ s'
⊢ x ∈ ⋃ (x : α) (_ : x ∈ t0 ∪ ⋃ (i : Fin N), Subtype.val '' S i), closedBall x (r x)
[PROOFSTEP]
obtain ⟨y, yt0, hxy⟩ : ∃ y : α, y ∈ t0 ∧ x ∈ closedBall y (r0 y) := by simpa [hx, -mem_closedBall] using h'x
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ s
h'x : ¬x ∈ s'
⊢ ∃ y, y ∈ t0 ∧ x ∈ closedBall y (r0 y)
[PROOFSTEP]
simpa [hx, -mem_closedBall] using h'x
[GOAL]
case neg.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ s
h'x : ¬x ∈ s'
y : α
yt0 : y ∈ t0
hxy : x ∈ closedBall y (r0 y)
⊢ x ∈ ⋃ (x : α) (_ : x ∈ t0 ∪ ⋃ (i : Fin N), Subtype.val '' S i), closedBall x (r x)
[PROOFSTEP]
refine' mem_iUnion₂.2 ⟨y, Or.inl yt0, _⟩
[GOAL]
case neg.intro.intro
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ s
h'x : ¬x ∈ s'
y : α
yt0 : y ∈ t0
hxy : x ∈ closedBall y (r0 y)
⊢ x ∈ closedBall y (r y)
[PROOFSTEP]
rwa [r_t0 _ yt0]
  -- the only nontrivial property is the measure control, which we check now
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_5
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
⊢ ∑' (x : ↑(t0 ∪ ⋃ (i : Fin N), Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
have A : (∑' x : t0, μ (closedBall x (r x))) ≤ μ s + ε / 2 :=
  calc
    (∑' x : t0, μ (closedBall x (r x))) = ∑' x : t0, μ (closedBall x (r0 x)) := by congr 1; ext x; rw [r_t0 x x.2]
    _ = μ (⋃ x : t0, closedBall x (r0 x)) :=
      by
      haveI : Encodable t0 := t0_count.toEncodable
      rw [measure_iUnion]
      · exact (pairwise_subtype_iff_pairwise_set _ _).2 t0_disj
      · exact fun i => measurableSet_closedBall
    _ ≤ μ u := by
      apply measure_mono
      simp only [SetCoe.forall, Subtype.coe_mk, iUnion_subset_iff]
      intro x hx
      apply Subset.trans (closedBall_subset_ball (hr0 x hx).2.2) (hR x (t0s hx)).2
    _ ≤ μ s + ε / 2 := μu
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
⊢ ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) = ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r0 ↑x))
[PROOFSTEP]
congr 1
[GOAL]
case e_f
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
⊢ (fun x => ↑↑μ (closedBall (↑x) (r ↑x))) = fun x => ↑↑μ (closedBall (↑x) (r0 ↑x))
[PROOFSTEP]
ext x
[GOAL]
case e_f.h
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : ↑t0
⊢ ↑↑μ (closedBall (↑x) (r ↑x)) = ↑↑μ (closedBall (↑x) (r0 ↑x))
[PROOFSTEP]
rw [r_t0 x x.2]
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
⊢ ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r0 ↑x)) = ↑↑μ (⋃ (x : ↑t0), closedBall (↑x) (r0 ↑x))
[PROOFSTEP]
haveI : Encodable t0 := t0_count.toEncodable
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
this : Encodable ↑t0
⊢ ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r0 ↑x)) = ↑↑μ (⋃ (x : ↑t0), closedBall (↑x) (r0 ↑x))
[PROOFSTEP]
rw [measure_iUnion]
[GOAL]
case hn
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
this : Encodable ↑t0
⊢ Pairwise (Disjoint on fun x => closedBall (↑x) (r0 ↑x))
[PROOFSTEP]
exact (pairwise_subtype_iff_pairwise_set _ _).2 t0_disj
[GOAL]
case h
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
this : Encodable ↑t0
⊢ ∀ (i : ↑t0), MeasurableSet (closedBall (↑i) (r0 ↑i))
[PROOFSTEP]
exact fun i => measurableSet_closedBall
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
⊢ ↑↑μ (⋃ (x : ↑t0), closedBall (↑x) (r0 ↑x)) ≤ ↑↑μ u
[PROOFSTEP]
apply measure_mono
[GOAL]
case h
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
⊢ ⋃ (x : ↑t0), closedBall (↑x) (r0 ↑x) ⊆ u
[PROOFSTEP]
simp only [SetCoe.forall, Subtype.coe_mk, iUnion_subset_iff]
[GOAL]
case h
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
⊢ ∀ (x : α), x ∈ t0 → closedBall x (r0 x) ⊆ u
[PROOFSTEP]
intro x hx
[GOAL]
case h
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
x : α
hx : x ∈ t0
⊢ closedBall x (r0 x) ⊆ u
[PROOFSTEP]
apply Subset.trans (closedBall_subset_ball (hr0 x hx).2.2) (hR x (t0s hx)).2
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_5
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
⊢ ∑' (x : ↑(t0 ∪ ⋃ (i : Fin N), Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
have B : ∀ i : Fin N, (∑' x : ((↑) : s' → α) '' S i, μ (closedBall x (r x))) ≤ ε / 2 / N := fun i =>
  calc
    (∑' x : ((↑) : s' → α) '' S i, μ (closedBall x (r x))) = ∑' x : S i, μ (closedBall x (r x)) :=
      by
      have : InjOn ((↑) : s' → α) (S i) := Subtype.val_injective.injOn _
      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]
    _ = μ (⋃ x : S i, closedBall x (r1 x)) :=
      by
      haveI : Encodable (S i) := (S_count i).toEncodable
      rw [measure_iUnion]
      · exact (pairwise_subtype_iff_pairwise_set _ _).2 (S_disj i)
      · exact fun i => measurableSet_closedBall
    _ ≤ μ v := by
      apply measure_mono
      simp only [SetCoe.forall, Subtype.coe_mk, iUnion_subset_iff]
      intro x xs' _
      exact (hr1 x xs').2
    _ ≤ ε / 2 / N := by have : μ s' = 0 := μt0; rwa [this, zero_add] at μv
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
i : Fin N
⊢ ∑' (x : ↑(Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) = ∑' (x : ↑(S i)), ↑↑μ (closedBall (↑↑x) (r ↑↑x))
[PROOFSTEP]
have : InjOn ((↑) : s' → α) (S i) := Subtype.val_injective.injOn _
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
i : Fin N
this : InjOn Subtype.val (S i)
⊢ ∑' (x : ↑(Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) = ∑' (x : ↑(S i)), ↑↑μ (closedBall (↑↑x) (r ↑↑x))
[PROOFSTEP]
let F : S i ≃ ((↑) : s' → α) '' S i := this.bijOn_image.equiv _
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
i : Fin N
this : InjOn Subtype.val (S i)
F : ↑(S i) ≃ ↑(Subtype.val '' S i) := BijOn.equiv Subtype.val (_ : BijOn Subtype.val (S i) (Subtype.val '' S i))
⊢ ∑' (x : ↑(Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) = ∑' (x : ↑(S i)), ↑↑μ (closedBall (↑↑x) (r ↑↑x))
[PROOFSTEP]
exact (F.tsum_eq fun x => μ (closedBall x (r x))).symm
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
i : Fin N
⊢ ∑' (x : ↑(S i)), ↑↑μ (closedBall (↑↑x) (r ↑↑x)) = ∑' (x : ↑(S i)), ↑↑μ (closedBall (↑↑x) (r1 ↑↑x))
[PROOFSTEP]
congr 1
[GOAL]
case e_f
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
i : Fin N
⊢ (fun x => ↑↑μ (closedBall (↑↑x) (r ↑↑x))) = fun x => ↑↑μ (closedBall (↑↑x) (r1 ↑↑x))
[PROOFSTEP]
ext x
[GOAL]
case e_f.h
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
i : Fin N
x : ↑(S i)
⊢ ↑↑μ (closedBall (↑↑x) (r ↑↑x)) = ↑↑μ (closedBall (↑↑x) (r1 ↑↑x))
[PROOFSTEP]
have : (x : α) ∈ s' := x.1.2
[GOAL]
case e_f.h
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
i : Fin N
x : ↑(S i)
this : ↑↑x ∈ s'
⊢ ↑↑μ (closedBall (↑↑x) (r ↑↑x)) = ↑↑μ (closedBall (↑↑x) (r1 ↑↑x))
[PROOFSTEP]
simp only [if_pos this]
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
i : Fin N
⊢ ∑' (x : ↑(S i)), ↑↑μ (closedBall (↑↑x) (r1 ↑↑x)) = ↑↑μ (⋃ (x : ↑(S i)), closedBall (↑↑x) (r1 ↑↑x))
[PROOFSTEP]
haveI : Encodable (S i) := (S_count i).toEncodable
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
i : Fin N
this : Encodable ↑(S i)
⊢ ∑' (x : ↑(S i)), ↑↑μ (closedBall (↑↑x) (r1 ↑↑x)) = ↑↑μ (⋃ (x : ↑(S i)), closedBall (↑↑x) (r1 ↑↑x))
[PROOFSTEP]
rw [measure_iUnion]
[GOAL]
case hn
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
i : Fin N
this : Encodable ↑(S i)
⊢ Pairwise (Disjoint on fun x => closedBall (↑↑x) (r1 ↑↑x))
[PROOFSTEP]
exact (pairwise_subtype_iff_pairwise_set _ _).2 (S_disj i)
[GOAL]
case h
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
i : Fin N
this : Encodable ↑(S i)
⊢ ∀ (i_1 : ↑(S i)), MeasurableSet (closedBall (↑↑i_1) (r1 ↑↑i_1))
[PROOFSTEP]
exact fun i => measurableSet_closedBall
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
i : Fin N
⊢ ↑↑μ (⋃ (x : ↑(S i)), closedBall (↑↑x) (r1 ↑↑x)) ≤ ↑↑μ v
[PROOFSTEP]
apply measure_mono
[GOAL]
case h
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
i : Fin N
⊢ ⋃ (x : ↑(S i)), closedBall (↑↑x) (r1 ↑↑x) ⊆ v
[PROOFSTEP]
simp only [SetCoe.forall, Subtype.coe_mk, iUnion_subset_iff]
[GOAL]
case h
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
i : Fin N
⊢ ∀ (x : α) (h : x ∈ s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)),
    { val := x, property := h } ∈ S i → closedBall x (r1 x) ⊆ v
[PROOFSTEP]
intro x xs' _
[GOAL]
case h
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
i : Fin N
x : α
xs' : x ∈ s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
h✝ : { val := x, property := xs' } ∈ S i
⊢ closedBall x (r1 x) ⊆ v
[PROOFSTEP]
exact (hr1 x xs').2
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
i : Fin N
⊢ ↑↑μ v ≤ ε / 2 / ↑N
[PROOFSTEP]
have : μ s' = 0 := μt0
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
i : Fin N
this : ↑↑μ s' = 0
⊢ ↑↑μ v ≤ ε / 2 / ↑N
[PROOFSTEP]
rwa [this, zero_add] at μv
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_5
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
B : ∀ (i : Fin N), ∑' (x : ↑(Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ε / 2 / ↑N
⊢ ∑' (x : ↑(t0 ∪ ⋃ (i : Fin N), Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε
[PROOFSTEP]
calc
  (∑' x : ↥(t0 ∪ ⋃ i : Fin N, ((↑) : s' → α) '' S i), μ (closedBall x (r x))) ≤
      (∑' x : t0, μ (closedBall x (r x))) + ∑' x : ⋃ i : Fin N, ((↑) : s' → α) '' S i, μ (closedBall x (r x)) :=
    ENNReal.tsum_union_le (fun x => μ (closedBall x (r x))) _ _
  _ ≤ (∑' x : t0, μ (closedBall x (r x))) + ∑ i : Fin N, ∑' x : ((↑) : s' → α) '' S i, μ (closedBall x (r x)) :=
    (add_le_add le_rfl (ENNReal.tsum_iUnion_le (fun x => μ (closedBall x (r x))) _))
  _ ≤ μ s + ε / 2 + ∑ i : Fin N, ε / 2 / N := by
    refine' add_le_add A _
    refine' Finset.sum_le_sum _
    intro i _
    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]
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
B : ∀ (i : Fin N), ∑' (x : ↑(Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ε / 2 / ↑N
⊢ ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) +
      ∑ i : Fin N, ∑' (x : ↑(Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) ≤
    ↑↑μ s + ε / 2 + ∑ i : Fin N, ε / 2 / ↑N
[PROOFSTEP]
refine' add_le_add A _
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
B : ∀ (i : Fin N), ∑' (x : ↑(Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ε / 2 / ↑N
⊢ ∑ i : Fin N, ∑' (x : ↑(Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ∑ i : Fin N, ε / 2 / ↑N
[PROOFSTEP]
refine' Finset.sum_le_sum _
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
B : ∀ (i : Fin N), ∑' (x : ↑(Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ε / 2 / ↑N
⊢ ∀ (i : Fin N), i ∈ Finset.univ → ∑' (x : ↑(Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ε / 2 / ↑N
[PROOFSTEP]
intro i _
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
B : ∀ (i : Fin N), ∑' (x : ↑(Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ε / 2 / ↑N
i : Fin N
a✝ : i ∈ Finset.univ
⊢ ∑' (x : ↑(Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ε / 2 / ↑N
[PROOFSTEP]
exact B i
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
B : ∀ (i : Fin N), ∑' (x : ↑(Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ε / 2 / ↑N
⊢ ↑↑μ s + ε / 2 + ∑ i : Fin N, ε / 2 / ↑N ≤ ↑↑μ s + ε / 2 + ε / 2
[PROOFSTEP]
refine' add_le_add le_rfl _
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
B : ∀ (i : Fin N), ∑' (x : ↑(Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ε / 2 / ↑N
⊢ ∑ i : Fin N, ε / 2 / ↑N ≤ ε / 2
[PROOFSTEP]
simp only [Finset.card_fin, Finset.sum_const, nsmul_eq_mul, ENNReal.mul_div_le]
[GOAL]
α : Type u_1
inst✝⁶ : MetricSpace α
β : Type u
inst✝⁵ : SecondCountableTopology α
inst✝⁴ : MeasurableSpace α
inst✝³ : OpensMeasurableSpace α
inst✝² : HasBesicovitchCovering α
μ : Measure α
inst✝¹ : SigmaFinite μ
inst✝ : Measure.OuterRegular μ
ε : ℝ≥0∞
hε : ε ≠ 0
f : α → Set ℝ
s : Set α
hf : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (f x ∩ Ioo 0 δ)
u : Set α
su : u ⊇ s
u_open : IsOpen u
μu : ↑↑μ u ≤ ↑↑μ s + ε / 2
R : α → ℝ
hR : ∀ (x : α), x ∈ s → R x > 0 ∧ ball x (R x) ⊆ u
t0 : Set α
r0 : α → ℝ
t0_count : Set.Countable t0
t0s : t0 ⊆ s
hr0 : ∀ (x : α), x ∈ t0 → r0 x ∈ f x ∩ Ioo 0 (R x)
μt0 : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)) = 0
t0_disj : PairwiseDisjoint t0 fun x => closedBall x (r0 x)
s' : Set α := s \ ⋃ (x : α) (_ : x ∈ t0), closedBall x (r0 x)
s's : s' ⊆ s
N : ℕ
τ : ℝ
hτ : 1 < τ
H : IsEmpty (SatelliteConfig α N τ)
v : Set α
s'v : v ⊇ s'
v_open : IsOpen v
μv : ↑↑μ v ≤ ↑↑μ s' + ε / 2 / ↑N
r1 : α → ℝ
hr1 : ∀ (x : α), x ∈ s' → r1 x ∈ f x ∩ Ioo 0 1 ∧ closedBall x (r1 x) ⊆ v
q : BallPackage (↑s') α :=
  { c := fun x => ↑x, r := fun x => r1 ↑x, rpos := (_ : ∀ (x : ↑s'), 0 < r1 ↑x), r_bound := 1,
    r_le := (_ : ∀ (x : ↑s'), r1 ↑x ≤ 1) }
S : Fin N → Set ↑s'
S_disj : ∀ (i : Fin N), PairwiseDisjoint (S i) fun j => closedBall (BallPackage.c q j) (BallPackage.r q j)
hS : range q.c ⊆ ⋃ (i : Fin N) (j : ↑s') (_ : j ∈ S i), ball (BallPackage.c q j) (BallPackage.r q j)
S_count : ∀ (i : Fin N), Set.Countable (S i)
r : α → ℝ := fun x => if x ∈ s' then r1 x else r0 x
r_t0 : ∀ (x : α), x ∈ t0 → r x = r0 x
A : ∑' (x : ↑t0), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ↑↑μ s + ε / 2
B : ∀ (i : Fin N), ∑' (x : ↑(Subtype.val '' S i)), ↑↑μ (closedBall (↑x) (r ↑x)) ≤ ε / 2 / ↑N
⊢ ↑↑μ s + ε / 2 + ε / 2 = ↑↑μ s + ε
[PROOFSTEP]
rw [add_assoc, ENNReal.add_halves]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
⊢ ∀ (x : α) (a : Set α), a ∈ (fun x => (fun r => closedBall x r) '' Ioi 0) x → MeasurableSet a
[PROOFSTEP]
intro x y hy
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
x : α
y : Set α
hy : y ∈ (fun x => (fun r => closedBall x r) '' Ioi 0) x
⊢ MeasurableSet y
[PROOFSTEP]
obtain ⟨r, _, rfl⟩ : ∃ r : ℝ, 0 < r ∧ closedBall x r = y := by simpa only [mem_image, mem_Ioi] using hy
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
x : α
y : Set α
hy : y ∈ (fun x => (fun r => closedBall x r) '' Ioi 0) x
⊢ ∃ r, 0 < r ∧ closedBall x r = y
[PROOFSTEP]
simpa only [mem_image, mem_Ioi] using hy
[GOAL]
case intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
x : α
r : ℝ
left✝ : 0 < r
hy : closedBall x r ∈ (fun x => (fun r => closedBall x r) '' Ioi 0) x
⊢ MeasurableSet (closedBall x r)
[PROOFSTEP]
exact isClosed_ball.measurableSet
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
⊢ ∀ (x : α) (y : Set α), y ∈ (fun x => (fun r => closedBall x r) '' Ioi 0) x → Set.Nonempty (interior y)
[PROOFSTEP]
intro x y hy
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
x : α
y : Set α
hy : y ∈ (fun x => (fun r => closedBall x r) '' Ioi 0) x
⊢ Set.Nonempty (interior y)
[PROOFSTEP]
obtain ⟨r, rpos, rfl⟩ : ∃ r : ℝ, 0 < r ∧ closedBall x r = y := by simpa only [mem_image, mem_Ioi] using hy
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
x : α
y : Set α
hy : y ∈ (fun x => (fun r => closedBall x r) '' Ioi 0) x
⊢ ∃ r, 0 < r ∧ closedBall x r = y
[PROOFSTEP]
simpa only [mem_image, mem_Ioi] using hy
[GOAL]
case intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
x : α
r : ℝ
rpos : 0 < r
hy : closedBall x r ∈ (fun x => (fun r => closedBall x r) '' Ioi 0) x
⊢ Set.Nonempty (interior (closedBall x r))
[PROOFSTEP]
simp only [Nonempty.mono ball_subset_interior_closedBall, rpos, nonempty_ball]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
⊢ ∀ (s : Set α) (f : α → Set (Set α)),
    (∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x) →
      (∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε) →
        ∃ t,
          (∀ (p : α × Set α), p ∈ t → p.fst ∈ s) ∧
            (PairwiseDisjoint t fun p => p.snd) ∧
              (∀ (p : α × Set α), p ∈ t → p.snd ∈ f p.fst) ∧ ↑↑μ (s \ ⋃ (p : α × Set α) (_ : p ∈ t), p.snd) = 0
[PROOFSTEP]
intro s f fsubset ffine
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
⊢ ∃ t,
    (∀ (p : α × Set α), p ∈ t → p.fst ∈ s) ∧
      (PairwiseDisjoint t fun p => p.snd) ∧
        (∀ (p : α × Set α), p ∈ t → p.snd ∈ f p.fst) ∧ ↑↑μ (s \ ⋃ (p : α × Set α) (_ : p ∈ t), p.snd) = 0
[PROOFSTEP]
let g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
⊢ ∃ t,
    (∀ (p : α × Set α), p ∈ t → p.fst ∈ s) ∧
      (PairwiseDisjoint t fun p => p.snd) ∧
        (∀ (p : α × Set α), p ∈ t → p.snd ∈ f p.fst) ∧ ↑↑μ (s \ ⋃ (p : α × Set α) (_ : p ∈ t), p.snd) = 0
[PROOFSTEP]
have A : ∀ x ∈ s, ∀ δ > 0, (g x ∩ Ioo 0 δ).Nonempty :=
  by
  intro x xs δ δpos
  obtain ⟨t, tf, ht⟩ : ∃ (t : Set α), t ∈ f x ∧ t ⊆ closedBall x (δ / 2) := ffine x xs (δ / 2) (half_pos δpos)
  obtain ⟨r, rpos, rfl⟩ : ∃ r : ℝ, 0 < r ∧ closedBall 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 : 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⟩⟩
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
⊢ ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
[PROOFSTEP]
intro x xs δ δpos
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
x : α
xs : x ∈ s
δ : ℝ
δpos : δ > 0
⊢ Set.Nonempty (g x ∩ Ioo 0 δ)
[PROOFSTEP]
obtain ⟨t, tf, ht⟩ : ∃ (t : Set α), t ∈ f x ∧ t ⊆ closedBall x (δ / 2) := ffine x xs (δ / 2) (half_pos δpos)
[GOAL]
case intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
x : α
xs : x ∈ s
δ : ℝ
δpos : δ > 0
t : Set α
tf : t ∈ f x
ht : t ⊆ closedBall x (δ / 2)
⊢ Set.Nonempty (g x ∩ Ioo 0 δ)
[PROOFSTEP]
obtain ⟨r, rpos, rfl⟩ : ∃ r : ℝ, 0 < r ∧ closedBall x r = t := by simpa using fsubset x xs tf
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
x : α
xs : x ∈ s
δ : ℝ
δpos : δ > 0
t : Set α
tf : t ∈ f x
ht : t ⊆ closedBall x (δ / 2)
⊢ ∃ r, 0 < r ∧ closedBall x r = t
[PROOFSTEP]
simpa using fsubset x xs tf
[GOAL]
case intro.intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
x : α
xs : x ∈ s
δ : ℝ
δpos : δ > 0
r : ℝ
rpos : 0 < r
tf : closedBall x r ∈ f x
ht : closedBall x r ⊆ closedBall x (δ / 2)
⊢ Set.Nonempty (g x ∩ Ioo 0 δ)
[PROOFSTEP]
rcases le_total r (δ / 2) with (H | H)
[GOAL]
case intro.intro.intro.intro.inl
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
x : α
xs : x ∈ s
δ : ℝ
δpos : δ > 0
r : ℝ
rpos : 0 < r
tf : closedBall x r ∈ f x
ht : closedBall x r ⊆ closedBall x (δ / 2)
H : r ≤ δ / 2
⊢ Set.Nonempty (g x ∩ Ioo 0 δ)
[PROOFSTEP]
exact ⟨r, ⟨rpos, tf⟩, ⟨rpos, H.trans_lt (half_lt_self δpos)⟩⟩
[GOAL]
case intro.intro.intro.intro.inr
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
x : α
xs : x ∈ s
δ : ℝ
δpos : δ > 0
r : ℝ
rpos : 0 < r
tf : closedBall x r ∈ f x
ht : closedBall x r ⊆ closedBall x (δ / 2)
H : δ / 2 ≤ r
⊢ Set.Nonempty (g x ∩ Ioo 0 δ)
[PROOFSTEP]
have : closedBall x r = closedBall x (δ / 2) := Subset.antisymm ht (closedBall_subset_closedBall H)
[GOAL]
case intro.intro.intro.intro.inr
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
x : α
xs : x ∈ s
δ : ℝ
δpos : δ > 0
r : ℝ
rpos : 0 < r
tf : closedBall x r ∈ f x
ht : closedBall x r ⊆ closedBall x (δ / 2)
H : δ / 2 ≤ r
this : closedBall x r = closedBall x (δ / 2)
⊢ Set.Nonempty (g x ∩ Ioo 0 δ)
[PROOFSTEP]
rw [this] at tf
[GOAL]
case intro.intro.intro.intro.inr
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
x : α
xs : x ∈ s
δ : ℝ
δpos : δ > 0
r : ℝ
rpos : 0 < r
tf : closedBall x (δ / 2) ∈ f x
ht : closedBall x r ⊆ closedBall x (δ / 2)
H : δ / 2 ≤ r
this : closedBall x r = closedBall x (δ / 2)
⊢ Set.Nonempty (g x ∩ Ioo 0 δ)
[PROOFSTEP]
refine' ⟨δ / 2, ⟨half_pos δpos, tf⟩, ⟨half_pos δpos, half_lt_self δpos⟩⟩
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
A : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
⊢ ∃ t,
    (∀ (p : α × Set α), p ∈ t → p.fst ∈ s) ∧
      (PairwiseDisjoint t fun p => p.snd) ∧
        (∀ (p : α × Set α), p ∈ t → p.snd ∈ f p.fst) ∧ ↑↑μ (s \ ⋃ (p : α × Set α) (_ : p ∈ t), p.snd) = 0
[PROOFSTEP]
obtain ⟨t, r, _, ts, tg, μt, tdisj⟩ :
  ∃ (t : Set α) (r : α → ℝ),
    t.Countable ∧
      t ⊆ s ∧
        (∀ x ∈ t, r x ∈ g x ∩ Ioo 0 1) ∧
          μ (s \ ⋃ x ∈ t, closedBall x (r x)) = 0 ∧ t.PairwiseDisjoint fun x => closedBall x (r x) :=
  exists_disjoint_closedBall_covering_ae μ g s A (fun _ => 1) fun _ _ => zero_lt_one
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
A : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
t : Set α
r : α → ℝ
left✝ : Set.Countable t
ts : t ⊆ s
tg : ∀ (x : α), x ∈ t → r x ∈ g x ∩ Ioo 0 1
μt : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0
tdisj : PairwiseDisjoint t fun x => closedBall x (r x)
⊢ ∃ t,
    (∀ (p : α × Set α), p ∈ t → p.fst ∈ s) ∧
      (PairwiseDisjoint t fun p => p.snd) ∧
        (∀ (p : α × Set α), p ∈ t → p.snd ∈ f p.fst) ∧ ↑↑μ (s \ ⋃ (p : α × Set α) (_ : p ∈ t), p.snd) = 0
[PROOFSTEP]
let F : α → α × Set α := fun x => (x, closedBall x (r x))
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
A : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
t : Set α
r : α → ℝ
left✝ : Set.Countable t
ts : t ⊆ s
tg : ∀ (x : α), x ∈ t → r x ∈ g x ∩ Ioo 0 1
μt : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0
tdisj : PairwiseDisjoint t fun x => closedBall x (r x)
F : α → α × Set α := fun x => (x, closedBall x (r x))
⊢ ∃ t,
    (∀ (p : α × Set α), p ∈ t → p.fst ∈ s) ∧
      (PairwiseDisjoint t fun p => p.snd) ∧
        (∀ (p : α × Set α), p ∈ t → p.snd ∈ f p.fst) ∧ ↑↑μ (s \ ⋃ (p : α × Set α) (_ : p ∈ t), p.snd) = 0
[PROOFSTEP]
refine' ⟨F '' t, _, _, _, _⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_1
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
A : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
t : Set α
r : α → ℝ
left✝ : Set.Countable t
ts : t ⊆ s
tg : ∀ (x : α), x ∈ t → r x ∈ g x ∩ Ioo 0 1
μt : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0
tdisj : PairwiseDisjoint t fun x => closedBall x (r x)
F : α → α × Set α := fun x => (x, closedBall x (r x))
⊢ ∀ (p : α × Set α), p ∈ F '' t → p.fst ∈ s
[PROOFSTEP]
rintro - ⟨x, hx, rfl⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_1.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
A : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
t : Set α
r : α → ℝ
left✝ : Set.Countable t
ts : t ⊆ s
tg : ∀ (x : α), x ∈ t → r x ∈ g x ∩ Ioo 0 1
μt : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0
tdisj : PairwiseDisjoint t fun x => closedBall x (r x)
F : α → α × Set α := fun x => (x, closedBall x (r x))
x : α
hx : x ∈ t
⊢ (F x).fst ∈ s
[PROOFSTEP]
exact ts hx
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_2
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
A : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
t : Set α
r : α → ℝ
left✝ : Set.Countable t
ts : t ⊆ s
tg : ∀ (x : α), x ∈ t → r x ∈ g x ∩ Ioo 0 1
μt : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0
tdisj : PairwiseDisjoint t fun x => closedBall x (r x)
F : α → α × Set α := fun x => (x, closedBall x (r x))
⊢ PairwiseDisjoint (F '' t) fun p => p.snd
[PROOFSTEP]
rintro p ⟨x, hx, rfl⟩ q ⟨y, hy, rfl⟩ hxy
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_2.intro.intro.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
A : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
t : Set α
r : α → ℝ
left✝ : Set.Countable t
ts : t ⊆ s
tg : ∀ (x : α), x ∈ t → r x ∈ g x ∩ Ioo 0 1
μt : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0
tdisj : PairwiseDisjoint t fun x => closedBall x (r x)
F : α → α × Set α := fun x => (x, closedBall x (r x))
x : α
hx : x ∈ t
y : α
hy : y ∈ t
hxy : F x ≠ F y
⊢ (Disjoint on fun p => p.snd) (F x) (F y)
[PROOFSTEP]
exact tdisj hx hy (ne_of_apply_ne F hxy)
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_3
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
A : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
t : Set α
r : α → ℝ
left✝ : Set.Countable t
ts : t ⊆ s
tg : ∀ (x : α), x ∈ t → r x ∈ g x ∩ Ioo 0 1
μt : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0
tdisj : PairwiseDisjoint t fun x => closedBall x (r x)
F : α → α × Set α := fun x => (x, closedBall x (r x))
⊢ ∀ (p : α × Set α), p ∈ F '' t → p.snd ∈ f p.fst
[PROOFSTEP]
rintro - ⟨x, hx, rfl⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_3.intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
A : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
t : Set α
r : α → ℝ
left✝ : Set.Countable t
ts : t ⊆ s
tg : ∀ (x : α), x ∈ t → r x ∈ g x ∩ Ioo 0 1
μt : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0
tdisj : PairwiseDisjoint t fun x => closedBall x (r x)
F : α → α × Set α := fun x => (x, closedBall x (r x))
x : α
hx : x ∈ t
⊢ (F x).snd ∈ f (F x).fst
[PROOFSTEP]
exact (tg x hx).1.2
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_4
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
s : Set α
f : α → Set (Set α)
fsubset : ∀ (x : α), x ∈ s → f x ⊆ (fun x => (fun r => closedBall x r) '' Ioi 0) x
ffine : ∀ (x : α), x ∈ s → ∀ (ε : ℝ), ε > 0 → ∃ a, a ∈ f x ∧ a ⊆ closedBall x ε
g : α → Set ℝ := fun x => {r | 0 < r ∧ closedBall x r ∈ f x}
A : ∀ (x : α), x ∈ s → ∀ (δ : ℝ), δ > 0 → Set.Nonempty (g x ∩ Ioo 0 δ)
t : Set α
r : α → ℝ
left✝ : Set.Countable t
ts : t ⊆ s
tg : ∀ (x : α), x ∈ t → r x ∈ g x ∩ Ioo 0 1
μt : ↑↑μ (s \ ⋃ (x : α) (_ : x ∈ t), closedBall x (r x)) = 0
tdisj : PairwiseDisjoint t fun x => closedBall x (r x)
F : α → α × Set α := fun x => (x, closedBall x (r x))
⊢ ↑↑μ (s \ ⋃ (p : α × Set α) (_ : p ∈ F '' t), p.snd) = 0
[PROOFSTEP]
rwa [biUnion_image]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
x : α
⊢ Tendsto (fun r => closedBall x r) (𝓝[Ioi 0] 0) (VitaliFamily.filterAt (Besicovitch.vitaliFamily μ) x)
[PROOFSTEP]
intro s hs
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
x : α
s : Set (Set α)
hs : s ∈ VitaliFamily.filterAt (Besicovitch.vitaliFamily μ) x
⊢ s ∈ map (fun r => closedBall x r) (𝓝[Ioi 0] 0)
[PROOFSTEP]
simp only [mem_map]
[GOAL]
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
x : α
s : Set (Set α)
hs : s ∈ VitaliFamily.filterAt (Besicovitch.vitaliFamily μ) x
⊢ (fun r => closedBall x r) ⁻¹' s ∈ 𝓝[Ioi 0] 0
[PROOFSTEP]
obtain ⟨ε, εpos, hε⟩ :
  ∃ (ε : ℝ), ε > 0 ∧ ∀ a : Set α, a ∈ (Besicovitch.vitaliFamily μ).setsAt x → a ⊆ closedBall x ε → a ∈ s :=
  (VitaliFamily.mem_filterAt_iff _).1 hs
[GOAL]
case intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
x : α
s : Set (Set α)
hs : s ∈ VitaliFamily.filterAt (Besicovitch.vitaliFamily μ) x
ε : ℝ
εpos : ε > 0
hε : ∀ (a : Set α), a ∈ VitaliFamily.setsAt (Besicovitch.vitaliFamily μ) x → a ⊆ closedBall x ε → a ∈ s
⊢ (fun r => closedBall x r) ⁻¹' s ∈ 𝓝[Ioi 0] 0
[PROOFSTEP]
have : Ioc (0 : ℝ) ε ∈ 𝓝[>] (0 : ℝ) := Ioc_mem_nhdsWithin_Ioi ⟨le_rfl, εpos⟩
[GOAL]
case intro.intro
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
x : α
s : Set (Set α)
hs : s ∈ VitaliFamily.filterAt (Besicovitch.vitaliFamily μ) x
ε : ℝ
εpos : ε > 0
hε : ∀ (a : Set α), a ∈ VitaliFamily.setsAt (Besicovitch.vitaliFamily μ) x → a ⊆ closedBall x ε → a ∈ s
this : Ioc 0 ε ∈ 𝓝[Ioi 0] 0
⊢ (fun r => closedBall x r) ⁻¹' s ∈ 𝓝[Ioi 0] 0
[PROOFSTEP]
filter_upwards [this] with _ hr
[GOAL]
case h
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
x : α
s : Set (Set α)
hs : s ∈ VitaliFamily.filterAt (Besicovitch.vitaliFamily μ) x
ε : ℝ
εpos : ε > 0
hε : ∀ (a : Set α), a ∈ VitaliFamily.setsAt (Besicovitch.vitaliFamily μ) x → a ⊆ closedBall x ε → a ∈ s
this : Ioc 0 ε ∈ 𝓝[Ioi 0] 0
a✝ : ℝ
hr : a✝ ∈ Ioc 0 ε
⊢ a✝ ∈ (fun r => closedBall x r) ⁻¹' s
[PROOFSTEP]
apply hε
[GOAL]
case h.a
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
x : α
s : Set (Set α)
hs : s ∈ VitaliFamily.filterAt (Besicovitch.vitaliFamily μ) x
ε : ℝ
εpos : ε > 0
hε : ∀ (a : Set α), a ∈ VitaliFamily.setsAt (Besicovitch.vitaliFamily μ) x → a ⊆ closedBall x ε → a ∈ s
this : Ioc 0 ε ∈ 𝓝[Ioi 0] 0
a✝ : ℝ
hr : a✝ ∈ Ioc 0 ε
⊢ (fun r => closedBall x r) a✝ ∈ VitaliFamily.setsAt (Besicovitch.vitaliFamily μ) x
[PROOFSTEP]
exact mem_image_of_mem _ hr.1
[GOAL]
case h.a
α : Type u_1
inst✝⁵ : MetricSpace α
β : Type u
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : OpensMeasurableSpace α
inst✝¹ : HasBesicovitchCovering α
μ : Measure α
inst✝ : SigmaFinite μ
x : α
s : Set (Set α)
hs : s ∈ VitaliFamily.filterAt (Besicovitch.vitaliFamily μ) x
ε : ℝ
εpos : ε > 0
hε : ∀ (a : Set α), a ∈ VitaliFamily.setsAt (Besicovitch.vitaliFamily μ) x → a ⊆ closedBall x ε → a ∈ s
this : Ioc 0 ε ∈ 𝓝[Ioi 0] 0
a✝ : ℝ
hr : a✝ ∈ Ioc 0 ε
⊢ (fun r => closedBall x r) a✝ ⊆ closedBall x ε
[PROOFSTEP]
exact closedBall_subset_closedBall hr.2
[GOAL]
α : Type u_1
inst✝¹¹ : MetricSpace α
β : Type u
inst✝¹⁰ : SecondCountableTopology α
inst✝⁹ : MeasurableSpace α
inst✝⁸ : OpensMeasurableSpace α
inst✝⁷ : HasBesicovitchCovering α
inst✝⁶ : MetricSpace β
inst✝⁵ : MeasurableSpace β
inst✝⁴ : BorelSpace β
inst✝³ : SecondCountableTopology β
inst✝² : HasBesicovitchCovering β
ρ μ : Measure β
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsLocallyFiniteMeasure ρ
⊢ ∀ᵐ (x : β) ∂μ, Tendsto (fun r => ↑↑ρ (closedBall x r) / ↑↑μ (closedBall x r)) (𝓝[Ioi 0] 0) (𝓝 (Measure.rnDeriv ρ μ x))
[PROOFSTEP]
filter_upwards [VitaliFamily.ae_tendsto_rnDeriv (Besicovitch.vitaliFamily μ) ρ] with x hx
[GOAL]
case h
α : Type u_1
inst✝¹¹ : MetricSpace α
β : Type u
inst✝¹⁰ : SecondCountableTopology α
inst✝⁹ : MeasurableSpace α
inst✝⁸ : OpensMeasurableSpace α
inst✝⁷ : HasBesicovitchCovering α
inst✝⁶ : MetricSpace β
inst✝⁵ : MeasurableSpace β
inst✝⁴ : BorelSpace β
inst✝³ : SecondCountableTopology β
inst✝² : HasBesicovitchCovering β
ρ μ : Measure β
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsLocallyFiniteMeasure ρ
x : β
hx : Tendsto (fun a => ↑↑ρ a / ↑↑μ a) (VitaliFamily.filterAt (Besicovitch.vitaliFamily μ) x) (𝓝 (Measure.rnDeriv ρ μ x))
⊢ Tendsto (fun r => ↑↑ρ (closedBall x r) / ↑↑μ (closedBall x r)) (𝓝[Ioi 0] 0) (𝓝 (Measure.rnDeriv ρ μ x))
[PROOFSTEP]
exact hx.comp (tendsto_filterAt μ x)
[GOAL]
α : Type u_1
inst✝¹⁰ : MetricSpace α
β : Type u
inst✝⁹ : SecondCountableTopology α
inst✝⁸ : MeasurableSpace α
inst✝⁷ : OpensMeasurableSpace α
inst✝⁶ : HasBesicovitchCovering α
inst✝⁵ : MetricSpace β
inst✝⁴ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : SecondCountableTopology β
inst✝¹ : HasBesicovitchCovering β
μ : Measure β
inst✝ : IsLocallyFiniteMeasure μ
s : Set β
hs : MeasurableSet s
⊢ ∀ᵐ (x : β) ∂μ, Tendsto (fun r => ↑↑μ (s ∩ closedBall x r) / ↑↑μ (closedBall x r)) (𝓝[Ioi 0] 0) (𝓝 (indicator s 1 x))
[PROOFSTEP]
filter_upwards [VitaliFamily.ae_tendsto_measure_inter_div_of_measurableSet (Besicovitch.vitaliFamily μ) hs]
[GOAL]
case h
α : Type u_1
inst✝¹⁰ : MetricSpace α
β : Type u
inst✝⁹ : SecondCountableTopology α
inst✝⁸ : MeasurableSpace α
inst✝⁷ : OpensMeasurableSpace α
inst✝⁶ : HasBesicovitchCovering α
inst✝⁵ : MetricSpace β
inst✝⁴ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : SecondCountableTopology β
inst✝¹ : HasBesicovitchCovering β
μ : Measure β
inst✝ : IsLocallyFiniteMeasure μ
s : Set β
hs : MeasurableSet s
⊢ ∀ (a : β),
    Tendsto (fun a => ↑↑μ (s ∩ a) / ↑↑μ a) (VitaliFamily.filterAt (Besicovitch.vitaliFamily μ) a)
        (𝓝 (indicator s 1 a)) →
      Tendsto (fun r => ↑↑μ (s ∩ closedBall a r) / ↑↑μ (closedBall a r)) (𝓝[Ioi 0] 0) (𝓝 (indicator s 1 a))
[PROOFSTEP]
intro x hx
[GOAL]
case h
α : Type u_1
inst✝¹⁰ : MetricSpace α
β : Type u
inst✝⁹ : SecondCountableTopology α
inst✝⁸ : MeasurableSpace α
inst✝⁷ : OpensMeasurableSpace α
inst✝⁶ : HasBesicovitchCovering α
inst✝⁵ : MetricSpace β
inst✝⁴ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : SecondCountableTopology β
inst✝¹ : HasBesicovitchCovering β
μ : Measure β
inst✝ : IsLocallyFiniteMeasure μ
s : Set β
hs : MeasurableSet s
x : β
hx : Tendsto (fun a => ↑↑μ (s ∩ a) / ↑↑μ a) (VitaliFamily.filterAt (Besicovitch.vitaliFamily μ) x) (𝓝 (indicator s 1 x))
⊢ Tendsto (fun r => ↑↑μ (s ∩ closedBall x r) / ↑↑μ (closedBall x r)) (𝓝[Ioi 0] 0) (𝓝 (indicator s 1 x))
[PROOFSTEP]
exact hx.comp (tendsto_filterAt μ x)
[GOAL]
α : Type u_1
inst✝¹⁰ : MetricSpace α
β : Type u
inst✝⁹ : SecondCountableTopology α
inst✝⁸ : MeasurableSpace α
inst✝⁷ : OpensMeasurableSpace α
inst✝⁶ : HasBesicovitchCovering α
inst✝⁵ : MetricSpace β
inst✝⁴ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : SecondCountableTopology β
inst✝¹ : HasBesicovitchCovering β
μ : Measure β
inst✝ : IsLocallyFiniteMeasure μ
s : Set β
⊢ ∀ᵐ (x : β) ∂Measure.restrict μ s,
    Tendsto (fun r => ↑↑μ (s ∩ closedBall x r) / ↑↑μ (closedBall x r)) (𝓝[Ioi 0] 0) (𝓝 1)
[PROOFSTEP]
filter_upwards [VitaliFamily.ae_tendsto_measure_inter_div (Besicovitch.vitaliFamily μ) s] with x hx using
  hx.comp (tendsto_filterAt μ x)