open import Prelude
open import Algebra
module Algebra.Construct.Cayley.OnSet {β} {π : Type β} (mon : Monoid π) (sIsSet : isSet π) where
open Monoid mon
π : Type β
π = Ξ£[ f β¦ (π β π) ] Γ β x β f Ξ΅ β x β‘ f x
β¦_ββ§ : π β π
β¦ x ββ§ = x .fst Ξ΅
β¦_ββ§ : π β π
β¦ x ββ§ .fst = _β_ x
β¦ x ββ§ .snd y = cong (_β y) (βΞ΅ x)
β : π
β .fst = id
β .snd = Ξ΅β
open import Path.Reasoning
_β_ : π β π β π
(x β y) .fst z = x .fst (y .fst z)
(x β y) .snd z =
x .fst (y .fst Ξ΅) β z β‘Λβ¨ cong (_β z) (x .snd (y .fst Ξ΅)) β©
x .fst Ξ΅ β y .fst Ξ΅ β z β‘β¨ assoc (x .fst Ξ΅) (y .fst Ξ΅) z β©
x .fst Ξ΅ β (y .fst Ξ΅ β z) β‘β¨ cong (x .fst Ξ΅ β_) (y .snd z) β©
x .fst Ξ΅ β y .fst z β‘β¨ x .snd (y .fst z) β©
x .fst (y .fst z) β
open import Data.Sigma.Properties
open import Cubical.Foundations.HLevels using (isPropΞ )
πβ‘ : {x y : π} β fst x β‘ fst y β x β‘ y
πβ‘ = Ξ£β‘Prop Ξ» _ β isPropΞ Ξ» _ β sIsSet _ _
β-assoc : Associative _β_
β-assoc _ _ _ = πβ‘ refl
ββ : β x β β β x β‘ x
ββ _ = πβ‘ refl
ββ : β x β x β β β‘ x
ββ _ = πβ‘ refl
cayleyMonoid : Monoid π
Monoid._β_ cayleyMonoid = _β_
Monoid.Ξ΅ cayleyMonoid = β
Monoid.assoc cayleyMonoid = β-assoc
Monoid.Ξ΅β cayleyMonoid = ββ
Monoid.βΞ΅ cayleyMonoid = ββ
π-leftInv : β x β β¦ β¦ x ββ§ ββ§ β‘ x
π-leftInv x = πβ‘ (funExt (snd x))
π-iso : π β π
fun π-iso = β¦_ββ§
inv π-iso = β¦_ββ§
rightInv π-iso = βΞ΅
leftInv π-iso = π-leftInv