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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

4.6. CHOIX D’UNE COUVERTURE 101<br />

<strong>la</strong> partition (g 0 ,g 1 ) telle que g 0 = λ⃗y.(¬y k ) et g 1 = λ⃗y.y k . Ce couple sépare le codomaine<br />

en <strong>de</strong>ux parties <strong>de</strong> même taille. On a (g 0 ◦ ⃗ f) = ¬f k , et (g 1 ◦ ⃗ f) = f k . Si srr est un<br />

restricteur d’image strict, alors le vecteur ( ⃗ f srr ε(f k )) est égal à<br />

([f 1 ...f k−1 ] srr ε(f k )) @ [ε(1)] @ ([f k+1 ...f n ] srr ε(f k )).<br />

Ainsi <strong>la</strong> fonction “vectochar-recurse” <strong>de</strong>vient :<br />

function vectochar-recurse( ⃗ f) : TDG;<br />

let [f 1 ...f n ] = ⃗ f and<br />

k = choose-in<strong>de</strong>x( ⃗ f) and<br />

⃗f ′ = [f 1 ...f k−1 f k+1 ...f n ] in<br />

return λ⃗y.( (¬y k ∧vectochar( ⃗ f ′ srr ¬f k )(y 1 ,...,y k−1 ,y k+1 ,...,y n )) ∨<br />

(y k ∧vectochar( ⃗ f ′ srr f k )(y 1 ,...,y k−1 ,y k+1 ,...,y n )));<br />

Figure 29. Premier algorithme <strong>de</strong> calcul <strong>de</strong> Img.<br />

Dans cet algorithme, <strong>la</strong> fonction “choose-in<strong>de</strong>x” retourne un in<strong>de</strong>x k. Par exemple,<br />

“choose-in<strong>de</strong>x”pourraittoujoursrendre1. Cettefonctionpeutplusintelligemmentutiliser<br />

<strong>de</strong>s heuristiques afin d’obtenir un in<strong>de</strong>x k, qui, dans <strong>la</strong> mesure du possible, permettra<br />

d’accélérer l’apparition <strong>de</strong> constantes dans ( ⃗ f ′ srr ε(f k )). On peut par exemple choisir<br />

<strong>de</strong> retourner l’in<strong>de</strong>x <strong>de</strong> <strong>la</strong> composante qui possè<strong>de</strong> le plus petit graphe, ou l’in<strong>de</strong>x <strong>de</strong> <strong>la</strong><br />

composante ayant le moins <strong>de</strong> variables.<br />

Grâce a cette fonction “vectochar-recurse”, le nombre <strong>de</strong> récursion <strong>de</strong> “vectochar” est<br />

borné par le nombre d’éléments <strong>de</strong> Img( ⃗ f,1). Donc si à chaque étape, <strong>la</strong> machine n’atteint<br />

qu’un re<strong>la</strong>tivement petit nombre d’états, cet algorithme est très efficace.<br />

4.6.2 Utilisation d’un partitionnement du domaine<br />

Choisissons [47] <strong>la</strong> partition (h 0 ,h 1 ) tel que h 0 = λ⃗x.(¬x k ) et h 1 = λ⃗x.x k . Ce couple sépare<br />

le domaine en <strong>de</strong>ux parties <strong>de</strong> tailles égales. Si srr est un restricteur d’image strict, nous<br />

avons ( ⃗ f srr h 0 ) = ⃗ f[x k ← 0] et ( ⃗ f srr h 1 ) = ⃗ f[x k ← 1], qui sont calculées en O(| ⃗ f|).<br />

Ainsi <strong>la</strong> fonction “vectochar-recurse” <strong>de</strong>vient :<br />

function vectochar-recurse( ⃗ f) : TDG;<br />

let x be a variable occurring in ⃗ f in<br />

return λ⃗y.(vectochar( ⃗ f[x ← 0]) ∨ vectochar( ⃗ f[x ← 1]));<br />

Figure 30. Deuxième algorithme <strong>de</strong> calcul <strong>de</strong> Img.<br />

La variable x n’apparait pas dans les graphes <strong>de</strong> ( ⃗ f srr ¬x) et <strong>de</strong> ( ⃗ f srr x). Si nous<br />

voulons exploiter le cache au maximum, nous <strong>de</strong>vons éviter que les vecteurs qui y sont<br />

conservés soient composés <strong>de</strong> nouveaux noeuds. En choisissant <strong>la</strong> variable <strong>de</strong> plus petit<br />

ordre dans ⃗ f, le calcul <strong>de</strong> ⃗ f[x ← 0] et ⃗ f[x ← 1] est seulement en O(k), où k est le nombre<br />

<strong>de</strong> composantes <strong>de</strong> ⃗ f, et aucun noeud n’est créé. Ce processus correspond à un parcours<br />

parallèle en profon<strong>de</strong>ur d’abord <strong>de</strong>s graphes <strong>de</strong> ⃗ f. Les seuls noeuds qui sont créés sont

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

Saved successfully!

Ooh no, something went wrong!