Jon Sterling, 25 March 2023
\begin{code}
{-# OPTIONS --safe --without-K #-}
module UF.SetTrunc where
open import MLTT.Spartan
open import UF.Sets
\end{code}
We use the existence of propositional truncations as an
assumption. The following type collects the data that constitutes this
assumption.
\begin{code}
record set-truncations-exist : 𝓤ω where
field
set-trunc : {𝓤 : Universe} → 𝓤 ̇ → 𝓤 ̇
set-trunc-is-set : {𝓤 : Universe} {X : 𝓤 ̇ } → is-set (set-trunc X)
set-trunc-in : {𝓤 : Universe} {X : 𝓤 ̇ } → X → (set-trunc X)
set-trunc-ind
: {𝓤 𝓥 : Universe} {X : 𝓤 ̇ } (Y : set-trunc X → 𝓥 ̇ )
→ ((x : set-trunc X) → is-set (Y x))
→ ((x : X) → Y (set-trunc-in x))
→ (x : set-trunc X)
→ Y x
set-trunc-ind-β
: {𝓤 𝓥 : Universe} {X : 𝓤 ̇ } (Y : set-trunc X → 𝓥 ̇ )
→ (Y-set : (x : set-trunc X) → is-set (Y x))
→ (h : (x : X) → Y (set-trunc-in x))
→ (x : X)
→ set-trunc-ind Y Y-set h (set-trunc-in x) = h x
set-trunc-rec
: {𝓤 𝓥 : Universe} {X : 𝓤 ̇ } (Y : 𝓥 ̇ )
→ is-set Y
→ (X → Y)
→ set-trunc X
→ Y
set-trunc-rec _ Y-set =
set-trunc-ind _ (λ _ → Y-set)