/-- Auxiliary definition for `unit'` -/
def app' (Y : ModuleCat S) : Y →ₗ[S] (restrictScalars f ⋙ coextendScalars f).obj Y :=
  { toFun := fun y : Y =>
      { toFun := fun s : S => (s • y : Y)
        map_add' := fun s s' => add_smul _ _ _
        map_smul' := fun r (s : S) => by
          dsimp
          erw [smul_eq_mul, mul_smul]
          simp }
    map_add' := fun y1 y2 =>
      LinearMap.ext fun s : S => by
        -- Porting note: double dsimp seems odd
        

Proof state:
R✝ : Type u₁
S✝ : Type u₂
inst✝³ : CommRing R✝
inst✝² : CommRing S✝
f✝ : R✝ →+* S✝
R : Type u₁
S : Type u₂
inst✝¹ : Ring R
inst✝ : Ring S
f : R →+* S
Y : ModuleCat S
y1 y2 : ↑Y
s : S
⊢ ((fun y =>
          {
            toAddHom :=
              { toFun := fun s => s • y,
                map_add' := (_ : ∀ (s s' : ↑((restrictScalars f).obj (mk S))), (s + s') • y = s • y + s' • y) },
            map_smul' :=
              (_ :
                ∀ (r : R) (s : S),
                  AddHom.toFun
                      { toFun := fun s => s • y,
                        map_add' := (_ : ∀ (s s' : ↑((restrictScalars f).obj (mk S))), (s + s') • y = s • y + s' • y) }
                      (r • s) =
                    (RingHom.id R) r •
                      AddHom.toFun
                        { toFun := fun s => s • y,
                          map_add' :=
                            (_ : ∀ (s s' : ↑((restrictScalars f).obj (mk S))), (s + s') • y = s • y + s' • y) }
                        s) })
        (y1 + y2))
      s =
    ((fun y =>
            {
              toAddHom :=
                { toFun := fun s => s • y,
                  map_add' := (_ : ∀ (s s' : ↑((restrictScalars f).obj (mk S))), (s + s') • y = s • y + s' • y) },
              map_smul' :=
                (_ :
                  ∀ (r : R) (s : S),
                    AddHom.toFun
                        { toFun := fun s => s • y,
                          map_add' :=
                            (_ : ∀ (s s' : ↑((restrictScalars f).obj (mk S))), (s + s') • y = s • y + s' • y) }
                        (r • s) =
                      (RingHom.id R) r •
                        AddHom.toFun
                          { toFun := fun s => s • y,
                            map_add' :=
                              (_ : ∀ (s s' : ↑((restrictScalars f).obj (mk S))), (s + s') • y = s • y + s' • y) }
                          s) })
          y1 +
        (fun y =>
            {
              toAddHom :=
                { toFun := fun s => s • y,
                  map_add' := (_ : ∀ (s s' : ↑((restrictScalars f).obj (mk S))), (s + s') • y = s • y + s' • y) },
              map_smul' :=
                (_ :
                  ∀ (r : R) (s : S),
                    AddHom.toFun
                        { toFun := fun s => s • y,
                          map_add' :=
                            (_ : ∀ (s s' : ↑((restrictScalars f).obj (mk S))), (s + s') • y = s • y + s' • y) }
                        (r • s) =
                      (RingHom.id R) r •
                        AddHom.toFun
                          { toFun := fun s => s • y,
                            map_add' :=
                              (_ : ∀ (s s' : ↑((restrictScalars f).obj (mk S))), (s + s') • y = s • y + s' • y) }
                          s) })
          y2)
      s

Next tactic:
dsimp