Spécification et certification d implantation chaînée avec des orbites : les hypercartes combinatoires



Documents pareils
Conventions d écriture et outils de mise au point

Cours de Programmation 2

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Génie Logiciel avec Ada. 4 février 2013

Vérification formelle de la plate-forme Java Card

Les structures de données. Rajae El Ouazzani

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Recherche dans un tableau

Analyse de sécurité de logiciels système par typage statique

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Algorithmique, Structures de données et langage C

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Arbres binaires de recherche

Introduction à MATLAB R

Théorie de la Programmation

Qualité du logiciel: Méthodes de test

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Quatrième partie IV. Test. Test 15 février / 71

MIS 102 Initiation à l Informatique

Analyse fonctionnelle Théorie des représentations du groupe quantique compact libre O(n) Teodor Banica Résumé - On trouve, pour chaque n 2, la classe

Plan du cours Cours théoriques. 29 septembre 2014

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Cours d initiation à la programmation en C++ Johann Cuenin

Intégration et probabilités TD1 Espaces mesurés

Proposition. Si G est un groupe simple d ordre 60 alors G est isomorphe à A 5.

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

ARBRES BINAIRES DE RECHERCHE

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Cours de Master Recherche

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Intégration et probabilités TD1 Espaces mesurés Corrigé

Une introduction rapide à Coq

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

Objets et Programmation. origine des langages orientés-objet

Les arbres binaires de recherche

Cours Informatique Master STEP

Vérification de programmes et de preuves Première partie. décrire des algorithmes

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Ordonnancement temps réel

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Simulation de variables aléatoires

Paginer les données côté serveur, mettre en cache côté client

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Chapitre VI- La validation de la composition.

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Initiation à la programmation en Python

Initiation à la Programmation en Logique avec SISCtus Prolog

OCL - Object Constraint Language

Résolution de systèmes linéaires par des méthodes directes

Big Data et Graphes : Quelques pistes de recherche

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

FIMA, 7 juillet 2005

Principe de symétrisation pour la construction d un test adaptatif

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Programmation avec des objets : Cours 7. Menu du jour

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Groupe symétrique. Chapitre II. 1 Définitions et généralités

as Architecture des Systèmes d Information

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Big Data et Graphes : Quelques pistes de recherche

1 Première section: La construction générale

Programmation Linéaire - Cours 1

Gestion mémoire et Représentation intermédiaire

Introduction à la théorie des graphes. Solutions des exercices

Nombres premiers. Comment reconnaître un nombre premier? Mais...

Chapitre 5 : Flot maximal dans un graphe

Définitions. Numéro à préciser. (Durée : )

INF 232: Langages et Automates. Travaux Dirigés. Université Joseph Fourier, Université Grenoble 1 Licence Sciences et Technologies

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile


INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Conditions : stage indemnisé, aide au logement possible, transport CEA en Ile-de-France gratuit.

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Exercices sur SQL server 2000

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Algorithmique des Systèmes Répartis Protocoles de Communications

TP3 : Manipulation et implantation de systèmes de fichiers 1

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

Équations non linéaires

Reconstruction de bâtiments en 3D à partir de nuages de points LIDAR

STAGE IREM 0- Premiers pas en Python

Classes et Objets en Ocaml.

Contexte. Pour cela, elles doivent être très compliquées, c est-à-dire elles doivent être très différentes des fonctions simples,

DG-ADAJ: Une plateforme Desktop Grid

Initiation à l algorithmique

Chapitre 3. Mesures stationnaires. et théorèmes de convergence

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Utilitaires méconnus de StrataFrame

Algorithmes pour la planification de mouvements en robotique non-holonome

Construction d un cercle tangent à deux cercles donnés.

Cours Bases de données 2ème année IUT

Présentation du langage et premières fonctions

Conception de circuits numériques et architecture des ordinateurs

PROJET 1 : BASE DE DONNÉES REPARTIES

FONDEMENTS MATHÉMATIQUES 12 E ANNÉE. Mathématiques financières

Programmation Par Objets

Transcription:

Spécification et certification d implantation chaînée avec des orbites : les hypercartes combinatoires Jean-François Dufourd ICUBE, Université de Strasbourg - CNRS, France Journée GDR-LTP 2013, Bordeaux, LABRI, 18 novembre 2013 J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 1 / 40

Sommaire 1 Introduction 2 Orbites en Coq 3 Hypercartes combinatoires 4 Modèle général de mémoire 5 Implantation chaînée des hypercartes 6 Equivalence observationnelle spécification / implantation 7 Travaux connexes et discussion 8 Conclusion 9 Annexe : programme C J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 2 / 40

Introduction Introduction Objectif - Spécifier des librairies de types et opérations - Certifier des implantations (séquentielles) avec chaînages Moyens utilisés - Types algébriques - CCI (avec extensionnalité) et preuves avec Coq - Simulation du langage C - Notion d orbite Moyens non utilisés - Logique de Hoare - Logique de séparation Etude de cas - Hypercartes combinatoires [Cori 70,..., Gonthier 08,... ] Applications : Combinatoire : énumération, coloration... Modélisation géométrique : subdivisions de l espace J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 3 / 40

Orbites en Coq Orbites en Coq Contexte - X: Type, avec égalité décidable et exception exc: X - f: X->X, fonction totale - D, sous-domaine fini de X ne contenant pas exc (représenté comme une liste finie sans duplicata) Définitions Soient z:x et les itérés zk := Iter f k z, pour tout k >= 0. (i) orbs k z := si k = 0 alors nil sinon z(k-1)::orbs (k-1) z : k-séquence orbitale de z (ii) lorb z : longueur de l orbite de z : plus petit entier p tel que ~In zp D ou In zp (orbs p z) (iii) orb z := orbs (lorb z) z : orbite de z (iv) lim z := z(lorb z) (ou zp) : limite de z (v) top z := z(lorb z-1) : sommet de z quand In z D J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 4 / 40

Orbites Orbites en Coq Exemple : Orbites (4 pos. de z) / Composantes (3 pos. de z) lim z p z p top z p 1 z p 1 z = z p empty shape Shapes line z z1 z p 1 crosse circuit z top lim zp 1 z = z p top z1 lim z p D tree Components z circuit zp 1 trees z z p D J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 5 / 40

Orbites Orbites en Coq Formes d orbites Une orbite est : (i) vide : quand ~In z D (ii) une ligne : quand ~In (lim z) D, noté inv_line z (iii) une crosse : quand In (lim z) (orb z), noté inv_crosse z (iv) un circuit : quand lim z = z, noté inv_circ z Formes de composantes connexes Une composante connexe du graphe fonctionnel (D,f) est : (i) soit un arbre (ii) soit un circuit sur lequel des arbres sont greffés J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 6 / 40

Orbites Orbites en Coq Inverse, clôture - f_1 z : inverse de z, quand z a un seul f-prédécesseur dans D ou bien l orbite de z est un circuit - Cl f : clôture de f, quand toutes les composantes sont des branches (linéaires) ou des circuits (f : injection partielle dans D) Exemple : inversion, clôture lim (a) f top f line f z f branch f bot D f (b) f_1 bot f_1 f_1 branch z f_1 line f_1 top D f_1 lim = exc X (c) Cl f Cl f Cl f circuit Cl f z Cl f D Figure: (a) Branche contenant z / (b) Inversion / (c) Clôture. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 7 / 40

Orbites Orbites en Coq Addition/suppression Addition d un nouvel élément a dans D, avec ~In a D. Deux cas : - lim D f z <> a : orbite de z préservée - lim D f z = a : grands changements possibles... Si ~In (f a) D, la nouvelle orbite de z est l ancienne complétée par a seulement (Fig) Suppression d un élément a de D. Deux cas : - ~In a (orb D f z) : orbite de z préservée - In a (orb D f z) : orbite de z coupée en a (Fig) Exemple : addition/suppression a1 Da D a = zp z p 1 D D_a a = z j a 1 line line z1 z 1 z z Figure: Addition (Gauche) / Suppression (Droite). J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 8 / 40

Orbites en Coq Orbites Mutation Une mutation modifie l image par f d un élément u, i.e. f u, en un élément, nommé u1, alors que tous les autres, et D, sont inchangés : Definition Mu(f:X->X)(u u1:x)(z:x):x := if eqd X u z then u1 else f z. Si ~In u D, rien d important. Si In u D, deux cas pour u1 and u: - Cas A : ~In u (orb f D u1) : l orbite de u1 ne change pas et la nouvelle orbite de u est celle de u1 plus u lui-même (Fig) - Cas B : In u (orb f D u1) : création d un nouveau circuit (Fig) Pour z:x en général, différents cas selon les positions respectives de z, u1 et u (assez compliqué). Exemple : mutation Mutation line f u line f u Case A f u u1 u u Case B line Case A f u u1 u u Case B circuit circuit u1 D u1 D Figure: Mutation : Cas A et B. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 9 / 40

Orbites Orbites en Coq Transposition Une transposition échange les images par f de deux éléments appartenant à des circuits, et laisse les autres intactes (on précise juste un des éléments, u, et sa nouvelle image, u1) : Definition Tu(f:X->X)(D: list X)(u u1:x)(z:x):x := if eqd X u z then u1 else if eqd X (f_1 X f D u1) z then f u else f z. Opération utilisable quand : - u et u1 dans le même circuit : éclatement d orbite (split) (Fig) - u et u1 dans deux circuits distincts : fusion d orbites (merge) (Fig) Exemple : transposition u1 Transposition 1 f u1 u1 (split) Transposition 1 f u1 f u 1 f u1 (merge) f u 1 f u1 u f u D u f u D u u1 D u u1 D Figure: Split (Gauche) / merge (Droite). J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 10 / 40

Hypercartes combinatoires Rappels mathématiques sur les hypercartes Définition Une hypercarte combinatoire (de dimension 2) est une structure algébrique, M = (D, α 0, α 1 ), où D est un ensemble fini dont les éléments sont appelés des brins, et α 0, α 1 sont deux permutations sur D indexées par une dimension, 0 ou 1. Exemple : hypercarte D 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 α0 1 5 3 2 4 7 6 8 10 9 12 11 14 13 16 15 α1 2 3 1 7 6 5 8 4 16 11 10 13 12 15 14 9 1 3 2 5 6 7 4 13 12 8 11 10 14 9 15 16 Figure: Hypercarte combinatoire plongée dans le plan. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 11 / 40

Hypercartes combinatoires Rappels mathématiques sur les hypercartes Orbites d hypercartes - L arête (resp. le sommet, la face) de z est son orbite (circulaire) par α 0 (resp. α 1, φ = α 1 1 α 1 0 ) par rapport à D. - Si t est dans la f -orbite circulaire de z, celle-ci et l orbite de t peuvent être identifiées modulo une permutation circulaire, et ne compter que pour 1 lors d un dénombrement (z et t sont dans la même composante connexe de (D, f )). Classification Les hypercartes sont classées en fonction de leurs nombres d arêtes, sommets, faces et composantes connexes (de (D, {α 0, α 1 })), avec les notions de caractéristique d Euler, genre et planarité. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 12 / 40

Hypercartes combinatoires Hypercartes (constructives) en Coq Brins, dimensions, cartes libres (free maps) Definition dart := nat. Definition nild := 0.... Inductive dim:type := zero : dim one : dim. Inductive fmap:type := V : fmap I : fmap->dart->fmap L : fmap->dim->dart->dart->fmap. Exemple : hypercarte m1 := I ( I (I (I ( I (I V 1) 2) 3) 4) 5) 6. m2 := L (L m1 zero 4 2) zero 2 5). m3 := L (L (L m2 one 1 2) one 2 3) one 6 5. 1 2 3 5 4 6 Figure: Codage partiel de l hypercarte en exemple (orbites ouvertes). J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 13 / 40

Hypercartes combinatoires Hypercartes en Coq Observateurs (* existence of a dart in a fmap: *) Fixpoint exd(m:fmap)(z:dart){struct m}: Prop := match m with V => False I m0 x => x = z \/ exd m0 z L m0 _ => exd m0 z end. (* k-successor: *) Fixpoint pa(m:fmap)(k:dim)(z:dart){struct m}: Prop :=... (* k-successor s closure : "alpha" of the math. def. *) Fixpoint A(m:fmap)(k:dim)(z:dart){struct m}: Prop :=... Preconditions, invariant, type des hypercartes Definition prec_i (m:fmap)(x:dart) := x <> nild /\ ~ exd m x. Definition prec_l (m:fmap)(k:dim)(x y:dart) := exd m x /\ exd m y /\ ~succ m k x /\ ~prev m k y /\ A m k x <> y. Fixpoint inv_hmap(m:fmap):prop:= match m with V => True I m0 x => inv_hmap m0 /\ prec_i m0 x L m0 k0 x y => inv_hmap m0 /\ prec_l m0 k0 x y end. Definition hmap:type:= {m:fmap inv_hmap m}. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 14 / 40

Hypercartes combinatoires Hypercartes en Coq Propriétés "orbitales" des hypercartes (I) Idée : étudier pa et A via les propriétés de leurs orbites. Theorem inv_line_pa: forall m k z, inv_hmap m -> inv_line dart (pa m k) (m2s m) z. (* Les orbites par (pa m k) restent "ouvertes" *) Theorem A_eq_Cl: forall m k, inv_hmap m -> A m k = Cl dart (pa m k) (m2s m). Theorem inv_circ_a: forall m k z, inv_hmap m -> inv_circ dart (A m k) (m2s m) z. (* Les orbites par (A m k) sont "fermees" *) Lemma A_1_eq_f_1: forall m k z, inv_hmap m -> exd m z -> A_1 m k z = f_1 dart (A m k) (m2s m) z. Propriétés des hypercartes (II) - Définitions incrémentales des nombres d arêtes, sommets, faces, composantes connexes. - Définitions de caractéristique d Euler, genre et planarité. - Preuve inductive du théorème du Genre. - Critère constructif de planarité. - Preuve du théorème de Jordan discret. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 15 / 40

Hypercartes combinatoires Hypercartes en Coq Opérations (conservatives) de haut niveau - B m k x : suppression du k-lien depuis x - D m x : suppression du brin (isolé) x - Shift m k x : glissement du trou de la k-orbite de x juste après x - Split m k x y : éclatement de la k-orbite de x en deux parties - Merge m k x y : fusion des k-orbites de x et y Exemple : éclatement/fusion pour 1-orbites x1 m x1 x y y_1 Split m one x y x1 x y y_1 x2 y y1 x Merge m one x y y3 y1 y y2 x x2 x1 y3 y2 Figure: Split (Gauche) and Merge (Droite) à dimension 1. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 16 / 40

Hypercartes combinatoires Hypercartes en Coq Propriétés des opérations Lemma A_Split_eq_Tu: forall m k x y, inv_hmap m -> prec_split m k x y -> A (Split m k x y) k = Tu dart (A m k) (m2s m) x y. Lemma A_Merge_eq_Tu: forall m k x y, inv_hmap m -> prec_merge m k x y -> A (Merge m k x y) k = Tu dart (A m k) (m2s m) x y. D où propriétés héritées des orbites générales. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 17 / 40

Modèle général de mémoire Modèle général de mémoire Hypothèses - La mémoire est non bornée et les allocations sont toujours réussies - Elle est partitionnée selon les types de données Dans chaque partie : - Les adresses potentielles sont les entiers naturels - La validité d une adresse peut être testée - Une adresse exception null (= 0), est toujours invalide - Une adresse fraîche (invalide et non-null) peut toujours être engendrée par une fonction appelée adgen. Idée : mimer l allocation fournie par la macro C : #define alloc(t) ((T *) malloc(sizeof(t))) J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 18 / 40

Modèle général de mémoire Modèle général de mémoire Formalisation en Coq Definition Addr := nat. Definition null := 0.... Variables (T : Type) (undef:t). Inductive Mem: Type:= initm : Mem insm : Mem -> Addr -> T -> Mem. Fixpoint valid(m:mem)(z:addr):prop :=... Definition prec_insm M a := ~valid M a /\ a <> null. Fixpoint inv_mem(m:mem): Prop := match M with initm => True insm M0 a t => inv_mem M0 /\ prec_insm M a end. Parameter adgen: Mem -> nat. Axiom adgen_axiom: forall M, let a := adgen M in ~valid M a /\ a <> null. (* Single axiom, apart from extensionality *) J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 19 / 40

Modèle général de mémoire Modèle général de mémoire Opérations conservatives - alloc M : allocation, renvoie M mis à jour et une adresse fraîche : Definition alloc(m:mem):(mem * Addr)%type := let a := adgen M in (insm M a undef, a). Spécifiées inductivement : - load M z : chargement - mut M z t : mutation - free M z : libération J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 20 / 40

Implantation chaînée des hypercartes Représentation des hypercartes Cellules pour les brins Record cell:type:= mkcell { s : dim -> Addr; (* k-successors *) p : dim -> Addr; (* k-predecessors *) next : Addr (* successor in the main list *) }. Definition Memc := Mem cell. Exemple : une cellule p zero p one s zero s one next Figure: Une cellule de représentation d hypercarte. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 21 / 40

Implantation chaînée des hypercartes Représentation des hypercartes Listes chaînées emboîtées - une liste chaînée principale simple de brins - pour chaque brin, 4 listes chaînées circulaires pour les k-liens. Definition Rhmap := (Memc * Addr)%type. Opérations (noms précédés de "R") Definition Rnext M z := next (loadc M z). Definition Rorb Rm := let (M, h) := Rm in orb Addr (Rnext M) (domc M) h. Definition Rlim Rm := let (M, h) := Rm in lim Addr (Rnext M) (domc M) h. Definition Rexd Rm z := In z (Rorb Rm). Definition RA M k z := s (loadc M z) k. Definition RA_1 M k z := p (loadc M z) k. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 22 / 40

Implantation chaînée des hypercartes Représentation des hypercartes Invariant de représentation Definition inv_rhmap1 (Rm:Rhmap) := let (M, h) := Rm in inv_memc M /\ (h = null \/ In h (domc M)) /\ lim Addr (Rnext M) (domc M) h = null. Definition inv_rhmap2 (Rm:Rhmap) := let (M, h) := Rm in forall k z, Rexd Rm z -> inv_circ Addr (RA M k) (Rorb Rm) z /\ RA_1 M k z = f_1 Addr (RA M k) (Rorb Rm) z. Definition inv_rhmap (Rm:Rhmap) := inv_rhmap1 Rm /\ inv_rhmap2 Rm. Conséquences Lemma RA_RA_1: forall Rm k z, inv_rhmap Rm -> let (M, h) := Rm in In z (Rorb Rm) -> RA M k (RA_1 M k z) = z. Lemma inv_circ_ra_1: forall Rm k z, inv_rhmap Rm -> let (M, h) := Rm in In z (Rorb Rm) -> inv_circ Addr (RA_1 M k) (Rorb Rm) z. - Les listes secondaires sont organisées en listes circulaires doublement chaînées, chacune correspondant à une arête ou à un sommet pouvant être parcouru en sens direct ou retrograde. - Pour un k et un sens fixé, elles déterminent une partition de la liste principale. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 23 / 40

Implantation chaînée des hypercartes Opérations pour l utilisateur (I) : hypercarte vide Idée : fournir un jeu complet d opérations de la spécification non risquées (cachant la manipulation des pointeurs). Hypercarte vide : RV Definition RV(M:Memc): Rhmap := (M, null). Propriétés Lemma Rexd_RV: forall M z, inv_memc M -> ~Rexd (RV M) z. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 24 / 40

Implantation chaînée des hypercartes Opérations pour l utilisateur (II) : insertion Insertion d un nouveau brin isolé : RI Definition RI(Rm:Rhmap):Rhmap := let (M, h) := Rm in let (M1, x) := allocc M in let M2 := mutc M1 x (modnext (ficell x) h) in (M2, x). Exemple : insertion d un brin isolé h Rm: p zero p one x RI Rm: p zero p one h p zero p one null x x x x null s zero s one next s zero s one next s zero s one next Figure: RI: insertion d un brin dans Rm (Gauche) donnant RI Rm (Droite). Propriétés Lemma Rorb_RI: Rorb (RI Rm) = Rorb Rm ++ (x :: nil). Lemma Rexd_RI: forall z, Rexd (RI Rm) z <-> Rexd Rm z \/ z = adgenc M. Lemma RA_RI: forall k z, RA (fst (RI Rm)) k z = if eq_nat_dec x z then x else RA M k z. Lemma RA_1_RI: forall k z, RA_1 (fst (RI Rm)) k z = if eq_nat_dec x z then x else RA_1 M k z. Preuves héritées des orbites générales : Lemma Rnext_M2_Mu: Rnext M2 = Mu Addr (Rnext M) z_1 (Rnext M z). Lemma RA_M2_Mu: forall k, RA M2 k = Mu Addr (RA M k) x x. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 25 / 40

Implantation chaînée des hypercartes Opérations pour l utilisateur (III) : transposition Transposition de 2 brins : RL Definition RL(Rm:Rhmap)(k:dim)(x y:addr): Rhmap := let (M, h) := Rm in let xk := RA M k x in let y_k := RA_1 M k y in let M3 := mutc M x (mods (loadc M x) k y) in let M4 := mutc M3 y (modp (loadc M3 y) k x) in let M5 := mutc M4 y_k (mods (loadc M4 y_k) k xk) in let M6 := mutc M5 xk (modp (loadc M5 xk) k y_k) in (M6, h). Definition prec_rl Rm k x y:= In x (Rorb Rm) /\ In y (Rorb Rm). Exemple : transposition de 2 brins xk Rm: p zero p one x y p zero p one y_k y RL Rm k x y: p zero p one x xk p zero p one y_k x s zero p zero next y_k s zero p zero next x s zero p zero next y_k s zero p zero next xk s zero s one next y s zero s one next y s zero s one next xk s zero s one next Figure: RL: Transposition de 2 brins de Rm (Gauche) donnant Rm k x y (Droite). J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 26 / 40

Implantation chaînée des hypercartes Opérations pour l utilisateur (III) : transposition Propriétés Lemma Rexd_RL: forall Rm k x y z, inv_rhmap Rm -> prec_rl Rm k x y -> (Rexd (RL Rm k x y) z <-> Rexd Rm z). Lemma RA_RL_z: forall Rm k x y z, inv_rhmap Rm -> prec_rl Rm k x y -> RA (fst (RL Rm k x y)) k z = if eqd Addr x z then y else if eqd Addr (RA_1 (fst Rm) k y) z then RA (fst Rm) k x else RA (fst Rm) k z. Lemma RA_1_RL_z:... similar to RA_RL_z... Preuves héritées des orbites générales par : Lemma RA_M6_eq_Tu: RA M6 k = Tu Addr (RA M k) (Rorb (M,h)) x y. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 27 / 40

Implantation chaînée des hypercartes Opérations pour l utilisateur (IV) : suppression Suppression d un brin isolé : RD Definition RD(Rm:Rhmap)(x:Addr)(H: inv_rhmap1 Rm): Rhmap := let (M,h) := Rm in if eqd Addr h null then Rm else if eqd Addr x null then Rm else if eqd Addr h x then let h1 := Rnext M h in let M1 := freec M h in (M1, h1) else let x_1 := Rnext_1 Rm H x in if eqd Addr x_1 null then Rm else let M2 := mutc M x_1 (modnext (loadc M x_1) (Rnext M x)) in let M3 := freec M2 x in (M3,h). Definition prec_rd Rm x := forall k, Rexd Rm x -> RA (fst Rm) k x = x /\ RA_1 (fst Rm) k x = x. Exemple : suppression d un brin isolé x_1 p zero p one x Rm: x1 p zero p one p zero p one h z x x x x x1 null s zero s one next s zero s one next s zero s one next h x_1 Rm: p zero p one x1 RD Rm x: x1 p zero p one null s zero s one next s zero s one next Figure: RD: Suppression d un brin de Rm (Haut) donnant RD Rm x (Bas). J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 28 / 40

Implantation chaînée des hypercartes Opérations pour l utilisateur (IV) : suppression Propriétés Comportement correct... Preuves héritées des orbites générales par : Lemma Rnext_M2_Mu: Rnext M2 = Mu Addr (Rnext M) x_1 (Rnext M x). Lemma Rnext_M3_Mu: Rnext M3 = Mu Addr (Rnext M2) x null. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 29 / 40

Equivalence observationnelle spécification / implantation Equivalence observationnelle spécification/implantation Fonction (morphisme) d abstraction (* CRm : CRhmap Rm est un predicat inductif exprimant que Rm est construite exclusivement en utilisant RV, RI, RL et RD : *) Fixpoint Abs (Rm: Rhmap) (CRm : CRhmap Rm) {struct CRm}: fmap := match CRm with CRV M H0 => V CRI Rm0 H0 => let m0 := Abs Rm0 H0 in I m0 (adgenc (fst Rm0)) CRL Rm0 k x y H0 H1 => let m0 := Abs Rm0 H0 in if expo_dec Addr (RA (fst Rm0) k) (Rorb Rm0) x y then if eqd Addr (A m0 k x) y then m0 else Split m0 k x y else Merge m0 k x y CRD Rm0 x Inv H0 H1 => let m0 := Abs Rm0 H0 in D m0 x. end. Propriétés Lemma inv_hmap_abs: forall Rm CRm, inv_rhmap Rm -> inv_hmap (Abs Rm CRm). Lemma exd_abs: forall Rm CRm z, inv_rhmap Rm -> (exd (Abs Rm CRm) z <-> Rexd Rm z). Lemma A_Abs: forall Rm CRm k z, inv_rhmap Rm -> exd (Abs Rm CRm) z -> A (Abs Rm CRm) k z = RA (fst Rm) k z. Lemma A_1_Abs: forall Rm CRm k z, inv_rhmap Rm -> exd (Abs Rm CRm) z -> A_1 (Abs Rm CRm) k z = RA_1 (fst Rm) k z. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 30 / 40

Equivalence observationnelle spécification / implantation Equivalence observationnelle spécification/implantation Fonction (morphisme) de représentation Fixpoint Rep (M:Memc)(m:fmap): (Rhmap * Prop)%type := match m with V => (RV M, True) I m0 x t p => let (Rm0, P0) := Rep M m0 in (RI Rm0 t p, P0 /\ x = adgenc (fst Rm0)) L m0 k x y => let (Rm0, P0) := Rep M m0 in (RL Rm0 k x y, P0) end. (* Dans (Rm,Pm) := Rep M m, Rm est une representation correcte ssi Pm : les brins sont les adresses generees par adgen successifs depuis M *) Propriétés Lemma inv_rhmap_rep: forall M m, inv_memc M -> inv_hmap m -> let (Rm, Pm) := Rep M m in Pm -> inv_rhmap Rm. Lemma Rexd_Rep: forall M m z, inv_memc M -> inv_hmap m -> let (Rm, Pm) := Rep M m in Pm -> (Rexd Rm z <-> exd m z). Lemma RA_Rep: forall M m k, inv_memc M -> inv_hmap m -> let (Rm, Pm) := Rep M m in Pm -> forall z, Rexd Rm z -> RA (fst Rm) k z = A m k z /\ RA_1 (fst Rm) k z = A_1 m k z. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 31 / 40

Travaux connexes et discussion Travaux connexes et discussion Thèmes Preuves statiques de programmes Spécifications algébriques Modèles de mémoire et de programmation Séparation et collision Spécification et implantation d hypercartes Systèmes de preuve dédiés J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 32 / 40

Conclusion Conclusion Bilan Intérêt pour des librairies de types et opérations avec des structures de données complexes Point de vue de spécification algébrique Utilisation exclusive d une logique d ordre supérieur : CCI : ni logique de Hoare, ni logique de séparation [Reynolds, O Hearn...] Utilisation d une bibliothèque générique sur les orbites : traitement de listes linéaires ou circulaires, simplement ou doublement chaînées, éventuellement avec emboîtement Développement Coq pour cette étude (avec le modèle de mémoire, mais sans les orbites) : 9 000 lignes (60 définitions, 630 lemmes et théorèmes) J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 33 / 40

Conclusion Conclusion Perspectives Généralisation des résultats sur les orbites : fonctions multiples, pour traiter arbres, forêts et graphes Relations avec la logique de séparation : les orbites aident à poser et résoudre des problèmes de collision et séparation Relations avec les plateformes de preuves (semi-)automatiques : Why3, Frama-C... Compilation du "fragment impératif" Coq vers C Etudes de cas sur des données et problèmes complexes, notamment en algorithmique et modélisation géométriques (Exemple : diagrammes de Delaunay / Voronoi en 3D) J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 34 / 40

Annexe : programme C Annexe : programme C Comments - This appendix contains a C operational program for the concrete types, data structures and functions which correspond to the hypermap linked Coq representation. - It is obtained by a direct translation where the memory is a global implicit object, memory variables are removed, addresses are pointers on cells, and Rm is identified to h. - A run on a test game needs a simple wrapping in ad hoc types and functions to refer darts in play, e.g. by integers, and to traverse the data structures. J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 35 / 40

Programme C Annexe : programme C Listing (I) /* Programming in C the hypermap Coq representation */ #define MALLOC(t) ((t *) malloc(sizeof(t))) #define null NULL typedef enum {zero, one} dim; typedef struct scell { struct scell * s[2]; struct scell * p[2]; struct scell * next; } cell, * Addr, * Rhmap; cell mkcell (Addr s[], Addr p[], Addr n) { cell c; int k; for(k=0;k<2;k++){c.s[k] = s[k]; c.p[k] = p[k];} c.next := n; return c; } J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 36 / 40

Programme C Annexe : programme C Listing (II) cell mods(cell c, dim k, Addr m) { c.s[k] = m; return c; } cell modp(cell c, dim k, Addr m) { c.p[k] = m; return c; } cell modnext(cell c, Addr m) { c.next = m; return c; } cell ficell(addr x) { cell c; int k; for(k=0;k<2;k++){c.s[k] = c.p[k] = x;} c.next = null; return c; } cell initcell() { cell c; int k; for(k=0;k<2;k++){c.s[k] = c.p[k] = null;} c.next = null; return c; } J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 37 / 40

Programme C Annexe : programme C Listing (III) cell load(addr z) { return *z; } void mut(addr z, cell c) { *z = c;} Addr alloc() { Addr x = MALLOC(cell); *x = initcell(); return x; } /* free (z:addr) BUILT-IN */ Addr Rnext (Addr z) { return z->next; } Addr RA (dim k, Addr z) { return z->s[k]; } Addr RA_1 (dim k, Addr z) { return z->p[k]; } J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 38 / 40

Programme C Annexe : programme C Listing (IV) Rhmap RV() { return null;} Rhmap RI(Rhmap Rm) { Addr x = alloc(); mut(x, (modnext(ficell(x), Rm))); return x; } Rhmap RL(Rhmap Rm, dim k, Addr x, Addr y) { Addr xk = RA(k, x); Addr y_k = RA_1(k, y); mut(x, (mods(load(x), k, y))); mut(y, (modp(load(y), k, x))); mut(y_k, (mods(load(y_k), k, xk))); mut(xk, (modp(load (xk), k, y_k))); return Rm; } J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 39 / 40

Programme C Annexe : programme C Listing (V) Addr Rnext_1(Rhmap Rm, Addr x) { if(rnext(rm) == x) return Rm; return Rnext_1(Rnext(Rm), x); } Rhmap RD(Rhmap Rm, Addr x) { Addr h1, x_1; if (Rm == null x == null) return Rm; if (Rm == x) { h1 = Rnext(Rm); free (Rm); return h1; } x_1 = Rnext_1(Rm,x); if (x_1 == null) return Rm; mut(x_1, (modnext (load(x_1), Rnext(x)))); free(x); return Rm; } J.-F. Dufourd (Strasbourg, ICUBE) Certification des hypercartes combinatoires 18 novembre 2013 40 / 40