squiggle/packages/squiggle-lang/__tests__/docs/invariants.md
2022-04-12 18:27:03 -04:00

1.5 KiB

Squiggle invariants

Here are some property tests for squiggle. I am testing mostly for the mean and the standard deviation. I know that squiggle doesn't yet have functions for the standard deviation, but they could be added.

The keywords to search for are "algebra of random variables".

Means and standard deviations

Sums

 mean(f+g) = mean(f) + mean(g) 
 std(f+g) = \sqrt{std(f)^2 + std(g)^2} 

In the case of normal distributions,

 mean(normal(a,b) + normal(c,d)) = mean(normal(a+c, \sqrt{b^2 + d^2})) 

Subtractions

 mean(f-g) = mean(f) - mean(g) 
 std(f-g) = \sqrt{std(f)^2 + std(g)^2} 

Multiplications

 mean(f \cdot g) =  mean(f) \cdot mean(g) 
 std(f \cdot g) = \sqrt{ (std(f)^2 + mean(f)) \cdot (std(g)^2 + mean(g)) - (mean(f) \cdot mean(g))^2} 

Divisions

Divisions are tricky, and in general we don't have good expressions to characterize properties of ratios. In particular, the ratio of two normals is a Cauchy distribution, which doesn't have to have a mean.

To do:

  • Provide sources or derivations, useful as this document becomes more complicated
  • Provide definitions for the probability density function, exponential, inverse, log, etc.
  • Provide at least some tests for division
  • See if playing around with characteristic functions turns out anything useful

Probability density functions

TODO

Cumulative density functions

TODO

Inverse cumulative density functions

TODO