Safe Haskell | None |
---|---|
Language | Haskell2010 |
Free modules.
This module should be imported qualified
- newtype FreeMod coeff base = FreeMod {}
- type ZMod base = FreeMod Integer base
- type QMod base = FreeMod Rational base
- normalize :: (Ord b, Eq c, Num c) => FreeMod c b -> FreeMod c b
- safeEq :: (Ord b, Eq b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> Bool
- zero :: FreeMod c b
- generator :: Num c => b -> FreeMod c b
- singleton :: Ord b => b -> c -> FreeMod c b
- fromList :: (Eq c, Num c, Ord b) => [(b, c)] -> FreeMod c b
- toList :: FreeMod c b -> [(b, c)]
- coeffOf :: (Ord b, Num c) => b -> FreeMod c b -> c
- findMaxTerm :: Ord b => FreeMod c b -> Maybe (b, c)
- findMinTerm :: Ord b => FreeMod c b -> Maybe (b, c)
- neg :: Num c => FreeMod c b -> FreeMod c b
- add :: (Ord b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> FreeMod c b
- sub :: (Ord b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> FreeMod c b
- scale :: (Ord b, Eq c, Num c) => c -> FreeMod c b -> FreeMod c b
- invScale :: (Ord b, Eq c, Integral c, Show c) => c -> FreeMod c b -> FreeMod c b
- sum :: (Ord b, Eq c, Num c) => [FreeMod c b] -> FreeMod c b
- linComb :: (Ord b, Eq c, Num c) => [(c, FreeMod c b)] -> FreeMod c b
- flatMap :: (Ord b1, Ord b2, Eq c, Num c) => (b1 -> FreeMod c b2) -> FreeMod c b1 -> FreeMod c b2
- flatMap' :: (Ord b1, Ord b2, Eq c2, Num c2) => (c1 -> c2) -> (b1 -> FreeMod c2 b2) -> FreeMod c1 b1 -> FreeMod c2 b2
- histogram :: (Ord b, Num c) => [b] -> FreeMod c b
- one :: (Monoid b, Num c) => FreeMod c b
- konst :: Monoid b => c -> FreeMod c b
- mul :: (Ord b, Monoid b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> FreeMod c b
- product :: (Ord b, Monoid b, Eq c, Num c) => [FreeMod c b] -> FreeMod c b
- mulMonom :: (Ord b, Monoid b) => b -> FreeMod c b -> FreeMod c b
- symPoly :: (Ord a, Monoid a) => Int -> [a] -> ZMod a
- mapBase :: (Ord a, Ord b) => (a -> b) -> FreeMod c a -> FreeMod c b
- mapCoeff :: Ord b => (c1 -> c2) -> FreeMod c1 b -> FreeMod c2 b
- filterBase :: (Ord a, Ord b) => (a -> Maybe b) -> FreeMod c a -> FreeMod c b
- onFreeMod :: (Ord a, Ord b) => (Map a c -> Map b c) -> FreeMod c a -> FreeMod c b
- onFreeMod' :: (Ord a, Ord b) => (Map a c -> Map b d) -> FreeMod c a -> FreeMod d b
Documentation
newtype FreeMod coeff base Source #
Free module over a coefficient ring with the given base. Internally a map storing the coefficients. We maintain the invariant that the coefficients are never zero.
Sanity checking
normalize :: (Ord b, Eq c, Num c) => FreeMod c b -> FreeMod c b Source #
Should be the identity function
safeEq :: (Ord b, Eq b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> Bool Source #
Safe equality testing (should be identical to ==
)
Constructing and deconstructing
fromList :: (Eq c, Num c, Ord b) => [(b, c)] -> FreeMod c b Source #
Conversion from list. Note that we assume here that each generator appears at most once!
findMaxTerm :: Ord b => FreeMod c b -> Maybe (b, c) Source #
Finds the term with the largest generator (in the natural ordering of the generators)
findMinTerm :: Ord b => FreeMod c b -> Maybe (b, c) Source #
Finds the term with the smallest generator (in the natural ordering of the generators)
Basic operations
invScale :: (Ord b, Eq c, Integral c, Show c) => c -> FreeMod c b -> FreeMod c b Source #
Dividing by a number (assuming that the coefficient ring is integral, and each coefficient is divisible by the given number)
flatMap :: (Ord b1, Ord b2, Eq c, Num c) => (b1 -> FreeMod c b2) -> FreeMod c b1 -> FreeMod c b2 Source #
Expand each generator into a term in another module and then sum the results
flatMap' :: (Ord b1, Ord b2, Eq c2, Num c2) => (c1 -> c2) -> (b1 -> FreeMod c2 b2) -> FreeMod c1 b1 -> FreeMod c2 b2 Source #
histogram :: (Ord b, Num c) => [b] -> FreeMod c b Source #
The histogram of a multiset of generators is naturally an element of the given Z-module.
Rings
mul :: (Ord b, Monoid b, Eq c, Num c) => FreeMod c b -> FreeMod c b -> FreeMod c b Source #
Multiplying two ring elements
Misc
symPoly :: (Ord a, Monoid a) => Int -> [a] -> ZMod a Source #
A symmetric polynomial of some generators
mapCoeff :: Ord b => (c1 -> c2) -> FreeMod c1 b -> FreeMod c2 b Source #
Changing the coefficient ring