Theorem: CategoryTheory.DifferentialObject.shiftFunctor_obj_obj
File: Mathlib/CategoryTheory/DifferentialObject.lean

Proof steps:
state_before: S : Type u_1
inst✝³ : AddCommGroupWithOne S
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasShift C S
n : S
X : DifferentialObject S C
⊢ ((CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom) ≫
      (CategoryTheory.shiftFunctor C 1).map ((CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom) =
    0
state_after: no goals
tactic: rw [Functor.map_comp, Category.assoc, shiftComm_hom_comp_assoc, ← Functor.map_comp_assoc,
          X.d_squared, Functor.map_zero, zero_comp]
state_before: S : Type u_1
inst✝³ : AddCommGroupWithOne S
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasShift C S
n : S
X✝ Y✝ : DifferentialObject S C
f : X✝ ⟶ Y✝
⊢ ((fun X =>
            { obj := (CategoryTheory.shiftFunctor C n).obj X.obj,
              d := (CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom, d_squared := ⋯ })
          X✝).d ≫
      (CategoryTheory.shiftFunctor C 1).map ((CategoryTheory.shiftFunctor C n).map f.f) =
    (CategoryTheory.shiftFunctor C n).map f.f ≫
      ((fun X =>
            { obj := (CategoryTheory.shiftFunctor C n).obj X.obj,
              d := (CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom, d_squared := ⋯ })
          Y✝).d
state_after: S : Type u_1
inst✝³ : AddCommGroupWithOne S
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasShift C S
n : S
X✝ Y✝ : DifferentialObject S C
f : X✝ ⟶ Y✝
⊢ ((CategoryTheory.shiftFunctor C n).map X✝.d ≫ (shiftFunctorComm C 1 n).hom.app X✝.obj) ≫
      (CategoryTheory.shiftFunctor C 1).map ((CategoryTheory.shiftFunctor C n).map f.f) =
    (CategoryTheory.shiftFunctor C n).map f.f ≫
      (CategoryTheory.shiftFunctor C n).map Y✝.d ≫ (shiftFunctorComm C 1 n).hom.app Y✝.obj
tactic: dsimp
state_before: S : Type u_1
inst✝³ : AddCommGroupWithOne S
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasShift C S
n : S
X✝ Y✝ : DifferentialObject S C
f : X✝ ⟶ Y✝
⊢ ((CategoryTheory.shiftFunctor C n).map X✝.d ≫ (shiftFunctorComm C 1 n).hom.app X✝.obj) ≫
      (CategoryTheory.shiftFunctor C 1).map ((CategoryTheory.shiftFunctor C n).map f.f) =
    (CategoryTheory.shiftFunctor C n).map f.f ≫
      (CategoryTheory.shiftFunctor C n).map Y✝.d ≫ (shiftFunctorComm C 1 n).hom.app Y✝.obj
state_after: S : Type u_1
inst✝³ : AddCommGroupWithOne S
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasShift C S
n : S
X✝ Y✝ : DifferentialObject S C
f : X✝ ⟶ Y✝
⊢ (CategoryTheory.shiftFunctor C n).map f.f ≫ (CategoryTheory.shiftFunctor C n).map Y✝.d ≫ (shiftComm Y✝.obj 1 n).hom =
    (CategoryTheory.shiftFunctor C n).map f.f ≫
      (CategoryTheory.shiftFunctor C n).map Y✝.d ≫ (shiftFunctorComm C 1 n).hom.app Y✝.obj
tactic: erw [Category.assoc, shiftComm_hom_comp, ← Functor.map_comp_assoc, f.comm,
          Functor.map_comp_assoc]
state_before: S : Type u_1
inst✝³ : AddCommGroupWithOne S
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasShift C S
n : S
X✝ Y✝ : DifferentialObject S C
f : X✝ ⟶ Y✝
⊢ (CategoryTheory.shiftFunctor C n).map f.f ≫ (CategoryTheory.shiftFunctor C n).map Y✝.d ≫ (shiftComm Y✝.obj 1 n).hom =
    (CategoryTheory.shiftFunctor C n).map f.f ≫
      (CategoryTheory.shiftFunctor C n).map Y✝.d ≫ (shiftFunctorComm C 1 n).hom.app Y✝.obj
state_after: no goals
tactic: rfl
state_before: S : Type u_1
inst✝³ : AddCommGroupWithOne S
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasShift C S
n : S
X : DifferentialObject S C
⊢ {
          obj := fun X =>
            { obj := (CategoryTheory.shiftFunctor C n).obj X.obj,
              d := (CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom, d_squared := ⋯ },
          map := fun {X Y} f => { f := (CategoryTheory.shiftFunctor C n).map f.f, comm := ⋯ } }.map
      (𝟙 X) =
    𝟙
      ({
            obj := fun X =>
              { obj := (CategoryTheory.shiftFunctor C n).obj X.obj,
                d := (CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom, d_squared := ⋯ },
            map := fun {X Y} f => { f := (CategoryTheory.shiftFunctor C n).map f.f, comm := ⋯ } }.obj
        X)
state_after: case w
S : Type u_1
inst✝³ : AddCommGroupWithOne S
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasShift C S
n : S
X : DifferentialObject S C
⊢ autoParam
    (({
              obj := fun X =>
                { obj := (CategoryTheory.shiftFunctor C n).obj X.obj,
                  d := (CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom, d_squared := ⋯ },
              map := fun {X Y} f => { f := (CategoryTheory.shiftFunctor C n).map f.f, comm := ⋯ } }.map
          (𝟙 X)).f =
      (𝟙
          ({
                obj := fun X =>
                  { obj := (CategoryTheory.shiftFunctor C n).obj X.obj,
                    d := (CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom, d_squared := ⋯ },
                map := fun {X Y} f => { f := (CategoryTheory.shiftFunctor C n).map f.f, comm := ⋯ } }.obj
            X)).f)
    _auto✝
tactic: ext1
state_before: case w
S : Type u_1
inst✝³ : AddCommGroupWithOne S
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasShift C S
n : S
X : DifferentialObject S C
⊢ autoParam
    (({
              obj := fun X =>
                { obj := (CategoryTheory.shiftFunctor C n).obj X.obj,
                  d := (CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom, d_squared := ⋯ },
              map := fun {X Y} f => { f := (CategoryTheory.shiftFunctor C n).map f.f, comm := ⋯ } }.map
          (𝟙 X)).f =
      (𝟙
          ({
                obj := fun X =>
                  { obj := (CategoryTheory.shiftFunctor C n).obj X.obj,
                    d := (CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom, d_squared := ⋯ },
                map := fun {X Y} f => { f := (CategoryTheory.shiftFunctor C n).map f.f, comm := ⋯ } }.obj
            X)).f)
    _auto✝
state_after: case w
S : Type u_1
inst✝³ : AddCommGroupWithOne S
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasShift C S
n : S
X : DifferentialObject S C
⊢ autoParam ((CategoryTheory.shiftFunctor C n).map (𝟙 X.obj) = 𝟙 ((CategoryTheory.shiftFunctor C n).obj X.obj)) _auto✝
tactic: dsimp
state_before: case w
S : Type u_1
inst✝³ : AddCommGroupWithOne S
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasShift C S
n : S
X : DifferentialObject S C
⊢ autoParam ((CategoryTheory.shiftFunctor C n).map (𝟙 X.obj) = 𝟙 ((CategoryTheory.shiftFunctor C n).obj X.obj)) _auto✝
state_after: no goals
tactic: rw [Functor.map_id]
state_before: S : Type u_1
inst✝³ : AddCommGroupWithOne S
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasShift C S
n : S
X✝ Y✝ Z✝ : DifferentialObject S C
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ {
          obj := fun X =>
            { obj := (CategoryTheory.shiftFunctor C n).obj X.obj,
              d := (CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom, d_squared := ⋯ },
          map := fun {X Y} f => { f := (CategoryTheory.shiftFunctor C n).map f.f, comm := ⋯ } }.map
      (f ≫ g) =
    {
            obj := fun X =>
              { obj := (CategoryTheory.shiftFunctor C n).obj X.obj,
                d := (CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom, d_squared := ⋯ },
            map := fun {X Y} f => { f := (CategoryTheory.shiftFunctor C n).map f.f, comm := ⋯ } }.map
        f ≫
      {
            obj := fun X =>
              { obj := (CategoryTheory.shiftFunctor C n).obj X.obj,
                d := (CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom, d_squared := ⋯ },
            map := fun {X Y} f => { f := (CategoryTheory.shiftFunctor C n).map f.f, comm := ⋯ } }.map
        g
state_after: case w
S : Type u_1
inst✝³ : AddCommGroupWithOne S
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasShift C S
n : S
X✝ Y✝ Z✝ : DifferentialObject S C
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ autoParam
    (({
              obj := fun X =>
                { obj := (CategoryTheory.shiftFunctor C n).obj X.obj,
                  d := (CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom, d_squared := ⋯ },
              map := fun {X Y} f => { f := (CategoryTheory.shiftFunctor C n).map f.f, comm := ⋯ } }.map
          (f ≫ g)).f =
      ({
                obj := fun X =>
                  { obj := (CategoryTheory.shiftFunctor C n).obj X.obj,
                    d := (CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom, d_squared := ⋯ },
                map := fun {X Y} f => { f := (CategoryTheory.shiftFunctor C n).map f.f, comm := ⋯ } }.map
            f ≫
          {
                obj := fun X =>
                  { obj := (CategoryTheory.shiftFunctor C n).obj X.obj,
                    d := (CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom, d_squared := ⋯ },
                map := fun {X Y} f => { f := (CategoryTheory.shiftFunctor C n).map f.f, comm := ⋯ } }.map
            g).f)
    _auto✝
tactic: ext1
state_before: case w
S : Type u_1
inst✝³ : AddCommGroupWithOne S
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasShift C S
n : S
X✝ Y✝ Z✝ : DifferentialObject S C
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ autoParam
    (({
              obj := fun X =>
                { obj := (CategoryTheory.shiftFunctor C n).obj X.obj,
                  d := (CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom, d_squared := ⋯ },
              map := fun {X Y} f => { f := (CategoryTheory.shiftFunctor C n).map f.f, comm := ⋯ } }.map
          (f ≫ g)).f =
      ({
                obj := fun X =>
                  { obj := (CategoryTheory.shiftFunctor C n).obj X.obj,
                    d := (CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom, d_squared := ⋯ },
                map := fun {X Y} f => { f := (CategoryTheory.shiftFunctor C n).map f.f, comm := ⋯ } }.map
            f ≫
          {
                obj := fun X =>
                  { obj := (CategoryTheory.shiftFunctor C n).obj X.obj,
                    d := (CategoryTheory.shiftFunctor C n).map X.d ≫ (shiftComm X.obj 1 n).hom, d_squared := ⋯ },
                map := fun {X Y} f => { f := (CategoryTheory.shiftFunctor C n).map f.f, comm := ⋯ } }.map
            g).f)
    _auto✝
state_after: case w
S : Type u_1
inst✝³ : AddCommGroupWithOne S
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasShift C S
n : S
X✝ Y✝ Z✝ : DifferentialObject S C
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ autoParam
    ((CategoryTheory.shiftFunctor C n).map (f.f ≫ g.f) =
      (CategoryTheory.shiftFunctor C n).map f.f ≫ (CategoryTheory.shiftFunctor C n).map g.f)
    _auto✝
tactic: dsimp
state_before: case w
S : Type u_1
inst✝³ : AddCommGroupWithOne S
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasShift C S
n : S
X✝ Y✝ Z✝ : DifferentialObject S C
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ autoParam
    ((CategoryTheory.shiftFunctor C n).map (f.f ≫ g.f) =
      (CategoryTheory.shiftFunctor C n).map f.f ≫ (CategoryTheory.shiftFunctor C n).map g.f)
    _auto✝
state_after: no goals
tactic: rw [Functor.map_comp]