Martin Escardo and Paulo Oliva, April 2024.

The type of discrete graphic monoids.

\begin{code}

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

module DiscreteGraphicMonoids.Type where

open import MLTT.Spartan
open import UF.DiscreteAndSeparated
open import UF.Sets
open import UF.Subsingletons
open import UF.Subsingletons-FunExt
open import UF.FunExt

graphical : {X : ๐“ค ฬ‡ } โ†’ (X โ†’ X โ†’ X) โ†’ ๐“ค ฬ‡
graphical _ยท_ = โˆ€ x y โ†’ (x ยท y) ยท x ๏ผ x ยท y

monoid-structure : ๐“ค ฬ‡ โ†’ ๐“ค ฬ‡
monoid-structure X = X ร— (X โ†’ X โ†’ X)

discrete-graphic-monoid-axioms : (X : ๐“ค ฬ‡ ) โ†’ monoid-structure X โ†’ ๐“ค ฬ‡
discrete-graphic-monoid-axioms X (e , _ยท_) =
   is-discrete X
 ร— left-neutral  e _ยท_
 ร— right-neutral e _ยท_
 ร— associative'    _ยท_
 ร— graphical       _ยท_

discrete-graphic-monoid-axioms-is-prop
 : FunExt
 โ†’ (X : ๐“ค ฬ‡ ) (s : monoid-structure X)
 โ†’ is-prop (discrete-graphic-monoid-axioms X s)
discrete-graphic-monoid-axioms-is-prop fe X s =
 prop-criterion (ฮป axioms@(d , _) โ†’
  ร—โ‚…-is-prop
  (being-discrete-is-prop fe)
  (ฮ -is-prop (fe _ _) (ฮป x โ†’ discrete-types-are-sets d))
  (ฮ -is-prop (fe _ _) (ฮป x โ†’ discrete-types-are-sets d))
  (ฮ โ‚ƒ-is-prop (fe _ _) (ฮป x y z โ†’ discrete-types-are-sets d))
  (ฮ โ‚‚-is-prop (fe _ _) (ฮป x y โ†’ discrete-types-are-sets d)))

DGM : (๐“ค : Universe) โ†’ ๐“ค โบ ฬ‡
DGM ๐“ค = ฮฃ M ๊ž‰ ๐“ค ฬ‡
      , ฮฃ s ๊ž‰ monoid-structure M
      , discrete-graphic-monoid-axioms M s

โŸจ_โŸฉ : DGM ๐“ค โ†’ ๐“ค ฬ‡
โŸจ M , (e , _ยท_) , d , ln , rn , a , gl โŸฉ = M

unit : (๐“œ : DGM ๐“ค)
     โ†’ โŸจ ๐“œ โŸฉ
unit (M , (e , _ยท_) , d , ln , rn , a , gl) = e

syntax unit ๐“œ = eโŸจ ๐“œ โŸฉ

multiplication : (๐“œ : DGM ๐“ค)
               โ†’ โŸจ ๐“œ โŸฉ โ†’ โŸจ ๐“œ โŸฉ โ†’ โŸจ ๐“œ โŸฉ
multiplication (M , (e , _ยท_) , d , ln , rn , a , gl) = _ยท_

syntax multiplication ๐“œ x y = x ยทโŸจ ๐“œ โŸฉ y

discreteness : (๐“œ : DGM ๐“ค) โ†’ is-discrete โŸจ ๐“œ โŸฉ
discreteness (M , (e , _ยท_) , d , ln , rn , a , gl) = d

underlying-type-is-set : (๐“œ : DGM ๐“ค) โ†’ is-set โŸจ ๐“œ โŸฉ
underlying-type-is-set ๐“œ = discrete-types-are-sets (discreteness ๐“œ)

left-neutrality : (๐“œ : DGM ๐“ค)
                โ†’ left-neutral (eโŸจ ๐“œ โŸฉ) (multiplication ๐“œ)
left-neutrality (M , (e , _ยท_) , d , ln , rn , a , gl) = ln

right-neutrality : (๐“œ : DGM ๐“ค)
                 โ†’ right-neutral (eโŸจ ๐“œ โŸฉ) (multiplication ๐“œ)
right-neutrality (M , (e , _ยท_) , d , ln , rn , a , gl) = rn

associativity : (๐“œ : DGM ๐“ค)
              โ†’ associative' (multiplication ๐“œ)
associativity (M , (e , _ยท_) , d , ln , rn , a , gl) = a

graphicality : (๐“œ : DGM ๐“ค)
             โ†’ graphical (multiplication ๐“œ)
graphicality (M , (e , _ยท_) , d , ln , rn , a , gl) = gl

idempotency : (๐“œ : DGM ๐“ค) (x : โŸจ ๐“œ โŸฉ) โ†’ x ยทโŸจ ๐“œ โŸฉ x ๏ผ x
idempotency ๐“œ x =
 x ยท x       ๏ผโŸจ ap (_ยท x) ((right-neutrality ๐“œ x)โปยน) โŸฉ
 (x ยท e) ยท x ๏ผโŸจ graphicality ๐“œ x e โŸฉ
 x ยท e       ๏ผโŸจ right-neutrality ๐“œ x โŸฉ
 x           โˆŽ
 where
  e   = unit ๐“œ
  _ยท_ = multiplication ๐“œ

is-hom : (๐“œ : DGM ๐“ค) (๐“ : DGM ๐“ฅ) โ†’ (โŸจ ๐“œ โŸฉ โ†’ โŸจ ๐“ โŸฉ) โ†’ ๐“ค โŠ” ๐“ฅ ฬ‡
is-hom ๐“œ ๐“ f = (f eโŸจ ๐“œ โŸฉ ๏ผ eโŸจ ๐“ โŸฉ)
               ร— (โˆ€ x y โ†’ f (x ยทโŸจ ๐“œ โŸฉ y) ๏ผ f x ยทโŸจ ๐“ โŸฉ f y)

homs-preserve-unit : (๐“œ : DGM ๐“ค) (๐“ : DGM ๐“ฅ)
                   โ†’ (f : โŸจ ๐“œ โŸฉ โ†’ โŸจ ๐“ โŸฉ)
                   โ†’ is-hom ๐“œ ๐“ f
                   โ†’ f eโŸจ ๐“œ โŸฉ ๏ผ eโŸจ ๐“ โŸฉ
homs-preserve-unit _ _ _ (u , m) = u

homs-preserve-mul : (๐“œ : DGM ๐“ค) (๐“ : DGM ๐“ฅ)
                  โ†’ (f : โŸจ ๐“œ โŸฉ โ†’ โŸจ ๐“ โŸฉ)
                  โ†’ is-hom ๐“œ ๐“ f
                  โ†’ (x y : โŸจ ๐“œ โŸฉ) โ†’ f (x ยทโŸจ ๐“œ โŸฉ y) ๏ผ f x ยทโŸจ ๐“ โŸฉ f y
homs-preserve-mul _ _ _ (u , m) = m

id-is-hom : (๐“œ : DGM ๐“ค)
          โ†’ is-hom ๐“œ ๐“œ id
id-is-hom ๐“œ = (refl , (ฮป _ _ โ†’ refl))

โˆ˜-is-hom : (๐“œโ‚€ : DGM ๐“ค) (๐“œโ‚ : DGM ๐“ฅ) (๐“œโ‚‚ : DGM ๐“ฆ)
           (f : โŸจ ๐“œโ‚€ โŸฉ โ†’ โŸจ ๐“œโ‚ โŸฉ) (g : โŸจ ๐“œโ‚ โŸฉ โ†’ โŸจ ๐“œโ‚‚ โŸฉ)
         โ†’ is-hom ๐“œโ‚€ ๐“œโ‚ f
         โ†’ is-hom ๐“œโ‚ ๐“œโ‚‚ g
         โ†’ is-hom ๐“œโ‚€ ๐“œโ‚‚ (g โˆ˜ f)
โˆ˜-is-hom ๐“œโ‚€ ๐“œโ‚ ๐“œโ‚‚ f g (f-unit , f-mul) (g-unit , g-mul)  =
 ((g โˆ˜ f) (unit ๐“œโ‚€) ๏ผโŸจ ap g f-unit โŸฉ
  g (unit ๐“œโ‚)       ๏ผโŸจ g-unit โŸฉ
  unit ๐“œโ‚‚           โˆŽ) ,
 (ฮป x y โ†’ g (f (x ยทโŸจ ๐“œโ‚€ โŸฉ y))     ๏ผโŸจ ap g (f-mul x y) โŸฉ
          g (f x ยทโŸจ ๐“œโ‚ โŸฉ f y)     ๏ผโŸจ g-mul (f x) (f y) โŸฉ
          g (f x) ยทโŸจ ๐“œโ‚‚ โŸฉ g (f y) โˆŽ)

\end{code}