-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Permutations, patterns, and statistics -- -- Definitions for permutations with an emphasis on permutation patterns -- and statistics. -- --
-- sym 2 == [fromList [0,1], fromList [1,0]] --sym :: Int -> [StPerm] -- | The class of permutations. Minimal complete definition: st -- act and idperm. The default implementations of -- size and neutralize can be somewhat slow, so you may -- want to implement them as well. class Perm a where size = size . st inverse = unst . inverse . st ordiso u v = u == st v unstn n w = w `act` idperm n unst w = unstn (size w) w st :: Perm a => a -> StPerm act :: Perm a => StPerm -> a -> a size :: Perm a => a -> Int idperm :: Perm a => Int -> a inverse :: Perm a => a -> a ordiso :: Perm a => StPerm -> a -> Bool unstn :: Perm a => Int -> StPerm -> a unst :: (Perm a, Perm a) => StPerm -> a -- | The empty permutation. empty :: Perm a => a -- | The one letter permutation. one :: Perm a => a -- | Convert a permutation to a vector. toVector :: Perm a => a -> Vector Int -- | Convert a vector to a permutation. The vector should be a permutation -- of the elements [0..k-1] for some positive k. No -- checks for this are done. fromVector :: Perm a => Vector Int -> a -- | The bijective function defined by a permutation. bijection :: StPerm -> Int -> Int -- | Generalize a function on StPerm to a function on any -- permutations: -- --
-- generalize f = unst . f . st --generalize :: (Perm a, Perm b) => (StPerm -> StPerm) -> a -> b -- | Like generalize but for functions of two variables generalize2 :: (Perm a, Perm b, Perm c) => (StPerm -> StPerm -> StPerm) -> a -> b -> c -- | Sort a list of permutations with respect to the standardization and -- remove duplicates normalize :: (Ord a, Perm a) => [a] -> [a] -- | Cast a permutation of one type to another cast :: (Perm a, Perm b) => a -> b -- | The direct sum of two permutations. (\+\) :: Perm a => a -> a -> a -- | The direct sum of a list of permutations. dsum :: Perm a => [a] -> a -- | The skew sum of two permutations. (/-/) :: Perm a => a -> a -> a -- | The skew sum of a list of permutations. ssum :: Perm a => [a] -> a -- | inflate w vs is the inflation of w by -- vs. It is the permutation of length sum (map size -- vs) obtained by replacing each entry w!i by an interval -- that is order isomorphic to vs!i in such a way that the -- intervals are order isomorphic to w. In particular, -- --
-- u \+\ v == inflate (fromList [0,1]) [u,v] -- u /-/ v == inflate (fromList [1,0]) [u,v] --inflate :: Perm a => a -> [a] -> a -- | unrankPerm u rank is the rank-th (Myrvold & -- Ruskey) permutation of size n. E.g., -- --
-- unrankPerm 9 88888 == "561297843" --unrankPerm :: Perm a => Int -> Integer -> a -- | randomPerm n is a random permutation of size n. randomPerm :: Perm a => Int -> IO a -- | All permutations of a given size. E.g., -- --
-- perms 3 == ["123","213","321","132","231","312"] --perms :: Perm a => Int -> [a] -- | One pass of stack-sort. stackSort :: Perm a => a -> a -- | One pass of bubble-sort. bubbleSort :: Perm a => a -> a -- | copiesOf p w is the list of (indices of) copies of the -- pattern p in the permutation w. E.g., -- --
-- copiesOf (st "21") "2431" == [fromList [1,2],fromList [0,3],fromList [1,3],fromList [2,3]] --copiesOf :: Perm a => StPerm -> a -> [Set] -- | avoids w ps is a predicate determining if w avoids -- the patterns ps. avoids :: Perm a => a -> [StPerm] -> Bool -- | avoiders ps vs is the list of permutations in vs -- avoiding the patterns ps. This is equivalent to the -- definition -- --
-- avoiders ps = filter (`avoids` ps) ---- -- but is usually much faster. avoiders :: Perm a => [StPerm] -> [a] -> [a] -- | av ps n is the list of permutations of [0..n-1] -- avoiding the patterns ps. E.g., -- --
-- map (length . av [st "132", st "321"]) [1..8] == [1,2,4,7,11,16,22,29] --av :: [StPerm] -> Int -> [StPerm] -- | Delete the element at a given position del :: Perm a => Int -> a -> a -- | The list of all single point deletions shadow :: (Ord a, Perm a) => [a] -> [a] -- | The list of permutations that are contained in at least one of the -- given permutaions downset :: (Ord a, Perm a) => [a] -> [a] -- | Extend a permutation by inserting a new largest element at the given -- position ext :: Perm a => Int -> a -> a -- | The list of all single point extensions coshadow :: (Ord a, Perm a) => [a] -> [a] -- | The set of indices of left-to-right maxima. lMaxima :: Perm a => a -> Set -- | The set of indices of left-to-right minima. lMinima :: Perm a => a -> Set -- | The set of indices of right-to-left maxima. rMaxima :: Perm a => a -> Set -- | The set of indices of right-to-left minima. rMinima :: Perm a => a -> Set -- | The set of indices of components. components :: Perm a => a -> Set -- | The set of indices of skew components. skewComponents :: Perm a => a -> Set -- | A predicate determining if a given permutation is simple. simple :: Perm a => a -> Bool -- | A set is represented by an increasing vector of non-negative integers. type Set = Vector Int -- | subsets n k is the list of subsets of [0..n-1] with -- k elements. subsets :: Int -> Int -> [Set] instance Eq StPerm instance Bitmask Integer instance Bitmask CUInt instance Perm [Int] instance Perm String instance Perm StPerm instance Monoid StPerm instance Show StPerm instance Ord StPerm -- | The dihedral group of order 8 acting on permutations. -- -- To avoid name clashes this module is best imported qualified; -- e.g. -- --
-- import qualified Math.Sym.D8 as D8 --module Math.Sym.D8 -- | Ration by 0 degrees, i.e. the identity map. r0 :: Perm a => a -> a -- | Ration by 90 degrees clockwise. r1 :: Perm a => a -> a -- | Ration by 2*90 = 180 degrees clockwise. r2 :: Perm a => a -> a -- | Ration by 3*90 = 270 degrees clockwise. r3 :: Perm a => a -> a -- | Reflection through a horizontal axis (also called complement). s0 :: Perm a => a -> a -- | Reflection through a vertical axis (also called reverse). s1 :: Perm a => a -> a -- | Reflection through the main diagonal (also called inverse). s2 :: Perm a => a -> a -- | Reflection through the anti-diagonal. s3 :: Perm a => a -> a -- | The dihedral group of order 8 (the symmetries of a square); that is, -- --
-- d8 = [r0, r1, r2, r3, s0, s1, s2, s3] --d8 :: Perm a => [a -> a] -- | The Klein four-group (the symmetries of a non-equilateral rectangle); -- that is, -- --
-- klein4 = [r0, r2, s0, s1] --klein4 :: Perm a => [a -> a] -- | orbit fs x is the orbit of x under the group -- of function fs. E.g., -- --
-- orbit klein4 "2314" == ["1423","2314","3241","4132"] --orbit :: (Ord a, Perm a) => [a -> a] -> a -> [a] -- | symmetryClasses fs xs is the list of equivalence classes -- under the action of the group of functions fs. symmetryClasses :: (Ord a, Perm a) => [a -> a] -> [a] -> [[a]] -- | Symmetry classes with respect to D8. d8Classes :: (Ord a, Perm a) => [a] -> [[a]] -- | Symmetry classes with respect to Klein4 klein4Classes :: (Ord a, Perm a) => [a] -> [[a]] -- |
-- id = r0 --id :: Perm a => a -> a -- |
-- rotate = r1 --rotate :: Perm a => a -> a -- |
-- complement = s0 --complement :: Perm a => a -> a -- |
-- reverse = s1 --reverse :: Perm a => a -> a -- |
-- inverse = s2 --inverse :: Perm a => a -> a -- | Common permutation statistics. Please contact the maintainer if you -- feel that there is a statistic that is missing; even better, send a -- patch or make a pull request. -- -- To avoid name clashes this module is best imported qualified; -- e.g. -- --
-- import qualified Math.Sym.Stat as S ---- -- For any permutation statistic f, below, it holds that f w -- == f (st w), and therefore the explanations below will be done on -- standard permutations for convenience. module Math.Sym.Stat -- | The number of ascents. An ascent in w is an index -- i such that w[i] < w[i+1]. asc :: Perm a => a -> Int -- | The number of descents. A descent in w is an index -- i such that w[i] > w[i+1]. des :: Perm a => a -> Int -- | The number of excedances: positions i such that -- w[i] > i. exc :: Perm a => a -> Int -- | The number of fixed points: positions i such that -- w[i] == i. fp :: Perm a => a -> Int -- | The number of cycles: orbits of the permutation when viewed as -- a function. cyc :: Perm a => a -> Int -- | The number of inversions: pairs (i,j) such that i -- < j and w[i] > w[j]. inv :: Perm a => a -> Int -- | The major index is the sum of descents. maj :: Perm a => a -> Int -- | The co-major index is the sum of descents. comaj :: Perm a => a -> Int -- | The number of peaks: positions i such that w[i-1] -- < w[i] and w[i] > w[i+1]. peak :: Perm a => a -> Int -- | The number of valleys: positions i such that -- w[i-1] > w[i] and w[i] < w[i+1]. vall :: Perm a => a -> Int -- | The number of double ascents: positions i such that -- w[i-1] < w[i] < w[i+1]. dasc :: Perm a => a -> Int -- | The number of double descents: positions i such that -- w[i-1] > w[i] > w[i+1]. ddes :: Perm a => a -> Int -- | The number of left-to-right minima: positions i such -- that w[i] < w[j] for all j < i. lmin :: Perm a => a -> Int -- | The number of left-to-right maxima: positions i such -- that w[i] > w[j] for all j < i. lmax :: Perm a => a -> Int -- | The number of right-to-left minima: positions i such -- that w[i] < w[j] for all j > i. rmin :: Perm a => a -> Int -- | The number of right-to-left maxima: positions i such -- that w[i] > w[j] for all j > i. rmax :: Perm a => a -> Int -- | The first (left-most) element in the standardization. E.g., head -- "231" = head (fromList [1,2,0]) = 1. head :: Perm a => a -> Int -- | The last (right-most) element in the standardization. E.g., last -- "231" = last (fromList [1,2,0]) = 0. last :: Perm a => a -> Int -- | Length of the left-most increasing run: largest i such that -- w[0] < w[1] < ... < w[i-1]. lir :: Perm a => a -> Int -- | Length of the left-most decreasing run: largest i such that -- w[0] > w[1] > ... > w[i-1]. ldr :: Perm a => a -> Int -- | Length of the right-most increasing run: largest i such that -- w[n-i] < ... < w[n-2] < w[n-1]. rir :: Perm a => a -> Int -- | Length of the right-most decreasing run: largest i such that -- w[n-i] > ... > w[n-2] > w[n-1]. rdr :: Perm a => a -> Int -- | The number of components. E.g., [2,0,3,1,4,6,7,5] has three -- components: [2,0,3,1], [4] and [6,7,5]. comp :: Perm a => a -> Int -- | The number of skew components. E.g., [5,7,4,6,3,1,0,2] has -- three skew components: [5,7,4,6], [3] and -- [1,0,2]. scomp :: Perm a => a -> Int -- | The rank as defined by Elizalde and Pak [Bijections for refined -- restricted permutations, J. Comb. Theory, Ser. A, 2004]: -- --
-- maximum [ k | k <- [0..n-1], w[i] >= k for all i < k ] --ep :: Perm a => a -> Int -- | The dimension of a permutation is defined as the largest -- non-fixed-point, or zero if all points are fixed. dim :: Perm a => a -> Int -- | The number of small ascents. A small ascent in w is an -- index i such that w[i] + 1 == w[i+1]. asc0 :: Perm a => a -> Int -- | The number of small descents. A small descent in w is -- an index i such that w[i] == w[i+1] + 1. des0 :: Perm a => a -> Int -- | The size of the shadow of w. That is, the number of different -- one point deletions of w. shad :: Perm a => a -> Int -- | A permutation class is a downset in the poset of permutations ordered -- by containment. This module provides definitions of some common -- classes. module Math.Sym.Class -- | Av(231); also know as the stack sortable permutations. av231 :: Perm a => Int -> [a] -- | The V-class is Av(132, 231). It is so named because the diagram of a -- typical permutation in this class is shaped like a V. vee :: Perm a => Int -> [a] -- | The ∧-class is Av(213, 312). It is so named because the diagram of a -- typical permutation in this class is shaped like a wedge. wedge :: Perm a => Int -> [a] -- | The >-class is Av(132, 312). It is so named because the diagram of -- a typical permutation in this class is shaped like a >. gt :: Perm a => Int -> [a] -- | The <-class is Av(213, 231). It is so named because the diagram of -- a typical permutation in this class is shaped like a <. lt :: Perm a => Int -> [a] -- | The union of vee, wedge, gt and lt; the -- orbit of a V under rotation vorb :: (Ord a, Perm a) => Int -> [a] -- | The class of separable permutations; it is identical to Av(2413,3142). separables :: Perm a => Int -> [a]