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.Everything 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