07.11.2013 Views

Une Boite `a Outils Pour la Preuve Formelle de Syst`emes Séquentiels

Une Boite `a Outils Pour la Preuve Formelle de Syst`emes Séquentiels

Une Boite `a Outils Pour la Preuve Formelle de Syst`emes Séquentiels

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

5.3. EVALUATION DE PRE( ⃗ F,CNS,χ) 113<br />

Des expériences [29] utilisant l’idée que nous avons proposée (reprise dans [29] sous<br />

l’appel<strong>la</strong>tion frontier set minimization) ont montré que le temps <strong>de</strong> calcul du point fixe<br />

<strong>de</strong> formules CTL sur certains exemples (opérateurs séquentiels en pipe-line) pouvait être<br />

réduit <strong>de</strong> 40%.<br />

5.3.2 Réduction incrémentale pendant <strong>la</strong> composition<br />

Unalgorithme<strong>de</strong>composition[27]“compose1”directementinspiré<strong>de</strong>l’expansion<strong>de</strong>Shannon<br />

s’écrit :<br />

function compose1(g,l) : TDG;<br />

if g = 1 or g = 0 or l = () then return g;<br />

let ((y 1 ,f 1 ),...,(y k ,f k )) = l and<br />

x = g.root in {<br />

if x < y 1 then return ((¬x∧compose1([g ← 0],l))∨(x∧compose1([g ← 1],l)));<br />

l = ((y 2 ,f 2 )...(y k ,f k ));<br />

if x > y 1 then return compose1(g,l);<br />

return ((¬f 1 ∧compose1([g ← 0],l))∨(f 1 ∧compose1([g ← 1],l)));<br />

}<br />

Figure 34. Fonction “compose1”.<br />

Sous l’hypothèse que y 1 < ... < y n , “compose1(g,((y 1 ,f 1 ),...,(y n ,f n )))” calcule le<br />

graphe <strong>de</strong> <strong>la</strong> formule g[y 1 ← f 1 ,..., y n ← f n ]. A cet algorithme on peut associer un<br />

cache pour éviter les calculs redondants, ce qui fait que sa complexité est au pire en<br />

O(|g| 2 × ∏ n<br />

k=1 |f k |) (voir Section 2.4.3).<br />

L’idée <strong>de</strong> <strong>la</strong> réduction <strong>de</strong> taille incrémentale pendant <strong>la</strong> composition est <strong>la</strong> suivante.<br />

Pendant <strong>la</strong> <strong>de</strong>scente récursive, on peut simplifier les termes f 2 ,...,f k qui seront substitués<br />

aux variables y 2 ,...,y k en utilisant <strong>la</strong> connaissance du chemin pris dans l’arbre<br />

<strong>de</strong>s récursions, c’est à dire en utilisant <strong>la</strong> connaissance <strong>de</strong> l’interprétation <strong>de</strong> f 1 . Un nouvel<br />

algorithme <strong>de</strong> composition “compose2” [106] utilisant cette simplification incrémentale<br />

(avec l’opérateur “restrict” par exemple) s’écrit simplement :<br />

function compose2(g,l) : TDG;<br />

if g = 1 or g = 0 or l = () then return g;<br />

let ((y 1 ,f 1 ),...,(y k ,f k )) = l and<br />

x = g.root in {<br />

if x < y 1 then return ((¬x∧compose2([g ← 0],l))∨(x∧compose2([g ← 1],l)));<br />

if x > y 1 then return compose2(g,((y 2 ,f 2 )...(y k ,f k )));<br />

let l 0 = ((y 2 ,f 2 ⇓¬f 1 )...(y k ,f k ⇓¬f 1 )) and<br />

l 1 = ((y 2 ,f 2 ⇓f 1 )...(y k ,f k ⇓f 1 )) in<br />

return ((¬f 1 ∧compose2([g ← 0],l 0 ))∨(f 1 ∧compose2([g ← 1],l 1 )));<br />

}<br />

Figure 35. Fonction “compose2”.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!