Theorem: minimal_nonempty_open_subsingleton
File: Mathlib/Topology/Separation.lean

tactic: clear Y
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : TopologicalSpace X
inst✝ : T0Space X
s : Set X
hs : IsOpen s
hmin : ∀ t ⊆ s, t.Nonempty → IsOpen t → t = s
⊢ s.Subsingleton
state_after: X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : T0Space X
s : Set X
hs : IsOpen s
hmin : ∀ t ⊆ s, t.Nonempty → IsOpen t → t = s
⊢ s.Subsingleton

tactic: refine fun x hx y hy => of_not_not fun hxy => ?_
state_before: X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : T0Space X
s : Set X
hs : IsOpen s
hmin : ∀ t ⊆ s, t.Nonempty → IsOpen t → t = s
⊢ s.Subsingleton
state_after: X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : T0Space X
s : Set X
hs : IsOpen s
hmin : ∀ t ⊆ s, t.Nonempty → IsOpen t → t = s
x : X
hx : x ∈ s
y : X
hy : y ∈ s
hxy : ¬x = y
⊢ False

tactic: rcases exists_isOpen_xor'_mem hxy with ⟨U, hUo, hU⟩
state_before: X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : T0Space X
s : Set X
hs : IsOpen s
hmin : ∀ t ⊆ s, t.Nonempty → IsOpen t → t = s
x : X
hx : x ∈ s
y : X
hy : y ∈ s
hxy : ¬x = y
⊢ False
state_after: case intro.intro
X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : T0Space X
s : Set X
hs : IsOpen s
hmin : ∀ t ⊆ s, t.Nonempty → IsOpen t → t = s
x : X
hx : x ∈ s
y : X
hy : y ∈ s
hxy : ¬x = y
U : Set X
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
⊢ False

tactic: wlog h : x ∈ U ∧ y ∉ U
state_before: case intro.intro
X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : T0Space X
s : Set X
hs : IsOpen s
hmin : ∀ t ⊆ s, t.Nonempty → IsOpen t → t = s
x : X
hx : x ∈ s
y : X
hy : y ∈ s
hxy : ¬x = y
U : Set X
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
⊢ False
state_after: case intro.intro.inr
X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : T0Space X
s : Set X
hs : IsOpen s
hmin : ∀ t ⊆ s, t.Nonempty → IsOpen t → t = s
x : X
hx : x ∈ s
y : X
hy : y ∈ s
hxy : ¬x = y
U : Set X
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
this :
  ∀ {X : Type u_1} [inst : TopologicalSpace X] [inst_1 : T0Space X] {s : Set X},
    IsOpen s →
      (∀ t ⊆ s, t.Nonempty → IsOpen t → t = s) →
        ∀ x ∈ s, ∀ y ∈ s, ¬x = y → ∀ (U : Set X), IsOpen U → Xor' (x ∈ U) (y ∈ U) → x ∈ U ∧ y ∉ U → False
h : ¬(x ∈ U ∧ y ∉ U)
⊢ False

X✝ : Type u_1
inst✝² : TopologicalSpace X✝
X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : T0Space X
s : Set X
hs : IsOpen s
hmin : ∀ t ⊆ s, t.Nonempty → IsOpen t → t = s
x : X
hx : x ∈ s
y : X
hy : y ∈ s
hxy : ¬x = y
U : Set X
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
h : x ∈ U ∧ y ∉ U
⊢ False

tactic: cases' h with hxU hyU
state_before: X✝ : Type u_1
inst✝² : TopologicalSpace X✝
X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : T0Space X
s : Set X
hs : IsOpen s
hmin : ∀ t ⊆ s, t.Nonempty → IsOpen t → t = s
x : X
hx : x ∈ s
y : X
hy : y ∈ s
hxy : ¬x = y
U : Set X
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
h : x ∈ U ∧ y ∉ U
⊢ False
state_after: case intro
X✝ : Type u_1
inst✝² : TopologicalSpace X✝
X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : T0Space X
s : Set X
hs : IsOpen s
hmin : ∀ t ⊆ s, t.Nonempty → IsOpen t → t = s
x : X
hx : x ∈ s
y : X
hy : y ∈ s
hxy : ¬x = y
U : Set X
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
hxU : x ∈ U
hyU : y ∉ U
⊢ False

tactic: have : s ∩ U = s := hmin (s ∩ U) inter_subset_left ⟨x, hx, hxU⟩ (hs.inter hUo)
state_before: case intro
X✝ : Type u_1
inst✝² : TopologicalSpace X✝
X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : T0Space X
s : Set X
hs : IsOpen s
hmin : ∀ t ⊆ s, t.Nonempty → IsOpen t → t = s
x : X
hx : x ∈ s
y : X
hy : y ∈ s
hxy : ¬x = y
U : Set X
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
hxU : x ∈ U
hyU : y ∉ U
⊢ False
state_after: case intro
X✝ : Type u_1
inst✝² : TopologicalSpace X✝
X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : T0Space X
s : Set X
hs : IsOpen s
hmin : ∀ t ⊆ s, t.Nonempty → IsOpen t → t = s
x : X
hx : x ∈ s
y : X
hy : y ∈ s
hxy : ¬x = y
U : Set X
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
hxU : x ∈ U
hyU : y ∉ U
this : s ∩ U = s
⊢ False

tactic: exact hyU (this.symm.subset hy).2
state_before: case intro
X✝ : Type u_1
inst✝² : TopologicalSpace X✝
X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : T0Space X
s : Set X
hs : IsOpen s
hmin : ∀ t ⊆ s, t.Nonempty → IsOpen t → t = s
x : X
hx : x ∈ s
y : X
hy : y ∈ s
hxy : ¬x = y
U : Set X
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
hxU : x ∈ U
hyU : y ∉ U
this : s ∩ U = s
⊢ False
state_after: no goals

tactic: exact this hs hmin y hy x hx (Ne.symm hxy) U hUo hU.symm (hU.resolve_left h)
state_before: case intro.intro.inr
X : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : T0Space X
s : Set X
hs : IsOpen s
hmin : ∀ t ⊆ s, t.Nonempty → IsOpen t → t = s
x : X
hx : x ∈ s
y : X
hy : y ∈ s
hxy : ¬x = y
U : Set X
hUo : IsOpen U
hU : Xor' (x ∈ U) (y ∈ U)
this :
  ∀ {X : Type u_1} [inst : TopologicalSpace X] [inst_1 : T0Space X] {s : Set X},
    IsOpen s →
      (∀ t ⊆ s, t.Nonempty → IsOpen t → t = s) →
        ∀ x ∈ s, ∀ y ∈ s, ¬x = y → ∀ (U : Set X), IsOpen U → Xor' (x ∈ U) (y ∈ U) → x ∈ U ∧ y ∉ U → False
h : ¬(x ∈ U ∧ y ∉ U)
⊢ False
state_after: no goals