Theorem: CategoryTheory.Abelian.extFunctorObj_obj
File: Mathlib/Algebra/Homology/DerivedCategory/Ext.lean

Proof steps:
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasExt C
X : C
n : ℕ
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
f' : Y✝ ⟶ Z✝
⊢ { obj := fun Y => AddCommGrp.of (Ext X Y n), map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.map
      (f ≫ f') =
    { obj := fun Y => AddCommGrp.of (Ext X Y n),
            map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.map
        f ≫
      { obj := fun Y => AddCommGrp.of (Ext X Y n),
            map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.map
        f'
state_after: case w
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasExt C
X : C
n : ℕ
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
f' : Y✝ ⟶ Z✝
α :
  ↑({ obj := fun Y => AddCommGrp.of (Ext X Y n),
          map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.obj
      X✝)
⊢ ({ obj := fun Y => AddCommGrp.of (Ext X Y n),
            map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.map
        (f ≫ f'))
      α =
    ({ obj := fun Y => AddCommGrp.of (Ext X Y n),
              map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.map
          f ≫
        { obj := fun Y => AddCommGrp.of (Ext X Y n),
              map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.map
          f')
      α
tactic: ext α
state_before: case w
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasExt C
X : C
n : ℕ
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
f' : Y✝ ⟶ Z✝
α :
  ↑({ obj := fun Y => AddCommGrp.of (Ext X Y n),
          map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.obj
      X✝)
⊢ ({ obj := fun Y => AddCommGrp.of (Ext X Y n),
            map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.map
        (f ≫ f'))
      α =
    ({ obj := fun Y => AddCommGrp.of (Ext X Y n),
              map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.map
          f ≫
        { obj := fun Y => AddCommGrp.of (Ext X Y n),
              map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.map
          f')
      α
state_after: case w
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasExt C
X : C
n : ℕ
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
f' : Y✝ ⟶ Z✝
α :
  ↑({ obj := fun Y => AddCommGrp.of (Ext X Y n),
          map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.obj
      X✝)
⊢ Ext.comp α (Ext.mk₀ (f ≫ f')) ⋯ = (Ext.comp α (Ext.mk₀ f) ⋯).comp (Ext.mk₀ f') ⋯
tactic: dsimp [AddCommGrp.ofHom]
state_before: case w
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasExt C
X : C
n : ℕ
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
f' : Y✝ ⟶ Z✝
α :
  ↑({ obj := fun Y => AddCommGrp.of (Ext X Y n),
          map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.obj
      X✝)
⊢ Ext.comp α (Ext.mk₀ (f ≫ f')) ⋯ = (Ext.comp α (Ext.mk₀ f) ⋯).comp (Ext.mk₀ f') ⋯
state_after: case w
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasExt C
X : C
n : ℕ
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
f' : Y✝ ⟶ Z✝
α :
  ↑({ obj := fun Y => AddCommGrp.of (Ext X Y n),
          map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.obj
      X✝)
⊢ Ext.comp α ((Ext.mk₀ f).comp (Ext.mk₀ f') ⋯) ⋯ = (Ext.comp α (Ext.mk₀ f) ⋯).comp (Ext.mk₀ f') ⋯
tactic: rw [← Ext.mk₀_comp_mk₀]
state_before: case w
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasExt C
X : C
n : ℕ
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
f' : Y✝ ⟶ Z✝
α :
  ↑({ obj := fun Y => AddCommGrp.of (Ext X Y n),
          map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.obj
      X✝)
⊢ Ext.comp α ((Ext.mk₀ f).comp (Ext.mk₀ f') ⋯) ⋯ = (Ext.comp α (Ext.mk₀ f) ⋯).comp (Ext.mk₀ f') ⋯
state_after: case w
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasExt C
X : C
n : ℕ
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
f' : Y✝ ⟶ Z✝
α :
  ↑({ obj := fun Y => AddCommGrp.of (Ext X Y n),
          map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.obj
      X✝)
⊢ (Ext.comp α (Ext.mk₀ f) ⋯).comp (Ext.mk₀ f') ⋯ = Ext.comp α ((Ext.mk₀ f).comp (Ext.mk₀ f') ⋯) ⋯
tactic: symm
state_before: case w
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasExt C
X : C
n : ℕ
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
f' : Y✝ ⟶ Z✝
α :
  ↑({ obj := fun Y => AddCommGrp.of (Ext X Y n),
          map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.obj
      X✝)
⊢ (Ext.comp α (Ext.mk₀ f) ⋯).comp (Ext.mk₀ f') ⋯ = Ext.comp α ((Ext.mk₀ f).comp (Ext.mk₀ f') ⋯) ⋯
state_after: case w.h
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasExt C
X : C
n : ℕ
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
f' : Y✝ ⟶ Z✝
α :
  ↑({ obj := fun Y => AddCommGrp.of (Ext X Y n),
          map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.obj
      X✝)
⊢ n + 0 + 0 = n
tactic: apply Ext.comp_assoc
state_before: case w.h
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasExt C
X : C
n : ℕ
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
f' : Y✝ ⟶ Z✝
α :
  ↑({ obj := fun Y => AddCommGrp.of (Ext X Y n),
          map := fun {X_1 Y} f => AddCommGrp.ofHom ((Ext.mk₀ f).postcomp X ⋯) }.obj
      X✝)
⊢ n + 0 + 0 = n
state_after: no goals
tactic: omega