Skip to content

Commit

Permalink
feat(group_theory/free_abelian_group_finsupp): various equiv.of_free_…
Browse files Browse the repository at this point in the history
…*_group lemmas (#11469)

Namely `equiv.of_free_abelian_group_linear_equiv`,
`equiv.of_free_abelian_group_equiv` and `equiv.of_free_group_equiv`
    
Co-authored-by: Adam Topaz <github@adamtopaz.com>
  • Loading branch information
nomeata committed Jan 26, 2022
1 parent 8fbc009 commit 97e01cd
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 1 deletion.
31 changes: 31 additions & 0 deletions src/group_theory/free_abelian_group_finsupp.lean
Expand Up @@ -5,6 +5,7 @@ Authors: Johan Commelin
-/

import group_theory.free_abelian_group
import group_theory.is_free_group
import data.finsupp.basic
import data.equiv.module
import linear_algebra.dimension
Expand Down Expand Up @@ -101,6 +102,36 @@ noncomputable def basis (α : Type*) :
basis α ℤ (free_abelian_group α) :=
⟨(free_abelian_group.equiv_finsupp α).to_int_linear_equiv ⟩

/-- Isomorphic free ablian groups (as modules) have equivalent bases. -/
def equiv.of_free_abelian_group_linear_equiv {α β : Type*}
(e : free_abelian_group α ≃ₗ[ℤ] free_abelian_group β) :
α ≃ β :=
let t : _root_.basis α ℤ (free_abelian_group β) := (free_abelian_group.basis α).map e
in t.index_equiv $ free_abelian_group.basis _

/-- Isomorphic free abelian groups (as additive groups) have equivalent bases. -/
def equiv.of_free_abelian_group_equiv {α β : Type*}
(e : free_abelian_group α ≃+ free_abelian_group β) :
α ≃ β :=
equiv.of_free_abelian_group_linear_equiv e.to_int_linear_equiv

/-- Isomorphic free groups have equivalent bases. -/
def equiv.of_free_group_equiv {α β : Type*}
(e : free_group α ≃* free_group β) :
α ≃ β :=
equiv.of_free_abelian_group_equiv e.abelianization_congr.to_additive

open is_free_group
/-- Isomorphic free groups have equivalent bases (`is_free_group` variant`). -/
def equiv.of_is_free_group_equiv {G H : Type*}
[group G] [group H] [is_free_group G] [is_free_group H]
(e : G ≃* H) :
generators G ≃ generators H :=
equiv.of_free_group_equiv $
mul_equiv.trans ((to_free_group G).symm) $
mul_equiv.trans e $
to_free_group H

variable {X}

/-- `coeff x` is the additive group homomorphism `free_abelian_group X →+ ℤ`
Expand Down
6 changes: 5 additions & 1 deletion src/group_theory/free_group.lean
Expand Up @@ -524,7 +524,11 @@ by rintros ⟨L⟩; exact list.rec_on L g.map_one
theorem map_eq_lift : map f x = lift (of ∘ f) x :=
eq.symm $ map.unique _ $ λ x, by simp

/-- Equivalent types give rise to multiplicatively equivalent free groups. -/
/-- Equivalent types give rise to multiplicatively equivalent free groups.
The converse can be found in `group_theory.free_abelian_group_finsupp`,
as `equiv.of_free_group_equiv`
-/
@[simps apply]
def free_group_congr {α β} (e : α ≃ β) : free_group α ≃* free_group β :=
{ to_fun := map e, inv_fun := map e.symm,
Expand Down

0 comments on commit 97e01cd

Please sign in to comment.