Invariants
Invariants play a central role in program development
- Refining a specification into a correct program
- Static verification of limited (but important) invariants such as type declarations
- Run-time checking of invariants represented as assert statements
A number of researchers firmly believe that the lack of stated invariants in programs is the root of almost all evil