-- Martin Escardo, 7th August 2015

{-# OPTIONS --without-K #-}

module prop where

open import preliminaries
open import isprop public

Prp : (i : L)  U(lsuc i)
Prp i = Σ \(P : U i)  isProp P

₍_,_₎ : {i : L} (P : U i)  isProp P  Prp i
₍_,_₎ = _,_

_holds : {i : L}  Prp i  U i
_holds = pr₁

infix 20 _holds

holdsIsProp : {i : L} (p : Prp i)  isProp(p holds)
holdsIsProp = pr₂

Prp-≡ : {i : L} {p q : Prp i}  p holds  q holds  p  q
Prp-≡ {i} {p} {q} e = Σ-≡ e (isProp-isProp (transport isProp e (holdsIsProp p)) (holdsIsProp q))

open import propua

propext : {i : L} {p q : Prp i}  (p holds  q holds)  (q holds  p holds)  p  q
propext {i} {p} {q} f g = Prp-≡ e
 where
  e : p holds  q holds
  e = prop-ua (holdsIsProp p) (holdsIsProp q) f g