Theorem: CategoryTheory.Idempotents.Karoubi.karoubi_hasFiniteBiproducts
File: Mathlib/CategoryTheory/Idempotents/Biproducts.lean

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
⊢ 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: 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 = 𝟙 (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: 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, (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: 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_eq, 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
⊢ 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: rw [Finset.sum_eq_single 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
⊢ ∑ 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: simp only [bicone_ι_π_self_assoc]
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 ≫ 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
state_after: no goals

tactic: intro b _ hb
state_before: 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
state_after: 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 b : Fin n
a✝ : b ∈ Finset.univ
hb : 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

tactic: simp only [biproduct.ι_π_ne_assoc _ hb.symm, zero_comp]
state_before: 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 b : Fin n
a✝ : b ∈ Finset.univ
hb : 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
state_after: no goals

tactic: intro hj
state_before: 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
state_after: 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
hj : 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: simp only [Finset.mem_univ, not_true] at hj
state_before: 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
hj : 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
state_after: no goals