Index of a Subgroup #
In this file we define the index of a subgroup, and prove several divisibility properties. Several theorems proved in this file are known as Lagrange's theorem.
Main definitions #
H.index
: the index ofH : Subgroup G
as a natural number, and returns 0 if the index is infinite.H.relindex K
: the relative index ofH : Subgroup G
inK : Subgroup G
as a natural number, and returns 0 if the relative index is infinite.
Main results #
card_mul_index
:Nat.card H * H.index = Nat.card G
index_mul_card
:H.index * Fintype.card H = Fintype.card G
index_dvd_card
:H.index ∣ Fintype.card G
relindex_mul_index
: IfH ≤ K
, thenH.relindex K * K.index = H.index
index_dvd_of_le
: IfH ≤ K
, thenK.index ∣ H.index
relindex_mul_relindex
:relindex
is multiplicative in towers
The index of a subgroup as a natural number, and returns 0 if the index is infinite.
Instances For
noncomputable def
AddSubgroup.relindex
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
(K : AddSubgroup G)
:
The relative index of a subgroup as a natural number, and returns 0 if the relative index is infinite.
Equations
- H.relindex K = (H.addSubgroupOf K).index
Instances For
theorem
AddSubgroup.index_comap_of_surjective
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
{G' : Type u_2}
[AddGroup G']
{f : G' →+ G}
(hf : Function.Surjective ⇑f)
:
(AddSubgroup.comap f H).index = H.index
theorem
Subgroup.index_comap_of_surjective
{G : Type u_1}
[Group G]
(H : Subgroup G)
{G' : Type u_2}
[Group G']
{f : G' →* G}
(hf : Function.Surjective ⇑f)
:
(Subgroup.comap f H).index = H.index
theorem
AddSubgroup.index_comap
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
{G' : Type u_2}
[AddGroup G']
(f : G' →+ G)
:
(AddSubgroup.comap f H).index = H.relindex f.range
theorem
Subgroup.index_comap
{G : Type u_1}
[Group G]
(H : Subgroup G)
{G' : Type u_2}
[Group G']
(f : G' →* G)
:
(Subgroup.comap f H).index = H.relindex f.range
theorem
AddSubgroup.relindex_comap
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
{G' : Type u_2}
[AddGroup G']
(f : G' →+ G)
(K : AddSubgroup G')
:
(AddSubgroup.comap f H).relindex K = H.relindex (AddSubgroup.map f K)
theorem
Subgroup.relindex_comap
{G : Type u_1}
[Group G]
(H : Subgroup G)
{G' : Type u_2}
[Group G']
(f : G' →* G)
(K : Subgroup G')
:
(Subgroup.comap f H).relindex K = H.relindex (Subgroup.map f K)
theorem
AddSubgroup.relindex_mul_index
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{K : AddSubgroup G}
(h : H ≤ K)
:
theorem
AddSubgroup.index_dvd_of_le
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{K : AddSubgroup G}
(h : H ≤ K)
:
K.index ∣ H.index
theorem
AddSubgroup.relindex_dvd_index_of_le
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{K : AddSubgroup G}
(h : H ≤ K)
:
H.relindex K ∣ H.index
theorem
AddSubgroup.relindex_addSubgroupOf
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{K : AddSubgroup G}
{L : AddSubgroup G}
(hKL : K ≤ L)
:
(H.addSubgroupOf L).relindex (K.addSubgroupOf L) = H.relindex K
theorem
AddSubgroup.relindex_mul_relindex
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
(K : AddSubgroup G)
(L : AddSubgroup G)
(hHK : H ≤ K)
(hKL : K ≤ L)
:
theorem
AddSubgroup.inf_relindex_right
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
(K : AddSubgroup G)
:
theorem
AddSubgroup.inf_relindex_left
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
(K : AddSubgroup G)
:
theorem
AddSubgroup.relindex_inf_mul_relindex
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
(K : AddSubgroup G)
(L : AddSubgroup G)
:
@[simp]
theorem
AddSubgroup.relindex_sup_right
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
(K : AddSubgroup G)
[K.Normal]
:
@[simp]
theorem
AddSubgroup.relindex_sup_left
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
(K : AddSubgroup G)
[K.Normal]
:
theorem
AddSubgroup.relindex_dvd_index_of_normal
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
(K : AddSubgroup G)
[H.Normal]
:
H.relindex K ∣ H.index
theorem
AddSubgroup.relindex_dvd_of_le_left
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{K : AddSubgroup G}
(L : AddSubgroup G)
(hHK : H ≤ K)
:
K.relindex L ∣ H.relindex L
theorem
AddSubgroup.add_self_mem_of_index_two
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
(h : H.index = 2)
(a : G)
:
theorem
AddSubgroup.two_smul_mem_of_index_two
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
(h : H.index = 2)
(a : G)
:
theorem
AddSubgroup.index_bot_eq_card
{G : Type u_1}
[AddGroup G]
[Fintype G]
:
⊥.index = Fintype.card G
@[simp]
@[simp]
@[simp]
theorem
AddSubgroup.relindex_bot_left_eq_card
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
[Fintype ↥H]
:
⊥.relindex H = Fintype.card ↥H
theorem
Subgroup.relindex_bot_left_eq_card
{G : Type u_1}
[Group G]
(H : Subgroup G)
[Fintype ↥H]
:
⊥.relindex H = Fintype.card ↥H
@[simp]
@[simp]
@[simp]
theorem
AddSubgroup.nat_card_dvd_of_le
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
(K : AddSubgroup G)
(hHK : H ≤ K)
:
theorem
AddSubgroup.card_dvd_of_surjective
{G : Type u_2}
{H : Type u_3}
[AddGroup G]
[AddGroup H]
[Fintype G]
[Fintype H]
(f : G →+ H)
(hf : Function.Surjective ⇑f)
:
theorem
Subgroup.card_dvd_of_surjective
{G : Type u_2}
{H : Type u_3}
[Group G]
[Group H]
[Fintype G]
[Fintype H]
(f : G →* H)
(hf : Function.Surjective ⇑f)
:
theorem
AddSubgroup.index_map
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
{G' : Type u_2}
[AddGroup G']
(f : G →+ G')
:
(AddSubgroup.map f H).index = (H ⊔ f.ker).index * f.range.index
theorem
AddSubgroup.index_map_dvd
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
{G' : Type u_2}
[AddGroup G']
{f : G →+ G'}
(hf : Function.Surjective ⇑f)
:
(AddSubgroup.map f H).index ∣ H.index
theorem
Subgroup.index_map_dvd
{G : Type u_1}
[Group G]
(H : Subgroup G)
{G' : Type u_2}
[Group G']
{f : G →* G'}
(hf : Function.Surjective ⇑f)
:
(Subgroup.map f H).index ∣ H.index
theorem
AddSubgroup.dvd_index_map
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
{G' : Type u_2}
[AddGroup G']
{f : G →+ G'}
(hf : f.ker ≤ H)
:
H.index ∣ (AddSubgroup.map f H).index
theorem
AddSubgroup.index_map_eq
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
{G' : Type u_2}
[AddGroup G']
{f : G →+ G'}
(hf1 : Function.Surjective ⇑f)
(hf2 : f.ker ≤ H)
:
(AddSubgroup.map f H).index = H.index
theorem
Subgroup.index_map_eq
{G : Type u_1}
[Group G]
(H : Subgroup G)
{G' : Type u_2}
[Group G']
{f : G →* G'}
(hf1 : Function.Surjective ⇑f)
(hf2 : f.ker ≤ H)
:
(Subgroup.map f H).index = H.index
theorem
AddSubgroup.index_eq_card
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
[Fintype (G ⧸ H)]
:
H.index = Fintype.card (G ⧸ H)
theorem
Subgroup.index_eq_card
{G : Type u_1}
[Group G]
(H : Subgroup G)
[Fintype (G ⧸ H)]
:
H.index = Fintype.card (G ⧸ H)
theorem
AddSubgroup.index_mul_card
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
[Fintype G]
[hH : Fintype ↥H]
:
H.index * Fintype.card ↥H = Fintype.card G
theorem
Subgroup.index_mul_card
{G : Type u_1}
[Group G]
(H : Subgroup G)
[Fintype G]
[hH : Fintype ↥H]
:
H.index * Fintype.card ↥H = Fintype.card G
theorem
AddSubgroup.index_dvd_card
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
[Fintype G]
:
H.index ∣ Fintype.card G
theorem
Subgroup.index_dvd_card
{G : Type u_1}
[Group G]
(H : Subgroup G)
[Fintype G]
:
H.index ∣ Fintype.card G
theorem
AddSubgroup.relindex_eq_zero_of_le_left
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{K : AddSubgroup G}
{L : AddSubgroup G}
(hHK : H ≤ K)
(hKL : K.relindex L = 0)
:
H.relindex L = 0
theorem
AddSubgroup.relindex_eq_zero_of_le_right
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{K : AddSubgroup G}
{L : AddSubgroup G}
(hKL : K ≤ L)
(hHK : H.relindex K = 0)
:
H.relindex L = 0
theorem
AddSubgroup.index_eq_zero_of_relindex_eq_zero
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{K : AddSubgroup G}
(h : H.relindex K = 0)
:
H.index = 0
theorem
AddSubgroup.relindex_le_of_le_left
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{K : AddSubgroup G}
{L : AddSubgroup G}
(hHK : H ≤ K)
(hHL : H.relindex L ≠ 0)
:
K.relindex L ≤ H.relindex L
theorem
AddSubgroup.relindex_le_of_le_right
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{K : AddSubgroup G}
{L : AddSubgroup G}
(hKL : K ≤ L)
(hHL : H.relindex L ≠ 0)
:
H.relindex K ≤ H.relindex L
theorem
AddSubgroup.relindex_ne_zero_trans
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{K : AddSubgroup G}
{L : AddSubgroup G}
(hHK : H.relindex K ≠ 0)
(hKL : K.relindex L ≠ 0)
:
H.relindex L ≠ 0
theorem
AddSubgroup.relindex_inf_ne_zero
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{K : AddSubgroup G}
{L : AddSubgroup G}
(hH : H.relindex L ≠ 0)
(hK : K.relindex L ≠ 0)
:
theorem
AddSubgroup.index_inf_ne_zero
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{K : AddSubgroup G}
(hH : H.index ≠ 0)
(hK : K.index ≠ 0)
:
theorem
AddSubgroup.relindex_inf_le
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{K : AddSubgroup G}
{L : AddSubgroup G}
:
theorem
AddSubgroup.index_inf_le
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{K : AddSubgroup G}
:
theorem
AddSubgroup.relindex_iInf_ne_zero
{G : Type u_1}
[AddGroup G]
{L : AddSubgroup G}
{ι : Type u_2}
[_hι : Finite ι]
{f : ι → AddSubgroup G}
(hf : ∀ (i : ι), (f i).relindex L ≠ 0)
:
(⨅ (i : ι), f i).relindex L ≠ 0
theorem
AddSubgroup.relindex_iInf_le
{G : Type u_1}
[AddGroup G]
{L : AddSubgroup G}
{ι : Type u_2}
[Fintype ι]
(f : ι → AddSubgroup G)
:
(⨅ (i : ι), f i).relindex L ≤ ∏ i : ι, (f i).relindex L
abbrev
AddSubgroup.relindex_iInf_le.match_1
{G : Type u_2}
[AddGroup G]
{L : AddSubgroup G}
{ι : Type u_1}
[Fintype ι]
(f : ι → AddSubgroup G)
(motive : (∃ a ∈ Finset.univ, Nat.card (↥L ⧸ (f a).addSubgroupOf L) = 0) → Prop)
:
Equations
- ⋯ = ⋯
Instances For
theorem
AddSubgroup.index_iInf_ne_zero
{G : Type u_1}
[AddGroup G]
{ι : Type u_2}
[Finite ι]
{f : ι → AddSubgroup G}
(hf : ∀ (i : ι), (f i).index ≠ 0)
:
(⨅ (i : ι), f i).index ≠ 0
theorem
AddSubgroup.index_iInf_le
{G : Type u_1}
[AddGroup G]
{ι : Type u_2}
[Fintype ι]
(f : ι → AddSubgroup G)
:
(⨅ (i : ι), f i).index ≤ ∏ i : ι, (f i).index
@[simp]
@[simp]
theorem
AddSubgroup.relindex_eq_one
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{K : AddSubgroup G}
:
@[simp]
theorem
AddSubgroup.index_ne_zero_of_finite
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
[hH : Finite (G ⧸ H)]
:
H.index ≠ 0
noncomputable def
AddSubgroup.fintypeOfIndexNeZero
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
(hH : H.index ≠ 0)
:
Finite index implies finite quotient.
Equations
Instances For
theorem
AddSubgroup.fintypeOfIndexNeZero.proof_1
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
(hH : H.index ≠ 0)
:
noncomputable def
Subgroup.fintypeOfIndexNeZero
{G : Type u_1}
[Group G]
{H : Subgroup G}
(hH : H.index ≠ 0)
:
Finite index implies finite quotient.
Equations
- Subgroup.fintypeOfIndexNeZero hH = Fintype.ofFinite (G ⧸ H)
Instances For
theorem
AddSubgroup.one_lt_index_of_ne_top
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
[Finite (G ⧸ H)]
(hH : H ≠ ⊤)
:
1 < H.index
Typeclass for finite index subgroups.
- finiteIndex : H.index ≠ 0
The additive subgroup has finite index
Instances
theorem
AddSubgroup.FiniteIndex.finiteIndex
{G : Type u_2}
[AddGroup G]
{H : AddSubgroup G}
[self : H.FiniteIndex]
:
H.index ≠ 0
The additive subgroup has finite index
noncomputable def
AddSubgroup.fintypeQuotientOfFiniteIndex
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
[H.FiniteIndex]
:
A finite index subgroup has finite quotient
Equations
- H.fintypeQuotientOfFiniteIndex = AddSubgroup.fintypeOfIndexNeZero ⋯
Instances For
noncomputable def
Subgroup.fintypeQuotientOfFiniteIndex
{G : Type u_1}
[Group G]
(H : Subgroup G)
[H.FiniteIndex]
:
A finite index subgroup has finite quotient.
Equations
- H.fintypeQuotientOfFiniteIndex = Subgroup.fintypeOfIndexNeZero ⋯
Instances For
instance
AddSubgroup.finite_quotient_of_finiteIndex
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
[H.FiniteIndex]
:
Equations
- ⋯ = ⋯
theorem
AddSubgroup.finiteIndex_of_finite_quotient
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
[Finite (G ⧸ H)]
:
H.FiniteIndex
@[instance 100]
instance
AddSubgroup.finiteIndex_of_finite
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
[Finite G]
:
H.FiniteIndex
Equations
- ⋯ = ⋯
instance
AddSubgroup.instFiniteIndexInf
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
(K : AddSubgroup G)
[H.FiniteIndex]
[K.FiniteIndex]
:
(H ⊓ K).FiniteIndex
Equations
- ⋯ = ⋯
theorem
AddSubgroup.finiteIndex_of_le
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{K : AddSubgroup G}
[H.FiniteIndex]
(h : H ≤ K)
:
K.FiniteIndex
instance
Subgroup.finiteIndex_center
(G : Type u_1)
[Group G]
[Finite ↑(commutatorSet G)]
[Group.FG G]
:
(Subgroup.center G).FiniteIndex
Equations
- ⋯ = ⋯
theorem
Subgroup.index_center_le_pow
(G : Type u_1)
[Group G]
[Finite ↑(commutatorSet G)]
[Group.FG G]
:
(Subgroup.center G).index ≤ Nat.card ↑(commutatorSet G) ^ Group.rank G
theorem
AddMonoidHom.card_fiber_eq_of_mem_range
{G : Type u_1}
{M : Type u_2}
{F : Type u_3}
[AddGroup G]
[Fintype G]
[AddMonoid M]
[DecidableEq M]
[FunLike F G M]
[AddMonoidHomClass F G M]
(f : F)
{x : M}
{y : M}
(hx : x ∈ Set.range ⇑f)
(hy : y ∈ Set.range ⇑f)
:
(Finset.filter (fun (g : G) => f g = x) Finset.univ).card = (Finset.filter (fun (g : G) => f g = y) Finset.univ).card
theorem
MonoidHom.card_fiber_eq_of_mem_range
{G : Type u_1}
{M : Type u_2}
{F : Type u_3}
[Group G]
[Fintype G]
[Monoid M]
[DecidableEq M]
[FunLike F G M]
[MonoidHomClass F G M]
(f : F)
{x : M}
{y : M}
(hx : x ∈ Set.range ⇑f)
(hy : y ∈ Set.range ⇑f)
:
(Finset.filter (fun (g : G) => f g = x) Finset.univ).card = (Finset.filter (fun (g : G) => f g = y) Finset.univ).card