Theorem: Filter.isBoundedUnder_sum
File: Mathlib/Order/LiminfLimsup.lean

Proof steps:
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
α : Type u_6
f : Filter α
inst✝² : f.NeBot
R : Type u_7
inst✝¹ : Preorder R
κ : Type u_8
inst✝ : AddCommMonoid R
r : R → R → Prop
hr : ∀ (v₁ v₂ : α → R), IsBoundedUnder r f v₁ → IsBoundedUnder r f v₂ → IsBoundedUnder r f (v₁ + v₂)
hr₀ : r 0 0
u : κ → α → R
s : Finset κ
h : ∀ k ∈ s, IsBoundedUnder r f (u k)
⊢ IsBoundedUnder r f (∑ k ∈ s, u k)
state_after: case empty
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
α : Type u_6
f : Filter α
inst✝² : f.NeBot
R : Type u_7
inst✝¹ : Preorder R
κ : Type u_8
inst✝ : AddCommMonoid R
r : R → R → Prop
hr : ∀ (v₁ v₂ : α → R), IsBoundedUnder r f v₁ → IsBoundedUnder r f v₂ → IsBoundedUnder r f (v₁ + v₂)
hr₀ : r 0 0
u : κ → α → R
h : ∀ k ∈ ∅, IsBoundedUnder r f (u k)
⊢ IsBoundedUnder r f (∑ k ∈ ∅, u k)

case cons
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
α : Type u_6
f : Filter α
inst✝² : f.NeBot
R : Type u_7
inst✝¹ : Preorder R
κ : Type u_8
inst✝ : AddCommMonoid R
r : R → R → Prop
hr : ∀ (v₁ v₂ : α → R), IsBoundedUnder r f v₁ → IsBoundedUnder r f v₂ → IsBoundedUnder r f (v₁ + v₂)
hr₀ : r 0 0
u : κ → α → R
a✝¹ : κ
s✝ : Finset κ
h✝ : a✝¹ ∉ s✝
a✝ : (∀ k ∈ s✝, IsBoundedUnder r f (u k)) → IsBoundedUnder r f (∑ k ∈ s✝, u k)
h : ∀ k ∈ Finset.cons a✝¹ s✝ h✝, IsBoundedUnder r f (u k)
⊢ IsBoundedUnder r f (∑ k ∈ Finset.cons a✝¹ s✝ h✝, u k)
tactic: induction s using Finset.cons_induction
state_before: case empty
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
α : Type u_6
f : Filter α
inst✝² : f.NeBot
R : Type u_7
inst✝¹ : Preorder R
κ : Type u_8
inst✝ : AddCommMonoid R
r : R → R → Prop
hr : ∀ (v₁ v₂ : α → R), IsBoundedUnder r f v₁ → IsBoundedUnder r f v₂ → IsBoundedUnder r f (v₁ + v₂)
hr₀ : r 0 0
u : κ → α → R
h : ∀ k ∈ ∅, IsBoundedUnder r f (u k)
⊢ IsBoundedUnder r f (∑ k ∈ ∅, u k)

case cons
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
α : Type u_6
f : Filter α
inst✝² : f.NeBot
R : Type u_7
inst✝¹ : Preorder R
κ : Type u_8
inst✝ : AddCommMonoid R
r : R → R → Prop
hr : ∀ (v₁ v₂ : α → R), IsBoundedUnder r f v₁ → IsBoundedUnder r f v₂ → IsBoundedUnder r f (v₁ + v₂)
hr₀ : r 0 0
u : κ → α → R
a✝¹ : κ
s✝ : Finset κ
h✝ : a✝¹ ∉ s✝
a✝ : (∀ k ∈ s✝, IsBoundedUnder r f (u k)) → IsBoundedUnder r f (∑ k ∈ s✝, u k)
h : ∀ k ∈ Finset.cons a✝¹ s✝ h✝, IsBoundedUnder r f (u k)
⊢ IsBoundedUnder r f (∑ k ∈ Finset.cons a✝¹ s✝ h✝, u k)
state_after: case cons
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
α : Type u_6
f : Filter α
inst✝² : f.NeBot
R : Type u_7
inst✝¹ : Preorder R
κ : Type u_8
inst✝ : AddCommMonoid R
r : R → R → Prop
hr : ∀ (v₁ v₂ : α → R), IsBoundedUnder r f v₁ → IsBoundedUnder r f v₂ → IsBoundedUnder r f (v₁ + v₂)
hr₀ : r 0 0
u : κ → α → R
a✝¹ : κ
s✝ : Finset κ
h✝ : a✝¹ ∉ s✝
a✝ : (∀ k ∈ s✝, IsBoundedUnder r f (u k)) → IsBoundedUnder r f (∑ k ∈ s✝, u k)
h : ∀ k ∈ Finset.cons a✝¹ s✝ h✝, IsBoundedUnder r f (u k)
⊢ IsBoundedUnder r f (∑ k ∈ Finset.cons a✝¹ s✝ h✝, u k)
tactic: case empty =>
    rw [Finset.sum_empty]
    exact ⟨0, by simp_all only [eventually_map, Pi.zero_apply, eventually_true]⟩
state_before: case cons
α✝ : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
α : Type u_6
f : Filter α
inst✝² : f.NeBot
R : Type u_7
inst✝¹ : Preorder R
κ : Type u_8
inst✝ : AddCommMonoid R
r : R → R → Prop
hr : ∀ (v₁ v₂ : α → R), IsBoundedUnder r f v₁ → IsBoundedUnder r f v₂ → IsBoundedUnder r f (v₁ + v₂)
hr₀ : r 0 0
u : κ → α → R
a✝¹ : κ
s✝ : Finset κ
h✝ : a✝¹ ∉ s✝
a✝ : (∀ k ∈ s✝, IsBoundedUnder r f (u k)) → IsBoundedUnder r f (∑ k ∈ s✝, u k)
h : ∀ k ∈ Finset.cons a✝¹ s✝ h✝, IsBoundedUnder r f (u k)
⊢ IsBoundedUnder r f (∑ k ∈ Finset.cons a✝¹ s✝ h✝, u k)
state_after: no goals
tactic: case cons k₀ s k₀_notin_s ih =>
    simp only [Finset.forall_mem_cons] at *
    simpa only [Finset.sum_cons] using hr _ _ h.1 (ih h.2)