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

tactic: refine' le_antisymm _ _
state_before: α : Type ?u.120102
β : Type ?u.120105
γ : Type ?u.120108
ι✝ : Type ?u.120111
inst✝¹ : CompleteLattice α
ι : Type u_1
R : Type u_2
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
⊢ limsup a F = sInf ((fun I => sSup (a '' I)) '' F.sets)

tactic: rw [limsup_eq]
state_before: case refine'_1
α : Type ?u.120102
β : Type ?u.120105
γ : Type ?u.120108
ι✝ : Type ?u.120111
inst✝¹ : CompleteLattice α
ι : Type u_1
R : Type u_2
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
⊢ limsup a F ≤ sInf ((fun I => sSup (a '' I)) '' F.sets)

tactic: refine' sInf_le_sInf fun x hx => _
state_before: case refine'_1
α : Type ?u.120102
β : Type ?u.120105
γ : Type ?u.120108
ι✝ : Type ?u.120111
inst✝¹ : CompleteLattice α
ι : Type u_1
R : Type u_2
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: rcases(mem_image _ F.sets x).mp hx with ⟨I, ⟨I_mem_F, hI⟩⟩
state_before: case refine'_1
α : Type ?u.120102
β : Type ?u.120105
γ : Type ?u.120108
ι✝ : Type ?u.120111
inst✝¹ : CompleteLattice α
ι : Type u_1
R : Type u_2
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: filter_upwards [I_mem_F]with i hi
state_before: case refine'_1.intro.intro
α : Type ?u.120102
β : Type ?u.120105
γ : Type ?u.120108
ι✝ : Type ?u.120111
inst✝¹ : CompleteLattice α
ι : Type u_1
R : Type u_2
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: exact hI ▸ le_sSup (mem_image_of_mem _ hi)
state_before: case h
α : Type ?u.120102
β : Type ?u.120105
γ : Type ?u.120108
ι✝ : Type ?u.120111
inst✝¹ : CompleteLattice α
ι : Type u_1
R : Type u_2
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: refine'
  le_sInf_iff.mpr fun b hb =>
    sInf_le_of_le (mem_image_of_mem _ <| Filter.mem_sets.mpr hb) <| sSup_le _
state_before: case refine'_2
α : Type ?u.120102
β : Type ?u.120105
γ : Type ?u.120108
ι✝ : Type ?u.120111
inst✝¹ : CompleteLattice α
ι : Type u_1
R : Type u_2
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
⊢ sInf ((fun I => sSup (a '' I)) '' F.sets) ≤ limsup a F

tactic: rintro _ ⟨_, h, rfl⟩
state_before: case refine'_2
α : Type ?u.120102
β : Type ?u.120105
γ : Type ?u.120108
ι✝ : Type ?u.120111
inst✝¹ : CompleteLattice α
ι : Type u_1
R : Type u_2
F : Filter ι
inst✝ : CompleteLattice R
a : ι → R
b : R
hb : b ∈ {a_1 | ∀ᶠ (n : R) in map a F, n ≤ a_1}
⊢ ∀ (b_1 : R), b_1 ∈ a '' (a ⁻¹' {x | (fun n => n ≤ b) x}) → b_1 ≤ b

tactic: exact h
state_before: case refine'_2.intro.intro
α : Type ?u.120102
β : Type ?u.120105
γ : Type ?u.120108
ι✝ : Type ?u.120111
inst✝¹ : CompleteLattice α
ι : Type u_1
R : Type u_2
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