Theorem: PresheafOfModules.sheafificationAdjunction_homEquiv_apply
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
P₀ Q₀ : PresheafOfModules R₀
N : SheafOfModules R
f : P₀ ⟶ Q₀
g : Q₀ ⟶ (SheafOfModules.forget R ⋙ restrictScalars α).obj N
⊢ ((fun x x_1 => sheafificationHomEquiv α) P₀ N).symm (f ≫ g) =
    (sheafification α).map f ≫ ((fun x x_1 => sheafificationHomEquiv α) Q₀ N).symm g
state_after: case 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
P₀ Q₀ : PresheafOfModules R₀
N : SheafOfModules R
f : P₀ ⟶ Q₀
g : Q₀ ⟶ (SheafOfModules.forget R ⋙ restrictScalars α).obj N
⊢ (SheafOfModules.toSheaf R).map (((fun x x_1 => sheafificationHomEquiv α) P₀ N).symm (f ≫ g)) =
    (SheafOfModules.toSheaf R).map ((sheafification α).map f ≫ ((fun x x_1 => sheafificationHomEquiv α) Q₀ N).symm g)
tactic: apply (SheafOfModules.toSheaf _).map_injective
state_before: case 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
P₀ Q₀ : PresheafOfModules R₀
N : SheafOfModules R
f : P₀ ⟶ Q₀
g : Q₀ ⟶ (SheafOfModules.forget R ⋙ restrictScalars α).obj N
⊢ (SheafOfModules.toSheaf R).map (((fun x x_1 => sheafificationHomEquiv α) P₀ N).symm (f ≫ g)) =
    (SheafOfModules.toSheaf R).map ((sheafification α).map f ≫ ((fun x x_1 => sheafificationHomEquiv α) Q₀ N).symm g)
state_after: case 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
P₀ Q₀ : PresheafOfModules R₀
N : SheafOfModules R
f : P₀ ⟶ Q₀
g : Q₀ ⟶ (SheafOfModules.forget R ⋙ restrictScalars α).obj N
⊢ (SheafOfModules.toSheaf R).map (((fun x x_1 => sheafificationHomEquiv α) P₀ N).symm (f ≫ g)) =
    (SheafOfModules.toSheaf R).map ((sheafification α).map f) ≫
      (SheafOfModules.toSheaf R).map (((fun x x_1 => sheafificationHomEquiv α) Q₀ N).symm g)
tactic: rw [Functor.map_comp]
state_before: case 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
P₀ Q₀ : PresheafOfModules R₀
N : SheafOfModules R
f : P₀ ⟶ Q₀
g : Q₀ ⟶ (SheafOfModules.forget R ⋙ restrictScalars α).obj N
⊢ (SheafOfModules.toSheaf R).map (((fun x x_1 => sheafificationHomEquiv α) P₀ N).symm (f ≫ g)) =
    (SheafOfModules.toSheaf R).map ((sheafification α).map f) ≫
      (SheafOfModules.toSheaf R).map (((fun x x_1 => sheafificationHomEquiv α) Q₀ N).symm g)
state_after: case 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
P₀ Q₀ : PresheafOfModules R₀
N : SheafOfModules R
f : P₀ ⟶ Q₀
g : Q₀ ⟶ (SheafOfModules.forget R ⋙ restrictScalars α).obj N
⊢ ((CategoryTheory.sheafificationAdjunction J AddCommGrp).homEquiv P₀.presheaf ((SheafOfModules.toSheaf R).obj N)).symm
      (f ≫ g).hom =
    (SheafOfModules.toSheaf R).map ((sheafification α).map f) ≫
      ((CategoryTheory.sheafificationAdjunction J AddCommGrp).homEquiv Q₀.presheaf
            ((SheafOfModules.toSheaf R).obj N)).symm
        g.hom
tactic: erw [toSheaf_map_sheafificationHomEquiv_symm,
          toSheaf_map_sheafificationHomEquiv_symm]
state_before: case 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
P₀ Q₀ : PresheafOfModules R₀
N : SheafOfModules R
f : P₀ ⟶ Q₀
g : Q₀ ⟶ (SheafOfModules.forget R ⋙ restrictScalars α).obj N
⊢ ((CategoryTheory.sheafificationAdjunction J AddCommGrp).homEquiv P₀.presheaf ((SheafOfModules.toSheaf R).obj N)).symm
      (f ≫ g).hom =
    (SheafOfModules.toSheaf R).map ((sheafification α).map f) ≫
      ((CategoryTheory.sheafificationAdjunction J AddCommGrp).homEquiv Q₀.presheaf
            ((SheafOfModules.toSheaf R).obj N)).symm
        g.hom
state_after: no goals
tactic: apply Adjunction.homEquiv_naturality_left_symm
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
P₀ : PresheafOfModules R₀
M N : SheafOfModules R
f : (sheafification α).obj P₀ ⟶ M
g : M ⟶ N
⊢ ((fun x x_1 => sheafificationHomEquiv α) P₀ N) (f ≫ g) =
    ((fun x x_1 => sheafificationHomEquiv α) P₀ M) f ≫ (SheafOfModules.forget R ⋙ restrictScalars α).map g
state_after: case 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
P₀ : PresheafOfModules R₀
M N : SheafOfModules R
f : (sheafification α).obj P₀ ⟶ M
g : M ⟶ N
⊢ (toPresheaf R₀).map (((fun x x_1 => sheafificationHomEquiv α) P₀ N) (f ≫ g)) =
    (toPresheaf R₀).map
      (((fun x x_1 => sheafificationHomEquiv α) P₀ M) f ≫ (SheafOfModules.forget R ⋙ restrictScalars α).map g)
tactic: apply (toPresheaf _).map_injective
state_before: case 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
P₀ : PresheafOfModules R₀
M N : SheafOfModules R
f : (sheafification α).obj P₀ ⟶ M
g : M ⟶ N
⊢ (toPresheaf R₀).map (((fun x x_1 => sheafificationHomEquiv α) P₀ N) (f ≫ g)) =
    (toPresheaf R₀).map
      (((fun x x_1 => sheafificationHomEquiv α) P₀ M) f ≫ (SheafOfModules.forget R ⋙ restrictScalars α).map g)
state_after: case 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
P₀ : PresheafOfModules R₀
M N : SheafOfModules R
f : (sheafification α).obj P₀ ⟶ M
g : M ⟶ N
⊢ ((sheafificationHomEquiv α) (f ≫ g)).hom = ((sheafificationHomEquiv α) f).hom ≫ g.val.hom
tactic: dsimp [toPresheaf]
state_before: case 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
P₀ : PresheafOfModules R₀
M N : SheafOfModules R
f : (sheafification α).obj P₀ ⟶ M
g : M ⟶ N
⊢ ((sheafificationHomEquiv α) (f ≫ g)).hom = ((sheafificationHomEquiv α) f).hom ≫ g.val.hom
state_after: case 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
P₀ : PresheafOfModules R₀
M N : SheafOfModules R
f : (sheafification α).obj P₀ ⟶ M
g : M ⟶ N
⊢ ((CategoryTheory.sheafificationAdjunction J AddCommGrp).homEquiv P₀.presheaf ((SheafOfModules.toSheaf R).obj N))
      ((SheafOfModules.toSheaf R).map (f ≫ g)) =
    ((CategoryTheory.sheafificationAdjunction J AddCommGrp).homEquiv P₀.presheaf ((SheafOfModules.toSheaf R).obj M))
        ((SheafOfModules.toSheaf R).map f) ≫
      g.val.hom
tactic: erw [sheafificationHomEquiv_hom, sheafificationHomEquiv_hom]
state_before: case 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
P₀ : PresheafOfModules R₀
M N : SheafOfModules R
f : (sheafification α).obj P₀ ⟶ M
g : M ⟶ N
⊢ ((CategoryTheory.sheafificationAdjunction J AddCommGrp).homEquiv P₀.presheaf ((SheafOfModules.toSheaf R).obj N))
      ((SheafOfModules.toSheaf R).map (f ≫ g)) =
    ((CategoryTheory.sheafificationAdjunction J AddCommGrp).homEquiv P₀.presheaf ((SheafOfModules.toSheaf R).obj M))
        ((SheafOfModules.toSheaf R).map f) ≫
      g.val.hom
state_after: case 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
P₀ : PresheafOfModules R₀
M N : SheafOfModules R
f : (sheafification α).obj P₀ ⟶ M
g : M ⟶ N
⊢ ((CategoryTheory.sheafificationAdjunction J AddCommGrp).homEquiv P₀.presheaf ((SheafOfModules.toSheaf R).obj N))
      ((SheafOfModules.toSheaf R).map f ≫ (SheafOfModules.toSheaf R).map g) =
    ((CategoryTheory.sheafificationAdjunction J AddCommGrp).homEquiv P₀.presheaf ((SheafOfModules.toSheaf R).obj M))
        ((SheafOfModules.toSheaf R).map f) ≫
      g.val.hom
tactic: rw [Functor.map_comp]
state_before: case 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
P₀ : PresheafOfModules R₀
M N : SheafOfModules R
f : (sheafification α).obj P₀ ⟶ M
g : M ⟶ N
⊢ ((CategoryTheory.sheafificationAdjunction J AddCommGrp).homEquiv P₀.presheaf ((SheafOfModules.toSheaf R).obj N))
      ((SheafOfModules.toSheaf R).map f ≫ (SheafOfModules.toSheaf R).map g) =
    ((CategoryTheory.sheafificationAdjunction J AddCommGrp).homEquiv P₀.presheaf ((SheafOfModules.toSheaf R).obj M))
        ((SheafOfModules.toSheaf R).map f) ≫
      g.val.hom
state_after: no goals
tactic: apply Adjunction.homEquiv_naturality_right