{-# OPTIONS --without-K --rewriting #-}
open import lib.Basics
open import lib.types.Empty
open import lib.types.Group
open import lib.types.Word
open import lib.groups.GeneratedGroup
open import lib.groups.Homomorphism
module lib.groups.FreeGroup where
module FreeGroup {i} (A : Type i) where
private
module Gen = GeneratedGroup A empty-rel
open Gen hiding (GenGroup) public
FreeGroup : Group i
FreeGroup = Gen.GenGroup
module Freeness {j} (G : Group j) where
private
module G = Group G
module HE = HomomorphismEquiv G
extend-equiv : (A → G.El) ≃ (FreeGroup →ᴳ G)
extend-equiv =
HE.extend-equiv ∘e every-function-respects-empty-rel-equiv A G
extend : (A → G.El) → (FreeGroup →ᴳ G)
extend = –> extend-equiv
extend-is-equiv : is-equiv extend
extend-is-equiv = snd extend-equiv