Theorem: AlgebraicTopology.DoldKan.N₂Γ₂ToKaroubiIso_hom_app
File: Mathlib/AlgebraicTopology/DoldKan/GammaCompN.lean

tactic: ext n
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
⊢ (N₂Γ₂ToKaroubiIso.hom.app X).f = PInfty
state_after: case h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
n : ℕ
⊢ (N₂Γ₂ToKaroubiIso.hom.app X).f.f n = PInfty.f n

tactic: dsimp [N₂Γ₂ToKaroubiIso]
state_before: case h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
n : ℕ
⊢ (N₂Γ₂ToKaroubiIso.hom.app X).f.f n = PInfty.f n
state_after: case h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
n : ℕ
⊢ (((PInfty.f n ≫
            (Γ₀.splitting X).desc { unop := [n] } fun A =>
              𝟙 (X.X A.fst.unop.len) ≫ ((Γ₀.splitting X).cofan { unop := [n] }).inj A) ≫
          PInfty.f n ≫ 𝟙 (Γ₀.Obj.obj₂ X { unop := [n] })) ≫
        PInfty.f n ≫ 𝟙 (Γ₀.Obj.obj₂ X { unop := [n] })) ≫
      PInfty.f n =
    PInfty.f n

tactic: simp only [comp_id, assoc, PInfty_f_idem]
state_before: case h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
n : ℕ
⊢ (((PInfty.f n ≫
            (Γ₀.splitting X).desc { unop := [n] } fun A =>
              𝟙 (X.X A.fst.unop.len) ≫ ((Γ₀.splitting X).cofan { unop := [n] }).inj A) ≫
          PInfty.f n ≫ 𝟙 (Γ₀.Obj.obj₂ X { unop := [n] })) ≫
        PInfty.f n ≫ 𝟙 (Γ₀.Obj.obj₂ X { unop := [n] })) ≫
      PInfty.f n =
    PInfty.f n
state_after: case h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
n : ℕ
⊢ PInfty.f n ≫
      ((Γ₀.splitting X).desc { unop := [n] } fun A =>
          𝟙 (X.X A.fst.unop.len) ≫ ((Γ₀.splitting X).cofan { unop := [n] }).inj A) ≫
        PInfty.f n =
    PInfty.f n

tactic: conv_rhs =>
  rw [← PInfty_f_idem]
state_before: case h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
n : ℕ
⊢ PInfty.f n ≫
      ((Γ₀.splitting X).desc { unop := [n] } fun A =>
          𝟙 (X.X A.fst.unop.len) ≫ ((Γ₀.splitting X).cofan { unop := [n] }).inj A) ≫
        PInfty.f n =
    PInfty.f n
state_after: case h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
n : ℕ
⊢ PInfty.f n ≫
      ((Γ₀.splitting X).desc { unop := [n] } fun A =>
          𝟙 (X.X A.fst.unop.len) ≫ ((Γ₀.splitting X).cofan { unop := [n] }).inj A) ≫
        PInfty.f n =
    PInfty.f n ≫ PInfty.f n

tactic: congr 1
state_before: case h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
n : ℕ
⊢ PInfty.f n ≫
      ((Γ₀.splitting X).desc { unop := [n] } fun A =>
          𝟙 (X.X A.fst.unop.len) ≫ ((Γ₀.splitting X).cofan { unop := [n] }).inj A) ≫
        PInfty.f n =
    PInfty.f n ≫ PInfty.f n
state_after: case h.e_a
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
n : ℕ
⊢ ((Γ₀.splitting X).desc { unop := [n] } fun A =>
        𝟙 (X.X A.fst.unop.len) ≫ ((Γ₀.splitting X).cofan { unop := [n] }).inj A) ≫
      PInfty.f n =
    PInfty.f n

tactic: apply (Γ₀.splitting X).hom_ext'
state_before: case h.e_a
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
n : ℕ
⊢ ((Γ₀.splitting X).desc { unop := [n] } fun A =>
        𝟙 (X.X A.fst.unop.len) ≫ ((Γ₀.splitting X).cofan { unop := [n] }).inj A) ≫
      PInfty.f n =
    PInfty.f n
state_after: case h.e_a.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
n : ℕ
⊢ ∀ (A : Splitting.IndexSet { unop := [n] }),
    ((Γ₀.splitting X).cofan { unop := [n] }).inj A ≫
        ((Γ₀.splitting X).desc { unop := [n] } fun A =>
            𝟙 (X.X A.fst.unop.len) ≫ ((Γ₀.splitting X).cofan { unop := [n] }).inj A) ≫
          PInfty.f n =
      ((Γ₀.splitting X).cofan { unop := [n] }).inj A ≫ PInfty.f n

tactic: intro A
state_before: case h.e_a.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
n : ℕ
⊢ ∀ (A : Splitting.IndexSet { unop := [n] }),
    ((Γ₀.splitting X).cofan { unop := [n] }).inj A ≫
        ((Γ₀.splitting X).desc { unop := [n] } fun A =>
            𝟙 (X.X A.fst.unop.len) ≫ ((Γ₀.splitting X).cofan { unop := [n] }).inj A) ≫
          PInfty.f n =
      ((Γ₀.splitting X).cofan { unop := [n] }).inj A ≫ PInfty.f n
state_after: case h.e_a.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
n : ℕ
A : Splitting.IndexSet { unop := [n] }
⊢ ((Γ₀.splitting X).cofan { unop := [n] }).inj A ≫
      ((Γ₀.splitting X).desc { unop := [n] } fun A =>
          𝟙 (X.X A.fst.unop.len) ≫ ((Γ₀.splitting X).cofan { unop := [n] }).inj A) ≫
        PInfty.f n =
    ((Γ₀.splitting X).cofan { unop := [n] }).inj A ≫ PInfty.f n

tactic: rw [Splitting.ι_desc_assoc, assoc]
state_before: case h.e_a.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
n : ℕ
A : Splitting.IndexSet { unop := [n] }
⊢ ((Γ₀.splitting X).cofan { unop := [n] }).inj A ≫
      ((Γ₀.splitting X).desc { unop := [n] } fun A =>
          𝟙 (X.X A.fst.unop.len) ≫ ((Γ₀.splitting X).cofan { unop := [n] }).inj A) ≫
        PInfty.f n =
    ((Γ₀.splitting X).cofan { unop := [n] }).inj A ≫ PInfty.f n
state_after: case h.e_a.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
n : ℕ
A : Splitting.IndexSet { unop := [n] }
⊢ 𝟙 (X.X A.fst.unop.len) ≫ ((Γ₀.splitting X).cofan { unop := [n] }).inj A ≫ PInfty.f n =
    ((Γ₀.splitting X).cofan { unop := [n] }).inj A ≫ PInfty.f n

tactic: apply id_comp
state_before: case h.e_a.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X : ChainComplex C ℕ
n : ℕ
A : Splitting.IndexSet { unop := [n] }
⊢ 𝟙 (X.X A.fst.unop.len) ≫ ((Γ₀.splitting X).cofan { unop := [n] }).inj A ≫ PInfty.f n =
    ((Γ₀.splitting X).cofan { unop := [n] }).inj A ≫ PInfty.f n
state_after: no goals