{-# OPTIONS --cubical --safe --prop #-}
open import Algebra
open import Prelude
open import Relation.Binary.Equivalence.PropTruncated
module Algebra.Construct.Cayley.Propositional {a} {π : Type a} (mon : Monoid π) where
open Monoid mon
record π : Type a where
constructor cayley
infixr 7 _β_
field
_β_ : π β π
small : β x β _β_ Ξ΅ β x β _β_ x
open π public
β¦_ββ§ : π β π
β¦ x ββ§ = x β Ξ΅
β¦_ββ§ : π β π
β¦ x ββ§ β y = x β y
β¦ x ββ§ .small y = β£ cong (_β y) (βΞ΅ x) β£
β : π
β β x = x
β .small x = β£ Ξ΅β x β£
module _ where
open Reasoning
_β_ : π β π β π
(x β y) β z = x β y β z
(x β y) .small z =
x β y β Ξ΅ β z βΛβ¨ βcong (_β z) (x .small (y β Ξ΅)) β©
x β Ξ΅ β y β Ξ΅ β z β‘β¨ assoc (x β Ξ΅) (y β Ξ΅) z β©
x β Ξ΅ β (y β Ξ΅ β z) ββ¨ βcong (x β Ξ΅ β_) (y .small z) β©
x β Ξ΅ β y β z ββ¨ x .small (y β z) β©
x β y β z β
β-assoc : Associative _β_
β-assoc x y z = refl
ββ : β x β β β x β‘ x
ββ x = refl
ββ : β x β x β β β‘ x
ββ x = refl
cayleyMonoid : Monoid π
Monoid._β_ cayleyMonoid = _β_
Monoid.Ξ΅ cayleyMonoid = β
Monoid.assoc cayleyMonoid = β-assoc
Monoid.Ξ΅β cayleyMonoid = ββ
Monoid.βΞ΅ cayleyMonoid = ββ
open import Data.Sigma.Properties
open import Relation.Nullary.Stable
πβ‘ : {x y : π} β (β z β x β z β‘ y β z) β x β‘ y
πβ‘ { f } { cayley g q } fβ‘g =
subst
(Ξ» (gβ² : π β π) β (qβ² : β x β gβ² Ξ΅ β x β gβ² x) β f β‘ cayley gβ² qβ²)
(funExt fβ‘g)
(Ξ» _ β refl)
q
β-homo : β x y β β¦ x β y ββ§ β‘ β¦ x ββ§ β β¦ y ββ§
β-homo x y = πβ‘ (assoc x y)
Ξ΅-homo : β¦ Ξ΅ ββ§ β‘ β
Ξ΅-homo = πβ‘ Ξ΅β
homo-to : MonoidHomomorphism mon βΆ cayleyMonoid
MonoidHomomorphism_βΆ_.f homo-to = β¦_ββ§
MonoidHomomorphism_βΆ_.β-homo homo-to = β-homo
MonoidHomomorphism_βΆ_.Ξ΅-homo homo-to = Ξ΅-homo
β-homo : β¦ β ββ§ β‘ Ξ΅
β-homo = refl
module _ (sIsStable : β {x y : π} β Stable (x β‘ y)) where
β-homo : β x y β β¦ x β y ββ§ β‘ β¦ x ββ§ β β¦ y ββ§
β-homo x y = sym (unsquash sIsStable (x .small β¦ y ββ§))
π-iso : π β π
fun π-iso = β¦_ββ§
inv π-iso = β¦_ββ§
rightInv π-iso = βΞ΅
leftInv π-iso x = πβ‘ Ξ» y β unsquash sIsStable (x .small y)
homo-from : MonoidHomomorphism cayleyMonoid βΆ mon
MonoidHomomorphism_βΆ_.f homo-from = β¦_ββ§
MonoidHomomorphism_βΆ_.β-homo homo-from = β-homo
MonoidHomomorphism_βΆ_.Ξ΅-homo homo-from = β-homo