File: Mathlib/GroupTheory/PresentedGroup.lean

full_name: PresentedGroup
code: /-- Given a set of relations, `rels`, over a type `α`, `PresentedGroup` constructs the group with
generators `x : α` and relations `rels` as a quotient of `FreeGroup α`. -/
def PresentedGroup (rels : Set (FreeGroup α)) 
goal: Type u_1

full_name: PresentedGroup.instGroup
code: instance (rels : Set (FreeGroup α)) : Group (PresentedGroup rels) 
goal: Group (PresentedGroup rels)

full_name: PresentedGroup.of
code: /-- `of` is the canonical map from `α` to a presented group with generators `x : α`. The term `x` is
mapped to the equivalence class of the image of `x` in `FreeGroup α`. -/
def of {rels : Set (FreeGroup α)} (x : α) : PresentedGroup rels 
goal: PresentedGroup rels

full_name: PresentedGroup.closure_range_of
code: /-- The generators of a presented group generate the presented group. That is, the subgroup closure
of the set of generators equals `⊤`. -/
@[simp]
theorem closure_range_of (rels : Set (FreeGroup α)) :
    Subgroup.closure (Set.range (PresentedGroup.of : α → PresentedGroup rels)) = ⊤ 
goal: Subgroup.closure (Set.range PresentedGroup.of) = ⊤

full_name: PresentedGroup._aux_Mathlib_GroupTheory_PresentedGroup___macroRules_PresentedGroup_termF_1
code: local notation "F" => FreeGroup.lift f
goal: Lean.Macro

full_name: PresentedGroup._aux_Mathlib_GroupTheory_PresentedGroup___unexpand_FreeGroup_lift_1
code: local notation "F" => FreeGroup.lift f
goal: Lean.PrettyPrinter.Unexpander

full_name: PresentedGroup.closure_rels_subset_ker
code: theorem closure_rels_subset_ker : Subgroup.normalClosure rels ≤ MonoidHom.ker F 
goal: Subgroup.normalClosure rels ≤ (FreeGroup.lift f).ker

full_name: PresentedGroup.to_group_eq_one_of_mem_closure
code: theorem to_group_eq_one_of_mem_closure : ∀ x ∈ Subgroup.normalClosure rels, F x = 1 
goal: x ∈ Subgroup.normalClosure rels → (FreeGroup.lift f) x = 1

full_name: PresentedGroup.toGroup
code: /-- The extension of a map `f : α → G` that satisfies the given relations to a group homomorphism
from `PresentedGroup rels → G`. -/
def toGroup : PresentedGroup rels →* G 
goal: PresentedGroup rels →* G

full_name: PresentedGroup.toGroup.of
code: @[simp]
theorem toGroup.of {x : α} : toGroup h (of x) = f x 
goal: (PresentedGroup.toGroup h) (PresentedGroup.of x) = f x

full_name: PresentedGroup.toGroup.unique
code: theorem toGroup.unique (g : PresentedGroup rels →* G)
    (hg : ∀ x : α, g (PresentedGroup.of x) = f x) : ∀ {x}, g x = toGroup h x 
goal: g x = (PresentedGroup.toGroup h) x

full_name: PresentedGroup.ext
code: @[ext]
theorem ext {φ ψ : PresentedGroup rels →* G} (hx : ∀ (x : α), φ (.of x) = ψ (.of x)) : φ = ψ 
goal: φ = ψ

full_name: PresentedGroup.equivPresentedGroup
code: /-- Presented groups of isomorphic types are isomorphic. -/
def equivPresentedGroup (rels : Set (FreeGroup α)) (e : α ≃ β) :
    PresentedGroup rels ≃* PresentedGroup (FreeGroup.freeGroupCongr e '' rels) 
goal: PresentedGroup rels ≃* PresentedGroup (⇑(FreeGroup.freeGroupCongr e) '' rels)

full_name: PresentedGroup.equivPresentedGroup_apply_of
code: theorem equivPresentedGroup_apply_of (x : α) (rels : Set (FreeGroup α)) (e : α ≃ β) :
    equivPresentedGroup rels e (PresentedGroup.of x) =
      PresentedGroup.of (rels := FreeGroup.freeGroupCongr e '' rels) (e x) 
goal: (PresentedGroup.equivPresentedGroup rels e) (PresentedGroup.of x) = PresentedGroup.of (e x)

full_name: PresentedGroup.equivPresentedGroup_symm_apply_of
code: theorem equivPresentedGroup_symm_apply_of (x : β) (rels : Set (FreeGroup α)) (e : α ≃ β) :
    (equivPresentedGroup rels e).symm (PresentedGroup.of x) =
      PresentedGroup.of (rels := rels) (e.symm x) 
goal: (PresentedGroup.equivPresentedGroup rels e).symm (PresentedGroup.of x) = PresentedGroup.of (e.symm x)

full_name: PresentedGroup.instInhabited
code: instance (rels : Set (FreeGroup α)) : Inhabited (PresentedGroup rels) 
goal: Inhabited (PresentedGroup rels)