ImProve is an imperative programming language embedded in Haskell for high assurance applications. ImProve uses infinite state, unbounded model checking to verify programs adhere to specifications. Yices (required) is the backend SMT solver.
- Automatic lemma inclusion. Changed 'theorem' to 'assert'. Removed 'Theorem' type.
- Ada code generation.
- Exported var and zero.
- Modelica model generation.
- 'assume' returns 'Theorem' types to act as lemmas to other theorems. Assumptions are not longer applied program wide.
- Added #ifdef __cplusplus to generated C header.
- Fixed conditionals for assertions in Simulink generation.
- Apply lemmas in all inductive steps except the last (instead of just at the begining).
- Removed hidden step 1.
- Simulink remove null effect optimization.
- Haddock documentation.
- Simulink model generation.
- Removed UV types.
- Fixed haddock documentation.
- Theorem name formatting (removed unique identifer).
- Better trace formatting.
- bugfix: lemmas referenced in induction step.
- Released 'assert' with 'theorem', which provides control of k and the ability to provide lemmas to simplify the proof.
- Verification assumes property is true for inductive steps up to k. Reduces the number of steps to converge on proof for some invariants.
- Made Statement an instance of Show.
- Made V a an instance of Eq and Ord.
- Created untyped variables (UV) and extended varInfo.
- Bugfix: shadow variable in Label collides with structure name.
- Loosened mtl requirements (mtl < 2.1).
- Bugfix: verification programming trimming: expressions in assertions in if statements not captured.
- Better annotation for assertions.
- Started state space narrowing optimizations: simple code analysis that reduce narrow the reachable state, thus reducing the number of inconclusive results.