X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
⊢ hausdorffDist (range (optimalGHInjl X Y)) (range (optimalGHInjr X Y)) ≤ r
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
⊢ hausdorffDist (range (optimalGHInjl X Y)) (range (optimalGHInjr X Y)) ≤ HD f
refine' le_trans (le_of_forall_le_of_dense fun r hr => _) (HD_optimalGHDist_le X Y f h)
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
⊢ hausdorffDist (range (optimalGHInjl X Y)) (range (optimalGHInjr X Y)) ≤ r
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
⊢ hausdorffDist (range (optimalGHInjl X Y)) (range (optimalGHInjr X Y)) ≤ r
have A : ∀ x ∈ range (optimalGHInjl X Y), ∃ y ∈ range (optimalGHInjr X Y), dist x y ≤ r := by
  rintro _ ⟨z, rfl⟩
  have I1 : (⨆ x, ⨅ y, optimalGHDist X Y (inl x, inr y)) < r :=
    lt_of_le_of_lt (le_max_left _ _) hr
  have I2 :
      (⨅ y, optimalGHDist X Y (inl z, inr y)) ≤ ⨆ x, ⨅ y, optimalGHDist X Y (inl x, inr y) :=
    le_csSup (by simpa using HD_bound_aux1 _ 0) (mem_range_self _)
  have I : (⨅ y, optimalGHDist X Y (inl z, inr y)) < r := lt_of_le_of_lt I2 I1
  rcases exists_lt_of_csInf_lt (range_nonempty _) I with ⟨r', ⟨z', rfl⟩, hr'⟩
  exact ⟨optimalGHInjr X Y z', mem_range_self _, le_of_lt hr'⟩
case refine'_1
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
⊢ 0 ≤ r

case refine'_2
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
⊢ ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjr X Y) → ∃ y, y ∈ range (optimalGHInjl X Y) ∧ dist x y ≤ r
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
⊢ hausdorffDist (range (optimalGHInjl X Y)) (range (optimalGHInjr X Y)) ≤ r
refine' hausdorffDist_le_of_mem_dist _ A _
case intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
z : X
⊢ ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist (optimalGHInjl X Y z) y ≤ r
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
⊢ ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
rintro _ ⟨z, rfl⟩
case intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
z : X
I1 : (⨆ (x : X), ⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
⊢ ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist (optimalGHInjl X Y z) y ≤ r
case intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
z : X
⊢ ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist (optimalGHInjl X Y z) y ≤ r
have I1 : (⨆ x, ⨅ y, optimalGHDist X Y (inl x, inr y)) < r :=
  lt_of_le_of_lt (le_max_left _ _) hr
case intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
z : X
I1 : (⨆ (x : X), ⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
I2 :
  (⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl z, inr y)) ≤
    ⨆ (x : X), ⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)
⊢ ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist (optimalGHInjl X Y z) y ≤ r
case intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
z : X
I1 : (⨆ (x : X), ⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
⊢ ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist (optimalGHInjl X Y z) y ≤ r
have I2 :
    (⨅ y, optimalGHDist X Y (inl z, inr y)) ≤ ⨆ x, ⨅ y, optimalGHDist X Y (inl x, inr y) :=
  le_csSup (by simpa using HD_bound_aux1 _ 0) (mem_range_self _)
case intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
z : X
I1 : (⨆ (x : X), ⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
I2 :
  (⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl z, inr y)) ≤
    ⨆ (x : X), ⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)
I : (⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl z, inr y)) < r
⊢ ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist (optimalGHInjl X Y z) y ≤ r
case intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
z : X
I1 : (⨆ (x : X), ⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
I2 :
  (⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl z, inr y)) ≤
    ⨆ (x : X), ⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)
⊢ ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist (optimalGHInjl X Y z) y ≤ r
have I : (⨅ y, optimalGHDist X Y (inl z, inr y)) < r := lt_of_le_of_lt I2 I1
case intro.intro.intro.intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
z : X
I1 : (⨆ (x : X), ⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
I2 :
  (⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl z, inr y)) ≤
    ⨆ (x : X), ⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)
I : (⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl z, inr y)) < r
z' : Y
hr' : (fun y => ↑(GromovHausdorff.optimalGHDist X Y) (inl z, inr y)) z' < r
⊢ ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist (optimalGHInjl X Y z) y ≤ r
case intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
z : X
I1 : (⨆ (x : X), ⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
I2 :
  (⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl z, inr y)) ≤
    ⨆ (x : X), ⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)
I : (⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl z, inr y)) < r
⊢ ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist (optimalGHInjl X Y z) y ≤ r
rcases exists_lt_of_csInf_lt (range_nonempty _) I with ⟨r', ⟨z', rfl⟩, hr'⟩
no goals
case intro.intro.intro.intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
z : X
I1 : (⨆ (x : X), ⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
I2 :
  (⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl z, inr y)) ≤
    ⨆ (x : X), ⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)
I : (⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl z, inr y)) < r
z' : Y
hr' : (fun y => ↑(GromovHausdorff.optimalGHDist X Y) (inl z, inr y)) z' < r
⊢ ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist (optimalGHInjl X Y z) y ≤ r
exact ⟨optimalGHInjr X Y z', mem_range_self _, le_of_lt hr'⟩
no goals
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
z : X
I1 : (⨆ (x : X), ⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
⊢ BddAbove (range fun x => ⨅ (y : Y), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y))
simpa using HD_bound_aux1 _ 0
case refine'_1
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
inhabited_h : Inhabited X
⊢ 0 ≤ r
case refine'_1
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
⊢ 0 ≤ r
inhabit X
case refine'_1.intro.intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
inhabited_h : Inhabited X
y : OptimalGHCoupling X Y
hy : dist (optimalGHInjl X Y default) y ≤ r
⊢ 0 ≤ r
case refine'_1
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
inhabited_h : Inhabited X
⊢ 0 ≤ r
rcases A _ (mem_range_self default) with ⟨y, -, hy⟩
no goals
case refine'_1.intro.intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
inhabited_h : Inhabited X
y : OptimalGHCoupling X Y
hy : dist (optimalGHInjl X Y default) y ≤ r
⊢ 0 ≤ r
exact le_trans dist_nonneg hy
case refine'_2.intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
z : Y
⊢ ∃ y, y ∈ range (optimalGHInjl X Y) ∧ dist (optimalGHInjr X Y z) y ≤ r
case refine'_2
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
⊢ ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjr X Y) → ∃ y, y ∈ range (optimalGHInjl X Y) ∧ dist x y ≤ r
rintro _ ⟨z, rfl⟩
case refine'_2.intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
z : Y
I1 : (⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
⊢ ∃ y, y ∈ range (optimalGHInjl X Y) ∧ dist (optimalGHInjr X Y z) y ≤ r
case refine'_2.intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
z : Y
⊢ ∃ y, y ∈ range (optimalGHInjl X Y) ∧ dist (optimalGHInjr X Y z) y ≤ r
have I1 : (⨆ y, ⨅ x, optimalGHDist X Y (inl x, inr y)) < r :=
  lt_of_le_of_lt (le_max_right _ _) hr
case refine'_2.intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
z : Y
I1 : (⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
I2 :
  (⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) ≤
    ⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)
⊢ ∃ y, y ∈ range (optimalGHInjl X Y) ∧ dist (optimalGHInjr X Y z) y ≤ r
case refine'_2.intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
z : Y
I1 : (⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
⊢ ∃ y, y ∈ range (optimalGHInjl X Y) ∧ dist (optimalGHInjr X Y z) y ≤ r
have I2 :
    (⨅ x, optimalGHDist X Y (inl x, inr z)) ≤ ⨆ y, ⨅ x, optimalGHDist X Y (inl x, inr y) :=
  le_csSup (by simpa using HD_bound_aux2 _ 0) (mem_range_self _)
case refine'_2.intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
z : Y
I1 : (⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
I2 :
  (⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) ≤
    ⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)
I : (⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) < r
⊢ ∃ y, y ∈ range (optimalGHInjl X Y) ∧ dist (optimalGHInjr X Y z) y ≤ r
case refine'_2.intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
z : Y
I1 : (⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
I2 :
  (⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) ≤
    ⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)
⊢ ∃ y, y ∈ range (optimalGHInjl X Y) ∧ dist (optimalGHInjr X Y z) y ≤ r
have I : (⨅ x, optimalGHDist X Y (inl x, inr z)) < r := lt_of_le_of_lt I2 I1
case refine'_2.intro.intro.intro.intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
z : Y
I1 : (⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
I2 :
  (⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) ≤
    ⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)
I : (⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) < r
z' : X
hr' : (fun x => ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) z' < r
⊢ ∃ y, y ∈ range (optimalGHInjl X Y) ∧ dist (optimalGHInjr X Y z) y ≤ r
case refine'_2.intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
z : Y
I1 : (⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
I2 :
  (⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) ≤
    ⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)
I : (⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) < r
⊢ ∃ y, y ∈ range (optimalGHInjl X Y) ∧ dist (optimalGHInjr X Y z) y ≤ r
rcases exists_lt_of_csInf_lt (range_nonempty _) I with ⟨r', ⟨z', rfl⟩, hr'⟩
case refine'_2.intro.intro.intro.intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
z : Y
I1 : (⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
I2 :
  (⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) ≤
    ⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)
I : (⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) < r
z' : X
hr' : (fun x => ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) z' < r
⊢ dist (optimalGHInjr X Y z) (optimalGHInjl X Y z') < r
case refine'_2.intro.intro.intro.intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
z : Y
I1 : (⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
I2 :
  (⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) ≤
    ⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)
I : (⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) < r
z' : X
hr' : (fun x => ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) z' < r
⊢ ∃ y, y ∈ range (optimalGHInjl X Y) ∧ dist (optimalGHInjr X Y z) y ≤ r
refine' ⟨optimalGHInjl X Y z', mem_range_self _, le_of_lt _⟩
no goals
case refine'_2.intro.intro.intro.intro
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
z : Y
I1 : (⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
I2 :
  (⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) ≤
    ⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)
I : (⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) < r
z' : X
hr' : (fun x => ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr z)) z' < r
⊢ dist (optimalGHInjr X Y z) (optimalGHInjl X Y z') < r
rwa [dist_comm]
no goals
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
f : GromovHausdorff.Cb X Y
h : f ∈ GromovHausdorff.candidatesB X Y
r : ℝ
hr : HD (GromovHausdorff.optimalGHDist X Y) < r
A : ∀ (x : OptimalGHCoupling X Y), x ∈ range (optimalGHInjl X Y) → ∃ y, y ∈ range (optimalGHInjr X Y) ∧ dist x y ≤ r
z : Y
I1 : (⨆ (y : Y), ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y)) < r
⊢ BddAbove (range fun y => ⨅ (x : X), ↑(GromovHausdorff.optimalGHDist X Y) (inl x, inr y))
simpa using HD_bound_aux2 _ 0