bonavero-duperon.tex (11863B)
1 \documentclass[a4paper,french,12pt]{article} 2 \usepackage{geometry} 3 \geometry{a4paper, top=2cm, bottom=2.0cm, left=2.4cm, right=2.47cm} 4 \usepackage[frenchb]{babel} 5 \usepackage[utf8]{inputenc} 6 \usepackage[T1]{fontenc} 7 \usepackage{amsmath} 8 \usepackage{amssymb} 9 \usepackage{enumerate} 10 \usepackage{centernot} 11 \usepackage{multirow} 12 \usepackage{graphicx} 13 \usepackage{tikz} 14 \usetikzlibrary{positioning,calc,chains} 15 \def\P{\mathcal{P}} 16 \def\GUi{G \cup \{i\}} 17 \def\nottransition#1{\stackrel{#1}{\centernot\longrightarrow}} 18 \def\transition#1{\stackrel{#1}{\longrightarrow}} 19 \def\Transition#1{\stackrel{#1}{\Longrightarrow}} 20 \def\forte{\sim} 21 \def\observationnelle{\approx} 22 \def\conf{\ \text{conf}\ } 23 \DeclareMathOperator{\Tr}{Tr} 24 \DeclareMathOperator{\Acc}{Acc} 25 \DeclareMathOperator{\Ref}{Ref} 26 \def\si{\quad\text{si}\quad} 27 \let\simule\gtrsim 28 \let\simuleobs\gtrapprox 29 \let\estsimulepar\gtrsim 30 \begin{document} 31 32 \section{Files d'attente et équivalences} 33 \subsection{$B2err\simule B1$} 34 35 $B2err$ simule $B1$ car~: 36 \begin{itemize} 37 \item $B2err \simule B1$~: 38 \begin{itemize} 39 \item $B1\transition{inp} outp;B1$, et il existe $B2err\transition{inp}outp;B2err$. 40 \item Il faut donc que $outp;B2err \simule outp;B1$. 41 \end{itemize} 42 \item $outp;B2err \simule outp;B1$~: 43 \begin{itemize} 44 \item $outp;B1\transition{outp}B1$, et il existe $outp;B2err\transition{outp}B2err$. 45 \item Il faut donc que $B2err \simule B1$, ce qui est notre premier point. 46 \end{itemize} 47 \end{itemize} 48 49 \subsection{$\neg\ B2err\conf B1$} 50 $B2err$ n'est pas conforme à $B1$ car $Ref(B2err, inp) = \{\{inp\}, \{outp\}\}$, alors que $Ref(B1,inp) = \{\{outp\}\}$, 51 et donc on n'a pas $Ref(B2err, inp) \subseteq Ref(B1, inp)$. 52 53 \subsection{$B2par$ respecte-t-il la spécification $B_20$ ?} 54 $B2par$ respecte la spécification $B_20$~: 55 \begin{enumerate}[i)] 56 \item Un message émis a toujours été reçu : pour qu'un message soit 57 émis par la porte $outp$ du $B1$ de droite, il faut qu'il ait été 58 reçu par la porte $mid$ du $B1$ de droite, synchronisé sur la porte 59 $mid$ du $B1$ de gauche. Pour que le message soit émis sur la porte 60 $mid$ du $B1$ de gauche, il faut qu'il ait au préalable été reçu sur 61 la porte $inp$ du $B1$ de gauche. 62 \item Lorsqu'un $B1$ reçoit un message, il refuse les $inp$ jusqu'à ce 63 qu'il ait effectué un $outp$. Comme la porte $outp$ du $B1$ de 64 gauche est synchronisée sur la porte $inp$ du $B1$ de droite, cela 65 signifie que si les deux $B1$ «contiennent» un message, celui de 66 droite n'accepera pas d'$inp$ tant qu'il n'aura pas effectué 67 d'$outp$, et en cascade, celui de gauche ne pourra pas faire 68 d'$outp$ tant que celui de droite n'aura pas été «vidé», et donc 69 celui de gauche refusera les $inp$. On ne pourra donc pas effectuer 70 un $inp$ sur le $B1$ de gauche tant que les deux $B1$ «contiendront» 71 un message, et il ne pourra donc pas y avoir plus de deux messages 72 dans la file. 73 \end{enumerate} 74 75 \subsection{$B2seq \observationnelle B2par$} 76 77 {\raggedright 78 $B2seq$ et $B2par$ sont observationnellement équivalents car~: 79 \begin{itemize} 80 \item $B2s \observationnelle B2par$~: 81 \begin{itemize} 82 \item $B2s\transition{inp} B21$, 83 et il existe $B2par \Transition{\hat{inp}} (i;B1[inp,i] \ |[i]|\ B1[i,outp])$ 84 et $B2par \Transition{\hat{inp}} (B1[inp,i] \ |[i]|\ outp;B1[i,outp])$. 85 \item Dans l'autre sens, 86 $B2par \transition{inp} (i;B1[inp,i] \ |[i]|\ B1[i,outp])$ 87 et il existe $B2s\transition{inp} B21$. 88 \item Il faut donc que $B21 \observationnelle (i;B1[inp,i] \ |[i]|\ B1[i,outp])$. 89 \end{itemize} 90 \item $B21 \observationnelle (i;B1[inp,i] \ |[i]|\ B1[i,outp])$~: 91 \begin{itemize} 92 \item $B21 \transition{inp} outp;B21$, 93 et il existe 94 $(i;B1[inp,i] \ |[i]|\ B1[i,outp]) \Transition{\hat{inp}} (i;B1[inp,i] \ |[i]|\ outp;B1[i,outp])$ 95 \item $B21 \transition{outp} B2s$, et 96 et il existe 97 $(i;B1[inp,i] \ |[i]|\ B1[i,outp]) \Transition{\hat{outp}} (B1[inp,i] \ |[i]|\ B1[i,outp])$, 98 autrement dit 99 $(i;B1[inp,i] \ |[i]|\ B1[i,outp]) \Transition{\hat{outp}} B2par$ 100 \item Dans l'autre sens, 101 $(i;B1[inp,i] \ |[i]|\ B1[i,outp]) \transition{i} (B1[inp,i] \ |[i]|\ outp;B1[i,outp])$, 102 mais comme on $\hat{i}$ est le chemin vide, on n'aura rien à vérifier sur $B21$. 103 \item Il faut donc que $outp;B21 \observationnelle (i;B1[inp,i] \ |[i]|\ outp;B1[i,outp])$, 104 et que $B2s \observationnelle B2par$. Cette deuxième condition est en fait notre premier point. 105 \end{itemize} 106 \item $outp;B21 \observationnelle (i;B1[inp,i] \ |[i]|\ outp;B1[i,outp])$~: 107 \begin{itemize} 108 \item $outp;B21 \transition{outp}B21$, 109 et il existe 110 $(i;B1[inp,i] \ |[i]|\ outp;B1[i,outp]) \Transition{\hat{outp}} (i;B1[inp,i] \ |[i]|\ B1[i,outp])$. 111 \item Il faut donc que $B21 \observationnelle (i;B1[inp,i] \ |[i]|\ B1[i,outp])$, ce qui est notre deuxième point. 112 \end{itemize} 113 \end{itemize} 114 } 115 116 \subsection{$B2ent = B2par$} 117 118 Étant donné que $B2ent$ et $B2par$ ne commencent pas par l'action 119 interne, tester leur égalité au sens de la congruence observationnelle 120 revient à tester s'ils sont observationnellement équivalents. 121 122 On applique donc la même méthode que dans la section précédente, avec 123 les équivalences suivantes~: 124 125 {\raggedright 126 \begin{itemize} 127 \item Pour que $B2ent = B2par$, il faut qu'après $inp$ (la seule 128 action que les systèmes peuvent exécuter dans leurs états respectifs), 129 $(outp;B1[inp;outp] ||| B1[inp;outp]) \observationnelle (i;B1[inp;i]\ |[i]|\ B1[i,outp])$. 130 \item Pour cela, il faut qu'après $outp$, 131 $(B1[inp;outp] ||| B1[inp;outp]) \observationnelle (B1[inp;i]\ |[i]|\ B1[i,outp])$, 132 autrement dit $B2ent = B2par$, ce qui est une condition plus faible que le premier point. 133 134 Il faut aussi qu'après $inp$, 135 $(outp;B1[inp;outp] ||| outp;B1[inp;outp]) \observationnelle (i;B1[inp;i]\ |[i]|\ outp;B1[i,outp])$. 136 137 Dans l'autre sens, on peut ignorer ce qui se passe après le $i$ de 138 $(i;B1[inp;i]\ |[i]|\ B1[i,outp])$, car $\hat{i}$ est le chemin vide, 139 donc pas de conditions sur $(outp;B1[inp;outp] ||| B1[inp;outp])$. 140 \item Occupons-nous de 141 $(outp;B1[inp;outp] ||| outp;B1[inp;outp]) \observationnelle (i;B1[inp;i]\ |[i]|\ outp;B1[i,outp])$. 142 Dans ces états, les systèmes ne peuvent faire qu'$outp$. Il faut donc qu'après $outp$, 143 $(outp;B1[inp;outp] ||| B1[inp;outp]) \observationnelle (i;B1[inp;i]\ |[i]|\ B1[i,outp])$, 144 ce qui correspond au deuxième point. 145 \end{itemize} 146 } 147 148 \subsection{$B2par \simuleobs B1$} 149 150 $B2par$ simule observationnellement $B1$ car~: 151 152 \begin{itemize} 153 \item $B1\transition{inp}outp;B1$, et il existe 154 $B2par\Transition{\hat{inp}}(i;B1[inp,i]\ |[i]| B1[i;outp])$ et 155 $B2par\Transition{\hat{inp}}(B1[inp,i]\ |[i]| outp;B1[i;outp])$. 156 Il suffit donc que soit $(i;B1[inp,i]\ |[i]| B1[i;outp]) \simuleobs outp;B1$, 157 soit $(B1[inp,i]\ |[i]| outp;B1[i;outp]) \simuleobs outp;B1$. On prend 158 \item On prend cette deuxième possibilité. 159 $outp;B1 \transition{outp} B1$, et il existe 160 $(B1[inp,i]\ |[i]| outp;B1[i;outp])\Transition{\hat{outp}}(B1[inp,i]\ |[i]| B1[i;outp])$, 161 autrement dit 162 $(B1[inp,i]\ |[i]| outp;B1[i;outp])\Transition{\hat{outp}}B2par$, notre premier point. 163 \end{itemize} 164 165 \subsection{$\not B2par \conf B1$} 166 167 Pour que $B2par$ soit conforme à $B1$, car pour toute trace $t$ de $B1$, 168 $\Acc(B2par) \subset\subset \Ref(B1)$. 169 170 \begin{itemize} 171 \item Pour la trace $\emptyset$, $\Acc(B2par) = \Acc(B1) = \{\{inp\}\}$. 172 \item Pour la trace $inp$, $\Acc(B2par) = \{\{\}, \{inp,outp\}\}$, mais $\Acc(B1) = \{\{outp\}\}$. 173 \item Pour la trace $inp;outp$, on est revenu aux mêmes états que la trace $\emptyset$. 174 \end{itemize} 175 Pour le point 2 $\forall X \in \{\{\}, \{inp,outp\}\},\quad \{outp\} \not\subseteq X$, et donc $\neg(B2par \conf B1)$ 176 177 \section{Exercice de l'atelier} 178 179 \subsection{Question 1} 180 181 \begin{figure}[h] 182 \centering 183 \includegraphics[width=15cm]{question1} 184 \end{figure} 185 186 \subsection{Question 2} 187 188 \begin{verbatim} 189 Maillet[prendM,poseM] := prendM;MailletOcc[prendM,poseM] 190 MailletOcc[prendM,poseM] := poseM;Maillet[prendM,poseM] 191 \end{verbatim} 192 193 \subsection{Question 3} 194 195 \begin{verbatim} 196 UtiliseMarteau[ent,sortie,prend,pose,prendM,poseM](travail:TRAVAIL) := 197 prend;sortie!fait(travail);pose; 198 Ouvrier[ent,sortie,prend,pose,prendM,poseM] 199 \end{verbatim} 200 201 \begin{verbatim} 202 UtiliseMaillet[ent,sortie,prend,pose,prendM,poseM](travail:TRAVAIL) := 203 prendM;sortie!fait(travail);poseM; 204 Ouvrier[ent,sortie,prend,pose,prendM,poseM] 205 \end{verbatim} 206 207 \begin{verbatim} 208 Commence[ent,sortie,prend,pose,prendM,poseM](travail:TRAVAIL) := 209 [facile(travail)] -> 210 sortie!fait(travail); 211 Ouvrier[ent,sortie,prend,pose,prendM,poseM] 212 [] 213 [difficile(travail)] -> 214 UtiliseMarteau[ent,sortie,prend,pose,prendM,poseM](travail) 215 [] 216 [(not(facile(travail)) and not(difficile(travail)))] -> 217 UtiliseOutil[ent,sortie,prend,pose,prendM,poseM](travail) 218 \end{verbatim} 219 220 \begin{verbatim} 221 Ouvrier[ent,sortie,prend,pose,prendM,poseM] := 222 ent?travail:TRAVAIL; 223 Commence[ent,sortie,prend,pose,prendM,poseM](travail) 224 \end{verbatim} 225 226 \begin{verbatim} 227 Atelier[ent,sortie] := 228 hide prend,pose,prendM,poseM in 229 ( 230 ( 231 Marteau[prend,pose] 232 ||| 233 Maillet[prendM,poseM] 234 ) 235 |[prend,pose,prendM,poseM]| 236 ( 237 Ouvrier[ent,sortie,prend,pose,prendM,poseM] 238 ||| 239 Ouvrier[ent,sortie,prend,pose,prendM,poseM] 240 ) 241 ) 242 \end{verbatim} 243 244 \subsection{Question 4} 245 246 Nécessite l'outil \verb!casear!. 247 248 \subsection{Question 5} 249 250 \begin{verbatim} 251 AtelierV[ent,sortie] := 252 hide e,s in 253 Verificateur[ent,sortie,e,s] 254 |[e,s]| 255 Atelier[e,s] 256 \end{verbatim} 257 258 La composition parallèle générale synchronisant les ouvriers et le 259 vérificateur est la synchronisation sur l'ensemble de portes 260 $\{ent,sortie\}$ de l'atelier sans vérificateur. 261 262 On place le vérificateur «entre» les ouvriers et l'environnement~: Si 263 un travail est mal fait, le vérificateur le défait et le repasse à 264 l'entrée des ouvriers, sinon, il l'envoie vers la sortie de 265 l'environnement. À tout moment, il peut récupérer du travail depuis 266 l'environnement, et le passer aux ouvriers. Nous avons choisi de ne 267 pas limiter le nombre de fois que le vérificateur peut laisser les 268 ouvriers obtenir du travail depuis l'environnement, puisque nous ne 269 savons pas combien de travaux peuvent être sur les tapis roulants 270 $ent$ et $sortie$ sans que le vérificateur y ait encore eu accès. 271 272 \begin{verbatim} 273 Verificateur[ent,sortie,e,s] := 274 ( 275 s?produit:PRODUIT; 276 [not(correct(produit))] -> 277 e!defait(produit);Verificateur[ent,sortie,e,s] 278 [] 279 [correct(produit)] -> 280 sortie!produit;Verificateur[ent,sortie,e,s] 281 ) 282 [] 283 ( 284 ent?travail:TRAVAIL; 285 e!travail; 286 Verificateur[ent,sortie,e,s] 287 ) 288 \end{verbatim} 289 290 \subsection{Question 6} 291 292 $Assemble$ n'est pas observationnellement équivalent à $Atelier$, car 293 après avoir exécuté l'action $ent$, $Atelier$ peut encore exécuter 294 $ent$ (puisqu'il y a deux ouvriers, qui peuvent accepter deux 295 travaux), tandis que $Assemble$ ne pourra exécuter que $sortie$. 296 297 {\raggedright 298 \begin{itemize} 299 \item $Atelier[\dots] \transition{ent} (\dots) \ |[\dots]|\ (Commence[\dots] ||| Ouvrier[\dots])$, 300 et il existe 301 $Assemble[\dots] \transition{ent} Assembler[\dots]$. Il faudrait que 302 $(\dots) \ |[\dots]|\ (Commence[\dots] ||| Ouvrier[\dots]) \observationnelle Assembler[\dots]$. 303 \item Mais 304 $(\dots) \ |[\dots]|\ (Commence[\dots] ||| Ouvrier[\dots]) \not\observationnelle Assembler[\dots]$ 305 car $(\dots) \ |[\dots]|\ (Commence[\dots] ||| Ouvrier[\dots]) \transition{ent} (\dots) \ |[\dots]|\ (Commence[\dots] ||| Commence[\dots])$ 306 tandis que $Assembler[\dots] \nottransition{ent}$. 307 \end{itemize} 308 } 309 \subsection{Question 7} 310 311 Nécessite l'outil \verb!aldebaran!. 312 313 \end{document}