Credits: 3-0-0-0 (9)
The course will expect the students to have a good understanding of the theory of computations (especially computation models, languages, decidability etc.), algorithms (especially complexity analysis, correctness proofs), Discrete Mathematics (especially proof techniques, linear algebra, lattice theory, fixpoint theory), Probability and Statistics. The course will include challenging programming assignments and projects, so the students will be expected to be good programmers.
Over the last few years, program analysis techniques have been applied to a variety of systems. Many of these cannot be perceived as “conventional” sequential programs written in languages like C, Python or Java. For example, there have been attempts at testing and verifying network routing policies, machine language models, database schemas, concurrent systems, probabilistic/randomized systems and hardware/software co-designs. This course will explore how program analysis techniques have been adapted for such “unconventional” programs.
There is no textbook for the course. The course will be based on relevant research papers.