The course covers basic concepts and principles underlying modern programming languages. We focus on understanding from the point of view of a programmer, although due attention is paid also to the theoretical principles that enable design of programming languages.

  1. Introduction and arithmetical expressions
  2. A commmand-based programming language
  3. Proving correctness of programs
  4. Lambda calculus
  5. Declarative programming and algebraic datatypes
  6. Recursive types and recursion
  7. Polymorphism and type inference
  8. Abstraction: signatures, modules, and functors
  9. Logic programming & logic constraint programming
  10. Records and objects