Martin Escardo

Properties of the type of truth values.

\begin{code}

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

module UF.SubtypeClassifier-Properties where

open import MLTT.Spartan
open import UF.Base
open import UF.Embeddings
open import UF.Equiv
open import UF.EquivalenceExamples
open import UF.FunExt
open import UF.Hedberg
open import UF.Lower-FunExt
open import UF.Sets
open import UF.Subsingletons
open import UF.Subsingletons-FunExt
open import UF.SubtypeClassifier

ฮฉ-is-set : funext ๐“ค ๐“ค โ†’ propext ๐“ค โ†’ is-set (ฮฉ ๐“ค)
ฮฉ-is-set {๐“ค} fe pe = Id-collapsibles-are-sets pc
 where
  A : (p q : ฮฉ ๐“ค) โ†’ ๐“ค ฬ‡
  A p q = (p holds โ†’ q holds) ร— (q holds โ†’ p holds)

  A-is-prop : (p q : ฮฉ ๐“ค) โ†’ is-prop (A p q)
  A-is-prop p q = ฮฃ-is-prop (ฮ -is-prop fe
                              (ฮป _ โ†’ holds-is-prop q))
                              (ฮป _ โ†’ ฮ -is-prop fe (ฮป _ โ†’ holds-is-prop p))

  g : (p q : ฮฉ ๐“ค) โ†’ p ๏ผ q โ†’ A p q
  g p q e = (b , c)
   where
    a : p holds ๏ผ q holds
    a = ap _holds e

    b : p holds โ†’ q holds
    b = transport id a

    c : q holds โ†’ p holds
    c = transport id (a โปยน)

  h  : (p q : ฮฉ ๐“ค) โ†’ A p q โ†’ p ๏ผ q
  h p q (u , v) = ฮฉ-extensionality pe fe u v

  f  : (p q : ฮฉ ๐“ค) โ†’ p ๏ผ q โ†’ p ๏ผ q
  f p q e = h p q (g p q e)

  wconstant-f : (p q : ฮฉ ๐“ค) (d e : p ๏ผ q) โ†’ f p q d ๏ผ f p q e
  wconstant-f p q d e = ap (h p q) (A-is-prop p q (g p q d) (g p q e))

  pc : {p q : ฮฉ ๐“ค} โ†’ ฮฃ f ๊ž‰ (p ๏ผ q โ†’ p ๏ผ q) , wconstant f
  pc {p} {q} = (f p q , wconstant-f p q)

equal-โŠค-โ‰ƒ : propext ๐“ค
          โ†’ funext ๐“ค ๐“ค
          โ†’ (p : ฮฉ ๐“ค) โ†’ (p ๏ผ โŠค) โ‰ƒ (p holds)
equal-โŠค-โ‰ƒ {๐“ค} pe fe p = logically-equivalent-props-are-equivalent
                         (ฮฉ-is-set fe pe)
                         (holds-is-prop p)
                         (equal-โŠค-gives-holds p)
                         (holds-gives-equal-โŠค pe fe p)

equal-โŠฅ-โ‰ƒ : propext ๐“ค
          โ†’ funext ๐“ค ๐“ค
          โ†’ (p : ฮฉ ๐“ค) โ†’ (p ๏ผ โŠฅ) โ‰ƒ ยฌ (p holds)
equal-โŠฅ-โ‰ƒ {๐“ค} pe fe p = logically-equivalent-props-are-equivalent
                         (ฮฉ-is-set fe pe)
                         (negations-are-props (lower-funext ๐“ค ๐“ค fe))
                         (equal-โŠฅ-gives-fails p)
                         (fails-gives-equal-โŠฅ pe fe p)

๐Ÿš-to-ฮฉ : ๐Ÿš โ†’ ฮฉ ๐“ค
๐Ÿš-to-ฮฉ โ‚€ = โŠฅ
๐Ÿš-to-ฮฉ โ‚ = โŠค

module _ (fe : funext ๐“ค ๐“ค) (pe : propext ๐“ค) where

 ๐Ÿš-to-ฮฉ-is-embedding : is-embedding (๐Ÿš-to-ฮฉ {๐“ค})
 ๐Ÿš-to-ฮฉ-is-embedding _ (โ‚€ , p) (โ‚€ , q) = to-ฮฃ-๏ผ (refl , ฮฉ-is-set fe pe p q)
 ๐Ÿš-to-ฮฉ-is-embedding _ (โ‚€ , p) (โ‚ , q) = ๐Ÿ˜-elim (โŠฅ-is-not-โŠค (p โˆ™ q โปยน))
 ๐Ÿš-to-ฮฉ-is-embedding _ (โ‚ , p) (โ‚€ , q) = ๐Ÿ˜-elim (โŠฅ-is-not-โŠค (q โˆ™ p โปยน))
 ๐Ÿš-to-ฮฉ-is-embedding _ (โ‚ , p) (โ‚ , q) = to-ฮฃ-๏ผ (refl , ฮฉ-is-set fe pe p q)

 ๐Ÿš-to-ฮฉ-fiber : (p : ฮฉ ๐“ค) โ†’ fiber ๐Ÿš-to-ฮฉ p โ‰ƒ (ยฌ (p holds) + p holds)
 ๐Ÿš-to-ฮฉ-fiber p =
  fiber (๐Ÿš-to-ฮฉ {๐“ค}) p           โ‰ƒโŸจ โ‰ƒ-refl _ โŸฉ
  (ฮฃ n ๊ž‰ ๐Ÿš , ๐Ÿš-to-ฮฉ {๐“ค} n ๏ผ p ) โ‰ƒโŸจ Iโ‚€ โŸฉ
  (โŠฅ ๏ผ p) + (โŠค ๏ผ p)            โ‰ƒโŸจ Iโ‚ โŸฉ
  (ยฌ (p holds) + p holds)        โ– 
    where
     Iโ‚€ = alternative-+
     Iโ‚ = +-cong
           (๏ผ-flip โ— equal-โŠฅ-โ‰ƒ pe fe p)
           (๏ผ-flip โ— equal-โŠค-โ‰ƒ pe fe p)

\end{code}