One attempt at AST and Typed Expression trees.
Changed syntax and typed expression trees, added type inference.
Added basic refined type checking.
Finally: 1 / 0 fails!

I'm going to cry.
Added handling of if expressions and functions.
Added uninterpreted functions.

Can detect Heartbleed. No more crying.
Additional test cases.
Refactored code.
Refactored refined type checking.
Added refined type checking of local function definitions.
Bugfix for functions with polymorphic return types.
Use NLSat solver for non-linear integer arithmetics.