module Cat.Diagram.Coproduct.Indexed {o β} (C : Precategory o β) where
Indexed coproductsπ
Indexed coproducts are the dual notion to indexed products, so see there for motivation and exposition.
record is-indexed-coproduct (F : Idx β C.Ob) (ΞΉ : β i β C.Hom (F i) S)
: Type (o β β β level-of Idx) where
no-eta-equality
field
: β {Y} β (β i β C.Hom (F i) Y) β C.Hom S Y
match : β {i} {Y} {f : β i β C.Hom (F i) Y} β match f C.β ΞΉ i β‘ f i
commute : β {Y} {h : C.Hom S Y} (f : β i β C.Hom (F i) Y)
unique β (β i β h C.β ΞΉ i β‘ f i)
β h β‘ match f
: β {Y} (h : C.Hom S Y) β h β‘ match (Ξ» i β h C.β ΞΉ i)
eta = unique _ Ξ» _ β refl
eta h
: β {Y} {g h : C.Hom S Y} β (β i β g C.β ΞΉ i β‘ h C.β ΞΉ i) β g β‘ h
uniqueβ {g = g} {h} eq = eta g β ap match (funext eq) β sym (eta h)
uniqueβ
: β {Y} β C.Hom S Y β (β i β C.Hom (F i) Y)
hom-iso = (Ξ» z i β z C.β ΞΉ i) , is-isoβis-equiv Ξ» where
hom-iso .is-iso.inv β match
.is-iso.rinv x β funext Ξ» i β commute
.is-iso.linv x β sym (unique _ Ξ» _ β refl)
A category admits indexed coproducts (of level if, for any type and family there is an indexed coproduct of
record Indexed-coproduct (F : Idx β C.Ob) : Type (o β β β level-of Idx) where
no-eta-equality
field
{Ξ£F} : C.Ob
: β i β C.Hom (F i) Ξ£F
ΞΉ : is-indexed-coproduct F ΞΉ
has-is-ic open is-indexed-coproduct has-is-ic public
: β {β} (I : Type β) β Type _
has-coproducts-indexed-by = β (F : I β C.Ob) β Indexed-coproduct F
has-coproducts-indexed-by I
: β β β Type _
has-indexed-coproducts = β {I : Type β} β has-coproducts-indexed-by I has-indexed-coproducts β
Disjoint coproductsπ
An indexed coproduct is said to be disjoint if every one of its inclusions is monic, and, for unequal the square below is a pullback with initial apex. Since the maps are monic, the pullback below computes the intersection of and as subobjects of hence the name disjoint coproduct: If is an initial object, then
record is-disjoint-coproduct (F : Idx β C.Ob) (ΞΉ : β i β C.Hom (F i) S)
: Type (o β β β level-of Idx) where
field
: is-indexed-coproduct F ΞΉ
is-coproduct : β i β C.is-monic (ΞΉ i)
injections-are-monic : β i j β Pullback C (ΞΉ i) (ΞΉ j)
summands-intersect
different-images-are-disjoint: β i j β Β¬ i β‘ j β is-initial C (summands-intersect i j .Pullback.apex)
Initial objects are disjointπ
We prove that if is an initial object, then it is also an indexed coproduct β for any family β and furthermore, it is a disjoint coproduct.
is-initialβis-disjoint-coproduct: β {β
} {F : β₯ β C.Ob} {i : β i β C.Hom (F i) β
}
β is-initial C β
β is-disjoint-coproduct F i
{F = F} {i = i} init = is-disjoint where
is-initialβis-disjoint-coproduct open is-indexed-coproduct
: is-indexed-coproduct F i
is-coprod .match _ = init _ .centre
is-coprod .commute {i = i} = absurd i
is-coprod .unique {h = h} f p i = init _ .paths h (~ i)
is-coprod
open is-disjoint-coproduct
: is-disjoint-coproduct F i
is-disjoint .is-coproduct = is-coprod
is-disjoint .injections-are-monic i = absurd i
is-disjoint .summands-intersect i j = absurd i
is-disjoint .different-images-are-disjoint i j p = absurd i is-disjoint