{-# OPTIONS --safe #-}
module Cubical.Relation.Nullary.HLevels where
open import Cubical.Foundations.Prelude
open import Cubical.Foundations.HLevels
open import Cubical.Foundations.Function
open import Cubical.Functions.Fixpoint
open import Cubical.Relation.Nullary
private
variable
ℓ : Level
A : Type ℓ
isPropPopulated : isProp (Populated A)
isPropPopulated = isPropΠ λ x → 2-Constant→isPropFixpoint (x .fst) (x .snd)
isPropHSeparated : isProp (HSeparated A)
isPropHSeparated f g i x y a = HSeparated→isSet f x y (f x y a) (g x y a) i
isPropCollapsible≡ : isProp (Collapsible≡ A)
isPropCollapsible≡ {A = A} f = (isPropΠ2 λ x y → isPropCollapsiblePointwise) f where
sA : isSet A
sA = Collapsible≡→isSet f
gA : isGroupoid A
gA = isSet→isGroupoid sA
isPropCollapsiblePointwise : ∀ {x y} → isProp (Collapsible (x ≡ y))
isPropCollapsiblePointwise {x} {y} (a , ca) (b , cb) = λ i → endoFunction i , endoFunctionIsConstant i where
endoFunction : a ≡ b
endoFunction = funExt λ p → sA _ _ (a p) (b p)
isProp2-Constant : (k : I) → isProp (2-Constant (endoFunction k))
isProp2-Constant k = isPropΠ2 λ r s → gA x y (endoFunction k r) (endoFunction k s)
endoFunctionIsConstant : PathP (λ i → 2-Constant (endoFunction i)) ca cb
endoFunctionIsConstant = isProp→PathP isProp2-Constant ca cb
isPropDiscrete : isProp (Discrete A)
isPropDiscrete p q = isPropΠ2 (λ x y → isPropDec (Discrete→isSet p x y)) p q