Discrete categories #
We define discrete α := α
for any type α
, and use this type alias
to provide a small_category
instance whose only morphisms are the identities.
There is an annoying technical difficulty that it has turned out to be inconvenient
to allow categories with morphisms living in Prop
,
so instead of defining X ⟶ Y
in discrete α
as X = Y
,
one might define it as plift (X = Y)
.
In fact, to allow discrete α
to be a small_category
(i.e. with morphisms in the same universe as the objects),
we actually define the hom type X ⟶ Y
as ulift (plift (X = Y))
.
discrete.functor
promotes a function f : I → C
(for any category C
) to a functor
discrete.functor f : discrete I ⥤ C
.
Similarly, discrete.nat_trans
and discrete.nat_iso
promote I
-indexed families of morphisms,
or I
-indexed families of isomorphisms to natural transformations or natural isomorphism.
We show equivalences of types are the same as (categorical) equivalences of the corresponding discrete categories.
A type synonym for promoting any type to a category, with the only morphisms being equalities.
Equations
The "discrete" category on a type, whose morphisms are equalities.
Because we do not allow morphisms in Prop
(only in Type
),
somewhat annoyingly we have to define X ⟶ Y
as ulift (plift (X = Y))
.
See https://stacks.math.columbia.edu/tag/001A
Equations
- category_theory.discrete_category α = {to_category_struct := {to_quiver := {hom := λ (X Y : category_theory.discrete α), ulift (plift (X = Y))}, id := λ (X : category_theory.discrete α), {down := {down := _}}, comp := λ (X Y Z : category_theory.discrete α) (g : X ⟶ Y) (f : Y ⟶ Z), ulift.cases_on f (λ (f : plift (Y = Z)), f.cases_on (λ (f : Y = Z), eq.rec g f))}, id_comp' := _, comp_id' := _, assoc' := _}
Equations
- category_theory.discrete.inhabited = id _inst_1
Extract the equation from a morphism in a discrete category.
Any function I → C
gives a functor discrete I ⥤ C
.
Equations
For functors out of a discrete category, a natural transformation is just a collection of maps, as the naturality squares are trivial.
Equations
- category_theory.discrete.nat_trans f = {app := f, naturality' := _}
For functors out of a discrete category, a natural isomorphism is just a collection of isomorphisms, as the naturality squares are trivial.
Equations
Every functor F
from a discrete category is naturally isomorphic (actually, equal) to
discrete.functor (F.obj)
.
Equations
Composing discrete.functor F
with another functor G
amounts to composing F
with G.obj
Equations
We can promote a type-level equiv
to
an equivalence between the corresponding discrete
categories.
Equations
- category_theory.discrete.equivalence e = {functor := category_theory.discrete.functor ⇑e, inverse := category_theory.discrete.functor ⇑(e.symm), unit_iso := category_theory.discrete.nat_iso (λ (i : category_theory.discrete I), category_theory.eq_to_iso _), counit_iso := category_theory.discrete.nat_iso (λ (j : category_theory.discrete J), category_theory.eq_to_iso _), functor_unit_iso_comp' := _}
We can convert an equivalence of discrete
categories to a type-level equiv
.
A discrete category is equivalent to its opposite category.
Equations
- category_theory.discrete.opposite α = let F : category_theory.discrete α ⥤ (category_theory.discrete α)ᵒᵖ := category_theory.discrete.functor (λ (x : α), opposite.op x) in category_theory.equivalence.mk F.left_op F (category_theory.nat_iso.of_components (λ (X : (category_theory.discrete α)ᵒᵖ), _.mpr (category_theory.iso.refl X)) _) (category_theory.discrete.nat_iso (λ (X : category_theory.discrete α), _.mpr (category_theory.iso.refl X)))