Theorem: CategoryTheory.Mat_.additiveObjIsoBiproduct_hom_π
File: Mathlib/CategoryTheory/Preadditive/Mat.lean

Proof steps:
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : Preadditive C
D : Type u₁
inst✝² : Category.{v₁, u₁} D
inst✝¹ : Preadditive D
F : Mat_ C ⥤ D
inst✝ : F.Additive
M : Mat_ C
i : M.ι
⊢ (additiveObjIsoBiproduct F M).hom ≫ biproduct.π (fun i => F.obj ((embedding C).obj (M.X i))) i =
    F.map (M.isoBiproductEmbedding.hom ≫ biproduct.π (fun i => (embedding C).obj (M.X i)) i)
state_after: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : Preadditive C
D : Type u₁
inst✝² : Category.{v₁, u₁} D
inst✝¹ : Preadditive D
F : Mat_ C ⥤ D
inst✝ : F.Additive
M : Mat_ C
i : M.ι
⊢ (F.map (biproduct.lift fun i j k => if h : j = i then eqToHom ⋯ else 0) ≫
        biproduct.lift (F.mapBicone (biproduct.bicone fun i => (embedding C).obj (M.X i))).π) ≫
      biproduct.π (fun i => F.obj ((embedding C).obj (M.X i))) i =
    F.map
      ((biproduct.lift fun i j k => if h : j = i then eqToHom ⋯ else 0) ≫
        biproduct.π (fun i => (embedding C).obj (M.X i)) i)
tactic: dsimp [additiveObjIsoBiproduct]
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : Preadditive C
D : Type u₁
inst✝² : Category.{v₁, u₁} D
inst✝¹ : Preadditive D
F : Mat_ C ⥤ D
inst✝ : F.Additive
M : Mat_ C
i : M.ι
⊢ (F.map (biproduct.lift fun i j k => if h : j = i then eqToHom ⋯ else 0) ≫
        biproduct.lift (F.mapBicone (biproduct.bicone fun i => (embedding C).obj (M.X i))).π) ≫
      biproduct.π (fun i => F.obj ((embedding C).obj (M.X i))) i =
    F.map
      ((biproduct.lift fun i j k => if h : j = i then eqToHom ⋯ else 0) ≫
        biproduct.π (fun i => (embedding C).obj (M.X i)) i)
state_after: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : Preadditive C
D : Type u₁
inst✝² : Category.{v₁, u₁} D
inst✝¹ : Preadditive D
F : Mat_ C ⥤ D
inst✝ : F.Additive
M : Mat_ C
i : M.ι
⊢ F.map (biproduct.lift fun i j k => if h : j = i then eqToHom ⋯ else 0) ≫
      biproduct.lift (F.mapBicone (biproduct.bicone fun i => (embedding C).obj (M.X i))).π ≫
        biproduct.π (fun i => F.obj ((embedding C).obj (M.X i))) i =
    F.map fun j k => if h : j = i then eqToHom ⋯ else 0
tactic: rw [biproduct.lift_π, Category.assoc]
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : Preadditive C
D : Type u₁
inst✝² : Category.{v₁, u₁} D
inst✝¹ : Preadditive D
F : Mat_ C ⥤ D
inst✝ : F.Additive
M : Mat_ C
i : M.ι
⊢ F.map (biproduct.lift fun i j k => if h : j = i then eqToHom ⋯ else 0) ≫
      biproduct.lift (F.mapBicone (biproduct.bicone fun i => (embedding C).obj (M.X i))).π ≫
        biproduct.π (fun i => F.obj ((embedding C).obj (M.X i))) i =
    F.map fun j k => if h : j = i then eqToHom ⋯ else 0
state_after: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : Preadditive C
D : Type u₁
inst✝² : Category.{v₁, u₁} D
inst✝¹ : Preadditive D
F : Mat_ C ⥤ D
inst✝ : F.Additive
M : Mat_ C
i : M.ι
⊢ F.map
      ((biproduct.lift fun i j k => if h : j = i then eqToHom ⋯ else 0) ≫
        (biproduct.bicone fun i => (embedding C).obj (M.X i)).π i) =
    F.map fun j k => if h : j = i then eqToHom ⋯ else 0
tactic: erw [biproduct.lift_π, ← F.map_comp]
state_before: C : Type u₁
inst✝⁴ : Category.{v₁, u₁} C
inst✝³ : Preadditive C
D : Type u₁
inst✝² : Category.{v₁, u₁} D
inst✝¹ : Preadditive D
F : Mat_ C ⥤ D
inst✝ : F.Additive
M : Mat_ C
i : M.ι
⊢ F.map
      ((biproduct.lift fun i j k => if h : j = i then eqToHom ⋯ else 0) ≫
        (biproduct.bicone fun i => (embedding C).obj (M.X i)).π i) =
    F.map fun j k => if h : j = i then eqToHom ⋯ else 0
state_after: no goals
tactic: simp