Theorem: PresheafOfModules.homEquivOfIsLocallyBijective_symm_apply_hom
File: Mathlib/Algebra/Category/ModuleCat/Sheaf.lean

Proof steps:
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
⊢ ∀ (X : Cᵒᵖ) (r : ↑(R.obj X)) (x : ↑(M₂.presheaf.obj X)),
    (((Localization.LeftBousfield.W.homEquiv ⋯ N.presheaf hN).symm ψ.hom).app X) (r • x) =
      r • (((Localization.LeftBousfield.W.homEquiv ⋯ N.presheaf hN).symm ψ.hom).app X) x
state_after: case intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : (Localization.LeftBousfield.W.homEquiv ⋯ N.presheaf hN) φ = ψ.hom
⊢ ∀ (X : Cᵒᵖ) (r : ↑(R.obj X)) (x : ↑(M₂.presheaf.obj X)),
    (((Localization.LeftBousfield.W.homEquiv ⋯ N.presheaf hN).symm ψ.hom).app X) (r • x) =
      r • (((Localization.LeftBousfield.W.homEquiv ⋯ N.presheaf hN).symm ψ.hom).app X) x
tactic: obtain ⟨φ, hφ⟩ := ((J.W_of_isLocallyBijective f.hom).homEquiv _ hN).surjective ψ.hom
state_before: case intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : (Localization.LeftBousfield.W.homEquiv ⋯ N.presheaf hN) φ = ψ.hom
⊢ ∀ (X : Cᵒᵖ) (r : ↑(R.obj X)) (x : ↑(M₂.presheaf.obj X)),
    (((Localization.LeftBousfield.W.homEquiv ⋯ N.presheaf hN).symm ψ.hom).app X) (r • x) =
      r • (((Localization.LeftBousfield.W.homEquiv ⋯ N.presheaf hN).symm ψ.hom).app X) x
state_after: case intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : (Localization.LeftBousfield.W.homEquiv ⋯ N.presheaf hN) φ = ψ.hom
⊢ ∀ (X : Cᵒᵖ) (r : ↑(R.obj X)) (x : ↑(M₂.presheaf.obj X)), (φ.app X) (r • x) = r • (φ.app X) x
tactic: simp only [← hφ, Equiv.symm_apply_apply]
state_before: case intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : (Localization.LeftBousfield.W.homEquiv ⋯ N.presheaf hN) φ = ψ.hom
⊢ ∀ (X : Cᵒᵖ) (r : ↑(R.obj X)) (x : ↑(M₂.presheaf.obj X)), (φ.app X) (r • x) = r • (φ.app X) x
state_after: case intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : f.hom ≫ φ = ψ.hom
⊢ ∀ (X : Cᵒᵖ) (r : ↑(R.obj X)) (x : ↑(M₂.presheaf.obj X)), (φ.app X) (r • x) = r • (φ.app X) x
tactic: dsimp at hφ
state_before: case intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : f.hom ≫ φ = ψ.hom
⊢ ∀ (X : Cᵒᵖ) (r : ↑(R.obj X)) (x : ↑(M₂.presheaf.obj X)), (φ.app X) (r • x) = r • (φ.app X) x
state_after: case intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : f.hom ≫ φ = ψ.hom
X : Cᵒᵖ
r : ↑(R.obj X)
y : ↑(M₂.presheaf.obj X)
⊢ (φ.app X) (r • y) = r • (φ.app X) y
tactic: intro X r y
state_before: case intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : f.hom ≫ φ = ψ.hom
X : Cᵒᵖ
r : ↑(R.obj X)
y : ↑(M₂.presheaf.obj X)
⊢ (φ.app X) (r • y) = r • (φ.app X) y
state_after: case intro.a
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : f.hom ≫ φ = ψ.hom
X : Cᵒᵖ
r : ↑(R.obj X)
y : ↑(M₂.presheaf.obj X)
⊢ ∀ (Y : C) (f_1 : Y ⟶ Opposite.unop X),
    (Presheaf.imageSieve f.hom y).arrows f_1 →
      (N.presheaf.map f_1.op) ((φ.app X) (r • y)) = (N.presheaf.map f_1.op) (r • (φ.app X) y)
tactic: apply hN.isSeparated _ _ (Presheaf.imageSieve_mem J f.hom y)
state_before: case intro.a
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : f.hom ≫ φ = ψ.hom
X : Cᵒᵖ
r : ↑(R.obj X)
y : ↑(M₂.presheaf.obj X)
⊢ ∀ (Y : C) (f_1 : Y ⟶ Opposite.unop X),
    (Presheaf.imageSieve f.hom y).arrows f_1 →
      (N.presheaf.map f_1.op) ((φ.app X) (r • y)) = (N.presheaf.map f_1.op) (r • (φ.app X) y)
state_after: case intro.a.intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : f.hom ≫ φ = ψ.hom
X : Cᵒᵖ
r : ↑(R.obj X)
y : ↑(M₂.presheaf.obj X)
Y : C
p : Y ⟶ Opposite.unop X
x : (forget AddCommGrp).obj (M₁.presheaf.obj (Opposite.op Y))
hx : (f.hom.app (Opposite.op Y)) x = (M₂.presheaf.map p.op) y
⊢ (N.presheaf.map p.op) ((φ.app X) (r • y)) = (N.presheaf.map p.op) (r • (φ.app X) y)
tactic: rintro Y p ⟨x, hx⟩
state_before: case intro.a.intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : f.hom ≫ φ = ψ.hom
X : Cᵒᵖ
r : ↑(R.obj X)
y : ↑(M₂.presheaf.obj X)
Y : C
p : Y ⟶ Opposite.unop X
x : (forget AddCommGrp).obj (M₁.presheaf.obj (Opposite.op Y))
hx : (f.hom.app (Opposite.op Y)) x = (M₂.presheaf.map p.op) y
⊢ (N.presheaf.map p.op) ((φ.app X) (r • y)) = (N.presheaf.map p.op) (r • (φ.app X) y)
state_after: case intro.a.intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : f.hom ≫ φ = ψ.hom
X : Cᵒᵖ
r : ↑(R.obj X)
y : ↑(M₂.presheaf.obj X)
Y : C
p : Y ⟶ Opposite.unop X
x : (forget AddCommGrp).obj (M₁.presheaf.obj (Opposite.op Y))
hx : (f.hom.app (Opposite.op Y)) x = (M₂.presheaf.map p.op) y
eq : (ψ.hom.app (Opposite.op Y)) ((R.map p.op) r • x) = (R.map p.op) r • (ψ.hom.app (Opposite.op Y)) x
⊢ (N.presheaf.map p.op) ((φ.app X) (r • y)) = (N.presheaf.map p.op) (r • (φ.app X) y)
tactic: have eq := ψ.map_smul _ (R.map p.op r) x
state_before: case intro.a.intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : f.hom ≫ φ = ψ.hom
X : Cᵒᵖ
r : ↑(R.obj X)
y : ↑(M₂.presheaf.obj X)
Y : C
p : Y ⟶ Opposite.unop X
x : (forget AddCommGrp).obj (M₁.presheaf.obj (Opposite.op Y))
hx : (f.hom.app (Opposite.op Y)) x = (M₂.presheaf.map p.op) y
eq : (ψ.hom.app (Opposite.op Y)) ((R.map p.op) r • x) = (R.map p.op) r • (ψ.hom.app (Opposite.op Y)) x
⊢ (N.presheaf.map p.op) ((φ.app X) (r • y)) = (N.presheaf.map p.op) (r • (φ.app X) y)
state_after: case intro.a.intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : f.hom ≫ φ = ψ.hom
X : Cᵒᵖ
r : ↑(R.obj X)
y : ↑(M₂.presheaf.obj X)
Y : C
p : Y ⟶ Opposite.unop X
x : (forget AddCommGrp).obj (M₁.presheaf.obj (Opposite.op Y))
hx : (f.hom.app (Opposite.op Y)) x = (M₂.presheaf.map p.op) y
eq : ((f.hom ≫ φ).app (Opposite.op Y)) ((R.map p.op) r • x) = (R.map p.op) r • ((f.hom ≫ φ).app (Opposite.op Y)) x
⊢ (N.presheaf.map p.op) ((φ.app X) (r • y)) = (N.presheaf.map p.op) (r • (φ.app X) y)
tactic: simp only [← hφ] at eq
state_before: case intro.a.intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : f.hom ≫ φ = ψ.hom
X : Cᵒᵖ
r : ↑(R.obj X)
y : ↑(M₂.presheaf.obj X)
Y : C
p : Y ⟶ Opposite.unop X
x : (forget AddCommGrp).obj (M₁.presheaf.obj (Opposite.op Y))
hx : (f.hom.app (Opposite.op Y)) x = (M₂.presheaf.map p.op) y
eq : ((f.hom ≫ φ).app (Opposite.op Y)) ((R.map p.op) r • x) = (R.map p.op) r • ((f.hom ≫ φ).app (Opposite.op Y)) x
⊢ (N.presheaf.map p.op) ((φ.app X) (r • y)) = (N.presheaf.map p.op) (r • (φ.app X) y)
state_after: case intro.a.intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : f.hom ≫ φ = ψ.hom
X : Cᵒᵖ
r : ↑(R.obj X)
y : ↑(M₂.presheaf.obj X)
Y : C
p : Y ⟶ Opposite.unop X
x : (forget AddCommGrp).obj (M₁.presheaf.obj (Opposite.op Y))
hx : (f.hom.app (Opposite.op Y)) x = (M₂.presheaf.map p.op) y
eq :
  (φ.app (Opposite.op Y)) ((f.hom.app (Opposite.op Y)) ((R.map p.op) r • x)) =
    (R.map p.op) r • (φ.app (Opposite.op Y)) ((f.hom.app (Opposite.op Y)) x)
⊢ (N.presheaf.map p.op) ((φ.app X) (r • y)) = (N.presheaf.map p.op) (r • (φ.app X) y)
tactic: dsimp at eq
state_before: case intro.a.intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : f.hom ≫ φ = ψ.hom
X : Cᵒᵖ
r : ↑(R.obj X)
y : ↑(M₂.presheaf.obj X)
Y : C
p : Y ⟶ Opposite.unop X
x : (forget AddCommGrp).obj (M₁.presheaf.obj (Opposite.op Y))
hx : (f.hom.app (Opposite.op Y)) x = (M₂.presheaf.map p.op) y
eq :
  (φ.app (Opposite.op Y)) ((f.hom.app (Opposite.op Y)) ((R.map p.op) r • x)) =
    (R.map p.op) r • (φ.app (Opposite.op Y)) ((f.hom.app (Opposite.op Y)) x)
⊢ (N.presheaf.map p.op) ((φ.app X) (r • y)) = (N.presheaf.map p.op) (r • (φ.app X) y)
state_after: case intro.a.intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : f.hom ≫ φ = ψ.hom
X : Cᵒᵖ
r : ↑(R.obj X)
y : ↑(M₂.presheaf.obj X)
Y : C
p : Y ⟶ Opposite.unop X
x : (forget AddCommGrp).obj (M₁.presheaf.obj (Opposite.op Y))
hx : (f.hom.app (Opposite.op Y)) x = (M₂.presheaf.map p.op) y
eq :
  (φ.app (Opposite.op Y)) ((f.hom.app (Opposite.op Y)) ((R.map p.op) r • x)) =
    (R.map p.op) r • (φ.app (Opposite.op Y)) ((f.hom.app (Opposite.op Y)) x)
⊢ (φ.app (Opposite.op Y)) ((R.map p.op) r • (f.hom.app (Opposite.op Y)) x) =
    (φ.app (Opposite.op Y)) ((R.map p.op) r • (f.hom.app (Opposite.op Y)) x)
tactic: erw [← NatTrans.naturality_apply φ p.op (r • y), N.map_smul, M₂.map_smul,
          ← NatTrans.naturality_apply φ p.op y, ← hx, ← eq, f.map_smul]
state_before: case intro.a.intro
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
J : GrothendieckTopology C
R✝ : Sheaf J RingCat
R : Cᵒᵖ ⥤ RingCat
M₁ M₂ : PresheafOfModules R
f : M₁ ⟶ M₂
N : PresheafOfModules R
hN : Presheaf.IsSheaf J N.presheaf
inst✝² : J.WEqualsLocallyBijective AddCommGrp
inst✝¹ : Presheaf.IsLocallySurjective J f.hom
inst✝ : Presheaf.IsLocallyInjective J f.hom
ψ : M₁ ⟶ N
φ : M₂.presheaf ⟶ N.presheaf
hφ : f.hom ≫ φ = ψ.hom
X : Cᵒᵖ
r : ↑(R.obj X)
y : ↑(M₂.presheaf.obj X)
Y : C
p : Y ⟶ Opposite.unop X
x : (forget AddCommGrp).obj (M₁.presheaf.obj (Opposite.op Y))
hx : (f.hom.app (Opposite.op Y)) x = (M₂.presheaf.map p.op) y
eq :
  (φ.app (Opposite.op Y)) ((f.hom.app (Opposite.op Y)) ((R.map p.op) r • x)) =
    (R.map p.op) r • (φ.app (Opposite.op Y)) ((f.hom.app (Opposite.op Y)) x)
⊢ (φ.app (Opposite.op Y)) ((R.map p.op) r • (f.hom.app (Opposite.op Y)) x) =
    (φ.app (Opposite.op Y)) ((R.map p.op) r • (f.hom.app (Opposite.op Y)) x)
state_after: no goals
tactic: rfl