Theorem: AddCircle.closedBall_ae_eq_ball
File: Mathlib/MeasureTheory/Group/AddCircle.lean

tactic: rcases le_or_lt ε 0 with hε | hε
state_before: T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
⊢ closedBall x ε =ᶠ[ae volume] ball x ε
state_after: case inl
T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : ε ≤ 0
⊢ closedBall x ε =ᶠ[ae volume] ball x ε

case inr
T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : 0 < ε
⊢ closedBall x ε =ᶠ[ae volume] ball x ε

tactic: rw [ball_eq_empty.mpr hε, ae_eq_empty, volume_closedBall,
  min_eq_right (by linarith [hT.out] : 2 * ε ≤ T), ENNReal.ofReal_eq_zero]
state_before: case inl
T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : ε ≤ 0
⊢ closedBall x ε =ᶠ[ae volume] ball x ε
state_after: case inl
T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : ε ≤ 0
⊢ 2 * ε ≤ 0

tactic: exact mul_nonpos_of_nonneg_of_nonpos zero_le_two hε
state_before: case inl
T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : ε ≤ 0
⊢ 2 * ε ≤ 0
state_after: no goals

tactic: linarith [hT.out]
state_before: T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : ε ≤ 0
⊢ 2 * ε ≤ T
state_after: no goals

tactic: suffices volume (closedBall x ε) ≤ volume (ball x ε) by
  exact (ae_eq_of_subset_of_measure_ge ball_subset_closedBall this measurableSet_ball
    (measure_ne_top _ _)).symm
state_before: case inr
T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : 0 < ε
⊢ closedBall x ε =ᶠ[ae volume] ball x ε
state_after: case inr
T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : 0 < ε
⊢ volume (closedBall x ε) ≤ volume (ball x ε)

tactic: have : Tendsto (fun δ => volume (closedBall x δ)) (𝓝[<] ε) (𝓝 <| volume (closedBall x ε)) := by
  simp_rw [volume_closedBall]
  refine ENNReal.tendsto_ofReal (Tendsto.min tendsto_const_nhds <| Tendsto.const_mul _ ?_)
  convert (@monotone_id ℝ _).tendsto_nhdsWithin_Iio ε
  simp
state_before: case inr
T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : 0 < ε
⊢ volume (closedBall x ε) ≤ volume (ball x ε)
state_after: case inr
T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : 0 < ε
this : Tendsto (fun δ => volume (closedBall x δ)) (𝓝[<] ε) (𝓝 (volume (closedBall x ε)))
⊢ volume (closedBall x ε) ≤ volume (ball x ε)

tactic: refine le_of_tendsto this (mem_nhdsWithin_Iio_iff_exists_Ioo_subset.mpr ⟨0, hε, fun r hr => ?_⟩)
state_before: case inr
T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : 0 < ε
this : Tendsto (fun δ => volume (closedBall x δ)) (𝓝[<] ε) (𝓝 (volume (closedBall x ε)))
⊢ volume (closedBall x ε) ≤ volume (ball x ε)
state_after: case inr
T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : 0 < ε
this : Tendsto (fun δ => volume (closedBall x δ)) (𝓝[<] ε) (𝓝 (volume (closedBall x ε)))
r : ℝ
hr : r ∈ Ioo 0 ε
⊢ r ∈ {x_1 | (fun c => volume (closedBall x c) ≤ volume (ball x ε)) x_1}

tactic: exact measure_mono (closedBall_subset_ball hr.2)
state_before: case inr
T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : 0 < ε
this : Tendsto (fun δ => volume (closedBall x δ)) (𝓝[<] ε) (𝓝 (volume (closedBall x ε)))
r : ℝ
hr : r ∈ Ioo 0 ε
⊢ r ∈ {x_1 | (fun c => volume (closedBall x c) ≤ volume (ball x ε)) x_1}
state_after: no goals

tactic: exact (ae_eq_of_subset_of_measure_ge ball_subset_closedBall this measurableSet_ball
  (measure_ne_top _ _)).symm
state_before: T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : 0 < ε
this : volume (closedBall x ε) ≤ volume (ball x ε)
⊢ closedBall x ε =ᶠ[ae volume] ball x ε
state_after: no goals

tactic: simp_rw [volume_closedBall]
state_before: T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : 0 < ε
⊢ Tendsto (fun δ => volume (closedBall x δ)) (𝓝[<] ε) (𝓝 (volume (closedBall x ε)))
state_after: T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : 0 < ε
⊢ Tendsto (fun δ => ENNReal.ofReal (min T (2 * δ))) (𝓝[<] ε) (𝓝 (ENNReal.ofReal (min T (2 * ε))))

tactic: refine ENNReal.tendsto_ofReal (Tendsto.min tendsto_const_nhds <| Tendsto.const_mul _ ?_)
state_before: T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : 0 < ε
⊢ Tendsto (fun δ => ENNReal.ofReal (min T (2 * δ))) (𝓝[<] ε) (𝓝 (ENNReal.ofReal (min T (2 * ε))))
state_after: T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : 0 < ε
⊢ Tendsto (fun k => k) (𝓝[<] ε) (𝓝 ε)

tactic: convert (@monotone_id ℝ _).tendsto_nhdsWithin_Iio ε
state_before: T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : 0 < ε
⊢ Tendsto (fun k => k) (𝓝[<] ε) (𝓝 ε)
state_after: case h.e'_5.h.e'_3
T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : 0 < ε
⊢ ε = sSup (id '' Iio ε)

tactic: simp
state_before: case h.e'_5.h.e'_3
T : ℝ
hT : Fact (0 < T)
x : AddCircle T
ε : ℝ
hε : 0 < ε
⊢ ε = sSup (id '' Iio ε)
state_after: no goals