\documentclass[a4paper,french,12pt]{article}
\usepackage{geometry}
\geometry{a4paper, top=2cm, bottom=2.0cm, left=2.4cm, right=2.47cm}
\usepackage[frenchb]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{enumerate}
%\usepackage{centernot}
\usepackage{multirow}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{positioning,calc,chains}
\def\P{\mathcal{P}}
\def\GUi{G \cup \{i\}}
\def\nottransition#1{\stackrel{#1}{\not\longrightarrow}}%\centernot\longrightarrow}}
\def\transition#1{\stackrel{#1}{\longrightarrow}}
\def\Transition#1{\stackrel{#1}{\Longrightarrow}}
\def\forte{\sim}
\def\observationnelle{\approx}
\def\conf{\ \text{conf}\ }
\DeclareMathOperator{\Tr}{Tr}
\DeclareMathOperator{\Acc}{Acc}
\DeclareMathOperator{\Ref}{Ref}
\def\si{\quad\text{si}\quad}
\let\simule\gtrsim
\let\simuleobs\gtrapprox
\let\estsimulepar\gtrsim
\begin{document}

\section{Files d'attente et équivalences}
\subsection{$B2err\simule B1$}

$B2err$ simule $B1$ car~:
\begin{itemize}
\item $B2err \simule B1$~:
  \begin{itemize}
  \item $B1\transition{inp} outp;B1$, et il existe $B2err\transition{inp}outp;B2err$.
  \item Il faut donc que $outp;B2err \simule outp;B1$.
  \end{itemize}
\item $outp;B2err \simule outp;B1$~:
  \begin{itemize}
  \item $outp;B1\transition{outp}B1$, et il existe $outp;B2err\transition{outp}B2err$.
  \item Il faut donc que $B2err \simule B1$, ce qui est notre premier point.
  \end{itemize}
\end{itemize}

\subsection{$\neg\ B2err\conf B1$}
$B2err$ n'est pas conforme à $B1$ car $Ref(B2err, inp) = \{\{inp\}, \{outp\}\}$, alors que $Ref(B1,inp) = \{\{outp\}\}$,
et donc on n'a pas $Ref(B2err, inp) \subseteq Ref(B1, inp)$.

\subsection{$B2par$ respecte-t-il la spécification $B_20$ ?}
$B2par$ respecte la spécification $B_20$~:
\begin{enumerate}[i)]
\item Un message émis a toujours été reçu : pour qu'un message soit
  émis par la porte $outp$ du $B1$ de droite, il faut qu'il ait été
  reçu par la porte $mid$ du $B1$ de droite, synchronisé sur la porte
  $mid$ du $B1$ de gauche. Pour que le message soit émis sur la porte
  $mid$ du $B1$ de gauche, il faut qu'il ait au préalable été reçu sur
  la porte $inp$ du $B1$ de gauche.
\item Lorsqu'un $B1$ reçoit un message, il refuse les $inp$ jusqu'à ce
  qu'il ait effectué un $outp$. Comme la porte $outp$ du $B1$ de
  gauche est synchronisée sur la porte $inp$ du $B1$ de droite, cela
  signifie que si les deux $B1$ «contiennent» un message, celui de
  droite n'accepera pas d'$inp$ tant qu'il n'aura pas effectué
  d'$outp$, et en cascade, celui de gauche ne pourra pas faire
  d'$outp$ tant que celui de droite n'aura pas été «vidé», et donc
  celui de gauche refusera les $inp$. On ne pourra donc pas effectuer
  un $inp$ sur le $B1$ de gauche tant que les deux $B1$ «contiendront»
  un message, et il ne pourra donc pas y avoir plus de deux messages
  dans la file.
\end{enumerate}

\subsection{$B2seq \observationnelle B2par$}

{\raggedright
  $B2seq$ et $B2par$ sont observationnellement équivalents car~:
  \begin{itemize}
  \item $B2s \observationnelle B2par$~:
    \begin{itemize}
    \item $B2s\transition{inp} B21$,
      et il existe $B2par \Transition{\hat{inp}} (i;B1[inp,i] \ |[i]|\ B1[i,outp])$
      et $B2par \Transition{\hat{inp}} (B1[inp,i] \ |[i]|\ outp;B1[i,outp])$.
    \item Dans l'autre sens,
      $B2par \transition{inp} (i;B1[inp,i] \ |[i]|\ B1[i,outp])$
      et il existe $B2s\transition{inp} B21$.
    \item Il faut donc que $B21 \observationnelle (i;B1[inp,i] \ |[i]|\ B1[i,outp])$.
    \end{itemize}
  \item $B21 \observationnelle (i;B1[inp,i] \ |[i]|\ B1[i,outp])$~:
    \begin{itemize}
    \item $B21 \transition{inp} outp;B21$,
      et il existe
      $(i;B1[inp,i] \ |[i]|\  B1[i,outp]) \Transition{\hat{inp}} (i;B1[inp,i] \ |[i]|\ outp;B1[i,outp])$
    \item $B21 \transition{outp} B2s$, et
      et il existe
      $(i;B1[inp,i] \ |[i]|\  B1[i,outp]) \Transition{\hat{outp}} (B1[inp,i] \ |[i]|\ B1[i,outp])$,
      autrement dit
      $(i;B1[inp,i] \ |[i]|\  B1[i,outp]) \Transition{\hat{outp}} B2par$
    \item Dans l'autre sens,
      $(i;B1[inp,i] \ |[i]|\ B1[i,outp]) \transition{i} (B1[inp,i] \ |[i]|\ outp;B1[i,outp])$,
      mais comme on $\hat{i}$ est le chemin vide, on n'aura rien à vérifier sur $B21$.
    \item Il faut donc que $outp;B21 \observationnelle (i;B1[inp,i] \ |[i]|\ outp;B1[i,outp])$,
      et que $B2s \observationnelle B2par$. Cette deuxième condition est en fait notre premier point.
    \end{itemize}
  \item $outp;B21 \observationnelle (i;B1[inp,i] \ |[i]|\ outp;B1[i,outp])$~:
    \begin{itemize}
    \item $outp;B21 \transition{outp}B21$,
      et il existe
      $(i;B1[inp,i] \ |[i]|\ outp;B1[i,outp]) \Transition{\hat{outp}} (i;B1[inp,i] \ |[i]|\ B1[i,outp])$.
    \item Il faut donc que $B21 \observationnelle (i;B1[inp,i] \ |[i]|\ B1[i,outp])$, ce qui est notre deuxième point.
    \end{itemize}
  \end{itemize}
}

\subsection{$B2ent = B2par$}

Étant donné que $B2ent$ et $B2par$ ne commencent pas par l'action
interne, tester leur égalité au sens de la congruence observationnelle
revient à tester s'ils sont observationnellement équivalents.

On applique donc la même méthode que dans la section précédente, avec
les équivalences suivantes~:

{\raggedright
  \begin{itemize}
  \item Pour que $B2ent = B2par$, il faut qu'après $inp$ (la seule
    action que les systèmes peuvent exécuter dans leurs états respectifs),
    $(outp;B1[inp;outp] ||| B1[inp;outp]) \observationnelle (i;B1[inp;i]\ |[i]|\ B1[i,outp])$.
  \item Pour cela, il faut qu'après $outp$,
    $(B1[inp;outp] ||| B1[inp;outp]) \observationnelle (B1[inp;i]\ |[i]|\ B1[i,outp])$,
    autrement dit $B2ent = B2par$, ce qui est une condition plus faible que le premier point.

    Il faut aussi qu'après $inp$,
    $(outp;B1[inp;outp] ||| outp;B1[inp;outp]) \observationnelle (i;B1[inp;i]\ |[i]|\ outp;B1[i,outp])$.
    
    Dans l'autre sens, on peut ignorer ce qui se passe après le $i$ de
    $(i;B1[inp;i]\ |[i]|\ B1[i,outp])$, car $\hat{i}$ est le chemin vide,
    donc pas de conditions sur $(outp;B1[inp;outp] ||| B1[inp;outp])$.
  \item Occupons-nous de
    $(outp;B1[inp;outp] ||| outp;B1[inp;outp]) \observationnelle (i;B1[inp;i]\ |[i]|\ outp;B1[i,outp])$.
    Dans ces états, les systèmes ne peuvent faire qu'$outp$. Il faut donc qu'après $outp$,
    $(outp;B1[inp;outp] ||| B1[inp;outp]) \observationnelle (i;B1[inp;i]\ |[i]|\ B1[i,outp])$,
    ce qui correspond au deuxième point.
  \end{itemize}
}

\subsection{$B2par \simuleobs B1$}

$B2par$ simule observationnellement $B1$ car~:

\begin{itemize}
\item $B1\transition{inp}outp;B1$, et il existe
  $B2par\Transition{\hat{inp}}(i;B1[inp,i]\ |[i]| B1[i;outp])$ et
  $B2par\Transition{\hat{inp}}(B1[inp,i]\ |[i]| outp;B1[i;outp])$.
  Il suffit donc que soit $(i;B1[inp,i]\ |[i]| B1[i;outp]) \simuleobs outp;B1$,
  soit $(B1[inp,i]\ |[i]| outp;B1[i;outp]) \simuleobs outp;B1$. On prend
\item On prend cette deuxième possibilité.
  $outp;B1 \transition{outp} B1$, et il existe
  $(B1[inp,i]\ |[i]| outp;B1[i;outp])\Transition{\hat{outp}}(B1[inp,i]\ |[i]| B1[i;outp])$,
  autrement dit
  $(B1[inp,i]\ |[i]| outp;B1[i;outp])\Transition{\hat{outp}}B2par$, notre premier point.
\end{itemize}

\subsection{$\not B2par \conf B1$}

Pour que $B2par$ soit conforme à $B1$, car pour toute trace $t$ de $B1$,
$\Acc(B2par) \subset\subset \Ref(B1)$.

\begin{itemize}
\item Pour la trace $\emptyset$, $\Acc(B2par) = \Acc(B1) = \{\{inp\}\}$.
\item Pour la trace $inp$, $\Acc(B2par) = \{\{\}, \{inp,outp\}\}$, mais $\Acc(B1) = \{\{outp\}\}$.
\item Pour la trace $inp;outp$, on est revenu aux mêmes états que la trace $\emptyset$.
\end{itemize}
Pour le point 2 $\forall X \in \{\{\}, \{inp,outp\}\},\quad \{outp\} \not\subseteq X$, et donc $\neg(B2par \conf B1)$

\section{Exercice de l'atelier}

\subsection{Question 1}

\begin{figure}[h]
  \centering
  \includegraphics[width=15cm]{question1}
\end{figure}

\subsection{Question 2}

\begin{verbatim}
Maillet[prendM,poseM] := prendM;MailletOcc[prendM,poseM]
MailletOcc[prendM,poseM] := poseM;Maillet[prendM,poseM]
\end{verbatim}

\subsection{Question 3}

\begin{verbatim}
UtiliseMarteau[ent,sortie,prend,pose,prendM,poseM](travail:TRAVAIL) :=
  prend;sortie!fait(travail);pose;
  Ouvrier[ent,sortie,prend,pose,prendM,poseM]
\end{verbatim}

\begin{verbatim}
UtiliseMaillet[ent,sortie,prend,pose,prendM,poseM](travail:TRAVAIL) :=
  prendM;sortie!fait(travail);poseM;
  Ouvrier[ent,sortie,prend,pose,prendM,poseM]
\end{verbatim}

\begin{verbatim}
Commence[ent,sortie,prend,pose,prendM,poseM](travail:TRAVAIL) :=
  [facile(travail)] ->
    sortie!fait(travail);
    Ouvrier[ent,sortie,prend,pose,prendM,poseM]
  []
  [difficile(travail)] ->
    UtiliseMarteau[ent,sortie,prend,pose,prendM,poseM](travail)
  []
  [(not(facile(travail)) and not(difficile(travail)))] ->
    UtiliseOutil[ent,sortie,prend,pose,prendM,poseM](travail)
\end{verbatim}

\begin{verbatim}
Ouvrier[ent,sortie,prend,pose,prendM,poseM] :=
  ent?travail:TRAVAIL;
  Commence[ent,sortie,prend,pose,prendM,poseM](travail)
\end{verbatim}

\end{document}
