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)