tinypp

Package Version Hex Docs

tinypp is a tiny Gleam package to do probabilistic programming (hence the name). It is inspired by the probabilistic programming language Church after reading this fun paper.

It allows you to program probability distributions with discrete support, making heavy use of Gleam’s use-syntax. The main functions are sample, condition and query:

See the example below on how put these together.

gleam add tinypp
import gleam/float
import gleam/int
import gleam/io
import tinypp.{pmf, normalize, sample, condition, query}
import tinypp/distribution.{uniform}

pub fn main() -> Nil {
  // What is the probability that a die shows a value greater than three if we
  // know that the value is even?
  let distribution_greater_three = {
    let die = uniform([1, 2, 3, 4, 5, 6])
    use value <- sample(die)
    use <- condition(int.is_even(value))
    query(value > 3)
  }
  let p_greater_three = pmf(normalize(distribution_greater_three), True)
  io.println("P(value > 3 | value is even) = " <> float.to_string(p_greater_three))
}

In the examples folder, you can find more elaborate examples, including Bayesian linear regression.

Development

gleam test  # Run the tests
Search Document