The group of permutations (self-equivalences) of a type α
#
This file defines the Group
structure on Equiv.Perm α
.
Equations
- Equiv.Perm.instOne = { one := Equiv.refl α }
Equations
- Equiv.Perm.instMul = { mul := fun (f g : Equiv.Perm α) => Equiv.trans g f }
Equations
- Equiv.Perm.instInv = { inv := Equiv.symm }
Equations
- Equiv.Perm.instPowNat = { pow := fun (f : Equiv.Perm α) (n : ℕ) => { toFun := (⇑f)^[n], invFun := (⇑(Equiv.symm f))^[n], left_inv := ⋯, right_inv := ⋯ } }
The permutation of a type is equivalent to the units group of the endomorphisms monoid of this type.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Lift a monoid homomorphism f : G →* Function.End α
to a monoid homomorphism
f : G →* Equiv.Perm α
.
Equations
- f.toHomPerm = Equiv.Perm.equivUnitsEnd.symm.toMonoidHom.comp f.toHomUnits
Instances For
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.sumCongr
re-expressed via the group structure.
Equiv.Perm.sumCongr
as a MonoidHom
, with its two arguments bundled into a single Prod
.
This is particularly useful for its MonoidHom.range
projection, which is the subgroup of
permutations which do not exchange elements between α
and β
.
Equations
- Equiv.Perm.sumCongrHom α β = { toFun := fun (a : Equiv.Perm α × Equiv.Perm β) => a.1.sumCongr a.2, map_one' := ⋯, map_mul' := ⋯ }
Instances For
Lemmas about Equiv.Perm.sigmaCongrRight
re-expressed via the group structure.
Equiv.Perm.sigmaCongrRight
as a MonoidHom
.
This is particularly useful for its MonoidHom.range
projection, which is the subgroup of
permutations which do not exchange elements between fibers.
Equations
- Equiv.Perm.sigmaCongrRightHom β = { toFun := Equiv.Perm.sigmaCongrRight, map_one' := ⋯, map_mul' := ⋯ }
Instances For
Equiv.Perm.subtypeCongr
as a MonoidHom
.
Equations
- Equiv.Perm.subtypeCongrHom p = { toFun := fun (pair : Equiv.Perm { a : α // p a } × Equiv.Perm { a : α // ¬p a }) => pair.1.subtypeCongr pair.2, map_one' := ⋯, map_mul' := ⋯ }
Instances For
If e
is also a permutation, we can write permCongr
completely in terms of the group structure.
Lemmas about Equiv.Perm.extendDomain
re-expressed via the group structure.
extendDomain
as a group homomorphism
Equations
- Equiv.Perm.extendDomainHom f = { toFun := fun (e : Equiv.Perm α) => e.extendDomain f, map_one' := ⋯, map_mul' := ⋯ }
Instances For
If the permutation f
fixes the subtype {x // p x}
, then this returns the permutation
on {x // p x}
induced by f
.
Equations
Instances For
The inclusion map of permutations on a subtype of α
into permutations of α
,
fixing the other points.
Equations
- Equiv.Perm.ofSubtype = { toFun := fun (f : Equiv.Perm (Subtype p)) => f.extendDomain (Equiv.refl (Subtype p)), map_one' := ⋯, map_mul' := ⋯ }
Instances For
Permutations on a subtype are equivalent to permutations on the original type that fix pointwise the rest.
Equations
- One or more equations did not get rendered due to their size.
Instances For
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