Theorem: PseudoMetricSpace.ext
File: Mathlib/Topology/MetricSpace/Basic.lean

tactic: cases' m with d _ _ _ ed hed U hU B hB
state_before: α✝ : Type u
β : Type v
X : Type ?u.6808
ι : Type ?u.6811
α : Type u_1
m m' : PseudoMetricSpace α
h : toDist = toDist
⊢ m = m'

tactic: cases' m' with d' _ _ _ ed' hed' U' hU' B' hB'
state_before: case mk
α✝ : Type u
β : Type v
X : Type ?u.6808
ι : Type ?u.6811
α : Type u_1
m' : PseudoMetricSpace α
d : Dist α
dist_self✝ : ∀ (x : α), dist x x = 0
dist_comm✝ : ∀ (x y : α), dist x y = dist y x
dist_triangle✝ : ∀ (x y z : α), dist x z ≤ dist x y + dist y z
ed : α → α → ℝ≥0∞
hed : ∀ (x y : α), ed x y = ENNReal.ofReal (dist x y)
U : UniformSpace α
hU : 𝓤 α = ⨅ (ε : ℝ) (_ : ε > 0), 𝓟 {p | dist p.fst p.snd < ε}
B : Bornology α
hB : (cobounded α).sets = {s | ∃ C, ∀ (x : α), x ∈ sᶜ → ∀ (y : α), y ∈ sᶜ → dist x y ≤ C}
h : toDist = toDist
⊢ mk dist_self✝ dist_comm✝ dist_triangle✝ ed hed U B = m'

tactic: obtain rfl : d = d' := h
state_before: case mk.mk
α✝ : Type u
β : Type v
X : Type ?u.6808
ι : Type ?u.6811
α : Type u_1
d : Dist α
dist_self✝¹ : ∀ (x : α), dist x x = 0
dist_comm✝¹ : ∀ (x y : α), dist x y = dist y x
dist_triangle✝¹ : ∀ (x y z : α), dist x z ≤ dist x y + dist y z
ed : α → α → ℝ≥0∞
hed : ∀ (x y : α), ed x y = ENNReal.ofReal (dist x y)
U : UniformSpace α
hU : 𝓤 α = ⨅ (ε : ℝ) (_ : ε > 0), 𝓟 {p | dist p.fst p.snd < ε}
B : Bornology α
hB : (cobounded α).sets = {s | ∃ C, ∀ (x : α), x ∈ sᶜ → ∀ (y : α), y ∈ sᶜ → dist x y ≤ C}
d' : Dist α
dist_self✝ : ∀ (x : α), dist x x = 0
dist_comm✝ : ∀ (x y : α), dist x y = dist y x
dist_triangle✝ : ∀ (x y z : α), dist x z ≤ dist x y + dist y z
ed' : α → α → ℝ≥0∞
hed' : ∀ (x y : α), ed' x y = ENNReal.ofReal (dist x y)
U' : UniformSpace α
hU' : 𝓤 α = ⨅ (ε : ℝ) (_ : ε > 0), 𝓟 {p | dist p.fst p.snd < ε}
B' : Bornology α
hB' : (cobounded α).sets = {s | ∃ C, ∀ (x : α), x ∈ sᶜ → ∀ (y : α), y ∈ sᶜ → dist x y ≤ C}
h : toDist = toDist
⊢ mk dist_self✝¹ dist_comm✝¹ dist_triangle✝¹ ed hed U B = mk dist_self✝ dist_comm✝ dist_triangle✝ ed' hed' U' B'

tactic: congr
state_before: case mk.mk
α✝ : Type u
β : Type v
X : Type ?u.6808
ι : Type ?u.6811
α : Type u_1
d : Dist α
dist_self✝¹ : ∀ (x : α), dist x x = 0
dist_comm✝¹ : ∀ (x y : α), dist x y = dist y x
dist_triangle✝¹ : ∀ (x y z : α), dist x z ≤ dist x y + dist y z
ed : α → α → ℝ≥0∞
hed : ∀ (x y : α), ed x y = ENNReal.ofReal (dist x y)
U : UniformSpace α
hU : 𝓤 α = ⨅ (ε : ℝ) (_ : ε > 0), 𝓟 {p | dist p.fst p.snd < ε}
B : Bornology α
hB : (cobounded α).sets = {s | ∃ C, ∀ (x : α), x ∈ sᶜ → ∀ (y : α), y ∈ sᶜ → dist x y ≤ C}
ed' : α → α → ℝ≥0∞
U' : UniformSpace α
B' : Bornology α
dist_self✝ : ∀ (x : α), dist x x = 0
dist_comm✝ : ∀ (x y : α), dist x y = dist y x
dist_triangle✝ : ∀ (x y z : α), dist x z ≤ dist x y + dist y z
hed' : ∀ (x y : α), ed' x y = ENNReal.ofReal (dist x y)
hU' : 𝓤 α = ⨅ (ε : ℝ) (_ : ε > 0), 𝓟 {p | dist p.fst p.snd < ε}
hB' : (cobounded α).sets = {s | ∃ C, ∀ (x : α), x ∈ sᶜ → ∀ (y : α), y ∈ sᶜ → dist x y ≤ C}
⊢ mk dist_self✝¹ dist_comm✝¹ dist_triangle✝¹ ed hed U B = mk dist_self✝ dist_comm✝ dist_triangle✝ ed' hed' U' B'

tactic: ext (x y) : 2
state_before: case mk.mk.e_edist
α✝ : Type u
β : Type v
X : Type ?u.6808
ι : Type ?u.6811
α : Type u_1
d : Dist α
dist_self✝¹ : ∀ (x : α), dist x x = 0
dist_comm✝¹ : ∀ (x y : α), dist x y = dist y x
dist_triangle✝¹ : ∀ (x y z : α), dist x z ≤ dist x y + dist y z
ed : α → α → ℝ≥0∞
hed : ∀ (x y : α), ed x y = ENNReal.ofReal (dist x y)
U : UniformSpace α
hU : 𝓤 α = ⨅ (ε : ℝ) (_ : ε > 0), 𝓟 {p | dist p.fst p.snd < ε}
B : Bornology α
hB : (cobounded α).sets = {s | ∃ C, ∀ (x : α), x ∈ sᶜ → ∀ (y : α), y ∈ sᶜ → dist x y ≤ C}
ed' : α → α → ℝ≥0∞
U' : UniformSpace α
B' : Bornology α
dist_self✝ : ∀ (x : α), dist x x = 0
dist_comm✝ : ∀ (x y : α), dist x y = dist y x
dist_triangle✝ : ∀ (x y z : α), dist x z ≤ dist x y + dist y z
hed' : ∀ (x y : α), ed' x y = ENNReal.ofReal (dist x y)
hU' : 𝓤 α = ⨅ (ε : ℝ) (_ : ε > 0), 𝓟 {p | dist p.fst p.snd < ε}
hB' : (cobounded α).sets = {s | ∃ C, ∀ (x : α), x ∈ sᶜ → ∀ (y : α), y ∈ sᶜ → dist x y ≤ C}
⊢ ed = ed'

tactic: rw [hed, hed']
state_before: case mk.mk.e_edist.h.h
α✝ : Type u
β : Type v
X : Type ?u.6808
ι : Type ?u.6811
α : Type u_1
d : Dist α
dist_self✝¹ : ∀ (x : α), dist x x = 0
dist_comm✝¹ : ∀ (x y : α), dist x y = dist y x
dist_triangle✝¹ : ∀ (x y z : α), dist x z ≤ dist x y + dist y z
ed : α → α → ℝ≥0∞
hed : ∀ (x y : α), ed x y = ENNReal.ofReal (dist x y)
U : UniformSpace α
hU : 𝓤 α = ⨅ (ε : ℝ) (_ : ε > 0), 𝓟 {p | dist p.fst p.snd < ε}
B : Bornology α
hB : (cobounded α).sets = {s | ∃ C, ∀ (x : α), x ∈ sᶜ → ∀ (y : α), y ∈ sᶜ → dist x y ≤ C}
ed' : α → α → ℝ≥0∞
U' : UniformSpace α
B' : Bornology α
dist_self✝ : ∀ (x : α), dist x x = 0
dist_comm✝ : ∀ (x y : α), dist x y = dist y x
dist_triangle✝ : ∀ (x y z : α), dist x z ≤ dist x y + dist y z
hed' : ∀ (x y : α), ed' x y = ENNReal.ofReal (dist x y)
hU' : 𝓤 α = ⨅ (ε : ℝ) (_ : ε > 0), 𝓟 {p | dist p.fst p.snd < ε}
hB' : (cobounded α).sets = {s | ∃ C, ∀ (x : α), x ∈ sᶜ → ∀ (y : α), y ∈ sᶜ → dist x y ≤ C}
x y : α
⊢ ed x y = ed' x y

tactic: exact uniformSpace_eq (hU.trans hU'.symm)
state_before: case mk.mk.e_toUniformSpace
α✝ : Type u
β : Type v
X : Type ?u.6808
ι : Type ?u.6811
α : Type u_1
d : Dist α
dist_self✝¹ : ∀ (x : α), dist x x = 0
dist_comm✝¹ : ∀ (x y : α), dist x y = dist y x
dist_triangle✝¹ : ∀ (x y z : α), dist x z ≤ dist x y + dist y z
ed : α → α → ℝ≥0∞
hed : ∀ (x y : α), ed x y = ENNReal.ofReal (dist x y)
U : UniformSpace α
hU : 𝓤 α = ⨅ (ε : ℝ) (_ : ε > 0), 𝓟 {p | dist p.fst p.snd < ε}
B : Bornology α
hB : (cobounded α).sets = {s | ∃ C, ∀ (x : α), x ∈ sᶜ → ∀ (y : α), y ∈ sᶜ → dist x y ≤ C}
ed' : α → α → ℝ≥0∞
U' : UniformSpace α
B' : Bornology α
dist_self✝ : ∀ (x : α), dist x x = 0
dist_comm✝ : ∀ (x y : α), dist x y = dist y x
dist_triangle✝ : ∀ (x y z : α), dist x z ≤ dist x y + dist y z
hed' : ∀ (x y : α), ed' x y = ENNReal.ofReal (dist x y)
hU' : 𝓤 α = ⨅ (ε : ℝ) (_ : ε > 0), 𝓟 {p | dist p.fst p.snd < ε}
hB' : (cobounded α).sets = {s | ∃ C, ∀ (x : α), x ∈ sᶜ → ∀ (y : α), y ∈ sᶜ → dist x y ≤ C}
⊢ U = U'

tactic: ext : 2
state_before: case mk.mk.e_toBornology
α✝ : Type u
β : Type v
X : Type ?u.6808
ι : Type ?u.6811
α : Type u_1
d : Dist α
dist_self✝¹ : ∀ (x : α), dist x x = 0
dist_comm✝¹ : ∀ (x y : α), dist x y = dist y x
dist_triangle✝¹ : ∀ (x y z : α), dist x z ≤ dist x y + dist y z
ed : α → α → ℝ≥0∞
hed : ∀ (x y : α), ed x y = ENNReal.ofReal (dist x y)
U : UniformSpace α
hU : 𝓤 α = ⨅ (ε : ℝ) (_ : ε > 0), 𝓟 {p | dist p.fst p.snd < ε}
B : Bornology α
hB : (cobounded α).sets = {s | ∃ C, ∀ (x : α), x ∈ sᶜ → ∀ (y : α), y ∈ sᶜ → dist x y ≤ C}
ed' : α → α → ℝ≥0∞
U' : UniformSpace α
B' : Bornology α
dist_self✝ : ∀ (x : α), dist x x = 0
dist_comm✝ : ∀ (x y : α), dist x y = dist y x
dist_triangle✝ : ∀ (x y z : α), dist x z ≤ dist x y + dist y z
hed' : ∀ (x y : α), ed' x y = ENNReal.ofReal (dist x y)
hU' : 𝓤 α = ⨅ (ε : ℝ) (_ : ε > 0), 𝓟 {p | dist p.fst p.snd < ε}
hB' : (cobounded α).sets = {s | ∃ C, ∀ (x : α), x ∈ sᶜ → ∀ (y : α), y ∈ sᶜ → dist x y ≤ C}
⊢ B = B'

tactic: rw [← Filter.mem_sets, ← Filter.mem_sets, hB, hB']
state_before: case mk.mk.e_toBornology.h_cobounded.a
α✝ : Type u
β : Type v
X : Type ?u.6808
ι : Type ?u.6811
α : Type u_1
d : Dist α
dist_self✝¹ : ∀ (x : α), dist x x = 0
dist_comm✝¹ : ∀ (x y : α), dist x y = dist y x
dist_triangle✝¹ : ∀ (x y z : α), dist x z ≤ dist x y + dist y z
ed : α → α → ℝ≥0∞
hed : ∀ (x y : α), ed x y = ENNReal.ofReal (dist x y)
U : UniformSpace α
hU : 𝓤 α = ⨅ (ε : ℝ) (_ : ε > 0), 𝓟 {p | dist p.fst p.snd < ε}
B : Bornology α
hB : (cobounded α).sets = {s | ∃ C, ∀ (x : α), x ∈ sᶜ → ∀ (y : α), y ∈ sᶜ → dist x y ≤ C}
ed' : α → α → ℝ≥0∞
U' : UniformSpace α
B' : Bornology α
dist_self✝ : ∀ (x : α), dist x x = 0
dist_comm✝ : ∀ (x y : α), dist x y = dist y x
dist_triangle✝ : ∀ (x y z : α), dist x z ≤ dist x y + dist y z
hed' : ∀ (x y : α), ed' x y = ENNReal.ofReal (dist x y)
hU' : 𝓤 α = ⨅ (ε : ℝ) (_ : ε > 0), 𝓟 {p | dist p.fst p.snd < ε}
hB' : (cobounded α).sets = {s | ∃ C, ∀ (x : α), x ∈ sᶜ → ∀ (y : α), y ∈ sᶜ → dist x y ≤ C}
s✝ : Set α
⊢ s✝ ∈ cobounded α ↔ s✝ ∈ cobounded α