Theorem: TopCat.Sheaf.interUnionPullbackConeLift_left
File: Mathlib/Topology/Sheaves/SheafCondition/PairwiseIntersections.lean

Proof steps:
state_before: C : Type u
inst✝ : Category.{v, u} C
X : TopCat
F : Sheaf C X
U V : Opens ↑X
s : PullbackCone (F.val.map (homOfLE ⋯).op) (F.val.map (homOfLE ⋯).op)
⊢ F.interUnionPullbackConeLift U V s ≫ F.val.map (homOfLE ⋯).op = s.fst
state_after: C : Type u
inst✝ : Category.{v, u} C
X : TopCat
F : Sheaf C X
U V : Opens ↑X
s : PullbackCone (F.val.map (homOfLE ⋯).op) (F.val.map (homOfLE ⋯).op)
⊢ ⋯.some.lift
        { pt := s.pt,
          π :=
            {
              app := fun X_1 =>
                Opposite.casesOn X_1 fun unop =>
                  Pairwise.casesOn unop (fun a => ULift.casesOn a fun down => WalkingPair.casesOn down s.fst s.snd)
                    fun a a_1 =>
                    ULift.casesOn a fun down =>
                      WalkingPair.casesOn down (s.fst ≫ F.val.map (homOfLE ⋯).op) (s.snd ≫ F.val.map (homOfLE ⋯).op),
              naturality := ⋯ } } ≫
      F.val.map (eqToHom ⋯).op ≫ F.val.map (homOfLE ⋯).op =
    s.fst
tactic: erw [Category.assoc]
state_before: C : Type u
inst✝ : Category.{v, u} C
X : TopCat
F : Sheaf C X
U V : Opens ↑X
s : PullbackCone (F.val.map (homOfLE ⋯).op) (F.val.map (homOfLE ⋯).op)
⊢ ⋯.some.lift
        { pt := s.pt,
          π :=
            {
              app := fun X_1 =>
                Opposite.casesOn X_1 fun unop =>
                  Pairwise.casesOn unop (fun a => ULift.casesOn a fun down => WalkingPair.casesOn down s.fst s.snd)
                    fun a a_1 =>
                    ULift.casesOn a fun down =>
                      WalkingPair.casesOn down (s.fst ≫ F.val.map (homOfLE ⋯).op) (s.snd ≫ F.val.map (homOfLE ⋯).op),
              naturality := ⋯ } } ≫
      F.val.map (eqToHom ⋯).op ≫ F.val.map (homOfLE ⋯).op =
    s.fst
state_after: C : Type u
inst✝ : Category.{v, u} C
X : TopCat
F : Sheaf C X
U V : Opens ↑X
s : PullbackCone (F.val.map (homOfLE ⋯).op) (F.val.map (homOfLE ⋯).op)
⊢ ⋯.some.lift
        { pt := s.pt,
          π :=
            {
              app := fun X_1 =>
                Pairwise.rec (fun a => WalkingPair.rec s.fst s.snd a.down)
                  (fun a a_1 =>
                    WalkingPair.rec (s.fst ≫ F.val.map (homOfLE ⋯).op) (s.snd ≫ F.val.map (homOfLE ⋯).op) a.down)
                  (unop X_1),
              naturality := ⋯ } } ≫
      F.val.map ((eqToHom ⋯).op ≫ (homOfLE ⋯).op) =
    s.fst
tactic: simp_rw [← F.1.map_comp]
state_before: C : Type u
inst✝ : Category.{v, u} C
X : TopCat
F : Sheaf C X
U V : Opens ↑X
s : PullbackCone (F.val.map (homOfLE ⋯).op) (F.val.map (homOfLE ⋯).op)
⊢ ⋯.some.lift
        { pt := s.pt,
          π :=
            {
              app := fun X_1 =>
                Pairwise.rec (fun a => WalkingPair.rec s.fst s.snd a.down)
                  (fun a a_1 =>
                    WalkingPair.rec (s.fst ≫ F.val.map (homOfLE ⋯).op) (s.snd ≫ F.val.map (homOfLE ⋯).op) a.down)
                  (unop X_1),
              naturality := ⋯ } } ≫
      F.val.map ((eqToHom ⋯).op ≫ (homOfLE ⋯).op) =
    s.fst
state_after: no goals
tactic: exact
    (F.presheaf.isSheaf_iff_isSheafPairwiseIntersections.mp F.2 _).some.fac _ <|
      op <| Pairwise.single <| ULift.up WalkingPair.left