Analyse de boucles
TAS : Typage et analyse statique M2, Master STL INSTA, Sorbonne Universit´e
Antoine Min´e
Ann´ee 2018–2019
Cours 10 7 mars 2019
Cours 10 Analyse de boucles Antoine Min´e p. 1 / 37
Plan du cours
Suite des s´emantiques abstraites,
avec application `a l’analyse num´erique non-relationnelle.
analyse desboucles:
principe des it´erations avecacc´el´eration de convergence; application `a l’analyse d’intervalles.
=⇒ nous obtenons un analyseur effectif
pour des propri´et´es num´eriques non-triviales ! conseils d’implantation pour le projet.
Cours 10 Analyse de boucles Antoine Min´e p. 2 / 37
Analyse de boucles
Analyse de boucles
Cours 10 Analyse de boucles Antoine Min´e p. 3 / 37
Analyse de boucles Boucles et invariants
Boucles et invariants
Cours 10 Analyse de boucles Antoine Min´e p. 4 / 37
Analyse de boucles Boucles et invariants
Rappel : s´ emantique concr` ete des boucles
Calcul de : SJwhilecdosKR SJwhilecdosKR= CJ¬cKI
o`uI est uninvariant de boucle inductif, l’ensemble des environnements accessibles
`
a chaque it´eration de la boucle, au point :while•cdos.
I est la plus petite solution de l’´equation : I =F(I)o`uF(X) =R∪SJsK(CJcKX).
Justification :
R⊆I cas de la premi`ere it´eration de la boucle
SJsK(CJcKI)⊆I stabilit´e par une it´eration de boucle
I minimal. meilleur invariant
Preuve d’existence :
F est croissante dans le treillis complet (P(E),⊆,∅,E,∪,∩)
=⇒ F a unplus petit point fixe lfpF =def min{I|F(I) =I} de plus : lfpF = min{I|F(I)⊆I} (plus petit post point fixe) c’est le Th´eor`eme de Tarksi
Cours 10 Analyse de boucles Antoine Min´e p. 5 / 37
Analyse de boucles Boucles et invariants
Rappel : interpr´ etation par it´ eration
I = lfpF o`uF(X) =R∪SJsK(CJcKX) orF est continue dans le CPO (P(E),⊆,∪)
=⇒nous pouvons aussi appliquer leth´eor`eme de Kleene: lfpF=∪n∈NFn(∅)
I est la limite d’une s´equence d’it´erations(la s´equence peut ˆetre infinie). Intuition :
F0(∅) =∅ F1(∅) =R
environnements avant d’entrer dans la boucle F2(∅) =R∪SJsK(CJcKR)
environnements apr`es z´ero ou une it´eration de boucle
Fn(∅) : environnements apr`es au plusn−1 it´erations de la boucle
juste avant de tester la condition de sortie,
pour d´eterminer si unen−i`eme it´eration est n´ecessaire
∪n∈NFn(∅) est bien l’invariant de boucle
=⇒m´ethode constructive de calcul du meilleur invariant.
Cours 10 Analyse de boucles Antoine Min´e p. 6 / 37
Analyse de boucles Boucles et invariants
Exemple d’it´ eration concr` ete
V ←0;
whileV <10do V ←V + 2 done
SJwhileV <10doV ←V + 2KR= CJV ≥10K(∪n∈NFn(∅)) o`uF(S) =def {0} ∪ {V + 2|V ∈S∧V <10} :
n Fn(∅) 0 ∅ 1 {0}
2 {0,2}
3 {0,2,4}
4 {0,2,4,6}
5 {0,2,4,6,8}
6 {0,2,4,6,8,10}
7 {0,2,4,6,8,10}
siFn(∅) =Fn+1(∅) alors∀i≥n:Fj(∅) =Fn(∅)
Nous trouvons donc :
∪n∈NFn(∅) ={0,2,4,6,8,10}= lfpF puis SJwhileV <10doV ←V + 2KR={10}
Note : pour simplifier les notations, nous avons assimil´eP({V} →Z) `aP(Z).
Cours 10 Analyse de boucles Antoine Min´e p. 7 / 37
Analyse de boucles Boucles et invariants
It´ eration dans le domaine des intervalles
V ←0;
whileV <10do V ←V + 2 done
Principe :
remplacer ∪n∈NFn(∅)
o`uF(X) =R∪SJsK(CJcKX) par∪n∈NF]n( ˙⊥)
o`uF](X]) =R]∪]S]JsK(C]JcKX])
en assimilantV→ D]`a un intervalle dansD], nous avons : C]JV<10K[a,b] = [a,min(9,b)]
S]JV←V+ 2K[a,b] = [a+ 2,b+ 2]
n F]n( ˙⊥)
0 ⊥
1 [0,0]
2 [0,2]
3 [0,4]
4 [0,6]
5 [0,8]
6 [0,10]
7 [0,10]
Dans cet exemple :
le r´esultat, [0,10], est correct mais approximatif ; le r´esultat est optimal pour les intervalles ; les it´er´es convergent en temps fini.
=⇒est-ce toujours le cas ?
Cours 10 Analyse de boucles Antoine Min´e p. 8 / 37
Analyse de boucles Boucles et invariants
It´ eration abstraite : justification et limitation
Correctionpour tout domaine abstraitE] SiF]est uneabstraction sˆurede F
alors∪]n∈NF]n( ˙⊥) est uneabstraction sˆurede ∪n∈NFn(∅), i.e. :
∪n∈NFn(∅)⊆γ(∪]n∈
NF]n( ˙⊥)) Justification : par r´ecurrence
∅ ⊆γ( ˙⊥) ;
siFn(∅)⊆γ(F]n( ˙⊥)), alors
F(Fn(∅)) ⊆ F(γ(F]n( ˙⊥))) (carFest croissante)
⊆ γ(F](F]n( ˙⊥))) (carF]est une abstraction sˆure deF)
donc∀n:Fn(∅)⊆γ(F]n( ˙⊥)), et donc∪n∈NFn(∅)⊆ ∪n∈Nγ(F]n( ˙⊥)) si∪]est une abstraction sˆure de∪, alors de plus :
∪n∈NFn(∅)⊆ ∪n∈Nγ(F]n(∅))⊆γ(∪]n∈
NF]n(∅)) Limitation :
Utiliser ce r´esultat suppose que∪]n∈
NF]n( ˙⊥) existe dansE]; ce n’est pas toujours le cas(certains domaines abstraits ne sont pas des CPOs)
=⇒nous verrons plus loin une preuve de correction plus puissante. . .
Cours 10 Analyse de boucles Antoine Min´e p. 9 / 37
Analyse de boucles Boucles et invariants
Non-terminaison de l’it´ eration de s´ emantique concr` ete
U←0;V ←0;
while rand(0,1) = 0do ifU<10thenU←U+ 1 elseV ←V+ 1
done
n Fn(∅)∈ P({U,V} →Z)
0 ∅
1 {(0,0)}
2 {(0,0),(1,0)}
. . .
11 {(0,0),(1,0), . . . ,(9,0),(10,0)}
12 {(0,0),(1,0), . . . ,(0,0),(10,0),(10,1)}
13 {(0,0),(1,0), . . . ,(0,0),(10,0),(10,1),(10,2)}
. . .
∪n∈NFn(∅) ={(x,0)|x ∈[0,10]} ∪ {(10,y)|y∈N} La limite existe, mais est l’union d’un nombreinfinid’it´er´es !
Cours 10 Analyse de boucles Antoine Min´e p. 10 / 37
Analyse de boucles Boucles et invariants
Non-terminaison de l’it´ eration dans les intervalles
U←0;V ←0;
while rand(0,1) = 0do ifU<10thenU←U+ 1 elseV ←V+ 1
done n F]n( ˙⊥)∈ {U,V} → D] 0 (⊥,⊥)
1 ([0,0],[0,0]) 2 ([0,1],[0,0])
. . .
11 ([0,10],[0,0]) 12 ([0,10],[0,1]) 13 ([0,10],[0,2])
. . .
Analyse dans le domaine des intervalles :
∪]n∈
NF]n( ˙⊥) =([0,10],[0,+∞]) La limite abstraite existe,
mais est l’union d’un nombre infinid’it´er´es
=⇒ ∪]n∈
NF]n( ˙⊥) n’estpas calculable.
Cours 10 Analyse de boucles Antoine Min´e p. 11 / 37
Analyse de boucles Boucles et invariants
Terminaison de l’it´ eration dans un domaine de hauteur finie
U←0;V ←0;
while rand(0,1) = 0do ifU<10thenU←U+ 1 elseV ←V+ 1
done n F]n( ˙⊥)∈ {U,V} → D] 0 (⊥,⊥)
1 (0,0) 2 (≥0,0) 3 (≥0,≥0) 4 (≥0,≥0)
∪]n∈
NF]n( ˙⊥) =(≥0,≥0)
Analyse dans le domaine des signes :
Le domaine a une hauteur finie : pas de chaˆıne croissante infinie.
Toutes les it´erations croissantes convergent en temps fini ;
=⇒l’analyse esttoujours calculable dans un domaine de hauteur finie.
Cours 10 Analyse de boucles Antoine Min´e p. 12 / 37
Analyse de boucles Acc´el´eration de convergence
Acc´ el´ eration de convergence
Cours 10 Analyse de boucles Antoine Min´e p. 13 / 37
Analyse de boucles Acc´el´eration de convergence
Intuition : acc´ el´ eration de convergence
V ←10;
whileV ≤100do V ←V + 2 done
Principe : relˆacher les bornes non stables`a l’infini Sans acc´el´eration :
n F]n( ˙⊥)
0 ⊥
1 [10,10]
2 [10,12]
3 [10,14]
. . . . 47 [10,102]
48 [10,102]
Avec acc´el´eration : n F]n( ˙⊥)
0 ⊥
1 [10,10]
2 [10,∞]
3 [10,∞]
rappel :F](X]) =R]∪]S]JsK(C]JcKX])
=⇒convergence vers un r´esultat moins pr´ecis, mais plus rapidement !
Cours 10 Analyse de boucles Antoine Min´e p. 14 / 37
Analyse de boucles Acc´el´eration de convergence
Op´ erateur d’´ elargissement
Acc´el´erer la convergence parextrapolation entre it´er´es successifs.
´Elargissement :O: (E]× E])→ E] widening
op´erateur binaireX]OY]∈ E]; sur-approximation de l’union :
γ(X])∪γ(Y])⊆γ(X]OY]) pour toutes´equenceY0],Y1], . . . ,Yn], . . .
la s´equence
X0]=Y0] X1]=X0]OY1] . . .
Xn]=Xn−1] OYn] . . .
converge en temps fini :∃N:∀n≥N:Xn]=XN].
Cours 10 Analyse de boucles Antoine Min´e p. 15 / 37
Analyse de boucles Acc´el´eration de convergence
Elargissement standard dans les intervalles ´
´Elargissement d’intervalles : O: (D]× D])→ D]
∀I ∈ D]:⊥OI =I O⊥=I [a,b]O[c,d] =def
" (
a sia≤c
−∞ sic<a,
(b sib≥d +∞ sid>b
#
une borne inf´erieure non stable est mise `a−∞; une borne sup´erieure non stable est mise `a +∞;
une fois `a−∞ou +∞, les bornes sont n´ecessairement stables !
´Elargissement point `a point surE]: O˙ : (E]× E])→ E] Dans le cas de plusieurs variablesE] =def V→ D],
chaque variable est extrapol´ee de mani`ere ind´ependante: X]O˙ Y] =def λV ∈V.X](V)OY](V)
Cours 10 Analyse de boucles Antoine Min´e p. 16 / 37
Analyse de boucles Acc´el´eration de convergence
Application : it´ eration avec ´ elargissement
Limite concr`ete :
Nous pouvons interpr´eter∪n∈NFn(∅) comme la limite de la s´equence : ( X0 =def ∅
Xn+1
=def Xn∪F(Xn)
Limite abstraite :
Dans l’abstrait, nous calculons : ( X0] =def ⊥˙
Xn+1] =def Xn]OF](Xn]) jusqu’`a avoir Xn+1] =Xn].
Cours 10 Analyse de boucles Antoine Min´e p. 17 / 37
Analyse de boucles Acc´el´eration de convergence
Correction et terminaison
( X0] =def ⊥˙
Xn+1] =def Xn]OF](Xn]) Terminaison : ∃N:XN+1] =XN]
Preuve : par l’absurde
Sinon,X0],X1],. . .,Xn],. . .serait une s´equence infinie
de la formeX0]=Y0],Xn+1] =Xn]OYn+1] , o`uY0]= ˙⊥,Yn+1] =F](Xn]).
Ceci serait contraire `a la d´efinition deO.
Correction : lfpF ⊆γ(XN])
Preuve :
Par le th´eor`eme de Tarski, lfpF= min{I|F(I)⊆I}.
Il suffit donc de prouver queγ(XN]) est un post point fixe deF: F(γ(XN])) ⊆ γ(F](XN])) (sˆuret´e deF])
⊆ γ(XN])∪γ(F](XN]))
⊆ γ(XN]OF](XN])) (sˆuret´e deO)
= γ(XN+1] ) (d´efinition deXN]
1)
= γ(XN]) (carXN+1] =XN])
Note : la preuve ne suppose pas l’existence de∪]n∈NF]n( ˙⊥) !
Cours 10 Analyse de boucles Antoine Min´e p. 18 / 37
Analyse de boucles Acc´el´eration de convergence
Exemple d’it´ eration avec ´ elargissement
U←0;V ←0;
while rand(0,1) = 0do ifU<10thenU←U+ 1 elseV ←V+ 1
done
n X0]= ˙⊥, Xn+1] =Xn]OF(Xn])
0 (⊥,⊥)
1 (⊥,⊥) O ([0,0],[0,0]) = ([0,0],[0,0]) 2 ([0,0],[0,0]) O ([0,1],[0,0]) = ([0,+∞],[0,0]) 3 ([0,+∞],[0,0]) O ([0,+∞],[0,1]) = ([0,+∞],[0,+∞]) 4 ([0,+∞],[0,+∞]) O ([0,+∞],[0,+∞]) = ([0,+∞],[0,+∞]) Convergence en au plus 2|V|it´erations(nombre de bornes `a stabiliser).
Cours 10 Analyse de boucles Antoine Min´e p. 19 / 37
Analyse de boucles Acc´el´eration de convergence
Boucles imbriqu´ ees
U ←0;V ←0;
while•U<100do
while•V <U doV ←V + 1done;
U ←U+ 1;V ←0 done
`
a•: n= 0,; (⊥,⊥) n= 1, ([0,0],[0,0]) n= 2, ([0,+∞],[0,0]) a•:
n
0 (⊥,⊥) n
0 (⊥,⊥) 1 ([0,0],[0,0])
n
0 (⊥,⊥)
1 ([0,+∞],[0,0]) 2 ([0,+∞],[0,+∞]) La s´emantique concr`ete des boucles imbriqu´ees est form´ee
de point fixes imbriqu´es.
La s´emantique abstraite g´en`ere des it´erations imbriqu´ees.
Pour chaque it´eration avec Ode la boucle externe, une s´equence compl`ete d’it´eration avec Ode la boucle interne est calcul´ee !
Cours 10 Analyse de boucles Antoine Min´e p. 20 / 37
Analyse de boucles Acc´el´eration de convergence
Raisonnement inductif et ´ elargissement : intuition
???pre post pre
lfp
gfp fp
Invariant inductifs :
lfpF est le plus petitinvariant; lfpF ⊆I =⇒I est uninvariant; F(I)⊆I =⇒I est uninvariant inductif
=⇒I est aussi uninvariant(Tarksi); F](I])vI]=⇒I]est uninvariant inductif prouvable dans l’abstrait.
G´en´eralit´es sur le raisonnement inductif :
induction = g´en´eralisation `a partir d’un petit ensemble d’observations ; e.g., si la borne sup´erieure croˆıt, elle est probablement non-born´ee ; processus cognitif important !
6=induction en math´ematiques, qui estd´eductivepar nature
(application d’un axiome d’induction)
en logique philosophique, le raisonnement inductif n’est pas fiable
(puisqu’il g´en´eralise `a partir d’un nombre fini d’exemples)
mais, en interpr´etation abstraite, l’´elargissementOeffectue un raisonnement inductif toujours sˆur !
Cours 10 Analyse de boucles Antoine Min´e p. 21 / 37
Analyse de boucles It´erations avanc´ees
It´ erations avanc´ ees
Cours 10 Analyse de boucles Antoine Min´e p. 22 / 37
Analyse de boucles It´erations avanc´ees
Principe
L’utilisation d’un ´elargissementOpermet d’obtenir une it´eration : qui termine toujours ;
avec un nombre d’it´erations ind´ependant des constates du programme ;
(e.g., l’analyse dewhileN<100doV←V+ 1donene d´epend pas du choix de 100)
mais qui est souvent impr´ecise.
De nombreux travaux visent `a am´eliorer la pr´ecision du calcul.
Quelques id´ees d’am´elioration :
d´efinir un op´erateurOplus pr´ecis : appliquerOmoins souvent ;
faire une analyse par cas pour certaines it´erations de la boucle ; raffiner le r´esultata posteriori.
Cours 10 Analyse de boucles Antoine Min´e p. 23 / 37
Analyse de boucles It´erations avanc´ees
Comparaison des signes et des intervalles : exemple
V ←100;
while•V >0do V ←V−1 done
n signes intervalles
0 ⊥ ⊥
1 >0 [100,100]
2 ≥0 [−∞,100]
Comparaison de l’analyse :
dans les signes stricts, sans ´elargissement ;
nous utilisons des signes am´elior´es, avec signes stricts :{⊥,0, >0, <0,≥0,≤0,>}
dans les intervalles, avec ´elargissement.
Le domaine des intervalles eststrictement plus expressif; pourtant, l’analyse d’intervallesne trouve pasV ≥0, qui est trouv´e par une analyse designe!
Explication :
la borne inf´erieure, non stable, est ´elargie `a−∞, pourtant, la borne 0, non test´ee, est bien stable !
Cours 10 Analyse de boucles Antoine Min´e p. 24 / 37
Analyse de boucles It´erations avanc´ees
Solution : ´ elargissement avec ´ etages
V ←100;
while•V >0do V ←V−1 done
Analyse avec ´elargissement ´etag´eO{0}
n intervalles
0 ⊥
1 [100,100]
2 [0,100]
Solution :´elargissement avec ´etagesOT, plus pr´ecis.
´Etant donn´e un ensembleT ⊆Zfini, contenant−∞, +∞: [a,b]OT[c,d] def=
" (
a sia≤c
max{t∈T|t≤c} sic<a,
(b sib≥d
min{t∈T|t≥d} d>b
#
teste si les valeurs deT sont des bornes stables ;
(dans notre exemple, on trouve [max{c∈T|c≤0},100])
termine toujours, carT est fini(au pire, on obtient−∞ou +∞).
Cours 10 Analyse de boucles Antoine Min´e p. 25 / 37
Analyse de boucles It´erations avanc´ees
Choix des ´ etages
Comment choisirT?
0∈T permet d’ˆetre au moins aussi pr´ecis que les signes ; inclure les constantes apparaissant dans le programme ; inclure les tailles de tableau (±1) ;
(utile pour v´erifier les d´epassements de tableau)
utiliser une s´equence g´eom´etrique :T ={ ±2i|i∈[0,31]} ∪ {±∞}.
(pour prouver l’absence de d´epassement de capacit´e, il suffit queTsoit suffisamment dense)
Note :??? points fixes stables et instables
Que se passe-t-il siTne contient pas exactement la borne la plus pr´ecise ?
V ←100;
while rand(0,1) = 0do V←V−1;
ifV<0thenV←0 done
Casstable.
[t,100] est un point fixepour toutt≤0.
Il suffit d’avoir−∞ 6=t≤0 fini dansTpour trouver une bornetfinie.
L’optimal n’est atteint que si 0∈T.
V←100;
while rand(0,1) = 0do V←V−1;
ifV =−1thenV←0 done
Casinstable.
[t,100] est un point fixe uniquement pourx= 0.
If faut avoir 0∈Tpour trouver une borne finie, sinon, on trouve toujours [−∞,100].
Cours 10 Analyse de boucles Antoine Min´e p. 26 / 37
Analyse de boucles It´erations avanc´ees
Elargissement retard´ ´ e
V ←0;
while rand(0,1) = 0do ifV = 0thenV ←1;
· · · done
V n’est incr´ement´e qu’une seule fois, de 0 `a 1.
Probl`eme :
Otrouvera V non stable, et le placera `a [0,+∞] =⇒perte de pr´ecision
(en effet, [0,0]O[0,1] = [0,+∞])
Solution : retarderl’´elargissement d’une (ou plusieurs) it´eration(s) : Xn+1
=def
(F](Xn]) sin<N Xn]OF](Xn]) sin≥N
(rappel :F](X]) =R]∪]S]JsK(C]JcKX]))
(dans notre exemple, avecN= 1,X1]= [0,0]∪][1,1] = [0,1],X2]= [0,1]O[0,1] = [0,1] =X1])
Il est n´ecessaire de reprendre les it´erations avec Oapr`es un nombre fini d’it´erations pour assurer la convergence en temps fini !
Cours 10 Analyse de boucles Antoine Min´e p. 27 / 37
Analyse de boucles It´erations avanc´ees
D´ eroulement de boucles : probl` eme
U←rand(−∞,+∞); V ←1;
while rand(0,1) = 0do
ifV = 1thenV ←0;U←0;
stat;
U←U+ 1 done
Au d´ebut de la boucle,U n’est pas initialis´e(mod´elis´e par [−∞,+∞]); U est initialis´e pendant le premier tour de boucle, puis il est incr´ement´e
=⇒U≥0 quandstat est ex´ecut´e Impr´ecision :
L’invariant le plus pr´ecis est :
(V = 0∧U∈[−∞,+∞])∨(V = 1∧U ≥0)
Dans les intervalles,non-relationnels, nous ne pouvons exprimer que : V ∈[0,1]∧U∈[−∞,+∞] !
Une solution possible serait d’utiliser un domaine plus pr´ecis, capable de repr´esenter des disjonctions.
Nous verrons un tel domaine plus loin dans le cours.
Dans le transparent suivant, nous proposons une solution plus simple `a ce probl`eme.
Cours 10 Analyse de boucles Antoine Min´e p. 28 / 37
Analyse de boucles It´erations avanc´ees
D´ eroulement de boucles : solution
U←rand(−∞,+∞); V ←1;
while rand(0,1) = 0do
ifV = 1thenV ←0;U←0endif;
stat U←U+ 1 done
Solution : d´eroulement de boucle
Analyser lesN premi`eres it´erations de la boucle s´epar´ement.
Pour SJwhilecdosKR, dans le concret :
X0=R (environnements d’entr´ee)
∀i≤N:Xi = SJsK(CJcKXi−1) (d´eroulement)
∀i>N:Xi =XN∪SJsK(CJcKXi−1) (accumulation de point fixe)
et dans l’abstrait :
∀i≤N:Xi]= S]JsK(C]JcKXi−1] )
∀i>N:Xi]=Xi−1] O(XN] ∪SJsK(C]JcKXi−1] )
rappel : la m´ethode classique it`ereXi]=Xi−1] O(R]∪]S]JsK(C]JcKXi−1] )) Ne pas confondre avec l’´elargissement retard´e !
Cours 10 Analyse de boucles Antoine Min´e p. 29 / 37
Analyse de boucles It´erations avanc´ees
It´ erations d´ ecroissantes
V ←0;
whileV ≤50doV ←V+ 1done
Impr´ecision
Dans cet exemple, nous trouvonsV ∈[0,+∞]comme invariant de boucle, mais l’invariant de boucle le plus pr´ecis estV ∈[0,51].
Solution : it´erations d´ecroissantes de raffinement Remarque, nous cherchons un point fixeXN] =F](XN]) mais nous avons en r´ealit´e un point fixeXN]=XN]OF](XN]). . . Il est possible queF](XN])@XN]
dans ce cas,F](XN]) est un invariant plus pr´ecis queXN].
=⇒ apr`es stabilisation deXn+1] =Xn]OF](Xn])
calculerXn>N] =F](Xn−1] ) sans ´elargissement, tant queXn]d´ecroˆıt !
Cours 10 Analyse de boucles Antoine Min´e p. 30 / 37
Analyse de boucles It´erations avanc´ees
It´ erations d´ ecroissantes : exemple
V ←0;
whileV ≤50doV ←V+ 1done
F](X]) = [0,def 0] ˙∪]S]JV ←V+ 1K(C]JV ≤50KX]) XN] =def = [0,+∞] (limite des it´erations avec ´elargissement)
XN+1] =F](XN]) = [0,0]∪]([0,50]+][1,1]) = [0,0]∪][1,51] = [0,51]
XN+2] =F](XN+1] ) = [0,51] =XN+1]
=⇒dans ce cas, nous trouvons l’invariant le plus pr´ecisexprimable dans les intervalles !
Ensortie de boucle, nous avons : C]JV >50K[0,51] =[51,51].
Cours 10 Analyse de boucles Antoine Min´e p. 31 / 37
Analyse de boucles It´erations avanc´ees
It´ erations d´ ecroissantes : correction et terminaison
Correction :
Nous avons vu que, commeF](XN])vXN], alorsF(γ(XN]))⊆γ(XN]) et donc lfpF⊆γ(XN]).
Nous calculonsXN+n] =F]n(XN]).
Par monotonie deF,Fn(lfpF)⊆Fn(γ(XN])).
Par d´efinition de lfp, lfpF=Fn(lfpF).
Par sˆuret´e deF], il vientFn(γ(XN]))⊆γ(F]n(XN])).
Donc lfpF⊆γ(F]n(XN])).
Terminaison :
la s´equence d´ecroissanteXn>N] =F](Xn]) peut ˆetre infinie ;
([0,+∞]⊇[1,+∞]⊇[2,+∞]⊇ · · ·)
tous les it´er´esXn>N] =F](Xn]) sont des invariants corrects
=⇒nous pouvons arrˆeter le raffinement `a tout instant ;
un op´erateur der´etr´ecissementMpermet de forcer la convergence en temps fini :
Xn>N] def= Xn−1] MF](Xn−1] ) o`u [a,b]M[c,d] =def
c sia=−∞
a sinon ,
d ifb=+∞
b sinon
(seules les bornes `a l’infini sont raffin´ees)
Cours 10 Analyse de boucles Antoine Min´e p. 32 / 37
Analyse de boucles It´erations avanc´ees
Remarque : non-croissance de l’´ elargissement
???Exemple : consid´erons encorestat def= whileV ≤50doV ←V+ 1done nous avons S]JstatKR] = C]JV >50K(limλX].X]O˙ F](R],X])) o`u F](R],X]) =def R]∪˙]S]JV ←V + 1K(C]JV ≤50KX]) On’est pas croissant vis `a vis de son argument de gauche :
e.g., [0,0]O[0,51] = [0,+∞], mais [0,51]O[0,51] = [0,51]
siR]= [0,0], les it´er´es deF]sont :⊥, [0,0], [0,+∞]
[0,0]OF]([0,0],[0,0]) = [0,0]O([0,0]∪][1,1]) = [0,0]O[0,1] = [0,+∞]
=⇒S]JstatK([0,0]) = [51,+∞]
siR]= [0,51], les it´er´es deF]sont :⊥, [0,51], [0,51]
[0,51]OF]([0,51],[0,51]) = [0,51]O([0,0]∪][1,51]) = [0,51]O[0,51] = [0,51]
=⇒S]JstatK([0,51]) = [51,51]
=⇒S]JstatK n’est pas croissant
Ceci intervient en particulier dans le cas de boucles imbriqu´ees : la boucle externe it`ereXn+1] =Xn]OF](Xn+1] )
o`uF]n’est pas croissante car elle continent un ´elargissement.
Cela ne pose pas de probl`eme : l’´elargissement de la boucle externe garanti la sˆuret´e et la terminaison mˆeme siF]n’est pas croissante !
La seule hypoth`ese importante de croissance est celle deF, i.e. : dans le concret.
Cours 10 Analyse de boucles Antoine Min´e p. 33 / 37
Conseils d’implantation OCaml pour le projet
Conseils d’implantation OCaml pour le projet
Cours 10 Analyse de boucles Antoine Min´e p. 34 / 37
Conseils d’implantation OCaml pour le projet
Domaine des intervalles : manipulation des bornes
Implanter d’abord l’arithm´etique dansZ∪ {±∞}
qui sert pour manipuler les bornes d’intervalles.
domains/interval_domain.ml (*Z∪ {±∞} *)
typebound =
| Int of Z.t (* Z *)
| PINF (* +∞*)
| MINF (* −∞ *)
(*−a *)
letbound_neg(a:bound) : bound = match a with
| MINF -> PINF | PINF -> MINF | Int i -> Int (Z.neg i) (*a+b*)
letbound_add(a:bound) (b:bound) : bound = match a,b with
| MINF,PINF | PINF,MINF -> invalid_arg"bound_add" (*(+∞) + (−∞) *)
| MINF,_ | _,MINF -> MINF
| PINF,_ | _,PINF -> PINF
| Int i, Int j -> Int (Z.add i j) (* compare a et b, retourne -1, 0 ou 1 *)
letbound_cmp(a:bound) (b:bound) : int = match a,b with
| MINF,MINF | PINF,PINF -> 0
| MINF,_ | _,PINF -> -1
| PINF,_ | _,MINF -> 1
| Int i, Int j -> Z.compare i j ...
Cours 10 Analyse de boucles Antoine Min´e p. 35 / 37
Conseils d’implantation OCaml pour le projet
Domaine des intervalles : intervalles
Puis implanter la signatureVALUE_DOMAIN en s’inspirant deconstant_domain.ml.
domains/interval_domain.ml (*{[a,b]|a≤b} ∪ {⊥} *)
typet= Itvof bound * bound |BOT (* extension def parf(⊥) =⊥ *) letlift1f x = match x with
| Itv (a,b) -> f a b
| BOT -> BOT
(* idem pourf(⊥,y) =f(x,⊥) =⊥*) letlift2f x y = match x,y with ...
(*−x dans les intervalles *) letneg(x:t) : t =
lift1 (fun a b -> Itv (bound_neg b, bound_neg a)) x (*x⊆ y dans les intervalles *)
letsubset (x:t) (y:t) : bool = match x,y with
| BOT,_ -> true
| _,BOT -> false
| Itv (a,b), Itv (c,d) -> bound_cmp a c >=0 && bound_cmp b d <= 0 ...
Cours 10 Analyse de boucles Antoine Min´e p. 36 / 37
Conseils d’implantation OCaml pour le projet
It´ erateur
L’interpr`ete fourni contient un it´erateur de boucles tr`es simple, sans acc´el´eration.
interpreter/interpreter.ml let rec eval_stat (a:t) ((s,ext):stat ext) : t = match s with
| AST_while (e,s) ->
(* simple fixpoint *)
let rec fix (f:t -> t) (x:t) : t = let fx = f xin
if D.subset fx x then fx else fix f fx
in
(* function to accumulate one more loop iteration:
F(X(n+1)) = X(0) U body(F(X(n)
we apply the loop body and add back the initial abstract state
*)
let f x = D.join a (eval_stat (filter x e true) s) in
(* compute fixpoint from the initial state (i.e., a loop invariant) *) let inv = fix f a in
(* and then filter by exit condition *) filter inv e false
let fx = f xcorrespond `aXn+1] =F](Xn]), il faudra le changer enXn+1] =Xn]OF](Xn]),
puis ajouter le d´elai surO, le d´eroulement de boucles, etc.
Cours 10 Analyse de boucles Antoine Min´e p. 37 / 37