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.
Updated .gitignore file.
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.
Renamed local_env to var_env, and call_local_env to closure_var_env.
Added simple function subtyping algorithm.
More tests for first-class functions.
Distinguish test cases that Z3 proves wrong from those it cannot prove.
Renamed var_env back into local_env.
Added modulo operation (%).
Added checking of contracts for function casts.