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)