Cosets #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file develops the basic theory of left and right cosets.
Main definitions #
left_coset a s
: the left coseta * s
for an elementa : α
and a subsets ⊆ α
, for anadd_group
this isleft_add_coset a s
.right_coset s a
: the right cosets * a
for an elementa : α
and a subsets ⊆ α
, for anadd_group
this isright_add_coset s a
.quotient_group.quotient s
: the quotient type representing the left cosets with respect to a subgroups
, for anadd_group
this isquotient_add_group.quotient s
.quotient_group.mk
: the canonical map fromα
toα/s
for a subgroups
ofα
, for anadd_group
this isquotient_add_group.mk
.subgroup.left_coset_equiv_subgroup
: the natural bijection between a left coset and the subgroup, for anadd_group
this isadd_subgroup.left_coset_equiv_add_subgroup
.
Notation #
-
a *l s
: forleft_coset a s
. -
a +l s
: forleft_add_coset a s
. -
s *r a
: forright_coset s a
. -
s +r a
: forright_add_coset s a
. -
G ⧸ H
is the quotient of the (additive) groupG
by the (additive) subgroupH
Equality of two left cosets a * s
and b * s
.
Equations
- left_coset_equivalence s a b = (left_coset a s = left_coset b s)
Equality of two left cosets a + s
and b + s
.
Equations
- left_add_coset_equivalence s a b = (left_add_coset a s = left_add_coset b s)
Equality of two right cosets s * a
and s * b
.
Equations
- right_coset_equivalence s a b = (right_coset s a = right_coset s b)
Equality of two right cosets s + a
and s + b
.
Equations
- right_add_coset_equivalence s a b = (right_add_coset s a = right_add_coset s b)
The equivalence relation corresponding to the partition of a group by left cosets of a subgroup.
Equations
The equivalence relation corresponding to the partition of a group by left cosets of a subgroup.
Equations
Equations
- quotient_group.left_rel_decidable s = λ (x y : α), _.mpr (_inst_2 (x⁻¹ * y))
Equations
- quotient_add_group.left_rel_decidable s = λ (x y : α), _.mpr (_inst_2 (-x + y))
α ⧸ s
is the quotient type representing the left cosets of s
. If s
is a
normal subgroup, α ⧸ s
is a group
Equations
α ⧸ s
is the quotient type representing the left cosets of s
.
If s
is a normal subgroup, α ⧸ s
is a group
Equations
- quotient_group.subgroup.has_quotient = {quotient' := λ (s : subgroup α), quotient (quotient_group.left_rel s)}
The equivalence relation corresponding to the partition of a group by right cosets of a subgroup.
Equations
The equivalence relation corresponding to the partition of a group by right cosets of a subgroup.
Equations
Equations
- quotient_group.right_rel_decidable s = λ (x y : α), _.mpr (_inst_2 (y * x⁻¹))
Equations
- quotient_add_group.right_rel_decidable s = λ (x y : α), _.mpr (_inst_2 (y + -x))
Right cosets are in bijection with left cosets.
Equations
- quotient_group.quotient_right_rel_equiv_quotient_left_rel s = {to_fun := quotient.map' (λ (g : α), g⁻¹) _, inv_fun := quotient.map' (λ (g : α), g⁻¹) _, left_inv := _, right_inv := _}
Right cosets are in bijection with left cosets.
Equations
- quotient_add_group.quotient_right_rel_equiv_quotient_left_rel s = {to_fun := quotient.map' (λ (g : α), -g) _, inv_fun := quotient.map' (λ (g : α), -g) _, left_inv := _, right_inv := _}
Equations
Equations
The canonical map from an add_group
α
to the quotient α ⧸ s
.
Equations
Equations
Equations
The natural bijection between a left coset g * s
and s
.
The natural bijection between the cosets g + s
and s
.
The natural bijection between a right coset s * g
and s
.
The natural bijection between the cosets s + g
and s
.
A (non-canonical) bijection between a group α
and the product (α/s) × s
Equations
- subgroup.group_equiv_quotient_times_subgroup = (((equiv.sigma_fiber_equiv quotient_group.mk).symm.trans (equiv.sigma_congr_right (λ (L : α ⧸ s), _.mpr (id (_.mpr (equiv.refl {x // quotient.mk' x = L})))))).trans (equiv.sigma_congr_right (λ (L : α ⧸ s), subgroup.left_coset_equiv_subgroup (quotient.out' L)))).trans (equiv.sigma_equiv_prod (α ⧸ s) ↥s)
A (non-canonical) bijection between an add_group α
and the product (α/s) × s
Equations
- add_subgroup.add_group_equiv_quotient_times_add_subgroup = (((equiv.sigma_fiber_equiv quotient_add_group.mk).symm.trans (equiv.sigma_congr_right (λ (L : α ⧸ s), _.mpr (id (_.mpr (equiv.refl {x // quotient.mk' x = L})))))).trans (equiv.sigma_congr_right (λ (L : α ⧸ s), add_subgroup.left_coset_equiv_add_subgroup (quotient.out' L)))).trans (equiv.sigma_equiv_prod (α ⧸ s) ↥s)
If two subgroups M
and N
of G
are equal, their quotients are in bijection.
Equations
- add_subgroup.quotient_equiv_of_eq h = {to_fun := quotient.map' id _, inv_fun := quotient.map' id _, left_inv := _, right_inv := _}
If two subgroups M
and N
of G
are equal, their quotients are in bijection.
Equations
- subgroup.quotient_equiv_of_eq h = {to_fun := quotient.map' id _, inv_fun := quotient.map' id _, left_inv := _, right_inv := _}
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
- subgroup.quotient_equiv_prod_of_le' h_le f hf = {to_fun := λ (a : α ⧸ s), (quotient.map' id _ a, quotient.map' (λ (g : α), ⟨(f (quotient.mk' g))⁻¹ * g, _⟩) _ a), inv_fun := λ (a : (α ⧸ t) × ↥t ⧸ s.subgroup_of t), quotient.map' (λ (b : ↥t), f a.fst * ↑b) _ a.snd, left_inv := _, right_inv := _}
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
- add_subgroup.quotient_equiv_sum_of_le' h_le f hf = {to_fun := λ (a : α ⧸ s), (quotient.map' id _ a, quotient.map' (λ (g : α), ⟨-f (quotient.mk' g) + g, _⟩) _ a), inv_fun := λ (a : (α ⧸ t) × ↥t ⧸ s.add_subgroup_of t), quotient.map' (λ (b : ↥t), f a.fst + ↑b) _ a.snd, left_inv := _, right_inv := _}
If H ≤ K
, then G/H ≃ G/K × K/H
nonconstructively.
The constructive version is quotient_equiv_prod_of_le'
.
Equations
- add_subgroup.quotient_equiv_sum_of_le h_le = add_subgroup.quotient_equiv_sum_of_le' h_le quotient.out' add_subgroup.quotient_equiv_sum_of_le._proof_1
If H ≤ K
, then G/H ≃ G/K × K/H
nonconstructively.
The constructive version is quotient_equiv_prod_of_le'
.
Equations
- subgroup.quotient_equiv_prod_of_le h_le = subgroup.quotient_equiv_prod_of_le' h_le quotient.out' subgroup.quotient_equiv_prod_of_le._proof_1
If s ≤ t
, then there is an embedding
s ⧸ H.add_subgroup_of s ↪ t ⧸ H.add_subgroup_of t
.
Equations
- H.quotient_add_subgroup_of_embedding_of_le h = {to_fun := quotient.map' ⇑(add_subgroup.inclusion h) _, inj' := _}
If s ≤ t
, then there is an embedding s ⧸ H.subgroup_of s ↪ t ⧸ H.subgroup_of t
.
Equations
- H.quotient_subgroup_of_embedding_of_le h = {to_fun := quotient.map' ⇑(subgroup.inclusion h) _, inj' := _}
If s ≤ t
, then there is an map
H ⧸ s.add_subgroup_of H → H ⧸ t.add_subgroup_of H
.
Equations
If s ≤ t
, then there is a map H ⧸ s.subgroup_of H → H ⧸ t.subgroup_of H
.
Equations
If s ≤ t
, then there is a map α ⧸ s → α ⧸ t
.
Equations
If s ≤ t
, then there is an map α ⧸ s → α ⧸ t
.
Equations
The natural embedding H ⧸ (⨅ i, f i).subgroup_of H ↪ Π i, H ⧸ (f i).subgroup_of H
.
Equations
- subgroup.quotient_infi_subgroup_of_embedding f H = {to_fun := λ (q : ↥H ⧸ (⨅ (i : ι), f i).subgroup_of H) (i : ι), H.quotient_subgroup_of_map_of_le _ q, inj' := _}
The natural embedding
H ⧸ (⨅ i, f i).add_subgroup_of H) ↪ Π i, H ⧸ (f i).add_subgroup_of H
.
Equations
- add_subgroup.quotient_infi_add_subgroup_of_embedding f H = {to_fun := λ (q : ↥H ⧸ (⨅ (i : ι), f i).add_subgroup_of H) (i : ι), H.quotient_add_subgroup_of_map_of_le _ q, inj' := _}
The natural embedding α ⧸ (⨅ i, f i) ↪ Π i, α ⧸ f i
.
Equations
- subgroup.quotient_infi_embedding f = {to_fun := λ (q : α ⧸ ⨅ (i : ι), f i) (i : ι), subgroup.quotient_map_of_le _ q, inj' := _}
The natural embedding α ⧸ (⨅ i, f i) ↪ Π i, α ⧸ f i
.
Equations
- add_subgroup.quotient_infi_embedding f = {to_fun := λ (q : α ⧸ ⨅ (i : ι), f i) (i : ι), add_subgroup.quotient_map_of_le _ q, inj' := _}
Lagrange's Theorem: The order of an additive subgroup divides the order of its ambient group.
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
- quotient_group.preimage_mk_equiv_subgroup_times_set s t = {to_fun := λ (a : ↥(quotient_group.mk ⁻¹' t)), (⟨(quotient.out' (quotient_group.mk ↑a))⁻¹ * ↑a, _⟩, ⟨quotient_group.mk ↑a, _⟩), inv_fun := λ (a : ↥s × ↥t), ⟨quotient.out' a.snd.val * a.fst.val, _⟩, left_inv := _, right_inv := _}
If s
is a subgroup of the additive 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
- quotient_add_group.preimage_mk_equiv_add_subgroup_times_set s t = {to_fun := λ (a : ↥(quotient_add_group.mk ⁻¹' t)), (⟨-quotient.out' (quotient_add_group.mk ↑a) + ↑a, _⟩, ⟨quotient_add_group.mk ↑a, _⟩), inv_fun := λ (a : ↥s × ↥t), ⟨quotient.out' a.snd.val + a.fst.val, _⟩, left_inv := _, right_inv := _}
We use the class has_coe_t
instead of has_coe
if the first argument is a variable,
or if the second argument is a variable not occurring in the first.
Using has_coe
would cause looping of type-class inference. See
https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/remove.20all.20instances.20with.20variable.20domain