Theorem: CategoryTheory.GrothendieckTopology.diagramNatTrans_comp
File: Mathlib/CategoryTheory/Sites/Plus.lean

tactic: ext : 2
state_before: C : Type u
inst✝² : Category C
J : GrothendieckTopology C
D : Type w
inst✝¹ : Category D
inst✝ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
P✝ P Q R : Cᵒᵖ ⥤ D
η : P ⟶ Q
γ : Q ⟶ R
X : C
⊢ diagramNatTrans J (η ≫ γ) X = diagramNatTrans J η X ≫ diagramNatTrans J γ X

tactic: refine' Multiequalizer.hom_ext _ _ _ (fun i => _)
state_before: case w.h
C : Type u
inst✝² : Category C
J : GrothendieckTopology C
D : Type w
inst✝¹ : Category D
inst✝ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
P✝ P Q R : Cᵒᵖ ⥤ D
η : P ⟶ Q
γ : Q ⟶ R
X : C
x✝ : (Cover J X)ᵒᵖ
⊢ (diagramNatTrans J (η ≫ γ) X).app x✝ = (diagramNatTrans J η X ≫ diagramNatTrans J γ X).app x✝

tactic: dsimp
state_before: case w.h
C : Type u
inst✝² : Category C
J : GrothendieckTopology C
D : Type w
inst✝¹ : Category D
inst✝ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
P✝ P Q R : Cᵒᵖ ⥤ D
η : P ⟶ Q
γ : Q ⟶ R
X : C
x✝ : (Cover J X)ᵒᵖ
i : (Cover.index x✝.unop R).L
⊢ (diagramNatTrans J (η ≫ γ) X).app x✝ ≫ Multiequalizer.ι (Cover.index x✝.unop R) i =
    (diagramNatTrans J η X ≫ diagramNatTrans J γ X).app x✝ ≫ Multiequalizer.ι (Cover.index x✝.unop R) i

tactic: simp
state_before: case w.h
C : Type u
inst✝² : Category C
J : GrothendieckTopology C
D : Type w
inst✝¹ : Category D
inst✝ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
P✝ P Q R : Cᵒᵖ ⥤ D
η : P ⟶ Q
γ : Q ⟶ R
X : C
x✝ : (Cover J X)ᵒᵖ
i : (Cover.index x✝.unop R).L
⊢ Multiequalizer.lift (Cover.index x✝.unop R) (multiequalizer (Cover.index x✝.unop P))
        (fun i => Multiequalizer.ι (Cover.index x✝.unop P) i ≫ η.app i.Y.op ≫ γ.app i.Y.op)
        (_ :
          ∀ (i : (Cover.index x✝.unop R).R),
            (fun i => Multiequalizer.ι (Cover.index x✝.unop P) i ≫ (η ≫ γ).app i.Y.op)
                  (MulticospanIndex.fstTo (Cover.index x✝.unop R) i) ≫
                MulticospanIndex.fst (Cover.index x✝.unop R) i =
              (fun i => Multiequalizer.ι (Cover.index x✝.unop P) i ≫ (η ≫ γ).app i.Y.op)
                  (MulticospanIndex.sndTo (Cover.index x✝.unop R) i) ≫
                MulticospanIndex.snd (Cover.index x✝.unop R) i) ≫
      Multiequalizer.ι (Cover.index x✝.unop R) i =
    (Multiequalizer.lift (Cover.index x✝.unop Q) (multiequalizer (Cover.index x✝.unop P))
          (fun i => Multiequalizer.ι (Cover.index x✝.unop P) i ≫ η.app i.Y.op)
          (_ :
            ∀ (i : (Cover.index x✝.unop Q).R),
              (fun i => Multiequalizer.ι (Cover.index x✝.unop P) i ≫ η.app i.Y.op)
                    (MulticospanIndex.fstTo (Cover.index x✝.unop Q) i) ≫
                  MulticospanIndex.fst (Cover.index x✝.unop Q) i =
                (fun i => Multiequalizer.ι (Cover.index x✝.unop P) i ≫ η.app i.Y.op)
                    (MulticospanIndex.sndTo (Cover.index x✝.unop Q) i) ≫
                  MulticospanIndex.snd (Cover.index x✝.unop Q) i) ≫
        Multiequalizer.lift (Cover.index x✝.unop R) (multiequalizer (Cover.index x✝.unop Q))
          (fun i => Multiequalizer.ι (Cover.index x✝.unop Q) i ≫ γ.app i.Y.op)
          (_ :
            ∀ (i : (Cover.index x✝.unop R).R),
              (fun i => Multiequalizer.ι (Cover.index x✝.unop Q) i ≫ γ.app i.Y.op)
                    (MulticospanIndex.fstTo (Cover.index x✝.unop R) i) ≫
                  MulticospanIndex.fst (Cover.index x✝.unop R) i =
                (fun i => Multiequalizer.ι (Cover.index x✝.unop Q) i ≫ γ.app i.Y.op)
                    (MulticospanIndex.sndTo (Cover.index x✝.unop R) i) ≫
                  MulticospanIndex.snd (Cover.index x✝.unop R) i)) ≫
      Multiequalizer.ι (Cover.index x✝.unop R) i