package prbnmcn-dagger

  1. Overview
  2. Docs

Distributions

A distribution must be sampleable and must be associated to a density w.r.t. some base measure (which is kept implicit).

type 'a dist = private {
  1. sample : RNG.t -> 'a;
  2. ll : 'a -> Log_space.t;
}

'a dist is the type of distributions on the type 'a.

type 'a kernel = private {
  1. start : 'a;
  2. sample : 'a -> RNG.t -> 'a;
  3. ll : 'a -> 'a -> Log_space.t;
}

'a kernel is the type of kernels (ie random walks) on the type 'a.

type 'a t = private
  1. | Stateless of 'a dist
  2. | Kernel of 'a kernel

A "distribution" as understood by this library is either a kernel or a plain distribution.

val stateless : (RNG.t -> 'a) -> ('a -> Log_space.t) -> 'a t

Create a distribution from a sampler and a log-density.

val kernel : 'a -> ('a -> RNG.t -> 'a) -> ('a -> 'a -> Log_space.t) -> 'a t

Create a kernel from an initial point, a kernel and its associated log-density.

Helpers for parameterized distributions and kernels.

val dist0 : (RNG.t -> 'a) -> ('a -> Log_space.t) -> 'a t
val dist1 : ('a -> RNG.t -> 'b) -> ('a -> 'b -> Log_space.t) -> 'a -> 'b t
val dist2 : ('a -> 'b -> RNG.t -> 'c) -> ('a -> 'b -> 'c -> Log_space.t) -> 'a -> 'b -> 'c t
val kernel1 : ('a -> 'b -> RNG.t -> 'b) -> ('a -> 'b -> 'b -> Log_space.t) -> 'b -> 'a -> 'b t

Combinators on distributions and kernels.

val iid : int -> 'a t -> 'a array t

iid n dist constructs the n-fold iid distribution where each component is distributed according to dist.

val conv : ('a -> 'b) -> ('b -> 'a) -> 'a t -> 'b t

conv f g dist transports a distribution along a pair of maps f,g. f,g must both be total. They need not be bijections, though not respecting this additional constraint might cause unspecified behaviours for some inference algorithms..

OCaml

Innovation. Community. Security.