Martin Escardo, 6th December 2018
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import MLTT.Spartan
module Slice.Monad (π£ : Universe) where
open import UF.Base
open import UF.Subsingletons
open import UF.Subsingletons-FunExt
open import UF.Equiv
open import UF.EquivalenceExamples
open import UF.FunExt
open import UF.Univalence
open import UF.UA-FunExt
open import Slice.Construction π£
open import Slice.IdentityViaSIP π£
\end{code}
Constructions:
\begin{code}
πΜ : {X : π€ Μ } {Y : π₯ Μ } β (X β Y) β π X β π Y
πΜ f (P , Ο) = P , f β Ο
_β― : {X : π€ Μ } {Y : π₯ Μ } β (X β π Y) β (π X β π Y)
_β― f (P , Ο ) = (Ξ£ p κ P , source (f (Ο p))) ,
(Ξ» Ο β family (f (Ο (prβ Ο))) (prβ Ο))
ΞΌ : {X : π€ Μ } β π (π X) β π X
ΞΌ = id β―
πΜ-id : {X : π€ Μ }
β πΜ id οΌ id
πΜ-id {π€} {X} = refl {π€ β (π£ βΊ)} {π X β π X}
πΜ-β : {X : π€ Μ } {Y : π₯ Μ } {Z : π¦ Μ } (f : X β Y) (g : Y β Z)
β πΜ (g β f) οΌ πΜ g β πΜ f
πΜ-β f g = refl
Ξ·-natural : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y)
β Ξ· β f οΌ πΜ f β Ξ·
Ξ·-natural f = refl
Ξ·-naturalβΌ : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y)
β Ξ· β f βΌ πΜ f β Ξ·
Ξ·-naturalβΌ f _ = refl
ΞΌ-naturalβΌ : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y)
β πΜ f β ΞΌ βΌ ΞΌ β πΜ (πΜ f)
ΞΌ-naturalβΌ f _ = refl
ΞΌ-natural : funext (π£ βΊ β π€) (π£ βΊ β π₯)
β {X : π€ Μ } {Y : π₯ Μ } (f : X β Y)
β πΜ f β ΞΌ οΌ ΞΌ β πΜ (πΜ f)
ΞΌ-natural fe f = dfunext fe (ΞΌ-naturalβΌ f)
π-unit-rightβ : {X : π€ Μ } (l : π X)
β ΞΌ (πΜ Ξ· l) β l
π-unit-rightβ {π€} {X} (P , Ο) = e , refl
where
e : P Γ π β P
e = π-rneutral
π-unit-leftβ : {X : π€ Μ } (l : π X)
β ΞΌ (Ξ· l) β l
π-unit-leftβ (P , Ο) = e , refl
where
e : π Γ P β P
e = π-lneutral
π-unit-rightβΌ : is-univalent π£ β {X : π€ Μ }
β ΞΌ β πΜ Ξ· βΌ id
π-unit-rightβΌ {π€} ua {X} l = β-gives-οΌ ua (π-unit-rightβ {π€} {X} l)
π-unit-leftβΌ : is-univalent π£ β {X : π€ Μ }
β ΞΌ β Ξ· βΌ id
π-unit-leftβΌ {π€} ua {X} l = β-gives-οΌ ua (π-unit-leftβ {π€} {X} l)
π-assocβ : {X : π€ Μ } (l : π (π (π X))) β ΞΌ (ΞΌ l) β ΞΌ (πΜ ΞΌ l)
π-assocβ (P , Ο) = Ξ£-assoc , refl
π-assocβΌ : is-univalent π£ β {X : π€ Μ } β ΞΌ β ΞΌ βΌ ΞΌ β πΜ ΞΌ
π-assocβΌ {π€} ua {X} l = β-gives-οΌ ua (π-assocβ {π€} {X} l)
π-Ο : {X : π€ Μ } {Y : π₯ Μ } β X Γ π Y β π (X Γ Y)
π-Ο (x , m) = πΜ (Ξ» y β (x , y)) m
π-Ο : {X : π€ Μ } {Y : π₯ Μ } β π X Γ Y β π (X Γ Y)
π-Ο (l , y) = πΜ (Ξ» x β (x , y)) l
π-comm : {X : π€ Μ } {Y : π₯ Μ } {l : π X Γ π Y}
β ΞΌ (πΜ π-Ο (π-Ο l)) βΒ· ΞΌ (πΜ π-Ο (π-Ο l))
π-comm = Γ-comm , (Ξ» z β refl)
π-m : {X : π€ Μ } {Y : π₯ Μ } β π X Γ π Y β π (X Γ Y)
π-m (l , m) = ((Ξ» x β curry π-Ο x m)β―) l
Kleisli-Lawβ : {X : π€ Μ } (l : π X) β (Ξ· β―) l β l
Kleisli-Lawβ (P , Ο) = π-rneutral , refl
Kleisli-Lawβ : {X : π€ Μ } {Y : π₯ Μ } (f : X β π Y) (x : X) β (f β―) (Ξ· x) β f x
Kleisli-Lawβ f x = π-lneutral , refl
Kleisli-Lawβ : {X : π₯ Μ } {Y : π¦ Μ } {Z : π£ Μ } (f : X β π Y) (g : Y β π Z) (l : π X)
β (g β― β f β―) l β ((g β― β f)β―) l
Kleisli-Lawβ f g l = Ξ£-assoc , refl
πΜ' : {X : π€ Μ } {Y : π₯ Μ } β (X β Y) β π X β π Y
πΜ' f = (Ξ· β f)β―
πΜ-agreement : {X : π€ Μ } {Y : π₯ Μ } (f : X β Y) (l : π X)
β πΜ' f l βΒ· πΜ f l
πΜ-agreement {π€} {π₯} {X} {Y} f (P , Ο) = π-rneutral , Ξ» _ β refl
\end{code}