Partitioned Permutations
Partitioned Permutations are used in the context of Free Probability Theory to model higher order freeness and higher order free cumulants, see e.g. [CMS07].
We provide basic functions for working with partitioned permutations. The focus is on factorizing partitioned permutations.
Basics
Formally, a partitioned permutation $(V, \pi)$ consists of a permutation $\pi$ and a partition $V$ of the set $\{1, ..., n\}$ such that the partition dominates the permutation in the sense that every cycle of $\pi$ is contained in one block of $V$. We call $n$ the length of $(V, \pi)$. Mathematically, another length function is more important. It is given by $|(V, \pi)| := n - ( 2 \cdot \text{number of blocks of } V - \text{number of cycles of } \pi),$ and we call this the adjusted length of $(V, \pi)$. Note that this terminology is not used in the literature.
PartitionedPermutation — TypePartitionedPermutationThe type of partitioned permutations. Field names are
- p::PermGroupElem - a permutation
- V::SetPartition - a partition
If the permutation has length n, then the partition must have n upper points and 0 lower points. Further, if W is the partition given by the cycles of p, then W must be dominated by V in the sense that every block of W is contained in one block of V. There is one inner constructor of PartitionedPermutation:
PartitionedPermutation(p::PermGroupElem, V::Vector{Int})constructs the partitioned permutation where the partition is given by the vectorV.
If the optional flag check is set to false, then the constructor skips the validation of the requirements mentioned above.
Examples
julia> PartitionedPermutation(perm(symmetric_group(3), [2, 1, 3]), [1, 1, 2])
PartitionedPermutation((1,2), SetPartition([1, 1, 2], Int64[]))This function is part of the experimental code in Oscar. Please read here for more details.
length — Methodlength(pp::PartitionedPermutation)Return the length of a partitioned permutation, i.e. the size of the underlying set.
Examples
julia> length(partitioned_permutation(perm(symmetric_group(2), [2, 1]), [1, 1]))
2This function is part of the experimental code in Oscar. Please read here for more details.
adjusted_length — Methodadjusted_length(pp::PartitionedPermutation)Return the adjusted length of a partitioned permutation as described in [CMS07] as |(V, pi)| for a partition V and a permutation pi.
Examples
julia> adjusted_length(partitioned_permutation(perm(symmetric_group(2), [2, 1]), [1, 1]))
1This function is part of the experimental code in Oscar. Please read here for more details.
Products of Partitioned Permutations
For two partitioned permutations $(V, \pi)$ and $(W, \sigma)$ one defines their product as $(V, \pi) \cdot (W, \sigma) = (V \vee W, \pi \sigma)$ if $|(V, \pi)| + |(W, \sigma)| = |(V \vee W, \pi \sigma)|$. Otherwise, one sets $(V, \pi) \cdot (W, \sigma) = (O, \mathrm{id})$. Here, $O$ is the partition where every block consists of exactly one element, and $V \vee W$ denotes the join of the partitions $V$ and $W$.
A major problem is the factorization of a partitioned permutation $(V, \pi)$. This involves finding all pairs $(W_1, \sigma_1), (W_2, \sigma_2)$ of partitioned permutations with $(V, \pi) = (W_1, \sigma_1) \cdot (W_2, \sigma_2)$.
* — Method*(pp_1::PartitionedPermutation, pp_2::PartitionedPermutation)Return the product of two partitioned permutations as described in [CMS07].
Examples
julia> x = partitioned_permutation(perm(symmetric_group(3), [1, 2, 3]), [1, 2, 3])
PartitionedPermutation((), SetPartition([1, 2, 3], Int64[]))
julia> y = partitioned_permutation(perm(symmetric_group(3), [2, 1, 3]), [1, 1, 3])
PartitionedPermutation((1,2), SetPartition([1, 1, 2], Int64[]))
julia> x*y
PartitionedPermutation((1,2), SetPartition([1, 1, 2], Int64[]))This function is part of the experimental code in Oscar. Please read here for more details.
enumerate_partitioned_permutations — Methodenumerate_partitioned_permutations(n::Int)Return and calculate all PartitionedPermutation objects of length n
Examples
julia> length(enumerate_partitioned_permutations(6))
4051This function is part of the experimental code in Oscar. Please read here for more details.
factor — Methodfactor(pp::PartitionedPermutation)Return the factorization of pp in form of a set of 2-tuples.
Examples
julia> length(factor(partitioned_permutation(perm(symmetric_group(3), [2, 1, 3]), [1, 1, 2])))
2This function is part of the experimental code in Oscar. Please read here for more details.