Theorem: EReal.add_liminf_le_liminf_add
File: Mathlib/Topology/Instances/EReal.lean

Proof steps:
state_before: α✝ : Type u_1
inst✝ : TopologicalSpace α✝
α : Type u_2
f : Filter α
u v : α → EReal
a b : EReal
⊢ liminf u f + liminf v f ≤ liminf (u + v) f
state_after: case pos
α✝ : Type u_1
inst✝ : TopologicalSpace α✝
α : Type u_2
f : Filter α
u v : α → EReal
a b : EReal
hu : liminf u f = ⊥
⊢ liminf u f + liminf v f ≤ liminf (u + v) f

case neg
α✝ : Type u_1
inst✝ : TopologicalSpace α✝
α : Type u_2
f : Filter α
u v : α → EReal
a b : EReal
hu : ¬liminf u f = ⊥
⊢ liminf u f + liminf v f ≤ liminf (u + v) f
tactic: by_cases hu : liminf u f = ⊥
state_before: case neg
α✝ : Type u_1
inst✝ : TopologicalSpace α✝
α : Type u_2
f : Filter α
u v : α → EReal
a b : EReal
hu : ¬liminf u f = ⊥
⊢ liminf u f + liminf v f ≤ liminf (u + v) f
state_after: case pos
α✝ : Type u_1
inst✝ : TopologicalSpace α✝
α : Type u_2
f : Filter α
u v : α → EReal
a b : EReal
hu : ¬liminf u f = ⊥
hv : liminf v f = ⊥
⊢ liminf u f + liminf v f ≤ liminf (u + v) f

case neg
α✝ : Type u_1
inst✝ : TopologicalSpace α✝
α : Type u_2
f : Filter α
u v : α → EReal
a b : EReal
hu : ¬liminf u f = ⊥
hv : ¬liminf v f = ⊥
⊢ liminf u f + liminf v f ≤ liminf (u + v) f
tactic: by_cases hv : liminf v f = ⊥
state_before: case neg
α✝ : Type u_1
inst✝ : TopologicalSpace α✝
α : Type u_2
f : Filter α
u v : α → EReal
a b : EReal
hu : ¬liminf u f = ⊥
hv : ¬liminf v f = ⊥
⊢ liminf u f + liminf v f ≤ liminf (u + v) f
state_after: case neg
α✝ : Type u_1
inst✝ : TopologicalSpace α✝
α : Type u_2
f : Filter α
u v : α → EReal
a b : EReal
hu : ¬liminf u f = ⊥
hv : ¬liminf v f = ⊥
h' : limsup (-(u + v)) f = limsup (-u + -v) f
⊢ liminf u f + liminf v f ≤ liminf (u + v) f
tactic: have h' : limsup (-(u + v)) f = limsup (-u + -v) f := by
    apply limsup_congr
    filter_upwards [eventually_lt_of_lt_liminf (bot_lt_iff_ne_bot.mpr hu),
      eventually_lt_of_lt_liminf (bot_lt_iff_ne_bot.mpr hv)] with x hux hvx
    dsimp
    rw [neg_add (Or.inl hux.ne_bot) (Or.inr hvx.ne_bot), sub_eq_add_neg]
state_before: case neg
α✝ : Type u_1
inst✝ : TopologicalSpace α✝
α : Type u_2
f : Filter α
u v : α → EReal
a b : EReal
hu : ¬liminf u f = ⊥
hv : ¬liminf v f = ⊥
h' : limsup (-(u + v)) f = limsup (-u + -v) f
⊢ liminf u f + liminf v f ≤ liminf (u + v) f
state_after: case neg
α✝ : Type u_1
inst✝ : TopologicalSpace α✝
α : Type u_2
f : Filter α
u v : α → EReal
a b : EReal
hu : ¬liminf u f = ⊥
hv : ¬liminf v f = ⊥
h' : limsup (-(u + v)) f = limsup (-u + -v) f
⊢ -liminf (u + v) f ≤ -liminf u f + -liminf v f
tactic: rw [← neg_le_neg_iff, neg_add (Or.inl hu) (Or.inr hv), sub_eq_add_neg]
state_before: case neg
α✝ : Type u_1
inst✝ : TopologicalSpace α✝
α : Type u_2
f : Filter α
u v : α → EReal
a b : EReal
hu : ¬liminf u f = ⊥
hv : ¬liminf v f = ⊥
h' : limsup (-(u + v)) f = limsup (-u + -v) f
⊢ -liminf (u + v) f ≤ -liminf u f + -liminf v f
state_after: case neg
α✝ : Type u_1
inst✝ : TopologicalSpace α✝
α : Type u_2
f : Filter α
u v : α → EReal
a b : EReal
hu : ¬-liminf u f = ⊤
hv : ¬-liminf v f = ⊤
h' : limsup (-(u + v)) f = limsup (-u + -v) f
⊢ -liminf (u + v) f ≤ -liminf u f + -liminf v f
tactic: rw [← neg_inj, neg_bot] at hu hv
state_before: case neg
α✝ : Type u_1
inst✝ : TopologicalSpace α✝
α : Type u_2
f : Filter α
u v : α → EReal
a b : EReal
hu : ¬-liminf u f = ⊤
hv : ¬-liminf v f = ⊤
h' : limsup (-(u + v)) f = limsup (-u + -v) f
⊢ -liminf (u + v) f ≤ -liminf u f + -liminf v f
state_after: case neg
α✝ : Type u_1
inst✝ : TopologicalSpace α✝
α : Type u_2
f : Filter α
u v : α → EReal
a b : EReal
h' : limsup (-(u + v)) f = limsup (-u + -v) f
hu : ¬limsup (-u) f = ⊤
hv : ¬limsup (-v) f = ⊤
⊢ limsup (-(u + v)) f ≤ limsup (-u) f + limsup (-v) f
tactic: simp_rw [← limsup_neg] at hu hv ⊢
state_before: case neg
α✝ : Type u_1
inst✝ : TopologicalSpace α✝
α : Type u_2
f : Filter α
u v : α → EReal
a b : EReal
h' : limsup (-(u + v)) f = limsup (-u + -v) f
hu : ¬limsup (-u) f = ⊤
hv : ¬limsup (-v) f = ⊤
⊢ limsup (-(u + v)) f ≤ limsup (-u) f + limsup (-v) f
state_after: no goals
tactic: exact h' ▸ limsup_add_le_add_limsup (Or.inr hv) (Or.inl hu)