-- Mathlib/Topology/Separation/Regular.lean
theorem regularSpace_TFAE (X : Type u) [TopologicalSpace X] :
    List.TFAE [RegularSpace X,
      ∀ (s : Set X) x, x ∉ closure s → Disjoint (𝓝ˢ s) (𝓝 x),
      ∀ (x : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 x) ↔ x ∉ closure s,
      ∀ (x : X) (s : Set X), s ∈ 𝓝 x → ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s,
      ∀ x : X, (𝓝 x).lift' closure ≤ 𝓝 x,
      ∀ x : X , (𝓝 x).lift' closure = 𝓝 x]

Proof state:
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x
tfae_5_to_6 : (∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x) → ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x
tfae_6_to_4 : (∀ (x : X), (𝓝 x).lift' closure = 𝓝 x) → ∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s
⊢ [RegularSpace X, ∀ (s : Set X), ∀ x ∉ closure s, Disjoint (𝓝ˢ s) (𝓝 x),
      ∀ (x : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 x) ↔ x ∉ closure s, ∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s,
      ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x, ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x].TFAE

Tactic:
tfae_have 4 → 2
| H, s, a, ha => by
  have ha' : sᶜ ∈ 𝓝 a := by rwa [← mem_interior_iff_mem_nhds, interior_compl]
  rcases H _ _ ha' with ⟨U, hU, hUc, hUs⟩
  refine disjoint_of_disjoint_of_mem disjoint_compl_left ?_ hU
  rwa [← subset_interior_iff_mem_nhdsSet, hUc.isOpen_compl.interior_eq, subset_compl_comm]

Result:
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x
tfae_5_to_6 : (∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x) → ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x
tfae_6_to_4 : (∀ (x : X), (𝓝 x).lift' closure = 𝓝 x) → ∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s
tfae_4_to_2 :
  (∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s) → ∀ (s : Set X), ∀ x ∉ closure s, Disjoint (𝓝ˢ s) (𝓝 x)
⊢ [RegularSpace X, ∀ (s : Set X), ∀ x ∉ closure s, Disjoint (𝓝ˢ s) (𝓝 x),
      ∀ (x : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 x) ↔ x ∉ closure s, ∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s,
      ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x, ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x].TFAE

Proof state:
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x
tfae_5_to_6 : (∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x) → ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x
tfae_6_to_4 : (∀ (x : X), (𝓝 x).lift' closure = 𝓝 x) → ∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s
H : ∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s
s : Set X
a : X
ha : a ∉ closure s
⊢ Disjoint (𝓝ˢ s) (𝓝 a)

Tactic:
have ha' : sᶜ ∈ 𝓝 a := by rwa [← mem_interior_iff_mem_nhds, interior_compl]

Result:
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x
tfae_5_to_6 : (∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x) → ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x
tfae_6_to_4 : (∀ (x : X), (𝓝 x).lift' closure = 𝓝 x) → ∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s
H : ∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s
s : Set X
a : X
ha : a ∉ closure s
ha' : sᶜ ∈ 𝓝 a
⊢ Disjoint (𝓝ˢ s) (𝓝 a)

Proof state:
case intro.intro.intro
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x
tfae_5_to_6 : (∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x) → ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x
tfae_6_to_4 : (∀ (x : X), (𝓝 x).lift' closure = 𝓝 x) → ∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s
H : ∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s
s : Set X
a : X
ha : a ∉ closure s
ha' : sᶜ ∈ 𝓝 a
U : Set X
hU : U ∈ 𝓝 a
hUc : IsClosed U
hUs : U ⊆ sᶜ
⊢ Disjoint (𝓝ˢ s) (𝓝 a)

Tactic:
refine disjoint_of_disjoint_of_mem disjoint_compl_left ?_ hU

Result:
case intro.intro.intro
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x
tfae_5_to_6 : (∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x) → ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x
tfae_6_to_4 : (∀ (x : X), (𝓝 x).lift' closure = 𝓝 x) → ∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s
H : ∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s
s : Set X
a : X
ha : a ∉ closure s
ha' : sᶜ ∈ 𝓝 a
U : Set X
hU : U ∈ 𝓝 a
hUc : IsClosed U
hUs : U ⊆ sᶜ
⊢ Uᶜ ∈ 𝓝ˢ s

Proof state:
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x
tfae_5_to_6 : (∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x) → ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x
H : ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x
a : X
s : Set X
hs : s ∈ (𝓝 a).lift' closure
⊢ ∃ t ∈ 𝓝 a, IsClosed t ∧ t ⊆ s

Tactic:
rcases (𝓝 a).basis_sets.lift'_closure.mem_iff.mp hs with ⟨U, hU, hUs⟩

Result:
case intro.intro
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x
tfae_5_to_6 : (∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x) → ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x
H : ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x
a : X
s : Set X
hs : s ∈ (𝓝 a).lift' closure
U : Set X
hU : U ∈ 𝓝 a
hUs : closure (id U) ⊆ s
⊢ ∃ t ∈ 𝓝 a, IsClosed t ∧ t ⊆ s

Proof state:
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x
tfae_5_to_6 : (∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x) → ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x
⊢ [RegularSpace X, ∀ (s : Set X), ∀ x ∉ closure s, Disjoint (𝓝ˢ s) (𝓝 x),
      ∀ (x : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 x) ↔ x ∉ closure s, ∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s,
      ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x, ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x].TFAE

Tactic:
tfae_have 6 → 4
| H, a, s, hs => by
  rw [← H] at hs
  rcases (𝓝 a).basis_sets.lift'_closure.mem_iff.mp hs with ⟨U, hU, hUs⟩
  exact ⟨closure U, mem_of_superset hU subset_closure, isClosed_closure, hUs⟩

Result:
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x
tfae_5_to_6 : (∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x) → ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x
tfae_6_to_4 : (∀ (x : X), (𝓝 x).lift' closure = 𝓝 x) → ∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s
⊢ [RegularSpace X, ∀ (s : Set X), ∀ x ∉ closure s, Disjoint (𝓝ˢ s) (𝓝 x),
      ∀ (x : X) (s : Set X), Disjoint (𝓝ˢ s) (𝓝 x) ↔ x ∉ closure s, ∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s,
      ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x, ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x].TFAE

Proof state:
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x
tfae_5_to_6 : (∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x) → ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x
tfae_6_to_4 : (∀ (x : X), (𝓝 x).lift' closure = 𝓝 x) → ∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s
tfae_4_to_2 :
  (∀ (x : X), ∀ s ∈ 𝓝 x, ∃ t ∈ 𝓝 x, IsClosed t ∧ t ⊆ s) → ∀ (s : Set X), ∀ x ∉ closure s, Disjoint (𝓝ˢ s) (𝓝 x)
H : ∀ (s : Set X), ∀ x ∉ closure s, Disjoint (𝓝ˢ s) (𝓝 x)
a : X
s : Set X
hd : Disjoint (𝓝ˢ s) (𝓝 a)
has : a ∈ closure s
⊢ 𝓝 a ⊓ 𝓟 s = ⊥

Tactic:
exact (hd.symm.mono_right <| @principal_le_nhdsSet _ _ s).eq_bot

Result:
no goals

Proof state:
X : Type u
inst✝ : TopologicalSpace X
⊢ RegularSpace X ↔ ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x

Tactic:
rw [regularSpace_iff, (@compl_surjective (Set X) _).forall, forall_swap]

Result:
X : Type u
inst✝ : TopologicalSpace X
⊢ (∀ (y : X) (x : Set X), IsClosed xᶜ → y ∉ xᶜ → Disjoint (𝓝ˢ xᶜ) (𝓝 y)) ↔ ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x

Proof state:
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x
tfae_5_to_6 : (∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x) → ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x
H : ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x
a : X
s : Set X
hs : s ∈ 𝓝 a
⊢ ∃ t ∈ 𝓝 a, IsClosed t ∧ t ⊆ s

Tactic:
rw [← H] at hs

Result:
X : Type u
inst✝ : TopologicalSpace X
tfae_1_iff_5 : RegularSpace X ↔ ∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x
tfae_5_to_6 : (∀ (x : X), (𝓝 x).lift' closure ≤ 𝓝 x) → ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x
H : ∀ (x : X), (𝓝 x).lift' closure = 𝓝 x
a : X
s : Set X
hs : s ∈ (𝓝 a).lift' closure
⊢ ∃ t ∈ 𝓝 a, IsClosed t ∧ t ⊆ s