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

tactic: have := hS.mono_f
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
ι : Type u_1
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
x₃ : ↑((forget₂ C Ab).obj (S.X₃.X i))
hx₃ : ((forget₂ C Ab).map (S.X₃.d i j)) x₃ = 0
x₂ : ↑((forget₂ C Ab).obj (S.X₂.X i))
hx₂ : ((forget₂ C Ab).map (S.g.f i)) x₂ = x₃
x₁ : ↑((forget₂ C Ab).obj (S.X₁.X j))
hx₁ : ((forget₂ C Ab).map (S.f.f j)) x₁ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂
k : ι
hk : c.next j = k
⊢ ((forget₂ C Ab).map (S.X₁.d j k)) x₁ = 0
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
ι : Type u_1
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
x₃ : ↑((forget₂ C Ab).obj (S.X₃.X i))
hx₃ : ((forget₂ C Ab).map (S.X₃.d i j)) x₃ = 0
x₂ : ↑((forget₂ C Ab).obj (S.X₂.X i))
hx₂ : ((forget₂ C Ab).map (S.g.f i)) x₂ = x₃
x₁ : ↑((forget₂ C Ab).obj (S.X₁.X j))
hx₁ : ((forget₂ C Ab).map (S.f.f j)) x₁ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂
k : ι
hk : c.next j = k
this : Mono S.f
⊢ ((forget₂ C Ab).map (S.X₁.d j k)) x₁ = 0

tactic: apply (Preadditive.mono_iff_injective (S.f.f k)).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
ι : Type u_1
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
x₃ : ↑((forget₂ C Ab).obj (S.X₃.X i))
hx₃ : ((forget₂ C Ab).map (S.X₃.d i j)) x₃ = 0
x₂ : ↑((forget₂ C Ab).obj (S.X₂.X i))
hx₂ : ((forget₂ C Ab).map (S.g.f i)) x₂ = x₃
x₁ : ↑((forget₂ C Ab).obj (S.X₁.X j))
hx₁ : ((forget₂ C Ab).map (S.f.f j)) x₁ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂
k : ι
hk : c.next j = k
this : Mono S.f
⊢ ((forget₂ C Ab).map (S.X₁.d j k)) x₁ = 0
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
ι : Type u_1
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
x₃ : ↑((forget₂ C Ab).obj (S.X₃.X i))
hx₃ : ((forget₂ C Ab).map (S.X₃.d i j)) x₃ = 0
x₂ : ↑((forget₂ C Ab).obj (S.X₂.X i))
hx₂ : ((forget₂ C Ab).map (S.g.f i)) x₂ = x₃
x₁ : ↑((forget₂ C Ab).obj (S.X₁.X j))
hx₁ : ((forget₂ C Ab).map (S.f.f j)) x₁ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂
k : ι
hk : c.next j = k
this : Mono S.f
⊢ ((forget₂ C Ab).map (S.f.f k)) (((forget₂ C Ab).map (S.X₁.d j k)) x₁) = ((forget₂ C Ab).map (S.f.f k)) 0

tactic: erw [← forget₂_comp_apply, ← HomologicalComplex.Hom.comm, forget₂_comp_apply, hx₁,
  ← forget₂_comp_apply, HomologicalComplex.d_comp_d, Functor.map_zero, map_zero,
  AddMonoidHom.zero_apply]
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
ι : Type u_1
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
x₃ : ↑((forget₂ C Ab).obj (S.X₃.X i))
hx₃ : ((forget₂ C Ab).map (S.X₃.d i j)) x₃ = 0
x₂ : ↑((forget₂ C Ab).obj (S.X₂.X i))
hx₂ : ((forget₂ C Ab).map (S.g.f i)) x₂ = x₃
x₁ : ↑((forget₂ C Ab).obj (S.X₁.X j))
hx₁ : ((forget₂ C Ab).map (S.f.f j)) x₁ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂
k : ι
hk : c.next j = k
this : Mono S.f
⊢ ((forget₂ C Ab).map (S.f.f k)) (((forget₂ C Ab).map (S.X₁.d j k)) x₁) = ((forget₂ C Ab).map (S.f.f k)) 0
state_after: no goals

tactic: refine hS.δ_apply' i j hij _ ((forget₂ C Ab).map (S.X₂.pOpcycles i) x₂) _ ?_ ?_
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
ι : Type u_1
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
x₃ : ↑((forget₂ C Ab).obj (S.X₃.X i))
hx₃ : ((forget₂ C Ab).map (S.X₃.d i j)) x₃ = 0
x₂ : ↑((forget₂ C Ab).obj (S.X₂.X i))
hx₂ : ((forget₂ C Ab).map (S.g.f i)) x₂ = x₃
x₁ : ↑((forget₂ C Ab).obj (S.X₁.X j))
hx₁ : ((forget₂ C Ab).map (S.f.f j)) x₁ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂
k : ι
hk : c.next j = k
⊢ ((forget₂ C Ab).map (hS.δ i j hij)) (((forget₂ C Ab).map (S.X₃.homologyπ i)) (S.X₃.cyclesMk x₃ j ⋯ hx₃)) =
    ((forget₂ C Ab).map (S.X₁.homologyπ j)) (S.X₁.cyclesMk x₁ k hk ⋯)
state_after: case 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
ι : Type u_1
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
x₃ : ↑((forget₂ C Ab).obj (S.X₃.X i))
hx₃ : ((forget₂ C Ab).map (S.X₃.d i j)) x₃ = 0
x₂ : ↑((forget₂ C Ab).obj (S.X₂.X i))
hx₂ : ((forget₂ C Ab).map (S.g.f i)) x₂ = x₃
x₁ : ↑((forget₂ C Ab).obj (S.X₁.X j))
hx₁ : ((forget₂ C Ab).map (S.f.f j)) x₁ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂
k : ι
hk : c.next j = k
⊢ ((forget₂ C Ab).map (HomologicalComplex.opcyclesMap S.g i)) (((forget₂ C Ab).map (S.X₂.pOpcycles i)) x₂) =
    ((forget₂ C Ab).map (S.X₃.homologyι i)) (((forget₂ C Ab).map (S.X₃.homologyπ i)) (S.X₃.cyclesMk x₃ j ⋯ hx₃))

case 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
ι : Type u_1
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
x₃ : ↑((forget₂ C Ab).obj (S.X₃.X i))
hx₃ : ((forget₂ C Ab).map (S.X₃.d i j)) x₃ = 0
x₂ : ↑((forget₂ C Ab).obj (S.X₂.X i))
hx₂ : ((forget₂ C Ab).map (S.g.f i)) x₂ = x₃
x₁ : ↑((forget₂ C Ab).obj (S.X₁.X j))
hx₁ : ((forget₂ C Ab).map (S.f.f j)) x₁ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂
k : ι
hk : c.next j = k
⊢ ((forget₂ C Ab).map (HomologicalComplex.cyclesMap S.f j)) (S.X₁.cyclesMk x₁ k hk ⋯) =
    ((forget₂ C Ab).map (S.X₂.opcyclesToCycles i j)) (((forget₂ C Ab).map (S.X₂.pOpcycles i)) x₂)

tactic: erw [← forget₂_comp_apply, ← forget₂_comp_apply,
  HomologicalComplex.p_opcyclesMap, Functor.map_comp, comp_apply,
  HomologicalComplex.homology_π_ι, forget₂_comp_apply, hx₂, HomologicalComplex.i_cyclesMk]
state_before: case 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
ι : Type u_1
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
x₃ : ↑((forget₂ C Ab).obj (S.X₃.X i))
hx₃ : ((forget₂ C Ab).map (S.X₃.d i j)) x₃ = 0
x₂ : ↑((forget₂ C Ab).obj (S.X₂.X i))
hx₂ : ((forget₂ C Ab).map (S.g.f i)) x₂ = x₃
x₁ : ↑((forget₂ C Ab).obj (S.X₁.X j))
hx₁ : ((forget₂ C Ab).map (S.f.f j)) x₁ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂
k : ι
hk : c.next j = k
⊢ ((forget₂ C Ab).map (HomologicalComplex.opcyclesMap S.g i)) (((forget₂ C Ab).map (S.X₂.pOpcycles i)) x₂) =
    ((forget₂ C Ab).map (S.X₃.homologyι i)) (((forget₂ C Ab).map (S.X₃.homologyπ i)) (S.X₃.cyclesMk x₃ j ⋯ hx₃))
state_after: no goals

tactic: apply (Preadditive.mono_iff_injective (S.X₂.iCycles j)).1 inferInstance
state_before: case 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
ι : Type u_1
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
x₃ : ↑((forget₂ C Ab).obj (S.X₃.X i))
hx₃ : ((forget₂ C Ab).map (S.X₃.d i j)) x₃ = 0
x₂ : ↑((forget₂ C Ab).obj (S.X₂.X i))
hx₂ : ((forget₂ C Ab).map (S.g.f i)) x₂ = x₃
x₁ : ↑((forget₂ C Ab).obj (S.X₁.X j))
hx₁ : ((forget₂ C Ab).map (S.f.f j)) x₁ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂
k : ι
hk : c.next j = k
⊢ ((forget₂ C Ab).map (HomologicalComplex.cyclesMap S.f j)) (S.X₁.cyclesMk x₁ k hk ⋯) =
    ((forget₂ C Ab).map (S.X₂.opcyclesToCycles i j)) (((forget₂ C Ab).map (S.X₂.pOpcycles i)) x₂)
state_after: case refine_2.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
ι : Type u_1
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
x₃ : ↑((forget₂ C Ab).obj (S.X₃.X i))
hx₃ : ((forget₂ C Ab).map (S.X₃.d i j)) x₃ = 0
x₂ : ↑((forget₂ C Ab).obj (S.X₂.X i))
hx₂ : ((forget₂ C Ab).map (S.g.f i)) x₂ = x₃
x₁ : ↑((forget₂ C Ab).obj (S.X₁.X j))
hx₁ : ((forget₂ C Ab).map (S.f.f j)) x₁ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂
k : ι
hk : c.next j = k
⊢ ((forget₂ C Ab).map (S.X₂.iCycles j))
      (((forget₂ C Ab).map (HomologicalComplex.cyclesMap S.f j)) (S.X₁.cyclesMk x₁ k hk ⋯)) =
    ((forget₂ C Ab).map (S.X₂.iCycles j))
      (((forget₂ C Ab).map (S.X₂.opcyclesToCycles i j)) (((forget₂ C Ab).map (S.X₂.pOpcycles i)) x₂))

tactic: conv_lhs =>
  erw [← forget₂_comp_apply, HomologicalComplex.cyclesMap_i, forget₂_comp_apply,
    HomologicalComplex.i_cyclesMk, hx₁]
state_before: case refine_2.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
ι : Type u_1
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
x₃ : ↑((forget₂ C Ab).obj (S.X₃.X i))
hx₃ : ((forget₂ C Ab).map (S.X₃.d i j)) x₃ = 0
x₂ : ↑((forget₂ C Ab).obj (S.X₂.X i))
hx₂ : ((forget₂ C Ab).map (S.g.f i)) x₂ = x₃
x₁ : ↑((forget₂ C Ab).obj (S.X₁.X j))
hx₁ : ((forget₂ C Ab).map (S.f.f j)) x₁ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂
k : ι
hk : c.next j = k
⊢ ((forget₂ C Ab).map (S.X₂.iCycles j))
      (((forget₂ C Ab).map (HomologicalComplex.cyclesMap S.f j)) (S.X₁.cyclesMk x₁ k hk ⋯)) =
    ((forget₂ C Ab).map (S.X₂.iCycles j))
      (((forget₂ C Ab).map (S.X₂.opcyclesToCycles i j)) (((forget₂ C Ab).map (S.X₂.pOpcycles i)) x₂))
state_after: case refine_2.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
ι : Type u_1
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
x₃ : ↑((forget₂ C Ab).obj (S.X₃.X i))
hx₃ : ((forget₂ C Ab).map (S.X₃.d i j)) x₃ = 0
x₂ : ↑((forget₂ C Ab).obj (S.X₂.X i))
hx₂ : ((forget₂ C Ab).map (S.g.f i)) x₂ = x₃
x₁ : ↑((forget₂ C Ab).obj (S.X₁.X j))
hx₁ : ((forget₂ C Ab).map (S.f.f j)) x₁ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂
k : ι
hk : c.next j = k
⊢ ((forget₂ C Ab).map (S.X₂.d i j)) x₂ =
    ((forget₂ C Ab).map (S.X₂.iCycles j))
      (((forget₂ C Ab).map (S.X₂.opcyclesToCycles i j)) (((forget₂ C Ab).map (S.X₂.pOpcycles i)) x₂))

tactic: conv_rhs =>
  erw [← forget₂_comp_apply, ← forget₂_comp_apply,
    HomologicalComplex.pOpcycles_opcyclesToCycles_assoc, HomologicalComplex.toCycles_i]
state_before: case refine_2.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
ι : Type u_1
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
x₃ : ↑((forget₂ C Ab).obj (S.X₃.X i))
hx₃ : ((forget₂ C Ab).map (S.X₃.d i j)) x₃ = 0
x₂ : ↑((forget₂ C Ab).obj (S.X₂.X i))
hx₂ : ((forget₂ C Ab).map (S.g.f i)) x₂ = x₃
x₁ : ↑((forget₂ C Ab).obj (S.X₁.X j))
hx₁ : ((forget₂ C Ab).map (S.f.f j)) x₁ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂
k : ι
hk : c.next j = k
⊢ ((forget₂ C Ab).map (S.X₂.d i j)) x₂ =
    ((forget₂ C Ab).map (S.X₂.iCycles j))
      (((forget₂ C Ab).map (S.X₂.opcyclesToCycles i j)) (((forget₂ C Ab).map (S.X₂.pOpcycles i)) x₂))
state_after: case refine_2.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
ι : Type u_1
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
x₃ : ↑((forget₂ C Ab).obj (S.X₃.X i))
hx₃ : ((forget₂ C Ab).map (S.X₃.d i j)) x₃ = 0
x₂ : ↑((forget₂ C Ab).obj (S.X₂.X i))
hx₂ : ((forget₂ C Ab).map (S.g.f i)) x₂ = x₃
x₁ : ↑((forget₂ C Ab).obj (S.X₁.X j))
hx₁ : ((forget₂ C Ab).map (S.f.f j)) x₁ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂
k : ι
hk : c.next j = k
⊢ ((forget₂ C Ab).map (S.X₂.d i j)) x₂ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂

tactic: rfl
state_before: case refine_2.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
ι : Type u_1
c : ComplexShape ι
S : ShortComplex (HomologicalComplex C c)
hS : S.ShortExact
i j : ι
hij : c.Rel i j
x₃ : ↑((forget₂ C Ab).obj (S.X₃.X i))
hx₃ : ((forget₂ C Ab).map (S.X₃.d i j)) x₃ = 0
x₂ : ↑((forget₂ C Ab).obj (S.X₂.X i))
hx₂ : ((forget₂ C Ab).map (S.g.f i)) x₂ = x₃
x₁ : ↑((forget₂ C Ab).obj (S.X₁.X j))
hx₁ : ((forget₂ C Ab).map (S.f.f j)) x₁ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂
k : ι
hk : c.next j = k
⊢ ((forget₂ C Ab).map (S.X₂.d i j)) x₂ = ((forget₂ C Ab).map (S.X₂.d i j)) x₂
state_after: no goals