Theorem: TopCat.GlueData.rel_equiv
File: Mathlib/Topology/Gluing.lean

Proof steps:
state_before: D : GlueData
⊢ ∀ {x y : (i : D.J) × ↑(D.U i)}, D.Rel x y → D.Rel y x
state_after: case inl.refl
D : GlueData
a : (i : D.J) × ↑(D.U i)
⊢ D.Rel a a

case inr.intro.intro
D : GlueData
a b : (i : D.J) × ↑(D.U i)
x : ↑(D.V (a.fst, b.fst))
e₁ : (D.f a.fst b.fst) x = a.snd
e₂ : (D.f b.fst a.fst) ((D.t a.fst b.fst) x) = b.snd
⊢ D.Rel b a
tactic: rintro a b (⟨⟨⟩⟩ | ⟨x, e₁, e₂⟩)
state_before: case inl.refl
D : GlueData
a : (i : D.J) × ↑(D.U i)
⊢ D.Rel a a

case inr.intro.intro
D : GlueData
a b : (i : D.J) × ↑(D.U i)
x : ↑(D.V (a.fst, b.fst))
e₁ : (D.f a.fst b.fst) x = a.snd
e₂ : (D.f b.fst a.fst) ((D.t a.fst b.fst) x) = b.snd
⊢ D.Rel b a
state_after: no goals
tactic: exacts [Or.inl rfl, Or.inr ⟨D.t _ _ x, e₂, by erw [← e₁, D.t_inv_apply]⟩]
state_before: D : GlueData
⊢ ∀ {x y z : (i : D.J) × ↑(D.U i)}, D.Rel x y → D.Rel y z → D.Rel x z
state_after: case mk.mk.mk.inl.refl
D : GlueData
i : D.J
a : ↑(D.U i)
k : D.J
c : ↑(D.U k)
⊢ D.Rel ⟨i, a⟩ ⟨k, c⟩ → D.Rel ⟨i, a⟩ ⟨k, c⟩

case mk.mk.mk.inr.intro.intro
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f ⟨i, a⟩.fst ⟨j, b⟩.fst) x = ⟨i, a⟩.snd
e₂ : (D.f ⟨j, b⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x) = ⟨j, b⟩.snd
⊢ D.Rel ⟨j, b⟩ ⟨k, c⟩ → D.Rel ⟨i, a⟩ ⟨k, c⟩
tactic: rintro ⟨i, a⟩ ⟨j, b⟩ ⟨k, c⟩ (⟨⟨⟩⟩ | ⟨x, e₁, e₂⟩)
state_before: case mk.mk.mk.inr.intro.intro
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f ⟨i, a⟩.fst ⟨j, b⟩.fst) x = ⟨i, a⟩.snd
e₂ : (D.f ⟨j, b⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x) = ⟨j, b⟩.snd
⊢ D.Rel ⟨j, b⟩ ⟨k, c⟩ → D.Rel ⟨i, a⟩ ⟨k, c⟩
state_after: case mk.mk.mk.inr.intro.intro.inl.refl
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f ⟨i, a⟩.fst ⟨j, b⟩.fst) x = ⟨i, a⟩.snd
e₂ : (D.f ⟨j, b⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x) = ⟨j, b⟩.snd
⊢ D.Rel ⟨i, a⟩ ⟨j, b⟩

case mk.mk.mk.inr.intro.intro.inr.intro.intro
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f ⟨i, a⟩.fst ⟨j, b⟩.fst) x = ⟨i, a⟩.snd
e₂ : (D.f ⟨j, b⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x) = ⟨j, b⟩.snd
y : ↑(D.V (⟨j, b⟩.fst, ⟨k, c⟩.fst))
e₃ : (D.f ⟨j, b⟩.fst ⟨k, c⟩.fst) y = ⟨j, b⟩.snd
e₄ : (D.f ⟨k, c⟩.fst ⟨j, b⟩.fst) ((D.t ⟨j, b⟩.fst ⟨k, c⟩.fst) y) = ⟨k, c⟩.snd
⊢ D.Rel ⟨i, a⟩ ⟨k, c⟩
tactic: rintro (⟨⟨⟩⟩ | ⟨y, e₃, e₄⟩)
state_before: case mk.mk.mk.inr.intro.intro.inr.intro.intro
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f ⟨i, a⟩.fst ⟨j, b⟩.fst) x = ⟨i, a⟩.snd
e₂ : (D.f ⟨j, b⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x) = ⟨j, b⟩.snd
y : ↑(D.V (⟨j, b⟩.fst, ⟨k, c⟩.fst))
e₃ : (D.f ⟨j, b⟩.fst ⟨k, c⟩.fst) y = ⟨j, b⟩.snd
e₄ : (D.f ⟨k, c⟩.fst ⟨j, b⟩.fst) ((D.t ⟨j, b⟩.fst ⟨k, c⟩.fst) y) = ⟨k, c⟩.snd
⊢ D.Rel ⟨i, a⟩ ⟨k, c⟩
state_after: case mk.mk.mk.inr.intro.intro.inr.intro.intro
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f ⟨i, a⟩.fst ⟨j, b⟩.fst) x = ⟨i, a⟩.snd
e₂ : (D.f ⟨j, b⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x) = ⟨j, b⟩.snd
y : ↑(D.V (⟨j, b⟩.fst, ⟨k, c⟩.fst))
e₃ : (D.f ⟨j, b⟩.fst ⟨k, c⟩.fst) y = ⟨j, b⟩.snd
e₄ : (D.f ⟨k, c⟩.fst ⟨j, b⟩.fst) ((D.t ⟨j, b⟩.fst ⟨k, c⟩.fst) y) = ⟨k, c⟩.snd
z : ↑(pullback (D.f j i) (D.f j k)) :=
  (pullbackIsoProdSubtype (D.f j i) (D.f j k)).inv ⟨((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x, y), ⋯⟩
⊢ D.Rel ⟨i, a⟩ ⟨k, c⟩
tactic: let z := (pullbackIsoProdSubtype (D.f j i) (D.f j k)).inv ⟨⟨_, _⟩, e₂.trans e₃.symm⟩
state_before: case mk.mk.mk.inr.intro.intro.inr.intro.intro
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f ⟨i, a⟩.fst ⟨j, b⟩.fst) x = ⟨i, a⟩.snd
e₂ : (D.f ⟨j, b⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x) = ⟨j, b⟩.snd
y : ↑(D.V (⟨j, b⟩.fst, ⟨k, c⟩.fst))
e₃ : (D.f ⟨j, b⟩.fst ⟨k, c⟩.fst) y = ⟨j, b⟩.snd
e₄ : (D.f ⟨k, c⟩.fst ⟨j, b⟩.fst) ((D.t ⟨j, b⟩.fst ⟨k, c⟩.fst) y) = ⟨k, c⟩.snd
z : ↑(pullback (D.f j i) (D.f j k)) :=
  (pullbackIsoProdSubtype (D.f j i) (D.f j k)).inv ⟨((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x, y), ⋯⟩
⊢ D.Rel ⟨i, a⟩ ⟨k, c⟩
state_after: case mk.mk.mk.inr.intro.intro.inr.intro.intro
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f ⟨i, a⟩.fst ⟨j, b⟩.fst) x = ⟨i, a⟩.snd
e₂ : (D.f ⟨j, b⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x) = ⟨j, b⟩.snd
y : ↑(D.V (⟨j, b⟩.fst, ⟨k, c⟩.fst))
e₃ : (D.f ⟨j, b⟩.fst ⟨k, c⟩.fst) y = ⟨j, b⟩.snd
e₄ : (D.f ⟨k, c⟩.fst ⟨j, b⟩.fst) ((D.t ⟨j, b⟩.fst ⟨k, c⟩.fst) y) = ⟨k, c⟩.snd
z : ↑(pullback (D.f j i) (D.f j k)) :=
  (pullbackIsoProdSubtype (D.f j i) (D.f j k)).inv ⟨((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x, y), ⋯⟩
eq₁ : (D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z) = x
⊢ D.Rel ⟨i, a⟩ ⟨k, c⟩
tactic: have eq₁ : (D.t j i) ((pullback.fst _ _ : _ /-(D.f j k)-/ ⟶ D.V (j, i)) z) = x := by
      dsimp only [coe_of, z]
      erw [pullbackIsoProdSubtype_inv_fst_apply, D.t_inv_apply]
state_before: case mk.mk.mk.inr.intro.intro.inr.intro.intro
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f ⟨i, a⟩.fst ⟨j, b⟩.fst) x = ⟨i, a⟩.snd
e₂ : (D.f ⟨j, b⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x) = ⟨j, b⟩.snd
y : ↑(D.V (⟨j, b⟩.fst, ⟨k, c⟩.fst))
e₃ : (D.f ⟨j, b⟩.fst ⟨k, c⟩.fst) y = ⟨j, b⟩.snd
e₄ : (D.f ⟨k, c⟩.fst ⟨j, b⟩.fst) ((D.t ⟨j, b⟩.fst ⟨k, c⟩.fst) y) = ⟨k, c⟩.snd
z : ↑(pullback (D.f j i) (D.f j k)) :=
  (pullbackIsoProdSubtype (D.f j i) (D.f j k)).inv ⟨((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x, y), ⋯⟩
eq₁ : (D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z) = x
⊢ D.Rel ⟨i, a⟩ ⟨k, c⟩
state_after: case mk.mk.mk.inr.intro.intro.inr.intro.intro
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f ⟨i, a⟩.fst ⟨j, b⟩.fst) x = ⟨i, a⟩.snd
e₂ : (D.f ⟨j, b⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x) = ⟨j, b⟩.snd
y : ↑(D.V (⟨j, b⟩.fst, ⟨k, c⟩.fst))
e₃ : (D.f ⟨j, b⟩.fst ⟨k, c⟩.fst) y = ⟨j, b⟩.snd
e₄ : (D.f ⟨k, c⟩.fst ⟨j, b⟩.fst) ((D.t ⟨j, b⟩.fst ⟨k, c⟩.fst) y) = ⟨k, c⟩.snd
z : ↑(pullback (D.f j i) (D.f j k)) :=
  (pullbackIsoProdSubtype (D.f j i) (D.f j k)).inv ⟨((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x, y), ⋯⟩
eq₁ : (D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z) = x
eq₂ : (pullback.snd (D.f j i) (D.f j k)) z = y
⊢ D.Rel ⟨i, a⟩ ⟨k, c⟩
tactic: have eq₂ : (pullback.snd _ _ : _ ⟶ D.V _) z = y := pullbackIsoProdSubtype_inv_snd_apply _ _ _
state_before: case mk.mk.mk.inr.intro.intro.inr.intro.intro
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f ⟨i, a⟩.fst ⟨j, b⟩.fst) x = ⟨i, a⟩.snd
e₂ : (D.f ⟨j, b⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x) = ⟨j, b⟩.snd
y : ↑(D.V (⟨j, b⟩.fst, ⟨k, c⟩.fst))
e₃ : (D.f ⟨j, b⟩.fst ⟨k, c⟩.fst) y = ⟨j, b⟩.snd
e₄ : (D.f ⟨k, c⟩.fst ⟨j, b⟩.fst) ((D.t ⟨j, b⟩.fst ⟨k, c⟩.fst) y) = ⟨k, c⟩.snd
z : ↑(pullback (D.f j i) (D.f j k)) :=
  (pullbackIsoProdSubtype (D.f j i) (D.f j k)).inv ⟨((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x, y), ⋯⟩
eq₁ : (D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z) = x
eq₂ : (pullback.snd (D.f j i) (D.f j k)) z = y
⊢ D.Rel ⟨i, a⟩ ⟨k, c⟩
state_after: case mk.mk.mk.inr.intro.intro.inr.intro.intro
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f ⟨i, a⟩.fst ⟨j, b⟩.fst) x = ⟨i, a⟩.snd
e₂ : (D.f ⟨j, b⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x) = ⟨j, b⟩.snd
y : ↑(D.V (⟨j, b⟩.fst, ⟨k, c⟩.fst))
e₃ : (D.f ⟨j, b⟩.fst ⟨k, c⟩.fst) y = ⟨j, b⟩.snd
e₄ : (D.f ⟨k, c⟩.fst ⟨j, b⟩.fst) ((D.t ⟨j, b⟩.fst ⟨k, c⟩.fst) y) = ⟨k, c⟩.snd
z : ↑(pullback (D.f j i) (D.f j k))
eq₁ : (D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z) = x
eq₂ : (pullback.snd (D.f j i) (D.f j k)) z = y
⊢ D.Rel ⟨i, a⟩ ⟨k, c⟩
tactic: clear_value z
state_before: case mk.mk.mk.inr.intro.intro.inr.intro.intro
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f ⟨i, a⟩.fst ⟨j, b⟩.fst) x = ⟨i, a⟩.snd
e₂ : (D.f ⟨j, b⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x) = ⟨j, b⟩.snd
y : ↑(D.V (⟨j, b⟩.fst, ⟨k, c⟩.fst))
e₃ : (D.f ⟨j, b⟩.fst ⟨k, c⟩.fst) y = ⟨j, b⟩.snd
e₄ : (D.f ⟨k, c⟩.fst ⟨j, b⟩.fst) ((D.t ⟨j, b⟩.fst ⟨k, c⟩.fst) y) = ⟨k, c⟩.snd
z : ↑(pullback (D.f j i) (D.f j k))
eq₁ : (D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z) = x
eq₂ : (pullback.snd (D.f j i) (D.f j k)) z = y
⊢ D.Rel ⟨i, a⟩ ⟨k, c⟩
state_after: case mk.mk.mk.inr.intro.intro.inr.intro.intro.h
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f ⟨i, a⟩.fst ⟨j, b⟩.fst) x = ⟨i, a⟩.snd
e₂ : (D.f ⟨j, b⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x) = ⟨j, b⟩.snd
y : ↑(D.V (⟨j, b⟩.fst, ⟨k, c⟩.fst))
e₃ : (D.f ⟨j, b⟩.fst ⟨k, c⟩.fst) y = ⟨j, b⟩.snd
e₄ : (D.f ⟨k, c⟩.fst ⟨j, b⟩.fst) ((D.t ⟨j, b⟩.fst ⟨k, c⟩.fst) y) = ⟨k, c⟩.snd
z : ↑(pullback (D.f j i) (D.f j k))
eq₁ : (D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z) = x
eq₂ : (pullback.snd (D.f j i) (D.f j k)) z = y
⊢ ∃ x,
    (D.f ⟨i, a⟩.fst ⟨k, c⟩.fst) x = ⟨i, a⟩.snd ∧
      (D.f ⟨k, c⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨k, c⟩.fst) x) = ⟨k, c⟩.snd
tactic: right
state_before: case mk.mk.mk.inr.intro.intro.inr.intro.intro.h
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f ⟨i, a⟩.fst ⟨j, b⟩.fst) x = ⟨i, a⟩.snd
e₂ : (D.f ⟨j, b⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x) = ⟨j, b⟩.snd
y : ↑(D.V (⟨j, b⟩.fst, ⟨k, c⟩.fst))
e₃ : (D.f ⟨j, b⟩.fst ⟨k, c⟩.fst) y = ⟨j, b⟩.snd
e₄ : (D.f ⟨k, c⟩.fst ⟨j, b⟩.fst) ((D.t ⟨j, b⟩.fst ⟨k, c⟩.fst) y) = ⟨k, c⟩.snd
z : ↑(pullback (D.f j i) (D.f j k))
eq₁ : (D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z) = x
eq₂ : (pullback.snd (D.f j i) (D.f j k)) z = y
⊢ ∃ x,
    (D.f ⟨i, a⟩.fst ⟨k, c⟩.fst) x = ⟨i, a⟩.snd ∧
      (D.f ⟨k, c⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨k, c⟩.fst) x) = ⟨k, c⟩.snd
state_after: case h
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f ⟨i, a⟩.fst ⟨j, b⟩.fst) x = ⟨i, a⟩.snd
e₂ : (D.f ⟨j, b⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x) = ⟨j, b⟩.snd
y : ↑(D.V (⟨j, b⟩.fst, ⟨k, c⟩.fst))
e₃ : (D.f ⟨j, b⟩.fst ⟨k, c⟩.fst) y = ⟨j, b⟩.snd
e₄ : (D.f ⟨k, c⟩.fst ⟨j, b⟩.fst) ((D.t ⟨j, b⟩.fst ⟨k, c⟩.fst) y) = ⟨k, c⟩.snd
z : ↑(pullback (D.f j i) (D.f j k))
eq₁ : (D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z) = x
eq₂ : (pullback.snd (D.f j i) (D.f j k)) z = y
⊢ (D.f ⟨i, a⟩.fst ⟨k, c⟩.fst) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z)) = ⟨i, a⟩.snd ∧
    (D.f ⟨k, c⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨k, c⟩.fst) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z))) =
      ⟨k, c⟩.snd
tactic: use (pullback.fst _ _ : _ ⟶ D.V (i, k)) (D.t' _ _ _ z)
state_before: case h
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f ⟨i, a⟩.fst ⟨j, b⟩.fst) x = ⟨i, a⟩.snd
e₂ : (D.f ⟨j, b⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨j, b⟩.fst) x) = ⟨j, b⟩.snd
y : ↑(D.V (⟨j, b⟩.fst, ⟨k, c⟩.fst))
e₃ : (D.f ⟨j, b⟩.fst ⟨k, c⟩.fst) y = ⟨j, b⟩.snd
e₄ : (D.f ⟨k, c⟩.fst ⟨j, b⟩.fst) ((D.t ⟨j, b⟩.fst ⟨k, c⟩.fst) y) = ⟨k, c⟩.snd
z : ↑(pullback (D.f j i) (D.f j k))
eq₁ : (D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z) = x
eq₂ : (pullback.snd (D.f j i) (D.f j k)) z = y
⊢ (D.f ⟨i, a⟩.fst ⟨k, c⟩.fst) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z)) = ⟨i, a⟩.snd ∧
    (D.f ⟨k, c⟩.fst ⟨i, a⟩.fst) ((D.t ⟨i, a⟩.fst ⟨k, c⟩.fst) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z))) =
      ⟨k, c⟩.snd
state_after: case h
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f i j) x = a
e₂ : (D.f j i) ((D.t i j) x) = b
y : ↑(D.V (⟨j, b⟩.fst, ⟨k, c⟩.fst))
e₃ : (D.f j k) y = b
e₄ : (D.f k j) ((D.t j k) y) = c
z : ↑(pullback (D.f j i) (D.f j k))
eq₁ : (D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z) = x
eq₂ : (pullback.snd (D.f j i) (D.f j k)) z = y
⊢ (D.f i k) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z)) = a ∧
    (D.f k i) ((D.t i k) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z))) = c
tactic: dsimp only at *
state_before: case h
D : GlueData
i : D.J
a : ↑(D.U i)
j : D.J
b : ↑(D.U j)
k : D.J
c : ↑(D.U k)
x : ↑(D.V (⟨i, a⟩.fst, ⟨j, b⟩.fst))
e₁ : (D.f i j) x = a
e₂ : (D.f j i) ((D.t i j) x) = b
y : ↑(D.V (⟨j, b⟩.fst, ⟨k, c⟩.fst))
e₃ : (D.f j k) y = b
e₄ : (D.f k j) ((D.t j k) y) = c
z : ↑(pullback (D.f j i) (D.f j k))
eq₁ : (D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z) = x
eq₂ : (pullback.snd (D.f j i) (D.f j k)) z = y
⊢ (D.f i k) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z)) = a ∧
    (D.f k i) ((D.t i k) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z))) = c
state_after: case h
D : GlueData
i j k : D.J
z : ↑(pullback (D.f j i) (D.f j k))
e₂ :
  (D.f j i) ((D.t i j) ((D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z))) =
    (D.f j k) ((pullback.snd (D.f j i) (D.f j k)) z)
⊢ (D.f i k) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z)) =
      (D.f i j) ((D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z)) ∧
    (D.f k i) ((D.t i k) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z))) =
      (D.f k j) ((D.t j k) ((pullback.snd (D.f j i) (D.f j k)) z))
tactic: substs eq₁ eq₂ e₁ e₃ e₄
state_before: case h
D : GlueData
i j k : D.J
z : ↑(pullback (D.f j i) (D.f j k))
e₂ :
  (D.f j i) ((D.t i j) ((D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z))) =
    (D.f j k) ((pullback.snd (D.f j i) (D.f j k)) z)
⊢ (D.f i k) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z)) =
      (D.f i j) ((D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z)) ∧
    (D.f k i) ((D.t i k) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z))) =
      (D.f k j) ((D.t j k) ((pullback.snd (D.f j i) (D.f j k)) z))
state_after: case h
D : GlueData
i j k : D.J
z : ↑(pullback (D.f j i) (D.f j k))
e₂ :
  (D.f j i) ((D.t i j) ((D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z))) =
    (D.f j k) ((pullback.snd (D.f j i) (D.f j k)) z)
h₁ : D.t' j i k ≫ pullback.fst (D.f i k) (D.f i j) ≫ D.f i k = pullback.fst (D.f j i) (D.f j k) ≫ D.t j i ≫ D.f i j
⊢ (D.f i k) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z)) =
      (D.f i j) ((D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z)) ∧
    (D.f k i) ((D.t i k) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z))) =
      (D.f k j) ((D.t j k) ((pullback.snd (D.f j i) (D.f j k)) z))
tactic: have h₁ : D.t' j i k ≫ pullback.fst _ _ ≫ D.f i k = pullback.fst _ _ ≫ D.t j i ≫ D.f i j := by
      rw [← 𝖣.t_fac_assoc]; congr 1; exact pullback.condition
state_before: case h
D : GlueData
i j k : D.J
z : ↑(pullback (D.f j i) (D.f j k))
e₂ :
  (D.f j i) ((D.t i j) ((D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z))) =
    (D.f j k) ((pullback.snd (D.f j i) (D.f j k)) z)
h₁ : D.t' j i k ≫ pullback.fst (D.f i k) (D.f i j) ≫ D.f i k = pullback.fst (D.f j i) (D.f j k) ≫ D.t j i ≫ D.f i j
⊢ (D.f i k) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z)) =
      (D.f i j) ((D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z)) ∧
    (D.f k i) ((D.t i k) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z))) =
      (D.f k j) ((D.t j k) ((pullback.snd (D.f j i) (D.f j k)) z))
state_after: case h
D : GlueData
i j k : D.J
z : ↑(pullback (D.f j i) (D.f j k))
e₂ :
  (D.f j i) ((D.t i j) ((D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z))) =
    (D.f j k) ((pullback.snd (D.f j i) (D.f j k)) z)
h₁ : D.t' j i k ≫ pullback.fst (D.f i k) (D.f i j) ≫ D.f i k = pullback.fst (D.f j i) (D.f j k) ≫ D.t j i ≫ D.f i j
h₂ :
  D.t' j i k ≫ pullback.fst (D.f i k) (D.f i j) ≫ D.t i k ≫ D.f k i =
    pullback.snd (D.f j i) (D.f j k) ≫ D.t j k ≫ D.f k j
⊢ (D.f i k) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z)) =
      (D.f i j) ((D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z)) ∧
    (D.f k i) ((D.t i k) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z))) =
      (D.f k j) ((D.t j k) ((pullback.snd (D.f j i) (D.f j k)) z))
tactic: have h₂ : D.t' j i k ≫ pullback.fst _ _ ≫ D.t i k ≫ D.f k i =
        pullback.snd _ _ ≫ D.t j k ≫ D.f k j := by
      rw [← 𝖣.t_fac_assoc]
      apply @Epi.left_cancellation _ _ _ _ (D.t' k j i)
      rw [𝖣.cocycle_assoc, 𝖣.t_fac_assoc, 𝖣.t_inv_assoc]
      exact pullback.condition.symm
state_before: case h
D : GlueData
i j k : D.J
z : ↑(pullback (D.f j i) (D.f j k))
e₂ :
  (D.f j i) ((D.t i j) ((D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z))) =
    (D.f j k) ((pullback.snd (D.f j i) (D.f j k)) z)
h₁ : D.t' j i k ≫ pullback.fst (D.f i k) (D.f i j) ≫ D.f i k = pullback.fst (D.f j i) (D.f j k) ≫ D.t j i ≫ D.f i j
h₂ :
  D.t' j i k ≫ pullback.fst (D.f i k) (D.f i j) ≫ D.t i k ≫ D.f k i =
    pullback.snd (D.f j i) (D.f j k) ≫ D.t j k ≫ D.f k j
⊢ (D.f i k) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z)) =
      (D.f i j) ((D.t j i) ((pullback.fst (D.f j i) (D.f j k)) z)) ∧
    (D.f k i) ((D.t i k) ((pullback.fst (D.f i k) (D.f i j)) ((D.t' j i k) z))) =
      (D.f k j) ((D.t j k) ((pullback.snd (D.f j i) (D.f j k)) z))
state_after: no goals
tactic: exact ⟨ContinuousMap.congr_fun h₁ z, ContinuousMap.congr_fun h₂ z⟩