This course aims to build a greater knowledge in several aspects of rewriting by practicing the theoretical content of the main lecture in many exercises.

This course deals with the formal modeling of concurrent systems such as parallel or multi-threaded programs, distributed hardware and software systems, mobile systems, etc.

This course presents the major methods for defining the meaning of languages and programs (operational semantics, denotational semantics, axiomatic semantics) and discusses their relationship.

This course explores advanced object oriented techniques using the Java language. The accent is on encapsulation, exemplified with algorithms and data structures, and on a frame of software tools used in real-world applications.

In this course we discuss (as a continuation of the course "Programming 1") object-oriented programming in C++.

This seminar discusses techniques and tools for formal methods and/or automated reasoning such as formal specification languages, program verification systems, model checkers, interactive proof assistants, automated theorem provers, satisfiability solvers, decision procedures, etc.