Domaines relationnels
TAS : Typage et analyse statique M2, Master STL INSTA, Sorbonne Universit´ e
Antoine Min´ e
Ann´ee 2018–2019
Cours 12
21 mars 2019
Rappel : domaines num´ eriques non relationnels
x y
x y
x y
signes constantes intervales parit´ es
Principe :
d´ efinir une abstraction D
]d’ensembles d’entiers P ( Z )
et des abstractions +],−],×],/],∪],⊆],≤], . . .
repr´ esenter un ensemble d’environnements X ∈ P(E ) en associant ` a chaque variable une valeur abstraite : X
]∈ E
] def= V → D
]E
]a une structure de treillis
extension de⊆],∪],∩]point `a point
S
]J V ← e K et C
]J e
1./ e
2K sont d´ eriv´ es syst´ ematiquement par des algorithmes g´ en´ eraux
param´etr´es par l’implantation de +],−],. . .surD]
Perte de pr´ ecision : abstraction cart´ esienne
Perte de pr´ ecision :
Les domaines non relationnels :
abstraient les variables ind´ ependemment les unes des autres effectuent implicitement une abstraction cart´ esienne :
X ∈ P(E) 7→ { ρ ∈ V → Z | ∀V ∈ V , ∃ρ
0∈ X , ρ(V ) = ρ
0(V ) } ils oublient donc les relations entre les variables
(U ∈ {0, 2}) ∧ (V ∈ {0, 2}) ∧ (U + V ≤ 2) = ⇒ (U, V ) ∈ {0, 2} × {0, 2}
Am´ eliorer la pr´ ecision
Deux types de domaines plus pr´ ecis, au del` a des domaines non-relationnels.
Les domaines disjonctifs vus au cours pr´ ec´ edent.
e.g., permettent de repr´esenter (x= 1∧y= 1)∨(x= 2∧y= 2), non convexe
Les domaines relationnels convexes :
permettant de repr´esenter des relations conjonctives entre variables
poly` edres
(e.g., 2x+ 3y≤z)zones
(e.g.,x≤y+ 10)Domaines num´eriques relationnels
Domaines num´ eriques relationnels
Domaines num´eriques relationnels Motivation
Motivation
x y
poly` edres zones
Repr´ esenter des relations entre variables est n´ ecessaire : si l’assertion ` a prouver est relationnelle
i≤ ndans l’acc`esa[i]o`u la taillendu tableau n’est pas constante
mais ´ egalement pour ´ eviter l’accumulation des pertes de pr´ ecision mˆ eme quand l’assertion ` a prouver est non-relationnelle
Rappel : la composition d’abstractions optimales n’est pas forc´ement optimale
Les domaines relationnels sont plus coˆ uteux que les domaines non-relationnels
= ⇒ importance de trouver un compromis coˆ ut / pr´ ecision, expressivit´ e
Exemple : intervalles←α zones←α poly`edres
Domaines num´eriques relationnels Motivation
Exemple : affectations et tests relationnels
Exemple
X ← rand(0, 10);
Y ← rand(0, 10);
if X ≥ Y then X ← Y else skip;
D ← Y − X ; assert D ≥ 0
Analyse d’intervalles :
C
]J X ≥ Y K est abstrait par l’identit´ e ;
c’est l’abstraction optimale ! siR] def= [X 7→[0,10],Y 7→[0,10]]
alors : S]JifX≥Y thenX←Yelse skipKR]=R]
D ← Y − X donne D ∈ [0, 10] −
][0, 10] = [−10, 10] ;
l’assertion D ≥ 0 n’est pas prouv´ ee.
Domaines num´eriques relationnels Motivation
Exemple : affectations et tests relationnels
Exemple
X ← rand(0, 10);
Y ← rand(0, 10);
if X ≥ Y then X ← Y else skip;
D ← Y − X ; assert D ≥ 0
Solution : utiliser un domaine relationnel, capable de : repr´ esenter explicitement l’information X ≤ Y
inf´ erer que X ≤ Y est vrai apr` es if X ≥ Y then X ← Y else skip
X ≤Y est vrai apr`esX←Y quandX≥Y et apr`esskipquandX<Y
utiliser X ≤ Y pour en d´ eduire que Y − X ≥ 0, donc D ≥ 0.
Note :
l’invariant recherch´e,D≥0, peut ˆetrerepr´esent´e exactement dans le domaine des intervalles mais l’inf´erenceet lapreuvedeD≥0 n´ecessitentlocalementundomaine plus expressif.
Domaines num´eriques relationnels Motivation
Invariant de boucle relationnel
Exemple I ← 1; X ← 0;
while I ≤ 1000 do I ← I + 1;
X ← X + 1 done;
assert X ≤ 1000 Analyse d’intervalles :
apr` es deux it´ erations avec ´ elargissement, nous trouvons : comme invariant de boucle : I ∈ [1, +∞] et X ∈ [0, +∞]
apr` es la boucle : I ∈ [1001, +∞] et X ∈ [0, +∞] = ⇒ assert non prouv´ e en utilisant des it´ erations d´ ecroissantes apr` es l’´ elargissement, nous avons :
comme invariant de boucle : I ∈ [1, 1001] et X ∈ [0, +∞]
apr` es la boucle : I = 1001 et X ∈ [0, +∞] = ⇒ assert non prouv´ e
le testI≤1000 raffine bienI, mais ne donne aucune information surX
sans ´ elargissement, nous avons I = 1001 et X = 1000
= ⇒ assert est prouv´ e
mais cela n´ ecessite 1000 it´ erations !
('calcul de point fixe concret)Domaines num´eriques relationnels Motivation
Invariant de boucle relationnel
Exemple I ← 1; X ← 0;
while I ≤ 1000 do I ← I + 1;
X ← X + 1 done;
assert X ≤ 1000 Solution : domaines relationnels
inf´ erer un invariant de boucle relationnel : I = X + 1 ∧ 1 ≤ I ≤ 1001 qui repr´ esente de mani` ere compacte l’ensemble de toutes les it´ erations
I=X+ 1 est vrai avant d’entrer dans la boucle, car 1 = 0 + 1 I=X+ 1 est invariant par un tour de boucleI←I+ 1;X←X+ 1 cet invariant peut ˆetre inf´er´een deux it´erationsavec ´elargissement dans le domaine des poly`edres !
apr` es propagation du test de sortie de boucle I > 1000, nous trouvons :
I= 1001
X=I−1 = 1000 =⇒assertest prouv´e Note :
l’invariant recherch´e en fin de boucle estrepr´esentabledans les intervalles :X≤1000 mais nous avons besoin pour le trouver d’uninvariant de boucle strictement plus expressif
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Domaine abstrait des poly` edres
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Le domaine des poly` edres
Nous cherchons comme invariants des conjonctions d’in´ egalit´ es affines :
∧
j( P
ni=1
α
ijV
i≥ β
j)
o`u les coefficientsαijetβj sont inf´er´es automatiquementLe domaine des poly` edres a ´ et´ e propos´ e par Cousot et Halbwachs en 1978.
E
]' { poly` edres convexes clos de V → R }
Notes :
un poly` edre n’est pas n´ ecessairement born´ e ;
nous raisonnons dans R pour exploiter les r´ esultats de l’alg` ebre lin´ eaire,
sans perte d’expressivit´ e
(un sous-ensemble deZest aussi un sous-ensemble deR. . . ).
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Double description des poly` edres
Il existe deux mani` eres duales de d´ ecrire un poly` edre.
(th´eor`eme de Weyl–Minkowski)
Repr´ esentation par contraintes
Sous forme matricielle : hM, ~ Ci o` u M ∈ Q
m×net C ~ ∈ Q
mrepr´ esente γ(hM, ~ Ci) =
def{ V ~ | M × V ~ ≥ C ~ }
Ou sous forme d’ensemble de contraintes { P
i
α
ijV
i≥ β
j}.
(chaque contrainte est une ligne de la matrice. . . )
Repr´ esentation par g´ en´ erateurs [P, R] o` u
P ∈ Q
n×pest un ensemble de p sommets : ~ P
1, . . . , ~ P
pR ∈ Q
n×rest un ensemble de r rayons : ~ R
1, . . . , ~ R
rγ([P, R])
def= { ( P
pj=1
α
j~ P
j) + ( P
rj=1
β
jR ~
j) | ∀j, α
j, β
j≥ 0: P
pj=1
α
j= 1 }
Note : les coordonn´ees et les coefficients sont dansQ, pour ˆetre repr´esentables en machine.
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Double description des poly` edres (suite)
Exemples de repr´ esentations par g´ en´ erateurs : γ([P, R])
def= { ( P
pj=1
α
j~ P
j) + ( P
rj=1
β
jR ~
j) | ∀j, α
j, β
j≥ 0: P
pj=1
α
j= 1 }
P1
P2
P3
P4 P5
P1
P2 P3
R1
R2
les sommets d´ efinissent une enveloppe convexe born´ ee ;
les rayons permettent de repr´ esenter des poly` edres non born´ es.
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Double description : avantages et inconv´ enients
Avantage :
Les op´ erations abstraites sont g´ en´ eralement tr` es faciles en utilisant la bonne repr´ esentation.
(exemples : contraintes pour∩], g´en´erateurs pour∪])
= ⇒ l’algorithmique des poly` edres se r´ eduit ` a un seul algorithme complexe et coˆ uteux : le passage d’une repr´ esentation ` a l’autre.
Inconv´ enient :
Passer d’une repr´ esentation ` a l’autre peut g´ en´ erer
une explosion exponentielle de la taille de la repr´ esentation ! Exemple : un hypercube dans R
n, avec des faces parall` eles aux axes
a 2n contraintes ;
mais 2
ng´ en´ erateurs (les sommets de l’hypercube) ;
forme abstraite rencontr´ ee fr´ equemment en analyse de programmes !
Nous ne sommes pas libres de choisir la repr´esentation la plus compacte ; le choix de repr´esentation est dict´e par les besoins des op´erations abstraites. . .
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Unicit´ e des repr´ esentations
Repr´ esentations minimales
Un syst` eme de contraintes (de g´ en´ erateurs) est minimal si aucune contrainte (g´ en´ erateur) ne peut ˆ etre omise sans changer la concr´ etisation.
Les repr´ esentations, mˆ eme minimales, ne sont pas uniques !
et deux repr´esentations minimales d’un mˆeme poly`edre n’ont pas forc´ement la mˆeme taille
Exemple : trois syst` emes de contraintes repr´ esentant un point
(a) (b) (c)
(a) y + x ≥ 0, y − x ≥ 0, y ≤ 0, y ≥ −5
non minimal(b) y + x ≥ 0, y − x ≥ 0, y ≤ 0
minimal(c) x ≤ 0, x ≥ 0, y ≤ 0, y ≥ 0
minimalDomaines num´eriques relationnels Domaine abstrait des poly`edres
Borne sur les repr´ esentations des poly` edres
Il n’y a pas de borne sur la taille des repr´ esentations de poly` edres.
mˆeme sur les repr´esentations minimales
Il n’y a pas d’op´ erateur d’abstraction α ;
pas de repr´esentation optimale pour certains ensembles de points
= ⇒ il n’y a donc pas de correspondance de Galois ni de meilleure abstraction pour tout op´ erateur.
Exemple :
un disque a une infinit´e de sur-approximations par des poly`edres ;
aucune sur-approximation n’est la meilleure.
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Passage de repr´ esentation : algorithme de Cherknikova ? ? ?
Algorithme de Chernikova (1968), am´ elior´ e par LeVerge (1992) :
passe d’un syst` eme de contraintes ` a un syst` eme de g´ en´ erateurs ´ equivalent ; par dualit´ e, convertit ´ egalement des g´ en´ erateurs en contraintes ;
minimise la repr´ esentation ` a la vol´ ee.
Intuition : algorithme incr´ emental
part d’une repr´ esentation en g´ en´ erateurs de R
n; ajoute les contraintes une par une ;
filtre les g´ en´ erateurs pour ne garder que ceux qui satisfont chaque nouvelle contrainte ;
d´ eplace les autres g´ en´ erateurs jusqu’` a ce qu’ils satisfassent la contrainte.
i.e., qu’ilssaturentla contrainte
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Algorithme de Cherknikova : illustration ? ? ?
Exemple : d´ eplacement de sommets et de rayons.
O P
Q
P
Pour chaque paire P, Q de sommets : si P satisfait la contrainte et Q ne satisfait pas la contrainte Q est d´ eplac´ e vers P jusqu’` a toucher l’hyper-plan supportant la contrainte
R
S
R
O
Pour chaque paire R, S de rayons :
si R satisfait la contrainte
et S ne satisfait pas la contrainte
S est tourn´ e vers R jusqu’` a ˆ etre
parall` ele ` a l’hyper-plan de la contrainte
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Algorithme de Cherknikova : exemple ? ? ?
(0) (1) (2) (3)
Ajout de trois contraintes, une par une :
P
0= {(0, 0)} R
0= {(1, 0), (−1, 0), (0, 1), (0, −1)}
Y ≥ 1 P
1= {(0, 1)} R
1= {(1, 0), (−1, 0), (0, 1)}
X + Y ≥ 3 P
2= {(2, 1)} R
2= {(1, 0), (−1, 1), (0, 1)}
X − Y ≤ 1 P
3= {(2, 1), (1, 2)} R
3= {(0, 1), (1, 1)}
nous avons omis les g´en´erateurs redondants g´en´er´es par cette version na¨ıve de l’algorithme ; l’algorithme complet sait supprimer ces g´en´erateurs automatiquement
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Op´ erateurs abstraits sur les poly` edres
Op´ erations ensemblistes :
Si X
], Y
]6= ⊥, nous d´ efinissons :
X
]⊆
]Y
]⇐⇒
def∀ ~ P ∈ P
X]: M
Y]× ~ P ≥ C ~
Y]∀ R ~ ∈ R
X]: M
Y]× R ~ ≥ ~ 0
chaque g´en´erateur deX]satisfait toutes les contraintes deY]
X
]=
]Y
]⇐⇒
defX
]⊆
]Y
]et Y
]⊆
]X
]double inclusion
X
]∩
]Y
]=
defM
X]M
Y],
C ~
X]C ~
Y]union des ensembles de contraintes
⊆
], =
]et ∩
]sont exacts
dansP(V→R)Domaines num´eriques relationnels Domaine abstrait des poly`edres
Op´ erateurs abstraits sur les poly` edres (suite)
Union : X
]∪
]Y
] def= [ [P
X]P
Y]], [R
X]R
Y]] ]
union des ensembles de g´en´erateurs Exemples :deux poly` edres born´ es un point et une ligne
∪
]est optimal
dansP(V→R):
(αn’est pas toujours d´efini, maisα(γ(X])∪γ(Y])) existe toujours)
= ⇒ clˆ oture topologique de l’enveloppe convexe de γ(X
]) ∪ γ(Y
]) : tous nos poly` edres sont convexes ;
la clˆ oture sert en cas de poly` edres infinis et permet une repr´ esentation avec des contraintes non-strictes
???
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Op´ erateurs abstraits sur les poly` edres (suite)
Test affine : C
]J
P
i
α
iV
i≥ β K X
]=
defM
X]α
1· · · α
n,
~ C
X]β
simple ajout de contrainte ; l’op´ erateur est exact ;
les autres tests peuvent ˆ etre abstraits par C
]J c K X
]=
defX
].
(sˆur mais tr`es peu pr´ecis)
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Op´ erateurs abstraits sur les poly` edres (suite)
Affectation non-d´ eterministe :
S
]J V
j← rand(−∞, +∞) K X
]=
def[ P
X], [ R
X]~ x
j(−~ x
j) ] ]
dans le concret :
S J V
j← rand(−∞, +∞) K R = { ρ[V
j7→ v ] | ρ ∈ R, v ∈ R } ; dans l’abstrait :
ajout de deux rayons, dans la direction de la variable “oubli´ ee”;
cet op´ erateur est exact
dansP(V→R).
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Op´ erateurs abstraits sur les poly` edres (suite)
Affectation affine : S
]J V
j← P
i
α
iV
i+ β K X
]=
defsi α
j6= 0, hM, ~ C i o` u V
jest remplac´ e par
α1j
(V
j− P
i6=j
α
iV
i− β) si α
j= 0, C
]J V
j= P
i
α
iV
i+ β K (S
]J V
j← rand(−∞, +∞) K X
]) si α
j6= 0, nous effectuons une substitution par l’inverse
Exemple :X←2X+Y
X est remplac´e par (X−Y)/2 dans le syst`eme de contraintes c.f., logique de Hoare
si α
j= 0, l’affectation n’est pas inversible
Exemple :X←Y
oubli de l’ancienne valeur deX puis ajout de la contrainteX=Y
l’op´ eration est exacte
dansP(V→R)les affectations non-affines peuvent ˆ etre mod´ elis´ ees par : S
]J V ← e K
def
= S
]J V ← rand(−∞, +∞) K
(sˆur mais peu pr´ecis)
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Op´ erateurs abstraits sur les poly` edres (illustration)
Affectation affine : S
]J V
j← P
i
α
iV
i+ β K X
]=
defsi α
j6= 0, hM, ~ C i o` u V
jest remplac´ e par
α1j
(V
j− P
i6=j
α
iV
i− β) si α
j= 0, C
]J V
j= P
i
α
iV
i+ β K (S
]J V
j← rand(−∞, +∞) K X
]) Exemples :
X ← X + Y
X ← Y
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Elargissement na¨ıf sur les poly` ´ edres
E
]a des chaˆınes infinies strictement croissantes
= ⇒ nous avons besoin d’un ´ elargissement
D´ efinition : X
]O Y
]=
def{ c ∈ X
]| Y
]⊆
]{c} } garde les contraintes de X
]satisfaites par Y
];
contrairement ` a ∪
], pas de cr´ eation de nouvelle contrainte ; O r´ eduit l’ensemble des contraintes
= ⇒ la terminaison est garantie.
Exemple :
{X≥1,Y≥1,Y ≤1}O{X≥1,Y ≥1,Y≤2,X≥Y}={X≥1,Y ≥1}
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Elargissements avanc´ ´ es sur les poly` edres ? ? ?
Prise en compte des contraintes de Y
]X
]O Y
]=
def{ c ∈ X
]| Y
]⊆
]{c} }
∪ { c ∈ Y
]| ∃c
0∈ X
]: X
]=
](X
]\ c
0) ∪ {c} }
garde aussi les contraintes deY]´equivalentes `a des contraintes deX]; c’est un rem`ede `a l’absence d’unicit´e des repr´esentations de poly`edres
{X≥1,Y≥1,Y ≤1}O{X≥1,Y ≥1,Y≤2,X≥Y}={X≥1,X≥Y}
´ Elargissement ´ etag´ e O
Tparam´ etr´ e par un ensemble fini de contraintes affines T : X
]O
TY
]=
def{ c ∈ X
]| Y
]⊆
]{c} }
∪ { c ∈ T | X
]⊆
]{c} ∧ Y
]⊆
]{c} }
ajoute les contraintes deTstables, comme pour les intervalles. . .
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Exemple d’analyse avec les poly` edres
Exemple X ← 2; I ← 0;
while I < 10 do
if rand(0, 1) = 0 then X ← X + 2 else X ← X − 3;
I ← I + 1 done
Invariant de boucle :
it´ erations croissantes avec ´ elargissement :
X1] = {X= 2,I= 0}
X2] = {X= 2,I= 0}O({X= 2,I= 0} ∪]{X∈[−1,4],I= 1})
= {X= 2,I= 0}O{I∈[0,1],2−3I≤X≤2I+ 2}
= {I≥0,2−3I≤X≤2I+ 2}
it´ erations d´ ecroissantes :
pour retrouverI≤10X3] = {X= 2,I= 0} ∪]{I∈[1,10],2−3I≤X≤2I+ 2}
= {I∈[0,10],2−3I≤X≤2I+ 2}
nous trouvons, en sortie de boucle : I = 10 ∧ X ∈ [−28, 22]
Domaines num´eriques relationnels Domaine abstrait des poly`edres
Exemple d’analyse avec les poly` edres (illustration)
Exemple X ← 2; I ← 0;
while I < 10 do
if rand(0, 1) = 0 then X ← X + 2 else X ← X − 3;
I ← I + 1 done
X#1 F#(X#1) X#2 X#3
X1] = {X= 2,I= 0}
X2] = {X= 2,I= 0}O({X= 2,I= 0} ∪]{X∈[−1,4],I= 1})
= {I≥0,2−3I≤X≤2I+ 2}
X3] = {X= 2,I= 0} ∪]{I∈[1,10],2−3I≤X≤2I+ 2}
= {I∈[0,10],2−3I≤X≤2I+ 2}
Domaines num´eriques relationnels Domaine abstrait des zones
Domaine abstrait des zones
Domaines num´eriques relationnels Domaine abstrait des zones
Le domaine des zones
Restriction des poly` edres ` a des contraintes de la forme : V V
i− V
j≤ c ou ± V
i≤ c, c ∈ Q contraintes d’intervalle V
i∈ [c, c
0] ;
mais aussi, bornes sur les diff´ erences de variables V
i− V
j≤ c ;
=⇒relations utiles dans les boucles, les acc`es de tableau, etc.
un tel poly` edre est appel´ e une zone ;
les calculs sur les zones sont plus efficaces que sur les poly` edres g´ en´ eraux.
on retrouve aussi les zones dans lemodel-checkingdes automates temporis´es
Domaines num´eriques relationnels Domaine abstrait des zones
Repr´ esentation sous forme de graphe
Les contraintes V
j− V
i≤ c sont appel´ ees contraintes de potentiel.
(car invariantes par l’ajout d’une constante `a toutes les variables)
Graphe de potentiel : G
Repr´ esentation d’un ensemble de contraintes de potentiel par : un graphe pond´ er´ e G ;
dont les nœuds sont ´ etiquet´ es par les variables du programme V ; un arc va de V
i` a V
jpour chaque contrainte V
j− V
i≤ c ; l’arc est annot´ e avec le poids c ;
= ⇒ nous allons utiliser des algorithmes de graphe.
Contraintes d’intervalle :
Repr´ esent´ ees sous forme de contraintes de potentiel, grˆ ace ` a une variable sp´ eciale, V
0, ´ egale ` a la constante z´ ero :
V
i≤ c est encod´ e par V
i− V
0≤ c V
i≥ c est encod´ e par V
0− V
i≤ −c Exemple :
V
0 4 3!!
V
1−1
==
V
2nn
−1oo
1V
1∈ [1, 4], V
2∈ [1, 3], V
1− V
2≤ 1
Domaines num´eriques relationnels Domaine abstrait des zones
Repr´ esentation sous forme de matrice
Matrices de diff´ erences born´ ees (Difference Bound Matrices, DBM) Matrice d’adjacence m d’un graphe de potentiel G :
m est carr´ ee, de taille n × n, ` a ´ el´ ements dans Q ∪ {+∞} ; m
ij= c < +∞ d´ enote la contrainte V
j− V
i≤ c ;
m
ij= +∞ si il n’y a pas de borne sup´ erieure ` a V
j− V
i;
= ⇒ repr´ esentation plus compacte et plus pratique que les graphes.
Concr´ etisation :
γ(m) =
def{ (v
1, . . . , v
n) ∈ R
n| ∀i, j ∈ [0, n]: v
j− v
i≤ m
ij∧ v
0= 0 }
Exemple :
V0
V2
V1
V
0V
1V
2V
0+∞ 4 3
V
1−1 +∞ +∞
V
2−1 1 +∞
Domaines num´eriques relationnels Domaine abstrait des zones
Le treillis des matrices
E
]contient les matrices DBMs, ainsi que ⊥.
L’ordre naturel ≤ sur Q ∪ {+∞} est ´ etendu point ` a point.
Si m, n 6= ⊥ :
m v n ⇐⇒
def∀i, j : m
ij≤ n
ijm = n ⇐⇒
def∀i, j : m
ij= n
ij[m u n]
ij=
defmin(m
ij, n
ij) [m t n]
ij=
defmax(m
ij, n
ij)
[>]
ij=
def+∞
(E
], v, t, u, ⊥, >) est un treillis.
Notes :
m v n = ⇒ γ(m) ⊆ γ(n), mais pas la r´ eciproque ;
m = n = ⇒ γ(m) = γ(n), mais pas la r´ eciproque.
Domaines num´eriques relationnels Domaine abstrait des zones
Forme normale et test d’inclusion
Probl` eme : comment comparer γ(m) et γ(n) ? Solution : d´ efinir une forme normale
Principe : propagation de contraintes
Ajouter deux contraintes permet de d´ eriver une nouvelle contrainte et raffiner une borne existante.
V
0− V
1≤ 3 V
1− V
2≤ −1 V
0− V
2≤ 4
V
0− V
1≤ 3 V
1− V
2≤ −1 V
0− V
2≤ 2
V
1 3!! V
2−1
==
4
// V
0= ⇒
V
1 3!! V
2−1
==
2
// V
0G´ en´ eralisation : clˆ oture par plus courts chemins m
∗m
ij∗=
defmin
N hi=i1, . . . ,iN=ji
N−1
X
k=1
m
ikik+1Bien d´efini uniquement simn’a pas de cycle avec un poids total strictement n´egatif.
Domaines num´eriques relationnels Domaine abstrait des zones
Algorithme de Floyd–Warshall
Propri´ et´ es :
γ(m) = ∅ ⇐⇒ G a un cycle de poids total strictement n´ egatif
si γ(m) 6= ∅, la clˆ oture par plus courts chemins m
∗est une forme normale : m
∗= min
v{ n | γ(m) = γ(n) }
(chaque borne sup´erieure de contrainte est la plus stricte possible)
si γ(m), γ(n) 6= ∅, alors
γ(m) = γ(n) ⇐⇒ m
∗= n
∗γ(m) ⊆ γ(n) ⇐⇒ m
∗v n
Algorithme de Floyd–Warshall (
m
0ij=
defm
ijm
k+1ij=
defmin(m
kij, m
ikk+ m
kkj)
algorithme classique, qui it` ere des propagations locales
si γ(m) 6= ∅, alors m
∗= m
n+1(forme normale)
γ(m) = ∅ ⇐⇒ ∃i : m
n+1ii< 0 (teste du vide)
m
n+1peut ˆ etre calcul´ e en temps O(n
3)
Domaines num´eriques relationnels Domaine abstrait des zones
Op´ erateurs abstraits
Union abstraite ∪
]: version na¨ıve : t
rappel : [mtn]ij= max(mij,nij)t est une abstraction sˆ ure de ∪,
mais γ(m t n) n’est pas forc´ ement la plus petite zone contenant γ(m) et γ(n) !
l’union de deux boˆıtes avectn’est pas plus pr´ecise dans les zones que dans les intervalles !
Domaines num´eriques relationnels Domaine abstrait des zones
Op´ erateurs abstraits (suite)
Union abstraite ∪
]: version pr´ ecise : t apr` es clˆ oture (m
∗) t (n
∗) est par contre optimal
nous avons :
(m
∗) t (n
∗) = min
v{ o | γ(o) ⊇ γ(m) ∪ γ(n) } ce qui implique :
γ((m
∗) t (n
∗)) = min
⊆{ γ(o) | γ(o) ⊇ γ(m) ∪ γ(n) }
apr`es clˆoture, des contraintesc≤X−Y ≤dajout´ees permettent une union plus pr´ecise
(m
∗) t (n
∗) est toujours close.
Domaines num´eriques relationnels Domaine abstrait des zones
Op´ erateurs abstraits (suite)
Intersection abstraite ∩
]: u
rappel : [mun]ij= min(mij,nij)E
]est clos par intersection
(Rappel : c’est le cas de la plus part des domaines)
u est toujours une abstraction exacte de ∩ : γ(m u n) = γ(m) ∩ γ(n)
(m
∗) u (n
∗) n’est pas forc´ ement close. . .
Note :
L’ensemble des matrices closes avec⊥, et les op´erationsv,t,λm,n.(mun)∗forme un sous-treillis.
γest injective dans ce sous-treillis.
Domaines num´eriques relationnels Domaine abstrait des zones
Op´ erateurs abstraits (suite)
Tests simples :
Si la contrainte peut ˆ etre repr´ esent´ ee exactement dans les zones, il suffit de l’ajouter,
en modifiant un ´ el´ ement de la matrice.
C
]J V
j0− V
i0≤ c K m
ij def
=
min(m
ij, c) si (i , j) = (i
0, j
0),
m
ijsinon.
l’op´ erateur est exact ;
pour les autres tests, nous pouvons utiliser l’identit´ e :
C
]J e
1./ e
2K m = m.
Domaines num´eriques relationnels Domaine abstrait des zones
Op´ erateurs abstraits (suite)
Affectations simples :
– Cas o` u la contrainte X − e peut ˆ etre repr´ esent´ ee exactement dans les zones : S
]J V
j0← V
i0+ a K m
def=
S
]J V
j0− V
i0= a K (S
]J V
j0← rand(−∞, +∞) K m) si i
06= j
0S
]J V
j0← V
j0+ a K m
ij def
=
m
ij− a si i = j
0et j 6= j
0m
ij+ a si i 6= j
0et j = j
0m
ijsinon.
– Cas non-d´ eterministe : oubli de contraintes S
]J V
j0← rand(−∞, +∞) K m
ij
=
def+∞ si i = j
0ou j = j
0, m
ij∗sinon.
(non optimal si l’argument n’est pas clos !)
ces op´ erations sont exactes ;
pour les autres affectations, nous pouvons utiliser le cas non-d´ eterministe :
S
]J X ← e K m = S
]J X ← rand(−∞, +∞) K m
Domaines num´eriques relationnels Domaine abstrait des zones
Elargissement ´
Le domaine des zones a des chaˆınes infinies strictement croissantes
= ⇒ un ´ elargissement O est n´ ecessaire.
´ Elargissement O [m O n]
ij=
defm
ijsi n
ij≤ m
ij+∞ sinon
Comme pour les intervalles, les bornes non stables sont supprim´ ees.
It´ erations avanc´ ees
???:
Les am´ eliorations connues des intervalles s’appliquent ´ egalement :
´
elargissement ` a ´ etages [m O
Tn]
ij def=
m
ijsi n
ij≤ m
ijmin { t ∈ T | t ≥ n
ij} sinon it´ erations d´ ecroissantes avec r´ etr´ ecissement M [m M n]
ij=
defn
ijsi m
ij= +∞
m
ijsinon
Domaines num´eriques relationnels Domaine abstrait des zones
Autres domaines faiblement relationnels
Domaine faiblement relationnel = restriction des poly` edres.
compromis entre coˆut et pr´ecision
De nombreux domaines ont ´ et´ e propos´ es.
Domaines bas´ es sur une clˆ oture Octogones : ±X ± Y ≤ c
extension des zones par sym´etriex/−x
bas´ee sur une adaptation l´eg`ere de l’algorithme de Floyd-Warshall
Deux variables par in´ egalit´ e : αx + βy ≤ c
algorithme de clˆoture de Nelson
Octa` edres : P
α
iV
i≤ c, α
i∈ { −1, 0, 1 }
propagation incompl`ete, pour ´eviter un coˆut exponentiel
Pentagones : X − Y ≤ 0
propagation incompl`ete, pour atteindre un coˆut lin´eaire
Domaines bas´ es sur la programmation lin´ eaire :
Template : M × V ~ ≥ ~ C en fixant la matrice M
Domaines num´eriques relationnels Domaine abstrait des zones
Domaines num´ eriques : r´ esum´ e
Coˆ ut et pr´ ecision :
domaine invariants coˆ ut m´ emoire coˆ ut en temps
par op´erationintervalles V ∈ [`, h] O(| V |) O(| V |) poly` edres P
i
α
iV
i≥ β
inon born´ e, exponentiel en pratique zones V
i− V
j≤ c O(| V |
2) O(| V |
3)
diff´ erents domaines offrent diff´ erents compromis entre coˆ ut et pr´ ecision, entre coˆ ut et expressivit´ e des invariants relationnels sont parfois n´ ecessaires
mˆeme pour prouver des propri´et´es non-relationnelles
un domaine abstrait est d´ efini par :
le choix de propri´ et´ es abstraites et d’op´ erateurs
aspect s´emantiquedes structures de donn´ ees et des algorithmes
aspect algorithmiqueune analyse mˆ ele deux sortes d’approximations :
des approximations statiques
choix des propri´et´es abstraitesdes approximations dynamiques
´elargissementImplantation : utilisation de la biblioth`eque Apron
Implantation : utilisation de la biblioth` eque
Apron
Implantation : utilisation de la biblioth`eque Apron
Biblioth` eque Apron
Underlying libraries & abstract domains box
intervals
octagons
octagons
NewPolka
convex polyhedra
linear equalities
PPL +Wrapper
convex polyhedra
bbb bbb
linear congruences
Abstraction toolbox – scalar & interval arithmetic – linearization of expressions – fall-back implementations
Data-types Coefficients Expressions Constraints Generators Abs. values
Semantics:A→γ ℘(Zn×Rm) dimensionsandspace dimensionality VariablesandEnvironments Semantics:A→γ ℘(V →Z⊎R)
Developer interface
User interface C API
OCaml binding C++ binding http://apron.cri.ensmp.fr/library
opam install apron
Implantation : utilisation de la biblioth`eque Apron
Modules de la biblioth` eque Apron
Le module Apron contient des sous-modules, dont les plus utiles sont : Abstract1
´el´ements abstraits
Manager
instances de domaine abstrait (pass´e en argument `a toutes les fonctions d’Abstract1)
Polka
fabrique d’objetsManager.tpour la cr´eation d’´el´ements abstraits poly`edres
Var
variable enti`ere ou r´eelle (d´enot´ee par une chaˆıne de caract`eres)
Environment
ensemble de variables enti`eres et r´eelles
Texpr1
arbre d’expression arithm´etique
Tcons1
expression bool´eenne simple (bas´ee surTexpr1)
Coeff
coefficient num´erique (utilis´e dansTexpr1,Tcons1)
Implantation : utilisation de la biblioth`eque Apron
Variables et environnements
Variables :
type Var.tles variables sont identifi´ ees par leur nom
(chaˆıne de caract`eres):
on suppose donc que les variables du programme ont des noms distincts
Var.of_string:string -> Var.t
Environnements :
type Environment.tun ´ el´ ement abstrait repr´ esente un ensemble d’environnements V → R ; V est l’environnement, contenant des variables ` a valeur enti` ere et des variables
` a valeur r´ eelle
Environment.make:Var.t array -> Var.t array -> t
make ivars rvarscr´ee un environnement avec les variables enti`eresivarset les variables r´eellesrvars;
make [||] [||]est l’environnement vide
Environment.add:Environment.t -> Var.t array -> Var.t array -> t add env ivars rvarsajoute des variables enti`eres et r´eelles `aenv Environment.remove:t -> Var.t array -> t
remove env varsenl`eve des variables (enti`eres ou r´eelles) deenv en interne, un ´el´ement abstrait repr´esente un ensemble de points dansRn; l’environnement garde une association entre nom de variable et dimension dans [1,n]
Implantation : utilisation de la biblioth`eque Apron
Expressions
Arbres concrets d’expression :
type Texpr1.exprtypeexpr = |Cst of Coeff.t constantes
|Var of Var.t variables
|Unop of unop * expr* typ * round op´erations unaires
|Binop of binop *expr* expr* typ * round op´erations binaires
op´ erateurs unaires :
type Texpr1.unop= Neg|· · ·
op´ erateurs binaires :
type Texpr1.binop=Add|Sub |Mul|Div|· · ·
types num´ eriques :
nous utilisons ici uniquement les entiers, mais Apron dispose aussi de types r´eels et flottants type Texpr1.typ=Int|· · ·
arrondi :
utile seulement lors de la division d’entiers ; nous utilisons l’arrondi vers z´ero, i.e., la troncature
type Texpr1.round=Zero |· · ·
Implantation : utilisation de la biblioth`eque Apron
Expressions (suite)
Forme d’expression interne ` a la biblioth` eque :
typeTexpr1.tles arbres concrets d’expression doivent ˆ etre convertis dans une forme interne avant d’ˆ etre accept´ es par les op´ erations abstraites
Texpr1.of_expr:Environment.t -> Texpr1.expr -> Texpr1.t
l’environnement est n´ecessaire pour convertir les noms de variables en dimensions dansRn
Coefficients :
typeCoeff.tpeuvent ˆ etre des scalaires {c} ou des intervalles [a, b]
le module
Mpqfpermet la conversion de chaˆınes en entiers de pr´ ecision arbitraire, avant de les convertir vers
Coeff.t:
pour un scalaire {c} :
Coeff.s_of_mpqf(Mpqf.of_string c)
pour un intervalle [a, b] :
Coeff.i_of_mpqf(Mpqf.of_string a) (Mpqf.of_string b)
Implantation : utilisation de la biblioth`eque Apron
Expressions bool´ eennes, contraintes num´ eriques
Contraintes :
type Tcons1.tconstructeur pour une contrainte expr ./ 0 :
Tcons1.make:Texpr1.t -> TCons1.typ -> Tcons1.t
o` u :
type Tcons1.typ= SUPEQ | SUP | EQ | DISEQ | · · ·
≥ > = 6=
Note : ´evitez d’utiliserDISEQ, qui est peu pr´ecis ;
utilisez `a la place une disjonction de deux contraintesSUP
Tableau de contraintes :
type Tcons1.earrayles op´ erateurs abstraits n’utilisent pas des contraintes, mais plutˆ ot des tableaux de contraintes
(pour ˆetre plus efficace)Exemple : construction d’un tableau
arr´ eduit ` a une seule contrainte :
letc= Tcons1.make texpr1 typ in letar = Tcons1.array_makeenv 1 in Tcons1.array_setar 0 c
Implantation : utilisation de la biblioth`eque Apron
Op´ erateurs abstraits
´ El´ ements abstraits :
type Abstract1.t Abstract1.top:Manager.t -> Environment.t -> t cr´ee un ´el´ement abstrait o`u les variables sont non initialis´ees (elles ont toutes les valeurs possibles)Abstract1.env:t -> Environment.t
retrouve l’environnement (ensemble de variables) associ´e `a un ´el´ement abstrait Abstract1.change_environment:Manager.t -> t ->
Environment.t -> bool -> t
modifie l’environnement d’un ´el´ement abstrait, en ajoutant ou en enlevant des variables si n´ecessaire ; le param`etrebooldoit ˆetre mis `afalsepour pr´eciser que les variables
´eventuellement ajout´ees ne sont pas initialis´ees
Abstract1.assign_texpr:Manager.t -> t -> Var.t -> Texpr1.t ->
t option -> t
affectation abstraite : l’argumentoptiondoit ˆetre mis `aNone
Abstract1.forget_array:Manager.t -> t -> Var.t array -> bool -> t affectation non-d´eterministe : oublie la valeur des variables indiqu´ees (siboolestfalse) Abstract1.meet_tcons_array:Manager.t -> t -> Tcons1.earray -> t
test abstrait : ajoute une ou plusieurs contraintes
Implantation : utilisation de la biblioth`eque Apron
Op´ erateurs abstraits (suite)
Abstract1.join:Manager.t -> t -> t -> t union abstraite∪]
Abstract1.meet:Manager.t -> t -> t -> t intersection abstraite∩]
Abstract1.widen:Manager.t -> t -> t -> t
´elargissementO
Abstract1.is_leq:Manager.t -> t -> t -> bool
⊆]: renvoietruesi le premier argument est inclus dans le second Abstract1.is_bottom:Manager.t -> t -> t bool
renvoietruesi l’´el´ement abstrait repr´esente∅
Abstract1.print:Format.formatter -> t -> unit affiche l’´el´ement abstrait
Contrat :
les op´erateurs retournent un nouvel ´el´ement abstrait immuable(style fonctionnel) les op´erateurs peuvent retourner une sur-approximation
(pas toujours optimal, par exemple pour les expressions non-lin´eaires) les pr´edicats retournenttrue(propri´et´e satisfaite)oufalse(“ne sait pas”)
Implantation : utilisation de la biblioth`eque Apron
Managers
Managers :
typeManager.tUn manager repr´ esente un choix de domaine abstrait
Pour utiliser les poly` edres, le manager peut ˆ etre cr´ e´ e par la commande :
let manager= Polka.manager_alloc_loose()
le mˆeme objetmanagersera ensuite pass´e en argument `a toutes les fonctions deAbstract1 pour s´electionner un autre domaine, il suffit de changer la ligne qui d´efinit la variablemanager Autres choix possibles :
Polka.manager_alloc_equalities ´egalit´es affines
Polka.manager_alloc_strict in´egalit´es affines larges (≥) et strictes (>)
Box.manager_alloc intervalles
Oct.manager_alloc octogones
Implantation : utilisation de la biblioth`eque Apron
Erreurs
Compatibilit´ e des arguments : il faut s’assurer que : le mˆ eme manager est utilis´ e pour cr´ eer
et pour utiliser un ´ el´ ement abstrait
le syst`eme de types v´erifie la compatibilit´e entre’aManager.tet’aAbstract1.t
les expressions et les ´ el´ ements abstraits portent sur le mˆ eme environnement
les variables destination d’une affectation existent bien dans l’environnement de l’´ el´ ement abstrait
les deux ´ el´ ements abstraits arguments d’une op´ eration binaire (∪, ∩, O , ⊆) sont d´ efinis sur le mˆ eme environnement
sinon, une exception Manager.Error sera signal´ ee. . .
Implantation : utilisation de la biblioth`eque Apron
Squelette de domaine abstrait utilisant Apron
open Apron
module RelationalDomain= (struct (* manager *)
type man = Polka.loose Polka.t
let manager = Polka.manager_alloc_loose () (* ´el´ements abstraits *)
type t = man Abstract1.t (* utilitaires *)
val expr_to_texpr: int_expr -> Texpr1.expr (* implantation *)
· · · end: DOMAIN)
Implantation : utilisation de la biblioth`eque Apron
Dernier recours dans les affectations et les tests
let rec expr_to_texpr = function
| AST_int_binary (op, e1, e2) ->
match op with
| AST_PLUS -> Texpr1.Binop · · ·
|· · ·
| _ -> raise Top
let assign env var expr = try
let e = expr_to_texpr expr in Abstract1.assign_texpr· · ·
withTop -> Abstract1.forget_array· · ·
let compareabs e1 e2 = try
· · ·
Abstract1.meet_tcons_array · · · withTop ->abs