Theorem: PseudoEMetricSpace.ext
File: Mathlib/Topology/EMetricSpace/Basic.lean

Proof steps:
state_before: α✝ : Type u
β : Type v
X : Type u_1
α : Type u_2
m m' : PseudoEMetricSpace α
h : toEDist = toEDist
⊢ m = m'
state_after: case mk
α✝ : Type u
β : Type v
X : Type u_1
α : Type u_2
m' : PseudoEMetricSpace α
ed : EDist α
edist_self✝ : ∀ (x : α), edist x x = 0
edist_comm✝ : ∀ (x y : α), edist x y = edist y x
edist_triangle✝ : ∀ (x y z : α), edist x z ≤ edist x y + edist y z
U : UniformSpace α
hU : 𝓤 α = ⨅ ε, ⨅ (_ : ε > 0), 𝓟 {p | edist p.1 p.2 < ε}
h : toEDist = toEDist
⊢ mk edist_self✝ edist_comm✝ edist_triangle✝ U hU = m'
tactic: cases' m with ed  _ _ _ U hU
state_before: case mk
α✝ : Type u
β : Type v
X : Type u_1
α : Type u_2
m' : PseudoEMetricSpace α
ed : EDist α
edist_self✝ : ∀ (x : α), edist x x = 0
edist_comm✝ : ∀ (x y : α), edist x y = edist y x
edist_triangle✝ : ∀ (x y z : α), edist x z ≤ edist x y + edist y z
U : UniformSpace α
hU : 𝓤 α = ⨅ ε, ⨅ (_ : ε > 0), 𝓟 {p | edist p.1 p.2 < ε}
h : toEDist = toEDist
⊢ mk edist_self✝ edist_comm✝ edist_triangle✝ U hU = m'
state_after: case mk.mk
α✝ : Type u
β : Type v
X : Type u_1
α : Type u_2
ed : EDist α
edist_self✝¹ : ∀ (x : α), edist x x = 0
edist_comm✝¹ : ∀ (x y : α), edist x y = edist y x
edist_triangle✝¹ : ∀ (x y z : α), edist x z ≤ edist x y + edist y z
U : UniformSpace α
hU : 𝓤 α = ⨅ ε, ⨅ (_ : ε > 0), 𝓟 {p | edist p.1 p.2 < ε}
ed' : EDist α
edist_self✝ : ∀ (x : α), edist x x = 0
edist_comm✝ : ∀ (x y : α), edist x y = edist y x
edist_triangle✝ : ∀ (x y z : α), edist x z ≤ edist x y + edist y z
U' : UniformSpace α
hU' : 𝓤 α = ⨅ ε, ⨅ (_ : ε > 0), 𝓟 {p | edist p.1 p.2 < ε}
h : toEDist = toEDist
⊢ mk edist_self✝¹ edist_comm✝¹ edist_triangle✝¹ U hU = mk edist_self✝ edist_comm✝ edist_triangle✝ U' hU'
tactic: cases' m' with ed' _ _ _ U' hU'
state_before: case mk.mk
α✝ : Type u
β : Type v
X : Type u_1
α : Type u_2
ed : EDist α
edist_self✝¹ : ∀ (x : α), edist x x = 0
edist_comm✝¹ : ∀ (x y : α), edist x y = edist y x
edist_triangle✝¹ : ∀ (x y z : α), edist x z ≤ edist x y + edist y z
U : UniformSpace α
hU : 𝓤 α = ⨅ ε, ⨅ (_ : ε > 0), 𝓟 {p | edist p.1 p.2 < ε}
ed' : EDist α
edist_self✝ : ∀ (x : α), edist x x = 0
edist_comm✝ : ∀ (x y : α), edist x y = edist y x
edist_triangle✝ : ∀ (x y z : α), edist x z ≤ edist x y + edist y z
U' : UniformSpace α
hU' : 𝓤 α = ⨅ ε, ⨅ (_ : ε > 0), 𝓟 {p | edist p.1 p.2 < ε}
h : toEDist = toEDist
⊢ mk edist_self✝¹ edist_comm✝¹ edist_triangle✝¹ U hU = mk edist_self✝ edist_comm✝ edist_triangle✝ U' hU'
state_after: case mk.mk.e_toUniformSpace
α✝ : Type u
β : Type v
X : Type u_1
α : Type u_2
ed : EDist α
edist_self✝¹ : ∀ (x : α), edist x x = 0
edist_comm✝¹ : ∀ (x y : α), edist x y = edist y x
edist_triangle✝¹ : ∀ (x y z : α), edist x z ≤ edist x y + edist y z
U : UniformSpace α
hU : 𝓤 α = ⨅ ε, ⨅ (_ : ε > 0), 𝓟 {p | edist p.1 p.2 < ε}
ed' : EDist α
edist_self✝ : ∀ (x : α), edist x x = 0
edist_comm✝ : ∀ (x y : α), edist x y = edist y x
edist_triangle✝ : ∀ (x y z : α), edist x z ≤ edist x y + edist y z
U' : UniformSpace α
hU' : 𝓤 α = ⨅ ε, ⨅ (_ : ε > 0), 𝓟 {p | edist p.1 p.2 < ε}
h : toEDist = toEDist
⊢ U = U'
tactic: congr 1
state_before: case mk.mk.e_toUniformSpace
α✝ : Type u
β : Type v
X : Type u_1
α : Type u_2
ed : EDist α
edist_self✝¹ : ∀ (x : α), edist x x = 0
edist_comm✝¹ : ∀ (x y : α), edist x y = edist y x
edist_triangle✝¹ : ∀ (x y z : α), edist x z ≤ edist x y + edist y z
U : UniformSpace α
hU : 𝓤 α = ⨅ ε, ⨅ (_ : ε > 0), 𝓟 {p | edist p.1 p.2 < ε}
ed' : EDist α
edist_self✝ : ∀ (x : α), edist x x = 0
edist_comm✝ : ∀ (x y : α), edist x y = edist y x
edist_triangle✝ : ∀ (x y z : α), edist x z ≤ edist x y + edist y z
U' : UniformSpace α
hU' : 𝓤 α = ⨅ ε, ⨅ (_ : ε > 0), 𝓟 {p | edist p.1 p.2 < ε}
h : toEDist = toEDist
⊢ U = U'
state_after: no goals
tactic: exact UniformSpace.ext (((show ed = ed' from h) ▸ hU).trans hU'.symm)