Computing devices are pervading our everyday life and imposing challenges for designersthat have the responsibility of producing reliable hardware and software systems. As systemsgrow in size and complexity, it becomes increasingly difficult to verify whether a design works asintended. Conventional verification methods, such as simulation and testing, exercise only partsof the system and from these parts, draw conclusions about the correctness of the total design.For complex designs, the parts of the system that can be verified are relatively small. Formalverification aims to overcome this problem. Instead of exercising the system, formal verificationbuilds mathematical models of designs and proves whether properties hold in these models. I...