Theorem: ModuleCat.ExtendRestrictScalarsAdj.HomEquiv.toRestrictScalars_apply
File: Mathlib/Algebra/Category/ModuleCat/ChangeOfRings.lean

Proof steps:
state_before: R✝ : Type u₁
S✝ : Type u₂
inst✝³ : CommRing R✝
inst✝² : CommRing S✝
f✝ : R✝ →+* S✝
R : Type u₁
S : Type u₂
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
X : ModuleCat R
Y : ModuleCat S
g : (extendScalars f).obj X ⟶ Y
x✝¹ x✝ : ↑X
⊢ (fun x => g (1 ⊗ₜ[R] x)) (x✝¹ + x✝) = (fun x => g (1 ⊗ₜ[R] x)) x✝¹ + (fun x => g (1 ⊗ₜ[R] x)) x✝
state_after: R✝ : Type u₁
S✝ : Type u₂
inst✝³ : CommRing R✝
inst✝² : CommRing S✝
f✝ : R✝ →+* S✝
R : Type u₁
S : Type u₂
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
X : ModuleCat R
Y : ModuleCat S
g : (extendScalars f).obj X ⟶ Y
x✝¹ x✝ : ↑X
⊢ g (1 ⊗ₜ[R] (x✝¹ + x✝)) = g (1 ⊗ₜ[R] x✝¹) + g (1 ⊗ₜ[R] x✝)
tactic: dsimp
state_before: R✝ : Type u₁
S✝ : Type u₂
inst✝³ : CommRing R✝
inst✝² : CommRing S✝
f✝ : R✝ →+* S✝
R : Type u₁
S : Type u₂
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
X : ModuleCat R
Y : ModuleCat S
g : (extendScalars f).obj X ⟶ Y
x✝¹ x✝ : ↑X
⊢ g (1 ⊗ₜ[R] (x✝¹ + x✝)) = g (1 ⊗ₜ[R] x✝¹) + g (1 ⊗ₜ[R] x✝)
state_after: no goals
tactic: rw [tmul_add, map_add]
state_before: R✝ : Type u₁
S✝ : Type u₂
inst✝³ : CommRing R✝
inst✝² : CommRing S✝
f✝ : R✝ →+* S✝
R : Type u₁
S : Type u₂
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
X : ModuleCat R
Y : ModuleCat S
g : (extendScalars f).obj X ⟶ Y
r : R
x : ↑X
⊢ { toFun := fun x => g (1 ⊗ₜ[R] x), map_add' := ⋯ }.toFun (r • x) =
    (RingHom.id R) r • { toFun := fun x => g (1 ⊗ₜ[R] x), map_add' := ⋯ }.toFun x
state_after: R✝ : Type u₁
S✝ : Type u₂
inst✝³ : CommRing R✝
inst✝² : CommRing S✝
f✝ : R✝ →+* S✝
R : Type u₁
S : Type u₂
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
X : ModuleCat R
Y : ModuleCat S
g : (extendScalars f).obj X ⟶ Y
r : R
x : ↑X
this : Module R S := Module.compHom S f
⊢ { toFun := fun x => g (1 ⊗ₜ[R] x), map_add' := ⋯ }.toFun (r • x) =
    (RingHom.id R) r • { toFun := fun x => g (1 ⊗ₜ[R] x), map_add' := ⋯ }.toFun x
tactic: letI : Module R S := Module.compHom S f
state_before: R✝ : Type u₁
S✝ : Type u₂
inst✝³ : CommRing R✝
inst✝² : CommRing S✝
f✝ : R✝ →+* S✝
R : Type u₁
S : Type u₂
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
X : ModuleCat R
Y : ModuleCat S
g : (extendScalars f).obj X ⟶ Y
r : R
x : ↑X
this : Module R S := Module.compHom S f
⊢ { toFun := fun x => g (1 ⊗ₜ[R] x), map_add' := ⋯ }.toFun (r • x) =
    (RingHom.id R) r • { toFun := fun x => g (1 ⊗ₜ[R] x), map_add' := ⋯ }.toFun x
state_after: R✝ : Type u₁
S✝ : Type u₂
inst✝³ : CommRing R✝
inst✝² : CommRing S✝
f✝ : R✝ →+* S✝
R : Type u₁
S : Type u₂
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
X : ModuleCat R
Y : ModuleCat S
g : (extendScalars f).obj X ⟶ Y
r : R
x : ↑X
this✝ : Module R S := Module.compHom S f
this : Module R ↑Y := Module.compHom (↑Y) f
⊢ { toFun := fun x => g (1 ⊗ₜ[R] x), map_add' := ⋯ }.toFun (r • x) =
    (RingHom.id R) r • { toFun := fun x => g (1 ⊗ₜ[R] x), map_add' := ⋯ }.toFun x
tactic: letI : Module R Y := Module.compHom Y f
state_before: R✝ : Type u₁
S✝ : Type u₂
inst✝³ : CommRing R✝
inst✝² : CommRing S✝
f✝ : R✝ →+* S✝
R : Type u₁
S : Type u₂
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
X : ModuleCat R
Y : ModuleCat S
g : (extendScalars f).obj X ⟶ Y
r : R
x : ↑X
this✝ : Module R S := Module.compHom S f
this : Module R ↑Y := Module.compHom (↑Y) f
⊢ { toFun := fun x => g (1 ⊗ₜ[R] x), map_add' := ⋯ }.toFun (r • x) =
    (RingHom.id R) r • { toFun := fun x => g (1 ⊗ₜ[R] x), map_add' := ⋯ }.toFun x
state_after: R✝ : Type u₁
S✝ : Type u₂
inst✝³ : CommRing R✝
inst✝² : CommRing S✝
f✝ : R✝ →+* S✝
R : Type u₁
S : Type u₂
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
X : ModuleCat R
Y : ModuleCat S
g : (extendScalars f).obj X ⟶ Y
r : R
x : ↑X
this✝ : Module R S := Module.compHom S f
this : Module R ↑Y := Module.compHom (↑Y) f
⊢ g (1 ⊗ₜ[R] (r • x)) = f r • g (1 ⊗ₜ[R] x)
tactic: dsimp
state_before: R✝ : Type u₁
S✝ : Type u₂
inst✝³ : CommRing R✝
inst✝² : CommRing S✝
f✝ : R✝ →+* S✝
R : Type u₁
S : Type u₂
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
X : ModuleCat R
Y : ModuleCat S
g : (extendScalars f).obj X ⟶ Y
r : R
x : ↑X
this✝ : Module R S := Module.compHom S f
this : Module R ↑Y := Module.compHom (↑Y) f
⊢ g (1 ⊗ₜ[R] (r • x)) = f r • g (1 ⊗ₜ[R] x)
state_after: R✝ : Type u₁
S✝ : Type u₂
inst✝³ : CommRing R✝
inst✝² : CommRing S✝
f✝ : R✝ →+* S✝
R : Type u₁
S : Type u₂
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
X : ModuleCat R
Y : ModuleCat S
g : (extendScalars f).obj X ⟶ Y
r : R
x : ↑X
this✝ : Module R S := Module.compHom S f
this : Module R ↑Y := Module.compHom (↑Y) f
⊢ g ((algebraMap R R) r • 1 ⊗ₜ[R] (RestrictScalars.addEquiv R R ↑X) x) = g (f r • 1 ⊗ₜ[R] x)
tactic: erw [RestrictScalars.smul_def, ← LinearMap.map_smul, tmul_smul]
state_before: R✝ : Type u₁
S✝ : Type u₂
inst✝³ : CommRing R✝
inst✝² : CommRing S✝
f✝ : R✝ →+* S✝
R : Type u₁
S : Type u₂
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
X : ModuleCat R
Y : ModuleCat S
g : (extendScalars f).obj X ⟶ Y
r : R
x : ↑X
this✝ : Module R S := Module.compHom S f
this : Module R ↑Y := Module.compHom (↑Y) f
⊢ g ((algebraMap R R) r • 1 ⊗ₜ[R] (RestrictScalars.addEquiv R R ↑X) x) = g (f r • 1 ⊗ₜ[R] x)
state_after: no goals
tactic: congr