Theorem: GromovHausdorff.ghDist_eq_hausdorffDist
File: Mathlib/Topology/MetricSpace/GromovHausdorff.lean

Proof steps:
state_before: X : Type u
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
Y : Type v
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
⊢ ∃ Φ Ψ, Isometry Φ ∧ Isometry Ψ ∧ ghDist X Y = hausdorffDist (range Φ) (range Ψ)
state_after: X : Type u
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
Y : Type v
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
F : OptimalGHCoupling X Y → ↥(lp (fun i => ℝ) ⊤) := kuratowskiEmbedding (OptimalGHCoupling X Y)
⊢ ∃ Φ Ψ, Isometry Φ ∧ Isometry Ψ ∧ ghDist X Y = hausdorffDist (range Φ) (range Ψ)
tactic: let F := kuratowskiEmbedding (OptimalGHCoupling X Y)
state_before: X : Type u
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
Y : Type v
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
F : OptimalGHCoupling X Y → ↥(lp (fun i => ℝ) ⊤) := kuratowskiEmbedding (OptimalGHCoupling X Y)
⊢ ∃ Φ Ψ, Isometry Φ ∧ Isometry Ψ ∧ ghDist X Y = hausdorffDist (range Φ) (range Ψ)
state_after: X : Type u
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
Y : Type v
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
F : OptimalGHCoupling X Y → ↥(lp (fun i => ℝ) ⊤) := kuratowskiEmbedding (OptimalGHCoupling X Y)
Φ : X → ↥(lp (fun i => ℝ) ⊤) := F ∘ optimalGHInjl X Y
⊢ ∃ Φ Ψ, Isometry Φ ∧ Isometry Ψ ∧ ghDist X Y = hausdorffDist (range Φ) (range Ψ)
tactic: let Φ := F ∘ optimalGHInjl X Y
state_before: X : Type u
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
Y : Type v
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
F : OptimalGHCoupling X Y → ↥(lp (fun i => ℝ) ⊤) := kuratowskiEmbedding (OptimalGHCoupling X Y)
Φ : X → ↥(lp (fun i => ℝ) ⊤) := F ∘ optimalGHInjl X Y
⊢ ∃ Φ Ψ, Isometry Φ ∧ Isometry Ψ ∧ ghDist X Y = hausdorffDist (range Φ) (range Ψ)
state_after: X : Type u
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
Y : Type v
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
F : OptimalGHCoupling X Y → ↥(lp (fun i => ℝ) ⊤) := kuratowskiEmbedding (OptimalGHCoupling X Y)
Φ : X → ↥(lp (fun i => ℝ) ⊤) := F ∘ optimalGHInjl X Y
Ψ : Y → ↥(lp (fun i => ℝ) ⊤) := F ∘ optimalGHInjr X Y
⊢ ∃ Φ Ψ, Isometry Φ ∧ Isometry Ψ ∧ ghDist X Y = hausdorffDist (range Φ) (range Ψ)
tactic: let Ψ := F ∘ optimalGHInjr X Y
state_before: X : Type u
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
Y : Type v
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
F : OptimalGHCoupling X Y → ↥(lp (fun i => ℝ) ⊤) := kuratowskiEmbedding (OptimalGHCoupling X Y)
Φ : X → ↥(lp (fun i => ℝ) ⊤) := F ∘ optimalGHInjl X Y
Ψ : Y → ↥(lp (fun i => ℝ) ⊤) := F ∘ optimalGHInjr X Y
⊢ ∃ Φ Ψ, Isometry Φ ∧ Isometry Ψ ∧ ghDist X Y = hausdorffDist (range Φ) (range Ψ)
state_after: case refine_1
X : Type u
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
Y : Type v
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
F : OptimalGHCoupling X Y → ↥(lp (fun i => ℝ) ⊤) := kuratowskiEmbedding (OptimalGHCoupling X Y)
Φ : X → ↥(lp (fun i => ℝ) ⊤) := F ∘ optimalGHInjl X Y
Ψ : Y → ↥(lp (fun i => ℝ) ⊤) := F ∘ optimalGHInjr X Y
⊢ Isometry Φ

case refine_2
X : Type u
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
Y : Type v
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
F : OptimalGHCoupling X Y → ↥(lp (fun i => ℝ) ⊤) := kuratowskiEmbedding (OptimalGHCoupling X Y)
Φ : X → ↥(lp (fun i => ℝ) ⊤) := F ∘ optimalGHInjl X Y
Ψ : Y → ↥(lp (fun i => ℝ) ⊤) := F ∘ optimalGHInjr X Y
⊢ Isometry Ψ

case refine_3
X : Type u
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
Y : Type v
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
F : OptimalGHCoupling X Y → ↥(lp (fun i => ℝ) ⊤) := kuratowskiEmbedding (OptimalGHCoupling X Y)
Φ : X → ↥(lp (fun i => ℝ) ⊤) := F ∘ optimalGHInjl X Y
Ψ : Y → ↥(lp (fun i => ℝ) ⊤) := F ∘ optimalGHInjr X Y
⊢ ghDist X Y = hausdorffDist (range Φ) (range Ψ)
tactic: refine ⟨Φ, Ψ, ?_, ?_, ?_⟩