Random Processes
RandProc is a Haskell library, which defines and supports certain data structures that are convenient when working with random processes in a mathematically rigorous fashion.
The concepts embedded in RandProc come from the text I used in my graduate stochastic processes course:
Robert M. Gray, Lee D. Davisson; Random Processes - a Mathematical Approach for Engineers; Prentice-Hall Information and System Sciences Series, Thomas Kailath, Series Editor.
Authors: David Banas
Installation
Download the `randproc` package:
$ cabal install randproc
and import it:
import Data.RandProc
Description
Underlying concepts
As per the reference text, a probability space is taken to be composed of:
- an abstract space of samples,
- an event space, which must be a sigma field over the abstract sample space, and
- a probability measure over the event space.
In the code, the event space and probability measure are combined, in order to keep the code concise.
Public interface
New data types
The code defines an abstract data type, Sample, as follows:
data Sample = Point Double | Range (Double, Double) | Empty | Full deriving (Eq, Show)
However, this type is not exported in the public interface of the `RandProc` module. Instead, helper functions point and range are provided, as alternatives, in order to protect against future implementation changes.
Note) There is, currently, a single exception to the above. The Empty value constructor is exported, as it is currently necessary. However, this is really just a hack designed to put off the task of making the support functions more intelligent, with regards to their handling of empty sample sets.
An event is defined in the code as simply an alias for a list of samples:
type Event = [Sample]
And a measure just attaches a probability of occurrence to an event:
data Measure = Measure { event :: Event ,prob :: Double } deriving (Eq, Ord, Show)
Supporting functions
Several supporting functions are provided for working with the new data types described, above. A few of the more interesting examples are given, below. For a complete list, refer to the documentation.
- checkProbMeas
- Checks a value of type 'ProbSpace' for correctness, and returns a value of type 'TestResult'.
- checkSigma
- Checks whether event space is actually a Sigma field over the sample space.
- smplSetUnion
- Collapses a list of samples down to the maximally reduced set, which still composes a proper union of the input.
- smplSetInt
- Reduces a list of samples to a single sample representing their intersection.
Usage
For more extensive usage examples, see the `test/Test.hs` file.
Construction of a probability space representing a fair coin
fairCoin = ProbSpace [point 0.0, point 1.0] [Measure ( [Empty]) 0, Measure ( [point 0]) 0.5 , Measure ( [point 1]) 0.5, Measure ( [point 0, point 1]) 1.0]
Testing the probability space defined, above
checkProbMeas fairCoin
Documentation
The documentation for this library is generated, via Haddock.
Related work
- Probabilistic Functional Programming
- I suspect a potential symbiosis between this library and `RandProc`
Community
- RandProcNotes
- Blog dedicated to the `RandProc` Haskell library
- Bug Tracker
- Bug tracker for the `RandProc` Haskell library
- Mailing List
- Mailing list for `RandProc` users and developers
- Source Code Tree
- Browsable source tree
- Darcs repository
darcs get http://code.haskell.org/RandProc/