An arrow is an epimorphism (“epi”, drawn ) if for every object and every pair ,
Equivalently, pre-composition is injective for every . To show is not epi, find and two different that agree after precomposing with .
Sources: DaoFP §2.5 (“Epimorphisms”), Exercise 2.5.1; 7 Sketches §1.4.2; Kittenlab Lecture 2; CTfS Definition 2.7.5.3, Proposition 2.7.5.4, Exercise 2.7.5.6
Intuition (DaoFP). Mappings out of an object define its properties: think of elements of a finite target as colours painting . If is not epi, its image may cover only the part of painted alike by and , so the two agree on although they differ on . “Of course, in an actual category there is no peeking inside objects.”
- In epis are exactly the surjections (
even :: Int -> Boolcovers all ofBool). Any arrow to the Terminal Object is epi (DaoFP Exercise 2.5.1). - Proof that epi ⇒ surjective in (CTfS Proposition 2.7.5.4) uses the Subobject Classifier as the “test object”: if were missed by , the characteristic functions of and of would be two different maps that agree after precomposing with . Pushouts preserve epimorphisms, dually to pullbacks preserving monos (CTfS Exercise 2.7.5.6).
- Epi is dual to Monomorphism: an epi in is a mono in . A retraction is always epi.
- Surjections out of = partitions of ; the Epi-Mono Factorization underlies Pushforward and Pullback of Partitions.
- Epi + mono need not be iso (DaoFP; e.g. dense inclusions in ).
- Via pushouts (7 Sketches Definition 7.5): is epi iff the square with twice and twice is a Pushout (the cokernel pair of is trivial) — the exact dual of the pullback characterization of monos. In a Topos ” is epi” is expressed by the internal formula (Internal Language of a Topos, Example 7.74).
Docs: FinSets · C-set morphisms — Kittenlab Lecture 2
using Catlab
is_epic(FinFunction([1, 2, 2], 2)) # true: surjective
is_epic(FinFunction([1, 1, 1], 2)) # false#check CategoryTheory.Epi -- class Epi f : ∀ g h, f ≫ g = f ≫ h → g = h
#check @CategoryTheory.epi_iff_surjectiveeven' :: Int -> Bool -- an epimorphism in Hask
even' n = n `mod` 2 == 0