Theorem: PresheafOfModules.sheafification_map
File: Mathlib/Algebra/Category/ModuleCat/Presheaf/Sheafification.lean

Proof steps:
state_before: C : Type u'
inst✝⁴ : Category.{v', u'} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
inst✝¹ : J.WEqualsLocallyBijective AddCommGrp
inst✝ : HasWeakSheafify J AddCommGrp
X✝ Y✝ : PresheafOfModules R₀
f : X✝ ⟶ Y✝
⊢ f.hom ≫ CategoryTheory.toSheafify J Y✝.presheaf =
    CategoryTheory.toSheafify J X✝.presheaf ≫ ((presheafToSheaf J AddCommGrp).map f.hom).val
state_after: no goals
tactic: simp
state_before: C : Type u'
inst✝⁴ : Category.{v', u'} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
inst✝¹ : J.WEqualsLocallyBijective AddCommGrp
inst✝ : HasWeakSheafify J AddCommGrp
M₀ : PresheafOfModules R₀
⊢ { obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
          map := fun {X Y} f =>
            sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
              ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
      (𝟙 M₀) =
    𝟙
      ({ obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
            map := fun {X Y} f =>
              sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.obj
        M₀)
state_after: case h
C : Type u'
inst✝⁴ : Category.{v', u'} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
inst✝¹ : J.WEqualsLocallyBijective AddCommGrp
inst✝ : HasWeakSheafify J AddCommGrp
M₀ : PresheafOfModules R₀
⊢ ({ obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
            map := fun {X Y} f =>
              sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
        (𝟙 M₀)).val =
    (𝟙
        ({ obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
              map := fun {X Y} f =>
                sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                  ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.obj
          M₀)).val
tactic: ext1
state_before: case h
C : Type u'
inst✝⁴ : Category.{v', u'} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
inst✝¹ : J.WEqualsLocallyBijective AddCommGrp
inst✝ : HasWeakSheafify J AddCommGrp
M₀ : PresheafOfModules R₀
⊢ ({ obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
            map := fun {X Y} f =>
              sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
        (𝟙 M₀)).val =
    (𝟙
        ({ obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
              map := fun {X Y} f =>
                sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                  ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.obj
          M₀)).val
state_after: case h.a
C : Type u'
inst✝⁴ : Category.{v', u'} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
inst✝¹ : J.WEqualsLocallyBijective AddCommGrp
inst✝ : HasWeakSheafify J AddCommGrp
M₀ : PresheafOfModules R₀
⊢ (toPresheaf R.val).map
      ({ obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
              map := fun {X Y} f =>
                sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                  ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
          (𝟙 M₀)).val =
    (toPresheaf R.val).map
      (𝟙
          ({ obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
                map := fun {X Y} f =>
                  sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                    ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.obj
            M₀)).val
tactic: apply (toPresheaf _).map_injective
state_before: case h.a
C : Type u'
inst✝⁴ : Category.{v', u'} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
inst✝¹ : J.WEqualsLocallyBijective AddCommGrp
inst✝ : HasWeakSheafify J AddCommGrp
M₀ : PresheafOfModules R₀
⊢ (toPresheaf R.val).map
      ({ obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
              map := fun {X Y} f =>
                sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                  ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
          (𝟙 M₀)).val =
    (toPresheaf R.val).map
      (𝟙
          ({ obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
                map := fun {X Y} f =>
                  sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                    ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.obj
            M₀)).val
state_after: no goals
tactic: simp [toPresheaf, sheafify]
state_before: C : Type u'
inst✝⁴ : Category.{v', u'} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
inst✝¹ : J.WEqualsLocallyBijective AddCommGrp
inst✝ : HasWeakSheafify J AddCommGrp
X✝ Y✝ Z✝ : PresheafOfModules R₀
x✝¹ : X✝ ⟶ Y✝
x✝ : Y✝ ⟶ Z✝
⊢ { obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
          map := fun {X Y} f =>
            sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
              ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
      (x✝¹ ≫ x✝) =
    { obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
            map := fun {X Y} f =>
              sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
        x✝¹ ≫
      { obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
            map := fun {X Y} f =>
              sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
        x✝
state_after: case h
C : Type u'
inst✝⁴ : Category.{v', u'} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
inst✝¹ : J.WEqualsLocallyBijective AddCommGrp
inst✝ : HasWeakSheafify J AddCommGrp
X✝ Y✝ Z✝ : PresheafOfModules R₀
x✝¹ : X✝ ⟶ Y✝
x✝ : Y✝ ⟶ Z✝
⊢ ({ obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
            map := fun {X Y} f =>
              sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
        (x✝¹ ≫ x✝)).val =
    ({ obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
              map := fun {X Y} f =>
                sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                  ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
          x✝¹ ≫
        { obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
              map := fun {X Y} f =>
                sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                  ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
          x✝).val
tactic: ext1
state_before: case h
C : Type u'
inst✝⁴ : Category.{v', u'} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
inst✝¹ : J.WEqualsLocallyBijective AddCommGrp
inst✝ : HasWeakSheafify J AddCommGrp
X✝ Y✝ Z✝ : PresheafOfModules R₀
x✝¹ : X✝ ⟶ Y✝
x✝ : Y✝ ⟶ Z✝
⊢ ({ obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
            map := fun {X Y} f =>
              sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
        (x✝¹ ≫ x✝)).val =
    ({ obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
              map := fun {X Y} f =>
                sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                  ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
          x✝¹ ≫
        { obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
              map := fun {X Y} f =>
                sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                  ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
          x✝).val
state_after: case h.a
C : Type u'
inst✝⁴ : Category.{v', u'} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
inst✝¹ : J.WEqualsLocallyBijective AddCommGrp
inst✝ : HasWeakSheafify J AddCommGrp
X✝ Y✝ Z✝ : PresheafOfModules R₀
x✝¹ : X✝ ⟶ Y✝
x✝ : Y✝ ⟶ Z✝
⊢ (toPresheaf R.val).map
      ({ obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
              map := fun {X Y} f =>
                sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                  ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
          (x✝¹ ≫ x✝)).val =
    (toPresheaf R.val).map
      ({ obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
                map := fun {X Y} f =>
                  sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                    ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
            x✝¹ ≫
          { obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
                map := fun {X Y} f =>
                  sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                    ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
            x✝).val
tactic: apply (toPresheaf _).map_injective
state_before: case h.a
C : Type u'
inst✝⁴ : Category.{v', u'} C
J : GrothendieckTopology C
R₀ : Cᵒᵖ ⥤ RingCat
R : Sheaf J RingCat
α : R₀ ⟶ R.val
inst✝³ : Presheaf.IsLocallyInjective J α
inst✝² : Presheaf.IsLocallySurjective J α
inst✝¹ : J.WEqualsLocallyBijective AddCommGrp
inst✝ : HasWeakSheafify J AddCommGrp
X✝ Y✝ Z✝ : PresheafOfModules R₀
x✝¹ : X✝ ⟶ Y✝
x✝ : Y✝ ⟶ Z✝
⊢ (toPresheaf R.val).map
      ({ obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
              map := fun {X Y} f =>
                sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                  ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
          (x✝¹ ≫ x✝)).val =
    (toPresheaf R.val).map
      ({ obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
                map := fun {X Y} f =>
                  sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                    ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
            x✝¹ ≫
          { obj := fun M₀ => sheafify α (CategoryTheory.toSheafify J M₀.presheaf),
                map := fun {X Y} f =>
                  sheafifyMap α (CategoryTheory.toSheafify J X.presheaf) (CategoryTheory.toSheafify J Y.presheaf) f
                    ((presheafToSheaf J AddCommGrp).map f.hom) ⋯ }.map
            x✝).val
state_after: no goals
tactic: simp [toPresheaf, sheafify]