mathlib documentation

group_theory.coset

Cosets #

This file develops the basic theory of left and right cosets.

Main definitions #

Notation #

TODO #

Add to_additive to preimage_mk_equiv_subgroup_times_set.

def left_add_coset {α : Type u_1} [has_add α] (a : α) (s : set α) :
set α

The left coset a+s for an element a : α and a subset s : set α

Equations
  • a +l s = (λ (x : α), a + x) '' s
def left_coset {α : Type u_1} [has_mul α] (a : α) (s : set α) :
set α

The left coset a * s for an element a : α and a subset s : set α

Equations
  • a *l s = (λ (x : α), a * x) '' s
def right_coset {α : Type u_1} [has_mul α] (s : set α) (a : α) :
set α

The right coset s * a for an element a : α and a subset s : set α

Equations
  • s *r a = (λ (x : α), x * a) '' s
def right_add_coset {α : Type u_1} [has_add α] (s : set α) (a : α) :
set α

The right coset s+a for an element a : α and a subset s : set α

Equations
  • s +r a = (λ (x : α), x + a) '' s
theorem mem_left_coset {α : Type u_1} [has_mul α] {s : set α} {x : α} (a : α) (hxS : x ∈ s) :
a * x ∈ a *l s
theorem mem_left_add_coset {α : Type u_1} [has_add α] {s : set α} {x : α} (a : α) (hxS : x ∈ s) :
a + x ∈ a +l s
theorem mem_right_coset {α : Type u_1} [has_mul α] {s : set α} {x : α} (a : α) (hxS : x ∈ s) :
x * a ∈ s *r a
theorem mem_right_add_coset {α : Type u_1} [has_add α] {s : set α} {x : α} (a : α) (hxS : x ∈ s) :
x + a ∈ s +r a
def left_coset_equivalence {α : Type u_1} [has_mul α] (s : set α) (a b : α) :
Prop

Equality of two left cosets a * s and b * s.

Equations
def left_add_coset_equivalence {α : Type u_1} [has_add α] (s : set α) (a b : α) :
Prop

Equality of two left cosets a + s and b + s.

Equations
theorem left_coset_equivalence_rel {α : Type u_1} [has_mul α] (s : set α) :
def right_coset_equivalence {α : Type u_1} [has_mul α] (s : set α) (a b : α) :
Prop

Equality of two right cosets s * a and s * b.

Equations
def right_add_coset_equivalence {α : Type u_1} [has_add α] (s : set α) (a b : α) :
Prop

Equality of two right cosets s + a and s + b.

Equations
theorem right_coset_equivalence_rel {α : Type u_1} [has_mul α] (s : set α) :
@[simp]
theorem left_add_coset_assoc {α : Type u_1} [add_semigroup α] (s : set α) (a b : α) :
a +l (b +l s) = (a + b) +l s
@[simp]
theorem left_coset_assoc {α : Type u_1} [semigroup α] (s : set α) (a b : α) :
a *l (b *l s) = a * b *l s
@[simp]
theorem right_coset_assoc {α : Type u_1} [semigroup α] (s : set α) (a b : α) :
s *r a *r b = s *r a * b
@[simp]
theorem right_add_coset_assoc {α : Type u_1} [add_semigroup α] (s : set α) (a b : α) :
s +r a +r b = s +r (a + b)
theorem left_coset_right_coset {α : Type u_1} [semigroup α] (s : set α) (a b : α) :
a *l s *r b = a *l (s *r b)
theorem left_add_coset_right_add_coset {α : Type u_1} [add_semigroup α] (s : set α) (a b : α) :
a +l s +r b = a +l (s +r b)
@[simp]
theorem zero_left_add_coset {α : Type u_1} [add_monoid α] (s : set α) :
0 +l s = s
@[simp]
theorem one_left_coset {α : Type u_1} [monoid α] (s : set α) :
1 *l s = s
@[simp]
theorem right_add_coset_zero {α : Type u_1} [add_monoid α] (s : set α) :
s +r 0 = s
@[simp]
theorem right_coset_one {α : Type u_1} [monoid α] (s : set α) :
s *r 1 = s
theorem mem_own_left_coset {α : Type u_1} [monoid α] (s : submonoid α) (a : α) :
a ∈ a *l ↑s
theorem mem_own_left_add_coset {α : Type u_1} [add_monoid α] (s : add_submonoid α) (a : α) :
a ∈ a +l ↑s
theorem mem_own_right_coset {α : Type u_1} [monoid α] (s : submonoid α) (a : α) :
a ∈ ↑s *r a
theorem mem_own_right_add_coset {α : Type u_1} [add_monoid α] (s : add_submonoid α) (a : α) :
a ∈ ↑s +r a
theorem mem_left_add_coset_left_add_coset {α : Type u_1} [add_monoid α] (s : add_submonoid α) {a : α} (ha : a +l ↑s = ↑s) :
a ∈ s
theorem mem_left_coset_left_coset {α : Type u_1} [monoid α] (s : submonoid α) {a : α} (ha : a *l ↑s = ↑s) :
a ∈ s
theorem mem_right_coset_right_coset {α : Type u_1} [monoid α] (s : submonoid α) {a : α} (ha : ↑s *r a = ↑s) :
a ∈ s
theorem mem_right_add_coset_right_add_coset {α : Type u_1} [add_monoid α] (s : add_submonoid α) {a : α} (ha : ↑s +r a = ↑s) :
a ∈ s
theorem mem_left_add_coset_iff {α : Type u_1} [add_group α] {s : set α} {x : α} (a : α) :
x ∈ a +l s ↔ -a + x ∈ s
theorem mem_left_coset_iff {α : Type u_1} [group α] {s : set α} {x : α} (a : α) :
x ∈ a *l s ↔ a⁻¹ * x ∈ s
theorem mem_right_coset_iff {α : Type u_1} [group α] {s : set α} {x : α} (a : α) :
x ∈ s *r a ↔ x * a⁻¹ ∈ s
theorem mem_right_add_coset_iff {α : Type u_1} [add_group α] {s : set α} {x : α} (a : α) :
x ∈ s +r a ↔ x + -a ∈ s
theorem left_coset_mem_left_coset {α : Type u_1} [group α] (s : subgroup α) {a : α} (ha : a ∈ s) :
a *l ↑s = ↑s
theorem left_add_coset_mem_left_add_coset {α : Type u_1} [add_group α] (s : add_subgroup α) {a : α} (ha : a ∈ s) :
a +l ↑s = ↑s
theorem right_coset_mem_right_coset {α : Type u_1} [group α] (s : subgroup α) {a : α} (ha : a ∈ s) :
↑s *r a = ↑s
theorem right_add_coset_mem_right_add_coset {α : Type u_1} [add_group α] (s : add_subgroup α) {a : α} (ha : a ∈ s) :
↑s +r a = ↑s
theorem eq_cosets_of_normal {α : Type u_1} [group α] (s : subgroup α) (N : s.normal) (g : α) :
g *l ↑s = ↑s *r g
theorem eq_add_cosets_of_normal {α : Type u_1} [add_group α] (s : add_subgroup α) (N : s.normal) (g : α) :
g +l ↑s = ↑s +r g
theorem normal_of_eq_cosets {α : Type u_1} [group α] (s : subgroup α) (h : ∀ (g : α), g *l ↑s = ↑s *r g) :
theorem normal_of_eq_add_cosets {α : Type u_1} [add_group α] (s : add_subgroup α) (h : ∀ (g : α), g +l ↑s = ↑s +r g) :
theorem normal_iff_eq_add_cosets {α : Type u_1} [add_group α] (s : add_subgroup α) :
s.normal ↔ ∀ (g : α), g +l ↑s = ↑s +r g
theorem normal_iff_eq_cosets {α : Type u_1} [group α] (s : subgroup α) :
s.normal ↔ ∀ (g : α), g *l ↑s = ↑s *r g
theorem left_add_coset_eq_iff {α : Type u_1} [add_group α] (s : add_subgroup α) {x y : α} :
x +l ↑s = y +l ↑s ↔ -x + y ∈ s
theorem left_coset_eq_iff {α : Type u_1} [group α] (s : subgroup α) {x y : α} :
x *l ↑s = y *l ↑s ↔ x⁻¹ * y ∈ s
theorem right_coset_eq_iff {α : Type u_1} [group α] (s : subgroup α) {x y : α} :
↑s *r x = ↑s *r y ↔ y * x⁻¹ ∈ s
theorem right_add_coset_eq_iff {α : Type u_1} [add_group α] (s : add_subgroup α) {x y : α} :
↑s +r x = ↑s +r y ↔ y + -x ∈ s
def quotient_add_group.left_rel {α : Type u_1} [add_group α] (s : add_subgroup α) :

The equivalence relation corresponding to the partition of a group by left cosets of a subgroup.

Equations
def quotient_group.left_rel {α : Type u_1} [group α] (s : subgroup α) :

The equivalence relation corresponding to the partition of a group by left cosets of a subgroup.

Equations
@[protected, instance]
def quotient_group.left_rel_decidable {α : Type u_1} [group α] (s : subgroup α) [decidable_pred (λ (_x : α), _x ∈ s)] :
Equations
@[protected, instance]
def quotient_add_group.left_rel_decidable {α : Type u_1} [add_group α] (s : add_subgroup α) [decidable_pred (λ (_x : α), _x ∈ s)] :
Equations
@[protected, instance]

α ⧸ s is the quotient type representing the left cosets of s. If s is a normal subgroup, α ⧸ s is a group

Equations
@[protected, instance]
def quotient_group.subgroup.has_quotient {α : Type u_1} [group α] :

α ⧸ s is the quotient type representing the left cosets of s. If s is a normal subgroup, α ⧸ s is a group

Equations
def quotient_group.right_rel {α : Type u_1} [group α] (s : subgroup α) :

The equivalence relation corresponding to the partition of a group by right cosets of a subgroup.

Equations
def quotient_add_group.right_rel {α : Type u_1} [add_group α] (s : add_subgroup α) :

The equivalence relation corresponding to the partition of a group by right cosets of a subgroup.

Equations
@[protected, instance]
def quotient_group.right_rel_decidable {α : Type u_1} [group α] (s : subgroup α) [decidable_pred (λ (_x : α), _x ∈ s)] :
Equations
@[protected, instance]
def quotient_add_group.right_rel_decidable {α : Type u_1} [add_group α] (s : add_subgroup α) [decidable_pred (λ (_x : α), _x ∈ s)] :
Equations

Right cosets are in bijection with left cosets.

Equations

Right cosets are in bijection with left cosets.

Equations
@[protected, instance]
def quotient_group.fintype {α : Type u_1} [group α] [fintype α] (s : subgroup α) [decidable_rel setoid.r] :
fintype (α ⧸ s)
Equations
def quotient_add_group.mk {α : Type u_1} [add_group α] {s : add_subgroup α} (a : α) :
α ⧸ s

The canonical map from an add_group α to the quotient α ⧸ s.

def quotient_group.mk {α : Type u_1} [group α] {s : subgroup α} (a : α) :
α ⧸ s

The canonical map from a group α to the quotient α ⧸ s.

theorem quotient_group.induction_on {α : Type u_1} [group α] {s : subgroup α} {C : α ⧸ s → Prop} (x : α ⧸ s) (H : ∀ (z : α), C (quotient_group.mk z)) :
C x
theorem quotient_add_group.induction_on {α : Type u_1} [add_group α] {s : add_subgroup α} {C : α ⧸ s → Prop} (x : α ⧸ s) (H : ∀ (z : α), C (quotient_add_group.mk z)) :
C x
@[protected, instance]
def quotient_group.has_quotient.quotient.has_coe_t {α : Type u_1} [group α] {s : subgroup α} :
has_coe_t α (α ⧸ s)
Equations
theorem quotient_add_group.induction_on' {α : Type u_1} [add_group α] {s : add_subgroup α} {C : α ⧸ s → Prop} (x : α ⧸ s) (H : ∀ (z : α), C ↑z) :
C x
theorem quotient_group.induction_on' {α : Type u_1} [group α] {s : subgroup α} {C : α ⧸ s → Prop} (x : α ⧸ s) (H : ∀ (z : α), C ↑z) :
C x
@[simp]
theorem quotient_add_group.quotient_lift_on_coe {α : Type u_1} [add_group α] {s : add_subgroup α} {β : Sort u_2} (f : α → β) (h : ∀ (a b : α), setoid.r a b → f a = f b) (x : α) :
@[simp]
theorem quotient_group.quotient_lift_on_coe {α : Type u_1} [group α] {s : subgroup α} {β : Sort u_2} (f : α → β) (h : ∀ (a b : α), setoid.r a b → f a = f b) (x : α) :
theorem quotient_add_group.forall_coe {α : Type u_1} [add_group α] {s : add_subgroup α} {C : α ⧸ s → Prop} :
(∀ (x : α ⧸ s), C x) ↔ ∀ (x : α), C ↑x
theorem quotient_group.forall_coe {α : Type u_1} [group α] {s : subgroup α} {C : α ⧸ s → Prop} :
(∀ (x : α ⧸ s), C x) ↔ ∀ (x : α), C ↑x
@[protected, instance]
def quotient_group.has_quotient.quotient.inhabited {α : Type u_1} [group α] (s : subgroup α) :
inhabited (α ⧸ s)
Equations
@[protected]
theorem quotient_add_group.eq {α : Type u_1} [add_group α] {s : add_subgroup α} {a b : α} :
↑a = ↑b ↔ -a + b ∈ s
@[protected]
theorem quotient_group.eq {α : Type u_1} [group α] {s : subgroup α} {a b : α} :
↑a = ↑b ↔ a⁻¹ * b ∈ s
theorem quotient_add_group.eq' {α : Type u_1} [add_group α] {s : add_subgroup α} {a b : α} :
theorem quotient_group.eq' {α : Type u_1} [group α] {s : subgroup α} {a b : α} :
theorem quotient_group.out_eq' {α : Type u_1} [group α] {s : subgroup α} (a : α ⧸ s) :
theorem quotient_add_group.out_eq' {α : Type u_1} [add_group α] {s : add_subgroup α} (a : α ⧸ s) :
theorem quotient_add_group.mk_out'_eq_mul {α : Type u_1} [add_group α] (s : add_subgroup α) (g : α) :
theorem quotient_group.mk_out'_eq_mul {α : Type u_1} [group α] (s : subgroup α) (g : α) :
theorem quotient_add_group.mk_mul_of_mem {α : Type u_1} [add_group α] {s : add_subgroup α} (g₁ g₂ : α) (hg₂ : g₂ ∈ s) :
theorem quotient_group.mk_mul_of_mem {α : Type u_1} [group α] {s : subgroup α} (g₁ g₂ : α) (hg₂ : g₂ ∈ s) :
theorem quotient_group.eq_class_eq_left_coset {α : Type u_1} [group α] (s : subgroup α) (g : α) :
{x : α | ↑x = ↑g} = g *l ↑s
theorem quotient_add_group.eq_class_eq_left_coset {α : Type u_1} [add_group α] (s : add_subgroup α) (g : α) :
{x : α | ↑x = ↑g} = g +l ↑s
theorem quotient_group.preimage_image_coe {α : Type u_1} [group α] (N : subgroup α) (s : set α) :
coe ⁻¹' (coe '' s) = ⋃ (x : ↥N), (λ (y : α), y * ↑x) ⁻¹' s
theorem quotient_add_group.preimage_image_coe {α : Type u_1} [add_group α] (N : add_subgroup α) (s : set α) :
coe ⁻¹' (coe '' s) = ⋃ (x : ↥N), (λ (y : α), y + ↑x) ⁻¹' s
def subgroup.left_coset_equiv_subgroup {α : Type u_1} [group α] {s : subgroup α} (g : α) :

The natural bijection between a left coset g * s and s.

Equations
def add_subgroup.left_coset_equiv_add_subgroup {α : Type u_1} [add_group α] {s : add_subgroup α} (g : α) :

The natural bijection between the cosets g + s and s.

Equations
def subgroup.right_coset_equiv_subgroup {α : Type u_1} [group α] {s : subgroup α} (g : α) :

The natural bijection between a right coset s * g and s.

Equations
def add_subgroup.right_coset_equiv_add_subgroup {α : Type u_1} [add_group α] {s : add_subgroup α} (g : α) :

The natural bijection between the cosets s + g and s.

Equations
noncomputable def subgroup.group_equiv_quotient_times_subgroup {α : Type u_1} [group α] {s : subgroup α} :
α ≃ (α ⧸ s) × ↥s

A (non-canonical) bijection between a group α and the product (α/s) × s

Equations
noncomputable def add_subgroup.add_group_equiv_quotient_times_add_subgroup {α : Type u_1} [add_group α] {s : add_subgroup α} :
α ≃ (α ⧸ s) × ↥s

A (non-canonical) bijection between an add_group α and the product (α/s) × s

Equations
@[simp]
theorem subgroup.quotient_equiv_prod_of_le'_symm_apply {α : Type u_1} [group α] {s t : subgroup α} (h_le : s ≤ t) (f : α ⧸ t → α) (hf : function.right_inverse f quotient_group.mk) (a : (α ⧸ t) × ↥t ⧸ s.subgroup_of t) :
⇑((subgroup.quotient_equiv_prod_of_le' h_le f hf).symm) a = quotient.map' (λ (b : ↥t), (f a.fst) * ↑b) _ a.snd
def subgroup.quotient_equiv_prod_of_le' {α : Type u_1} [group α] {s t : subgroup α} (h_le : s ≤ t) (f : α ⧸ t → α) (hf : function.right_inverse f quotient_group.mk) :
α ⧸ s ≃ (α ⧸ t) × ↥t ⧸ s.subgroup_of t

If H ≤ K, then G/H ≃ G/K × K/H constructively, using the provided right inverse of the quotient map G → G/K. The classical version is quotient_equiv_prod_of_le.

Equations
@[simp]
theorem add_subgroup.quotient_equiv_sum_of_le'_symm_apply {α : Type u_1} [add_group α] {s t : add_subgroup α} (h_le : s ≤ t) (f : α ⧸ t → α) (hf : function.right_inverse f quotient_add_group.mk) (a : (α ⧸ t) × ↥t ⧸ s.add_subgroup_of t) :
@[simp]
theorem add_subgroup.quotient_equiv_sum_of_le'_apply {α : Type u_1} [add_group α] {s t : add_subgroup α} (h_le : s ≤ t) (f : α ⧸ t → α) (hf : function.right_inverse f quotient_add_group.mk) (a : α ⧸ s) :
⇑(add_subgroup.quotient_equiv_sum_of_le' h_le f hf) a = (quotient.map' id _ a, quotient.map' (λ (g : α), ⟨-f (quotient.mk' g) + g, _⟩) _ a)
def add_subgroup.quotient_equiv_sum_of_le' {α : Type u_1} [add_group α] {s t : add_subgroup α} (h_le : s ≤ t) (f : α ⧸ t → α) (hf : function.right_inverse f quotient_add_group.mk) :
α ⧸ s ≃ (α ⧸ t) × ↥t ⧸ s.add_subgroup_of t

If H ≤ K, then G/H ≃ G/K × K/H constructively, using the provided right inverse of the quotient map G → G/K. The classical version is quotient_equiv_prod_of_le.

Equations
@[simp]
theorem subgroup.quotient_equiv_prod_of_le'_apply {α : Type u_1} [group α] {s t : subgroup α} (h_le : s ≤ t) (f : α ⧸ t → α) (hf : function.right_inverse f quotient_group.mk) (a : α ⧸ s) :
⇑(subgroup.quotient_equiv_prod_of_le' h_le f hf) a = (quotient.map' id _ a, quotient.map' (λ (g : α), ⟨(f (quotient.mk' g))⁻¹ * g, _⟩) _ a)
@[simp]
theorem subgroup.quotient_equiv_prod_of_le_symm_apply {α : Type u_1} [group α] {s t : subgroup α} (h_le : s ≤ t) (a : (α ⧸ t) × ↥t ⧸ s.subgroup_of t) :
noncomputable def add_subgroup.quotient_equiv_sum_of_le {α : Type u_1} [add_group α] {s t : add_subgroup α} (h_le : s ≤ t) :
α ⧸ s ≃ (α ⧸ t) × ↥t ⧸ s.add_subgroup_of t

If H ≤ K, then G/H ≃ G/K × K/H nonconstructively. The constructive version is quotient_equiv_prod_of_le'.

Equations
@[simp]
theorem add_subgroup.quotient_equiv_sum_of_le_apply {α : Type u_1} [add_group α] {s t : add_subgroup α} (h_le : s ≤ t) (a : α ⧸ s) :
@[simp]
theorem add_subgroup.quotient_equiv_sum_of_le_symm_apply {α : Type u_1} [add_group α] {s t : add_subgroup α} (h_le : s ≤ t) (a : (α ⧸ t) × ↥t ⧸ s.add_subgroup_of t) :
noncomputable def subgroup.quotient_equiv_prod_of_le {α : Type u_1} [group α] {s t : subgroup α} (h_le : s ≤ t) :
α ⧸ s ≃ (α ⧸ t) × ↥t ⧸ s.subgroup_of t

If H ≤ K, then G/H ≃ G/K × K/H nonconstructively. The constructive version is quotient_equiv_prod_of_le'.

Equations
@[simp]
theorem subgroup.quotient_equiv_prod_of_le_apply {α : Type u_1} [group α] {s t : subgroup α} (h_le : s ≤ t) (a : α ⧸ s) :

If K ≤ L, then there is an embedding K ⧸ (H.add_subgroup_of K) ↪ L ⧸ (H.add_subgroup_of L).

Equations
def subgroup.quotient_subgroup_of_embedding_of_le {α : Type u_1} [group α] (H : subgroup α) {K L : subgroup α} (h : K ≤ L) :

If K ≤ L, then there is an embedding K ⧸ (H.subgroup_of K) ↪ L ⧸ (H.subgroup_of L).

Equations
theorem subgroup.card_eq_card_quotient_mul_card_subgroup {α : Type u_1} [group α] [fintype α] (s : subgroup α) [fintype ↥s] [decidable_pred (λ (a : α), a ∈ s)] :
theorem subgroup.card_subgroup_dvd_card {α : Type u_1} [group α] [fintype α] (s : subgroup α) [fintype ↥s] :

Lagrange's Theorem: The order of a subgroup divides the order of its ambient group.

theorem subgroup.card_quotient_dvd_card {α : Type u_1} [group α] [fintype α] (s : subgroup α) [decidable_pred (λ (a : α), a ∈ s)] [fintype ↥s] :
theorem add_subgroup.card_quotient_dvd_card {α : Type u_1} [add_group α] [fintype α] (s : add_subgroup α) [decidable_pred (λ (a : α), a ∈ s)] [fintype ↥s] :
theorem add_subgroup.card_dvd_of_injective {α : Type u_1} [add_group α] {H : Type u_2} [add_group H] [fintype α] [fintype H] (f : α →+ H) (hf : function.injective ⇑f) :
theorem subgroup.card_dvd_of_injective {α : Type u_1} [group α] {H : Type u_2} [group H] [fintype α] [fintype H] (f : α →* H) (hf : function.injective ⇑f) :
theorem subgroup.card_dvd_of_le {α : Type u_1} [group α] {H K : subgroup α} [fintype ↥H] [fintype ↥K] (hHK : H ≤ K) :
theorem add_subgroup.card_dvd_of_le {α : Type u_1} [add_group α] {H K : add_subgroup α} [fintype ↥H] [fintype ↥K] (hHK : H ≤ K) :
theorem subgroup.card_comap_dvd_of_injective {α : Type u_1} [group α] {H : Type u_2} [group H] (K : subgroup H) [fintype ↥K] (f : α →* H) [fintype ↥(subgroup.comap f K)] (hf : function.injective ⇑f) :
noncomputable def quotient_group.preimage_mk_equiv_subgroup_times_set {α : Type u_1} [group α] (s : subgroup α) (t : set (α ⧸ s)) :

If s is a subgroup of the group α, and t is a subset of α/s, then there is a (typically non-canonical) bijection between the preimage of t in α and the product s × t.

Equations