{-# 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