Theorem: ModuleCat.ExtendRestrictScalarsAdj.counit_app
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
Y Y' : ModuleCat S
g : Y ⟶ Y'
⊢ (restrictScalars f ⋙ extendScalars f).map g ≫ (fun x => Counit.map f) Y' =
    (fun x => Counit.map f) Y ≫ (𝟭 (ModuleCat S)).map g
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
Y Y' : ModuleCat S
g : Y ⟶ Y'
m1 : Module R S := Module.compHom S f
⊢ (restrictScalars f ⋙ extendScalars f).map g ≫ (fun x => Counit.map f) Y' =
    (fun x => Counit.map f) Y ≫ (𝟭 (ModuleCat S)).map g
tactic: letI m1 : 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
Y Y' : ModuleCat S
g : Y ⟶ Y'
m1 : Module R S := Module.compHom S f
⊢ (restrictScalars f ⋙ extendScalars f).map g ≫ (fun x => Counit.map f) Y' =
    (fun x => Counit.map f) Y ≫ (𝟭 (ModuleCat S)).map g
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
Y Y' : ModuleCat S
g : Y ⟶ Y'
m1 : Module R S := Module.compHom S f
m2 : Module R ↑Y := Module.compHom (↑Y) f
⊢ (restrictScalars f ⋙ extendScalars f).map g ≫ (fun x => Counit.map f) Y' =
    (fun x => Counit.map f) Y ≫ (𝟭 (ModuleCat S)).map g
tactic: letI m2 : 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
Y Y' : ModuleCat S
g : Y ⟶ Y'
m1 : Module R S := Module.compHom S f
m2 : Module R ↑Y := Module.compHom (↑Y) f
⊢ (restrictScalars f ⋙ extendScalars f).map g ≫ (fun x => Counit.map f) Y' =
    (fun x => Counit.map f) Y ≫ (𝟭 (ModuleCat S)).map g
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
Y Y' : ModuleCat S
g : Y ⟶ Y'
m1 : Module R S := Module.compHom S f
m2✝ : Module R ↑Y := Module.compHom (↑Y) f
m2 : Module R ↑Y' := Module.compHom (↑Y') f
⊢ (restrictScalars f ⋙ extendScalars f).map g ≫ (fun x => Counit.map f) Y' =
    (fun x => Counit.map f) Y ≫ (𝟭 (ModuleCat S)).map g
tactic: letI m2 : 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
Y Y' : ModuleCat S
g : Y ⟶ Y'
m1 : Module R S := Module.compHom S f
m2✝ : Module R ↑Y := Module.compHom (↑Y) f
m2 : Module R ↑Y' := Module.compHom (↑Y') f
⊢ (restrictScalars f ⋙ extendScalars f).map g ≫ (fun x => Counit.map f) Y' =
    (fun x => Counit.map f) Y ≫ (𝟭 (ModuleCat S)).map g
state_after: case h
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
Y Y' : ModuleCat S
g : Y ⟶ Y'
m1 : Module R S := Module.compHom S f
m2✝ : Module R ↑Y := Module.compHom (↑Y) f
m2 : Module R ↑Y' := Module.compHom (↑Y') f
⊢ ∀ (x : ↑((restrictScalars f ⋙ extendScalars f).obj Y)),
    ((restrictScalars f ⋙ extendScalars f).map g ≫ (fun x => Counit.map f) Y') x =
      ((fun x => Counit.map f) Y ≫ (𝟭 (ModuleCat S)).map g) x
tactic: apply LinearMap.ext
state_before: case h
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
Y Y' : ModuleCat S
g : Y ⟶ Y'
m1 : Module R S := Module.compHom S f
m2✝ : Module R ↑Y := Module.compHom (↑Y) f
m2 : Module R ↑Y' := Module.compHom (↑Y') f
⊢ ∀ (x : ↑((restrictScalars f ⋙ extendScalars f).obj Y)),
    ((restrictScalars f ⋙ extendScalars f).map g ≫ (fun x => Counit.map f) Y') x =
      ((fun x => Counit.map f) Y ≫ (𝟭 (ModuleCat S)).map g) x
state_after: case h
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
Y Y' : ModuleCat S
g : Y ⟶ Y'
m1 : Module R S := Module.compHom S f
m2✝ : Module R ↑Y := Module.compHom (↑Y) f
m2 : Module R ↑Y' := Module.compHom (↑Y') f
z : ↑((restrictScalars f ⋙ extendScalars f).obj Y)
⊢ ((restrictScalars f ⋙ extendScalars f).map g ≫ (fun x => Counit.map f) Y') z =
    ((fun x => Counit.map f) Y ≫ (𝟭 (ModuleCat S)).map g) z
tactic: intro z
state_before: case h
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
Y Y' : ModuleCat S
g : Y ⟶ Y'
m1 : Module R S := Module.compHom S f
m2✝ : Module R ↑Y := Module.compHom (↑Y) f
m2 : Module R ↑Y' := Module.compHom (↑Y') f
z : ↑((restrictScalars f ⋙ extendScalars f).obj Y)
⊢ ((restrictScalars f ⋙ extendScalars f).map g ≫ (fun x => Counit.map f) Y') z =
    ((fun x => Counit.map f) Y ≫ (𝟭 (ModuleCat S)).map g) z
state_after: case h.zero
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
Y Y' : ModuleCat S
g : Y ⟶ Y'
m1 : Module R S := Module.compHom S f
m2✝ : Module R ↑Y := Module.compHom (↑Y) f
m2 : Module R ↑Y' := Module.compHom (↑Y') f
⊢ ((restrictScalars f ⋙ extendScalars f).map g ≫ (fun x => Counit.map f) Y') 0 =
    ((fun x => Counit.map f) Y ≫ (𝟭 (ModuleCat S)).map g) 0

case h.tmul
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
Y Y' : ModuleCat S
g : Y ⟶ Y'
m1 : Module R S := Module.compHom S f
m2✝ : Module R ↑Y := Module.compHom (↑Y) f
m2 : Module R ↑Y' := Module.compHom (↑Y') f
s' : ↑((restrictScalars f).obj (mk S))
y : ↑((restrictScalars f).obj Y)
⊢ ((restrictScalars f ⋙ extendScalars f).map g ≫ (fun x => Counit.map f) Y') (s' ⊗ₜ[R] y) =
    ((fun x => Counit.map f) Y ≫ (𝟭 (ModuleCat S)).map g) (s' ⊗ₜ[R] y)

case h.add
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
Y Y' : ModuleCat S
g : Y ⟶ Y'
m1 : Module R S := Module.compHom S f
m2✝ : Module R ↑Y := Module.compHom (↑Y) f
m2 : Module R ↑Y' := Module.compHom (↑Y') f
z₁ z₂ : ↑((restrictScalars f).obj (mk S)) ⊗[R] ↑((restrictScalars f).obj Y)
ih₁ :
  ((restrictScalars f ⋙ extendScalars f).map g ≫ (fun x => Counit.map f) Y') z₁ =
    ((fun x => Counit.map f) Y ≫ (𝟭 (ModuleCat S)).map g) z₁
ih₂ :
  ((restrictScalars f ⋙ extendScalars f).map g ≫ (fun x => Counit.map f) Y') z₂ =
    ((fun x => Counit.map f) Y ≫ (𝟭 (ModuleCat S)).map g) z₂
⊢ ((restrictScalars f ⋙ extendScalars f).map g ≫ (fun x => Counit.map f) Y') (z₁ + z₂) =
    ((fun x => Counit.map f) Y ≫ (𝟭 (ModuleCat S)).map g) (z₁ + z₂)
tactic: induction' z using TensorProduct.induction_on with s' y z₁ z₂ ih₁ ih₂