Distribution Expressions
Caesar supports a limited number of probability distributions as built-ins.
They are allowed as the right-hand side of an assignment, e.g. x = ber(1, 1);
.
Distribution expressions are not allowed to occur nested inside expressions.
All distribution expressions except for flip
take literal arguments, i.e. numbers.
Expressions such as 1+x
or even 1+1
are not supported as arguments.
Bernoulli
Constant-only with Odds
proc ber(pa: UInt, pb: UInt) -> (r: Bool)
This version takes two odds: ber(pa, pb)
returns true
with probability pa/(pa+pb)
and false
with probability pb/(pa+pb)
.
Formally: vc[x = ber(pa, pb)](φ) = (pa/(pa+pb)) * φ[x/true] + (pb/(pa+pb)) * φ[x/false]
.
pa+pb = 0
will result in a constant zero expectation.Symbolic with Probabilities
proc flip(p: UReal) -> (r: Bool)
Returns true
with probability p
and false
with probability 1-p
.
Note: if p
is not a valid probability (not in the range [0,1]
), then the result of this distribution is undefined!
This distribution accepts symbolic parameters (not just constants).
Uniform
proc unif(a: UInt, b: UInt) -> (r: UInt)
The uniform distribution returns the values in the closed interval [a,b]
with uniform probability.
Note that calls with a <= b
will result in a constant zero expectation.
Binomial
proc binom(n: UInt, pa: UInt, pb: UInt) -> (r: UInt)
Returns values r
according to the binomial distribution where n
is the number of trials, pa
are the odds of success and pb
are the odds of failure.
Hypergeometric
proc hyper(pN: UInt, k: UInt, pn: UInt) -> (r: UInt)
Return values according to the hypergeometric distribution where pN
is the population size, k
is the number of success states in the population and pn
is the number of draws.
The result r
is the number of observed successes, weighted by its probability.