# mathlib3documentation

group_theory.perm.basic

# The group of permutations (self-equivalences) of a type α#

THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.

This file defines the group structure on equiv.perm α.

@[protected, instance]
Equations
@[simp]
theorem equiv.perm.default_eq {α : Type u} :
@[simp]
theorem equiv.perm.coe_equiv_units_End_apply {α : Type u} (e : equiv.perm α) (ᾰ : α) :
= e ᾰ
@[simp]
theorem equiv.perm.coe_inv_equiv_units_End_apply {α : Type u} (e : equiv.perm α) (ᾰ : α) :
= (equiv.symm e)

The permutation of a type is equivalent to the units group of the endomorphisms monoid of this type.

Equations
def monoid_hom.to_hom_perm {α : Type u} {G : Type u_1} [group G] (f : G →* ) :
G →*

Lift a monoid homomorphism f : G →* function.End α to a monoid homomorphism f : G →* equiv.perm α.

Equations
@[simp]
theorem monoid_hom.to_hom_perm_apply_apply {α : Type u} {G : Type u_1} [group G] (f : G →* ) (ᾰ : G) :
((f.to_hom_perm) ᾰ) = f ᾰ
@[simp]
theorem monoid_hom.to_hom_perm_apply_symm_apply {α : Type u} {G : Type u_1} [group G] (f : G →* ) (ᾰ : G) :
theorem equiv.perm.mul_apply {α : Type u} (f g : equiv.perm α) (x : α) :
(f * g) x = f (g x)
theorem equiv.perm.one_apply {α : Type u} (x : α) :
1 x = x
@[simp]
theorem equiv.perm.inv_apply_self {α : Type u} (f : equiv.perm α) (x : α) :
f⁻¹ (f x) = x
@[simp]
theorem equiv.perm.apply_inv_self {α : Type u} (f : equiv.perm α) (x : α) :
f (f⁻¹ x) = x
theorem equiv.perm.one_def {α : Type u} :
1 =
theorem equiv.perm.mul_def {α : Type u} (f g : equiv.perm α) :
f * g = f
theorem equiv.perm.inv_def {α : Type u} (f : equiv.perm α) :
@[simp, norm_cast]
theorem equiv.perm.coe_one {α : Type u} :
@[simp, norm_cast]
theorem equiv.perm.coe_mul {α : Type u} (f g : equiv.perm α) :
(f * g) = f g
@[norm_cast]
theorem equiv.perm.coe_pow {α : Type u} (f : equiv.perm α) (n : ) :
(f ^ n) = (f^[n])
@[simp]
theorem equiv.perm.iterate_eq_pow {α : Type u} (f : equiv.perm α) (n : ) :
f^[n] = (f ^ n)
theorem equiv.perm.eq_inv_iff_eq {α : Type u} {f : equiv.perm α} {x y : α} :
x = f⁻¹ y f x = y
theorem equiv.perm.inv_eq_iff_eq {α : Type u} {f : equiv.perm α} {x y : α} :
f⁻¹ x = y x = f y
theorem equiv.perm.zpow_apply_comm {α : Type u_1} (σ : equiv.perm α) (m n : ) {x : α} :
^ m) (^ n) x) = ^ n) (^ m) x)
@[simp]
theorem equiv.perm.image_inv {α : Type u} (f : equiv.perm α) (s : set α) :
@[simp]
theorem equiv.perm.preimage_inv {α : Type u} (f : equiv.perm α) (s : set α) :

Lemmas about mixing perm with equiv. Because we have multiple ways to express equiv.refl, equiv.symm, and equiv.trans, we want simp lemmas for every combination. The assumption made here is that if you're using the group structure, you want to preserve it after simp.

@[simp]
theorem equiv.perm.trans_one {α : Sort u_1} {β : Type u_2} (e : α β) :
e.trans 1 = e
@[simp]
theorem equiv.perm.mul_refl {α : Type u} (e : equiv.perm α) :
e * = e
@[simp]
theorem equiv.perm.one_symm {α : Type u} :
= 1
@[simp]
theorem equiv.perm.refl_inv {α : Type u} :
@[simp]
theorem equiv.perm.one_trans {α : Type u_1} {β : Sort u_2} (e : α β) :
e = e
@[simp]
theorem equiv.perm.refl_mul {α : Type u} (e : equiv.perm α) :
* e = e
@[simp]
theorem equiv.perm.inv_trans_self {α : Type u} (e : equiv.perm α) :
= 1
@[simp]
theorem equiv.perm.mul_symm {α : Type u} (e : equiv.perm α) :
e * = 1
@[simp]
theorem equiv.perm.self_trans_inv {α : Type u} (e : equiv.perm α) :
= 1
@[simp]
theorem equiv.perm.symm_mul {α : Type u} (e : equiv.perm α) :
* e = 1

Lemmas about equiv.perm.sum_congr re-expressed via the group structure.

@[simp]
theorem equiv.perm.sum_congr_mul {α : Type u_1} {β : Type u_2} (e : equiv.perm α) (f : equiv.perm β) (g : equiv.perm α) (h : equiv.perm β) :
e.sum_congr f * g.sum_congr h = (e * g).sum_congr (f * h)
@[simp]
theorem equiv.perm.sum_congr_inv {α : Type u_1} {β : Type u_2} (e : equiv.perm α) (f : equiv.perm β) :
@[simp]
theorem equiv.perm.sum_congr_one {α : Type u_1} {β : Type u_2} :
1.sum_congr 1 = 1
@[simp]
theorem equiv.perm.sum_congr_hom_apply (α : Type u_1) (β : Type u_2) (a : × ) :
def equiv.perm.sum_congr_hom (α : Type u_1) (β : Type u_2) :

equiv.perm.sum_congr as a monoid_hom, with its two arguments bundled into a single prod.

This is particularly useful for its monoid_hom.range projection, which is the subgroup of permutations which do not exchange elements between α and β.

Equations
theorem equiv.perm.sum_congr_hom_injective {α : Type u_1} {β : Type u_2} :
@[simp]
theorem equiv.perm.sum_congr_swap_one {α : Type u_1} {β : Type u_2} [decidable_eq α] [decidable_eq β] (i j : α) :
j).sum_congr 1 = (sum.inl j)
@[simp]
theorem equiv.perm.sum_congr_one_swap {α : Type u_1} {β : Type u_2} [decidable_eq α] [decidable_eq β] (i j : β) :

Lemmas about equiv.perm.sigma_congr_right re-expressed via the group structure.

@[simp]
theorem equiv.perm.sigma_congr_right_mul {α : Type u_1} {β : α Type u_2} (F G : Π (a : α), equiv.perm (β a)) :
@[simp]
theorem equiv.perm.sigma_congr_right_inv {α : Type u_1} {β : α Type u_2} (F : Π (a : α), equiv.perm (β a)) :
= equiv.perm.sigma_congr_right (λ (a : α), (F a)⁻¹)
@[simp]
theorem equiv.perm.sigma_congr_right_one {α : Type u_1} {β : α Type u_2} :
@[simp]
theorem equiv.perm.sigma_congr_right_hom_apply {α : Type u_1} (β : α Type u_2) (F : Π (a : α), equiv.perm ((λ (a : α), β a) a)) :
def equiv.perm.sigma_congr_right_hom {α : Type u_1} (β : α Type u_2) :
(Π (a : α), equiv.perm (β a)) →* equiv.perm (Σ (a : α), β a)

equiv.perm.sigma_congr_right as a monoid_hom.

This is particularly useful for its monoid_hom.range projection, which is the subgroup of permutations which do not exchange elements between fibers.

Equations
theorem equiv.perm.sigma_congr_right_hom_injective {α : Type u_1} {β : α Type u_2} :
@[simp]
theorem equiv.perm.subtype_congr_hom_apply {α : Type u} (p : α Prop) (pair : equiv.perm {a // p a} × equiv.perm {a // ¬p a}) :
pair = pair.fst.subtype_congr pair.snd
def equiv.perm.subtype_congr_hom {α : Type u} (p : α Prop)  :
equiv.perm {a // p a} × equiv.perm {a // ¬p a} →*

equiv.perm.subtype_congr as a monoid_hom.

Equations
theorem equiv.perm.subtype_congr_hom_injective {α : Type u} (p : α Prop)  :
@[simp]
theorem equiv.perm.perm_congr_eq_mul {α : Type u} (e p : equiv.perm α) :
p = e * p * e⁻¹

If e is also a permutation, we can write perm_congr completely in terms of the group structure.

Lemmas about equiv.perm.extend_domain re-expressed via the group structure.

@[simp]
theorem equiv.perm.extend_domain_one {α : Type u} {β : Type v} {p : β Prop} (f : α ) :
= 1
@[simp]
theorem equiv.perm.extend_domain_inv {α : Type u} {β : Type v} (e : equiv.perm α) {p : β Prop} (f : α ) :
@[simp]
theorem equiv.perm.extend_domain_mul {α : Type u} {β : Type v} {p : β Prop} (f : α ) (e e' : equiv.perm α) :
@[simp]
theorem equiv.perm.extend_domain_hom_apply {α : Type u} {β : Type v} {p : β Prop} (f : α ) (e : equiv.perm α) :
def equiv.perm.extend_domain_hom {α : Type u} {β : Type v} {p : β Prop} (f : α ) :

extend_domain as a group homomorphism

Equations
theorem equiv.perm.extend_domain_hom_injective {α : Type u} {β : Type v} {p : β Prop} (f : α ) :
@[simp]
theorem equiv.perm.extend_domain_eq_one_iff {α : Type u} {β : Type v} {p : β Prop} {e : equiv.perm α} {f : α } :
= 1 e = 1
@[simp]
theorem equiv.perm.extend_domain_pow {α : Type u} {β : Type v} (e : equiv.perm α) {p : β Prop} (f : α ) (n : ) :
(e ^ n).extend_domain f = ^ n
@[simp]
theorem equiv.perm.extend_domain_zpow {α : Type u} {β : Type v} (e : equiv.perm α) {p : β Prop} (f : α ) (n : ) :
(e ^ n).extend_domain f = ^ n
def equiv.perm.subtype_perm {α : Type u} {p : α Prop} (f : equiv.perm α) (h : (x : α), p x p (f x)) :
equiv.perm {x // p x}

If the permutation f fixes the subtype {x // p x}, then this returns the permutation on {x // p x} induced by f.

Equations
@[simp]
theorem equiv.perm.subtype_perm_apply {α : Type u} {p : α Prop} (f : equiv.perm α) (h : (x : α), p x p (f x)) (x : {x // p x}) :
(f.subtype_perm h) x = f x, _⟩
@[simp]
theorem equiv.perm.subtype_perm_one {α : Type u} (p : α Prop) (h : ( (_x : α), p _x p _x) := _) :
@[simp]
theorem equiv.perm.subtype_perm_mul {α : Type u} {p : α Prop} (f g : equiv.perm α) (hf : (x : α), p x p (f x)) (hg : (x : α), p x p (g x)) :
theorem equiv.perm.subtype_perm_inv {α : Type u} {p : α Prop} (f : equiv.perm α) (hf : (x : α), p x p (f⁻¹ x)) :

See equiv.perm.inv_subtype_perm

@[simp]
theorem equiv.perm.inv_subtype_perm {α : Type u} {p : α Prop} (f : equiv.perm α) (hf : (x : α), p x p (f x)) :

See equiv.perm.subtype_perm_inv

@[simp]
theorem equiv.perm.subtype_perm_pow {α : Type u} {p : α Prop} (f : equiv.perm α) (n : ) (hf : (x : α), p x p (f x)) :
f.subtype_perm hf ^ n = (f ^ n).subtype_perm _
@[simp]
theorem equiv.perm.subtype_perm_zpow {α : Type u} {p : α Prop} (f : equiv.perm α) (n : ) (hf : (x : α), p x p (f x)) :
f.subtype_perm hf ^ n = (f ^ n).subtype_perm _
def equiv.perm.of_subtype {α : Type u} {p : α Prop}  :

The inclusion map of permutations on a subtype of α into permutations of α, fixing the other points.

Equations
theorem equiv.perm.of_subtype_subtype_perm {α : Type u} {p : α Prop} {f : equiv.perm α} (h₁ : (x : α), p x p (f x)) (h₂ : (x : α), f x x p x) :
= f
theorem equiv.perm.of_subtype_apply_of_mem {α : Type u} {p : α Prop} {a : α} (f : equiv.perm (subtype p)) (ha : p a) :
= (f a, ha⟩)
@[simp]
theorem equiv.perm.of_subtype_apply_coe {α : Type u} {p : α Prop} (f : equiv.perm (subtype p)) (x : subtype p) :
= (f x)
theorem equiv.perm.of_subtype_apply_of_not_mem {α : Type u} {p : α Prop} {a : α} (f : equiv.perm (subtype p)) (ha : ¬p a) :
= a
theorem equiv.perm.mem_iff_of_subtype_apply_mem {α : Type u} {p : α Prop} (f : equiv.perm (subtype p)) (x : α) :
p x p x)
@[simp]
theorem equiv.perm.subtype_perm_of_subtype {α : Type u} {p : α Prop} (f : equiv.perm (subtype p)) :
@[simp]
theorem equiv.perm.subtype_equiv_subtype_perm_apply_coe {α : Type u} (p : α Prop) (f : equiv.perm (subtype p)) :
@[simp]
theorem equiv.perm.subtype_equiv_subtype_perm_symm_apply {α : Type u} (p : α Prop) (f : {f // (a : α), ¬p a f a = a}) :
@[protected]
def equiv.perm.subtype_equiv_subtype_perm {α : Type u} (p : α Prop)  :
{f // (a : α), ¬p a f a = a}

Permutations on a subtype are equivalent to permutations on the original type that fix pointwise the rest.

Equations
theorem equiv.perm.subtype_equiv_subtype_perm_apply_of_mem {α : Type u} {p : α Prop} {a : α} (f : equiv.perm (subtype p)) (h : p a) :
= (f a, h⟩)
theorem equiv.perm.subtype_equiv_subtype_perm_apply_of_not_mem {α : Type u} {p : α Prop} {a : α} (f : equiv.perm (subtype p)) (h : ¬p a) :
= a
@[simp]
theorem equiv.swap_inv {α : Type u} [decidable_eq α] (x y : α) :
y)⁻¹ = y
@[simp]
theorem equiv.swap_mul_self {α : Type u} [decidable_eq α] (i j : α) :
j * j = 1
theorem equiv.swap_mul_eq_mul_swap {α : Type u} [decidable_eq α] (f : equiv.perm α) (x y : α) :
y * f = f * equiv.swap (f⁻¹ x) (f⁻¹ y)
theorem equiv.mul_swap_eq_swap_mul {α : Type u} [decidable_eq α] (f : equiv.perm α) (x y : α) :
f * y = equiv.swap (f x) (f y) * f
theorem equiv.swap_apply_apply {α : Type u} [decidable_eq α] (f : equiv.perm α) (x y : α) :
equiv.swap (f x) (f y) = f * y * f⁻¹
@[simp]
theorem equiv.swap_mul_self_mul {α : Type u} [decidable_eq α] (i j : α) (σ : equiv.perm α) :
j * j * σ) = σ

Left-multiplying a permutation with swap i j twice gives the original permutation.

This specialization of swap_mul_self is useful when using cosets of permutations.

@[simp]
theorem equiv.mul_swap_mul_self {α : Type u} [decidable_eq α] (i j : α) (σ : equiv.perm α) :
σ * j * j = σ

Right-multiplying a permutation with swap i j twice gives the original permutation.

This specialization of swap_mul_self is useful when using cosets of permutations.

@[simp]
theorem equiv.swap_mul_involutive {α : Type u} [decidable_eq α] (i j : α) :

A stronger version of mul_right_injective

@[simp]
theorem equiv.mul_swap_involutive {α : Type u} [decidable_eq α] (i j : α) :

A stronger version of mul_left_injective

@[simp]
theorem equiv.swap_eq_one_iff {α : Type u} [decidable_eq α] {i j : α} :
j = 1 i = j
theorem equiv.swap_mul_eq_iff {α : Type u} [decidable_eq α] {i j : α} {σ : equiv.perm α} :
j * σ = σ i = j
theorem equiv.mul_swap_eq_iff {α : Type u} [decidable_eq α] {i j : α} {σ : equiv.perm α} :
σ * j = σ i = j
theorem equiv.swap_mul_swap_mul_swap {α : Type u} [decidable_eq α] {x y z : α} (hwz : x y) (hxz : x z) :
z * y * z = x
@[simp]
theorem equiv.add_left_zero {α : Type u} [add_group α] :
@[simp]
theorem equiv.add_right_zero {α : Type u} [add_group α] :
@[simp]
theorem equiv.add_left_add {α : Type u} [add_group α] (a b : α) :
@[simp]
theorem equiv.add_right_add {α : Type u} [add_group α] (a b : α) :
@[simp]
theorem equiv.inv_add_left {α : Type u} [add_group α] (a : α) :
@[simp]
theorem equiv.inv_add_right {α : Type u} [add_group α] (a : α) :
@[simp]
theorem equiv.pow_add_left {α : Type u} [add_group α] (a : α) (n : ) :
@[simp]
theorem equiv.pow_add_right {α : Type u} [add_group α] (a : α) (n : ) :
@[simp]
theorem equiv.zpow_add_left {α : Type u} [add_group α] (a : α) (n : ) :
@[simp]
theorem equiv.zpow_add_right {α : Type u} [add_group α] (a : α) (n : ) :
@[simp]
theorem equiv.mul_left_one {α : Type u} [group α] :
@[simp]
theorem equiv.mul_right_one {α : Type u} [group α] :
@[simp]
theorem equiv.mul_left_mul {α : Type u} [group α] (a b : α) :
@[simp]
theorem equiv.mul_right_mul {α : Type u} [group α] (a b : α) :
@[simp]
theorem equiv.inv_mul_left {α : Type u} [group α] (a : α) :
@[simp]
theorem equiv.inv_mul_right {α : Type u} [group α] (a : α) :
@[simp]
theorem equiv.pow_mul_left {α : Type u} [group α] (a : α) (n : ) :
@[simp]
theorem equiv.pow_mul_right {α : Type u} [group α] (a : α) (n : ) :
@[simp]
theorem equiv.zpow_mul_left {α : Type u} [group α] (a : α) (n : ) :
@[simp]
theorem equiv.zpow_mul_right {α : Type u} [group α] (a : α) (n : ) :
@[simp]
theorem set.bij_on_perm_inv {α : Type u_1} {f : equiv.perm α} {s t : set α} :
s s t
theorem set.bij_on.of_perm_inv {α : Type u_1} {f : equiv.perm α} {s t : set α} :
s s t

Alias of the forward direction of set.bij_on_perm_inv.

theorem set.bij_on.perm_inv {α : Type u_1} {f : equiv.perm α} {s t : set α} :
s t s

Alias of the reverse direction of set.bij_on_perm_inv.

theorem set.maps_to.perm_pow {α : Type u_1} {f : equiv.perm α} {s : set α} :
s s (n : ), set.maps_to (f ^ n) s s
theorem set.surj_on.perm_pow {α : Type u_1} {f : equiv.perm α} {s : set α} :
s s (n : ), set.surj_on (f ^ n) s s
theorem set.bij_on.perm_pow {α : Type u_1} {f : equiv.perm α} {s : set α} :
s s (n : ), set.bij_on (f ^ n) s s
theorem set.bij_on.perm_zpow {α : Type u_1} {f : equiv.perm α} {s : set α} (hf : s s) (n : ) :
set.bij_on (f ^ n) s s