]> AND Private Git Repository - hdrcouchot.git/blob - modelchecking.tex
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
dd804c2ca057483b397eee38516b8c4f817b1342
[hdrcouchot.git] / modelchecking.tex
1 \JFC{donner dans les rappels les délais et les propriétés de convergence uniforme}
2
3
4 \section{Rappels sur le langage PROMELA}
5 \label{sec:spin:promela}
6
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}.
9
10
11
12
13 \begin{figure}[ht]
14 \begin{scriptsize}
15 \begin{lstlisting}
16 #define N 3
17 #define d_0 5
18
19 bool X [N]; bool Xp [N]; int mods [N];
20 typedef vals{bool v [N]};
21 vals Xd [N];  
22
23 typedef a_send{chan sent[N]=[d_0] of {bool}};
24 a_send channels [N];
25
26 chan unlock_elements_update=[1] of {bool};
27 chan sync_mutex=[1] of {bool};
28 \end{lstlisting}
29 \end{scriptsize}
30 \caption{Declaration des types de la traduction.}
31 \label{fig:arrayofchannels}
32 \end{figure}
33
34
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 declarer 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
40 dimension.
41
42 \begin{xpl}
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:
46 \begin{itemize}
47 \item les constantes \verb+N+ et \verb+d_0+ qui précisent respectivement le numbre
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ène dynamique discret 
52 (le décallage d'un entier est dû à l'indexation à partir de zéro des cellules d'un tableau);
53 Elles  memorisent 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'iteration 
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}$).
60 \end{itemize}
61
62
63 Puisque le décallage 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 clareté, 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écallage devra être conservé mémoire.
68
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 cannal.
73 Dans l'exemple précédent, on déclare successivement:
74 \begin{itemize}
75 \item un cannal \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 cannaux  \verb+unlock_elements_update+ et  \verb+sync_mutex+ contenant 
80 chacun un message booléen et utilisé ensuite comme des sémaphores.
81 \end{itemize}
82 \end{xpl}
83
84 %\subsection{PROMELA Processes} 
85 Le langage PROMELA exploite la notion de \emph{process} pour modéliser la concurence
86 au sein de systèmes. Un process est déclaréavec le mot-clef
87 \verb+proctype+  et est  instancié soit imé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 
89 \texttt{run}.
90 Parmi tous les process,  \verb+init+ est le process  initial qui permet 
91 d'initialiser les variables, lancer d'autres processes\ldots
92
93
94 Les instructions d'affecatation sont interprétées usuellement.
95 Les cannaux sont cernés par des instructions particulières d'envoi et de
96 réception de messages. Pour un cannal  
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 cannal \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 reception ou bien rempli pour un envoi,
104 le processus est blocké jusqu'à ce que les  conditions soient  remplies.
105
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é.
110
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 verifier si les itérations sont  convergentes pour n'importe  
114 quelle configuration initiale $X^{(0)}$.
115
116
117
118 Pour chaque  élément $i$, si les itérations sont asynchrones
119 \begin{itemize}
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)  
125   \JFC{la détailler}
126   qui   memorise 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]+.
130 \end{itemize}
131
132 \begin{figure}[t]
133  \begin{minipage}[h]{.52\linewidth}
134 \begin{scriptsize}
135 \begin{lstlisting}
136 init{
137  int i=0; int j=0; bool is_succ=0;
138  do
139  ::i==N->break;
140  ::i< N->{
141    if
142    ::Xp[i]=0;
143    ::Xp[i]=1;
144    fi;
145    j=0;
146    do
147    ::j==N -> break;
148    ::j< N -> Xd[j].v[i]=Xp[i]; j++;
149    od;
150    j=0;
151    do
152    ::j==N -> break;
153    ::j< N -> {
154      hasnext(i,j);
155      if
156      ::(i!=j && is_succ==1) -> 
157      channels[i].sent[j] ! Xp[i];
158      ::(i==j || is_succ==0) -> skip; 
159      fi;  
160      j++;}
161    od;
162    i++;}
163  od;
164  sync_mutex ! 1;
165 }
166 \end{lstlisting}
167 \end{scriptsize}
168 \caption{Process init.}\label{fig:spin:init} 
169 \end{minipage}\hfill
170  \begin{minipage}[h]{.42\linewidth}
171 \begin{scriptsize}
172 \begin{lstlisting}
173 active proctype scheduler(){ 
174  do
175  ::sync_mutex ? 1 -> {
176    int i=0; int j=0;
177    do
178    :: i==N -> break;
179    :: i< N -> {
180      if
181      ::skip;
182      ::mods[j]=i; j++;
183      fi;
184      i++;}
185    od;
186    ar_len=i; 
187    unlock_elements_update ! 1;
188    }
189  od
190 }
191 \end{lstlisting}
192 \end{scriptsize}
193 \caption{Process scheduler pour la stratégie pseudo-periodique.
194  \label{fig:scheduler}}
195 \end{minipage}
196 \end{figure}
197
198
199
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.
206
207
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 itérativement appelé pour construire chaque $S^t$ représentant 
212 les éléments possiblement mis à jour à l'itération $t$.
213
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'éxécution, le choix d'un élément mis à jour est directement
219 suivi par des mis àjour: ceci est réalisé grace à la modification de la valeur du sémaphore
220  \verb+unlock_elements_updates+.
221
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éblocqué par le process
227 \verb+scheduler+  à l'aide du sémaphore \verb+unlock_elements_update+.
228 L'implantation contient donc cinq étapes:
229
230 \begin{enumerate}
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 function \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 itérativement la valeur de $j$ (grace à 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 symbolicallement 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 finallement, le process informe le scheduler de la fin de la tâche 
244   (au travers  du semaphore \texttt{sync\_mutex}).
245 \end{enumerate}
246
247
248 \begin{figure}[t]
249   \begin{minipage}[h]{.475\linewidth}
250 \begin{scriptsize}
251 \begin{lstlisting}
252 active proctype update_elems(){
253  do
254  ::unlock_elements_update ? 1 ->
255    {
256     atomic{
257      bool is_succ=0;
258      update_X();
259      fetch_values();
260      int count = 0;
261      int j = 0;
262      do
263      ::count == ar_len -> break;
264      ::count < ar_len ->
265        j = mods[count];     
266        F(j);
267        count++;
268      od;
269      diffuse_values(Xp);
270      sync_mutex ! 1
271     }
272    }
273  od
274 }
275 \end{lstlisting}
276 \end{scriptsize}
277 \caption{Mise à jour des éléments.}\label{fig:proc}
278   \end{minipage}\hfill%
279 %\end{figure}
280 %\begin{figure}
281   \begin{minipage}[h]{.45\linewidth}
282 \begin{scriptsize}
283 \begin{lstlisting}
284 inline F(){
285  if
286  ::j==0 -> Xp[0] = 
287       (Xs[j].v[0] & !Xs[j].v[1]) 
288      |(Xs[j].v[2])
289  ::j==1 -> Xp[1] =  Xs[j].v[0] 
290                  | !Xs[j].v[2]
291  ::j==2 -> Xp[2] =  Xs[j].v[1] 
292                  &  Xs[j].v[2]
293  fi
294 }
295 \end{lstlisting}
296 \end{scriptsize}
297 \caption{Application de la fonction $F$.}\label{fig:p}
298   \end{minipage}
299 \end{figure}
300
301
302 \subsection{Gestion des délais}\label{sub:spin:vt}
303 Cette  section montre comment les délais iné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.
308
309 \begin{figure}[t]
310   \begin{minipage}[h]{.475\linewidth}
311 \begin{scriptsize}
312 \begin{lstlisting}
313 inline fetch_values(){
314  int countv = 0;
315  do
316  :: countv == ar_len -> break ;
317  :: countv < ar_len ->
318     j = mods[countv];
319     i = 0;       
320     do
321     :: (i == N) -> break;
322     :: (i < N && i == j) -> {
323         Xd[j].v[i] = Xp[i] ;
324         i++ }   
325     :: (i < N && i != j) -> {
326         hasnext(i,j);
327         if
328         :: skip
329         :: is_succ==1 &&
330     nempty(channels[i].sent[j]) ->
331             channels[i].sent[j] ?
332                         Xd[j].v[i];
333         fi; 
334         i++ }
335     od;
336     countv++
337  od
338 }
339 \end{lstlisting}
340 \end{scriptsize}
341 \caption{Récupérer les valeurs des elements\label{fig:val}}
342   \end{minipage}\hfill%
343   \begin{minipage}[h]{.475\linewidth}
344 \begin{scriptsize}
345 \begin{lstlisting}
346 inline diffuse_values(values){   
347  int countb=0;
348  do
349  :: countb == ar_len -> break ;
350  :: countb < ar_len ->
351     j = mods[countb];
352     i = 0 ;
353     do
354     :: (i == N) -> break;
355     :: (i < N && i == j) -> i++;   
356     :: (i < N && i != j) -> {
357         hasnext(j,i);
358         if
359         :: skip
360         :: is_succ==1 && 
361      nfull(channels[j].sent[i]) ->
362             channels[j].sent[i] ! 
363                          values[j];
364         fi;
365         i++ }
366     od;
367     countb++
368  od
369 }       
370 \end{lstlisting}
371 \end{scriptsize}
372 \caption{Diffuser les valeurs des elements}\label{fig:broadcast}
373   \end{minipage}
374 \end{figure}
375
376 La première fonction met à jour le tableau array \verb+Xd+ recquis 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 libélé est $i$)
380 dont $j$ dépend. \JFC{vérifier si c'est ce sens ici}
381 Il y a deux cas.
382 \begin{itemize}
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 alléatoire):
387   \begin{itemize}
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'arce 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     dansle cannal \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 cannal au travers de la fonction  \verb+diffuse_values+
396     donnée juste après.
397   \end{itemize}
398 \end{itemize}
399
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 cannal  \verb+channels+.
402 Il permet au modèle-checker SPIN  d'exécuter 
403 le modèle PROMELA model 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}$:
405 \begin{itemize}
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 cannal \verb+channels[j].sent[i]+ (pour peu que celui-ci ne soit pas plein).
410 \end{itemize}
411
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-determinism  était uniquement
417 utilisé dans la fonction \verb+diffuse_values+, alors chaque fois qu'une valeur serait 
418 mise dans le cannal, elle serait immédiatement consommé, ce qui est contradictoire avec la notion de 
419 délai.
420
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.
428
429 % Notice furthermore that PROMELA is an  imperative language which
430 % often results in generating  intermediate  states 
431 % (to  execute  a matrix assignment  for
432 % instance). 
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.
435
436 \subsection{Propriéte 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.
439
440 We first recall that the
441 variables \verb+X+  and \verb+Xp+ respectively  contain the value of  $X$ before
442 and after  an update.  Then,  by applying a non-deterministic  initialization of
443 \verb+Xp+  and  applying  a   pseudo-periodic  strategy,  it  is  necessary  and
444 sufficient to establish the following Linear Temporal Logic (LTL) formula:
445 \begin{equation}
446 \diamond  (\Box  \verb+Xp+ = \verb+X+)
447 \label{eq:ltl:conv}
448 \end{equation}
449 where $\diamond$  and $\Box$ have the usual  meaning \textit{i.e.}, respectively
450 {\em eventually} and {\em always} in  the subsequent path.  It is worth noticing
451 that this property only ensures the stabilization of the system, but it does not
452 provide any information  over the way the system  converges. In particular, some
453 indeterminism  may still  be present  under the  form of  multiple  fixed points
454 accessible from some initial states.
455
456
457
458 \section{Proof of Translation Correctness}\label{sec:spin:proof}
459 \JFC{Déplacer les preuves en annexes}
460
461 This  section  establishes  the  soundness  and  completeness  of  the  approach
462 (Theorems~\ref{Theo:sound}  and ~\ref{Theo:completeness}). Technical  lemmas are
463 first shown to ease the proof of the two theorems.
464    
465
466 % \begin{Lemma}[Absence of deadlock]\label{lemma:deadlock}
467 %   Let $\phi$ be a DDN model and $\psi$ be its translation.  There is no deadlock
468 %   in any execution of $\psi$.
469 % \end{Lemma}
470 % \begin{Proof}
471 %   In current  translation, deadlocks of  PROMELA may only be  introduced through
472 %   sending  or  receiving messages  in  channels.   Sending  (resp. receiving)  a
473 %   message in the  \verb+diffuse_values+ (resp.  \verb+fetch_values+) function is
474 %   executed  only if  the  channel is  not full  (resp.  is not  empty).  In  the
475 %   \verb+update_elems+ and \verb+scheduler+ processes, each time one adds a value
476 %   in     any     semaphore     channel    (\verb+unlock_elements_update+     and
477 %   \verb+sync_mutex+), the corresponding value is read; avoiding deadlocks by the
478 %   way.
479 % \end{Proof}
480
481
482 \begin{lemma}[Strategy Equivalence]\label{lemma:strategy}
483   Let $\phi$  be a  DDN with strategy  $(S^t)^{t \in  \Nats}$ and $\psi$  be its
484   translation.  There exists an execution of $\psi$ with weak fairness s.t.  the
485   scheduler makes \verb+update_elems+ update elements of $S^t$ at iteration $t$.
486 \end{lemma}
487 \begin{Proof}
488   The proof is direct  for $t=0$. Let us suppose it is  established until $t$ is
489   some $t_0$.  Let  us consider pseudo-periodic strategies.  Thanks  to the weak
490   fairness equity property, \verb+update_elems+ will modify elements of $S^t$ at
491   iteration $t$.
492 \end{Proof}
493
494 In     what     follows,     let     $Xd^t_{ji}$     be     the     value     of
495 \verb+Xd[+$j$\verb+].v[+$i$\verb+]+  after  the   $t^{\text{th}}$  call  to  the
496 function  \verb+fetch_values+.  Furthermore,  let $Y^k_{ij}$  be the  element at
497 index  $k$  in  the  channel  \verb+channels[i].sent[j]+ of  size  $m$,  $m  \le
498 \delta_0$; $Y^0_{ij}$ and $Y^{m-1}_{ij}$ are  respectively the head and the tail
499 of the  channel.  Secondly, let $(M_{ij}^t)^{t \in  \{1, 1.5, 2, 2.5,\ldots\}}$ be a
500 sequence such  that $M_{ij}^t$ is the  partial function that  associates to each
501 $k$, $0 \le k \le  m-1$, the tuple $(Y^k_{ij},a^k_{ij},c^k_{ij})$ while entering
502 into the \verb+update_elems+ at iteration $t$ where
503 % \begin{itemize}
504 % \item
505  $Y^k_{ij}$ is the value of the channel \verb+channels[i].sent[j]+
506   at index $k$,
507 %\item 
508 $a^k_{ij}$ is the date (previous to $t$) when $Y^k_{ij}$ has been added and
509 %\item 
510 $c^k_{ij}$ is the  first date at which the value is  available on $j$. So,
511   the value is removed from the channel $i\rightarrow j$ at date $c^k_{ij}+1$.
512 %\end{itemize}
513 $M_{ij}^t$ has the following signature:
514 \begin{equation*}
515 \begin{array}{rrcl}
516 M_{ij}^t: & 
517 \{0,\ldots, \textit{max}-1\} &\rightarrow & E_i\times \Nats \times \Nats \\
518 & k  \in \{0,\ldots, m-1\} & \mapsto & M_{ij}(k)= (Y^k_{ij},a^k_{ij},c^k_{ij}).
519 \end{array}  
520 \end{equation*}
521
522 Intuitively,  $M_{ij}^t$  is  the  memory  of  \verb+channels[i].sent[j]+  while
523 starting the iteration $t$.  Notice that the domain of any $M_{ij}^1$ is $\{0\}$
524 and   $M_{ij}^1(0)=(\verb+Xp[i]+,0,0)$:    indeed,   the   \verb+init+   process
525 initializes \verb+channels[i].sent[j]+ with \verb+Xp[i]+.
526
527 Let us  show how  to make the  indeterminism inside the  two functions\linebreak
528 \verb+fetch_values+  and  \verb+diffuse_values+  compliant with  \Equ{eq:async}.
529 The  function   $M_{ij}^{t+1}$  is  obtained   by  the  successive   updates  of
530 $M_{ij}^{t}$  through   the  two  functions\linebreak   \verb+fetch_values+  and
531 \verb+diffuse_values+.   Abusively,   let  $M_{ij}^{t+1/2}$  be   the  value  of
532 $M_{ij}^{t}$ after the former function during iteration $t$.
533
534 In  what follows, we  consider elements  $i$ and  $j$ both  in $\llbracket  1, n
535 \rrbracket$   that  are   updated.   At   iteration   $t$,  $t   \geq  1$,   let
536 $(Y^0_{ij},a^0_{ij},c^0_{ij})$ be the value of $M_{ij}^t(0)$ at the beginning of
537 \verb+fetch_values+.   If $t$  is  equal  to $c^0_{ij}+1$  then  we execute  the
538 instruction    that   assigns    $Y^0_{ij}$   (\textit{i.e.},     the   head    value   of
539 \verb+channels[i].sent[j]+)  to   $Xd_{ji}^t$.   In  that   case,  the  function
540 $M_{ij}^t$ is updated as follows: $M_{ij}^{t+1/2}(k) = M_{ij}^{t}(k+1)$ for each
541 $k$, $0 \le k \le m-2$ and $m-1$ is removed from the domain of $M_{ij}^{t+1/2}$.
542 Otherwise (\textit{i.e.}, when  $t < c^0_{ij}+1$ or when  the domain of $M_{ij}$
543 is  empty)   the  \verb+skip+  statement  is  executed   and  $M_{ij}^{t+1/2}  =
544 M_{ij}^{t}$.
545
546 In the function \verb+diffuse_values+, if  there exists some $\tau$, $\tau\ge t$
547 such that \mbox{$D^{\tau}_{ji} = t$}, let  $c_{ij}$ be defined by $ \min\{l \mid
548 D^{l}_{ji} =  t \} $.  In  that case, we  execute the instruction that  adds the
549 value   \verb+Xp[i]+   to  the   tail   of  \verb+channels[i].sent[j]+.    Then,
550 $M_{ij}^{t+1}$ is defined  as an extension of $M_{ij}^{t+1/2}$  in $m$ such that
551 $M_{ij}^{t+1}(m)$ is $(\verb+Xp[i]+,t,c_{ij})$.  Otherwise (\textit{i.e.}, when $\forall l
552 \, .  \, l \ge t  \Rightarrow D^{l}_{ji} \neq t$ is established) the \verb+skip+
553 statement is executed and $M_{ij}^{t+1} = M_{ij}^{t+1/2}$.
554
555
556 \begin{lemma}[Existence of SPIN Execution]\label{lemma:execution}
557   For any sequences $(S^t)^{t  \in \Nats}$,\linebreak $(D^t)^{t \in \Nats}$, for
558   any map $F$ there exists a SPIN  execution such that for any iteration $t$, $t
559   \ge  1$, for  any $i$ and $j$ in  $\llbracket 1, n \rrbracket$  we  have the
560   following properties:
561    
562 \noindent If the domain of $M_{ij}^t$ is not empty, then
563 \begin{equation}
564   \left\{
565     \begin{array}{rcl}
566       M_{ij}^1(0) & = & \left(X_i^{D_{ji}^{0}}, 0,0 \right) \\
567       \textrm{if $t \geq 2$ then }M_{ij}^t(0) & = &
568       \left(X_i^{D_{ji}^{c}},D_{ji}^{c},c \right) \textrm{, }
569       c = \min\{l | D_{ji}^l > D_{ji}^{t-2} \}
570     \end{array}
571   \right.
572   \label{eq:Mij0}
573 \end{equation}
574 \noindent Secondly we have:
575 \begin{equation}
576   \forall t'\, .\,   1 \le t' \le t  \Rightarrow   Xd^{t'}_{ji} = X^{D^{t'-1}_{ji}}_i
577   \label{eq:correct_retrieve}
578 \end{equation}
579 \noindent Thirdly, for any $k\in S^t$.  Then, the value of the computed variable
580 \verb+Xp[k]+  at  the  end  of  the  \verb+update_elems+  process  is  equal  to
581 $X_k^{t}$          \textit{i.e.},          $F_{k}\left(         X_1^{D_{k\,1}^{t-1}},\ldots,
582   X_{n}^{D_{k\,{n}}^{t-1}}\right)$ at the end of the $t^{\text{th}}$ iteration.
583 \end{lemma}
584 \begin{Proof}
585 The proof is done by induction on the number of iterations.
586
587 \paragraph{Initial case:}
588
589 For the first  item, by definition of $M_{ij}^t$, we  have $M_{ij}^1(0) = \left(
590   \verb+Xp[i]+, 0,0 \right)$ that is obviously equal to $\left(X_i^{D_{ji}^{0}},
591   0,0 \right)$.
592
593 Next, the first call to  the function \verb+fetch_value+ either assigns the head
594 of   \verb+channels[i].sent[j]+  to   \verb+Xd[j].v[i]+  or   does   not  modify
595 \verb+Xd[j].v[i]+.  Thanks to  the \verb+init+ process, both cases  are equal to
596 \verb+Xp[i]+,  \textit{i.e.}, $X_i^0$.  The  equation (\ref{eq:correct_retrieve})  is then
597 established.
598
599
600 For  the last  item, let  $k$, $0  \le  k \le  n-1$.  At  the end  of the  first
601 execution\linebreak   of   the  \verb+update_elems+   process,   the  value   of
602 \verb+Xp[k]+       is\linebreak       $F(\verb+Xd[+k\verb+].v[0]+,       \ldots,
603 \verb+Xd[+k\verb+].v[+n-1\verb+]+)$.  Thus,  by definition of $Xd$,  it is equal
604 to $F(Xd^1_{k\,0}, \ldots,Xd^1_{k\,n-1})$.  Thanks to \Equ{eq:correct_retrieve},
605 we can conclude the proof.
606
607
608
609 \paragraph{Inductive case:}
610
611 Suppose now that lemma~\ref{lemma:execution} is established until iteration $l$.
612
613 First,  if domain  of definition  of the  function $M_{ij}^l$  is not  empty, by
614 induction  hypothesis $M_{ij}^{l}(0)$  is  $\left(X_i^{D_{ji}^{c}}, D_{ji}^{c},c
615 \right)$ where $c$ is $\min\{k | D_{ji}^k > D_{ji}^{l-2} \}$.
616
617 At iteration $l$, if  $l < c + 1$ then the  \verb+skip+ statement is executed in
618 the   \verb+fetch_values+  function.   Thus,   $M_{ij}^{l+1}(0)$  is   equal  to
619 $M_{ij}^{l}(0)$.  Since $c > l-1$  then $D_{ji}^c > D_{ji}^{l-1}$ and hence, $c$
620 is $\min\{k  | D_{ji}^k  > D_{ji}^{l-1} \}$.  Obviously, this implies  also that
621 $D_{ji}^c > D_{ji}^{l-2}$ and $c=\min\{k | D_{ji}^k > D_{ji}^{l-2} \}$.
622
623 We now consider that at iteration $l$, $l$ is $c + 1$.  In other words, $M_{ij}$
624 is modified depending on the domain $\dom(M^l_{ij})$ of $M^l_{ij}$:
625 \begin{itemize}
626 \item  if $\dom(M_{ij}^{l})=\{0\}$  and $\forall  k\,  . \,  k\ge l  \Rightarrow
627   D^{k}_{ji} \neq l$  is established then $\dom(M_{ij}^{l+1})$ is  empty and the
628   first item of the lemma  is established; 
629 \item if $\dom(M_{ij}^{l})=\{0\}$ and $\exists  k\, . \, k\ge l \land D^{k}_{ji}
630   = l$  is established then $M_{ij}^{l+1}(0)$  is $(\verb+Xp[i]+,l,c_{ij})$ that
631   is  added  in  the  \verb+diffuse_values+ function  s.t.\linebreak  $c_{ij}  =
632   \min\{k  \mid  D^{k}_{ji}  = l  \}  $.   Let  us  prove  that we  can  express
633   $M_{ij}^{l+1}(0)$  as  $\left(X_i^{D_{ji}^{c'}},D_{ji}^{c'},c' \right)$  where
634   $c'$ is  $\min\{k |  D_{ji}^k > D_{ji}^{l-1}  \}$.  First,  it is not  hard to
635   establish that  $D_{ji}^{c_{ij}}= l \geq  D_{ji}^{l} > D_{ji}^{l-1}$  and thus
636   $c_{ij}  \geq   c'$.   Next,  since   $\dom(M_{ij}^{l})=\{0\}$,  then  between
637   iterations $D_{ji}^{c}+1$ and $l-1$, the \texttt{diffuse\_values} function has
638   not updated $M_{ij}$.  Formally we have
639 $$
640 \forall t,k  \, .\, D_{ji}^c <  t < l \land  k \geq t  \Rightarrow D_{ji}^k \neq
641 t.$$
642
643 Particularly, $D_{ji}^{c'} \not  \in \{D_{ji}^{c}+1,\ldots,l-1\}$.  We can apply
644 the     third    item     of    the     induction    hypothesis     to    deduce
645 $\verb+Xp[i]+=X_i^{D_{ji}^{c'}}$ and we can conclude.
646
647 \item  if   $\{0,1\}  \subseteq  \dom(M_{ij}^{l})$   then  $M_{ij}^{l+1}(0)$  is
648   $M_{ij}^{l}(1)$.   Let  $M_{ij}^{l}(1)=  \left(\verb+Xp[i]+, a_{ij}  ,  c_{ij}
649   \right)$.   By  construction $a_{ij}$  is  $\min\{t'  |  t' >  D_{ji}^c  \land
650   (\exists k \, .\, k \geq t' \land D_{ji}^k = t')\}$ and $c_{ij}$ is $\min\{k |
651   D_{ji}^k = a_{ij}\}$.  Let us show  $c_{ij}$ is equal to $\min\{k | D_{ji}^k >
652   D_{ji}^{l-1} \}$ further  referred as $c'$.  First we  have $D_{ji}^{c_{ij}} =
653   a_{ij} >  D_{ji}^c$. Since $c$  by definition is  greater or equal to  $l-1$ ,
654   then $D_{ji}^{c_{ij}}>  D_{ji}^{l-1}$ and then $c_{ij} \geq  c'$.  Next, since
655   $c$ is  $l-1$, $c'$ is $\min\{k |  D_{ji}^k > D_{ji}^{c} \}$  and then $a_{ij}
656   \leq  D_{ji}^{c'}$. Thus,  $c_{ij} \leq  c'$  and we  can conclude  as in  the
657   previous part.
658 \end{itemize}
659
660
661 The case where  the domain $\dom(M^l_{ij})$ is empty but  the formula $\exists k
662 \, .\, k \geq  l \land D_{ji}^k = l$ is established  is equivalent to the second
663 case given above and then is omitted.
664
665
666 Secondly, let us focus on the formula~(\ref{eq:correct_retrieve}).  At iteration
667 $l+1$, let $c'$ be defined as $\min\{k | D_{ji}^k > D_{ji}^{l-1} \}$.  Two cases
668 have to be  considered depending on whether $D_{ji}^{l}$  and $D_{ji}^{l-1}$ are
669 equal or not.
670 \begin{itemize}
671 \item If  $D_{ji}^{l} = D_{ji}^{l-1}$, since $D_{ji}^{c'}  > D_{ji}^{l-1}$, then
672   $D_{ji}^{c'} > D_{ji}^{l}$ and then $c'$  is distinct from $l$. Thus, the SPIN
673   execution detailed  above does not  modify $Xd_{ji}^{l+1}$.  It is  obvious to
674   establish   that   $Xd_{ji}^{l+1}  =   Xd_{ji}^{l}   =  X_i^{D_{ji}^{l-1}}   =
675   X_i^{D_{ji}^{l}}$.
676 \item Otherwise $D_{ji}^{l}$ is greater than $D_{ji}^{l-1}$ and $c$ is thus $l$.
677   According     to     \Equ{eq:Mij0}     we     have    proved,     we     have
678   $M_{ij}^{l+1}(0)=(X_i^{D_{ji}^{l}},D_{ji}^{l},l)$.   Then  the SPIN  execution
679   detailed above  assigns $X_i^{D_{ji}^{l}}$ to $Xd_{ji}^{l+1}$,  which ends the
680   proof of (\ref{eq:correct_retrieve}).
681 \end{itemize}
682
683 We are left to prove the induction of  the third part of the lemma.  Let $k$, $k
684 \in S^{l+1}$. % and $\verb+k'+ = k-1$.
685 At the  end of the first  execution of the \verb+update_elems+  process, we have
686 $\verb+Xp[+k\verb+]+=                                   F(\verb+Xd[+k\verb+][0]+,
687 \ldots,\verb+Xd[+k\verb+][+n\verb+-1]+)+$.  By  definition of $Xd$,  it is equal
688 to      $F(Xd^{l+1}_{k\,0},      \ldots,Xd^{l+1}_{k\,n-1})$.      Thanks      to
689 \Equ{eq:correct_retrieve} we have proved, we can conclude the proof.
690 \end{Proof}
691
692
693 \begin{lemma}
694   Bounding the size of channels  to $\textit{max} = \delta_0$ is sufficient when
695   simulating a DDN where delays are bounded by $\delta_0$.
696 \end{lemma}
697
698 \begin{Proof}
699   For  any $i$,  $j$, at  each  iteration $t+1$,  thanks to  bounded delays  (by
700   $\delta_0$),  element $i$  has to  know at  worst $\delta_0$  values  that are
701   $X_j^{t}$, \ldots, $X_j^{t-\delta_0+1}$.  They  can be stored into any channel
702   of size $\delta_0$.
703 \end{Proof}
704
705
706 \begin{theorem}[Soundness wrt universal convergence property]\label{Theo:sound}
707   Let $\phi$ be  a DDN model and $\psi$ be its  translation.  If $\psi$ verifies
708   the  LTL  property  (\ref{eq:ltl:conv})  under weak  fairness  property,  then
709   iterations of $\phi$ are universally convergent.
710 \end{theorem}
711 \begin{Proof}
712 %   For  the  case  where  the  strategy  is  finite,  one  notice  that  property
713 %   verification  is achieved  under  weak fairness  property.  Instructions  that
714 %   write or read into \verb+channels[j].sent[i]+ are continuously enabled leading
715 %   to  convenient  available  dates  $D_{ji}$.   It is  then  easy  to  construct
716 %   corresponding iterations of the DDN that are convergent.
717 % \ANNOT{quel sens donnes-tu a \emph{convenient} ici ?}
718
719   Let us show the contraposition of the theorem.  The previous lemmas have shown
720   that for any  sequence of iterations of the DDN, there  exists an execution of
721   the PROMELA  model that  simulates them.   If some iterations  of the  DDN are
722   divergent, then  they prevent  the PROMELA model  from stabilizing,  \textit{i.e.},  not
723   verifying the LTL property (\ref{eq:ltl:conv}).
724 \end{Proof}
725
726
727 % \begin{Corol}[Soundness wrt universall convergence property]\label{Theo:sound}
728 % Let $\phi$ be a DDN model where strategy, $X^(0)$ 
729 % are only constrained to be pseudo-periodic and
730 % in $E$ respectively.
731 % Let $\psi$ be its translation.
732 % If all the executions of $\psi$ converge, 
733 % then  iterations of $\phi$ are universally convergent.
734 % \end{Corol}
735
736
737
738 \begin{theorem}[Completeness wrt universal convergence property]\label{Theo:completeness}
739   Let $\phi$ be a  DDN model and $\psi$ be its translation.   If $\psi$ does not
740   verify the LTL property  (\ref{eq:ltl:conv}) under weak fairness property then
741   the iterations of $\phi$ are divergent.
742 \end{theorem}
743 \begin{Proof}
744   For models $\psi$  that do not verify the  LTL property (\ref{eq:ltl:conv}) it
745   is easy  to construct corresponding iterations  of the DDN,  whose strategy is
746   pseudo-periodic since weak fairness property is taken into account.
747
748 %   i.e. iterations that  are divergent.   Executions are
749 %   performed under weak  fairness property; we then detail  what are continuously
750 %   enabled:
751 % \begin{itemize}
752 % \item if the strategy is not  defined as periodic, elements $0$, \ldots, $n$ are
753 %   infinitely often updated leading to pseudo-periodic strategy;
754 % \item  instructions  that  write  or read  into  \verb+channels[j].sent[i]+  are
755 %   continuously enabled leading to convenient available dates $D_{ji}$.
756 % \end{itemize}
757 % The simulated DDN does not stabilize and its iterations are divergent.
758  \end{Proof}
759
760
761
762 \section{Practical Issues}
763 \label{sec:spin:practical}
764 This  section  first  gives  some  notes about  complexity  and  later  presents
765 experiments.
766 %\subsection{Complexity Analysis}
767 %\label{sub:spin:complexity}
768 \begin{theorem}[Number of states]
769   Let $\phi$ be a DDN model with  $n$ elements, $m$ edges in the incidence graph
770   and $\psi$ be  its translation into PROMELA.  The  number of configurations of
771   the $\psi$ SPIN execution is bounded by $2^{m\times(\delta_0+1)+n(n+2)}$.
772 \end{theorem}
773 \begin{Proof}
774   A configuration is a valuation  of global variables. Their number only depends
775   on those that are not constant.
776
777   The  variables  \verb+Xp+ \verb+X+  lead  to  $2^{2n}$  states.  The  variable
778   \verb+Xs+ leads to $2^{n^2}$ states.  Each channel of \verb+array_of_channels+
779   may  yield $1+2^1+\ldots+2^{\delta_0}=  2^{\delta_0+1}-1$  states.  Since  the
780   number of  edges in  the incidence  graph is $m$,  there are  $m$ non-constant
781   channels,  leading  to  approximately $2^{m\times(\delta_0+1)}$  states.   The
782   number of configurations is then bounded by $2^{m\times(\delta_0+1)+n(n+2)}$.
783   Notice that  this bound is tractable  by SPIN for  small values of $n$, 
784   $m$ and $\delta_0$.
785 \end{Proof}
786
787
788
789 The  method detailed along  the line  of this  article has  been applied  on the
790 running example to formally prove its universally convergence.
791
792 First  of all,  SPIN only  considers  weak fairness  property between  processes
793 whereas  above  proofs need  such  a  behavior to  be  established  each time  a
794 non-deterministic choice is done.
795
796
797 A first attempt has consisted in building the following formula
798 each time an undeterministic choice between $k$ elements 
799 respectively labeled $l1$, \ldots $lk$ occurs:  
800 $$
801 [] <> (l == l0) \Rightarrow 
802 (([] <> (l== l1)) \land  \ldots \land ([] <> (l == lk)))
803 $$
804 where label $l0$ denotes the line before the choice.
805 This formula exactly translates the fairness property.
806 The negation of such a LTL formula may then be efficiently translated  
807 into a Büchi automata  with the tool ltl2ba~\cite{GO01}.
808 However due to an explosion of the size of the product 
809 between this automata and the automata issued from the PROMELA program 
810 SPIN did not success to verify whether the property is established or not. 
811
812 This problem has been practically tackled by leaving spin generating all the (not necessarily fair) computations and verifying convergence property on them.
813 We are then left to interpret its output with two issues.
814 If property is established for all the computations, 
815 it is particularly established for fair ones and iterations are convergent. 
816 In the opposite case, when facing to a counter example, an analysis of the SPIN 
817 output is achieved. 
818 \begin{xpl}
819 Experiments have shown that all the iterations of the running example are 
820 convergent for a delay equal to 1 in less than 10 min.
821 The example presented in~\cite{abcvs05} with five elements taking boolean 
822 values has been verified with method presented in this article.   
823 Immediately, SPIN computes a counter example, that unfortunately does not
824 fulfill fairness properties. Fair counter example is obtained
825 after few minutes.
826 All the experimentation have been realized in a classic desktop computer.
827 \end{xpl}
828
829
830
831
832
833 %However preliminary experiments have shown the interest of the approach.  
834
835
836
837 % The method detailed along the line of this article has been 
838 % applied on some examples to formally prove their convergence
839 % (Fig.~\ref{fig:async:exp}).
840 % In these experiments, Delays are supposed to be bounded by $\delta_0$ set to 10.
841 % In these arrays, 
842 % $P$ is true ($\top$) provided the  uniform convergence property is established, false ($\bot$) otherwise,  
843 % $M$ is the amount of memory usage (in MB) and 
844 % $T$ is the time needed on a Intel Centrino Dual Core 2 Duo @1.8GHz  with 2GB of memory, both  
845 % to establish or refute the property.
846
847 % RE is the running example of this article, 
848 % AC2D is a cellular automata with 9 elements taking boolean values
849 % according their four neighbors 
850 % and BM99 is has been proposed in~\cite{BM99} and consists of 10 process
851 % modifying their boolean values, but with many connected connection graph. 
852
853
854
855
856
857 % \begin{figure}
858 % \begin{center}
859 % \scriptsize
860 % \begin{tabular}{|*{13}{c|}}
861 % \cline{2-13}
862 % \multicolumn{1}{c|}{ }
863 % &\multicolumn{6}{|c|}{Mixed Mode} & \multicolumn{6}{|c|}{Only Bounded} \\
864 % \cline{2-13}
865 % \multicolumn{1}{c|}{ }
866 % &\multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Pseudo-Periodic} &
867 % \multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Pseudo-Periodic} \\
868 % \cline{2-13}
869 % \multicolumn{1}{c|}{ }
870 % &P & M & T &
871 % P & M & T &
872 % P & M & T&
873 % P & M & T \\
874 % \hline %cline{2-13}
875 % Running Example & 
876 % $\top$ & 409 & 1m11s&
877 % $\bot$ & 370 & 0.54 &
878 % $\bot$ & 374 & 7.7s&
879 % $\bot$ & 370 & 0.51s \\
880 % \hline %\cline{2-13}
881 % AC2D 
882 % &$\bot$ & 2.5 & 0.001s  % RC07_async_mixed.spin
883 % &$\bot$ & 2.5 & 0.01s   % RC07_async_mixed_all.spin
884 % &$\bot$ & 2.5 & 0.01s   % RC07_async.spin
885 % &$\bot$ & 2.5 & 0.01s  \\ % RC07_async_all.spin 
886 % \hline %\cline{2-13}
887 % BM99 
888 % &$\top$ &  &   %BM99_mixed_para.spin 
889 % &$\top$ &  &    % RC07_async_mixed_all.spin
890 % &$\bot$ &  &    % RC07_async.spin
891 % &$\bot$ &  &   \\ % RC07_async_all.spin 
892 % \hline %\cline{2-13}
893 % \end{tabular}
894 % \end{center}
895 % \caption{Experimentations with Asynchronous Iterations}\label{fig:async:exp}
896 % \end{figure} 
897
898
899
900 % The example~\cite{RC07} deals with a network composed of two genes taking their 
901 % values into $\{0,1,2\}$. Since parallel iterations is already diverging, 
902 % the same behavior is observed for all other modes.
903 % The Figure~\ref{fig:RC07CE} gives the trace leading to convergence property 
904 % violation output by SPIN.
905 % It corresponds to peridic strategy that repeats $\{1,2\};\{1,2\};\{1\};\{1,2\};\{1,2\}$ and starts with $X=(0,0)$.
906    
907   
908 % In the example extracted from~\cite{BM99},
909 % we have 10 processors computing a binary value.
910 % Due to the huge number of  dependencies between these calculus, 
911 % $\delta_0$ is reduced to 1. It nevertheless leads to about $2^{100}$ 
912 % configurations in asynchronous iterations.
913
914 % Let us focus on checking universal convergence of asynchronous iterations 
915 % of example~\cite{BCVC10:ir}. 
916 % With a $\delta_0$ set to 5, SPIN generates an out of memory error.  
917 % However, it succeed to prove that the property is not established even
918 % with $\delta_0$ set to 1 which is then sufficient.
919
920
921 % \begin{figure}
922 % \begin{center}
923 % \begin{tiny}
924 % \begin{tabular}{|*{7}{c|}}
925 % \cline{2-7}
926 % \multicolumn{1}{c|}{ }
927 % &\multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Pseudo-Periodic} \\
928 % \cline{2-7}
929 % \multicolumn{1}{c|}{ }& 
930 % P & M & T&
931 % P & M & T \\
932 % \hline %\cline{2-7}
933 % Running  &
934 % $\top$ & 2.7 & 0.01s & 
935 % $\bot$ & 369.371 & 0.509s \\ 
936 % \hline %\cline{2-7}
937 % \cite{RC07} example &
938 % $\bot$ & 2.5 & 0.001s & % RC07_sync.spin
939 % $\bot$ & 2.5 & 0.01s \\ % RC07_sync_chao_all.spin
940 % \hline
941 % \cite{BM99} example &
942 % $\top$ & 36.7 & 12s & % BM99_sync_para.spin
943 % $\top$ &  &  \\ % BM99_sync_chao.spin
944 % \hline
945 % \end{tabular}
946 % \end{tiny}
947 % \end{center}
948 % \caption{Experimentations with Synchronous Iterations}\label{fig:sync:exp}
949 % \end{figure} 
950
951
952
953
954
955
956 % \begin{tabular}{|*{}{c|}}
957 % % \hline 
958 % % e \\
959 % % 
960 % \hline
961 % & \multicolumn{6}{|c|}{Synchronous} & \multicolumn{12}{|c|}{Asynchronous}\\
962 % \cline{8-19}
963 % Delay &  \multicolumn{6}{|c|}{ }
964 % & \multicolumn{6}{|c|}
965 % {Only Bounded}
966 % & \multicolumn{6}{|c|}
967 % {Bounded+Mixed Mode}\\
968 % Strategy&
969 % \multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Chaotic} &
970 % \multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Chaotic} &
971 % \multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Chaotic} \\
972
973
974 % \end{tabular}
975
976  
977 \section{Conclusion and Future Work}
978 \label{sec:spin:concl}
979 Stochastic based prototypes have been implemented to generate both 
980 strategies and delays for asynchronous iterations in first in~\cite{BM99,BCV02}.
981 However, since these research softwares are not exhaustive, they really give an 
982 formal answer when they found a counterexample. When facing convergence, they only convince 
983 the user about this behavior  without exhibiting a proof. 
984  
985 As far as we know, no implemented formal method tackles the problem of
986 proving asynchronous iterations convergence. 
987 In the theoretical work~\cite{Cha06} Chandrasekaran shows that asynchronous iterations
988 are convergent iff we can build a decreasing Lyaponov function, 
989 but does not gives any automated method to compute it.  
990
991 In this work, we  have shown how convergence proof for any asynchronous
992 iterations of  discrete dynamical networks  with bounded delays
993 can be automatically achieved.
994 The key idea is to translate the network (map, strategy) into PROMELA and 
995 to leave the SPIN model checker establishing the validity 
996 of the temporal property corresponding to the convergence.
997 The correctness and completeness of the approach have been proved, notably 
998 by computing a SPIN execution of the PROMELA model that have the same
999 behaviors than initial network.
1000 The complexity of the problem is addressed. It shows that non trivial example 
1001 may be addressed by this technique.
1002
1003 Among drawbacks of the method,  one can argue that bounded delays is only 
1004 realistic in practice for close systems. 
1005 However, in real large scale distributed systems where bandwidth is weak, 
1006 this restriction is too strong. In that case, one should only consider that 
1007 matrix $S^{t}$ follows the  iterations of the system, \textit{i.e.},
1008 for all $i$, $j$, $1 \le i \le j \le n$,  we have$
1009 \lim\limits_{t \to \infty} S_{ij}^t = + \infty$. 
1010 One challenge of this work should consist in weakening this constraint. 
1011 We plan as future work to take into account other automatic approaches 
1012 to discharge proofs notably by deductive analysis~\cite{CGK05}. 
1013
1014
1015
1016
1017
1018