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

tactic: apply le_antisymm
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Type u_5
inst✝¹ : CompleteLattice α
ι : Type u_6
R : Type u_7
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
⊢ limsup a F = sInf ((fun I => sSup (a '' I)) '' F.sets)
state_after: case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Type u_5
inst✝¹ : CompleteLattice α
ι : Type u_6
R : Type u_7
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
⊢ limsup a F ≤ sInf ((fun I => sSup (a '' I)) '' F.sets)

case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Type u_5
inst✝¹ : CompleteLattice α
ι : Type u_6
R : Type u_7
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
⊢ sInf ((fun I => sSup (a '' I)) '' F.sets) ≤ limsup a F

tactic: rw [limsup_eq]
state_before: case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Type u_5
inst✝¹ : CompleteLattice α
ι : Type u_6
R : Type u_7
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
⊢ limsup a F ≤ sInf ((fun I => sSup (a '' I)) '' F.sets)
state_after: case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Type u_5
inst✝¹ : CompleteLattice α
ι : Type u_6
R : Type u_7
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
⊢ sInf {a_1 | ∀ᶠ (n : ι) in F, a n ≤ a_1} ≤ sInf ((fun I => sSup (a '' I)) '' F.sets)

tactic: refine sInf_le_sInf fun x hx => ?_
state_before: case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Type u_5
inst✝¹ : CompleteLattice α
ι : Type u_6
R : Type u_7
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
⊢ sInf {a_1 | ∀ᶠ (n : ι) in F, a n ≤ a_1} ≤ sInf ((fun I => sSup (a '' I)) '' F.sets)
state_after: case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Type u_5
inst✝¹ : CompleteLattice α
ι : Type u_6
R : Type u_7
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
x : R
hx : x ∈ (fun I => sSup (a '' I)) '' F.sets
⊢ x ∈ {a_1 | ∀ᶠ (n : ι) in F, a n ≤ a_1}

tactic: rcases (mem_image _ F.sets x).mp hx with ⟨I, ⟨I_mem_F, hI⟩⟩
state_before: case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Type u_5
inst✝¹ : CompleteLattice α
ι : Type u_6
R : Type u_7
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
x : R
hx : x ∈ (fun I => sSup (a '' I)) '' F.sets
⊢ x ∈ {a_1 | ∀ᶠ (n : ι) in F, a n ≤ a_1}
state_after: case a.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Type u_5
inst✝¹ : CompleteLattice α
ι : Type u_6
R : Type u_7
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
x : R
hx : x ∈ (fun I => sSup (a '' I)) '' F.sets
I : Set ι
I_mem_F : I ∈ F.sets
hI : sSup (a '' I) = x
⊢ x ∈ {a_1 | ∀ᶠ (n : ι) in F, a n ≤ a_1}

tactic: filter_upwards [I_mem_F] with i hi
state_before: case a.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Type u_5
inst✝¹ : CompleteLattice α
ι : Type u_6
R : Type u_7
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
x : R
hx : x ∈ (fun I => sSup (a '' I)) '' F.sets
I : Set ι
I_mem_F : I ∈ F.sets
hI : sSup (a '' I) = x
⊢ x ∈ {a_1 | ∀ᶠ (n : ι) in F, a n ≤ a_1}
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Type u_5
inst✝¹ : CompleteLattice α
ι : Type u_6
R : Type u_7
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
x : R
hx : x ∈ (fun I => sSup (a '' I)) '' F.sets
I : Set ι
I_mem_F : I ∈ F.sets
hI : sSup (a '' I) = x
i : ι
hi : i ∈ I
⊢ a i ≤ x

tactic: exact hI ▸ le_sSup (mem_image_of_mem _ hi)
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Type u_5
inst✝¹ : CompleteLattice α
ι : Type u_6
R : Type u_7
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
x : R
hx : x ∈ (fun I => sSup (a '' I)) '' F.sets
I : Set ι
I_mem_F : I ∈ F.sets
hI : sSup (a '' I) = x
i : ι
hi : i ∈ I
⊢ a i ≤ x
state_after: no goals

tactic: refine le_sInf fun b hb => sInf_le_of_le (mem_image_of_mem _ hb) <| sSup_le ?_
state_before: case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Type u_5
inst✝¹ : CompleteLattice α
ι : Type u_6
R : Type u_7
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
⊢ sInf ((fun I => sSup (a '' I)) '' F.sets) ≤ limsup a F
state_after: case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Type u_5
inst✝¹ : CompleteLattice α
ι : Type u_6
R : Type u_7
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
b : R
hb : b ∈ {a_1 | ∀ᶠ (n : R) in map a F, n ≤ a_1}
⊢ ∀ b_1 ∈ a '' (a ⁻¹' {x | (fun n => n ≤ b) x}), b_1 ≤ b

tactic: rintro _ ⟨_, h, rfl⟩
state_before: case a
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Type u_5
inst✝¹ : CompleteLattice α
ι : Type u_6
R : Type u_7
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
b : R
hb : b ∈ {a_1 | ∀ᶠ (n : R) in map a F, n ≤ a_1}
⊢ ∀ b_1 ∈ a '' (a ⁻¹' {x | (fun n => n ≤ b) x}), b_1 ≤ b
state_after: case a.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Type u_5
inst✝¹ : CompleteLattice α
ι : Type u_6
R : Type u_7
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
b : R
hb : b ∈ {a_1 | ∀ᶠ (n : R) in map a F, n ≤ a_1}
w✝ : ι
h : w✝ ∈ a ⁻¹' {x | (fun n => n ≤ b) x}
⊢ a w✝ ≤ b

tactic: exact h
state_before: case a.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι✝ : Type u_4
ι' : Type u_5
inst✝¹ : CompleteLattice α
ι : Type u_6
R : Type u_7
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
b : R
hb : b ∈ {a_1 | ∀ᶠ (n : R) in map a F, n ≤ a_1}
w✝ : ι
h : w✝ ∈ a ⁻¹' {x | (fun n => n ≤ b) x}
⊢ a w✝ ≤ b
state_after: no goals