module Data.Set.Coequaliser.Split where
Split quotients🔗
Recall that a quotient of a set by an equivalence relation allows us to “replace” the identity type of by the relation by means of a surjection having equivalent to However, depending on the specifics of we may not need to actually take a quotient after all! It may be the case that is equivalent to a particular subset of When this is the case, we say that the quotient is split. This module outlines sufficient conditions for a quotient to split, by appealing to our intuition about normal forms.
private variable
: Level
ℓ ℓ' : Type ℓ A
record is-split-congruence (R : Congruence A ℓ') : Type (level-of A ⊔ ℓ') where
open Congruence R
field
: is-set A has-is-set
A normalisation function for an equivalence relation is one that is the identity “up to ”, i.e., we have and which respects the relation, in that, if we have then
: A → A
normalise
: ∀ x → x ∼ normalise x
represents : ∀ x y → x ∼ y → normalise x ≡ normalise y respects
private instance
: ∀ {n} → H-Level A (2 + n)
hl-a = basic-instance 2 has-is-set hl-a
It turns out that this is just enough to asking for a splitting of the quotient map We can define a function sending each to a fibre of the quotient map over it, by induction. At the points of we take the fibre over to be and we have by the first assumption. By the second assumption, this procedure respects the quotient.
: (x : Congruence.quotient R) → fibre inc x
splitting (inc x) = record { fst = normalise x ; snd = quot (symᶜ (represents x)) }
splitting (glue (x , y , r) i) = record
splitting { fst = respects x y r i
; snd = is-prop→pathp (λ i → Coeq.squash (inc (respects x y r i)) (quot r i))
(quot (symᶜ (represents x))) (quot (symᶜ (represents y))) i
}
(squash x y p q i j) = is-set→squarep
splitting (λ i j → hlevel {T = fibre inc (squash x y p q i j)} 2)
(λ i → splitting x) (λ i → splitting (p i)) (λ i → splitting (q i)) (λ i → splitting y) i j
: Congruence.quotient R → A
choose = splitting x .fst choose x
Two other consequences of these assumptions are that the normalisation function is literally idempotent, and that it additionally reflects the quotient relation, in that is equivalent to
: ∀ x → normalise (normalise x) ≡ normalise x
normalises = respects (normalise x) x (symᶜ (represents x))
normalises x
: ∀ x y → normalise x ≡ normalise y → x ∼ y
reflects = represents x ∙ᶜ reflᶜ' p ∙ᶜ symᶜ (represents y) reflects x y p
Finally, we show that any splitting of the quotient map generates a normalisation procedure in the above sense: if we have a map we define the normalisation procedure to be
split-surjection→is-split-congruence: ⦃ _ : H-Level A 2 ⦄ (R : Congruence A ℓ)
→ (∀ x → fibre {B = Congruence.quotient R} inc x)
→ is-split-congruence R
= record
split-surjection→is-split-congruence R split { has-is-set = hlevel 2
; normalise = λ x → split (inc x) .fst
; represents = λ x → effective (sym (split (inc x) .snd))
; respects = λ x y p → ap (fst ∘ split) (quot p)
} where open Congruence R