Cette page est la page officielle du cours du 1er semestre 2019/2020 intitulé 
« Typage et Analyse Statique » 
qui s'adresse aux étudiants de master de l'UPMC.
La description de la brochure du module se trouve 
ici.
 Nouvelles fraîches 
 
-  planning des soutenances cliquer ici
-  soutenances le 14/11/19 (voir planning à la rubrique  Examens)
-  consignes dans la rubrique  Examens pour le choix et la remise du devoir sur le typage (article ou réalisation) 
-  MOOC OCAML : début des courts le 22/09/2019 : suivre le  lien
Notes de cours, TD et TME
-  6ème cours
-   polymorphisme parametrique et lambda-expressions en Java (PDF)
-   présentation de Scala (Page Martin Odersky), dont une présentation popl06, tutoriel et présentation par l'exemple
-  présentation du typage graduel, tutorial Jeremy Siek à POPL 2017 (lien)
-  exercices generics
-  faire tourner le programme suivant en java 1.8 TestLambda.java
-  traduire les fonctions fold_left, fold_right, map2, ..., du module List d'OCaml en java 1.8
-  passage du modèle Visiteur en generics (partiel nov2012 (LI314))
-  utilisation de l'API stream (exemples des transparents)
 
-   exercices Scala
-  faire passer le typeur de lambda-termes et le typeur du mini-caml sous  Scala
 
-   fin du choix des projets
 
 
-  5ème cours : surcharge en Java et Haskell (PDF1 et PDF2)
-  comparaison  algorithmes de résolution de la surcharge en  Java 1.5 et en java 1.2
-  simulation d'algorithme de surcharge en Java 1.5 avec production de code ZAM (projet Potdevin-Vaugon)
(rapport et javaz.tgz)
-  simulation d'algorithme de surcharge de Dul et Maslia (rapport et jar)
 
-  surcharge en Haskell, testez les exemples du cours en ghc  (ghc) : compilation en ligne, ou try Haskell
-     travail sur l'article ou rélisation de chaque groupe (voir rubrique   Examens)
 
 
 
-  4eme cours : polymorphisme par sous-typage structurel (OCaml) et nominal (Java) : 
 (PDF)  - cours 7 et 8 de mpil 2017/2018  et chapitre 15 de DA-OC).
Exercices :
 
-  Lire, tester et ajouter des traits impératifs à un typeur (cf lien), avec détection des expressions expansives.
-  Adapter le texte du partiel de novembre 2012 de LI314 (cf lien)  sur un visiteur paramétré en OCaml
 (questions 1 à 4).
-  Comment ecrire en Java le code suivant : 
let f x = x#toStr() ^"\n";;
 
-  Adapter en Java l'exemple des points (en OCaml)  avec méthodes binaires du cours.
-  voir la répartition du devoir (article/réalisation).
 
 
-  3eme cours : typage d'un mini-ML PDF)
 
- 
test d'un typeur  (cf lien) d'un mini-ML 
-  version sans analyse syntaxique en OCaml (lien) ou Fsharp (lien).
-  suivre le fichier d'exemples (cf lien).
-  ajout des traits impératifs à un typeur (cf lien).
-  ajout d'une coercition de type : (e : type)
 
-  si vous ne connaissez pas OCAML, 
- 
-  suivez le cours OUV (ouverture) des M1 STL
-  et/ou suivez la 4eme session du MOOC OCAML en cliquant sur le lien suivant :
Inscription 
 Ce MOOC  vient de commencer.
-  et/ou lisez les 4 premiers cours de L3 suivant : MPIL
 
 
-  regarder la liste des articles et des riéalisations dans la rubrique Examen
 
 
 
- 2ème cours : lambda-calcul simplement typé
  (PDF)
-  construire les arbres de typage des termes suivants : 
-  K I I 
-  idendité : I I = (\x.x)(\x.x)
-  S K K  (correction)
-  add 2 2 = (\mn. m n) (\fx. f ( f x)) (\fx. f ( f x))
-  que déduire des types de I et 2 ?
 
-  lire et tester un  typeur en OCAML ou un typeur typeur en F#.
-  si besoin de mise à niveau en ocaml : 
 
-  comment étendre ce typeur pour introduire le polymorphisme du Let ? 
Implanter votre proposition. 
 
 
-  1er cours : présentation du semestre (PDF) et lambda-calcul pur (transparents :  PDF)
 
-  Exercices
-  effectuer à la main (ou avec un logiciel en ligne) les réductions suivantes : 
- Forme normale
Soient les termes suivants :
A =\xy.xy
DELTA = (\x.xx)
K = \xy.x
S = \xyz.xz(yz)
B = \xyz.(x(yz))
C = \xyz.(xzy) 
 
 
Donner si elle existe la forme normale des termes suivants :
 I = SKK,
 B = S(KS)K,
 OMEGA = DELTA DELTA,
 C = S (BBS)(KK),
 
 
- Trouver les lambda-termes qui calculent la multiplication et la puissance pour les entiers de Church.
 
-  implanter un évaluateur de lambda-calcul et le tester
-  tester la représentation des listes (comme données sur le lien lien wikipedia)
-  divertissement : lire la page sur "Alligator Eggs", voir le lien avec le lambda-calcul
 
- 
Programmes et document :
 
 
 Équipe pédagogique 
 L'équipe pédagogique est ainsi constituée:
Emmanuel Chailloux (LIP6), Romain Demangeon (LIP6), Antoine Miné (LIP6),  Matthieu Journault (LIP6). 
Pour envoyer un courrier à l'équipe pédagogique, cliquez ici.
 Examens et notation 
L'évaluation de ce module comprend : 
 sur la partie analyse statique
-  interrogation(s) (10% de la note)
-   présentation d'article  (20% de la note) 
-   projet initié en TME  (20% de la note)
Langages et environnements de travail
Bibliographie
Quelques lectures autour de la fiabilité logicielle et des langages :
Ouvrages de référence :
-  sur le typage
-  Types and Programming Languages - B. Pierce - The MIT Press
 
-  sur l'analyse statique 
-  Principles of Program Analysis - F. Nielson, H. Nielson et C. Hankin - Springer
 
 Autres liens 
Remarques?   
dernière modification :  13/11/2019