open import Cat.Instances.StrictCat.Cohesive
open import Cat.Instances.Shape.Terminal
open import Cat.Instances.Localisation
open import Cat.Diagram.Terminal
open import Cat.Diagram.Initial
open import Cat.Prelude

open Precategory
open Congruence
open Functor

module Cat.Connected where


# Connected categoriesπ

A precategory is connected if it has exactly one connected component. Explicitly, this means that it has at least one object, and that every two objects can be connected by a finite zigzag of morphisms.

record is-connected-cat {o β} (C : Precategory o β) : Type (o β β) where
no-eta-equality
field
point : β₯ Ob C β₯
zigzag : β x y β β₯ Meander C x y β₯


Notice the similarity with the notion of connectedness in homotopy type theory, particularly its formulation in terms of propositional truncations: this definition is essentially saying that the category has a connected homotopy type. In particular, the propositional truncations are important: without them, we could not prove that the delooping of the group of integers, seen as a univalent category,1 is connected, for the same reason that there is no function of type in the circle.

open is-connected-cat

private unquoteDecl eqv = declare-record-iso eqv (quote is-connected-cat)

unquoteDecl hl-is-connected-cat = declare-record-hlevel 1 hl-is-connected-cat (quote is-connected-cat)


As a simple example, a category is connected if it has an initial or terminal object. In particular, the terminal category is connected.2

β€Cat-is-connected : is-connected-cat β€Cat
β€Cat-is-connected .point      = inc tt
β€Cat-is-connected .zigzag _ _ = inc []

module _ {o β} {C : Precategory o β} where
open Precategory C

initialβconnected : Initial C β is-connected-cat C
initialβconnected init = conn where
open Initial init
conn : is-connected-cat C
conn .point = inc bot
conn .zigzag x y = inc (zig Β‘ (zag Β‘ tt []))

terminalβconnected : Terminal C β is-connected-cat C
terminalβconnected term = conn where
open Terminal term
conn : is-connected-cat C
conn .point = inc top
conn .zigzag x y = inc (zag ! tt (zig ! []))


We now show that this definition is equivalent to asking for the set of connected components to be contractible. The forward implication easily follows from the elimination principle of zigzags into sets:

  connectedβΟβ-is-contr : is-connected-cat C β is-contr (Οβ Κ» C)
connectedβΟβ-is-contr conn = case conn .point of Ξ» x β contr (inc x)
(elim! Ξ» y β rec! (Meander-rec-β‘ (Οβ C) inc quot) (conn .zigzag x y))


Showing the converse implication is not as straightforward: in order to go from paths in to zigzags, we would like to use the effectivity of quotients, but the relation is not a congruence!3

Luckily, we can define the free congruence generated by two objects are related by this congruence if there merely exists a zigzag between them4. We can then show that the quotient of this congruence is equivalent to so we can conclude that it is contractible and apply effectivity to get a zigzag.

  Οβ-is-contrβconnected : is-contr (Οβ Κ» C) β is-connected-cat C
Οβ-is-contrβconnected Οβ-contr = conn where
R : Congruence β C β (o β β)
R ._βΌ_ x y         = β₯ Meander C x y β₯
R .has-is-prop _ _ = squash
R .reflαΆ    = inc []
R ._βαΆ_ p q = β₯-β₯-mapβ _++_ q p
R .symαΆ     = β₯-β₯-map (reverse C)

is : Iso (quotient R) (Οβ Κ» C)
is .fst = Coeq-rec inc (elim! Ξ» x y β Meander-rec-β‘ (Οβ C) inc quot)
is .snd .is-iso.inv = Coeq-rec inc Ξ» (x , y , f) β
quot (inc (zig f []))
is .snd .is-iso.rinv = elim! Ξ» _ β refl
is .snd .is-iso.linv = elim! Ξ» _ β refl

conn : is-connected-cat C
conn .point = rec! inc (Οβ-contr .centre)
conn .zigzag x y = effective R
(is-contrβis-prop (Isoβis-hlevel 0 is Οβ-contr) (inc x) (inc y))

connectedβΟβ-is-contr : is-connected-cat C β is-contr (Οβ Κ» C)
connectedβΟβ-is-contr = prop-ext (hlevel 1) (hlevel 1)
connectedβΟβ-is-contr Οβ-is-contrβconnected


1. Either via the Rezk completion, or directly, as the discrete category on the groupoid β©οΈ

2. But the initial category isnβt: even though any of its points would be connected by a zigzag, there are no such points.β©οΈ

3. In a general category, it may fail to be symmetric (we call those where it is pregroupoids), and it may fail to be valued in propositions (those are the thin categories).β©οΈ

4. Thinking of Zigzag, vaguely, as the reflexive, transitive and symmetric closure of Hom.β©οΈ