HAL Id: hal-02545591
https://hal.archives-ouvertes.fr/hal-02545591
Submitted on 17 Apr 2020
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ésolution de contraintes
Fabrice Parrennes
To cite this version:
Fabrice Parrennes. Fraction : analyseur de propriétés par des techniques de résolution de contraintes.
[Rapport de recherche] lip6.2001.017, LIP6. 2001. �hal-02545591�
résolution de contraintes
Fabrice Parrennes
SURLOGS.A.VELIZYPLUS-BatE 1bis, ruedupetit-clamart
78140Velizy-Villacoublay Fabrice.Parrennes@surlog.com
LIP6,ThèmeSPI Fabrice.Parrennes@lip6.fr
19juin 2001
Résumé
Ce papierdécritfraction,un outildevérication depropriétés de programmeparutilisation de contraintes.L'utilisationdetechniquesliées auxcontraintespour vérierdespropriétés n'estpas véri-tablement nouvelle [11 , 12]. L'originalité del'approche exposée estd'avoir déniune traduction d'un langagedestyleimpératifenunesériedesystèmesdecontraintes.Cesontlesalgorithmesderésolution de contraintesquipermettent devaliderounonles propriétés recherchées. Cettetraductionpasse par uneétapeintermédiaireoùl'onretrouvel'aspectfonctionneldesprogrammes.
L'utilisation dulangageObjective Caml apermisderéaliserfacilement unprototypedelaméthode dont l'architecture rappellecelled'uncompilateur. Ladénition d'unsolveurdecontraintesmodulaire rendl'outilparamétrableparrapportàdesmodulesderésolutiondecontraintessurdesdomaines dié-rents(lesentiersetlesbooléensparexemple).
1 Introduction
Laproblématiquedelavéricationdepropriétésd'unprogrammeinformatiquepeutserameneràvalider desprédicatssurl'ensembledesétatspossiblesduprogramme.Ilestassezfaciledevérierqu'unepropriété estvraielorsqueleprogrammeinformatiqueestexécutédansunenvironnementparticulier.Ilsutd'évaluer le programme pour l'environnement spécié puis de vérier la propriété sur le résultat de l'exécution du programme. La propriété n'est alors valide que sous l'hypothèse décrite par l'environnement dans lequel est évaluéleprogramme. Ilest nettement plusdicile de vérierla propriétélorsque nous neconnaissons pasl'ensembledesvaleurspossiblesdesvariables(parexemplelorsquel'environnementd'exécutionassocie plusieursvaleursàune mêmevariable).
La véricationde propriétéspeut sefairepar interprétation abstraite,c'est-à-direen donnantune vue abstraitedesdomainesdesdonnées.Uneinterprétationabstraiteintéressantepourlavalidationdepropriétés estdénieendécoupantundomainededonnéesenintervalles[7].L'imagedesdiérentesopérationsréalisées parcesdonnéesest fournieparunesémantiqueabstraitebaséesurunesémantiqueconcrèted'évaluation.
Il reste alors à calculer sur ces intervalles. Un intervallepeut être représenté par une contrainte, une propriétéestainsireprésentéeparunsystèmedecontraintes.Ilfautalorsutiliserdesalgorithmesderéduction dedomaine,pourvérierqu'unensembledecontraintesestsatisableetainsiexhiberuneoul'ensembledes solutionsdelarésolution.
Uneapprochesemblableadéjàétéutiliséepourdéterminerdesjeuxdetestdeprogrammes[12]oupour vérierdesprogrammespar"modelchecking"aveccontraintes[11].
Ce papierprésenteun analyseurdepropriétés, appelé fraction,qui permet d'obtenirune abstraction sousformedecontraintesd'unprogrammeécritdansunlangageimpératif.L'abstractiondeceprogramme
passeparuneétapeintermédiaireoùestretrouvéel'aspectfonctionneldecelui-ci.Lessystèmesdecontraintes associésauprogrammededéparts'obtiennentpartraductiondecetaspectfonctionnelduprogramme.
Apartir dessystèmes de contraintes et des propriétés recherchées,unmodule derésolution permet de validerounonlesdiérentespropositions.Latechniquedetraductionpermet decalculerplusnementles diérentsdomainesdedonnéesassociésauxvariablescarlelangagedescontraintesest beaucoupplusriche quelasimpleabstractiondesdonnéesenintervalle.
L'outil fractiona été implémenté en utilisant lelangage Objective Caml[14, 18]. La dénition de phasesdetraduction biendistinctesapermisl'implémentationd'une structuremodulaire prochedes dié-rentesphasesd'uncompilateur.Lamodularitéetlesfoncteursd'ObjectiveCamlontpermisd'obtenirun paramétragedumodule derésolutiondecontraintespardesmodulesspéciquesauxdomainesdecalcul.
Cetoutilfraction 1
estdestinéàétablirlacommunicationentrelesoutilsdéveloppésparSURLOGS.A., àsavoirAGFL r
2
etRCSPL r 3
.L'outil AGFL r permetd'obtenirunevisionfonctionnelled'unprogramme écritdansunlangagedestyleimpératif[3].L'outilRCSPL r estunoutilpermettantlaréalisationd'analyses desûretédulogicieldetypeAMDE[4 ].
Cetarticleprésentelaproblématique,latechniquedevéricationparcontrainteset lapartierelativeau codage,danslelangageObjectiveCamldelaméthoded'analysedepropriétésparutilisationdetechniques decontraintes.
2 Présentation de la méthode 2.1 Présentation de la problématique
Nouscherchonsàdénirune approximationdesprogrammessurdesdomainesdevaleurs,pourcelaun certainnombrededénitions sontintroduites.
Soit Var un ensemble de variables et Val un ensemble de valeurs (les entiers, les booléens, les réels parexemple).P dénotel'ensembledesprogrammesd'un certainlangageL etQ représentel'ensembledes prédicatspossiblessurdesexpressionsdéniesàl'aidedesvariablesVaretdesopérateursdeL.
SoitEnvl'ensembledescouples(VarVal)(i:eEnv=}(VarVal))dénissantlanotiond'environnement d'évaluationd'unprogrammeP etE[[P]]
e =e
0
lafonctionsémantiqued'évaluationd'unprogrammedontla signatureest: E:P !Env!Env E[[P]] e =e 0 signiequee 0
est l'environnementrésultantdel'évaluation deP danse. E
Q
:Q!Env!ftrue;falsegreprésenteune procédurededécisionpourl'ensembledesprédicatsQ. Vérierqu'unepropriétéQestvraieàlasuitedel'évaluationd'unprogrammeP dansunenvironnemente revientàvérierque:
E[[P]] e =e 0 etE Q [[Q]] e 0 =true VérierquelapropriétéQest toujoursvraie,c'estvérierque:
8e2Env E[[P]] e =e 0 etE Q [[Q]] e 0 =true
2.1.1 Interprétation abstraitede programmes
L'interprétation abstraite de programmes permet de calculer des propriétés bien choisies sur des pro-grammesinformatiques[7,17].
Ondénit uncertaindomaineabstraitVal ]
pourreprésenter l'ensembleVal desvaleurspossiblesd'une variable
4
etcedomaineest engénéralbienplussimplequece dernier 5
. 1
Cetravailfaitpartiedestravauxréalisésdanslecadred'unethèseCIFREentrelasociétéSURLOGS.A.etleLaboratoire d'InformatiquedeParis6 http ://www-spi.lip6.fr.
2
AGFL r :AnalyseurparGrapheFonctionnelduLogiciel. 3
RCSPL r RecherchedesCombinaisonsSignicativesdePannesduLogiciel. 4
Ledomainedoitrespecter descritèresbienparticulierscommeceluid'êtreuntreilliscomplet[10]. 5
00 00 00 11 11 11 00 00 00 11 11 11 000 000 000 111 111 111 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 00000000000 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111 11111111111
Y { 0, 1 ,2 }
Z { 0, 1 ,2 }
X { 0, 1 ,2 }
>
=/=
<
Fig.1Unexempledecontraintestri-parties.
Pour cela, une certaine abstraction des valeurs concrètes versles valeurs abstraitesest dénie sous la formed'unefonctiond'abstraction:Val!Val
] .
Lespropriétésetlesfonctionsd'évaluationsontaussiinterprétéessousuneformeabstraite.E ]
etE Q
]
dénotent les fonctions sémantiques d'évaluation abstraitedes programmes et des prédicats sur des environnements abstraitsEnv
] .
L'interprétationabstraiteP ]
d'unepropriétéP surValestcorrectesilavaliditédeP ]
surVal ]
implique lavaliditédeP surVal.
Le traitementdesconditionnelles s'eectue de lamanièresuivante : lecalcul est eectué pour lesdeux branchesdelaconditionnelleet unefusiondesdeuxrésultatss'eectuedemanièreàgarantirlavaliditéde lapropriétésurlesdeuxbranches.
Cettetechniquepermetdegénérerdesrésultatsvalidesquellequesoitl'exécutionpossibleduprogramme 6 (si aucuneinformation relativement àune variable n'est calculéealors sondomaine est l'ensemble des va-leurs possibles). Il est plusdicile d'obtenir de l'information lorsqueles prédicats desprogrammes oudes conditionnelles sont de laforme x < y (parexemple si x =1::100 et y = 1::100on ne sait pas dire si la conditionestvraieoufausse).
Latechniqueparcontraintesutiliseuntraitementdiérentdesconditionnelles.L'ensembledesbranches possibles issues de l'exécution du programme est intégré dans le modèle fonctionnel. La traduction des contraintes s'eectuantsur ce modèlegarantitlavaliditédes prédicatssur lesexécutionspossiblesdu pro-gramme.
2.1.2 Programmationlogique par contraintes
Laprogrammationlogiqueest unparadigmedeprogrammationdontlesfondementsontétéposésdans ledébutdesannées1970.
La programmationlogique par contraintes intègredes domaines de calculs particuliers comme les do-maines réels,les domainesnisou lesformulesbooléennes (onétendle domainedediscours), pourdénir sur cesensemblesune notionde contrainte représentéepardes clauses deHorn
7
. Résoudre unprogramme logique par contraintes c'est principalement résoudre les diérentes contraintes en utilisant des solveurs spéciquesauxdiérentsdomainesdedénition [5,6,13,15].
Exemple de technique de résolution sur les entiers Les techniques de calcul de résolution de contraintes sur les domaines entiers peuvent être basées sur la notion d'arc consistance [15] : à chaque étapeducalcul,nous essayonsde vérierl'ensemble descontraintes, entraînantla réductiondesdomaines des diérentes variables sur lesquelles portent les contraintes. Soit l'exemple de la gure1 : nous voulons satisfaire pour lestrois variablesX;Y;Z (de domaine[0::2]) les inéquationssuivantes X 6=Y X <Z et Y >Z.Un exemplederésolutiondecetexempleestlesuivant:
Y 6=X Y >Z X <Z resultat Y =0 X =1;2 Z =; impossible Y =1 X =0;2 Z =0 X =; impossible Y =2 X =0;1 Z =0;1 X =0 X=0;Y =2;Z=1 6
Onparleaussid'analysestatiquedesprogrammes. 7
Sémantiquedeslangages Résolutiondecontraintes
uncomposantlogiciel unensembledesystèmesdecontraintessurles entrées/sortiesducomposant(1)
unenvironnementd'exécution un système de contraintes sur les entrées du logiciel(2)
analyseruncomposant résoudrelessystèmesdecontraintes(1)+(2) analyser deux composants logiciels en
sé-quence
fusionnerleurs systèmesde contraintes et ré-soudre
une propriété=unprédicat un système de contraintes sur les en-trées/sortiesdulogiciel
vérierune propriété fusionnerlessystèmeset lapropriétépuis ré-soudre
Tab.1Liensentreanalyseparcontrainteset sémantiquedelangage
Dans le système CLP(BNR) [5], les auteurs utilisent des approximations et créent desfonctions de rétré-cissementset d'élargissements(widening and narrowing) descontraintespourréduire,étapeparétape,les diérentsdomainesdevaleurs.
Soit C l'ensemble de toutes les contraintes basées sur les domaines Val et les variables Var. Soit S l'ensemble des systèmes decontraintes (ce sont des collections de contraintes C). SoitÆ: S ! S !S un opérateur defusion desystèmes de contraintes. Un systèmeS 2S est dit inconsistant ouinsatisable s'il contientunecontrainteC dedomainevide
8 .
L'utilisation de contraintes permet de pouvoir parler de l'expression X < Y lorsque X 2 [1::100] et Y 2[1::100]parl'ajoutdelacontrainteX <Y auxdeuxensemblesdevaleursdénisparl'appartenancede X etY à[1::100].
Lepointprécédent,alliéauxtechniquesd'interprétationabstraitedeprogrammes,nousdonneleschéma global de l'analyse de propriétés par contraintes. Les opérateurs abstraits sont dans notre technique les opérationssurlessystèmesdecontraintes.
2.2 Méthode de la vérication de propriétés par contraintes
A partirde notre problématiqueinitiale,nous essayonsd'établir des liensentre lasémantiquedes pro-grammesetl'utilisationdecontraintes,letableau1présenteunesynthèsedesopérationsquenousaimerions dénir.
Nousessayonsdetirerprotdescontraintespourinterpréternementlesdiérentesexpressionsprésentes danslesprogrammes.C'estàdiredéniruneinterprétationdesprogrammespardessystèmesdecontraintes etutiliserlestechniquesderésolutionpourobtenirlaprocéduredevéricationdespropriétés.
Uneméthode en quatrephasesa étédénie pourtraduire et résoudredes propriétéspar utilisationde contraintes.
1. lectureduprogramme,véricationdetypeetcalcul duotdesvariables; 2. modélisationduprogrammesouslaformed'unmodèlefonctionnel; 3. traductiondumodèlefonctionnelensystèmesdecontraintes;
4. compositiondessystèmesdecontraintesprécédentsetdespropriétésàvérier.
Lagure2,commentéeci-après,montreunexempledeprogrammeécritdansunlangagedetypepascal, ladeuxièmecolonneprésentelatraductionsousformedecontraintesdesfonctionnalitésduprogramme.
Lacontrainte X 2 D exprimée par rapport à une variable X représente le domaine de valeurD que peutprendrelavariableX.Fonctionnellement,l'exempledelagure2seramèneàtroiscasparticuliers:
lesprédicatsP etQsontvrais:lesvariablesaectéessontJ I,L 2et K K+1,
le prédicat P est vrai et le prédicat Q n'est pasvrai, les variables aectéessontJ I, L 3 et K K+1,
if (P = true) then begin J:= I; if (Q = true) then L := 2 else L := 3; K := K+1; end else K := K+2 Cas1 8 > > < > > : P 0 inftruegQ 0 inftrueg J 1 indom(I 0 )I 0 indom(J 1 ) L 1 inf2g K 1 indom(K 0 )+1K 0 indom(K 1 ) 1 Cas2 8 > > < > > : P 0 inftruegQ 0 in:ftrueg J 1 indom(I 0 )I 0 indom(J 1 ) L 1 inf3g K 1 indom(K 0 )+1K 0 indom(K 1 ) 1 Cas3 8 > > > > < > > > > : P 0 in:ftrueg J 1 indom(J 0 )J 0 indom(J 1 ) I 1 indom(I 0 )I 0 indom(I 1 ) L 1 indom(L 0 )L 0 indom(L 1 ) K 1 indom(K 0 )+2K 0 indom(K 1 ) 2
Fig.2Exemple deprogrammeetsystèmesdecontraintesassociés
leprédicatP n'estpasvrai:laseulevariableaectéeestK K+2.
Lessystèmesdecontraintesutilisésexprimentlesvaleursdesvariablesavantetaprèsleursaectations.Pour celaK
0 etK
1
représententlamêmevariableavantetaprèsl'évaluationduprogramme.Cettedistinctionest importantecariln'estpossiblededénirledomained'unevariablequ'enfonctiondesesvaleursprécédentes
9 . A partirdecetexemplenouscherchonsàdéterminersi,àpartirdel'environnement
[hP;ftrue;falsegihQ;falseihK ;10ihI;INihJ;INihL;INi] ilest possibled'obtenir
[hK ;12ihL;10ihP;?ihQ;?ihI;?ihJ;?i] 10
Parrapportànosdénitionsavant etaprèsdesvariables, cesdeuxassertionssetraduisentensystèmes decontraintesparS 1 =fK 0 in f10g; QinffalseggetS 2 =fK 1 in f12g; L 1
inf10gg(onremarqueraque seuleslesinformationspertinentesapparaissentdanslessystèmesdecontraintes).
Apartirdessystèmes decontraintesrelatifsànotrepropriété, lavaliditéde celle-ciseramèneàcalculersi unedestroiscompositions suivantesestpossible(ousatisable):
S 1 ÆCas1ÆS 2 ) Insatisfiable S 1 ÆCas2ÆS 2 ) Insatisfiable S 1 ÆCas3ÆS 2 ) Satisfiable
Laconclusiondelacomposition estquelapropriétévoulueestvalidesurlechemin3etquelasolutionest [hP 0 ;falseihQ 0 ;falseihK 0 ;10ihK 2 ;12ihL 0 ;10ihL 1 ;10i:::].
2.2.1 Traduction vers lemodèlefonctionnel
Latraductiondesprogrammesensystèmesdecontraintesnécessitel'obtentiond'uneformeintermédiaire appelée modèlefonctionnel.Ce modèleest constituéd'équationsoùchacuneexprimeune fonctionnalitédu programmeconsidéré(l'ensemble deséquationspourunprogrammereprésentesafonction caractéristique). L'intérêtdecemodèleestd'exprimeràplatlesrelationsentrelesdiérentesvariablesduprogrammesous laformed'unetransitionenuneétape:diérentesaectationsd'unemêmevariablesontpropagéesdansles équationspour neretenir quel'aectation naled'une variablepar rapport àunprédicat (éventuellement
9
Leproblèmeest identiqueà celui delacausalité dans les langages deotde donnéescommedans lucid-synchrone par exemplehttp ://www-spi.lip6.fr/pouze t/l ucid -syn chr one.
égalàvrai)dépendantdesexpressionsducomposantlogicielanalysé.
Pour lesbesoinsde la traductionversles systèmes de contraintes ce modèle fonctionnel est représenté par une forme équationnelle propre à l'outil fraction. Cette forme équationnelle correspond au modèle fonctionnel,résultatdel'utilisationdel'outilAGFL r,particulariséàlatraduction encontraintes.
Unetelle traductionestpossibleeneectuantdeuxtransformationsduprogrammeinitial:
les instructions d'un programme sonttraduites en une forme SSA pour n'avoir que des occurrences diérentesdesvariablesduprogramme[1,9];
les diérentes aectations des variables sont collectées à travers les fonctions de choix issues de la traduction desconditionnelles delaformeSSA.
Letableau2présente lemodèlefonctionneldel'exempledelagure2.
Cheminsfonctionnels conditionsurlesentrées Aectationsdessorties Cheminfonctionnel1 Q 0 =true J 1 :=I 0 P 0 =true L 1 :=2 K 1 :=K 0 +1 Cheminfonctionnel2 Q 0 <>true J 1 :=I 0 P 0 =true L 1 :=3 K 1 :=K 0 +1 cheminfonctionnel3 P 0 <>true J 1 :=J 0 L 1 :=L 0 K 1 :=K 0 +2
Tab.2Lesdiérentscheminsduprogrammedelagure2
2.2.2 Traduction vers laforme "contraintes"
Laforme"contraintes"de laforme équationnelleest obtenue àpartird'unetraduction desexpressions dulangage.Cette formeéquationnellepermet desedéfairedesdiérentes commandesdulangagede base. Il en résulte une série de relations entre variables exprimées simplement sous la forme de liens entre une pré-condition et diérentes aectations simultanées représentée sous laforme d'un chemin fonctionnel du programme.Uneconditionnécessairepourlatraductionverslescontraintesestnenepasavoird'occurrence del'opérateurNotet den'avoirquedesformesconjonctivesdanslesprédicatsd'équations(cettecondition permetd'obtenirdesapproximationsplusnesdesexpressions).
L'utilisationd'uneformeSSAàlabasedelatraductionnouspermetdes'assurerquedeuxvariablesportant lemêmenomsontbien liéesparunenotionavant-après.
Letableau3représenteune partiedelatraduction enterme decontraintes desexpressionsdelaforme équationnelle.Les systèmesdecontraintesde lagure2s'obtiennentparapplication desrèglesdutableau 3surlescheminsdutableau2.
2.2.3 Résolutiondes formes "contraintes"
Apartirdessystèmesdecontraintesprécédents,unalgorithmedetypearc-consistance[6,13,15]permet deréduireitérativementlessystèmesdecontraintes.
Si la composition des systèmesde contraintesissus du programme initialet dela propriété recherchéeest inconsistante alors la propriété n'est pas valide. Parcontre, l'interprétation des expressions étantréalisée demanièresupérieure (lorsdelatraductiond'un<parexemple),silarésolutionnousdonneunesolution, alorsiln'estpastoujourspossibled'armerquelapropriétéestvraieounon.
Expression Traductionencontraintes Remarques X =Y
X in Dom(Y) Y inDom(X)
Egalitédedeuxvariables X 6=Y
X in :Dom(Y) Y in:Dom(X)
Inégalitédedeuxvariables X Y
X in 1::Max(Y) Y inMin(X)::+1(X)
Inégalitédedeuxvariables X <Y
X in 1::(Max(Y) 1) Y in(Min(X)+1)::+1
Inégalitéstrictededeuxvariables X:=Y X inDom(Y) Aectation X:=Y+Z
X inDom(Y)+Dom(Z) Addition X:=Y-Z
X inDom(Y) Dom(Z) Soustraction X:=-Y
X in Dom(Y)
Opérationunaire
Tab.3Traductiondesexpressionsdeséquationsencontraintes
peutserameneràlierlesélémentssuivants: Val ] C Q ] S Env ] }(S) E ] Æ E Q ] SatisabilitédansS
3 Réalisation d'un prototype
Constraint
Module
Constraints
Translation
Properties
Resolution
Generic
Lattice
Generic
Environment
Generic
Semantic
Flow
Lattice
Type
Lattice
Equations
Translation
Variable
Fraction
Language
Constraint
Module Int
Constraint
Module Bool
Type
Environment
Flow
Environment
Type
Semantic
Flow
Semantic
Fig.3Lesdiérentsmodulesdel'analyseurfraction L'utilisationdulangageObjective Caml
11
etdesesmodulesapermisd'obtenirunoutilmodulaireoù il est possibled'ajouterrapidement denouveaux domainesde dénition pourla résolution decontraintes. Leschémadelagure3présentel'architecturedesmodulesdel'analyseur.
Leprototypefraction abesoind'informations sur lesvariables présentes dans le programmeanalysé pour laphase de traduction versles contraintes. Il était intéressantde regrouperles techniques de calcul deces informationsdans unseulmodule souslaforme d'unesémantiquegénérique. Pour cela,l'utilisation desfoncteursde Objective Caml apermis dedénirune architecturebaséesur lesvaleurspossiblesdes variables.Cesvaleurs(pouvantêtrediérentesselonl'analysedésirée)sontregroupéesdansunseulmodule treillis.
Ladénitiond'unmodulegénéraldecontraintesfondéesurdessolveursdedomainesdiérents(Constraint module Intet constraint module Bool permet aussi une plus grande souplesse lorsde la résolution de contraintes.
3.1 Lecture et typage du programme
Lapremièrephasede latraduction verslescontraintes est delire et detyperles programmes. L'infor-mationdetypeestimportante carc'estellequi permet d'orienterlatraductionverslesdiérentsdomaines de résolution de contraintes.A partir d'un module de sémantique générique paramétré par un treillis de valeurs(voir[8])nouspouvonsévaluerlesdiérentstypesduprogrammeet calculerdel'informationsurles entrées/sortiesduprogramme.
3.1.1 Le modulede variable
LemoduleVariable_signature exprimelesopérationsnécessairesàlamanipulationdesvariablesd'un programme,sasignatureest lasuivante:
module type Variable_signature = sig
type var
val is_equal : var -> var -> bool val next_of_var : var -> var
val new_var : unit -> var ...
end
Ilestimportantdediérencierlesvariables àdroite et àgauchedesaectations,ouencoreen entréeet en sortiedeprogramme.Pourcelaladiérenceentreunevariablev etlavariablenext_of_var(v)résidedans lefaitquenext_of_var(v)désignelavaleursuivantedelavariablev
12 .
Implémentation L'implémentationdumoduleest eectuéeen dénissantletypevarcommeuncouple (stringint).Ainsilafonctionnext_of_var (s,i)serésumeàrenvoyerlecouple(s;i+1).
3.1.2 Le modulede langage
Lemodule delangageparamétréparlemodule devariable(voirgure3) représentelelangagede base de notreapplication. Ce module est importé partouslescomposantsdel'analyseuret par lesmodules de traduction. Le type le plus important de ce module est le typeexpr car c'est celui qui est la base de la traductionencontraintes.Letypeexprpermetaussidedénirdespropriétéssouslaformedeprédicatssur lesvariablesduprogramme(c'estnotrelangagedepropriété).
module type Language_fraction = sig
module V : Variable_signature type commands =
Skip
| Affect of (V.var * expr)
| Seq of (commands * commands) | While of (expr * commands) 12
| Ifthenelse_c of (expr * commands * commands) and expr =
Const of values | Ident of V.var
| Add of (expr * expr) | Sub of (expr * expr) | Equal of (expr * expr) | Inf of (expr * expr) | Or of (expr * expr) ...
and values = Int of int | Bool of bool
val fraction_true : expr val fraction_false : expr
val equationnal_simplification : expr -> expr val normalize_expr_not : expr -> expr
val commands_to_equations : commands -> (expr * ((V.var * expr) list)) list ...
Implémentation Le codage du module de langage est classique pourun langage destyleimpératif.La fonction commands_to_equationsimplémente la technique de traduction par l'intermédiaire d'une forme SSAdesprogrammesverslaformeéquationnelle.
3.1.3 Lemodulede sémantique générique
Le module de sémantique générique est basé sur une sémantique standard de type opérationnelle du langage de base [16]. Le typage du programme et la détermination du ux des variables s'eectuent par l'intermédiaire de ce module paramétré par un module treillis de valeurs et un module d'environnement abstrait.
L'évaluationduprogrammepouruntreillisdonnéest uneinterprétationabstraitesimpledesexpressionset descommandesdulangage[7, 8,17].
Le module générique des treillis Le module des treillisreprésente lesopérationsélémentaires surles éléments que nous voulons calculer. Il faut poser la traduction des valeurs de bases du langage dans le treillisdesvaleurs(ouencoreécrirelafonctiond'abstraction),et donnerdeux fonctionsis_true_of_lat etis_false_of_latpourl'évaluationdesconditionnellesetdesboucles.L'intérêtdecesdeuxfonctionsest depouvoirvaliderounonunprédicat.Lorsquecelui-ciestindéterminablealorsnousutilisonslestechniques devaleurssupérieuresdansletreillispourgarantirlavaliditédesrésultats.
module type Lattice_algebra_signature = sig
module L : Language_fraction type lat
val bot : unit -> lat (* bottom value *) val top : unit -> lat (* top value *) val eq : lat->lat->bool (* egality test on lattice elements *) val leq : lat->lat->bool (* order function on lattice *) val lat_upper : lat -> lat -> lat (* upper bound *)
val val_of_constant : L.values -> lat
Bot
Top
Int
Bool
In Out
In
Out
Top
Bot
Init
Fig.4Letreillisdestypeset duotdedonnées
val lat_Add : lat -> lat -> lat val lat_Sub : lat -> lat -> lat val lat_Equal : lat -> lat -> lat ...
end
Le treillis des signes Le treillis des signes présenté dans la gure 4 permet de typer les variables présentes danslesexpressionset lescommandes.
Implémentation Voici unextraitdumodule implémentantletreillisdestypes.Lafonctiondevaleur supérieureutiliseletreillisdonnéàlagure4,lesopérationsarithmétiques etlogiquess'écrivent naturelle-mentselonletypededonnéeattendu.
module Lattice_algebra_signature_type (Lang : Language_fraction) : (Lattice_algebra_signature with module L = Lang) = struct
...
type lat = Bot | Int | Bool | Top let val_of_constant c = match c with Lang.Int _ -> Int | Lang.Bool _ -> Bool let lat_Add l1 l2 = match (l1,l2) with (Int,Int) -> Int | (Bot,Int) -> Int | (Int,Bot) -> Int | (Bot,Bot) -> Bot | (_,_) -> Top ... end
Letreillisdesentrées/sorties Lesentréesetsortiessontutiliséespourvérierleuxentrediérentes parties deprogramme. L'ajoutd'unenotionde procédurepermet d'utiliser leux pourlierlesvaleursdes variablesauxentréesdesprocédures:lesvariablessontnomméeset ilfautalorsmettreàjourlesnomsdes variablespourlaprocédureconsidérée.
pro-desavaleurenentrée.In_Outcorrespondàunevariablelueetécritedanslecorpsduprogramme.Initest unevaleurutiliséelorsque lavariableest simplementaectéedanslecorpsd'unprogramme.
Le module générique d'environnements A partirde ladénition d'untreillisde valeurs,unenotion génériqued'environnementest dénie.Elleassocie auxvariablesdesvaleursdutreillisparamètre.
module type Env_algebra_signature = sig
module V : Variable_signature
module Lat : Lattice_algebra_signature type env
val empty : unit -> env
val env_get : env -> V.var -> Lat.lat
val env_put : env -> V.var -> Lat.lat -> env val upper_env_put : env -> V.var -> Lat.lat -> env val upper_env : env -> env -> env
... end
Implémentation Uneliste(V.var * Lat.lat) listpermetd'utiliserlesfonctionsd'associationdu lan-gageObjectiveCaml.Onremarqueraquelafonctionupper_envpermetdefusionnerdeuxenvironnements parapplicationdel'opérateursupérieurdansletreillisdesvaleurslat.
L'environnementdeotetdetypes'obtiennentenutilisantlemoduledetreillisdesots,lemoduledetype etlemodule d'environnementgénériqued'environnement.
Le modulede sémantiquegénérique Le module desémantiquegénériqueseparamètrepartrois mo-dules : unmodule de langage Lang, un treillisde valeursLatticeet unenvironnement Env associantdes variables du langage Lang aux valeurs du treillis Lattice. A partirde la dénition du langage, et d'une sémantiquedetypeopérationnelle[16],lesprogrammessontévaluésenutilisantlesopérationsdéniesdans letreillisLat.Lasignaturedumoduledesémantiquegénériqueestlasuivante:
module type Generic_forward_semantic_signature = sig
module Lang : Language_fraction
module Lattice : (Lattice_algebra_signature with module L = Lang) module Env : (Env_algebra_signature with module V = Lang.V
and module Lat = Lattice)
val generic_forward_expr : Env.env -> Lang.expr -> (Lattice.lat * Env.env) val generic_forward_commands : Lang.commands -> Env.env -> Env.env
end
Implémentation L'implémentationdumoduleestbaséesurunesémantiquestandarddulangage.La dénitiondesfonctionsis_true_of_latetis_false_of_latdutreillisdesvaleursetlafonctionupper_env du module d'environnement permettentde s'assurer que lesrésultats obtenus sont valides quelle que soit l'évaluationduprogramme.
3.1.4 Formeéquationnelledu programme
Laformeéquationnelleduprogrammeestobtenueendeuxphasesderéécrituredescommandesdebase. Lafonctiondetraductionestprésentedanslemoduledelangageandenepasexporterlastructureinterne descommandes.
module type Language_fraction_equation_signature = sig
module Var : Variable_signature
module Lang : (Language_fraction with module V = Var) type recursive_affectation
and fraction_path
and fraction_path_program = fraction_path list val name_of_path : fraction_path -> string val precond_of_path : fraction_path -> Lang.expr
val affects_list_of_path : fraction_path -> (Var.var * Lang.expr) list val path_of_commands : Lang.commands -> fraction_path_program val normalize_path : fraction_path -> fraction_path_program
val normalized_path_of_program_path : fraction_path_program -> fraction_path_program ...
La forme équationnelle des programmes doit respecter certaines propriétés. Par exemple les expressions ne doivent pas contenir de construction not. Pour cela une série de règles de réécriture est utilisée pour normaliserlesexpressions(c'estlafonctionnormalize_expr_notdumoduledelangage[8]).
Letermechemin(path) désigneunefonctionnalitéduprogramme(c'estunebranchedel'arbre d'exécu-tiondu programme).Ilpeutexister desbranchesnon accessibles,pour celaune fonction denormalisation normalize_pathpermet deretirercesbranches(leprédicatest évaluépartiellement).
3.1.5 Traduction vers laforme "contraintes"
Apartirdelaformenormaleéquationnelle,unmodule detraductionverslessystèmesdecontraintesest déni.Ce module est basé surlatraduction d'une expressionarithmétiqueou logiquedulangage de base. L'utilisationd'uneformeatomiqueX inD decontraintes[6]permetd'exprimerdeséquationssouslaforme d'unecollectionde contraintes.Letableau 3présente desrèglesde traductiond'expressionsensystème de contraintes.
Ilest possibled'ajouterdesvariablesauxexpressionsandefaciliterlatraduction.Ainsil'expression(X+ 2)=(Y +3)peutseréécrireenU =(X+2);V =(Y +3);U =V.Cetteopérationestsemblableàunemise enformecode 3adresses desexpressions[1].
Lasignaturedumoduledetraductionutiliselemoduled'équationetlemodulederésolutiondecontraintes. module type Language_fraction_constraint =
sig
module Eqn : Language_fraction_equation_signature
module Const_module : (Constraint_signature_module with module Lang = Eqn.Lan g)
type fraction_store_path
and fraction_store_program = fraction_store_path list
val store_path_of_name_store : string -> Const_module.store -> fraction_store_path val store_of_store_path : fraction_store_path -> Const_module.store
val name_of_store_path : fraction_store_path -> string val store_of_path : Eqn.fraction_path -> Const_module.store ...
end
Apartirdestypesdesexpressions(obtenusàpartirdumoduledetypage),lessystèmesdecontraintessont générésparutilisationdelafonctiondetraductionprésentedanslemoduledecontraintes.
3.1.6 Le modulede contraintes
Le module de contraintes permet de regrouper dans une seule construction diérentes techniques de résolutionsurdesdomainesdiérents.Lasignaturedumoduledecontrainteestlasuivante:
sig
module Lang : Language_fraction
module Const_int : (Constraint_signature_type_int with module Var_int = Lang .V and module Lang_int = Lang)
module Const_bool : (Constraint_signature_type_bool with module Var_bool = La ng.V and module Lang_bool = Lang)
type contr type range type tdef type store ...
val store_from_int : Lang.expr -> store val store_from_bool : Lang.expr -> store ...
val tell : contr -> store -> store val fusionne : store -> store -> store val elim_store : store -> bool
... end
Implémentation L'implémentation du module de contraintes s'eectue en diérenciantles typesde contraintesutiliséseninternedanslemodule.Lorsdelarésolutionoulorsdelatraductionl'informationde typesurlescontraintespermet d'appelerlafonctioncorrespondantaudomainedéniparletype.
3.2 Conclusion sur l'implémentation du prototype
L'implémentation du prototype a été facilitée par l'utilisation des lexers et parsers fournis avec Ob-jective Caml.Le prototypefractionobtenu permetl'analyse deprogrammesimpératifsécritsdansun langageprochedulangagepascal.D'autresanalysesontétédéniesàpartirdumoduledesémantique géné-rique(commel'analyseparintervalles)etdiérentestechniquesderésolutiondecontraintesontétéutilisées parimplémentationdemodulesspéciquesderésolution.
Untravailencoursestd'augmenterlapuissanced'expressiondulangagedebasepourintégrerdes construc-tions"procédures"et"fonctions"ainsiqued'ajouterdestypesénuméréssurlesvariablesdesprogrammes.
4 Conclusion
Nousavonsprésentéuneméthodedevalidationdepropriétésparutilisationdetechniquesliéesàla réso-lutiondecontraintes.Cettetechniqueal'avantagedeseservirdelapuissancederésolutiondesalgorithmes de contraintes,et peut parl'intermédiaire d'unmodule contraintess'interfaceravecdes outilsexistantsde résolutiondecontraintes.
L'utilisationdulangageObjective Camlapermisdedénirrapidementunearchitecturecompilateur de notre outil de vérication depropriétés parcontraintes. La facilité pour les langages de lafamille ML de traiterlesstructures dedonnéesdénies récursivementest unatout essentielpourl'implémentationdu prototype.Deplusl'utilisationdesmodulesdulangageapermisdeparamétrerlarésolutionetlatraduction desexpressionsverslessystèmesdecontraintes.
Laformeéquationnellepeutêtreétenduelorsquelelangagedebasecontientdesprocéduresoufonctions. Le programme est alors décomposé en diérents sous-programmes sur lesquels s'applique latechnique de traductionparcontraintes.Cettedécomposition permet deréduirelatailledelaformeéquationnelle(ilest plussimpledetraiterdeuxcheminssuivisdedeuxcheminsquequatrecheminssimultanément).
Latraductiondescontraintesn'aétéeectuéepourl'instantquepourunsousensembledulangagedebase necontenantpasdeconstruction(while). Unepistede rechercheestd'utiliser lestechniques semblablesà
ensortiedeboucle.Celapeutmodierlestechniquesdecontraintesparajoutd'uneconstructionpointxesur larésolutiondecontraintes.L'implémentationduprototypedevraalorsintégrercesdiérentesmodications parajoutdeconstructionsdanslelangagedeséquationsetlorsdelaphasederésolutiondecontraintes.
L'analyseuraétéutilisépourvaliderlespropriétésd'unrégulateurdevitesse[2].L'apportdescontraintes permetaussidemieuxcaractériserlesdiérentesopérationsréaliséesdansunsystèmelogicielparrapportà uneinterprétationparintervalledesdomainesdevaleurs.
L'intégrationde techniquesde contraintes dansl'outil RCSPL r permettraainsiune modélisation ne des composantslogiciels.L'apportdel'outilfractionestaussidedonneruneformenormaliséedesprogrammes, facilitantainsiletravaillorsdesanalysesdesûretédulogiciel.
Références
[1] Aho,A.,Sethi,R.,Ullman,JCompilersPrinciples,techniquesandtools.Addison-WesleyPublishing Compagny,Inc, 1986.
[2] Joanne M.Atlee and John Gannon, State-Based Model Checking of Event-Driven System Require-ment.IEEETransactiononSoftwareEngineering,1993.
[3] P. Ayrault T. Hardin M. Guesdon Méthodologie de développement d'un outil d'évaluation de la sûretédulogiciel en langageOCaml,JFLA2000.
[4] B.LeTrungM-C.Monégier duSorbier ,B.Soubiès, O.Elsensohn,Logiciels de sécurité,Veille technologique,1995.
[5] Frédéric. Benhamou, William J. Older,Applying Interval Arithmetic to Real, Integer, and Boolean Constraints, ournalofLogicProgramming,Volume32,1997.
[6] PhilippeCodognetandDanielDiaz,CompilingConstraintsinclp(FD).J.LogicProgramming,1996. [7] PatrickCousotandRadhiaCousot,Staticdeterminationofdynamic propertiesofprograms.
Procee-dingsoftheSecondInternationalSymposium onProgramming,1976.
[8] Patrick Cousot,The Calculational Design of aGeneric Abstract Interpreter. M. Broyand R. Stein-brüggen(eds.),CalculationalSystemDesignNATOASISeriesF.Amsterdam:IOSPress,1999. [9] RonCytron Jeanne Ferrante BarryK. Rosen MarkN. Wegman and F.Kenneth Zadeck,An ecient
methodofcomputingstaticsingleassignmentform.16thACMSymposiumonPrinciplesofProgramming Languages,1989.
[10] B.A.DaveyandH.A.Priestley,IntroductiontoLatticesandOrder.CambridgeMathematical Text-books,Cambridgeuniversitypress,1990.
[11] GiorgioDelzanno,AndreasPodelskiModel Checking inCLP.TACAS1999.
[12] Arnaud Gotlieb, Bernard Botella, Michel Rueher, Automatic Test Data Generation using ConstraintSolving Techniques.InternationalSymposiumonSoftwareTestingandAnalysis,1998. [13] JoxanJaffar andMichaelMaher,ConstraintLogic Programming: ASurvey.Journal ofLogic
Pro-gramming,1994.
[14] Xavier Leroy, The Objective Caml system (release 3.00) Documentation and user's manual. http ://caml.inria.fr/ocaml/htmlman2000.
[15] AlanK.Mackworth,ConsistencyinNetworksof Relations.ArticialIntelligence,1977. [16] G.D. Plotkin,A structural approachtooperational semantics.AarhusUniversity,1981.
[17] DavidA.Schmidt,AbstractInterpretationofSmall-StepSemantics.5thLOMAPSWorkshopon Ana-lysisandVericationof Multiple-AgentLanguages,LNCS1192,1997.
[18] PierreWeiset XavierLeroy,Le langageCaml(2 e