definition example

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 -> Bool covers all of Bool). 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_surjective
even' :: Int -> Bool                  -- an epimorphism in Hask
even' n = n `mod` 2 == 0