Free groups structures on arbitrary types #
This file defines the universal property of free groups, and proves some things about
groups with this property. For an explicit construction of free groups, see
group_theory/free_group
.
Main definitions #
is_free_group G
- a typeclass to indicate thatG
is free over some generatorsis_free_group.lift
- the (noncomputable) universal property of the free groupis_free_group.to_free_group
- any free group with generatorsA
is equivalent tofree_group A
.
Implementation notes #
While the typeclass only requires the universal property hold within a single universe u
, our
explicit construction of free_group
allows this to be extended universe polymorphically. The
primed definition names in this file refer to the non-polymorphic versions.
- generators : Type ?
- of : is_free_group.generators G → G
- unique_lift' : ∀ {X : Type ?} [_inst_1_1 : group X] (f : is_free_group.generators G → X), ∃! (F : G →* X), ∀ (a : is_free_group.generators G), ⇑F (is_free_group.of a) = f a
is_free_group G
means that G
has the universal property of a free group,
That is, it has a family generators G
of elements, such that a group homomorphism
G →* X
is uniquely determined by a function generators G → X
.
Equations
- free_group_is_free_group = {generators := A, of := free_group.of A, unique_lift' := _}
The equivalence between functions on the generators and group homomorphisms from a free group given by those generators.
Equations
- is_free_group.lift' = {to_fun := λ (f : is_free_group.generators G → H), classical.some _, inv_fun := λ (F : G →* H), ⇑F ∘ is_free_group.of, left_inv := _, right_inv := _}
Being a free group transports across group isomorphisms within a universe.
Equations
- is_free_group.of_mul_equiv h = {generators := is_free_group.generators G _inst_4, of := ⇑h ∘ is_free_group.of, unique_lift' := _}
Universe-polymorphic definitions #
The primed definitions and lemmas above require G
and H
to be in the same universe u
.
The lemmas below use X
in a different universe w
Any free group is isomorphic to "the" free group.
Equations
- is_free_group.to_free_group G = {to_fun := ⇑(⇑is_free_group.lift' free_group.of), inv_fun := ⇑(⇑free_group.lift is_free_group.of), left_inv := _, right_inv := _, map_mul' := _}
A universe-polymorphic version of is_free_group.lift'
.
Equations
- is_free_group.lift = {to_fun := λ (f : is_free_group.generators G → X), (⇑free_group.lift f).comp (is_free_group.to_free_group G).to_monoid_hom, inv_fun := λ (F : G →* X), ⇑F ∘ is_free_group.of, left_inv := _, right_inv := _}
A universe-polymorphic version of unique_lift
.