Theorem: limsup_finset_sup
File: Mathlib/Order/LiminfLimsup.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLinearOrder β
inst✝ : OrderBot β
f : Filter α
F : ι → α → β
s : Finset ι
h₁ : autoParam (∀ i ∈ s, IsCoboundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h₂ : autoParam (∀ i ∈ s, IsBoundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
⊢ limsup (fun a => s.sup fun i => F i a) f = s.sup fun i => limsup (F i) f
state_after: case inl
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLinearOrder β
inst✝ : OrderBot β
F : ι → α → β
s : Finset ι
h₁ : autoParam (∀ i ∈ s, IsCoboundedUnder (fun x x_1 => x ≤ x_1) ⊥ (F i)) _auto✝
h₂ : autoParam (∀ i ∈ s, IsBoundedUnder (fun x x_1 => x ≤ x_1) ⊥ (F i)) _auto✝
⊢ limsup (fun a => s.sup fun i => F i a) ⊥ = s.sup fun i => limsup (F i) ⊥

case inr
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLinearOrder β
inst✝ : OrderBot β
f : Filter α
F : ι → α → β
s : Finset ι
h₁ : autoParam (∀ i ∈ s, IsCoboundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h₂ : autoParam (∀ i ∈ s, IsBoundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h✝ : f.NeBot
⊢ limsup (fun a => s.sup fun i => F i a) f = s.sup fun i => limsup (F i) f
tactic: rcases eq_or_neBot f with (rfl | _)
state_before: case inr
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLinearOrder β
inst✝ : OrderBot β
f : Filter α
F : ι → α → β
s : Finset ι
h₁ : autoParam (∀ i ∈ s, IsCoboundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h₂ : autoParam (∀ i ∈ s, IsBoundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h✝ : f.NeBot
⊢ limsup (fun a => s.sup fun i => F i a) f = s.sup fun i => limsup (F i) f
state_after: case inr.inl
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLinearOrder β
inst✝ : OrderBot β
f : Filter α
F : ι → α → β
h✝ : f.NeBot
h₁ : autoParam (∀ i ∈ ∅, IsCoboundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h₂ : autoParam (∀ i ∈ ∅, IsBoundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
⊢ limsup (fun a => ∅.sup fun i => F i a) f = ∅.sup fun i => limsup (F i) f

case inr.inr
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLinearOrder β
inst✝ : OrderBot β
f : Filter α
F : ι → α → β
s : Finset ι
h₁ : autoParam (∀ i ∈ s, IsCoboundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h₂ : autoParam (∀ i ∈ s, IsBoundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h✝ : f.NeBot
s_nemp : s.Nonempty
⊢ limsup (fun a => s.sup fun i => F i a) f = s.sup fun i => limsup (F i) f
tactic: rcases Finset.eq_empty_or_nonempty s with (rfl | s_nemp)
state_before: case inr.inr
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLinearOrder β
inst✝ : OrderBot β
f : Filter α
F : ι → α → β
s : Finset ι
h₁ : autoParam (∀ i ∈ s, IsCoboundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h₂ : autoParam (∀ i ∈ s, IsBoundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h✝ : f.NeBot
s_nemp : s.Nonempty
⊢ limsup (fun a => s.sup fun i => F i a) f = s.sup fun i => limsup (F i) f
state_after: case inr.inr
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLinearOrder β
inst✝ : OrderBot β
f : Filter α
F : ι → α → β
s : Finset ι
h₁ : autoParam (∀ i ∈ s, IsCoboundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h₂ : autoParam (∀ i ∈ s, IsBoundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h✝ : f.NeBot
s_nemp : s.Nonempty
⊢ limsup (fun a => s.sup fun i => F i a) f = limsup (fun a => s.sup' s_nemp fun i => F i a) f
tactic: rw [← Finset.sup'_eq_sup s_nemp fun i ↦ limsup (F i) f, ← limsup_finset_sup' s_nemp h₁ h₂]
state_before: case inr.inr
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLinearOrder β
inst✝ : OrderBot β
f : Filter α
F : ι → α → β
s : Finset ι
h₁ : autoParam (∀ i ∈ s, IsCoboundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h₂ : autoParam (∀ i ∈ s, IsBoundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h✝ : f.NeBot
s_nemp : s.Nonempty
⊢ limsup (fun a => s.sup fun i => F i a) f = limsup (fun a => s.sup' s_nemp fun i => F i a) f
state_after: case inr.inr.e_u
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLinearOrder β
inst✝ : OrderBot β
f : Filter α
F : ι → α → β
s : Finset ι
h₁ : autoParam (∀ i ∈ s, IsCoboundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h₂ : autoParam (∀ i ∈ s, IsBoundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h✝ : f.NeBot
s_nemp : s.Nonempty
⊢ (fun a => s.sup fun i => F i a) = fun a => s.sup' s_nemp fun i => F i a
tactic: congr
state_before: case inr.inr.e_u
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLinearOrder β
inst✝ : OrderBot β
f : Filter α
F : ι → α → β
s : Finset ι
h₁ : autoParam (∀ i ∈ s, IsCoboundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h₂ : autoParam (∀ i ∈ s, IsBoundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h✝ : f.NeBot
s_nemp : s.Nonempty
⊢ (fun a => s.sup fun i => F i a) = fun a => s.sup' s_nemp fun i => F i a
state_after: case inr.inr.e_u.h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLinearOrder β
inst✝ : OrderBot β
f : Filter α
F : ι → α → β
s : Finset ι
h₁ : autoParam (∀ i ∈ s, IsCoboundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h₂ : autoParam (∀ i ∈ s, IsBoundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h✝ : f.NeBot
s_nemp : s.Nonempty
a : α
⊢ (s.sup fun i => F i a) = s.sup' s_nemp fun i => F i a
tactic: ext a
state_before: case inr.inr.e_u.h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝¹ : ConditionallyCompleteLinearOrder β
inst✝ : OrderBot β
f : Filter α
F : ι → α → β
s : Finset ι
h₁ : autoParam (∀ i ∈ s, IsCoboundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h₂ : autoParam (∀ i ∈ s, IsBoundedUnder (fun x x_1 => x ≤ x_1) f (F i)) _auto✝
h✝ : f.NeBot
s_nemp : s.Nonempty
a : α
⊢ (s.sup fun i => F i a) = s.sup' s_nemp fun i => F i a
state_after: no goals
tactic: exact Eq.symm (Finset.sup'_eq_sup s_nemp (fun i ↦ F i a))