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.

- 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 a => Permutation a -> a -> [a]
- parity :: Ord a => Permutation a -> Int
- sign :: (Ord a1, Num a) => Permutation a1 -> a
- 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 a => (a -> t -> a) -> a -> [t] -> [a]
- (.^^) :: Ord a => a -> [Permutation a] -> [a]
- orbitP :: Ord a => [Permutation a] -> a -> [a]
- orbitV :: Ord a => [Permutation a] -> a -> [a]
- (-^^) :: Ord a => [a] -> [Permutation a] -> [[a]]
- orbitB :: Ord a => [Permutation a] -> [a] -> [[a]]
- orbitE :: Ord a => [Permutation a] -> [a] -> [[a]]
- action :: Ord a => [a] -> (a -> a) -> Permutation a
- 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 t1, Ord t) => [Permutation t] -> [Permutation t1] -> [Permutation (t, t1)]
- toSn :: (Ord a, Ord k, Num a, Enum a) => [Permutation k] -> [Permutation a]
- fromDigits :: (Ord a, Num a) => Permutation [a] -> Permutation a
- fromDigits' :: Num a => [a] -> a
- fromBinary :: (Ord a, Num a) => Permutation [a] -> Permutation a
- fromBinary' :: Num a => [a] -> a
- 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 :: (Ord a, Num a1) => [Permutation a] -> a1
- eltsTGS :: Ord a => [Permutation a] -> [Permutation a]
- 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 :: (Ord a, Num a) => [a] -> [a]
- isSubgp :: (Ord a, Num a) => [a] -> [a] -> Bool
- subgps :: (Ord a, Show a) => [Permutation a] -> [[Permutation a]]
- isMinimal :: Ord a => Permutation a -> Bool
- centralizer :: (Ord t, Num t) => [t] -> [t] -> [t]
- centre :: (Ord t, Num t) => [t] -> [t]
- 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 :: (Show a, Ord a) => [Permutation a] -> Bool
- cosets :: (Ord t, Num t) => [t] -> [t] -> [[t]]
- 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 :: (Ord a1, Ord a, Num a1, Enum a1) => [Permutation a] -> [Permutation a] -> [Permutation a1]
- rrpr :: (Ord a, Num a) => [a] -> a -> Permutation a
- rrpr' :: (Ord a, Num a) => [a] -> a -> Permutation a
- permutationMatrix :: (Ord a, Num t) => [a] -> Permutation a -> [[t]]

# Documentation

newtype Permutation a Source

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

(Eq k, Num k) => HopfAlgebra k (Permutation Int) | |

(Eq k, Num k) => Bialgebra k (Permutation Int) | |

(Eq k, Num k) => Coalgebra k (Permutation Int) | |

(Eq k, Num k) => Algebra k (Permutation Int) | |

(Eq k, Num k) => Module k (Permutation Int) Int | |

(Eq k, Num k) => Module k (Permutation Int) [Int] | |

Eq a => Eq (Permutation a) | |

Ord a => Num (Permutation a) | The Num instance is what enables us to write |

Ord a => Ord (Permutation a) | |

(Ord a, Show a) => Show (Permutation a) | |

Ord a => HasInverses (Permutation a) | The HasInverses instance is what enables us to write |

HasInverses (GroupAlgebra Q) | Note that the inverse of a group algebra element can only be efficiently calculated if the group generated by the non-zero terms is very small (eg <100 elements). |

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 a => Permutation a -> a -> [a] Source

parity :: Ord a => Permutation a -> Int Source

sign :: (Ord a1, Num a) => Permutation a1 -> a Source

orderElt :: Ord a => Permutation a -> Int 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 a => [Permutation a] -> a -> [a] Source

orbitV :: Ord a => [Permutation a] -> a -> [a] 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 a => [a] -> (a -> a) -> Permutation a 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 t1, Ord t) => [Permutation t] -> [Permutation t1] -> [Permutation (t, t1)] Source

toSn :: (Ord a, Ord k, Num a, Enum a) => [Permutation k] -> [Permutation a] Source

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

fromDigits' :: Num a => [a] -> a Source

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

fromBinary' :: Num a => [a] -> a 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

orderTGS :: (Ord a, Num a1) => [Permutation a] -> a1 Source

eltsTGS :: Ord a => [Permutation a] -> [Permutation a] 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 :: (Ord a, Num 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)

isMinimal :: Ord a => Permutation a -> Bool Source

centralizer :: (Ord t, Num t) => [t] -> [t] -> [t] Source

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 :: (Ord a1, Ord a, Num a1, Enum a1) => [Permutation a] -> [Permutation a] -> [Permutation a1] Source

rrpr :: (Ord a, Num a) => [a] -> a -> Permutation a Source

rrpr' :: (Ord a, Num a) => [a] -> a -> Permutation a Source

permutationMatrix :: (Ord a, Num t) => [a] -> Permutation a -> [[t]] Source