Theorem: AlgebraicTopology.DoldKan.Γ₀.obj_map
File: Mathlib/AlgebraicTopology/DoldKan/FunctorGamma.lean

Proof steps:
state_before: C : Type u_1
inst✝² : Category.{?u.38366, u_1} C
inst✝¹ : Preadditive C
K✝ K' : ChainComplex C ℕ
f : K✝ ⟶ K'
Δ✝ Δ' Δ'' : SimplexCategory
inst✝ : HasFiniteCoproducts C
K : ChainComplex C ℕ
Δ : SimplexCategoryᵒᵖ
x✝ : Discrete (Splitting.IndexSet Δ)
A : Splitting.IndexSet Δ
⊢ colimit.ι (Discrete.functor fun A => Obj.summand K Δ A) { as := A } ≫
      { obj := fun Δ => Obj.obj₂ K Δ, map := fun {X Y} θ => Obj.map K θ }.map (𝟙 Δ) =
    colimit.ι (Discrete.functor fun A => Obj.summand K Δ A) { as := A } ≫
      𝟙 ({ obj := fun Δ => Obj.obj₂ K Δ, map := fun {X Y} θ => Obj.map K θ }.obj Δ)
state_after: C : Type u_1
inst✝² : Category.{?u.38366, u_1} C
inst✝¹ : Preadditive C
K✝ K' : ChainComplex C ℕ
f : K✝ ⟶ K'
Δ✝ Δ' Δ'' : SimplexCategory
inst✝ : HasFiniteCoproducts C
K : ChainComplex C ℕ
Δ : SimplexCategoryᵒᵖ
x✝ : Discrete (Splitting.IndexSet Δ)
A : Splitting.IndexSet Δ
⊢ colimit.ι (Discrete.functor fun A => Obj.summand K Δ A) { as := A } ≫ Obj.map K (𝟙 Δ) =
    colimit.ι (Discrete.functor fun A => Obj.summand K Δ A) { as := A } ≫ 𝟙 (Obj.obj₂ K Δ)
tactic: dsimp
state_before: C : Type u_1
inst✝² : Category.{?u.38366, u_1} C
inst✝¹ : Preadditive C
K✝ K' : ChainComplex C ℕ
f : K✝ ⟶ K'
Δ✝ Δ' Δ'' : SimplexCategory
inst✝ : HasFiniteCoproducts C
K : ChainComplex C ℕ
Δ : SimplexCategoryᵒᵖ
x✝ : Discrete (Splitting.IndexSet Δ)
A : Splitting.IndexSet Δ
⊢ colimit.ι (Discrete.functor fun A => Obj.summand K Δ A) { as := A } ≫ Obj.map K (𝟙 Δ) =
    colimit.ι (Discrete.functor fun A => Obj.summand K Δ A) { as := A } ≫ 𝟙 (Obj.obj₂ K Δ)
state_after: C : Type u_1
inst✝² : Category.{?u.38366, u_1} C
inst✝¹ : Preadditive C
K✝ K' : ChainComplex C ℕ
f : K✝ ⟶ K'
Δ✝ Δ' Δ'' : SimplexCategory
inst✝ : HasFiniteCoproducts C
K : ChainComplex C ℕ
Δ : SimplexCategoryᵒᵖ
x✝ : Discrete (Splitting.IndexSet Δ)
A : Splitting.IndexSet Δ
fac : A.e ≫ 𝟙 (unop A.fst) = (𝟙 Δ).unop ≫ A.e
⊢ colimit.ι (Discrete.functor fun A => Obj.summand K Δ A) { as := A } ≫ Obj.map K (𝟙 Δ) =
    colimit.ι (Discrete.functor fun A => Obj.summand K Δ A) { as := A } ≫ 𝟙 (Obj.obj₂ K Δ)
tactic: have fac : A.e ≫ 𝟙 A.1.unop = (𝟙 Δ).unop ≫ A.e := by rw [unop_id, comp_id, id_comp]
state_before: C : Type u_1
inst✝² : Category.{?u.38366, u_1} C
inst✝¹ : Preadditive C
K✝ K' : ChainComplex C ℕ
f : K✝ ⟶ K'
Δ✝ Δ' Δ'' : SimplexCategory
inst✝ : HasFiniteCoproducts C
K : ChainComplex C ℕ
Δ : SimplexCategoryᵒᵖ
x✝ : Discrete (Splitting.IndexSet Δ)
A : Splitting.IndexSet Δ
fac : A.e ≫ 𝟙 (unop A.fst) = (𝟙 Δ).unop ≫ A.e
⊢ colimit.ι (Discrete.functor fun A => Obj.summand K Δ A) { as := A } ≫ Obj.map K (𝟙 Δ) =
    colimit.ι (Discrete.functor fun A => Obj.summand K Δ A) { as := A } ≫ 𝟙 (Obj.obj₂ K Δ)
state_after: C : Type u_1
inst✝² : Category.{?u.38366, u_1} C
inst✝¹ : Preadditive C
K✝ K' : ChainComplex C ℕ
f : K✝ ⟶ K'
Δ✝ Δ' Δ'' : SimplexCategory
inst✝ : HasFiniteCoproducts C
K : ChainComplex C ℕ
Δ : SimplexCategoryᵒᵖ
x✝ : Discrete (Splitting.IndexSet Δ)
A : Splitting.IndexSet Δ
fac : A.e ≫ 𝟙 (unop A.fst) = (𝟙 Δ).unop ≫ A.e
⊢ Sigma.ι (Obj.summand K Δ) (Splitting.IndexSet.mk A.e) =
    colimit.ι (Discrete.functor fun A => Obj.summand K Δ A) { as := A }
tactic: erw [Obj.map_on_summand₀ K A fac, Obj.Termwise.mapMono_id, id_comp, comp_id]
state_before: C : Type u_1
inst✝² : Category.{?u.38366, u_1} C
inst✝¹ : Preadditive C
K✝ K' : ChainComplex C ℕ
f : K✝ ⟶ K'
Δ✝ Δ' Δ'' : SimplexCategory
inst✝ : HasFiniteCoproducts C
K : ChainComplex C ℕ
Δ : SimplexCategoryᵒᵖ
x✝ : Discrete (Splitting.IndexSet Δ)
A : Splitting.IndexSet Δ
fac : A.e ≫ 𝟙 (unop A.fst) = (𝟙 Δ).unop ≫ A.e
⊢ Sigma.ι (Obj.summand K Δ) (Splitting.IndexSet.mk A.e) =
    colimit.ι (Discrete.functor fun A => Obj.summand K Δ A) { as := A }
state_after: no goals
tactic: rfl
state_before: C : Type u_1
inst✝² : Category.{?u.38366, u_1} C
inst✝¹ : Preadditive C
K✝ K' : ChainComplex C ℕ
f : K✝ ⟶ K'
Δ✝ Δ'✝ Δ''✝ : SimplexCategory
inst✝ : HasFiniteCoproducts C
K : ChainComplex C ℕ
Δ'' Δ' Δ : SimplexCategoryᵒᵖ
θ' : Δ'' ⟶ Δ'
θ : Δ' ⟶ Δ
x✝ : Discrete (Splitting.IndexSet Δ'')
A : Splitting.IndexSet Δ''
⊢ colimit.ι (Discrete.functor fun A => Obj.summand K Δ'' A) { as := A } ≫
      { obj := fun Δ => Obj.obj₂ K Δ, map := fun {X Y} θ => Obj.map K θ }.map (θ' ≫ θ) =
    colimit.ι (Discrete.functor fun A => Obj.summand K Δ'' A) { as := A } ≫
      { obj := fun Δ => Obj.obj₂ K Δ, map := fun {X Y} θ => Obj.map K θ }.map θ' ≫
        { obj := fun Δ => Obj.obj₂ K Δ, map := fun {X Y} θ => Obj.map K θ }.map θ
state_after: C : Type u_1
inst✝² : Category.{?u.38366, u_1} C
inst✝¹ : Preadditive C
K✝ K' : ChainComplex C ℕ
f : K✝ ⟶ K'
Δ✝ Δ'✝ Δ''✝ : SimplexCategory
inst✝ : HasFiniteCoproducts C
K : ChainComplex C ℕ
Δ'' Δ' Δ : SimplexCategoryᵒᵖ
θ' : Δ'' ⟶ Δ'
θ : Δ' ⟶ Δ
x✝ : Discrete (Splitting.IndexSet Δ'')
A : Splitting.IndexSet Δ''
fac : θ.unop ≫ θ'.unop ≫ A.e = (θ' ≫ θ).unop ≫ A.e
⊢ colimit.ι (Discrete.functor fun A => Obj.summand K Δ'' A) { as := A } ≫
      { obj := fun Δ => Obj.obj₂ K Δ, map := fun {X Y} θ => Obj.map K θ }.map (θ' ≫ θ) =
    colimit.ι (Discrete.functor fun A => Obj.summand K Δ'' A) { as := A } ≫
      { obj := fun Δ => Obj.obj₂ K Δ, map := fun {X Y} θ => Obj.map K θ }.map θ' ≫
        { obj := fun Δ => Obj.obj₂ K Δ, map := fun {X Y} θ => Obj.map K θ }.map θ
tactic: have fac : θ.unop ≫ θ'.unop ≫ A.e = (θ' ≫ θ).unop ≫ A.e := by rw [unop_comp, assoc]
state_before: C : Type u_1
inst✝² : Category.{?u.38366, u_1} C
inst✝¹ : Preadditive C
K✝ K' : ChainComplex C ℕ
f : K✝ ⟶ K'
Δ✝ Δ'✝ Δ''✝ : SimplexCategory
inst✝ : HasFiniteCoproducts C
K : ChainComplex C ℕ
Δ'' Δ' Δ : SimplexCategoryᵒᵖ
θ' : Δ'' ⟶ Δ'
θ : Δ' ⟶ Δ
x✝ : Discrete (Splitting.IndexSet Δ'')
A : Splitting.IndexSet Δ''
fac : θ.unop ≫ θ'.unop ≫ A.e = (θ' ≫ θ).unop ≫ A.e
⊢ colimit.ι (Discrete.functor fun A => Obj.summand K Δ'' A) { as := A } ≫
      { obj := fun Δ => Obj.obj₂ K Δ, map := fun {X Y} θ => Obj.map K θ }.map (θ' ≫ θ) =
    colimit.ι (Discrete.functor fun A => Obj.summand K Δ'' A) { as := A } ≫
      { obj := fun Δ => Obj.obj₂ K Δ, map := fun {X Y} θ => Obj.map K θ }.map θ' ≫
        { obj := fun Δ => Obj.obj₂ K Δ, map := fun {X Y} θ => Obj.map K θ }.map θ
state_after: C : Type u_1
inst✝² : Category.{?u.38366, u_1} C
inst✝¹ : Preadditive C
K✝ K' : ChainComplex C ℕ
f : K✝ ⟶ K'
Δ✝ Δ'✝ Δ''✝ : SimplexCategory
inst✝ : HasFiniteCoproducts C
K : ChainComplex C ℕ
Δ'' Δ' Δ : SimplexCategoryᵒᵖ
θ' : Δ'' ⟶ Δ'
θ : Δ' ⟶ Δ
x✝ : Discrete (Splitting.IndexSet Δ'')
A : Splitting.IndexSet Δ''
fac :
  factorThruImage (θ.unop ≫ factorThruImage (θ'.unop ≫ A.e)) ≫
      image.ι (θ.unop ≫ factorThruImage (θ'.unop ≫ A.e)) ≫ image.ι (θ'.unop ≫ A.e) =
    (θ' ≫ θ).unop ≫ A.e
⊢ colimit.ι (Discrete.functor fun A => Obj.summand K Δ'' A) { as := A } ≫
      { obj := fun Δ => Obj.obj₂ K Δ, map := fun {X Y} θ => Obj.map K θ }.map (θ' ≫ θ) =
    colimit.ι (Discrete.functor fun A => Obj.summand K Δ'' A) { as := A } ≫
      { obj := fun Δ => Obj.obj₂ K Δ, map := fun {X Y} θ => Obj.map K θ }.map θ' ≫
        { obj := fun Δ => Obj.obj₂ K Δ, map := fun {X Y} θ => Obj.map K θ }.map θ
tactic: rw [← image.fac (θ'.unop ≫ A.e), ← assoc, ←
      image.fac (θ.unop ≫ factorThruImage (θ'.unop ≫ A.e)), assoc] at fac
state_before: C : Type u_1
inst✝² : Category.{?u.38366, u_1} C
inst✝¹ : Preadditive C
K✝ K' : ChainComplex C ℕ
f : K✝ ⟶ K'
Δ✝ Δ'✝ Δ''✝ : SimplexCategory
inst✝ : HasFiniteCoproducts C
K : ChainComplex C ℕ
Δ'' Δ' Δ : SimplexCategoryᵒᵖ
θ' : Δ'' ⟶ Δ'
θ : Δ' ⟶ Δ
x✝ : Discrete (Splitting.IndexSet Δ'')
A : Splitting.IndexSet Δ''
fac :
  factorThruImage (θ.unop ≫ factorThruImage (θ'.unop ≫ A.e)) ≫
      image.ι (θ.unop ≫ factorThruImage (θ'.unop ≫ A.e)) ≫ image.ι (θ'.unop ≫ A.e) =
    (θ' ≫ θ).unop ≫ A.e
⊢ colimit.ι (Discrete.functor fun A => Obj.summand K Δ'' A) { as := A } ≫
      { obj := fun Δ => Obj.obj₂ K Δ, map := fun {X Y} θ => Obj.map K θ }.map (θ' ≫ θ) =
    colimit.ι (Discrete.functor fun A => Obj.summand K Δ'' A) { as := A } ≫
      { obj := fun Δ => Obj.obj₂ K Δ, map := fun {X Y} θ => Obj.map K θ }.map θ' ≫
        { obj := fun Δ => Obj.obj₂ K Δ, map := fun {X Y} θ => Obj.map K θ }.map θ
state_after: C : Type u_1
inst✝² : Category.{?u.38366, u_1} C
inst✝¹ : Preadditive C
K✝ K' : ChainComplex C ℕ
f : K✝ ⟶ K'
Δ✝ Δ'✝ Δ''✝ : SimplexCategory
inst✝ : HasFiniteCoproducts C
K : ChainComplex C ℕ
Δ'' Δ' Δ : SimplexCategoryᵒᵖ
θ' : Δ'' ⟶ Δ'
θ : Δ' ⟶ Δ
x✝ : Discrete (Splitting.IndexSet Δ'')
A : Splitting.IndexSet Δ''
fac :
  factorThruImage (θ.unop ≫ factorThruImage (θ'.unop ≫ A.e)) ≫
      image.ι (θ.unop ≫ factorThruImage (θ'.unop ≫ A.e)) ≫ image.ι (θ'.unop ≫ A.e) =
    (θ' ≫ θ).unop ≫ A.e
⊢ Obj.Termwise.mapMono K (image.ι (θ.unop ≫ factorThruImage (θ'.unop ≫ A.e)) ≫ image.ι (θ'.unop ≫ A.e)) ≫
      Sigma.ι (Obj.summand K Δ) (Splitting.IndexSet.mk (factorThruImage (θ.unop ≫ factorThruImage (θ'.unop ≫ A.e)))) =
    Obj.Termwise.mapMono K (image.ι (θ.unop ≫ (A.pull θ').e) ≫ image.ι (θ'.unop ≫ A.e)) ≫
      Sigma.ι (Obj.summand K Δ) ((A.pull θ').pull θ)
tactic: simp only [Obj.map_on_summand₀'_assoc K A θ', Obj.map_on_summand₀' K _ θ,
      Obj.Termwise.mapMono_comp_assoc, Obj.map_on_summand₀ K A fac]
state_before: C : Type u_1
inst✝² : Category.{?u.38366, u_1} C
inst✝¹ : Preadditive C
K✝ K' : ChainComplex C ℕ
f : K✝ ⟶ K'
Δ✝ Δ'✝ Δ''✝ : SimplexCategory
inst✝ : HasFiniteCoproducts C
K : ChainComplex C ℕ
Δ'' Δ' Δ : SimplexCategoryᵒᵖ
θ' : Δ'' ⟶ Δ'
θ : Δ' ⟶ Δ
x✝ : Discrete (Splitting.IndexSet Δ'')
A : Splitting.IndexSet Δ''
fac :
  factorThruImage (θ.unop ≫ factorThruImage (θ'.unop ≫ A.e)) ≫
      image.ι (θ.unop ≫ factorThruImage (θ'.unop ≫ A.e)) ≫ image.ι (θ'.unop ≫ A.e) =
    (θ' ≫ θ).unop ≫ A.e
⊢ Obj.Termwise.mapMono K (image.ι (θ.unop ≫ factorThruImage (θ'.unop ≫ A.e)) ≫ image.ι (θ'.unop ≫ A.e)) ≫
      Sigma.ι (Obj.summand K Δ) (Splitting.IndexSet.mk (factorThruImage (θ.unop ≫ factorThruImage (θ'.unop ≫ A.e)))) =
    Obj.Termwise.mapMono K (image.ι (θ.unop ≫ (A.pull θ').e) ≫ image.ι (θ'.unop ≫ A.e)) ≫
      Sigma.ι (Obj.summand K Δ) ((A.pull θ').pull θ)
state_after: no goals
tactic: rfl