Theorem: discreteTopology_iff_locallyInjective
File: Mathlib/Topology/SeparatedMap.lean

Proof steps:
state_before: X : Type u_1
Y : Type u_2
A : Type ?u.17551
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
y : Y
⊢ DiscreteTopology X ↔ IsLocallyInjective fun x => y
state_after: X : Type u_1
Y : Type u_2
A : Type ?u.17551
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
y : Y
⊢ (∀ (x : X), {x} ∈ 𝓝 x) ↔ ∀ (x : X), ∃ U ∈ 𝓝 x, Set.InjOn (fun x => y) U
tactic: rw [discreteTopology_iff_singleton_mem_nhds, isLocallyInjective_iff_nhds]
state_before: X : Type u_1
Y : Type u_2
A : Type ?u.17551
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
y : Y
⊢ (∀ (x : X), {x} ∈ 𝓝 x) ↔ ∀ (x : X), ∃ U ∈ 𝓝 x, Set.InjOn (fun x => y) U
state_after: X : Type u_1
Y : Type u_2
A : Type ?u.17551
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
y : Y
x : X
x✝ : ∃ U ∈ 𝓝 x, Set.InjOn (fun x => y) U
U : Set X
hU : U ∈ 𝓝 x
inj : Set.InjOn (fun x => y) U
⊢ {x} ∈ 𝓝 x
tactic: refine forall_congr' fun x ↦ ⟨fun h ↦ ⟨{x}, h, Set.injOn_singleton _ _⟩, fun ⟨U, hU, inj⟩ ↦ ?_⟩
state_before: X : Type u_1
Y : Type u_2
A : Type ?u.17551
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
y : Y
x : X
x✝ : ∃ U ∈ 𝓝 x, Set.InjOn (fun x => y) U
U : Set X
hU : U ∈ 𝓝 x
inj : Set.InjOn (fun x => y) U
⊢ {x} ∈ 𝓝 x
state_after: case h.e'_4
X : Type u_1
Y : Type u_2
A : Type ?u.17551
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
y : Y
x : X
x✝ : ∃ U ∈ 𝓝 x, Set.InjOn (fun x => y) U
U : Set X
hU : U ∈ 𝓝 x
inj : Set.InjOn (fun x => y) U
⊢ {x} = U
tactic: convert hU
state_before: case h.e'_4
X : Type u_1
Y : Type u_2
A : Type ?u.17551
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
y : Y
x : X
x✝ : ∃ U ∈ 𝓝 x, Set.InjOn (fun x => y) U
U : Set X
hU : U ∈ 𝓝 x
inj : Set.InjOn (fun x => y) U
⊢ {x} = U
state_after: case h.e'_4.h
X : Type u_1
Y : Type u_2
A : Type ?u.17551
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
y : Y
x : X
x✝ : ∃ U ∈ 𝓝 x, Set.InjOn (fun x => y) U
U : Set X
hU : U ∈ 𝓝 x
inj : Set.InjOn (fun x => y) U
x' : X
⊢ x' ∈ {x} ↔ x' ∈ U
tactic: ext x'
state_before: case h.e'_4.h
X : Type u_1
Y : Type u_2
A : Type ?u.17551
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
y : Y
x : X
x✝ : ∃ U ∈ 𝓝 x, Set.InjOn (fun x => y) U
U : Set X
hU : U ∈ 𝓝 x
inj : Set.InjOn (fun x => y) U
x' : X
⊢ x' ∈ {x} ↔ x' ∈ U
state_after: case h.e'_4.h
X : Type u_1
Y : Type u_2
A : Type ?u.17551
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
y : Y
x : X
x✝ : ∃ U ∈ 𝓝 x, Set.InjOn (fun x => y) U
U : Set X
hU : U ∈ 𝓝 x
inj : Set.InjOn (fun x => y) U
x' : X
⊢ x' ∈ {x} → x' ∈ U
tactic: refine ⟨?_, fun h ↦ inj h (mem_of_mem_nhds hU) rfl⟩
state_before: case h.e'_4.h
X : Type u_1
Y : Type u_2
A : Type ?u.17551
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
y : Y
x : X
x✝ : ∃ U ∈ 𝓝 x, Set.InjOn (fun x => y) U
U : Set X
hU : U ∈ 𝓝 x
inj : Set.InjOn (fun x => y) U
x' : X
⊢ x' ∈ {x} → x' ∈ U
state_after: case h.e'_4.h
X : Type u_1
Y : Type u_2
A : Type ?u.17551
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
y : Y
U : Set X
inj : Set.InjOn (fun x => y) U
x' : X
x✝ : ∃ U ∈ 𝓝 x', Set.InjOn (fun x => y) U
hU : U ∈ 𝓝 x'
⊢ x' ∈ U
tactic: rintro rfl
state_before: case h.e'_4.h
X : Type u_1
Y : Type u_2
A : Type ?u.17551
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace A
y : Y
U : Set X
inj : Set.InjOn (fun x => y) U
x' : X
x✝ : ∃ U ∈ 𝓝 x', Set.InjOn (fun x => y) U
hU : U ∈ 𝓝 x'
⊢ x' ∈ U
state_after: no goals
tactic: exact mem_of_mem_nhds hU