The group of permutations (self-equivalences) of a type α
#
This file defines the group
structure on equiv.perm α
.
Equations
- equiv.perm.perm_group = {mul := λ (f g : equiv.perm α), equiv.trans g f, mul_assoc := _, one := equiv.refl α, one_mul := _, mul_one := _, npow := div_inv_monoid.npow._default (equiv.refl α) (λ (f g : equiv.perm α), equiv.trans g f) equiv.trans_refl equiv.refl_trans, npow_zero' := _, npow_succ' := _, inv := equiv.symm α, div := div_inv_monoid.div._default (λ (f g : equiv.perm α), equiv.trans g f) equiv.perm.perm_group._proof_4 (equiv.refl α) equiv.trans_refl equiv.refl_trans (div_inv_monoid.npow._default (equiv.refl α) (λ (f g : equiv.perm α), equiv.trans g f) equiv.trans_refl equiv.refl_trans) equiv.perm.perm_group._proof_5 equiv.perm.perm_group._proof_6 equiv.symm, div_eq_mul_inv := _, zpow := div_inv_monoid.zpow._default (λ (f g : equiv.perm α), equiv.trans g f) equiv.perm.perm_group._proof_8 (equiv.refl α) equiv.trans_refl equiv.refl_trans (div_inv_monoid.npow._default (equiv.refl α) (λ (f g : equiv.perm α), equiv.trans g f) equiv.trans_refl equiv.refl_trans) equiv.perm.perm_group._proof_9 equiv.perm.perm_group._proof_10 equiv.symm, zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, mul_left_inv := _}
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.
Lemmas about equiv.perm.sum_congr
re-expressed via the group structure.
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
- equiv.perm.sum_congr_hom α β = {to_fun := λ (a : equiv.perm α × equiv.perm β), a.fst.sum_congr a.snd, map_one' := _, map_mul' := _}
Lemmas about equiv.perm.sigma_congr_right
re-expressed via the group structure.
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
- equiv.perm.sigma_congr_right_hom β = {to_fun := equiv.perm.sigma_congr_right (λ (a : α), β a), map_one' := _, map_mul' := _}
equiv.perm.subtype_congr
as a monoid_hom
.
Equations
- equiv.perm.subtype_congr_hom p = {to_fun := λ (pair : equiv.perm {a // p a} × equiv.perm {a // ¬p a}), pair.fst.subtype_congr pair.snd, map_one' := _, map_mul' := _}
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.
extend_domain
as a group homomorphism
Equations
- equiv.perm.extend_domain_hom f = {to_fun := λ (e : equiv.perm α), e.extend_domain f, map_one' := _, map_mul' := _}
If the permutation f
fixes the subtype {x // p x}
, then this returns the permutation
on {x // p x}
induced by f
.
The inclusion map of permutations on a subtype of α
into permutations of α
,
fixing the other points.
Equations
Permutations on a subtype are equivalent to permutations on the original type that fix pointwise the rest.
Equations
- equiv.perm.subtype_equiv_subtype_perm p = {to_fun := λ (f : equiv.perm (subtype p)), ⟨⇑equiv.perm.of_subtype f, _⟩, inv_fun := λ (f : {f // ∀ (a : α), ¬p a → ⇑f a = a}), ↑f.subtype_perm _, left_inv := _, right_inv := _}
Noncomputable version of equiv.perm.via_fintype_embedding
that does not assume fintype
Equations
- e.via_embedding ι = e.extend_domain (equiv.of_injective ι.to_fun _)
via_embedding
as a group homomorphism
Equations
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.
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.
A stronger version of mul_right_injective
A stronger version of mul_left_injective