• Aucun résultat trouvé

Réduction du nombre de variables en analyse de relations linéaires

N/A
N/A
Protected

Academic year: 2021

Partager "Réduction du nombre de variables en analyse de relations linéaires"

Copied!
126
0
0

Texte intégral

(1)

HAL Id: tel-00012143

https://tel.archives-ouvertes.fr/tel-00012143

Submitted on 13 Apr 2006

HAL is a multi-disciplinary open access archive for the deposit and dissemination of sci- entific research documents, whether they are pub- lished or not. The documents may come from teaching and research institutions in France or abroad, or from public or private research centers.

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des établissements d’enseignement et de recherche français ou étrangers, des laboratoires publics ou privés.

Réduction du nombre de variables en analyse de relations linéaires

David Merchat

To cite this version:

David Merchat. Réduction du nombre de variables en analyse de relations linéaires. Autre [cs.OH].

Université Joseph-Fourier - Grenoble I, 2005. Français. �tel-00012143�

(2)

UNIVERSITE JOSEPH FOURIER - GRENOBLE I SCIENCES ET GEOGRAPHIE

THESE

pour obtenir le grade de

DOCTEUR DE L’UNIVERSITE JOSEPH FOURIER

Discipline : Informatique

pr´ esent´ ee et soutenue publiquement par

Merchat David Le 18 05 2005

Titre :

R´ eduction du nombre de variables en analyse de relations lin´ eaires

Directeurs de th` ese :

Halbwachs Nicolas et Parent Catherine

COMPOSITION DU JURY : Pr´ esidente Borrione Dominique Directeurs Halbwachs Nicolas

Parent Catherine Rapporteurs De Simone Robert

Irigoin Fran¸ cois

Examinateur Jeannet Bertrand

(3)
(4)

Table des mati` eres

1 Introduction 1

2 Mod` eles, Programmes, V´ erification 5

2.1 Mod` ele s´ emantique : Les syst` emes de transitions . . . . 5

2.2 V´ erification . . . . 6

2.2.1 Propri´ et´ es . . . . 6

2.2.2 Accessibilit´ e et V´ erification . . . . 7

2.2.3 Model checking . . . . 8

2.2.4 V´ erification conservative . . . . 8

2.3 Mod` eles de programmes . . . . 8

2.3.1 Automates interpr´ et´ es . . . . 9

2.3.2 S´ emantique en termes de syst` emes de transitions . . . . 9

2.3.3 Exemple . . . . 10

2.3.4 Une autre s´ emantique . . . . 12

2.3.5 Composition des automates interpr´ et´ es et observateurs . . . . 13

3 Interpr´ etation Abstraite 15 3.1 Introduction . . . . 15

3.2 Principes de l’interpr´ etation abstraite . . . . 16

3.2.1 Domaine abstrait . . . . 16

3.2.2 Op´ erations abstraites . . . . 17

3.2.3 Elargissement – S´ equence descendante . . . . 18

3.3 Interpr´ etations abstraites des automates interpr´ et´ es . . . . 19

3.4 Approximation des ensembles num´ eriques . . . . 20

3.4.1 Le treillis des signes . . . . 20

3.4.2 Le treillis des ´ equations affines . . . . 21

3.4.3 Le treillis des congruences lin´ eaires . . . . 21

3.4.4 Le treillis des intervalles . . . . 22

3.4.5 Les poly` edres convexes . . . . 22

3.4.6 Cas particuliers de poly` edres . . . . 23

3.4.7 Ensembles semi-lin´ eaires et arithm´ etique de Presburger . . . . 24

3.5 Utilisations de l’analyse des variables num´ eriques . . . . 24

3.5.1 V´ erification d’inaccessibilit´ e . . . . 24

i

(5)

3.5.2 Synth` ese d’invariants . . . . 25

4 Le treillis des poly` edres 27 4.1 La double repr´ esentation . . . . 27

4.1.1 Contraintes lin´ eaires . . . . 27

4.1.2 Non canonicit´ e des syst` emes de contraintes . . . . 28

4.1.3 G´ en´ erateurs . . . . 30

4.1.4 Non canonicit´ e des syst` emes g´ en´ erateurs . . . . 30

4.1.5 Lien entre les deux repr´ esentations . . . . 32

4.1.6 Minimisation des repr´ esentations . . . . 32

4.2 Calcul de la repr´ esentation duale . . . . 33

4.2.1 Principe de l’algorithme de Motzkin . . . . 34

4.2.2 Optimisations . . . . 35

4.3 Les op´ erations sur les poly` edres . . . . 36

4.3.1 Les tests . . . . 36

4.3.2 L’intersection . . . . 37

4.3.3 L’enveloppe convexe . . . . 37

4.3.4 Effet d’une action, projection et transformation affine . . . . 37

4.3.5 L’´ elargissement . . . . 38

4.3.6 Elargissement limit´ e . . . . 39

4.4 Un exemple d’analyse . . . . 39

4.5 Biblioth` eques existantes . . . . 41

4.5.1 La PolyLib . . . . 42

4.5.2 Librairie NewPolka . . . . 42

4.5.3 PPL . . . . 42

4.6 Le probl` eme de la taille des repr´ esentations . . . . 43

5 Un Analyseur d’Automates Interpr´ et´ es 45 5.1 Motivations . . . . 45

5.1.1 Le langage Lustre . . . . 46

5.1.2 Nbac . . . . 48

5.2 Le format d’entr´ ee : Oc . . . . 48

5.2.1 Description de Oc . . . . 49

5.2.2 Passage de Lustre ` a Oc . . . . 50

5.3 L’Analyseur . . . . 52

5.3.1 Automate : ´ etats et transitions . . . . 52

5.3.2 Elargissement . . . . 53

5.3.3 Elargissement limit´ e . . . . 55

6 Utilisation des ´ equations lin´ eaires 57 6.1 Le treillis des vari´ et´ es lin´ eaires [Kar76] . . . . 57

6.1.1 Minimisation et forme canonique . . . . 58

6.2 Op´ erations de manipulations . . . . 59

ii

(6)

6.2.1 Transformation . . . . 59

6.2.2 Intersection . . . . 60

6.2.3 Union . . . . 60

6.2.4 Les tests . . . . 62

6.2.5 Exemple . . . . 63

6.3 Pr´ e traitement . . . . 63

6.3.1 Premi` ere passe . . . . 64

6.3.2 Elimination des variables . . . . 64

6.4 Approche pas ` a pas . . . . 64

7 Produits Cart´ esiens de Poly` edres 67 7.1 Introduction . . . . 67

7.1.1 Notations et d´ efinitions . . . . 68

7.1.2 Factorisation . . . . 69

7.1.3 D´ ecomposition du r´ esultat d’une op´ eration . . . . 70

7.2 Op´ erations simples . . . . 70

7.2.1 Test du vide . . . . 71

7.2.2 Test d’inclusion . . . . 71

7.2.3 Ajout d’une contrainte . . . . 71

7.2.4 Application affine . . . . 73

7.2.5 Intersection . . . . 74

7.2.6 L’´ elargissement . . . . 75

7.3 L’enveloppe convexe . . . . 76

7.4 Conclusion . . . . 79

8 Factorisation par Changement de base 81 8.1 Changement de base . . . . 81

8.1.1 Exemple . . . . 81

8.1.2 Algorithme . . . . 82

8.2 Strat´ egies de changement de base . . . . 83

8.2.1 Op´ erations sur un seul poly` edre . . . . 83

8.2.2 Op´ erations sur plusieurs poly` edres . . . . 84

9 Impl´ ementation et Exp´ erimentation 85 9.1 Biblioth` eque de poly` edres . . . . 85

9.1.1 D´ etection d’un produit cart´ esien . . . . 85

9.1.2 Sp´ ecificit´ es de la structure . . . . 87

9.1.3 Op´ erations sp´ ecifiques au produit . . . . 87

9.1.4 Interfaces de la biblioth` eque . . . . 90

9.2 Versions de l’anayseur . . . . 90

9.2.1 Version de base . . . . 91

9.2.2 Version avec d´ etection des ´ egalit´ es . . . . 92

9.2.3 Version avec produits cart´ esiens . . . . 92

iii

(7)

9.2.4 Version avec changement de base . . . . 93

9.3 Exp´ erimentations . . . . 93

9.3.1 Les exemples . . . . 93

9.3.2 Exp´ erimentations avec les ´ equations lin´ eaires . . . . 96

9.3.3 Exp´ erimentations avec les produits cart´ esiens et le changement de base . . . . 98

10 Conclusion 105 A Code des exemples 107 A.1 Code du Metro . . . 107

A.2 Code d’un gyroscope . . . 108

B Bibliographie 112

iv

(8)

Chapitre 1 Introduction

La v´ erification de programmes est un enjeu dont l’importance n’est plus ` a souligner.

Depuis les travaux fondateurs de Floyd et Hoare, il y a pr` es de quarante ans, les recherches dans ce domaine se sont d´ evelopp´ ees dans diverses directions, mais principalement bas´ ees, d’une part, sur la preuve formelle — n´ ecessairement interactive —, et d’autre part sur l’exploration exhaustive de mod` eles finis des programmes (“model-checking”).

Les logiciels les plus critiques, du point de vue de la sˆ uret´ e, sont les logiciels embarqu´ es temps r´ eel. Dans ce domaine, comme dans beaucoup d’autres, la complexit´ e croissante des applications rend irr´ ealiste l’application des m´ ethodes de preuve interactive. Par ailleurs, mˆ eme si l’on se restreint aux noyaux de contrˆ ole de tels syst` emes, il est rare que l’on puisse en extraire automatiquement un mod` ele fini suffisamment pr´ ecis : la raison en est que mˆ eme le contrˆ ole fait appel ` a des variables num´ eriques (par exemple, des compteurs de temps, d’´ ev´ enements, . . . ) dont le comportement est significatif dans le respect des propri´ et´ es cruciales du syst` eme. C’est pourquoi nous nous int´ eressons ici ` a la v´ erification automatique de programmes manipulant des variables num´ eriques, et donc de programmes ` a nombre infini d’´ etats.

Cet objectif se heurte ` a l’ind´ ecidabilit´ e de la v´ erification de programmes g´ en´ eraux. On est ainsi amen´ e, soit ` a se restreindre ` a certaines classes de programmes et de propri´ et´ es dont la v´ erification est d´ ecidable — mais les applications r´ eelles appartiennent rarement ` a ces classes —, soit ` a se contenter de v´ erification approch´ ee : le r´ esultat fourni sera soit “la propri´ et´ e est satisfaite”, soit “je ne sais pas”. Dans ce domaine, les principales approches rel` event de l’interpr´ etation abstraite, une th´ eorie g´ en´ erale propos´ ee d` es 1977 [CC77], th´ eorie qui a ´ et´ e tr` es tˆ ot instanci´ ee pour l’analyse de propri´ et´ es num´ eriques [CC76, CH78, Hal79a, Gra89]. Parmi ces analyses, l’analyse de relations lin´ eaires [CH78, Hal79a]

consiste ` a calculer, en chaque point de contrˆ ole d’un programme imp´ eratif, un syst` eme de contraintes lin´ eaires (´ egalit´ es et in´ egalit´ es) toujours satisfaites par les variables du programme lorsque le contrˆ ole est en ce point.

Quoique ancienne, cette analyse continue d’ˆ etre utilis´ ee [LMQ91, ACIK97, HPR97].

Les invariants lin´ eaires construits par l’analyse sont utilis´ es, en v´ erification, pour montrer l’inaccessibilit´ e de certains points de contrˆ ole (ce qui est suffisant pour v´ erifier toutes les propri´ et´ es de sˆ uret´ e, cf. §2.3.5). Mais ces invariants ne sont pas utilis´ es seulement

1

(9)

2 CHAPITRE 1. INTRODUCTION

en v´ erification : en compilation, ils peuvent servir ` a d´ eterminer statiquement l’absence d’erreur ` a l’ex´ ecution (indices de tableaux, par exemple) et ` a optimiser le code produit ; en parall´ elisation automatique [IJT91], ils permettent d’analyser finement les d´ ependances entre ´ el´ ements de tableaux ; en preuve formelle [BBC

+

00, BLO98], ils constituent une aide pr´ ecieuse dans la recherche d’invariants inductifs.

L’analyse de relations lin´ eaires est aussi encore l’objet d’´ etudes et d’am´ eliorations [JHR99, BRZH02, BHRZ03, SSM05], concernant les performances et/ou la pr´ ecision de l’analyse. Notre travail vise ` a en am´ eliorer les performances sans perte de pr´ ecision.

L’analyse de relations lin´ eaires consiste essentiellement ` a propager des syst` emes de contraintes lin´ eaires le long des chemins d’ex´ ecution d’un programme. Cette propagation fait donc appel ` a une algorithmique des syst` emes lin´ eaires, ou, de mani` ere ´ equivalente, des poly` edres convexes. Les algorithmes cl´ es concernent l’intersection des poly` edres, leur enveloppe convexe (i.e., le plus petit poly` edre convexe contenant deux ou plusieurs poly` edres, et qui est utilis´ e comme approximation de leur union), et la minimisation de leur repr´ esentation. Dans la plupart des impl´ ementations, ces op´ erations sont ef- fectu´ ees grˆ ace ` a la double description des poly` edres : un poly` edre peut ˆ etre repr´ esent´ e par un syst` eme de contraintes lin´ eaires, mais aussi par un syst` eme g´ en´ erateur , compos´ e de ses sommets et de ses rayons extrˆ emes. Selon l’op´ eration ` a effectuer, l’une ou l’autre des repr´ esentations est pr´ ef´ erable. Par ailleurs, la connaissance des deux repr´ esentations permet de les minimiser.

Un probl` eme s´ erieux pos´ e par la double description est que la taille de chacune des repr´ esentations peut croˆıtre exponentiellement par rapport ` a celle de l’autre, quand la dimension de l’espace croˆıt. Par exemple, un hypercube en dimension n, d´ efini par les contraintes {0 ≤ x

i

≤ 1, i = 1..n}, a 2n contraintes, mais 2

n

sommets. En cons´ equence, la dimension de l’espace, c’est-` a-dire le nombre des variables du programme, a une influence tr` es importante sur les performances de l’analyse.

Un autre probl` eme, plus technique, pos´ e par le nombre des variables, concerne la repr´ esentation des nombres : pour ´ eviter les probl` emes d’impr´ ecision dus aux calculs en nombres flottants, les biblioth` eques de manipulation de poly` edres op` erent g´ en´ eralement sur les rationnels. Pour ´ eviter alors le doublement de la taille m´ emoire, les coefficients d’une mˆ eme contrainte, comme les composantes d’un mˆ eme vecteur, sont r´ eduits au mˆ eme d´ enominateur qui n’est stock´ e qu’une fois. Mais lorsque le nombre des variables augmente, ce d´ enominateur doit ˆ etre commun ` a un nombre croissant de coefficients, ce qui entraˆıne une explosion en taille des nombres manipul´ es.

L’objectif de ce travail est de proposer des techniques pour r´ eduire le nombre de variables dans les manipulations des poly` edres. Il existe pour cela des techniques bien connues en analyse de programmes :

– La d´ etermination pr´ ecise des zones de vie (“life range” [Muc97]) des variables : en

un point de contrˆ ole du programme ` a partir duquel sur tout chemin d’ex´ ecution, une

variable x sera affect´ ee (d’une expression ind´ ependant de x) avant d’ˆ etre utilis´ ee,

ou alors ne sera plus jamais utilis´ ee, la valeur de x n’a pas d’importance pour

l’ex´ ecution du programme. On peut donc “oublier” la variable x en ce point.

(10)

3

– Le tranchage (“slicing” [Tip95]) : Il s’agit de d´ eterminer les ´ el´ ements (instructions, variables) du programme qui peuvent influencer la propri´ et´ e que l’on cherche ` a prouver (g´ en´ eralement l’inaccessibilit´ e d’un ou plusieurs points de contrˆ ole). Le tranchage consiste ` a ne garder du programme que les fragments pertinents vis-` a- vis de la propri´ et´ e ` a prouver.

Ces solutions consistent ` a tenir compte du programme analys´ e, et doivent ´ evidemment ˆ etre appliqu´ ees avant toute analyse risquant d’ˆ etre coˆ uteuse. Mais nous allons nous int´ eresser ` a d’autres techniques de r´ eduction du nombre des variables, qui, elles, ne d´ ependront plus du programme analys´ e (` a l’exception de l’une d’entre-elles), mais s’ap- pliqueront au niveau des op´ erations sur les poly` edres.

Une premi` ere id´ ee consiste ` a utiliser des ´ equations affines satisfaites par les poly` edres pour “tirer” une variable de chaque ´ equation. C’est l’approche d´ ecrite au Chapitre 6. Pour connaˆıtre ` a l’avance des ´ equations affines invariantes, et les utiliser ainsi, une premi` ere solution est d’appliquer la m´ ethode propos´ ee par Karr [Kar76], qui d´ eduit ces ´ equations d’une analyse pr´ ealable du programme. Cette approche s’av´ erant peu satisfaisante du fait du faible nombre d’´ equations invariantes trouv´ ees, nous utiliserons les op´ erateurs de Karr pour pr´ evoir pas-` a-pas les ´ equations satisfaites par le r´ esultat d’une op´ eration : l’avantage est que l’on peut utiliser des ´ equations satisfaites temporairement, ` a une ´ etape de l’analyse, et qui sont bien plus nombreuses que les ´ equations r´ eellement invariantes.

Une deuxi` eme id´ ee, plus prometteuse en termes de gain de performances, est de d´ etecter quand un poly` edre est en fait un produit cart´ esien de poly` edres de dimensions plus petites, c’est-` a-dire quand les variables peuvent ˆ etre partitionn´ ees en plusieurs classes ind´ ependantes (i.e., les contraintes du poly` edre ne liant pas des variables de classes diff´ erentes). L’exemple des hypercubes mentionn´ e ci-dessus sugg` ere que le traitement s´ epar´ e des termes d’un produit cart´ esien peut conduire ` a une r´ eduction logarithmique de la taille des syst` emes g´ en´ erateurs : un hypercube en dimension n peut ˆ etre vu comme le produit cart´ esien de n intervalles en dimension 1, et ses 2

n

sommets se d´ eduisent des 2n sommets (extr´ emit´ es) des intervalles. Cette id´ ee est d´ evelopp´ ee au chapitre 7. Les probl` emes trait´ es concernent la d´ etection des produits cart´ esiens, et l’adaptation des op´ erations pour op´ erer sur des produits cart´ esiens.

La factorisation en produits cart´ esien est ´ evidemment fortement d´ ependante du choix des variables dans le programme source : un hypercube sera bien factoris´ e dans une base ad´ equate, mais un simple changement de variables peut faire disparaˆıtre la factorisation.

Au chapitre 8, nous proposerons un algorithme simple pour trouver la base la plus favorable, et diminuer ainsi la d´ ependance entre les performances de l’analyse et le choix des variables du programme.

Ce travail repose sur un pr´ erequis important qu’il nous faut d’abord rappeler. Le

chapitre 2 a pour but de fixer les notions et notations relatives aux programmes — que

nous consid´ ererons simplement comme des automates interpr´ et´ es —, ` a leur s´ emantique,

leurs propri´ et´ es et les m´ ethodes de v´ erification. Le chapitre 3 est un rappel des principes

de l’interpr´ etation abstraite, en mettant l’accent sur les applications concernant les pro-

pri´ et´ es num´ eriques. Le chapitre 4 expose de fa¸con d´ etaill´ ee les algorithmes classiques sur

(11)

4 CHAPITRE 1. INTRODUCTION

les poly` edres, n´ ecessaires ` a la mise en oeuvre de l’analyse de relations lin´ eaires.

Pour ´ evaluer exp´ erimentalement l’effet des techniques que nous proposons, nous avons du d´ evelopper un nouvel analyseur de programmes qui est d´ ecrit au chapitre 5. En effet, l’analyseur de programmes Lustre existant pr´ ec´ edemment (l’outil Nbac de Bertrand Jeannet [Jea00]) est trop sophistiqu´ e — il prend en charge, en particulier, la d´ ecouverte d’une structure de contrˆ ole ad´ equate, en fonction de la propri´ et´ e ` a v´ erifier — pour permettre d’´ etudier simplement les performances des op´ erations sur les poly` edres, la part des ces op´ erations dans le coˆ ut total de l’analyse ´ etant trop faible. Nous avons donc programm´ e un prototype simple qui s’appuie sur la structure de contrˆ ole de l’automate produit par les compilateurs des langages synchrones Lustre et Esterel .

L’impl´ ementation de nos nouvelles techniques de manipulation des poly` edres est d´ ecrite au chapitre 9, ainsi que les exp´ erimentations que nous avons men´ ees. Ces exp´ erimentations donnent des r´ esultats tr` es d´ ecevants concernant l’utilisation des

´ equations affines, mais bien plus int´ eressants pour la factorisation cart´ esienne et le

changement de base. La conclusion g´ en´ erale est donc que ces deux derni` eres techniques

m´ eritent d’ˆ etre int´ egr´ ees aux biblioth` eques de poly` edres existantes. Nous conclurons par

quelques perspectives.

(12)

Chapitre 2

Mod` eles, Programmes, V´ erification

Dans ce chapitre, nous allons fixer les principales d´ efinitions et notations li´ ees aux programmes, ` a leur s´ emantique, et aux propri´ et´ es que l’on veut v´ erifier ` a leur propos.

Nous introduirons d’abord les syst` emes de transitions (§2.1), qui constituent le mod` ele s´ emantique classique des programmes, puis nous d´ efinirons les propri´ et´ es (§2.2) de ces syst` emes, et la probl´ ematique g´ en´ erale de la v´ erification. Au §2.3, nous introduirons les automates interpr´ et´ es, choisis comme mod` ele de programmes tr` es g´ en´ eral.

2.1 Mod` ele s´ emantique : Les syst` emes de transitions

Les syst` emes de transitions constituent le mod` ele s´ emantique classique des pro- grammes. Nous fixons ici les d´ efinitions et notations relatives aux syst` emes de transitions.

D´ efinition 2.1 (Syst` eme de transitions)

Un syst` eme de transitions est un triplet (Q, →, Q

init

) o` u Q est un ensemble d’´ etats, Q

init

⊆ Q est un sous-ensemble d’´ etats appel´ es “´ etats initiaux”, et →⊆ Q × Q est une relation binaire sur Q, appel´ ee “relation de transition”.

On notera g´ en´ eralement q → q

0

le fait que (q, q

0

) ∈→.

D´ efinition 2.2 (Etat successeur, ´ etat pr´ ed´ ecesseur)

Un ´ etat q

0

(respectivement q) est successeur (respectivement pr´ ed´ ecesseur) d’un ´ etat q (respectivement q

0

) si q → q

0

.

D´ efinition 2.3 (Chemin, trace)

Un chemin de l’´ etat q ` a l’´ etat q

0

est une suite (q

0

, ..., q

n

) telle que q = q

0

, q

0

= q

n

et

∀i < n, q

i

→ q

i+1

. Une trace est un chemin qui a pour origine un ´ etat de Q

init

. D´ efinition 2.4 (Etat accessible depuis q, co-accessible depuis q

0

)

Un ´ etat q

0

(resp. q) est accessible (resp. co-accessible) depuis un ´ etat q (resp. q

0

) si il existe un chemin entre q et q

0

(i.e., si q et q

0

sont reli´ es par la fermeture transitive de

→).

5

(13)

6 CHAPITRE 2. MOD ` ELES, PROGRAMMES, V ´ ERIFICATION

2.2 V´ erification

Nous nous pla¸cons dans le cadre de la v´ erification de propri´ et´ es (par opposition, par exemple, ` a la comparaison de programmes [BRdSV89, Fer90]). Plus sp´ ecifiquement, nous consid´ ererons une s´ emantique lin´ eaire (par opposition, par exemple, aux s´ emantiques arborescentes [Lam80]) : un comportement d’un syst` eme de transitions est une trace, une propri´ et´ e est un ensemble de traces. Enfin, nous nous int´ eresserons essentiellement aux propri´ et´ es de sˆ uret´ e.

2.2.1 Propri´ et´ es

Nous consid´ ererons donc qu’une propri´ et´ e d’un syst` eme de transitions est un ensemble de traces. Dans ce paragraphe, nous supposerons toutes ces traces infinies. Soit Q

ω

l’en- semble des suites infinies d’´ etats de Q. Il est classique [Lam77, AS87] de distinguer deux grands types de propri´ et´ es, principalement parce que leur v´ erification fait appel ` a des techniques diff´ erentes : informellement,

– une propri´ et´ e de sˆ uret´ e exprime que “quelque chose de mauvais” ne se produit jamais au cours de l’ex´ ecution ;

– une propri´ et´ e de vivacit´ e exprime que “quelque chose de bon” se produit imman- quablement durant l’ex´ ecution du syst` eme.

La violation d’une propri´ et´ e de sˆ uret´ e est d´ etectable par une ex´ ecution finie. En effet, si une trace σ = (q

0

, q

1

, . . .) viole la propri´ et´ e, alors il existe un ´ etat q

i

de σ o` u “quelque chose de mauvais” se produit et cela est irr´ em´ ediable car la propri´ et´ e suppose que cela n’arrive jamais. Donc toute trace ayant (q

0

, q

1

, . . . , q

i

) (not´ e σ[. . . i]) comme pr´ efixe, viole la propri´ et´ e. Une trace satisfait la propri´ et´ e de sˆ uret´ e P si et seulement si tous ses pr´ efixes finis v´ erifient P , ou, plus exactement, si tous ses pr´ efixes finis sont prolongeables en une trace v´ erifiant P :

1

D´ efinition 2.5 (Propri´ et´ e de sˆ uret´ e)

P ⊆ Q

ω

est une propri´ et´ e de sˆ uret´ e si et seulement si σ ∈ P ⇐⇒ ∀i ≥ 0, ∃σ

0

∈ Q

ω

telle que σ[. . . i].σ

0

∈ P

o` u σ[. . . i] d´ enote la suite finie des i premiers termes de σ, et ou “.” d´ enote la concat´ enation des suites.

Des exemples classiques de propri´ et´ es de sˆ uret´ e sont l’exclusion mutuelle ou l’absence de bloquage.

Si P est une propri´ et´ e de vivacit´ e, aucune ex´ ecution finie n’est irr´ em´ ediablement mauvaise, puisque “quelque chose de bon” peut toujours survenir dans le futur. Toute ex´ ecution finie est prolongeable en une trace satisfaisant P :

1C’est pourquoi, dans la suite, on parlera souvent de la satisfaction d’une propri´et´e de sˆuret´e par une tracefinie.

(14)

2.2. V ´ ERIFICATION 7

D´ efinition 2.6 (Propri´ et´ e de vivacit´ e)

P ⊆ Q

ω

est une propri´ et´ e de vivacit´ e si et seulement si

∀σ ∈ Q

, ∃σ

0

∈ Q

ω

, telle que σ[. . . i].σ

0

∈ P

Un exemple classique de propri´ et´ e de vivacit´ e est la terminaison de programme.

Dans la suite, on ne s’int´ eresse qu’` a la v´ erification de propri´ et´ es de sˆ uret´ e. Nous verrons au §2.3.5 que ces propri´ et´ es se ram` enent au cas, plus simple, des propri´ et´ es d’accessibilit´ e.

2.2.2 Accessibilit´ e et V´ erification

Nous avons vu ci-dessus qu’une propri´ et´ e de sˆ uret´ e exprime que “quelque chose de mauvais ne se produit jamais”. Les propri´ et´ es d’accessibilit´ e constituent un sous- ensemble, o` u l’on exprime qu’un certain ensemble d’´ etats — repr´ esentant “quelque chose de mauvais”, et que nous noterons Q

err

— ne peuvent pas ˆ etre atteints. Leur v´ erification fait appel au calcul des ´ etats accessibles (depuis les ´ etats initiaux Q

init

) ou coaccessibles (depuis les ´ etats d’erreur Q

err

).

On introduit quelques d´ efinitions classiques relatives ` a l’accessibilit´ e. Soit X un sous- ensemble de Q.

D´ efinition 2.7 (Postconditions, Pr´ econditions) On note :

– P ost(X) = {q

0

∈ Q|∃q ∈ X, q → q

0

}, – P re(X) = {q ∈ Q|∃q

0

∈ X, q → q

0

},

P ost(X) (resp. P re(X) ) est l’ensemble des ´ etats successeurs (resp. pr´ ed´ ecesseurs) d’un ´ etat de X.

D´ efinition 2.8 (Etats accessibles, ´ etats co-accessibles)

On note acc(X) (resp. coacc(X)) l’ensemble de tous les ´ etats accessibles (resp. co- accessibles) depuis un ´ etat de X. Il est bien connu que acc(X) (resp. coacc(X)) est la plus petite solution de l’´ equation de point fixe Y = X ∪ Post(Y) (resp. Y = X∪Pre(Y)).

On a donc :

acc(X) = [

n≥0

P ost

n

(X) coacc(X) = [

n≥0

P re

n

(X)

A l’´ evidence, la v´ erification d’une propri´ et´ e d’accessibilit´ e peut ˆ etre effectu´ ee de deux mani` eres :

– en calculant acc(Q

init

), et en v´ erifiant que acc(Q

init

) ∩ Q

err

= ∅

– en calculant coacc(Q

err

), et en v´ erifiant que Q

init

∩ coacc(Q

err

) = ∅

(15)

8 CHAPITRE 2. MOD ` ELES, PROGRAMMES, V ´ ERIFICATION

Le coeur du probl` eme de la v´ erification des propri´ et´ es d’accessiblit´ e est donc le calcul de points-fixes. Dans certains cas, ce calcul peut-ˆ etre effectu´ e exactement : on parle, dans ce cas, de “model-checking ” [QS82, CES86]. Mais dans le cas g´ en´ eral, on ne sait calculer automatiquement que des approximations des points-fixes ; on parle alors de v´ erification conservative.

2.2.3 Model checking

Le model checking concerne essentiellement les syst` emes ` a nombre fini d’´ etats. Dans ce cas, il est clair que les calculs it´ eratifs de points-fixes convergent toujours, et que toutes les propri´ et´ es sont, th´ eoriquement, d´ ecidables. Les travaux sur le model checking ont concern´ e d’une part la v´ erification de propri´ et´ es tr` es g´ en´ erales — aussi bien de sˆ uret´ e que de vivacit´ e, avec une s´ emantique lin´ eaire aussi bien qu’arborescente — et d’autre part, les techniques permettant de prendre en compte de tr` es grand ensembles d’´ etats.

La v´ erification ´ etant exacte, sa conclusion consiste soit en un verdict de satisfaction de la propri´ et´ e, soit en un verdict d’erreur qui peut alors ˆ etre accompagn´ e d’un contre-exemple.

Par ailleurs, le model checking est aussi utilis´ e dans le cas de syst` emes d’´ etats infinis, lorsqu’on sait abstraire ceux-ci (en ignorant certains aspects) en des syst` emes finis [GL93, CGL94]. On parle dans ce cas de model checking abstrait. Notons qu’en cas d’´ echec, ce type de v´ erification ne peut conclure ` a la non-satisfaction de la propri´ et´ e, puisque l’´ echec peut ˆ etre du aux abstractions effectu´ ees.

2.2.4 V´ erification conservative

Si tous les types de propri´ et´ es n´ ecessitent des calculs de points-fixes, dans le cas des propri´ et´ es d’accessiblit´ e, on peut se contenter de calculs approch´ es : si l’on calcule un sur-ensemble de acc(Q

init

) (resp., de coacc(Q

err

)) et que celui-ci n’intersecte pas Q

err

(resp. Q

init

), la propri´ et´ e est certainement satisfaite. Par contre, si l’intersection est non vide, on ne peut savoir si la propri´ et´ e est viol´ ee ou si la sur-approximation utilis´ ee est trop grossi` ere. Inversement, si l’on calcule un sous-ensemble de acc(Q

init

) (resp., de coacc(Q

err

)) et que celui-ci intersecte Q

err

(resp. Q

init

), la propri´ et´ e est certainement viol´ ee. Dans les deux cas, on parlera de v´ erification conservative : en cas de succ` es, la v´ erification fournit un r´ esultat garanti, mais en cas d’´ echec, la v´ erification est inconclu- sive.

L’approximation de points-fixes est le th` eme central de la th´ eorie de l’interpr´ etation abstraite, que nous rappellerons au chapitre 3.

2.3 Mod` eles de programmes

Les syst` emes de transitions constituent un mod` ele de tr` es bas niveau. Nous aurons

besoin d’un mod` ele de programme de plus haut niveau, mais, pour ne pas nous baser

sur un langage de programmation particulier, nous choisirons un mod` ele relativement

(16)

2.3. MOD ` ELES DE PROGRAMMES 9

abstrait et g´ en´ eral : les automates interpr´ et´ es. Ceux-ci peuvent ˆ etre la cible de traducteurs de langages particuliers (voir §5.2.2). Nous donnerons au §2.3.2 une s´ emantique des automates interpr´ et´ es en termes de syst` emes de transitions. C’est ´ egalement au niveau des automates interpr´ et´ es que nous d´ efinirons la traduction d’une propri´ et´ e de sˆ uret´ e en propri´ et´ e d’accessibilit´ e (§2.3.5).

2.3.1 Automates interpr´ et´ es

Un automate interpr´ et´ e sera constitu´ e d’un ensemble de points de contrˆ ole (dont un point initial), ` a chacun desquels est associ´ e un ensemble de commandes gard´ ees, agissant sur des variables, et menant ` a d’autres points de contrˆ ole.

Soit Var un ensemble fini de variables typ´ ees, Valeur l’ensemble des valeurs de ces variables (i.e., l’union des ensembles de valeurs de leurs types). Une valuation est une fonction de Var dans Valeur, associant ` a chaque variable une valeur de son type. Soit Val

Var

(ou simplement Val) l’ensemble des valuations sur Var.

Soit K un ensemble fini, dont les ´ el´ ements seront appel´ es points de contrˆ ole.

D´ efinition 2.9 (Garde, action, commande gard´ ee)

– Une garde est une fonction g : Val → {vrai, faux}, donnant la valeur d’une formule logique sur une valuation V . Dans la pratique, on assimile la garde ` a son ensemble de v´ erit´ e : {V | g(V ) = vrai}. On note Gardes l’ensemble des gardes.

– Une action est une relation binaire sur les valuations (⊆ Val × Val). On note Act l’ensemble des actions possibles.

– Une commande est un quadruplet (k, g, a, k

0

) ∈ K×Gardes×Act×K. Intuitivement, lorsque le contrˆ ole de l’automate est en k, et si la valuation courante V satisfait la garde g (i.e., g(V ) = vrai), l’ex´ ecution de la commande fait passer au point de contrˆ ole k

0

, avec une valuation V

0

telle que (V, V

0

) ∈ a.

Les actions consid´ er´ ees peuvent donc ˆ etre non d´ eterministes. En particulier, une ac- tion de lecture (not´ ee x := ? ou lire(x)) associe ` a une valuation V toute valuation V

0

qui ne diff` ere de V que par la valeur de x (autrement dit, x prend une valeur quelconque).

Certaines variables (variables d’entr´ ee) peuvent ˆ etre ainsi compl` etement non sp´ ecifi´ ees.

D´ efinition 2.10 (Automate interpr´ et´ e)

Un automate interpr´ et´ e est un triplet (K, Com, k

init

), o` u K est un ensemble fini de points de contrˆ ole, Com est un ensemble fini de commandes, et k

init

∈ K est le point de contrˆ ole initial.

2.3.2 S´ emantique en termes de syst` emes de transitions

On donne la s´ emantique des automates interpr´ et´ es en termes de syst` emes de transi-

tions. Soit (K, Com, k

init

) un automate interpr´ et´ e. On lui associe un syst` eme de transi-

tions (Q, →, Q

init

) d´ efini comme suit :

(17)

10 CHAPITRE 2. MOD ` ELES, PROGRAMMES, V ´ ERIFICATION

– L’ensemble des ´ etats est l’ensemble des couples (k, V ), o` u k est un point de contrˆ ole et V une valuation : Q = K × Val.

– Les ´ etats initiaux ont k

init

pour point de contrˆ ole, et n’importe quelle valuation : Q

init

= {k

init

} × Val.

– La relation de transition ob´ eit ` a la s´ emantique des commandes :

(k, V ) → (k

0

, V

0

) ⇐⇒ ∃(k, g, a, k

0

) ∈ Com ∧ g(V ) = vrai ∧ (V, V

0

) ∈ a

2.3.3 Exemple

On va illustrer la mod´ elisation d’un programme par un automate interpr´ et´ e sur un tout petit exemple, tir´ e de [Hal93]. On veut mod´ eliser une voiture :

1. dont la vitesse est inf´ erieure ou ´ egale ` a 2 m/s 2. qui s’arrˆ ete en 4 secondes

3. et percute un mur apr` es 10 m` etres

Il s’agira, bien sˆ ur, plus tard, de montrer que, sous les hypoth` eses (1) et (2), la voiture s’arrˆ ete avant le mur !

Le programme de simulation prend 2 entr´ ees bool´ eennes “m` etre” et “seconde” (vraies lorsque l’´ ev´ enement correspondant est per¸cu ; les ´ ev´ enements sont suppos´ es non si- multan´ es). Le programme compte la distance parcourue (“distance”, un compteur de

“m` etre”), le temps ´ ecoul´ e (“temps”, un compteur de “seconde”), et la vitesse instan- tan´ ee (“vitesse”, un compteur de “m` etre” r´ einitialis´ e chaque “seconde”) et d´ etermine si la voiture roule trop vite, s’arrˆ ete, ou percute le mur.

L’automate correspondant est repr´ esent´ e Fig 2.1. Il se trouve que, ce syst` eme ´ etant d’´ etats finis, on peut repr´ esenter le syst` eme de transitions correspondant (cf. Fig. 2.2).

Sur ce syst` eme de transitions, il est facile de v´ erifier que l’´ etat “Mur” est inaccessible.

If (seconde) temps = temps+1

Mur Arret

distance = distance+1 vitesse = vitesse+1 If (metre )

Trop vite

distance = 0 temps = 0

vitesse = 0 vitesse = 0

metre ? seconde ?

If (vitesse≥3)

If (temps≥4) K

0

If (distance≥10)

lire(metre) ; lire(seconde) lire(metre) ; lire(seconde)

Fig. 2.1 – Automate interpr´ et´ e simulant l’exemple de la voiture

(18)

2.3. MOD ` ELES DE PROGRAMMES 11

2 1 1

5 3 2 4 3 1 3 3 0 3 2 2 0 0 0

0 2 0 0 3 0 1 3 1 2 3 2

1 2 1

2 2 2 2 3 0 3 3 1 4 3 2

3 3 2 2 3 1 1 3 0 1 2 0

2 2 1 1 1 1

2 1 2

3 2 2 3 3 0 4 3 1 5 3 2 0 1 0

1 0 1 2 0 2

1 1 0 2 1 0

2 2 0 3 1 1

4 1 2 5 2 1

4 2 0

6 2 2 6 3 0 7 3 1 8 3 2

5 3 0 6 3 1 7 3 2

5 2 2 5 3 0 6 3 1 7 3 2 4 2 1

4 3 0 5 3 1 6 3 2 3 2 0

3 3 0 4 3 1 5 3 2

6 3 2

2 3 0 3 3 1 4 3 2

2 2 0

6 3 2 5 3 1 4 3 0 4 2 2

5 3 2 4 3 1 3 3 0 3 2 1

4 3 2 3 3 1 2 3 0

3 2 1 4 2 2 4 3 0 5 3 1 metre

Stop

Mur Trop Vite seconde

distance temps vitesse

Fig. 2.2 – Syst` eme de transitions correspondant ` a l’exemple de la voiture

Remarques :

– Cet exemple ´ etant d’´ etats finis, le model checking est utilisable.

– Si les constantes apparaissant dans les hypoth` eses (2 m/s, 4 sec., 10m) augmentent,

le nombre d’´ etats du syst` eme de transitions tend ` a exploser, rendant le model che-

cking probl´ ematique. Si ces constantes sont des param` etres, donn´ es symbolique-

ment, l’utilisation du model checking devient impossible.

(19)

12 CHAPITRE 2. MOD ` ELES, PROGRAMMES, V ´ ERIFICATION

2.3.4 Une autre s´ emantique

Pour v´ erifier une propri´ et´ e d’accessibilit´ e d’un automate interpr´ et´ e, il va falloir calcu- ler, ou approximer, soit l’ensemble acc({k

init

} × Val) des ´ etats accessibles du syst` eme de transitions associ´ e, soit l’ensemble coacc({k

err

} × Val) des ´ etats co-accessibles, en suppo- sant que les ´ etats d’erreur sont caract´ eris´ es par un point de contrˆ ole, k

err

(dans l’exemple de la voiture, il s’agit du point de contrˆ ole “Mur’).

Pour cela, au lieu d’appliquer brutalement la s´ emantique d´ efinie au §2.3.2, on peut chercher ` a tirer parti de la structure de contrˆ ole de l’automate pour d´ ecomposer le probl` eme.

Pour tout k ∈ K, notons A

k

(resp., C

k

) l’ensemble des valuations accessibles (resp., co-accessibles) au point k :

A

k

= {V | (k, V ) ∈ acc({k

init

} × Val)} , C

k

= {V | (k, V ) ∈ coacc({k

err

} × Val)}

On a, ´ evidemment

acc({k

init

} × Val) = [

k∈

K

A

k

, coacc({k

err

} × Val) = [

k∈

K C

k

Alors, on peut caract´ eriser les A

k

(resp., les C

k

) comme plus petites solutions d’un syst` eme d’´ equations s´ emantiques “en avant” (resp., “en arri` ere”) d´ efini comme suit :

– Syst` eme “en avant” :

∀k 6= k

init

, A

k

= [

<k0,g,a,k>∈

Com

a(A

k0

∩ g) , A

kinit

= Val (2.1)

o` u a(X) = {V

0

| ∃V ∈ X, (V, V

0

) ∈ a}

– Syst` eme “en arri` ere” :

∀k 6= k

err

, C

k

= [

<k,g,a,k0>∈

Com

a

(C

k0

) ∩ g , C

kerr

= Val (2.2)

o` u a

(X) = {V | ∃V

0

∈ X, (V, V

0

) ∈ a}

Intuitivement, en tout point k non initial, une valuation V accessible en k est obtenue par ex´ ecution d’une commande < k

0

, g, a, k > sur une valuation V

0

accessible en k

0

, satisfaisant g, et reli´ ee ` a V par a ((V

0

, V ) ∈ a). De mˆ eme, en tout point k diff´ erent du but k

err

, une valuation V co-accessible en k doit mener, par l’ex´ ecution d’une commande

< k, g, a, k

0

>, ` a une valuation V

0

co-accessible en k

0

, c’est-` a-dire que V doit satisfaire g, et que (V, V

0

) doit appartenir ` a a.

L’avantage de cette s´ emantique (souvent appel´ ee “collecting s´ emantics”) est qu’on

obtient un syst` eme d’´ equations de points-fixe, au lieu d’un ´ equation unique. Nous verrons

au chapitre 3 que ce partitionnement permet d’am´ eliorer de mani` ere tr` es importante la

pr´ ecision des calculs dans le cas d’un calcul approch´ e de la solution.

(20)

2.3. MOD ` ELES DE PROGRAMMES 13

2.3.5 Composition des automates interpr´ et´ es et observateurs

Le but de cette section est de montrer comment les propri´ et´ es de sˆ uret´ e peuvent se ramener ` a des propri´ et´ es d’accessibilit´ e, grˆ ace ` a la notion d’“observateur synchro- ne” [HLR93]. L’id´ ee est d’associer ` a une propri´ et´ e de sˆ uret´ e un automate interpr´ et´ e appel´ e observateur, qui va fonctionner comme un reconnaisseur des traces satisfaisant la propri´ et´ e. Compos´ e de mani` ere ad´ equate (c’est ` a dire en parall´ elisme synchrone) avec l’automate ` a v´ erifier, l’observateur d´ etecte toute violation de la propri´ et´ e en rejoignant un point de contrˆ ole d’erreur. Ainsi, la v´ erification consiste ` a s’assurer que la composition de l’automate initial avec son observateur ne peut pas atteindre un ´ etat o` u l’observateur est ` a son point d’erreur, ce qui est une propri´ et´ e d’accessibilit´ e.

Nous d´ efinissons d’abord la composition parall` ele synchrone sur les automates in- terpr´ et´ es : intuitivement, compos´ es en parall` ele synchrone, deux automates vont ex´ ecuter des commandes ensemble, ` a condition que les valeurs des variables co´ıncident des deux cot´ es — l’id´ ee ´ etant qu’une variable est soit locale ` a un automate (et donc laiss´ ee non sp´ ecifi´ ee par l’autre), soit calcul´ ee par un automate et lue (et donc laiss´ ee non sp´ ecifi´ ee) par l’autre.

D´ efinition 2.11 (Produit synchrone)

Le produit synchrone A × A

0

de deux automates interpr´ et´ es A = (K, Com, k

init

) et A

0

= (K

0

, Com

0

, k

init0

) est l’automate (K × K

0

, Com

×

, (k

init

, k

0init

) o` u

Com

×

= {((k

1

, k

10

), g ∧ g

0

, a ∩ a

0

, (k

2

, k

02

)) | (k

1

, g, a, k

2

) ∈ Com, (k

10

, g

0

, a

0

, k

20

) ∈ Com

0

} Autrement dit, une commande du produit ` a partir d’un ´ etat compos´ e (k

1

, k

10

) consiste en la composition (synchrone) d’une commande de chaque composant : la composition synchrone de deux commandes (g, a) et (g

0

, a

0

) sur une valuation V n’est possible que si les deux gardes sont satisfaites ((g ∧ g

0

)(V )), et son r´ esultat V

0

est un r´ esultat commun des deux actions ((V, V

0

) ∈ (a ∩ a

0

)).

Soit A un automate interpr´ et´ e, agissant sur un ensemble de variables Var. Soit P une propri´ et´ e de sˆ uret´ e.

D´ efinition 2.12 (Observateur)

Un observateur de P est un automate interpr´ et´ e O agissant sur un ensemble de variables Var ∪ Var

0

, avec Var ∩ Var

0

= ∅, et tel que

– les variables de Var sont laiss´ ees non sp´ ecifi´ ees dans O

– O poss` ede un point de contrˆ ole distingu´ e, not´ e k

err

, que l’automate rejoint (et ne quitte plus jamais) si et seulement si l’´ evolution des variables de Var viole P . Formellement, consid´ erons (< k

0

, V

0

] V

00

>, < k

1

, V

1

] V

10

>, . . . , < k

n

, V

n

] V

n0

) une trace de O ; alors

k

n

6= k

err

⇐⇒ (V

0

, V

1

, . . . , V

n

) ∈ P

Proposition 1 Si O est un observateur de P , alors A satisfait P si et seulement si

A × O n’atteint jamais un ´ etat de K

err

= {(k, k

err

) | k ∈ K}.

(21)

14 CHAPITRE 2. MOD ` ELES, PROGRAMMES, V ´ ERIFICATION

Ainsi, toute propri´ et´ e de sˆ uret´ e dont on sait fournir un observateur, peut ˆ etre trans-

form´ ee en propri´ et´ e d’accessibilit´ e. C’est la m´ ethode classique, en particulier, pour

sp´ ecifier les propri´ et´ es de sˆ uret´ e en programmation synchrone.

(22)

Chapitre 3

Interpr´ etation Abstraite

3.1 Introduction

Dans le chapitre pr´ ec´ edent, nous avons vu quels types de syst` emes et quelles propri´ et´ es nous voulons v´ erifier. En particulier, nous avons vu

– comment une propri´ et´ e de sˆ uret´ e pouvait ˆ etre traduite en une propri´ et´ e d’accessi- bilit´ e (§2.3.5),

– comment la v´ erification d’une propri´ et´ e d’accessibilit´ e se ramenait ` a un calcul d’en- semble d’´ etats accessibles acc(Q

init

) ou co-accessibles coacc(Q

err

) (§2.2.2),

– enfin, que ces ensembles d’´ etats ´ etaient solutions d’´ equations de points-fixes (§2.2.2) acc(Q

init

) = Q

init

∪ P ost(acc(Q

init

)) coacc(Q

err

) = Q

err

∪ P re(coacc(Q

err

)) ou de syst` emes d’´ equations de points-fixes (§2.3.4)

n

A

k

= S

<k0,g,a,k>∈

Com a(A

k0

∩ g) o

k6=kinit

, A

kinit

= Val n

C

k

= S

<k,g,a,k0>∈

Com a

(C

k0

) ∩ g o

k6=kerr

, C

kerr

= Val

Les th´ eor` emes classiques nous assurent que les ´ equations de points fixes consid´ er´ ees ont bien des plus petites solutions, lesquelles sont bien caract´ eris´ ees : d’apr` es le th´ eor` eme de Kleene, l’´ equation X = F (X) — o` u F est une fonction continue d’un treillis complet dans lui-mˆ eme — a une plus petite solution

lfp(F ) = G

n≥0

F

n

(⊥) (3.1)

o` u t est l’op´ eration de borne sup´ erieure, et ⊥ est le plus petit ´ el´ ement du treillis complet.

Dans le cas qui nous int´ eresse, le treillis complet est l’ensemble des parties de Q, ordonn´ e par l’inclusion, l’op´ eration de borne sup´ erieure est l’union des ensembles d’´ etats, et le plus petit ´ el´ ement est l’ensemble vide.

En g´ en´ eral, la r´ esolution de l’´ equation (3.1) est impossible. Lorsque l’ensemble Q des ´ etats du syst` eme est infini, le calcul des it´ er´ es F (⊥), F (F (⊥)), F (F (F (⊥))), . . . pose deux types de probl` emes :

15

(23)

16 CHAPITRE 3. INTERPR ´ ETATION ABSTRAITE

– il faut savoir savoir repr´ esenter des ensembles arbitraires d’´ etats et calculer sur ces ensembles ;

– le calcul it´ eratif peut ne pas terminer.

Cependant nous avons aussi remarqu´ e, §2.2.4, que les propri´ et´ es d’accessibilit´ e pou- vaient ˆ etre prouv´ ees de mani` ere conservative, en ne calculant qu’une approximation de la solution. La r´ esolution approch´ ee des ´ equations de point-fixe est l’objectif principal de l’interpr´ etation abstraite, domaine introduit par Patrick et Radhia Cousot dans les ann´ ees 70 [CC77], et dont nous rappellerons les principes dans la premi` ere partie de ce chapitre. Dans une deuxi` eme partie, nous ferons un rapide tour d’horizon des in- terpr´ etations abstraites d´ edi´ ees aux propri´ et´ es num´ eriques.

3.2 Principes de l’interpr´ etation abstraite

Nous avons identifi´ e les deux obstacles ` a la r´ esolution exacte des ´ equations de points- fixes, qui sont

– l’impossibilit´ e de repr´ esenter des “valeurs” complexes — les ensembles infinis quel- conques d’´ etats — et de calculer sur ces valeurs ;

– l’impossibilit´ e, en g´ en´ eral, de calculer la limite d’une it´ eration infinie.

L’interpr´ etation abstraite propose des solutions approch´ ees ` a ces deux probl` emes : d’une part, elle offre une notion de domaine abstrait, permettant de calculer sur des

“valeurs abstraites” plus simples que les ensembles d’´ etats : d’autre part, selon le choix de ces valeurs abstraites, il se peut que la finitude des it´ erations soit assur´ ee ; dans le cas contraire, des techniques d’extrapolation de la limite sont propos´ ees.

3.2.1 Domaine abstrait

Une interpr´ etation abstraite est d’abord caract´ eris´ ee par un domaine de valeurs abs- traites. Ces valeurs servent ` a approcher, ou abstraire les valeurs concr` etes (ensembles d’´ etats) trop complexes. La notion d’approximation est formalis´ ee par une relation d’ordre : le domaine abstrait doit ˆ etre un treillis complet, comme le domaine concret. ` A l’´ equation de point-fixe initiale, portant sur des valeurs concr` etes, sera alors associ´ ee une

´ equation de point-fixe abstraite, ` a r´ esoudre dans le domaine abstrait. Les valeurs abs- traites doivent donc ˆ etre choisies pour que leur repr´ esentation en machine soit possible, ainsi que les op´ erations n´ ecessaires au calcul it´ eratif de l’´ equation abstraite.

Nous avons vu que le treillis concret est (2

Q

, ⊆, ∪, ∩, {Q}, ∅), soit l’ensemble des parties de Q, ordonn´ e par l’inclusion, avec ∪ et ∩ comme op´ erations de borne sup´ erieure et inf´ erieure, et {Q} et ∅ comme plus grand et plus petit ´ el´ ement. Comme le cadre th´ eorique de l’interpr´ etation abstraite est plus g´ en´ eral, nous noterons (L, v, t, u, >, ⊥) ce treillis concret. Le treillis des valeurs abstraites sera not´ e (L

]

, v

]

, t

]

, u

]

, >

]

, ⊥

]

).

La n´ ecessaire relation entre valeurs concr` etes et abstraites est captur´ ee par la notion

de connexion de Galois : une connection de Galois entre L et L

]

est un couple de

fonctions

(24)

3.2. PRINCIPES DE L’INTERPR ´ ETATION ABSTRAITE 17

α : L 7→ L

]

(abstraction) γ : L

]

7→ L (concr´ etisation) tel que

∀x ∈ L, ∀y ∈ L

]

, α(x) v

]

y ⇐⇒ x v γ(y)

x γ y

L α L

]

L’existence d’une connexion de Galois entre les treillis concret et abstrait permet d’appliquer le th´ eor` eme suivant au calcul d’approximations sup´ erieures de points-fixes : Th´ eor` eme 1 (Approximation de point-fixe)

Si L et L

]

sont reli´ es par une connexion de Galois (α, γ), si F est une fonction continue de L dans lui-mˆ eme, si G est une fonction continue de L

]

dans lui-mˆ eme, si

∀x ∈ L, α(F (x)) v

]

G(α(x)) (3.2)

alors lfp(F ) v γ(lfp(G)).

Ce th´ eor` eme signifie que, pour calculer une approximation sup´ erieure du plus petit point fixe d’une fonction concr` ete F , on peut choisir ou construire une fonction abstraite G satisfaisant (3.2), calculer le plus petit point fixe de G dans le treillis abstrait, et enfin

“concr´ etiser” le r´ esultat.

3.2.2 Op´ erations abstraites

On peut montrer que le meilleur choix pour la fonction abstraite G est α ◦ F ◦ γ.

Cependant cette fonction n’est en g´ en´ eral pas calculable, puisqu’elle implique un cal- cul dans le domaine concret. D’autre part, on veut obtenir un moyen automatique pour construire G ` a partir de F . Or, la fonction F , dans le cas de l’analyse des programmes, est construite par composition de fonctions ´ el´ ementaires sur les ensembles d’´ etats (les post- ou pre-conditions des instructions ´ el´ ementaires du langage de programmation), d’unions et d’intersections. De la mˆ eme mani` ere, la fonction abstraite G sera construite ` a partir de fonctions abstraites ´ el´ ementaires, associ´ ees aux instructions du langage, et d’op´ erations de borne sup´ erieure (t

]

) et inf´ erieure (u

]

). Apr` es le choix d’un treillis abstrait, la concep- tion d’une interpr´ etation abstraite doit donc s’attacher ` a d´ efinir ces fonctions abstraites, et ` a en fournir des algorithmes effectifs.

Ainsi, dans le cas des automates interpr´ et´ es, et pour l’analyse “en avant” (´ equations (2.1), page 12), il faut donner

– une interpr´ etation des gardes dans le treillis abstrait, c’est-` a-dire un moyen effectif d’associer ` a toute garde g une valeur abstraite g

]

telle que α(g ) v

]

g

]

(ou g v γ(g

]

)) – une interpr´ etation des actions, c’est ` a dire un moyen effectif d’associer ` a toute

action a une fonction abstraite a

]

telle que

∀y ∈ L, α(a(γ(y)) v

]

a

]

(y) (ou ∀x ∈ L, a(x) v γ(a

]

(α(x))) )

(25)

18 CHAPITRE 3. INTERPR ´ ETATION ABSTRAITE

Alors, ` a l’´ equation concr` ete (2.1) A

k

= [

<k0,g,a,k>∈

Com

a(A

k0

∩ g)

correspond l’´ equation abstraite A

]k

=

]

G

<k0,g,a,k>∈

Com

a

]

(A

]k0

u

]

g

]

)

3.2.3 Elargissement – S´ equence descendante

Dans de nombreux cas, le calcul it´ eratif du point fixe dans le treillis abstrait converge en un nombre fini d’it´ erations : c’est ´ evidemment le cas lorsque le treillis abstrait est fini, mais aussi lorsqu’il est simplement de profondeur finie (i.e., toute chaˆıne strictement croissante est finie). Dans ces cas-l` a, le probl` eme des it´ erations infinies ne se pose donc plus. Cependant, il peut s’av´ erer plus judicieux, pour la pr´ ecision des r´ esultats [CC92], de se placer dans des treillis plus riches qui ne satisfont pas ces propri´ et´ es. Dans ce cas, l’id´ ee est de “deviner” la limite d’une suite infinie ` a partir de ses premiers termes.

Pour cela, le concepteur de l’interpr´ etation doit fournir un op´ erateur d’“´ elargissement”, destin´ e ` a extrapoler la limite de la suite des it´ er´ es :

D´ efinition 3.1 (Elargissement)

Un op´ erateur d’´ elargissement est une fonction ∇ : L

]

× L

]

7→ L

]

satisfaisant les propri´ et´ es suivantes :

1. ∀y

1

, y

2

∈ L

]

, (y

1

t

]

y

2

) v

]

(y

1

∇y

2

)

2. Pour toute suite croissante (x

n

)

n≥0

dans L

]

, la suite d´ efinie par y

0

= x

0

, y

n+1

= y

n

∇x

n+1

converge en un nombre fini d’it´ erations.

Th´ eor` eme 2 (Extrapolation)

Si ∇ est un ´ elargissement sur L

]

, si G est une fonction continue de L

]

dans L

]

, alors la suite y

0

= ⊥, y

n+1

= y

n

∇G(y

n

) converge en un nombre fini de termes vers une limite ˆ

y, qui est un post-point-fixe de G (i.e., y ˆ w

]

G(ˆ y)), et donc telle que y ˆ w

]

lfp(G).

Le th´ eor` eme ci-dessus permet donc d’obtenir dans tous les cas une approximation du plus petit point-fixe de G. Si la limite ˆ y n’est pas un point-fixe, le th´ eor` eme suivant permet d’am´ eliorer la solution :

Th´ eor` eme 3 (S´ equence descendante)

Si y ˆ 6= G(ˆ y), alors la suite z

0

= ˆ y, z

n+1

= G(z

n

) d´ ecroˆıt, et tous ses termes sont des

approximations sup´ erieures de lfp(G).

(26)

3.3. INTERPR ´ ETATIONS ABSTRAITES DES AUTOMATES INTERPR ´ ET ´ ES 19

En r´ esum´ e, pour approcher sup´ erieurement le plus petit point-fixe d’une fonction G, au lieu de calculer la s´ equence exacte (et g´ en´ eralement infinie)

x

0

= ⊥, x

n+1

= G(x

n

)

on calcule d’abord une s´ equence d’extrapolation y

0

= ⊥, y

n+1

= y

n

∇G(y

n

)

qui converge en un nombre fini de termes vers une limite ˆ y, qui est une approximation correcte de lfp(G). Si, de plus, ˆ y 6= G(ˆ y), on peut am´ eliorer le r´ esultat en calculant les premiers termes de la suite

z

0

= ˆ y, z

n+1

= G(z

n

)

qui peut ˆ etre finie ou infinie, mais dont les termes sont tous des approximations correctes de lfp(G).

3.3 Interpr´ etations abstraites des automates in- terpr´ et´ es

On a vu, au §2.3.4, que pour analyser un automate interpr´ et´ e, on pouvait r´ esoudre un syst` eme d’´ equations de point-fixe, calqu´ e sur la structure de contrˆ ole de l’automate, plutˆ ot qu’une ´ equation simple. Un tel syst` eme sera dit partitionn´ e. Concentrons nous sur le syst` eme “en avant” (le cas “en arri` ere” ´ etant analogue) :

∀k 6= k

init

, A

k

= [

<k0,g,a,k>∈

Com

a(A

k0

∩ g) , A

kinit

= Val

A ce syst` ` eme, on va associer un syst` eme d’´ equations abstraites :

∀k 6= k

init

, A

]k

=

]

G

<k0,g,a,k>∈

Com

a

]

(A

]k0

u g

]

) , A

kinit

= >

]

Ce syst` eme peut ˆ etre r´ esolu it´ erativement, en consid´ erant les ´ equations une ` a une, dans un ordre quelconque, jusqu’` a stabilisation. Ceci dit, l’ordre dans lequel les ´ equations sont consid´ er´ ees a une influence sur la rapidit´ e de la convergence, et l’application de l’´ elargissement peut ˆ etre optimis´ ee.

– Il est logique de consid´ erer les ´ equations selon la structure de contrˆ ole : lorsque

A

]k

change, les valeurs A

]k0

associ´ ees aux points de contrˆ ole k

0

successeurs de k sont

susceptibles de changer. Par ailleurs, il est inutile de consid´ erer les points de contrˆ ole

situ´ es en aval d’une composante fortement connexe du graphe de contrˆ ole, avant

d’avoir fait converger les valeurs associ´ ees aux points de contrˆ ole de la composante.

(27)

20 CHAPITRE 3. INTERPR ´ ETATION ABSTRAITE

– Il est inutile, pour assurer la convergence, d’appliquer l’´ elargissement (qui fait perdre de l’information) ` a chaque ´ equation du syst` eme ; il est suffisant de choi- sir un ensemble K

⊆ K de points de contrˆ ole d’´ elargissement, de telle sorte que toute boucle du graphe contienne un point de K

, et de n’appliquer l’´ elargissement qu’aux ´ equations correspondant ` a des points d’´ elargissement. Le choix d’un en- semble minimal de points d’´ elargissement ´ etant NP-complet, on se contente d’un choix heuristique (nous y reviendrons au §5.3.2).

3.4 Approximation des ensembles num´ eriques

Nous nous int´ eressons ` a la v´ erification des programmes num´ eriques, et nous consid´ ererons sp´ ecifiquement le cas o` u un ´ etat du programme est form´ e d’un point de contrˆ ole et d’une valuation des variables dans un ensemble num´ erique N (=

Z ou Q ou R ). Avec la s´ emantique d´ efinie en §2.3.4, les ensembles que nous voulons repr´ esenter sont donc les sous-ensembles de N

n

, o` u n est le nombre de variables. Le treillis concret est donc

(2

Nn

, ⊆, ∪, ∩, {N

n

}, ∅)

Nous faisons maintenant une revue succincte des principaux treillis abstraits qui ont ´ et´ e propos´ es dans la litt´ erature, pour abstraire ce domaine.

3.4.1 Le treillis des signes

Une abstraction brutale consiste ` a associer ` a toute variable une valeur abstraite dans le treillis des signes repr´ esent´ e ci-contre. Par exemple, l’en- semble de points de la Figure 3.1.(a) serait abstrait par le premier quadrant strict {x > 0, y > 0} (Fi- gure 3.1.(b)). Dans ce treillis, les op´ erations abs- traites sont sans myst` ere, et comme le treillis est fini, l’´ elargissement est inutile.

≤ 0 6= 0 ≥ 0

< 0 = 0 > 0

>

(a) x (b)

y

x y

Fig. 3.1 – Abstraction selon le treillis des signes

(28)

3.4. APPROXIMATION DES ENSEMBLES NUM ´ ERIQUES 21

3.4.2 Le treillis des ´ equations affines

Une des premi` eres abstractions non triviales, propos´ ee par [Kar76], consiste ` a synth´ etiser des ´ equations lin´ eaires invariantes. Dans cette analyse, un ensemble de points de N

n

est abstrait en la plus petite vari´ et´ e affine qui le contient, c’est-` a-dire en l’ensemble des solutions d’un syst` eme d’´ equations affines. Selon cette analyse, l’ensemble de la Fi- gure 3.1.(a) serait abstrait en l’espace toute entier (pas d’information, pas d’´ equation), mais celui de la Figure 3.2.(a) fournit l’´ equation x − 2y = 1 (Figure 3.2.(b). Le treillis des ´ equations affines est infini, mais de profondeur finie (il y a au plus n vari´ et´ es lin´ eaires imbriqu´ ees dans N

n

). Il n’y a donc pas lieu de d´ efinir un ´ elargissement. Nous reviendrons sur ce treillis au chapitre 6.

(a) x (b)

y

x y

Fig. 3.2 – Abstraction en ´ equations affines

3.4.3 Le treillis des congruences lin´ eaires

Dans sa th` ese [Gra91], Philippe Granger a propos´ e, en particulier, un treillis pour abstraire les parties de Z

n

sous forme d’´ equations de congruences lin´ eaires, de la forme a~ x ≡ b(c) (soit ∃k ∈ Z , a~ x = k.c + b). Par exemple, l’ensemble de la Figure 3.3.(a) est abstrait comme sur la Figure 3.3.(b), soit en x − 2y ≡ 2 (6). Le treillis est infini, de profondeur infinie, mais satisfait la condition de chaˆıne ascendante : il n’existe pas de suite infinie strictement croissante de valeurs abstraites. L` a encore, l’´ elargissement est inutile.

(a) x (b)

y

x y

Fig. 3.3 – Abstraction en congruences lin´ eaires

Références

Documents relatifs

On retrouve le fait que ces ´etats n’existent pour θ = 0 qu’`a partir de Re ' 9000 : pour une mˆeme valeur du param`etre de contrˆole, en fonction de l’histoire du syst`eme, on

L’objectif de ce travail est le d´ eveloppement d’une approche analytique bas´ ee sur une th´ eorie raffin´ ee de d´ eformation par cisaillement avec l’effet d’´ etirement

L’organisation de consommateurs souhaite ˆ etre capable de d´ etecter avec une probabilit´ e d’au moins 99% que l’affirmation du fabricant est fausse si les boˆıtes ne