#[prob]
fn coin(observations: Vec<bool>) -> f64 {
let weight = sample!(uniform(0., 1.));
for o in &observations {
observe!(bernoulli(weight), o);
}
weight
}
#[prob]
fn flip() -> bool {
sample!(bernoulli(0.5))
}
#[prob]
fn example10() -> f64 {
let x = sample!(uniform(0., 10.));
let y = if sample!(flip()) {
sample!(normal(0., 1.))
} else {
sample!(uniform(-1., 1.))
};
x + y
}
#[prob]
translates ordinary function into probabilistic program
Fn(Trace) → (Trace, f64, T)
for type T
of samplessample!
& observe!
read and modify trace