Inductive Representation, Proofs and Refinement of Pointer Structures
Total Page:16
File Type:pdf, Size:1020Kb
THÈSETHÈSE En vue de l’obtention du DOCTORAT DE L’UNIVERSITÉ DE TOULOUSE Délivré par : l’Université Toulouse 3 Paul Sabatier (UT3 Paul Sabatier) Présentée et soutenue le 20 juin 2013 par : Mathieu Giorgino Inductive Representation, Proofs and Refinement of Pointer Structures (Représentation Inductive, Preuves et Raffinement de Structures de Pointeurs) JURY Rachid Echahed Chargé de Recherche CNRS LIG, Grenoble Louis Féraud Professeur des Universités IRIT, Toulouse Ralph Matthes Chargé de Recherche CNRS IRIT, Toulouse Pierre-Etienne Moreau Professeur des Universités INRIA, Nancy Marc Pantel Maître de Conférence IRIT-ENSEEIHT, Toulouse Martin Strecker Maître de Conférence IRIT, Toulouse Arnaud J. Venet Chargé de Recherche NASA Ames, Mountain View École doctorale et spécialité : MITT : Domaine STIC : Sureté de logiciel et calcul de haute performance Unité de Recherche : IRIT Directeurs de Thèse : Ralph Matthes et Martin Strecker Rapporteurs : Pierre-Etienne Moreau et Rachid Echahed Remerciements Je tiens tout d’abord à remercier tous les membres de mon jury au sens large (invités ou non), à commencer par mes rapporteurs Rachid Echahed et Pierre-Etienne Moreau qui ont accepté de prendre le temps de lire et évaluer ce que j’avais pu écrire. Je remercie aussi Marc Pantel pour les cours qu’il a pu me donner et sans qui cette thèse n’aurait pas pu commencer. Merci également à Louis Féraud d’avoir accepté de faire partie de ce jury et à Arnaud Venet pour sa cordialité et son humanité. Évidement cette thèse n’aurait jamais pu être accomplie sans mes deux directeurs Ralph Matthes et Martin Strecker. Je remercie Ralph pour tous les bons conseils qu’il m’a donné, tirés de son expérience raisonnée et de sa rigueur. J’ai beaucoup apprécié son impartialité teinté d’humanité appliquée aussi bien dans ses travaux scientifiques que dans ses tâches administratives. Un très grand merci à Martin qui m’a suivi tout au long de ses dernières années – en stage puis en thèse – et qui m’a même pratiquement pris par la main pour me montrer ce fabuleux métier qu’est la recherche (et cela même malgré les contraintes qu’il comporte). Merci à lui pour son grand coeur, son enclin à partager ses connaissances scientifiques et sa tendance naturelle à vouloir aider. Je m’excuse auprès d’eux d’avoir été si long à finir. Je tiens aussi à remercier l’équipe Isabelle de l’université technique de Munich, et en particulier Tobias Nipkow pour m’avoir accueilli pendant 2 mois. Ce fut une expérience réellement enrichissante aussi bien culturellement que scientifiquement. Merci plus par- ticulièrement à Florian Haftman qui a pris de son temps pour me guider dans la TUM, m’installer dans son bureau, s’intéresser à mon travail et me montrer les coulisses d’Isabelle. Merci aussi à Lukas Bulwahn et Jasmin Blanchette. Toutes ces années à l’IRIT auraient vraiment été ennuyeuses et fades sans mes deux collègues de bureau Celia et Christelle. Merci à Christelle pour nous avoir accueilli dans son bureau, ainsi que pour avoir partagé un peu de sa vie familiale et de ses expériences. Merci à Celia pour tous ses conseils, qu’ils aient été administratifs ou techniques, sa grande gentillesse et ses histoires toujours intéressantes, quoi qu’elle en dise ou quoi que j’ai eu l’air d’en penser ;-). Merci aussi à Mathias pour les discussions scientifiques que nous avons eu depuis son arrivé dans le bureau. Merci à tous les membres de l’équipe ACADIE qui m’ont accueilli et supporté pendant ces années, c’est à dire son chef bienveillant (et parfois pressant) Mamoun Filali, les permanents et mes collègues doctorants. Merci en particulier à Bertrand pour ses visites de bureau et ses discussions scientifiques à tendences philosophiques et parfois déprimantes ;-). Merci aussi à Selma pour sa gentillesse et sa bonne humeur. Je m’excuse auprès d’elle et de Nadehza pour avoir peut-être monopolisé Martin trop longtemps. Merci aux collègues de l’IRIT avec qui j’ai partagé de nombreux moments et d’intéressantes discussions, que ce soit pendant les repas au RU, les pauses à la cafét’, la fête de l’IRIT ou les sorties en dehors de l’université. Je cite par ordre de rencontre Anthony, Mathieu, les deux Sylvain, les deux François, Olivier, Guillaume, Victor, Dana, Samir, Philippe, Andra, Magdalina, Vali, Marie, Laure, Rodolphe, Dorian et Florian. L’administration, bien que déjà complexe serait certainement pire si il n’y avait pas une bonne équipe administrative. Merci en particulier à Arnaude Cariou, Sabyne Lartigue et au service mission. Merci aussi au service technique, et notamment Brigitte Marchiset et Jean- Pierre Baritaud. Merci encore à Martine Labruyère pour sa gentillesse et sa compréhension. i ii Remerciements Viennent ensuite tous ceux qui me sont proches et chers: ma famille et mes amis. Que dire tout d’abord à mes parents Christian et Annie, à qui je dois tout, sinon un immense merci. Merci pour l’éducation qu’ils m’ont donné, merci pour leur présence, merci pour leur soutien (qu’il soit matériel ou pas), merci encore. Merci ensuite à ma soeur Magali pour sa gentillesse et ses bons petits plats et à Nicolas qui la rend heureuse. Pour continuer, merci aussi à toute ma famille et en particulier à mes grands parents Yvette, Jean et Angel (je pense aussi à Madeleine), et à mes oncles, tantes et cousins. Enfin je remercie mes amis. Merci tout d’abord à Delphin qui m’accompagne dans toutes aventures, ski (encore ?), badminton (à reprendre ?), déménagements, technologies, voyages et jeux de sociétés... Merci aussi à Viorica pour les cinés et les soirées mémorables passées ensembles avec Delphin. Merci à Ana-Maria et Ovidiu pour leurs ballades toujours excellentes et bien organisées. Merci à Benoît (Papi) pour l’organisation des quelques voyages dont nous avons profité avec Delphin. Merci de même à Grégory pour les soirées tardives “Little Big Planet” ;-). Un grand merci aussi à Fara pour les bons moments passés ensembles. Merci également à Martin, à Benoît, à PX, à Pierre et à Eva. J’ai aussi une pensée pour ceux qui sont loin et que je ne contacte pas assez souvent. Notamment Franck et Elise (je vais venir, promis !), Simon et Isabelle, Jean-Christophe, Valentin et Mohammed. Pour finir, un immense merci à Monia pour cette merveilleuse année passée. Et j’espère aussi aux nombreuses années qui nous attendent. ii Contents Remerciements . i Contents . iii List of Figures . vii List of Definitions and Theorems . viii Introduction xi The Contributions in Short . xiv Thesis Layout . xiv I Foundations 1 1 An Example: Cyclic Lists 3 1.1 Cyclic Lists: Informally . 3 1.2 Specification with an Inductive Datatype . 4 1.2.1 Basics on Inductive Lists and Pairs . 4 1.2.2 Definitions of the Cyclic List Specifications . 5 1.2.3 Properties of the Cyclic List Specifications . 7 1.2.4 Accomplishments . 9 1.3 Example Refinement . 10 1.3.1 Datatypes . 10 1.3.2 Guidelines . 11 1.3.3 Function Refinements . 12 1.3.4 Inheritance of the Specification Properties . 18 2 Scientific Context 21 2.1 Isabelle/HOL . 21 2.1.1 Logic and Notations . 22 2.1.2 Standard Packages . 25 2.1.3 Imperative_HOL ............................. 34 2.2 Graph Transformations and Representations . 41 2.2.1 A Mathematical View (Raw Pointers) . 42 2.2.2 Graph Rewriting Systems . 43 2.2.3 Inductive Extensible Adjacency List . 48 2.2.4 Trees and Paths . 49 2.2.5 Infinite Trees through Coinduction . 50 2.2.6 In Short . 52 2.3 Program Correctness . 52 2.3.1 Hoare Logic . 53 2.3.2 Separation Logic . 55 2.3.3 Program Verification . 56 2.3.4 Refinement . 59 2.3.5 Safe Code Generation . 60 2.3.6 In Short . 60 iii iv CONTENTS II Contributions 63 3 Memory Model 65 3.1 Why Imperative_HOL ?............................. 66 3.2 Rough Edges of Imperative_HOL ....................... 67 3.2.1 Instantiation of Class countable .................... 67 3.2.2 Local Reasoning . 67 3.2.3 Reference Update . 69 3.2.4 Some Other Missing Features . 69 3.3 Representation of Datatypes in the Heap . 69 3.3.1 Examples of (non-)Countable Datatypes . 70 3.3.2 Proof that Datatypes are countable ................... 71 3.3.3 Related Work . 73 3.4 Proof tools . 74 3.5 Objects in Imperative_HOL (Removal of the Ref Class) . 75 3.5.1 Example: References in Imperative_HOL . 76 3.5.2 Consequences on Code Generation . 77 3.5.3 Defining Accessors and Field Update to Remove Indirections . 80 3.6 Objects in Isabelle/HOL . 85 3.6.1 Inheritance and Subtyping in Isabelle/HOL . 85 3.6.2 Traits in Isabelle/HOL . 86 4 Inductive Representations of Pointer Structures 87 4.1 Introduction . 88 4.2 A First Example on Singly-Linked Lists . 89 4.2.1 Datatypes . 89 4.2.2 Refinement Relation . 90 4.2.3 Functions . 91 4.2.4 Simulation Proof . 92 4.2.5 Entailment of Further Properties . 94 4.2.6 Conclusion . 96 4.3 Formal Refinement of Cyclic Lists . 96 4.3.1 Datatypes . 96 4.3.2 Functions . 97 4.3.3 Conclusion . 105 4.4 Possibly-Cyclic Lists . 105 4.4.1 Definitions . 106 4.4.2 Termination . 107 4.4.3 Correctness . 108 4.4.4 Refinement . 109 4.4.5 Conclusion . 110 4.5 Methodology . 111 4.5.1 A Classification of Algorithms w. r. t. Graphs . 111 4.5.2 The Inductive Structure . 115 4.5.3 The Missing Edges . 118 4.5.4 Other Modules . 119 iv CONTENTS v III Case-studies 121 5 The Schorr-Waite Algorithm 123 5.1 Introduction .