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
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”.