Distributions
Imports
open Array;
open Math;
open Statistics;
Functions
def normalSample (mu: Float) (sigma: {s : Float | s > 0.0}) (n: {m : Int | m > 0}) : {xs : Array Float | Array.size xs > 0 && (fracBelow xs (mu + 2.33 * sigma) >= 0.99 && (fracBelow xs (mu + 1.645 * sigma) >= 0.95 && (fracBelow xs (mu + 1.282 * sigma) >= 0.9 && (fracBelow xs mu >= 0.5 && (fracAbove xs (mu - 1.282 * sigma) >= 0.9 && (fracAbove xs (mu - 1.645 * sigma) >= 0.95 && fracAbove xs (mu - 2.33 * sigma) >= 0.99))))))}
def standardNormalSample (n: {m : Int | m > 0}) : {xs : Array Float | Array.size xs > 0 && (fracBelow xs 2.33 >= 0.99 && (fracBelow xs 1.645 >= 0.95 && (fracBelow xs 1.282 >= 0.9 && (fracBelow xs 0.0 >= 0.5 && (fracAbove xs 0.0 >= 0.5 && (fracAbove xs (0.0 - 1.282) >= 0.9 && fracAbove xs (0.0 - 2.33) >= 0.99))))))}
def exponentialSample (lam: {l : Float | l > 0.0}) (n: {m : Int | m > 0}) : {xs : Array Float | Array.size xs > 0 && (fracAbove xs 0.0 >= 1.0 && (fracBelow xs (4.6052 / lam) >= 0.99 && (fracBelow xs (2.9957 / lam) >= 0.95 && (fracBelow xs (2.3026 / lam) >= 0.9 && fracBelow xs (0.6931 / lam) >= 0.5))))}
def betaSample (alpha: {a : Float | a > 0.0}) (beta: {b : Float | b > 0.0}) (n: {m : Int | m > 0}) : {xs : Array Float | Array.size xs > 0 && (fracAbove xs 0.0 >= 1.0 && (fracBelow xs 1.0 >= 1.0 && sampleMean xs == alpha / (alpha + beta)))}
def gammaSample (k: {kk : Float | kk > 0.0}) (theta: {th : Float | th > 0.0}) (n: {m : Int | m > 0}) : {xs : Array Float | Array.size xs > 0 && (fracAbove xs 0.0 >= 1.0 && (sampleMean xs == k * theta && sampleVar xs == k * (theta * theta)))}
def chiSquaredSample (k: {kk : Int | kk > 0}) (n: {m : Int | m > 0}) : {xs : Array Float | Array.size xs > 0 && fracAbove xs 0.0 >= 1.0}
def bernoulliSample (p: {pp : Float | pp >= 0.0 && pp <= 1.0}) (n: {m : Int | m > 0}) : {xs : Array Float | Array.size xs > 0 && (fracBelow xs 0.5 >= 1.0 - p && (fracAbove xs 0.5 >= p && (fracBelow xs 1.5 >= 1.0 && fracAbove xs (0.0 - 0.5) >= 1.0)))}
def binomialSample (trials: {t : Int | t > 0}) (p: {pp : Float | pp >= 0.0 && pp <= 1.0}) (n: {m : Int | m > 0}) : {xs : Array Float | Array.size xs > 0 && fracAbove xs (0.0 - 0.5) >= 1.0}
def poissonSample (lam: {l : Float | l > 0.0}) (n: {m : Int | m > 0}) : {xs : Array Float | Array.size xs > 0 && (fracAbove xs (0.0 - 0.5) >= 1.0 && sampleMean xs == lam)}