## glppl

`glppl`

Translation of `lppl`

probabilistic programs into directed graphical models.
Optionally, transiation of graphical models into portable, memory-safe C99 code.

An `lppl`

program to infer the posterior location and scale parameter of a normal distribution could look like this:

```
double normal_model(record_t<Normal, Gamma>& r, double obs) {
auto loc = sample(r, "loc", Normal(0.0, 1.0), rng);
auto scale = sample(r, "scale", Gamma(1.0, 0.5), rng);
return observe(r, "data", Normal(loc, scale), obs);
}
```

The `glppl`

version of it looks like this:

```
graph_node<Normal> normal_model(gr_pair<Normal, Gamma>& gr, double obs) {
auto loc = sample_g<Normal>(gr, "loc", rng)(0.0, 1.0);
auto scale = sample_g<Gamma>(gr, "scale", rng)(1.0, 0.5);
return observe_g<Normal>(gr, "data", obs)(loc, scale);
}
```

In return for the miniscule amount of extra complexity, you get a graph data structure
suitable for static analysis, more specialized inference algorithms, and/or code generation.
You can still use any `glppl`

program with `lppl`

inference algorithms and queryers
by converting it to a pure sample-based program, e.g. `auto f = to_pp(g);`

, where
`g`

is a `glppl`

program and `f`

is an `lppl`

program.

`glppl`

is also useful for doing inference over open-universe probabilistic programs when you intend to deploy inferred models
for prediction or forecasting. Using `glppl`

, you can infer the MLE, MAP, or full posterior over graph structures and choose one or
more of these structures to deploy. `glppl`

contains *alpha* functionality to automatically translate your graph probabilistic program into
a bespoke memory-safe (zero dynamic allocation) C99 probabilistic graphical model library constructed from `ccyan`

primitives.

As always, read the documentation, get the source, download tagged versions.

⚠️ Versions of

`glppl`

greater than v0.1.0 have changed licenses from GPL3 to AGPL3. Please contact us if you are interested in a license exception.

## Install

You need to have a recent version of `lppl`

. Running `setup.sh`

from the directory into which you cloned
`glppl`

will do the trick.

## License etc.

`glppl`

is licensed under the AGPL v3.
If you would like a license exception, please contact lppl@davidrushingdewhurst.com.

Copyright David Rushing Dewhurst, 2022 - present.