File: Mathlib/GroupTheory/FreeAbelianGroupFinsupp.lean

full_name: FreeAbelianGroup.toFinsupp
code: /-- The group homomorphism `FreeAbelianGroup X →+ (X →₀ ℤ)`. -/
def FreeAbelianGroup.toFinsupp : FreeAbelianGroup X →+ X →₀ ℤ 
goal: FreeAbelianGroup X →+ X →₀ ℤ

full_name: Finsupp.toFreeAbelianGroup
code: /-- The group homomorphism `(X →₀ ℤ) →+ FreeAbelianGroup X`. -/
def Finsupp.toFreeAbelianGroup : (X →₀ ℤ) →+ FreeAbelianGroup X 
goal: (X →₀ ℤ) →+ FreeAbelianGroup X

full_name: Finsupp.toFreeAbelianGroup_comp_singleAddHom
code: @[simp]
theorem Finsupp.toFreeAbelianGroup_comp_singleAddHom (x : X) :
    Finsupp.toFreeAbelianGroup.comp (Finsupp.singleAddHom x) =
      (smulAddHom ℤ (FreeAbelianGroup X)).flip (of x) 
goal: Finsupp.toFreeAbelianGroup.comp (Finsupp.singleAddHom x) =
  (smulAddHom ℤ (FreeAbelianGroup X)).flip (FreeAbelianGroup.of x)

full_name: FreeAbelianGroup.toFinsupp_comp_toFreeAbelianGroup
code: @[simp]
theorem FreeAbelianGroup.toFinsupp_comp_toFreeAbelianGroup :
    toFinsupp.comp toFreeAbelianGroup = AddMonoidHom.id (X →₀ ℤ) 
goal: FreeAbelianGroup.toFinsupp.comp Finsupp.toFreeAbelianGroup = AddMonoidHom.id (X →₀ ℤ)

full_name: Finsupp.toFreeAbelianGroup_comp_toFinsupp
code: @[simp]
theorem Finsupp.toFreeAbelianGroup_comp_toFinsupp :
    toFreeAbelianGroup.comp toFinsupp = AddMonoidHom.id (FreeAbelianGroup X) 
goal: Finsupp.toFreeAbelianGroup.comp FreeAbelianGroup.toFinsupp = AddMonoidHom.id (FreeAbelianGroup X)

full_name: Finsupp.toFreeAbelianGroup_toFinsupp
code: @[simp]
theorem Finsupp.toFreeAbelianGroup_toFinsupp {X} (x : FreeAbelianGroup X) :
    Finsupp.toFreeAbelianGroup (FreeAbelianGroup.toFinsupp x) = x 
goal: Finsupp.toFreeAbelianGroup (FreeAbelianGroup.toFinsupp x) = x

full_name: FreeAbelianGroup.toFinsupp_of
code: @[simp]
theorem toFinsupp_of (x : X) : toFinsupp (of x) = Finsupp.single x 1 
goal: FreeAbelianGroup.toFinsupp (FreeAbelianGroup.of x) = Finsupp.single x 1

full_name: FreeAbelianGroup.toFinsupp_toFreeAbelianGroup
code: @[simp]
theorem toFinsupp_toFreeAbelianGroup (f : X →₀ ℤ) :
    FreeAbelianGroup.toFinsupp (Finsupp.toFreeAbelianGroup f) = f 
goal: FreeAbelianGroup.toFinsupp (Finsupp.toFreeAbelianGroup f) = f

full_name: FreeAbelianGroup.equivFinsupp_symm_apply
code: /-- The additive equivalence between `FreeAbelianGroup X` and `(X →₀ ℤ)`. -/
@[simps!]
def equivFinsupp : FreeAbelianGroup X ≃+ (X →₀ ℤ) 
goal: (FreeAbelianGroup.equivFinsupp X).symm a = Finsupp.toFreeAbelianGroup a

full_name: FreeAbelianGroup.equivFinsupp
code: /-- The additive equivalence between `FreeAbelianGroup X` and `(X →₀ ℤ)`. -/
@[simps!]
def equivFinsupp : FreeAbelianGroup X ≃+ (X →₀ ℤ) 
goal: FreeAbelianGroup X ≃+ (X →₀ ℤ)

full_name: FreeAbelianGroup.equivFinsupp_apply
code: /-- The additive equivalence between `FreeAbelianGroup X` and `(X →₀ ℤ)`. -/
@[simps!]
def equivFinsupp : FreeAbelianGroup X ≃+ (X →₀ ℤ) 
goal: (FreeAbelianGroup.equivFinsupp X) a = FreeAbelianGroup.toFinsupp a

full_name: FreeAbelianGroup.basis
code: /-- `A` is a basis of the ℤ-module `FreeAbelianGroup A`. -/
noncomputable def basis (α : Type*) : Basis α ℤ (FreeAbelianGroup α) 
goal: Basis α ℤ (FreeAbelianGroup α)

full_name: FreeAbelianGroup.Equiv.ofFreeAbelianGroupLinearEquiv
code: /-- Isomorphic free abelian groups (as modules) have equivalent bases. -/
def Equiv.ofFreeAbelianGroupLinearEquiv {α β : Type*}
    (e : FreeAbelianGroup α ≃ₗ[ℤ] FreeAbelianGroup β) : α ≃ β 
goal: α ≃ β

full_name: FreeAbelianGroup.Equiv.ofFreeAbelianGroupEquiv
code: /-- Isomorphic free abelian groups (as additive groups) have equivalent bases. -/
def Equiv.ofFreeAbelianGroupEquiv {α β : Type*} (e : FreeAbelianGroup α ≃+ FreeAbelianGroup β) :
    α ≃ β 
goal: α ≃ β

full_name: FreeAbelianGroup.Equiv.ofFreeGroupEquiv
code: /-- Isomorphic free groups have equivalent bases. -/
def Equiv.ofFreeGroupEquiv {α β : Type*} (e : FreeGroup α ≃* FreeGroup β) : α ≃ β 
goal: α ≃ β

full_name: FreeAbelianGroup.Equiv.ofIsFreeGroupEquiv
code: /-- Isomorphic free groups have equivalent bases (`IsFreeGroup` variant). -/
def Equiv.ofIsFreeGroupEquiv {G H : Type*} [Group G] [Group H] [IsFreeGroup G] [IsFreeGroup H]
    (e : G ≃* H) : Generators G ≃ Generators H 
goal: IsFreeGroup.Generators G ≃ IsFreeGroup.Generators H

full_name: FreeAbelianGroup.coeff
code: /-- `coeff x` is the additive group homomorphism `FreeAbelianGroup X →+ ℤ`
that sends `a` to the multiplicity of `x : X` in `a`. -/
def coeff (x : X) : FreeAbelianGroup X →+ ℤ 
goal: FreeAbelianGroup X →+ ℤ

full_name: FreeAbelianGroup.support
code: /-- `support a` for `a : FreeAbelianGroup X` is the finite set of `x : X`
that occur in the formal sum `a`. -/
def support (a : FreeAbelianGroup X) : Finset X 
goal: Finset X

full_name: FreeAbelianGroup.mem_support_iff
code: theorem mem_support_iff (x : X) (a : FreeAbelianGroup X) : x ∈ a.support ↔ coeff x a ≠ 0 
goal: x ∈ a.support ↔ (FreeAbelianGroup.coeff x) a ≠ 0

full_name: FreeAbelianGroup.not_mem_support_iff
code: theorem not_mem_support_iff (x : X) (a : FreeAbelianGroup X) : x ∉ a.support ↔ coeff x a = 0 
goal: x ∉ a.support ↔ (FreeAbelianGroup.coeff x) a = 0

full_name: FreeAbelianGroup.support_zero
code: @[simp]
theorem support_zero : support (0 : FreeAbelianGroup X) = ∅ 
goal: FreeAbelianGroup.support 0 = ∅

full_name: FreeAbelianGroup.support_of
code: @[simp]
theorem support_of (x : X) : support (of x) = {x} 
goal: (FreeAbelianGroup.of x).support = {x}

full_name: FreeAbelianGroup.support_neg
code: @[simp]
theorem support_neg (a : FreeAbelianGroup X) : support (-a) = support a 
goal: (-a).support = a.support

full_name: FreeAbelianGroup.support_zsmul
code: @[simp]
theorem support_zsmul (k : ℤ) (h : k ≠ 0) (a : FreeAbelianGroup X) :
    support (k • a) = support a 
goal: (k • a).support = a.support

full_name: FreeAbelianGroup.support_nsmul
code: @[simp]
theorem support_nsmul (k : ℕ) (h : k ≠ 0) (a : FreeAbelianGroup X) :
    support (k • a) = support a 
goal: (k • a).support = a.support

full_name: FreeAbelianGroup.support_add
code: theorem support_add (a b : FreeAbelianGroup X) : support (a + b) ⊆ a.support ∪ b.support 
goal: (a + b).support ⊆ a.support ∪ b.support