Skip to content

MGS.Basic-UF

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.Basic-UF where

open import MGS.MLTT public

is-center : (X : 𝓤 ̇ )  X  𝓤 ̇
is-center X c = (x : X)  c  x

is-singleton : 𝓤 ̇  𝓤 ̇
is-singleton X = Σ c  X , is-center X c

𝟙-is-singleton : is-singleton 𝟙
𝟙-is-singleton =  , 𝟙-induction  x    x) (refl )

center : (X : 𝓤 ̇ )  is-singleton X  X
center X (c , φ) = c

centrality : (X : 𝓤 ̇ ) (i : is-singleton X) (x : X)  center X i  x
centrality X (c , φ) = φ

is-subsingleton : 𝓤 ̇  𝓤 ̇
is-subsingleton X = (x y : X)  x  y

𝟘-is-subsingleton : is-subsingleton 𝟘
𝟘-is-subsingleton x y = !𝟘 (x  y) x

singletons-are-subsingletons : (X : 𝓤 ̇ )  is-singleton X  is-subsingleton X
singletons-are-subsingletons X (c , φ) x y = x =⟨ (φ x)⁻¹ 
                                             c =⟨ φ y 
                                             y 

𝟙-is-subsingleton : is-subsingleton 𝟙
𝟙-is-subsingleton = singletons-are-subsingletons 𝟙 𝟙-is-singleton

pointed-subsingletons-are-singletons : (X : 𝓤 ̇ )
                                      X  is-subsingleton X  is-singleton X

pointed-subsingletons-are-singletons X x s = (x , s x)

singleton-iff-pointed-and-subsingleton : {X : 𝓤 ̇ }
                                        is-singleton X  (X × is-subsingleton X)

singleton-iff-pointed-and-subsingleton {𝓤} {X} = (a , b)
 where
  a : is-singleton X  X × is-subsingleton X
  a s = center X s , singletons-are-subsingletons X s

  b : X × is-subsingleton X  is-singleton X
  b (x , t) = pointed-subsingletons-are-singletons X x t

is-prop is-truth-value : 𝓤 ̇  𝓤 ̇
is-prop        = is-subsingleton
is-truth-value = is-subsingleton

is-set : 𝓤 ̇  𝓤 ̇
is-set X = (x y : X)  is-subsingleton (x  y)

EM EM' :  𝓤  𝓤  ̇
EM  𝓤 = (X : 𝓤 ̇ )  is-subsingleton X  X + ¬ X
EM' 𝓤 = (X : 𝓤 ̇ )  is-subsingleton X  is-singleton X + is-empty X

EM-gives-EM' : EM 𝓤  EM' 𝓤
EM-gives-EM' em X s = γ (em X s)
 where
  γ : X + ¬ X  is-singleton X + is-empty X
  γ (inl x) = inl (pointed-subsingletons-are-singletons X x s)
  γ (inr x) = inr x

EM'-gives-EM : EM' 𝓤  EM 𝓤
EM'-gives-EM em' X s = γ (em' X s)
 where
  γ : is-singleton X + is-empty X  X + ¬ X
  γ (inl i) = inl (center X i)
  γ (inr x) = inr x

no-unicorns : ¬ (Σ X  𝓤 ̇ , is-subsingleton X × ¬ (is-singleton X) × ¬ (is-empty X))
no-unicorns (X , i , f , g) = c
 where
  e : is-empty X
  e x = f (pointed-subsingletons-are-singletons X x i)

  c : 𝟘
  c = g e

module magmas where

 Magma : (𝓤 : Universe)  𝓤  ̇
 Magma 𝓤 = Σ X  𝓤 ̇ , is-set X × (X  X  X)

 ⟨_⟩ : Magma 𝓤  𝓤 ̇
  X , i , _·_  = X

 magma-is-set : (M : Magma 𝓤)  is-set  M 
 magma-is-set (X , i , _·_) = i

 magma-operation : (M : Magma 𝓤)   M    M    M 
 magma-operation (X , i , _·_) = _·_

 syntax magma-operation M x y = x ·⟨ M  y

 is-magma-hom : (M N : Magma 𝓤)  ( M    N )  𝓤 ̇
 is-magma-hom M N f = (x y :  M )  f (x ·⟨ M  y)  f x ·⟨ N  f y

 id-is-magma-hom : (M : Magma 𝓤)  is-magma-hom M M (𝑖𝑑  M )
 id-is-magma-hom M = λ (x y :  M )  refl (x ·⟨ M  y)

 is-magma-iso : (M N : Magma 𝓤)  ( M    N )  𝓤 ̇
 is-magma-iso M N f = is-magma-hom M N f
                    × (Σ g  ( N    M ), is-magma-hom N M g
                                            × (g  f  𝑖𝑑  M )
                                            × (f  g  𝑖𝑑  N ))

 id-is-magma-iso : (M : Magma 𝓤)  is-magma-iso M M (𝑖𝑑  M )
 id-is-magma-iso M = id-is-magma-hom M ,
                     𝑖𝑑  M  ,
                     id-is-magma-hom M ,
                     refl ,
                     refl

 Id→iso : {M N : Magma 𝓤}  M  N   M    N 
 Id→iso p = transport ⟨_⟩ p

 Id→iso-is-iso : {M N : Magma 𝓤} (p : M  N)  is-magma-iso M N (Id→iso p)
 Id→iso-is-iso (refl M) = id-is-magma-iso M

 _≅ₘ_ : Magma 𝓤  Magma 𝓤  𝓤 ̇
 M ≅ₘ N = Σ f  ( M    N ), is-magma-iso M N f

 magma-Id→iso : {M N : Magma 𝓤}  M  N  M ≅ₘ N
 magma-Id→iso p = (Id→iso p , Id→iso-is-iso p)

 ∞-Magma : (𝓤 : Universe)  𝓤  ̇
 ∞-Magma 𝓤 = Σ X  𝓤 ̇ , (X  X  X)

module monoids where

 left-neutral : {X : 𝓤 ̇ }  X  (X  X  X)  𝓤 ̇
 left-neutral e _·_ =  x  e · x  x

 right-neutral : {X : 𝓤 ̇ }  X  (X  X  X)  𝓤 ̇
 right-neutral e _·_ =  x  x · e  x

 associative : {X : 𝓤 ̇ }  (X  X  X)  𝓤 ̇
 associative _·_ =  x y z  (x · y) · z  x · (y · z)

 Monoid : (𝓤 : Universe)  𝓤  ̇
 Monoid 𝓤 = Σ X  𝓤 ̇ , is-set X
                      × (Σ ·  (X  X  X) , (Σ e  X , (left-neutral e ·)
                                                      × (right-neutral e ·)
                                                      × (associative ·)))

refl-left : {X : 𝓤 ̇ } {x y : X} {p : x  y}  refl x  p  p
refl-left {𝓤} {X} {x} {x} {refl x} = refl (refl x)

refl-right : {X : 𝓤 ̇ } {x y : X} {p : x  y}  p  refl y  p
refl-right {𝓤} {X} {x} {y} {p} = refl p

∙assoc : {X : 𝓤 ̇ } {x y z t : X} (p : x  y) (q : y  z) (r : z  t)
        (p  q)  r  p  (q  r)

∙assoc p q (refl z) = refl (p  q)

⁻¹-left∙ : {X : 𝓤 ̇ } {x y : X} (p : x  y)
          p ⁻¹  p  refl y

⁻¹-left∙ (refl x) = refl (refl x)

⁻¹-right∙ : {X : 𝓤 ̇ } {x y : X} (p : x  y)
           p  p ⁻¹  refl x

⁻¹-right∙ (refl x) = refl (refl x)

⁻¹-involutive : {X : 𝓤 ̇ } {x y : X} (p : x  y)
               (p ⁻¹)⁻¹  p

⁻¹-involutive (refl x) = refl (refl x)

ap-refl : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X  Y) (x : X)
         ap f (refl x)  refl (f x)

ap-refl f x = refl (refl (f x))

ap-∙ : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X  Y) {x y z : X} (p : x  y) (q : y  z)
      ap f (p  q)  ap f p  ap f q

ap-∙ f p (refl y) = refl (ap f p)

ap⁻¹ : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X  Y) {x y : X} (p : x  y)
      (ap f p)⁻¹  ap f (p ⁻¹)

ap⁻¹ f (refl x) = refl (refl (f x))

ap-id : {X : 𝓤 ̇ } {x y : X} (p : x  y)
       ap id p  p

ap-id (refl x) = refl (refl x)

ap-∘ : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } {Z : 𝓦 ̇ }
       (f : X  Y) (g : Y  Z) {x y : X} (p : x  y)
      ap (g  f) p  (ap g  ap f) p

ap-∘ f g (refl x) = refl (refl (g (f x)))

transport∙ : {X : 𝓤 ̇ } (A : X  𝓥 ̇ ) {x y z : X} (p : x  y) (q : y  z)
            transport A (p  q)  transport A q  transport A p

transport∙ A p (refl y) = refl (transport A p)

Nat : {X : 𝓤 ̇ }  (X  𝓥 ̇ )  (X  𝓦 ̇ )  𝓤  𝓥  𝓦 ̇
Nat A B = (x : domain A)  A x  B x

Nats-are-natural : {X : 𝓤 ̇ } (A : X  𝓥 ̇ ) (B : X  𝓦 ̇ ) (τ : Nat A B)
                  {x y : X} (p : x  y)
                  τ y  transport A p  transport B p  τ x

Nats-are-natural A B τ (refl x) = refl (τ x)

NatΣ : {X : 𝓤 ̇ } {A : X  𝓥 ̇ } {B : X  𝓦 ̇ }  Nat A B  Σ A  Σ B
NatΣ τ (x , a) = (x , τ x a)

transport-ap : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (A : Y  𝓦 ̇ )
               (f : X  Y) {x x' : X} (p : x  x') (a : A (f x))
              transport (A  f) p a  transport A (ap f p) a

transport-ap A f (refl x) a = refl a

apd : {X : 𝓤 ̇ } {A : X  𝓥 ̇ } (f : (x : X)  A x) {x y : X}
      (p : x  y)  transport A p (f x)  f y

apd f (refl x) = refl (f x)

to-Σ-= : {X : 𝓤 ̇ } {A : X  𝓥 ̇ } {σ τ : Σ A}
        (Σ p  pr₁ σ  pr₁ τ , transport A p (pr₂ σ)  pr₂ τ)
        σ  τ

to-Σ-= (refl x , refl a) = refl (x , a)

from-Σ-= : {X : 𝓤 ̇ } {A : X  𝓥 ̇ } {σ τ : Σ A}
          σ  τ
          Σ p  pr₁ σ  pr₁ τ , transport A p (pr₂ σ)  pr₂ τ

from-Σ-= (refl (x , a)) = (refl x , refl a)

to-Σ-=' : {X : 𝓤 ̇ } {A : X  𝓥 ̇ } {x : X} {a a' : A x}
         a  a'  Id (Σ A) (x , a) (x , a')

to-Σ-=' {𝓤} {𝓥} {X} {A} {x} = ap  -  (x , -))

transport-× : {X : 𝓤 ̇ } (A : X  𝓥 ̇ ) (B : X  𝓦 ̇ )
                {x y : X} (p : x  y) {c : A x × B x}

             transport  x  A x × B x) p c
             (transport A p (pr₁ c) , transport B p (pr₂ c))

transport-× A B (refl _) = refl _

transportd : {X : 𝓤 ̇ } (A : X  𝓥 ̇ ) (B : (x : X)  A x  𝓦 ̇ )
             {x : X}  (a : A x) {y : X} (p : x  y)
            B x a  B y (transport A p a)

transportd A B a (refl x) = id

transport-Σ : {X : 𝓤 ̇ } (A : X  𝓥 ̇ ) (B : (x : X)  A x  𝓦 ̇ )
              {x : X} (y : X) (p : x  y) (a : A x) {b : B x a}
             transport  x  Σ y  A x , B x y) p (a , b)
             transport A p a , transportd A B a p b

transport-Σ A B {x} x (refl x) a {b} = refl (a , b)