-- Module: Mathlib.Algebra.Category.Grp.Biproducts
Goal:
J : Type w
f : J → AddCommGrpCat
s : Fan f
x y : (↑s.1 : Type (max u w))
simp :
  (fun (j : J) ↦
      HAdd.hAdd (α := (↑(Functor.obj (Discrete.functor f) { as := j : Discrete J }) : Type (max u w))) (β :=
        (↑(Functor.obj (Discrete.functor f) { as := j : Discrete J }) : Type (max u w)))
        ((ConcreteCategory.hom (FC := fun (x1 x2 : AddCommGrpCat) ↦ (↑x1 : Type (max u w)) →+ (↑x2 : Type (max u w)))
                (CC := carrier) (X := s.pt) (Y := Functor.obj (Discrete.functor f) { as := j : Discrete J })
                (s.π.app { as := j }) :
              (a : (↑s.pt : Type (max u w))) → (↑((Discrete.functor f).obj { as := j }) : Type (max u w)))
            x :
          (↑(Functor.obj (Discrete.functor f) { as := j : Discrete J }) : Type (max u w)))
        ((ConcreteCategory.hom (FC := fun (x1 x2 : AddCommGrpCat) ↦ (↑x1 : Type (max u w)) →+ (↑x2 : Type (max u w)))
                (CC := carrier) (X := s.pt) (Y := Functor.obj (Discrete.functor f) { as := j : Discrete J })
                (s.π.app { as := j }) :
              (a : (↑s.pt : Type (max u w))) → (↑((Discrete.functor f).obj { as := j }) : Type (max u w)))
            y :
          (↑(Functor.obj (Discrete.functor f) { as := j : Discrete J }) : Type (max u w)))) =
    HAdd.hAdd (α := (j : J) → (↑(f j) : Type (max u w)))
      (fun (j : J) ↦
        (ConcreteCategory.hom (FC := fun (x1 x2 : AddCommGrpCat) ↦ (↑x1 : Type (max u w)) →+ (↑x2 : Type (max u w)))
              (CC := carrier) (X := s.pt) (Y := Functor.obj (Discrete.functor f) { as := j : Discrete J })
              (s.π.app { as := j : Discrete J }) :
            (a : (↑s.pt : Type (max u w))) → (↑((Discrete.functor f).obj { as := j }) : Type (max u w)))
          x)
      fun (j : J) ↦
      (ConcreteCategory.hom (FC := fun (x1 x2 : AddCommGrpCat) ↦ (↑x1 : Type (max u w)) →+ (↑x2 : Type (max u w)))
            (CC := carrier) (X := s.pt) (Y := Functor.obj (Discrete.functor f) { as := j : Discrete J })
            (s.π.app { as := j : Discrete J }) :
          (a : (↑s.pt : Type (max u w))) → (↑((Discrete.functor f).obj { as := j }) : Type (max u w)))
        y
⊢ (fun (j : J) ↦
      (ConcreteCategory.hom (FC := fun (x1 x2 : AddCommGrpCat) ↦ (↑x1 : Type (max u w)) →+ (↑x2 : Type (max u w)))
            (CC := carrier) (X := Functor.obj (Functor.obj (Functor.const (Discrete J)) s.pt) { as := j : Discrete J })
            (s.π.app { as := j }) :
          (a : (↑(((Functor.const (Discrete J)).obj s.pt).obj { as := j }) : Type (max u w))) →
            (↑((Discrete.functor f).obj { as := j }) : Type (max u w)))
        (x + y)) =
    HAdd.hAdd (α := (j : J) → (↑(f j) : Type (max u w)))
      (fun (j : J) ↦
        (ConcreteCategory.hom (FC := fun (x1 x2 : AddCommGrpCat) ↦ (↑x1 : Type (max u w)) →+ (↑x2 : Type (max u w)))
              (CC := carrier) (X :=
              Functor.obj (Functor.obj (Functor.const (Discrete J)) s.pt) { as := j : Discrete J })
              (s.π.app { as := j : Discrete J }) :
            (a : (↑(((Functor.const (Discrete J)).obj s.pt).obj { as := j }) : Type (max u w))) →
              (↑((Discrete.functor f).obj { as := j }) : Type (max u w)))
          x)
      fun (j : J) ↦
      (ConcreteCategory.hom (FC := fun (x1 x2 : AddCommGrpCat) ↦ (↑x1 : Type (max u w)) →+ (↑x2 : Type (max u w)))
            (CC := carrier) (X := Functor.obj (Functor.obj (Functor.const (Discrete J)) s.pt) { as := j : Discrete J })
            (s.π.app { as := j : Discrete J }) :
          (a : (↑(((Functor.const (Discrete J)).obj s.pt).obj { as := j }) : Type (max u w))) →
            (↑((Discrete.functor f).obj { as := j }) : Type (max u w)))
        y

Tactic:
simp only [Functor.const_obj_obj, map_add]

Premises used: map_add, CategoryTheory.Functor.const_obj_obj