Safe Haskell | None |
---|---|
Language | Haskell98 |
Common library for algebraic structures. Has the advantage of automatically inferring lots of useful structure, especially
in the writing of linear programs. For example, here are several ways of writing 3 x - 4 y + z
:
gsum [3 *& x, (-4) *^ var y, var z] linCombination [(3, x), (-4, y), (1, z)] 3 *& x ^-^ 4 *& y ^+^ var z
In addition, if we have two functions f
and g
, we can construct linear combinations of those functions, using
exactly the same syntax. Moreover, we can multiply functions with Double
coefficients by Rational
values successfully.
This module is intended to offer as much generality as possible without getting in your way.
- class Group g where
- class Group r => Ring r where
- class Ring f => Field f where
- class (Ring r, Group m) => Module r m where
- (*^) :: r -> m -> m
- class (Module f v, Field f) => VectorSpace f v
- type Poly = []
- varPoly :: Ring r => Poly r
- type GroupRing r g = Map g r
- type LinFunc = Map
- gsum :: Group g => [g] -> g
- combination :: Module r m => [(r, m)] -> m
- evalPoly :: (Module r m, Ring m) => Poly r -> m -> m
- var :: (Ord v, Ring c) => v -> LinFunc v c
- varSum :: (Ord v, Ring c) => [v] -> LinFunc v c
- (*&) :: (Ord v, Ring c) => c -> v -> LinFunc v c
- linCombination :: (Ord v, Num r) => [(r, v)] -> LinFunc v r
Algebraic structures
The algebraic structure of a group. Written additively. Required functions: zero
and (^-^
or (^+^
and neg
)).
Group Bool Source | |
Group Double Source | |
Group Int Source | |
Group Integer Source | |
Integral a => Group (Ratio a) Source | |
Group g => Group (IntMap g) Source | |
Group g => Group (Poly g) Source | |
Group g => Group (a -> g) Source | |
(Group g1, Group g2) => Group (g1, g2) Source | |
(Ord k, Group g) => Group (Map k g) Source | |
(Ord v, Group c) => Group (LinExpr v c) Source | |
(Group g1, Group g2, Group g3) => Group (g1, g2, g3) Source | |
(Group g1, Group g2, Group g3, Group g4) => Group (g1, g2, g3, g4) Source |
class Group r => Ring r where Source
The algebraic structure of a unital ring. Assumes that the additive operation forms an abelian group, that the multiplication operation forms a group, and that multiplication distributes.
class (Ring r, Group m) => Module r m where Source
The algebraic structure of a module. A vector space is a module with coefficients in a field.
Module Double Double Source | |
Module Int Double Source | |
Module Int Int Source | |
Module Int Integer Source | |
Module Integer Double Source | |
Module Integer Integer Source | |
Integral a => Module Int (Ratio a) Source | |
Integral a => Module Integer (Ratio a) Source | |
Module r m => Module r (IntMap m) Source | |
(Module r m1, Module r m2) => Module r (m1, m2) Source | |
(Ord k, Module r m) => Module r (Map k m) Source | |
Module r m => Module r (a -> m) Source | |
(Ord v, Module r c) => Module r (LinExpr v c) Source | |
(Module r m1, Module r m2, Module r m3) => Module r (m1, m2, m3) Source | |
(Module r m1, Module r m2, Module r m3, Module r m4) => Module r (m1, m2, m3, m4) Source | |
Integral a => Module (Ratio a) Double Source | |
Integral a => Module (Ratio a) (Ratio a) Source | |
(Ord g, Group g, Ring r) => Module (GroupRing r g) (GroupRing r g) Source |
class (Module f v, Field f) => VectorSpace f v Source
(Module f v, Field f) => VectorSpace f v Source |
type GroupRing r g = Map g r Source
A way of forming a ring from functions. See http://en.wikipedia.org/wiki/Group_ring.
is a linear combination of variables of type LinFunc
v cv
with coefficients
from c
. Formally, this is the free c
-module on v
.
Algebraic functions
combination :: Module r m => [(r, m)] -> m Source
Given a collection of vectors and scaling coefficients, returns this linear combination.
Specialized methods on linear functions
var :: (Ord v, Ring c) => v -> LinFunc v c Source
Given a variable v
, returns the function equivalent to v
.
linCombination :: (Ord v, Num r) => [(r, v)] -> LinFunc v r Source
Given a set of basic variables and coefficients, returns the linear combination obtained by summing.