Theorem: CategoryTheory.Idempotents.Karoubi.Biproducts.bicone_π_f
File: Mathlib/CategoryTheory/Idempotents/Biproducts.lean

Proof steps:
state_before: C : Type u_1
inst✝³ : Category.{v, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Finite J
F : J → Karoubi C
⊢ ((biproduct.map fun j => (F j).p) ≫ biproduct.map fun j => (F j).p) = biproduct.map fun j => (F j).p
state_after: case w.w
C : Type u_1
inst✝³ : Category.{v, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Finite J
F : J → Karoubi C
j✝¹ j✝ : J
⊢ biproduct.ι (fun j => (F j).X) j✝ ≫
      ((biproduct.map fun j => (F j).p) ≫ biproduct.map fun j => (F j).p) ≫ biproduct.π (fun j => (F j).X) j✝¹ =
    biproduct.ι (fun j => (F j).X) j✝ ≫ (biproduct.map fun j => (F j).p) ≫ biproduct.π (fun j => (F j).X) j✝¹
tactic: ext
state_before: case w.w
C : Type u_1
inst✝³ : Category.{v, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Finite J
F : J → Karoubi C
j✝¹ j✝ : J
⊢ biproduct.ι (fun j => (F j).X) j✝ ≫
      ((biproduct.map fun j => (F j).p) ≫ biproduct.map fun j => (F j).p) ≫ biproduct.π (fun j => (F j).X) j✝¹ =
    biproduct.ι (fun j => (F j).X) j✝ ≫ (biproduct.map fun j => (F j).p) ≫ biproduct.π (fun j => (F j).X) j✝¹
state_after: no goals
tactic: simp only [assoc, biproduct.map_π, biproduct.map_π_assoc, idem]
state_before: C : Type u_1
inst✝³ : Category.{v, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Finite J
F : J → Karoubi C
j : J
⊢ (biproduct.map fun j => (F j).p) ≫ (biproduct.bicone fun j => (F j).X).π j =
    { X := ⨁ fun j => (F j).X, p := biproduct.map fun j => (F j).p, idem := ⋯ }.p ≫
      ((biproduct.map fun j => (F j).p) ≫ (biproduct.bicone fun j => (F j).X).π j) ≫ (F j).p
state_after: no goals
tactic: simp only [assoc, biproduct.bicone_π, biproduct.map_π, biproduct.map_π_assoc, (F j).idem]
state_before: C : Type u_1
inst✝³ : Category.{v, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Finite J
F : J → Karoubi C
j : J
⊢ (biproduct.ι (fun j => (F j).X) j ≫ biproduct.map fun j => (F j).p) =
    (F j).p ≫
      (biproduct.ι (fun j => (F j).X) j ≫ biproduct.map fun j => (F j).p) ≫
        { X := ⨁ fun j => (F j).X, p := biproduct.map fun j => (F j).p, idem := ⋯ }.p
state_after: no goals
tactic: simp only [biproduct.ι_map, assoc, idem_assoc]
state_before: C : Type u_1
inst✝³ : Category.{v, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Finite J
F : J → Karoubi C
j j' : J
⊢ (fun j => { f := biproduct.ι (fun j => (F j).X) j ≫ biproduct.map fun j => (F j).p, comm := ⋯ }) j ≫
      (fun j => { f := (biproduct.map fun j => (F j).p) ≫ (biproduct.bicone fun j => (F j).X).π j, comm := ⋯ }) j' =
    if h : j = j' then eqToHom ⋯ else 0
state_after: case pos
C : Type u_1
inst✝³ : Category.{v, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Finite J
F : J → Karoubi C
j j' : J
h : j = j'
⊢ (fun j => { f := biproduct.ι (fun j => (F j).X) j ≫ biproduct.map fun j => (F j).p, comm := ⋯ }) j ≫
      (fun j => { f := (biproduct.map fun j => (F j).p) ≫ (biproduct.bicone fun j => (F j).X).π j, comm := ⋯ }) j' =
    eqToHom ⋯

case neg
C : Type u_1
inst✝³ : Category.{v, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Finite J
F : J → Karoubi C
j j' : J
h : ¬j = j'
⊢ (fun j => { f := biproduct.ι (fun j => (F j).X) j ≫ biproduct.map fun j => (F j).p, comm := ⋯ }) j ≫
      (fun j => { f := (biproduct.map fun j => (F j).p) ≫ (biproduct.bicone fun j => (F j).X).π j, comm := ⋯ }) j' =
    0
tactic: split_ifs with h