/-- For any `S`-module Y, there is a natural `R`-linear map from `S ⨂ Y` to `Y` by
`s ⊗ y ↦ s • y`
-/
@[simps apply]
def Counit.map {Y} : (restrictScalars f ⋙ extendScalars f).obj Y ⟶ Y := by
  letI m1 : Module R S := Module.compHom S f
  letI m2 : Module R Y := Module.compHom Y f
  refine'
    {toFun := TensorProduct.lift
      {toFun := fun s : S => {toFun := fun y : Y => s • y, map_add' := smul_add _, map_smul' := _},
        map_add' := _, map_smul' := _}, map_add' := _, map_smul' := _}
  · intros r y
    dsimp
    change s • f r • y = f r • s • y
    rw [← mul_smul, mul_comm, mul_smul]
  · intros s₁ s₂
    ext y
    change (s₁ + s₂) • y = s₁ • y + s₂ • y
    rw [add_smul]
  · intros r s
    ext y
    change (f r • s) • y = (f r) • s • y
    rw [smul_eq_mul,mul_smul]
  · intros
    rw [map_add]
  · intro s z
    dsimp
    induction' z using TensorProduct.induction_on with s' y z1 z2 ih1 ih2
    · rw [smul_zero, map_zero, smul_zero]
    · rw [ExtendScalars.smul_tmul, LinearMap.coe_mk]
      erw [TensorProduct.lift.tmul, TensorProduct.lift.tmul]
      set s' : S := s'
      change (s * s') • y = s • s' • y
      rw [mul_smul]
    · 

Proof state:
case refine'_5.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 : ModuleCat S
m1 : Module R S := Module.compHom S f
m2 : Module R ↑Y := Module.compHom (↑Y) f
s : S
z1 z2 : ↑((restrictScalars f).obj (mk S)) ⊗[R] ↑((restrictScalars f).obj Y)
ih1 :
  (lift
        {
          toAddHom :=
            {
              toFun := fun s =>
                {
                  toAddHom :=
                    { toFun := fun y => s • y, map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s • (b₁ + b₂) = s • b₁ + s • b₂) },
                  map_smul' := (_ : ∀ (r : R) (y : ↑Y), s • f r • y = f r • s • y) },
              map_add' :=
                (_ :
                  ∀ (s₁ s₂ : S),
                    {
                        toAddHom :=
                          { toFun := fun y => (s₁ + s₂) • y,
                            map_add' := (_ : ∀ (b₁ b₂ : ↑Y), (s₁ + s₂) • (b₁ + b₂) = (s₁ + s₂) • b₁ + (s₁ + s₂) • b₂) },
                        map_smul' := (_ : ∀ (r : R) (y : ↑Y), (s₁ + s₂) • f r • y = f r • (s₁ + s₂) • y) } =
                      {
                          toAddHom :=
                            { toFun := fun y => s₁ • y,
                              map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s₁ • (b₁ + b₂) = s₁ • b₁ + s₁ • b₂) },
                          map_smul' := (_ : ∀ (r : R) (y : ↑Y), s₁ • f r • y = f r • s₁ • y) } +
                        {
                          toAddHom :=
                            { toFun := fun y => s₂ • y,
                              map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s₂ • (b₁ + b₂) = s₂ • b₁ + s₂ • b₂) },
                          map_smul' := (_ : ∀ (r : R) (y : ↑Y), s₂ • f r • y = f r • s₂ • y) }) },
          map_smul' :=
            (_ :
              ∀ (r : R) (s : S),
                {
                    toAddHom :=
                      { toFun := fun y => (r • s) • y,
                        map_add' := (_ : ∀ (b₁ b₂ : ↑Y), (r • s) • (b₁ + b₂) = (r • s) • b₁ + (r • s) • b₂) },
                    map_smul' := (_ : ∀ (r_1 : R) (y : ↑Y), (r • s) • f r_1 • y = f r_1 • (r • s) • y) } =
                  r •
                    {
                      toAddHom :=
                        { toFun := fun y => s • y, map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s • (b₁ + b₂) = s • b₁ + s • b₂) },
                      map_smul' := (_ : ∀ (r : R) (y : ↑Y), s • f r • y = f r • s • y) }) })
      (s • z1) =
    s •
      (lift
          {
            toAddHom :=
              {
                toFun := fun s =>
                  {
                    toAddHom :=
                      { toFun := fun y => s • y, map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s • (b₁ + b₂) = s • b₁ + s • b₂) },
                    map_smul' := (_ : ∀ (r : R) (y : ↑Y), s • f r • y = f r • s • y) },
                map_add' :=
                  (_ :
                    ∀ (s₁ s₂ : S),
                      {
                          toAddHom :=
                            { toFun := fun y => (s₁ + s₂) • y,
                              map_add' :=
                                (_ : ∀ (b₁ b₂ : ↑Y), (s₁ + s₂) • (b₁ + b₂) = (s₁ + s₂) • b₁ + (s₁ + s₂) • b₂) },
                          map_smul' := (_ : ∀ (r : R) (y : ↑Y), (s₁ + s₂) • f r • y = f r • (s₁ + s₂) • y) } =
                        {
                            toAddHom :=
                              { toFun := fun y => s₁ • y,
                                map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s₁ • (b₁ + b₂) = s₁ • b₁ + s₁ • b₂) },
                            map_smul' := (_ : ∀ (r : R) (y : ↑Y), s₁ • f r • y = f r • s₁ • y) } +
                          {
                            toAddHom :=
                              { toFun := fun y => s₂ • y,
                                map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s₂ • (b₁ + b₂) = s₂ • b₁ + s₂ • b₂) },
                            map_smul' := (_ : ∀ (r : R) (y : ↑Y), s₂ • f r • y = f r • s₂ • y) }) },
            map_smul' :=
              (_ :
                ∀ (r : R) (s : S),
                  {
                      toAddHom :=
                        { toFun := fun y => (r • s) • y,
                          map_add' := (_ : ∀ (b₁ b₂ : ↑Y), (r • s) • (b₁ + b₂) = (r • s) • b₁ + (r • s) • b₂) },
                      map_smul' := (_ : ∀ (r_1 : R) (y : ↑Y), (r • s) • f r_1 • y = f r_1 • (r • s) • y) } =
                    r •
                      {
                        toAddHom :=
                          { toFun := fun y => s • y,
                            map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s • (b₁ + b₂) = s • b₁ + s • b₂) },
                        map_smul' := (_ : ∀ (r : R) (y : ↑Y), s • f r • y = f r • s • y) }) })
        z1
ih2 :
  (lift
        {
          toAddHom :=
            {
              toFun := fun s =>
                {
                  toAddHom :=
                    { toFun := fun y => s • y, map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s • (b₁ + b₂) = s • b₁ + s • b₂) },
                  map_smul' := (_ : ∀ (r : R) (y : ↑Y), s • f r • y = f r • s • y) },
              map_add' :=
                (_ :
                  ∀ (s₁ s₂ : S),
                    {
                        toAddHom :=
                          { toFun := fun y => (s₁ + s₂) • y,
                            map_add' := (_ : ∀ (b₁ b₂ : ↑Y), (s₁ + s₂) • (b₁ + b₂) = (s₁ + s₂) • b₁ + (s₁ + s₂) • b₂) },
                        map_smul' := (_ : ∀ (r : R) (y : ↑Y), (s₁ + s₂) • f r • y = f r • (s₁ + s₂) • y) } =
                      {
                          toAddHom :=
                            { toFun := fun y => s₁ • y,
                              map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s₁ • (b₁ + b₂) = s₁ • b₁ + s₁ • b₂) },
                          map_smul' := (_ : ∀ (r : R) (y : ↑Y), s₁ • f r • y = f r • s₁ • y) } +
                        {
                          toAddHom :=
                            { toFun := fun y => s₂ • y,
                              map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s₂ • (b₁ + b₂) = s₂ • b₁ + s₂ • b₂) },
                          map_smul' := (_ : ∀ (r : R) (y : ↑Y), s₂ • f r • y = f r • s₂ • y) }) },
          map_smul' :=
            (_ :
              ∀ (r : R) (s : S),
                {
                    toAddHom :=
                      { toFun := fun y => (r • s) • y,
                        map_add' := (_ : ∀ (b₁ b₂ : ↑Y), (r • s) • (b₁ + b₂) = (r • s) • b₁ + (r • s) • b₂) },
                    map_smul' := (_ : ∀ (r_1 : R) (y : ↑Y), (r • s) • f r_1 • y = f r_1 • (r • s) • y) } =
                  r •
                    {
                      toAddHom :=
                        { toFun := fun y => s • y, map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s • (b₁ + b₂) = s • b₁ + s • b₂) },
                      map_smul' := (_ : ∀ (r : R) (y : ↑Y), s • f r • y = f r • s • y) }) })
      (s • z2) =
    s •
      (lift
          {
            toAddHom :=
              {
                toFun := fun s =>
                  {
                    toAddHom :=
                      { toFun := fun y => s • y, map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s • (b₁ + b₂) = s • b₁ + s • b₂) },
                    map_smul' := (_ : ∀ (r : R) (y : ↑Y), s • f r • y = f r • s • y) },
                map_add' :=
                  (_ :
                    ∀ (s₁ s₂ : S),
                      {
                          toAddHom :=
                            { toFun := fun y => (s₁ + s₂) • y,
                              map_add' :=
                                (_ : ∀ (b₁ b₂ : ↑Y), (s₁ + s₂) • (b₁ + b₂) = (s₁ + s₂) • b₁ + (s₁ + s₂) • b₂) },
                          map_smul' := (_ : ∀ (r : R) (y : ↑Y), (s₁ + s₂) • f r • y = f r • (s₁ + s₂) • y) } =
                        {
                            toAddHom :=
                              { toFun := fun y => s₁ • y,
                                map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s₁ • (b₁ + b₂) = s₁ • b₁ + s₁ • b₂) },
                            map_smul' := (_ : ∀ (r : R) (y : ↑Y), s₁ • f r • y = f r • s₁ • y) } +
                          {
                            toAddHom :=
                              { toFun := fun y => s₂ • y,
                                map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s₂ • (b₁ + b₂) = s₂ • b₁ + s₂ • b₂) },
                            map_smul' := (_ : ∀ (r : R) (y : ↑Y), s₂ • f r • y = f r • s₂ • y) }) },
            map_smul' :=
              (_ :
                ∀ (r : R) (s : S),
                  {
                      toAddHom :=
                        { toFun := fun y => (r • s) • y,
                          map_add' := (_ : ∀ (b₁ b₂ : ↑Y), (r • s) • (b₁ + b₂) = (r • s) • b₁ + (r • s) • b₂) },
                      map_smul' := (_ : ∀ (r_1 : R) (y : ↑Y), (r • s) • f r_1 • y = f r_1 • (r • s) • y) } =
                    r •
                      {
                        toAddHom :=
                          { toFun := fun y => s • y,
                            map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s • (b₁ + b₂) = s • b₁ + s • b₂) },
                        map_smul' := (_ : ∀ (r : R) (y : ↑Y), s • f r • y = f r • s • y) }) })
        z2
⊢ (lift
        {
          toAddHom :=
            {
              toFun := fun s =>
                {
                  toAddHom :=
                    { toFun := fun y => s • y, map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s • (b₁ + b₂) = s • b₁ + s • b₂) },
                  map_smul' := (_ : ∀ (r : R) (y : ↑Y), s • f r • y = f r • s • y) },
              map_add' :=
                (_ :
                  ∀ (s₁ s₂ : S),
                    {
                        toAddHom :=
                          { toFun := fun y => (s₁ + s₂) • y,
                            map_add' := (_ : ∀ (b₁ b₂ : ↑Y), (s₁ + s₂) • (b₁ + b₂) = (s₁ + s₂) • b₁ + (s₁ + s₂) • b₂) },
                        map_smul' := (_ : ∀ (r : R) (y : ↑Y), (s₁ + s₂) • f r • y = f r • (s₁ + s₂) • y) } =
                      {
                          toAddHom :=
                            { toFun := fun y => s₁ • y,
                              map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s₁ • (b₁ + b₂) = s₁ • b₁ + s₁ • b₂) },
                          map_smul' := (_ : ∀ (r : R) (y : ↑Y), s₁ • f r • y = f r • s₁ • y) } +
                        {
                          toAddHom :=
                            { toFun := fun y => s₂ • y,
                              map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s₂ • (b₁ + b₂) = s₂ • b₁ + s₂ • b₂) },
                          map_smul' := (_ : ∀ (r : R) (y : ↑Y), s₂ • f r • y = f r • s₂ • y) }) },
          map_smul' :=
            (_ :
              ∀ (r : R) (s : S),
                {
                    toAddHom :=
                      { toFun := fun y => (r • s) • y,
                        map_add' := (_ : ∀ (b₁ b₂ : ↑Y), (r • s) • (b₁ + b₂) = (r • s) • b₁ + (r • s) • b₂) },
                    map_smul' := (_ : ∀ (r_1 : R) (y : ↑Y), (r • s) • f r_1 • y = f r_1 • (r • s) • y) } =
                  r •
                    {
                      toAddHom :=
                        { toFun := fun y => s • y, map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s • (b₁ + b₂) = s • b₁ + s • b₂) },
                      map_smul' := (_ : ∀ (r : R) (y : ↑Y), s • f r • y = f r • s • y) }) })
      (s • (z1 + z2)) =
    s •
      (lift
          {
            toAddHom :=
              {
                toFun := fun s =>
                  {
                    toAddHom :=
                      { toFun := fun y => s • y, map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s • (b₁ + b₂) = s • b₁ + s • b₂) },
                    map_smul' := (_ : ∀ (r : R) (y : ↑Y), s • f r • y = f r • s • y) },
                map_add' :=
                  (_ :
                    ∀ (s₁ s₂ : S),
                      {
                          toAddHom :=
                            { toFun := fun y => (s₁ + s₂) • y,
                              map_add' :=
                                (_ : ∀ (b₁ b₂ : ↑Y), (s₁ + s₂) • (b₁ + b₂) = (s₁ + s₂) • b₁ + (s₁ + s₂) • b₂) },
                          map_smul' := (_ : ∀ (r : R) (y : ↑Y), (s₁ + s₂) • f r • y = f r • (s₁ + s₂) • y) } =
                        {
                            toAddHom :=
                              { toFun := fun y => s₁ • y,
                                map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s₁ • (b₁ + b₂) = s₁ • b₁ + s₁ • b₂) },
                            map_smul' := (_ : ∀ (r : R) (y : ↑Y), s₁ • f r • y = f r • s₁ • y) } +
                          {
                            toAddHom :=
                              { toFun := fun y => s₂ • y,
                                map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s₂ • (b₁ + b₂) = s₂ • b₁ + s₂ • b₂) },
                            map_smul' := (_ : ∀ (r : R) (y : ↑Y), s₂ • f r • y = f r • s₂ • y) }) },
            map_smul' :=
              (_ :
                ∀ (r : R) (s : S),
                  {
                      toAddHom :=
                        { toFun := fun y => (r • s) • y,
                          map_add' := (_ : ∀ (b₁ b₂ : ↑Y), (r • s) • (b₁ + b₂) = (r • s) • b₁ + (r • s) • b₂) },
                      map_smul' := (_ : ∀ (r_1 : R) (y : ↑Y), (r • s) • f r_1 • y = f r_1 • (r • s) • y) } =
                    r •
                      {
                        toAddHom :=
                          { toFun := fun y => s • y,
                            map_add' := (_ : ∀ (b₁ b₂ : ↑Y), s • (b₁ + b₂) = s • b₁ + s • b₂) },
                        map_smul' := (_ : ∀ (r : R) (y : ↑Y), s • f r • y = f r • s • y) }) })
        (z1 + z2)

Next tactic:
rw [smul_add, map_add, map_add, ih1, ih2, smul_add]