Université Paris 7 École Normale Supérieure de Cachan École Normale Supérieure École Polytechnique
Université Paris 6 Université Paris 11 École Nationale Supérieure des Télécommunications
Centre National de la Recherche Scientifique Commissariat à l'Energie Atomique Institut National de Recherche en Informatique et en Automatique

Parisian Master of Research in Computer Science

Master Parisien de Recherche en Informatique (MPRI)

[Home page] [The MPRI course] [Practical information]


Functional programming and type systems (48h, 6 ECTS)

Persons in charge: Giuseppe Castagna and Xavier Leroy

Teachers in 2010-2011

Aims

This course presents the principles and formalisms that underlie many of today's typed functional programming languages.

The first part of the course presents the basis of type systems. We study various type systems, all of which aim to guarantee, before a program is executed, that it is safe (i.e., it runs without crashing). Besides the definition of these type systems, we study how this guarantee is obtained (type soundness proof); how one can verify programs with type decorations (type checking) or automatically determine whether a program without any type annotations is well-typed (type inference).

In the second part, we study more advanced type-related techniques that enable to express finer invariants of data structures and programs.

In the third part, we study subtyping, following a syntactic approach, in the setting of elementary type systems (simply-typed lambda-calculus, System F) and in the presence of recursive types. Then, we present semantic subtyping and its application to typing semi-structured data (XML) and its transformations.

In the fourth part, we present some transformations of functional programs that are used in programming or in the compilation of functional programs, in particular into abstract machine code; we show that the operational semantics of programs is preserved by these transformations; in some cases, well-typedness is also preserved.

Evaluation

Two written exams (a partial and a final exam) and a programming project are used to evaluate the students.

Approximate syllabus

Programming project

As part of this course, the students will be given an individual programming task that will be used to illustrate, put into practice, or explore in details one particular topic of the course. The task will be announced after the first part of the course and will have to be submitted by the end of the course; it will count for the evaluation of the students.

Pre-requisites

Elementary notions of operational semantics and lambda-calculus (rewriting rules, inference rules), and a taste for programming, particularly in ocaml.

Languages and lecture notes

The course notes are in English. The lectures are by default in French, but English could be used if French were a real problem for some students.

Bibliography

Types and Programming Languages, Benjamin C. Pierce, MIT Press, 2002.

François Pottier also maintains a reading list.

Pedagogic team

Previous years

This course is based on the shorter course that was taught in previous years: