Theorem: isZero_Ext_succ_of_projective
File: Mathlib/CategoryTheory/Abelian/Ext.lean

tactic: refine IsZero.of_iso ?_ ((ProjectiveResolution.self X).isoExt (n + 1) Y)
state_before: R : Type u_1
inst✝⁵ : Ring R
C : Type u_2
inst✝⁴ : Category.{u_3, u_2} C
inst✝³ : Abelian C
inst✝² : Linear R C
inst✝¹ : EnoughProjectives C
X Y : C
inst✝ : Projective X
n : ℕ
⊢ IsZero (((Ext R C (n + 1)).obj { unop := X }).obj Y)
state_after: R : Type u_1
inst✝⁵ : Ring R
C : Type u_2
inst✝⁴ : Category.{u_3, u_2} C
inst✝³ : Abelian C
inst✝² : Linear R C
inst✝¹ : EnoughProjectives C
X Y : C
inst✝ : Projective X
n : ℕ
⊢ IsZero (HomologicalComplex.homology ((ProjectiveResolution.self X).complex.linearYonedaObj R Y) (n + 1))

tactic: rw [← HomologicalComplex.exactAt_iff_isZero_homology, HomologicalComplex.exactAt_iff]
state_before: R : Type u_1
inst✝⁵ : Ring R
C : Type u_2
inst✝⁴ : Category.{u_3, u_2} C
inst✝³ : Abelian C
inst✝² : Linear R C
inst✝¹ : EnoughProjectives C
X Y : C
inst✝ : Projective X
n : ℕ
⊢ IsZero (HomologicalComplex.homology ((ProjectiveResolution.self X).complex.linearYonedaObj R Y) (n + 1))
state_after: R : Type u_1
inst✝⁵ : Ring R
C : Type u_2
inst✝⁴ : Category.{u_3, u_2} C
inst✝³ : Abelian C
inst✝² : Linear R C
inst✝¹ : EnoughProjectives C
X Y : C
inst✝ : Projective X
n : ℕ
⊢ (HomologicalComplex.sc ((ProjectiveResolution.self X).complex.linearYonedaObj R Y) (n + 1)).Exact

tactic: refine ShortComplex.exact_of_isZero_X₂ _ ?_
state_before: R : Type u_1
inst✝⁵ : Ring R
C : Type u_2
inst✝⁴ : Category.{u_3, u_2} C
inst✝³ : Abelian C
inst✝² : Linear R C
inst✝¹ : EnoughProjectives C
X Y : C
inst✝ : Projective X
n : ℕ
⊢ (HomologicalComplex.sc ((ProjectiveResolution.self X).complex.linearYonedaObj R Y) (n + 1)).Exact
state_after: R : Type u_1
inst✝⁵ : Ring R
C : Type u_2
inst✝⁴ : Category.{u_3, u_2} C
inst✝³ : Abelian C
inst✝² : Linear R C
inst✝¹ : EnoughProjectives C
X Y : C
inst✝ : Projective X
n : ℕ
⊢ IsZero (HomologicalComplex.sc ((ProjectiveResolution.self X).complex.linearYonedaObj R Y) (n + 1)).X₂

tactic: dsimp
state_before: R : Type u_1
inst✝⁵ : Ring R
C : Type u_2
inst✝⁴ : Category.{u_3, u_2} C
inst✝³ : Abelian C
inst✝² : Linear R C
inst✝¹ : EnoughProjectives C
X Y : C
inst✝ : Projective X
n : ℕ
⊢ IsZero (HomologicalComplex.sc ((ProjectiveResolution.self X).complex.linearYonedaObj R Y) (n + 1)).X₂
state_after: R : Type u_1
inst✝⁵ : Ring R
C : Type u_2
inst✝⁴ : Category.{u_3, u_2} C
inst✝³ : Abelian C
inst✝² : Linear R C
inst✝¹ : EnoughProjectives C
X Y : C
inst✝ : Projective X
n : ℕ
⊢ IsZero (ModuleCat.of R (((ChainComplex.single₀ C).obj X).X (n + 1) ⟶ Y))

tactic: rw [IsZero.iff_id_eq_zero]
state_before: R : Type u_1
inst✝⁵ : Ring R
C : Type u_2
inst✝⁴ : Category.{u_3, u_2} C
inst✝³ : Abelian C
inst✝² : Linear R C
inst✝¹ : EnoughProjectives C
X Y : C
inst✝ : Projective X
n : ℕ
⊢ IsZero (ModuleCat.of R (((ChainComplex.single₀ C).obj X).X (n + 1) ⟶ Y))
state_after: R : Type u_1
inst✝⁵ : Ring R
C : Type u_2
inst✝⁴ : Category.{u_3, u_2} C
inst✝³ : Abelian C
inst✝² : Linear R C
inst✝¹ : EnoughProjectives C
X Y : C
inst✝ : Projective X
n : ℕ
⊢ 𝟙 (ModuleCat.of R (((ChainComplex.single₀ C).obj X).X (n + 1) ⟶ Y)) = 0

tactic: ext (x : _ ⟶ _)
state_before: R : Type u_1
inst✝⁵ : Ring R
C : Type u_2
inst✝⁴ : Category.{u_3, u_2} C
inst✝³ : Abelian C
inst✝² : Linear R C
inst✝¹ : EnoughProjectives C
X Y : C
inst✝ : Projective X
n : ℕ
⊢ 𝟙 (ModuleCat.of R (((ChainComplex.single₀ C).obj X).X (n + 1) ⟶ Y)) = 0
state_after: case h
R : Type u_1
inst✝⁵ : Ring R
C : Type u_2
inst✝⁴ : Category.{u_3, u_2} C
inst✝³ : Abelian C
inst✝² : Linear R C
inst✝¹ : EnoughProjectives C
X Y : C
inst✝ : Projective X
n : ℕ
x : ((ChainComplex.single₀ C).obj X).X (n + 1) ⟶ Y
⊢ (𝟙 (ModuleCat.of R (((ChainComplex.single₀ C).obj X).X (n + 1) ⟶ Y))) x = 0 x

tactic: obtain rfl : x = 0 := (HomologicalComplex.isZero_single_obj_X
  (ComplexShape.down ℕ) 0 X (n + 1) (by simp)).eq_of_src _ _
state_before: case h
R : Type u_1
inst✝⁵ : Ring R
C : Type u_2
inst✝⁴ : Category.{u_3, u_2} C
inst✝³ : Abelian C
inst✝² : Linear R C
inst✝¹ : EnoughProjectives C
X Y : C
inst✝ : Projective X
n : ℕ
x : ((ChainComplex.single₀ C).obj X).X (n + 1) ⟶ Y
⊢ (𝟙 (ModuleCat.of R (((ChainComplex.single₀ C).obj X).X (n + 1) ⟶ Y))) x = 0 x
state_after: case h
R : Type u_1
inst✝⁵ : Ring R
C : Type u_2
inst✝⁴ : Category.{u_3, u_2} C
inst✝³ : Abelian C
inst✝² : Linear R C
inst✝¹ : EnoughProjectives C
X Y : C
inst✝ : Projective X
n : ℕ
⊢ (𝟙 (ModuleCat.of R (((ChainComplex.single₀ C).obj X).X (n + 1) ⟶ Y))) 0 = 0 0

tactic: rfl
state_before: case h
R : Type u_1
inst✝⁵ : Ring R
C : Type u_2
inst✝⁴ : Category.{u_3, u_2} C
inst✝³ : Abelian C
inst✝² : Linear R C
inst✝¹ : EnoughProjectives C
X Y : C
inst✝ : Projective X
n : ℕ
⊢ (𝟙 (ModuleCat.of R (((ChainComplex.single₀ C).obj X).X (n + 1) ⟶ Y))) 0 = 0 0
state_after: no goals

tactic: simp
state_before: R : Type u_1
inst✝⁵ : Ring R
C : Type u_2
inst✝⁴ : Category.{u_3, u_2} C
inst✝³ : Abelian C
inst✝² : Linear R C
inst✝¹ : EnoughProjectives C
X Y : C
inst✝ : Projective X
n : ℕ
x : ((ChainComplex.single₀ C).obj X).X (n + 1) ⟶ Y
⊢ n + 1 ≠ 0
state_after: no goals