TODO: Use Pointed (the category of pointed types) in Mathlib.
theorem
ExactSeq.isExactAt_of_ker_supset_im_of_ker_subset_im
{X : Type u_1}
{Y : Type u_2}
{Z : Type u_3}
[Inhabited X]
[Inhabited Y]
[Inhabited Z]
{f : X → Y}
{g : Y → Z}
[IsPointedMap f]
[IsPointedMap g]
(hsup : ∀ (y : Y), (∃ (x : X), f x = y) → g y = default)
(hsub : ∀ (y : Y), g y = default → ∃ (x : X), f x = y)
:
IsExactAt f g
Given an exact sequence
A --a-> B --b-> C --c-> D --d-> E
of five pointed sets, if a is surjective and d is injective, then C = 0.
proof.
theorem
ExactSeq.unique_mid_of_five
{A : Type u_1}
{B : Type u_2}
{C : Type u_3}
{D : Type u_4}
{E : Type u_5}
[Inhabited A]
[Inhabited B]
[Inhabited C]
[Inhabited D]
[Inhabited E]
(a : A → B)
(b : B → C)
(c : C → D)
(d : D → E)
[IsPointedMap a]
[IsPointedMap b]
[IsPointedMap c]
[IsPointedMap d]
(a_surj : Function.Surjective a)
(d_inj : Function.Injective d)
(exb : IsExactAt a b)
(exc : IsExactAt b c)
(exd : IsExactAt c d)
:
C = {0} if there is an exact sequence A --a-> B --b-> C --c-> D --d-> E
of five pointed sets such that a is surjective and d is injective.