FromGroup

Martin Escardo, July 2026.

Every group is an egroup.

An ordinary group (Groups.Type) is a set with a group operation whose
laws hold up to the identity type _=_. It is in particular an egroup:
take the underlying setoid to be the carrier with its identity type as
the equivalence relation (which is an equivalence relation, given by
refl, _⁻¹ and _∙_), and the operation is a congruence for _=_ via ap₂.

Note that we do not use that the carrier is a set: the identity type
is an equivalence relation in the sense of deprecated.EGroups.Setoid,
whether or not it is proposition-valued, and egroups do not require
the equivalence relation to be proposition-valued.


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

module deprecated.EGroups.FromGroup where

open import MLTT.Spartan
open import UF.Base using (ap₂)
open import Groups.Type
             using (Group ; multiplication ; unit ;
                    unit-left ; unit-right ; assoc ;
                    inv ; inv-left ; inv-right)
             renaming (⟨_⟩ to ⟪_⟫)

open import deprecated.EGroups.Setoid
open import deprecated.EGroups.Type

Group-to-EGroup : Group 𝓤 → EGroup 𝓤 𝓤
Group-to-EGroup G =
   (⟪ G ⟫ , _=_ , ((λ x → refl) , (λ x y p → p ⁻¹) , (λ x y z p q → p ∙ q)))
 , multiplication G
 , ( (λ p q → ap₂ (multiplication G) p q)
   , assoc G
   , ( unit G
     , unit-left G
     , unit-right G
     , (λ x → inv G x , inv-left G x , inv-right G x) ) )