[GOAL]
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
⊢ 1 = 2 * 0 + 1 + 2 * 0
[PROOFSTEP]
simp
[GOAL]
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
⊢ 2 * 0 + 1 + 2 * 0 ≤ 2 * diam univ + 1 + 2 * diam univ
[PROOFSTEP]
gcongr
[GOAL]
case h₁.bc.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
⊢ 0 ≤ diam univ
[PROOFSTEP]
positivity
[GOAL]
case h₂.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
⊢ 0 ≤ diam univ
[PROOFSTEP]
positivity
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ diam univ = diam (range inl ∪ range inr)
[PROOFSTEP]
rw [range_inl_union_range_inr]
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ diam (range inl) + dist (inl default) (inr default) + diam (range inr) =
    diam univ + (dist default default + 1 + dist default default) + diam univ
[PROOFSTEP]
rw [isometry_inl.diam_range, isometry_inr.diam_range]
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ diam univ + dist (inl default) (inr default) + diam univ =
    diam univ + (dist default default + 1 + dist default default) + diam univ
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Type ?u.18344
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Dist ?m.19041
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Inhabited ?m.19041
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Inhabited ?m.19041
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Type ?u.19756
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Dist ?m.20453
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Inhabited ?m.20453
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Inhabited ?m.20453
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Type ?u.18344
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Dist ?m.19041
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Inhabited ?m.19041
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Inhabited ?m.19041
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Type ?u.19756
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Dist ?m.20453
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Inhabited ?m.20453
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Inhabited ?m.20453
[PROOFSTEP]
rfl
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ diam univ + (dist default default + 1 + dist default default) + diam univ = 1 * diam univ + 1 + 1 * diam univ
[PROOFSTEP]
simp
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ 1 * diam univ + 1 + 1 * diam univ ≤ 2 * diam univ + 1 + 2 * diam univ
[PROOFSTEP]
gcongr
[GOAL]
case h₁.bc.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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ 1 ≤ 2
[PROOFSTEP]
norm_num
[GOAL]
case h₂.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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ 1 ≤ 2
[PROOFSTEP]
norm_num
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ 0 ≤ f (x, y)
[PROOFSTEP]
have : 0 ≤ 2 * f (x, y) :=
  calc
    0 = f (x, x) := (candidates_refl fA).symm
    _ ≤ f (x, y) + f (y, x) := (candidates_triangle fA)
    _ = f (x, y) + f (x, y) := by rw [candidates_symm fA]
    _ = 2 * f (x, y) := by ring
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ f (x, y) + f (y, x) = f (x, y) + f (x, y)
[PROOFSTEP]
rw [candidates_symm fA]
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ f (x, y) + f (x, y) = 2 * f (x, y)
[PROOFSTEP]
ring
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
this : 0 ≤ 2 * f (x, y)
⊢ 0 ≤ f (x, y)
[PROOFSTEP]
linarith
[GOAL]
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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
fA : f ∈ candidates X Y
x y : X
⊢ dist x y = dist (inl x) (inl y)
[PROOFSTEP]
rw [@Sum.dist_eq X Y]
[GOAL]
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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
fA : f ∈ candidates X Y
x y : X
⊢ dist x y = Sum.dist (inl x) (inl y)
[PROOFSTEP]
rfl
[GOAL]
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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
fA : f ∈ candidates X Y
x y : X
⊢ dist (inl x) (inl y) = 1 * dist (inl x) (inl y)
[PROOFSTEP]
ring
[GOAL]
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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
fA : f ∈ candidates X Y
x y : X
⊢ 1 * dist (inl x) (inl y) ≤ ↑(GromovHausdorff.maxVar X Y) * dist (inl x) (inl y)
[PROOFSTEP]
gcongr
[GOAL]
case 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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
fA : f ∈ candidates X Y
x y : X
⊢ 1 ≤ ↑(GromovHausdorff.maxVar X Y)
[PROOFSTEP]
exact one_le_maxVar X Y
[GOAL]
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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
fA : f ∈ candidates X Y
x : X
y : Y
⊢ ↑(GromovHausdorff.maxVar X Y) = ↑(GromovHausdorff.maxVar X Y) * 1
[PROOFSTEP]
simp
[GOAL]
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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
fA : f ∈ candidates X Y
x : X
y : Y
⊢ ↑(GromovHausdorff.maxVar X Y) * 1 ≤ ↑(GromovHausdorff.maxVar X Y) * dist (inl x) (inr y)
[PROOFSTEP]
gcongr
[GOAL]
case 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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
fA : f ∈ candidates X Y
x : X
y : Y
⊢ 1 ≤ dist (inl x) (inr y)
[PROOFSTEP]
apply Sum.one_le_dist_inl_inr
[GOAL]
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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
fA : f ∈ candidates X Y
x : Y
y : X
⊢ ↑(GromovHausdorff.maxVar X Y) = ↑(GromovHausdorff.maxVar X Y) * 1
[PROOFSTEP]
simp
[GOAL]
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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
fA : f ∈ candidates X Y
x : Y
y : X
⊢ ↑(GromovHausdorff.maxVar X Y) * 1 ≤ ↑(GromovHausdorff.maxVar X Y) * dist (inl x) (inr y)
[PROOFSTEP]
gcongr
[GOAL]
case 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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
fA : f ∈ candidates X Y
x : Y
y : X
⊢ 1 ≤ dist (inl x) (inr y)
[PROOFSTEP]
apply Sum.one_le_dist_inl_inr
[GOAL]
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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
fA : f ∈ candidates X Y
x y : Y
⊢ dist x y = dist (inr x) (inr y)
[PROOFSTEP]
rw [@Sum.dist_eq X Y]
[GOAL]
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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
fA : f ∈ candidates X Y
x y : Y
⊢ dist x y = Sum.dist (inr x) (inr y)
[PROOFSTEP]
rfl
[GOAL]
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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
fA : f ∈ candidates X Y
x y : Y
⊢ dist (inr x) (inr y) = 1 * dist (inr x) (inr y)
[PROOFSTEP]
ring
[GOAL]
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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
fA : f ∈ candidates X Y
x y : Y
⊢ 1 * dist (inr x) (inr y) ≤ ↑(GromovHausdorff.maxVar X Y) * dist (inr x) (inr y)
[PROOFSTEP]
gcongr
[GOAL]
case 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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
fA : f ∈ candidates X Y
x y : Y
⊢ 1 ≤ ↑(GromovHausdorff.maxVar X Y)
[PROOFSTEP]
exact one_le_maxVar X Y
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ f (x, y) - f (z, t) ≤ f (x, t) + f (t, y) - f (z, t)
[PROOFSTEP]
gcongr
[GOAL]
case 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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ f (x, y) ≤ f (x, t) + f (t, y)
[PROOFSTEP]
exact candidates_triangle fA
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ f (x, t) + f (t, y) - f (z, t) ≤ f (x, z) + f (z, t) + f (t, y) - f (z, t)
[PROOFSTEP]
gcongr
[GOAL]
case h.bc
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ f (x, t) ≤ f (x, z) + f (z, t)
[PROOFSTEP]
exact candidates_triangle fA
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ f (x, z) + f (z, t) + f (t, y) - f (z, t) = f (x, z) + f (t, y)
[PROOFSTEP]
simp [sub_eq_add_neg, add_assoc]
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ f (x, z) + f (t, y) ≤ ↑(GromovHausdorff.maxVar X Y) * dist x z + ↑(GromovHausdorff.maxVar X Y) * dist t y
[PROOFSTEP]
gcongr
[GOAL]
case 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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ f (x, z) ≤ ↑(GromovHausdorff.maxVar X Y) * dist x z
[PROOFSTEP]
apply candidates_dist_bound fA
[GOAL]
case 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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ f (t, y) ≤ ↑(GromovHausdorff.maxVar X Y) * dist t y
[PROOFSTEP]
apply candidates_dist_bound fA
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ ↑(GromovHausdorff.maxVar X Y) * dist x z + ↑(GromovHausdorff.maxVar X Y) * dist t y ≤
    ↑(GromovHausdorff.maxVar X Y) * max (dist x z) (dist t y) +
      ↑(GromovHausdorff.maxVar X Y) * max (dist x z) (dist t y)
[PROOFSTEP]
gcongr
[GOAL]
case h₁.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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ dist x z ≤ max (dist x z) (dist t y)
[PROOFSTEP]
apply le_max_left
[GOAL]
case h₂.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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ dist t y ≤ max (dist x z) (dist t y)
[PROOFSTEP]
apply le_max_right
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ ↑(GromovHausdorff.maxVar X Y) * max (dist x z) (dist t y) +
      ↑(GromovHausdorff.maxVar X Y) * max (dist x z) (dist t y) =
    2 * ↑(GromovHausdorff.maxVar X Y) * max (dist x z) (dist y t)
[PROOFSTEP]
rw [dist_comm t y]
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ ↑(GromovHausdorff.maxVar X Y) * max (dist x z) (dist y t) +
      ↑(GromovHausdorff.maxVar X Y) * max (dist x z) (dist y t) =
    2 * ↑(GromovHausdorff.maxVar X Y) * max (dist x z) (dist y t)
[PROOFSTEP]
ring
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ 2 * ↑(GromovHausdorff.maxVar X Y) * max (dist x z) (dist y t) = 2 * ↑(GromovHausdorff.maxVar X Y) * dist (x, y) (z, t)
[PROOFSTEP]
rfl
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ LipschitzWith (2 * GromovHausdorff.maxVar X Y) f
[PROOFSTEP]
apply LipschitzWith.of_dist_le_mul
[GOAL]
case a
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
fA : f ∈ candidates X Y
⊢ ∀ (x y : (X ⊕ Y) × (X ⊕ Y)), dist (f x) (f y) ≤ ↑(2 * GromovHausdorff.maxVar X Y) * dist x y
[PROOFSTEP]
rintro ⟨x, y⟩ ⟨z, t⟩
[GOAL]
case a.mk.mk
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.ProdSpaceFun X Y
x✝ y✝ z✝ t✝ : X ⊕ Y
fA : f ∈ candidates X Y
x y z t : X ⊕ Y
⊢ dist (f (x, y)) (f (z, t)) ≤ ↑(2 * GromovHausdorff.maxVar X Y) * dist (x, y) (z, t)
[PROOFSTEP]
rw [Real.dist_eq, abs_sub_le_iff]
[GOAL]
case a.mk.mk
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.ProdSpaceFun X Y
x✝ y✝ z✝ t✝ : X ⊕ Y
fA : f ∈ candidates X Y
x y z t : X ⊕ Y
⊢ f (x, y) - f (z, t) ≤ ↑(2 * GromovHausdorff.maxVar X Y) * dist (x, y) (z, t) ∧
    f (z, t) - f (x, y) ≤ ↑(2 * GromovHausdorff.maxVar X Y) * dist (x, y) (z, t)
[PROOFSTEP]
use candidates_lipschitz_aux fA
[GOAL]
case right
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.ProdSpaceFun X Y
x✝ y✝ z✝ t✝ : X ⊕ Y
fA : f ∈ candidates X Y
x y z t : X ⊕ Y
⊢ f (z, t) - f (x, y) ≤ ↑(2 * GromovHausdorff.maxVar X Y) * dist (x, y) (z, t)
[PROOFSTEP]
rw [dist_comm]
[GOAL]
case right
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.ProdSpaceFun X Y
x✝ y✝ z✝ t✝ : X ⊕ Y
fA : f ∈ candidates X Y
x y z t : X ⊕ Y
⊢ f (z, t) - f (x, y) ≤ ↑(2 * GromovHausdorff.maxVar X Y) * dist (z, t) (x, y)
[PROOFSTEP]
exact candidates_lipschitz_aux fA
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ (fun p => dist p.fst p.snd) ∈ candidates X Y
[PROOFSTEP]
simp_rw [candidates, Set.mem_setOf_eq, dist_comm, dist_triangle, dist_self, maxVar_bound, forall_const, and_true]
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ (∀ (x y : X), dist (inl x) (inl y) = dist x y) ∧ ∀ (x y : Y), dist (inr x) (inr y) = dist x y
[PROOFSTEP]
exact ⟨fun x y => rfl, fun x y => rfl⟩
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ IsClosed (GromovHausdorff.candidatesB X Y)
[PROOFSTEP]
have I1 : ∀ x y, IsClosed {f : Cb X Y | f (inl x, inl y) = dist x y} := fun x y =>
  isClosed_eq continuous_eval_const continuous_const
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
⊢ IsClosed (GromovHausdorff.candidatesB X Y)
[PROOFSTEP]
have I2 : ∀ x y, IsClosed {f : Cb X Y | f (inr x, inr y) = dist x y} := fun x y =>
  isClosed_eq continuous_eval_const continuous_const
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
⊢ IsClosed (GromovHausdorff.candidatesB X Y)
[PROOFSTEP]
have I3 : ∀ x y, IsClosed {f : Cb X Y | f (x, y) = f (y, x)} := fun x y =>
  isClosed_eq continuous_eval_const continuous_eval_const
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
⊢ IsClosed (GromovHausdorff.candidatesB X Y)
[PROOFSTEP]
have I4 : ∀ x y z, IsClosed {f : Cb X Y | f (x, z) ≤ f (x, y) + f (y, z)} := fun x y z =>
  isClosed_le continuous_eval_const (continuous_eval_const.add continuous_eval_const)
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
⊢ IsClosed (GromovHausdorff.candidatesB X Y)
[PROOFSTEP]
have I5 : ∀ x, IsClosed {f : Cb X Y | f (x, x) = 0} := fun x => isClosed_eq continuous_eval_const continuous_const
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
⊢ IsClosed (GromovHausdorff.candidatesB X Y)
[PROOFSTEP]
have I6 : ∀ x y, IsClosed {f : Cb X Y | f (x, y) ≤ maxVar X Y} := fun x y =>
  isClosed_le continuous_eval_const continuous_const
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (GromovHausdorff.candidatesB X Y)
[PROOFSTEP]
have :
  candidatesB X Y =
    (((((⋂ (x) (y), {f : Cb X Y | f (@inl X Y x, @inl X Y y) = dist x y}) ∩
              ⋂ (x) (y), {f : Cb X Y | f (@inr X Y x, @inr X Y y) = dist x y}) ∩
            ⋂ (x) (y), {f : Cb X Y | f (x, y) = f (y, x)}) ∩
          ⋂ (x) (y) (z), {f : Cb X Y | f (x, z) ≤ f (x, y) + f (y, z)}) ∩
        ⋂ x, {f : Cb X Y | f (x, x) = 0}) ∩
      ⋂ (x) (y), {f : Cb X Y | f (x, y) ≤ maxVar X Y} :=
  by
  ext
  simp only [candidatesB, candidates, mem_inter_iff, mem_iInter, mem_setOf_eq]
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
ext
[GOAL]
case 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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ : GromovHausdorff.Cb X Y
⊢ x✝ ∈ GromovHausdorff.candidatesB X Y ↔
    x✝ ∈
      (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
                ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
              ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
          ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
        ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
simp only [candidatesB, candidates, mem_inter_iff, mem_iInter, mem_setOf_eq]
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (GromovHausdorff.candidatesB X Y)
[PROOFSTEP]
rw [this]
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed
    ((((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
repeat'
  first
  | apply IsClosed.inter _ _
  | apply isClosed_iInter _
  | apply I1 _ _
  | apply I2 _ _
  | apply I3 _ _
  | apply I4 _ _ _
  | apply I5 _
  | apply I6 _ _
  | intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed
    ((((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed
    ((((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
            ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
        ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
      ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
            ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
        ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
      ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed
    ((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
          ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
        ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed
    ((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
          ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
        ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed
    (((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩ ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed
    (((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩ ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed
    ((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩ ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed
    ((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩ ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X), IsClosed (⋂ (y : X), {f | ↑f (inl i, inl y) = dist i y})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X), IsClosed (⋂ (y : X), {f | ↑f (inl i, inl y) = dist i y})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X), IsClosed (⋂ (y : X), {f | ↑f (inl i, inl y) = dist i y})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X), IsClosed (⋂ (y : X), {f | ↑f (inl i, inl y) = dist i y})
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X), IsClosed (⋂ (y : X), {f | ↑f (inl i, inl y) = dist i y})
[PROOFSTEP]
apply I2 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X), IsClosed (⋂ (y : X), {f | ↑f (inl i, inl y) = dist i y})
[PROOFSTEP]
apply I3 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X), IsClosed (⋂ (y : X), {f | ↑f (inl i, inl y) = dist i y})
[PROOFSTEP]
apply I4 _ _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X), IsClosed (⋂ (y : X), {f | ↑f (inl i, inl y) = dist i y})
[PROOFSTEP]
apply I5 _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X), IsClosed (⋂ (y : X), {f | ↑f (inl i, inl y) = dist i y})
[PROOFSTEP]
apply I6 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X), IsClosed (⋂ (y : X), {f | ↑f (inl i, inl y) = dist i y})
[PROOFSTEP]
intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X
⊢ IsClosed (⋂ (y : X), {f | ↑f (inl x, inl y) = dist x y})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X
⊢ IsClosed (⋂ (y : X), {f | ↑f (inl x, inl y) = dist x y})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X
⊢ IsClosed (⋂ (y : X), {f | ↑f (inl x, inl y) = dist x y})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X
⊢ ∀ (i : X), IsClosed {f | ↑f (inl x, inl i) = dist x i}
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X
⊢ ∀ (i : X), IsClosed {f | ↑f (inl x, inl i) = dist x i}
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X
⊢ ∀ (i : X), IsClosed {f | ↑f (inl x, inl i) = dist x i}
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X
⊢ ∀ (i : X), IsClosed {f | ↑f (inl x, inl i) = dist x i}
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X
⊢ ∀ (i : X), IsClosed {f | ↑f (inl x, inl i) = dist x i}
[PROOFSTEP]
apply I2 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X
⊢ ∀ (i : X), IsClosed {f | ↑f (inl x, inl i) = dist x i}
[PROOFSTEP]
apply I3 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X
⊢ ∀ (i : X), IsClosed {f | ↑f (inl x, inl i) = dist x i}
[PROOFSTEP]
apply I4 _ _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X
⊢ ∀ (i : X), IsClosed {f | ↑f (inl x, inl i) = dist x i}
[PROOFSTEP]
apply I5 _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X
⊢ ∀ (i : X), IsClosed {f | ↑f (inl x, inl i) = dist x i}
[PROOFSTEP]
apply I6 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X
⊢ ∀ (i : X), IsClosed {f | ↑f (inl x, inl i) = dist x i}
[PROOFSTEP]
intro x
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X
⊢ IsClosed {f | ↑f (inl x✝, inl x) = dist x✝ x}
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X
⊢ IsClosed {f | ↑f (inl x✝, inl x) = dist x✝ x}
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X
⊢ IsClosed {f | ↑f (inl x✝, inl x) = dist x✝ x}
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X
⊢ IsClosed {f | ↑f (inl x✝, inl x) = dist x✝ x}
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : Y), IsClosed (⋂ (y : Y), {f | ↑f (inr i, inr y) = dist i y})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : Y), IsClosed (⋂ (y : Y), {f | ↑f (inr i, inr y) = dist i y})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : Y), IsClosed (⋂ (y : Y), {f | ↑f (inr i, inr y) = dist i y})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : Y), IsClosed (⋂ (y : Y), {f | ↑f (inr i, inr y) = dist i y})
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : Y), IsClosed (⋂ (y : Y), {f | ↑f (inr i, inr y) = dist i y})
[PROOFSTEP]
apply I2 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : Y), IsClosed (⋂ (y : Y), {f | ↑f (inr i, inr y) = dist i y})
[PROOFSTEP]
apply I3 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : Y), IsClosed (⋂ (y : Y), {f | ↑f (inr i, inr y) = dist i y})
[PROOFSTEP]
apply I4 _ _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : Y), IsClosed (⋂ (y : Y), {f | ↑f (inr i, inr y) = dist i y})
[PROOFSTEP]
apply I5 _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : Y), IsClosed (⋂ (y : Y), {f | ↑f (inr i, inr y) = dist i y})
[PROOFSTEP]
apply I6 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : Y), IsClosed (⋂ (y : Y), {f | ↑f (inr i, inr y) = dist i y})
[PROOFSTEP]
intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : Y
⊢ IsClosed (⋂ (y : Y), {f | ↑f (inr x, inr y) = dist x y})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : Y
⊢ IsClosed (⋂ (y : Y), {f | ↑f (inr x, inr y) = dist x y})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : Y
⊢ IsClosed (⋂ (y : Y), {f | ↑f (inr x, inr y) = dist x y})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : Y
⊢ ∀ (i : Y), IsClosed {f | ↑f (inr x, inr i) = dist x i}
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : Y
⊢ ∀ (i : Y), IsClosed {f | ↑f (inr x, inr i) = dist x i}
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : Y
⊢ ∀ (i : Y), IsClosed {f | ↑f (inr x, inr i) = dist x i}
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : Y
⊢ ∀ (i : Y), IsClosed {f | ↑f (inr x, inr i) = dist x i}
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : Y
⊢ ∀ (i : Y), IsClosed {f | ↑f (inr x, inr i) = dist x i}
[PROOFSTEP]
apply I2 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : Y
⊢ ∀ (i : Y), IsClosed {f | ↑f (inr x, inr i) = dist x i}
[PROOFSTEP]
apply I3 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : Y
⊢ ∀ (i : Y), IsClosed {f | ↑f (inr x, inr i) = dist x i}
[PROOFSTEP]
apply I4 _ _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : Y
⊢ ∀ (i : Y), IsClosed {f | ↑f (inr x, inr i) = dist x i}
[PROOFSTEP]
apply I5 _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : Y
⊢ ∀ (i : Y), IsClosed {f | ↑f (inr x, inr i) = dist x i}
[PROOFSTEP]
apply I6 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : Y
⊢ ∀ (i : Y), IsClosed {f | ↑f (inr x, inr i) = dist x i}
[PROOFSTEP]
intro x
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : Y
⊢ IsClosed {f | ↑f (inr x✝, inr x) = dist x✝ x}
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : Y
⊢ IsClosed {f | ↑f (inr x✝, inr x) = dist x✝ x}
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : Y
⊢ IsClosed {f | ↑f (inr x✝, inr x) = dist x✝ x}
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : Y
⊢ IsClosed {f | ↑f (inr x✝, inr x) = dist x✝ x}
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : Y
⊢ IsClosed {f | ↑f (inr x✝, inr x) = dist x✝ x}
[PROOFSTEP]
apply I2 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) = ↑f (y, i)})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) = ↑f (y, i)})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) = ↑f (y, i)})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) = ↑f (y, i)})
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) = ↑f (y, i)})
[PROOFSTEP]
apply I2 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) = ↑f (y, i)})
[PROOFSTEP]
apply I3 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) = ↑f (y, i)})
[PROOFSTEP]
apply I4 _ _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) = ↑f (y, i)})
[PROOFSTEP]
apply I5 _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) = ↑f (y, i)})
[PROOFSTEP]
apply I6 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) = ↑f (y, i)})
[PROOFSTEP]
intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) = ↑f (i, x)}
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) = ↑f (i, x)}
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) = ↑f (i, x)}
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) = ↑f (i, x)}
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) = ↑f (i, x)}
[PROOFSTEP]
apply I2 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) = ↑f (i, x)}
[PROOFSTEP]
apply I3 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) = ↑f (i, x)}
[PROOFSTEP]
apply I4 _ _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) = ↑f (i, x)}
[PROOFSTEP]
apply I5 _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) = ↑f (i, x)}
[PROOFSTEP]
apply I6 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) = ↑f (i, x)}
[PROOFSTEP]
intro x
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝, x) = ↑f (x, x✝)}
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝, x) = ↑f (x, x✝)}
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝, x) = ↑f (x, x✝)}
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝, x) = ↑f (x, x✝)}
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝, x) = ↑f (x, x✝)}
[PROOFSTEP]
apply I2 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝, x) = ↑f (x, x✝)}
[PROOFSTEP]
apply I3 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (i, z) ≤ ↑f (i, y) + ↑f (y, z)})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (i, z) ≤ ↑f (i, y) + ↑f (y, z)})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (i, z) ≤ ↑f (i, y) + ↑f (y, z)})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (i, z) ≤ ↑f (i, y) + ↑f (y, z)})
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (i, z) ≤ ↑f (i, y) + ↑f (y, z)})
[PROOFSTEP]
apply I2 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (i, z) ≤ ↑f (i, y) + ↑f (y, z)})
[PROOFSTEP]
apply I3 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (i, z) ≤ ↑f (i, y) + ↑f (y, z)})
[PROOFSTEP]
apply I4 _ _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (i, z) ≤ ↑f (i, y) + ↑f (y, z)})
[PROOFSTEP]
apply I5 _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (i, z) ≤ ↑f (i, y) + ↑f (y, z)})
[PROOFSTEP]
apply I6 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (i, z) ≤ ↑f (i, y) + ↑f (y, z)})
[PROOFSTEP]
intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ IsClosed (⋂ (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ IsClosed (⋂ (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ IsClosed (⋂ (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, i) + ↑f (i, z)})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, i) + ↑f (i, z)})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, i) + ↑f (i, z)})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, i) + ↑f (i, z)})
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, i) + ↑f (i, z)})
[PROOFSTEP]
apply I2 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, i) + ↑f (i, z)})
[PROOFSTEP]
apply I3 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, i) + ↑f (i, z)})
[PROOFSTEP]
apply I4 _ _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, i) + ↑f (i, z)})
[PROOFSTEP]
apply I5 _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, i) + ↑f (i, z)})
[PROOFSTEP]
apply I6 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, i) + ↑f (i, z)})
[PROOFSTEP]
intro x
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed (⋂ (z : X ⊕ Y), {f | ↑f (x✝, z) ≤ ↑f (x✝, x) + ↑f (x, z)})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed (⋂ (z : X ⊕ Y), {f | ↑f (x✝, z) ≤ ↑f (x✝, x) + ↑f (x, z)})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed (⋂ (z : X ⊕ Y), {f | ↑f (x✝, z) ≤ ↑f (x✝, x) + ↑f (x, z)})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x✝, i) ≤ ↑f (x✝, x) + ↑f (x, i)}
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x✝, i) ≤ ↑f (x✝, x) + ↑f (x, i)}
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x✝, i) ≤ ↑f (x✝, x) + ↑f (x, i)}
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x✝, i) ≤ ↑f (x✝, x) + ↑f (x, i)}
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x✝, i) ≤ ↑f (x✝, x) + ↑f (x, i)}
[PROOFSTEP]
apply I2 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x✝, i) ≤ ↑f (x✝, x) + ↑f (x, i)}
[PROOFSTEP]
apply I3 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x✝, i) ≤ ↑f (x✝, x) + ↑f (x, i)}
[PROOFSTEP]
apply I4 _ _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x✝, i) ≤ ↑f (x✝, x) + ↑f (x, i)}
[PROOFSTEP]
apply I5 _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x✝, i) ≤ ↑f (x✝, x) + ↑f (x, i)}
[PROOFSTEP]
apply I6 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x✝, i) ≤ ↑f (x✝, x) + ↑f (x, i)}
[PROOFSTEP]
intro x
[GOAL]
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.ProdSpaceFun X Y
x✝² y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝¹ x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝¹, x) ≤ ↑f (x✝¹, x✝) + ↑f (x✝, x)}
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝² y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝¹ x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝¹, x) ≤ ↑f (x✝¹, x✝) + ↑f (x✝, x)}
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝² y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝¹ x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝¹, x) ≤ ↑f (x✝¹, x✝) + ↑f (x✝, x)}
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝² y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝¹ x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝¹, x) ≤ ↑f (x✝¹, x✝) + ↑f (x✝, x)}
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝² y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝¹ x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝¹, x) ≤ ↑f (x✝¹, x✝) + ↑f (x✝, x)}
[PROOFSTEP]
apply I2 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝² y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝¹ x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝¹, x) ≤ ↑f (x✝¹, x✝) + ↑f (x✝, x)}
[PROOFSTEP]
apply I3 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝² y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝¹ x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝¹, x) ≤ ↑f (x✝¹, x✝) + ↑f (x✝, x)}
[PROOFSTEP]
apply I4 _ _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (i, i) = 0}
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (i, i) = 0}
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (i, i) = 0}
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (i, i) = 0}
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (i, i) = 0}
[PROOFSTEP]
apply I2 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (i, i) = 0}
[PROOFSTEP]
apply I3 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (i, i) = 0}
[PROOFSTEP]
apply I4 _ _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (i, i) = 0}
[PROOFSTEP]
apply I5 _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (i, i) = 0}
[PROOFSTEP]
apply I6 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (i, i) = 0}
[PROOFSTEP]
intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ IsClosed {f | ↑f (x, x) = 0}
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ IsClosed {f | ↑f (x, x) = 0}
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ IsClosed {f | ↑f (x, x) = 0}
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ IsClosed {f | ↑f (x, x) = 0}
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ IsClosed {f | ↑f (x, x) = 0}
[PROOFSTEP]
apply I2 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ IsClosed {f | ↑f (x, x) = 0}
[PROOFSTEP]
apply I3 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ IsClosed {f | ↑f (x, x) = 0}
[PROOFSTEP]
apply I4 _ _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ IsClosed {f | ↑f (x, x) = 0}
[PROOFSTEP]
apply I5 _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ IsClosed (⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
apply I2 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
apply I3 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
apply I4 _ _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
apply I5 _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
apply I6 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
⊢ ∀ (i : X ⊕ Y), IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (i, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ IsClosed (⋂ (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)})
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
apply I2 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
apply I3 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
apply I4 _ _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
apply I5 _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
apply I6 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x : X ⊕ Y
⊢ ∀ (i : X ⊕ Y), IsClosed {f | ↑f (x, i) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
intro x
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝, x) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
first
| apply IsClosed.inter _ _
| apply isClosed_iInter _
| apply I1 _ _
| apply I2 _ _
| apply I3 _ _
| apply I4 _ _ _
| apply I5 _
| apply I6 _ _
| intro x
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝, x) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
apply IsClosed.inter _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝, x) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
apply isClosed_iInter _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝, x) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
apply I1 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝, x) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
apply I2 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝, x) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
apply I3 _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝, x) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
apply I4 _ _ _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝, x) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
apply I5 _
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y z t : X ⊕ Y
I1 : ∀ (x y : X), IsClosed {f | ↑f (inl x, inl y) = dist x y}
I2 : ∀ (x y : Y), IsClosed {f | ↑f (inr x, inr y) = dist x y}
I3 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) = ↑f (y, x)}
I4 : ∀ (x y z : X ⊕ Y), IsClosed {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}
I5 : ∀ (x : X ⊕ Y), IsClosed {f | ↑f (x, x) = 0}
I6 : ∀ (x y : X ⊕ Y), IsClosed {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
this :
  GromovHausdorff.candidatesB X Y =
    (((((⋂ (x : X) (y : X), {f | ↑f (inl x, inl y) = dist x y}) ∩
              ⋂ (x : Y) (y : Y), {f | ↑f (inr x, inr y) = dist x y}) ∩
            ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) = ↑f (y, x)}) ∩
          ⋂ (x : X ⊕ Y) (y : X ⊕ Y) (z : X ⊕ Y), {f | ↑f (x, z) ≤ ↑f (x, y) + ↑f (y, z)}) ∩
        ⋂ (x : X ⊕ Y), {f | ↑f (x, x) = 0}) ∩
      ⋂ (x : X ⊕ Y) (y : X ⊕ Y), {f | ↑f (x, y) ≤ ↑(GromovHausdorff.maxVar X Y)}
x✝ x : X ⊕ Y
⊢ IsClosed {f | ↑f (x✝, x) ≤ ↑(GromovHausdorff.maxVar X Y)}
[PROOFSTEP]
apply I6 _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ IsCompact (GromovHausdorff.candidatesB X Y)
[PROOFSTEP]
refine' arzela_ascoli₂ (Icc 0 (maxVar X Y) : Set ℝ) isCompact_Icc (candidatesB X Y) closed_candidatesB _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ ∀ (f : (X ⊕ Y) × (X ⊕ Y) →ᵇ ℝ) (x : (X ⊕ Y) × (X ⊕ Y)),
    f ∈ GromovHausdorff.candidatesB X Y → ↑f x ∈ Icc 0 ↑(GromovHausdorff.maxVar X Y)
[PROOFSTEP]
rintro f ⟨x1, x2⟩ hf
[GOAL]
case refine'_1.mk
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f : (X ⊕ Y) × (X ⊕ Y) →ᵇ ℝ
x1 x2 : X ⊕ Y
hf : f ∈ GromovHausdorff.candidatesB X Y
⊢ ↑f (x1, x2) ∈ Icc 0 ↑(GromovHausdorff.maxVar X Y)
[PROOFSTEP]
simp only [Set.mem_Icc]
[GOAL]
case refine'_1.mk
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f : (X ⊕ Y) × (X ⊕ Y) →ᵇ ℝ
x1 x2 : X ⊕ Y
hf : f ∈ GromovHausdorff.candidatesB X Y
⊢ 0 ≤ ↑f (x1, x2) ∧ ↑f (x1, x2) ≤ ↑(GromovHausdorff.maxVar X Y)
[PROOFSTEP]
exact ⟨candidates_nonneg hf, candidates_le_maxVar hf⟩
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Equicontinuous fun x => ↑↑x
[PROOFSTEP]
refine' equicontinuous_of_continuity_modulus (fun t => 2 * maxVar X Y * t) _ _ _
[GOAL]
case refine'_2.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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ Tendsto (fun t => 2 * ↑(GromovHausdorff.maxVar X Y) * t) (𝓝 0) (𝓝 0)
[PROOFSTEP]
have : Tendsto (fun t : ℝ => 2 * (maxVar X Y : ℝ) * t) (𝓝 0) (𝓝 (2 * maxVar X Y * 0)) :=
  tendsto_const_nhds.mul tendsto_id
[GOAL]
case refine'_2.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.ProdSpaceFun X Y
x y z t : X ⊕ Y
this : Tendsto (fun t => 2 * ↑(GromovHausdorff.maxVar X Y) * t) (𝓝 0) (𝓝 (2 * ↑(GromovHausdorff.maxVar X Y) * 0))
⊢ Tendsto (fun t => 2 * ↑(GromovHausdorff.maxVar X Y) * t) (𝓝 0) (𝓝 0)
[PROOFSTEP]
simpa using this
[GOAL]
case refine'_2.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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ ∀ (x y : (X ⊕ Y) × (X ⊕ Y)) (i : ↑(GromovHausdorff.candidatesB X Y)),
    dist (↑↑i x) (↑↑i y) ≤ (fun t => 2 * ↑(GromovHausdorff.maxVar X Y) * t) (dist x y)
[PROOFSTEP]
rintro x y ⟨f, hf⟩
[GOAL]
case refine'_2.refine'_2.mk
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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
x y : (X ⊕ Y) × (X ⊕ Y)
f : (X ⊕ Y) × (X ⊕ Y) →ᵇ ℝ
hf : f ∈ GromovHausdorff.candidatesB X Y
⊢ dist (↑↑{ val := f, property := hf } x) (↑↑{ val := f, property := hf } y) ≤
    (fun t => 2 * ↑(GromovHausdorff.maxVar X Y) * t) (dist x y)
[PROOFSTEP]
exact (candidates_lipschitz hf).dist_le_mul _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f : GromovHausdorff.Cb X Y
C : ℝ
⊢ BddAbove (range fun x => ⨅ (y : Y), ↑f (inl x, inr y) + C)
[PROOFSTEP]
rcases(Real.bounded_iff_bddBelow_bddAbove.1 f.bounded_range).2 with ⟨Cf, hCf⟩
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f : GromovHausdorff.Cb X Y
C Cf : ℝ
hCf : Cf ∈ upperBounds (range ↑f)
⊢ BddAbove (range fun x => ⨅ (y : Y), ↑f (inl x, inr y) + C)
[PROOFSTEP]
refine' ⟨Cf + C, forall_range_iff.2 fun x => _⟩
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
f : GromovHausdorff.Cb X Y
C Cf : ℝ
hCf : Cf ∈ upperBounds (range ↑f)
x : X
⊢ ⨅ (y : Y), ↑f (inl x, inr y) + C ≤ Cf + C
[PROOFSTEP]
calc
  ⨅ y, f (inl x, inr y) + C ≤ f (inl x, inr default) + C := ciInf_le (HD_below_aux1 C) default
  _ ≤ Cf + C := add_le_add ((fun x => hCf (mem_range_self x)) _) le_rfl
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f : GromovHausdorff.Cb X Y
C : ℝ
⊢ BddAbove (range fun y => ⨅ (x : X), ↑f (inl x, inr y) + C)
[PROOFSTEP]
rcases(Real.bounded_iff_bddBelow_bddAbove.1 f.bounded_range).2 with ⟨Cf, hCf⟩
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f : GromovHausdorff.Cb X Y
C Cf : ℝ
hCf : Cf ∈ upperBounds (range ↑f)
⊢ BddAbove (range fun y => ⨅ (x : X), ↑f (inl x, inr y) + C)
[PROOFSTEP]
refine' ⟨Cf + C, forall_range_iff.2 fun y => _⟩
[GOAL]
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.ProdSpaceFun X Y
x y✝ z t : X ⊕ Y
f : GromovHausdorff.Cb X Y
C Cf : ℝ
hCf : Cf ∈ upperBounds (range ↑f)
y : Y
⊢ ⨅ (x : X), ↑f (inl x, inr y) + C ≤ Cf + C
[PROOFSTEP]
calc
  ⨅ x, f (inl x, inr y) + C ≤ f (inl default, inr y) + C := ciInf_le (HD_below_aux2 C) default
  _ ≤ Cf + C := add_le_add ((fun x => hCf (mem_range_self x)) _) le_rfl
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
⊢ HD (candidatesBDist X Y) ≤ diam univ + 1 + diam univ
[PROOFSTEP]
refine' max_le (ciSup_le fun x => _) (ciSup_le fun y => _)
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
x : X
⊢ ⨅ (y : Y), ↑(candidatesBDist X Y) (inl x, inr y) ≤ diam univ + 1 + diam univ
[PROOFSTEP]
have A : ⨅ y, candidatesBDist X Y (inl x, inr y) ≤ candidatesBDist X Y (inl x, inr default) :=
  ciInf_le (by simpa using HD_below_aux1 0) default
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
x : X
⊢ BddBelow (range fun y => ↑(candidatesBDist X Y) (inl x, inr y))
[PROOFSTEP]
simpa using HD_below_aux1 0
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
x : X
A : ⨅ (y : Y), ↑(candidatesBDist X Y) (inl x, inr y) ≤ ↑(candidatesBDist X Y) (inl x, inr default)
⊢ ⨅ (y : Y), ↑(candidatesBDist X Y) (inl x, inr y) ≤ diam univ + 1 + diam univ
[PROOFSTEP]
have B : dist (inl x) (inr default) ≤ diam (univ : Set X) + 1 + diam (univ : Set Y) :=
  calc
    dist (inl x) (inr (default : Y)) = dist x (default : X) + 1 + dist default default := rfl
    _ ≤ diam (univ : Set X) + 1 + diam (univ : Set Y) := by
      gcongr <;> exact dist_le_diam_of_mem bounded_of_compactSpace (mem_univ _) (mem_univ _)
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
x : X
A : ⨅ (y : Y), ↑(candidatesBDist X Y) (inl x, inr y) ≤ ↑(candidatesBDist X Y) (inl x, inr default)
⊢ dist x default + 1 + dist default default ≤ diam univ + 1 + diam univ
[PROOFSTEP]
gcongr
[GOAL]
case h₁.bc
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
x : X
A : ⨅ (y : Y), ↑(candidatesBDist X Y) (inl x, inr y) ≤ ↑(candidatesBDist X Y) (inl x, inr default)
⊢ dist x default ≤ diam univ
[PROOFSTEP]
exact dist_le_diam_of_mem bounded_of_compactSpace (mem_univ _) (mem_univ _)
[GOAL]
case 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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
x : X
A : ⨅ (y : Y), ↑(candidatesBDist X Y) (inl x, inr y) ≤ ↑(candidatesBDist X Y) (inl x, inr default)
⊢ dist default default ≤ diam univ
[PROOFSTEP]
exact dist_le_diam_of_mem bounded_of_compactSpace (mem_univ _) (mem_univ _)
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
x : X
A : ⨅ (y : Y), ↑(candidatesBDist X Y) (inl x, inr y) ≤ ↑(candidatesBDist X Y) (inl x, inr default)
B : dist (inl x) (inr default) ≤ diam univ + 1 + diam univ
⊢ ⨅ (y : Y), ↑(candidatesBDist X Y) (inl x, inr y) ≤ diam univ + 1 + diam univ
[PROOFSTEP]
exact le_trans A B
[GOAL]
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.ProdSpaceFun X Y
x y✝ z t : X ⊕ Y
y : Y
⊢ ⨅ (x : X), ↑(candidatesBDist X Y) (inl x, inr y) ≤ diam univ + 1 + diam univ
[PROOFSTEP]
have A : ⨅ x, candidatesBDist X Y (inl x, inr y) ≤ candidatesBDist X Y (inl default, inr y) :=
  ciInf_le (by simpa using HD_below_aux2 0) default
[GOAL]
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.ProdSpaceFun X Y
x y✝ z t : X ⊕ Y
y : Y
⊢ BddBelow (range fun x => ↑(candidatesBDist X Y) (inl x, inr y))
[PROOFSTEP]
simpa using HD_below_aux2 0
[GOAL]
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.ProdSpaceFun X Y
x y✝ z t : X ⊕ Y
y : Y
A : ⨅ (x : X), ↑(candidatesBDist X Y) (inl x, inr y) ≤ ↑(candidatesBDist X Y) (inl default, inr y)
⊢ ⨅ (x : X), ↑(candidatesBDist X Y) (inl x, inr y) ≤ diam univ + 1 + diam univ
[PROOFSTEP]
have B : dist (inl default) (inr y) ≤ diam (univ : Set X) + 1 + diam (univ : Set Y) :=
  calc
    dist (inl (default : X)) (inr y) = dist default default + 1 + dist default y := rfl
    _ ≤ diam (univ : Set X) + 1 + diam (univ : Set Y) := by
      gcongr <;> exact dist_le_diam_of_mem bounded_of_compactSpace (mem_univ _) (mem_univ _)
[GOAL]
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.ProdSpaceFun X Y
x y✝ z t : X ⊕ Y
y : Y
A : ⨅ (x : X), ↑(candidatesBDist X Y) (inl x, inr y) ≤ ↑(candidatesBDist X Y) (inl default, inr y)
⊢ dist default default + 1 + dist default y ≤ diam univ + 1 + diam univ
[PROOFSTEP]
gcongr
[GOAL]
case h₁.bc
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.ProdSpaceFun X Y
x y✝ z t : X ⊕ Y
y : Y
A : ⨅ (x : X), ↑(candidatesBDist X Y) (inl x, inr y) ≤ ↑(candidatesBDist X Y) (inl default, inr y)
⊢ dist default default ≤ diam univ
[PROOFSTEP]
exact dist_le_diam_of_mem bounded_of_compactSpace (mem_univ _) (mem_univ _)
[GOAL]
case 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.ProdSpaceFun X Y
x y✝ z t : X ⊕ Y
y : Y
A : ⨅ (x : X), ↑(candidatesBDist X Y) (inl x, inr y) ≤ ↑(candidatesBDist X Y) (inl default, inr y)
⊢ dist default y ≤ diam univ
[PROOFSTEP]
exact dist_le_diam_of_mem bounded_of_compactSpace (mem_univ _) (mem_univ _)
[GOAL]
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.ProdSpaceFun X Y
x y✝ z t : X ⊕ Y
y : Y
A : ⨅ (x : X), ↑(candidatesBDist X Y) (inl x, inr y) ≤ ↑(candidatesBDist X Y) (inl default, inr y)
B : dist (inl default) (inr y) ≤ diam univ + 1 + diam univ
⊢ ⨅ (x : X), ↑(candidatesBDist X Y) (inl x, inr y) ≤ diam univ + 1 + diam univ
[PROOFSTEP]
exact le_trans A B
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
⊢ ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ (⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
rcases(Real.bounded_iff_bddBelow_bddAbove.1 g.bounded_range).1 with ⟨cg, hcg⟩
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
⊢ ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ (⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
have Hcg : ∀ x, cg ≤ g x := fun x => hcg (mem_range_self x)
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
⊢ ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ (⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
rcases(Real.bounded_iff_bddBelow_bddAbove.1 f.bounded_range).1 with ⟨cf, hcf⟩
[GOAL]
case 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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
⊢ ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ (⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
have Hcf : ∀ x, cf ≤ f x := fun x =>
  hcf
    (mem_range_self x)
      -- prove the inequality but with `dist f g` inside, by using inequalities comparing
        -- iSup to iSup and iInf to iInf
[GOAL]
case 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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
⊢ ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ (⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
have Z : (⨆ x, ⨅ y, f (inl x, inr y)) ≤ ⨆ x, ⨅ y, g (inl x, inr y) + dist f g :=
  ciSup_mono (HD_bound_aux1 _ (dist f g)) fun x =>
    ciInf_mono ⟨cf, forall_range_iff.2 fun i => Hcf _⟩ fun y => coe_le_coe_add_dist
[GOAL]
case 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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ ⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
⊢ ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ (⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
have E1 : ∀ x, (⨅ y, g (inl x, inr y)) + dist f g = ⨅ y, g (inl x, inr y) + dist f g :=
  by
  intro x
  refine' Monotone.map_ciInf_of_continuousAt (continuousAt_id.add continuousAt_const) _ _
  · intro x y hx
    simpa
  · show BddBelow (range fun y : Y => g (inl x, inr y))
    exact ⟨cg, forall_range_iff.2 fun i => Hcg _⟩
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ ⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
⊢ ∀ (x : X), (⨅ (y : Y), ↑g (inl x, inr y)) + dist f g = ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
[PROOFSTEP]
intro x
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ ⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
x : X
⊢ (⨅ (y : Y), ↑g (inl x, inr y)) + dist f g = ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
[PROOFSTEP]
refine' Monotone.map_ciInf_of_continuousAt (continuousAt_id.add continuousAt_const) _ _
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ ⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
x : X
⊢ Monotone fun x => id x + dist f g
[PROOFSTEP]
intro x y hx
[GOAL]
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.ProdSpaceFun X Y
x✝¹ y✝ z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ ⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
x✝ : X
x y : ℝ
hx : x ≤ y
⊢ (fun x => id x + dist f g) x ≤ (fun x => id x + dist f g) y
[PROOFSTEP]
simpa
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ ⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
x : X
⊢ BddBelow (range fun y => ↑g (inl x, inr y))
[PROOFSTEP]
show BddBelow (range fun y : Y => g (inl x, inr y))
[GOAL]
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.ProdSpaceFun X Y
x✝ y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ ⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
x : X
⊢ BddBelow (range fun y => ↑g (inl x, inr y))
[PROOFSTEP]
exact ⟨cg, forall_range_iff.2 fun i => Hcg _⟩
[GOAL]
case 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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ ⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
E1 : ∀ (x : X), (⨅ (y : Y), ↑g (inl x, inr y)) + dist f g = ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
⊢ ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ (⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
have E2 : (⨆ x, ⨅ y, g (inl x, inr y)) + dist f g = ⨆ x, (⨅ y, g (inl x, inr y)) + dist f g :=
  by
  refine' Monotone.map_ciSup_of_continuousAt (continuousAt_id.add continuousAt_const) _ _
  · intro x y hx
    simpa
  ·
    simpa using
      HD_bound_aux1 _
        0
          -- deduce the result from the above two steps
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ ⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
E1 : ∀ (x : X), (⨅ (y : Y), ↑g (inl x, inr y)) + dist f g = ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
⊢ (⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y)) + dist f g = ⨆ (x : X), (⨅ (y : Y), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
refine' Monotone.map_ciSup_of_continuousAt (continuousAt_id.add continuousAt_const) _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ ⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
E1 : ∀ (x : X), (⨅ (y : Y), ↑g (inl x, inr y)) + dist f g = ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
⊢ Monotone fun x => id x + dist f g
[PROOFSTEP]
intro x y hx
[GOAL]
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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ ⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
E1 : ∀ (x : X), (⨅ (y : Y), ↑g (inl x, inr y)) + dist f g = ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
x y : ℝ
hx : x ≤ y
⊢ (fun x => id x + dist f g) x ≤ (fun x => id x + dist f g) y
[PROOFSTEP]
simpa
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ ⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
E1 : ∀ (x : X), (⨅ (y : Y), ↑g (inl x, inr y)) + dist f g = ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
⊢ BddAbove (range fun x => ⨅ (y : Y), ↑g (inl x, inr y))
[PROOFSTEP]
simpa using
  HD_bound_aux1 _
    0
      -- deduce the result from the above two steps
[GOAL]
case 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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ ⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
E1 : ∀ (x : X), (⨅ (y : Y), ↑g (inl x, inr y)) + dist f g = ⨅ (y : Y), ↑g (inl x, inr y) + dist f g
E2 : (⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y)) + dist f g = ⨆ (x : X), (⨅ (y : Y), ↑g (inl x, inr y)) + dist f g
⊢ ⨆ (x : X), ⨅ (y : Y), ↑f (inl x, inr y) ≤ (⨆ (x : X), ⨅ (y : Y), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
simpa [E2, E1, Function.comp]
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
⊢ ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ (⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
rcases(Real.bounded_iff_bddBelow_bddAbove.1 g.bounded_range).1 with ⟨cg, hcg⟩
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
⊢ ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ (⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
have Hcg : ∀ x, cg ≤ g x := fun x => hcg (mem_range_self x)
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
⊢ ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ (⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
rcases(Real.bounded_iff_bddBelow_bddAbove.1 f.bounded_range).1 with ⟨cf, hcf⟩
[GOAL]
case 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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
⊢ ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ (⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
have Hcf : ∀ x, cf ≤ f x := fun x =>
  hcf
    (mem_range_self x)
      -- prove the inequality but with `dist f g` inside, by using inequalities comparing
        -- iSup to iSup and iInf to iInf
[GOAL]
case 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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
⊢ ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ (⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
have Z : (⨆ y, ⨅ x, f (inl x, inr y)) ≤ ⨆ y, ⨅ x, g (inl x, inr y) + dist f g :=
  ciSup_mono (HD_bound_aux2 _ (dist f g)) fun y =>
    ciInf_mono ⟨cf, forall_range_iff.2 fun i => Hcf _⟩ fun y => coe_le_coe_add_dist
[GOAL]
case 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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ ⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y) + dist f g
⊢ ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ (⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
have E1 : ∀ y, (⨅ x, g (inl x, inr y)) + dist f g = ⨅ x, g (inl x, inr y) + dist f g :=
  by
  intro y
  refine' Monotone.map_ciInf_of_continuousAt (continuousAt_id.add continuousAt_const) _ _
  · intro x y hx
    simpa
  · show BddBelow (range fun x : X => g (inl x, inr y))
    exact ⟨cg, forall_range_iff.2 fun i => Hcg _⟩
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ ⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y) + dist f g
⊢ ∀ (y : Y), (⨅ (x : X), ↑g (inl x, inr y)) + dist f g = ⨅ (x : X), ↑g (inl x, inr y) + dist f g
[PROOFSTEP]
intro y
[GOAL]
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.ProdSpaceFun X Y
x y✝ z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ ⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y) + dist f g
y : Y
⊢ (⨅ (x : X), ↑g (inl x, inr y)) + dist f g = ⨅ (x : X), ↑g (inl x, inr y) + dist f g
[PROOFSTEP]
refine' Monotone.map_ciInf_of_continuousAt (continuousAt_id.add continuousAt_const) _ _
[GOAL]
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.ProdSpaceFun X Y
x y✝ z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ ⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y) + dist f g
y : Y
⊢ Monotone fun x => id x + dist f g
[PROOFSTEP]
intro x y hx
[GOAL]
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.ProdSpaceFun X Y
x✝ y✝¹ z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ ⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y) + dist f g
y✝ : Y
x y : ℝ
hx : x ≤ y
⊢ (fun x => id x + dist f g) x ≤ (fun x => id x + dist f g) y
[PROOFSTEP]
simpa
[GOAL]
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.ProdSpaceFun X Y
x y✝ z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ ⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y) + dist f g
y : Y
⊢ BddBelow (range fun x => ↑g (inl x, inr y))
[PROOFSTEP]
show BddBelow (range fun x : X => g (inl x, inr y))
[GOAL]
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.ProdSpaceFun X Y
x y✝ z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ ⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y) + dist f g
y : Y
⊢ BddBelow (range fun x => ↑g (inl x, inr y))
[PROOFSTEP]
exact ⟨cg, forall_range_iff.2 fun i => Hcg _⟩
[GOAL]
case 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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ ⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y) + dist f g
E1 : ∀ (y : Y), (⨅ (x : X), ↑g (inl x, inr y)) + dist f g = ⨅ (x : X), ↑g (inl x, inr y) + dist f g
⊢ ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ (⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
have E2 : (⨆ y, ⨅ x, g (inl x, inr y)) + dist f g = ⨆ y, (⨅ x, g (inl x, inr y)) + dist f g :=
  by
  refine' Monotone.map_ciSup_of_continuousAt (continuousAt_id.add continuousAt_const) _ _
  · intro x y hx
    simpa
  ·
    simpa using
      HD_bound_aux2 _
        0
          -- deduce the result from the above two steps
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ ⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y) + dist f g
E1 : ∀ (y : Y), (⨅ (x : X), ↑g (inl x, inr y)) + dist f g = ⨅ (x : X), ↑g (inl x, inr y) + dist f g
⊢ (⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y)) + dist f g = ⨆ (y : Y), (⨅ (x : X), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
refine' Monotone.map_ciSup_of_continuousAt (continuousAt_id.add continuousAt_const) _ _
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ ⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y) + dist f g
E1 : ∀ (y : Y), (⨅ (x : X), ↑g (inl x, inr y)) + dist f g = ⨅ (x : X), ↑g (inl x, inr y) + dist f g
⊢ Monotone fun x => id x + dist f g
[PROOFSTEP]
intro x y hx
[GOAL]
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.ProdSpaceFun X Y
x✝ y✝ z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ ⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y) + dist f g
E1 : ∀ (y : Y), (⨅ (x : X), ↑g (inl x, inr y)) + dist f g = ⨅ (x : X), ↑g (inl x, inr y) + dist f g
x y : ℝ
hx : x ≤ y
⊢ (fun x => id x + dist f g) x ≤ (fun x => id x + dist f g) y
[PROOFSTEP]
simpa
[GOAL]
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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ ⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y) + dist f g
E1 : ∀ (y : Y), (⨅ (x : X), ↑g (inl x, inr y)) + dist f g = ⨅ (x : X), ↑g (inl x, inr y) + dist f g
⊢ BddAbove (range fun y => ⨅ (x : X), ↑g (inl x, inr y))
[PROOFSTEP]
simpa using
  HD_bound_aux2 _
    0
      -- deduce the result from the above two steps
[GOAL]
case 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.ProdSpaceFun X Y
x y z t : X ⊕ Y
f g : GromovHausdorff.Cb X Y
cg : ℝ
hcg : cg ∈ lowerBounds (range ↑g)
Hcg : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cg ≤ ↑g x
cf : ℝ
hcf : cf ∈ lowerBounds (range ↑f)
Hcf : ∀ (x : (X ⊕ Y) × (X ⊕ Y)), cf ≤ ↑f x
Z : ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ ⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y) + dist f g
E1 : ∀ (y : Y), (⨅ (x : X), ↑g (inl x, inr y)) + dist f g = ⨅ (x : X), ↑g (inl x, inr y) + dist f g
E2 : (⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y)) + dist f g = ⨆ (y : Y), (⨅ (x : X), ↑g (inl x, inr y)) + dist f g
⊢ ⨆ (y : Y), ⨅ (x : X), ↑f (inl x, inr y) ≤ (⨆ (y : Y), ⨅ (x : X), ↑g (inl x, inr y)) + dist f g
[PROOFSTEP]
simpa [E2, E1]
[GOAL]
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
⊢ GromovHausdorff.optimalGHDist X Y ∈ GromovHausdorff.candidatesB X Y
[PROOFSTEP]
cases Classical.choose_spec (exists_minimizer X Y)
[GOAL]
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
left✝ :
  choose
      (_ :
        ∃ f,
          f ∈ GromovHausdorff.candidatesB X Y ∧
            ∀ (g : GromovHausdorff.Cb X Y), g ∈ GromovHausdorff.candidatesB X Y → HD f ≤ HD g) ∈
    GromovHausdorff.candidatesB X Y
right✝ :
  ∀ (g : GromovHausdorff.Cb X Y),
    g ∈ GromovHausdorff.candidatesB X Y →
      HD
          (choose
            (_ :
              ∃ f,
                f ∈ GromovHausdorff.candidatesB X Y ∧
                  ∀ (g : GromovHausdorff.Cb X Y), g ∈ GromovHausdorff.candidatesB X Y → HD f ≤ HD g)) ≤
        HD g
⊢ GromovHausdorff.optimalGHDist X Y ∈ GromovHausdorff.candidatesB X Y
[PROOFSTEP]
assumption
[GOAL]
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
x y : X ⊕ Y
⊢ (fun x y =>
        ↑{ val := ↑(GromovHausdorff.optimalGHDist X Y) (x, y),
            property := (_ : 0 ≤ ↑(GromovHausdorff.optimalGHDist X Y) (x, y)) })
      x y =
    ENNReal.ofReal (dist x y)
[PROOFSTEP]
simp only
[GOAL]
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
x y : X ⊕ Y
⊢ ↑{ val := ↑(GromovHausdorff.optimalGHDist X Y) (x, y),
        property := (_ : 0 ≤ ↑(GromovHausdorff.optimalGHDist X Y) (x, y)) } =
    ENNReal.ofReal (↑(GromovHausdorff.optimalGHDist X Y) (x, y))
[PROOFSTEP]
congr
[GOAL]
case e_a.e_val
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
x y : X ⊕ Y
⊢ ↑(GromovHausdorff.optimalGHDist X Y) (x, y) = max (↑(GromovHausdorff.optimalGHDist X Y) (x, y)) 0
[PROOFSTEP]
simp only [max, left_eq_sup]
[GOAL]
case e_a.e_val
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
x y : X ⊕ Y
⊢ 0 ≤ ↑(GromovHausdorff.optimalGHDist X Y) (x, y)
[PROOFSTEP]
exact candidates_nonneg (optimalGHDist_mem_candidatesB X Y)
[GOAL]
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
⊢ MetricSpace (OptimalGHCoupling X Y)
[PROOFSTEP]
unfold OptimalGHCoupling
[GOAL]
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
⊢ MetricSpace (UniformSpace.SeparationQuotient (X ⊕ Y))
[PROOFSTEP]
infer_instance
[GOAL]
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
⊢ IsCompact univ
[PROOFSTEP]
rw [← range_quotient_mk']
[GOAL]
X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace X
inst✝³ : Nonempty X
inst✝² : MetricSpace Y
inst✝¹ : CompactSpace Y
inst✝ : Nonempty Y
⊢ IsCompact (range Quotient.mk')
[PROOFSTEP]
exact
  isCompact_range
    (continuous_sum_dom.2 ⟨(isometry_optimalGHInjl X Y).continuous, (isometry_optimalGHInjr X Y).continuous⟩)
[GOAL]
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
[PROOFSTEP]
refine' le_trans (le_of_forall_le_of_dense fun r hr => _) (HD_optimalGHDist_le X Y f h)
[GOAL]
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
[PROOFSTEP]
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'⟩
[GOAL]
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
[PROOFSTEP]
rintro _ ⟨z, rfl⟩
[GOAL]
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
[PROOFSTEP]
have I1 : (⨆ x, ⨅ y, optimalGHDist X Y (inl x, inr y)) < r := lt_of_le_of_lt (le_max_left _ _) hr
[GOAL]
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
[PROOFSTEP]
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 _)
[GOAL]
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))
[PROOFSTEP]
simpa using HD_bound_aux1 _ 0
[GOAL]
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
[PROOFSTEP]
have I : ⨅ y, optimalGHDist X Y (inl z, inr y) < r := lt_of_le_of_lt I2 I1
[GOAL]
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
[PROOFSTEP]
rcases exists_lt_of_csInf_lt (range_nonempty _) I with ⟨r', ⟨z', rfl⟩, hr'⟩
[GOAL]
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
[PROOFSTEP]
exact ⟨optimalGHInjr X Y z', mem_range_self _, le_of_lt hr'⟩
[GOAL]
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
[PROOFSTEP]
refine' hausdorffDist_le_of_mem_dist _ A _
[GOAL]
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
[PROOFSTEP]
inhabit X
[GOAL]
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
[PROOFSTEP]
rcases A _ (mem_range_self default) with ⟨y, -, hy⟩
[GOAL]
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
[PROOFSTEP]
exact le_trans dist_nonneg hy
[GOAL]
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
[PROOFSTEP]
rintro _ ⟨z, rfl⟩
[GOAL]
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
[PROOFSTEP]
have I1 : (⨆ y, ⨅ x, optimalGHDist X Y (inl x, inr y)) < r := lt_of_le_of_lt (le_max_right _ _) hr
[GOAL]
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
[PROOFSTEP]
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 _)
[GOAL]
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))
[PROOFSTEP]
simpa using HD_bound_aux2 _ 0
[GOAL]
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
[PROOFSTEP]
have I : ⨅ x, optimalGHDist X Y (inl x, inr z) < r := lt_of_le_of_lt I2 I1
[GOAL]
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
[PROOFSTEP]
rcases exists_lt_of_csInf_lt (range_nonempty _) I with ⟨r', ⟨z', rfl⟩, hr'⟩
[GOAL]
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
[PROOFSTEP]
refine' ⟨optimalGHInjl X Y z', mem_range_self _, le_of_lt _⟩
[GOAL]
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
[PROOFSTEP]
rwa [dist_comm]