Theorem: TopCat.Presheaf.SheafConditionPairwiseIntersections.coneEquivFunctorObj_π_app
File: Mathlib/Topology/Sheaves/SheafCondition/EqualizerProducts.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasProducts C
X : TopCat
F : Presheaf C X
ι : Type v'
U : ι → Opens ↑X
c : Cone ((diagram U).op ⋙ F)
Y Z : WalkingParallelPair
f : Y ⟶ Z
⊢ ((Functor.const WalkingParallelPair).obj c.pt).map f ≫
      (fun Z =>
          WalkingParallelPair.casesOn Z (Pi.lift fun i => c.π.app (op (single i)))
            (Pi.lift fun b => c.π.app (op (Pairwise.pair b.1 b.2))))
        Z =
    (fun Z =>
          WalkingParallelPair.casesOn Z (Pi.lift fun i => c.π.app (op (single i)))
            (Pi.lift fun b => c.π.app (op (Pairwise.pair b.1 b.2))))
        Y ≫
      (SheafConditionEqualizerProducts.diagram F U).map f
state_after: case zero.zero.id
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasProducts C
X : TopCat
F : Presheaf C X
ι : Type v'
U : ι → Opens ↑X
c : Cone ((diagram U).op ⋙ F)
⊢ ((Functor.const WalkingParallelPair).obj c.pt).map (WalkingParallelPairHom.id WalkingParallelPair.zero) ≫
      (fun Z =>
          WalkingParallelPair.casesOn Z (Pi.lift fun i => c.π.app (op (single i)))
            (Pi.lift fun b => c.π.app (op (Pairwise.pair b.1 b.2))))
        WalkingParallelPair.zero =
    (fun Z =>
          WalkingParallelPair.casesOn Z (Pi.lift fun i => c.π.app (op (single i)))
            (Pi.lift fun b => c.π.app (op (Pairwise.pair b.1 b.2))))
        WalkingParallelPair.zero ≫
      (SheafConditionEqualizerProducts.diagram F U).map (WalkingParallelPairHom.id WalkingParallelPair.zero)

case zero.one.left
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasProducts C
X : TopCat
F : Presheaf C X
ι : Type v'
U : ι → Opens ↑X
c : Cone ((diagram U).op ⋙ F)
⊢ ((Functor.const WalkingParallelPair).obj c.pt).map WalkingParallelPairHom.left ≫
      (fun Z =>
          WalkingParallelPair.casesOn Z (Pi.lift fun i => c.π.app (op (single i)))
            (Pi.lift fun b => c.π.app (op (Pairwise.pair b.1 b.2))))
        WalkingParallelPair.one =
    (fun Z =>
          WalkingParallelPair.casesOn Z (Pi.lift fun i => c.π.app (op (single i)))
            (Pi.lift fun b => c.π.app (op (Pairwise.pair b.1 b.2))))
        WalkingParallelPair.zero ≫
      (SheafConditionEqualizerProducts.diagram F U).map WalkingParallelPairHom.left

case zero.one.right
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasProducts C
X : TopCat
F : Presheaf C X
ι : Type v'
U : ι → Opens ↑X
c : Cone ((diagram U).op ⋙ F)
⊢ ((Functor.const WalkingParallelPair).obj c.pt).map WalkingParallelPairHom.right ≫
      (fun Z =>
          WalkingParallelPair.casesOn Z (Pi.lift fun i => c.π.app (op (single i)))
            (Pi.lift fun b => c.π.app (op (Pairwise.pair b.1 b.2))))
        WalkingParallelPair.one =
    (fun Z =>
          WalkingParallelPair.casesOn Z (Pi.lift fun i => c.π.app (op (single i)))
            (Pi.lift fun b => c.π.app (op (Pairwise.pair b.1 b.2))))
        WalkingParallelPair.zero ≫
      (SheafConditionEqualizerProducts.diagram F U).map WalkingParallelPairHom.right

case one.one.id
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasProducts C
X : TopCat
F : Presheaf C X
ι : Type v'
U : ι → Opens ↑X
c : Cone ((diagram U).op ⋙ F)
⊢ ((Functor.const WalkingParallelPair).obj c.pt).map (WalkingParallelPairHom.id WalkingParallelPair.one) ≫
      (fun Z =>
          WalkingParallelPair.casesOn Z (Pi.lift fun i => c.π.app (op (single i)))
            (Pi.lift fun b => c.π.app (op (Pairwise.pair b.1 b.2))))
        WalkingParallelPair.one =
    (fun Z =>
          WalkingParallelPair.casesOn Z (Pi.lift fun i => c.π.app (op (single i)))
            (Pi.lift fun b => c.π.app (op (Pairwise.pair b.1 b.2))))
        WalkingParallelPair.one ≫
      (SheafConditionEqualizerProducts.diagram F U).map (WalkingParallelPairHom.id WalkingParallelPair.one)
tactic: cases Y <;> cases Z <;> cases f