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

Proof steps:
state_before: C : Type u
inst✝³ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝² : Category.{max v u, w} D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
P✝ : Cᵒᵖ ⥤ D
inst✝ : Preadditive D
X : C
P Q : Cᵒᵖ ⥤ D
⊢ J.diagramNatTrans 0 X = 0
state_after: case w.h
C : Type u
inst✝³ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝² : Category.{max v u, w} D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
P✝ : Cᵒᵖ ⥤ D
inst✝ : Preadditive D
X : C
P Q : Cᵒᵖ ⥤ D
x✝ : (J.Cover X)ᵒᵖ
⊢ (J.diagramNatTrans 0 X).app x✝ = NatTrans.app 0 x✝
tactic: ext : 2
state_before: case w.h
C : Type u
inst✝³ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝² : Category.{max v u, w} D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
P✝ : Cᵒᵖ ⥤ D
inst✝ : Preadditive D
X : C
P Q : Cᵒᵖ ⥤ D
x✝ : (J.Cover X)ᵒᵖ
⊢ (J.diagramNatTrans 0 X).app x✝ = NatTrans.app 0 x✝
state_after: case w.h
C : Type u
inst✝³ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝² : Category.{max v u, w} D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
P✝ : Cᵒᵖ ⥤ D
inst✝ : Preadditive D
X : C
P Q : Cᵒᵖ ⥤ D
x✝ : (J.Cover X)ᵒᵖ
i : ((unop x✝).index Q).L
⊢ (J.diagramNatTrans 0 X).app x✝ ≫ Multiequalizer.ι ((unop x✝).index Q) i =
    NatTrans.app 0 x✝ ≫ Multiequalizer.ι ((unop x✝).index Q) i
tactic: refine Multiequalizer.hom_ext _ _ _ (fun i => ?_)
state_before: case w.h
C : Type u
inst✝³ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝² : Category.{max v u, w} D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
P✝ : Cᵒᵖ ⥤ D
inst✝ : Preadditive D
X : C
P Q : Cᵒᵖ ⥤ D
x✝ : (J.Cover X)ᵒᵖ
i : ((unop x✝).index Q).L
⊢ (J.diagramNatTrans 0 X).app x✝ ≫ Multiequalizer.ι ((unop x✝).index Q) i =
    NatTrans.app 0 x✝ ≫ Multiequalizer.ι ((unop x✝).index Q) i
state_after: case w.h
C : Type u
inst✝³ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝² : Category.{max v u, w} D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
P✝ : Cᵒᵖ ⥤ D
inst✝ : Preadditive D
X : C
P Q : Cᵒᵖ ⥤ D
x✝ : (J.Cover X)ᵒᵖ
i : ((unop x✝).index Q).L
⊢ Multiequalizer.lift ((unop x✝).index Q) (multiequalizer ((unop x✝).index P))
        (fun i => Multiequalizer.ι ((unop x✝).index P) i ≫ 0) ⋯ ≫
      Multiequalizer.ι ((unop x✝).index Q) i =
    0 ≫ Multiequalizer.ι ((unop x✝).index Q) i
tactic: dsimp
state_before: case w.h
C : Type u
inst✝³ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝² : Category.{max v u, w} D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
P✝ : Cᵒᵖ ⥤ D
inst✝ : Preadditive D
X : C
P Q : Cᵒᵖ ⥤ D
x✝ : (J.Cover X)ᵒᵖ
i : ((unop x✝).index Q).L
⊢ Multiequalizer.lift ((unop x✝).index Q) (multiequalizer ((unop x✝).index P))
        (fun i => Multiequalizer.ι ((unop x✝).index P) i ≫ 0) ⋯ ≫
      Multiequalizer.ι ((unop x✝).index Q) i =
    0 ≫ Multiequalizer.ι ((unop x✝).index Q) i
state_after: no goals
tactic: rw [zero_comp, Multiequalizer.lift_ι, comp_zero]