The course is split into two parts: in the first part, some methods for defining the operational and denotational semantics of sequential programming languages are studied; in second part, some formalisms for specifying, designing, implementing, analyzing, and proving properties of concurrent and distributed systems are studied.
Notes, handouts and articles electronically provided by the teacher through the course website.
Learning Objectives
The student will learn to understand and define the semantics of programming languages and to design and implement simple concurrent systems.
The student will acquire the skills necessary to verify correctness of such systems, also by means of software supporting tools, and will acquire the basis for further study and research on theory of distributed systems, real-time systems and fault-tolerant systems.
Teaching Methods
Lectures and practical exercises.
Further information
Office hours: by appointment (contact the teacher by phone or e-mail)
Type of Assessment
The examination consists of an oral interview and of a project/relation on one of the topics covered in class.
Course program
Basic concepts of sequential and concurrent programming, of discrete mathematics and proof techniques. Finite state automata and labeled transition systems. Operational and denotational semantics of programming languages. Process algebras and calculi and their models as transition systems. Behavioral equivalences as systems‘
abstraction and minimization techniques and as a basis for correctness proofs. Temporal and modal logics, and model checking-based verification techniques of systems’ properties.