Thèse soutenue

Types ensemblistes polymorphes pour les langages fonctionnels

FR  |  
EN
Auteur / Autrice : Tommaso Petrucciani
Direction : Giuseppe CastagnaElena Zucca
Type : Thèse de doctorat
Discipline(s) : Informatique. Informatique fondamentale
Date : Soutenance le 14/03/2019
Etablissement(s) : Sorbonne Paris Cité en cotutelle avec Università degli studi (Gênes, Italie)
Ecole(s) doctorale(s) : École doctorale Sciences mathématiques de Paris centre (Paris ; 2000-....)
Partenaire(s) de recherche : Equipe de recherche : Institut de recherche en informatique fondamentale (Paris ; 2016-....)
établissement de préparation : Université Paris Diderot - Paris 7 (1970-2019)
Jury : Examinateurs / Examinatrices : Giuseppe Castagna, Elena Zucca, Sam Tobin-Hochstadt, Mariangiola Dezani-Ciancaglini, Alan Mycroft
Rapporteurs / Rapporteuses : Sam Tobin-Hochstadt, Mariangiola Dezani-Ciancaglini
DOI : 10.70675/95be549dz75cdz411cza44dz08753a6dde1c

Résumé

FR  |  
EN

Cette thèse porte sur l'étude des types ensemblistes : des types qui contiennent des connecteurs d'union, d'intersection et de négation. Les types ensemblistes permettent de typer de manière très précise plusieurs constructions des langages de programmation (comme par exemple les branches conditionnelles, le filtrage par motif et la surcharge des fonctions) lorsqu'ils sont utilisés avec une notion appropriée de sous-typage. Pour définir celle-ci, nous utilisons l'approche du sous-typage sémantique, dans laquelle les types sont interprétés comme des ensembles, et où le sous-typage est défini comme l'inclusion ensembliste. Dans la plupart de cette thèse, les types ensemblistes sont polymorphes, dans le sens où ils contiennent des variables de type pour permettre le polymorphisme paramétrique.La thèse étend les travaux précédents sur les types ensemblistes et le sous-typage sémantique en montrant comment les adapter à de nouveaux contextes et comment les utiliser pour typer plusieurs aspects des langages fonctionnels. Elle se compose de trois parties.La première partie porte sur une étude des langages typés de manière implicite avec polymorphisme du ''let'' et inférence de types (contrairement aux travaux précédents sur le sous-typage sémantique qui étudiaient des langages typés explicitement). Nous y décrivons un lambda-calcul typé implicitement avec un système de types dont nous démontrons la correction. De même, nous y étudions l'inférence de types dont nous démontrons la correction et la complétude. Enfin, nous montrons comment rendre l'inférence plus précise quand les programmes sont partiellement annotés avec des types.La deuxième partie décrit une nouvelle approche permettant d'étendre un système de types statique avec du typage graduel; l'originalité venant du fait que nous décrivons le système de types de façon déclarative, lorsque les systèmes existants proposent des descriptions algorithmiques. Nous illustrons cette approche en ajoutant le typage graduel à un système de types à la Hindley-Milner sans sous-typage. Nous décrivons pour cela un système de types déclaratif, un processus de compilation vers un langage avec vérifications de type dynamiques (ou ''casts''), et nous présentons un système d'inférence de types correct et complet. Ensuite, nous y ajoutons les types ensemblistes, en définissant une relation de sous-typage sur les types graduel ensemblistes, puis en présentant un système d'inférence de types correct pour le système étendu.La troisième partie porte sur l'étude des sémantiques non-strictes. Les systèmes existants qui utilisent le sous-typage sémantique ont été développés pour des langages avec appel par valeur et ne sont pas sûrs pour des sémantiques non-strictes. Nous montrons ici comment les adapter pour garantir leur sûreté en appel par nécessité. Pour faire ça, nous introduisons dans les types une représentation explicite de la divergence, afin que le système des types puisse distinguer les expressions qui ne demandent pas d'évaluation de celles qui la demandent et pourraient ainsi diverger.