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 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
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 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}$).
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.
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:
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.
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
90 Parmi tous les process, \verb+init+ est le process initial qui permet
91 d'initialiser les variables, lancer d'autres processes\ldots
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.
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 verifier 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 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]+.
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-periodique.
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 itérativement 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'é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+.
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:
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}).
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 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.
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 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}
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):
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+
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}$:
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).
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
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é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.
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:
446 \diamond (\Box \verb+Xp+ = \verb+X+)
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.
458 \section{Proof of Translation Correctness}\label{sec:spin:proof}
459 \JFC{Déplacer les preuves en annexes}
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.
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$.
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
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$.
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
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
505 $Y^k_{ij}$ is the value of the channel \verb+channels[i].sent[j]+
508 $a^k_{ij}$ is the date (previous to $t$) when $Y^k_{ij}$ has been added and
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$.
513 $M_{ij}^t$ has the following signature:
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}).
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]+.
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$.
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} =
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}$.
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:
562 \noindent If the domain of $M_{ij}^t$ is not empty, then
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} \}
574 \noindent Secondly we have:
576 \forall t'\, .\, 1 \le t' \le t \Rightarrow Xd^{t'}_{ji} = X^{D^{t'-1}_{ji}}_i
577 \label{eq:correct_retrieve}
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.
585 The proof is done by induction on the number of iterations.
587 \paragraph{Initial case:}
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}},
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
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.
609 \paragraph{Inductive case:}
611 Suppose now that lemma~\ref{lemma:execution} is established until iteration $l$.
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} \}$.
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} \}$.
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}$:
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
640 \forall t,k \, .\, D_{ji}^c < t < l \land k \geq t \Rightarrow D_{ji}^k \neq
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.
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
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.
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
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}} =
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}).
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.
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$.
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
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.
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 ?}
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}).
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.
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.
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.
748 % i.e. iterations that are divergent. Executions are
749 % performed under weak fairness property; we then detail what are continuously
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}$.
757 % The simulated DDN does not stabilize and its iterations are divergent.
762 \section{Practical Issues}
763 \label{sec:spin:practical}
764 This section first gives some notes about complexity and later presents
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)}$.
774 A configuration is a valuation of global variables. Their number only depends
775 on those that are not constant.
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$,
789 The method detailed along the line of this article has been applied on the
790 running example to formally prove its universally convergence.
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.
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:
801 [] <> (l == l0) \Rightarrow
802 (([] <> (l== l1)) \land \ldots \land ([] <> (l == lk)))
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.
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
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
826 All the experimentation have been realized in a classic desktop computer.
833 %However preliminary experiments have shown the interest of the approach.
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.
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.
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.
860 % \begin{tabular}{|*{13}{c|}}
862 % \multicolumn{1}{c|}{ }
863 % &\multicolumn{6}{|c|}{Mixed Mode} & \multicolumn{6}{|c|}{Only Bounded} \\
865 % \multicolumn{1}{c|}{ }
866 % &\multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Pseudo-Periodic} &
867 % \multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Pseudo-Periodic} \\
869 % \multicolumn{1}{c|}{ }
874 % \hline %cline{2-13}
876 % $\top$ & 409 & 1m11s&
877 % $\bot$ & 370 & 0.54 &
878 % $\bot$ & 374 & 7.7s&
879 % $\bot$ & 370 & 0.51s \\
880 % \hline %\cline{2-13}
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}
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}
895 % \caption{Experimentations with Asynchronous Iterations}\label{fig:async:exp}
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)$.
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.
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.
924 % \begin{tabular}{|*{7}{c|}}
926 % \multicolumn{1}{c|}{ }
927 % &\multicolumn{3}{|c|}{Parallel} & \multicolumn{3}{|c|}{Pseudo-Periodic} \\
929 % \multicolumn{1}{c|}{ }&
932 % \hline %\cline{2-7}
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
941 % \cite{BM99} example &
942 % $\top$ & 36.7 & 12s & % BM99_sync_para.spin
943 % $\top$ & & \\ % BM99_sync_chao.spin
948 % \caption{Experimentations with Synchronous Iterations}\label{fig:sync:exp}
956 % \begin{tabular}{|*{}{c|}}
961 % & \multicolumn{6}{|c|}{Synchronous} & \multicolumn{12}{|c|}{Asynchronous}\\
963 % Delay & \multicolumn{6}{|c|}{ }
964 % & \multicolumn{6}{|c|}
966 % & \multicolumn{6}{|c|}
967 % {Bounded+Mixed Mode}\\
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} \\
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.
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.
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.
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}.