Martin Escardo, 15th July 2026.

Free groups in pure MLTT using setoids. More precisely, we work with
egroups, defined in EGroup.Type, briefly described below.

\begin{code}

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

module EGroups.index where

import EGroups.Setoid
import EGroups.Type
import EGroups.MediatingMap
import EGroups.FreeOnType
import EGroups.FreeOnSetoid
import EGroups.FromGroup
import EGroups.Large

\end{code}

 * Setoid

   The notion of setoid (a type with an equivalence relation given as
   data, not required to be proposition-valued) and minimal setoid
   infrastructure.

 * Type

   The type of egroups: setoids equipped with a compatible group
   structure, with the group laws holding up to the equivalence
   relation rather than up to the identity type. Homomorphisms and some
   minimal group theory up to the equivalence relation.

 * MediatingMap

   Defines the mediating map into a target egroup and proves its basic
   properties, with the target's laws holding up to an arbitrary
   equivalence relation. This is the map underlying the universal
   property. The word-level construction it acts on is imported from
   Groups.Free.

   This is for use in the next two modules.

 * FreeOnType

   The free egroup on a type, its universal property, and the
   free-forgetful adjunction expressed as a setoid isomorphism of
   hom-setoids.

 * FreeOnSetoid

   The free egroup on a setoid, rather than on a type, and the
   free-forgetful adjunction between setoids and egroups, as a setoid
   isomorphism of hom-setoids.

 * FromGroup

   Every group, in the sense of Groups.Type, is an egroup, with the
   identity type as its equivalence relation.

 * Large

   The egroup freely generated by a large type is itself large (has no
   small copy).