spell check + des ajouts en vrac

This commit is contained in:
amaury
2023-05-12 14:56:24 +02:00
parent a44d8f8ebb
commit 5b2ad4ab99
12 changed files with 529 additions and 117 deletions

2
docs/.gitignore vendored
View File

@ -19,7 +19,7 @@
# these rules might exclude image files for figures etc.
# *.ps
# *.eps
# *.pdf
*.pdf
## Generated if empty string is given at "Please type another file name for output:"
.pdf

View File

@ -0,0 +1,33 @@
\begin{frame}
\frametitle{Les Types de données abstraits}
Pour communiquer entre eux, les processus doivent utiliser des objets partagés. \\
Pour spécifier la notion d'objets partagés nous allons d'abord cerner la notion de type de donnée abstrait :
\begin{block}{Définition}
Un type de donnée abstrait peut être défini par un automate tel que : $T = (A, B, Z, \zeta_0, \tau, \delta)$ \\
Tel que :
\begin{itemize}
\item A est un ensemble dénombrable (alphabet d'entrée)
\item B est un ensemble dénombrable (alphabet de sortie)
\item Z est un ensemble dénombrable d'états abstraits
\item $\zeta_0 \in Z$ est l'état initial
\item $\tau$ est la fonction de transition ($Z \times A \rightarrow Z$)
\item $\delta$ est la fonction de sortie ($Z \times A \rightarrow B$)
\end{itemize}
\end{block}
\end{frame}
\begin{frame}
\frametitle{Les flux fenêtrés (Work in Progress)}
\end{frame}
\begin{frame}
\frametitle{Les ensembles (Work in Progress)}
\end{frame}

View File

@ -0,0 +1,7 @@
\input{définition/intro.tex}
\subsection{Objets partagés}
\include{définition/adt}
\subsection{Définition du modèle}
% \include{définition/modele}

View File

@ -0,0 +1,50 @@
\begin{frame}
\frametitle{Problématique (Work in Progress)}
\begin{block}{Système distribué}
Ce dit d'un système informatique dont les nœuds sont indépendant et reliés par un réseau informatique. Travaillant sur une tâche commune.
\end{block}
\begin{columns}
\column{0.4\textwidth}
\begin{block}{Avantages}
\begin{itemize}
\item une répartition de la charge de travail entre plusieurs acteurs
\item une meilleure tolérance aux pannes
\end{itemize}
\end{block}
\column{0.4\textwidth}
\begin{block}{Inconvénients}
\begin{itemize}
\item Introduit une notion de concurrence dans les tâches.
\item Il faut définir ce qu'on considère acceptable.
\end{itemize}
\end{block}
\end{columns}
\end{frame}
\begin{frame}
\frametitle{Problématique (Work in Progress)}
\begin{columns}
\column{0.6\textwidth}
\resizebox{\columnwidth}{!}{
\includegraphics{images/carte_criteres.png}
}
\column{0.4\textwidth}
\begin{block}{Les classes de cohérences}
\begin{itemize}
\item Introduites par PERRIN
\item Objectifs :
\begin{itemize}
\item Classer les histoires créées par un algorithme.
\item Créer une relation de dépendance entre les classes.
\end{itemize}
\end{itemize}
\end{block}
\end{columns}
\end{frame}

View File

@ -0,0 +1,291 @@
\begin{frame}
\frametitle{Modèle}
\begin{columns}
\column{0.4\textwidth}
\resizebox{\columnwidth}{!}{
\begin{tikzpicture}[
roundnode/.style={circle, draw=black, fill=black, very thick, minimum size=1pt,},
arrow/.style={|->, thick,},
]
\node[roundnode] (p0) {};
\node[left] at (p0.west) {$p_0$};
\node[roundnode] (p1) [below=of p0] {};
\node[left] at (p1.west) {$p_1$};
\node[roundnode] (p2) [right=of p1] {};
\node[right] at (p2.east) {$p_2$};
\node[roundnode] (p3) [right=of p0] {};
\node[right] at (p3.east) {$p_3$};
\draw (p0) -- (p1);
\draw (p0) -- (p2);
\draw (p0) -- (p3);
\draw (p1) -- (p2);
\draw (p1) -- (p3);
\draw (p2) -- (p3);
\end{tikzpicture}
}
\column{0.6\textwidth}
\begin{block}{Prérequis}
\begin{itemize}
\item Tous les nœuds du système sont fortement connectés
\item Le système n'est pas partitionnable
\item Les nœuds sont asynchrones
\item Les nœuds ne peuvent pas être défaillants
\item Les nœuds ne peuvent pas être malicieux
\end{itemize}
\end{block}
\end{columns}
\end{frame}
\begin{frame}
\frametitle{Modèle}
\begin{columns}
\column{0.4\textwidth}
\centering
\resizebox{0.75\columnwidth}{!}{
\begin{tikzpicture}[
roundnode/.style={circle, draw=black, fill=black, very thick, minimum size=1pt,},
]
\node[roundnode] (p0) {};
\node[left] at (p0.west) {$p_0$};
\onslide<3> {
\node[above] at (p0.north) {$\textcolor{red}{w(1)}$};
}
\onslide<7> {
\node[above] at (p0.north) {$\textcolor{red}{r/(1,2)^w}$};
}
\node[roundnode] (p1) [below=of p0] {};
\node[left] at (p1.west) {$p_1$};
\onslide<2> {
\node[below] at (p1.south) {$\textcolor{red}{r/(0,0)}$};
}
\onslide<5> {
\node[below] at (p1.south) {$\textcolor{red}{w(2)}$};
}
\onslide<6> {
\node[below] at (p1.south) {$\textcolor{red}{r/(1,2)}$};
}
\onslide<7> {
\node[below] at (p1.south) {$\textcolor{red}{r/(1,2)^w}$};
}
\node[roundnode] (p2) [right=of p1] {};
\node[right] at (p2.east) {$p_2$};
\onslide<4> {
\node[below] at (p2.south) {$\textcolor{red}{r/(0,1)}$};
}
\onslide<6> {
\node[below] at (p2.south) {$\textcolor{red}{r/(1,2)}$};
}
\onslide<7> {
\node[below] at (p2.south) {$\textcolor{red}{r/(1,2)^w}$};
}
\node[roundnode] (p3) [right=of p0] {};
\node[right] at (p3.east) {$p_3$};
\onslide<4> {
\node[above] at (p3.north) {$\textcolor{red}{r/(0,1)}$};
}
\onslide<5> {
\node[above] at (p3.north) {$\textcolor{red}{w(1)}$};
}
\onslide<6> {
\node[above] at (p3.north) {$\textcolor{red}{r/(1,1)}$};
}
\onslide<7> {
\node[above] at (p3.north) {$\textcolor{red}{r/(1,2)^w}$};
}
\draw (p0) -- (p1);
\draw (p0) -- (p2);
\draw (p0) -- (p3);
\draw (p1) -- (p2);
\draw (p1) -- (p3);
\draw (p2) -- (p3);
\end{tikzpicture}
}
\column{\textheight}
\begin{tabular}{l}
$p_0 = \onslide<3->{w(1)} \onslide<7->{\bullet r/(1,2)^w}$ \\
$p_1 = \onslide<2->{r/(0,0)} \onslide<5->{\bullet w(2)} \onslide<6->{\bullet r/(1,2)} \onslide<7->{\bullet r/(1,2)^w}$ \\
$p_2 = \onslide<4->{r/(0,1)} \onslide<6->{\bullet r/(1,2)} \onslide<7->{\bullet r/(1,2)^w}$ \\
$p_3 = \onslide<4->{r/(0,1)} \onslide<5->{\bullet w(1)} \onslide<6->{\bullet r/(1,1)} \onslide<7->{\bullet r/(1,2)^w}$ \\
\end{tabular}
\end{columns}
\centering
\resizebox{!}{\height}{
\begin{tikzpicture}[
roundnode/.style={circle, draw=black, fill=black, very thick, minimum size=1pt,},
ignorednode/.style={circle, draw=black!20, fill=black!20, very thick, minimum size=1pt,},
invisiblenode/.style={circle, draw=white, fill=white, very thick, minimum size=1pt,},
arrow/.style={|->, thick,},
message/.style={->, blue!50, dashed, -{Circle[length=4pt,]}},
]
\node[roundnode] (p00) {};
\node[left] at (p00.west) {$p_0$};
\node[above] at (p00.north) {$\{0\}$};
\node[roundnode] (p10) [below=20pt of p00] {};
\node[left] at (p10.west) {$p_1$};
\node[above] at (p10.north) {$\{0\}$};
\node[roundnode] (p20) [below=20pt of p10] {};
\node[left] at (p20.west) {$p_2$};
\node[above] at (p20.north) {$\{0\}$};
\node[roundnode] (p30) [below=20pt of p20] {};
\node[left] at (p30.west) {$p_3$};
\node[above] at (p30.north) {$\{0\}$};
\pause
\node[roundnode] (p01) [right=of p00] {};
\node[above] at (p01.north) {$\{1\}$};
\draw[arrow] (p00) -- node[above] {tata} (p01);
% \onslide<3->{
% \node[roundnode] (11) {};
% \node[left] at (11.west) {$p_0$};
% \node[above] at (11.north) {$w(1)$};
% }
% \onslide<7-> {
% \node[roundnode] (12) [right=of 11] {};
% \node[above] at (12.north) {$r/(1,2)^w$};
% \draw[arrow] (11) -- (12);
% }
% \onslide<2-> {
% \node[roundnode] (21) [below=20pt of 11] {};
% \node[left] at (21.west) {$p_1$};
% \node[above] at (21.north) {$r/(0,0)$};
% }
% \onslide<5-> {
% \node[roundnode] (22) [right=of 21] {};
% \node[above] at (22.north) {$w(2)$};
% \draw[arrow] (21) -- (22);
% }
% \onslide<6-> {
% \node[roundnode] (23) [right=of 22] {};
% \node[above] at (23.north) {$r/(1,2)$};
% \draw[arrow] (21) -- (23);
% }
% \onslide<7-> {
% \node[roundnode] (24) [right=of 23] {};
% \node[above] at (24.north) {$r/(1,2)^w$};
% \draw[arrow] (21) -- (24);
% }
% \onslide<4-> {
% \node[roundnode] (31) [below=20pt of 21] {};
% \node[left] at (31.west) {$p_2$};
% \node[above] at (31.north) {$r/(0,1)$};
% }
% \onslide<6-> {
% \node[roundnode] (32) [right=of 31] {};
% \node[above] at (32.north) {$r/(1,2)$};
% \draw[arrow] (31) -- (32);
% }
% \onslide<7-> {
% \node[roundnode] (33) [right=of 32] {};
% \node[above] at (33.north) {$r/(1,2)^w$};
% \draw[arrow] (31) -- (33);
% }
% \onslide<4-> {
% \node[roundnode] (41) [below=20pt of 31] {};
% \node[left] at (41.west) {$p_3$};
% \node[above] at (41.north) {$r/(0,1)$};
% }
% \onslide<5-> {
% \node[roundnode] (42) [right=of 41] {};
% \node[above] at (42.north) {$w(1)$};
% \draw[arrow] (41) -- (42);
% }
% \onslide<6-> {
% \node[roundnode] (43) [right=of 42] {};
% \node[above] at (43.north) {$r/(1,1)$};
% \draw[arrow] (41) -- (43);
% }
% \onslide<7-> {
% \node[roundnode] (44) [right=of 43] {};
% \node[above] at (44.north) {$r/(1,2)^w$};
% \draw[arrow] (41) -- (44);
% }
\end{tikzpicture}
}
\end{frame}
\begin{frame}
\frametitle{Modèle}
\resizebox{\columnwidth}{!}{
\begin{tikzpicture}[
roundnode/.style={circle, draw=black, fill=black, very thick, minimum size=1pt,},
ignorednode/.style={circle, draw=black!20, fill=black!20, very thick, minimum size=1pt,},
arrow/.style={|->, thick,},
message/.style={->, blue!50, dashed, -{Circle[length=4pt,]}},
]
\node[roundnode] (11) {};
\node[left] at (11.west) {$p_0$};
\node[above] at (11.north) {$w(1)$};
\node[roundnode] (12) [right=of 11] {};
\node[above] at (12.north) {$I(a)$};
\node[roundnode] (13) [right=of 12] {};
\node[above] at (13.north) {$r/(0,1)$};
\node[roundnode] (14) [right=of 13] {};
\node[above] at (14.north) {$r/(1,2)^w$};
\draw[arrow] (11) -- (12);
\draw[arrow] (12) -- (13);
\draw[arrow] (13) -- (14);
\node[roundnode] (21) [below=of 11] {};
\node[left] at (21.west) {$p_1$};
\node[below] at (21.south) {$w(2)$};
\node[roundnode] (22) [right=of 21] {};
\node[below] at (22.south) {$R/\emptyset$};
\node[roundnode] (23) [right=of 22] {};
\node[below] at (23.south) {$r/(0,2)$};
\node[roundnode] (24) [right=of 23] {};
\node[below] at (24.south) {$r/(1,2)^w$};
\draw[arrow] (21) -- (22);
\draw[arrow] (22) -- (23);
\draw[arrow] (23) -- (24);
\end{tikzpicture}
}
\end{frame}

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

View File

@ -28,9 +28,9 @@
\usetikzlibrary{calc}
\usetikzlibrary{arrows.meta}
\title[bwconsistency]{Consistence faible byzantine appliquée au cloud}
\subtitle{Présentation intermédiaire: Consistence faible}
\author[JOLY Amaury]{JOLY Amaury\\ \textbf{Encadrants :} G, LABOUREL Arnaud }
\title[bwconsistency]{Cohérence faible byzantine appliquée au cloud}
\subtitle{Présentation intermédiaire : Cohérence faible}
\author[JOLY Amaury]{JOLY Amaury\\ \textbf{Encadrants :} GODARD Emmanuel, TRAVERS Corentin }
% \\[2ex] \includegraphics[scale=0.1]{./img/amu.png}
\institute[LIS, Scille]{LIS-LAB, Scille}
\date{\today}
@ -43,10 +43,10 @@
\tableofcontents
\end{frame}
% \section{Introduction}
% \input{introduction/index.tex}
\section{Introduction}
\input{définition/index.tex}
\section{Les propriétés de la Consistence faibes}
\section{Les propriétés de la Cohérence Faible}
\input{wconsistence_properties/index.tex}
\end{document}

View File

@ -1,27 +1,27 @@
# Script présentation Consistence Faible
# Script présentation Cohérence Faible
## Plan
1. Présenter un processus séquentiel classique
- exemple: processeur mono coeur
- exemple : processeur monour
2. Introduire le concept de cohérence via la cohérence forte (le plus intuitif)
- exemple: processeur multi coeur, application distribuée centralisé
- notions: respect de l'ordre, atomicité, isolation
- exemple : processeur multiur, application distribuée centralisée.
- notions : respect de l'ordre, atomicité, isolation
3. Introduire le concept de cohérence faible
- exemple: application distribuée décentralisé
- exemple : application distribuée décentralisée
4. Définir les propriétés d'un système réparti
5. Definir les differents modèles de cohérence faible (des plus trivial aux moins)
5. Définir les différents modèles de cohérence faible (des plus trivial aux moins)
1. Cohérence Séquentielle (SC)
2. Linéarisibilité -> Serialisabilité
2. Linéarisabilité -> Serialisabilité
3. Convergence/Convergence Forte
1. Définit le concepts de convergence
1. Définit le concept de convergence
2. Pourquoi ? + les apports de la convergence forte
3. Types de données basés sur la convergence (poruquoi ?)
3. Types de données basés sur la convergence (pourquoi ?)
4. Cohérence Pipeline
1. On présente la notion d'Intention
2. On l'oppose à la cohérence Pipeline
6. Cohérence d'écriure
1. Ce que ne couvre pas les modèles précedents
2. Cohérence d'écriture et cohérence d'écriure forte.
6. Cohérence d'écriture
1. Ce que ne couvre pas les modèles précédents
2. Cohérence d'écriture et cohérence d'écriture forte.

View File

@ -1,13 +1,19 @@
\begin{frame}
\frametitle{Linéarisation}
% \begin{itemize}
% \end{itemize}
\begin{block}{Définition}
Un ensemble d'événement est dit linéarisable s'il existe une séquence d'événement qui respecte les 3 propriétés suivantes :
\begin{itemize}
\item \textbf{Sûreté}
\item \textbf{Régularité}
\item \textbf{Atomicité}
\end{itemize}
\end{block}
\end{frame}
\begin{frame}
\frametitle{Sureté}
\frametitle{Sûreté}
\begin{block}{Définition}
Toute lécture réalisé dans un même environement non-concurrent est identique.
Toute lecture réalisée dans un même environnement non-concurrent est identique.
\end{block}
\begin{figure}
\include{wconsistence_properties/linearisation_surete_hc}
@ -17,9 +23,9 @@
\begin{frame}
\frametitle{Régularité}
\begin{block}{Définition}
Une lécture concurrente à une écriture peut lire soit la valeur avant l'écriture, soit la valeur après l'écriture.
Une lecture concurrente à une écriture peut lire soit la valeur avant l'écriture, soit la valeur après l'écriture.
\end{block}
\begin{figure}
\begin{figure}
\include{wconsistence_properties/linearisation_regularite_hc}
\end{figure}
\end{frame}
@ -27,25 +33,50 @@
\begin{frame}
\frametitle{Atomicité}
\begin{block}{Définition}
Une lécture concurrente à une écriture peut lire soit la valeur avant l'écriture, soit la valeur après l'écriture.
Si deux lectures ne sont pas concurrente la deuxième doit retourner une valeur au moins aussi récente que la première.
\end{block}
\begin{figure}
\begin{figure}
\include{wconsistence_properties/linearisation_atomicite_hc}
\end{figure}
\end{frame}
\begin{frame}
\frametitle{Convergence (EC)}
\frametitle{Les classes de cohérence}
\begin{columns}
\column{0.5\textwidth}
\resizebox{\columnwidth}{!}{
\includegraphics{images/carte_criteres.png}
}
\column{0.5\textwidth}
Une approche pour définir la cohérence d'un algorithme est de placer l'histoire concurrente qu'il produit dans une classe de cohérence. \\
Nous pouvons définir 3 classes de cohérence : %citer Perrin
\begin{itemize}
\item La \textbf{Localité d'état} (LS)
\item La \textbf{Validité} (V)
\item La \textbf{Convergence} (EC)
\end{itemize}
\end{columns}
\end{frame}
\begin{frame}
\frametitle{Localité d'état (LS)}
\begin{columns}
\column{0.4\textwidth}
\include{wconsistence_properties/convergence_hc}%
\column{0.5\textwidth}
Il existe un ensemble cofini d'évenements dont chacun peut être justifier par la même linéarisation. \\
\include{wconsistence_properties/localiteetat_hc}
\column{0.6\textwidth}
\begin{block}{Définition}
Pour tout processus $p$, il existe une linéarisation contenant toutes les lectures pures de $p$. \\
\end{block}
\begin{math}
\begin{array}{ll}
e.g.: & E' = \{r/(1,2)^w, r/(1,2)^w\} \\
& w(1) \bullet w(2) \bullet \textcolor{red}{r/(1,2)^w} \\
e.g.: & \textcolor{blue}{C_{p_1} = \{r/(0,0), r/(0,2)^w, w(2)\}}, \\
& \textcolor{red}{C_{p_2} = \{r/(0,0), r/(0,1)^w, w(1)\}}, \\
& \textcolor{blue}{r/(0,0) \bullet w(2) \bullet r/(0,2)^w} \\
& \textcolor{red}{r/(0,0) \bullet w(1) \bullet r/(0,1)^w} \\
\end{array}
\end{math}
\end{columns}
@ -53,15 +84,15 @@
\begin{flushright}
\begin{math}
EC = \left\{
LS = \left\{
\begin{array}{l}
\mathcal{T} \rightarrow \mathcal{P}(\mathcal{H}) \\
T \rightarrow \left\{
\begin{array}{lll}
H \in \mathcal{H}: & \multicolumn{2}{l}{|U_{T,H}| = \infty} \\
& \lor & \exists E' \subset E_H, |E_H \setminus E'| < \infty \\
& & \land \displaystyle\bigcap_{e \in E'} \delta_T^{-1}(\lambda(e)) \neq \emptyset \\
\end{array}
\begin{tabular}{lll}
$H \in \mathcal{H}:$ & \multicolumn{2}{l}{$\forall p \in \mathcal{P}_H, \exists C_p \subset E_H,$} \\
& & $\hat{Q}_{T,H} \subset C_p$ \\
& $\land$ & $lin(H[p \cap C_p / C_p]) \cap L(T) \neq \emptyset$ \\
\end{tabular}
\right. \\
\end{array}
\right.
@ -77,7 +108,9 @@
\column{0.4\textwidth}
\include{wconsistence_properties/validite_hc}
\column{0.6\textwidth}
Il existe, un ensemble cofini d'évenement tels que pour chacun d'entre eux une linéarisations de toutes les opérations d'écriture les justifient. \\
\begin{block}{Définition}
Il existe, un ensemble cofini d'événement tel que pour chacun d'entre eux une linéarisation de toutes les opérations d'écriture les justifient. \\
\end{block}
\begin{math}
\begin{array}{ll}
e.g.: & E' = \{r/(2,1)^w, r/(1,2)^w\} \\
@ -106,20 +139,21 @@
\end{flushright}
\end{frame}
\begin{frame}
\frametitle{Localité d'état (LS)}
\frametitle{Convergence (EC)}
\begin{columns}
\column{0.4\textwidth}
\include{wconsistence_properties/localiteetat_hc}
\column{0.6\textwidth}
Pour tout processus $p$, il existe une linéarisation contenant toutes les lectures pures de $p$ rendant l'histoire cohérente. \\
\include{wconsistence_properties/convergence_hc}%
\column{0.5\textwidth}
\begin{block}{Définition}
Il existe un ensemble cofini d'événements dont chacun peut être justifié par une seule linéarisation. \\
\end{block}
\begin{math}
\begin{array}{ll}
e.g.: & \textcolor{blue}{C_{p_1} = \{r/(0,0), r/(0,2)^w, w(2)\}}, \\
& \textcolor{red}{C_{p_2} = \{r/(0,0), r/(0,1)^w, w(1)\}}, \\
& \textcolor{blue}{r/(0,0) \bullet w(2) \bullet r/(0,2)^w} \\
& \textcolor{red}{r/(0,0) \bullet w(1) \bullet r/(0,1)^w} \\
e.g.: & E' = \{r/(1,2)^w, r/(1,2)^w\} \\
& w(1) \bullet w(2) \bullet \textcolor{red}{r/(1,2)^w} \\
\end{array}
\end{math}
\end{columns}
@ -127,18 +161,18 @@
\begin{flushright}
\begin{math}
LS = \left\{
EC = \left\{
\begin{array}{l}
\mathcal{T} \rightarrow \mathcal{P}(\mathcal{H}) \\
T \rightarrow \left\{
\begin{tabular}{lll}
$H \in \mathcal{H}:$ & \multicolumn{2}{l}{$\forall p \in \mathcal{P}_H, \exists C_p \subset E_H,$} \\
& & $\hat{Q}_{T,H} \subset C_p$ \\
& $\land$ & $lin(H[p \cap C_p / C_p]) \cap L(T) \neq \emptyset$ \\
\end{tabular}
\begin{array}{lll}
H \in \mathcal{H}: & \multicolumn{2}{l}{|U_{T,H}| = \infty} \\
& \lor & \exists E' \subset E_H, |E_H \setminus E'| < \infty \\
& & \land \displaystyle\bigcap_{e \in E'} \delta_T^{-1}(\lambda(e)) \neq \emptyset \\
\end{array}
\right. \\
\end{array}
\right.
\end{math}
\end{flushright}
\end{frame}
\end{frame}

View File

@ -6,29 +6,26 @@
message/.style={->, blue!50, dashed, -{Circle[length=4pt,]}},
]
\node[roundnode, draw=red, fill=red] (11) {};
\node[roundnode] (11) {};
\node[left] at (11.west) {$p_0$};
\node[above] at (11.north) {$w(1)$};
\node[roundnode, draw=blue, fill=blue] (12) [right=of 11] {};
\node[above] at (12.north) {$r/(0,0)$};
\node[roundnode, draw=blue, fill=blue] (13) [right=of 12] {};
\node[above] at (13.north) {$r/(0,2)^w$};
\node[roundnode] (12) [right=of 11] {};
\node[above] at (12.north) {$r/(0,1)$};
\node[roundnode] (13) [right=of 12] {};
\node[above] at (13.north) {$r/(2,1)^w$};
\draw[arrow] (11) -- (12);
\draw[arrow] (12) -- (13);
\node[roundnode, draw=blue, fill=blue] (21) [below=of 11] {};
\node[roundnode] (21) [below=of 11] {};
\node[left] at (21.west) {$p_1$};
\node[below] at (21.south) {$w(2)$};
\node[roundnode, draw=red, fill=red] (22) [right=of 21] {};
\node[below] at (22.south) {$r/(0,0)$};
\node[roundnode, draw=red, fill=red] (23) [right=of 22] {};
\node[below] at (23.south) {$r/(0,1)^w$};
\node[roundnode] (22) [right=of 21] {};
\node[below] at (22.south) {$r/(0,2)$};
\node[roundnode] (23) [right=of 22] {};
\node[below] at (23.south) {$r/(1,2)^w$};
\draw[arrow] (21) -- (22);
\draw[arrow] (22) -- (23);
\draw[message] (11) -- ($(22)!0.5!(23)$);
\draw[message] (21) -- ($(12)!0.5!(13)$);
\end{tikzpicture}
}