Theorem: CochainComplex.shiftFunctor_map_f
File: Mathlib/Algebra/Homology/HomotopyCategory/Shift.lean

Proof steps:
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
K : CochainComplex C ℤ
⊢ ∀ (i j k : ℤ),
    (ComplexShape.up ℤ).Rel i j →
      (ComplexShape.up ℤ).Rel j k →
        (fun i j => n.negOnePow • K.d (i + n) (j + n)) i j ≫ (fun i j => n.negOnePow • K.d (i + n) (j + n)) j k = 0
state_after: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
K : CochainComplex C ℤ
i✝ j✝ k✝ : ℤ
a✝¹ : (ComplexShape.up ℤ).Rel i✝ j✝
a✝ : (ComplexShape.up ℤ).Rel j✝ k✝
⊢ (fun i j => n.negOnePow • K.d (i + n) (j + n)) i✝ j✝ ≫ (fun i j => n.negOnePow • K.d (i + n) (j + n)) j✝ k✝ = 0
tactic: intros
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
K : CochainComplex C ℤ
i✝ j✝ k✝ : ℤ
a✝¹ : (ComplexShape.up ℤ).Rel i✝ j✝
a✝ : (ComplexShape.up ℤ).Rel j✝ k✝
⊢ (fun i j => n.negOnePow • K.d (i + n) (j + n)) i✝ j✝ ≫ (fun i j => n.negOnePow • K.d (i + n) (j + n)) j✝ k✝ = 0
state_after: no goals
tactic: simp only [Linear.comp_units_smul, Linear.units_smul_comp, d_comp_d, smul_zero]
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
K : CochainComplex C ℤ
i j : ℤ
hij : ¬(ComplexShape.up ℤ).Rel i j
⊢ (fun i j => n.negOnePow • K.d (i + n) (j + n)) i j = 0
state_after: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
K : CochainComplex C ℤ
i j : ℤ
hij : ¬(ComplexShape.up ℤ).Rel i j
⊢ n.negOnePow • K.d (i + n) (j + n) = 0
tactic: dsimp
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
K : CochainComplex C ℤ
i j : ℤ
hij : ¬(ComplexShape.up ℤ).Rel i j
⊢ n.negOnePow • K.d (i + n) (j + n) = 0
state_after: case a
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
K : CochainComplex C ℤ
i j : ℤ
hij : ¬(ComplexShape.up ℤ).Rel i j
⊢ ¬(ComplexShape.up ℤ).Rel (i + n) (j + n)
tactic: rw [K.shape, smul_zero]
state_before: case a
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
K : CochainComplex C ℤ
i j : ℤ
hij : ¬(ComplexShape.up ℤ).Rel i j
⊢ ¬(ComplexShape.up ℤ).Rel (i + n) (j + n)
state_after: case a
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
K : CochainComplex C ℤ
i j : ℤ
hij : ¬(ComplexShape.up ℤ).Rel i j
hij' : (ComplexShape.up ℤ).Rel (i + n) (j + n)
⊢ False
tactic: intro hij'
state_before: case a
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
K : CochainComplex C ℤ
i j : ℤ
hij : ¬(ComplexShape.up ℤ).Rel i j
hij' : (ComplexShape.up ℤ).Rel (i + n) (j + n)
⊢ False
state_after: case a
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
K : CochainComplex C ℤ
i j : ℤ
hij : ¬(ComplexShape.up ℤ).Rel i j
hij' : (ComplexShape.up ℤ).Rel (i + n) (j + n)
⊢ (ComplexShape.up ℤ).Rel i j
tactic: apply hij
state_before: case a
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
K : CochainComplex C ℤ
i j : ℤ
hij : ¬(ComplexShape.up ℤ).Rel i j
hij' : (ComplexShape.up ℤ).Rel (i + n) (j + n)
⊢ (ComplexShape.up ℤ).Rel i j
state_after: case a
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
K : CochainComplex C ℤ
i j : ℤ
hij : ¬(ComplexShape.up ℤ).Rel i j
hij' : i + n + 1 = j + n
⊢ i + 1 = j
tactic: dsimp at hij' ⊢
state_before: case a
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
K : CochainComplex C ℤ
i j : ℤ
hij : ¬(ComplexShape.up ℤ).Rel i j
hij' : i + n + 1 = j + n
⊢ i + 1 = j
state_after: no goals
tactic: omega
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
X✝ Y✝ : CochainComplex C ℤ
φ : X✝ ⟶ Y✝
⊢ ∀ (i j : ℤ),
    (ComplexShape.up ℤ).Rel i j →
      (fun i => φ.f (i + n)) i ≫
          ((fun K =>
                  { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
                    d_comp_d' := ⋯ })
                Y✝).d
            i j =
        ((fun K =>
                  { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
                    d_comp_d' := ⋯ })
                X✝).d
            i j ≫
          (fun i => φ.f (i + n)) j
state_after: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
X✝ Y✝ : CochainComplex C ℤ
φ : X✝ ⟶ Y✝
i✝ j✝ : ℤ
a✝ : (ComplexShape.up ℤ).Rel i✝ j✝
⊢ (fun i => φ.f (i + n)) i✝ ≫
      ((fun K =>
              { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
                d_comp_d' := ⋯ })
            Y✝).d
        i✝ j✝ =
    ((fun K =>
              { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
                d_comp_d' := ⋯ })
            X✝).d
        i✝ j✝ ≫
      (fun i => φ.f (i + n)) j✝
tactic: intros
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
X✝ Y✝ : CochainComplex C ℤ
φ : X✝ ⟶ Y✝
i✝ j✝ : ℤ
a✝ : (ComplexShape.up ℤ).Rel i✝ j✝
⊢ (fun i => φ.f (i + n)) i✝ ≫
      ((fun K =>
              { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
                d_comp_d' := ⋯ })
            Y✝).d
        i✝ j✝ =
    ((fun K =>
              { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
                d_comp_d' := ⋯ })
            X✝).d
        i✝ j✝ ≫
      (fun i => φ.f (i + n)) j✝
state_after: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
X✝ Y✝ : CochainComplex C ℤ
φ : X✝ ⟶ Y✝
i✝ j✝ : ℤ
a✝ : (ComplexShape.up ℤ).Rel i✝ j✝
⊢ φ.f (i✝ + n) ≫ (n.negOnePow • Y✝.d (i✝ + n) (j✝ + n)) = (n.negOnePow • X✝.d (i✝ + n) (j✝ + n)) ≫ φ.f (j✝ + n)
tactic: dsimp
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
X✝ Y✝ : CochainComplex C ℤ
φ : X✝ ⟶ Y✝
i✝ j✝ : ℤ
a✝ : (ComplexShape.up ℤ).Rel i✝ j✝
⊢ φ.f (i✝ + n) ≫ (n.negOnePow • Y✝.d (i✝ + n) (j✝ + n)) = (n.negOnePow • X✝.d (i✝ + n) (j✝ + n)) ≫ φ.f (j✝ + n)
state_after: no goals
tactic: simp only [Linear.comp_units_smul, Hom.comm, Linear.units_smul_comp]
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
⊢ ∀ (X : CochainComplex C ℤ),
    {
            obj := fun K =>
              { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
                d_comp_d' := ⋯ },
            map := fun {X Y} φ => { f := fun i => φ.f (i + n), comm' := ⋯ } }.map
        (𝟙 X) =
      𝟙
        ({
              obj := fun K =>
                { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
                  d_comp_d' := ⋯ },
              map := fun {X Y} φ => { f := fun i => φ.f (i + n), comm' := ⋯ } }.obj
          X)
state_after: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
X✝ : CochainComplex C ℤ
⊢ {
          obj := fun K =>
            { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
              d_comp_d' := ⋯ },
          map := fun {X Y} φ => { f := fun i => φ.f (i + n), comm' := ⋯ } }.map
      (𝟙 X✝) =
    𝟙
      ({
            obj := fun K =>
              { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
                d_comp_d' := ⋯ },
            map := fun {X Y} φ => { f := fun i => φ.f (i + n), comm' := ⋯ } }.obj
        X✝)
tactic: intros
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
X✝ : CochainComplex C ℤ
⊢ {
          obj := fun K =>
            { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
              d_comp_d' := ⋯ },
          map := fun {X Y} φ => { f := fun i => φ.f (i + n), comm' := ⋯ } }.map
      (𝟙 X✝) =
    𝟙
      ({
            obj := fun K =>
              { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
                d_comp_d' := ⋯ },
            map := fun {X Y} φ => { f := fun i => φ.f (i + n), comm' := ⋯ } }.obj
        X✝)
state_after: no goals
tactic: rfl
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
⊢ ∀ {X Y Z : CochainComplex C ℤ} (f : X ⟶ Y) (g : Y ⟶ Z),
    {
            obj := fun K =>
              { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
                d_comp_d' := ⋯ },
            map := fun {X Y} φ => { f := fun i => φ.f (i + n), comm' := ⋯ } }.map
        (f ≫ g) =
      {
              obj := fun K =>
                { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
                  d_comp_d' := ⋯ },
              map := fun {X Y} φ => { f := fun i => φ.f (i + n), comm' := ⋯ } }.map
          f ≫
        {
              obj := fun K =>
                { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
                  d_comp_d' := ⋯ },
              map := fun {X Y} φ => { f := fun i => φ.f (i + n), comm' := ⋯ } }.map
          g
state_after: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
X✝ Y✝ Z✝ : CochainComplex C ℤ
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
⊢ {
          obj := fun K =>
            { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
              d_comp_d' := ⋯ },
          map := fun {X Y} φ => { f := fun i => φ.f (i + n), comm' := ⋯ } }.map
      (f✝ ≫ g✝) =
    {
            obj := fun K =>
              { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
                d_comp_d' := ⋯ },
            map := fun {X Y} φ => { f := fun i => φ.f (i + n), comm' := ⋯ } }.map
        f✝ ≫
      {
            obj := fun K =>
              { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
                d_comp_d' := ⋯ },
            map := fun {X Y} φ => { f := fun i => φ.f (i + n), comm' := ⋯ } }.map
        g✝
tactic: intros
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
D : Type u'
inst✝¹ : Category.{v', u'} D
inst✝ : Preadditive D
n : ℤ
X✝ Y✝ Z✝ : CochainComplex C ℤ
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z✝
⊢ {
          obj := fun K =>
            { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
              d_comp_d' := ⋯ },
          map := fun {X Y} φ => { f := fun i => φ.f (i + n), comm' := ⋯ } }.map
      (f✝ ≫ g✝) =
    {
            obj := fun K =>
              { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
                d_comp_d' := ⋯ },
            map := fun {X Y} φ => { f := fun i => φ.f (i + n), comm' := ⋯ } }.map
        f✝ ≫
      {
            obj := fun K =>
              { X := fun i => K.X (i + n), d := fun i j => n.negOnePow • K.d (i + n) (j + n), shape := ⋯,
                d_comp_d' := ⋯ },
            map := fun {X Y} φ => { f := fun i => φ.f (i + n), comm' := ⋯ } }.map
        g✝
state_after: no goals
tactic: rfl