Theorem: CategoryTheory.GrothendieckTopology.plusCompIso_whiskerLeft
File: Mathlib/CategoryTheory/Sites/CompatiblePlus.lean

tactic: ext X
state_before: C : Type u
inst✝¹² : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝¹¹ : Category D
E : Type w₂
inst✝¹⁰ : Category E
F✝ : D ⥤ E
inst✝⁹ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝⁸ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝⁷ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F✝
P✝ : Cᵒᵖ ⥤ D
inst✝⁶ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝⁵ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ E
inst✝⁴ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F✝
F G : D ⥤ E
η : F ⟶ G
P : Cᵒᵖ ⥤ D
inst✝³ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F
inst✝² : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ G
inst✝ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) G
⊢ whiskerLeft (plusObj J P) η ≫ (plusCompIso J G P).hom = (plusCompIso J F P).hom ≫ plusMap J (whiskerLeft P η)

tactic: apply (isColimitOfPreserves F (colimit.isColimit (J.diagram P X.unop))).hom_ext
state_before: case w.h
C : Type u
inst✝¹² : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝¹¹ : Category D
E : Type w₂
inst✝¹⁰ : Category E
F✝ : D ⥤ E
inst✝⁹ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝⁸ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝⁷ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F✝
P✝ : Cᵒᵖ ⥤ D
inst✝⁶ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝⁵ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ E
inst✝⁴ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F✝
F G : D ⥤ E
η : F ⟶ G
P : Cᵒᵖ ⥤ D
inst✝³ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F
inst✝² : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ G
inst✝ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) G
X : Cᵒᵖ
⊢ (whiskerLeft (plusObj J P) η ≫ (plusCompIso J G P).hom).app X =
    ((plusCompIso J F P).hom ≫ plusMap J (whiskerLeft P η)).app X

tactic: intro W
state_before: case w.h
C : Type u
inst✝¹² : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝¹¹ : Category D
E : Type w₂
inst✝¹⁰ : Category E
F✝ : D ⥤ E
inst✝⁹ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝⁸ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝⁷ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F✝
P✝ : Cᵒᵖ ⥤ D
inst✝⁶ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝⁵ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ E
inst✝⁴ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F✝
F G : D ⥤ E
η : F ⟶ G
P : Cᵒᵖ ⥤ D
inst✝³ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F
inst✝² : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ G
inst✝ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) G
X : Cᵒᵖ
⊢ ∀ (j : (Cover J X.unop)ᵒᵖ),
    (F.mapCocone (colimit.cocone (diagram J P X.unop))).ι.app j ≫
        (whiskerLeft (plusObj J P) η ≫ (plusCompIso J G P).hom).app X =
      (F.mapCocone (colimit.cocone (diagram J P X.unop))).ι.app j ≫
        ((plusCompIso J F P).hom ≫ plusMap J (whiskerLeft P η)).app X

tactic: dsimp [plusObj, plusMap]
state_before: case w.h
C : Type u
inst✝¹² : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝¹¹ : Category D
E : Type w₂
inst✝¹⁰ : Category E
F✝ : D ⥤ E
inst✝⁹ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝⁸ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝⁷ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F✝
P✝ : Cᵒᵖ ⥤ D
inst✝⁶ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝⁵ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ E
inst✝⁴ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F✝
F G : D ⥤ E
η : F ⟶ G
P : Cᵒᵖ ⥤ D
inst✝³ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F
inst✝² : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ G
inst✝ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) G
X : Cᵒᵖ
W : (Cover J X.unop)ᵒᵖ
⊢ (F.mapCocone (colimit.cocone (diagram J P X.unop))).ι.app W ≫
      (whiskerLeft (plusObj J P) η ≫ (plusCompIso J G P).hom).app X =
    (F.mapCocone (colimit.cocone (diagram J P X.unop))).ι.app W ≫
      ((plusCompIso J F P).hom ≫ plusMap J (whiskerLeft P η)).app X

tactic: simp only [ι_plusCompIso_hom, ι_colimMap, whiskerLeft_app, ι_plusCompIso_hom_assoc,
  NatTrans.naturality_assoc, GrothendieckTopology.diagramNatTrans_app]
state_before: case w.h
C : Type u
inst✝¹² : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝¹¹ : Category D
E : Type w₂
inst✝¹⁰ : Category E
F✝ : D ⥤ E
inst✝⁹ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝⁸ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝⁷ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F✝
P✝ : Cᵒᵖ ⥤ D
inst✝⁶ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝⁵ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ E
inst✝⁴ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F✝
F G : D ⥤ E
η : F ⟶ G
P : Cᵒᵖ ⥤ D
inst✝³ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F
inst✝² : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ G
inst✝ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) G
X : Cᵒᵖ
W : (Cover J X.unop)ᵒᵖ
⊢ F.map (colimit.ι (diagram J P X.unop) W) ≫ η.app (colimit (diagram J P X.unop)) ≫ (plusCompIso J G P).hom.app X =
    F.map (colimit.ι (diagram J P X.unop) W) ≫
      (plusCompIso J F P).hom.app X ≫ colimMap (diagramNatTrans J (whiskerLeft P η) X.unop)

tactic: simp only [← Category.assoc]
state_before: case w.h
C : Type u
inst✝¹² : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝¹¹ : Category D
E : Type w₂
inst✝¹⁰ : Category E
F✝ : D ⥤ E
inst✝⁹ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝⁸ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝⁷ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F✝
P✝ : Cᵒᵖ ⥤ D
inst✝⁶ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝⁵ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ E
inst✝⁴ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F✝
F G : D ⥤ E
η : F ⟶ G
P : Cᵒᵖ ⥤ D
inst✝³ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F
inst✝² : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ G
inst✝ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) G
X : Cᵒᵖ
W : (Cover J X.unop)ᵒᵖ
⊢ η.app (multiequalizer (Cover.index W.unop P)) ≫
      (diagramCompIso J G P X.unop).hom.app W ≫ colimit.ι (diagram J (P ⋙ G) X.unop) W =
    (diagramCompIso J F P X.unop).hom.app W ≫
      Multiequalizer.lift (Cover.index W.unop (P ⋙ G)) ((diagram J (P ⋙ F) X.unop).obj W)
          (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ η.app (P.obj i.Y.op))
          (_ :
            ∀ (b : (Cover.index W.unop (P ⋙ G)).R),
              (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ η.app (P.obj i.Y.op))
                    (MulticospanIndex.fstTo (Cover.index W.unop (P ⋙ G)) b) ≫
                  MulticospanIndex.fst (Cover.index W.unop (P ⋙ G)) b =
                (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ η.app (P.obj i.Y.op))
                    (MulticospanIndex.sndTo (Cover.index W.unop (P ⋙ G)) b) ≫
                  MulticospanIndex.snd (Cover.index W.unop (P ⋙ G)) b) ≫
        colimit.ι (diagram J (P ⋙ G) X.unop) W

tactic: congr 1
state_before: case w.h
C : Type u
inst✝¹² : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝¹¹ : Category D
E : Type w₂
inst✝¹⁰ : Category E
F✝ : D ⥤ E
inst✝⁹ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝⁸ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝⁷ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F✝
P✝ : Cᵒᵖ ⥤ D
inst✝⁶ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝⁵ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ E
inst✝⁴ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F✝
F G : D ⥤ E
η : F ⟶ G
P : Cᵒᵖ ⥤ D
inst✝³ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F
inst✝² : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ G
inst✝ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) G
X : Cᵒᵖ
W : (Cover J X.unop)ᵒᵖ
⊢ (η.app (multiequalizer (Cover.index W.unop P)) ≫ (diagramCompIso J G P X.unop).hom.app W) ≫
      colimit.ι (diagram J (P ⋙ G) X.unop) W =
    ((diagramCompIso J F P X.unop).hom.app W ≫
        Multiequalizer.lift (Cover.index W.unop (P ⋙ G)) ((diagram J (P ⋙ F) X.unop).obj W)
          (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ η.app (P.obj i.Y.op))
          (_ :
            ∀ (b : (Cover.index W.unop (P ⋙ G)).R),
              (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ η.app (P.obj i.Y.op))
                    (MulticospanIndex.fstTo (Cover.index W.unop (P ⋙ G)) b) ≫
                  MulticospanIndex.fst (Cover.index W.unop (P ⋙ G)) b =
                (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ η.app (P.obj i.Y.op))
                    (MulticospanIndex.sndTo (Cover.index W.unop (P ⋙ G)) b) ≫
                  MulticospanIndex.snd (Cover.index W.unop (P ⋙ G)) b)) ≫
      colimit.ι (diagram J (P ⋙ G) X.unop) W

tactic: apply Multiequalizer.hom_ext
state_before: case w.h.e_a
C : Type u
inst✝¹² : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝¹¹ : Category D
E : Type w₂
inst✝¹⁰ : Category E
F✝ : D ⥤ E
inst✝⁹ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝⁸ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝⁷ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F✝
P✝ : Cᵒᵖ ⥤ D
inst✝⁶ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝⁵ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ E
inst✝⁴ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F✝
F G : D ⥤ E
η : F ⟶ G
P : Cᵒᵖ ⥤ D
inst✝³ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F
inst✝² : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ G
inst✝ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) G
X : Cᵒᵖ
W : (Cover J X.unop)ᵒᵖ
⊢ η.app (multiequalizer (Cover.index W.unop P)) ≫ (diagramCompIso J G P X.unop).hom.app W =
    (diagramCompIso J F P X.unop).hom.app W ≫
      Multiequalizer.lift (Cover.index W.unop (P ⋙ G)) ((diagram J (P ⋙ F) X.unop).obj W)
        (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ η.app (P.obj i.Y.op))
        (_ :
          ∀ (b : (Cover.index W.unop (P ⋙ G)).R),
            (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ η.app (P.obj i.Y.op))
                  (MulticospanIndex.fstTo (Cover.index W.unop (P ⋙ G)) b) ≫
                MulticospanIndex.fst (Cover.index W.unop (P ⋙ G)) b =
              (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ η.app (P.obj i.Y.op))
                  (MulticospanIndex.sndTo (Cover.index W.unop (P ⋙ G)) b) ≫
                MulticospanIndex.snd (Cover.index W.unop (P ⋙ G)) b)

tactic: intro a
state_before: case w.h.e_a.h
C : Type u
inst✝¹² : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝¹¹ : Category D
E : Type w₂
inst✝¹⁰ : Category E
F✝ : D ⥤ E
inst✝⁹ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝⁸ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝⁷ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F✝
P✝ : Cᵒᵖ ⥤ D
inst✝⁶ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝⁵ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ E
inst✝⁴ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F✝
F G : D ⥤ E
η : F ⟶ G
P : Cᵒᵖ ⥤ D
inst✝³ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F
inst✝² : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ G
inst✝ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) G
X : Cᵒᵖ
W : (Cover J X.unop)ᵒᵖ
⊢ ∀ (a : (Cover.index W.unop (P ⋙ G)).L),
    (η.app (multiequalizer (Cover.index W.unop P)) ≫ (diagramCompIso J G P X.unop).hom.app W) ≫
        Multiequalizer.ι (Cover.index W.unop (P ⋙ G)) a =
      ((diagramCompIso J F P X.unop).hom.app W ≫
          Multiequalizer.lift (Cover.index W.unop (P ⋙ G)) ((diagram J (P ⋙ F) X.unop).obj W)
            (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ η.app (P.obj i.Y.op))
            (_ :
              ∀ (b : (Cover.index W.unop (P ⋙ G)).R),
                (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ η.app (P.obj i.Y.op))
                      (MulticospanIndex.fstTo (Cover.index W.unop (P ⋙ G)) b) ≫
                    MulticospanIndex.fst (Cover.index W.unop (P ⋙ G)) b =
                  (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ η.app (P.obj i.Y.op))
                      (MulticospanIndex.sndTo (Cover.index W.unop (P ⋙ G)) b) ≫
                    MulticospanIndex.snd (Cover.index W.unop (P ⋙ G)) b)) ≫
        Multiequalizer.ι (Cover.index W.unop (P ⋙ G)) a

tactic: dsimp
state_before: case w.h.e_a.h
C : Type u
inst✝¹² : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝¹¹ : Category D
E : Type w₂
inst✝¹⁰ : Category E
F✝ : D ⥤ E
inst✝⁹ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝⁸ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝⁷ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F✝
P✝ : Cᵒᵖ ⥤ D
inst✝⁶ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝⁵ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ E
inst✝⁴ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F✝
F G : D ⥤ E
η : F ⟶ G
P : Cᵒᵖ ⥤ D
inst✝³ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F
inst✝² : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ G
inst✝ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) G
X : Cᵒᵖ
W : (Cover J X.unop)ᵒᵖ
a : (Cover.index W.unop (P ⋙ G)).L
⊢ (η.app (multiequalizer (Cover.index W.unop P)) ≫ (diagramCompIso J G P X.unop).hom.app W) ≫
      Multiequalizer.ι (Cover.index W.unop (P ⋙ G)) a =
    ((diagramCompIso J F P X.unop).hom.app W ≫
        Multiequalizer.lift (Cover.index W.unop (P ⋙ G)) ((diagram J (P ⋙ F) X.unop).obj W)
          (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ η.app (P.obj i.Y.op))
          (_ :
            ∀ (b : (Cover.index W.unop (P ⋙ G)).R),
              (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ η.app (P.obj i.Y.op))
                    (MulticospanIndex.fstTo (Cover.index W.unop (P ⋙ G)) b) ≫
                  MulticospanIndex.fst (Cover.index W.unop (P ⋙ G)) b =
                (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ η.app (P.obj i.Y.op))
                    (MulticospanIndex.sndTo (Cover.index W.unop (P ⋙ G)) b) ≫
                  MulticospanIndex.snd (Cover.index W.unop (P ⋙ G)) b)) ≫
      Multiequalizer.ι (Cover.index W.unop (P ⋙ G)) a

tactic: simp
state_before: case w.h.e_a.h
C : Type u
inst✝¹² : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝¹¹ : Category D
E : Type w₂
inst✝¹⁰ : Category E
F✝ : D ⥤ E
inst✝⁹ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝⁸ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝⁷ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F✝
P✝ : Cᵒᵖ ⥤ D
inst✝⁶ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝⁵ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ E
inst✝⁴ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F✝
F G : D ⥤ E
η : F ⟶ G
P : Cᵒᵖ ⥤ D
inst✝³ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F
inst✝² : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ G
inst✝ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) G
X : Cᵒᵖ
W : (Cover J X.unop)ᵒᵖ
a : (Cover.index W.unop (P ⋙ G)).L
⊢ (η.app (multiequalizer (Cover.index W.unop P)) ≫ (diagramCompIso J G P X.unop).hom.app W) ≫
      Multiequalizer.ι (Cover.index W.unop (P ⋙ G)) a =
    ((diagramCompIso J F P X.unop).hom.app W ≫
        Multiequalizer.lift (Cover.index W.unop (P ⋙ G)) (multiequalizer (Cover.index W.unop (P ⋙ F)))
          (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ η.app (P.obj i.Y.op))
          (_ :
            ∀ (i : (Cover.index W.unop (P ⋙ G)).R),
              (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ (whiskerLeft P η).app i.Y.op)
                    (MulticospanIndex.fstTo (Cover.index W.unop (P ⋙ G)) i) ≫
                  MulticospanIndex.fst (Cover.index W.unop (P ⋙ G)) i =
                (fun i => Multiequalizer.ι (Cover.index W.unop (P ⋙ F)) i ≫ (whiskerLeft P η).app i.Y.op)
                    (MulticospanIndex.sndTo (Cover.index W.unop (P ⋙ G)) i) ≫
                  MulticospanIndex.snd (Cover.index W.unop (P ⋙ G)) i)) ≫
      Multiequalizer.ι (Cover.index W.unop (P ⋙ G)) a

tactic: erw [η.naturality]
state_before: case w.h.e_a.h
C : Type u
inst✝¹² : Category C
J : GrothendieckTopology C
D : Type w₁
inst✝¹¹ : Category D
E : Type w₂
inst✝¹⁰ : Category E
F✝ : D ⥤ E
inst✝⁹ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) D
inst✝⁸ : ∀ (α β : Type (max v u)) (fst snd : β → α), HasLimitsOfShape (WalkingMulticospan fst snd) E
inst✝⁷ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F✝
P✝ : Cᵒᵖ ⥤ D
inst✝⁶ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝⁵ : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ E
inst✝⁴ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F✝
F G : D ⥤ E
η : F ⟶ G
P : Cᵒᵖ ⥤ D
inst✝³ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ F
inst✝² : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) F
inst✝¹ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ G
inst✝ : (X : C) → (W : Cover J X) → (P : Cᵒᵖ ⥤ D) → PreservesLimit (MulticospanIndex.multicospan (Cover.index W P)) G
X : Cᵒᵖ
W : (Cover J X.unop)ᵒᵖ
a : (Cover.index W.unop (P ⋙ G)).L
⊢ η.app (multiequalizer (Cover.index W.unop P)) ≫ G.map (Multiequalizer.ι (Cover.index W.unop P) a) =
    F.map (Multiequalizer.ι (Cover.index W.unop P) a) ≫ η.app (P.obj a.Y.op)