-- Mathlib/Topology/Order/DenselyOrdered.lean
theorem comap_coe_nhdsLT_of_Ioo_subset (hb : s ⊆ Iio b) (hs : s.Nonempty → ∃ a < b, Ioo a b ⊆ s) :
    comap ((↑) : s → α) (𝓝[<] b) = atTop

Proof state:
case intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
b : α
s : Set α
hb : s ⊆ Iio b
hs✝ : s.Nonempty → ∃ a < b, Ioo a b ⊆ s
a✝ : Nontrivial (Filter { x // x ∈ s })
this : Nonempty ↑s
a : α
h : a < b
hs : Ioo a b ⊆ s
⊢ comap Subtype.val (𝓝[<] b) = atTop

Tactic:
ext u

Result:
case intro.intro.h
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
b : α
s : Set α
hb : s ⊆ Iio b
hs✝ : s.Nonempty → ∃ a < b, Ioo a b ⊆ s
a✝ : Nontrivial (Filter { x // x ∈ s })
this : Nonempty ↑s
a : α
h : a < b
hs : Ioo a b ⊆ s
u : Set { x // x ∈ s }
⊢ u ∈ comap Subtype.val (𝓝[<] b) ↔ u ∈ atTop

Proof state:
case intro.intro.h.mp.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
b : α
s : Set α
hb : s ⊆ Iio b
hs✝ : s.Nonempty → ∃ a < b, Ioo a b ⊆ s
a✝ : Nontrivial (Filter { x // x ∈ s })
this : Nonempty ↑s
a : α
h : a < b
hs : Ioo a b ⊆ s
u : Set { x // x ∈ s }
t : Set α
ht : t ∈ 𝓝[<] b
hts : Subtype.val ⁻¹' t ⊆ u
x : α
hxt : Ioo x b ⊆ t
hxa : a ≤ x
hxb : x < b
y : α
hxy : x < y
hyb : y < b
⊢ {b_1 | ⟨y, ⋯⟩ ≤ b_1} ⊆ u

Tactic:
rintro ⟨z, hzs⟩ (hyz : y ≤ z)

Result:
case intro.intro.h.mp.intro.intro.intro.intro.intro.intro.intro.mk
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
b : α
s : Set α
hb : s ⊆ Iio b
hs✝ : s.Nonempty → ∃ a < b, Ioo a b ⊆ s
a✝ : Nontrivial (Filter { x // x ∈ s })
this : Nonempty ↑s
a : α
h : a < b
hs : Ioo a b ⊆ s
u : Set { x // x ∈ s }
t : Set α
ht : t ∈ 𝓝[<] b
hts : Subtype.val ⁻¹' t ⊆ u
x : α
hxt : Ioo x b ⊆ t
hxa : a ≤ x
hxb : x < b
y : α
hxy : x < y
hyb : y < b
z : α
hzs : z ∈ s
hyz : y ≤ z
⊢ ⟨z, hzs⟩ ∈ u

Proof state:
case intro.intro.h.mpr
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
b : α
s : Set α
hb : s ⊆ Iio b
hs✝ : s.Nonempty → ∃ a < b, Ioo a b ⊆ s
a✝ : Nontrivial (Filter { x // x ∈ s })
this : Nonempty ↑s
a : α
h : a < b
hs : Ioo a b ⊆ s
u : Set { x // x ∈ s }
⊢ u ∈ atTop → u ∈ comap Subtype.val (𝓝[<] b)

Tactic:
intro hu

Result:
case intro.intro.h.mpr
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
b : α
s : Set α
hb : s ⊆ Iio b
hs✝ : s.Nonempty → ∃ a < b, Ioo a b ⊆ s
a✝ : Nontrivial (Filter { x // x ∈ s })
this : Nonempty ↑s
a : α
h : a < b
hs : Ioo a b ⊆ s
u : Set { x // x ∈ s }
hu : u ∈ atTop
⊢ u ∈ comap Subtype.val (𝓝[<] b)

Proof state:
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
b : α
s : Set α
hb : s ⊆ Iio b
hs : s.Nonempty → ∃ a < b, Ioo a b ⊆ s
a✝ : Nontrivial (Filter { x // x ∈ s })
⊢ comap Subtype.val (𝓝[<] b) = atTop

Tactic:
haveI : Nonempty s := nontrivial_iff_nonempty.1 ‹_›

Result:
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
b : α
s : Set α
hb : s ⊆ Iio b
hs : s.Nonempty → ∃ a < b, Ioo a b ⊆ s
a✝ : Nontrivial (Filter { x // x ∈ s })
this : Nonempty ↑s
⊢ comap Subtype.val (𝓝[<] b) = atTop

Proof state:
case intro.intro.h.mp
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
b : α
s : Set α
hb : s ⊆ Iio b
hs✝ : s.Nonempty → ∃ a < b, Ioo a b ⊆ s
a✝ : Nontrivial (Filter { x // x ∈ s })
this : Nonempty ↑s
a : α
h : a < b
hs : Ioo a b ⊆ s
u : Set { x // x ∈ s }
⊢ u ∈ comap Subtype.val (𝓝[<] b) → u ∈ atTop

Tactic:
rintro ⟨t, ht, hts⟩

Result:
case intro.intro.h.mp.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
b : α
s : Set α
hb : s ⊆ Iio b
hs✝ : s.Nonempty → ∃ a < b, Ioo a b ⊆ s
a✝ : Nontrivial (Filter { x // x ∈ s })
this : Nonempty ↑s
a : α
h : a < b
hs : Ioo a b ⊆ s
u : Set { x // x ∈ s }
t : Set α
ht : t ∈ 𝓝[<] b
hts : Subtype.val ⁻¹' t ⊆ u
⊢ u ∈ atTop

Proof state:
case intro.intro.h.mpr.intro
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
b : α
s : Set α
hb : s ⊆ Iio b
hs✝ : s.Nonempty → ∃ a < b, Ioo a b ⊆ s
a✝ : Nontrivial (Filter { x // x ∈ s })
this : Nonempty ↑s
a : α
h : a < b
hs : Ioo a b ⊆ s
u : Set { x // x ∈ s }
hu : u ∈ atTop
x : ↑s
hx : ∀ (z : ↑s), x ≤ z → z ∈ u
⊢ u ∈ comap Subtype.val (𝓝[<] b)

Tactic:
exact ⟨Ioo x b, Ioo_mem_nhdsLT (hb x.2), fun z hz => hx _ hz.1.le⟩

Result:
no goals

Proof state:
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
b : α
s : Set α
hb : s ⊆ Iio b
hs : s.Nonempty → ∃ a < b, Ioo a b ⊆ s
⊢ comap Subtype.val (𝓝[<] b) = atTop

Tactic:
nontriviality

Result:
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
b : α
s : Set α
hb : s ⊆ Iio b
hs : s.Nonempty → ∃ a < b, Ioo a b ⊆ s
a✝ : Nontrivial (Filter { x // x ∈ s })
⊢ comap Subtype.val (𝓝[<] b) = atTop

Proof state:
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
b : α
s : Set α
hb : s ⊆ Iio b
hs : s.Nonempty → ∃ a < b, Ioo a b ⊆ s
a✝ : Nontrivial (Filter { x // x ∈ s })
this : Nonempty ↑s
⊢ comap Subtype.val (𝓝[<] b) = atTop

Tactic:
rcases hs (nonempty_subtype.1 ‹_›) with ⟨a, h, hs⟩

Result:
case intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
b : α
s : Set α
hb : s ⊆ Iio b
hs✝ : s.Nonempty → ∃ a < b, Ioo a b ⊆ s
a✝ : Nontrivial (Filter { x // x ∈ s })
this : Nonempty ↑s
a : α
h : a < b
hs : Ioo a b ⊆ s
⊢ comap Subtype.val (𝓝[<] b) = atTop

Proof state:
case intro.intro.h.mp.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
b : α
s : Set α
hb : s ⊆ Iio b
hs✝ : s.Nonempty → ∃ a < b, Ioo a b ⊆ s
a✝ : Nontrivial (Filter { x // x ∈ s })
this : Nonempty ↑s
a : α
h : a < b
hs : Ioo a b ⊆ s
u : Set { x // x ∈ s }
t : Set α
ht : t ∈ 𝓝[<] b
hts : Subtype.val ⁻¹' t ⊆ u
x : α
hxt : Ioo x b ⊆ t
hxa : a ≤ x
hxb : x < b
y : α
hxy : x < y
hyb : y < b
⊢ u ∈ atTop

Tactic:
refine mem_of_superset (mem_atTop ⟨y, hs ⟨hxa.trans_lt hxy, hyb⟩⟩) ?_

Result:
case intro.intro.h.mp.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
b : α
s : Set α
hb : s ⊆ Iio b
hs✝ : s.Nonempty → ∃ a < b, Ioo a b ⊆ s
a✝ : Nontrivial (Filter { x // x ∈ s })
this : Nonempty ↑s
a : α
h : a < b
hs : Ioo a b ⊆ s
u : Set { x // x ∈ s }
t : Set α
ht : t ∈ 𝓝[<] b
hts : Subtype.val ⁻¹' t ⊆ u
x : α
hxt : Ioo x b ⊆ t
hxa : a ≤ x
hxb : x < b
y : α
hxy : x < y
hyb : y < b
⊢ {b_1 | ⟨y, ⋯⟩ ≤ b_1} ⊆ u