-- Mathlib/MeasureTheory/Measure/Portmanteau.lean
theorem tendsto_of_forall_isOpen_le_liminf {μ : ProbabilityMeasure Ω}
    {μs : ℕ → ProbabilityMeasure Ω}
    (h_opens : ∀ G, IsOpen G → μ G ≤ atTop.liminf (fun i ↦ μs i G)) :
    atTop.Tendsto (fun i ↦ μs i) (𝓝 μ)

Proof state:
case h
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
h_opens : ∀ (G : Set Ω), IsOpen G → μ G ≤ liminf (fun i => (μs i) G) atTop
f : Ω →ᵇ ℝ
f_nn : 0 ≤ f
⊢ ∀ (G : Set Ω), IsOpen G → ↑μ G ≤ liminf (fun i => ↑(μs i) G) atTop

Tactic:
intro G G_open

Result:
case h
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
h_opens : ∀ (G : Set Ω), IsOpen G → μ G ≤ liminf (fun i => (μs i) G) atTop
f : Ω →ᵇ ℝ
f_nn : 0 ≤ f
G : Set Ω
G_open : IsOpen G
⊢ ↑μ G ≤ liminf (fun i => ↑(μs i) G) atTop

Proof state:
case h
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
h_opens : ∀ (G : Set Ω), IsOpen G → μ G ≤ liminf (fun i => (μs i) G) atTop
⊢ ∀ (f : Ω →ᵇ ℝ), 0 ≤ f → ∫ (x : Ω), f x ∂↑μ ≤ liminf (fun i => ∫ (x : Ω), f x ∂↑(μs i)) atTop

Tactic:
intro f f_nn

Result:
case h
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
h_opens : ∀ (G : Set Ω), IsOpen G → μ G ≤ liminf (fun i => (μs i) G) atTop
f : Ω →ᵇ ℝ
f_nn : 0 ≤ f
⊢ ∫ (x : Ω), f x ∂↑μ ≤ liminf (fun i => ∫ (x : Ω), f x ∂↑(μs i)) atTop

Proof state:
case h
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
f : Ω →ᵇ ℝ
f_nn : 0 ≤ f
G : Set Ω
G_open : IsOpen G
h_opens : μ G ≤ liminf (fun i => (μs i) G) atTop
aux : ↑(liminf (fun i => (μs i) G) atTop) = liminf (ENNReal.ofNNReal ∘ fun i => (μs i) G) atTop
obs : ↑μ G ≤ liminf (ENNReal.ofNNReal ∘ fun i => (μs i) G) atTop
⊢ ↑μ G ≤ liminf (fun i => ↑(μs i) G) atTop

Tactic:
convert obs

Result:
case h.e'_4.h.e'_4.h
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
f : Ω →ᵇ ℝ
f_nn : 0 ≤ f
G : Set Ω
G_open : IsOpen G
h_opens : μ G ≤ liminf (fun i => (μs i) G) atTop
aux : ↑(liminf (fun i => (μs i) G) atTop) = liminf (ENNReal.ofNNReal ∘ fun i => (μs i) G) atTop
obs : ↑μ G ≤ liminf (ENNReal.ofNNReal ∘ fun i => (μs i) G) atTop
x✝ : ℕ
⊢ ↑(μs x✝) G = (ENNReal.ofNNReal ∘ fun i => (μs i) G) x✝

Proof state:
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
h_opens : ∀ (G : Set Ω), IsOpen G → μ G ≤ liminf (fun i => (μs i) G) atTop
⊢ Tendsto (fun i => μs i) atTop (𝓝 μ)

Tactic:
refine ProbabilityMeasure.tendsto_iff_forall_integral_tendsto.mpr ?_

Result:
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
h_opens : ∀ (G : Set Ω), IsOpen G → μ G ≤ liminf (fun i => (μs i) G) atTop
⊢ ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (ω : Ω), f ω ∂↑(μs i)) atTop (𝓝 (∫ (ω : Ω), f ω ∂↑μ))

Proof state:
case h
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
h_opens : ∀ (G : Set Ω), IsOpen G → μ G ≤ liminf (fun i => (μs i) G) atTop
f : Ω →ᵇ ℝ
f_nn : 0 ≤ f
G : Set Ω
G_open : IsOpen G
⊢ ↑μ G ≤ liminf (fun i => ↑(μs i) G) atTop

Tactic:
specialize h_opens G G_open

Result:
case h
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
f : Ω →ᵇ ℝ
f_nn : 0 ≤ f
G : Set Ω
G_open : IsOpen G
h_opens : μ G ≤ liminf (fun i => (μs i) G) atTop
⊢ ↑μ G ≤ liminf (fun i => ↑(μs i) G) atTop

Proof state:
case h
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
f : Ω →ᵇ ℝ
f_nn : 0 ≤ f
G : Set Ω
G_open : IsOpen G
h_opens : μ G ≤ liminf (fun i => (μs i) G) atTop
aux : ↑(liminf (fun i => (μs i) G) atTop) = liminf (ENNReal.ofNNReal ∘ fun i => (μs i) G) atTop
obs : ↑(μ G) ≤ ↑(liminf (fun i => (μs i) G) atTop)
⊢ ↑μ G ≤ liminf (fun i => ↑(μs i) G) atTop

Tactic:
simp only [ne_eq, ProbabilityMeasure.ennreal_coeFn_eq_coeFn_toMeasure, aux] at obs

Result:
case h
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
f : Ω →ᵇ ℝ
f_nn : 0 ≤ f
G : Set Ω
G_open : IsOpen G
h_opens : μ G ≤ liminf (fun i => (μs i) G) atTop
aux : ↑(liminf (fun i => (μs i) G) atTop) = liminf (ENNReal.ofNNReal ∘ fun i => (μs i) G) atTop
obs : ↑μ G ≤ liminf (ENNReal.ofNNReal ∘ fun i => (μs i) G) atTop
⊢ ↑μ G ≤ liminf (fun i => ↑(μs i) G) atTop

Proof state:
case refine_1
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
f : Ω →ᵇ ℝ
f_nn : 0 ≤ f
G : Set Ω
G_open : IsOpen G
h_opens : μ G ≤ liminf (fun i => (μs i) G) atTop
⊢ ContinuousAt ENNReal.ofNNReal (liminf (fun x => (μs x) G) atTop)

Tactic:
exact ENNReal.continuous_coe.continuousAt

Result:
no goals

Proof state:
case h
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
f : Ω →ᵇ ℝ
f_nn : 0 ≤ f
G : Set Ω
G_open : IsOpen G
h_opens : μ G ≤ liminf (fun i => (μs i) G) atTop
aux : ↑(liminf (fun i => (μs i) G) atTop) = liminf (ENNReal.ofNNReal ∘ fun i => (μs i) G) atTop
⊢ ↑μ G ≤ liminf (fun i => ↑(μs i) G) atTop

Tactic:
have obs := ENNReal.coe_mono h_opens

Result:
case h
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
f : Ω →ᵇ ℝ
f_nn : 0 ≤ f
G : Set Ω
G_open : IsOpen G
h_opens : μ G ≤ liminf (fun i => (μs i) G) atTop
aux : ↑(liminf (fun i => (μs i) G) atTop) = liminf (ENNReal.ofNNReal ∘ fun i => (μs i) G) atTop
obs : ↑(μ G) ≤ ↑(liminf (fun i => (μs i) G) atTop)
⊢ ↑μ G ≤ liminf (fun i => ↑(μs i) G) atTop

Proof state:
case h.e'_4.h.e'_4.h
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
f : Ω →ᵇ ℝ
f_nn : 0 ≤ f
G : Set Ω
G_open : IsOpen G
h_opens : μ G ≤ liminf (fun i => (μs i) G) atTop
aux : ↑(liminf (fun i => (μs i) G) atTop) = liminf (ENNReal.ofNNReal ∘ fun i => (μs i) G) atTop
obs : ↑μ G ≤ liminf (ENNReal.ofNNReal ∘ fun i => (μs i) G) atTop
x✝ : ℕ
⊢ ↑(μs x✝) G = (ENNReal.ofNNReal ∘ fun i => (μs i) G) x✝

Tactic:
simp only [Function.comp_apply, ne_eq, ProbabilityMeasure.ennreal_coeFn_eq_coeFn_toMeasure]

Result:
no goals

Proof state:
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
h_opens : ∀ (G : Set Ω), IsOpen G → μ G ≤ liminf (fun i => (μs i) G) atTop
⊢ ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (ω : Ω), f ω ∂↑(μs i)) atTop (𝓝 (∫ (ω : Ω), f ω ∂↑μ))

Tactic:
apply tendsto_integral_of_forall_integral_le_liminf_integral

Result:
case h
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : ProbabilityMeasure Ω
μs : ℕ → ProbabilityMeasure Ω
h_opens : ∀ (G : Set Ω), IsOpen G → μ G ≤ liminf (fun i => (μs i) G) atTop
⊢ ∀ (f : Ω →ᵇ ℝ), 0 ≤ f → ∫ (x : Ω), f x ∂↑μ ≤ liminf (fun i => ∫ (x : Ω), f x ∂↑(μs i)) atTop