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}