1 \JFC{donner dans les rappels les délais et les propriétés de convergence universelle}
3 \JFC{Statuer sur la taille des exemples traitables par la démarche, cf données pratiques}
5 \section{Exemple jouet}
8 On considère dans ce chapitre l'exemple où trois éléments dans $\Bool$.
9 Chaque configuration est ainsi un élement de $\{0,1\}^3$, \textit{i.e.},
10 un nombre entre 0 et 7.
11 La \Fig{fig:map} précise la fonction $f$ considérée et
12 la \Fig{fig:xplgraph} donne son graphe d'intéraction.
21 f_1(x_1,x_2,x_3) & = & x_1.\overline{x_2} + x_3 \\
22 f_2(x_1,x_2,x_3) & = & x_1 + \overline{x_3} \\
23 f_3(x_1,x_2,x_3) & = & x_2.x_3
28 \caption{Fonction à itérer} \label{fig:map}
33 \includegraphics[width=4cm]{images/xplCnxMc.eps}
35 \caption{Graphe d'intéraction}
38 \caption{Exemple pour SDD $\approx$ SPIN.}
46 On peut facilement vérifier que toutes les itérations parallèles initialisées
47 avec $x^0 \neq 7$ soit $(111)$
48 convergent vers $2$ soit $(010)$; celles initialisées avec
50 Pour les autres modes synchrones avec une
51 stratégie pseudo périodique, les comportements selon la configuration initiale:
53 \item initialisée avec 7, les itérations restent en 7;
54 \item initialisée avec 0, 2, 4 ou 6 les itérations convergent vers 2;
55 \item initialisées avec 1, 3 ou 5, les itérations convergent vers un des
56 deux points fixes 2 ou 7.
64 \section{Rappels sur le langage PROMELA}
65 \label{sec:spin:promela}
67 Cette section rappelle les éléments fondamentaux du langage PROMELA (Process Meta Language).
68 On peut trouver davantage de détails dans~\cite{Hol03,Wei97}.
79 bool X [N]; bool Xp [N]; int mods [N];
80 typedef vals{bool v [N]};
83 typedef a_send{chan sent[N]=[d_0] of {bool}};
86 chan unlock_elements_update=[1] of {bool};
87 chan sync_mutex=[1] of {bool};
90 \caption{Declaration des types de la traduction.}
91 \label{fig:arrayofchannels}
95 Les types primaires de PROMELA sont \texttt{bool}, \texttt{byte},
96 \texttt{short} et \texttt{int}. Comme dans le langage C par exemple,
97 on peut déclarer des tableaux à une dimension de taille constante
98 ou des nouveaux types de données (introduites par le mot clef
99 \verb+typedef+). Ces derniers sont utilisés pour définir des tableaux à deux
103 Le programme donné à la {\sc Figure}~\ref{fig:arrayofchannels} correspond à des
104 déclarations de variables qui serviront dans l'exemple jouet de ce chapitre.
105 Il définit tout d'abord:
107 \item les constantes \verb+N+ et \verb+d_0+ qui précisent respectivement le nombre
108 $n$ d'éléments et le délais maximum $\delta_0$;
109 \item les deux tableaux (\verb+X+ et \verb+Xp+) de \verb+N+ variables booléennes;
110 les cellules \verb+X[i]+ et \verb+Xp[i]+ sont associées à la variables $x_{i+1}$
111 d'un système dynamique discret
112 (le décalages d'un entier est dû à l'indexation à partir de zéro des cellules d'un tableau);
113 Elles mémorisent les valeurs de $X_{i+1}$ respectivement avant et après sa mise à jour;
114 il suffit ainsi de comparer \verb+X+ et \verb+Xp+ pour constater si $x$ à changé ou pas;
115 \item le tableau \verb+mods+ contient les éléments qui doivent être modifiés lors de l'itération
116 en cours; cela correspond naturellement à l'ensemble des éléments $s^t$;
117 \item le type de données structurées \verb+vals+ et le tableau de tableaux
118 \verb+Xd[+$i$\verb+].v[+$j$\verb+]+ qui vise à mémoriser $x_{j+1}^{D^{t-1}_{i+1j+1}}$
119 pour l'itération au temps $t$ (en d'autres termes, utile lors du calcul de $x^{t}$).
123 Puisque le décalage d'un indices ne change pas fondamentalement
124 le comportement de la version PROMELA par rapport au modèle initial
125 et pour des raisons de clarté, on utilisera par la suite la même
126 lettre d'indice entre les deux niveaux (pour le modèle: $x_i$ et pour PROMELA:
127 \texttt{X[i]}). Cependant, ce décalage devra être conservé mémoire.
129 Une donnée de type \texttt{channel} permet le
130 transfert de messages entre processus dans un ordre FIFO.
131 Elles serait déclarée avec le mot clef \verb+chan+ suivi par sa capacité
132 (qui est constante), son nom et le type des messages qui sont stockés dans ce canal.
133 Dans l'exemple précédent, on déclare successivement:
135 \item un canal \verb+sent+ qui vise à mémoriser\verb+d_0+ messages de type
136 \verb+bool+; le tableau nommé \verb+channels+ de \verb+N+*\verb+N+
137 éléments de type \verb+a_send+ est utilisé pour mémoriser les valeurs intermédiaires $x_j$;
138 Il permet donc de temporiser leur emploi par d'autres elements $i$.
139 \item les deux canaux \verb+unlock_elements_update+ et \verb+sync_mutex+ contenant
140 chacun un message booléen et utilisé ensuite comme des sémaphores.
144 %\subsection{PROMELA Processes}
145 Le langage PROMELA exploite la notion de \emph{process} pour modéliser la concurrence
146 au sein de systèmes. Un process est déclaré avec le mot-clé
147 \verb+proctype+ et est instancié soit immédiatement (lorsque sa déclaration est préfixée
148 par le mot-clef \verb+active+) ou bien au moment de l'exécution de l'instruction
150 Parmi tous les process, \verb+init+ est le process initial qui permet
151 d'initialiser les variables, lancer d'autres process\ldots
154 Les instructions d'affectation sont interprétées usuellement.
155 Les canaux sont concernés par des instructions particulières d'envoi et de
156 réception de messages. Pour un canal
157 \verb+ch+, ces instructions sont respectivement notées
158 \verb+ch ! m+ et \verb+ch ? m+.
159 L'instruction de réception consomme la valeur en tête du canal \verb+ch+
160 et l'affecte à la variable \verb+m+ (pour peu que \verb+ch+ soit initialisé et non vide).
161 De manière similaire, l'instruction d'envoi ajoute la valeur de \verb+m+ à la queue du canal
162 \verb+ch+ (pour peu que celui-ci soit initialisé et non rempli).
163 Dans les cas problématiques, canal non initialisé et vide pour une réception ou bien rempli pour un envoi,
164 le processus est bloqué jusqu'à ce que les conditions soient remplies.
166 La structures de contrôle \verb+if+ (resp. \verb+do+) définit un choix non déterministe
167 (resp. une boucle non déterministe). Que ce soit pour la conditionnelle ou la boucle,
168 si plus d'une des conditions est établie, l'ensemble des instructions correspondantes
169 sera choisi aléatoirement puis exécuté.
171 Dans le process \verb+init+ détaillé à la {\sc Figure}~\ref{fig:spin:init},
172 une boucle de taille $N$ initialise aléatoirement la variable globale de type tableau \verb+Xp+.
173 Ceci permet par la suite de vérifier si les itérations sont convergentes pour n'importe
174 quelle configuration initiale $x^{(0)}$.
178 Pour chaque élément $i$, si les itérations sont asynchrones
180 \item on stocke d'abord la valeur de \verb+Xp[i]+ dans chaque \verb+Xd[j].v[i]+
181 puisque la matrice $s^0$ est égale à $(0)$,
182 \item puis, la valeur de $i$ (représentée par \verb+Xp[i]+) devrait être transmise
183 à $j$ s'il y a un arc de $i$ à $j$ dans le graphe d'incidence. Dans ce cas,
184 c'est la fonction \verb+hasnext+ (détaillée à la~\Fig{fig:spin:hasnext})
185 qui mémorise ce graphe
186 en fixant à \texttt{true} la variable \verb+is_succ+, naturellement et à
187 \texttt{false} dans le cas contraire.
188 Cela permet d'envoyer la valeur de $i$ dans le canal au travers de \verb+channels[i].sent[j]+.
192 \begin{minipage}[h]{.32\linewidth}
196 int i=0; int j=0; bool is_succ=0;
207 ::j< N -> Xd[j].v[i]=Xp[i]; j++;
215 ::(i!=j && is_succ==1) ->
216 channels[i].sent[j] ! Xp[i];
217 ::(i==j || is_succ==0) -> skip;
227 \caption{Process init.}\label{fig:spin:init}
229 \begin{minipage}[h]{.32\linewidth}
232 active proctype scheduler(){
234 ::sync_mutex ? 1 -> {
246 unlock_elements_update ! 1;
252 \caption{Process scheduler pour la stratégie pseudo pérodique.
253 \label{fig:scheduler}}
255 \begin{minipage}[h]{.30\linewidth}
260 :: i==0 && j ==0 -> is_succ = 1
261 :: i==0 && j ==1 -> is_succ = 1
262 :: i==0 && j ==2 -> is_succ = 0
263 :: i==1 && j ==0 -> is_succ = 1
264 :: i==1 && j ==1 -> is_succ = 0
265 :: i==1 && j ==2 -> is_succ = 1
266 :: i==2 && j ==0 -> is_succ = 1
267 :: i==2 && j ==1 -> is_succ = 1
268 :: i==2 && j ==2 -> is_succ = 1
273 \caption{Codage du graphe d'intéraction de $f$.
274 \label{fig:spin:hasnext}}
281 \section{Du système booléen au modèle PROMELA}
282 \label{sec:spin:translation}
283 Les éléments principaux des itérations asynchrones rappelées à l'équation
284 (\ref{eq:async}) sont la stratégie, la fonctions et la gestion des délais.
285 Dans cette section, nous présentons successivement comment chacune de
286 ces notions est traduite vers un modèle PROMELA.
289 \subsection{La stratégie}\label{sub:spin:strat}
290 Regardons comment une stratégie pseudo périodique peut être représentée en PROMELA.
291 Intuitivement, un process \verb+scheduler+ (comme représenté à la {\sc Figure}~\ref{fig:scheduler})
292 est iterrativement appelé pour construire chaque $s^t$ représentant
293 les éléments possiblement mis à jour à l'itération $t$.
295 Basiquement, le process est une boucle qui est débloquée lorsque la valeur du sémaphore
296 \verb+sync_mutex+ est 1. Dans ce cas, les éléments à modifier sont choisis
297 aléatoirement (grâce à $n$ choix successifs) et sont mémorisés dans le tableau
298 \verb+mods+, dont la taille est \verb+ar_len+.
299 Dans la séquence d'exécution, le choix d'un élément mis à jour est directement
300 suivi par des mises à jour: ceci est réalisé grâce à la modification de la valeur du sémaphore
301 \verb+unlock_elements_updates+.
303 \subsection{Itérer la fonction $f$}\label{sub:spin:update}
304 La mise à jour de l'ensemble $s^t=\{s_1,\ldots, s_m\}$ des éléments qui constituent la stratégie
305 $(s^t)^{t \in \Nats}$ est implantée à l'aide du process \verb+update_elems+ fourni à la
306 {\sc Figure}~\ref{fig:proc}.
307 Ce process actif attend jusqu'à ce qu'il soit débloqué par le process
308 \verb+scheduler+ à l'aide du sémaphore \verb+unlock_elements_update+.
309 L'implantation se déroule en cinq étapes:
312 \begin{minipage}[b]{.32\linewidth}
319 :: countu == N -> break ;
321 X[countu] = Xp[countu];
327 \caption{Sauvegarde de l'état courant}\label{fig:spin:sauve}
328 \end{minipage}\hfill%
329 \begin{minipage}[b]{.32\linewidth}
332 active proctype update_elems(){
334 ::unlock_elements_update ? 1 ->
343 ::count == ar_len -> break;
357 \caption{Mise à jour des éléments.}\label{fig:proc}
358 \end{minipage}\hfill%
361 \begin{minipage}[b]{.33\linewidth}
367 (Xs[j].v[0] & !Xs[j].v[1])
369 ::j==1 -> Xp[1] = Xs[j].v[0]
371 ::j==2 -> Xp[2] = Xs[j].v[1]
377 \caption{Application de la fonction $f$.}\label{fig:p}
383 \item elle commence en mettant à jour la variable \texttt{X} avec les valeurs de \texttt{Xp} dans la fonction \texttt{update\_X},~\Fig{fig:spin:sauve}
384 \item elle mémorise dans \texttt{Xd} la valeurs disponible pour chaque élément grâce à la fonction \texttt{fetch\_values}; cette fonction est détaillée
385 dans la section suivante;
386 \item une boucle %sur les \texttt{ar\_len} éléments qui peuvent être modifiés
387 met à jour iterrativement la valeur de $j$ (grâce à l'appel de fonction \texttt{f(j)})
388 pour peu que celui-ci doive être modifié, \textit{i.e.}, pour peu qu'il soit renseigné dans
389 \texttt{mods[count]}; le code source de \texttt{F} est donné en {\sc Figure}~\ref{fig:p} et est une
390 traduction directe de l'application $f$;
391 \item les nouvelles valeurs des éléments \texttt{Xp} sont symboliquement
392 envoyés aux autres éléments qui en dépendent grâce à la fonction
393 \texttt{diffuse\_values(Xp)}; cette dernière fonction est aussi détaillée
394 dans la section suivante;
395 \item finalement, le process informe le scheduler de la fin de la tâche
396 (au travers du sémaphore \texttt{sync\_mutex}).
406 \subsection{Gestion des délais}\label{sub:spin:vt}
407 Cette section montre comment les délais inhérents au mode asynchrone sont
408 traduits dans le modèle PROMELA grâce à deux
409 fonctions \verb+fetch_values+ et \verb+diffuse_values+.
410 Celles-ci sont données en {\sc Figure}~\ref{fig:val} et~\ref{fig:broadcast},
411 qui récupèrent et diffusent respectivement les valeurs des elements.
414 \begin{minipage}[h]{.475\linewidth}
417 inline fetch_values(){
420 :: countv == ar_len -> break ;
421 :: countv < ar_len ->
425 :: (i == N) -> break;
426 :: (i < N && i == j) -> {
429 :: (i < N && i != j) -> {
434 nempty(channels[i].sent[j]) ->
435 channels[i].sent[j] ?
445 \caption{Récupérer les valeurs des elements\label{fig:val}}
446 \end{minipage}\hfill%
447 \begin{minipage}[h]{.475\linewidth}
450 inline diffuse_values(values){
453 :: countb == ar_len -> break ;
454 :: countb < ar_len ->
458 :: (i == N) -> break;
459 :: (i < N && i == j) -> i++;
460 :: (i < N && i != j) -> {
465 nfull(channels[j].sent[i]) ->
466 channels[j].sent[i] !
476 \caption{Diffuser les valeurs des elements}\label{fig:broadcast}
480 La première fonction met à jour le tableau \verb+Xd+ requis pour les éléments
481 qui doivent être modifiés.
482 Pour chaque élément dans \verb+mods+, identifié par la variable
483 $j$, la fonction récupère les valeurs des autres éléments (dont le libellé est $i$)
487 \item puisque $i$ connaît sa dernière valeur (\textit{i.e.}, $D^t_{ii}$ est toujours $t$)
488 \verb+Xd[i].v[i]+ est donc \verb+Xp[i]+;
489 \item sinon, il y a deux sous cas qui peuvent peuvent potentiellement modifier la valeur
490 que $j$ a de $i$ (et qui peuvent être choisies de manière aléatoire):
492 \item depuis la perspective de $j$ la valeur de $i$ peut ne pas avoir changé (
493 c'est l'instruction \verb+skip+) ou n'est pas utile; ce dernier cas apparaît
494 lorsqu'il n'y a pas d'arc de $i$ à $j$ dans le graphe d'incidence, \textit{i.e.}, lorsque
495 la valeur de \verb+is_succ+ qui est calculée par \verb+hasnext(i,j)+ est 0;
496 dans ce cas, la valeur de \verb+Xd[j].v[i]+ n'est pas modifiée;
497 \item sinon, on affecte à \verb+Xd[j].v[i]+ la valeur mémorisée
498 dans le canal \verb+channels[i].sent[j]+ (pour peu que celui-ci ne soit pas vide).
502 Les valeurs des éléments sont ajoutées dans ce canal au travers de la fonction \verb+diffuse_values+. L'objectif de cette fonction
503 est de stocker les valeurs de $x$ (représenté
504 dans le modèle par \verb+Xp+) dans le canal \verb+channels+.
505 Il permet au modèle-checker SPIN d'exécuter
506 le modèle PROMELA comme s'il pouvait y avoir des délais entre processus
507 Il y a deux cas différents pour la valeur de $X_{j}$:
509 \item soit elle est \og perdue\fg{}, \og oubliée\fg{} pour permettre à $i$ de ne pas tenir compte d'une
510 des valeurs de $j$; ce cas a lieu soit lors de l'instruction \verb+skip+ ou lorsqu'il
511 n'y a pas d'arc de $j$ à $i$ dans le graphe d'incidence;
512 \item soit elle est mémorisée dans le canal \verb+channels[j].sent[i]+ (pour peu que celui-ci ne soit pas plein).
515 L'introduction de l'indéterminisme à la fois dans les fonctions \verb+fetch_values+
516 et \verb+diffuse_values+ est nécessaire dans notre contexte. Si celui-ci n'était
517 présent que dans la fonction \verb+fetch_values+, nous ne pourrions pas par exemple récupérer *
518 la valeur $x_i^{(t)}$ sans considérer la valeur $x_i^{(t-1)}$.
519 De manière duale, si le non déterminisme était uniquement
520 utilisé dans la fonction \verb+diffuse_values+, alors chaque fois qu'une valeur serait
521 mise dans le canal, elle serait immédiatement consommée, ce qui est contradictoire avec la notion de
524 % \subsection{Discussion}
525 % A coarse approach could consist in providing one process for each element.
526 % However, the distance with the mathematical model given in \Equ{eq:async} of
527 % such a translation would be larger than the method presented along these lines.
528 % It induces that it would be harder to prove the soundness and completeness of
529 % such a translation. For that reason we have developed a PROMELA model that is
530 % as close as possible to the mathematical one.
532 % Notice furthermore that PROMELA is an imperative language which
533 % often results in generating intermediate states
534 % (to execute a matrix assignment for
536 % The use of the \verb+atomic+ keyword allows the grouping of
537 % instructions, making the PROMELA code and the DDN as closed as possible.
539 \subsection{Propriété de convergence universelle}
540 Il reste à formaliser dans le model checker SPIN le fait que les
541 itérations d'un système
542 dynamique à $n$ éléments est universellement convergent.
544 Rappelons tout d'abord que les variables \verb+X+ et \verb+Xp+
545 contiennent respectivement la valeur de $x$ avant et après la mise à jour.
546 Ainsi, si l'on effectue une initialisation non déterministe de
547 \verb+Xp+ et si l'on applique une stratégie pseudo périodique,
548 il est nécessaire et suffisant
549 de prouver la formule temporelle linéaire (LTL) suivante:
551 \diamond (\Box \verb+Xp+ = \verb+X+)
554 où les opérateur $\diamond$ et $\Box$ ont
555 la sémantique usuelle, à savoir
556 respectivement {\em éventuellement} et {\em toujours} dans les chemins suivants.
557 On note que cette propriété, si elle est établie, garantit
558 la stabilisation du système.
559 Cependant elle ne donne aucune métrique quant à
560 la manière dont celle-ci est obtenue.
561 En particulier, on peut converger très lentement ou le système peut même
562 disposer de plusieurs points fixes.
566 \section{Correction et complétude de la démarche}\label{sec:spin:proof}
568 Cette section présente les théorèmes
569 de correction et de complétude de l'approche.
570 (Théorèmes~\ref{Theo:sound} et~\ref{Theo:completeness}).
571 Toutes les preuves sont déplacées en
572 annexes~\ref{anx:promela}.
575 \begin{theorem}[Correction]\label{Theo:sound}
576 Soit $\phi$ un modèle de système dynamique discret et $\psi$ sa traduction PROMELA.
578 la propriété LTL (\ref{eq:ltl:conv}) sous hypothèse d'équité faible, alors
579 les itérations de $\phi$ sont universellement convergentes.
584 \begin{theorem}[Complétude]\label{Theo:completeness}
585 Soit $\phi$ un modèle de système dynamique discret et $\psi$ sa traduction. Si $\psi$ ne vérifie pas
586 la propriété LTL (\ref{eq:ltl:conv}) sous hypothèse d'équité faible,
587 alors les itérations de $\phi$ ne sont pas universellement convergentes.
593 \section{Données pratiques}
594 \label{sec:spin:practical}
595 Cette section donne tout d'abord quelques mesures de complexité de l'approche
596 puis présente ensuite les expérimentations issues de ce travail.
598 \begin{theorem}[Nombre d'états ]
599 Soit $\phi$ un modèle de système dynamique discret à $n$ éléments, $m$
600 arcs dans le graphe d'incidence
601 et $\psi$ sa traduction en PROMELA. Le nombre de configurations
602 de l'exécution en SPIN de $\psi$ est bornée par $2^{m(\delta_0+1)+n(n+2)}$.
605 Une configuration est une valuation des variables globales.
606 Leur nombre ne dépend que de celles qui ne sont pas constantes.
608 Les variables \verb+Xp+ et \verb+X+ engendrent $2^{2n}$ états.
610 \verb+Xs+ génère $2^{n^2}$ états.
611 Chaque canal de \verb+array_of_channels+
612 peut engendrer $1+2^1+\ldots+2^{\delta_0}= 2^{\delta_0+1}-1$ états.
613 Puisque le nombre d'arêtes du graphe d'incidence est $m$,
614 il y a $m$ canaux non constants, ce qui génère approximativement $2^{m(\delta_0+1)}$ états.
615 Le nombre de configurations est donc borné par $2^{m(\delta_0+1)+n(n+2)}$.
616 On remarque que cette borne est traitable par SPIN pour des valeurs raisonnables de $n$,
618 \JFC{Donner un ordre de grandeur de cet ordre de grandeur}
622 La méthode détaillée ici a pu être appliquée sur l'exemple jouet
623 pour prouver formellement sa convergence universelle.
625 On peut remarquer que SPIN n'impose l'équité faible qu'entre les process
626 alors que les preuves des deux théorèmes précédentes reposent sur le fait que
627 celle-ci est établie dès qu'un choix indéterministe est effectué.
628 Naïvement, on pourrait considérer comme hypothèse la formule suivante
629 chaque fois qu'un choix indéterministe se produit entre $k$ événements
630 respectivement notés $l_1$, \ldots $l_k$:
632 \Box \diamond (l == l_0) \Rightarrow
633 ((\Box \diamond (l== l_1)) \land \ldots \land (\Box \diamond (l == l_k)))
636 où le libellé $l_0$ dénote le libellé de la ligne précédent
637 le choix indéterministe.
638 Cette formule traduit exactement l'équité faible.
639 Cependant en raison de l'explosion de la taille du produit entre
640 l'automate de Büchi issu de cette formule et celui issu du programme PROMELA,
641 SPIN n'arrive pas à vérifier si la convergence universelle est établie
642 ou non sur des exemples
643 simples\JFC{faire référence à un tel exemple}.
645 Ce problème a été pratiquement résolu en laissant SPIN
646 générer toutes les traces d'exécution,
647 même celles qui ne sont pas équitables,
648 puis ensuite vérifier la propriété de convergence sur toutes celles-ci.
649 Il reste alors à interpréter les résultats qui peuvent être de deux types. Si la convergence est
650 établie pour toutes les traces, elle le reste en particulier pour les traces équitables.
651 Dans le cas contraire on doit analyser le contre exemple produit par SPIN.
654 % \JFC{Reprendre ce qui suit}
655 % Experiments have shown that all the iterations of the running example are
656 % convergent for a delay equal to 1 in less than 10 min.
657 % The example presented in~\cite{abcvs05} with five elements taking boolean
658 % values has been verified with method presented in this article.
659 % Immediately, SPIN computes a counter example, that unfortunately does not
660 % fulfill fairness properties. Fair counter example is obtained
662 % All the experimentation have been realized in a classic desktop computer.
666 La méthode détaillée ici a été appliquée sur des exemples pour prouver formellement
667 leur convergence ou leur divergence (\Fig{fig:async:exp}).
668 Dans ces expériences, les délais ont été bornés par $\delta_0=10$.
669 Dans ce tableau, $P$ est vrai ($\top$) si et seulement si la convergence
671 est établie et faux ($\bot$) sinon. Le nombre $M$ est
672 la taille de la mémoire consommée (en MB) et
673 $T$ est le temps d'exécution sur un Intel Centrino Dual Core 2 Duo @1.8GHz avec 2GB de mémoire vive
674 pour établir un verdict.
680 \begin{tabular}{|*{7}{c|}}
682 \multicolumn{1}{c|}{ }
683 &\multicolumn{3}{|c|}{Parallèles} & \multicolumn{3}{|c|}{Chaotiques} \\
685 \multicolumn{1}{c|}{ }&
690 $\top$ & 2.7 & 0.01s &
691 $\bot$ & 369.371 & 0.509s \\
694 $\bot$ & 2.5 & 0.001s & % RC07_sync.spin
695 $\bot$ & 2.5 & 0.01s \\ % RC07_sync_chao_all.spin
698 $\top$ & 36.7 & 12s & % BM99_sync_para.spin
699 $\top$ & & \\ % BM99_sync_chao.spin
704 \caption{Expérimentations avec des itérations synchrones}\label{fig:sync:exp}
712 \begin{tabular}{|*{13}{c|}}
714 \multicolumn{1}{c|}{ }
715 &\multicolumn{6}{|c|}{Mixed Mode} & \multicolumn{6}{|c|}{Only Bounded} \\
717 \multicolumn{1}{c|}{ }
718 &\multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Pseudo-Periodic} &
719 \multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Pseudo-Periodic} \\
721 \multicolumn{1}{c|}{ }
728 $\top$ & 409 & 1m11s&
729 $\bot$ & 370 & 0.54 &
731 $\bot$ & 370 & 0.51s \\
734 &$\bot$ & 2.5 & 0.001s % RC07_async_mixed.spin
735 &$\bot$ & 2.5 & 0.01s % RC07_async_mixed_all.spin
736 &$\bot$ & 2.5 & 0.01s % RC07_async.spin
737 &$\bot$ & 2.5 & 0.01s \\ % RC07_async_all.spin
740 &$\top$ & & %BM99_mixed_para.spin
741 &$\top$ & & % RC07_async_mixed_all.spin
742 &$\bot$ & & % RC07_async.spin
743 &$\bot$ & & \\ % RC07_async_all.spin
747 \caption{Expérimentations avec des itérations asynchrones}\label{fig:async:exp}
752 L'exemple \textit{RE} est l'exemple jouet de ce chapitre,
753 \cite{RC07} concerne un réseau composé de deux gènes
754 à valeur dans $\{0,1,2\}$,
755 AC2D est un automate cellulaire avec 9 elements prenant des
756 valeurs booléennes en fonction de
758 \cite{BM99} consiste en 10 process
759 qui modifient leur valeur booléennes dans un graphe d'adjacence proche
763 L'exemple jouet \textit{RE} a été prouvé comme universellement convergent.
764 \JFC{statuer sur AC2D}
765 Comme la convergence n'est déjà pas établie pour les itérations parallèles
766 de~\cite{RC07}, il en est donc
767 de même pour les itérations asynchrones.
768 La {\sc Figure}~\ref{fig:RC07CE} donne une trace de la sortie de SPIN de menant à la violation
769 de la convergence. Celle-ci correspond à une stratégie périodique qui répète
770 $\{1,2\};\{1,2\};\{1\};\{1,2\};\{1,2\}$ et débute avec $x=(0,0)$.
771 En raison de la dépendance forte entre les éléments
773 $\delta_0$ est réduit à 1. Cela aboutit cependant à $2^{100}$
774 configurations dans le mode des itérations asynchrones.
777 La convergence des itérations asynchrones de l'exemple~\cite{BCVC10:ir} n'est pas établie
778 lorsque pour $\delta_0$ vaut 1. Il ne peut donc y avoir convergence universelle.
782 \includegraphics[scale=0.6]{images/RC07ce.eps}
783 \caption{Contre exemple de convergence pour~\ref{fig:RC07CE}} \label{fig:RC07CE}
792 % \begin{tabular}{|*{19}{c|}}
797 % & \multicolumn{6}{|c|}{Synchronous} & \multicolumn{12}{|c|}{Asynchronous}\\
799 % Delay & \multicolumn{6}{|c|}{ }
800 % & \multicolumn{6}{|c|}
802 % & \multicolumn{6}{|c|}
803 % {Bounded+Mixed Mode}\\
805 % \multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Chaotic} &
806 % \multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Chaotic} &
807 % \multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Chaotic} \\
814 \label{sec:spin:concl}
815 Des méthodes de simulation basées sur des stratégies et des délais générés aléatoirement
816 ont déjà été présentées~\cite{BM99,BCV02}.
817 Cependant, comme ces implantations ne sont pas exhaustives, elles ne donnent un résultat
818 formel que lorsqu'elles fournissent un contre-exemple. Lorsqu'elles exhibent une convergence,
819 cela ne permet que donner une intuition de convergence, pas une preuve.
820 Autant que nous sachions, aucune démarche de preuve formelle automatique
821 de convergence n'a jamais été établie.
822 Dans le travail théorique~\cite{Cha06}, Chandrasekaran a montré que les itérations asynchrones sont convergentes
823 si et seulement si on peut construire une fonction de Lyaponov décroissante, mais il ne donne pas de méthode
824 automatique pour construire cette fonction.
826 \JFC{Déplacer ceci dans les perspective}
827 Among drawbacks of the method, one can argue that bounded delays is only
828 realistic in practice for close systems.
829 However, in real large scale distributed systems where bandwidth is weak,
830 this restriction is too strong. In that case, one should only consider that
831 matrix $s^{t}$ follows the iterations of the system, \textit{i.e.},
832 for all $i$, $j$, $1 \le i \le j \le n$, we have$
833 \lim\limits_{t \to \infty} s_{ij}^t = + \infty$.
834 One challenge of this work should consist in weakening this constraint.
835 We plan as future work to take into account other automatic approaches
836 to discharge proofs notably by deductive analysis~\cite{CGK05}.