Finitely supported permutations #
This file records small bridges for Mathlib's finite-support predicate for permutations,
(MulAction.fixedBy ι π)ᶜ.Finite, and packages the permutations satisfying it as the finitary
symmetric group Equiv.Perm.finitary ι, a subgroup of Equiv.Perm ι.
The finitary symmetric group on a countable index type is itself countable; countability is what
lets an action of it be handled one group element at a time under a filter closed under countable
intersections (Mathlib's CountableInterFilter), such as the a.e. filter of a measure.
The file also supplies Equiv.Perm.exists_prodCongrRight_mem_finitary_apply_eq_on_finset:
finitely many values of an arbitrary family of permutations can be matched by a family whose
induced permutation of the product moves only finitely many indexed points altogether; the
type synonym FinitaryPerm of the finitary symmetric group of ℕ, carrying the domain actions on
path and array spaces that are installed beside those spaces; and the
block swap Nat.blockSwap N, the finitely supported permutation of ℕ exchanging [0, N) with
[N, 2N), which carries any finite index set inside [0, N) onto a disjoint copy.
Constructor for Mathlib's finite-support predicate from an eventual fixedness bound.
A permutation of ℕ with finite Mathlib support fixes every sufficiently large index.
A permutation of ℕ is finitely supported iff it fixes all sufficiently large indices.
Conjugating a group element preserves Mathlib's finite-support predicate
(MulAction.fixedBy α ·)ᶜ.Finite; in particular this applies to conjugation of permutations.
The block swap #
The finitely supported permutation of ℕ that swaps the block [0, N) with [N, 2N)
pointwise and fixes everything from 2 * N on: Mathlib's half-swap finAddFlip on Fin (N + N),
transported to ℕ along the value embedding.
Equations
- N.blockSwap = Equiv.Perm.viaFintypeEmbedding finAddFlip { toFun := Fin.val, inj' := ⋯ }
Instances For
N.blockSwap carries any index set inside [0, N) off itself: the moved copy lands in
[N, 2N).
N.blockSwap is finitely supported.
blockSwap N is its own inverse.
The self-maps of a countable type that move only finitely many points form a countable set: such a map is determined by the finite set it moves together with its values there.
The finitary symmetric group on ι: the subgroup of Equiv.Perm ι consisting of the
permutations that move only finitely many points, i.e. those satisfying Mathlib's finite-support
predicate (MulAction.fixedBy ι π)ᶜ.Finite.
For finite ι this is all of Equiv.Perm ι; the definition is interesting for infinite index
types, where it is the group generated by the transpositions.
Membership is mem_finitary; the structure body is not exposed, so that is the only interface.
Equations
- Equiv.Perm.finitary ι = { carrier := {π : Equiv.Perm ι | (MulAction.fixedBy ι π)ᶜ.Finite}, mul_mem' := ⋯, one_mem' := ⋯, inv_mem' := ⋯ }
Instances For
The finitary symmetric group on a countable index type is countable: a finitely supported permutation moves only finitely many points, hence is determined by a finite amount of data.
A pair of embeddings from a finite type is realised by a permutation supported on their
ranges. For f g : ι ↪ β with ι finite there is a permutation of β carrying each f i to
g i and fixing every point outside Set.range f ∪ Set.range g.
That union is finite, so Set.Finite.subset turns the containment into finite support in the sense
of (MulAction.fixedBy β σ)ᶜ.Finite.
Finite-support form of Equiv.Perm.exists_compl_fixedBy_subset_apply_eq: for f g : ι ↪ β
with ι finite there is a permutation of β carrying each f i to g i whose support is finite.
This is the shape consumers of finitely supported reindexing want, (MulAction.fixedBy β σ)ᶜ.Finite
being Mathlib's finite-support predicate.
The support of a row-wise family, read on the product, is the set of cells that the family moves in their own row.
A row-wise family is finitely supported on the product exactly when it is finitely supported
row by row. The permutation of ι × β induced by τ : ι → Equiv.Perm β moves only finitely many
cells iff only finitely many rows of τ are nontrivial and every row moves only finitely many
points.
A family of permutations can be matched on finitely many indexed points by a family with
finite total support. Given π : ι → Equiv.Perm β and finitely many pairs (i, b), there is a
family τ agreeing with π at every listed pair and moving only finitely many pairs altogether.
Two disjoint finite sets of cardinalities k and l are the images of the two windows of
Fin (k + l) under a finitely supported permutation of ℕ.
The finitary symmetric group as a type synonym #
The finitary symmetric group of ℕ, the group of finitely supported permutations of ℕ,
as a type synonym for ↥(Equiv.Perm.finitary ℕ) carrying the domain actions on path and array
spaces: finitary reindexing of the time index of a path x : ℕ → α, and diagonal relabelling of
both coordinates of an array x : ℕ × ℕ → α. Each action is installed beside the space it acts
on. The synonym is deliberate: these are actions on the domain of a function, whereas
Pi.instSMul would make a subgroup of Equiv.Perm ℕ act on the values whenever the state space
α carries an action of it — which it does for α = ℕ. Wrapping the group keeps the domain
actions from competing with that one.
The interface is equivFinitary, toPerm, ofPerm and FinitaryPerm.ext; no proof outside this
section unfolds the synonym.
Equations
Instances For
Equations
- One or more equations did not get rendered due to their size.
The identification of FinitaryPerm with the finitary symmetric group Equiv.Perm.finitary ℕ
that it abbreviates.
Instances For
The finitely supported permutation of ℕ underlying an element of FinitaryPerm.
Equations
Instances For
The permutation underlying an element of FinitaryPerm is finitely supported.
An element of FinitaryPerm is determined by the permutation underlying it.
Package a finitely supported permutation of ℕ as an element of FinitaryPerm.