Theorem: blimsup_cthickening_ae_le_of_eventually_mul_le
File: Mathlib/MeasureTheory/Covering/LiminfLimsup.lean

tactic: let R₁ i := max 0 (r₁ i)
state_before: α : Type u_1
inst✝⁵ : MetricSpace α
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : BorelSpace α
μ : MeasureTheory.Measure α
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsUnifLocDoublingMeasure μ
p : ℕ → Prop
s : ℕ → Set α
M : ℝ
hM : 0 < M
r₁ r₂ : ℕ → ℝ
hr : Tendsto r₁ atTop (𝓝[Ioi 0] 0)
hMr : ∀ᶠ (i : ℕ) in atTop, M * r₁ i ≤ r₂ i
⊢ blimsup (fun i => cthickening (r₁ i) (s i)) atTop p ≤ᵐ[μ] blimsup (fun i => cthickening (r₂ i) (s i)) atTop p

tactic: let R₂ i := max 0 (r₂ i)
state_before: α : Type u_1
inst✝⁵ : MetricSpace α
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : BorelSpace α
μ : MeasureTheory.Measure α
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsUnifLocDoublingMeasure μ
p : ℕ → Prop
s : ℕ → Set α
M : ℝ
hM : 0 < M
r₁ r₂ : ℕ → ℝ
hr : Tendsto r₁ atTop (𝓝[Ioi 0] 0)
hMr : ∀ᶠ (i : ℕ) in atTop, M * r₁ i ≤ r₂ i
R₁ : ℕ → ℝ := fun i => max 0 (r₁ i)
⊢ blimsup (fun i => cthickening (r₁ i) (s i)) atTop p ≤ᵐ[μ] blimsup (fun i => cthickening (r₂ i) (s i)) atTop p

tactic: have hRp : 0 ≤ R₁ := fun i => le_max_left 0 (r₁ i)
state_before: α : Type u_1
inst✝⁵ : MetricSpace α
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : BorelSpace α
μ : MeasureTheory.Measure α
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsUnifLocDoublingMeasure μ
p : ℕ → Prop
s : ℕ → Set α
M : ℝ
hM : 0 < M
r₁ r₂ : ℕ → ℝ
hr : Tendsto r₁ atTop (𝓝[Ioi 0] 0)
hMr : ∀ᶠ (i : ℕ) in atTop, M * r₁ i ≤ r₂ i
R₁ : ℕ → ℝ := fun i => max 0 (r₁ i)
R₂ : ℕ → ℝ := fun i => max 0 (r₂ i)
⊢ blimsup (fun i => cthickening (r₁ i) (s i)) atTop p ≤ᵐ[μ] blimsup (fun i => cthickening (r₂ i) (s i)) atTop p

tactic: replace hMr : ∀ᶠ i in atTop, M * R₁ i ≤ R₂ i
state_before: α : Type u_1
inst✝⁵ : MetricSpace α
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : BorelSpace α
μ : MeasureTheory.Measure α
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsUnifLocDoublingMeasure μ
p : ℕ → Prop
s : ℕ → Set α
M : ℝ
hM : 0 < M
r₁ r₂ : ℕ → ℝ
hr : Tendsto r₁ atTop (𝓝[Ioi 0] 0)
hMr : ∀ᶠ (i : ℕ) in atTop, M * r₁ i ≤ r₂ i
R₁ : ℕ → ℝ := fun i => max 0 (r₁ i)
R₂ : ℕ → ℝ := fun i => max 0 (r₂ i)
hRp : 0 ≤ R₁
⊢ blimsup (fun i => cthickening (r₁ i) (s i)) atTop p ≤ᵐ[μ] blimsup (fun i => cthickening (r₂ i) (s i)) atTop p

tactic: simp_rw [← cthickening_max_zero (r₁ _), ← cthickening_max_zero (r₂ _)]
state_before: α : Type u_1
inst✝⁵ : MetricSpace α
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : BorelSpace α
μ : MeasureTheory.Measure α
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsUnifLocDoublingMeasure μ
p : ℕ → Prop
s : ℕ → Set α
M : ℝ
hM : 0 < M
r₁ r₂ : ℕ → ℝ
hr : Tendsto r₁ atTop (𝓝[Ioi 0] 0)
R₁ : ℕ → ℝ := fun i => max 0 (r₁ i)
R₂ : ℕ → ℝ := fun i => max 0 (r₂ i)
hRp : 0 ≤ R₁
hMr : ∀ᶠ (i : ℕ) in atTop, M * R₁ i ≤ R₂ i
⊢ blimsup (fun i => cthickening (r₁ i) (s i)) atTop p ≤ᵐ[μ] blimsup (fun i => cthickening (r₂ i) (s i)) atTop p

tactic: cases' le_or_lt 1 M with hM' hM'
state_before: α : Type u_1
inst✝⁵ : MetricSpace α
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : BorelSpace α
μ : MeasureTheory.Measure α
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsUnifLocDoublingMeasure μ
p : ℕ → Prop
s : ℕ → Set α
M : ℝ
hM : 0 < M
r₁ r₂ : ℕ → ℝ
hr : Tendsto r₁ atTop (𝓝[Ioi 0] 0)
R₁ : ℕ → ℝ := fun i => max 0 (r₁ i)
R₂ : ℕ → ℝ := fun i => max 0 (r₂ i)
hRp : 0 ≤ R₁
hMr : ∀ᶠ (i : ℕ) in atTop, M * R₁ i ≤ R₂ i
⊢ blimsup (fun i => cthickening (max 0 (r₁ i)) (s i)) atTop p ≤ᵐ[μ]
    blimsup (fun i => cthickening (max 0 (r₂ i)) (s i)) atTop p

tactic: refine' hMr.mono fun i hi => _
state_before: case hMr
α : Type u_1
inst✝⁵ : MetricSpace α
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : BorelSpace α
μ : MeasureTheory.Measure α
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsUnifLocDoublingMeasure μ
p : ℕ → Prop
s : ℕ → Set α
M : ℝ
hM : 0 < M
r₁ r₂ : ℕ → ℝ
hr : Tendsto r₁ atTop (𝓝[Ioi 0] 0)
hMr : ∀ᶠ (i : ℕ) in atTop, M * r₁ i ≤ r₂ i
R₁ : ℕ → ℝ := fun i => max 0 (r₁ i)
R₂ : ℕ → ℝ := fun i => max 0 (r₂ i)
hRp : 0 ≤ R₁
⊢ ∀ᶠ (i : ℕ) in atTop, M * R₁ i ≤ R₂ i

tactic: rw [mul_max_of_nonneg _ _ hM.le, MulZeroClass.mul_zero]
state_before: case hMr
α : Type u_1
inst✝⁵ : MetricSpace α
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : BorelSpace α
μ : MeasureTheory.Measure α
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsUnifLocDoublingMeasure μ
p : ℕ → Prop
s : ℕ → Set α
M : ℝ
hM : 0 < M
r₁ r₂ : ℕ → ℝ
hr : Tendsto r₁ atTop (𝓝[Ioi 0] 0)
hMr : ∀ᶠ (i : ℕ) in atTop, M * r₁ i ≤ r₂ i
R₁ : ℕ → ℝ := fun i => max 0 (r₁ i)
R₂ : ℕ → ℝ := fun i => max 0 (r₂ i)
hRp : 0 ≤ R₁
i : ℕ
hi : M * r₁ i ≤ r₂ i
⊢ M * R₁ i ≤ R₂ i

tactic: exact max_le_max (le_refl 0) hi
state_before: case hMr
α : Type u_1
inst✝⁵ : MetricSpace α
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : BorelSpace α
μ : MeasureTheory.Measure α
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsUnifLocDoublingMeasure μ
p : ℕ → Prop
s : ℕ → Set α
M : ℝ
hM : 0 < M
r₁ r₂ : ℕ → ℝ
hr : Tendsto r₁ atTop (𝓝[Ioi 0] 0)
hMr : ∀ᶠ (i : ℕ) in atTop, M * r₁ i ≤ r₂ i
R₁ : ℕ → ℝ := fun i => max 0 (r₁ i)
R₂ : ℕ → ℝ := fun i => max 0 (r₂ i)
hRp : 0 ≤ R₁
i : ℕ
hi : M * r₁ i ≤ r₂ i
⊢ max 0 (M * r₁ i) ≤ R₂ i

tactic: apply HasSubset.Subset.eventuallyLE
state_before: case inl
α : Type u_1
inst✝⁵ : MetricSpace α
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : BorelSpace α
μ : MeasureTheory.Measure α
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsUnifLocDoublingMeasure μ
p : ℕ → Prop
s : ℕ → Set α
M : ℝ
hM : 0 < M
r₁ r₂ : ℕ → ℝ
hr : Tendsto r₁ atTop (𝓝[Ioi 0] 0)
R₁ : ℕ → ℝ := fun i => max 0 (r₁ i)
R₂ : ℕ → ℝ := fun i => max 0 (r₂ i)
hRp : 0 ≤ R₁
hMr : ∀ᶠ (i : ℕ) in atTop, M * R₁ i ≤ R₂ i
hM' : 1 ≤ M
⊢ blimsup (fun i => cthickening (max 0 (r₁ i)) (s i)) atTop p ≤ᵐ[μ]
    blimsup (fun i => cthickening (max 0 (r₂ i)) (s i)) atTop p

tactic: change _ ≤ _
state_before: case inl.h
α : Type u_1
inst✝⁵ : MetricSpace α
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : BorelSpace α
μ : MeasureTheory.Measure α
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsUnifLocDoublingMeasure μ
p : ℕ → Prop
s : ℕ → Set α
M : ℝ
hM : 0 < M
r₁ r₂ : ℕ → ℝ
hr : Tendsto r₁ atTop (𝓝[Ioi 0] 0)
R₁ : ℕ → ℝ := fun i => max 0 (r₁ i)
R₂ : ℕ → ℝ := fun i => max 0 (r₂ i)
hRp : 0 ≤ R₁
hMr : ∀ᶠ (i : ℕ) in atTop, M * R₁ i ≤ R₂ i
hM' : 1 ≤ M
⊢ blimsup (fun i => cthickening (max 0 (r₁ i)) (s i)) atTop p ⊆
    blimsup (fun i => cthickening (max 0 (r₂ i)) (s i)) atTop p

tactic: refine' mono_blimsup' (hMr.mono fun i hi _ => cthickening_mono _ (s i))
state_before: case inl.h
α : Type u_1
inst✝⁵ : MetricSpace α
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : BorelSpace α
μ : MeasureTheory.Measure α
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsUnifLocDoublingMeasure μ
p : ℕ → Prop
s : ℕ → Set α
M : ℝ
hM : 0 < M
r₁ r₂ : ℕ → ℝ
hr : Tendsto r₁ atTop (𝓝[Ioi 0] 0)
R₁ : ℕ → ℝ := fun i => max 0 (r₁ i)
R₂ : ℕ → ℝ := fun i => max 0 (r₂ i)
hRp : 0 ≤ R₁
hMr : ∀ᶠ (i : ℕ) in atTop, M * R₁ i ≤ R₂ i
hM' : 1 ≤ M
⊢ blimsup (fun i => cthickening (max 0 (r₁ i)) (s i)) atTop p ≤
    blimsup (fun i => cthickening (max 0 (r₂ i)) (s i)) atTop p

tactic: exact (le_mul_of_one_le_left (hRp i) hM').trans hi
state_before: case inl.h
α : Type u_1
inst✝⁵ : MetricSpace α
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : BorelSpace α
μ : MeasureTheory.Measure α
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsUnifLocDoublingMeasure μ
p : ℕ → Prop
s : ℕ → Set α
M : ℝ
hM : 0 < M
r₁ r₂ : ℕ → ℝ
hr : Tendsto r₁ atTop (𝓝[Ioi 0] 0)
R₁ : ℕ → ℝ := fun i => max 0 (r₁ i)
R₂ : ℕ → ℝ := fun i => max 0 (r₂ i)
hRp : 0 ≤ R₁
hMr : ∀ᶠ (i : ℕ) in atTop, M * R₁ i ≤ R₂ i
hM' : 1 ≤ M
i : ℕ
hi : M * R₁ i ≤ R₂ i
x✝ : p i
⊢ max 0 (r₁ i) ≤ max 0 (r₂ i)

tactic: simp only [← @cthickening_closure _ _ _ (s _)]
state_before: case inr
α : Type u_1
inst✝⁵ : MetricSpace α
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : BorelSpace α
μ : MeasureTheory.Measure α
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsUnifLocDoublingMeasure μ
p : ℕ → Prop
s : ℕ → Set α
M : ℝ
hM : 0 < M
r₁ r₂ : ℕ → ℝ
hr : Tendsto r₁ atTop (𝓝[Ioi 0] 0)
R₁ : ℕ → ℝ := fun i => max 0 (r₁ i)
R₂ : ℕ → ℝ := fun i => max 0 (r₂ i)
hRp : 0 ≤ R₁
hMr : ∀ᶠ (i : ℕ) in atTop, M * R₁ i ≤ R₂ i
hM' : M < 1
⊢ blimsup (fun i => cthickening (max 0 (r₁ i)) (s i)) atTop p ≤ᵐ[μ]
    blimsup (fun i => cthickening (max 0 (r₂ i)) (s i)) atTop p

tactic: have hs : ∀ i, IsClosed (closure (s i)) := fun i => isClosed_closure
state_before: case inr
α : Type u_1
inst✝⁵ : MetricSpace α
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : BorelSpace α
μ : MeasureTheory.Measure α
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsUnifLocDoublingMeasure μ
p : ℕ → Prop
s : ℕ → Set α
M : ℝ
hM : 0 < M
r₁ r₂ : ℕ → ℝ
hr : Tendsto r₁ atTop (𝓝[Ioi 0] 0)
R₁ : ℕ → ℝ := fun i => max 0 (r₁ i)
R₂ : ℕ → ℝ := fun i => max 0 (r₂ i)
hRp : 0 ≤ R₁
hMr : ∀ᶠ (i : ℕ) in atTop, M * R₁ i ≤ R₂ i
hM' : M < 1
⊢ blimsup (fun i => cthickening (max 0 (r₁ i)) (closure (s i))) atTop p ≤ᵐ[μ]
    blimsup (fun i => cthickening (max 0 (r₂ i)) (closure (s i))) atTop p

tactic: exact blimsup_cthickening_ae_le_of_eventually_mul_le_aux μ p hs
  (tendsto_nhds_max_right hr) hRp hM hM' hMr
state_before: case inr
α : Type u_1
inst✝⁵ : MetricSpace α
inst✝⁴ : SecondCountableTopology α
inst✝³ : MeasurableSpace α
inst✝² : BorelSpace α
μ : MeasureTheory.Measure α
inst✝¹ : IsLocallyFiniteMeasure μ
inst✝ : IsUnifLocDoublingMeasure μ
p : ℕ → Prop
s : ℕ → Set α
M : ℝ
hM : 0 < M
r₁ r₂ : ℕ → ℝ
hr : Tendsto r₁ atTop (𝓝[Ioi 0] 0)
R₁ : ℕ → ℝ := fun i => max 0 (r₁ i)
R₂ : ℕ → ℝ := fun i => max 0 (r₂ i)
hRp : 0 ≤ R₁
hMr : ∀ᶠ (i : ℕ) in atTop, M * R₁ i ≤ R₂ i
hM' : M < 1
hs : ∀ (i : ℕ), IsClosed (closure (s i))
⊢ blimsup (fun i => cthickening (max 0 (r₁ i)) (closure (s i))) atTop p ≤ᵐ[μ]
    blimsup (fun i => cthickening (max 0 (r₂ i)) (closure (s i))) atTop p