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.
4.7.<br />
RÉSULTATS EXPÉRIMENTAUX ET DISCUSSION 103<br />
function calcule-valid(n,m,r,ω,(Cns, ⃗ f),Init) : TDG;<br />
var Valid, New, Current : TDG;<br />
Valid = Init;<br />
New = Init;<br />
while (New ∧ Cns) ≠ 0 do {<br />
Current = between(New, Valid);<br />
let Range = vectochar( ⃗ f↓(Current∧Cns)) in {<br />
New = Range ∧¬ Valid;<br />
Valid = Valid ∨ New;<br />
}<br />
}<br />
return Valid;<br />
Figure 32. Fonction “compute-valid” finale.<br />
final 5 présenté Figure 32.<br />
4.7.2 Résultats expérimentaux<br />
Nous comparons ici les <strong>de</strong>ux algorithmes proposés dans les Sections 4.6.1 et 4.6.2. Le<br />
premierestbasésurlerestricteurd’imagestrict“constrain”etunepartitionducodomaine.<br />
Le second utilise une partition du domaine et est correct pour tout restricteur d’image<br />
strict.<br />
Les <strong>de</strong>ux algorithmes sont écrits en C, et les temps CPU en secon<strong>de</strong>s ont été obtenus<br />
sur Sun SPARC station 1. La Table 5 donne les temps CPU nécessaires pour calculer<br />
l’ensemble <strong>de</strong>s états vali<strong>de</strong>s <strong>de</strong> quelques circuits séquentiels. <strong>Pour</strong> chaque circuit, #in est<br />
le nombre <strong>de</strong> ses entrées, #reg le nombre <strong>de</strong> ses variables d’état, <strong>de</strong>pth est le nombre<br />
d’itérations, #valid est le nombre d’états vali<strong>de</strong>s, time-codp (respectivement time-dp)<br />
est le temps CPU <strong>de</strong> l’algorithme basé sur une partition du codomaine (respectivement<br />
<strong>de</strong> l’algorithme basé sur une partition du domaine). La Table 6 présente pour les <strong>de</strong>ux<br />
métho<strong>de</strong>s le nombre <strong>de</strong> récursions <strong>de</strong> “vectochar-recurse” (colonne #rec) requis par le<br />
calcul <strong>de</strong>s états vali<strong>de</strong>s. Elle donne aussi le nombre d’i<strong>de</strong>ntifications obtenues, réparties<br />
en i<strong>de</strong>ntifications exactes (colonne #same), et en i<strong>de</strong>ntifications étendues utilisant les<br />
propriétés <strong>de</strong>s Théorèmes 4.8 ou 4.9 (colonne #diff). Ceci montre que pour <strong>la</strong> plupart<br />
<strong>de</strong>s machines, le gain apporté par l’i<strong>de</strong>ntification étendue est important.<br />
5 Afin d’améliorer “vectochar”, on peut utiliser cette idée [43] : comme les seuls états intéressants sont<br />
ceux qui n’appartiennent pas déjà à Valid, nous pouvons déterminer le domaine D où seuls <strong>de</strong> nouveaux<br />
états peuvent être trouvés. Ce domaine est λ(⃗y@⃗x).(Current(⃗y)∧Cns(⃗y,⃗x)∧¬Valid( ⃗ f(⃗y,⃗x))). L’ensemble<br />
<strong>de</strong>s nouveaux états New est directement égal à vectochar( ⃗ f↓D). Dans certain cas, cette métho<strong>de</strong> réduit<br />
considérablement le nombre <strong>de</strong> recursions <strong>de</strong> <strong>la</strong> fonction “vectochar”. De plus, il est alors suffisant <strong>de</strong><br />
tester si D est égal à 0 pour pouvoir stopper l’itération, ce qui économise <strong>la</strong> <strong>de</strong>rnière évaluation <strong>de</strong> Img.<br />
Mais le calcul <strong>de</strong> D requiert <strong>la</strong> composition Valid ◦ ⃗ f, ce qui peut être très coûteux. <strong>Pour</strong> cette raison,<br />
nous avons abandonné cette technique, au contraire <strong>de</strong> [38].