[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : limsup (fun i => ↑↑(μs i) E) L ≤ ↑↑μ E
⊢ ↑↑μ Eᶜ ≤ liminf (fun i => ↑↑(μs i) Eᶜ) L
[PROOFSTEP]
rcases L.eq_or_neBot with rfl | hne
[GOAL]
case inl
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : limsup (fun i => ↑↑(μs i) E) ⊥ ≤ ↑↑μ E
⊢ ↑↑μ Eᶜ ≤ liminf (fun i => ↑↑(μs i) Eᶜ) ⊥
[PROOFSTEP]
simp only [liminf_bot, le_top]
[GOAL]
case inr
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : limsup (fun i => ↑↑(μs i) E) L ≤ ↑↑μ E
hne : NeBot L
⊢ ↑↑μ Eᶜ ≤ liminf (fun i => ↑↑(μs i) Eᶜ) L
[PROOFSTEP]
have meas_Ec : μ Eᶜ = 1 - μ E := by simpa only [measure_univ] using measure_compl E_mble (measure_lt_top μ E).ne
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : limsup (fun i => ↑↑(μs i) E) L ≤ ↑↑μ E
hne : NeBot L
⊢ ↑↑μ Eᶜ = 1 - ↑↑μ E
[PROOFSTEP]
simpa only [measure_univ] using measure_compl E_mble (measure_lt_top μ E).ne
[GOAL]
case inr
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : limsup (fun i => ↑↑(μs i) E) L ≤ ↑↑μ E
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
⊢ ↑↑μ Eᶜ ≤ liminf (fun i => ↑↑(μs i) Eᶜ) L
[PROOFSTEP]
have meas_i_Ec : ∀ i, μs i Eᶜ = 1 - μs i E := by
  intro i
  simpa only [measure_univ] using measure_compl E_mble (measure_lt_top (μs i) E).ne
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : limsup (fun i => ↑↑(μs i) E) L ≤ ↑↑μ E
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
⊢ ∀ (i : ι), ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
[PROOFSTEP]
intro i
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : limsup (fun i => ↑↑(μs i) E) L ≤ ↑↑μ E
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
i : ι
⊢ ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
[PROOFSTEP]
simpa only [measure_univ] using measure_compl E_mble (measure_lt_top (μs i) E).ne
[GOAL]
case inr
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : limsup (fun i => ↑↑(μs i) E) L ≤ ↑↑μ E
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
meas_i_Ec : ∀ (i : ι), ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
⊢ ↑↑μ Eᶜ ≤ liminf (fun i => ↑↑(μs i) Eᶜ) L
[PROOFSTEP]
simp_rw [meas_Ec, meas_i_Ec]
[GOAL]
case inr
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : limsup (fun i => ↑↑(μs i) E) L ≤ ↑↑μ E
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
meas_i_Ec : ∀ (i : ι), ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
⊢ 1 - ↑↑μ E ≤ liminf (fun i => 1 - ↑↑(μs i) E) L
[PROOFSTEP]
have obs : (L.liminf fun i : ι => 1 - μs i E) = L.liminf ((fun x => 1 - x) ∘ fun i : ι => μs i E) := by rfl
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : limsup (fun i => ↑↑(μs i) E) L ≤ ↑↑μ E
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
meas_i_Ec : ∀ (i : ι), ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
⊢ liminf (fun i => 1 - ↑↑(μs i) E) L = liminf ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L
[PROOFSTEP]
rfl
[GOAL]
case inr
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : limsup (fun i => ↑↑(μs i) E) L ≤ ↑↑μ E
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
meas_i_Ec : ∀ (i : ι), ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
obs : liminf (fun i => 1 - ↑↑(μs i) E) L = liminf ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L
⊢ 1 - ↑↑μ E ≤ liminf (fun i => 1 - ↑↑(μs i) E) L
[PROOFSTEP]
rw [obs]
[GOAL]
case inr
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : limsup (fun i => ↑↑(μs i) E) L ≤ ↑↑μ E
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
meas_i_Ec : ∀ (i : ι), ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
obs : liminf (fun i => 1 - ↑↑(μs i) E) L = liminf ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L
⊢ 1 - ↑↑μ E ≤ liminf ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L
[PROOFSTEP]
have :=
  antitone_const_tsub.map_limsup_of_continuousAt (F := L) (fun i => μs i E)
    (ENNReal.continuous_sub_left ENNReal.one_ne_top).continuousAt
[GOAL]
case inr
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : limsup (fun i => ↑↑(μs i) E) L ≤ ↑↑μ E
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
meas_i_Ec : ∀ (i : ι), ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
obs : liminf (fun i => 1 - ↑↑(μs i) E) L = liminf ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L
this : 1 - limsup (fun i => ↑↑(μs i) E) L = liminf ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L
⊢ 1 - ↑↑μ E ≤ liminf ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L
[PROOFSTEP]
simp_rw [← this]
[GOAL]
case inr
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : limsup (fun i => ↑↑(μs i) E) L ≤ ↑↑μ E
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
meas_i_Ec : ∀ (i : ι), ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
obs : liminf (fun i => 1 - ↑↑(μs i) E) L = liminf ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L
this : 1 - limsup (fun i => ↑↑(μs i) E) L = liminf ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L
⊢ 1 - ↑↑μ E ≤ 1 - limsup (fun i => ↑↑(μs i) E) L
[PROOFSTEP]
exact antitone_const_tsub h
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : ↑↑μ E ≤ liminf (fun i => ↑↑(μs i) E) L
⊢ limsup (fun i => ↑↑(μs i) Eᶜ) L ≤ ↑↑μ Eᶜ
[PROOFSTEP]
rcases L.eq_or_neBot with rfl | hne
[GOAL]
case inl
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : ↑↑μ E ≤ liminf (fun i => ↑↑(μs i) E) ⊥
⊢ limsup (fun i => ↑↑(μs i) Eᶜ) ⊥ ≤ ↑↑μ Eᶜ
[PROOFSTEP]
simp only [limsup_bot, bot_le]
[GOAL]
case inr
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : ↑↑μ E ≤ liminf (fun i => ↑↑(μs i) E) L
hne : NeBot L
⊢ limsup (fun i => ↑↑(μs i) Eᶜ) L ≤ ↑↑μ Eᶜ
[PROOFSTEP]
have meas_Ec : μ Eᶜ = 1 - μ E := by simpa only [measure_univ] using measure_compl E_mble (measure_lt_top μ E).ne
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : ↑↑μ E ≤ liminf (fun i => ↑↑(μs i) E) L
hne : NeBot L
⊢ ↑↑μ Eᶜ = 1 - ↑↑μ E
[PROOFSTEP]
simpa only [measure_univ] using measure_compl E_mble (measure_lt_top μ E).ne
[GOAL]
case inr
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : ↑↑μ E ≤ liminf (fun i => ↑↑(μs i) E) L
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
⊢ limsup (fun i => ↑↑(μs i) Eᶜ) L ≤ ↑↑μ Eᶜ
[PROOFSTEP]
have meas_i_Ec : ∀ i, μs i Eᶜ = 1 - μs i E := by
  intro i
  simpa only [measure_univ] using measure_compl E_mble (measure_lt_top (μs i) E).ne
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : ↑↑μ E ≤ liminf (fun i => ↑↑(μs i) E) L
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
⊢ ∀ (i : ι), ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
[PROOFSTEP]
intro i
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : ↑↑μ E ≤ liminf (fun i => ↑↑(μs i) E) L
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
i : ι
⊢ ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
[PROOFSTEP]
simpa only [measure_univ] using measure_compl E_mble (measure_lt_top (μs i) E).ne
[GOAL]
case inr
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : ↑↑μ E ≤ liminf (fun i => ↑↑(μs i) E) L
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
meas_i_Ec : ∀ (i : ι), ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
⊢ limsup (fun i => ↑↑(μs i) Eᶜ) L ≤ ↑↑μ Eᶜ
[PROOFSTEP]
simp_rw [meas_Ec, meas_i_Ec]
[GOAL]
case inr
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : ↑↑μ E ≤ liminf (fun i => ↑↑(μs i) E) L
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
meas_i_Ec : ∀ (i : ι), ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
⊢ limsup (fun i => 1 - ↑↑(μs i) E) L ≤ 1 - ↑↑μ E
[PROOFSTEP]
have obs : (L.limsup fun i : ι => 1 - μs i E) = L.limsup ((fun x => 1 - x) ∘ fun i : ι => μs i E) := by rfl
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : ↑↑μ E ≤ liminf (fun i => ↑↑(μs i) E) L
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
meas_i_Ec : ∀ (i : ι), ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
⊢ limsup (fun i => 1 - ↑↑(μs i) E) L = limsup ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L
[PROOFSTEP]
rfl
[GOAL]
case inr
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : ↑↑μ E ≤ liminf (fun i => ↑↑(μs i) E) L
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
meas_i_Ec : ∀ (i : ι), ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
obs : limsup (fun i => 1 - ↑↑(μs i) E) L = limsup ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L
⊢ limsup (fun i => 1 - ↑↑(μs i) E) L ≤ 1 - ↑↑μ E
[PROOFSTEP]
rw [obs]
[GOAL]
case inr
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : ↑↑μ E ≤ liminf (fun i => ↑↑(μs i) E) L
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
meas_i_Ec : ∀ (i : ι), ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
obs : limsup (fun i => 1 - ↑↑(μs i) E) L = limsup ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L
⊢ limsup ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L ≤ 1 - ↑↑μ E
[PROOFSTEP]
have :=
  antitone_const_tsub.map_liminf_of_continuousAt (F := L) (fun i => μs i E)
    (ENNReal.continuous_sub_left ENNReal.one_ne_top).continuousAt
[GOAL]
case inr
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : ↑↑μ E ≤ liminf (fun i => ↑↑(μs i) E) L
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
meas_i_Ec : ∀ (i : ι), ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
obs : limsup (fun i => 1 - ↑↑(μs i) E) L = limsup ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L
this : 1 - liminf (fun i => ↑↑(μs i) E) L = limsup ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L
⊢ limsup ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L ≤ 1 - ↑↑μ E
[PROOFSTEP]
simp_rw [← this]
[GOAL]
case inr
Ω : Type u_1
inst✝² : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
E : Set Ω
E_mble : MeasurableSet E
h : ↑↑μ E ≤ liminf (fun i => ↑↑(μs i) E) L
hne : NeBot L
meas_Ec : ↑↑μ Eᶜ = 1 - ↑↑μ E
meas_i_Ec : ∀ (i : ι), ↑↑(μs i) Eᶜ = 1 - ↑↑(μs i) E
obs : limsup (fun i => 1 - ↑↑(μs i) E) L = limsup ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L
this : 1 - liminf (fun i => ↑↑(μs i) E) L = limsup ((fun x => 1 - x) ∘ fun i => ↑↑(μs i) E) L
⊢ 1 - liminf (fun i => ↑↑(μs i) E) L ≤ 1 - ↑↑μ E
[PROOFSTEP]
exact antitone_const_tsub h
[GOAL]
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
inst✝³ : TopologicalSpace Ω
inst✝² : OpensMeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
⊢ (∀ (F : Set Ω), IsClosed F → limsup (fun i => ↑↑(μs i) F) L ≤ ↑↑μ F) ↔
    ∀ (G : Set Ω), IsOpen G → ↑↑μ G ≤ liminf (fun i => ↑↑(μs i) G) L
[PROOFSTEP]
constructor
[GOAL]
case mp
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
inst✝³ : TopologicalSpace Ω
inst✝² : OpensMeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
⊢ (∀ (F : Set Ω), IsClosed F → limsup (fun i => ↑↑(μs i) F) L ≤ ↑↑μ F) →
    ∀ (G : Set Ω), IsOpen G → ↑↑μ G ≤ liminf (fun i => ↑↑(μs i) G) L
[PROOFSTEP]
intro h G G_open
[GOAL]
case mp
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
inst✝³ : TopologicalSpace Ω
inst✝² : OpensMeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
h : ∀ (F : Set Ω), IsClosed F → limsup (fun i => ↑↑(μs i) F) L ≤ ↑↑μ F
G : Set Ω
G_open : IsOpen G
⊢ ↑↑μ G ≤ liminf (fun i => ↑↑(μs i) G) L
[PROOFSTEP]
exact le_measure_liminf_of_limsup_measure_compl_le G_open.measurableSet (h Gᶜ (isClosed_compl_iff.mpr G_open))
[GOAL]
case mpr
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
inst✝³ : TopologicalSpace Ω
inst✝² : OpensMeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
⊢ (∀ (G : Set Ω), IsOpen G → ↑↑μ G ≤ liminf (fun i => ↑↑(μs i) G) L) →
    ∀ (F : Set Ω), IsClosed F → limsup (fun i => ↑↑(μs i) F) L ≤ ↑↑μ F
[PROOFSTEP]
intro h F F_closed
[GOAL]
case mpr
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
inst✝³ : TopologicalSpace Ω
inst✝² : OpensMeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
inst✝¹ : IsProbabilityMeasure μ
inst✝ : ∀ (i : ι), IsProbabilityMeasure (μs i)
h : ∀ (G : Set Ω), IsOpen G → ↑↑μ G ≤ liminf (fun i => ↑↑(μs i) G) L
F : Set Ω
F_closed : IsClosed F
⊢ limsup (fun i => ↑↑(μs i) F) L ≤ ↑↑μ F
[PROOFSTEP]
exact limsup_measure_le_of_le_liminf_measure_compl F_closed.measurableSet (h Fᶜ (isOpen_compl_iff.mpr F_closed))
[GOAL]
Ω : Type u_1
inst✝ : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
E₀ E E₁ : Set Ω
E₀_subset : E₀ ⊆ E
subset_E₁ : E ⊆ E₁
nulldiff : ↑↑μ (E₁ \ E₀) = 0
h_E₀ : ↑↑μ E₀ ≤ liminf (fun i => ↑↑(μs i) E₀) L
h_E₁ : limsup (fun i => ↑↑(μs i) E₁) L ≤ ↑↑μ E₁
⊢ Tendsto (fun i => ↑↑(μs i) E) L (𝓝 (↑↑μ E))
[PROOFSTEP]
apply tendsto_of_le_liminf_of_limsup_le
[GOAL]
case hinf
Ω : Type u_1
inst✝ : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
E₀ E E₁ : Set Ω
E₀_subset : E₀ ⊆ E
subset_E₁ : E ⊆ E₁
nulldiff : ↑↑μ (E₁ \ E₀) = 0
h_E₀ : ↑↑μ E₀ ≤ liminf (fun i => ↑↑(μs i) E₀) L
h_E₁ : limsup (fun i => ↑↑(μs i) E₁) L ≤ ↑↑μ E₁
⊢ ↑↑μ E ≤ liminf (fun i => ↑↑(μs i) E) L
[PROOFSTEP]
have E₀_ae_eq_E : E₀ =ᵐ[μ] E :=
  EventuallyLE.antisymm E₀_subset.eventuallyLE (subset_E₁.eventuallyLE.trans (ae_le_set.mpr nulldiff))
[GOAL]
case hinf
Ω : Type u_1
inst✝ : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
E₀ E E₁ : Set Ω
E₀_subset : E₀ ⊆ E
subset_E₁ : E ⊆ E₁
nulldiff : ↑↑μ (E₁ \ E₀) = 0
h_E₀ : ↑↑μ E₀ ≤ liminf (fun i => ↑↑(μs i) E₀) L
h_E₁ : limsup (fun i => ↑↑(μs i) E₁) L ≤ ↑↑μ E₁
E₀_ae_eq_E : E₀ =ᵐ[μ] E
⊢ ↑↑μ E ≤ liminf (fun i => ↑↑(μs i) E) L
[PROOFSTEP]
calc
  μ E = μ E₀ := measure_congr E₀_ae_eq_E.symm
  _ ≤ L.liminf fun i => μs i E₀ := h_E₀
  _ ≤ L.liminf fun i => μs i E := liminf_le_liminf (eventually_of_forall fun _ => measure_mono E₀_subset)
[GOAL]
case hsup
Ω : Type u_1
inst✝ : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
E₀ E E₁ : Set Ω
E₀_subset : E₀ ⊆ E
subset_E₁ : E ⊆ E₁
nulldiff : ↑↑μ (E₁ \ E₀) = 0
h_E₀ : ↑↑μ E₀ ≤ liminf (fun i => ↑↑(μs i) E₀) L
h_E₁ : limsup (fun i => ↑↑(μs i) E₁) L ≤ ↑↑μ E₁
⊢ limsup (fun i => ↑↑(μs i) E) L ≤ ↑↑μ E
[PROOFSTEP]
have E_ae_eq_E₁ : E =ᵐ[μ] E₁ :=
  EventuallyLE.antisymm subset_E₁.eventuallyLE ((ae_le_set.mpr nulldiff).trans E₀_subset.eventuallyLE)
[GOAL]
case hsup
Ω : Type u_1
inst✝ : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
E₀ E E₁ : Set Ω
E₀_subset : E₀ ⊆ E
subset_E₁ : E ⊆ E₁
nulldiff : ↑↑μ (E₁ \ E₀) = 0
h_E₀ : ↑↑μ E₀ ≤ liminf (fun i => ↑↑(μs i) E₀) L
h_E₁ : limsup (fun i => ↑↑(μs i) E₁) L ≤ ↑↑μ E₁
E_ae_eq_E₁ : E =ᵐ[μ] E₁
⊢ limsup (fun i => ↑↑(μs i) E) L ≤ ↑↑μ E
[PROOFSTEP]
calc
  (L.limsup fun i => μs i E) ≤ L.limsup fun i => μs i E₁ :=
    limsup_le_limsup (eventually_of_forall fun _ => measure_mono subset_E₁)
  _ ≤ μ E₁ := h_E₁
  _ = μ E := measure_congr E_ae_eq_E₁.symm
[GOAL]
case h
Ω : Type u_1
inst✝ : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
E₀ E E₁ : Set Ω
E₀_subset : E₀ ⊆ E
subset_E₁ : E ⊆ E₁
nulldiff : ↑↑μ (E₁ \ E₀) = 0
h_E₀ : ↑↑μ E₀ ≤ liminf (fun i => ↑↑(μs i) E₀) L
h_E₁ : limsup (fun i => ↑↑(μs i) E₁) L ≤ ↑↑μ E₁
⊢ autoParam (IsBoundedUnder (fun x x_1 => x ≤ x_1) L fun i => ↑↑(μs i) E) _auto✝
[PROOFSTEP]
infer_param
[GOAL]
case h'
Ω : Type u_1
inst✝ : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
μ : Measure Ω
μs : ι → Measure Ω
E₀ E E₁ : Set Ω
E₀_subset : E₀ ⊆ E
subset_E₁ : E ⊆ E₁
nulldiff : ↑↑μ (E₁ \ E₀) = 0
h_E₀ : ↑↑μ E₀ ≤ liminf (fun i => ↑↑(μs i) E₀) L
h_E₁ : limsup (fun i => ↑↑(μs i) E₁) L ≤ ↑↑μ E₁
⊢ autoParam (IsBoundedUnder (fun x x_1 => x ≥ x_1) L fun i => ↑↑(μs i) E) _auto✝
[PROOFSTEP]
infer_param
[GOAL]
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
inst✝³ : IsCountablyGenerated L
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
c : ℝ≥0
E : Set Ω
E_mble : MeasurableSet E
fs : ι → Ω →ᵇ ℝ≥0
fs_bdd : ∀ᶠ (i : ι) in L, ∀ᵐ (ω : Ω) ∂μ, ↑(fs i) ω ≤ c
fs_lim : ∀ᵐ (ω : Ω) ∂μ, Tendsto (fun i => ↑(fs i) ω) L (𝓝 (indicator E (fun x => 1) ω))
⊢ Tendsto (fun n => ∫⁻ (ω : Ω), ↑(↑(fs n) ω) ∂μ) L (𝓝 (↑↑μ E))
[PROOFSTEP]
convert FiniteMeasure.tendsto_lintegral_nn_filter_of_le_const μ fs_bdd fs_lim
[GOAL]
case h.e'_5.h.e'_3
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
inst✝³ : IsCountablyGenerated L
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
c : ℝ≥0
E : Set Ω
E_mble : MeasurableSet E
fs : ι → Ω →ᵇ ℝ≥0
fs_bdd : ∀ᶠ (i : ι) in L, ∀ᵐ (ω : Ω) ∂μ, ↑(fs i) ω ≤ c
fs_lim : ∀ᵐ (ω : Ω) ∂μ, Tendsto (fun i => ↑(fs i) ω) L (𝓝 (indicator E (fun x => 1) ω))
⊢ ↑↑μ E = ∫⁻ (ω : Ω), ↑(indicator E (fun x => 1) ω) ∂μ
[PROOFSTEP]
have aux : ∀ ω, indicator E (fun _ => (1 : ℝ≥0∞)) ω = ↑(indicator E (fun _ => (1 : ℝ≥0)) ω) := fun ω => by
  simp only [ENNReal.coe_indicator, ENNReal.coe_one]
[GOAL]
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
inst✝³ : IsCountablyGenerated L
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
c : ℝ≥0
E : Set Ω
E_mble : MeasurableSet E
fs : ι → Ω →ᵇ ℝ≥0
fs_bdd : ∀ᶠ (i : ι) in L, ∀ᵐ (ω : Ω) ∂μ, ↑(fs i) ω ≤ c
fs_lim : ∀ᵐ (ω : Ω) ∂μ, Tendsto (fun i => ↑(fs i) ω) L (𝓝 (indicator E (fun x => 1) ω))
ω : Ω
⊢ indicator E (fun x => 1) ω = ↑(indicator E (fun x => 1) ω)
[PROOFSTEP]
simp only [ENNReal.coe_indicator, ENNReal.coe_one]
[GOAL]
case h.e'_5.h.e'_3
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
inst✝³ : IsCountablyGenerated L
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
c : ℝ≥0
E : Set Ω
E_mble : MeasurableSet E
fs : ι → Ω →ᵇ ℝ≥0
fs_bdd : ∀ᶠ (i : ι) in L, ∀ᵐ (ω : Ω) ∂μ, ↑(fs i) ω ≤ c
fs_lim : ∀ᵐ (ω : Ω) ∂μ, Tendsto (fun i => ↑(fs i) ω) L (𝓝 (indicator E (fun x => 1) ω))
aux : ∀ (ω : Ω), indicator E (fun x => 1) ω = ↑(indicator E (fun x => 1) ω)
⊢ ↑↑μ E = ∫⁻ (ω : Ω), ↑(indicator E (fun x => 1) ω) ∂μ
[PROOFSTEP]
simp_rw [← aux, lintegral_indicator _ E_mble]
[GOAL]
case h.e'_5.h.e'_3
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
ι : Type u_2
L : Filter ι
inst✝³ : IsCountablyGenerated L
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
c : ℝ≥0
E : Set Ω
E_mble : MeasurableSet E
fs : ι → Ω →ᵇ ℝ≥0
fs_bdd : ∀ᶠ (i : ι) in L, ∀ᵐ (ω : Ω) ∂μ, ↑(fs i) ω ≤ c
fs_lim : ∀ᵐ (ω : Ω) ∂μ, Tendsto (fun i => ↑(fs i) ω) L (𝓝 (indicator E (fun x => 1) ω))
aux : ∀ (ω : Ω), indicator E (fun x => 1) ω = ↑(indicator E (fun x => 1) ω)
⊢ ↑↑μ E = ∫⁻ (x : Ω) in E, 1 ∂μ
[PROOFSTEP]
simp only [lintegral_one, Measure.restrict_apply, MeasurableSet.univ, univ_inter]
[GOAL]
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
c : ℝ≥0
E : Set Ω
E_mble : MeasurableSet E
fs : ℕ → Ω →ᵇ ℝ≥0
fs_bdd : ∀ (n : ℕ) (ω : Ω), ↑(fs n) ω ≤ c
fs_lim : Tendsto (fun n => ↑(fs n)) atTop (𝓝 (indicator E fun x => 1))
⊢ Tendsto (fun n => ∫⁻ (ω : Ω), ↑(↑(fs n) ω) ∂μ) atTop (𝓝 (↑↑μ E))
[PROOFSTEP]
have fs_lim' : ∀ ω, Tendsto (fun n : ℕ => (fs n ω : ℝ≥0)) atTop (𝓝 (indicator E (fun _ => (1 : ℝ≥0)) ω)) :=
  by
  rw [tendsto_pi_nhds] at fs_lim 
  exact fun ω => fs_lim ω
[GOAL]
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
c : ℝ≥0
E : Set Ω
E_mble : MeasurableSet E
fs : ℕ → Ω →ᵇ ℝ≥0
fs_bdd : ∀ (n : ℕ) (ω : Ω), ↑(fs n) ω ≤ c
fs_lim : Tendsto (fun n => ↑(fs n)) atTop (𝓝 (indicator E fun x => 1))
⊢ ∀ (ω : Ω), Tendsto (fun n => ↑(fs n) ω) atTop (𝓝 (indicator E (fun x => 1) ω))
[PROOFSTEP]
rw [tendsto_pi_nhds] at fs_lim 
[GOAL]
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
c : ℝ≥0
E : Set Ω
E_mble : MeasurableSet E
fs : ℕ → Ω →ᵇ ℝ≥0
fs_bdd : ∀ (n : ℕ) (ω : Ω), ↑(fs n) ω ≤ c
fs_lim : ∀ (x : Ω), Tendsto (fun i => ↑(fs i) x) atTop (𝓝 (indicator E (fun x => 1) x))
⊢ ∀ (ω : Ω), Tendsto (fun n => ↑(fs n) ω) atTop (𝓝 (indicator E (fun x => 1) ω))
[PROOFSTEP]
exact fun ω => fs_lim ω
[GOAL]
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
c : ℝ≥0
E : Set Ω
E_mble : MeasurableSet E
fs : ℕ → Ω →ᵇ ℝ≥0
fs_bdd : ∀ (n : ℕ) (ω : Ω), ↑(fs n) ω ≤ c
fs_lim : Tendsto (fun n => ↑(fs n)) atTop (𝓝 (indicator E fun x => 1))
fs_lim' : ∀ (ω : Ω), Tendsto (fun n => ↑(fs n) ω) atTop (𝓝 (indicator E (fun x => 1) ω))
⊢ Tendsto (fun n => ∫⁻ (ω : Ω), ↑(↑(fs n) ω) ∂μ) atTop (𝓝 (↑↑μ E))
[PROOFSTEP]
apply
  measure_of_cont_bdd_of_tendsto_filter_indicator μ E_mble fs
    (eventually_of_forall fun n => eventually_of_forall (fs_bdd n)) (eventually_of_forall fs_lim')
[GOAL]
Ω✝ : Type u_1
inst✝⁴ : MeasurableSpace Ω✝
Ω : Type u_2
inst✝³ : MeasurableSpace Ω
inst✝² : PseudoEMetricSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
F : Set Ω
F_closed : IsClosed F
δs : ℕ → ℝ
δs_pos : ∀ (n : ℕ), 0 < δs n
δs_lim : Tendsto δs atTop (𝓝 0)
⊢ Tendsto (fun n => ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs n) F) ω) ∂μ) atTop (𝓝 (↑↑μ F))
[PROOFSTEP]
apply
  measure_of_cont_bdd_of_tendsto_indicator μ F_closed.measurableSet (fun n => thickenedIndicator (δs_pos n) F)
    fun n ω => thickenedIndicator_le_one (δs_pos n) F ω
[GOAL]
Ω✝ : Type u_1
inst✝⁴ : MeasurableSpace Ω✝
Ω : Type u_2
inst✝³ : MeasurableSpace Ω
inst✝² : PseudoEMetricSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
F : Set Ω
F_closed : IsClosed F
δs : ℕ → ℝ
δs_pos : ∀ (n : ℕ), 0 < δs n
δs_lim : Tendsto δs atTop (𝓝 0)
⊢ Tendsto (fun n => ↑(thickenedIndicator (_ : 0 < δs n) F)) atTop (𝓝 (indicator F fun x => 1))
[PROOFSTEP]
have key := thickenedIndicator_tendsto_indicator_closure δs_pos δs_lim F
[GOAL]
Ω✝ : Type u_1
inst✝⁴ : MeasurableSpace Ω✝
Ω : Type u_2
inst✝³ : MeasurableSpace Ω
inst✝² : PseudoEMetricSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
F : Set Ω
F_closed : IsClosed F
δs : ℕ → ℝ
δs_pos : ∀ (n : ℕ), 0 < δs n
δs_lim : Tendsto δs atTop (𝓝 0)
key : Tendsto (fun n => ↑(thickenedIndicator (_ : 0 < δs n) F)) atTop (𝓝 (indicator (closure F) fun x => 1))
⊢ Tendsto (fun n => ↑(thickenedIndicator (_ : 0 < δs n) F)) atTop (𝓝 (indicator F fun x => 1))
[PROOFSTEP]
rwa [F_closed.closure_eq] at key 
[GOAL]
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
⊢ limsup (fun i => ↑↑↑(μs i) F) L ≤ ↑↑↑μ F
[PROOFSTEP]
rcases L.eq_or_neBot with rfl | hne
[GOAL]
case inl
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
F : Set Ω
F_closed : IsClosed F
μs_lim : Tendsto μs ⊥ (𝓝 μ)
⊢ limsup (fun i => ↑↑↑(μs i) F) ⊥ ≤ ↑↑↑μ F
[PROOFSTEP]
simp only [limsup_bot, bot_le]
[GOAL]
case inr
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
⊢ limsup (fun i => ↑↑↑(μs i) F) L ≤ ↑↑↑μ F
[PROOFSTEP]
apply ENNReal.le_of_forall_pos_le_add
[GOAL]
case inr.h
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
⊢ ∀ (ε : ℝ≥0), 0 < ε → ↑↑↑μ F < ⊤ → limsup (fun i => ↑↑↑(μs i) F) L ≤ ↑↑↑μ F + ↑ε
[PROOFSTEP]
intro ε ε_pos _
[GOAL]
case inr.h
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
ε : ℝ≥0
ε_pos : 0 < ε
a✝ : ↑↑↑μ F < ⊤
⊢ limsup (fun i => ↑↑↑(μs i) F) L ≤ ↑↑↑μ F + ↑ε
[PROOFSTEP]
let δs := fun n : ℕ => (1 : ℝ) / (n + 1)
[GOAL]
case inr.h
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
ε : ℝ≥0
ε_pos : 0 < ε
a✝ : ↑↑↑μ F < ⊤
δs : ℕ → ℝ := fun n => 1 / (↑n + 1)
⊢ limsup (fun i => ↑↑↑(μs i) F) L ≤ ↑↑↑μ F + ↑ε
[PROOFSTEP]
have δs_pos : ∀ n, 0 < δs n := fun n => Nat.one_div_pos_of_nat
[GOAL]
case inr.h
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
ε : ℝ≥0
ε_pos : 0 < ε
a✝ : ↑↑↑μ F < ⊤
δs : ℕ → ℝ := fun n => 1 / (↑n + 1)
δs_pos : ∀ (n : ℕ), 0 < δs n
⊢ limsup (fun i => ↑↑↑(μs i) F) L ≤ ↑↑↑μ F + ↑ε
[PROOFSTEP]
have δs_lim : Tendsto δs atTop (𝓝 0) := tendsto_one_div_add_atTop_nhds_0_nat
[GOAL]
case inr.h
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
ε : ℝ≥0
ε_pos : 0 < ε
a✝ : ↑↑↑μ F < ⊤
δs : ℕ → ℝ := fun n => 1 / (↑n + 1)
δs_pos : ∀ (n : ℕ), 0 < δs n
δs_lim : Tendsto δs atTop (𝓝 0)
⊢ limsup (fun i => ↑↑↑(μs i) F) L ≤ ↑↑↑μ F + ↑ε
[PROOFSTEP]
have key₁ := tendsto_lintegral_thickenedIndicator_of_isClosed (μ : Measure Ω) F_closed δs_pos δs_lim
[GOAL]
case inr.h
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
ε : ℝ≥0
ε_pos : 0 < ε
a✝ : ↑↑↑μ F < ⊤
δs : ℕ → ℝ := fun n => 1 / (↑n + 1)
δs_pos : ∀ (n : ℕ), 0 < δs n
δs_lim : Tendsto δs atTop (𝓝 0)
key₁ : Tendsto (fun n => ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs n) F) ω) ∂↑μ) atTop (𝓝 (↑↑↑μ F))
⊢ limsup (fun i => ↑↑↑(μs i) F) L ≤ ↑↑↑μ F + ↑ε
[PROOFSTEP]
have room₁ : (μ : Measure Ω) F < (μ : Measure Ω) F + ε / 2 := by
  apply
    ENNReal.lt_add_right (measure_lt_top (μ : Measure Ω) F).ne
      (ENNReal.div_pos_iff.mpr ⟨(ENNReal.coe_pos.mpr ε_pos).ne.symm, ENNReal.two_ne_top⟩).ne.symm
[GOAL]
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
ε : ℝ≥0
ε_pos : 0 < ε
a✝ : ↑↑↑μ F < ⊤
δs : ℕ → ℝ := fun n => 1 / (↑n + 1)
δs_pos : ∀ (n : ℕ), 0 < δs n
δs_lim : Tendsto δs atTop (𝓝 0)
key₁ : Tendsto (fun n => ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs n) F) ω) ∂↑μ) atTop (𝓝 (↑↑↑μ F))
⊢ ↑↑↑μ F < ↑↑↑μ F + ↑ε / 2
[PROOFSTEP]
apply
  ENNReal.lt_add_right (measure_lt_top (μ : Measure Ω) F).ne
    (ENNReal.div_pos_iff.mpr ⟨(ENNReal.coe_pos.mpr ε_pos).ne.symm, ENNReal.two_ne_top⟩).ne.symm
[GOAL]
case inr.h
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
ε : ℝ≥0
ε_pos : 0 < ε
a✝ : ↑↑↑μ F < ⊤
δs : ℕ → ℝ := fun n => 1 / (↑n + 1)
δs_pos : ∀ (n : ℕ), 0 < δs n
δs_lim : Tendsto δs atTop (𝓝 0)
key₁ : Tendsto (fun n => ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs n) F) ω) ∂↑μ) atTop (𝓝 (↑↑↑μ F))
room₁ : ↑↑↑μ F < ↑↑↑μ F + ↑ε / 2
⊢ limsup (fun i => ↑↑↑(μs i) F) L ≤ ↑↑↑μ F + ↑ε
[PROOFSTEP]
rcases eventually_atTop.mp (eventually_lt_of_tendsto_lt room₁ key₁) with ⟨M, hM⟩
[GOAL]
case inr.h.intro
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
ε : ℝ≥0
ε_pos : 0 < ε
a✝ : ↑↑↑μ F < ⊤
δs : ℕ → ℝ := fun n => 1 / (↑n + 1)
δs_pos : ∀ (n : ℕ), 0 < δs n
δs_lim : Tendsto δs atTop (𝓝 0)
key₁ : Tendsto (fun n => ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs n) F) ω) ∂↑μ) atTop (𝓝 (↑↑↑μ F))
room₁ : ↑↑↑μ F < ↑↑↑μ F + ↑ε / 2
M : ℕ
hM : ∀ (b : ℕ), b ≥ M → ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs b) F) ω) ∂↑μ < ↑↑↑μ F + ↑ε / 2
⊢ limsup (fun i => ↑↑↑(μs i) F) L ≤ ↑↑↑μ F + ↑ε
[PROOFSTEP]
have key₂ := FiniteMeasure.tendsto_iff_forall_lintegral_tendsto.mp μs_lim (thickenedIndicator (δs_pos M) F)
[GOAL]
case inr.h.intro
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
ε : ℝ≥0
ε_pos : 0 < ε
a✝ : ↑↑↑μ F < ⊤
δs : ℕ → ℝ := fun n => 1 / (↑n + 1)
δs_pos : ∀ (n : ℕ), 0 < δs n
δs_lim : Tendsto δs atTop (𝓝 0)
key₁ : Tendsto (fun n => ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs n) F) ω) ∂↑μ) atTop (𝓝 (↑↑↑μ F))
room₁ : ↑↑↑μ F < ↑↑↑μ F + ↑ε / 2
M : ℕ
hM : ∀ (b : ℕ), b ≥ M → ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs b) F) ω) ∂↑μ < ↑↑↑μ F + ↑ε / 2
key₂ :
  Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑(μs i)) L
    (𝓝 (∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑μ))
⊢ limsup (fun i => ↑↑↑(μs i) F) L ≤ ↑↑↑μ F + ↑ε
[PROOFSTEP]
have room₂ :
  (lintegral (μ : Measure Ω) fun a => thickenedIndicator (δs_pos M) F a) <
    (lintegral (μ : Measure Ω) fun a => thickenedIndicator (δs_pos M) F a) + ε / 2 :=
  by
  apply
    ENNReal.lt_add_right (lintegral_lt_top_of_boundedContinuous_to_nnreal (μ : Measure Ω) _).ne
      (ENNReal.div_pos_iff.mpr ⟨(ENNReal.coe_pos.mpr ε_pos).ne.symm, ENNReal.two_ne_top⟩).ne.symm
[GOAL]
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
ε : ℝ≥0
ε_pos : 0 < ε
a✝ : ↑↑↑μ F < ⊤
δs : ℕ → ℝ := fun n => 1 / (↑n + 1)
δs_pos : ∀ (n : ℕ), 0 < δs n
δs_lim : Tendsto δs atTop (𝓝 0)
key₁ : Tendsto (fun n => ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs n) F) ω) ∂↑μ) atTop (𝓝 (↑↑↑μ F))
room₁ : ↑↑↑μ F < ↑↑↑μ F + ↑ε / 2
M : ℕ
hM : ∀ (b : ℕ), b ≥ M → ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs b) F) ω) ∂↑μ < ↑↑↑μ F + ↑ε / 2
key₂ :
  Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑(μs i)) L
    (𝓝 (∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑μ))
⊢ ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ <
    ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2
[PROOFSTEP]
apply
  ENNReal.lt_add_right (lintegral_lt_top_of_boundedContinuous_to_nnreal (μ : Measure Ω) _).ne
    (ENNReal.div_pos_iff.mpr ⟨(ENNReal.coe_pos.mpr ε_pos).ne.symm, ENNReal.two_ne_top⟩).ne.symm
[GOAL]
case inr.h.intro
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
ε : ℝ≥0
ε_pos : 0 < ε
a✝ : ↑↑↑μ F < ⊤
δs : ℕ → ℝ := fun n => 1 / (↑n + 1)
δs_pos : ∀ (n : ℕ), 0 < δs n
δs_lim : Tendsto δs atTop (𝓝 0)
key₁ : Tendsto (fun n => ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs n) F) ω) ∂↑μ) atTop (𝓝 (↑↑↑μ F))
room₁ : ↑↑↑μ F < ↑↑↑μ F + ↑ε / 2
M : ℕ
hM : ∀ (b : ℕ), b ≥ M → ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs b) F) ω) ∂↑μ < ↑↑↑μ F + ↑ε / 2
key₂ :
  Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑(μs i)) L
    (𝓝 (∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑μ))
room₂ :
  ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ <
    ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2
⊢ limsup (fun i => ↑↑↑(μs i) F) L ≤ ↑↑↑μ F + ↑ε
[PROOFSTEP]
have ev_near := Eventually.mono (eventually_lt_of_tendsto_lt room₂ key₂) fun n => le_of_lt
[GOAL]
case inr.h.intro
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
ε : ℝ≥0
ε_pos : 0 < ε
a✝ : ↑↑↑μ F < ⊤
δs : ℕ → ℝ := fun n => 1 / (↑n + 1)
δs_pos : ∀ (n : ℕ), 0 < δs n
δs_lim : Tendsto δs atTop (𝓝 0)
key₁ : Tendsto (fun n => ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs n) F) ω) ∂↑μ) atTop (𝓝 (↑↑↑μ F))
room₁ : ↑↑↑μ F < ↑↑↑μ F + ↑ε / 2
M : ℕ
hM : ∀ (b : ℕ), b ≥ M → ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs b) F) ω) ∂↑μ < ↑↑↑μ F + ↑ε / 2
key₂ :
  Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑(μs i)) L
    (𝓝 (∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑μ))
room₂ :
  ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ <
    ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2
ev_near :
  ∀ᶠ (x : ι) in L,
    ∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑(μs x) ≤
      ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2
⊢ limsup (fun i => ↑↑↑(μs i) F) L ≤ ↑↑↑μ F + ↑ε
[PROOFSTEP]
have ev_near' :=
  Eventually.mono ev_near fun n =>
    le_trans (measure_le_lintegral_thickenedIndicator (μs n : Measure Ω) F_closed.measurableSet (δs_pos M))
[GOAL]
case inr.h.intro
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
ε : ℝ≥0
ε_pos : 0 < ε
a✝ : ↑↑↑μ F < ⊤
δs : ℕ → ℝ := fun n => 1 / (↑n + 1)
δs_pos : ∀ (n : ℕ), 0 < δs n
δs_lim : Tendsto δs atTop (𝓝 0)
key₁ : Tendsto (fun n => ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs n) F) ω) ∂↑μ) atTop (𝓝 (↑↑↑μ F))
room₁ : ↑↑↑μ F < ↑↑↑μ F + ↑ε / 2
M : ℕ
hM : ∀ (b : ℕ), b ≥ M → ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs b) F) ω) ∂↑μ < ↑↑↑μ F + ↑ε / 2
key₂ :
  Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑(μs i)) L
    (𝓝 (∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑μ))
room₂ :
  ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ <
    ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2
ev_near :
  ∀ᶠ (x : ι) in L,
    ∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑(μs x) ≤
      ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2
ev_near' : ∀ᶠ (x : ι) in L, ↑↑↑(μs x) F ≤ ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2
⊢ limsup (fun i => ↑↑↑(μs i) F) L ≤ ↑↑↑μ F + ↑ε
[PROOFSTEP]
apply (Filter.limsup_le_limsup ev_near').trans
[GOAL]
case inr.h.intro
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
ε : ℝ≥0
ε_pos : 0 < ε
a✝ : ↑↑↑μ F < ⊤
δs : ℕ → ℝ := fun n => 1 / (↑n + 1)
δs_pos : ∀ (n : ℕ), 0 < δs n
δs_lim : Tendsto δs atTop (𝓝 0)
key₁ : Tendsto (fun n => ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs n) F) ω) ∂↑μ) atTop (𝓝 (↑↑↑μ F))
room₁ : ↑↑↑μ F < ↑↑↑μ F + ↑ε / 2
M : ℕ
hM : ∀ (b : ℕ), b ≥ M → ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs b) F) ω) ∂↑μ < ↑↑↑μ F + ↑ε / 2
key₂ :
  Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑(μs i)) L
    (𝓝 (∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑μ))
room₂ :
  ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ <
    ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2
ev_near :
  ∀ᶠ (x : ι) in L,
    ∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑(μs x) ≤
      ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2
ev_near' : ∀ᶠ (x : ι) in L, ↑↑↑(μs x) F ≤ ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2
⊢ limsup (fun x => ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2) L ≤ ↑↑↑μ F + ↑ε
[PROOFSTEP]
rw [limsup_const]
[GOAL]
case inr.h.intro
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
ε : ℝ≥0
ε_pos : 0 < ε
a✝ : ↑↑↑μ F < ⊤
δs : ℕ → ℝ := fun n => 1 / (↑n + 1)
δs_pos : ∀ (n : ℕ), 0 < δs n
δs_lim : Tendsto δs atTop (𝓝 0)
key₁ : Tendsto (fun n => ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs n) F) ω) ∂↑μ) atTop (𝓝 (↑↑↑μ F))
room₁ : ↑↑↑μ F < ↑↑↑μ F + ↑ε / 2
M : ℕ
hM : ∀ (b : ℕ), b ≥ M → ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs b) F) ω) ∂↑μ < ↑↑↑μ F + ↑ε / 2
key₂ :
  Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑(μs i)) L
    (𝓝 (∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑μ))
room₂ :
  ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ <
    ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2
ev_near :
  ∀ᶠ (x : ι) in L,
    ∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑(μs x) ≤
      ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2
ev_near' : ∀ᶠ (x : ι) in L, ↑↑↑(μs x) F ≤ ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2
⊢ ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2 ≤ ↑↑↑μ F + ↑ε
[PROOFSTEP]
apply le_trans (add_le_add (hM M rfl.le).le (le_refl (ε / 2 : ℝ≥0∞)))
[GOAL]
case inr.h.intro
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
μs : ι → FiniteMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
hne : NeBot L
ε : ℝ≥0
ε_pos : 0 < ε
a✝ : ↑↑↑μ F < ⊤
δs : ℕ → ℝ := fun n => 1 / (↑n + 1)
δs_pos : ∀ (n : ℕ), 0 < δs n
δs_lim : Tendsto δs atTop (𝓝 0)
key₁ : Tendsto (fun n => ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs n) F) ω) ∂↑μ) atTop (𝓝 (↑↑↑μ F))
room₁ : ↑↑↑μ F < ↑↑↑μ F + ↑ε / 2
M : ℕ
hM : ∀ (b : ℕ), b ≥ M → ∫⁻ (ω : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs b) F) ω) ∂↑μ < ↑↑↑μ F + ↑ε / 2
key₂ :
  Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑(μs i)) L
    (𝓝 (∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑μ))
room₂ :
  ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ <
    ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2
ev_near :
  ∀ᶠ (x : ι) in L,
    ∫⁻ (x : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) x) ∂↑(μs x) ≤
      ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2
ev_near' : ∀ᶠ (x : ι) in L, ↑↑↑(μs x) F ≤ ∫⁻ (a : Ω), ↑(↑(thickenedIndicator (_ : 0 < δs M) F) a) ∂↑μ + ↑ε / 2
⊢ ↑↑↑μ F + ↑ε / 2 + ↑ε / 2 ≤ ↑↑↑μ F + ↑ε
[PROOFSTEP]
simp only [add_assoc, ENNReal.add_halves, le_refl]
[GOAL]
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ι → ProbabilityMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
F : Set Ω
F_closed : IsClosed F
⊢ limsup (fun i => ↑↑↑(μs i) F) L ≤ ↑↑↑μ F
[PROOFSTEP]
apply
  FiniteMeasure.limsup_measure_closed_le_of_tendsto
    ((ProbabilityMeasure.tendsto_nhds_iff_toFiniteMeasure_tendsto_nhds L).mp μs_lim) F_closed
[GOAL]
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ι → ProbabilityMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
E : Set Ω
E_nullbdry : (fun s => ENNReal.toNNReal (↑↑↑μ s)) (frontier E) = 0
⊢ Tendsto (fun i => (fun s => ENNReal.toNNReal (↑↑↑(μs i) s)) E) L (𝓝 ((fun s => ENNReal.toNNReal (↑↑↑μ s)) E))
[PROOFSTEP]
have E_nullbdry' : (μ : Measure Ω) (frontier E) = 0 := by
  rw [← ProbabilityMeasure.ennreal_coeFn_eq_coeFn_toMeasure, E_nullbdry, ENNReal.coe_zero]
[GOAL]
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ι → ProbabilityMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
E : Set Ω
E_nullbdry : (fun s => ENNReal.toNNReal (↑↑↑μ s)) (frontier E) = 0
⊢ ↑↑↑μ (frontier E) = 0
[PROOFSTEP]
rw [← ProbabilityMeasure.ennreal_coeFn_eq_coeFn_toMeasure, E_nullbdry, ENNReal.coe_zero]
[GOAL]
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ι → ProbabilityMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
E : Set Ω
E_nullbdry : (fun s => ENNReal.toNNReal (↑↑↑μ s)) (frontier E) = 0
E_nullbdry' : ↑↑↑μ (frontier E) = 0
⊢ Tendsto (fun i => (fun s => ENNReal.toNNReal (↑↑↑(μs i) s)) E) L (𝓝 ((fun s => ENNReal.toNNReal (↑↑↑μ s)) E))
[PROOFSTEP]
have key := ProbabilityMeasure.tendsto_measure_of_null_frontier_of_tendsto' μs_lim E_nullbdry'
[GOAL]
Ω✝ : Type u_1
inst✝³ : MeasurableSpace Ω✝
Ω : Type u_2
ι : Type u_3
L : Filter ι
inst✝² : MeasurableSpace Ω
inst✝¹ : PseudoEMetricSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ι → ProbabilityMeasure Ω
μs_lim : Tendsto μs L (𝓝 μ)
E : Set Ω
E_nullbdry : (fun s => ENNReal.toNNReal (↑↑↑μ s)) (frontier E) = 0
E_nullbdry' : ↑↑↑μ (frontier E) = 0
key : Tendsto (fun i => ↑↑↑(μs i) E) L (𝓝 (↑↑↑μ E))
⊢ Tendsto (fun i => (fun s => ENNReal.toNNReal (↑↑↑(μs i) s)) E) L (𝓝 ((fun s => ENNReal.toNNReal (↑↑↑μ s)) E))
[PROOFSTEP]
exact (ENNReal.tendsto_toNNReal (measure_ne_top (↑μ) E)).comp key
[GOAL]
Ω : Type u_1
inst✝³ : PseudoEMetricSpace Ω
inst✝² : MeasurableSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : SigmaFinite μ
s : Set Ω
a b : ℝ
hab : a < b
⊢ ∃ r, r ∈ Ioo a b ∧ ↑↑μ (frontier (Metric.thickening r s)) = 0
[PROOFSTEP]
have mbles : ∀ r : ℝ, MeasurableSet (frontier (Metric.thickening r s)) := fun r => isClosed_frontier.measurableSet
[GOAL]
Ω : Type u_1
inst✝³ : PseudoEMetricSpace Ω
inst✝² : MeasurableSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : SigmaFinite μ
s : Set Ω
a b : ℝ
hab : a < b
mbles : ∀ (r : ℝ), MeasurableSet (frontier (Metric.thickening r s))
⊢ ∃ r, r ∈ Ioo a b ∧ ↑↑μ (frontier (Metric.thickening r s)) = 0
[PROOFSTEP]
have disjs := Metric.frontier_thickening_disjoint s
[GOAL]
Ω : Type u_1
inst✝³ : PseudoEMetricSpace Ω
inst✝² : MeasurableSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : SigmaFinite μ
s : Set Ω
a b : ℝ
hab : a < b
mbles : ∀ (r : ℝ), MeasurableSet (frontier (Metric.thickening r s))
disjs : Pairwise (Disjoint on fun r => frontier (Metric.thickening r s))
⊢ ∃ r, r ∈ Ioo a b ∧ ↑↑μ (frontier (Metric.thickening r s)) = 0
[PROOFSTEP]
have key := @Measure.countable_meas_pos_of_disjoint_iUnion Ω _ _ μ _ _ mbles disjs
[GOAL]
Ω : Type u_1
inst✝³ : PseudoEMetricSpace Ω
inst✝² : MeasurableSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : SigmaFinite μ
s : Set Ω
a b : ℝ
hab : a < b
mbles : ∀ (r : ℝ), MeasurableSet (frontier (Metric.thickening r s))
disjs : Pairwise (Disjoint on fun r => frontier (Metric.thickening r s))
key : Set.Countable {i | 0 < ↑↑μ (frontier (Metric.thickening i s))}
⊢ ∃ r, r ∈ Ioo a b ∧ ↑↑μ (frontier (Metric.thickening r s)) = 0
[PROOFSTEP]
have aux := @measure_diff_null ℝ _ volume (Ioo a b) _ (Set.Countable.measure_zero key volume)
[GOAL]
Ω : Type u_1
inst✝³ : PseudoEMetricSpace Ω
inst✝² : MeasurableSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : SigmaFinite μ
s : Set Ω
a b : ℝ
hab : a < b
mbles : ∀ (r : ℝ), MeasurableSet (frontier (Metric.thickening r s))
disjs : Pairwise (Disjoint on fun r => frontier (Metric.thickening r s))
key : Set.Countable {i | 0 < ↑↑μ (frontier (Metric.thickening i s))}
aux : ↑↑volume (Ioo a b \ {i | 0 < ↑↑μ (frontier (Metric.thickening i s))}) = ↑↑volume (Ioo a b)
⊢ ∃ r, r ∈ Ioo a b ∧ ↑↑μ (frontier (Metric.thickening r s)) = 0
[PROOFSTEP]
have len_pos : 0 < ENNReal.ofReal (b - a) := by simp only [hab, ENNReal.ofReal_pos, sub_pos]
[GOAL]
Ω : Type u_1
inst✝³ : PseudoEMetricSpace Ω
inst✝² : MeasurableSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : SigmaFinite μ
s : Set Ω
a b : ℝ
hab : a < b
mbles : ∀ (r : ℝ), MeasurableSet (frontier (Metric.thickening r s))
disjs : Pairwise (Disjoint on fun r => frontier (Metric.thickening r s))
key : Set.Countable {i | 0 < ↑↑μ (frontier (Metric.thickening i s))}
aux : ↑↑volume (Ioo a b \ {i | 0 < ↑↑μ (frontier (Metric.thickening i s))}) = ↑↑volume (Ioo a b)
⊢ 0 < ENNReal.ofReal (b - a)
[PROOFSTEP]
simp only [hab, ENNReal.ofReal_pos, sub_pos]
[GOAL]
Ω : Type u_1
inst✝³ : PseudoEMetricSpace Ω
inst✝² : MeasurableSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : SigmaFinite μ
s : Set Ω
a b : ℝ
hab : a < b
mbles : ∀ (r : ℝ), MeasurableSet (frontier (Metric.thickening r s))
disjs : Pairwise (Disjoint on fun r => frontier (Metric.thickening r s))
key : Set.Countable {i | 0 < ↑↑μ (frontier (Metric.thickening i s))}
aux : ↑↑volume (Ioo a b \ {i | 0 < ↑↑μ (frontier (Metric.thickening i s))}) = ↑↑volume (Ioo a b)
len_pos : 0 < ENNReal.ofReal (b - a)
⊢ ∃ r, r ∈ Ioo a b ∧ ↑↑μ (frontier (Metric.thickening r s)) = 0
[PROOFSTEP]
rw [← Real.volume_Ioo, ← aux] at len_pos 
[GOAL]
Ω : Type u_1
inst✝³ : PseudoEMetricSpace Ω
inst✝² : MeasurableSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : SigmaFinite μ
s : Set Ω
a b : ℝ
hab : a < b
mbles : ∀ (r : ℝ), MeasurableSet (frontier (Metric.thickening r s))
disjs : Pairwise (Disjoint on fun r => frontier (Metric.thickening r s))
key : Set.Countable {i | 0 < ↑↑μ (frontier (Metric.thickening i s))}
aux : ↑↑volume (Ioo a b \ {i | 0 < ↑↑μ (frontier (Metric.thickening i s))}) = ↑↑volume (Ioo a b)
len_pos : 0 < ↑↑volume (Ioo a b \ {i | 0 < ↑↑μ (frontier (Metric.thickening i s))})
⊢ ∃ r, r ∈ Ioo a b ∧ ↑↑μ (frontier (Metric.thickening r s)) = 0
[PROOFSTEP]
rcases nonempty_of_measure_ne_zero len_pos.ne.symm with ⟨r, ⟨r_in_Ioo, hr⟩⟩
[GOAL]
case intro.intro
Ω : Type u_1
inst✝³ : PseudoEMetricSpace Ω
inst✝² : MeasurableSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : SigmaFinite μ
s : Set Ω
a b : ℝ
hab : a < b
mbles : ∀ (r : ℝ), MeasurableSet (frontier (Metric.thickening r s))
disjs : Pairwise (Disjoint on fun r => frontier (Metric.thickening r s))
key : Set.Countable {i | 0 < ↑↑μ (frontier (Metric.thickening i s))}
aux : ↑↑volume (Ioo a b \ {i | 0 < ↑↑μ (frontier (Metric.thickening i s))}) = ↑↑volume (Ioo a b)
len_pos : 0 < ↑↑volume (Ioo a b \ {i | 0 < ↑↑μ (frontier (Metric.thickening i s))})
r : ℝ
r_in_Ioo : r ∈ Ioo a b
hr : ¬r ∈ {i | 0 < ↑↑μ (frontier (Metric.thickening i s))}
⊢ ∃ r, r ∈ Ioo a b ∧ ↑↑μ (frontier (Metric.thickening r s)) = 0
[PROOFSTEP]
refine' ⟨r, r_in_Ioo, _⟩
[GOAL]
case intro.intro
Ω : Type u_1
inst✝³ : PseudoEMetricSpace Ω
inst✝² : MeasurableSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : SigmaFinite μ
s : Set Ω
a b : ℝ
hab : a < b
mbles : ∀ (r : ℝ), MeasurableSet (frontier (Metric.thickening r s))
disjs : Pairwise (Disjoint on fun r => frontier (Metric.thickening r s))
key : Set.Countable {i | 0 < ↑↑μ (frontier (Metric.thickening i s))}
aux : ↑↑volume (Ioo a b \ {i | 0 < ↑↑μ (frontier (Metric.thickening i s))}) = ↑↑volume (Ioo a b)
len_pos : 0 < ↑↑volume (Ioo a b \ {i | 0 < ↑↑μ (frontier (Metric.thickening i s))})
r : ℝ
r_in_Ioo : r ∈ Ioo a b
hr : ¬r ∈ {i | 0 < ↑↑μ (frontier (Metric.thickening i s))}
⊢ ↑↑μ (frontier (Metric.thickening r s)) = 0
[PROOFSTEP]
simpa only [mem_setOf_eq, not_lt, le_zero_iff] using hr
[GOAL]
Ω : Type u_1
inst✝³ : PseudoEMetricSpace Ω
inst✝² : MeasurableSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : SigmaFinite μ
s : Set Ω
⊢ ∃ rs, Tendsto rs atTop (𝓝 0) ∧ ∀ (n : ℕ), 0 < rs n ∧ ↑↑μ (frontier (Metric.thickening (rs n) s)) = 0
[PROOFSTEP]
rcases exists_seq_strictAnti_tendsto (0 : ℝ) with ⟨Rs, ⟨_, ⟨Rs_pos, Rs_lim⟩⟩⟩
[GOAL]
case intro.intro.intro
Ω : Type u_1
inst✝³ : PseudoEMetricSpace Ω
inst✝² : MeasurableSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : SigmaFinite μ
s : Set Ω
Rs : ℕ → ℝ
left✝ : StrictAnti Rs
Rs_pos : ∀ (n : ℕ), 0 < Rs n
Rs_lim : Tendsto Rs atTop (𝓝 0)
⊢ ∃ rs, Tendsto rs atTop (𝓝 0) ∧ ∀ (n : ℕ), 0 < rs n ∧ ↑↑μ (frontier (Metric.thickening (rs n) s)) = 0
[PROOFSTEP]
have obs := fun n : ℕ => exists_null_frontier_thickening μ s (Rs_pos n)
[GOAL]
case intro.intro.intro
Ω : Type u_1
inst✝³ : PseudoEMetricSpace Ω
inst✝² : MeasurableSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : SigmaFinite μ
s : Set Ω
Rs : ℕ → ℝ
left✝ : StrictAnti Rs
Rs_pos : ∀ (n : ℕ), 0 < Rs n
Rs_lim : Tendsto Rs atTop (𝓝 0)
obs : ∀ (n : ℕ), ∃ r, r ∈ Ioo 0 (Rs n) ∧ ↑↑μ (frontier (Metric.thickening r s)) = 0
⊢ ∃ rs, Tendsto rs atTop (𝓝 0) ∧ ∀ (n : ℕ), 0 < rs n ∧ ↑↑μ (frontier (Metric.thickening (rs n) s)) = 0
[PROOFSTEP]
refine' ⟨fun n : ℕ => (obs n).choose, ⟨_, _⟩⟩
[GOAL]
case intro.intro.intro.refine'_1
Ω : Type u_1
inst✝³ : PseudoEMetricSpace Ω
inst✝² : MeasurableSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : SigmaFinite μ
s : Set Ω
Rs : ℕ → ℝ
left✝ : StrictAnti Rs
Rs_pos : ∀ (n : ℕ), 0 < Rs n
Rs_lim : Tendsto Rs atTop (𝓝 0)
obs : ∀ (n : ℕ), ∃ r, r ∈ Ioo 0 (Rs n) ∧ ↑↑μ (frontier (Metric.thickening r s)) = 0
⊢ Tendsto (fun n => Exists.choose (_ : ∃ r, r ∈ Ioo 0 (Rs n) ∧ ↑↑μ (frontier (Metric.thickening r s)) = 0)) atTop (𝓝 0)
[PROOFSTEP]
exact
  tendsto_of_tendsto_of_tendsto_of_le_of_le tendsto_const_nhds Rs_lim (fun n => (obs n).choose_spec.1.1.le) fun n =>
    (obs n).choose_spec.1.2.le
[GOAL]
case intro.intro.intro.refine'_2
Ω : Type u_1
inst✝³ : PseudoEMetricSpace Ω
inst✝² : MeasurableSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : SigmaFinite μ
s : Set Ω
Rs : ℕ → ℝ
left✝ : StrictAnti Rs
Rs_pos : ∀ (n : ℕ), 0 < Rs n
Rs_lim : Tendsto Rs atTop (𝓝 0)
obs : ∀ (n : ℕ), ∃ r, r ∈ Ioo 0 (Rs n) ∧ ↑↑μ (frontier (Metric.thickening r s)) = 0
⊢ ∀ (n : ℕ),
    0 < (fun n => Exists.choose (_ : ∃ r, r ∈ Ioo 0 (Rs n) ∧ ↑↑μ (frontier (Metric.thickening r s)) = 0)) n ∧
      ↑↑μ
          (frontier
            (Metric.thickening
              ((fun n => Exists.choose (_ : ∃ r, r ∈ Ioo 0 (Rs n) ∧ ↑↑μ (frontier (Metric.thickening r s)) = 0)) n)
              s)) =
        0
[PROOFSTEP]
exact fun n => ⟨(obs n).choose_spec.1.1, (obs n).choose_spec.2⟩
