module Data.Set.Truncation where
Set truncationπ
Exactly analogously to the construction of propositional truncations, we can construct the set truncation of a type, reflecting it onto the subcategory of sets. Just like the propositional truncation is constructed by attaching enough lines to a type to hide away all information other than βis the type inhabitedβ, the set truncation is constructed by attaching enough square to kill off all homotopy groups.
data β₯_β₯β {β} (A : Type β) : Type β where
: A β β₯ A β₯β
inc : is-set β₯ A β₯β squash
We begin by defining the induction principle. The (family of) type(s)
we map into must be a set, as required by the squash
constructor.
: β {β β'} {A : Type β} {B : β₯ A β₯β β Type β'}
β₯-β₯β-elim β (β x β is-set (B x))
β (β x β B (inc x))
β β x β B x
(inc x) = binc x
β₯-β₯β-elim Bset binc (squash x y p q i j) =
β₯-β₯β-elim Bset binc (Ξ» i j β Bset (squash x y p q i j))
is-setβsquarep (Ξ» _ β g x) (Ξ» i β g (p i)) (Ξ» i β g (q i)) (Ξ» i β g y) i j
where g = β₯-β₯β-elim Bset binc
β₯-β₯β-rec: β {β β'} {A : Type β} {B : Type β'} β is-set B
β (A β B) β β₯ A β₯β β B
(inc x) = f x
β₯-β₯β-rec bset f (squash x y p q i j) =
β₯-β₯β-rec bset f (go x) (go y) (Ξ» i β go (p i)) (Ξ» i β go (q i)) i j
bset where go = β₯-β₯β-rec bset f
instance
Inductive-β₯β₯β: β {β β' βm} {A : Type β} {P : β₯ A β₯β β Type β'} β¦ i : Inductive (β x β P (inc x)) βm β¦
β β¦ _ : β {x} β H-Level (P x) 2 β¦
β Inductive (β x β P x) βm
= record
Inductive-β₯β₯β β¦ i β¦ { methods = i .Inductive.methods
; from = Ξ» f β β₯-β₯β-elim (Ξ» x β hlevel 2) (i .Inductive.from f)
}
The most interesting result is that, since the sets form a reflective
subcategory of types, the set-truncation is an idempotent monad.
Indeed, as required, the counit inc
is an equivalence:
: β {β} {A : Type β} β is-set A
β₯-β₯β-idempotent β is-equiv (inc {A = A})
{A = A} aset = is-isoβis-equiv (iso proj incβproj Ξ» _ β refl)
β₯-β₯β-idempotent module β₯-β₯β-idempotent where
: β₯ A β₯β β A
proj (inc x) = x
proj (squash x y p q i j) =
proj (proj x) (proj y) (Ξ» i β proj (p i)) (Ξ» i β proj (q i)) i j
aset
: (x : β₯ A β₯β) β inc (proj x) β‘ x
incβproj = β₯-β₯β-elim (Ξ» _ β is-propβis-set (squash _ _)) Ξ» _ β refl incβproj
The other definitions are entirely routine. We define functorial
actions of β₯_β₯β
directly,
rather than using the eliminator, to avoid using is-setβsquarep
.
: β {β β'} {A : Type β} {B : Type β'}
β₯-β₯β-map β (A β B) β β₯ A β₯β β β₯ B β₯β
(inc x) = inc (f x)
β₯-β₯β-map f (squash x y p q i j) =
β₯-β₯β-map f (β₯-β₯β-map f x) (β₯-β₯β-map f y)
squash (Ξ» i β β₯-β₯β-map f (p i))
(Ξ» i β β₯-β₯β-map f (q i))
i j
: β {β β' β''} {A : Type β} {B : Type β'} {C : Type β''}
β₯-β₯β-mapβ β (A β B β C) β β₯ A β₯β β β₯ B β₯β β β₯ C β₯β
(inc x) (inc y) = inc (f x y)
β₯-β₯β-mapβ f (squash x y p q i j) b =
β₯-β₯β-mapβ f (β₯-β₯β-mapβ f x b) (β₯-β₯β-mapβ f y b)
squash (Ξ» i β β₯-β₯β-mapβ f (p i) b)
(Ξ» i β β₯-β₯β-mapβ f (q i) b)
i j(squash x y p q i j) =
β₯-β₯β-mapβ f a (β₯-β₯β-mapβ f a x) (β₯-β₯β-mapβ f a y)
squash (Ξ» i β β₯-β₯β-mapβ f a (p i))
(Ξ» i β β₯-β₯β-mapβ f a (q i))
i j
Paths in the set truncationπ
β₯-β₯β-path-equiv: β {β} {A : Type β} {x y : A}
β (β₯_β₯β.inc x β‘ β₯_β₯β.inc y) β β₯ x β‘ y β₯
{A = A} =
β₯-β₯β-path-equiv (squash _ _) squash (encode _ _) (decode _ (inc _))
prop-ext where
: β x (y : β₯ A β₯β) β Prop _
code = β₯-β₯β-elim (Ξ» y β hlevel 2) Ξ» y β el β₯ x β‘ y β₯ squash
code x
: β x y β inc x β‘ y β β£ code x y β£
encode = J (Ξ» y p β β£ code x y β£) (inc refl) p
encode x y p
: β x y β β£ code x y β£ β inc x β‘ y
decode = β₯-β₯β-elim
decode x (Ξ» _ β fun-is-hlevel 2 (is-propβis-set (squash _ _)))
Ξ» _ β β₯-β₯-rec (squash _ _) (ap inc)
module β₯-β₯β-path {β} {A : Type β} {x} {y}
= Equiv (β₯-β₯β-path-equiv {A = A} {x} {y})
instance
: β {β} {A : Type β} {n : Nat} β H-Level β₯ A β₯β (2 + n)
H-Level-β₯-β₯β {n = n} = basic-instance 2 squash
H-Level-β₯-β₯β
: β {β} {A : Type β} β is-contr A β is-contr β₯ A β₯β
is-contrββ₯-β₯β-is-contr = Equivβis-hlevel 0 ((_ , β₯-β₯β-idempotent (is-contrβis-set h)) eβ»ΒΉ) h
is-contrββ₯-β₯β-is-contr h
: β {β} {A : Type β} β is-prop A β is-prop β₯ A β₯β
is-propββ₯-β₯β-is-prop = Equivβis-hlevel 1 ((_ , β₯-β₯β-idempotent (is-propβis-set h)) eβ»ΒΉ) h is-propββ₯-β₯β-is-prop h