Theorem: CategoryTheory.Functor.mapDifferentialObject_obj_obj
File: Mathlib/CategoryTheory/DifferentialObject.lean

Proof steps:
state_before: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X : DifferentialObject S C
⊢ (F.map X.d ≫ η.app X.obj) ≫ (shiftFunctor D 1).map (F.map X.d ≫ η.app X.obj) = 0
state_after: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X : DifferentialObject S C
⊢ (F.map X.d ≫ η.app X.obj) ≫ (F ⋙ shiftFunctor D 1).map X.d ≫ (shiftFunctor D 1).map (η.app X.obj) = 0
tactic: rw [Functor.map_comp, ← Functor.comp_map F (shiftFunctor D (1 : S))]
state_before: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X : DifferentialObject S C
⊢ (F.map X.d ≫ η.app X.obj) ≫ (F ⋙ shiftFunctor D 1).map X.d ≫ (shiftFunctor D 1).map (η.app X.obj) = 0
state_after: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X : DifferentialObject S C
⊢ F.map X.d ≫
      ((shiftFunctor C 1 ⋙ F).map X.d ≫ η.app ((shiftFunctor C 1).obj X.obj)) ≫ (shiftFunctor D 1).map (η.app X.obj) =
    0
tactic: slice_lhs 2 3 => rw [← η.naturality X.d]
state_before: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X : DifferentialObject S C
⊢ F.map X.d ≫
      ((shiftFunctor C 1 ⋙ F).map X.d ≫ η.app ((shiftFunctor C 1).obj X.obj)) ≫ (shiftFunctor D 1).map (η.app X.obj) =
    0
state_after: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X : DifferentialObject S C
⊢ F.map X.d ≫
      (F.map ((shiftFunctor C 1).map X.d) ≫ η.app ((shiftFunctor C 1).obj X.obj)) ≫
        (shiftFunctor D 1).map (η.app X.obj) =
    0
tactic: rw [Functor.comp_map]
state_before: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X : DifferentialObject S C
⊢ F.map X.d ≫
      (F.map ((shiftFunctor C 1).map X.d) ≫ η.app ((shiftFunctor C 1).obj X.obj)) ≫
        (shiftFunctor D 1).map (η.app X.obj) =
    0
state_after: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X : DifferentialObject S C
⊢ (0 ≫ η.app ((shiftFunctor C 1).obj X.obj)) ≫ (shiftFunctor D 1).map (η.app X.obj) = 0
tactic: slice_lhs 1 2 => rw [← F.map_comp, X.d_squared, hF]
state_before: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X : DifferentialObject S C
⊢ (0 ≫ η.app ((shiftFunctor C 1).obj X.obj)) ≫ (shiftFunctor D 1).map (η.app X.obj) = 0
state_after: no goals
tactic: rw [zero_comp, zero_comp]
state_before: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X✝ Y✝ : DifferentialObject S C
f : X✝ ⟶ Y✝
⊢ ((fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ }) X✝).d ≫
      (shiftFunctor D 1).map (F.map f.f) =
    F.map f.f ≫ ((fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ }) Y✝).d
state_after: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X✝ Y✝ : DifferentialObject S C
f : X✝ ⟶ Y✝
⊢ (F.map X✝.d ≫ η.app X✝.obj) ≫ (shiftFunctor D 1).map (F.map f.f) = F.map f.f ≫ F.map Y✝.d ≫ η.app Y✝.obj
tactic: dsimp
state_before: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X✝ Y✝ : DifferentialObject S C
f : X✝ ⟶ Y✝
⊢ (F.map X✝.d ≫ η.app X✝.obj) ≫ (shiftFunctor D 1).map (F.map f.f) = F.map f.f ≫ F.map Y✝.d ≫ η.app Y✝.obj
state_after: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X✝ Y✝ : DifferentialObject S C
f : X✝ ⟶ Y✝
⊢ F.map X✝.d ≫ (shiftFunctor C 1 ⋙ F).map f.f ≫ η.app Y✝.obj = F.map f.f ≫ F.map Y✝.d ≫ η.app Y✝.obj
tactic: slice_lhs 2 3 => rw [← Functor.comp_map F (shiftFunctor D (1 : S)), ← η.naturality f.f]
state_before: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X✝ Y✝ : DifferentialObject S C
f : X✝ ⟶ Y✝
⊢ F.map X✝.d ≫ (shiftFunctor C 1 ⋙ F).map f.f ≫ η.app Y✝.obj = F.map f.f ≫ F.map Y✝.d ≫ η.app Y✝.obj
state_after: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X✝ Y✝ : DifferentialObject S C
f : X✝ ⟶ Y✝
⊢ (F.map f.f ≫ F.map Y✝.d) ≫ η.app Y✝.obj = F.map f.f ≫ F.map Y✝.d ≫ η.app Y✝.obj
tactic: slice_lhs 1 2 => rw [Functor.comp_map, ← F.map_comp, f.comm, F.map_comp]
state_before: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X✝ Y✝ : DifferentialObject S C
f : X✝ ⟶ Y✝
⊢ (F.map f.f ≫ F.map Y✝.d) ≫ η.app Y✝.obj = F.map f.f ≫ F.map Y✝.d ≫ η.app Y✝.obj
state_after: no goals
tactic: rw [Category.assoc]
state_before: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
⊢ ∀ (X : DifferentialObject S C),
    { obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
            map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
        (𝟙 X) =
      𝟙
        ({ obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
              map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.obj
          X)
state_after: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X✝ : DifferentialObject S C
⊢ { obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
          map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
      (𝟙 X✝) =
    𝟙
      ({ obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
            map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.obj
        X✝)
tactic: intros
state_before: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X✝ : DifferentialObject S C
⊢ { obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
          map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
      (𝟙 X✝) =
    𝟙
      ({ obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
            map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.obj
        X✝)
state_after: case w
S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X✝ : DifferentialObject S C
⊢ autoParam
    (({ obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
              map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
          (𝟙 X✝)).f =
      (𝟙
          ({ obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
                map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.obj
            X✝)).f)
    _auto✝
tactic: ext
state_before: case w
S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X✝ : DifferentialObject S C
⊢ autoParam
    (({ obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
              map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
          (𝟙 X✝)).f =
      (𝟙
          ({ obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
                map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.obj
            X✝)).f)
    _auto✝
state_after: no goals
tactic: simp [autoParam]
state_before: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
⊢ ∀ {X Y Z : DifferentialObject S C} (f : X ⟶ Y) (g : Y ⟶ Z),
    { obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
            map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
        (f ≫ g) =
      { obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
              map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
          f ≫
        { obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
              map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
          g
state_after: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X✝ Y✝ Z✝ : DifferentialObject S C
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
⊢ { obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
          map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
      (f✝ ≫ g✝) =
    { obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
            map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
        f✝ ≫
      { obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
            map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
        g✝
tactic: intros
state_before: S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X✝ Y✝ Z✝ : DifferentialObject S C
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
⊢ { obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
          map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
      (f✝ ≫ g✝) =
    { obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
            map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
        f✝ ≫
      { obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
            map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
        g✝
state_after: case w
S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X✝ Y✝ Z✝ : DifferentialObject S C
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
⊢ autoParam
    (({ obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
              map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
          (f✝ ≫ g✝)).f =
      ({ obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
                map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
            f✝ ≫
          { obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
                map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
            g✝).f)
    _auto✝
tactic: ext
state_before: case w
S : Type u_1
inst✝⁶ : AddMonoidWithOne S
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : HasZeroMorphisms C
inst✝³ : HasShift C S
D : Type u'
inst✝² : Category.{v', u'} D
inst✝¹ : HasZeroMorphisms D
inst✝ : HasShift D S
F : C ⥤ D
η : shiftFunctor C 1 ⋙ F ⟶ F ⋙ shiftFunctor D 1
hF : ∀ (c c' : C), F.map 0 = 0
X✝ Y✝ Z✝ : DifferentialObject S C
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
⊢ autoParam
    (({ obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
              map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
          (f✝ ≫ g✝)).f =
      ({ obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
                map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
            f✝ ≫
          { obj := fun X => { obj := F.obj X.obj, d := F.map X.d ≫ η.app X.obj, d_squared := ⋯ },
                map := fun {X Y} f => { f := F.map f.f, comm := ⋯ } }.map
            g✝).f)
    _auto✝
state_after: no goals
tactic: simp [autoParam]