Library for Probabilistic Functional Logic Programming
Author: Sandra Dylus, Jan Christiansen, Finn Teegen, Jan Tikovsky
Version: June 2018
enum
:: [a] > [Float] > Dist a
Creates a distribution based on a given list of events and another list providing the corresponding probabilities. 
uniform
:: [a] > Dist a
Creates a uniform distribution based on a given list of events. 
certainly
:: a > Dist a
Creates a singleeventdistribution with probability 1.0 .

(>>>=)
:: Dist a > (a > Dist b) > Dist b
Combines two (dependent) distributions. 
joinWith
:: (a > b > c) > Dist a > Dist b > Dist c
Combines two (independent) distributions with respect to a given function. 
(??)
:: (a > Bool) > Dist a > Float
Queries a distribution for the probabilitiy of events that satisfy a given predicate. 
pick
:: (() > a) > a
Triggers the evaluation of a runtime choice value (see type synonym RT). 
replicateDist
:: Int > (() > Dist a) > Dist [a]
Independently replicates a distribution a given number of times. 
Probabilities. Floating point numbers are used to model probabilities.
Type synonym: Probability = Float
Probability distributions. Distributions are abstract and can only be created using the functions provided by this library, e.g., enum and uniform. Internally, Curry's builtin nondeterminism is used to model distributions with more than one eventprobability pair.
Constructors:
Runtime choice values. Currently, the only way to construct a runtime choice value is to explicitly use a lambda abstraction. The evaluation of a runtime choice can be triggered by the function pick.
Type synonym: RT a = () > a
Creates a distribution based on a given list of events and another list
providing the corresponding probabilities. This function also ensures that
the relevant probabilities add up to 
Creates a uniform distribution based on a given list of events. The list of events must be nonempty. 
Creates a singleeventdistribution with probability

Combines two (dependent) distributions.

Combines two (independent) distributions with respect to a given function. 
Queries a distribution for the probabilitiy of events that satisfy a given predicate.

Triggers the evaluation of a runtime choice value (see type synonym RT). Everytime a runtime choice value is evaluated, a new choice is made. 
Independently replicates a distribution a given number of times. In order to behave properly, the given distribution is required to be a runtime choice value (see type synonym RT). 