Strict initial objects #
This file sets up the basic theory of strict initial objects: initial objects where every morphism to it is an isomorphism. This generalises a property of the empty set in the category of sets: namely that the only function to the empty set is from itself.
We say C
has strict initial objects if every initial object is strict, ie given any morphism
f : A ⟶ I
where I
is initial, then f
is an isomorphism.
Strictly speaking, this says that any initial object must be strict, rather than that strict
initial objects exist, which turns out to be a more useful notion to formalise.
If the binary product of X
with a strict initial object exists, it is also initial.
To show a category C
with an initial object has strict initial objects, the most convenient way
is to show any morphism to the (chosen) initial object is an isomorphism and use
hasStrictInitialObjects_of_initial_is_strict
.
The dual notion (strict terminal objects) occurs much less frequently in practice so is ignored.
TODO #
- Construct examples of this:
Type*
,TopCat
,Groupoid
, simplicial types, posets. - Construct the bottom element of the subobject lattice given strict initials.
- Show cartesian closed categories have strict initials
References #
- https://ncatlab.org/nlab/show/strict+initial+object
We say C
has strict initial objects if every initial object is strict, ie given any morphism
f : A ⟶ I
where I
is initial, then f
is an isomorphism.
Strictly speaking, this says that any initial object must be strict, rather than that strict initial objects exist.
- out : ∀ {I A : C} (f : A ⟶ I), CategoryTheory.Limits.IsInitial I → CategoryTheory.IsIso f
Instances
If X ⟶ Y
with Y
being a strict initial object, then X
is also an initial object.
Equations
- CategoryTheory.Limits.IsInitial.ofStrict f hY = hY.ofIso (CategoryTheory.asIso f).symm
Instances For
Equations
- ⋯ = ⋯
If I
is initial, then X ⨯ I
is isomorphic to it.
Equations
- CategoryTheory.Limits.mulIsInitial X hI = let_fun this := ⋯; CategoryTheory.asIso CategoryTheory.Limits.prod.snd
Instances For
If I
is initial, then I ⨯ X
is isomorphic to it.
Equations
- CategoryTheory.Limits.isInitialMul X hI = let_fun this := ⋯; CategoryTheory.asIso CategoryTheory.Limits.prod.fst
Instances For
Equations
- ⋯ = ⋯
The product of X
with an initial object in a category with strict initial objects is itself
initial.
This is the generalisation of the fact that X × Empty ≃ Empty
for types (or n * 0 = 0
).
Equations
- CategoryTheory.Limits.mulInitial X = CategoryTheory.Limits.mulIsInitial X CategoryTheory.Limits.initialIsInitial
Instances For
The product of X
with an initial object in a category with strict initial objects is itself
initial.
This is the generalisation of the fact that Empty × X ≃ Empty
for types (or 0 * n = 0
).
Equations
- CategoryTheory.Limits.initialMul X = CategoryTheory.Limits.isInitialMul X CategoryTheory.Limits.initialIsInitial
Instances For
If C
has an initial object such that every morphism to it is an isomorphism, then C
has strict initial objects.
We say C
has strict terminal objects if every terminal object is strict, ie given any morphism
f : I ⟶ A
where I
is terminal, then f
is an isomorphism.
Strictly speaking, this says that any terminal object must be strict, rather than that strict terminal objects exist.
- out : ∀ {I A : C} (f : I ⟶ A), CategoryTheory.Limits.IsTerminal I → CategoryTheory.IsIso f
Instances
If X ⟶ Y
with Y
being a strict terminal object, then X
is also an terminal object.
Equations
- CategoryTheory.Limits.IsTerminal.ofStrict f hY = hY.ofIso (CategoryTheory.asIso f)
Instances For
If all but one object in a diagram is strict terminal, then the limit is isomorphic to the
said object via limit.π
.
Equations
- ⋯ = ⋯
If C
has an object such that every morphism from it is an isomorphism, then C
has strict terminal objects.