Skip to content

Commit 1931275

Browse files
committed
feat: port GroupTheory.PresentedGroup (#2010)
1 parent de1a015 commit 1931275

File tree

2 files changed

+100
-0
lines changed

2 files changed

+100
-0
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,7 @@ import Mathlib.GroupTheory.Perm.Basic
628628
import Mathlib.GroupTheory.Perm.List
629629
import Mathlib.GroupTheory.Perm.Support
630630
import Mathlib.GroupTheory.Perm.ViaEmbedding
631+
import Mathlib.GroupTheory.PresentedGroup
631632
import Mathlib.GroupTheory.QuotientGroup
632633
import Mathlib.GroupTheory.SemidirectProduct
633634
import Mathlib.GroupTheory.Subgroup.Actions
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/-
2+
Copyright (c) 2019 Michael Howes. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Michael Howes
5+
6+
! This file was ported from Lean 3 source module group_theory.presented_group
7+
! leanprover-community/mathlib commit d90e4e186f1d18e375dcd4e5b5f6364b01cb3e46
8+
! Please do not edit these lines, except to modify the commit id
9+
! if you have ported upstream changes.
10+
-/
11+
import Mathlib.GroupTheory.FreeGroup
12+
import Mathlib.GroupTheory.QuotientGroup
13+
14+
/-!
15+
# Defining a group given by generators and relations
16+
17+
Given a subset `rels` of relations of the free group on a type `α`, this file constructs the group
18+
given by generators `x : α` and relations `r ∈ rels`.
19+
20+
## Main definitions
21+
22+
* `PresentedGroup rels`: the quotient group of the free group on a type `α` by a subset `rels` of
23+
relations of the free group on `α`.
24+
* `of`: The canonical map from `α` to a presented group with generators `α`.
25+
* `toGroup f`: the canonical group homomorphism `PresentedGroup rels → G`, given a function
26+
`f : α → G` from a type `α` to a group `G` which satisfies the relations `rels`.
27+
28+
## Tags
29+
30+
generators, relations, group presentations
31+
-/
32+
33+
34+
variable {α : Type _}
35+
36+
/-- Given a set of relations, `rels`, over a type `α`, `PresentedGroup` constructs the group with
37+
generators `x : α` and relations `rels` as a quotient of `FreeGroup α`. -/
38+
def PresentedGroup (rels : Set (FreeGroup α)) :=
39+
FreeGroup α ⧸ Subgroup.normalClosure rels
40+
#align presented_group PresentedGroup
41+
42+
namespace PresentedGroup
43+
44+
instance (rels : Set (FreeGroup α)) : Group (PresentedGroup rels) :=
45+
QuotientGroup.Quotient.group _
46+
47+
/-- `of` is the canonical map from `α` to a presented group with generators `x : α`. The term `x` is
48+
mapped to the equivalence class of the image of `x` in `FreeGroup α`. -/
49+
def of {rels : Set (FreeGroup α)} (x : α) : PresentedGroup rels :=
50+
QuotientGroup.mk (FreeGroup.of x)
51+
#align presented_group.of PresentedGroup.of
52+
53+
section ToGroup
54+
55+
/-
56+
Presented groups satisfy a universal property. If `G` is a group and `f : α → G` is a map such that
57+
the images of `f` satisfy all the given relations, then `f` extends uniquely to a group homomorphism
58+
from `PresentedGroup rels` to `G`.
59+
-/
60+
variable {G : Type _} [Group G] {f : α → G} {rels : Set (FreeGroup α)}
61+
62+
-- mathport name: exprF
63+
local notation "F" => FreeGroup.lift f
64+
65+
-- Porting note: `F` has been expanded, because `F r = 1` produces a sorry.
66+
variable (h : ∀ r ∈ rels, FreeGroup.lift f r = 1)
67+
68+
theorem closure_rels_subset_ker : Subgroup.normalClosure rels ≤ MonoidHom.ker F :=
69+
Subgroup.normalClosure_le_normal fun x w ↦ (MonoidHom.mem_ker _).2 (h x w)
70+
#align presented_group.closure_rels_subset_ker PresentedGroup.closure_rels_subset_ker
71+
72+
theorem to_group_eq_one_of_mem_closure : ∀ x ∈ Subgroup.normalClosure rels, F x = 1 :=
73+
fun _ w ↦ (MonoidHom.mem_ker _).1 <| closure_rels_subset_ker h w
74+
#align presented_group.to_group_eq_one_of_mem_closure PresentedGroup.to_group_eq_one_of_mem_closure
75+
76+
/-- The extension of a map `f : α → G` that satisfies the given relations to a group homomorphism
77+
from `PresentedGroup rels → G`. -/
78+
def toGroup : PresentedGroup rels →* G :=
79+
QuotientGroup.lift (Subgroup.normalClosure rels) F (to_group_eq_one_of_mem_closure h)
80+
#align presented_group.to_group PresentedGroup.toGroup
81+
82+
@[simp]
83+
theorem toGroup.of {x : α} : toGroup h (of x) = f x :=
84+
FreeGroup.lift.of
85+
#align presented_group.to_group.of PresentedGroup.toGroup.of
86+
87+
theorem toGroup.unique (g : PresentedGroup rels →* G)
88+
(hg : ∀ x : α, g (PresentedGroup.of x) = f x) : ∀ {x}, g x = toGroup h x := by
89+
intro x
90+
refine' QuotientGroup.induction_on x _
91+
exact fun _ ↦ FreeGroup.lift.unique (g.comp (QuotientGroup.mk' _)) hg
92+
#align presented_group.to_group.unique PresentedGroup.toGroup.unique
93+
94+
end ToGroup
95+
96+
instance (rels : Set (FreeGroup α)) : Inhabited (PresentedGroup rels) :=
97+
1
98+
99+
end PresentedGroup

0 commit comments

Comments
 (0)