| Copyright | (c) 2020-2021 Emily Pillmore Koji Miyazato <[email protected]> |
|---|---|
| License | BSD-style |
| Maintainer | Emily Pillmore <[email protected]>, Reed Mullanix <[email protected]> |
| Stability | stable |
| Portability | non-portable |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Data.Group.Order
Contents
Description
This module contains definitions for GroupOrder.
Synopsis
- class (Eq g, Group g) => GroupOrder g where
- data Order
- pattern Infinitary :: GroupOrder g => g
- pattern Finitary :: GroupOrder g => Natural -> g
- orderForBits :: (Integral a, FiniteBits a) => Sum a -> Order
- lcmOrder :: Order -> Order -> Order
- class (Group g, Bounded g) => FiniteGroup g
- finiteOrder :: (Eq g, FiniteGroup g) => g -> Natural
Group order
class (Eq g, Group g) => GroupOrder g where Source #
The typeclass of groups, equipped with the function computing the order of a specific element of a group.
The order of x is the smallest positive integer k
such that . If there are no such
integers, the order of gtimes k x == memptyx is defined to be infinity.
Note: For any valid instances of GroupOrder,
order x == Finite 1 holds if and only if x == mempty.
Examples:
>>>order (3 :: Sum Word8)Finite 256>>>order (16 :: Sum Word8)Finite 16>>>order (0 :: Sum Integer)Finite 1>>>order (1 :: Sum Integer)Infinite
Methods
The order of an element of a group.
order x must be Finite k if the order of x is
finite k, and must be Infinite otherwise.
For a type which is also FiniteGroup,
is a valid implementation of Finite . finiteOrderorder,
if not efficient.
Instances
Order
The order of a group element.
The order of a group element can either be infinite,
as in the case of Sum Integer, or finite, as in the
case of Sum Word8.
pattern Infinitary :: GroupOrder g => g Source #
Unidirectional pattern synonym for the infinite order of a group element.
pattern Finitary :: GroupOrder g => Natural -> g Source #
Unidirectional pattern synonym for the finite order of a group element.
orderForBits :: (Integral a, FiniteBits a) => Sum a -> Order Source #
lcmOrder :: Order -> Order -> Order Source #
lcmOrder x y calculates the least common multiple of two Orders.
If both x and y are finite, it returns where Finite rr
is the least common multiple of them. Otherwise, it returns Infinite.
Examples:
>>>lcmOrder (Finite 2) (Finite 5)Finite 10>>>lcmOrder (Finite 2) (Finite 10)Finite 10>>>lcmOrder (Finite 1) InfiniteInfinite
class (Group g, Bounded g) => FiniteGroup g Source #
A FiniteGroup is a Group whose underlying set is finite.
This is equivalently a group object in \( FinSet \).
Finite groups often arise when considering symmetry of mathematical or physical objects, when those objects admit just a finite number of structure-preserving transformations. Important examples of finite groups include cyclic groups and permutation groups.
Instances
| FiniteGroup () Source # | |
Defined in Data.Group.Finite | |
| FiniteGroup a => FiniteGroup (Identity a) Source # | |
Defined in Data.Group.Finite | |
| FiniteGroup a => FiniteGroup (Dual a) Source # | |
Defined in Data.Group.Finite | |
| (Bounded a, Num a) => FiniteGroup (Sum a) Source # | |
Defined in Data.Group.Finite | |
| (FiniteGroup a, FiniteGroup b) => FiniteGroup (a, b) Source # | |
Defined in Data.Group.Finite | |
| FiniteGroup a => FiniteGroup (Proxy a) Source # | |
Defined in Data.Group.Finite | |
| (FiniteGroup a, FiniteGroup b, FiniteGroup c) => FiniteGroup (a, b, c) Source # | |
Defined in Data.Group.Finite | |
| FiniteGroup a => FiniteGroup (Const a b) Source # | |
Defined in Data.Group.Finite | |
| (FiniteGroup a, FiniteGroup b, FiniteGroup c, FiniteGroup d) => FiniteGroup (a, b, c, d) Source # | |
Defined in Data.Group.Finite | |
| (FiniteGroup a, FiniteGroup b, FiniteGroup c, FiniteGroup d, FiniteGroup e) => FiniteGroup (a, b, c, d, e) Source # | |
Defined in Data.Group.Finite | |
finiteOrder :: (Eq g, FiniteGroup g) => g -> Natural Source #
Calculate the exponent of a particular element in a finite group.
Examples:
>>>finiteOrder @(Sum Word8) 3256