Graduate standing or permission of instructor. Experience with model-checking and other formal methods, although helpful, is not necessary. However, the course assumes familiarity with basic computer science concepts: relations and functions; boolean and first-order logic (from undergrad discrete-math course), and finite-state machines. You are also expected to have basic knowledge of concurrency. The course includes a number of theoretical and engineering aspects.