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

tactic: ext : 2
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
X : C
P : Cᵒᵖ ⥤ D
⊢ J.diagramNatTrans (𝟙 P) X = 𝟙 (J.diagram P 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
X : C
P : Cᵒᵖ ⥤ D
x✝ : (J.Cover X)ᵒᵖ
⊢ (J.diagramNatTrans (𝟙 P) X).app x✝ = (𝟙 (J.diagram P X)).app x✝

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
X : C
P : Cᵒᵖ ⥤ D
x✝ : (J.Cover X)ᵒᵖ
⊢ (J.diagramNatTrans (𝟙 P) X).app x✝ = (𝟙 (J.diagram P X)).app 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
X : C
P : Cᵒᵖ ⥤ D
x✝ : (J.Cover X)ᵒᵖ
i : (x✝.unop.index P).L
⊢ (J.diagramNatTrans (𝟙 P) X).app x✝ ≫ Multiequalizer.ι (x✝.unop.index P) i =
    (𝟙 (J.diagram P X)).app x✝ ≫ Multiequalizer.ι (x✝.unop.index P) 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
X : C
P : Cᵒᵖ ⥤ D
x✝ : (J.Cover X)ᵒᵖ
i : (x✝.unop.index P).L
⊢ (J.diagramNatTrans (𝟙 P) X).app x✝ ≫ Multiequalizer.ι (x✝.unop.index P) i =
    (𝟙 (J.diagram P X)).app x✝ ≫ Multiequalizer.ι (x✝.unop.index P) 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
X : C
P : Cᵒᵖ ⥤ D
x✝ : (J.Cover X)ᵒᵖ
i : (x✝.unop.index P).L
⊢ Multiequalizer.lift (x✝.unop.index P) (multiequalizer (x✝.unop.index P))
        (fun i => Multiequalizer.ι (x✝.unop.index P) i ≫ 𝟙 (P.obj { unop := i.Y })) ⋯ ≫
      Multiequalizer.ι (x✝.unop.index P) i =
    𝟙 (multiequalizer (x✝.unop.index P)) ≫ Multiequalizer.ι (x✝.unop.index P) i

tactic: simp only [limit.lift_π, Multifork.ofι_pt, Multifork.ofι_π_app, Category.id_comp]
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
X : C
P : Cᵒᵖ ⥤ D
x✝ : (J.Cover X)ᵒᵖ
i : (x✝.unop.index P).L
⊢ Multiequalizer.lift (x✝.unop.index P) (multiequalizer (x✝.unop.index P))
        (fun i => Multiequalizer.ι (x✝.unop.index P) i ≫ 𝟙 (P.obj { unop := i.Y })) ⋯ ≫
      Multiequalizer.ι (x✝.unop.index P) i =
    𝟙 (multiequalizer (x✝.unop.index P)) ≫ Multiequalizer.ι (x✝.unop.index P) 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
X : C
P : Cᵒᵖ ⥤ D
x✝ : (J.Cover X)ᵒᵖ
i : (x✝.unop.index P).L
⊢ Multiequalizer.ι (x✝.unop.index P) i ≫ 𝟙 (P.obj { unop := i.Y }) = Multiequalizer.ι (x✝.unop.index P) i

tactic: erw [Category.comp_id]
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
X : C
P : Cᵒᵖ ⥤ D
x✝ : (J.Cover X)ᵒᵖ
i : (x✝.unop.index P).L
⊢ Multiequalizer.ι (x✝.unop.index P) i ≫ 𝟙 (P.obj { unop := i.Y }) = Multiequalizer.ι (x✝.unop.index P) i
state_after: no goals