Theorem: Metric.toInductiveLimit_commute
File: Mathlib/Topology/MetricSpace/Gluing.lean

tactic: let h := inductivePremetric I
state_before: X : ℕ → Type u
inst✝ : (n : ℕ) → MetricSpace (X n)
f : (n : ℕ) → X n → X (n + 1)
I : ∀ (n : ℕ), Isometry (f n)
n : ℕ
⊢ toInductiveLimit I n.succ ∘ f n = toInductiveLimit I n
state_after: X : ℕ → Type u
inst✝ : (n : ℕ) → MetricSpace (X n)
f : (n : ℕ) → X n → X (n + 1)
I : ∀ (n : ℕ), Isometry (f n)
n : ℕ
h : PseudoMetricSpace ((n : ℕ) × X n) := inductivePremetric I
⊢ toInductiveLimit I n.succ ∘ f n = toInductiveLimit I n

tactic: let _ := h.toUniformSpace.toTopologicalSpace
state_before: X : ℕ → Type u
inst✝ : (n : ℕ) → MetricSpace (X n)
f : (n : ℕ) → X n → X (n + 1)
I : ∀ (n : ℕ), Isometry (f n)
n : ℕ
h : PseudoMetricSpace ((n : ℕ) × X n) := inductivePremetric I
⊢ toInductiveLimit I n.succ ∘ f n = toInductiveLimit I n
state_after: X : ℕ → Type u
inst✝ : (n : ℕ) → MetricSpace (X n)
f : (n : ℕ) → X n → X (n + 1)
I : ∀ (n : ℕ), Isometry (f n)
n : ℕ
h : PseudoMetricSpace ((n : ℕ) × X n) := inductivePremetric I
x✝ : TopologicalSpace ((n : ℕ) × X n) := UniformSpace.toTopologicalSpace
⊢ toInductiveLimit I n.succ ∘ f n = toInductiveLimit I n

tactic: funext x
state_before: X : ℕ → Type u
inst✝ : (n : ℕ) → MetricSpace (X n)
f : (n : ℕ) → X n → X (n + 1)
I : ∀ (n : ℕ), Isometry (f n)
n : ℕ
h : PseudoMetricSpace ((n : ℕ) × X n) := inductivePremetric I
x✝ : TopologicalSpace ((n : ℕ) × X n) := UniformSpace.toTopologicalSpace
⊢ toInductiveLimit I n.succ ∘ f n = toInductiveLimit I n
state_after: case h
X : ℕ → Type u
inst✝ : (n : ℕ) → MetricSpace (X n)
f : (n : ℕ) → X n → X (n + 1)
I : ∀ (n : ℕ), Isometry (f n)
n : ℕ
h : PseudoMetricSpace ((n : ℕ) × X n) := inductivePremetric I
x✝ : TopologicalSpace ((n : ℕ) × X n) := UniformSpace.toTopologicalSpace
x : X n
⊢ (toInductiveLimit I n.succ ∘ f n) x = toInductiveLimit I n x

tactic: simp only [comp, toInductiveLimit]
state_before: case h
X : ℕ → Type u
inst✝ : (n : ℕ) → MetricSpace (X n)
f : (n : ℕ) → X n → X (n + 1)
I : ∀ (n : ℕ), Isometry (f n)
n : ℕ
h : PseudoMetricSpace ((n : ℕ) × X n) := inductivePremetric I
x✝ : TopologicalSpace ((n : ℕ) × X n) := UniformSpace.toTopologicalSpace
x : X n
⊢ (toInductiveLimit I n.succ ∘ f n) x = toInductiveLimit I n x
state_after: case h
X : ℕ → Type u
inst✝ : (n : ℕ) → MetricSpace (X n)
f : (n : ℕ) → X n → X (n + 1)
I : ∀ (n : ℕ), Isometry (f n)
n : ℕ
h : PseudoMetricSpace ((n : ℕ) × X n) := inductivePremetric I
x✝ : TopologicalSpace ((n : ℕ) × X n) := UniformSpace.toTopologicalSpace
x : X n
⊢ Quotient.mk'' ⟨n.succ, f n x⟩ = Quotient.mk'' ⟨n, x⟩

tactic: refine SeparationQuotient.mk_eq_mk.2 (Metric.inseparable_iff.2 ?_)
state_before: case h
X : ℕ → Type u
inst✝ : (n : ℕ) → MetricSpace (X n)
f : (n : ℕ) → X n → X (n + 1)
I : ∀ (n : ℕ), Isometry (f n)
n : ℕ
h : PseudoMetricSpace ((n : ℕ) × X n) := inductivePremetric I
x✝ : TopologicalSpace ((n : ℕ) × X n) := UniformSpace.toTopologicalSpace
x : X n
⊢ Quotient.mk'' ⟨n.succ, f n x⟩ = Quotient.mk'' ⟨n, x⟩
state_after: case h
X : ℕ → Type u
inst✝ : (n : ℕ) → MetricSpace (X n)
f : (n : ℕ) → X n → X (n + 1)
I : ∀ (n : ℕ), Isometry (f n)
n : ℕ
h : PseudoMetricSpace ((n : ℕ) × X n) := inductivePremetric I
x✝ : TopologicalSpace ((n : ℕ) × X n) := UniformSpace.toTopologicalSpace
x : X n
⊢ dist ⟨n.succ, f n x⟩ ⟨n, x⟩ = 0

tactic: show inductiveLimitDist f ⟨n.succ, f n x⟩ ⟨n, x⟩ = 0
state_before: case h
X : ℕ → Type u
inst✝ : (n : ℕ) → MetricSpace (X n)
f : (n : ℕ) → X n → X (n + 1)
I : ∀ (n : ℕ), Isometry (f n)
n : ℕ
h : PseudoMetricSpace ((n : ℕ) × X n) := inductivePremetric I
x✝ : TopologicalSpace ((n : ℕ) × X n) := UniformSpace.toTopologicalSpace
x : X n
⊢ dist ⟨n.succ, f n x⟩ ⟨n, x⟩ = 0
state_after: case h
X : ℕ → Type u
inst✝ : (n : ℕ) → MetricSpace (X n)
f : (n : ℕ) → X n → X (n + 1)
I : ∀ (n : ℕ), Isometry (f n)
n : ℕ
h : PseudoMetricSpace ((n : ℕ) × X n) := inductivePremetric I
x✝ : TopologicalSpace ((n : ℕ) × X n) := UniformSpace.toTopologicalSpace
x : X n
⊢ inductiveLimitDist f ⟨n.succ, f n x⟩ ⟨n, x⟩ = 0

tactic: rw [inductiveLimitDist_eq_dist I ⟨n.succ, f n x⟩ ⟨n, x⟩ n.succ, leRecOn_self,
  leRecOn_succ, leRecOn_self, dist_self]
state_before: case h
X : ℕ → Type u
inst✝ : (n : ℕ) → MetricSpace (X n)
f : (n : ℕ) → X n → X (n + 1)
I : ∀ (n : ℕ), Isometry (f n)
n : ℕ
h : PseudoMetricSpace ((n : ℕ) × X n) := inductivePremetric I
x✝ : TopologicalSpace ((n : ℕ) × X n) := UniformSpace.toTopologicalSpace
x : X n
⊢ inductiveLimitDist f ⟨n.succ, f n x⟩ ⟨n, x⟩ = 0
state_after: case h.h2
X : ℕ → Type u
inst✝ : (n : ℕ) → MetricSpace (X n)
f : (n : ℕ) → X n → X (n + 1)
I : ∀ (n : ℕ), Isometry (f n)
n : ℕ
h : PseudoMetricSpace ((n : ℕ) × X n) := inductivePremetric I
x✝ : TopologicalSpace ((n : ℕ) × X n) := UniformSpace.toTopologicalSpace
x : X n
⊢ ⟨n, x⟩.fst ≤ n + 1

tactic: exact le_succ _
state_before: case h.h2
X : ℕ → Type u
inst✝ : (n : ℕ) → MetricSpace (X n)
f : (n : ℕ) → X n → X (n + 1)
I : ∀ (n : ℕ), Isometry (f n)
n : ℕ
h : PseudoMetricSpace ((n : ℕ) × X n) := inductivePremetric I
x✝ : TopologicalSpace ((n : ℕ) × X n) := UniformSpace.toTopologicalSpace
x : X n
⊢ ⟨n, x⟩.fst ≤ n + 1
state_after: no goals