Skip to content

MGS.Powerset

Martin Escardo 1st May 2020.

This is ported from the Midlands Graduate School 2019 lecture notes

 https://www.cs.bham.ac.uk/~mhe/HoTT-UF.in-Agda-Lecture-Notes/HoTT-UF-Agda.html
 https://github.com/martinescardo/HoTT-UF.Agda-Lecture-Notes


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

module MGS.Powerset where

open import MGS.More-FunExt-Consequences public

propext :  𝓤   𝓤  ̇
propext 𝓤 = {P Q : 𝓤 ̇ }  is-prop P  is-prop Q  (P  Q)  (Q  P)  P  Q

global-propext : 𝓤ω
global-propext =  {𝓤}  propext 𝓤

univalence-gives-propext : is-univalent 𝓤  propext 𝓤
univalence-gives-propext ua {P} {Q} i j f g = Eq→Id ua P Q γ
 where
  γ : P  Q
  γ = logically-equivalent-subsingletons-are-equivalent P Q i j (f , g)

Id-from-subsingleton : propext 𝓤  dfunext 𝓤 𝓤
                      (P : 𝓤 ̇ )
                      is-subsingleton P
                      (X : 𝓤 ̇ )  is-subsingleton (P  X)

Id-from-subsingleton {𝓤} pe fe P i = Hedberg P  X  h X , k X)
 where
  module _ (X : 𝓤 ̇ ) where
   f : P  X  is-subsingleton X × (P  X)
   f p = transport is-subsingleton p i , Id→fun p , (Id→fun (p ⁻¹))

   g : is-subsingleton X × (P  X)  P  X
   g (l , φ , ψ) = pe i l φ ψ

   h : P  X  P  X
   h = g  f

   j : is-subsingleton (is-subsingleton X × (P  X))
   j = ×-is-subsingleton'
        ((λ (_ : P  X)  being-subsingleton-is-subsingleton fe) ,
          (l : is-subsingleton X)  ×-is-subsingleton
                                       (Π-is-subsingleton fe  p  l))
                                       (Π-is-subsingleton fe  x  i))))

   k : wconstant h
   k p q = ap g (j (f p) (f q))

subsingleton-univalence : propext 𝓤  dfunext 𝓤 𝓤
                         (P : 𝓤 ̇ )
                         is-subsingleton P
                         (X : 𝓤 ̇ )  is-equiv (Id→Eq P X)

subsingleton-univalence pe fe P i X = γ
 where
  l : P  X  is-subsingleton X
  l e = equiv-to-subsingleton (≃-sym e) i

  eqtoid : P  X  P  X
  eqtoid e = pe i (equiv-to-subsingleton (≃-sym e) i)
                   e   ≃-sym e 

  m : is-subsingleton (P  X)
  m (f , k) (f' , k') = to-subtype-=
                          (being-equiv-is-subsingleton fe fe)
                          (fe  x  j (f x) (f' x)))
    where
     j : is-subsingleton X
     j = equiv-to-subsingleton (≃-sym (f , k)) i

  ε : (e : P  X)  Id→Eq P X (eqtoid e)  e
  ε e = m (Id→Eq P X (eqtoid e)) e

  η : (q : P  X)  eqtoid (Id→Eq P X q)  q
  η q = Id-from-subsingleton pe fe P i X (eqtoid (Id→Eq P X q)) q

  γ : is-equiv (Id→Eq P X)
  γ = invertibles-are-equivs (Id→Eq P X) (eqtoid , η , ε)

subsingleton-univalence-≃ : propext 𝓤  dfunext 𝓤 𝓤
                           (X P : 𝓤 ̇ )  is-subsingleton P  (P  X)  (P  X)

subsingleton-univalence-≃ pe fe X P i = Id→Eq P X ,
                                        subsingleton-univalence pe fe P i X

Ω : (𝓤 : Universe)  𝓤  ̇
Ω 𝓤 = Σ P  𝓤 ̇ , is-subsingleton P

_holds : Ω 𝓤  𝓤 ̇
_holds (P , i) = P

holds-is-subsingleton : (p : Ω 𝓤)  is-subsingleton (p holds)
holds-is-subsingleton (P , i) = i

Ω-ext : dfunext 𝓤 𝓤  propext 𝓤  {p q : Ω 𝓤}
       (p holds  q holds)  (q holds  p holds)  p  q

Ω-ext {𝓤} fe pe {p} {q} f g = to-subtype-=
                                  _  being-subsingleton-is-subsingleton fe)
                                 (pe (holds-is-subsingleton p) (holds-is-subsingleton q) f g)

Ω-is-set : dfunext 𝓤 𝓤  propext 𝓤  is-set (Ω 𝓤)
Ω-is-set {𝓤} fe pe = types-with-wconstant-=-endomaps-are-sets (Ω 𝓤) c
 where
  A : (p q : Ω 𝓤)  𝓤 ̇
  A p q = (p holds  q holds) × (q holds  p holds)

  i : (p q : Ω 𝓤)  is-subsingleton (A p q)
  i p q = Σ-is-subsingleton
           (Π-is-subsingleton fe
              _  holds-is-subsingleton q))
              _  Π-is-subsingleton fe  _  holds-is-subsingleton p))

  g : (p q : Ω 𝓤)  p  q  A p q
  g p q e = (u , v)
   where
    a : p holds  q holds
    a = ap _holds e

    u : p holds  q holds
    u = Id→fun a

    v : q holds  p holds
    v = Id→fun (a ⁻¹)

  h : (p q : Ω 𝓤)  A p q  p  q
  h p q (u , v) = Ω-ext fe pe u v

  f : (p q : Ω 𝓤)  p  q  p  q
  f p q e = h p q (g p q e)

  k : (p q : Ω 𝓤) (d e : p  q)  f p q d  f p q e
  k p q d e = ap (h p q) (i p q (g p q d) (g p q e))

  c : (p q : Ω 𝓤)  Σ f  (p  q  p  q), wconstant f
  c p q = (f p q , k p q)

powersets-are-sets : hfunext 𝓤 (𝓥 )  dfunext 𝓥 𝓥  propext 𝓥
                    {X : 𝓤 ̇ }  is-set (X  Ω 𝓥)

powersets-are-sets fe fe' pe = Π-is-set fe  x  Ω-is-set fe' pe)

𝓟 : 𝓤 ̇  𝓤  ̇
𝓟 {𝓤} X = X  Ω 𝓤

powersets-are-sets' : Univalence
                     {X : 𝓤 ̇ }  is-set (𝓟 X)

powersets-are-sets' {𝓤} ua = powersets-are-sets
                               (univalence-gives-hfunext' (ua 𝓤) (ua (𝓤 )))
                               (univalence-gives-dfunext (ua 𝓤))
                               (univalence-gives-propext (ua 𝓤))

_∈_ : {X : 𝓤 ̇ }  X  𝓟 X  𝓤 ̇
x  A = A x holds

_⊆_ : {X : 𝓤 ̇ }  𝓟 X  𝓟 X  𝓤 ̇
A  B =  x  x  A  x  B

∈-is-subsingleton : {X : 𝓤 ̇ } (A : 𝓟 X) (x : X)  is-subsingleton (x  A)
∈-is-subsingleton A x = holds-is-subsingleton (A x)

⊆-is-subsingleton : dfunext 𝓤 𝓤
                   {X : 𝓤 ̇ } (A B : 𝓟 X)  is-subsingleton (A  B)

⊆-is-subsingleton fe A B = Π-is-subsingleton fe
                             x  Π-is-subsingleton fe
                             _  ∈-is-subsingleton B x))

⊆-refl : {X : 𝓤 ̇ } (A : 𝓟 X)  A  A
⊆-refl A x = 𝑖𝑑 (x  A)

⊆-refl-consequence : {X : 𝓤 ̇ } (A B : 𝓟 X)
                    A  B  (A  B) × (B  A)

⊆-refl-consequence {X} A A (refl A) = ⊆-refl A , ⊆-refl A

subset-extensionality : propext 𝓤  dfunext 𝓤 𝓤  dfunext 𝓤 (𝓤 )
                       {X : 𝓤 ̇ } {A B : 𝓟 X}
                       A  B  B  A  A  B

subset-extensionality pe fe fe' {X} {A} {B} h k = fe' φ
 where
  φ : (x : X)  A x  B x
  φ x = to-subtype-=
            _  being-subsingleton-is-subsingleton fe)
           (pe (holds-is-subsingleton (A x)) (holds-is-subsingleton (B x))
               (h x) (k x))

subset-extensionality' : Univalence
                        {X : 𝓤 ̇ } {A B : 𝓟 X}
                        A  B  B  A  A  B

subset-extensionality' {𝓤} ua = subset-extensionality
                                 (univalence-gives-propext (ua 𝓤))
                                 (univalence-gives-dfunext (ua 𝓤))
                                 (univalence-gives-dfunext' (ua 𝓤) (ua (𝓤 )))
infix  40 _∈_