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)
Ξ©-extensionality-β : propext π€
β funext π€ π€
β {p q : Ξ© π€}
β ((p holds) β (q holds)) β (p οΌ q)
Ξ©-extensionality-β pe fe {p} {q} =
logically-equivalent-props-are-equivalent
(Γ-is-prop
(Ξ -is-prop fe (Ξ» _ β holds-is-prop q))
(Ξ -is-prop fe (Ξ» _ β holds-is-prop p)))
(Ξ©-is-set fe pe)
(Ξ» (f , g) β to-Ξ©-οΌ fe (pe (holds-is-prop p) (holds-is-prop q) f g))
(Ξ» {refl β id , id})
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 ββ¨by-definitionβ©
(Ξ£ 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}