Theorem: CategoryTheory.ShortComplex.SnakeInput.δ_apply'
File: Mathlib/Algebra/Homology/ShortComplex/ConcreteCategory.lean

tactic: have e : forget₂ C Ab ⋙ forget Ab ≅ forget C := eqToIso (HasForget₂.forget_comp)
state_before: C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
⊢ ((forget₂ C Ab).map D.δ) x₃ = ((forget₂ C Ab).map D.v₂₃.τ₁) x₁
state_after: C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ ((forget₂ C Ab).map D.δ) x₃ = ((forget₂ C Ab).map D.v₂₃.τ₁) x₁

tactic: apply (mono_iff_injective (e.hom.app _)).1 inferInstance
state_before: C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ ((forget₂ C Ab).map D.δ) x₃ = ((forget₂ C Ab).map D.v₂₃.τ₁) x₁
state_after: case a
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ e.hom.app D.L₃.X₁ (((forget₂ C Ab).map D.δ) x₃) = e.hom.app D.L₃.X₁ (((forget₂ C Ab).map D.v₂₃.τ₁) x₁)

tactic: refine (congr_hom (e.hom.naturality D.δ) x₃).trans
  ((D.δ_apply (e.hom.app _ x₃) (e.hom.app _ x₂) (e.hom.app _ x₁) ?_ ?_ ).trans
  (congr_hom (e.hom.naturality D.v₂₃.τ₁).symm x₁))
state_before: case a
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ e.hom.app D.L₃.X₁ (((forget₂ C Ab).map D.δ) x₃) = e.hom.app D.L₃.X₁ (((forget₂ C Ab).map D.v₂₃.τ₁) x₁)
state_after: case a.refine_1
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ D.L₁.g (e.hom.app D.L₁.X₂ x₂) = D.v₀₁.τ₃ (e.hom.app D.L₀.X₃ x₃)

case a.refine_2
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ D.L₂.f (e.hom.app D.L₂.X₁ x₁) = D.v₁₂.τ₂ (e.hom.app D.L₁.X₂ x₂)

tactic: refine ((congr_hom (e.hom.naturality D.L₁.g) x₂).symm.trans ?_).trans
  (congr_hom (e.hom.naturality D.v₀₁.τ₃) x₃)
state_before: case a.refine_1
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ D.L₁.g (e.hom.app D.L₁.X₂ x₂) = D.v₀₁.τ₃ (e.hom.app D.L₀.X₃ x₃)
state_after: case a.refine_1
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ ((forget₂ C Ab ⋙ forget Ab).map D.L₁.g ≫ e.hom.app D.L₁.X₃) x₂ =
    ((forget₂ C Ab ⋙ forget Ab).map D.v₀₁.τ₃ ≫ e.hom.app D.L₁.X₃) x₃

tactic: dsimp
state_before: case a.refine_1
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ ((forget₂ C Ab ⋙ forget Ab).map D.L₁.g ≫ e.hom.app D.L₁.X₃) x₂ =
    ((forget₂ C Ab ⋙ forget Ab).map D.v₀₁.τ₃ ≫ e.hom.app D.L₁.X₃) x₃
state_after: case a.refine_1
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ (⇑((forget₂ C Ab).map D.L₁.g) ≫ e.hom.app D.L₁.X₃) x₂ = (⇑((forget₂ C Ab).map D.v₀₁.τ₃) ≫ e.hom.app D.L₁.X₃) x₃

tactic: rw [comp_apply, comp_apply]
state_before: case a.refine_1
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ (⇑((forget₂ C Ab).map D.L₁.g) ≫ e.hom.app D.L₁.X₃) x₂ = (⇑((forget₂ C Ab).map D.v₀₁.τ₃) ≫ e.hom.app D.L₁.X₃) x₃
state_after: case a.refine_1
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ (e.hom.app D.L₁.X₃) (⇑((forget₂ C Ab).map D.L₁.g) x₂) = (e.hom.app D.L₁.X₃) (⇑((forget₂ C Ab).map D.v₀₁.τ₃) x₃)

tactic: erw [h₂]
state_before: case a.refine_1
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ (e.hom.app D.L₁.X₃) (⇑((forget₂ C Ab).map D.L₁.g) x₂) = (e.hom.app D.L₁.X₃) (⇑((forget₂ C Ab).map D.v₀₁.τ₃) x₃)
state_after: case a.refine_1
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ (e.hom.app D.L₁.X₃) (((forget₂ C Ab).map D.v₀₁.τ₃) x₃) = (e.hom.app D.L₁.X₃) (⇑((forget₂ C Ab).map D.v₀₁.τ₃) x₃)

tactic: rfl
state_before: case a.refine_1
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ (e.hom.app D.L₁.X₃) (((forget₂ C Ab).map D.v₀₁.τ₃) x₃) = (e.hom.app D.L₁.X₃) (⇑((forget₂ C Ab).map D.v₀₁.τ₃) x₃)
state_after: no goals

tactic: refine ((congr_hom (e.hom.naturality D.L₂.f) x₁).symm.trans ?_).trans
  (congr_hom (e.hom.naturality D.v₁₂.τ₂) x₂)
state_before: case a.refine_2
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ D.L₂.f (e.hom.app D.L₂.X₁ x₁) = D.v₁₂.τ₂ (e.hom.app D.L₁.X₂ x₂)
state_after: case a.refine_2
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ ((forget₂ C Ab ⋙ forget Ab).map D.L₂.f ≫ e.hom.app D.L₂.X₂) x₁ =
    ((forget₂ C Ab ⋙ forget Ab).map D.v₁₂.τ₂ ≫ e.hom.app D.L₂.X₂) x₂

tactic: dsimp
state_before: case a.refine_2
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ ((forget₂ C Ab ⋙ forget Ab).map D.L₂.f ≫ e.hom.app D.L₂.X₂) x₁ =
    ((forget₂ C Ab ⋙ forget Ab).map D.v₁₂.τ₂ ≫ e.hom.app D.L₂.X₂) x₂
state_after: case a.refine_2
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ (⇑((forget₂ C Ab).map D.L₂.f) ≫ e.hom.app D.L₂.X₂) x₁ = (⇑((forget₂ C Ab).map D.v₁₂.τ₂) ≫ e.hom.app D.L₂.X₂) x₂

tactic: rw [comp_apply, comp_apply]
state_before: case a.refine_2
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ (⇑((forget₂ C Ab).map D.L₂.f) ≫ e.hom.app D.L₂.X₂) x₁ = (⇑((forget₂ C Ab).map D.v₁₂.τ₂) ≫ e.hom.app D.L₂.X₂) x₂
state_after: case a.refine_2
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ (e.hom.app D.L₂.X₂) (⇑((forget₂ C Ab).map D.L₂.f) x₁) = (e.hom.app D.L₂.X₂) (⇑((forget₂ C Ab).map D.v₁₂.τ₂) x₂)

tactic: erw [h₁]
state_before: case a.refine_2
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ (e.hom.app D.L₂.X₂) (⇑((forget₂ C Ab).map D.L₂.f) x₁) = (e.hom.app D.L₂.X₂) (⇑((forget₂ C Ab).map D.v₁₂.τ₂) x₂)
state_after: case a.refine_2
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ (e.hom.app D.L₂.X₂) (((forget₂ C Ab).map D.v₁₂.τ₂) x₂) = (e.hom.app D.L₂.X₂) (⇑((forget₂ C Ab).map D.v₁₂.τ₂) x₂)

tactic: rfl
state_before: case a.refine_2
C : Type u
inst✝⁵ : Category.{v, u} C
inst✝⁴ : ConcreteCategory C
inst✝³ : HasForget₂ C Ab
inst✝² : Abelian C
inst✝¹ : (forget₂ C Ab).Additive
inst✝ : (forget₂ C Ab).PreservesHomology
D : SnakeInput C
x₃ : ↑((forget₂ C Ab).obj D.L₀.X₃)
x₂ : ↑((forget₂ C Ab).obj D.L₁.X₂)
x₁ : ↑((forget₂ C Ab).obj D.L₂.X₁)
h₂ : ((forget₂ C Ab).map D.L₁.g) x₂ = ((forget₂ C Ab).map D.v₀₁.τ₃) x₃
h₁ : ((forget₂ C Ab).map D.L₂.f) x₁ = ((forget₂ C Ab).map D.v₁₂.τ₂) x₂
e : forget₂ C Ab ⋙ forget Ab ≅ forget C
⊢ (e.hom.app D.L₂.X₂) (((forget₂ C Ab).map D.v₁₂.τ₂) x₂) = (e.hom.app D.L₂.X₂) (⇑((forget₂ C Ab).map D.v₁₂.τ₂) x₂)
state_after: no goals