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

Proof steps:
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
M : PresheafOfModules R
f : unit R ⟶ M
⊢ ∀ ⦃X Y : Cᵒᵖ⦄ (f_1 : X ⟶ Y), (M.map f_1) ((fun X => (Hom.app f X) 1) X) = (fun X => (Hom.app f X) 1) Y
state_after: C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
M : PresheafOfModules R
f : unit R ⟶ M
X✝ Y✝ : Cᵒᵖ
f✝ : X✝ ⟶ Y✝
⊢ (M.map f✝) ((fun X => (Hom.app f X) 1) X✝) = (fun X => (Hom.app f X) 1) Y✝
tactic: intros
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
M : PresheafOfModules R
f : unit R ⟶ M
X✝ Y✝ : Cᵒᵖ
f✝ : X✝ ⟶ Y✝
⊢ (M.map f✝) ((fun X => (Hom.app f X) 1) X✝) = (fun X => (Hom.app f X) 1) Y✝
state_after: no goals
tactic: rw [← naturality_apply, unit_map_one]
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
M : PresheafOfModules R
s : M.sections
⊢ ∀ ⦃X Y : Cᵒᵖ⦄ (f : X ⟶ Y) (x : ↑((unit R).obj X)),
    ((fun X => (ringLmapEquivSelf ↑(R.obj X) ℤ ↑(M.obj X)).symm (↑s X)) Y) (((unit R).map f) x) =
      (M.map f) (((fun X => (ringLmapEquivSelf ↑(R.obj X) ℤ ↑(M.obj X)).symm (↑s X)) X) x)
state_after: C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
M : PresheafOfModules R
s : M.sections
X Y : Cᵒᵖ
p : X ⟶ Y
x : ↑(R.obj X)
⊢ ((fun X => (ringLmapEquivSelf ↑(R.obj X) ℤ ↑(M.obj X)).symm (↑s X)) Y) (((unit R).map p) x) =
    (M.map p) (((fun X => (ringLmapEquivSelf ↑(R.obj X) ℤ ↑(M.obj X)).symm (↑s X)) X) x)
tactic: intro X Y p (x : R.obj X)
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
M : PresheafOfModules R
s : M.sections
X Y : Cᵒᵖ
p : X ⟶ Y
x : ↑(R.obj X)
⊢ ((fun X => (ringLmapEquivSelf ↑(R.obj X) ℤ ↑(M.obj X)).symm (↑s X)) Y) (((unit R).map p) x) =
    (M.map p) (((fun X => (ringLmapEquivSelf ↑(R.obj X) ℤ ↑(M.obj X)).symm (↑s X)) X) x)
state_after: C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
M : PresheafOfModules R
s : M.sections
X Y : Cᵒᵖ
p : X ⟶ Y
x : ↑(R.obj X)
⊢ 1 (((unit R).map p) x) • ↑s Y = (M.map p) (1 x • ↑s X)
tactic: dsimp
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
M : PresheafOfModules R
s : M.sections
X Y : Cᵒᵖ
p : X ⟶ Y
x : ↑(R.obj X)
⊢ 1 (((unit R).map p) x) • ↑s Y = (M.map p) (1 x • ↑s X)
state_after: C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
M : PresheafOfModules R
s : M.sections
X Y : Cᵒᵖ
p : X ⟶ Y
x : ↑(R.obj X)
⊢ 1 (((unit R).map p) x) • (M.presheaf ⋙ forget AddCommGrp).map p (↑s X) = (R.map p) (1 x) • (M.presheaf.map p) (↑s X)
tactic: rw [map_apply, M.map_smul, ← s.2 p]
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
M : PresheafOfModules R
s : M.sections
X Y : Cᵒᵖ
p : X ⟶ Y
x : ↑(R.obj X)
⊢ 1 (((unit R).map p) x) • (M.presheaf ⋙ forget AddCommGrp).map p (↑s X) = (R.map p) (1 x) • (M.presheaf.map p) (↑s X)
state_after: no goals
tactic: rfl
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
M : PresheafOfModules R
f : unit R ⟶ M
⊢ (fun s => Hom.mk' (fun X => (ringLmapEquivSelf ↑(R.obj X) ℤ ↑(M.obj X)).symm (↑s X)) ⋯)
      ((fun f => sectionsMk (fun X => (Hom.app f X) 1) ⋯) f) =
    f
state_after: case w
C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
M : PresheafOfModules R
f : unit R ⟶ M
X : Cᵒᵖ
⊢ Hom.app
      ((fun s => Hom.mk' (fun X => (ringLmapEquivSelf ↑(R.obj X) ℤ ↑(M.obj X)).symm (↑s X)) ⋯)
        ((fun f => sectionsMk (fun X => (Hom.app f X) 1) ⋯) f))
      X =
    Hom.app f X
tactic: ext1 X
state_before: case w
C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
M : PresheafOfModules R
f : unit R ⟶ M
X : Cᵒᵖ
⊢ Hom.app
      ((fun s => Hom.mk' (fun X => (ringLmapEquivSelf ↑(R.obj X) ℤ ↑(M.obj X)).symm (↑s X)) ⋯)
        ((fun f => sectionsMk (fun X => (Hom.app f X) 1) ⋯) f))
      X =
    Hom.app f X
state_after: no goals
tactic: exact (LinearMap.ringLmapEquivSelf (R.obj X) ℤ (M.obj X)).symm_apply_apply (f.app X)
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
M : PresheafOfModules R
s : M.sections
⊢ (fun f => sectionsMk (fun X => (Hom.app f X) 1) ⋯)
      ((fun s => Hom.mk' (fun X => (ringLmapEquivSelf ↑(R.obj X) ℤ ↑(M.obj X)).symm (↑s X)) ⋯) s) =
    s
state_after: case h
C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
M : PresheafOfModules R
s : M.sections
X : Cᵒᵖ
⊢ ↑((fun f => sectionsMk (fun X => (Hom.app f X) 1) ⋯)
          ((fun s => Hom.mk' (fun X => (ringLmapEquivSelf ↑(R.obj X) ℤ ↑(M.obj X)).symm (↑s X)) ⋯) s))
      X =
    ↑s X
tactic: ext X
state_before: case h
C : Type u₁
inst✝ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
M : PresheafOfModules R
s : M.sections
X : Cᵒᵖ
⊢ ↑((fun f => sectionsMk (fun X => (Hom.app f X) 1) ⋯)
          ((fun s => Hom.mk' (fun X => (ringLmapEquivSelf ↑(R.obj X) ℤ ↑(M.obj X)).symm (↑s X)) ⋯) s))
      X =
    ↑s X
state_after: no goals
tactic: exact (LinearMap.ringLmapEquivSelf (R.obj X) ℤ (M.obj X)).apply_symm_apply (s.val X)