Des types aux assertions logiques : preuve automatique ou assistée de propriétés sur les programmes fonctionnels
Institution:
Paris 7Disciplines:
Directors:
Abstract EN:
This work studies two approaches to improve the safety of computer programs using static analysis. The first one is typing which guarantees that the evaluation of program cannot fail. The functional language ML has a very rich type system and also an algorithm that infers automatically the types. We focus on its adaptation to generalized algebraic datatypes (GADTs). In this setting, efficient computation of a most general type is impossible. We propose a stratification of the language that retains the usual caracteristics of the ML fragment and make explicit the use of GADTs. The resulting language, MLGX, entails a burden on the programmer who must annotate its programs too much. A second stratum, MLGI, offers a mecanism to infer locally, in a predictable and efficient but incomplete way most of the type annotations. The first part ends up on an illustration of thé expressiveness of GADTs to encode the invariants of pushdown automata used In LR parsing. The second approach augments the language with logic assertions that enable arbitrarily compiex specifications to be expressed. We check the compliance of the program semantics with respect to these specifications thanks to a method called Hoare logic and thanks to semi-automatic computer-based proofs. The design choices permit to handle first-class functions. They are directed by an implementation which is illustrated by the certifiction of a module of trees that denote finite sets.
Abstract FR:
Cette thèse étudie deux approches pour augmenter la sûreté de fonctionnement des programmes informatiques par analyse statique. La première approche est l'utilisation du typage qui permet de prouver automatiquement qu'un programme s'évalue sans échouer. Le langage fonctionnel ML possède un système de type très riche et un algorithme effectuant une synthèse automatique des types. On s'intéresse à son adaptation aux types algébriques généralisés (GADT). Dans ce cadre, le calcul efficace d'un type plus général est impossible. On propose une stratification du langage qui maintient les caractéristiques habituelles sur le fragment ML et qui isole le traitement des GADT en explicitant leur utilisation. Le langage obtenu, MLGX, nécessite des annotations de type qui alourdissent les programmes. Une seconde strate, MLGI, offre au programmeur un mécanisme de synthèse locale, prédictible et efficace bien qu'incomplet, de la plupart de ces annotations. La première partie s'achève avec une démonstration de l'expressivité des GADT pour coder les invariants des automates à pile utilisés par l'analyse syntaxique LR. La seconde approche augmente le langage par des assertions logiques permettant d'exprimer des spécifications de complexité arbitraire. On vérifie la conformité de la sémantique du programme vis-à-vis de ces spécifications à l'aide d'une technique appelée logique de Hoare et d'outils semi-automatique de preuves mathématiques sur ordinateur. Les choix de conception du système permettent de traiter les fonctions de première classe. Ils sont dirigés par une implantation qui trouve une illustration dans la certification d'un module d'arbres dénotant des ensembles finis.