mathlib3 documentation

category_theory.limits.shapes.kernel_pair

Kernel pairs #

THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.

This file defines what it means for a parallel pair of morphisms a b : R ⟶ X to be the kernel pair for a morphism f. Some properties of kernel pairs are given, namely allowing one to transfer between the kernel pair of f₁ ≫ f₂ to the kernel pair of f₁. It is also proved that if f is a coequalizer of some pair, and a,b is a kernel pair for f then it is a coequalizer of a,b.

Implementation #

The definition is essentially just a wrapper for is_limit (pullback_cone.mk _ _ _), but the constructions given here are useful, yet awkward to present in that language, so a basic API is developed here.

TODO #

@[reducible]
def category_theory.is_kernel_pair {C : Type u} [category_theory.category C] {R X Y : C} (f : X Y) (a b : R X) :
Prop

is_kernel_pair f a b expresses that (a, b) is a kernel pair for f, i.e. a ≫ f = b ≫ f and the square R → X ↓ ↓ X → Y is a pullback square. This is just an abbreviation for is_pullback a b f f.

@[protected, instance]

The data expressing that (a, b) is a kernel pair is subsingleton.

If f is a monomorphism, then (𝟙 _, 𝟙 _) is a kernel pair for f.

noncomputable def category_theory.is_kernel_pair.lift' {C : Type u} [category_theory.category C] {R X Y : C} {f : X Y} {a b : R X} {S : C} (k : category_theory.is_kernel_pair f a b) (p q : S X) (w : p f = q f) :
{t // t a = p t b = q}

Given a pair of morphisms p, q to X which factor through f, they factor through any kernel pair of f.

Equations
theorem category_theory.is_kernel_pair.cancel_right {C : Type u} [category_theory.category C] {R X Y Z : C} {a b : R X} {f₁ : X Y} {f₂ : Y Z} (comm : a f₁ = b f₁) (big_k : category_theory.is_kernel_pair (f₁ f₂) a b) :

If (a,b) is a kernel pair for f₁ ≫ f₂ and a ≫ f₁ = b ≫ f₁, then (a,b) is a kernel pair for just f₁. That is, to show that (a,b) is a kernel pair for f₁ it suffices to only show the square commutes, rather than to additionally show it's a pullback.

theorem category_theory.is_kernel_pair.cancel_right_of_mono {C : Type u} [category_theory.category C] {R X Y Z : C} {a b : R X} {f₁ : X Y} {f₂ : Y Z} [category_theory.mono f₂] (big_k : category_theory.is_kernel_pair (f₁ f₂) a b) :

If (a,b) is a kernel pair for f₁ ≫ f₂ and f₂ is mono, then (a,b) is a kernel pair for just f₁. The converse of comp_of_mono.

theorem category_theory.is_kernel_pair.comp_of_mono {C : Type u} [category_theory.category C] {R X Y Z : C} {a b : R X} {f₁ : X Y} {f₂ : Y Z} [category_theory.mono f₂] (small_k : category_theory.is_kernel_pair f₁ a b) :

If (a,b) is a kernel pair for f₁ and f₂ is mono, then (a,b) is a kernel pair for f₁ ≫ f₂. The converse of cancel_right_of_mono.

@[protected]

If a₁ a₂ : A ⟶ Y is a kernel pair for g : Y ⟶ Z, then a₁ ×[Z] X and a₂ ×[Z] X (A ×[Z] X ⟶ Y ×[Z] X) is a kernel pair for Y ×[Z] X ⟶ X.