Theorem: CategoryTheory.Idempotents.Karoubi.karoubi_hasFiniteBiproducts
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
n : ℕ
F : Fin n → Karoubi C
⊢ HasBiproduct F
state_after: C : Type u_1
inst✝² : Category.{v, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteBiproducts C
n : ℕ
F : Fin n → Karoubi C
⊢ ∑ j : Fin n, (Biproducts.bicone F).π j ≫ (Biproducts.bicone F).ι j = 𝟙 (Biproducts.bicone F).pt
tactic: apply hasBiproduct_of_total (Biproducts.bicone F)
state_before: C : Type u_1
inst✝² : Category.{v, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteBiproducts C
n : ℕ
F : Fin n → Karoubi C
⊢ ∑ j : Fin n, (Biproducts.bicone F).π j ≫ (Biproducts.bicone F).ι j = 𝟙 (Biproducts.bicone F).pt
state_after: C : Type u_1
inst✝² : Category.{v, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteBiproducts C
n : ℕ
F : Fin n → Karoubi C
⊢ (∑ j : Fin n, (Biproducts.bicone F).π j ≫ (Biproducts.bicone F).ι j).f = (𝟙 (Biproducts.bicone F).pt).f
tactic: simp only [hom_ext_iff]
state_before: C : Type u_1
inst✝² : Category.{v, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteBiproducts C
n : ℕ
F : Fin n → Karoubi C
⊢ (∑ j : Fin n, (Biproducts.bicone F).π j ≫ (Biproducts.bicone F).ι j).f = (𝟙 (Biproducts.bicone F).pt).f
state_after: C : Type u_1
inst✝² : Category.{v, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteBiproducts C
n : ℕ
F : Fin n → Karoubi C
j : Fin n
⊢ biproduct.ι (fun j => (F j).X) j ≫ (∑ j : Fin n, (Biproducts.bicone F).π j ≫ (Biproducts.bicone F).ι j).f =
    biproduct.ι (fun j => (F j).X) j ≫ (𝟙 (Biproducts.bicone F).pt).f
tactic: refine biproduct.hom_ext' _ _ (fun j => ?_)
state_before: C : Type u_1
inst✝² : Category.{v, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteBiproducts C
n : ℕ
F : Fin n → Karoubi C
j : Fin n
⊢ biproduct.ι (fun j => (F j).X) j ≫ (∑ j : Fin n, (Biproducts.bicone F).π j ≫ (Biproducts.bicone F).ι j).f =
    biproduct.ι (fun j => (F j).X) j ≫ (𝟙 (Biproducts.bicone F).pt).f
state_after: C : Type u_1
inst✝² : Category.{v, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteBiproducts C
n : ℕ
F : Fin n → Karoubi C
j : Fin n
⊢ ∑ j_1 : Fin n,
      biproduct.ι (fun j => (F j).X) j ≫
        biproduct.π (fun j => (F j).X) j_1 ≫ (F j_1).p ≫ biproduct.ι (fun j => (F j).X) j_1 =
    (F j).p ≫ biproduct.ι (fun j => (F j).X) j
tactic: simp only [Biproducts.bicone_pt_X, sum_hom, comp_f, Biproducts.bicone_π_f,
            biproduct.bicone_π, biproduct.map_π, Biproducts.bicone_ι_f, biproduct.ι_map, assoc,
            idem_assoc, id_f, Biproducts.bicone_pt_p, comp_sum]
state_before: C : Type u_1
inst✝² : Category.{v, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteBiproducts C
n : ℕ
F : Fin n → Karoubi C
j : Fin n
⊢ ∑ j_1 : Fin n,
      biproduct.ι (fun j => (F j).X) j ≫
        biproduct.π (fun j => (F j).X) j_1 ≫ (F j_1).p ≫ biproduct.ι (fun j => (F j).X) j_1 =
    (F j).p ≫ biproduct.ι (fun j => (F j).X) j
state_after: C : Type u_1
inst✝² : Category.{v, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteBiproducts C
n : ℕ
F : Fin n → Karoubi C
j : Fin n
⊢ biproduct.ι (fun j => (F j).X) j ≫ biproduct.π (fun j => (F j).X) j ≫ (F j).p ≫ biproduct.ι (fun j => (F j).X) j =
    (F j).p ≫ biproduct.ι (fun j => (F j).X) j

case h₀
C : Type u_1
inst✝² : Category.{v, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteBiproducts C
n : ℕ
F : Fin n → Karoubi C
j : Fin n
⊢ ∀ b ∈ Finset.univ,
    b ≠ j →
      biproduct.ι (fun j => (F j).X) j ≫ biproduct.π (fun j => (F j).X) b ≫ (F b).p ≫ biproduct.ι (fun j => (F j).X) b =
        0

case h₁
C : Type u_1
inst✝² : Category.{v, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteBiproducts C
n : ℕ
F : Fin n → Karoubi C
j : Fin n
⊢ j ∉ Finset.univ →
    biproduct.ι (fun j => (F j).X) j ≫ biproduct.π (fun j => (F j).X) j ≫ (F j).p ≫ biproduct.ι (fun j => (F j).X) j = 0
tactic: rw [Finset.sum_eq_single j]