Safe Haskell | None |
---|---|

Language | Haskell98 |

A module for doing arithmetic in permutation groups.

Group elements are represented as permutations of underlying sets, and are entered and displayed
using a Haskell-friendly version of cycle notation. For example, the permutation (1 2 3)(4 5)
would be entered as `p [[1,2,3],[4,5]]`

, and displayed as [[1,2,3],[4,5]]. Permutations can be defined
over arbitrary underlying sets (types), not just the integers.

If `g`

and `h`

are group elements, then the expressions `g*h`

and `g^-1`

calculate product and inverse respectively.

## Synopsis

- rotateL :: [a] -> [a]
- newtype Permutation a = P (Map a a)
- fmapP :: Ord a => (t -> a) -> Permutation t -> Permutation a
- p :: Ord a => [[a]] -> Permutation a
- fromPairs :: Ord a => [(a, a)] -> Permutation a
- fromPairs' :: Ord a => [(a, a)] -> Permutation a
- toPairs :: Permutation a -> [(a, a)]
- fromList :: Ord a => [a] -> Permutation a
- supp :: Permutation a -> [a]
- (.^) :: Ord a => a -> Permutation a -> a
- (-^) :: Ord a => [a] -> Permutation a -> [a]
- fromCycles :: Ord a => [[a]] -> Permutation a
- toCycles :: Ord a => Permutation a -> [[a]]
- cycleOf :: Ord t => Permutation t -> t -> [t]
- parity :: Ord a => Permutation a -> Int
- sign :: (Num a1, Ord a2) => Permutation a2 -> a1
- orderElt :: Ord a => Permutation a -> Int
- (~^) :: Ord a => Permutation a -> Permutation a -> Permutation a
- comm :: (HasInverses a, Num a) => a -> a -> a
- closureS :: Ord a => [a] -> [a -> a] -> Set a
- closure :: Ord a => [a] -> [a -> a] -> [a]
- orbit :: Ord t1 => (t1 -> t2 -> t1) -> t1 -> [t2] -> [t1]
- (.^^) :: Ord a => a -> [Permutation a] -> [a]
- orbitP :: Ord t => [Permutation t] -> t -> [t]
- orbitV :: Ord t => [Permutation t] -> t -> [t]
- (-^^) :: Ord a => [a] -> [Permutation a] -> [[a]]
- orbitB :: Ord a => [Permutation a] -> [a] -> [[a]]
- orbitE :: Ord a => [Permutation a] -> [a] -> [[a]]
- action :: Ord t => [t] -> (t -> t) -> Permutation t
- orbits :: Ord a => [Permutation a] -> [[a]]
- _C :: Integral a => a -> [Permutation a]
- _D :: Integral a => a -> [Permutation a]
- _D2 :: Integral a => a -> [Permutation a]
- _S :: Integral a => a -> [Permutation a]
- _A :: Integral a => a -> [Permutation a]
- dp :: (Ord a, Ord b) => [Permutation a] -> [Permutation b] -> [Permutation (Either a b)]
- wr :: (Ord a2, Ord a1) => [Permutation a2] -> [Permutation a1] -> [Permutation (a2, a1)]
- toSn :: (Ord a1, Num a1, Enum a1, Ord a2) => [Permutation a2] -> [Permutation a1]
- fromDigits :: (Ord p, Num p) => Permutation [p] -> Permutation p
- fromDigits' :: Num p => [p] -> p
- fromBinary :: (Ord p, Num p) => Permutation [p] -> Permutation p
- fromBinary' :: Num p => [p] -> p
- elts :: (Num a, Ord a) => [a] -> [a]
- eltsS :: (Ord a, Num a) => [a] -> Set a
- order :: (Num a, Ord a) => [a] -> Int
- isMember :: (Ord a, Num a) => [a] -> a -> Bool
- minsupp :: Permutation c -> c
- orderTGS :: (Num a, Ord c) => [Permutation c] -> a
- eltsTGS :: Ord c => [Permutation c] -> [Permutation c]
- tgsFromSgs :: Ord a => [Permutation a] -> [Permutation a]
- orderSGS :: Ord a => [Permutation a] -> Integer
- orderBSGS :: Ord a => ([a], [Permutation a]) -> Integer
- gens :: (Ord a, Num a) => [a] -> [a]
- (~^^) :: Ord a => Permutation a -> [Permutation a] -> [Permutation a]
- conjClass :: Ord a => [Permutation a] -> Permutation a -> [Permutation a]
- conjClassReps :: (Ord a, Show a) => [Permutation a] -> [(Permutation a, Int)]
- reduceGens :: (Num a, Ord a) => [a] -> [a]
- isSubgp :: (Foldable t, Ord a, Num a) => t a -> [a] -> Bool
- subgps :: (Ord a, Show a) => [Permutation a] -> [[Permutation a]]
- isMinimal :: Ord a => Permutation a -> Bool
- centralizer :: (Num a, Ord a, Foldable t) => [a] -> t a -> [a]
- centre :: (Num a, Ord a) => [a] -> [a]
- normalizer :: Ord a => [Permutation a] -> [Permutation a] -> [Permutation a]
- stabilizer :: Ord a => [Permutation a] -> a -> [Permutation a]
- ptStab :: Ord a => [Permutation a] -> [a] -> [Permutation a]
- setStab :: Ord a => [Permutation a] -> [a] -> [Permutation a]
- normalClosure :: Ord a => [Permutation a] -> [Permutation a] -> [Permutation a]
- commutatorGp :: Ord a => [Permutation a] -> [Permutation a] -> [Permutation a]
- derivedSubgp :: Ord a => [Permutation a] -> [Permutation a]
- (-*-) :: (Ord b, Num b) => [b] -> [b] -> [b]
- (-*) :: (Ord a, Num a) => [a] -> a -> [a]
- (*-) :: (Ord a, Num a) => a -> [a] -> [a]
- isNormal :: (Ord a, Show a) => [Permutation a] -> [Permutation a] -> Bool
- normalSubgps :: (Ord a, Show a) => [Permutation a] -> [[Permutation a]]
- isSimple :: (Ord a, Show a) => [Permutation a] -> Bool
- cosets :: (Num a, Ord a) => [a] -> [a] -> [[a]]
- quotientGp :: (Ord a, Show a) => [Permutation a] -> [Permutation a] -> [Permutation Int]
- (//) :: (Ord a, Show a) => [Permutation a] -> [Permutation a] -> [Permutation Int]
- (~~^) :: Ord a => [Permutation a] -> Permutation a -> [Permutation a]
- conjugateSubgps :: Ord a => [Permutation a] -> [Permutation a] -> [[Permutation a]]
- subgpAction :: (Num a1, Enum a1, Ord a1, Ord a2) => [Permutation a2] -> [Permutation a2] -> [Permutation a1]
- rrpr :: (Ord a, Num a) => [a] -> a -> Permutation a
- rrpr' :: (Ord a, Num a) => [a] -> a -> Permutation a
- permutationMatrix :: (Ord a1, Num a2) => [a1] -> Permutation a1 -> [[a2]]

# Documentation

newtype Permutation a Source #

A type for permutations, considered as functions or actions which can be performed on an underlying set.

## Instances

fmapP :: Ord a => (t -> a) -> Permutation t -> Permutation a Source #

p :: Ord a => [[a]] -> Permutation a Source #

Construct a permutation from a list of cycles.
For example, `p [[1,2,3],[4,5]]`

returns the permutation that sends 1 to 2, 2 to 3, 3 to 1, 4 to 5, 5 to 4.

fromPairs :: Ord a => [(a, a)] -> Permutation a Source #

fromPairs' :: Ord a => [(a, a)] -> Permutation a Source #

toPairs :: Permutation a -> [(a, a)] Source #

fromList :: Ord a => [a] -> Permutation a Source #

supp :: Permutation a -> [a] Source #

(.^) :: Ord a => a -> Permutation a -> a Source #

x .^ g returns the image of a vertex or point x under the action of the permutation g.
For example, `1 .^ p [[1,2,3]]`

returns 2.
The dot is meant to be a mnemonic for point or vertex.

(-^) :: Ord a => [a] -> Permutation a -> [a] Source #

b -^ g returns the image of an edge or block b under the action of the permutation g.
For example, `[1,2] -^ p [[1,4],[2,3]]`

returns [3,4].
The dash is meant to be a mnemonic for edge or line or block.

fromCycles :: Ord a => [[a]] -> Permutation a Source #

toCycles :: Ord a => Permutation a -> [[a]] Source #

cycleOf :: Ord t => Permutation t -> t -> [t] Source #

(~^) :: Ord a => Permutation a -> Permutation a -> Permutation a infix 8 Source #

g ~^ h returns the conjugate of g by h, that is, h^-1*g*h. The tilde is meant to a mnemonic, because conjugacy is an equivalence relation.

comm :: (HasInverses a, Num a) => a -> a -> a Source #

(.^^) :: Ord a => a -> [Permutation a] -> [a] Source #

x .^^ gs returns the orbit of the point or vertex x under the action of the gs

orbitP :: Ord t => [Permutation t] -> t -> [t] Source #

orbitV :: Ord t => [Permutation t] -> t -> [t] Source #

(-^^) :: Ord a => [a] -> [Permutation a] -> [[a]] Source #

b -^^ gs returns the orbit of the block or edge b under the action of the gs

orbitB :: Ord a => [Permutation a] -> [a] -> [[a]] Source #

orbitE :: Ord a => [Permutation a] -> [a] -> [[a]] Source #

action :: Ord t => [t] -> (t -> t) -> Permutation t Source #

orbits :: Ord a => [Permutation a] -> [[a]] Source #

_C :: Integral a => a -> [Permutation a] Source #

_C n returns generators for Cn, the cyclic group of order n

_D :: Integral a => a -> [Permutation a] Source #

_D2 :: Integral a => a -> [Permutation a] Source #

_S :: Integral a => a -> [Permutation a] Source #

_S n returns generators for Sn, the symmetric group on [1..n]

_A :: Integral a => a -> [Permutation a] Source #

_A n returns generators for An, the alternating group on [1..n]

dp :: (Ord a, Ord b) => [Permutation a] -> [Permutation b] -> [Permutation (Either a b)] Source #

Given generators for groups H and K, acting on sets A and B respectively, return generators for the direct product H*K, acting on the disjoint union A+B (= Either A B)

wr :: (Ord a2, Ord a1) => [Permutation a2] -> [Permutation a1] -> [Permutation (a2, a1)] Source #

toSn :: (Ord a1, Num a1, Enum a1, Ord a2) => [Permutation a2] -> [Permutation a1] Source #

fromDigits :: (Ord p, Num p) => Permutation [p] -> Permutation p Source #

fromDigits' :: Num p => [p] -> p Source #

fromBinary :: (Ord p, Num p) => Permutation [p] -> Permutation p Source #

fromBinary' :: Num p => [p] -> p Source #

elts :: (Num a, Ord a) => [a] -> [a] Source #

Given generators for a group, return a (sorted) list of all elements of the group. Implemented using a naive closure algorithm, so only suitable for small groups (|G| < 10000)

order :: (Num a, Ord a) => [a] -> Int Source #

Given generators for a group, return the order of the group (the number of elements). Implemented using a naive closure algorithm, so only suitable for small groups (|G| < 10000)

minsupp :: Permutation c -> c Source #

eltsTGS :: Ord c => [Permutation c] -> [Permutation c] Source #

tgsFromSgs :: Ord a => [Permutation a] -> [Permutation a] Source #

orderSGS :: Ord a => [Permutation a] -> Integer Source #

Given a strong generating set, return the order of the group it generates. Note that the SGS is assumed to be relative to the natural order of the points on which the group acts.

orderBSGS :: Ord a => ([a], [Permutation a]) -> Integer Source #

Given a base and strong generating set, return the order of the group it generates.

(~^^) :: Ord a => Permutation a -> [Permutation a] -> [Permutation a] Source #

conjClass :: Ord a => [Permutation a] -> Permutation a -> [Permutation a] Source #

conjClassReps :: (Ord a, Show a) => [Permutation a] -> [(Permutation a, Int)] Source #

conjClassReps gs returns conjugacy class representatives and sizes for the group generated by gs. This implementation is only suitable for use with small groups (|G| < 10000).

reduceGens :: (Num a, Ord a) => [a] -> [a] Source #

subgps :: (Ord a, Show a) => [Permutation a] -> [[Permutation a]] Source #

Return the subgroups of a group. Only suitable for use on small groups (eg < 100 elts)

normalizer :: Ord a => [Permutation a] -> [Permutation a] -> [Permutation a] Source #

stabilizer :: Ord a => [Permutation a] -> a -> [Permutation a] Source #

ptStab :: Ord a => [Permutation a] -> [a] -> [Permutation a] Source #

setStab :: Ord a => [Permutation a] -> [a] -> [Permutation a] Source #

normalClosure :: Ord a => [Permutation a] -> [Permutation a] -> [Permutation a] Source #

commutatorGp :: Ord a => [Permutation a] -> [Permutation a] -> [Permutation a] Source #

derivedSubgp :: Ord a => [Permutation a] -> [Permutation a] Source #

isNormal :: (Ord a, Show a) => [Permutation a] -> [Permutation a] -> Bool Source #

isNormal gs ks returns True if <ks> is normal in <gs>. Note, it is caller's responsibility to ensure that <ks> is a subgroup of <gs> (ie that each k is in <gs>).

normalSubgps :: (Ord a, Show a) => [Permutation a] -> [[Permutation a]] Source #

Return the normal subgroups of a group. Only suitable for use on small groups (eg < 100 elts)

quotientGp :: (Ord a, Show a) => [Permutation a] -> [Permutation a] -> [Permutation Int] Source #

quotientGp gs ks returns <gs> / <ks>

(//) :: (Ord a, Show a) => [Permutation a] -> [Permutation a] -> [Permutation Int] Source #

Synonym for quotientGp

(~~^) :: Ord a => [Permutation a] -> Permutation a -> [Permutation a] Source #

conjugateSubgps :: Ord a => [Permutation a] -> [Permutation a] -> [[Permutation a]] Source #

subgpAction :: (Num a1, Enum a1, Ord a1, Ord a2) => [Permutation a2] -> [Permutation a2] -> [Permutation a1] Source #

permutationMatrix :: (Ord a1, Num a2) => [a1] -> Permutation a1 -> [[a2]] Source #