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 of- H : Subgroup Gas a natural number, and returns 0 if the index is infinite.
- H.relindex K: the relative index of- H : Subgroup Gin- K : Subgroup Gas 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: If- H ≤ K, then- H.relindex K * K.index = H.index
- index_dvd_of_le: If- H ≤ K, then- K.index ∣ H.index
- relindex_mul_relindex:- relindexis multiplicative in towers
- MulAction.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