`dice`

is a probabilistic programming language focused on fast exact inference
for discrete probabilistic programs.
For more information on `dice`

, see the about page
or paper.

Below is an online `dice`

code demo. To run the example code, press
the "Run" button. This will print the posterior probability of the
encryption key used by a Caesar cipher given the observed string "CCCC".

Note that `dice`

is still under active
development, so there is always a chance of bugs: please help us by
reporting them on github!

fun sendChar(key: int(2), observation: int(2)) {
let gen = discrete(0.5, 0.25, 0.125, 0.125) in // sample a FooLang character
let enc = key + gen in // encrypt the character
observe observation == enc
}
// sample a uniform random key: A=0, B=1, C=2, D=3
let key = discrete(0.25, 0.25, 0.25, 0.25) in
// observe the ciphertext CCCC
let tmp = sendChar(key, int(2, 2)) in
let tmp = sendChar(key, int(2, 2)) in
let tmp = sendChar(key, int(2, 2)) in
let tmp = sendChar(key, int(2, 2)) in
key