/-- Witness that the limit cone in `AlgebraCat R` is a limit cone.
(Internal use only; use the limits API.)
-/
def limitConeIsLimit (F : J ⥤ AlgebraCatMax.{v, w} R) : IsLimit (limitCone.{v, w} F) := by
  refine'
    IsLimit.ofFaithful (forget (AlgebraCat R)) (Types.limitConeIsLimit.{v, w} _)
      -- Porting note: in mathlib3 the function term
      -- `fun v => ⟨fun j => ((forget (AlgebraCat R)).mapCone s).π.app j v`
      -- was provided by unification, and the last argument `(fun s => _)` was `(fun s => rfl)`.
      (fun s => ⟨⟨⟨⟨fun v => ⟨fun j => ((forget (AlgebraCat R)).mapCone s).π.app j v, _⟩,
         _⟩, _⟩, _, _⟩, _⟩)
      (fun s => _)
  · intro j j' f
    exact FunLike.congr_fun (Cone.w s f) v
  · -- Porting note: we could add a custom `ext` lemma here.
    apply Subtype.ext
    ext j
    simp only [Functor.comp_obj, Functor.mapCone_pt, Functor.mapCone_π_app,
      forget_map_eq_coe]
    -- This used to be as below but we need `erw` after leanprover/lean4#2644
    -- simp [forget_map_eq_coe, AlgHom.map_one, Functor.mapCone_π_app]
    erw [map_one]
    rfl
  · intro x y
    apply Subtype.ext
    ext j
    simp only [Functor.comp_obj, Functor.mapCone_pt, Functor.mapCone_π_app,
      forget_map_eq_coe]
    -- This used to be as below, but we need `erw` after leanprover/lean4#2644
    -- simp [forget_map_eq_coe, AlgHom.map_mul, Functor.mapCone_π_app]
    erw [map_mul]
    rfl
  · 

Proof state:
case refine'_4
R : Type u
inst✝¹ : CommRing R
J : Type v
inst✝ : SmallCategory J
F : J ⥤ AlgebraCatMax R
s : Cone F
⊢ OneHom.toFun
      (↑{
          toOneHom :=
            {
              toFun := fun v =>
                { val := fun j => ((forget (AlgebraCat R)).mapCone s).π.app j v,
                  property := (_ : ∀ {j j' : J} (f : j ⟶ j'), (s.π.app j ≫ F.map f) v = (s.π.app j') v) },
              map_one' :=
                (_ :
                  (fun v =>
                        { val := fun j => ((forget (AlgebraCat R)).mapCone s).π.app j v,
                          property := (_ : ∀ {j j' : J} (f : j ⟶ j'), (s.π.app j ≫ F.map f) v = (s.π.app j') v) })
                      1 =
                    1) },
          map_mul' :=
            (_ :
              ∀ (x y : ↑s.pt),
                OneHom.toFun
                    {
                      toFun := fun v =>
                        { val := fun j => ((forget (AlgebraCat R)).mapCone s).π.app j v,
                          property := (_ : ∀ {j j' : J} (f : j ⟶ j'), (s.π.app j ≫ F.map f) v = (s.π.app j') v) },
                      map_one' :=
                        (_ :
                          (fun v =>
                                { val := fun j => ((forget (AlgebraCat R)).mapCone s).π.app j v,
                                  property :=
                                    (_ : ∀ {j j' : J} (f : j ⟶ j'), (s.π.app j ≫ F.map f) v = (s.π.app j') v) })
                              1 =
                            1) }
                    (x * y) =
                  OneHom.toFun
                      {
                        toFun := fun v =>
                          { val := fun j => ((forget (AlgebraCat R)).mapCone s).π.app j v,
                            property := (_ : ∀ {j j' : J} (f : j ⟶ j'), (s.π.app j ≫ F.map f) v = (s.π.app j') v) },
                        map_one' :=
                          (_ :
                            (fun v =>
                                  { val := fun j => ((forget (AlgebraCat R)).mapCone s).π.app j v,
                                    property :=
                                      (_ : ∀ {j j' : J} (f : j ⟶ j'), (s.π.app j ≫ F.map f) v = (s.π.app j') v) })
                                1 =
                              1) }
                      x *
                    OneHom.toFun
                      {
                        toFun := fun v =>
                          { val := fun j => ((forget (AlgebraCat R)).mapCone s).π.app j v,
                            property := (_ : ∀ {j j' : J} (f : j ⟶ j'), (s.π.app j ≫ F.map f) v = (s.π.app j') v) },
                        map_one' :=
                          (_ :
                            (fun v =>
                                  { val := fun j => ((forget (AlgebraCat R)).mapCone s).π.app j v,
                                    property :=
                                      (_ : ∀ {j j' : J} (f : j ⟶ j'), (s.π.app j ≫ F.map f) v = (s.π.app j') v) })
                                1 =
                              1) }
                      y) })
      0 =
    0

Next tactic:
simp only [Functor.comp_obj, Functor.mapCone_pt, Functor.mapCone_π_app,
      forget_map_eq_coe]