/-- The red and the blue arrows in ![this diagram](https://i.imgur.com/q6X1GJ9.png) commute. -/
@[simp, reassoc]
theorem snd_invApp_t_app (i j k : D.J) (U : Opens (pullback (D.f i j) (D.f i k)).carrier) :
    (π₂⁻¹ i, j, k) U ≫ (D.t k i).c.app _ =
      (D.t' k i j).c.app _ ≫
        (π₁⁻¹ k, j, i) (unop _) ≫
          (D.V (k, i)).presheaf.map (eqToHom (D.snd_invApp_t_app' i j k U).choose.symm) := by
  have e := (D.snd_invApp_t_app' i j k U).choose_spec
  replace e := reassoc_of% e
  rw [← e]
  

Proof state:
C : Type u
inst✝ : Category.{v, u} C
D : GlueData C
i j k : D.J
U : Opens ↑↑(pullback (f D.toGlueData i j) (f D.toGlueData i k))
e :
  ∀ {Z : C}
    (h :
      (V D.toGlueData (k, i)).presheaf.obj
          (op
            ((IsOpenImmersion.openFunctor (_ : IsOpenImmersion pullback.fst)).obj
              { carrier := ⇑(t' D.toGlueData k i j).base ⁻¹' ↑(op U).unop,
                is_open' := (_ : IsOpen (⇑(t' D.toGlueData k i j).base ⁻¹' ↑(op U).unop)) })) ⟶
        Z),
    IsOpenImmersion.invApp (_ : IsOpenImmersion pullback.snd) U ≫
        (t D.toGlueData k i).c.app (op ((IsOpenImmersion.openFunctor (_ : IsOpenImmersion pullback.snd)).obj U)) ≫
          (V D.toGlueData (k, i)).presheaf.map
              (eqToHom
                (_ :
                  (Opens.map (t D.toGlueData k i).base).op.obj
                      (op ((IsOpenImmersion.openFunctor (_ : IsOpenImmersion pullback.snd)).obj U)) =
                    op
                      ((IsOpenImmersion.openFunctor (_ : IsOpenImmersion pullback.fst)).obj
                        {
                            unop :=
                              { carrier := ⇑(t' D.toGlueData k i j).base ⁻¹' ↑(op U).unop,
                                is_open' := (_ : IsOpen (⇑(t' D.toGlueData k i j).base ⁻¹' ↑(op U).unop)) } }.unop))) ≫
            h =
      (t' D.toGlueData k i j).c.app (op U) ≫
        IsOpenImmersion.invApp (_ : IsOpenImmersion pullback.fst)
            { carrier := ⇑(t' D.toGlueData k i j).base ⁻¹' ↑(op U).unop,
              is_open' := (_ : IsOpen (⇑(t' D.toGlueData k i j).base ⁻¹' ↑(op U).unop)) } ≫
          h
⊢ IsOpenImmersion.invApp (_ : IsOpenImmersion pullback.snd) U ≫
      (t D.toGlueData k i).c.app (op ((IsOpenImmersion.openFunctor (_ : IsOpenImmersion pullback.snd)).obj U)) =
    IsOpenImmersion.invApp (_ : IsOpenImmersion pullback.snd) U ≫
      (t D.toGlueData k i).c.app (op ((IsOpenImmersion.openFunctor (_ : IsOpenImmersion pullback.snd)).obj U)) ≫
        (V D.toGlueData (k, i)).presheaf.map
            (eqToHom
              (_ :
                (Opens.map (t D.toGlueData k i).base).op.obj
                    (op ((IsOpenImmersion.openFunctor (_ : IsOpenImmersion pullback.snd)).obj U)) =
                  op
                    ((IsOpenImmersion.openFunctor (_ : IsOpenImmersion pullback.fst)).obj
                      {
                          unop :=
                            { carrier := ⇑(t' D.toGlueData k i j).base ⁻¹' ↑(op U).unop,
                              is_open' := (_ : IsOpen (⇑(t' D.toGlueData k i j).base ⁻¹' ↑(op U).unop)) } }.unop))) ≫
          (V D.toGlueData (k, i)).presheaf.map
            (eqToHom
              (_ :
                op
                    ((IsOpenImmersion.openFunctor (_ : IsOpenImmersion pullback.fst)).obj
                      {
                          unop :=
                            { carrier := ⇑(t' D.toGlueData k i j).base ⁻¹' ↑(op U).unop,
                              is_open' := (_ : IsOpen (⇑(t' D.toGlueData k i j).base ⁻¹' ↑(op U).unop)) } }.unop) =
                  (Opens.map (t D.toGlueData k i).base).op.obj
                    (op ((IsOpenImmersion.openFunctor (_ : IsOpenImmersion pullback.snd)).obj U))))

Next tactic:
simp [eqToHom_map]