Theorem: CategoryTheory.ShiftedHom.mk₀_comp_mk₀_assoc
File: Mathlib/CategoryTheory/Shift/ShiftedHom.lean

Proof steps:
state_before: C : Type u_1
inst✝⁶ : Category.{?u.29669, u_1} C
D : Type u_2
inst✝⁵ : Category.{?u.29676, u_2} D
E : Type u_3
inst✝⁴ : Category.{?u.29683, u_3} E
M : Type u_4
inst✝³ : AddMonoid M
inst✝² : HasShift C M
inst✝¹ : HasShift D M
inst✝ : HasShift E M
X Y Z T : C
f : X ⟶ Y
g : Y ⟶ Z
a : M
ha : a = 0
d : M
h : ShiftedHom Z T d
⊢ d + a = d
state_after: no goals
tactic: rw [ha, add_zero]
state_before: C : Type u_1
inst✝⁶ : Category.{?u.29669, u_1} C
D : Type u_2
inst✝⁵ : Category.{?u.29676, u_2} D
E : Type u_3
inst✝⁴ : Category.{?u.29683, u_3} E
M : Type u_4
inst✝³ : AddMonoid M
inst✝² : HasShift C M
inst✝¹ : HasShift D M
inst✝ : HasShift E M
X Y Z T : C
f : X ⟶ Y
g : Y ⟶ Z
a : M
ha : a = 0
d : M
h : ShiftedHom Z T d
⊢ d + a = d
state_after: no goals
tactic: rw [ha, add_zero]
state_before: C : Type u_1
inst✝⁶ : Category.{?u.29669, u_1} C
D : Type u_2
inst✝⁵ : Category.{?u.29676, u_2} D
E : Type u_3
inst✝⁴ : Category.{?u.29683, u_3} E
M : Type u_4
inst✝³ : AddMonoid M
inst✝² : HasShift C M
inst✝¹ : HasShift D M
inst✝ : HasShift E M
X Y Z T : C
f : X ⟶ Y
g : Y ⟶ Z
a : M
ha : a = 0
d : M
h : ShiftedHom Z T d
⊢ d + a = d
state_after: no goals
tactic: rw [ha, add_zero]
state_before: C : Type u_1
inst✝⁶ : Category.{u_5, u_1} C
D : Type u_2
inst✝⁵ : Category.{?u.29676, u_2} D
E : Type u_3
inst✝⁴ : Category.{?u.29683, u_3} E
M : Type u_4
inst✝³ : AddMonoid M
inst✝² : HasShift C M
inst✝¹ : HasShift D M
inst✝ : HasShift E M
X Y Z T : C
f : X ⟶ Y
g : Y ⟶ Z
a : M
ha : a = 0
d : M
h : ShiftedHom Z T d
⊢ (mk₀ a ha f).comp ((mk₀ a ha g).comp h ⋯) ⋯ = (mk₀ a ha (f ≫ g)).comp h ⋯
state_after: C : Type u_1
inst✝⁶ : Category.{u_5, u_1} C
D : Type u_2
inst✝⁵ : Category.{?u.29676, u_2} D
E : Type u_3
inst✝⁴ : Category.{?u.29683, u_3} E
M : Type u_4
inst✝³ : AddMonoid M
inst✝² : HasShift C M
inst✝¹ : HasShift D M
inst✝ : HasShift E M
X Y Z T : C
f : X ⟶ Y
g : Y ⟶ Z
d : M
h : ShiftedHom Z T d
⊢ (mk₀ 0 ⋯ f).comp ((mk₀ 0 ⋯ g).comp h ⋯) ⋯ = (mk₀ 0 ⋯ (f ≫ g)).comp h ⋯
tactic: subst ha
state_before: C : Type u_1
inst✝⁶ : Category.{u_5, u_1} C
D : Type u_2
inst✝⁵ : Category.{?u.29676, u_2} D
E : Type u_3
inst✝⁴ : Category.{?u.29683, u_3} E
M : Type u_4
inst✝³ : AddMonoid M
inst✝² : HasShift C M
inst✝¹ : HasShift D M
inst✝ : HasShift E M
X Y Z T : C
f : X ⟶ Y
g : Y ⟶ Z
d : M
h : ShiftedHom Z T d
⊢ (mk₀ 0 ⋯ f).comp ((mk₀ 0 ⋯ g).comp h ⋯) ⋯ = (mk₀ 0 ⋯ (f ≫ g)).comp h ⋯
state_after: case h
C : Type u_1
inst✝⁶ : Category.{u_5, u_1} C
D : Type u_2
inst✝⁵ : Category.{?u.29676, u_2} D
E : Type u_3
inst✝⁴ : Category.{?u.29683, u_3} E
M : Type u_4
inst✝³ : AddMonoid M
inst✝² : HasShift C M
inst✝¹ : HasShift D M
inst✝ : HasShift E M
X Y Z T : C
f : X ⟶ Y
g : Y ⟶ Z
d : M
h : ShiftedHom Z T d
⊢ 0 + 0 = 0

case h
C : Type u_1
inst✝⁶ : Category.{u_5, u_1} C
D : Type u_2
inst✝⁵ : Category.{?u.29676, u_2} D
E : Type u_3
inst✝⁴ : Category.{?u.29683, u_3} E
M : Type u_4
inst✝³ : AddMonoid M
inst✝² : HasShift C M
inst✝¹ : HasShift D M
inst✝ : HasShift E M
X Y Z T : C
f : X ⟶ Y
g : Y ⟶ Z
d : M
h : ShiftedHom Z T d
⊢ d + 0 + 0 = d
tactic: rw [← comp_assoc, mk₀_comp_mk₀]
state_before: case h
C : Type u_1
inst✝⁶ : Category.{u_5, u_1} C
D : Type u_2
inst✝⁵ : Category.{?u.29676, u_2} D
E : Type u_3
inst✝⁴ : Category.{?u.29683, u_3} E
M : Type u_4
inst✝³ : AddMonoid M
inst✝² : HasShift C M
inst✝¹ : HasShift D M
inst✝ : HasShift E M
X Y Z T : C
f : X ⟶ Y
g : Y ⟶ Z
d : M
h : ShiftedHom Z T d
⊢ 0 + 0 = 0

case h
C : Type u_1
inst✝⁶ : Category.{u_5, u_1} C
D : Type u_2
inst✝⁵ : Category.{?u.29676, u_2} D
E : Type u_3
inst✝⁴ : Category.{?u.29683, u_3} E
M : Type u_4
inst✝³ : AddMonoid M
inst✝² : HasShift C M
inst✝¹ : HasShift D M
inst✝ : HasShift E M
X Y Z T : C
f : X ⟶ Y
g : Y ⟶ Z
d : M
h : ShiftedHom Z T d
⊢ d + 0 + 0 = d
state_after: no goals
tactic: all_goals simp