• Aucun résultat trouvé

Etude d’un exemple ´

4.4 Le cas particulier des invariants inductifs

4.4.3 Etude d’un exemple ´

L’exemple suivant illustre l’utilisation de l’algorithme 2 pour calculer des in- variants sous l’hypoth`ese d’inductivit´e. Il permet aussi d’expliquer comment sont effectu´es les calculs de l’op´erateur de division Rem dans ce cas. On consid`ere le programme mannadiv d´efini par la figure4.4.3. Ce programme permet de calculer la division enti`ere de la valeur x1 par la valeur x2, ces deux valeurs ´etant donn´ees

en entr´ee du programme. 1. y1 := 0; y2 := 0; y3 := x1; 2. while y3 6= 0 do 3. if x2 = y2+ 1 then 4. y1 := y1+ 1; y2 := 0; y3 := y3− 1; 5. else 6. y2 := y2+ 1; y3 := y3− 1; 7.

Figure 4.8 – Le programme polynomial mannadiv.

Invariant inductif pour mannadiv.

Notons Ii l’id´eal g´en´er´e en d´eroulant la s´emantique de l’instruction `a la ligne

i. Notre analyse prend en entr´ee l’id´eal I7 = <g>, qui contient le poly-

nˆome quadratique ai-pl le plus g´en´erique (not´e g), et effectue une s´erie d’ins-

tanciation de variables avant d’´evaluer l’instruction if de la ligne 3. Notons g1 = g[y3−1/y3; 0/ y2; y1+1/ y1] et g2 = g[ y3−1/ y3; y2+1/

y2] les polynˆomes r´esultant de ces instanciations. L’id´eal I3 est d´efini en utilisant l’op´eration Rem(g1, p) avec

p = x2− y2− 1. Le choix de l’op´erateur de division est crucial pour notre analyse

et un mauvais choix pourrait mener `a un manque de pr´ecision. De ce fait, nous ne choisissons pas d’op´erateur de division particulier : la division est effectu´ee de mani`ere param´etr´ee. Plus pr´ecis´ement, nous introduisons le polynˆome q, le polynˆome bi-pl le plus g´en´erique de degr´e deg(g1)− deg(p) = 1, et d´efinissons

Rem(g1, p) = g1− q.p = g1− (b0+ b1x1+ b2x2+ b3y1+ b4y2+ b5y3).(x2− y2− 1)

Les nouveaux param`etres bi viennent s’ajouter aux param`etres ai d´ej`a d´efinis.

Ces deux types de param`etres seront trait´es au mˆeme niveau par notre analyse. Il faut alors noter que le polynˆome Rem(g1, p) produit est un {ai, bi}-pl. Ceci est

essentiel pour que les contraintes g´en´er´ees plus loin soient lin´eaires. Nous insistons sur le fait que le choix de l’op´erateur de division n’a pas ´et´e r´ealis´e. En fait, ce choix est effectu´e par l’analyse elle-mˆeme : l’analyse produit des contraintes dont la r´esolution finale fournira la valeur des bi. Rappelons au passage que la preuve

division param´etr´ee permet de fournir le « bon » op´erateur de division, c.`a.d. celui qui a le plus de chance de produire des contraintes admettant une solution et par cons´equent de g´en´erer un invariant. L’id´eal I3 est alors d´efini par I3 =

<(x2 − y2− 1).g2, Rem(g1, p)>.

L’instruction while de la ligne 2 d´eclenche l’utilisation de l’hypoth`ese d’induc- tivit´e (th´eor`eme 4.6), qui pr´ecise que le corps de la boucle maintient l’invariant original, ce qui revient `a contraindre I3 `a ˆetre ´egal `a I7. Cette contrainte peut

ˆ

etre satisfaite en imposant Rem(g1, p) = g et g2 = g. Notons Cw1 et Cw2 ces deux contraintes. De plus, par le th´eor`eme4.7 nous avons I2 = I7. Les substitutions de

la ligne 1 op`erent sur I2; enfin, on noteCi la contrainte ´enon¸cant la nullit´e de I1. Il

est important de noter ici que les contraintesCw∗ etCi expriment deux propri´et´es diff´erentes de l’invariant : la contrainte Cw∗ est une contrainte d’inductivit´e alors que la contrainte Ci exprime la nullit´e initiale.

L’´etape 4 de l’algorithme 2 consiste `a r´esoudre la conjonction de toutes les contraintes : Ci Cw2 Cw1 a6+ a10+ a20= 0 a20 = a18 a10= a8 a1+ a5 = 0 a19 = 2 a18 a20= a15 a7+ a14= 0 a17 = a16 b4+ a13 = 0 a0 = a2 = a11= 0 a4 = a5 b0 = a12− a14 a10 = a9 a5 = a3− a14+ a12 a7+ a14 a4 = a12− a13− a14 a14 = a13 a17= 2 a15 a18+ a13 = 0 a9 = a16= a19 = 0 b1 = b2 = b3 = b5 = 0

Ces contraintes admettent pour solution a12 = a5 = a4 = b0 = −a1, tous les

autres param`etres valant 0. Ceci signifie, en particulier, que le « bon » op´erateur de division consistait juste `a soustraire `a g1 le polynˆome −a1.(x2− y2− 1).

Finalement, l’instanciation directe du polynˆome ai-pl permet d’obtenir l’in-

variant suivant : x1 = y1x2+ y2+ y3.

4.5

R´esultats exp´erimentaux

L’analyse fastind a, dans un premier temps, donn´e lieu `a une impl´emen- tation en Maple. Nous pr´esentons, dans le tableau 4.9 les r´esultats obtenus par notre analyse sur des benchmarks tir´es des articles de Rodr´ıguez-Carbonell & Kapur [RCK07b, RCK07a]. Ces r´esultats ont ´et´e obtenus sur une machine Mac OS X avec processeur Intel Core 2 Duo 2.8 GHz dot´ee de 4 Go de RAM.

Les exemples list´es dans ce tableau sont des programmes pour lesquels l’hy- poth`ese d’inductivit´e est v´erifi´ee `a chaque boucle. En fait, l’ensemble de ces exemples est pr´ecis´ement l’ensemble des exemples de Rodr´ıguez-Carbonell & Ka- pur [RCK07b, RCK07a] pour lesquels l’hypoth`ese d’inductivit´e est v´erifi´ee.

Name d Var fastind

dijkstra 2 5 0.043 divbin 2 5 0.005 freire1 2 3 0.006 freire2 2 4 0.007 cohencu 2 4 0.009 fermat 2 5 0.006 wensley 2 5 0.037 euclidex 2 8 0.008 lcm 2 6 0.006 prod4 3 6 0.013 knuth 3 9 0.084 petter1 2 2 0.003 petter2 3 2 0.003 petter3 4 2 0.004 petter4 5 2 0.004 petter5 6 2 0.006 sqrt 2 3 0.010 mannadiv 2 5 0.005 freire2 3 4 0.012 cohencu 3 4 0.018 petter19 20 2 0.196 petter30 31 2 1.423 mannadiv2 2 5 0.0− − mannadiv3 3 5 0.0− −

Figure 4.9 – Performance de l’analyse fastind sur les exemples inductifs de la litt´erature

La premi`ere colonne liste les noms donn´es aux programmes [RCK07b,

RCK07a]. La deuxi`eme pr´esente le degr´e d de l’invariant g´en´er´e. La troisi`eme colonne (Var) repr´esente le nombre de variables du programmes. Ainsi, chaque exemple du tableau a ´et´e test´e en partant du polynˆome ai-g´en´erique de degr´e d

saire `a notre analyse pour g´en´erer l’invariant souhait´e. Nous avons list´e en fin de tableau des exemples non pr´esents tels quels dans la litt´erature.

Rappelons maintenant que l’analyse fastind, du fait de l’hypoth`ese d’induc- tivit´e, permet la g´en´eration d’invariants sans n´ecessiter de calcul it´eratif. Ceci repr´esente un avantage important par rapport aux analyses existantes dans la litt´erature [MOS02, MOS04, SSM04b, RCK04a, RCK07a, RCK07b]. Nous com- mentons maintenant plus avant ces analyses et les comparons `a l’analyse fastind d’un point de vue s´emantique ainsi que du point de vue des r´esultats exp´erimen- taux.