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 towersMulAction.index_stabilizer
: the index of the stabilizer is the cardinality of the orbit
The index of an additive subgroup as a natural number. Returns 0 if the index is infinite.
Instances For
If H
and K
are subgroups of an additive group G
, then relindex H K : ℕ
is the index of H ∩ K
in K
. The function returns 0
if the index is infinite.
Equations
- H.relindex K = (H.addSubgroupOf K).index
Instances For
theorem
AddSubgroup.index_comap_of_surjective
{G : Type u_1}
{G' : Type u_2}
[AddGroup G]
[AddGroup G']
(H : AddSubgroup G)
{f : G' →+ G}
(hf : Function.Surjective ⇑f)
:
theorem
AddSubgroup.relindex_comap
{G : Type u_1}
{G' : Type u_2}
[AddGroup G]
[AddGroup G']
(H : AddSubgroup G)
(f : G' →+ G)
(K : AddSubgroup G')
:
theorem
AddSubgroup.relindex_dvd_index_of_le
{G : Type u_1}
[AddGroup G]
{H K : AddSubgroup G}
(h : H ≤ K)
:
theorem
AddSubgroup.relindex_addSubgroupOf
{G : Type u_1}
[AddGroup G]
{H K L : AddSubgroup G}
(hKL : K ≤ L)
:
@[simp]
theorem
AddSubgroup.relindex_sup_right
{G : Type u_1}
[AddGroup G]
(H K : AddSubgroup G)
[K.Normal]
:
@[simp]
theorem
AddSubgroup.relindex_sup_left
{G : Type u_1}
[AddGroup G]
(H K : AddSubgroup G)
[K.Normal]
:
theorem
AddSubgroup.relindex_dvd_index_of_normal
{G : Type u_1}
[AddGroup G]
(H K : AddSubgroup G)
[H.Normal]
:
theorem
AddSubgroup.relindex_dvd_of_le_left
{G : Type u_1}
[AddGroup G]
{H K : AddSubgroup G}
(L : AddSubgroup G)
(hHK : H ≤ K)
:
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)
:
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
theorem
AddSubgroup.index_map_dvd
{G : Type u_1}
{G' : Type u_2}
[AddGroup G]
[AddGroup G']
(H : AddSubgroup G)
{f : G →+ G'}
(hf : Function.Surjective ⇑f)
:
theorem
AddSubgroup.index_map_eq
{G : Type u_1}
{G' : Type u_2}
[AddGroup G]
[AddGroup G']
(H : AddSubgroup G)
{f : G →+ G'}
(hf1 : Function.Surjective ⇑f)
(hf2 : f.ker ≤ H)
:
theorem
AddSubgroup.index_map_subtype
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
(K : AddSubgroup ↥H)
:
theorem
AddSubgroup.relindex_eq_zero_of_le_left
{G : Type u_1}
[AddGroup G]
{H K L : AddSubgroup G}
(hHK : H ≤ K)
(hKL : K.relindex L = 0)
:
theorem
AddSubgroup.relindex_eq_zero_of_le_right
{G : Type u_1}
[AddGroup G]
{H K L : AddSubgroup G}
(hKL : K ≤ L)
(hHK : H.relindex K = 0)
:
theorem
AddSubgroup.index_eq_zero_of_relindex_eq_zero
{G : Type u_1}
[AddGroup G]
{H K : AddSubgroup G}
(h : H.relindex K = 0)
:
theorem
AddSubgroup.relindex_iInf_ne_zero
{G : Type u_1}
[AddGroup G]
{L : AddSubgroup G}
{ι : Type u_3}
[_hι : Finite ι]
{f : ι → AddSubgroup G}
(hf : ∀ (i : ι), (f i).relindex L ≠ 0)
:
theorem
AddSubgroup.relindex_iInf_le
{G : Type u_1}
[AddGroup G]
{L : AddSubgroup G}
{ι : Type u_3}
[Fintype ι]
(f : ι → AddSubgroup G)
:
theorem
AddSubgroup.index_iInf_le
{G : Type u_1}
[AddGroup G]
{ι : Type u_3}
[Fintype ι]
(f : ι → AddSubgroup G)
:
@[simp]
@[simp]
@[simp]
@[deprecated AddSubgroup.inf_eq_bot_of_coprime (since := "2024-12-18")]
theorem
add_inf_eq_bot_of_coprime
{G : Type u_1}
[AddGroup G]
{H K : AddSubgroup G}
(h : (Nat.card ↥H).Coprime (Nat.card ↥K))
:
Alias of AddSubgroup.inf_eq_bot_of_coprime
.
theorem
AddSubgroup.index_ne_zero_of_finite
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
[hH : Finite (G ⧸ H)]
:
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
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
Subgroup.finite_quotient_of_finite_quotient_of_index_ne_zero
{G : Type u_1}
[Group G]
{H : Subgroup G}
{X : Type u_3}
[MulAction G X]
[Finite (MulAction.orbitRel.Quotient G X)]
(hi : H.index ≠ 0)
:
Finite (MulAction.orbitRel.Quotient (↥H) X)
theorem
AddSubgroup.finite_quotient_of_finite_quotient_of_index_ne_zero
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{X : Type u_3}
[AddAction G X]
[Finite (AddAction.orbitRel.Quotient G X)]
(hi : H.index ≠ 0)
:
Finite (AddAction.orbitRel.Quotient (↥H) X)
theorem
Subgroup.finite_quotient_of_pretransitive_of_index_ne_zero
{G : Type u_1}
[Group G]
{H : Subgroup G}
{X : Type u_3}
[MulAction G X]
[MulAction.IsPretransitive G X]
(hi : H.index ≠ 0)
:
Finite (MulAction.orbitRel.Quotient (↥H) X)
theorem
AddSubgroup.finite_quotient_of_pretransitive_of_index_ne_zero
{G : Type u_1}
[AddGroup G]
{H : AddSubgroup G}
{X : Type u_3}
[AddAction G X]
[AddAction.IsPretransitive G X]
(hi : H.index ≠ 0)
:
Finite (AddAction.orbitRel.Quotient (↥H) X)
@[simp]
theorem
AddSubgroup.index_sum
{G : Type u_1}
{G' : Type u_2}
[AddGroup G]
[AddGroup G']
(H : AddSubgroup G)
(K : AddSubgroup G')
:
@[simp]
@[simp]
@[simp]
@[simp]
Typeclass for finite index subgroups.
The additive subgroup has finite index
Instances
noncomputable def
Subgroup.fintypeQuotientOfFiniteIndex
{G : Type u_1}
[Group G]
(H : Subgroup G)
[H.FiniteIndex]
:
A finite index subgroup has finite quotient.
Equations
Instances For
noncomputable def
AddSubgroup.fintypeQuotientOfFiniteIndex
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
[H.FiniteIndex]
:
A finite index subgroup has finite quotient
Instances For
instance
Subgroup.finite_quotient_of_finiteIndex
{G : Type u_1}
[Group G]
(H : Subgroup G)
[H.FiniteIndex]
:
instance
AddSubgroup.finite_quotient_of_finiteIndex
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
[H.FiniteIndex]
:
theorem
AddSubgroup.finiteIndex_of_finite_quotient
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
[Finite (G ⧸ H)]
:
@[instance 100]
@[instance 100]
instance
AddSubgroup.finiteIndex_of_finite
{G : Type u_1}
[AddGroup G]
(H : AddSubgroup G)
[Finite G]
:
instance
Subgroup.instFiniteIndexMin
{G : Type u_1}
[Group G]
(H K : Subgroup G)
[H.FiniteIndex]
[K.FiniteIndex]
:
(H ⊓ K).FiniteIndex
instance
AddSubgroup.instFiniteIndexMin
{G : Type u_1}
[AddGroup G]
(H K : AddSubgroup G)
[H.FiniteIndex]
[K.FiniteIndex]
:
(H ⊓ K).FiniteIndex
theorem
Subgroup.finiteIndex_iInf
{G : Type u_1}
[Group G]
{ι : Type u_3}
[Finite ι]
{f : ι → Subgroup G}
(hf : ∀ (i : ι), (f i).FiniteIndex)
:
(⨅ (i : ι), f i).FiniteIndex
theorem
AddSubgroup.finiteIndex_iInf
{G : Type u_1}
[AddGroup G]
{ι : Type u_3}
[Finite ι]
{f : ι → AddSubgroup G}
(hf : ∀ (i : ι), (f i).FiniteIndex)
:
(⨅ (i : ι), f i).FiniteIndex
theorem
Subgroup.finiteIndex_iInf'
{G : Type u_1}
[Group G]
{ι : Type u_3}
{s : Finset ι}
(f : ι → Subgroup G)
(hs : ∀ i ∈ s, (f i).FiniteIndex)
:
(⨅ i ∈ s, f i).FiniteIndex
theorem
AddSubgroup.finiteIndex_iInf'
{G : Type u_1}
[AddGroup G]
{ι : Type u_3}
{s : Finset ι}
(f : ι → AddSubgroup G)
(hs : ∀ i ∈ s, (f i).FiniteIndex)
:
(⨅ i ∈ s, f i).FiniteIndex
instance
Subgroup.instFiniteIndex_subgroupOf
{G : Type u_1}
[Group G]
(H K : Subgroup G)
[H.FiniteIndex]
:
(H.subgroupOf K).FiniteIndex
instance
AddSubgroup.instFiniteIndex_addSubgroupOf
{G : Type u_1}
[AddGroup G]
(H K : AddSubgroup G)
[H.FiniteIndex]
:
(H.addSubgroupOf K).FiniteIndex
theorem
Subgroup.finiteIndex_of_le
{G : Type u_1}
[Group G]
{H K : Subgroup G}
[H.FiniteIndex]
(h : H ≤ K)
:
theorem
AddSubgroup.finiteIndex_of_le
{G : Type u_1}
[AddGroup G]
{H K : AddSubgroup G}
[H.FiniteIndex]
(h : H ≤ K)
:
theorem
Subgroup.index_antitone
{G : Type u_1}
[Group G]
{H K : Subgroup G}
(h : H ≤ K)
[H.FiniteIndex]
:
theorem
AddSubgroup.index_antitone
{G : Type u_1}
[AddGroup G]
{H K : AddSubgroup G}
(h : H ≤ K)
[H.FiniteIndex]
:
theorem
Subgroup.index_strictAnti
{G : Type u_1}
[Group G]
{H K : Subgroup G}
(h : H < K)
[H.FiniteIndex]
:
theorem
AddSubgroup.index_strictAnti
{G : Type u_1}
[AddGroup G]
{H K : AddSubgroup G}
(h : H < K)
[H.FiniteIndex]
:
instance
Subgroup.finiteIndex_normalCore
{G : Type u_1}
[Group G]
(H : Subgroup G)
[H.FiniteIndex]
:
theorem
MulAction.index_stabilizer_of_transitive
(G : Type u_1)
{X : Type u_2}
[Group G]
[MulAction G X]
(x : X)
[IsPretransitive G X]
:
theorem
AddAction.index_stabilizer_of_transitive
(G : Type u_1)
{X : Type u_2}
[AddGroup G]
[AddAction G X]
(x : X)
[IsPretransitive G X]
:
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 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
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 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