Principles of abstract interpretation An introduction to the theory and practice of abstract interpretation with applications to the semantics specification verification and static analysis of computer programs