Theorem: CategoryTheory.GrothendieckTopology.Plus.exists_rep
File: Mathlib/CategoryTheory/Sites/ConcreteSheafification.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✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst✝ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
X : C
P : Cᵒᵖ ⥤ D
x : (forget D).obj ((J.plusObj P).obj (op X))
⊢ ∃ S y, x = mk y
state_after: case intro.intro
C : Type u
inst✝⁶ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝⁵ : Category.{max v u, w} D
inst✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst✝ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
X : C
P : Cᵒᵖ ⥤ D
x : (forget D).obj ((J.plusObj P).obj (op X))
S : (J.Cover X)ᵒᵖ
y : (forget D).obj ((J.diagram P X).obj S)
h : (colimit.ι (J.diagram P X) S) y = x
⊢ ∃ S y, x = mk y
tactic: obtain ⟨S, y, h⟩ := Concrete.colimit_exists_rep (J.diagram P X) x
state_before: case intro.intro
C : Type u
inst✝⁶ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝⁵ : Category.{max v u, w} D
inst✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst✝ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
X : C
P : Cᵒᵖ ⥤ D
x : (forget D).obj ((J.plusObj P).obj (op X))
S : (J.Cover X)ᵒᵖ
y : (forget D).obj ((J.diagram P X).obj S)
h : (colimit.ι (J.diagram P X) S) y = x
⊢ ∃ S y, x = mk y
state_after: case h
C : Type u
inst✝⁶ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝⁵ : Category.{max v u, w} D
inst✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst✝ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
X : C
P : Cᵒᵖ ⥤ D
x : (forget D).obj ((J.plusObj P).obj (op X))
S : (J.Cover X)ᵒᵖ
y : (forget D).obj ((J.diagram P X).obj S)
h : (colimit.ι (J.diagram P X) S) y = x
⊢ x = mk ((Meq.equiv P (unop S)) y)
tactic: use S.unop, Meq.equiv _ _ y
state_before: case h
C : Type u
inst✝⁶ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝⁵ : Category.{max v u, w} D
inst✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst✝ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
X : C
P : Cᵒᵖ ⥤ D
x : (forget D).obj ((J.plusObj P).obj (op X))
S : (J.Cover X)ᵒᵖ
y : (forget D).obj ((J.diagram P X).obj S)
h : (colimit.ι (J.diagram P X) S) y = x
⊢ x = mk ((Meq.equiv P (unop S)) y)
state_after: case h
C : Type u
inst✝⁶ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝⁵ : Category.{max v u, w} D
inst✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst✝ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
X : C
P : Cᵒᵖ ⥤ D
x : (forget D).obj ((J.plusObj P).obj (op X))
S : (J.Cover X)ᵒᵖ
y : (forget D).obj ((J.diagram P X).obj S)
h : (colimit.ι (J.diagram P X) S) y = x
⊢ (colimit.ι (J.diagram P X) S) y = mk ((Meq.equiv P (unop S)) y)
tactic: rw [← h]
state_before: case h
C : Type u
inst✝⁶ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝⁵ : Category.{max v u, w} D
inst✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst✝ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
X : C
P : Cᵒᵖ ⥤ D
x : (forget D).obj ((J.plusObj P).obj (op X))
S : (J.Cover X)ᵒᵖ
y : (forget D).obj ((J.diagram P X).obj S)
h : (colimit.ι (J.diagram P X) S) y = x
⊢ (colimit.ι (J.diagram P X) S) y = mk ((Meq.equiv P (unop S)) y)
state_after: case h
C : Type u
inst✝⁶ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝⁵ : Category.{max v u, w} D
inst✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst✝ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
X : C
P : Cᵒᵖ ⥤ D
x : (forget D).obj ((J.plusObj P).obj (op X))
S : (J.Cover X)ᵒᵖ
y : (forget D).obj ((J.diagram P X).obj S)
h : (colimit.ι (J.diagram P X) S) y = x
⊢ (colimit.ι (J.diagram P X) S) y =
    (colimit.ι (J.diagram P X) S) ((Meq.equiv P (unop S)).symm ((Meq.equiv P (unop S)) y))
tactic: dsimp [mk]
state_before: case h
C : Type u
inst✝⁶ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝⁵ : Category.{max v u, w} D
inst✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (J.Cover X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : J.Cover X), HasMultiequalizer (S.index P)
inst✝ : (X : C) → PreservesColimitsOfShape (J.Cover X)ᵒᵖ (forget D)
X : C
P : Cᵒᵖ ⥤ D
x : (forget D).obj ((J.plusObj P).obj (op X))
S : (J.Cover X)ᵒᵖ
y : (forget D).obj ((J.diagram P X).obj S)
h : (colimit.ι (J.diagram P X) S) y = x
⊢ (colimit.ι (J.diagram P X) S) y =
    (colimit.ι (J.diagram P X) S) ((Meq.equiv P (unop S)).symm ((Meq.equiv P (unop S)) y))
state_after: no goals
tactic: simp