Strict morphisms, and finiteness conditions built from them #
A morphism is strict when its canonical coimage-to-image comparison is an isomorphism. The universal-property criteria below avoid importing the corresponding vendor module.
Four layers, in order:
- strict morphisms —
IsStrict,IsStrictMono,IsStrictEpi, their kernel and cokernel criteria, and their relation toNormalMono/RegularEpi/StrongEpi; StrictShortExact, and what it becomes in an abelian category, where every morphism is strict (isStrict_of_abelian);- strict subobjects, and the strict Artinian, Noetherian and finite-length object properties they generate, each paired with its non-strict counterpart;
- transfer of all of it along a fully faithful functor preserving monos.
Placement #
Generic category theory: this file imports only Mathlib's abelian, short-complex,
pullback, and subobject material, mentions no stability condition, and uses
nothing triangulated. It lives under CategoryTheory/Abelian/, beside Mathlib's
Abelian/NonPreadditive.lean precedent for a category with exactness conditions
weaker than abelian. It sat under StabilityCondition/Foundation/ until #488
because its first consumer was Bridgeland's thin-interval argument
(Foundation/Slicing/IntervalStrictness.lean is still the caller), then under
Triangulated/ until 2026-09-02, when the review of the Mathlib-mesh restructure
applied the rule that a file belongs under Triangulated/ only if it uses
something triangulated. The namespace stays CategoryTheory.Triangulated:
declaration names are unchanged across moves so that the immutable review
payloads the exe/RestateHistoricalNames.lean bridge protects keep resolving.
What this file asserts, and where #
The QuasiAbelian class below states the two stability axioms — strict
epimorphisms stable under pullback, strict monomorphisms stable under pushout.
It is inhabited: Slicing.intervalCat_quasiAbelian
(Foundation/Slicing/IntervalStrictness.lean) shows a thin owner slicing
interval is quasi-abelian, and it is the only instance at the time of writing.
Most of the file is prior to that class: strictness of individual morphisms and the finiteness conditions built on it, none of which needs the axioms.
Two earlier versions of this section were wrong, in opposite directions. The
first said QuasiAbelian "appears in no declaration in this file", which the
class below contradicts. Its replacement said no category is shown to be
quasi-abelian, which intervalCat_quasiAbelian contradicts — the search behind
that claim matched one line at a time, and the instance carries its type on the
next line. Neither claim should have been made without a search that could see
a multi-line signature.
A morphism is strict when the canonical coimage-to-image comparison is an isomorphism.
Equations
Instances For
A strict monomorphism.
Instances For
A strict epimorphism.
Instances For
A morphism which is the cokernel of its kernel is a strict epimorphism.
A morphism which is the kernel of its cokernel is a strict monomorphism.
A strict epimorphism is the cokernel of its kernel.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A strict monomorphism is the kernel of its cokernel.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A strict epimorphism supplies a normal epimorphism witness.
Equations
- hf.normalEpi = { W := CategoryTheory.Limits.kernel f, g := CategoryTheory.Limits.kernel.ι f, w := ⋯, isColimit := hf.isColimitCokernelCofork }
Instances For
A strict monomorphism supplies a normal monomorphism witness.
Equations
- hf.normalMono = { Z := CategoryTheory.Limits.cokernel f, g := CategoryTheory.Limits.cokernel.π f, w := ⋯, isLimit := hf.isLimitKernelFork }
Instances For
Every isomorphism is a strict monomorphism.
Every isomorphism is a strict epimorphism.
A strict epimorphism which is also monic is an isomorphism.
A strict monomorphism which is also epic is an isomorphism.
Every normal epimorphism is strict.
Every normal monomorphism is strict.
A strict epimorphism supplies a regular epimorphism witness.
Equations
Instances For
Every strict epimorphism is strong.
A strict monomorphism supplies a regular monomorphism witness.
Equations
Instances For
Every strict monomorphism is strong.
A kernel inclusion is a strict monomorphism.
A cokernel projection is a strict epimorphism.
An owner quasi-abelian category is preabelian and has pullbacks and pushouts, with strict epimorphisms stable under pullback and strict monomorphisms stable under pushout.
- pullback_strictEpi {X Y Z : C} (f : X ⟶ Z) (g : Y ⟶ Z) : IsStrictEpi g → IsStrictEpi (Limits.pullback.fst f g)
- pushout_strictMono {X Y Z : C} (f : Z ⟶ X) (g : Z ⟶ Y) : IsStrictMono f → IsStrictMono (Limits.pushout.inr f g)
Instances
A strict short exact sequence is a short exact complex whose two maps are strict.
- shortExact : S.ShortExact
Instances For
The canonical kernel sequence of a strict epimorphism is strict short exact.
Every morphism in an abelian category is strict.
Every monomorphism in an abelian category is strict.
Every epimorphism in an abelian category is strict.
Every short exact sequence in an abelian category is strictly short exact.
A strict subobject is one whose canonical inclusion is an owner strict monomorphism.
Equations
Instances For
The ordered type of strict subobjects of an object.
Equations
Instances For
Objects satisfying the descending chain condition on strict subobjects.
Equations
Instances For
Proposition-level strict-Artinian predicate.
Equations
Instances For
Objects satisfying the ascending chain condition on strict subobjects.
Equations
Instances For
Proposition-level strict-Noetherian predicate.
Equations
Instances For
An Artinian object is strict-Artinian.
A Noetherian object is strict-Noetherian.
A strict-Artinian object in an abelian category is Artinian.
A strict-Noetherian object in an abelian category is Noetherian.
The map on subobjects induced by a full faithful functor preserving monomorphisms.
Equations
- CategoryTheory.Triangulated.subobjectImageOfFullFaithful F = CategoryTheory.Subobject.lift (fun {S : A} (f : S ⟶ E) [CategoryTheory.Mono f] => CategoryTheory.Subobject.mk (F.map f)) ⋯
Instances For
The induced map on subobjects is injective.
The induced map on subobjects is monotone.
A full faithful functor preserving monomorphisms reflects finiteness of subobject lattices.
Artinian objects transfer across full faithful functors preserving monomorphisms.
Noetherian objects transfer across full faithful functors preserving monomorphisms.
A full faithful functor that maps strict monomorphisms induces a map from owner strict subobjects to ambient subobjects.
Equations
Instances For
The ambient-subobject image of owner strict subobjects is monotone.
The ambient-subobject image of owner strict subobjects is injective.
Strict-Artinian objects transfer across full faithful functors that map strict monomorphisms to strict monomorphisms.
Strict-Noetherian objects transfer across full faithful functors that map strict monomorphisms to strict monomorphisms.
Both chain conditions on StrictSubobject X at once.
The conditions are stated on strict subobjects rather than on all of
Subobject X because that is the order a quasi-abelian category actually
controls: a strict monomorphism is exactly one that is the kernel of its own
cokernel (IsStrictMono.isLimitKernelFork), so a strict subobject has a
well-behaved quotient and a non-strict one need not. This is the hypothesis
Harder–Narasimhan recursion needs — it terminates
on chains of strict subobjects — and it is strictly weaker than
IsFiniteLengthObject in general, because StrictSubobject X is a subtype of
Subobject X and a chain condition on a subtype is the easier statement. The
two coincide exactly when every mono is strict, which
isStrictFiniteLengthObject_iff_isFiniteLengthObject records for abelian
categories.
Equations
Instances For
Both chain conditions on Subobject X at once.
Mathlib has IsArtinianObject and IsNoetherianObject but no bundled
object-level finite-length predicate, so this is defined here rather than
imported; it is a plausible upstreaming candidate. It exists in this file only
to state the comparison results below — the owner API is built on
IsStrictFiniteLengthObject.
Equations
Instances For
Destructure strict finite length into its two chain conditions.
Definitionally Iff.rfl. It exists so that a deformation hypothesis carrying
an IsStrictFiniteLengthObject can produce the two instances without callers
unfolding the definition, which keeps later proofs stable if the conjunction is
ever replaced by a structure.
The descending chain condition carried by strict finite length.
A deformation hypothesis arrives as a bare IsStrictFiniteLengthObject X, but
every consumer downstream wants the chain conditions as instances, so the
recurring idiom is letI := h.isStrictArtinianObject. Going through the named
projection rather than h.1 keeps those call sites readable and unbroken if
the conjunction ever becomes a structure.
The ascending chain condition carried by strict finite length.
See IsStrictFiniteLengthObject.isStrictArtinianObject for why this is a named
projection rather than h.2.
Assemble strict finite length from the two chain conditions as instances.
The mirror image of the projections: consumers hand back instances, and this is what turns them into the packaged hypothesis without an anonymous constructor at every call site.
The descending chain condition carried by ordinary finite length.
The ascending chain condition carried by ordinary finite length.
Assemble ordinary finite length from the two chain conditions as instances.
Finitely many subobjects force strict finite length.
Both halves come from the single Finite (Subobject X) hypothesis: it makes
the subtype StrictSubobject X finite, and a finite order is well-founded in
both directions at once, so neither chain condition needs a separate argument.
This is the constructor to reach for on an object of a heart with finitely many
subobjects, where checking the chain conditions directly would mean an
induction.
Finite length implies strict finite length, in any quasi-abelian category.
The implication runs this way and not the other because well-foundedness
restricts along the inclusion StrictSubobject X ↪ Subobject X: a chain of
strict subobjects is in particular a chain of subobjects, so both conditions
transport by InvImage.wf. Recovering the converse needs every mono to be
strict, and so is available only under Abelian — see
isStrictFiniteLengthObject_iff_isFiniteLengthObject.
Over an abelian category the strict and ordinary notions agree.
Abelian is what collapses the distinction: every monomorphism is strict, so
StrictSubobject X is the whole of Subobject X and the two chain conditions
are the same statement. Only the forward direction consumes the hypothesis; the
reverse is the general implication above. The practical use is to import
finite-length facts about a heart, which is abelian, into the quasi-abelian
interval categories where the owner theory lives — the transfer is sound in
that direction precisely because this equivalence is unavailable in the
quasi-abelian setting itself.