English
In a commutative diagram with left map surjective, middle map bijective and right map injective, exactness of the top row is equivalent to exactness of the bottom row.
Русский
В симметрической диаграмме с левой развязкой сюрьективной, средней биективной и правой инъективной, точность верхней строки эквивалентна точности нижней.
LaTeX
$$$\\text{Exact}(f,g) \\iff \\text{Exact}(f',g')$ under surjective, bijective, injective conditions in the ladder diagram$$
Lean4
/-- When we have a commutative diagram from a sequence of two maps to another,
such that the left vertical map is surjective, the middle vertical map is bijective and the right
vertical map is injective, then the upper row is exact iff the lower row is.
See `ShortComplex.exact_iff_of_epi_of_isIso_of_mono` in the file
`Mathlib/Algebra/Homology/ShortComplex/Exact.lean` for the categorical version of this result. -/
theorem exact_iff_of_surjective_of_bijective_of_injective {M₁ M₂ M₃ N₁ N₂ N₃ : Type*} [AddCommMonoid M₁]
[AddCommMonoid M₂] [AddCommMonoid M₃] [AddCommMonoid N₁] [AddCommMonoid N₂] [AddCommMonoid N₃] (f : M₁ →+ M₂)
(g : M₂ →+ M₃) (f' : N₁ →+ N₂) (g' : N₂ →+ N₃) (τ₁ : M₁ →+ N₁) (τ₂ : M₂ →+ N₂) (τ₃ : M₃ →+ N₃)
(comm₁₂ : f'.comp τ₁ = τ₂.comp f) (comm₂₃ : g'.comp τ₂ = τ₃.comp g) (h₁ : Function.Surjective τ₁)
(h₂ : Function.Bijective τ₂) (h₃ : Function.Injective τ₃) : Exact f g ↔ Exact f' g' :=
by
replace comm₁₂ := DFunLike.congr_fun comm₁₂
replace comm₂₃ := DFunLike.congr_fun comm₂₃
dsimp at comm₁₂ comm₂₃
constructor
· intro h y₂
obtain ⟨x₂, rfl⟩ := h₂.2 y₂
constructor
· intro hx₂
obtain ⟨x₁, rfl⟩ := (h x₂).1 (h₃ (by simpa only [map_zero, comm₂₃] using hx₂))
exact ⟨τ₁ x₁, by simp only [comm₁₂]⟩
· rintro ⟨y₁, hy₁⟩
obtain ⟨x₁, rfl⟩ := h₁ y₁
rw [comm₂₃, (h x₂).2 _, map_zero]
exact ⟨x₁, h₂.1 (by simpa only [comm₁₂] using hy₁)⟩
· intro h x₂
constructor
· intro hx₂
obtain ⟨y₁, hy₁⟩ := (h (τ₂ x₂)).1 (by simp only [comm₂₃, hx₂, map_zero])
obtain ⟨x₁, rfl⟩ := h₁ y₁
exact ⟨x₁, h₂.1 (by simpa only [comm₁₂] using hy₁)⟩
· rintro ⟨x₁, rfl⟩
apply h₃
simp only [← comm₁₂, ← comm₂₃, h.apply_apply_eq_zero (τ₁ x₁), map_zero]