Le plan du cours change d'année en année. Vous pouvez accéder au cours tel que je l'avais fait (ou avais prévu de le faire) en 2000-2001, 2001-2002, 2002-2003,et en 2003-2004.

Cours de sémantique

L'objectif de ce cours est d'introduire les étudiants aux différentes techniques utilisées pour décrire exactement le comportement des programmes. Ce cours est organisé en 8 séances de 2 heures, accompagnées de 8 séances de Travaux dirigés sur machine.

Première séance: le lambda-calcul pur

Dans ce cours nous présentons le lambda-calcul pur, en le voyant comme un langage de programmation minimal. Nous montrons les difficultés de l'alpha-conversion, le pouvoir expressif du langage, et les propriétés de confluence. Ceci permet en particulier de distinguer les langages paresseux. Les notes de ce cours sont disponibles ici (en postscript compressé).

TD de la première séance

Dans ces travaux dirigés, nous étudierons les exercices donnés dans les notes de cours

Devoir à la maison pour la première séance

Voici l'exercice concernant le lambda-calcul pur du dernier examen.

  1. Un chercheur lunatique et obstiné décide de représenter les valeurs booléennes de la fa\c{c}on suivante:

    F = lambda x y. x

    T = lambda x y. y

    Comment doit-il alors choisir la valeur de IF pour qu'elle ait le comportement usuel d'une expression conditionnelle?

  2. Notre chercheur veut maintenant représenter les listes, il se donne la représentation suivante:

    Cons = lambda x y z. z x y

    Nil = lambda x. x

    Quelle sont les formes normales des deux listes contenant un seul élément qui est respectivement F et T?

    Il propose ensuite les valeurs suivantes pour la fonction VIDE qui permet de distinguer une liste vide d'une liste non vide. Lesquelles de ces valeurs sont-elles adaptées?

    1. lambda z. z T F
    2. lambda l. l (lambda x y z. z)(lambda x. x)(lambda x. F) T
    3. lambda l. l (lambda x y z. z)(lambda x y. T) F F
    4. lambda l. l (lambda x y. F)
  3. Deuxième séance: le lambda-calcul pur

    Dans ce cours nous continuons la présentation du lambda-calcul pur, en particulier en étudiant les propriétés de terminaison et de stratégie d'évaluation.

    TD de la deuxième séance

    Dans ces travaux dirigés, nous continuons avec les exercices des notes de cours de la première séance.

    Troisième séance: le lambda-calcul typé

    Dans ce cours nous présentons le typage simple du lambda-calcul. Nous voyons sans les démontrer certaines des propriétés des types: conservation des types à l'exécution, terminaison forte. Nous abordons ensuite l'inférence de type et le typage polymorphe. Ce cours est aussi une occasion pour ré-introduire l'utilisation de règles d'inférence (comme en logique). Les notes de cours sont disponibles ici (en postscript compressé).

    TD de la troisième séance

    On fera les exercices donnés en suivant ce lien.

    Devoir à la maison pour la troisième séance

    On considère que les types t1, t2, t3 et t4 sont des types de base. Fournir des termes ayant les types suivants:

    1. (t1->t2->t3->t4)->(t1->t2)->(t2->t3->t4)->(t2->t3)->t1->t4
    2. (t2->t1)->(t1->t0)->(t2->t1->t0)
    3. (t1->t3)->(t2->t1)->(t3->t1->t4)->t1->t4

    Quatrième séance: la sémantique naturelle

    Dans ce cours on présente la description d'un petit langage impératif dans le style de la sémantique naturelle. Les notes de ce cours sont disponibles en suivant ce lien

    TD de la quatrième séance

    Les TD de la quatrième séance continuent sur le thème du lambda-calcul, pur ou typé, en utilisant caml (langage fonctionnel typé) pour décrire un réducteur de termes du lambda-calcul pur.

    Ce TD repose sur deux fichiers ML, dont l'un est à compléter dans

    Il s'agit d'effectuer les travaux suivant:

    1. Compléter l'évaluateur
    2. Vérifier les solutions des exercices du polycopié des deux premières séances
    3. À la maison: étendre l'évaluateur pour le lambda-calcul typé et écrire une fonction qui vérifie si un terme est bien typé.

    Devoirs à la maison pour la quatrième séance

    Construire une dérivation de sémantique naturelle pour l'exécution des programmes suivants dans l'environnement initial (x,1).(y,2).[]

    Cinquième séance: la sémantique dénotationnelle

    Dans ce cours nous présentons encore la description du petit langage impératif utilisé comme exemple pour la sémantique naturelle. Les notes de cours sont disponibles en suivant ce lien.

    TD de la cinquième séance

    Dans cette séance, on fera les exercices proposés dans le cours de sémantique naturelle (en particulier les exercices 1, 2, 4, 5, 6, 7, 8, 9).

    Devoirs à la maison pour la cinquième séance

    1. soit f la fonction sémantique correspondant au programme x:=x+1;y:=2. Quel est le résultat de cette fonction sur l'état décrit par la fonction qui associe 1 à x, 3 à y, et 4 à z et qui n'est définie pour aucune autre variable?
    2. (attention, cette question a été corrigée le 21 mars 2005) Pouvez-vous écrire un programme qui envoie tout état s vers l'état s' tel que s'(x)=s(y) et s'(y)=s(x) pour deux variables x et y fixée, et laisse inchangées toutes les autres variables, sauf peut-être une variable z dont la valeur dans s' peut-être choisie arbitrairement.

    Sixième séance: Les ordres partiels complets

    Dans ce cours nous apportons des précisions sur les structures mathématiques utilisées en sémantique dénotationnelle. Les notes de cours sont disponibles en suivant ce lien.

    TD de la sixième séance

    Dans cette séance, on fera les exercices proposés dans le cours de sémantique dénotationnelle (en particulier les exercices 1, 2, 3, 7, 9, 10).

    Septième séance: Sémantique axiomatique

    Dans ce cours nous étudions un jeu de règles de raisonnement qui permettent de raisonner sur les programmes. Les notes de ce cours sont disponibles en suivant ce lien ce lien.

    TD de la septième séance

    Dans cette séance on fera les exercices proposés dans les notes de cours

    Devoirs à la maison pour la septième séance

    {n >= 0}
    k = 0;
    a = 0;
    b = 1;
    while (k <> n) {
    {invariant: 2 * a = k^3 + k & 2 * b = 3 * k^2 - 3 * k + 2}
      b = b + 3 * k;
      a = a + b;
      k = k + 1;
    }
    {2 * a == n^3 + n}
    
    1. Montrez en utilisant la logique de Hoare que l'invariant est un invariant correct pour la boucle (construire la dérivation).
    2. Construire les conditions de vérifications produites par le générateur de condition de vérification.

    Huitième séance: Calcul de préconditions

    Dans ce cours nous étudions le prolongement de la sémantique axiomatique qui permet de calculer les formules logiques qui doivent être satisfaites pour qu'un programme soit cohérent avec les annotations logiques qu'il comporte. Les notes de cours sont les mêmes que pour le cours précédent.

    TD de la huitième séance

    Dans cette séance, on fera les exercices proposés en suivant ce lien (merci à Marieke Huisman).

    Examens des années précédentes

    Janvier 2002, correction, Janvier 2001, correction


    Yves Bertot
    Last modified: Mon Sep 5 08:32:37 MEST 2005