Theorem: MeasureTheory.addHaar_image_eq_zero_of_det_fderivWithin_eq_zero
File: Mathlib/MeasureTheory/Function/Jacobian.lean

tactic: suffices H : ∀ R, μ (f '' (s ∩ closedBall 0 R)) = 0
state_before: E : Type u_1
F : Type ?u.699519
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
s : Set E
f : E → E
f' : E → E →L[ℝ] E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
μ : Measure E
inst✝ : IsAddHaarMeasure μ
hf' : ∀ (x : E), x ∈ s → HasFDerivWithinAt f (f' x) s x
h'f' : ∀ (x : E), x ∈ s → ContinuousLinearMap.det (f' x) = 0
⊢ ↑↑μ (f '' s) = 0

tactic: intro R
state_before: case H
E : Type u_1
F : Type ?u.699519
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
s : Set E
f : E → E
f' : E → E →L[ℝ] E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
μ : Measure E
inst✝ : IsAddHaarMeasure μ
hf' : ∀ (x : E), x ∈ s → HasFDerivWithinAt f (f' x) s x
h'f' : ∀ (x : E), x ∈ s → ContinuousLinearMap.det (f' x) = 0
⊢ ∀ (R : ℝ), ↑↑μ (f '' (s ∩ closedBall 0 R)) = 0

tactic: have A : ∀ (ε : ℝ≥0), 0 < ε → μ (f '' (s ∩ closedBall 0 R)) ≤ ε * μ (closedBall 0 R) :=
  fun ε εpos =>
  addHaar_image_eq_zero_of_det_fderivWithin_eq_zero_aux μ
    (fun x hx => (hf' x hx.1).mono (inter_subset_left _ _)) R (inter_subset_right _ _) ε εpos
    fun x hx => h'f' x hx.1
state_before: case H
E : Type u_1
F : Type ?u.699519
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
s : Set E
f : E → E
f' : E → E →L[ℝ] E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
μ : Measure E
inst✝ : IsAddHaarMeasure μ
hf' : ∀ (x : E), x ∈ s → HasFDerivWithinAt f (f' x) s x
h'f' : ∀ (x : E), x ∈ s → ContinuousLinearMap.det (f' x) = 0
R : ℝ
⊢ ↑↑μ (f '' (s ∩ closedBall 0 R)) = 0

tactic: have B : Tendsto (fun ε : ℝ≥0 => (ε : ℝ≥0∞) * μ (closedBall 0 R)) (𝓝[>] 0) (𝓝 0) := by
  have :
    Tendsto (fun ε : ℝ≥0 => (ε : ℝ≥0∞) * μ (closedBall 0 R)) (𝓝 0)
      (𝓝 (((0 : ℝ≥0) : ℝ≥0∞) * μ (closedBall 0 R))) :=
    ENNReal.Tendsto.mul_const (ENNReal.tendsto_coe.2 tendsto_id)
      (Or.inr measure_closedBall_lt_top.ne)
  simp only [MulZeroClass.zero_mul, ENNReal.coe_zero] at this
  exact Tendsto.mono_left this nhdsWithin_le_nhds
state_before: case H
E : Type u_1
F : Type ?u.699519
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
s : Set E
f : E → E
f' : E → E →L[ℝ] E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
μ : Measure E
inst✝ : IsAddHaarMeasure μ
hf' : ∀ (x : E), x ∈ s → HasFDerivWithinAt f (f' x) s x
h'f' : ∀ (x : E), x ∈ s → ContinuousLinearMap.det (f' x) = 0
R : ℝ
A : ∀ (ε : ℝ≥0), 0 < ε → ↑↑μ (f '' (s ∩ closedBall 0 R)) ≤ ↑ε * ↑↑μ (closedBall 0 R)
⊢ ↑↑μ (f '' (s ∩ closedBall 0 R)) = 0

tactic: apply le_antisymm _ (zero_le _)
state_before: case H
E : Type u_1
F : Type ?u.699519
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
s : Set E
f : E → E
f' : E → E →L[ℝ] E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
μ : Measure E
inst✝ : IsAddHaarMeasure μ
hf' : ∀ (x : E), x ∈ s → HasFDerivWithinAt f (f' x) s x
h'f' : ∀ (x : E), x ∈ s → ContinuousLinearMap.det (f' x) = 0
R : ℝ
A : ∀ (ε : ℝ≥0), 0 < ε → ↑↑μ (f '' (s ∩ closedBall 0 R)) ≤ ↑ε * ↑↑μ (closedBall 0 R)
B : Tendsto (fun ε => ↑ε * ↑↑μ (closedBall 0 R)) (𝓝[Ioi 0] 0) (𝓝 0)
⊢ ↑↑μ (f '' (s ∩ closedBall 0 R)) = 0

tactic: apply ge_of_tendsto B
state_before: E : Type u_1
F : Type ?u.699519
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
s : Set E
f : E → E
f' : E → E →L[ℝ] E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
μ : Measure E
inst✝ : IsAddHaarMeasure μ
hf' : ∀ (x : E), x ∈ s → HasFDerivWithinAt f (f' x) s x
h'f' : ∀ (x : E), x ∈ s → ContinuousLinearMap.det (f' x) = 0
R : ℝ
A : ∀ (ε : ℝ≥0), 0 < ε → ↑↑μ (f '' (s ∩ closedBall 0 R)) ≤ ↑ε * ↑↑μ (closedBall 0 R)
B : Tendsto (fun ε => ↑ε * ↑↑μ (closedBall 0 R)) (𝓝[Ioi 0] 0) (𝓝 0)
⊢ ↑↑μ (f '' (s ∩ closedBall 0 R)) ≤ 0

tactic: filter_upwards [self_mem_nhdsWithin]
state_before: E : Type u_1
F : Type ?u.699519
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
s : Set E
f : E → E
f' : E → E →L[ℝ] E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
μ : Measure E
inst✝ : IsAddHaarMeasure μ
hf' : ∀ (x : E), x ∈ s → HasFDerivWithinAt f (f' x) s x
h'f' : ∀ (x : E), x ∈ s → ContinuousLinearMap.det (f' x) = 0
R : ℝ
A : ∀ (ε : ℝ≥0), 0 < ε → ↑↑μ (f '' (s ∩ closedBall 0 R)) ≤ ↑ε * ↑↑μ (closedBall 0 R)
B : Tendsto (fun ε => ↑ε * ↑↑μ (closedBall 0 R)) (𝓝[Ioi 0] 0) (𝓝 0)
⊢ ∀ᶠ (c : ℝ≥0) in 𝓝[Ioi 0] 0, ↑↑μ (f '' (s ∩ closedBall 0 R)) ≤ ↑c * ↑↑μ (closedBall 0 R)

tactic: exact A
state_before: case h
E : Type u_1
F : Type ?u.699519
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
s : Set E
f : E → E
f' : E → E →L[ℝ] E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
μ : Measure E
inst✝ : IsAddHaarMeasure μ
hf' : ∀ (x : E), x ∈ s → HasFDerivWithinAt f (f' x) s x
h'f' : ∀ (x : E), x ∈ s → ContinuousLinearMap.det (f' x) = 0
R : ℝ
A : ∀ (ε : ℝ≥0), 0 < ε → ↑↑μ (f '' (s ∩ closedBall 0 R)) ≤ ↑ε * ↑↑μ (closedBall 0 R)
B : Tendsto (fun ε => ↑ε * ↑↑μ (closedBall 0 R)) (𝓝[Ioi 0] 0) (𝓝 0)
⊢ ∀ (a : ℝ≥0), a ∈ Ioi 0 → ↑↑μ (f '' (s ∩ closedBall 0 R)) ≤ ↑a * ↑↑μ (closedBall 0 R)

tactic: apply le_antisymm _ (zero_le _)
state_before: E : Type u_1
F : Type ?u.699519
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
s : Set E
f : E → E
f' : E → E →L[ℝ] E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
μ : Measure E
inst✝ : IsAddHaarMeasure μ
hf' : ∀ (x : E), x ∈ s → HasFDerivWithinAt f (f' x) s x
h'f' : ∀ (x : E), x ∈ s → ContinuousLinearMap.det (f' x) = 0
H : ∀ (R : ℝ), ↑↑μ (f '' (s ∩ closedBall 0 R)) = 0
⊢ ↑↑μ (f '' s) = 0

tactic: rw [← iUnion_inter_closedBall_nat s 0]
state_before: E : Type u_1
F : Type ?u.699519
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
s : Set E
f : E → E
f' : E → E →L[ℝ] E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
μ : Measure E
inst✝ : IsAddHaarMeasure μ
hf' : ∀ (x : E), x ∈ s → HasFDerivWithinAt f (f' x) s x
h'f' : ∀ (x : E), x ∈ s → ContinuousLinearMap.det (f' x) = 0
H : ∀ (R : ℝ), ↑↑μ (f '' (s ∩ closedBall 0 R)) = 0
⊢ ↑↑μ (f '' s) ≤ 0

tactic: calc
  μ (f '' ⋃ n : ℕ, s ∩ closedBall 0 n) ≤ ∑' n : ℕ, μ (f '' (s ∩ closedBall 0 n)) := by
    rw [image_iUnion]; exact measure_iUnion_le _
  _ ≤ 0 := by simp only [H, tsum_zero, nonpos_iff_eq_zero]
state_before: E : Type u_1
F : Type ?u.699519
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
s : Set E
f : E → E
f' : E → E →L[ℝ] E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
μ : Measure E
inst✝ : IsAddHaarMeasure μ
hf' : ∀ (x : E), x ∈ s → HasFDerivWithinAt f (f' x) s x
h'f' : ∀ (x : E), x ∈ s → ContinuousLinearMap.det (f' x) = 0
H : ∀ (R : ℝ), ↑↑μ (f '' (s ∩ closedBall 0 R)) = 0
⊢ ↑↑μ (f '' ⋃ (n : ℕ), s ∩ closedBall 0 ↑n) ≤ 0

tactic: rw [image_iUnion]
state_before: E : Type u_1
F : Type ?u.699519
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
s : Set E
f : E → E
f' : E → E →L[ℝ] E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
μ : Measure E
inst✝ : IsAddHaarMeasure μ
hf' : ∀ (x : E), x ∈ s → HasFDerivWithinAt f (f' x) s x
h'f' : ∀ (x : E), x ∈ s → ContinuousLinearMap.det (f' x) = 0
H : ∀ (R : ℝ), ↑↑μ (f '' (s ∩ closedBall 0 R)) = 0
⊢ ↑↑μ (f '' ⋃ (n : ℕ), s ∩ closedBall 0 ↑n) ≤ ∑' (n : ℕ), ↑↑μ (f '' (s ∩ closedBall 0 ↑n))

tactic: exact measure_iUnion_le _
state_before: E : Type u_1
F : Type ?u.699519
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
s : Set E
f : E → E
f' : E → E →L[ℝ] E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
μ : Measure E
inst✝ : IsAddHaarMeasure μ
hf' : ∀ (x : E), x ∈ s → HasFDerivWithinAt f (f' x) s x
h'f' : ∀ (x : E), x ∈ s → ContinuousLinearMap.det (f' x) = 0
H : ∀ (R : ℝ), ↑↑μ (f '' (s ∩ closedBall 0 R)) = 0
⊢ ↑↑μ (⋃ (i : ℕ), f '' (s ∩ closedBall 0 ↑i)) ≤ ∑' (n : ℕ), ↑↑μ (f '' (s ∩ closedBall 0 ↑n))

tactic: simp only [H, tsum_zero, nonpos_iff_eq_zero]
state_before: E : Type u_1
F : Type ?u.699519
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
s : Set E
f : E → E
f' : E → E →L[ℝ] E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
μ : Measure E
inst✝ : IsAddHaarMeasure μ
hf' : ∀ (x : E), x ∈ s → HasFDerivWithinAt f (f' x) s x
h'f' : ∀ (x : E), x ∈ s → ContinuousLinearMap.det (f' x) = 0
H : ∀ (R : ℝ), ↑↑μ (f '' (s ∩ closedBall 0 R)) = 0
⊢ (∑' (n : ℕ), ↑↑μ (f '' (s ∩ closedBall 0 ↑n))) ≤ 0

tactic: have :
  Tendsto (fun ε : ℝ≥0 => (ε : ℝ≥0∞) * μ (closedBall 0 R)) (𝓝 0)
    (𝓝 (((0 : ℝ≥0) : ℝ≥0∞) * μ (closedBall 0 R))) :=
  ENNReal.Tendsto.mul_const (ENNReal.tendsto_coe.2 tendsto_id)
    (Or.inr measure_closedBall_lt_top.ne)
state_before: E : Type u_1
F : Type ?u.699519
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
s : Set E
f : E → E
f' : E → E →L[ℝ] E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
μ : Measure E
inst✝ : IsAddHaarMeasure μ
hf' : ∀ (x : E), x ∈ s → HasFDerivWithinAt f (f' x) s x
h'f' : ∀ (x : E), x ∈ s → ContinuousLinearMap.det (f' x) = 0
R : ℝ
A : ∀ (ε : ℝ≥0), 0 < ε → ↑↑μ (f '' (s ∩ closedBall 0 R)) ≤ ↑ε * ↑↑μ (closedBall 0 R)
⊢ Tendsto (fun ε => ↑ε * ↑↑μ (closedBall 0 R)) (𝓝[Ioi 0] 0) (𝓝 0)

tactic: simp only [MulZeroClass.zero_mul, ENNReal.coe_zero] at this
state_before: E : Type u_1
F : Type ?u.699519
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
s : Set E
f : E → E
f' : E → E →L[ℝ] E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
μ : Measure E
inst✝ : IsAddHaarMeasure μ
hf' : ∀ (x : E), x ∈ s → HasFDerivWithinAt f (f' x) s x
h'f' : ∀ (x : E), x ∈ s → ContinuousLinearMap.det (f' x) = 0
R : ℝ
A : ∀ (ε : ℝ≥0), 0 < ε → ↑↑μ (f '' (s ∩ closedBall 0 R)) ≤ ↑ε * ↑↑μ (closedBall 0 R)
this : Tendsto (fun ε => ↑ε * ↑↑μ (closedBall 0 R)) (𝓝 0) (𝓝 (↑0 * ↑↑μ (closedBall 0 R)))
⊢ Tendsto (fun ε => ↑ε * ↑↑μ (closedBall 0 R)) (𝓝[Ioi 0] 0) (𝓝 0)

tactic: exact Tendsto.mono_left this nhdsWithin_le_nhds
state_before: E : Type u_1
F : Type ?u.699519
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
s : Set E
f : E → E
f' : E → E →L[ℝ] E
inst✝² : MeasurableSpace E
inst✝¹ : BorelSpace E
μ : Measure E
inst✝ : IsAddHaarMeasure μ
hf' : ∀ (x : E), x ∈ s → HasFDerivWithinAt f (f' x) s x
h'f' : ∀ (x : E), x ∈ s → ContinuousLinearMap.det (f' x) = 0
R : ℝ
A : ∀ (ε : ℝ≥0), 0 < ε → ↑↑μ (f '' (s ∩ closedBall 0 R)) ≤ ↑ε * ↑↑μ (closedBall 0 R)
this : Tendsto (fun ε => ↑ε * ↑↑μ (closedBall 0 R)) (𝓝 0) (𝓝 0)
⊢ Tendsto (fun ε => ↑ε * ↑↑μ (closedBall 0 R)) (𝓝[Ioi 0] 0) (𝓝 0)