module Cat.Morphism.Joint.Mono {o β} (C : Precategory o β) where
Joint monomorphismsπ
A pair of morphisms and are jointly monic if for every if and
is-jointly-monic : β {x y z} β Hom x y β Hom x z β Type (o β β) is-jointly-monic {x = x} f g = β {a} β (h k : Hom a x) β f β h β‘ f β k β g β h β‘ g β k β h β‘ k
More generally, an family of morphisms is a jointly monic family if for every if for every
is-jointly-monic-fam : β {β'} {I : Type β'} β {x : Ob} {yα΅’ : I β Ob} β (fα΅’ : β i β Hom x (yα΅’ i)) β Type (o β β β β') is-jointly-monic-fam {x = x} fα΅’ = β {a} β (h k : Hom a x) β (β i β fα΅’ i β h β‘ fα΅’ i β k) β h β‘ k
Joint monomorphisms and productsπ
If has products, then a pair of morphisms is jointly monic if and only if is monic.
module _ (all-products : has-products C) where open Binary-products C all-products
The forward direction follows from a short calculation.
β¨β©-monicβjointly-monic : β {x y z} {f : Hom x y} {g : Hom x z} β is-monic β¨ f , g β© β is-jointly-monic f g β¨β©-monicβjointly-monic {f = f} {g = g} β¨f,gβ©-mono h k p q = β¨f,gβ©-mono h k $ β¨ f , g β© β h β‘β¨ β¨β©β h β©β‘ β¨ f β h , g β h β© β‘β¨ apβ β¨_,_β© p q β©β‘ β¨ f β k , g β k β© β‘Λβ¨ β¨β©β k β©β‘Λ β¨ f , g β© β k β
The reverse direction is a bit trickier, but only just. Suppose that are jointly monic, and let such that
Our goal is to show that As and are jointly monic, it suffices to show that and We can re-arrange our hypothesis to get that
If we apply first and second projections to this equation, then we get exactly the pair of equalities that we were looking for.
jointly-monicββ¨β©-monic : β {x y z} {f : Hom x y} {g : Hom x z} β is-jointly-monic f g β is-monic β¨ f , g β© jointly-monicββ¨β©-monic {f = f} {g = g} fg-joint-mono h k p = fg-joint-mono h k (by-Οβ β¨fh,ghβ©=β¨fk,gkβ©) (by-Οβ β¨fh,ghβ©=β¨fk,gkβ©) where β¨fh,ghβ©=β¨fk,gkβ© : β¨ f β h , g β h β© β‘ β¨ f β k , g β k β© β¨fh,ghβ©=β¨fk,gkβ© = β¨ f β h , g β h β© β‘Λβ¨ β¨β©β h β©β‘Λ β¨ f , g β© β h β‘β¨ p β©β‘ β¨ f , g β© β k β‘β¨ β¨β©β k β©β‘ β¨ f β k , g β k β© β
This result provides the main motivation for joint monomorphisms. Namely, joint monos let us talk about subobjects of products, even when those products may not exist. Put another way, joint monos offer an alternative characterisation of relations internal to that works even when lacks products.
Joint monos are also slightly more ergonomic than subobjects of products. Typically, if we want to prove that some is monic, then our first step is to invoke the universal property of joint monos factor out this first step into the definition!
Jointly monic families and indexed productsπ
We can obtain a similar result for jointly monic families and indexed products: if has products, then a family of morphisms is jointly monic if and only if the universal map is monic.
module _ {β} {I : Type β} (indexed-products : has-products-indexed-by C I) where private module β {xα΅’ : I β Ob} = Indexed-product (indexed-products xα΅’) tuple-monicβjointly-monic-fam : β {x} {yα΅’ : I β Ob} β {fα΅’ : β i β Hom x (yα΅’ i)} β is-monic (β.tuple fα΅’) β is-jointly-monic-fam fα΅’ jointly-monic-famβtuple-monic : β {x} {yα΅’ : I β Ob} β {fα΅’ : β i β Hom x (yα΅’ i)} β is-jointly-monic-fam fα΅’ β is-monic (β.tuple fα΅’)
The proofs are almost identical to the non-indexed case, so we omit the details in the interest of brevity.
tuple-monicβjointly-monic-fam {yα΅’ = yα΅’} {fα΅’ = fα΅’} tuple-mono h k p = tuple-mono h k $ β.tuple fα΅’ β h β‘β¨ tupleβ C yα΅’ (indexed-products yα΅’) fα΅’ β©β‘ β.tuple (Ξ» i β fα΅’ i β h) β‘β¨ ap β.tuple (funext p) β©β‘ β.tuple (Ξ» i β fα΅’ i β k) β‘Λβ¨ tupleβ C yα΅’ (indexed-products yα΅’) fα΅’ β©β‘Λ β.tuple fα΅’ β k β jointly-monic-famβtuple-monic {yα΅’ = yα΅’} {fα΅’ = fα΅’} fα΅’-joint-mono h k p = fα΅’-joint-mono h k Ξ» i β fα΅’ i β h β‘β¨ pushl (sym β.commute) β©β‘ β.Ο i β β.tuple fα΅’ β h β‘β¨ ap (β.Ο i β_) p β©β‘ β.Ο i β β.tuple fα΅’ β k β‘β¨ pulll β.commute β©β‘ fα΅’ i β k β
If we apply the same line of reasoning that we used at the end of the previous section, we will notice that jointly monic families are relations internal to
Closure properties of joint monosπ
If are jointly monic and is monic, then and are jointly monic.
jointly-monic-β : β {w x y z} {f : Hom x y} {g : Hom x z} {h : Hom w x} β is-jointly-monic f g β is-monic h β is-jointly-monic (f β h) (g β h) jointly-monic-β {h = h} fg-joint-mono h-mono kβ kβ p q = h-mono kβ kβ $ fg-joint-mono (h β kβ) (h β kβ) (assoc _ _ _ Β·Β· p Β·Β· sym (assoc _ _ _)) (assoc _ _ _ Β·Β· q Β·Β· sym (assoc _ _ _))
Moreover, if and are jointly monic, then is monic.
jointly-monic-cancell : β {w x y z} {f : Hom x y} {g : Hom x z} {h : Hom w x} β is-jointly-monic (f β h) (g β h) β is-monic h jointly-monic-cancell fgh-joint-mono kβ kβ p = fgh-joint-mono kβ kβ (extendr p) (extendr p)
We get a similar pair of results for jointly monic families.
jointly-monic-fam-β : β {β'} {I : Type β'} {x y} {zα΅’ : I β Ob} β {fα΅’ : β i β Hom y (zα΅’ i)} {g : Hom x y} β is-jointly-monic-fam fα΅’ β is-monic g β is-jointly-monic-fam (Ξ» i β fα΅’ i β g) jointly-monic-fam-β {g = g} fα΅’-joint-mono g-mono kβ kβ p = g-mono kβ kβ $ fα΅’-joint-mono (g β kβ) (g β kβ) Ξ» i β assoc _ _ _ Β·Β· p i Β·Β· sym (assoc _ _ _) jointly-monic-fam-cancell : β {β'} {I : Type β'} {x y} {zα΅’ : I β Ob} β {fα΅’ : β i β Hom y (zα΅’ i)} {g : Hom x y} β is-jointly-monic-fam (Ξ» i β fα΅’ i β g) β is-monic g jointly-monic-fam-cancell fα΅’g-joint-mono kβ kβ p = fα΅’g-joint-mono kβ kβ Ξ» i β extendr p
If either of or are monic, then and are jointly monic.
left-monicβjointly-monic : β {x y z} {f : Hom x y} {g : Hom x z} β is-monic f β is-jointly-monic f g left-monicβjointly-monic f-mono kβ kβ p q = f-mono kβ kβ p right-monicβjointly-monic : β {x y z} {f : Hom x y} {g : Hom x z} β is-monic g β is-jointly-monic f g right-monicβjointly-monic g-mono kβ kβ p q = g-mono kβ kβ q
Similarly, if any component of a family of maps is monic, then is a jointly monic family.
monicβjointly-monic-fam : β {β'} {I : Type β'} {x} {yα΅’ : I β Ob} β {fα΅’ : β i β Hom x (yα΅’ i)} β (i : I) β is-monic (fα΅’ i) β is-jointly-monic-fam fα΅’ monicβjointly-monic-fam i fα΅’-monic kβ kβ p = fα΅’-monic kβ kβ (p i)
The previous result has an easy generalization: if is a family of morphisms such is jointly monic when restricted along a map then is jointly monic.
restrict-jointly-monic-fam : β {β' β''} {I : Type β'} {J : Type β''} β β {x} {yβ±Ό : J β Ob} {fβ±Ό : β j β Hom x (yβ±Ό j)} β (Ο : I β J) β is-jointly-monic-fam (Ξ» i β fβ±Ό (Ο i)) β is-jointly-monic-fam fβ±Ό restrict-jointly-monic-fam Ο fβ±Ό-joint-mono kβ kβ p = fβ±Ό-joint-mono kβ kβ (Ξ» j β p (Ο j))
If is jointly monic with itself, then is monic. Moreover, if the constant family is jointly monic, then is monic.
self-jointly-monicβmonic : β {x y} {f : Hom x y} β is-jointly-monic f f β is-monic f self-jointly-monicβmonic f-joint-monic kβ kβ p = f-joint-monic kβ kβ p p self-jointly-monic-famβmonic : β {β'} {I : Type β'} {x y} {f : Hom x y} β is-jointly-monic-fam (Ξ» (i : I) β f) β is-monic f self-jointly-monic-famβmonic f-joint-mono kβ kβ p = f-joint-mono kβ kβ (Ξ» _ β p)
Joint monos via representabilityπ
Like most things categorical, joint monos admit a definition via representability: and are jointly monic if and only if the map induced by postcomposition is an embedding.
jointly-monicβpostcomp-embedding : β {x y z} {f : Hom x y} {g : Hom x z} β is-jointly-monic f g β β {a} β is-embedding {B = Hom a y Γ Hom a z} (Ξ» h β f β h , g β h) jointly-monicβpostcomp-embedding fg-joint-mono = injectiveβis-embedding! Ξ» {kβ} {kβ} p β fg-joint-mono kβ kβ (ap fst p) (ap snd p) postcomp-embeddingβjointly-monic : β {x y z} {f : Hom x y} {g : Hom x z} β (β {a} β is-embedding {B = Hom a y Γ Hom a z} (Ξ» h β f β h , g β h)) β is-jointly-monic f g postcomp-embeddingβjointly-monic {f = f} {g = g} postcomp-embed kβ kβ p q = ap fst $ postcomp-embed (f β kβ , g β kβ) (kβ , p ,β q) (kβ , refl)
More generally, is a jointly monic family if and only if the map induced by postcomposition is an embedding.
jointly-monic-famβpostcomp-embedding : β {β} {I : Type β} {x} {yα΅’ : I β Ob} β {fα΅’ : β i β Hom x (yα΅’ i)} β is-jointly-monic-fam fα΅’ β β {a} β is-embedding {B = (i : I) β Hom a (yα΅’ i)} (Ξ» g i β fα΅’ i β g) jointly-monic-famβpostcomp-embedding fα΅’-joint-mono = injectiveβis-embedding! Ξ» {kβ} {kβ} p β fα΅’-joint-mono kβ kβ (apply p) postcomp-embeddingβjointly-monic-fam : β {β} {I : Type β} {x} {yα΅’ : I β Ob} β {fα΅’ : β i β Hom x (yα΅’ i)} β (β {a} β is-embedding {B = (i : I) β Hom a (yα΅’ i)} (Ξ» g i β fα΅’ i β g)) β is-jointly-monic-fam fα΅’ postcomp-embeddingβjointly-monic-fam {fα΅’ = fα΅’} postcomp-embed kβ kβ p = ap fst $ postcomp-embed (Ξ» i β fα΅’ i β kβ) (kβ , funext p) (kβ , refl)