Abstract interpreter from http://hal.inria.fr/docs/00/33/23/39/PDF/absint.pdf