Theorem: CategoryTheory.ShortComplex.Splitting.ext_s
File: Mathlib/Algebra/Homology/ShortComplex/Exact.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.83140, u_2} D
inst✝¹ : Preadditive C
inst✝ : Preadditive D
S : ShortComplex C
s s' : S.Splitting
h : s.s = s'.s
⊢ s = s'
state_after: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.83140, u_2} D
inst✝¹ : Preadditive C
inst✝ : Preadditive D
S : ShortComplex C
s s' : S.Splitting
h : s.s = s'.s
this : Mono S.f
⊢ s = s'
tactic: have := s.mono_f
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.83140, u_2} D
inst✝¹ : Preadditive C
inst✝ : Preadditive D
S : ShortComplex C
s s' : S.Splitting
h : s.s = s'.s
this : Mono S.f
⊢ s = s'
state_after: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.83140, u_2} D
inst✝¹ : Preadditive C
inst✝ : Preadditive D
S : ShortComplex C
s s' : S.Splitting
h : s.s = s'.s
this : Mono S.f
eq : s.r ≫ S.f + S.g ≫ s.s = 𝟙 S.X₂
⊢ s = s'
tactic: have eq := s.id
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.83140, u_2} D
inst✝¹ : Preadditive C
inst✝ : Preadditive D
S : ShortComplex C
s s' : S.Splitting
h : s.s = s'.s
this : Mono S.f
eq : s.r ≫ S.f + S.g ≫ s.s = 𝟙 S.X₂
⊢ s = s'
state_after: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.83140, u_2} D
inst✝¹ : Preadditive C
inst✝ : Preadditive D
S : ShortComplex C
s s' : S.Splitting
h : s.s = s'.s
this : Mono S.f
eq : s.r = s'.r
⊢ s = s'
tactic: rw [← s'.id, h, add_left_inj, cancel_mono S.f] at eq
state_before: C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.83140, u_2} D
inst✝¹ : Preadditive C
inst✝ : Preadditive D
S : ShortComplex C
s s' : S.Splitting
h : s.s = s'.s
this : Mono S.f
eq : s.r = s'.r
⊢ s = s'
state_after: case mk
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.83140, u_2} D
inst✝¹ : Preadditive C
inst✝ : Preadditive D
S : ShortComplex C
s' : S.Splitting
this : Mono S.f
r✝ : S.X₂ ⟶ S.X₁
s✝ : S.X₃ ⟶ S.X₂
f_r✝ : S.f ≫ r✝ = 𝟙 S.X₁
s_g✝ : s✝ ≫ S.g = 𝟙 S.X₃
id✝ : r✝ ≫ S.f + S.g ≫ s✝ = 𝟙 S.X₂
h : { r := r✝, s := s✝, f_r := f_r✝, s_g := s_g✝, id := id✝ }.s = s'.s
eq : { r := r✝, s := s✝, f_r := f_r✝, s_g := s_g✝, id := id✝ }.r = s'.r
⊢ { r := r✝, s := s✝, f_r := f_r✝, s_g := s_g✝, id := id✝ } = s'
tactic: cases s
state_before: case mk
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.83140, u_2} D
inst✝¹ : Preadditive C
inst✝ : Preadditive D
S : ShortComplex C
s' : S.Splitting
this : Mono S.f
r✝ : S.X₂ ⟶ S.X₁
s✝ : S.X₃ ⟶ S.X₂
f_r✝ : S.f ≫ r✝ = 𝟙 S.X₁
s_g✝ : s✝ ≫ S.g = 𝟙 S.X₃
id✝ : r✝ ≫ S.f + S.g ≫ s✝ = 𝟙 S.X₂
h : { r := r✝, s := s✝, f_r := f_r✝, s_g := s_g✝, id := id✝ }.s = s'.s
eq : { r := r✝, s := s✝, f_r := f_r✝, s_g := s_g✝, id := id✝ }.r = s'.r
⊢ { r := r✝, s := s✝, f_r := f_r✝, s_g := s_g✝, id := id✝ } = s'
state_after: case mk.mk
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.83140, u_2} D
inst✝¹ : Preadditive C
inst✝ : Preadditive D
S : ShortComplex C
this : Mono S.f
r✝¹ : S.X₂ ⟶ S.X₁
s✝¹ : S.X₃ ⟶ S.X₂
f_r✝¹ : S.f ≫ r✝¹ = 𝟙 S.X₁
s_g✝¹ : s✝¹ ≫ S.g = 𝟙 S.X₃
id✝¹ : r✝¹ ≫ S.f + S.g ≫ s✝¹ = 𝟙 S.X₂
r✝ : S.X₂ ⟶ S.X₁
s✝ : S.X₃ ⟶ S.X₂
f_r✝ : S.f ≫ r✝ = 𝟙 S.X₁
s_g✝ : s✝ ≫ S.g = 𝟙 S.X₃
id✝ : r✝ ≫ S.f + S.g ≫ s✝ = 𝟙 S.X₂
h :
  { r := r✝¹, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.s =
    { r := r✝, s := s✝, f_r := f_r✝, s_g := s_g✝, id := id✝ }.s
eq :
  { r := r✝¹, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.r =
    { r := r✝, s := s✝, f_r := f_r✝, s_g := s_g✝, id := id✝ }.r
⊢ { r := r✝¹, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ } =
    { r := r✝, s := s✝, f_r := f_r✝, s_g := s_g✝, id := id✝ }
tactic: cases s'
state_before: case mk.mk
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.83140, u_2} D
inst✝¹ : Preadditive C
inst✝ : Preadditive D
S : ShortComplex C
this : Mono S.f
r✝¹ : S.X₂ ⟶ S.X₁
s✝¹ : S.X₃ ⟶ S.X₂
f_r✝¹ : S.f ≫ r✝¹ = 𝟙 S.X₁
s_g✝¹ : s✝¹ ≫ S.g = 𝟙 S.X₃
id✝¹ : r✝¹ ≫ S.f + S.g ≫ s✝¹ = 𝟙 S.X₂
r✝ : S.X₂ ⟶ S.X₁
s✝ : S.X₃ ⟶ S.X₂
f_r✝ : S.f ≫ r✝ = 𝟙 S.X₁
s_g✝ : s✝ ≫ S.g = 𝟙 S.X₃
id✝ : r✝ ≫ S.f + S.g ≫ s✝ = 𝟙 S.X₂
h :
  { r := r✝¹, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.s =
    { r := r✝, s := s✝, f_r := f_r✝, s_g := s_g✝, id := id✝ }.s
eq :
  { r := r✝¹, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.r =
    { r := r✝, s := s✝, f_r := f_r✝, s_g := s_g✝, id := id✝ }.r
⊢ { r := r✝¹, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ } =
    { r := r✝, s := s✝, f_r := f_r✝, s_g := s_g✝, id := id✝ }
state_after: case mk.mk
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.83140, u_2} D
inst✝¹ : Preadditive C
inst✝ : Preadditive D
S : ShortComplex C
this : Mono S.f
r✝ : S.X₂ ⟶ S.X₁
s✝¹ : S.X₃ ⟶ S.X₂
f_r✝¹ : S.f ≫ r✝ = 𝟙 S.X₁
s_g✝¹ : s✝¹ ≫ S.g = 𝟙 S.X₃
id✝¹ : r✝ ≫ S.f + S.g ≫ s✝¹ = 𝟙 S.X₂
s✝ : S.X₃ ⟶ S.X₂
s_g✝ : s✝ ≫ S.g = 𝟙 S.X₃
f_r✝ : S.f ≫ { r := r✝, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.r = 𝟙 S.X₁
id✝ : { r := r✝, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.r ≫ S.f + S.g ≫ s✝ = 𝟙 S.X₂
h :
  { r := r✝, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.s =
    { r := { r := r✝, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.r, s := s✝, f_r := f_r✝, s_g := s_g✝,
        id := id✝ }.s
⊢ { r := r✝, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ } =
    { r := { r := r✝, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.r, s := s✝, f_r := f_r✝, s_g := s_g✝,
      id := id✝ }
tactic: obtain rfl := eq
state_before: case mk.mk
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.83140, u_2} D
inst✝¹ : Preadditive C
inst✝ : Preadditive D
S : ShortComplex C
this : Mono S.f
r✝ : S.X₂ ⟶ S.X₁
s✝¹ : S.X₃ ⟶ S.X₂
f_r✝¹ : S.f ≫ r✝ = 𝟙 S.X₁
s_g✝¹ : s✝¹ ≫ S.g = 𝟙 S.X₃
id✝¹ : r✝ ≫ S.f + S.g ≫ s✝¹ = 𝟙 S.X₂
s✝ : S.X₃ ⟶ S.X₂
s_g✝ : s✝ ≫ S.g = 𝟙 S.X₃
f_r✝ : S.f ≫ { r := r✝, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.r = 𝟙 S.X₁
id✝ : { r := r✝, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.r ≫ S.f + S.g ≫ s✝ = 𝟙 S.X₂
h :
  { r := r✝, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.s =
    { r := { r := r✝, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.r, s := s✝, f_r := f_r✝, s_g := s_g✝,
        id := id✝ }.s
⊢ { r := r✝, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ } =
    { r := { r := r✝, s := s✝¹, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.r, s := s✝, f_r := f_r✝, s_g := s_g✝,
      id := id✝ }
state_after: case mk.mk
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.83140, u_2} D
inst✝¹ : Preadditive C
inst✝ : Preadditive D
S : ShortComplex C
this : Mono S.f
r✝ : S.X₂ ⟶ S.X₁
s✝ : S.X₃ ⟶ S.X₂
f_r✝¹ : S.f ≫ r✝ = 𝟙 S.X₁
s_g✝¹ : s✝ ≫ S.g = 𝟙 S.X₃
id✝¹ : r✝ ≫ S.f + S.g ≫ s✝ = 𝟙 S.X₂
f_r✝ : S.f ≫ { r := r✝, s := s✝, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.r = 𝟙 S.X₁
s_g✝ : { r := r✝, s := s✝, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.s ≫ S.g = 𝟙 S.X₃
id✝ :
  { r := r✝, s := s✝, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.r ≫ S.f +
      S.g ≫ { r := r✝, s := s✝, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.s =
    𝟙 S.X₂
⊢ { r := r✝, s := s✝, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ } =
    { r := { r := r✝, s := s✝, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.r,
      s := { r := r✝, s := s✝, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.s, f_r := f_r✝, s_g := s_g✝, id := id✝ }
tactic: obtain rfl := h
state_before: case mk.mk
C : Type u_1
D : Type u_2
inst✝³ : Category.{u_3, u_1} C
inst✝² : Category.{?u.83140, u_2} D
inst✝¹ : Preadditive C
inst✝ : Preadditive D
S : ShortComplex C
this : Mono S.f
r✝ : S.X₂ ⟶ S.X₁
s✝ : S.X₃ ⟶ S.X₂
f_r✝¹ : S.f ≫ r✝ = 𝟙 S.X₁
s_g✝¹ : s✝ ≫ S.g = 𝟙 S.X₃
id✝¹ : r✝ ≫ S.f + S.g ≫ s✝ = 𝟙 S.X₂
f_r✝ : S.f ≫ { r := r✝, s := s✝, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.r = 𝟙 S.X₁
s_g✝ : { r := r✝, s := s✝, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.s ≫ S.g = 𝟙 S.X₃
id✝ :
  { r := r✝, s := s✝, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.r ≫ S.f +
      S.g ≫ { r := r✝, s := s✝, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.s =
    𝟙 S.X₂
⊢ { r := r✝, s := s✝, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ } =
    { r := { r := r✝, s := s✝, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.r,
      s := { r := r✝, s := s✝, f_r := f_r✝¹, s_g := s_g✝¹, id := id✝¹ }.s, f_r := f_r✝, s_g := s_g✝, id := id✝ }
state_after: no goals
tactic: rfl