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