1 \JFC{donner dans les rappels les délais et les propriétés de convergence uniforme}
4 \section{Rappels sur le langage PROMELA}
5 \label{sec:spin:promela}
7 Cette section rappelle les éléments fondamentaux du langage PROMELA (Process Meta Language).
8 On peut trouver davantage de détails dans~\cite{Hol03,Wei97}.
19 bool X [N]; bool Xp [N]; int mods [N];
20 typedef vals{bool v [N]};
23 typedef a_send{chan sent[N]=[d_0] of {bool}};
26 chan unlock_elements_update=[1] of {bool};
27 chan sync_mutex=[1] of {bool};
30 \caption{Declaration des types de la traduction.}
31 \label{fig:arrayofchannels}
35 Les types primaires de PROMELA sont \texttt{bool}, \texttt{byte},
36 \texttt{short} et \texttt{int}. Comme dans le langage C par exemple,
37 on peut déclarer des tableaux à une dimension de taille constante
38 ou des nouveaux types de données (introduites par le mot clef
39 \verb+typedef+). Ces derniers sont utilisés pour définir des tableaux à deux
43 Le programme donné à la {\sc Figure}~\ref{fig:arrayofchannels} correspond à des
44 déclarations de variables qui serviront dans l'exemple jouet de ce chapitre.
45 Il définit tout d'abord:
47 \item les constantes \verb+N+ et \verb+d_0+ qui précisent respectivement le nombre
48 $n$ d'éléments et le délais maximum $\delta_0$;
49 \item les deux tableaux (\verb+X+ et \verb+Xp+) de \verb+N+ variables booléennes;
50 les cellules \verb+X[i]+ et \verb+Xp[i]+ sont associées à la variables $X_{i+1}$
51 d'un système dynamique discret
52 (le décalages d'un entier est dû à l'indexation à partir de zéro des cellules d'un tableau);
53 Elles mémorisent les valeurs de $X_{i+1}$ respectivement avant et après sa mise à jour;
54 il suffit ainsi de comparer \verb+X+ et \verb+Xp+ pour constater si $X$ à changé ou pas;
55 \item le tableau \verb+mods+ contient les éléments qui doivent être modifiés lors de l'itération
56 en cours; cela correspond naturellement à l'ensemble des éléments $S^t$;
57 \item le type de données structurées \verb+vals+ et le tableau de tableaux
58 \verb+Xd[+$i$\verb+].v[+$j$\verb+]+ qui vise à mémoriser $X_{j+1}^{D^{t-1}_{i+1j+1}}$
59 pour l'itération au temps $t$ (en d'autres termes, utile lors du calcul de $X^{t}$).
63 Puisque le décalage d'un indices ne change pas fondamentalement
64 le comportement de la version PROMELA par rapport au modèle initial
65 et pour des raisons de clarté, on utilisera par la suite la même
66 lettre d'indice entre les deux niveaux (pour le modèle: $X_i$ et pour PROMELA:
67 \texttt{X[i]}). Cependant, ce décalage devra être conservé mémoire.
69 Une donnée de type \texttt{channel} permet le
70 transfert de messages entre processus dans un ordre FIFO.
71 Elles serait déclarée avec le mot clef \verb+chan+ suivi par sa capacité
72 (qui est constante), son nom et le type des messages qui sont stockés dans ce canal.
73 Dans l'exemple précédent, on déclare successivement:
75 \item un canal \verb+sent+ qui vise à mémoriser\verb+d_0+ messages de type
76 \verb+bool+; le tableau nommé \verb+channels+ de \verb+N+*\verb+N+
77 éléments de type \verb+a_send+ est utilisé pour mémoriser les valeurs intermédiaires $X_j$;
78 Il permet donc de temporiser leur emploi par d'autres elements $i$.
79 \item les deux canaux \verb+unlock_elements_update+ et \verb+sync_mutex+ contenant
80 chacun un message booléen et utilisé ensuite comme des sémaphores.
84 %\subsection{PROMELA Processes}
85 Le langage PROMELA exploite la notion de \emph{process} pour modéliser la concurrence
86 au sein de systèmes. Un process est déclaré avec le mot-clé
87 \verb+proctype+ et est instancié soit immédiatement (lorsque sa déclaration est préfixée
88 par le mot-clef \verb+active+) ou bien au moment de l'exécution de l'instruction
90 Parmi tous les process, \verb+init+ est le process initial qui permet
91 d'initialiser les variables, lancer d'autres process\ldots
94 Les instructions d'affectation sont interprétées usuellement.
95 Les canaux sont cernés par des instructions particulières d'envoi et de
96 réception de messages. Pour un canal
97 \verb+ch+, ces instruction sont respectivement notées
98 \verb+ch ! m+ et \verb+ch ? m+.
99 L'instruction de réception consomme la valeur en tête du canal \verb+ch+
100 et l'affecte à la variable \verb+m+ (pour peu que \verb+ch+ soit initialisé et non vide).
101 De manière similaire,l'instruction d'envoi ajoute la valeur de \verb+m+ à la queue du canal
102 \verb+ch+ (pour peu que celui-ci soit initialisé et non rempli).
103 Dans les cas problématiques, canal non initialisé et vide pour une réception ou bien rempli pour un envoi,
104 le processus est bloqué jusqu'à ce que les conditions soient remplies.
106 La structures de contrôle \verb+if+ (resp. \verb+do+) définit un choix non déterministe
107 (resp. une boucle non déterministe). Que ce soit pour la conditionnelle ou la boucle,
108 si plus d'une des conditions est établie, l'ensemble des instructions correspondantes
109 sera choisi aléatoirement puis exécuté.
111 Dans le process \verb+init+ détaillé à la {\sc Figure}~\ref{fig:spin:init},
112 une boucle de taille $N$ initialise aléatoirement la variable globale de type tableau \verb+Xp+.
113 Ceci permet par la suite de vérifier si les itérations sont convergentes pour n'importe
114 quelle configuration initiale $X^{(0)}$.
118 Pour chaque élément $i$, si les itérations sont asynchrones
120 \item on stocke d'abord la valeur de \verb+Xp[i]+ dans chaque \verb+Xd[j].v[i]+
121 puisque la matrice $S^0$ est égale à $(0)$,
122 \item puis, la valeur de $i$ (représentée par \verb+Xp[i]+) devrait être transmise
123 à $j$ s'il y a un arc de $i$ à $j$ dans le graphe d'incidence. Dans ce cas,
124 c'est la fonction \verb+hasnext+ (non détaillée ici)
126 qui mémorise ce graphe
127 en fixant à \texttt{true} la variable \verb+is_succ+, naturellement et à
128 \texttt{false} dans le cas contraire.
129 Cela permet d'envoyer la valeur de $i$ dans le canal au travers de \verb+channels[i].sent[j]+.
133 \begin{minipage}[h]{.52\linewidth}
137 int i=0; int j=0; bool is_succ=0;
148 ::j< N -> Xd[j].v[i]=Xp[i]; j++;
156 ::(i!=j && is_succ==1) ->
157 channels[i].sent[j] ! Xp[i];
158 ::(i==j || is_succ==0) -> skip;
168 \caption{Process init.}\label{fig:spin:init}
170 \begin{minipage}[h]{.42\linewidth}
173 active proctype scheduler(){
175 ::sync_mutex ? 1 -> {
187 unlock_elements_update ! 1;
193 \caption{Process scheduler pour la stratégie pseudo pérodique.
194 \label{fig:scheduler}}
200 \section{Du système booléen au modèle PROMELA}
201 \label{sec:spin:translation}
202 Les éléments principaux des itérations asynchrones rappelées à l'équation
203 (\ref{eq:async}) sont la stratégie, la fonctions et la gestion des délais.
204 Dans cette section, nous présentons successivement comment chacune de
205 ces notions est traduite vers un modèle PROMELA.
208 \subsection{La stratégie}\label{sub:spin:strat}
209 Regardons comment une stratégie pseudo périodique peut être représentée en PROMELA.
210 Intuitivement, un process \verb+scheduler+ (comme représenté à la {\sc Figure}~\ref{fig:scheduler})
211 est iterrativement appelé pour construire chaque $S^t$ représentant
212 les éléments possiblement mis à jour à l'itération $t$.
214 Basiquement, le process est une boucle qui est débloquée lorsque la valeur du sémaphore
215 \verb+sync_mutex+ est 1. Dans ce cas, les éléments à modifier sont choisis
216 aléatoirement (grâce à $n$ choix successifs) et sont mémorisés dans le tableau
217 \verb+mods+, dont la taille est \verb+ar_len+.
218 Dans la séquence d'exécution, le choix d'un élément mis à jour est directement
219 suivi par des mis à jour: ceci est réalisé grâce à la modification de la valeur du sémaphore
220 \verb+unlock_elements_updates+.
222 \subsection{Itérer la fonction $F$}\label{sub:spin:update}
223 La mise à jour de l'ensemble $S^t=\{s_1,\ldots, s_m\}$ des éléments qui constituent la stratégie
224 $(S^t)^{t \in \Nats}$ est implanté à l'aide du process \verb+update_elems+ fourni à la
225 {\sc Figure}~\ref{fig:proc}.
226 Ce process actif attend jusqu'à ce qu'il soit débloqué par le process
227 \verb+scheduler+ à l'aide du sémaphore \verb+unlock_elements_update+.
228 L'implantation contient donc cinq étapes:
231 \item elle commence en mettant à jour la variable \texttt{X} avec les valeurs de \texttt{Xp}
232 dans la fonction \texttt{update\_X} (non détaillée ici);
233 \item elle mémorise dans \texttt{Xd} la valeurs disponibles des éléments grâce à
234 la fonction \texttt{fetch\_values} (cf. \Sec{sub:spin:vt});
235 \item une boucle sur les \texttt{ar\_len} éléments qui peuvent être modifiés
236 met à jour iterrativement la valeur de $j$ (grâce à l'appel de fonction \texttt{F(j)})
237 pour peu que celui-ci doive être modifié, \textit{i.e.}, pour peu qu'il soit renseigné dans
238 \texttt{mods[count]}; le code source de \texttt{F} est donné en {\sc Figure}~\ref{fig:p} et est une
239 traduction directe de l'application $F$;
240 \item les nouvelles valeurs des éléments \texttt{Xp} sont symboliquement envoyés aux
241 autres éléments qui en dépendent grâce à la fonction
242 \texttt{diffuse\_values(Xp)} (cf. \Sec{sub:spin:vt});
243 \item finalement, le process informe le scheduler de la fin de la tâche
244 (au travers du sémaphore \texttt{sync\_mutex}).
249 \begin{minipage}[h]{.475\linewidth}
252 active proctype update_elems(){
254 ::unlock_elements_update ? 1 ->
263 ::count == ar_len -> break;
277 \caption{Mise à jour des éléments.}\label{fig:proc}
278 \end{minipage}\hfill%
281 \begin{minipage}[h]{.45\linewidth}
287 (Xs[j].v[0] & !Xs[j].v[1])
289 ::j==1 -> Xp[1] = Xs[j].v[0]
291 ::j==2 -> Xp[2] = Xs[j].v[1]
297 \caption{Application de la fonction $F$.}\label{fig:p}
302 \subsection{Gestion des délais}\label{sub:spin:vt}
303 Cette section montre comment les délais inhérents au mode asynchrone sont
304 traduits dans le modèle PROMELA grâce à deux
305 fonctions \verb+fetch_values+ et \verb+diffuse_values+.
306 Celles-ci sont données en {\sc Figure}~\ref{fig:val} et~\ref{fig:broadcast},
307 qui récupèrent et diffusent respectivement les valeurs des elements.
310 \begin{minipage}[h]{.475\linewidth}
313 inline fetch_values(){
316 :: countv == ar_len -> break ;
317 :: countv < ar_len ->
321 :: (i == N) -> break;
322 :: (i < N && i == j) -> {
325 :: (i < N && i != j) -> {
330 nempty(channels[i].sent[j]) ->
331 channels[i].sent[j] ?
341 \caption{Récupérer les valeurs des elements\label{fig:val}}
342 \end{minipage}\hfill%
343 \begin{minipage}[h]{.475\linewidth}
346 inline diffuse_values(values){
349 :: countb == ar_len -> break ;
350 :: countb < ar_len ->
354 :: (i == N) -> break;
355 :: (i < N && i == j) -> i++;
356 :: (i < N && i != j) -> {
361 nfull(channels[j].sent[i]) ->
362 channels[j].sent[i] !
372 \caption{Diffuser les valeurs des elements}\label{fig:broadcast}
376 La première fonction met à jour le tableau \verb+Xd+ requis pour les éléments
377 qui doivent être modifiés.
378 Pour chaque élément dans \verb+mods+, identifié par la variable
379 $j$, la fonction récupère les valeurs des autres éléments (dont le libellé est $i$)
380 dont $j$ dépend. \JFC{vérifier si c'est ce sens ici}
383 \item puisque $i$ connaît sa dernière valeur (\textit{i.e.}, $D^t_{ii}$ est toujours $t$)
384 \verb+Xd[i].v[i]+ est donc \verb+Xp[i]+;
385 \item sinon, il y a deux sous cas qui peuvent peuvent potentiellement modifier la valeur
386 que $j$ a de $i$ (et qui peuvent être choisies de manière aléatoire):
388 \item depuis la perspective de $j$ la valeur de $i$ peut ne pas avoir changé (
389 c'est l'instruction \verb+skip+) ou n'est pas utile; ce dernier cas apparaît
390 lorsqu'il n'y a pas d'arc de $i$ à $j$ dans le graphe d'incidence, \textit{i.e.}, lorsque
391 la valeur de \verb+is_succ+ qui est calculée par \verb+hasnext(i,j)+ is 0;
392 dans ce cas, la valeur de \verb+Xd[j].v[i]+ n'est pas modifiée;
393 \item sinon, on affecte à \verb+Xd[j].v[i]+ la valeur mémorisée
394 dans le canal \verb+channels[i].sent[j]+ (pour peu que celui-ci ne soit pas vide).
395 Les valeurs des éléments sont ajoutées dans ce canal au travers de la fonction \verb+diffuse_values+
400 L'objectif de la fonction \verb+diffuse_values+ est de stocker les valeurs de $X$ représenté
401 dans le modèle par \verb+Xp+ dans le canal \verb+channels+.
402 Il permet au modèle-checker SPIN d'exécuter
403 le modèle PROMELA comme s'il pouvait y avoir des délais entre processus
404 Il y a deux cas différents pour la valeur de $X_{j}$:
406 \item soit elle est \og perdue\fg{}, \og oubliée\fg{} pour permettre à $i$ de ne pas tenir compte d'une
407 des valeurs de $j$; ce cas a lieu soit lors de l'instruction \verb+skip+ ou lorsqu'il
408 n'y a pas d'arc de $j$ à $i$ dans le graphe d'incidence;
409 \item soit elle est mémorisée dans le canal \verb+channels[j].sent[i]+ (pour peu que celui-ci ne soit pas plein).
412 L'introduction de l'indéterminisme à la fois dans les fonctions \verb+fetch_values+
413 et \verb+diffuse_values+ est nécessaire dans notre contexte. Si celui-ci n'était
414 présent que dans la fonction \verb+fetch_values+, nous ne pourrions pas par exemple récupérer
415 la valeur $X_i^{(t)}$ sans considérer la valeur $X_i^{(t-1)}$.
416 De manière duale, si le non déterminisme était uniquement
417 utilisé dans la fonction \verb+diffuse_values+, alors chaque fois qu'une valeur serait
418 mise dans le canal, elle serait immédiatement consommé, ce qui est contradictoire avec la notion de
421 % \subsection{Discussion}
422 % A coarse approach could consist in providing one process for each element.
423 % However, the distance with the mathematical model given in \Equ{eq:async} of
424 % such a translation would be larger than the method presented along these lines.
425 % It induces that it would be harder to prove the soundness and completeness of
426 % such a translation. For that reason we have developed a PROMELA model that is
427 % as close as possible to the mathematical one.
429 % Notice furthermore that PROMELA is an imperative language which
430 % often results in generating intermediate states
431 % (to execute a matrix assignment for
433 % The use of the \verb+atomic+ keyword allows the grouping of
434 % instructions, making the PROMELA code and the DDN as closed as possible.
436 \subsection{Propriété de convergence universelle}
437 Il reste à formaliser dans le model checker SPIN que les itérations d'un système
438 dynamique à $n$ éléments est universellement convergent.
440 Rappelons tout d'abord que les variables \verb+X+ et \verb+Xp+
441 contiennent respectivement la valeur de $X$ avant et après la mise à jour.
442 Ainsi, si l'on effectue une initialisation non déterministe de
443 \verb+Xp+ et si l'on applique une stratégie pseudo périodique,
444 il est nécessaire et suffisant
445 de prouver la formule temporelle linéaire (LTL) suivante:
447 \diamond (\Box \verb+Xp+ = \verb+X+)
450 où les opérateur $\diamond$ et $\Box$ on la sémantique usuelle \textit{i.e.}, à savoir
451 respectivement {\em éventuellement} et {\em toujours} dans les chemins suivants.
452 On note que cette propriété assure seulement la stabilisation du système,
453 mais ne donne aucune métrique quant à la manière dont celle-ci est obtenue.
454 En particulier, on peut converger très lentement ou le système peut même
455 disposer de plusieurs points fixes.
459 \section{Correction et complétude de la démarche}\label{sec:spin:proof}
461 Cette section présente les théorème de correction et de complétude de l'approche.
462 (Théorèmes~\ref{Theo:sound} et~\ref{Theo:completeness}).
463 Toutes les preuves sont déplacées en
464 annexes~\ref{anx:promela}.
467 \begin{theorem}[Correction]\label{Theo:sound}
468 Soit $\phi$ un modèle de système dynamique discret et $\psi$ sa traduction PROMELA.
470 la propriété LTL (\ref{eq:ltl:conv}) sous hypothèse d'équité faible, alors
471 les itérations de $\phi$ sont universellement convergentes.
476 \begin{theorem}[Complétude]\label{Theo:completeness}
477 Soit $\phi$ un modèle de système dynamique discret et $\psi$ sa traduction. Si $\psi$ ne vérifie pas
478 la propriété LTL (\ref{eq:ltl:conv}) sous hypothèse d'équité faible,
479 alors les itérations de $\phi$ ne sont pas universellement convergentes.
485 \section{Données pratiques}
486 \label{sec:spin:practical}
487 Cette section donne tout d'abord quelques mesures de complexité de l'approche
488 puis présente ensuite les expérimentations issues de ce travail.
490 \begin{theorem}[Nombre d'états ]
491 Soit $\phi$ un modèle de système dynamique discret à $n$ éléments, $m$ arc dans le graphe d'incidence
492 et $\psi$ sa traduction en PROMELA. Le nombre de configurations
493 de l'exécution en SPIN de $\psi$ est bornée par $2^{m\times(\delta_0+1)+n(n+2)}$.
496 Une configuration est une valuation des variables globales.
497 Leur nombre ne dépend que de celles qui ne sont pas constantes.
499 Les variables \verb+Xp+ et \verb+X+ engendrent $2^{2n}$ états.
501 \verb+Xs+ génère $2^{n^2}$ états.
502 Chaque canal de \verb+array_of_channels+
503 peut engendrer $1+2^1+\ldots+2^{\delta_0}= 2^{\delta_0+1}-1$ états.
504 Puisque le nombre d'arêtes du graphe d'incidence est $m$,
505 il y a $m$ canaux non constants, ce qui génère approximativement $2^{m\times(\delta_0+1)}$ états.
506 Le nombre de configurations est donc borné par $2^{m\times(\delta_0+1)+n(n+2)}$.
507 On remarque que cette borne est traitable par SPIN pour des valeurs raisonnables de $n$,
509 \JFC{Donner un ordre de grandeur de cet ordre de grandeur}
513 La méthode détaillée ici a pu être appliquée sur l'exemple jouet
514 pour prouver formellement sa convergence uniforme.
516 On peut remarquer que SPIN n'impose l'équité faible qu'entre les process
517 alors que les preuves des deux théorèmes précédentes reposent sur le fait que
518 celle-ci est établie dès qu'un choix indéterministe est effectué.
519 Naïvement, on pourrait considérer comme hypothèse la formule suivante
520 chaque fois qu'un choix indéterministe se produit entre $k$ événements
521 respectivement notés $l1$, \ldots $lk$:
523 [] <> (l == l0) \Rightarrow
524 (([] <> (l== l1)) \land \ldots \land ([] <> (l == lk)))
527 où le libellé $l0$ dénote le libellé de la ligne précédent le choix indéterministe.
528 Cette formule traduit exactement l'équité faible.
529 Cependant en raison de l'explosion de la taille du produit entre
530 l'automate de Büchi issu de cette formule et celui issu du programme PROMELA,
531 SPIN n'arrive pas à vérifier si la convergence uniforme est établie ou non sur des exemples
532 simples\JFC{faire référence à un tel exemple}.
534 Ce problème a été pratiquement résolu en laissant SPIN générer toutes les traces d'exécution,
535 même les non équitables, puis en le laissant vérifier la propriété de convergence dessus.
536 Il reste alors à interpréter les résultats qui peuvent être de deux types. Si la convergence est
537 établie pour toutes les traces, elle le reste en particulier pour les traces équitables.
538 Dans le cas contraire on doit analyser le contre exemple produit par SPIN.
541 % \JFC{Reprendre ce qui suit}
542 % Experiments have shown that all the iterations of the running example are
543 % convergent for a delay equal to 1 in less than 10 min.
544 % The example presented in~\cite{abcvs05} with five elements taking boolean
545 % values has been verified with method presented in this article.
546 % Immediately, SPIN computes a counter example, that unfortunately does not
547 % fulfill fairness properties. Fair counter example is obtained
549 % All the experimentation have been realized in a classic desktop computer.
553 La méthode détaillée ici a été appliquée sur des exemples pour prouver formellement
554 leur convergence ou leur divergence (Fig.~\ref{fig:async:exp}).
555 Dans ces expériences, les délais on été bornés par $\delta_0=10$.
556 Dans ce tableau, $P$ est vrai ($\top$) si et seulement si la convergence uniforme
557 est établie et faux ($\bot$) sinon. Le nombre $M$ et la taille de la mémoire consommée (en MB) et
558 $T$ est le temps d'exécution sur un Intel Centrino Dual Core 2 Duo @1.8GHz avec 2GB de mémoire vive
559 pour établir un verdict.
561 L'exemple RE est l'exemple jouet de ce chapitre,
562 AC2D est un automate cellulaire avec 9 elements prenant des valeurs booléennes en fonction de
563 de 4 voisins et BM99, issu de~\cite{BM99} consiste en 10 process
564 qui modifient leur valeur booléennes dans un graphe d'adjacence proche du graphe complet.
570 \begin{tabular}{|*{13}{c|}}
572 \multicolumn{1}{c|}{ }
573 &\multicolumn{6}{|c|}{Mixed Mode} & \multicolumn{6}{|c|}{Only Bounded} \\
575 \multicolumn{1}{c|}{ }
576 &\multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Pseudo-Periodic} &
577 \multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Pseudo-Periodic} \\
579 \multicolumn{1}{c|}{ }
586 $\top$ & 409 & 1m11s&
587 $\bot$ & 370 & 0.54 &
589 $\bot$ & 370 & 0.51s \\
592 &$\bot$ & 2.5 & 0.001s % RC07_async_mixed.spin
593 &$\bot$ & 2.5 & 0.01s % RC07_async_mixed_all.spin
594 &$\bot$ & 2.5 & 0.01s % RC07_async.spin
595 &$\bot$ & 2.5 & 0.01s \\ % RC07_async_all.spin
598 &$\top$ & & %BM99_mixed_para.spin
599 &$\top$ & & % RC07_async_mixed_all.spin
600 &$\bot$ & & % RC07_async.spin
601 &$\bot$ & & \\ % RC07_async_all.spin
605 \caption{Expérimentations avec des itérations asynchrones}\label{fig:async:exp}
610 L'exemple~\cite{RC07} concerne un réseau composé de deux gènes à valeur dans $\{0,1,2\}$.
611 Comme la convergence n'est déjà pas établie pour les itérations parallèles, il en est donc
612 de même pour les itérations asynchrones.
613 LA {\sc Figure}~\ref{fig:RC07CE} donne une trace de la sortie de SPIN de menant à la violation
614 de la convergence. Celle-ci correspond à une stratégie périodique qui répète
615 $\{1,2\};\{1,2\};\{1\};\{1,2\};\{1,2\}$ et débute avec $X=(0,0)$.
618 Dans l'exemple issu de~\cite{BM99}, nous avons 10 process
619 à valeur booléennes. En raison de la dépendance forte entre les éléments,
620 $\delta_0$ est réduit à 1. Cela aboutit cependant à $2^{100}$
621 configurations dans le mode des itérations asynchrones.
622 La convergence des itérations asynchrones de l'exemple~\cite{BCVC10:ir} n'est pas établie
623 lorsque pour $\delta_0$ vaut 1. Il ne peut donc y avoir convergence uniforme.
628 \begin{tabular}{|*{7}{c|}}
630 \multicolumn{1}{c|}{ }
631 &\multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Pseudo-Periodic} \\
633 \multicolumn{1}{c|}{ }&
638 $\top$ & 2.7 & 0.01s &
639 $\bot$ & 369.371 & 0.509s \\
641 \cite{RC07} exemples &
642 $\bot$ & 2.5 & 0.001s & % RC07_sync.spin
643 $\bot$ & 2.5 & 0.01s \\ % RC07_sync_chao_all.spin
645 \cite{BM99} exemple &
646 $\top$ & 36.7 & 12s & % BM99_sync_para.spin
647 $\top$ & & \\ % BM99_sync_chao.spin
652 \caption{Expérimentations avec des itérations synchrones}\label{fig:sync:exp}
660 % \begin{tabular}{|*{19}{c|}}
665 % & \multicolumn{6}{|c|}{Synchronous} & \multicolumn{12}{|c|}{Asynchronous}\\
667 % Delay & \multicolumn{6}{|c|}{ }
668 % & \multicolumn{6}{|c|}
670 % & \multicolumn{6}{|c|}
671 % {Bounded+Mixed Mode}\\
673 % \multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Chaotic} &
674 % \multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Chaotic} &
675 % \multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Chaotic} \\
682 \label{sec:spin:concl}
683 Des méthodes de simulation basées sur des stratégies et des délais générés aléatoirement
684 ont déjà été présentées~\cite{BM99,BCV02}.
685 Cependant, comme ces implantations ne sont pas exhaustives, elles ne donnent un résultat
686 formel que lorsqu'elles fournissent un contre-exemple. Lorsqu'elles exhibent une convergence,
687 cela ne permet que donner une intuition de convergence, pas une preuve.
688 Autant que nous sachions, aucune démarche de preuve formelle de convergence n'a jamais été établie.
689 Dans le travail théorique~\cite{Cha06}, Chandrasekaran a montré que les itérations asynchrones sont convergentes
690 si et seulement si on peut construire une fonction de Lyaponov décroissante, mais il ne donne pas de méthode
691 automatique pour construire cette fonction.
693 \JFC{Déplacer ceci dans les perspective}
694 Among drawbacks of the method, one can argue that bounded delays is only
695 realistic in practice for close systems.
696 However, in real large scale distributed systems where bandwidth is weak,
697 this restriction is too strong. In that case, one should only consider that
698 matrix $S^{t}$ follows the iterations of the system, \textit{i.e.},
699 for all $i$, $j$, $1 \le i \le j \le n$, we have$
700 \lim\limits_{t \to \infty} S_{ij}^t = + \infty$.
701 One challenge of this work should consist in weakening this constraint.
702 We plan as future work to take into account other automatic approaches
703 to discharge proofs notably by deductive analysis~\cite{CGK05}.