This is the first version. It can compose functions using arithmetic operators and the Exp, Log, and Power functions. It can calculate a gradient at specified points. It can evaluate a function at specified points. It uses code-contracts for specifying valid parameters and return values.