Theorem: GromovHausdorff.closed_candidatesB
File: Mathlib/Topology/MetricSpace/GromovHausdorffRealized.lean

tactic: 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
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)

tactic: 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
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)

tactic: 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
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)

tactic: 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)
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)

tactic: have I5 : ∀ x, IsClosed { f : Cb X Y | f (x, x) = 0 } := fun x =>
  isClosed_eq continuous_eval_const continuous_const
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)

tactic: 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
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)

tactic: 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]
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)

tactic: rw [this]
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)

tactic: repeat'
  first
    |apply IsClosed.inter _ _
    |apply isClosed_iInter _
    |apply I1 _ _|apply I2 _ _|apply I3 _ _|apply I4 _ _ _|apply I5 _|apply I6 _ _|intro x
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)})

tactic: ext
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)}

tactic: simp only [candidatesB, candidates, mem_inter_iff, mem_iInter, mem_setOf_eq]
state_before: 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)}

tactic: first
  |apply IsClosed.inter _ _
  |apply isClosed_iInter _
  |apply I1 _ _|apply I2 _ _|apply I3 _ _|apply I4 _ _ _|apply I5 _|apply I6 _ _|intro x
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)}

tactic: apply IsClosed.inter _ _
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)}

tactic: apply isClosed_iInter _
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)}

tactic: apply I1 _ _
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)}

tactic: apply I2 _ _
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)}

tactic: apply I3 _ _
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)}

tactic: apply I4 _ _ _
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)}

tactic: apply I5 _
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)}

tactic: apply I6 _ _
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)}

tactic: intro x
state_before: X : Type u
Y : Type v
inst✝⁵ : MetricSpace X
inst✝⁴ : CompactSpace 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)}