From 8b0d176fb1f0f430699563d3860e2b0890a43d50 Mon Sep 17 00:00:00 2001
From: Script Raccoon
Date: Tue, 4 Aug 2026 23:56:21 +0200
Subject: [PATCH 1/8] add more special morphism rules
---
.../categories/walking_commutative_square.yaml | 5 +----
.../data/categories/walking_composable_pair.yaml | 5 +----
.../data/categories/walking_coreflexive_pair.yaml | 3 ---
database/data/categories/walking_fork.yaml | 3 ---
database/data/categories/walking_morphism.yaml | 5 +----
database/data/categories/walking_pair.yaml | 5 +----
database/data/categories/walking_span.yaml | 5 +----
database/data/categories/walking_splitting.yaml | 3 ---
database/data/special-morphism-rules.yaml | 15 +++++++++++++++
9 files changed, 20 insertions(+), 29 deletions(-)
diff --git a/database/data/categories/walking_commutative_square.yaml b/database/data/categories/walking_commutative_square.yaml
index 9af90108..36cbce01 100644
--- a/database/data/categories/walking_commutative_square.yaml
+++ b/database/data/categories/walking_commutative_square.yaml
@@ -51,7 +51,4 @@ special_objects:
products:
description: $b \times c = a$, $x \times x = x$, $a \times x = a$, $d \times x = x$
-special_morphisms:
- isomorphisms:
- description: the four identities
- proof: This is trivial.
+special_morphisms: {}
diff --git a/database/data/categories/walking_composable_pair.yaml b/database/data/categories/walking_composable_pair.yaml
index 026b7935..6fe5a57b 100644
--- a/database/data/categories/walking_composable_pair.yaml
+++ b/database/data/categories/walking_composable_pair.yaml
@@ -48,7 +48,4 @@ special_objects:
products:
description: infimum taken in $\{0 < 1 < 2\}$
-special_morphisms:
- isomorphisms:
- description: the three identities
- proof: This is trivial.
+special_morphisms: {}
diff --git a/database/data/categories/walking_coreflexive_pair.yaml b/database/data/categories/walking_coreflexive_pair.yaml
index 777f7be3..2d335248 100644
--- a/database/data/categories/walking_coreflexive_pair.yaml
+++ b/database/data/categories/walking_coreflexive_pair.yaml
@@ -85,9 +85,6 @@ special_objects:
description: $[1]$
special_morphisms:
- isomorphisms:
- description: the two identities
- proof: This is obvious.
monomorphisms:
description: the identities and $i$, $j$
proof: Since $pi = \id$, but $ip \neq \id$, we conclude that $i$ is a monomorphism, but $p$ is not. Likewise, $j$ is a monomorphism. Since $p$ is not a monomorphism, $ip$ and $jp$ are also no monomorphisms.
diff --git a/database/data/categories/walking_fork.yaml b/database/data/categories/walking_fork.yaml
index f5d44606..362188c5 100644
--- a/database/data/categories/walking_fork.yaml
+++ b/database/data/categories/walking_fork.yaml
@@ -68,9 +68,6 @@ special_objects:
description: $0$
special_morphisms:
- isomorphisms:
- description: the three identities
- proof: This is trivial.
epimorphisms:
description: the identities and $f,g$
proof: This is easily checked.
diff --git a/database/data/categories/walking_morphism.yaml b/database/data/categories/walking_morphism.yaml
index 05c5fdd6..1eb68c2e 100644
--- a/database/data/categories/walking_morphism.yaml
+++ b/database/data/categories/walking_morphism.yaml
@@ -53,7 +53,4 @@ special_objects:
products:
description: $0 \times x = 0$, $1 \times x = x$
-special_morphisms:
- isomorphisms:
- description: the two identities
- proof: This is trivial.
+special_morphisms: {}
diff --git a/database/data/categories/walking_pair.yaml b/database/data/categories/walking_pair.yaml
index 7df4c306..bb8c929e 100644
--- a/database/data/categories/walking_pair.yaml
+++ b/database/data/categories/walking_pair.yaml
@@ -50,7 +50,4 @@ unsatisfied_properties:
special_objects: {}
-special_morphisms:
- isomorphisms:
- description: the two identities
- proof: This is trivial.
+special_morphisms: {}
diff --git a/database/data/categories/walking_span.yaml b/database/data/categories/walking_span.yaml
index 265ec318..424548f4 100644
--- a/database/data/categories/walking_span.yaml
+++ b/database/data/categories/walking_span.yaml
@@ -50,7 +50,4 @@ special_objects:
products:
description: '[binary case] $1 \times 2 = 0$, $x \times x = x$, $0 \times x = 0$'
-special_morphisms:
- isomorphisms:
- description: the three identities
- proof: This is trivial.
+special_morphisms: {}
diff --git a/database/data/categories/walking_splitting.yaml b/database/data/categories/walking_splitting.yaml
index eaca453e..0be80008 100644
--- a/database/data/categories/walking_splitting.yaml
+++ b/database/data/categories/walking_splitting.yaml
@@ -64,9 +64,6 @@ special_objects:
description: $0$
special_morphisms:
- isomorphisms:
- description: the two identities
- proof: This is obvious.
monomorphisms:
description: the identities and $i$
proof: The morphism $i$ is even a split monomorphism. The morphism $p$ is not a monomorphism since $p \circ \id_1 = p \circ ip$. The morphism $ip$ is not a monomorphism since it would imply that $p$ is a monomorphism.
diff --git a/database/data/special-morphism-rules.yaml b/database/data/special-morphism-rules.yaml
index 0c72983f..b65d572a 100644
--- a/database/data/special-morphism-rules.yaml
+++ b/database/data/special-morphism-rules.yaml
@@ -3,6 +3,11 @@
description: every morphism
proof: The category is a groupoid.
+- property: gaunt
+ type: isomorphisms
+ description: only the identities
+ proof: The category is gaunt.
+
- property: thin
type: monomorphisms
description: every morphism
@@ -57,3 +62,13 @@
type: regular epimorphisms
description: same as epimorphisms
proof: The category is epi-regular.
+
+- property: regular-subobject-trivial
+ type: regular monomorphisms
+ description: same as isomorphisms
+ proof: The category is regular-subobject-trivial.
+
+- property: regular-quotient-trivial
+ type: regular epimorphisms
+ description: same as isomorphisms
+ proof: The category is regular-quotient-trivial.
From 8433eb942a6be8d75681d11fa7d2d4cce4441320 Mon Sep 17 00:00:00 2001
From: Script Raccoon
Date: Tue, 4 Aug 2026 15:22:02 +0200
Subject: [PATCH 2/8] add extremal monos and epis
---
.../morphism-implications/mono-epi-iso.yaml | 82 +++++++++++++++----
.../extremal epimorphism.yaml | 15 ++++
.../extremal monomorphism.yaml | 15 ++++
.../strong epimorphism.yaml | 3 +
.../strong monomorphism.yaml | 3 +
5 files changed, 103 insertions(+), 15 deletions(-)
create mode 100644 database/data/morphism-properties/extremal epimorphism.yaml
create mode 100644 database/data/morphism-properties/extremal monomorphism.yaml
diff --git a/database/data/morphism-implications/mono-epi-iso.yaml b/database/data/morphism-implications/mono-epi-iso.yaml
index ec2e03a3..bd5f893c 100644
--- a/database/data/morphism-implications/mono-epi-iso.yaml
+++ b/database/data/morphism-implications/mono-epi-iso.yaml
@@ -15,6 +15,17 @@
proof: 'Let $f : A \to B$ be a split monomorphism, and choose a morphism $g : B \to A$ with $g \circ f = \id_A$. Then it is easy to check that $f$ is an equalizer of $\id_B, f \circ g : B \rightrightarrows B$.'
is_equivalence: false
+- id: split_mono_epi_is_iso
+ # This implication follows strictly from the others, but we add it
+ # because the other proofs use it and also to prevent long chains.
+ assumptions:
+ - split monomorphism
+ - epimorphism
+ conclusions:
+ - isomorphism
+ proof: 'Assume that $f : A \to B$ is a split monomorphism, and choose a morphism $g : B \to A$ with $g \circ f = \id_A$. Then $f \circ g \circ f = f = \id_B \circ f$. Thus, if $f$ is also an epimorphism, we conclude $f \circ g = \id_B$, showing that $f$ is an isomorphism with inverse $g$.'
+ is_equivalence: false
+
- id: mono_is_iso
assumptions:
- monomorphism
@@ -146,39 +157,80 @@
where $e$ is an epimorphism and $m$ is a strict monomorphism. We need to show that $D \to B$ factors through $m$. It suffices to show that it equalizes all pairs $B \rightrightarrows T$ that are equalized by $m$. Since $e$ is an epimorphism, it suffices to check this for the composite $C \to D \to B$. This is equal to $C \to A \to B$, which factors through $m$ and hence equalizes the pair.
is_equivalence: false
-- id: strong_monos_are_regular_in_coregular_category
+- id: extremal_mono_is_mono
+ assumptions:
+ - extremal monomorphism
+ conclusions:
+ - monomorphism
+ proof: This holds by definition.
+ is_equivalence: false
+
+- id: strong_mono_is_extremal
assumptions:
- strong monomorphism
+ conclusions:
+ - extremal monomorphism
+ proof: >-
+ Assume that $m : A \to B$ is a strong monomorphism that factors as $m = g \circ e$, where $e : A \to C$ is an epimorphism and $g : C \to B$ is any morphism. Then the commutative diagram
+ $$\begin{CD} A @>e>> C \\ @V{\id_A}VV @VV{g}V \\ A @>>m> B \end{CD}$$
+ can be filled with a morphism $h : C \to A$. In particular, $h \circ e = \id_A$. Thus, $e$ is an epimorphism and a split monomorphism, hence an isomorphism.
+ is_equivalence: false
+
+- id: extremal_mono_epi_is_iso
+ assumptions:
+ - extremal monomorphism
+ - epimorphism
+ conclusions:
+ - isomorphism
+ proof: This is obvious.
+ is_equivalence: false
+
+- id: extremal_monos_are_regular_in_coregular_category
+ assumptions:
+ - extremal monomorphism
mapped_assumptions:
category:
- coregular
conclusions:
- regular monomorphism
- proof: >-
- Let $m : A \to B$ be a strong monomorphism in a coregular category. We may factor it as $m = i \circ e$, where $i : C \to B$ is a regular monomorphism and $e : A \to C$ is an epimorphism. The orthogonality condition applied to the diagram
- $$\begin{CD} A @>e>> C \\ @V{\id_A}VV @VV{i}V \\ A @>>m> B \end{CD}$$
- shows that $e$ is a split monomorphism, hence an isomorphism. But then $m = i \circ e$ is a regular monomorphism as well.
+ proof: 'Let $m : A \to B$ be an extremal monomorphism in a coregular category. By coregularity, we may factor it as $m = i \circ e$, where $i : C \to B$ is a regular monomorphism and $e : A \to C$ is an epimorphism. Since $m$ is an extremal monomorphism, $e$ is an isomorphism. Therefore, $m \cong i$ is a regular monomorphism.'
is_equivalence: false
-- id: strong_monos_are_no_epis
+- id: extremal_mono_strong_criterion
assumptions:
- - strong monomorphism
- - epimorphism
+ - extremal monomorphism
+ mapped_assumptions:
+ category:
+ - pushouts
conclusions:
- - isomorphism
+ - strong monomorphism
proof: >-
- Assume that $m : A \to B$ is a strong monomorphism which is also an epimorphism. Then we apply the orthogonality condition to
- $$\begin{CD} A @>m>> B \\ @V{\id_A}VV @VV{\id_B}V \\ A @>>m> B \end{CD}$$
- to conclude that $m$ is a split epimorphism, and hence an isomorphism.
+ Let $m : A \to B$ be an extremal monomorphism and consider a diagram
+ $$\begin{CD} C @>{e}>> D \\ @V{f}VV @VV{g}V \\ A @>>{m}> B \end{CD}$$
+ in which $e : C \to D$ is an epimorphism. Choose a pushout
+ $$\begin{CD} C @>{e}>> D \\ @V{f}VV @VV{u}V \\ A @>>{v}> P. \end{CD}$$
+ Here, $v$ is an epimorphism since $e$ is an epimorphism. Moreover, by the universal property of the pushout, there is a unique morphism $h : P \to B$ such that $h \circ v = m$ and $h \circ u = g$. Since $m$ is an extremal monomorphism, $v$ is an isomorphism. Then $v^{-1} \circ u : D \to A$ is the required filling of the first diagram, since
+ $$v^{-1} \circ u \circ e = v^{-1} \circ v \circ f = f.$$
+ is_equivalence: false
+
+- id: extremal_mono_balanced
+ assumptions:
+ - monomorphism
+ mapped_assumptions:
+ category:
+ - balanced
+ conclusions:
+ - extremal monomorphism
+ proof: Assume $m$ is a monomorphism that factors as $m = g \circ e$, where $e$ is an epimorphism. But then $e$ is also a monomorphism, and since the category is balanced, $e$ must be an isomorphism.
is_equivalence: false
-- id: strong_monos_collapse
+- id: every_mono_strong_criterion
assumptions:
- monomorphism
mapped_assumptions:
category:
- - quotient-trivial
+ - epi-regular
conclusions:
- strong monomorphism
- proof: This is because any morphism is right orthogonal to any isomorphism.
+ proof: Any monomorphism is right orthogonal to any regular epimorphism because regular epimorphisms are strong (by combining this result and this result).
is_equivalence: false
diff --git a/database/data/morphism-properties/extremal epimorphism.yaml b/database/data/morphism-properties/extremal epimorphism.yaml
new file mode 100644
index 00000000..1aa7fbfa
--- /dev/null
+++ b/database/data/morphism-properties/extremal epimorphism.yaml
@@ -0,0 +1,15 @@
+id: extremal epimorphism
+relation: is an
+description: >-
+ A morphism $e : A \to B$ is an extremal epimorphism if it is a epimorphism and whenever $e = m \circ g$ is a factorization in which $m$ is a monomorphism, then $m$ is an isomorphism. The condition that $e$ is an epimorphism follows from the factorization property when the category has equalizers, but in general, we need to explicitly demand it.
+
+ By the implications below, extremal epimorphisms are closed related to strong epimorphisms: every strong epimorphism is extremal, and the converse holds when pullbacks exist.
+nlab_link: https://ncatlab.org/nlab/show/extremal+epimorphism
+invariant_under_equivalences: true
+dual: extremal monomorphism
+related:
+ - strong epimorphism
+ - epimorphism
+
+tags:
+ - types of epimorphisms
diff --git a/database/data/morphism-properties/extremal monomorphism.yaml b/database/data/morphism-properties/extremal monomorphism.yaml
new file mode 100644
index 00000000..a229bc8d
--- /dev/null
+++ b/database/data/morphism-properties/extremal monomorphism.yaml
@@ -0,0 +1,15 @@
+id: extremal monomorphism
+relation: is an
+description: >-
+ A morphism $m : A \to B$ is an extremal monomorphism if it is a monomorphism and whenever $m = g \circ e$ is a factorization in which $e$ is an epimorphism, then $e$ is an isomorphism. The condition that $m$ is a monomorphism follows from the factorization property when the category has coequalizers, but in general, we need to explicitly demand it.
+
+ By the implications below, extremal monomorphisms are closed related to strong monomorphisms: every strong monomorphism is extremal, and the converse holds when pushouts exist.
+nlab_link: https://ncatlab.org/nlab/show/extremal+monomorphism
+invariant_under_equivalences: true
+dual: extremal epimorphism
+related:
+ - strong monomorphism
+ - monomorphism
+
+tags:
+ - types of monomorphisms
diff --git a/database/data/morphism-properties/strong epimorphism.yaml b/database/data/morphism-properties/strong epimorphism.yaml
index 94b80d57..72beead0 100644
--- a/database/data/morphism-properties/strong epimorphism.yaml
+++ b/database/data/morphism-properties/strong epimorphism.yaml
@@ -6,11 +6,14 @@ description: >-
in which $m : C \to D$ is a monomorphism, there is a unique morphism $B \to C$ such that both triangles commute. Uniqueness is actually for free, and it suffices to demand commutativity of one triangle, as the other one follows.
$$\begin{CD} A @>e>> B \\ @VVV \swarrow @VVV \\ C @>>m> D \end{CD}$$
If the category has equalizers, the orthogonality condition already implies that $e$ is an epimorphism, but in general, we need to demand this.
+
+ By the implications below, strong epimorphisms are closed related to extremal epimorphisms: every strong epimorphism is extremal, and the converse holds when pullbacks exist.
nlab_link: https://ncatlab.org/nlab/show/strong+epimorphism
invariant_under_equivalences: true
dual: strong monomorphism
related:
- strict epimorphism
+ - extremal epimorphism
- epimorphism
tags:
diff --git a/database/data/morphism-properties/strong monomorphism.yaml b/database/data/morphism-properties/strong monomorphism.yaml
index d12800f1..22646378 100644
--- a/database/data/morphism-properties/strong monomorphism.yaml
+++ b/database/data/morphism-properties/strong monomorphism.yaml
@@ -6,11 +6,14 @@ description: >-
in which $e : C \to D$ is an epimorphism, there is a unique morphism $D \to A$ such that both triangles commute. Uniqueness is actually for free, and it suffices to demand commutativity of one triangle, as the other one follows.
$$\begin{CD} C @>e>> D \\ @VVV \swarrow @VVV \\ A @>>m> B \end{CD}$$
If the category has coequalizers, the orthogonality condition already implies that $m$ is a monomorphism, but in general, we need to demand this.
+
+ By the implications below, strong monomorphisms are closed related to extremal monomorphisms: every strong monomorphism is extremal, and the converse holds when pushouts exist.
nlab_link: https://ncatlab.org/nlab/show/strong+monomorphism
invariant_under_equivalences: true
dual: strong epimorphism
related:
- strict monomorphism
+ - extremal monomorphism
- monomorphism
tags:
From d3b15bbab31bb5060802e670ccdb7d7512439ed0 Mon Sep 17 00:00:00 2001
From: Script Raccoon
Date: Wed, 5 Aug 2026 16:22:31 +0200
Subject: [PATCH 3/8] small improvements for morphism properties
- notation for morphisms is $m$
- notation for epimorphisms is $p$
- add more related properties
- fix some grammar
- add small remarks in the definitions
- remove redundant implications for morphisms
---
.../data/categories/walking_splitting.yaml | 2 +-
.../morphism-implications/mono-epi-iso.yaml | 41 +++++--------------
.../effective epimorphism.yaml | 2 +-
.../data/morphism-properties/epimorphism.yaml | 2 +-
.../extremal epimorphism.yaml | 5 ++-
.../extremal monomorphism.yaml | 3 +-
.../data/morphism-properties/isomorphism.yaml | 2 +
.../morphism-properties/monomorphism.yaml | 2 +-
.../normal epimorphism.yaml | 2 +-
.../normal monomorphism.yaml | 2 +-
.../regular epimorphism.yaml | 3 +-
.../regular monomorphism.yaml | 3 +-
.../split epimorphism.yaml | 3 +-
.../split monomorphism.yaml | 3 +-
.../strict epimorphism.yaml | 2 +-
.../strict monomorphism.yaml | 2 +-
.../strong epimorphism.yaml | 6 ++-
.../strong monomorphism.yaml | 4 +-
18 files changed, 40 insertions(+), 49 deletions(-)
diff --git a/database/data/categories/walking_splitting.yaml b/database/data/categories/walking_splitting.yaml
index 0be80008..5b26c59e 100644
--- a/database/data/categories/walking_splitting.yaml
+++ b/database/data/categories/walking_splitting.yaml
@@ -69,4 +69,4 @@ special_morphisms:
proof: The morphism $i$ is even a split monomorphism. The morphism $p$ is not a monomorphism since $p \circ \id_1 = p \circ ip$. The morphism $ip$ is not a monomorphism since it would imply that $p$ is a monomorphism.
epimorphisms:
description: the identities and $p$
- proof: The morphism $p$ is even a split monomorphism. The morphism $i$ is not an epimorphism since $\id_1 \circ i = ip \circ i$. The morphism $ip$ is not a epimorphism since it would imply that $i$ is an epimorphism.
+ proof: The morphism $p$ is even a split monomorphism. The morphism $i$ is not an epimorphism since $\id_1 \circ i = ip \circ i$. The morphism $ip$ is not an epimorphism since it would imply that $i$ is an epimorphism.
diff --git a/database/data/morphism-implications/mono-epi-iso.yaml b/database/data/morphism-implications/mono-epi-iso.yaml
index bd5f893c..fdd418f3 100644
--- a/database/data/morphism-implications/mono-epi-iso.yaml
+++ b/database/data/morphism-implications/mono-epi-iso.yaml
@@ -12,7 +12,7 @@
- split monomorphism
conclusions:
- regular monomorphism
- proof: 'Let $f : A \to B$ be a split monomorphism, and choose a morphism $g : B \to A$ with $g \circ f = \id_A$. Then it is easy to check that $f$ is an equalizer of $\id_B, f \circ g : B \rightrightarrows B$.'
+ proof: 'Let $m : A \to B$ be a split monomorphism, and choose a morphism $e : B \to A$ with $e \circ m = \id_A$. Then it is easy to check that $m$ is an equalizer of $\id_B$ and the idempotent morphism $m \circ e : B \to B$.'
is_equivalence: false
- id: split_mono_epi_is_iso
@@ -23,7 +23,7 @@
- epimorphism
conclusions:
- isomorphism
- proof: 'Assume that $f : A \to B$ is a split monomorphism, and choose a morphism $g : B \to A$ with $g \circ f = \id_A$. Then $f \circ g \circ f = f = \id_B \circ f$. Thus, if $f$ is also an epimorphism, we conclude $f \circ g = \id_B$, showing that $f$ is an isomorphism with inverse $g$.'
+ proof: 'Assume that $m : A \to B$ is a split monomorphism, and choose a morphism $e : B \to A$ with $e \circ m = \id_A$. Then $m \circ e \circ m = m = {\id_B} \circ m$. Thus, if $m$ is also an epimorphism, we conclude $m \circ e = \id_B$, showing that $m$ is an isomorphism with inverse $e$.'
is_equivalence: false
- id: mono_is_iso
@@ -49,14 +49,6 @@
proof: This holds by definition of a balanced category.
is_equivalence: false
-- id: regular_mono_is_mono
- assumptions:
- - regular monomorphism
- conclusions:
- - monomorphism
- proof: This is an immediate consequence of the definition of an equalizer.
- is_equivalence: false
-
- id: mono-regular_def
assumptions:
- monomorphism
@@ -68,20 +60,12 @@
proof: This is the definition of a mono-regular category.
is_equivalence: false
-- id: strict_mono_is_mono
- assumptions:
- - strict monomorphism
- conclusions:
- - monomorphism
- proof: This is trivial.
- is_equivalence: false
-
- id: regular_mono_is_strict
assumptions:
- regular monomorphism
conclusions:
- strict monomorphism
- proof: 'Let $m : A \to B$ be the equalizer of $g,h : B \rightrightarrows C$. In particular, $m$ is a monomorphism. Let $t : T \to B$ be a monomorphism which equalizes all pairs that are equalized by $m$. In particular, $t$ equalizes $g,h$, i.e. $g \circ t = h \circ t$. By definition of an equalizer, this means that $t$ factors through $m$.'
+ proof: 'Let $m : A \to B$ be the equalizer of $f,g : B \rightrightarrows C$. In particular, $m$ is a monomorphism. Let $t : T \to B$ be a morphism that equalizes all pairs that are equalized by $m$. In particular, $t$ equalizes $f,g$, i.e. $f \circ t = g \circ t$. By definition of an equalizer, this means that $t$ factors through $m$.'
is_equivalence: false
- id: effective_mono_implies_regular_mono
@@ -102,9 +86,9 @@
- effective monomorphism
proof: >-
Let $m : A \to B$ be a strict monomorphism in a category with pushouts. In particular, the pushout $B \sqcup_A B$ exists (and actually, we only need this pushout) with coprojections $i_1,i_2 : B \rightrightarrows B \sqcup_A B$ satisfying $i_1 \circ m = i_2 \circ m$.
- To show that $m$ is the equalizer of $i_1,i_2$, let $t : T \to B$ be a morphism with $i_1 \circ t = i_2 \circ t$. If $g,h : B \rightrightarrows C$ is any parallel pair with $g \circ m = h \circ m$, it induces a morphism $(g;h) : B \sqcup_A B \to C$ with $(g;h) \circ i_1 = g$ and $(g;h) \circ i_2 = h$.
+ To show that $m$ is the equalizer of $i_1,i_2$, let $t : T \to B$ be a morphism with $i_1 \circ t = i_2 \circ t$. If $f,g : B \rightrightarrows C$ is any parallel pair with $f \circ m = g \circ m$, it induces a morphism $(f;g) : B \sqcup_A B \to C$ with $(f;g) \circ i_1 = f$ and $(f;g) \circ i_2 = g$.
By composing these equations with $t$, we get
- $$g \circ t = (g;h) \circ i_1 \circ t = (g;h) \circ i_2 \circ t = h \circ t.$$
+ $$f \circ t = (f;g) \circ i_1 \circ t = (f;g) \circ i_2 \circ t = g \circ t.$$
Thus, $t$ equalizes every parallel pair that is equalized by $m$. Since $m$ is a strict monomorphism, $t$ factors through $m$.
is_equivalence: false
@@ -135,15 +119,7 @@
- preadditive
conclusions:
- normal monomorphism
- proof: 'The equalizer of $g,h : B \rightrightarrows C$ is the kernel of $g-h : B \to C$.'
- is_equivalence: false
-
-- id: strong_mono_is_mono
- assumptions:
- - strong monomorphism
- conclusions:
- - monomorphism
- proof: This holds by definition.
+ proof: 'The equalizer of $f,g : B \rightrightarrows C$ is the kernel of $f-g : B \to C$.'
is_equivalence: false
- id: strict_mono_is_strong
@@ -193,7 +169,10 @@
- coregular
conclusions:
- regular monomorphism
- proof: 'Let $m : A \to B$ be an extremal monomorphism in a coregular category. By coregularity, we may factor it as $m = i \circ e$, where $i : C \to B$ is a regular monomorphism and $e : A \to C$ is an epimorphism. Since $m$ is an extremal monomorphism, $e$ is an isomorphism. Therefore, $m \cong i$ is a regular monomorphism.'
+ proof: >-
+ Let $m : A \to B$ be an extremal monomorphism in a coregular category. By coregularity, we may factor it as $m = i \circ e$, where $i : C \to B$ is a regular monomorphism and $e : A \to C$ is an epimorphism. Since $m$ is an extremal monomorphism, $e$ is an isomorphism. Therefore, $m \cong i$ is a regular monomorphism.
+
+ The proof shows that the assumption of coregularity can be relaxed to the existence of (Epi, RegMono)-factorizations.
is_equivalence: false
- id: extremal_mono_strong_criterion
diff --git a/database/data/morphism-properties/effective epimorphism.yaml b/database/data/morphism-properties/effective epimorphism.yaml
index 2726981f..accaf8bb 100644
--- a/database/data/morphism-properties/effective epimorphism.yaml
+++ b/database/data/morphism-properties/effective epimorphism.yaml
@@ -1,7 +1,7 @@
id: effective epimorphism
relation: is an
description: >-
- A morphism $p : A \to B$ is an effective epimorphism if the pullback $A \times_B A$ exists and $p$ is the coequalizer of the two projections $p_1,p_2 : A \times_B A \rightrightarrows A$.
+ A morphism $e : A \to B$ is an effective epimorphism if the pullback $A \times_B A$ exists and $e$ is the coequalizer of the two projections $p_1,p_2 : A \times_B A \rightrightarrows A$.
By the implications below, effective epimorphisms are closely related to strict and regular epimorphisms. Every effective epimorphism is regular and hence strict, and in a category with pullbacks, every strict epimorphism is effective. Thus, in categories with pullbacks, all three mentioned classes of epimorphisms coincide.
nlab_link: https://ncatlab.org/nlab/show/effective+epimorphism
diff --git a/database/data/morphism-properties/epimorphism.yaml b/database/data/morphism-properties/epimorphism.yaml
index a03edcc3..e9fb934b 100644
--- a/database/data/morphism-properties/epimorphism.yaml
+++ b/database/data/morphism-properties/epimorphism.yaml
@@ -1,6 +1,6 @@
id: epimorphism
relation: is an
-description: 'A morphism $f : A \to B$ is an epimorphism if it is right-cancellative, i.e. if $g \circ f = h \circ f$ for two morphisms $g,h : B \rightrightarrows T$, then $g = h$. In many concrete categories appearing in practice, these are are a bit harder to understand than monomorphisms; in particular, epimorphisms usually are not to be confused with surjective structure-preserving maps.'
+description: 'A morphism $e : A \to B$ is an epimorphism if it is right-cancellative, i.e. if $f \circ e = g \circ e$ for two morphisms $f,g : B \rightrightarrows T$, then $f = g$. In many concrete categories appearing in practice, these are are a bit harder to understand than monomorphisms; in particular, epimorphisms usually are not to be confused with surjective structure-preserving maps. Stronger types of epimorphisms (such as regular epimorphisms) are often much better understood.'
nlab_link: https://ncatlab.org/nlab/show/epimorphism
invariant_under_equivalences: true
dual: monomorphism
diff --git a/database/data/morphism-properties/extremal epimorphism.yaml b/database/data/morphism-properties/extremal epimorphism.yaml
index 1aa7fbfa..a059e2c7 100644
--- a/database/data/morphism-properties/extremal epimorphism.yaml
+++ b/database/data/morphism-properties/extremal epimorphism.yaml
@@ -1,15 +1,16 @@
id: extremal epimorphism
relation: is an
description: >-
- A morphism $e : A \to B$ is an extremal epimorphism if it is a epimorphism and whenever $e = m \circ g$ is a factorization in which $m$ is a monomorphism, then $m$ is an isomorphism. The condition that $e$ is an epimorphism follows from the factorization property when the category has equalizers, but in general, we need to explicitly demand it.
+ A morphism $e : A \to B$ is an extremal epimorphism if it is an epimorphism and whenever $e = m \circ g$ is a factorization in which $m$ is a monomorphism, then $m$ is an isomorphism. The condition that $e$ is an epimorphism follows from the factorization property when the category has equalizers, but in general, we need to explicitly demand it.
By the implications below, extremal epimorphisms are closed related to strong epimorphisms: every strong epimorphism is extremal, and the converse holds when pullbacks exist.
nlab_link: https://ncatlab.org/nlab/show/extremal+epimorphism
invariant_under_equivalences: true
dual: extremal monomorphism
related:
- - strong epimorphism
- epimorphism
+ - strong epimorphism
+ - regular epimorphism
tags:
- types of epimorphisms
diff --git a/database/data/morphism-properties/extremal monomorphism.yaml b/database/data/morphism-properties/extremal monomorphism.yaml
index a229bc8d..3ffe101a 100644
--- a/database/data/morphism-properties/extremal monomorphism.yaml
+++ b/database/data/morphism-properties/extremal monomorphism.yaml
@@ -8,8 +8,9 @@ nlab_link: https://ncatlab.org/nlab/show/extremal+monomorphism
invariant_under_equivalences: true
dual: extremal epimorphism
related:
- - strong monomorphism
- monomorphism
+ - strong monomorphism
+ - regular monomorphism
tags:
- types of monomorphisms
diff --git a/database/data/morphism-properties/isomorphism.yaml b/database/data/morphism-properties/isomorphism.yaml
index ec0bb647..58cad247 100644
--- a/database/data/morphism-properties/isomorphism.yaml
+++ b/database/data/morphism-properties/isomorphism.yaml
@@ -7,6 +7,8 @@ dual: isomorphism
related:
- monomorphism
- epimorphism
+ - split monomorphism
+ - split epimorphism
tags:
- invertibility
diff --git a/database/data/morphism-properties/monomorphism.yaml b/database/data/morphism-properties/monomorphism.yaml
index d9340302..7eb1cd30 100644
--- a/database/data/morphism-properties/monomorphism.yaml
+++ b/database/data/morphism-properties/monomorphism.yaml
@@ -1,6 +1,6 @@
id: monomorphism
relation: is a
-description: 'A morphism $f : A \to B$ is a monomorphism if it is left-cancellative, i.e. if $f \circ g = f \circ h$ for two morphisms $g,h : T \rightrightarrows A$, then $g = h$. In many concrete categories appearing in practice, these are injective structure-preserving maps.'
+description: 'A morphism $m : A \to B$ is a monomorphism if it is left-cancellative, i.e. if $m \circ f = m \circ g$ for two morphisms $f,g : T \rightrightarrows A$, then $f = g$. In many concrete categories appearing in practice, these are injective structure-preserving maps.'
nlab_link: https://ncatlab.org/nlab/show/monomorphism
invariant_under_equivalences: true
dual: epimorphism
diff --git a/database/data/morphism-properties/normal epimorphism.yaml b/database/data/morphism-properties/normal epimorphism.yaml
index 4c012743..7af486b9 100644
--- a/database/data/morphism-properties/normal epimorphism.yaml
+++ b/database/data/morphism-properties/normal epimorphism.yaml
@@ -1,6 +1,6 @@
id: normal epimorphism
relation: is a
-description: 'A morphism $f : A \to B$ in a category with zero morphisms is a normal epimorphism if it is the cokernel of a morphism $g : C \to A$, i.e. the coequalizer of $g$ and the zero morphism $0 : C \to A$.'
+description: 'A morphism $e : A \to B$ in a category with zero morphisms is a normal epimorphism if it is the cokernel of a morphism $f : C \to A$, i.e. the coequalizer of $f$ and the zero morphism $0_{C,A} : C \to A$.'
nlab_link: https://ncatlab.org/nlab/show/normal+epimorphism
invariant_under_equivalences: true
dual: normal monomorphism
diff --git a/database/data/morphism-properties/normal monomorphism.yaml b/database/data/morphism-properties/normal monomorphism.yaml
index 77d421ff..ee55c46e 100644
--- a/database/data/morphism-properties/normal monomorphism.yaml
+++ b/database/data/morphism-properties/normal monomorphism.yaml
@@ -1,6 +1,6 @@
id: normal monomorphism
relation: is a
-description: 'A morphism $f : A \to B$ in a category with zero morphisms is a normal monomorphism if it is the kernel of a morphism $g : B \to C$, i.e. the equalizer of $g$ and the zero morphism $0 : B \to C$.'
+description: 'A morphism $m : A \to B$ in a category with zero morphisms is a normal monomorphism if it is the kernel of a morphism $f : B \to C$, i.e. the equalizer of $f$ and the zero morphism $0_{B,C} : B \to C$.'
nlab_link: https://ncatlab.org/nlab/show/normal+monomorphism
invariant_under_equivalences: true
dual: normal epimorphism
diff --git a/database/data/morphism-properties/regular epimorphism.yaml b/database/data/morphism-properties/regular epimorphism.yaml
index 46069ac4..8b133b85 100644
--- a/database/data/morphism-properties/regular epimorphism.yaml
+++ b/database/data/morphism-properties/regular epimorphism.yaml
@@ -1,6 +1,6 @@
id: regular epimorphism
relation: is a
-description: 'A morphism $f : A \to B$ is a regular epimorphism if it is the coequalizer of a pair of morphisms $g,h : C \rightrightarrows A$. In many categories appearing in practice, this is the same as a quotient.'
+description: 'A morphism $e : A \to B$ is a regular epimorphism if it is the coequalizer of a pair of morphisms $f,g : C \rightrightarrows A$. In many categories appearing in practice, this is the same as a quotient. This property is strongly related to other types of epimorphisms by the implications below; see also this overview.'
nlab_link: https://ncatlab.org/nlab/show/regular+epimorphism
invariant_under_equivalences: true
dual: regular monomorphism
@@ -9,6 +9,7 @@ related:
- effective epimorphism
- strict epimorphism
- normal epimorphism
+ - extremal epimorphism
tags:
- types of epimorphisms
diff --git a/database/data/morphism-properties/regular monomorphism.yaml b/database/data/morphism-properties/regular monomorphism.yaml
index 4d7834bc..9ec53f56 100644
--- a/database/data/morphism-properties/regular monomorphism.yaml
+++ b/database/data/morphism-properties/regular monomorphism.yaml
@@ -1,6 +1,6 @@
id: regular monomorphism
relation: is a
-description: 'A morphism $f : A \to B$ is a regular monomorphism if it is the equalizer of a pair of morphisms $g,h : B \rightrightarrows C$. In many categories appearing in practice, this is the same as an embedding.'
+description: 'A morphism $m : A \to B$ is a regular monomorphism if it is the equalizer of a pair of morphisms $f,g : B \rightrightarrows C$. In many categories appearing in practice, this is the same as an embedding. This property is strongly related to other types of monomorphisms by the implications below; see also this overview.'
nlab_link: https://ncatlab.org/nlab/show/regular+monomorphism
invariant_under_equivalences: true
dual: regular epimorphism
@@ -9,6 +9,7 @@ related:
- effective monomorphism
- strict monomorphism
- normal monomorphism
+ - extremal monomorphism
tags:
- types of monomorphisms
diff --git a/database/data/morphism-properties/split epimorphism.yaml b/database/data/morphism-properties/split epimorphism.yaml
index 8f25c30a..71867c70 100644
--- a/database/data/morphism-properties/split epimorphism.yaml
+++ b/database/data/morphism-properties/split epimorphism.yaml
@@ -1,11 +1,12 @@
id: split epimorphism
relation: is a
-description: 'A morphism $f : A \to B$ is a split epimorphism if there is a morphism $g : B \to A$ with $f \circ g = \id_B$.'
+description: 'A morphism $e : A \to B$ is a split epimorphism if there is a morphism $m : B \to A$ with $e \circ m = \id_B$.'
nlab_link: https://ncatlab.org/nlab/show/split+epimorphism
invariant_under_equivalences: true
dual: split monomorphism
related:
- epimorphism
+ - isomorphism
tags:
- types of epimorphisms
diff --git a/database/data/morphism-properties/split monomorphism.yaml b/database/data/morphism-properties/split monomorphism.yaml
index 5c63ebd9..914ef0ff 100644
--- a/database/data/morphism-properties/split monomorphism.yaml
+++ b/database/data/morphism-properties/split monomorphism.yaml
@@ -1,11 +1,12 @@
id: split monomorphism
relation: is a
-description: 'A morphism $f : A \to B$ is a split monomorphism if there is a morphism $g : B \to A$ with $g \circ f = \id_A$.'
+description: 'A morphism $m : A \to B$ is a split monomorphism if there is a morphism $e : B \to A$ with $e \circ m = \id_A$.'
nlab_link: https://ncatlab.org/nlab/show/split+monomorphism
invariant_under_equivalences: true
dual: split epimorphism
related:
- monomorphism
+ - isomorphism
tags:
- types of monomorphisms
diff --git a/database/data/morphism-properties/strict epimorphism.yaml b/database/data/morphism-properties/strict epimorphism.yaml
index 25162d5c..613f9cb0 100644
--- a/database/data/morphism-properties/strict epimorphism.yaml
+++ b/database/data/morphism-properties/strict epimorphism.yaml
@@ -1,7 +1,7 @@
id: strict epimorphism
relation: is a
description: >-
- A morphism $p : A \to B$ is a strict epimorphism if it is the joint coequalizer of all pairs of morphisms $g,h : C \rightrightarrows A$ that it coequalizes. That is, $p$ is an epimorphism, and a morphism $t : A \to T$ factors through $p$ if we have $t \circ g = t \circ h$ for all morphisms $g,h : C \rightrightarrows A$ that satisfy $p \circ g = p \circ h$. That is, the minimal requirement for a morphism to factor through $p$ is actually sufficient.
+ A morphism $e : A \to B$ is a strict epimorphism if it is the joint coequalizer of all pairs of morphisms $f,g : C \rightrightarrows A$ that it coequalizes. That is, $e$ is an epimorphism, and a morphism $t : A \to T$ factors through $e$ if we have $t \circ f = t \circ g$ for all morphisms $f,g : C \rightrightarrows A$ that satisfy $e \circ f = e \circ g$. That is, the minimal requirement for a morphism to factor through $e$ is actually sufficient.
By the implications below, strict epimorphisms are closely related to effective and regular epimorphisms. Every effective epimorphism is regular and hence strict, and in a category with pullbacks, every strict epimorphism is effective. Thus, in categories with pullbacks, all three mentioned classes of epimorphisms coincide.
nlab_link: https://ncatlab.org/nlab/show/strict+epimorphism
diff --git a/database/data/morphism-properties/strict monomorphism.yaml b/database/data/morphism-properties/strict monomorphism.yaml
index df2623ec..bf30731c 100644
--- a/database/data/morphism-properties/strict monomorphism.yaml
+++ b/database/data/morphism-properties/strict monomorphism.yaml
@@ -1,7 +1,7 @@
id: strict monomorphism
relation: is a
description: >-
- A morphism $m : A \to B$ is a strict monomorphism if it is the joint equalizer of all pairs of morphisms $g,h : B \rightrightarrows C$ that it equalizes. That is, $m$ is a monomorphism, and a morphism $t : T \to B$ factors through $m$ if we have $g \circ t = h \circ t$ for all morphisms $g,h : B \rightrightarrows C$ that satisfy $g \circ m = h \circ m$. That is, the minimal requirement for a morphism to factor through $m$ is actually sufficient.
+ A morphism $m : A \to B$ is a strict monomorphism if it is the joint equalizer of all pairs of morphisms $f,g : B \rightrightarrows C$ that it equalizes. That is, $m$ is a monomorphism, and a morphism $t : T \to B$ factors through $m$ if we have $f \circ t = g \circ t$ for all morphisms $f,g : B \rightrightarrows C$ that satisfy $f \circ m = g \circ m$. That is, the minimal requirement for a morphism to factor through $m$ is actually sufficient.
By the implications below, strict monomorphisms are closely related to effective and regular monomorphisms. Every effective monomorphism is regular and hence strict, and in a category with pushouts, every strict monomorphism is effective. Thus, in categories with pushouts, all three mentioned classes of monomorphisms coincide.
nlab_link: https://ncatlab.org/nlab/show/strict+monomorphism
diff --git a/database/data/morphism-properties/strong epimorphism.yaml b/database/data/morphism-properties/strong epimorphism.yaml
index 72beead0..41f67e38 100644
--- a/database/data/morphism-properties/strong epimorphism.yaml
+++ b/database/data/morphism-properties/strong epimorphism.yaml
@@ -1,10 +1,12 @@
id: strong epimorphism
relation: is a
description: >-
- A morphism $e : A \to B$ is a strong epimorphism if it is a epimorphism that is left orthogonal to any monomorphism. That is, for every commutative diagram
+ A morphism $e : A \to B$ is a strong epimorphism if it is an epimorphism that is left orthogonal to any monomorphism. That is, for every commutative diagram
$$\begin{CD} A @>e>> B \\ @VVV @VVV \\ C @>>m> D \end{CD}$$
- in which $m : C \to D$ is a monomorphism, there is a unique morphism $B \to C$ such that both triangles commute. Uniqueness is actually for free, and it suffices to demand commutativity of one triangle, as the other one follows.
+ in which $m : C \to D$ is a monomorphism, there is a unique morphism $B \to C$ such that both triangles commute.
$$\begin{CD} A @>e>> B \\ @VVV \swarrow @VVV \\ C @>>m> D \end{CD}$$
+ Uniqueness is actually for free, and it suffices to demand commutativity of one triangle, as the other one follows.
+
If the category has equalizers, the orthogonality condition already implies that $e$ is an epimorphism, but in general, we need to demand this.
By the implications below, strong epimorphisms are closed related to extremal epimorphisms: every strong epimorphism is extremal, and the converse holds when pullbacks exist.
diff --git a/database/data/morphism-properties/strong monomorphism.yaml b/database/data/morphism-properties/strong monomorphism.yaml
index 22646378..565ba9e0 100644
--- a/database/data/morphism-properties/strong monomorphism.yaml
+++ b/database/data/morphism-properties/strong monomorphism.yaml
@@ -3,8 +3,10 @@ relation: is a
description: >-
A morphism $m : A \to B$ is a strong monomorphism if it is a monomorphism that is right orthogonal to any epimorphism. That is, for every commutative diagram
$$\begin{CD} C @>e>> D \\ @VVV @VVV \\ A @>>m> B \end{CD}$$
- in which $e : C \to D$ is an epimorphism, there is a unique morphism $D \to A$ such that both triangles commute. Uniqueness is actually for free, and it suffices to demand commutativity of one triangle, as the other one follows.
+ in which $e : C \to D$ is an epimorphism, there is a unique morphism $D \to A$ such that both triangles commute.
$$\begin{CD} C @>e>> D \\ @VVV \swarrow @VVV \\ A @>>m> B \end{CD}$$
+ Uniqueness is actually for free, and it suffices to demand commutativity of one triangle, as the other one follows.
+
If the category has coequalizers, the orthogonality condition already implies that $m$ is a monomorphism, but in general, we need to demand this.
By the implications below, strong monomorphisms are closed related to extremal monomorphisms: every strong monomorphism is extremal, and the converse holds when pushouts exist.
From 17445e931cef5dea7269a7dee37f84d0c51054b7 Mon Sep 17 00:00:00 2001
From: Script Raccoon
Date: Wed, 5 Aug 2026 00:03:15 +0200
Subject: [PATCH 4/8] add the forked commutative square category
---
.../categories/forked_commutative_square.yaml | 82 +++++++++++++++++++
.../walking_commutative_square.yaml | 1 +
database/data/categories/walking_fork.yaml | 1 +
database/data/categories/walking_pair.yaml | 1 +
database/data/macros.yaml | 1 +
5 files changed, 86 insertions(+)
create mode 100644 database/data/categories/forked_commutative_square.yaml
diff --git a/database/data/categories/forked_commutative_square.yaml b/database/data/categories/forked_commutative_square.yaml
new file mode 100644
index 00000000..38c6f03e
--- /dev/null
+++ b/database/data/categories/forked_commutative_square.yaml
@@ -0,0 +1,82 @@
+id: forked_commutative_square
+name: forked commutative square
+notation: $\ForkSquare$
+objects: $A,B,C,D,E$
+morphisms: 'The morphisms are generated by $e : A \to B$, $f : A \to C$, $g : B \to D$, $m : C \to D$ and $u,v : D \rightrightarrows E$, subject to the relations $g \circ e = m \circ f$, $u \circ g = v \circ g$, and $u \circ m = v \circ m$. In total, there are $15$ morphisms.'
+description: >-
+ This finite category is generated by the graph
+ $$\begin{array}{ccccc}
+ A & \xrightarrow{\hspace{1em} e \hspace{1em}} & B & & \\
+ \text{\scriptsize $f$}\bigg\downarrow\;\, && \;\,\bigg\downarrow\text{\scriptsize $g$} && \\
+ C & \xrightarrow{\hspace{1em} m \hspace{1em}} & D &
+ \begin{array}{c}
+ \xrightarrow{\hspace{1em} u \hspace{1em}}\\
+ \xrightarrow{\hspace{1em} v \hspace{1em}}
+ \end{array} & E
+ \end{array}$$
+ and the evident relations: the square commutes, and the parallel pair $u,v$ is equalized by both $g$ and $m$. We have added this category to the database solely as an example of an extremal monomorphism (namely $m$) that is not a strong monomorphism. There is probably no common name for this category, but "forked commutative square" seems like a good fit.
+nlab_link: null
+tags:
+ - category theory
+
+related:
+ - walking_fork
+ - walking_commutative_square
+
+satisfied_properties:
+ - property: small
+ proof: This is obvious.
+
+ - property: finite
+ proof: This is obvious.
+
+ - property: skeletal
+ proof: The five objects are clearly pairwise non-isomorphic.
+
+ - property: one-way
+ proof: This is obvious.
+
+ - property: strict initial object
+ proof: Clearly, $A$ is an initial object. Since $\id_A$ is the only morphism with codomain $A$, it is strict.
+
+ - property: generator
+ proof: 'The only parallel pair of distinct morphisms is $u,v : D \rightrightarrows E$. It follows that $D$ is a generator.'
+
+ - property: cogenerator
+ proof: 'The only parallel pair of distinct morphisms is $u,v : D \rightrightarrows E$. It follows that $E$ is a cogenerator.'
+
+ - property: left cancellative
+ proof: 'The only parallel pair of distinct morphisms is $u,v : D \rightrightarrows E$. Thus, it is sufficient to prove that every morphism with domain $E$ is a monomorphism. But there is only one such morphism, namely $\id_E$.'
+
+ - property: regular-subobject-trivial
+ proof: 'The only parallel pair of distinct morphisms is $u,v : D \rightrightarrows E$, so it suffices to prove that they do not have an equalizer. This is proven in the list of unsatisfied properties.'
+ references:
+ - forked_commutative_square_no_equalizers
+
+unsatisfied_properties:
+ - property: semi-strongly connected
+ proof: There is no morphism $B \to C$ and no morphism $C \to B$.
+
+ - property: equalizers
+ proof: 'The morphisms $u,v : D \rightrightarrows E$ do not have an equalizer: the four morphisms with codomain $D$ are $g$, $m$, $g \circ e = m \circ f$, and $\id_D$. But $\id_D$ does not equalize $u,v$. The other three morphisms equalize $u,v$, but they are not universal: $m$ is not universal since $g$ does not factor through it, $g$ is not universal since $m$ does not factor through it, and $g \circ e$ is not universal since $g$ does not factor through it.'
+ label: forked_commutative_square_no_equalizers
+
+ - property: pullbacks
+ proof: 'Any two parallel morphisms with codomain $D$ are equal. It follows that a pullback of the cospan $D \xrightarrow{u} E \xleftarrow{v} D$ would be an equalizer of $u,v : D \rightrightarrows E$, which we know does not exist.'
+ references:
+ - forked_commutative_square_no_equalizers
+
+ - property: extremal generator
+ proof: 'Since both $m$ and $g$ equalize $u,v$, it is easy to see that $D$ is the only generator. But it is not extremal since $e$ induces a bijection $e_* : \Hom(D,A) \to \Hom(D,B)$ (both sets are empty), without $e$ being an isomorphism.'
+
+ - property: extremal cogenerator
+ proof: 'We already saw that $E$ is a cogenerator, and it is also the only one because any cogenerator must admit a morphism from $E$ to be able to distinguish $u,v$. But $E$ is not extremal since $f$ induces a bijection $f^* : \Hom(C,E) \to \Hom(A,E)$ (both sets are singletons), without $f$ being an isomorphism.'
+
+special_objects:
+ initial object:
+ description: $A$
+
+special_morphisms:
+ epimorphisms:
+ description: all morphisms except for the three non-identity morphisms with codomain $D$, namely $g$, $m$, and the diagonal $g \circ e$
+ proof: 'Every one of the three non-identity morphisms with codomain $D$ equalizes $u,v$, and thus cannot be an epimorphism. Conversely, the identity morphisms are of course epimorphisms, and if a morphism does not have codomain $D$, then it is an epimorphism because the only parallel pair of distinct morphisms is $u,v : D \rightrightarrows E$.'
diff --git a/database/data/categories/walking_commutative_square.yaml b/database/data/categories/walking_commutative_square.yaml
index 36cbce01..39504d5c 100644
--- a/database/data/categories/walking_commutative_square.yaml
+++ b/database/data/categories/walking_commutative_square.yaml
@@ -14,6 +14,7 @@ tags:
related:
- walking_fork
- walking_morphism
+ - forked_commutative_square
satisfied_properties:
- property: small
diff --git a/database/data/categories/walking_fork.yaml b/database/data/categories/walking_fork.yaml
index 362188c5..fd3401c2 100644
--- a/database/data/categories/walking_fork.yaml
+++ b/database/data/categories/walking_fork.yaml
@@ -15,6 +15,7 @@ related:
- walking_commutative_square
- walking_composable_pair
- walking_pair
+ - forked_commutative_square
satisfied_properties:
- property: small
diff --git a/database/data/categories/walking_pair.yaml b/database/data/categories/walking_pair.yaml
index bb8c929e..2f09cf63 100644
--- a/database/data/categories/walking_pair.yaml
+++ b/database/data/categories/walking_pair.yaml
@@ -15,6 +15,7 @@ related:
- walking_coreflexive_pair
- walking_fork
- walking_morphism
+ - forked_commutative_square
satisfied_properties:
- property: small
diff --git a/database/data/macros.yaml b/database/data/macros.yaml
index 4d7178e6..652f1e18 100644
--- a/database/data/macros.yaml
+++ b/database/data/macros.yaml
@@ -123,6 +123,7 @@
\Cone: \mathbf{Cone}
\SemiGrp: \mathbf{SemiGrp}
\Square: \mathbf{Square}
+\ForkSquare: \mathbf{ForkSquare}
\Comp: \mathbf{Comp}
\Fork: \mathbf{Fork}
\Isom: \mathbf{Isom}
From bb61a4de16e7363d9fcb969f4f1a8696578642cb Mon Sep 17 00:00:00 2001
From: Script Raccoon
Date: Wed, 5 Aug 2026 00:12:15 +0200
Subject: [PATCH 5/8] add example of a non-strong extremal monomorphism
---
.../extremal-not-strong-example.yaml | 22 +++++++++++++++++++
1 file changed, 22 insertions(+)
create mode 100644 database/data/morphisms/extremal-not-strong-example.yaml
diff --git a/database/data/morphisms/extremal-not-strong-example.yaml b/database/data/morphisms/extremal-not-strong-example.yaml
new file mode 100644
index 00000000..1c050c12
--- /dev/null
+++ b/database/data/morphisms/extremal-not-strong-example.yaml
@@ -0,0 +1,22 @@
+id: extremal-not-strong-example
+name: example of a non-strong extremal monomorphism
+notation: $m$
+category: forked_commutative_square
+description: 'This is the morphism $m : C \to D$ from the forked commutative square, see details there. It provides an example of an extremal monomorphism which is not strong, and this is the only reason we have added this morphism and its category to the database.'
+nlab_link: null
+
+tags:
+ - category theory
+
+related: []
+
+satisfied_properties:
+ - property: extremal monomorphism
+ proof: It is a monomorphism because, in fact, every morphism in the forked commutative square is a monomorphism. The only factorizations of $m$ are $m \circ \id_C$ and ${\id_D} \circ m$, and $m$ is not an epimorphism (because $u \circ m = v \circ m$ but $u \neq v$).
+
+unsatisfied_properties:
+ - property: strong monomorphism
+ proof: >-
+ The category contains a commutative diagram
+ $$\begin{CD} A @>e>> B \\ @V{f}VV @VV{g}V \\ C @>>m> D \end{CD}$$
+ in which $e$ is an epimorphism, but there is no morphism $B \to C$ at all.
From c42c97541e01893987e85452c91cdc350d704178 Mon Sep 17 00:00:00 2001
From: Script Raccoon
Date: Wed, 5 Aug 2026 12:54:36 +0200
Subject: [PATCH 6/8] add page with relationships between epimorphisms and
monomorphisms
---
content/relationships-epis-monos.md | 42 ++++++++++++++++++
.../effective epimorphism.yaml | 2 +-
.../effective monomorphism.yaml | 2 +-
.../extremal epimorphism.yaml | 2 +-
.../extremal monomorphism.yaml | 2 +-
.../strict epimorphism.yaml | 2 +-
.../strict monomorphism.yaml | 2 +-
.../strong epimorphism.yaml | 2 +-
.../strong monomorphism.yaml | 2 +-
src/routes/[type]-implications/+page.svelte | 6 +++
src/routes/content/[id]/+page.svelte | 11 +++++
static/img/epis.webp | Bin 0 -> 57084 bytes
static/img/monos.webp | Bin 0 -> 60224 bytes
13 files changed, 67 insertions(+), 8 deletions(-)
create mode 100644 content/relationships-epis-monos.md
create mode 100644 static/img/epis.webp
create mode 100644 static/img/monos.webp
diff --git a/content/relationships-epis-monos.md b/content/relationships-epis-monos.md
new file mode 100644
index 00000000..20d296fc
--- /dev/null
+++ b/content/relationships-epis-monos.md
@@ -0,0 +1,42 @@
+---
+title: Relationships between epimorphisms and monomorphisms
+description: A graphical overview of the relationships between the various types of epimorphisms and monomorphisms
+---
+
+## Relationships between epimorphisms and monomorphisms
+
+There are several [properties of morphisms](/morphism-properties), including various types of epimorphisms and monomorphisms. The [implications](/morphism-implications) establish various relationships between these types. Here we present a graphical overview of these relationships.
+
+### The various types of epimorphisms
+
+In the diagram, an arrow $X \Longrightarrow Y$ means that every morphism with property $X$ also has property $Y$. If it is labelled with a category property $P$, the implication does not hold in general, but it holds in categories satisfying $P$. For example, in a category with pullbacks, every strict epimorphism is effective.
+
+
+
+
+
+Fun fact: This describes a category in itself: We define the composition of $P : X \Rightarrow Y$ and $Q : Y \Rightarrow Z$ as $P \wedge Q : X \Rightarrow Z$.
+
+### The various types of monomorphisms
+
+This diagram is just the dual of the previous diagram. The same notation applies.
+
+
+
+
diff --git a/database/data/morphism-properties/effective epimorphism.yaml b/database/data/morphism-properties/effective epimorphism.yaml
index accaf8bb..8a9095c0 100644
--- a/database/data/morphism-properties/effective epimorphism.yaml
+++ b/database/data/morphism-properties/effective epimorphism.yaml
@@ -3,7 +3,7 @@ relation: is an
description: >-
A morphism $e : A \to B$ is an effective epimorphism if the pullback $A \times_B A$ exists and $e$ is the coequalizer of the two projections $p_1,p_2 : A \times_B A \rightrightarrows A$.
- By the implications below, effective epimorphisms are closely related to strict and regular epimorphisms. Every effective epimorphism is regular and hence strict, and in a category with pullbacks, every strict epimorphism is effective. Thus, in categories with pullbacks, all three mentioned classes of epimorphisms coincide.
+ By the implications below, effective epimorphisms are closely related to strict and regular epimorphisms. Every effective epimorphism is regular and hence strict, and in a category with pullbacks, every strict epimorphism is effective. Thus, in categories with pullbacks, all three mentioned classes of epimorphisms coincide. See also this overview.
nlab_link: https://ncatlab.org/nlab/show/effective+epimorphism
invariant_under_equivalences: true
dual: effective monomorphism
diff --git a/database/data/morphism-properties/effective monomorphism.yaml b/database/data/morphism-properties/effective monomorphism.yaml
index 29c7449f..370bc44c 100644
--- a/database/data/morphism-properties/effective monomorphism.yaml
+++ b/database/data/morphism-properties/effective monomorphism.yaml
@@ -3,7 +3,7 @@ relation: is an
description: >-
A morphism $m : A \to B$ is an effective monomorphism if the pushout $B \sqcup_A B$ exists and $m$ is the equalizer of the two coprojections $i_1,i_2 : B \rightrightarrows B \sqcup_A B$.
- By the implications below, effective monomorphisms are closely related to strict and regular monomorphisms. Every effective monomorphism is regular and hence strict, and in a category with pushouts, every strict monomorphism is effective. Thus, in categories with pushouts, all three mentioned classes of monomorphisms coincide.
+ By the implications below, effective monomorphisms are closely related to strict and regular monomorphisms. Every effective monomorphism is regular and hence strict, and in a category with pushouts, every strict monomorphism is effective. Thus, in categories with pushouts, all three mentioned classes of monomorphisms coincide. See also this overview.
nlab_link: https://ncatlab.org/nlab/show/effective+monomorphism
invariant_under_equivalences: true
dual: effective epimorphism
diff --git a/database/data/morphism-properties/extremal epimorphism.yaml b/database/data/morphism-properties/extremal epimorphism.yaml
index a059e2c7..a49b054a 100644
--- a/database/data/morphism-properties/extremal epimorphism.yaml
+++ b/database/data/morphism-properties/extremal epimorphism.yaml
@@ -3,7 +3,7 @@ relation: is an
description: >-
A morphism $e : A \to B$ is an extremal epimorphism if it is an epimorphism and whenever $e = m \circ g$ is a factorization in which $m$ is a monomorphism, then $m$ is an isomorphism. The condition that $e$ is an epimorphism follows from the factorization property when the category has equalizers, but in general, we need to explicitly demand it.
- By the implications below, extremal epimorphisms are closed related to strong epimorphisms: every strong epimorphism is extremal, and the converse holds when pullbacks exist.
+ By the implications below, extremal epimorphisms are closely related to strong epimorphisms: every strong epimorphism is extremal, and the converse holds when pullbacks exist. See also this overview.
nlab_link: https://ncatlab.org/nlab/show/extremal+epimorphism
invariant_under_equivalences: true
dual: extremal monomorphism
diff --git a/database/data/morphism-properties/extremal monomorphism.yaml b/database/data/morphism-properties/extremal monomorphism.yaml
index 3ffe101a..027b7f1f 100644
--- a/database/data/morphism-properties/extremal monomorphism.yaml
+++ b/database/data/morphism-properties/extremal monomorphism.yaml
@@ -3,7 +3,7 @@ relation: is an
description: >-
A morphism $m : A \to B$ is an extremal monomorphism if it is a monomorphism and whenever $m = g \circ e$ is a factorization in which $e$ is an epimorphism, then $e$ is an isomorphism. The condition that $m$ is a monomorphism follows from the factorization property when the category has coequalizers, but in general, we need to explicitly demand it.
- By the implications below, extremal monomorphisms are closed related to strong monomorphisms: every strong monomorphism is extremal, and the converse holds when pushouts exist.
+ By the implications below, extremal monomorphisms are closely related to strong monomorphisms: every strong monomorphism is extremal, and the converse holds when pushouts exist. See also this overview.
nlab_link: https://ncatlab.org/nlab/show/extremal+monomorphism
invariant_under_equivalences: true
dual: extremal epimorphism
diff --git a/database/data/morphism-properties/strict epimorphism.yaml b/database/data/morphism-properties/strict epimorphism.yaml
index 613f9cb0..d8010a8b 100644
--- a/database/data/morphism-properties/strict epimorphism.yaml
+++ b/database/data/morphism-properties/strict epimorphism.yaml
@@ -3,7 +3,7 @@ relation: is a
description: >-
A morphism $e : A \to B$ is a strict epimorphism if it is the joint coequalizer of all pairs of morphisms $f,g : C \rightrightarrows A$ that it coequalizes. That is, $e$ is an epimorphism, and a morphism $t : A \to T$ factors through $e$ if we have $t \circ f = t \circ g$ for all morphisms $f,g : C \rightrightarrows A$ that satisfy $e \circ f = e \circ g$. That is, the minimal requirement for a morphism to factor through $e$ is actually sufficient.
- By the implications below, strict epimorphisms are closely related to effective and regular epimorphisms. Every effective epimorphism is regular and hence strict, and in a category with pullbacks, every strict epimorphism is effective. Thus, in categories with pullbacks, all three mentioned classes of epimorphisms coincide.
+ By the implications below, strict epimorphisms are closely related to effective and regular epimorphisms. Every effective epimorphism is regular and hence strict, and in a category with pullbacks, every strict epimorphism is effective. Thus, in categories with pullbacks, all three mentioned classes of epimorphisms coincide. See also this overview.
nlab_link: https://ncatlab.org/nlab/show/strict+epimorphism
invariant_under_equivalences: true
dual: strict monomorphism
diff --git a/database/data/morphism-properties/strict monomorphism.yaml b/database/data/morphism-properties/strict monomorphism.yaml
index bf30731c..7ed0f4ba 100644
--- a/database/data/morphism-properties/strict monomorphism.yaml
+++ b/database/data/morphism-properties/strict monomorphism.yaml
@@ -3,7 +3,7 @@ relation: is a
description: >-
A morphism $m : A \to B$ is a strict monomorphism if it is the joint equalizer of all pairs of morphisms $f,g : B \rightrightarrows C$ that it equalizes. That is, $m$ is a monomorphism, and a morphism $t : T \to B$ factors through $m$ if we have $f \circ t = g \circ t$ for all morphisms $f,g : B \rightrightarrows C$ that satisfy $f \circ m = g \circ m$. That is, the minimal requirement for a morphism to factor through $m$ is actually sufficient.
- By the implications below, strict monomorphisms are closely related to effective and regular monomorphisms. Every effective monomorphism is regular and hence strict, and in a category with pushouts, every strict monomorphism is effective. Thus, in categories with pushouts, all three mentioned classes of monomorphisms coincide.
+ By the implications below, strict monomorphisms are closely related to effective and regular monomorphisms. Every effective monomorphism is regular and hence strict, and in a category with pushouts, every strict monomorphism is effective. Thus, in categories with pushouts, all three mentioned classes of monomorphisms coincide. See also this overview.
nlab_link: https://ncatlab.org/nlab/show/strict+monomorphism
invariant_under_equivalences: true
dual: strict epimorphism
diff --git a/database/data/morphism-properties/strong epimorphism.yaml b/database/data/morphism-properties/strong epimorphism.yaml
index 41f67e38..b3b1cb43 100644
--- a/database/data/morphism-properties/strong epimorphism.yaml
+++ b/database/data/morphism-properties/strong epimorphism.yaml
@@ -9,7 +9,7 @@ description: >-
If the category has equalizers, the orthogonality condition already implies that $e$ is an epimorphism, but in general, we need to demand this.
- By the implications below, strong epimorphisms are closed related to extremal epimorphisms: every strong epimorphism is extremal, and the converse holds when pullbacks exist.
+ By the implications below, strong epimorphisms are closely related to extremal epimorphisms: every strong epimorphism is extremal, and the converse holds when pullbacks exist. See also this overview.
nlab_link: https://ncatlab.org/nlab/show/strong+epimorphism
invariant_under_equivalences: true
dual: strong monomorphism
diff --git a/database/data/morphism-properties/strong monomorphism.yaml b/database/data/morphism-properties/strong monomorphism.yaml
index 565ba9e0..2b244eb4 100644
--- a/database/data/morphism-properties/strong monomorphism.yaml
+++ b/database/data/morphism-properties/strong monomorphism.yaml
@@ -9,7 +9,7 @@ description: >-
If the category has coequalizers, the orthogonality condition already implies that $m$ is a monomorphism, but in general, we need to demand this.
- By the implications below, strong monomorphisms are closed related to extremal monomorphisms: every strong monomorphism is extremal, and the converse holds when pushouts exist.
+ By the implications below, strong monomorphisms are closely related to extremal monomorphisms: every strong monomorphism is extremal, and the converse holds when pushouts exist. See also this overview.
nlab_link: https://ncatlab.org/nlab/show/strong+monomorphism
invariant_under_equivalences: true
dual: strong epimorphism
diff --git a/src/routes/[type]-implications/+page.svelte b/src/routes/[type]-implications/+page.svelte
index c3ba82ca..46c8dbca 100644
--- a/src/routes/[type]-implications/+page.svelte
+++ b/src/routes/[type]-implications/+page.svelte
@@ -47,6 +47,12 @@
each morphism whenever applicable. Moreover, implications are
automatically dualized when the corresponding dual properties exist.
+
+
+ See this page for a graphical
+ overview of the relationships between the various types of epimorphisms and
+ monomorphisms.
+
{/if}
diff --git a/src/routes/content/[id]/+page.svelte b/src/routes/content/[id]/+page.svelte
index 8c722cbb..3d6fa10c 100644
--- a/src/routes/content/[id]/+page.svelte
+++ b/src/routes/content/[id]/+page.svelte
@@ -96,5 +96,16 @@
:global(p:has(span.qed:only-child)) {
height: 1lh;
}
+
+ :global(pre) {
+ padding: 1rem;
+ border-radius: 0.75rem;
+ font-size: 0.875rem;
+ background-color: var(--secondary-bg-color);
+ }
+
+ :global(pre code) {
+ white-space: pre-wrap;
+ }
}
diff --git a/static/img/epis.webp b/static/img/epis.webp
new file mode 100644
index 0000000000000000000000000000000000000000..48573724fcb093ce27e7e69c2002f91b363bc4e4
GIT binary patch
literal 57084
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