Theorem: CategoryTheory.Presieve.FamilyOfElements.isCompatible_map_smul_aux
File: Mathlib/Algebra/Category/ModuleCat/Presheaf/Sheafify.lean

tactic: rw [← PresheafOfModules.Sheafify.app_eq_of_isLocallyInjective α φ hA (R₀.map g.op r₀) r₀'
  (M₀.presheaf.map g.op m₀) m₀', M₀.map_smul]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ R : Cᵒᵖ ⥤ RingCat
α : R₀ ⟶ R
inst✝¹ : Presheaf.IsLocallyInjective J α
M₀ : PresheafOfModules R₀
A : Cᵒᵖ ⥤ AddCommGrp
φ : M₀.presheaf ⟶ A
inst✝ : Presheaf.IsLocallyInjective J φ
hA : Presheaf.IsSeparated J A
X : C
r : ↑(R.obj { unop := X })
m : ↑(A.obj { unop := X })
P : Presieve X
r₀✝ : FamilyOfElements (R₀ ⋙ forget RingCat) P
m₀✝ : FamilyOfElements (M₀.presheaf ⋙ forget AddCommGrp) P
hr₀✝ : (r₀✝.map (whiskerRight α (forget RingCat))).IsAmalgamation r
hm₀✝ : (m₀✝.map (whiskerRight φ (forget AddCommGrp))).IsAmalgamation m
Y Z : C
f : Y ⟶ X
g : Z ⟶ Y
r₀ : ↑(R₀.obj { unop := Y })
r₀' : ↑(R₀.obj { unop := Z })
m₀ : ↑(M₀.presheaf.obj { unop := Y })
m₀' : ↑(M₀.presheaf.obj { unop := Z })
hr₀ : (α.app { unop := Y }) r₀ = (R.map f.op) r
hr₀' : (α.app { unop := Z }) r₀' = (R.map (f.op ≫ g.op)) r
hm₀ : (φ.app { unop := Y }) m₀ = (A.map f.op) m
hm₀' : (φ.app { unop := Z }) m₀' = (A.map (f.op ≫ g.op)) m
⊢ (φ.app { unop := Z }) ((M₀.presheaf.map g.op) (r₀ • m₀)) = (φ.app { unop := Z }) (r₀' • m₀')
state_after: case hr₀
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ R : Cᵒᵖ ⥤ RingCat
α : R₀ ⟶ R
inst✝¹ : Presheaf.IsLocallyInjective J α
M₀ : PresheafOfModules R₀
A : Cᵒᵖ ⥤ AddCommGrp
φ : M₀.presheaf ⟶ A
inst✝ : Presheaf.IsLocallyInjective J φ
hA : Presheaf.IsSeparated J A
X : C
r : ↑(R.obj { unop := X })
m : ↑(A.obj { unop := X })
P : Presieve X
r₀✝ : FamilyOfElements (R₀ ⋙ forget RingCat) P
m₀✝ : FamilyOfElements (M₀.presheaf ⋙ forget AddCommGrp) P
hr₀✝ : (r₀✝.map (whiskerRight α (forget RingCat))).IsAmalgamation r
hm₀✝ : (m₀✝.map (whiskerRight φ (forget AddCommGrp))).IsAmalgamation m
Y Z : C
f : Y ⟶ X
g : Z ⟶ Y
r₀ : ↑(R₀.obj { unop := Y })
r₀' : ↑(R₀.obj { unop := Z })
m₀ : ↑(M₀.presheaf.obj { unop := Y })
m₀' : ↑(M₀.presheaf.obj { unop := Z })
hr₀ : (α.app { unop := Y }) r₀ = (R.map f.op) r
hr₀' : (α.app { unop := Z }) r₀' = (R.map (f.op ≫ g.op)) r
hm₀ : (φ.app { unop := Y }) m₀ = (A.map f.op) m
hm₀' : (φ.app { unop := Z }) m₀' = (A.map (f.op ≫ g.op)) m
⊢ (α.app { unop := Z }) ((R₀.map g.op) r₀) = (α.app { unop := Z }) r₀'

case hm₀
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ R : Cᵒᵖ ⥤ RingCat
α : R₀ ⟶ R
inst✝¹ : Presheaf.IsLocallyInjective J α
M₀ : PresheafOfModules R₀
A : Cᵒᵖ ⥤ AddCommGrp
φ : M₀.presheaf ⟶ A
inst✝ : Presheaf.IsLocallyInjective J φ
hA : Presheaf.IsSeparated J A
X : C
r : ↑(R.obj { unop := X })
m : ↑(A.obj { unop := X })
P : Presieve X
r₀✝ : FamilyOfElements (R₀ ⋙ forget RingCat) P
m₀✝ : FamilyOfElements (M₀.presheaf ⋙ forget AddCommGrp) P
hr₀✝ : (r₀✝.map (whiskerRight α (forget RingCat))).IsAmalgamation r
hm₀✝ : (m₀✝.map (whiskerRight φ (forget AddCommGrp))).IsAmalgamation m
Y Z : C
f : Y ⟶ X
g : Z ⟶ Y
r₀ : ↑(R₀.obj { unop := Y })
r₀' : ↑(R₀.obj { unop := Z })
m₀ : ↑(M₀.presheaf.obj { unop := Y })
m₀' : ↑(M₀.presheaf.obj { unop := Z })
hr₀ : (α.app { unop := Y }) r₀ = (R.map f.op) r
hr₀' : (α.app { unop := Z }) r₀' = (R.map (f.op ≫ g.op)) r
hm₀ : (φ.app { unop := Y }) m₀ = (A.map f.op) m
hm₀' : (φ.app { unop := Z }) m₀' = (A.map (f.op ≫ g.op)) m
⊢ (φ.app { unop := Z }) ((M₀.presheaf.map g.op) m₀) = (φ.app { unop := Z }) m₀'

tactic: rw [hr₀', R.map_comp, comp_apply, ← hr₀, NatTrans.naturality_apply]
state_before: case hr₀
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ R : Cᵒᵖ ⥤ RingCat
α : R₀ ⟶ R
inst✝¹ : Presheaf.IsLocallyInjective J α
M₀ : PresheafOfModules R₀
A : Cᵒᵖ ⥤ AddCommGrp
φ : M₀.presheaf ⟶ A
inst✝ : Presheaf.IsLocallyInjective J φ
hA : Presheaf.IsSeparated J A
X : C
r : ↑(R.obj { unop := X })
m : ↑(A.obj { unop := X })
P : Presieve X
r₀✝ : FamilyOfElements (R₀ ⋙ forget RingCat) P
m₀✝ : FamilyOfElements (M₀.presheaf ⋙ forget AddCommGrp) P
hr₀✝ : (r₀✝.map (whiskerRight α (forget RingCat))).IsAmalgamation r
hm₀✝ : (m₀✝.map (whiskerRight φ (forget AddCommGrp))).IsAmalgamation m
Y Z : C
f : Y ⟶ X
g : Z ⟶ Y
r₀ : ↑(R₀.obj { unop := Y })
r₀' : ↑(R₀.obj { unop := Z })
m₀ : ↑(M₀.presheaf.obj { unop := Y })
m₀' : ↑(M₀.presheaf.obj { unop := Z })
hr₀ : (α.app { unop := Y }) r₀ = (R.map f.op) r
hr₀' : (α.app { unop := Z }) r₀' = (R.map (f.op ≫ g.op)) r
hm₀ : (φ.app { unop := Y }) m₀ = (A.map f.op) m
hm₀' : (φ.app { unop := Z }) m₀' = (A.map (f.op ≫ g.op)) m
⊢ (α.app { unop := Z }) ((R₀.map g.op) r₀) = (α.app { unop := Z }) r₀'
state_after: no goals

tactic: rw [hm₀', A.map_comp, AddCommGrp.coe_comp, Function.comp_apply, ← hm₀]
state_before: case hm₀
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ R : Cᵒᵖ ⥤ RingCat
α : R₀ ⟶ R
inst✝¹ : Presheaf.IsLocallyInjective J α
M₀ : PresheafOfModules R₀
A : Cᵒᵖ ⥤ AddCommGrp
φ : M₀.presheaf ⟶ A
inst✝ : Presheaf.IsLocallyInjective J φ
hA : Presheaf.IsSeparated J A
X : C
r : ↑(R.obj { unop := X })
m : ↑(A.obj { unop := X })
P : Presieve X
r₀✝ : FamilyOfElements (R₀ ⋙ forget RingCat) P
m₀✝ : FamilyOfElements (M₀.presheaf ⋙ forget AddCommGrp) P
hr₀✝ : (r₀✝.map (whiskerRight α (forget RingCat))).IsAmalgamation r
hm₀✝ : (m₀✝.map (whiskerRight φ (forget AddCommGrp))).IsAmalgamation m
Y Z : C
f : Y ⟶ X
g : Z ⟶ Y
r₀ : ↑(R₀.obj { unop := Y })
r₀' : ↑(R₀.obj { unop := Z })
m₀ : ↑(M₀.presheaf.obj { unop := Y })
m₀' : ↑(M₀.presheaf.obj { unop := Z })
hr₀ : (α.app { unop := Y }) r₀ = (R.map f.op) r
hr₀' : (α.app { unop := Z }) r₀' = (R.map (f.op ≫ g.op)) r
hm₀ : (φ.app { unop := Y }) m₀ = (A.map f.op) m
hm₀' : (φ.app { unop := Z }) m₀' = (A.map (f.op ≫ g.op)) m
⊢ (φ.app { unop := Z }) ((M₀.presheaf.map g.op) m₀) = (φ.app { unop := Z }) m₀'
state_after: case hm₀
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ R : Cᵒᵖ ⥤ RingCat
α : R₀ ⟶ R
inst✝¹ : Presheaf.IsLocallyInjective J α
M₀ : PresheafOfModules R₀
A : Cᵒᵖ ⥤ AddCommGrp
φ : M₀.presheaf ⟶ A
inst✝ : Presheaf.IsLocallyInjective J φ
hA : Presheaf.IsSeparated J A
X : C
r : ↑(R.obj { unop := X })
m : ↑(A.obj { unop := X })
P : Presieve X
r₀✝ : FamilyOfElements (R₀ ⋙ forget RingCat) P
m₀✝ : FamilyOfElements (M₀.presheaf ⋙ forget AddCommGrp) P
hr₀✝ : (r₀✝.map (whiskerRight α (forget RingCat))).IsAmalgamation r
hm₀✝ : (m₀✝.map (whiskerRight φ (forget AddCommGrp))).IsAmalgamation m
Y Z : C
f : Y ⟶ X
g : Z ⟶ Y
r₀ : ↑(R₀.obj { unop := Y })
r₀' : ↑(R₀.obj { unop := Z })
m₀ : ↑(M₀.presheaf.obj { unop := Y })
m₀' : ↑(M₀.presheaf.obj { unop := Z })
hr₀ : (α.app { unop := Y }) r₀ = (R.map f.op) r
hr₀' : (α.app { unop := Z }) r₀' = (R.map (f.op ≫ g.op)) r
hm₀ : (φ.app { unop := Y }) m₀ = (A.map f.op) m
hm₀' : (φ.app { unop := Z }) m₀' = (A.map (f.op ≫ g.op)) m
⊢ (φ.app { unop := Z }) ((M₀.presheaf.map g.op) m₀) = (A.map g.op) ((φ.app { unop := Y }) m₀)

tactic: erw [NatTrans.naturality_apply]
state_before: case hm₀
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ R : Cᵒᵖ ⥤ RingCat
α : R₀ ⟶ R
inst✝¹ : Presheaf.IsLocallyInjective J α
M₀ : PresheafOfModules R₀
A : Cᵒᵖ ⥤ AddCommGrp
φ : M₀.presheaf ⟶ A
inst✝ : Presheaf.IsLocallyInjective J φ
hA : Presheaf.IsSeparated J A
X : C
r : ↑(R.obj { unop := X })
m : ↑(A.obj { unop := X })
P : Presieve X
r₀✝ : FamilyOfElements (R₀ ⋙ forget RingCat) P
m₀✝ : FamilyOfElements (M₀.presheaf ⋙ forget AddCommGrp) P
hr₀✝ : (r₀✝.map (whiskerRight α (forget RingCat))).IsAmalgamation r
hm₀✝ : (m₀✝.map (whiskerRight φ (forget AddCommGrp))).IsAmalgamation m
Y Z : C
f : Y ⟶ X
g : Z ⟶ Y
r₀ : ↑(R₀.obj { unop := Y })
r₀' : ↑(R₀.obj { unop := Z })
m₀ : ↑(M₀.presheaf.obj { unop := Y })
m₀' : ↑(M₀.presheaf.obj { unop := Z })
hr₀ : (α.app { unop := Y }) r₀ = (R.map f.op) r
hr₀' : (α.app { unop := Z }) r₀' = (R.map (f.op ≫ g.op)) r
hm₀ : (φ.app { unop := Y }) m₀ = (A.map f.op) m
hm₀' : (φ.app { unop := Z }) m₀' = (A.map (f.op ≫ g.op)) m
⊢ (φ.app { unop := Z }) ((M₀.presheaf.map g.op) m₀) = (A.map g.op) ((φ.app { unop := Y }) m₀)
state_after: case hm₀
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ R : Cᵒᵖ ⥤ RingCat
α : R₀ ⟶ R
inst✝¹ : Presheaf.IsLocallyInjective J α
M₀ : PresheafOfModules R₀
A : Cᵒᵖ ⥤ AddCommGrp
φ : M₀.presheaf ⟶ A
inst✝ : Presheaf.IsLocallyInjective J φ
hA : Presheaf.IsSeparated J A
X : C
r : ↑(R.obj { unop := X })
m : ↑(A.obj { unop := X })
P : Presieve X
r₀✝ : FamilyOfElements (R₀ ⋙ forget RingCat) P
m₀✝ : FamilyOfElements (M₀.presheaf ⋙ forget AddCommGrp) P
hr₀✝ : (r₀✝.map (whiskerRight α (forget RingCat))).IsAmalgamation r
hm₀✝ : (m₀✝.map (whiskerRight φ (forget AddCommGrp))).IsAmalgamation m
Y Z : C
f : Y ⟶ X
g : Z ⟶ Y
r₀ : ↑(R₀.obj { unop := Y })
r₀' : ↑(R₀.obj { unop := Z })
m₀ : ↑(M₀.presheaf.obj { unop := Y })
m₀' : ↑(M₀.presheaf.obj { unop := Z })
hr₀ : (α.app { unop := Y }) r₀ = (R.map f.op) r
hr₀' : (α.app { unop := Z }) r₀' = (R.map (f.op ≫ g.op)) r
hm₀ : (φ.app { unop := Y }) m₀ = (A.map f.op) m
hm₀' : (φ.app { unop := Z }) m₀' = (A.map (f.op ≫ g.op)) m
⊢ (A.map g.op) ((φ.app { unop := Y }) m₀) = (A.map g.op) ((φ.app { unop := Y }) m₀)

tactic: rfl
state_before: case hm₀
C : Type u₁
inst✝² : Category.{v₁, u₁} C
J : GrothendieckTopology C
R₀ R : Cᵒᵖ ⥤ RingCat
α : R₀ ⟶ R
inst✝¹ : Presheaf.IsLocallyInjective J α
M₀ : PresheafOfModules R₀
A : Cᵒᵖ ⥤ AddCommGrp
φ : M₀.presheaf ⟶ A
inst✝ : Presheaf.IsLocallyInjective J φ
hA : Presheaf.IsSeparated J A
X : C
r : ↑(R.obj { unop := X })
m : ↑(A.obj { unop := X })
P : Presieve X
r₀✝ : FamilyOfElements (R₀ ⋙ forget RingCat) P
m₀✝ : FamilyOfElements (M₀.presheaf ⋙ forget AddCommGrp) P
hr₀✝ : (r₀✝.map (whiskerRight α (forget RingCat))).IsAmalgamation r
hm₀✝ : (m₀✝.map (whiskerRight φ (forget AddCommGrp))).IsAmalgamation m
Y Z : C
f : Y ⟶ X
g : Z ⟶ Y
r₀ : ↑(R₀.obj { unop := Y })
r₀' : ↑(R₀.obj { unop := Z })
m₀ : ↑(M₀.presheaf.obj { unop := Y })
m₀' : ↑(M₀.presheaf.obj { unop := Z })
hr₀ : (α.app { unop := Y }) r₀ = (R.map f.op) r
hr₀' : (α.app { unop := Z }) r₀' = (R.map (f.op ≫ g.op)) r
hm₀ : (φ.app { unop := Y }) m₀ = (A.map f.op) m
hm₀' : (φ.app { unop := Z }) m₀' = (A.map (f.op ≫ g.op)) m
⊢ (A.map g.op) ((φ.app { unop := Y }) m₀) = (A.map g.op) ((φ.app { unop := Y }) m₀)
state_after: no goals