The number of orbits of a permutation #
A permutation σ of a type α partitions α into the classes of Equiv.Perm.SameCycle σ.
This file counts them: TauCeti.orbitCount σ is the cardinality of that quotient. Unlike
Equiv.Perm.cycleType, which records only the cycles of length at least two, every fixed point
of σ contributes an orbit of its own here.
The file then proves how the count responds to three ways of changing a permutation: adjoining a point, splicing a fixed point into another orbit, and merging two orbits. The first two compare a permutation with one of a different type and are stated to allow that; the third compares two permutations of the same type.
TauCeti.orbitCount_conj: conjugation does not change the number of orbits.TauCeti.orbitCount_mul_commandEquiv.Perm.sameCycle_mul_comm_iff: the two productsσ * τandτ * σare conjugate, so they have the same number of orbits, and their cycles correspond underσ.TauCeti.orbitCount_prodCongrRight_const: permuting the second factor of a product by the same permutation over every point of the first multiplies the number of orbits by the size of the first factor.Equiv.Perm.orbitCount_eq_card_parts_partition: on a finite type, the orbit count is the number of parts in Mathlib's full, fixed-point-aware permutation partition, through the decompositionEquiv.Perm.orbitQuotientEquivCycleFactorsSumFixedPointsofTauCeti.GroupTheory.Perm.Partition.TauCeti.orbitCount_eq_one_of_forall_sameCycle: a transitive permutation of a nonempty type has orbit count one.Equiv.Perm.orbitCount_le_card: on a finite type, a permutation has at most as many orbits as the type has points, the orbits being the classes of a partition of it.Equiv.Perm.card_le_orderOf_mul_orbitCount: conversely, the number of points is at most the order of the permutation times its number of orbits, each orbit length dividing the order.Equiv.Perm.sign_eq_neg_one_pow_card_sub_orbitCount: the sign is determined by the parity of the number of points minus the number of orbits.TauCeti.orbitCount_add_one_eq_of_semiconj: ifσ : Equiv.Perm αis carried by an injectionf : α → βtoτ : Equiv.Perm β, andfmisses exactly one pointpofβ, thenτhas one orbit more thanσ— the extra orbit is the fixed pointp.TauCeti.orbitCount_mul_swap_add_one: multiplying a permutation by a transposition that moves one of its fixed points splices that fixed point into another orbit, so the count drops by one.List.IsSwapForest.maptransports swap forests along embeddings.List.IsSwapForest.orbitCount_mul_add_length: a swap forest ofntranspositions removesnorbits from a permutation fixing its inserted endpoints;orbitCount_add_lengthspecializes this to the identity.TauCeti.orbitCount_add_one_of_merge: if the orbits ofτare the orbits ofσwith the orbit of one point and the orbit of another merged, thenτhas one orbit fewer.
Composing TauCeti.orbitCount_add_one_eq_of_semiconj with TauCeti.orbitCount_mul_swap_add_one
says that adjoining a point to a permutation and immediately splicing it into an existing orbit
leaves the number of orbits unchanged. That composite is the reason this file exists: it is the
invariance of the number of components of a link under the stabilization move on braids, in
TauCeti/KnotTheory/Markov.lean.
Implementation notes #
orbitCount is Nat.card of a Quotient, so it is 0 when the permutation has infinitely many
orbits or no orbits at all. The three orbit-addition and orbit-removal results assume only that the
quotient of the relevant permutation by Equiv.Perm.SameCycle is finite; conjugation preserves
the count without any finiteness assumption.
The two cross-type results, TauCeti.orbitCount_add_one_eq_of_semiconj and
TauCeti.orbitCount_mul_swap_add_one, are deduced from one private lemma,
orbitCount_add_one_eq_aux, whose input is a map F : α → β carrying the orbits of σ
bijectively onto the orbits of τ other than a fixed point p of τ. Its SameCycle hypothesis
comes from Mathlib's Equiv.Perm.sameCycle_extendDomain for adjoining a point. For splicing a
point into an orbit, a one-step statement is propagated over all integer powers by the private
lemma sameCycle_zpow_of_forall_sameCycle_apply. TauCeti.orbitCount_add_one_of_merge does not
go through that lemma: it exhibits the orbits of τ as the orbits of σ with one class removed
and finishes through Equiv.optionSubtypeNe.
The number of orbits of the cyclic group generated by a permutation σ, that is, the number
of classes of Equiv.Perm.SameCycle σ. Every fixed point of σ is an orbit, so on a finite type
this counts the cycles of σ together with its fixed points, whereas
Equiv.Perm.cycleType records only the former. Being a Nat.card, it is 0 when there are
infinitely many orbits.
Equations
Instances For
The orbit count is the cardinality of the type of orbits.
Each point of α is its own orbit under the identity permutation.
A permutation with a single orbit on a nonempty type has orbit count one.
A permutation of a finite type has at most as many orbits as there are points.
A permutation of a finite nonempty type has a positive number of orbits.
Conjugate permutations have the same number of orbits: conjugation by g relabels the points
by g, hence relabels the orbits.
The two products of a pair of permutations are conjugate by either factor, so a pair of points
lies in one cycle of τ * σ exactly when their images under σ lie in one cycle of σ * τ.
The two products of a pair of permutations have the same number of orbits, being conjugate by either factor.
Inverting a permutation does not change its number of orbits.
Transporting a permutation along an equivalence of its underlying type does not change its number of orbits.
Rotating the second coordinate of α × β by the same permutation τ over every point of α
has one copy of each orbit of τ over every point of α.
The number of permutation orbits is the number of parts in its full cycle partition. This
identifies orbitCount, defined from SameCycle, with Mathlib's fixed-point-aware cycle data.
The sign of a finite permutation is the parity of the number of points minus the number of orbits. Fixed points contribute once to both numbers and hence do not affect the sign.
Adjoining a fixed point adds one orbit. If an injection f : α → β intertwines
σ : Equiv.Perm α with τ : Equiv.Perm β and its image is the complement of a single point p,
then p is a fixed point of τ and is the only orbit of τ that is not an orbit of σ.
Splicing a fixed point into another orbit removes one orbit. If τ fixes p and a ≠ p,
then in τ * Equiv.swap a p the point p has joined the orbit of a, and no other orbit has
changed.
A list of transpositions [(a₁, p₁), …, (aₙ, pₙ)] is a swap forest if each factor
Equiv.swap aᵢ pᵢ moves a point pᵢ ≠ aᵢ that the product of the later factors still fixes. The
head of the list is the rightmost factor of the product
(factors.reverse.map (Function.uncurry Equiv.swap)).prod, so each factor splices a fixed point
into another orbit, as in TauCeti.orbitCount_mul_swap_add_one.
Equations
- [].IsSwapForest = True
- ((a, p) :: factors).IsSwapForest = (factors.IsSwapForest ∧ (List.map (Function.uncurry Equiv.swap) factors.reverse).prod p = p ∧ a ≠ p)
Instances For
The empty list of transpositions is a swap forest.
Unfolding List.IsSwapForest at a cons: the tail is a swap forest and the new factor
moves a point p ≠ a fixed by the product of the tail.
Embedding the endpoints of a swap forest preserves the forest property.
A swap forest splices fixed points into a permutation. If the permutation fixes the second endpoint of every factor, multiplying by the forest removes one orbit per factor.
A swap forest removes one orbit per factor. The product of a swap forest of n
transpositions on a finite type has n orbits fewer than the identity.
A swap forest splices fixed points on the left. If a permutation fixes the second endpoint of every factor, multiplying by the factors in their listed order removes one orbit per factor.
Merging two orbits removes one orbit. If every orbit of σ is contained in an orbit of
τ, if two points a and b lying in different orbits of σ lie in one orbit of τ, and if no
orbit of τ merges more than those two, then τ has exactly one orbit fewer than σ. The last
hypothesis is the honest content: without it nothing stops τ from gluing the orbits of σ
wholesale.