# mathlibdocumentation

group_theory.finiteness

# Finitely generated monoids and groups #

We define finitely generated monoids and groups. See also submodule.fg and module.finite for finitely-generated modules.

## Main definition #

• submonoid.fg S, add_submonoid.fg S : A submonoid S is finitely generated.
• monoid.fg M, add_monoid.fg M : A typeclass indicating a type M is finitely generated as a monoid.
• subgroup.fg S, add_subgroup.fg S : A subgroup S is finitely generated.
• group.fg M, add_group.fg M : A typeclass indicating a type M is finitely generated as a group.

### Monoids and submonoids #

Prop

An additive submonoid of N is finitely generated if it is the closure of a finite subset of M.

Equations
def submonoid.fg {M : Type u_1} [monoid M] (P : submonoid M) :
Prop

A submonoid of M is finitely generated if it is the closure of a finite subset of M.

Equations
theorem submonoid.fg_iff {M : Type u_1} [monoid M] (P : submonoid M) :
P.fg ∃ (S : set M), S.finite

An equivalent expression of submonoid.fg in terms of set.finite instead of finset.

P.fg ∃ (S : set M),

An equivalent expression of add_submonoid.fg in terms of set.finite instead of finset.

theorem submonoid.fg_iff_add_fg {M : Type u_1} [monoid M] (P : submonoid M) :
@[class]
structure monoid.fg (M : Type u_1) [monoid M] :
Prop

A monoid is finitely generated if it is finitely generated as a submonoid of itself.

Instances of this typeclass
@[class]
Prop

An additive monoid is finitely generated if it is finitely generated as an additive submonoid of itself.

Instances of this typeclass
theorem monoid.fg_def {M : Type u_1} [monoid M] :
theorem monoid.fg_iff {M : Type u_1} [monoid M] :
∃ (S : set M),

An equivalent expression of monoid.fg in terms of set.finite instead of finset.

∃ (S : set M),

An equivalent expression of add_monoid.fg in terms of set.finite instead of finset.

theorem monoid.fg_iff_add_fg {M : Type u_1} [monoid M] :
@[protected, instance]
def add_monoid.fg_of_monoid_fg {M : Type u_1} [monoid M] [monoid.fg M] :
@[protected, instance]
@[protected, instance]
def monoid.fg_of_finite {M : Type u_1} [monoid M] [finite M] :
@[protected, instance]
theorem submonoid.fg.map {M : Type u_1} [monoid M] {M' : Type u_2} [monoid M'] {P : submonoid M} (h : P.fg) (e : M →* M') :
P).fg
theorem add_submonoid.fg.map {M : Type u_1} [add_monoid M] {M' : Type u_2} [add_monoid M'] {P : add_submonoid M} (h : P.fg) (e : M →+ M') :
P).fg
theorem add_submonoid.fg.map_injective {M : Type u_1} [add_monoid M] {M' : Type u_2} [add_monoid M'] {P : add_submonoid M} (e : M →+ M') (he : function.injective e) (h : P).fg) :
P.fg
theorem submonoid.fg.map_injective {M : Type u_1} [monoid M] {M' : Type u_2} [monoid M'] {P : submonoid M} (e : M →* M') (he : function.injective e) (h : P).fg) :
P.fg
@[simp]
@[simp]
theorem monoid.fg_iff_submonoid_fg {M : Type u_1} [monoid M] (N : submonoid M) :
N.fg
theorem add_monoid.fg_of_surjective {M : Type u_1} [add_monoid M] {M' : Type u_2} [add_monoid M'] (f : M →+ M') (hf : function.surjective f) :
theorem monoid.fg_of_surjective {M : Type u_1} [monoid M] {M' : Type u_2} [monoid M'] [monoid.fg M] (f : M →* M') (hf : function.surjective f) :
@[protected, instance]
def monoid.fg_range {M : Type u_1} [monoid M] {M' : Type u_2} [monoid M'] [monoid.fg M] (f : M →* M') :
@[protected, instance]
def add_monoid.fg_range {M : Type u_1} [add_monoid M] {M' : Type u_2} [add_monoid M'] (f : M →+ M') :
theorem submonoid.powers_fg {M : Type u_1} [monoid M] (r : M) :
theorem add_submonoid.multiples_fg {M : Type u_1} [add_monoid M] (r : M) :
@[protected, instance]
def add_monoid.multiples_fg {M : Type u_1} [add_monoid M] (r : M) :
@[protected, instance]
def monoid.powers_fg {M : Type u_1} [monoid M] (r : M) :

### Groups and subgroups #

Prop

An additive subgroup of H is finitely generated if it is the closure of a finite subset of H.

Equations
def subgroup.fg {G : Type u_3} [group G] (P : subgroup G) :
Prop

A subgroup of G is finitely generated if it is the closure of a finite subset of G.

Equations
theorem subgroup.fg_iff {G : Type u_3} [group G] (P : subgroup G) :
P.fg ∃ (S : set G), S.finite

An equivalent expression of subgroup.fg in terms of set.finite instead of finset.

P.fg ∃ (S : set G), S.finite

An equivalent expression of add_subgroup.fg in terms of set.finite instead of finset.

theorem subgroup.fg_iff_submonoid_fg {G : Type u_3} [group G] (P : subgroup G) :

A subgroup is finitely generated if and only if it is finitely generated as a submonoid.

An additive subgroup is finitely generated if and only if it is finitely generated as an additive submonoid.

theorem subgroup.fg_iff_add_fg {G : Type u_3} [group G] (P : subgroup G) :
@[class]
structure group.fg (G : Type u_3) [group G] :
Prop

A group is finitely generated if it is finitely generated as a submonoid of itself.

Instances of this typeclass
@[class]
Prop

An additive group is finitely generated if it is finitely generated as an additive submonoid of itself.

Instances of this typeclass
theorem group.fg_def {G : Type u_3} [group G] :
∃ (S : set G),

An equivalent expression of add_group.fg in terms of set.finite instead of finset.

theorem group.fg_iff {G : Type u_3} [group G] :
∃ (S : set G),

An equivalent expression of group.fg in terms of set.finite instead of finset.

∃ (n : ) (S : finset G), S.card = n
theorem group.fg_iff' {G : Type u_3} [group G] :
∃ (n : ) (S : finset G), S.card = n
theorem group.fg_iff_monoid.fg {G : Type u_3} [group G] :

A group is finitely generated if and only if it is finitely generated as a monoid.

An additive group is finitely generated if and only if it is finitely generated as an additive monoid.

theorem group_fg.iff_add_fg {G : Type u_3} [group G] :
@[protected, instance]
def add_group.fg_of_group_fg {G : Type u_3} [group G] [group.fg G] :
@[protected, instance]
@[protected, instance]
def group.fg_of_finite {G : Type u_3} [group G] [finite G] :
@[protected, instance]
theorem add_group.fg_of_surjective {G : Type u_3} [add_group G] {G' : Type u_1} [add_group G'] [hG : add_group.fg G] {f : G →+ G'} (hf : function.surjective f) :
theorem group.fg_of_surjective {G : Type u_3} [group G] {G' : Type u_1} [group G'] [hG : group.fg G] {f : G →* G'} (hf : function.surjective f) :
@[protected, instance]
@[protected, instance]
def group.fg_range {G : Type u_3} [group G] {G' : Type u_1} [group G'] [group.fg G] (f : G →* G') :
def add_group.rank (G : Type u_3) [add_group G] [h : add_group.fg G] [decidable_pred (λ (n : ), ∃ (S : finset G), S.card = n ] :

The minimum number of generators of an additive group

Equations
def group.rank (G : Type u_3) [group G] [h : group.fg G] [decidable_pred (λ (n : ), ∃ (S : finset G), S.card = n ] :

The minimum number of generators of a group.

Equations
theorem group.rank_spec (G : Type u_3) [group G] [h : group.fg G] [decidable_pred (λ (n : ), ∃ (S : finset G), S.card = n ] :
∃ (S : finset G), S.card =
theorem add_group.rank_spec (G : Type u_3) [add_group G] [h : add_group.fg G] [decidable_pred (λ (n : ), ∃ (S : finset G), S.card = n ] :
∃ (S : finset G),
theorem add_group.rank_le (G : Type u_3) [add_group G] [add_group.fg G] [decidable_pred (λ (n : ), ∃ (S : finset G), S.card = n ] {S : finset G} (hS : = ) :
theorem group.rank_le (G : Type u_3) [group G] [group.fg G] [decidable_pred (λ (n : ), ∃ (S : finset G), S.card = n ] {S : finset G} (hS : = ) :
@[protected, instance]
def quotient_group.fg {G : Type u_3} [group G] [group.fg G] (N : subgroup G) [N.normal] :
@[protected, instance]